githubnext / githubnext/rig

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

オープン 初心者向け
#522 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
ai-agent automation
主要言語
TypeScript
スター
13
フォーク
0
平均マージ
1日 5時間
マージ済み PR(30日)
25

説明

## 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)

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
typescript
領域
developer-experience, documentation
issue の種類
ドキュメント
難易度
2/5
見積もり時間
1〜3時間
活発さ
活発
明瞭さ
おおむね明確
初心者へのやさしさ
74/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。