DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path change-requests/cr-2026-217-finding-count-lineage-filter-v0_1.md

CR-2026-217 — Candidate cards' open_finding_count gets the lineage filter (B-106) — v0.1

Version. 0.1 Date. 2026-08-15 Author. Claude.ai, drafted against the B-105 Step 0 inspection (inspection-briefs/loomworks-b105-sweep-step-0-inspection-v0_1.md, reader §5) and the CR-2026-216 completion evidence. Repository. loomworks-engine. Build-list item. B-106 (full close).


Plain-language summary

Every candidate card's open-findings count is computed with no filter tying it to that candidate — so every card shows the same global number (21 today, post-sweep). The cycle count directly above it in the same function filters correctly by seed lineage. This change request applies the same filter to the findings count, so each card counts only its own candidate's open findings. The defect is API-visible only today: the surface types the field but no component renders it. One filter, one test. No decision needed from the Operator.


0. Established facts (from the inspection; verify current at Step 0)

1. Scope

In scope. The lineage filter on open_finding_count, matching the cycle count's existing filter; tests per §3.

Out of scope. Rendering the field on any surface (nothing renders it today; a surface affordance is its own future item). The legacy NULL-seed_id findings themselves (outside the B-105 ruling, untouched). The schema move (behind B-69).

2. Steps

Step 0 — branch and verify. Branch cr-2026-217-finding-count-lineage-filter. Verify CR-2026-217 is unclaimed in loomworks-record; HALT if claimed. Confirm the two line numbers in §0 still hold on current main; if the code has moved, report the new locations and proceed only if the shape is unchanged — HALT if the shape has changed.

Step 1 — the filter. Apply the cycle count's seed-lineage filter to the findings count. Borrow the existing construct in the same function; do not reinvent it.

Step 2 — tests.

Step 3 — quality gates. ruff zero-tolerance; mypy message-level non-regression.

Checkpoint A — after the green run, before tag and push. Gate string: GATE A APPROVED — PROCEED for CR-2026-217. Include in the report: the live route's per-candidate numbers before and after, for at least two real candidates (read-only queries; synthetic engagements for any write-path testing — never shared test engagements, never the personal engagement).

3. Acceptance

  1. Each candidate card's open_finding_count equals the open findings of its own seed lineage — verified against the live route with the route's verbatim query, per-candidate, pre/post.
  2. Legacy NULL-seed_id rows appear in no card's count.
  3. Suite green at the zero-failures baseline; ruff clean; mypy at baseline.
  4. Build list v0.91 closes B-106, new file alongside v0.90.

4. Discipline

Stage by explicit path, never git add -A. Re-verify HEAD before each write. Halt before every push. One session, one repository.


DUNIN7 — Done In Seven LLC — Miami, Florida CR-2026-217 — finding-count lineage filter — v0.1 — 2026-08-15