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>
2.2 KiB
2.2 KiB
Tooling Decisions
Toolchain, supply chain, CI, ignore strategy.
D-031: Prefer-zero-deps, exact-pin
- Date: 2026-04-21
- Decision: Default to writing code ourselves. Every third-party Dart dependency needs a paragraph of justification in the PR that adds it. What stays is exact-pinned in
pubspec.yaml(no caret ranges),pubspec.lockis committed, and advisories are reviewed before every bump. - Rationale: Supply-chain gate. Flutter SDK + Dart SDK give us most of what we need; the dependencies we keep are the ones we can't reasonably write (yaml parser, mocktail, alchemist). Exact-pin because caret ranges mean "the CVE bumps itself in silently."
- Cost: Longer PR descriptions for deps; occasional reinvention of a convenience. Accepted.
- Raised by: 2026-04-21 planning; reinforced by user feedback memory.
D-032: CI — Gitea primary, Linux-only runners, not yet activated
- Date: 2026-04-21
- Decision: CI config lives at
.gitea/workflows/test.yml(Gitea Actions consumes GitHub-Actions syntax). Runners are Linux only; macOS is tested locally. The workflow is ready but Gitea Actions is not yet activated on the instance — the file is a staged pipeline for review. If the repo moves to GitHub, the file copies to.github/workflows/test.ymlverbatim. - Rationale: We want the CI story defined before we turn CI on — lower blast radius on early red builds. GitHub portability is free because the syntax is shared.
- Cost: PRs don't run CI yet;
make push-checkis the gate until activation. - Raised by: 2026-04-21 planning.
D-033: Golden-output ignore pattern — coverage.* excludes output, not scripts
- Date: 2026-04-21
- Decision:
.gitignoreexcludescoverage.*(the lcov output files fromflutter test --coverage). Coverage-related scripts are namedci/test_coverage.sh(notci/coverage.sh) to stay outside the pattern. - Rationale: An earlier draft named the script
ci/coverage.shand it was silently git-ignored. Renaming the script is cheaper than narrowing the gitignore pattern (which risks re-introducing output churn). - Cost: Script names have a convention to follow.
- Raised by: 2026-04-21 planning (caught during commit rehearsal).