Skip to content

[rig-tasks] Daily rig evaluation — 2026-08-07 — 10/10 passed #364

Description

@github-actions

Summary

Task Description Kind Typecheck Key finding
1 (reused) Git file ownership mapper agent ✅ pass Clean use of execSync in defineTool, p.glob for discovery, steering() addon
2 (reused) GitHub Actions workflow input validator agent ✅ pass (after fix) exactOptionalPropertyTypes requires string | undefined not just string | undefined on optional field — fixed by widening the local type annotation
3 (reused) TypeScript dead export finder agent ✅ pass Good combo of p.glob + p.bash for discovery, plus steering() + repair() both present
4 (reused) package.json scripts documenter agent ✅ pass as const return from handler with union type preserved enum contract correctly
5 (reused) Git diff stats summarizer agent ✅ pass s.enum on changeType with as const in handler worked cleanly
6 (reused) Dotenv template generator agent ✅ pass p.readOptional + p.glob combo — good pattern for "maybe exists" files
7 (new) TOML config file key extractor agent ✅ pass Nested s.record(s.record(s.string)) compiled cleanly; p.readInput used correctly
8 (new) CSV column statistics reporter agent ✅ pass s.optional(s.number) in nested record object — clean output contract
9 (new) Git worktree listing analyzer agent ✅ pass as const on type and status fields needed for enum compatibility — applied correctly
10 (new) TypeScript narrowing pattern detector agent ✅ pass p.glob + async defineTool with readFile — well-structured

Problems encountered

Task 2 — exactOptionalPropertyTypes failure

What the code tried to do: Define a local type annotation { type: string; required: boolean; default?: string } and assign default: defaultM ? defaultM[1].trim() : undefined.

Error:

Type '{ type: string; required: boolean; default: string | undefined; }' is not assignable
to type '{ type: string; required: boolean; default?: string; }'
with 'exactOptionalPropertyTypes: true'.

Root cause: TypeScript's exactOptionalPropertyTypes distinguishes between a property that is string | undefined (explicitly set to undefined) vs. a property that is absent (?). The fix was to widen the type to { default?: string | undefined }.

Fix applied: Changed local type annotation to include | undefined in the optional field type.


Improvement opportunities

Missing or undiscoverable schema helpers (s.*)

No missing helpers this run. All needed shapes (s.record, s.optional, s.enum, s.int, s.number, s.path, s.boolean) were available and composed cleanly.

Missing or undiscoverable prompt helpers (p.*)

p.readInput in combination with p.glob is a common pattern but the distinction between p.readInput (caller-supplied path) vs. p.read (known path) wasn't always obvious from the task description alone. A SKILL.md example showing both in the same agent would help.

Error message quality

The exactOptionalPropertyTypes error from --typecheck is clear TypeScript but verbose. A rig-specific lint hint like "use field?: T | undefined with exactOptionalPropertyTypes" in the linting reference would preempt this class of error.

API ergonomics

  • as const in handler returns: Any defineTool handler that returns a string literal consumed by s.enum output must use as const. This is non-obvious. A note in the composition reference or a lint rule would help.
  • steering() + repair() ordering: The canonical order [steering(), repair()] is documented in SKILL.md but easy to reverse. A lint rule enforcing this order would prevent silent behavioral bugs.

Candidate lint rules

Rule: require-as-const-in-enum-handler

  • Invalid: return "added"; in a handler whose return type feeds an s.enum output field
  • Valid: return "added" as const;
  • Why confusing: Without as const, TypeScript infers string instead of the literal type, causing type mismatch when the output schema uses s.enum.
  • Autofix possible: Yes — append as const to string literal returns in handlers.

Documentation gaps

  • p.readInput semantics (reads a file whose path comes from agent input) vs. p.read (hardcoded path) could use a side-by-side example in prompt-intents.md.
  • exactOptionalPropertyTypes interaction with optional tool parameter types is not mentioned in any reference file.

Tasks run today

  • (reused) Git file ownership mapper — uses p.glob, defineTool with execSync, steering addon
  • (reused) GitHub Actions workflow input validator — uses p.glob, async defineTool, repair addon
  • (reused) TypeScript dead export finder — uses p.glob + p.bash, async defineTool, steering + repair
  • (reused) package.json scripts documenter — uses p.read, defineTool, s.enum category, repair addon
  • (reused) Git diff stats summarizer — uses p.bash, defineTool with s.enum, repair addon
  • (reused) Dotenv template generator — uses p.readOptional + p.glob, async defineTool, repair addon
  • (new) TOML config file key extractor — accepts s.object input, p.readInput, defineTool with regex, repair addon
  • (new) CSV column statistics reporter — accepts s.object input, p.readInput, defineTool with numeric analysis, repair addon
  • (new) Git worktree listing analyzer — uses p.bash, defineTool with dual s.enum fields, steering addon
  • (new) TypeScript type narrowing pattern detector — uses p.glob, async defineTool with readFile + regex, repair addon

Generated by Daily Rig Task Generator · sonnet46 107.2 AIC · ⌖ 9.46 AIC · ⊞ 6.8K ·

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions