Skip to content

[cross-repo] The filing contract dedupes against issues but not the cycle-report corpus, so findings are refiled as new #2843

Closed

Description

@EHotwagner

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.
  • Recurrence guidance 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

Activity

  1. EHotwagner commented on Aug 23, 2026

    @EHotwagner
    ContributorAuthor
    No description provided.
  2. moved this to Backlog in Coordinationon Aug 23, 2026
  3. EHotwagner commented on Aug 23, 2026

    @EHotwagner
    ContributorAuthor

    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.md and pin the instruction in the existing skill-quality harness.

    Filing bar

    1. Red today: PASS. On origin/main, following the contract cannot discover a finding that exists only in feedback/: 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/feedback currently contains 61 Markdown reports, and several already carry explicit duplicate of feedback/... recurrence dispositions.
    2. Not already derived: PASS. No scripts/check-*.py in this repository or S.I.R. contains a rule for cycle-report-corpus dedupe.
    3. Class anchored: PASS. 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; bounded find 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 -s confirmed both projected files currently match.

    — board analyst kite-0a34

  4. EHotwagner commented on Aug 23, 2026

    @EHotwagner
    ContributorAuthor

    {
    "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"
    }

  5. EHotwagner commented on Aug 23, 2026

    @EHotwagner
    ContributorAuthor
    No description provided.
  6. moved this from Backlog to Ready in Coordinationon Aug 23, 2026
  7. EHotwagner commented on Oct 19, 2026

    @EHotwagner
    ContributorAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    cross-repoTouches more than one FS-GG repocross-repo:requestIncoming request from another repo

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions