Summary
| Task |
Description |
Kind |
Typecheck |
Key finding |
| 1 (reused) |
Dockerfile ENV inspector |
agent |
✅ pass |
Clean use of async defineTool + node:fs/promises readFile with dual regex for KEY=VALUE and KEY VALUE forms |
| 2 (reused) |
NPM script prefix analyzer |
agent |
✅ pass |
as const on return values correctly preserves literal types for s.enum comparison |
| 3 (reused) |
INI config file parser |
agent |
✅ pass |
p.readInput correctly used with caller-supplied s.object input; tool parses sections/key-value cleanly |
| 4 (reused) |
Git reflog inspector |
agent |
✅ pass |
steering() addon appropriate for classification task; fallback ` |
| 5 (reused) |
Source line length auditor |
agent |
✅ pass |
Good use of find with p.bash + async defineTool; s.optional(s.string) for mostVerboseFile is correct |
| 6 (reused) |
NPM script dep workflow |
workflow |
✅ pass |
Initial errors: call incorrectly imported from "rig" (not exported), meta missing description, call(agent, undefined) not valid — all fixed |
| 7 (new) |
HTML form field extractor |
agent |
✅ pass |
Initial error: exactOptionalPropertyTypes requires explicit conditional assignment for optional fields rather than assigning undefined; fixed with guarded push pattern |
| 8 (new) |
Dotenv template validator |
agent |
✅ pass |
p.readOptional with empty string fallback is idiomatic; steering() appropriate for comparison/decision tasks |
| 9 (new) |
TypeScript namespace usage reporter |
agent |
✅ pass |
p.glob + per-file async defineTool is the correct fan-out pattern; augmentation detection via declare module/namespace regex is precise |
| 10 (new) |
Multi-stage artifact pipeline |
workflow |
✅ pass |
Initial errors: same call import issue + missing meta.description as task 6; fixed using body: async ({ call }) => destructuring and TypeScript-owned result assembly |
Problems encountered
Task 6 — NPM script dep workflow (initial failures)
What the code tried to do: A workflow() with two sequential agent calls passing structured output from scriptGraphBuilder to cycleDetector.
Errors:
error TS2305: Module '"rig"' has no exported member 'call'.
error TS2769: Property 'description' is missing in type '{ name: string; }' but required in type 'WorkflowMeta'.
error TS2345: Argument of type 'undefined' is not assignable to parameter of type 'string | PromptIntent | PromptBuilder'.
Root cause: Three distinct mistakes:
call is not exported from "rig" — it is destructured from the body({ call }) parameter or imported from "rig/globals".
workflow({ meta: { name } }) requires a description field in WorkflowMeta.
call(agent, undefined) is not valid — agents always receive a string prompt or typed input.
Fix: Used body: async ({ call }) => destructuring, added description to meta, passed a string prompt to agents.
Task 7 — HTML form field extractor (initial failure)
What the code tried to do: Push objects with optional name/id fields by assigning undefined values.
Errors:
error TS2379: exactOptionalPropertyTypes: 'string | undefined' is not assignable to type 'string'.
Root cause: With exactOptionalPropertyTypes: true, assigning undefined to an optional field that expects only string is rejected. The fix is to conditionally include the property only when the value is defined.
Fix: Build the entry object without optional fields, then conditionally assign them.
Task 10 — Multi-stage artifact pipeline (initial failures)
Same call import and meta.description errors as task 6. Fixed identically.
Improvement opportunities
Missing or undiscoverable schema helpers (s.*)
No missing helpers this run. The existing set (s.object, s.record, s.array, s.enum, s.optional, s.path, s.int, s.number, s.boolean, s.string) covered all needs.
Missing or undiscoverable prompt helpers (p.*)
p.readOptional with an empty-string fallback (task 8) is not clearly documented in SKILL.md's quick reference table. Consider adding it as a distinct row: p.readOptional(path, fallback?) — currently documented only in the focused reference.
Error message quality
The exactOptionalPropertyTypes error (TS2379) is confusing because it mentions a parameter type mismatch rather than naming the root cause directly. The fix (conditional assignment) is non-obvious from the error text alone.
The call import error (TS2305: Module '"rig"' has no exported member 'call') is clear, but nothing in the error guides toward the correct body({ call }) destructuring pattern. A short comment in SKILL.md would prevent this.
API ergonomics
call discoverability: The most common workflow mistake is import { call } from "rig". SKILL.md's composition rule could add a note: "call is available via body({ call }) destructuring — do not import it from "rig"."
workflow meta requirement: description being required in WorkflowMeta is not called out in the high-frequency decisions table. A brief reminder alongside the workflow() row would prevent the error.
call(agent, undefined) vs call(agent, string): It is unclear from the table that agents always require a non-null prompt. Noting "pass a string prompt or typed input; never undefined" would help.
Candidate lint rules
Rule: no-rig-call-import
- Invalid:
import { agent, call } from "rig";
- Valid:
body: async ({ call }) => { ... } or import { call } from "rig/globals";
- Why model-confusing:
call looks like a plain function export given how agent and workflow are imported. The destructuring pattern is non-obvious without reading the full reference.
- Safe autofix: possible — remove
call from the "rig" import and add import { call } from "rig/globals" as a fallback (with a comment to prefer destructuring inside body).
Documentation gaps
- SKILL.md high-frequency decisions table should add:
workflow meta → must include both name and description.
- SKILL.md should note that
call inside workflow.body is always obtained via destructuring, not via import.
p.readOptional deserves a row in the quick-reference table with an example fallback value.
Tasks run today
- (reused) Dockerfile ENV instruction parser
- (reused) NPM script command prefix analyzer
- (reused) INI config file parser
- (reused) Git reflog inspector
- (reused) Source file line length auditor
- (reused) NPM script dependency workflow
- (new) HTML form field extractor
- (new) Dotenv template validator
- (new) TypeScript namespace usage reporter
- (new) Multi-stage build artifact pipeline
Generated by Daily Rig Task Generator · sonnet46 164.3 AIC · ⌖ 9.36 AIC · ⊞ 6.8K · ◷
Summary
as conston return values correctly preserves literal types for s.enum comparisoncallincorrectly imported from"rig"(not exported),metamissingdescription,call(agent, undefined)not valid — all fixedexactOptionalPropertyTypesrequires explicit conditional assignment for optional fields rather than assigningundefined; fixed with guarded push patterndeclare module/namespaceregex is precisecallimport issue + missingmeta.descriptionas task 6; fixed usingbody: async ({ call }) =>destructuring and TypeScript-owned result assemblyProblems encountered
Task 6 — NPM script dep workflow (initial failures)
What the code tried to do: A
workflow()with two sequential agent calls passing structured output from scriptGraphBuilder to cycleDetector.Errors:
Root cause: Three distinct mistakes:
callis not exported from"rig"— it is destructured from thebody({ call })parameter or imported from"rig/globals".workflow({ meta: { name } })requires adescriptionfield inWorkflowMeta.call(agent, undefined)is not valid — agents always receive a string prompt or typed input.Fix: Used
body: async ({ call }) =>destructuring, addeddescriptionto meta, passed a string prompt to agents.Task 7 — HTML form field extractor (initial failure)
What the code tried to do: Push objects with optional
name/idfields by assigningundefinedvalues.Errors:
Root cause: With
exactOptionalPropertyTypes: true, assigningundefinedto an optional field that expects onlystringis rejected. The fix is to conditionally include the property only when the value is defined.Fix: Build the entry object without optional fields, then conditionally assign them.
Task 10 — Multi-stage artifact pipeline (initial failures)
Same
callimport andmeta.descriptionerrors as task 6. Fixed identically.Improvement opportunities
Missing or undiscoverable schema helpers (
s.*)No missing helpers this run. The existing set (
s.object,s.record,s.array,s.enum,s.optional,s.path,s.int,s.number,s.boolean,s.string) covered all needs.Missing or undiscoverable prompt helpers (
p.*)p.readOptionalwith an empty-string fallback (task 8) is not clearly documented in SKILL.md's quick reference table. Consider adding it as a distinct row:p.readOptional(path, fallback?)— currently documented only in the focused reference.Error message quality
The
exactOptionalPropertyTypeserror (TS2379) is confusing because it mentions a parameter type mismatch rather than naming the root cause directly. The fix (conditional assignment) is non-obvious from the error text alone.The
callimport error (TS2305: Module '"rig"' has no exported member 'call') is clear, but nothing in the error guides toward the correctbody({ call })destructuring pattern. A short comment in SKILL.md would prevent this.API ergonomics
calldiscoverability: The most common workflow mistake isimport { call } from "rig". SKILL.md's composition rule could add a note: "callis available viabody({ call })destructuring — do not import it from"rig"."workflowmeta requirement:descriptionbeing required inWorkflowMetais not called out in the high-frequency decisions table. A brief reminder alongside theworkflow()row would prevent the error.call(agent, undefined)vscall(agent, string): It is unclear from the table that agents always require a non-null prompt. Noting "pass a string prompt or typed input; neverundefined" would help.Candidate lint rules
Rule:
no-rig-call-importimport { agent, call } from "rig";body: async ({ call }) => { ... }orimport { call } from "rig/globals";calllooks like a plain function export given howagentandworkfloware imported. The destructuring pattern is non-obvious without reading the full reference.callfrom the"rig"import and addimport { call } from "rig/globals"as a fallback (with a comment to prefer destructuring insidebody).Documentation gaps
workflow meta→ must include bothnameanddescription.callinsideworkflow.bodyis always obtained via destructuring, not via import.p.readOptionaldeserves a row in the quick-reference table with an example fallback value.Tasks run today