diff --git a/skills/implementing/references/spike-worker-protocol.md b/skills/implementing/references/spike-worker-protocol.md index 1bbbe3207f..1f719dd572 100644 --- a/skills/implementing/references/spike-worker-protocol.md +++ b/skills/implementing/references/spike-worker-protocol.md @@ -37,7 +37,9 @@ with your best guess at what was meant. Scope check: the exploration must fit one session. A question too big forks the same way implement decompose does — register narrower spikes ({{BOARD_SCRIPTS}}/board-register.sh "" spike <P0..P3> ---parent {{ISSUE_NUMBER}}, honest notes) and end your turn — the +--parent {{ISSUE_NUMBER}}, honest notes; the ticket contract's +pre-registration seam search runs before EVERY registration, this +decomposition path included) and end your turn — the registered children, not a half-answer, are this turn's deliverable. VERDICT IS YOUR FIRST BOARD WRITE. Dispatch wrote nothing. diff --git a/skills/issue-tracker/SKILL.md b/skills/issue-tracker/SKILL.md index c246508f05..873f7cf464 100644 --- a/skills/issue-tracker/SKILL.md +++ b/skills/issue-tracker/SKILL.md @@ -329,22 +329,34 @@ SEAM: the identifiers your ticket touches (file paths, function/RPC names, table names). Title-keyword search may not be enough — different authors word the same work differently. GitHub issue search hits bodies, so query each seam identifier -(`gh issue list --state open --search "<function-or-file-name>"`). -Then triage the hits: +(`gh issue list --state open --limit 200 --search "<function-or-file-name>"` +— the explicit `--limit` matters: the default caps at 30 and truncates +silently). This search is a gh-binding route; an API-bound repo has no +client search verb yet — rely on the server's registration-time dedupe +until one lands (the arkho#7 route family). Then triage the hits: - **Same defect or scope** → comment your evidence on the existing ticket instead of registering a duplicate — parallel workers hit the same base regressions blind. - **Same seam, different defect** → register, but in the same breath - `board-relate.sh` your new ticket to every open ticket on that seam. -- **Cluster tripwire**: if your registration would put a THIRD open - non-park ticket onto the same function or contract body, that seam - has outgrown patch-wise work — parallel rewrites of one body revert - each other silently (different files, zero git conflicts). - Register your finding, then raise consolidation: a - ticket born `ready-for-architect` that names every member and owns - the unified contract, with the members related (and, where they are - still undispatched, `--blocked-by` the consolidation ticket). + `board-relate.sh` your new ticket to every open ticket on that seam + (gh binding — board-relate.sh has no API route; there, name the + seam-mates in your ticket body instead and move on). +- **Cluster tripwire**: if your registration would put a THIRD + non-terminal ticket onto the same function or contract body, that + seam has outgrown patch-wise work — parallel rewrites of one body + revert each other silently (different files, zero git conflicts). + Parks COUNT: a needs-human/needs-info rewrite resumes into its lane + without re-running this search; only `deferred` and closed tickets + are out of the race. Register your finding, then raise consolidation: + a ticket born `ready-for-architect` that names every member and owns + the unified contract, with the members related. Member disposition + belongs to the consolidation ticket itself — each member is re-cut as + a slice of the unified contract or closed with a reason. Do not reach + for `--blocked-by` on the existing members: re-cutting other tickets' + edges is not a worker's write, and a block merely defers the + collision — the moment the consolidation lands, the unblock sweep + frees the stale rewrites to overwrite it. Whoever registers a ticket authors its body AT REGISTER TIME — write the sections to a temp file and pass diff --git a/skills/reviewing-prs/SKILL.md b/skills/reviewing-prs/SKILL.md index 72aebd1002..1322623934 100644 --- a/skills/reviewing-prs/SKILL.md +++ b/skills/reviewing-prs/SKILL.md @@ -324,8 +324,13 @@ substance and route. Birth classification applies: the default is `ready-for-implementer`; a finding that is missing DESIGN (not just missing work) passes `--state ready-for-architect`. + A seam-search hit that says the finding IS an existing open ticket: + comment your evidence on that ticket instead of registering — the one + sanctioned cross-ticket write in this protocol (an explicit exception + to "board writes target the primary ticket"). NEVER wave it. On a ticketless PR, post a structured PR comment - describing the scope fork instead — board writes are skipped. + describing the scope fork instead — board writes are skipped, the + cross-ticket exception included. - LOG — valid non-blocker: append a structured comment to the standing tech-debt issue ({{BOARD_SCRIPTS}}/board-comment.sh {{TECH_DEBT_ISSUE}}) — finding,