Skip to content

[rig-tasks] Add 10 rig samples — 2026-08-23 - #475

Merged
pelikhan merged 1 commit into
mainfrom
rig-tasks/2026-08-23-0aa20989f815bb51
Aug 24, 2026
Merged

[rig-tasks] Add 10 rig samples — 2026-08-23#475
pelikhan merged 1 commit into
mainfrom
rig-tasks/2026-08-23-0aa20989f815bb51

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Summary

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

# File Description Kind Typecheck
1 451-shell-shebang-glob-validator.md Shell shebang glob validator agent pass
2 452-git-log-graph-summarizer.md Git log graph summarizer agent pass
3 453-ts-complexity-scorer.md TypeScript complexity scorer agent pass
4 454-parallel-multi-tool-workflow.md Parallel multi-tool workflow workflow pass
5 455-zlib-compression-analyzer.md Zlib compression analyzer agent pass
6 456-file-crypto-hash-reporter.md File crypto hash reporter agent pass
7 457-source-line-length-auditor.md Source line length auditor agent pass
8 458-workspace-symlink-inventory.md Workspace symlink inventory agent pass
9 459-xml-attribute-extractor.md XML attribute extractor agent pass
10 460-yaml-anchor-alias-reporter.md YAML anchor alias reporter agent pass

Typecheck failures

Task 4 — Parallel multi-tool workflow (fixed before commit)

Initial generation imported call/parallel from "rig" (not valid — these are workflow body params). Also used parallel() with heterogeneous agent output types (not supported). Fixed by switching to sequential await call(...) calls. Also required meta.description which was missing.

Task 9 — XML attribute extractor (fixed before commit)

Declared an unused tagPattern regex variable (TS6133). Fixed by removing the dead variable.

Tasks run

  • (reused) Shell script glob validator — p.glob, defineTool, repair
  • (reused) Git log graph summarizer — p.bash, defineTool, steering+repair
  • (reused) TypeScript complexity scorer — p.glob, defineTool, repair
  • (reused) Parallel multi-tool workflow — workflow, two subagents, phase
  • (reused) Zlib compression analyzer — node:zlib, defineTool, repair
  • (reused) File crypto hash reporter — node:crypto, p.glob, repair
  • (new) Source line length auditor — p.glob, defineTool, repair
  • (new) Workspace symlink inventory — p.bash, defineTool readlink/realpath
  • (new) XML attribute extractor — p.readInput, defineTool regex
  • (new) YAML anchor and alias reporter — p.glob, defineTool, steering+repair

Generated by Daily Rig Task Generator · sonnet46 127.3 AIC · ⌖ 9.34 AIC · ⊞ 6.8K ·

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@pelikhan
pelikhan marked this pull request as ready for review August 24, 2026 11:34
@pelikhan
pelikhan merged commit 79dfdc4 into main Aug 24, 2026
1 check passed
@github-actions

github-actions Bot commented Aug 24, 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 and /codebase-design — no blocking issues, but there are recurring patterns worth addressing.

📋 Key Themes

Key Themes

  • Unused input fields (455, 456): targetDir is declared in input but the instructions hardcode find . / p.glob("**/*"). Readers will copy this pattern and be confused when the input value has no effect.
  • Naming mismatch (454): parallel-multi-tool-workflow performs sequential await calls, not parallel ones. The PR description explains this was a fix for a type error, but the name wasn't updated.
  • Unbounded glob (456): p.glob("**/*") with no depth limit or exclusion patterns is risky in real workspaces (node_modules, .git, large binaries). 455 already uses find with -maxdepth 3 — 456 should follow suit.
  • Heuristic caveat missing (453): The ternary regex /?[^:]+:/g false-positives on TypeScript type annotations. Fine for a sample, but a brief comment would set expectations.

Positive Highlights

  • repair() addon consistently used on all agents that parse structured output
  • node: import prefix used throughout
  • ✅ Good variety of patterns: p.bash, p.glob, p.readInput, steering, workflow phases
  • ✅ Typecheck failures caught and fixed before commit
  • ✅ 458 resolveSymlink has a clean broken-link guard with .catch()

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

const zlibCompressionAnalyzer = agent({
model: "small",
input: s.object({ targetDir: s.string }),
instructions: p`List files to analyze using: ${p.bash("find . -maxdepth 3 -type f -not -path './.git/*' | head -30")}. Call measureCompressionRatio for each file path. Return the full analysis.`,

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] targetDir is declared in input but never used — the instruction hardcodes find . regardless. This makes the input a no-op, misleading readers who use this as a pattern.

💡 Suggested fix

Either remove the targetDir input field and document that the agent scans from cwd, or thread it into the command with p.readInput("targetDir").


// Agent role: Compute cryptographic hashes for all files in targetDir.
const fileCryptoHashReporter = agent({
model: "small",

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 issue as 455: targetDir and algorithm are declared in input but p.glob("**/*") ignores targetDir, and the instruction says to use algorithm from input but it is only passed via prompt text — the LLM may not reliably forward it to the tool.

💡 Suggested fix

For targetDir: scope the glob to p.readInput("targetDir") or remove the input field. For algorithm: since tool parameter defaults handle it, either remove it from input or wire it explicitly with p.readInput("algorithm").

const parallelMultiToolWorkflow = workflow({
meta: { name: "parallel-multi-tool-workflow", description: "Run file count and env health agents and combine results" },
body: async ({ call, phase }) => {
phase("Gather");

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.

[/codebase-design] The name parallelMultiToolWorkflow and file name 454-parallel-multi-tool-workflow imply parallel execution, but both call() invocations are sequential await — there is no parallelism. This is a naming/expectation mismatch that could confuse readers looking for a parallel pattern.

💡 Suggested fix

Either rename to 454-sequential-multi-agent-workflow, or if parallel execution is desired, check whether Promise.all([call(...), call(...)]) is supported by the runtime for concurrent agent calls.

parameters: s.object({ filePath: s.path, algorithm: s.optional(s.string) }),
handler: async ({ filePath, algorithm = "sha256" }: { filePath: string; algorithm?: string }) => {
const buf = await readFile(filePath);
const hash = createHash(algorithm).update(buf).digest("hex");

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.glob("**/*") will match all files including binaries, node_modules, .git objects, etc. Without a maxdepth or exclusion, this risks flooding the LLM with thousands of paths and potentially hashing very large binary files.

💡 Suggested fix

Bound the glob or use a bash command with exclusions, similar to 455:

instructions: p`Find files to hash: ${p.bash("find . -maxdepth 3 -type f -not -path './.git/*' -not -path './node_modules/*' | head -30")}`,

parameters: s.object({ filePath: s.path }),
handler: async ({ filePath }: { filePath: string }) => {
const content = await readFile(filePath, "utf8");
const nestedBraces = (content.match(/\{[^{}]*\{/g) ?? []).length;

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 regex /?[^:]+:/g for ternary detection will false-positive on object literals, type annotations, and template strings — common in TypeScript. The scoring formula thus systematically over-counts complexity in type-heavy files.

💡 Suggested fix

This is a sample, so perfect accuracy isn't required, but a brief comment acknowledging the limitation would help readers calibrate expectations:

// Heuristic only — type annotations and object literals may inflate ternary count
const ternaries = (content.match(/\?[^:]+:/g) ?? []).length;

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