Skip to content

[rig-tasks] Add 10 rig samples — 2026-08-05 - #356

Merged
pelikhan merged 1 commit into
mainfrom
rig-tasks/2026-08-05-f1c24959fec3fde7
Aug 8, 2026
Merged

[rig-tasks] Add 10 rig samples — 2026-08-05#356
pelikhan merged 1 commit into
mainfrom
rig-tasks/2026-08-05-f1c24959fec3fde7

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Added 10 new rig sample files to skills/rig/samples/.

# File Description Typecheck
1 371-npm-lifecycle-script-analyzer.md NPM lifecycle script classifier with s.record/s.enum output pass
2 372-ts-jsdoc-coverage-checker.md TypeScript JSDoc coverage via async tool + node:fs/promises pass
3 373-git-hook-installer.md Git hook installer with input s.array and async checkHooksDir tool pass
4 374-ts-type-guard-generator.md Type guard generator using p.readInput + p.writeInput pass
5 375-json-fixture-anonymizer.md JSON fixture anonymizer with field-name heuristics tool pass
6 376-csv-to-markdown-table.md CSV to Markdown table with parseCSVRow tool and s.boolean flag input pass
7 377-ts-interface-method-counter.md Interface method counter via p.glob + steering addon pass
8 378-git-tag-annotation-extractor.md Git tag annotation classifier returning s.enum type pass
9 379-jsonl-file-analyzer.md JSONL file line analyzer with p.readInput and repair addon pass
10 380-npm-peer-dep-conflict-checker.md NPM peer dep conflict checker with p.read + p.bash pass

Typecheck failures

No failures — all 10 programs passed typecheck.

Tasks run

  • (reused) NPM lifecycle script analyzer
  • (reused) TypeScript function JSDoc coverage checker
  • (reused) Git hook installer
  • (reused) TypeScript type guard generator
  • (reused) JSON fixture anonymizer
  • (reused) CSV to Markdown table converter
  • (new) TypeScript interface method counter
  • (new) Git tag annotation extractor
  • (new) JSONL file analyzer
  • (new) NPM peer dependency conflict checker

Generated by Daily Rig Task Generator · sonnet46 99.6 AIC · ⌖ 9.28 AIC · ⊞ 6.8K ·

Samples: npm-lifecycle-script-analyzer, ts-jsdoc-coverage-checker,
git-hook-installer, ts-type-guard-generator, json-fixture-anonymizer,
csv-to-markdown-table, ts-interface-method-counter, git-tag-annotation-extractor,
jsonl-file-analyzer, npm-peer-dep-conflict-checker

All 10/10 typecheck passed.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@pelikhan
pelikhan marked this pull request as ready for review August 8, 2026 18:44
@pelikhan
pelikhan merged commit 4d67a90 into main Aug 8, 2026
1 check passed
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor Author

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skills-Based Review 🧠

Applied /grill-with-docs — requesting changes on API misuse and a correctness bug.

📋 Key Themes & Findings

Blocking Issues

  • Missing p.writeInput in 3 samples (374, 375, 376): Each has an outputFile input and a generated-content output field, but no write intent in the template. The samples imply file persistence but silently omit it — readers will copy the pattern and get no file on disk.
  • p.write referenced in prose, not as an intent (373): The instructions text says to "write ... using p.write" but no p.write(...) call is embedded in the p template. The hooks will never be written to disk.
  • Semver parsing bug in 380: .replace(/[^0-9]/, "") strips only the first non-digit, turning "18.2.0" into 182, not 18. All major-version comparisons against real package versions will produce spurious conflicts.

Positive Highlights

  • ✅ Good variety of patterns across the batch: async tool handlers, s.record/s.enum schemas, repair() and steering() addons, p.glob, p.readInput
  • s.int, s.path, s.optional used consistently and appropriately
  • ✅ All 10 samples pass typecheck per the PR description
  • ✅ Tool handlers are deterministic and well-scoped; parameters schemas are explicit

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · sonnet46 56.7 AIC · ⌖ 7.4 AIC · ⊞ 6.3K
Comment /matt to run again

}
// Simple semver major check
const expectedMajor = parseInt(expectedRange.replace(/[^0-9]/, ""), 10);
const foundMajor = parseInt(foundVersion.replace(/[^0-9]/, ""), 10);

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/grill-with-docs] foundVersion.replace(/[^0-9]/, "") strips only the first non-digit, so "18.2.0" becomes "182.0"parseInt182, not 18. This makes the major-version comparison produce false conflicts for virtually all real version strings.

💡 Fix: use `.match(/\d+/)` instead
const expectedMajor = parseInt(expectedRange.match(/\d+/)?.[0] ?? "", 10);
const foundMajor    = parseInt(foundVersion.match(/\d+/)?.[0]  ?? "", 10);

This correctly extracts 18 from both "^18.0.0"and"18.2.0"`.

instructions: p`Install git hooks into .git/hooks from the provided input.

First call checkHooksDir to verify the hooks directory is accessible.
For each hook in input.hooks, write the script to .git/hooks/<name> using p.write.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/grill-with-docs] The instruction text says "write the script to .git/hooks/<name> using p.write" but no p.write(...) intent is embedded in the p...`` template. The LLM will see prose mentioning p.write but won't receive the actual file-write instruction that the intent generates — hooks will not be persisted to disk.

💡 Fix

Embed the intent in the template or extend the checkHooksDir tool to also perform the write. For a static-path demonstration:

instructions: p`Check hooks dir: ${p.write(".git/hooks/pre-commit", script)}`

For dynamic paths, p.writeInput resolves a path from an input field — use one field per hook, or rethink the approach to use a tool-based write instead.

tools: [extractInterfaces],
output: s.object({
generatedGuards: s.array(s.string),
outputFile: s.path,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/grill-with-docs] outputFile appears in both the input and output schemas but no p.writeInput or p.writeOutput intent is present in the instructions template — the generated source is captured in generatedSource but never written to disk. This sample appears to demonstrate file persistence but silently omits it.

💡 Fix: add p.writeInput to persist the output

Add the intent to the instructions template:

instructions: p`Generate TypeScript type guards...

Source file:
${p.readInput("sourceFile")}

${p.writeInput("outputFile", "generatedSource")}
...`

p.writeInput("outputFile", "generatedSource") writes the generatedSource output field to the path supplied in input.outputFile after the model produces valid output. Without it, callers must write the file themselves — which the sample doesn't document.

output: s.object({
fieldsAnonymized: s.int,
totalRecords: s.int,
outputPath: s.path,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/grill-with-docs] Same missing-write pattern as 374: outputFile is in the input and outputPath echoes it in the output, but the anonymized JSON in result is never written to disk — no p.writeInput intent is in the template. The sample implies file-level output but doesn't deliver it.

💡 Fix

Add ${p.writeInput("outputFile", "result")} to the instructions template so the anonymized JSON is persisted after generation. Drop outputPath from the output schema (it adds nothing if the write intent already handles it).

output: s.object({
rowCount: s.int,
columnCount: s.int,
outputFile: s.path,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/grill-with-docs] outputFile is in both input and output schemas but the generated markdownTable is never written to disk — no p.writeInput in the template. Three samples in this batch (374, 375, 376) share this same pattern; consider it a systematic gap.

💡 Fix

Add ${p.writeInput("outputFile", "markdownTable")} to the instructions template. This is the idiomatic way to persist LLM-generated content to a caller-supplied path in Rig.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant