Summary
| Task |
Description |
Kind |
Typecheck |
Key finding |
| 1 (reused) |
Shell shebang glob validator |
agent |
✅ pass |
Clean use of p.glob + defineTool + repair(); shebangLine typed as s.optional(s.string) correctly |
| 2 (reused) |
Git log graph summarizer |
agent |
✅ pass |
steering()+repair() addon order correct; handler return typed with as const |
| 3 (reused) |
TypeScript complexity scorer |
agent |
✅ pass |
s.record + s.enum for complexity; topContributors s.array(s.string) well-formed |
| 4 (reused) |
Parallel multi-tool workflow |
workflow |
✅ pass (after fix) |
Initial use of call/parallel imported from "rig" — these are destructured from body args; also parallel requires homogeneous return types |
| 5 (reused) |
Zlib compression analyzer |
agent |
✅ pass |
node:zlib deflateSync usage correct; compressionClass s.enum with 4 values |
| 6 (reused) |
File crypto hash reporter |
agent |
✅ pass |
node:crypto createHash with optional algorithm input; s.record output well-formed |
| 7 (new) |
Source line length auditor |
agent |
✅ pass |
p.glob + defineTool; worstLineNumber s.int correctly used |
| 8 (new) |
Workspace symlink inventory |
agent |
✅ pass |
p.bash find -type l; readlink/realpath in tool handler; broken s.boolean |
| 9 (new) |
XML attribute extractor |
agent |
✅ pass (after fix) |
Unused variable tagPattern caused TS6133; removed to fix |
| 10 (new) |
YAML anchor alias reporter |
agent |
✅ pass |
p.glob for both .yml and .yaml; regex anchor/alias detection; steering()+repair() |
Problems encountered
Task 4 — Parallel multi-tool workflow (3 failures before pass)
What it tried to do: A workflow that runs two agents (fileCountAgent, envHealthAgent) with parallel() and combines results.
Error 1: Module '"rig"' has no exported member 'call' — call and parallel are not top-level "rig" exports; they are destructured from the body async function parameters.
Error 2: parallel in rig requires all thunks to return the same type (homogeneous array). Running two agents with different output schemas via parallel() causes a TypeScript error.
Fix: Switched from parallel() to sequential await call(...) calls, which avoids the type constraint and is clearer anyway.
Error 3: meta required a description field — WorkflowMeta requires both name and description.
Root cause: The call/parallel API is destructured from body parameters, and parallel is typed for homogeneous arrays. The SKILL.md mentions this but the distinction is easy to miss.
Task 9 — XML attribute extractor (1 failure before pass)
What it tried to do: An agent with a defineTool parseXmlAttributes that uses regex to scan XML.
Error: TS6133: 'tagPattern' is declared but its value is never read — a leftover regex variable was declared but superseded by another pattern.
Fix: Removed the unused tagPattern variable.
Improvement opportunities
Missing or undiscoverable schema helpers (s.*)
No missing helpers encountered. s.record, s.optional, s.enum, s.int, s.number, s.path, s.array, s.boolean, s.string all worked cleanly.
Missing or undiscoverable prompt helpers (p.*)
p.readInput was used for reading a caller-supplied file path (task 9). This is correct but easy to confuse with p.read. The SKILL.md table covers this, but a short note clarifying "use p.readInput when the file path comes from input, not a known literal" would help.
Error message quality
'call' is not exported from 'rig': When a developer imports call at the top of a workflow file, the error says it's not exported but doesn't hint that it's available via body destructuring. A more helpful error: "Did you mean to destructure call from the workflow body parameters?"
WorkflowMeta.description missing: Reasonable error, but SKILL.md doesn't show description in the workflow example — only in the reference files.
API ergonomics
parallel() homogeneous type constraint: Running two agents with different output types via parallel() fails. Developers naturally want to parallelize heterogeneous agents. A parallelAll variant or typed tuple overloads would improve ergonomics.
workflow meta.description required: Having description be required is strict; it's not shown in the canonical example. Either make it optional or add it to the SKILL.md canonical workflow snippet.
call in workflow body: The body-destructuring pattern for call/parallel/phase is non-obvious for developers familiar with top-level imports. A note in SKILL.md like "workflow body receives { call, parallel, phase, pipeline } — do not import these from 'rig'" would prevent repeated mistakes.
Candidate lint rules
Rule: no-top-level-workflow-call-import
- Invalid:
import { call, parallel } from "rig" inside a workflow file
- Valid:
body: async ({ call, parallel }) => { ... }
- Why model-confusing: The rig runtime provides
call/parallel via body parameters for workflow context routing; top-level imports don't exist and produce a confusing "not exported" error.
- Autofix possible: Yes — remove the import and add destructuring to the body signature if missing.
Documentation gaps
SKILL.md canonical workflow example should include description in meta since it's required.
- The note "do not import
call/parallel from 'rig' inside workflow files" should appear in the construction rules section.
parallel() type homogeneity constraint should be documented with an explicit note and a workaround (sequential calls or Promise.all with explicit typing).
Tasks run today
- (reused) Shell script glob validator — uses p.glob for **/*.sh files, defineTool checkShebangLine, repair addon
- (reused) Git log graph summarizer — uses p.bash git log --oneline --graph -20, defineToolparseGraphLine, steering+repair
- (reused) TypeScript complexity scorer — uses p.glob src/**/*.ts, defineTool scoreFileComplexity, repair addon
- (reused) Workflow parallel multi-tool tester — workflow with fileCountAgent and envHealthAgent
- (reused) Zlib file compression analyzer — node:zlib deflateSync, compressionClass s.enum, repair addon
- (reused) File crypto hash reporter — node:crypto createHash, s.record output, repair addon
- (new) Source line length auditor — p.glob **/*.ts, defineTool auditFileLengths, repair addon
- (new) Workspace symlink inventory — p.bash find -type l, defineTool resolveSymlink with readlink/realpath
- (new) XML attribute extractor — p.readInput, defineTool parseXmlAttributes with regex
- (new) YAML anchor and alias reporter — p.glob /*.yml+/*.yaml, defineTool scanYamlAnchors, steering+repair
Generated by Daily Rig Task Generator · sonnet46 127.3 AIC · ⌖ 9.34 AIC · ⊞ 6.8K · ◷
Summary
as constcall/parallelimported from"rig"— these are destructured from body args; alsoparallelrequires homogeneous return typestagPatterncaused TS6133; removed to fixProblems encountered
Task 4 — Parallel multi-tool workflow (3 failures before pass)
What it tried to do: A
workflowthat runs two agents (fileCountAgent,envHealthAgent) withparallel()and combines results.Error 1:
Module '"rig"' has no exported member 'call'—callandparallelare not top-level"rig"exports; they are destructured from thebodyasync function parameters.Error 2:
parallelin rig requires all thunks to return the same type (homogeneous array). Running two agents with different output schemas viaparallel()causes a TypeScript error.Fix: Switched from
parallel()to sequentialawait call(...)calls, which avoids the type constraint and is clearer anyway.Error 3:
metarequired adescriptionfield —WorkflowMetarequires bothnameanddescription.Root cause: The
call/parallelAPI is destructured from body parameters, andparallelis typed for homogeneous arrays. The SKILL.md mentions this but the distinction is easy to miss.Task 9 — XML attribute extractor (1 failure before pass)
What it tried to do: An agent with a
defineTool parseXmlAttributesthat uses regex to scan XML.Error:
TS6133: 'tagPattern' is declared but its value is never read— a leftover regex variable was declared but superseded by another pattern.Fix: Removed the unused
tagPatternvariable.Improvement opportunities
Missing or undiscoverable schema helpers (
s.*)No missing helpers encountered.
s.record,s.optional,s.enum,s.int,s.number,s.path,s.array,s.boolean,s.stringall worked cleanly.Missing or undiscoverable prompt helpers (
p.*)p.readInputwas used for reading a caller-supplied file path (task 9). This is correct but easy to confuse withp.read. The SKILL.md table covers this, but a short note clarifying "usep.readInputwhen the file path comes frominput, not a known literal" would help.Error message quality
'call' is not exported from 'rig': When a developer importscallat the top of a workflow file, the error says it's not exported but doesn't hint that it's available via body destructuring. A more helpful error: "Did you mean to destructurecallfrom the workflow body parameters?"WorkflowMeta.descriptionmissing: Reasonable error, but SKILL.md doesn't showdescriptionin the workflow example — only in the reference files.API ergonomics
parallel()homogeneous type constraint: Running two agents with different output types viaparallel()fails. Developers naturally want to parallelize heterogeneous agents. AparallelAllvariant or typed tuple overloads would improve ergonomics.workflowmeta.descriptionrequired: Havingdescriptionbe required is strict; it's not shown in the canonical example. Either make it optional or add it to the SKILL.md canonical workflow snippet.callin workflow body: The body-destructuring pattern forcall/parallel/phaseis non-obvious for developers familiar with top-level imports. A note in SKILL.md like "workflow body receives{ call, parallel, phase, pipeline }— do not import these from'rig'" would prevent repeated mistakes.Candidate lint rules
Rule:
no-top-level-workflow-call-importimport { call, parallel } from "rig"inside a workflow filebody: async ({ call, parallel }) => { ... }call/parallelvia body parameters for workflow context routing; top-level imports don't exist and produce a confusing "not exported" error.Documentation gaps
SKILL.mdcanonical workflow example should includedescriptioninmetasince it's required.call/parallelfrom'rig'inside workflow files" should appear in the construction rules section.parallel()type homogeneity constraint should be documented with an explicit note and a workaround (sequential calls orPromise.allwith explicit typing).Tasks run today