From 2486fffd563aa62f6ee7fbb478178e0dc8b74216 Mon Sep 17 00:00:00 2001 From: SSFSKIM Date: Sat, 18 Jul 2026 04:56:24 +0900 Subject: [PATCH] feat(issue-tracker): ticket contract opens with a pre-register duplicate search MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Live dogfood (ida-solution): two parallel implement workers (#489, #490) each hit the same base-branch type regression and registered it blind — identical tickets 32 minutes apart, deduped by hand at the wake. One line in the (single-source) ticket contract closes the gap; every register path already routes here. --- skills/issue-tracker/SKILL.md | 8 ++++++-- tests/implementing-tickets/test-protocol-content.sh | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/skills/issue-tracker/SKILL.md b/skills/issue-tracker/SKILL.md index 6948e3b91c..3792d91c4f 100644 --- a/skills/issue-tracker/SKILL.md +++ b/skills/issue-tracker/SKILL.md @@ -245,8 +245,12 @@ they write against. ## The ticket body (pre-spec) -Whoever registers a ticket authors its body AT REGISTER TIME — write the -sections to a temp file and pass `--body-file` in the same step. The +First search the open board for an existing ticket covering the same +defect or scope — parallel workers hit the same base regressions blind; +if one exists, comment your evidence there +instead of registering a duplicate. Whoever registers a ticket authors +its body AT REGISTER TIME — write the sections to a temp file and pass +`--body-file` in the same step. The registrar is the person who knows the most about the work at that moment; "register now, fill in later" loses exactly that context (the fill-in step is skipped under pressure, and register refuses/demotes a skeleton diff --git a/tests/implementing-tickets/test-protocol-content.sh b/tests/implementing-tickets/test-protocol-content.sh index 878bc990aa..886f44082c 100755 --- a/tests/implementing-tickets/test-protocol-content.sh +++ b/tests/implementing-tickets/test-protocol-content.sh @@ -185,6 +185,7 @@ assert_contains "$tracker" "recommended answer" "tracker: needs-human note contr assert_contains "$tracker" "ENUMERABLE" "tracker: enumerable-decisions→needs-human rule is canonical here" assert_contains "$tracker" "Waiting on other tickets" "tracker: dependency-wait is not a park (edges + ready-for-agent)" assert_contains "$tracker" "which no park state does" "tracker: sweep rationale recorded (why edges beat park states)" +assert_contains "$tracker" "instead of registering a duplicate" "tracker: pre-register duplicate search in the ticket contract" daemons="$(cat "$REPO_ROOT/skills/orchestrating-daemons/SKILL.md")" assert_contains "$daemons" "discriminant in doperpowers:issue-tracker" "daemons: discriminant pointer targets the schema owner" assert_not_contains "$daemons" "discriminant in doperpowers:implementing-tickets" "daemons: no stale pointer at the old vendored copy"