Skip to content

[rig-tasks] Add 10 rig samples — 2026-07-30 - #311

Merged
pelikhan merged 1 commit into
mainfrom
rig-tasks/2026-07-30-94b556e8a01eebe6
Jul 30, 2026
Merged

[rig-tasks] Add 10 rig samples — 2026-07-30#311
pelikhan merged 1 commit into
mainfrom
rig-tasks/2026-07-30-94b556e8a01eebe6

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Summary

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

# File Description Typecheck
1 320-git-blame-ownership.md Git blame ownership analyzer with defineTool + steering() pass
2 321-ts-generic-type-extractor.md TypeScript generic type extractor with async defineTool + repair() pass
3 322-shell-script-validator.md Shell script validator with async defineTool + steering() pass
4 323-ci-flake-triager.md CI flake triager with p.bash + p.readOptional + repair() pass
5 324-config-drift-reconciler.md Config drift reconciler with p.readInput / p.writeInput pass
6 325-release-note-enricher.md Release note enricher with [steering(), repair()] addons pass
7 326-ssh-config-host-parser.md SSH config host parser with p.readOptional + defineTool + repair() pass
8 327-vitest-test-file-classifier.md Vitest test file classifier with p.glob + async defineTool + steering() pass
9 328-git-file-at-revision.md Git file at revision extractor with p.bash + defineTool + repair() pass
10 329-json-schema-structure-validator.md JSON schema structure validator with p.readInput + defineTool + repair() pass

Typecheck failures

None — all 10 samples passed typecheck.

Tasks run

  • (reused) Git blame ownership analyzer
  • (reused) TypeScript generic type extractor
  • (reused) Shell script validator
  • (reused) CI flake triager
  • (reused) Config drift reconciler
  • (reused) Release note enricher
  • (new) SSH config host parser
  • (new) Vitest test file classifier
  • (new) Git file at revision extractor
  • (new) JSON schema structure validator

Generated by Daily Rig Task Generator · sonnet46 111.2 AIC · ⌖ 9.35 AIC · ⊞ 6.8K ·

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@pelikhan
pelikhan marked this pull request as ready for review July 30, 2026 20:45
@pelikhan
pelikhan merged commit cbfaea6 into main Jul 30, 2026
1 check passed
@github-actions

github-actions Bot commented Jul 30, 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 three correctness issues in sample code.

📋 Key Themes & Highlights

Issues found

  • p.bash + runtime inputs mismatch (320, 328): Two samples use a static p.bash hint referencing a hard-coded path instead of input.* fields — teaching an incorrect pattern. p.bash strings are resolved at prompt-build time and cannot reference runtime inputs.
  • p.writeInput output field mismatch (324): p.writeInput("outputFile", "patch") references a field "patch" that does not exist in the output schema; the write intent will silently no-op at runtime.
  • JSON Schema "integer" vs JS typeof (329): typeof 42 === "number" not "integer", so any schema field typed "integer" will always report a false type error in the validator tool.

Positive highlights

  • ✅ Excellent variety of patterns across 10 samples (async tools, glob, readOptional, readInput, multi-addon)
  • ✅ All samples pass typecheck
  • ✅ Consistent use of s.* helpers and model: "small" throughout
  • ✅ 325-release-note-enricher correctly combines [steering(), repair()] addons
  • ✅ 326-ssh-config-host-parser has clean idiomatic regex parsing in the tool handler

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

model: "small",
input: s.object({ filePath: s.path, revision: s.string }),
instructions: p`Retrieve the file content at the given git revision.
File content: ${p.bash("git show HEAD:README.md 2>/dev/null | head -3 || echo 'example'")}

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 p.bash command hard-codes HEAD:README.md instead of using the agent's input.filePath and input.revision inputs — so the sample misleads readers about how to wire runtime inputs into prompt intents.

💡 Suggestion

p.bash is a static string resolved at prompt-build time; it cannot reference runtime input.* values. A cleaner approach: omit the inline bash hint and let the LLM construct git show <revision>:<path> itself from the declared input schema. This is consistent with the p.bash invariant (INV:prompt-intents: p.* are declarative placeholders, never executed in-process).

}
for (const [field, propSchema] of Object.entries(properties)) {
if (field in dataObj && propSchema.type) {
const actual = typeof dataObj[field];

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] typeof returns "number" for both integers and floats, but JSON Schema distinguishes "integer" from "number". A data field declared as {"type":"integer"} in the schema will always fail this check even if the value is a valid integer like 42.

💡 Suggestion

Map "integer" to the JS typeof result "number" before comparing:

const expectedType = propSchema.type === "integer" ? "number" : propSchema.type;
if (actual !== expectedType) {
  errors.push({ field, expected: propSchema.type, actual });
}

This makes the sample an accurate validator and avoids teaching readers a subtle JSON Schema vs JS type mismatch.

instructions: p`Compare the baseline config file against the active config file.
Baseline: ${p.readInput("baseFile")}
Active: ${p.readInput("activeFile")}
Identify keys that have drifted (changed values). Write a corrected patch to the output file: ${p.writeInput("outputFile", "patch")}

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] p.writeInput("outputFile", "patch") uses "patch" as the contentOutputField name, but the output schema has no field named patch — it has changedKeys and summary. The write intent will silently find nothing to write at runtime.

💡 Suggestion

Either rename the output field to patch and give it a s.string type, or change the intent to reference an actual output field:

// Option A: add a patch field to the output schema
output: s.object({
  patch: s.string,
  changedKeys: s.record(...),
  summary: s.object(...),
}),
// then reference it correctly:
${p.writeInput("outputFile", "patch")}

Without a matching output field, this sample incorrectly demonstrates p.writeInput.

model: "small",
input: s.object({ filePath: s.string }),
instructions: p`Analyze git blame for the file at input.filePath.
Run: ${p.bash("git blame --line-porcelain HEAD -- . 2>/dev/null | head -5 || echo 'no git'")}

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 p.bash probe runs git blame --line-porcelain HEAD -- . (the whole repo) as a static example hint, but the agent's input supplies filePath. A reader following this sample would expect the bash intent to target the specific file — but p.bash strings are static and cannot reference input.* values at build time.

💡 Suggestion

Make the limitation explicit: either add a comment noting that the bash hint is illustrative only, or remove it and rely on the parseBlameOutput tool receiving the blame text from the LLM (which will construct the real git blame command from the declared input.filePath). Mixing a static glob-level bash hint with a per-file input creates a conceptual mismatch for readers.

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