Repository navigation
[cross-repo] The filing contract dedupes against issues but not the cycle-report corpus, so findings are refiled as new #2843
Description
From (requesting repo / agent): S.I.R. / heron-1413 (work-board host)
Blocking work: none blocked; cost is permanent, unmergeable duplication in the cycle-report corpus and silently inflated recurrence judgements.
Request
The filing contract directs a worker to dedupe against issues, and says nothing about the cycle-report corpus. So a finding already recorded — sometimes in the same board pass — gets filed again as new, and the earlier record is invisible to the person filing.
$ ls feedback/*.md | wc -l
60
$ grep -in 'dedup|duplicate|already filed|existing' \
.claude/skills/pnext-item/references/findings-and-filing.md
4: … Reuse an existing issue when it expresses …
$ grep -in 'feedback/|prior report|cycle report|previous report' <same file>
(no matches)
The only dedupe target named is an issue. The reports are a durable corpus of established findings, root causes and dispositions, and nothing directs anyone to search them.
Demonstrated by a worker on itself
dunlin-2b03 filed its §4.5 as new. The cause — a shared scratchpad where concurrent lanes overwrite each other's working files — was already recorded in another lane's report from the same pass. Its own account:
I deduped against issues and the board but not against prior reports.
It did exactly what the contract asks. The contract asks for the wrong scope.
Why this compounds rather than merely repeating
Each cycle report is immutable and digest-bound once validated, so a duplicate cannot be merged into the original after the fact — both records persist, permanently, describing one cause. The corpus becomes progressively less useful precisely as it becomes more valuable: the more findings it holds, the likelier a new finding duplicates one, and the less likely anyone reads far enough to notice.
It also silently inflates every recurrence judgement. A finding marked new that is actually a recurrence misreports how often a defect has been hit — the field a reader uses to prioritise.
Corroboration from later in the same pass
Two further lanes hit it independently after this was first recorded:
- a repair-phase worker demoted its own §4.6 to a standing workaround after finding the measurement already published in a prior cycle's §4.13 and on another row by an earlier critic — it deduped by hand, against the contract's silence;
- a critic performing a duplicate search explicitly widened scope itself, reporting dedupe "across all 31 open + 41 closed issues, the PR history, and 63
feedback/reports" — doing the right thing while the contract asked for less.
Both parties reached the correct scope by judgement. Nothing in the contract got them there.
Affected contract / registry entry
pnext-item skill — references/findings-and-filing.md dedupe scope.
Acceptance criteria
- The filing contract names the cycle-report corpus as a dedupe target alongside issues and the board.
- The contract states how to search it, so the instruction is executable rather than aspirational.
-
Recurrenceguidance distinguishes "no prior issue" from "no prior record", since the corpus can carry a finding no issue does. - Inversion evidence: a finding whose cause is already recorded in a prior report is caught by following the contract as written.
Originally mis-filed on the S.I.R. product board as S.I.R.#278; closed there with a pointer here.
Paths: .claude/skills/pnext-item/references/findings-and-filing.md .agents/skills/pnext-item/references/findings-and-filing.md tests/skill-quality/run.sh
Class: defect
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
Activity
EHotwagner commentedon Aug 23, 2026
EHotwagner commentedon Aug 23, 2026
Board-analyst disposition — actionable and schedulable
Verdict: retain as one row and promote to Ready after recording a current lightweight route. The cause is one omission in the filing contract: its duplicate search stops at issues and never searches the immutable cycle-report corpus. The implementation is narrow: amend the two runtime projections of
findings-and-filing.mdand pin the instruction in the existing skill-quality harness.Filing bar
origin/main, following the contract cannot discover a finding that exists only infeedback/:git show origin/main:.agents/skills/pnext-item/references/findings-and-filing.md | rg -q 'feedback/|prior report|cycle report|previous report'exits 1. The downstream corpus is live rather than hypothetical:/home/developer/projects/S.I.R/feedbackcurrently contains 61 Markdown reports, and several already carry explicitduplicate of feedback/...recurrence dispositions.scripts/check-*.pyin this repository or S.I.R. contains a rule for cycle-report-corpus dedupe.gh issue list -R FS-GG/.github --state open --search 'cycle report in:title,body'returned this row plus feedback-format/lifecycle rows with different causes; no open row proposes this preventive mechanism.Touch-set:
.claude/skills/pnext-item/references/findings-and-filing.md,.agents/skills/pnext-item/references/findings-and-filing.md,tests/skill-quality/run.sh. The two skill paths are byte-identical projections; the test is the narrow executable inversion surface. No registry, engine, or broad skill-directory token is declared.Verification:
git show origin/main:.agents/skills/pnext-item/references/findings-and-filing.md | rg -q ...→ rc 1;find /home/developer/projects/S.I.R/feedback -maxdepth 1 -type f -name '*.md' | wc -l→ 61; boundedfind scripts /home/developer/projects/S.I.R/scripts -name 'check-*.py' | xargs rg ...found no matching derivation;gh issue list ... --search 'cycle report in:title,body';cmp -sconfirmed both projected files currently match.— board analyst
kite-0a34EHotwagner commentedon Aug 23, 2026
{
"schema": "fsgg.coord.route-decision/v2",
"subject": "#2843",
"revision": 1,
"previousDigest": null,
"scope": ["Teach finding adjudication to deduplicate against immutable cycle reports as well as issues."],
"dependencies": ["none"],
"touchSet": [
".claude/skills/pnext-item/references/findings-and-filing.md",
".agents/skills/pnext-item/references/findings-and-filing.md",
"tests/skill-quality/run.sh"
],
"policyVersion": "structured-decisions/1",
"route": "lightweight",
"agent": "kite-0a34",
"timestamp": "2026-08-23T21:14:00Z",
"reasonCodes": ["contract-only", "bounded-touch-set", "cycle-report-dedupe"],
"rationale": "A bounded contract-and-test change with no new lifecycle state machine; lightweight is sufficient.",
"sddWorkId": null,
"specHome": null,
"requiredGates": [],
"digest": "6a0e997e6123dadc1d16a7fd20d8920101e74aacfff09fc3434db94aec018449"
}
EHotwagner commentedon Aug 23, 2026
EHotwagner commentedon Oct 19, 2026
The canonical intake contract explicitly includes relevant prior feedback/reports in bounded semantic/cause search, distinguishes no prior issue from no prior record, uses a prior unfiled report as recurrence evidence and preserves its source, disposition and owner. It instructs reuse when the existing promise covers the result and reports unavailable/truncated/stale searches Unknown. This is an executable bounded search direction, not a mandatory whole-corpus sweep or reopening of closed historical investigations.
Merged PR4711 executes maintained causal mutations that remove report search, invert recurrence, ignore an unfiled report or treat an empty bounded search as global absence. Selected published109/020 and actual installed instruction joins carry the rule. Recommend completed for the original contract/control acceptance. Existing report originals and unavailable historical gaps remain unchanged; recurrence alone still does not demand a new card.
Evidence boundary: source PR4711; actual coherent109 and Creator020; selected public fresh/retained instruction and runtime acceptance remains durably owned by #4712. PR4715 is normally delivered at4fadcce5004e30d122e41bac2bca6c404edbd902/tree41b683bf067acb3adb722297fc7e1c4216f901ea with exact review/required CI/coherence accepted; amended37 native continuation remains pending. Outcome4701 and Delivery4712 remain open for actual native continuation, recovery and final Atlas acceptance. All439 inherited and46 later Unknown originals remain distinct and unreleased.