c400c91a80
## What this adds Two files that turn the one-ticket-at-a-time `/implement` loop into an orchestrated batch. **`.claude/skills/implement-tickets/SKILL.md`** — user-invoked (`disable-model-invocation: true`, so it costs no context until typed). The agent that runs it is an orchestrator, not an implementer: 1. Collect the tickets over `tea`, reading each `Blocked by` line. 2. Plan waves from the blocking edges, three tickets wide, and fix every cross-ticket contract (shared signature, JSON shape, column, token) before anything is dispatched. 3. Present the plan and stop for approval. 4. Per ticket: `git worktree add ../ticket-<n>`, copy the gitignored `.env`, claim the issue, write a brief to `.scratch/`, then dispatch the whole wave as one `task` batch. 5. Land each result — merge `--no-ff`, comment the report, close, remove the worktree. Textual conflicts are the orchestrator's; a semantic clash goes back to whichever ticket owns the contract. 6. Full suite once on the merged base. **`.omp/agents/ticket-implementer.md`** — the worker. Brief-driven, worktree-bound, and gated on review before it reports: it runs the `code-review` skill over its own diff with `cr-spec` and `cr-standards` on the two axes, fixes Critical and Important findings in at most two rounds, and returns a short status contract (`DONE` / `DONE_WITH_CONCERNS` / `BLOCKED` / `NEEDS_CONTEXT` / `REVIEW_BLOCKED`). The brief template makes the subagent read `tea issue <n> --comments` for its ticket and for the issue that ticket refers to — the comments carry decisions the body never got updated with — and names the `tdd` skill at each seam where a test comes first. Briefs are written in the ubiquitous language of `CONTEXT.md`; a brief that says "scrape" where the domain says Poll hands the subagent the wrong model of the system. ## Verification Dispatched a real `ticket-implementer` as a probe. The agent resolved from `.omp/agents`, and it spawned `cr-spec`, which replied. That was the one thing that could have silently killed the design: `task.maxRecursionDepth` defaults to 2, and the chain is session to orchestrator to implementer to reviewer. It clears. If that ever changes, the implementer returns `REVIEW_BLOCKED` and the orchestrator runs the review itself. Confirmed against the omp binary that `autoloadSkills: code-review, tdd` is split by `parseArrayOrCSV`, not swallowed as one unknown name. ## Notes - Agents are discovered from `.omp/agents`, never `.claude/agents` — the latter is deliberately skipped by omp because its frontmatter is a different contract. - No product code changes. `.gitignore` gains `.scratch/`, where briefs and reports live. - Not included: retry after a failed dispatch, a state file for resuming a crashed wave, a cheap model tier for mechanical tickets. Add them when a real batch needs them. Reviewed-on: #82 Co-authored-by: Sulthan Zaki <sultankiki05@gmail.com> Co-committed-by: Sulthan Zaki <sultankiki05@gmail.com>
38 lines
1002 B
Plaintext
38 lines
1002 B
Plaintext
.env
|
|
*.db
|
|
*.db-shm
|
|
*.db-wal
|
|
backend/server
|
|
backend/backend
|
|
.playwright-mcp/
|
|
graphify-out/
|
|
plans/
|
|
.scratch/
|
|
docs/superpowers/
|
|
.superpowers/
|
|
go.work
|
|
go.work.sum
|
|
|
|
# impeccable-ignore-start
|
|
# Ephemeral output, runtime state, and per-dev overrides.
|
|
# Unanchored: .impeccable may sit at the repo root or under a nested
|
|
# workspace (apps/web/.impeccable/...); anchored patterns would miss it.
|
|
# Shared artifacts stay tracked: config.json, live/config.json,
|
|
# design.json, critique/*.md.
|
|
.impeccable/config.local.json
|
|
.impeccable/hook.cache.json
|
|
.impeccable/hook.pending.json
|
|
.impeccable/*.png
|
|
.impeccable/live/server.json
|
|
.impeccable/live/sessions/
|
|
.impeccable/live/previews/
|
|
.impeccable/live/annotations/
|
|
.impeccable/live/cache/
|
|
.impeccable/live/manual-edit-apply-transaction.json
|
|
.impeccable/live/manual-edit-events.jsonl
|
|
.impeccable/live/manual-edit-evidence/
|
|
.impeccable/live/pending-manual-edits.json
|
|
.impeccable/live/deferred-svelte-component-accepts.json
|
|
.impeccable/live/*.png
|
|
# impeccable-ignore-end
|