Skip to content

[rig-tasks] Daily rig evaluation — 2026-08-28 — 10/10 passed #503

Description

@github-actions

Summary

Task Description Kind Typecheck Key finding
1 (reused) Git blame line age analyzer agent ✅ pass defineTool + p.glob + s.record output; used node:child_process execSync cleanly
2 (reused) TS mapped type extractor agent ✅ pass Regex for { [K in ...] } patterns with isReadonly detection; steering() addon
3 (reused) Dotenv drift detector agent ✅ pass p.readOptional + p.bash grep combination; s.enum("declared","undeclared","unused") classification
4 (reused) Vitest snapshot reporter workflow workflow ✅ pass (after fix) Initial failure: missing description in WorkflowMeta and output field not valid on workflow(); call() returns T|null requiring filter guard
5 (reused) Git stale branch reporter agent ✅ pass defineTool with execSync per branch; s.enum("fresh","recent","stale","ancient") age bucketing
6 (reused) TS abstract class finder agent ✅ pass Regex for abstract class + abstract method patterns; steering() addon
7 (new) Git tag message extractor agent ✅ pass defineTool + git cat-file tag; s.enum("annotated","lightweight") classification
8 (new) Parallel dep audit workflow workflow ✅ pass (after fix) Same WorkflowMeta.description required error + output field; null guards needed after Promise.all
9 (new) TS union type writer agent ✅ pass p.writeInput for dynamic output path; input schema with s.path typed outputFile
10 (new) JSON schema field classifier agent ✅ pass (after fix) Initial failure: schema.properties accessed via dot notation triggering TS4111 (index signature access); fixed to schema["properties"]

Problems encountered

Task 4 & 8 — Workflow API misuse (initial failure)

What the code tried to do: Both workflow programs passed an output schema field to workflow() and used meta: { name } without description.

Errors:

error TS2769: No overload matches this call.
  Property 'description' is missing in type '{ name: string; }' but required in type 'WorkflowMeta'.
error TS2769: Object literal may only specify known properties, and 'output' does not exist in type 'WorkflowWithoutInputSpec<...>'.
error TS18047: 'result' is possibly 'null'.

Root cause: WorkflowMeta requires both name and description. The workflow() function does not accept an output field — the return type is inferred from the body. Additionally, call() returns T | null, so array operations after Promise.all need a .filter() null guard before reduce().

Fix applied: Added description to meta, removed output from workflow() spec, added if (!result) return null guards, and used type predicate filter((r): r is T => r !== null).

Task 10 — Index signature access (initial failure)

Error:

error TS4111: Property 'properties' comes from an index signature, so it must be accessed with ['properties'].

Root cause: JSON.parse returns any, but the typed cast Record<string, unknown> triggers noPropertyAccessFromIndexSignature for dot-notation access on index signatures.

Fix applied: Changed schema.propertiesschema["properties"].


Improvement opportunities

Missing or undiscoverable schema helpers (s.*)

  • No issues this run. s.enum, s.optional, s.record, s.path, s.int, s.boolean all worked as expected.

Missing or undiscoverable prompt helpers (p.*)

  • p.writeInput was used correctly but its documentation is subtle — the first arg is the input field name holding the path, not the path itself. A clearer name like p.writeToInputPath would be more self-documenting.

Error message quality

  • The TS2769 overload error for workflow() with output present is unhelpful — it dumps inferred types rather than saying "workflow() does not accept an output field; output type is inferred from the body return type." A dedicated diagnostic or JSDoc @deprecated-style annotation would help.
  • WorkflowMeta missing description is clear from the TS2769 message, but since name alone seems sufficient conceptually, it surprises model-generated code repeatedly.

API ergonomics

  • workflow() output inference vs explicit: Every generated workflow tries to pass output: to workflow(). An explicit output parameter (even if optional and only used for documentation/validation) would eliminate this recurring error class.
  • WorkflowMeta.description required: Consider making description optional (with a lint warning if absent) rather than a hard type error. The pattern meta: { name: "..." } is natural and fails silently confusingly.
  • call() returns T | null: Every workflow body needs null guards. A callOrThrow() variant that throws on null would reduce boilerplate in happy-path workflows.

Candidate lint rules

Rule: workflow-no-output-field

  • Invalid: workflow({ meta, body, output: s.object({...}) })
  • Valid: workflow({ meta, body }) — output inferred from body
  • Why model-confusing: agent() accepts output, so by analogy workflow() should too. The error message doesn't hint at the root cause.
  • Autofix: Remove the output field from workflow() call.

Rule: workflow-meta-requires-description

  • Invalid: meta: { name: "foo" }
  • Valid: meta: { name: "foo", description: "..." }
  • Why model-confusing: name alone looks complete; description requirement is not obvious from usage patterns.
  • Autofix: Insert a placeholder description: "" (not safe — better as a warning only).

Documentation gaps

  • SKILL.md mentions workflow({ meta, input?, body }) but doesn't call out that output is not a valid workflow field. Adding a negative example would prevent the recurring error.
  • The WorkflowMeta required fields (name, description) should appear in the SKILL.md decision table or canonical workflow example.
  • call() returning T | null is mentioned in composition.md but not reinforced in SKILL.md's workflow pattern — add a note that if (!result) return null is the standard guard pattern.

Tasks run today

  • (reused) Git blame line age analyzer
  • (reused) TypeScript mapped type extractor
  • (reused) dotenv vs process.env drift detector
  • (reused) Vitest snapshot count reporter workflow
  • (reused) Git stale branch age reporter
  • (reused) TypeScript abstract class finder
  • (new) Git tag message extractor
  • (new) Parallel dependency audit workflow
  • (new) TypeScript union type writer
  • (new) JSON schema field classifier

Generated by Daily Rig Task Generator · sonnet46 167.8 AIC · ⌖ 10.2 AIC · ⊞ 6.8K ·

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    项目

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions