githubnext / githubnext/rig

[rig-tasks] Daily rig evaluation — 2026-09-01 — 10/10 passed

Open Beginner friendly
#522 0 comments 0 reactions 0 assignees View on GitHub
ai-agent automation
Dominant language
TypeScript
Stars
13
Forks
0
Avg merge
1d 5h
Merged PRs (30d)
25

Description

## 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 `|| echo 'no reflog'` is good defensive practice |
| 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:
1. `call` is not exported from `"rig"` — it is destructured from the `body({ call })` parameter or imported from `"rig/globals"`.
2. `workflow({ meta: { name } })` requires a `description` field in `WorkflowMeta`.
3. `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

1. **`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"`."
2. **`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.
3. **`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](https://github.com/githubnext/rig/actions/runs/33482646338) · sonnet46 164.3 AIC · ⌖ 9.36 AIC · ⊞ 6.8K · [◷](https://github.com/search?q=repo%3Agithubnext%2Frig+is%3Aissue+%22gh-aw-workflow-call-id%3A+githubnext%2Frig%2Fdaily-rig-task-generator%22&type=issues)

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with SKILL.md's high-frequency decisions table and quick-reference section, then compare them with the workflow and prompt-helper findings in this issue. Document the workflow meta requirements, the body({ call }) pattern, non-undefined agent prompts, and p.readOptional with a fallback. Done means the listed gaps are covered with concise examples and the existing reference remains consistent.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
developer-experience, documentation
Issue type
Documentation
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
74/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.