First child of T-89. Codifies "don't make coverage worse" as a
durable pre-push contract before any test-writing children land.
- pubspec.yaml: new `coverage_floor: 34` key. Single source of
truth for the floor; ratchets up only.
- ci/coverage_gate.sh: parses coverage/lcov.info (LH/LF), reads
the floor from pubspec.yaml, exits non-zero if integer-truncated
measured % drops below it. Self-contained awk parser — no `lcov`
CLI dependency.
- ci/test.sh: flutter test now runs with --coverage, so the gate
reads fresh data without an extra test invocation. Wall time
delta is small and stays inside the < 90 s pre-push budget
(D-29).
- Makefile: new `coverage-gate` target wires the script in;
`push-check` adds it as a dependency. The .githooks/pre-push
hook (already wired) picks this up automatically.
- .gitignore: ignore /coverage/ wholesale; the floor lives in
pubspec.yaml, nothing under coverage/ is committed.
Decision recorded as D-66 (decisions/testing.md). End target is
95%; reaching it is tracked as the rest of T-89's children.
Co-Authored-By: Claude <noreply@anthropic.com>
Fixes 3 substring-truncated cross-reference anchors so they match
the full heading slug:
- D-3 link in architecture.md
- D-40 link in process.md (heading gained the [SUPERSEDED] tag)
- Q-15 link in questions-process.md
Strips the legacy `app/` prefix from path references in 5 files —
the dirs were flattened to repo root in the Flutter rebuild
(D-56). Three "was `app/...`" historical references in D-5 and
D-56 are deliberately preserved as record of the dissolution.
Adds an inline (tracked in T-88) note to D-59 so the
"must track dugite-native releases for security updates" intent
is wired to a backlog item — RULE-SUNSET-WITHOUT-TICKET would
otherwise keep flagging it on every sweep.
Co-Authored-By: Claude <noreply@anthropic.com>
pql 1.2.0 changed its record format to drop leading zeros. All
262 references across 18 files renumbered (D-001→D-1, T-043→T-43,
etc.). pql-plan.json export updated as the git source of truth
for the planning database. DB rebuilt via pql plan import.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adopt settled-reach's Q&D record convention. Confirmed decisions
live under decisions/<domain>.md as D-NNN; open questions under
questions-<domain>.md as Q-NNN; rejected alternatives in rejected.md
as R-NNN. Markdown is source of truth; .pql/pql.db (added later) is a
query index.
Backlog captured from the Tier-0 Flutter planning sessions: bare
WidgetsApp, theme pipeline, kernel admission rule, feature-first
layout, a11y + i18n as Tier-0 contracts, test pyramid, kanban over
Scrum, pql-owns-planning, Python stopgap sunset clause.
ADR migration (D-001, D-003-D-006 confirmed, R-002 rejected) is
staged for the next commit so the diff stays readable.
Co-Authored-By: Claude <noreply@anthropic.com>