4.2 KiB
Implementation Plan: Quality Gates & Code Hygiene
Branch: 031-quality-gates-hygiene | Date: 2026-03-11 | Spec: spec.md
Input: Feature specification from /specs/031-quality-gates-hygiene/spec.md
Note: This template is filled in by the /speckit.plan command. See .specify/templates/plan-template.md for the execution workflow.
Summary
Strengthen the project's automated quality gates by: (1) codifying the early-enforcement principle in the constitution and CLAUDE.md, (2) adding Vitest v8 coverage thresholds with auto-ratchet, (3) enabling Biome's cognitive complexity rule and an additional a11y rule, (4) adding dependency auditing to the check script, and (5) cleaning up all blanket biome-ignore comments and reducing a11y suppressions in combatant-row.tsx. All gates enforce at pre-commit via pnpm check.
Technical Context
Language/Version: TypeScript 5.8 (strict mode, verbatimModuleSyntax)
Primary Dependencies: Vitest 3.2.4, Biome 2.0, Lefthook, Knip, jscpd. New: @vitest/coverage-v8
Storage: N/A (config/documentation changes only)
Testing: Vitest with v8 coverage provider (to be added)
Target Platform: macOS/Linux dev environments (pre-commit hooks)
Project Type: Web application (React 19 + Vite 6)
Performance Goals: N/A — tooling config changes
Constraints: All changes must pass pnpm check at pre-commit
Scale/Scope: 10 files modified, 5 functions refactored for complexity
Constitution Check
GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.
| Principle | Status | Notes |
|---|---|---|
| I. Deterministic Domain Core | PASS | No domain logic changes. set-initiative.ts fix is a lint-only refactor preserving identical behavior. |
| II. Layered Architecture | PASS | No layer boundary changes. Refactors stay within their existing layers. |
| III. Clarification-First | PASS | All requirements are explicitly specified by the user. No assumptions needed. |
| IV. Escalation Gates | PASS | All items are in the spec. |
| V. MVP Baseline Language | PASS | Constitution amendment uses PATCH clarification language, not permanent bans. |
| VI. No Gameplay Rules | PASS | No gameplay mechanics involved. |
| Dev Workflow: automated checks | PASS | This feature strengthens the check pipeline. |
| Dev Workflow: CLAUDE.md sync | PASS | CLAUDE.md will be updated to reflect the early-enforcement principle. |
| Dev Workflow: README sync | PASS | No user-facing capability changes — README update not required. |
Post-Phase 1 re-check: All gates still pass. The constitution itself is being amended (PATCH), which follows the amendment procedure (propose → update → verify → review → commit).
Project Structure
Documentation (this feature)
specs/031-quality-gates-hygiene/
├── plan.md # This file
├── research.md # Phase 0 output — technical research
├── data-model.md # Phase 1 output — config artifacts
├── quickstart.md # Phase 1 output — implementation guide
└── tasks.md # Phase 2 output (via /speckit.tasks)
Source Code (repository root)
# Files modified by this feature:
.specify/memory/constitution.md # PATCH amendment (early enforcement)
CLAUDE.md # Add early-enforcement operational note
biome.json # Add complexity + a11y rules
vitest.config.ts # Add v8 coverage with thresholds
package.json # Add @vitest/coverage-v8, update check script
.gitignore # Add coverage/ directory
# Refactored for cognitive complexity:
apps/web/src/adapters/bestiary-adapter.ts
apps/web/src/persistence/encounter-storage.ts
scripts/check-layer-boundaries.mjs
scripts/generate-bestiary-index.mjs
# Refactored for biome-ignore hygiene:
packages/domain/src/set-initiative.ts
apps/web/src/components/combatant-row.tsx
Structure Decision: No new directories or structural changes. All modifications target existing files. The only potential new file is a small StopPropagation wrapper component if the combatant-row refactor warrants extraction.
Complexity Tracking
No constitution violations to justify.