WI-039 · Tracker Hardening · tracker-check

tracker:check plan-integrity script

done P1 low risk   Owner: Claude   Reviewer: Codex   100% · 1/1 tasks complete

Gates: TH1 Requirements: REQ-TRACK-009 Updated: 2026-06-22

At a glance

CodeWI-039
PhaseTracker Hardening
Order74 of 93
Story points3
Primary surfaceapps/web/scripts/tracker-check.mjs + package.json gate
Retires
Depends on
BlocksHonest point model + one sprint-complete rule, Gate↔requirement + requirement↔work-item backfill (Platform+Spine) + owners
Evidence
built in Tracker Hardening

Goals

Make the plan self-verifying: a single command that fails the build on integrity problems (broken refs, dup ids, bad owners, double-counted points) so the tracker can't silently rot as it grows.

Implementation — what to build

Build

  • Add apps/web/scripts/tracker-check.mjs; wire a tracker:check npm script run before docs:tracker.

Checks

  • Unique WI codes; every gate requirement resolves; every item requirement resolves; sprint names valid; owner/reviewer labels in PEOPLE; retro/doc paths exist; no work item pointed in both a summary row and a slice.

Acceptance

  • CI/build fails on any violation with a clear message.

Checklist

  • TH1 Plan-integrity script (tracker:check) gates the build (refs, codes, labels, paths, no point double-count).

Gates & testing

  • TH1 Plan-integrity script (tracker:check) gates the build (refs, codes, labels, paths, no point double-count).
    CODE TEST

Requirements

  • REQ-TRACK-009 accepted Plan integrity must be machine-checked before build/deploy (tracker:check).
    Done when: A script fails on duplicate WI codes, unresolved gate/requirement refs, invalid sprint names, owner/reviewer labels not in PEOPLE, broken doc paths, and overlapping pointed summary/slice rows.
    Spec: docs/tracking/decision-log.md#d23 · docs/tracking/retrospectives/proposed-retro-tracker-foundation.html

Verify (done when)

build fails on dup codes / unresolved gate+req refs / bad sprint names / owner+reviewer labels not in PEOPLE / broken paths / overlapping pointed summary+slice rows.

Cost triggers

No paid API / infra spend triggered by this item.

Status & editing

done   Sprint: Tracker Hardening

Edit status / sprint on the ★ Live Board → — changes are logged live with who / when / why.

Human-in-the-loop

No human tasks linked.

Findings

  • First clean run: 0 errors, 26 warnings across 50 items / 65 gates / 120 requirements.
  • Warnings are the known WI-042 coverage backfill + TBD owners — informational, not build-breaking.
  • Verified the decouple: a local docs:tracker now skips the Supabase write (only deploy/CF_PAGES or npm run tracker:push writes).

Concerns

None recorded yet.

Risks

None recorded yet.

Tech debt

None recorded yet.

Tools used

  • Write — created apps/web/scripts/tracker-check.mjs (integrity checks)
  • Edit — apps/web/package.json (added tracker:check, wired it ahead of docs:tracker)
  • Bash — ran `npm run tracker:check` to verify 0 errors

Files & artifacts

Update log

Update · 2026-06-19 · Built tracker:check and wired it as the build gate

Added apps/web/scripts/tracker-check.mjs and wired it ahead of docs:tracker (also npm run tracker:check), so a broken plan fails the build before generate/deploy. Errors break the build; coverage gaps are warnings.

CheckTypeResult
Duplicate WI / requirement idserror0
Gate → requirement refs resolveerror0 broken
Item → gate / item → requirement refserror0 broken
Sprint names + owner/reviewer in PEOPLEerror0 invalid
Summary rows zero-pointed (no double-count)error0 violations
Coverage gaps (reqs w/o gate or work item)warn52 + 52
Unowned items (TBD)warn24
  • First clean run: 0 errors, 26 warnings across 50 items / 65 gates / 120 requirements.
  • Warnings are the known WI-042 coverage backfill + TBD owners — informational, not build-breaking.
  • Verified the decouple: a local docs:tracker now skips the Supabase write (only deploy/CF_PAGES or npm run tracker:push writes).