From 885329031ab6e12ba8b8a656e849503c63b9d50f Mon Sep 17 00:00:00 2001 From: SSFSKIM Date: Mon, 10 Aug 2026 20:24:40 +0900 Subject: [PATCH] =?UTF-8?q?fix(issue-tracker):=20PR=20#52=20review=20findi?= =?UTF-8?q?ngs=20=E2=80=94=20binding-aware=20seam=20search,=20park-countin?= =?UTF-8?q?g=20tripwire,=20member=20disposition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Seven codex-connector findings on the merged #52, all adopted: - seam search + relates duty scoped to the gh binding with API-mode fallbacks named (search: server-side dedupe until an arkho#7 route; relates: name seam-mates in the body) [P1 x2] - explicit --limit 200 on the documented search (default 30 truncates silently) [P2] - cluster tripwire counts every non-terminal ticket except deferred — a parked rewrite resumes into its lane without re-running the search [P2] - member disposition belongs to the consolidation ticket (re-cut or close); the --blocked-by prescription is gone — blocking merely defers the collision until the unblock sweep frees the stale rewrites [P1] - spike decomposition path runs the seam search too (it registered children before the Graduation text ever applied) [P2] - the reviewer's comment-on-existing-ticket route is named as the one sanctioned cross-ticket write, ticketless PRs excepted [P2] --- .../references/spike-worker-protocol.md | 4 ++- skills/issue-tracker/SKILL.md | 34 +++++++++++++------ skills/reviewing-prs/SKILL.md | 7 +++- 3 files changed, 32 insertions(+), 13 deletions(-) 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,