Repository navigation
coord intake: validate and apply issue filing and triage as one guarded transaction #2134
Description
Parent: #2130
Observed behavior
p-add, padd-item, implementation findings and critic findings repeat the same fragile sequence: reconcile, read Backlog, infer owner, search issues/PRs, construct a body, create the issue, add it to a board, write status/blocker fields, flush and verify. Agents still hand-compose touch sets and field writes, and a filed item can exist without a usable board projection while later steps are running. #2109 demonstrates that even the apparently atomic add --status Blocked path bypasses a coherence guard.
Root cause
The engine validates individual fields and mutations but has no structured draft contract or transaction spanning issue creation, projection and verified terminal state.
Acceptance
- Define a versioned structured intake draft with owner repository, title, observed/requested behavior, established root cause or measured unknown, acceptance, verification, paths, class, optional phase/severity and optional dependency/park decision.
intake validatechecks required fields, canonical refs, touch-set grammar and live path existence/prefix validity without creating anything.- Ownership is an explicit decision when ambiguous. The engine may return registry/capability candidates but must not infer semantic ownership from prose and silently commit it.
- Return duplicate candidates from open and closed issues/PRs using complete, fail-closed reads. Semantic equivalence remains an agent decision recorded as
reuseorcreate. intake applycreates or reuses the issue, adds it to the configured board, writes coherent fields and verifies the resulting live issue/row as one idempotent operation keyed by draft id.- A Blocked result requires a live parseable implementation dependency or human sentinel and writes Status plus
Blocked bycoherently; it cannot use the add --status Blocked bypasses the coherent-park gate — a third unguarded Status writer #2109 bypass. - Ready is refused when the issue is closed, has unusable paths, has a live dependency, claim or implementation PR, or still requires a human choice.
- Backlog classifications use explicit reason codes (
parked,awaiting-judgement,epic,not-yet-actionable) instead of relying on session prose. - The receipt includes issue ref/URL, dedupe disposition, board identity, status, fields, projection freshness, pending-write count and any remaining judgement question.
- A retry after issue creation but before projection converges on the same issue and repairs/finishes the transaction; it never files a duplicate.
- Tests cover unreadable duplicate search, invalid paths, create/add interruption, coherent Blocked creation, reuse, user-owned product board, queued writes and final zero-pending verification.
Class: hardening
Paths: src/FS.GG.Coord.Cli src/FS.GG.Coord.Core src/FS.GG.Coord.GitHub tests/FS.GG.Coord.Cli.Tests tests/FS.GG.Coord.Core.Tests tests/FS.GG.Coord.GitHub.Tests .agents/skills/p-add .claude/skills/p-add .agents/skills/padd-item .claude/skills/padd-item .agents/skills/pnext-item/references/findings-and-filing.md .claude/skills/pnext-item/references/findings-and-filing.md work/2134-coord-intake readiness/2134-coord-intake tests/coord-engine-e2e/writes.sh tests/coord-engine-e2e/fixture_server.py tests/coord-engine-e2e/stateful_server.py scripts/fsgg-coord tests/coord-engine-e2e/shim-parity.sh scripts/fsgg-coord-guards.sh tests/coord-engine-parity/shim.sh
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
Activity
EHotwagner commentedon Aug 2, 2026
Mandatory delivery-route decision
Decision maker: Codex filing agent
Decision:
sdd-requiredRationale: The item defines an idempotent transaction spanning issue creation and board mutations, with interruption recovery, deduplication and externally visible state.
Until #2137 provides the typed receipt, this comment is the durable manual decision. A worker must run the full SDD lifecycle inside the claim-to-done envelope and bind its work/spec evidence to this item; this is not an advisory. Material scope changes require a new route decision.
EHotwagner commentedon Aug 8, 2026
dunlin-1c7c → smew-511d
worker 'dunlin-1c7c' has TAKEN .github#2134 from you with
claim --force— your claim was live and its marker has been deleted. STOP working this item: you no longer hold it,heartbeatwill refuse, and anything you push against it now races a second worker. If this was wrong, say so here.EHotwagner commentedon Aug 8, 2026
finch-c95e → dunlin-1c7c
worker 'finch-c95e' has TAKEN .github#2134 from you with
claim --force— your claim was live and its marker has been deleted. STOP working this item: you no longer hold it,heartbeatwill refuse, and anything you push against it now races a second worker. If this was wrong, say so here.EHotwagner commentedon Aug 8, 2026
merlin-a3e3 → finch-c95e
worker 'merlin-a3e3' has TAKEN .github#2134 from you with
claim --force— your claim was live and its marker has been deleted. STOP working this item: you no longer hold it,heartbeatwill refuse, and anything you push against it now races a second worker. If this was wrong, say so here.EHotwagner commentedon Aug 8, 2026
brant-88ab → merlin-a3e3
worker 'brant-88ab' has TAKEN .github#2134 from you with
claim --force— your claim was live and its marker has been deleted. STOP working this item: you no longer hold it,heartbeatwill refuse, and anything you push against it now races a second worker. If this was wrong, say so here.EHotwagner commentedon Aug 8, 2026
crake-8f7f → brant-88ab
worker 'crake-8f7f' has TAKEN .github#2134 from you with
claim --force— your claim was live and its marker has been deleted. STOP working this item: you no longer hold it,heartbeatwill refuse, and anything you push against it now races a second worker. If this was wrong, say so here.EHotwagner commentedon Aug 8, 2026
Automatic repair phase is active under fresh worker
crake-8f7f. Exhausted PR #2291 was closed unmerged and is superseded by fresh PR #2293.55bc44e3d2f8d5463c08cb840600b07e88073c98Verification: Core 624/624, GitHub 467/467, CLI 611/611, writes 134/134, missing-title subject inversion red at 133/134 with zero mutations.
test(coord): pin the completeness guard AT its boundary, both sides (…
fix(coord): complete the duplicate inventory over a paginating listin…