docs(13): create phase plan — 3 plans (lint gate + Prettier format gate)
- 13-01: install ESLint v9/typescript-eslint/React/Prettier (pinned), flat config, package lint + root format scripts, root type:module; prove gate fails (SC-1) - 13-02: fix all first-run violations across both apps, address-not-mask (D-13-05/06) - 13-03: isolated Prettier reformat (D-13-08) + CI format:check step + green baseline (SC-2/SC-3) - ROADMAP: add active Phase 13 entry + Progress row; mark backlog 999.16 promoted
This commit is contained in:
@@ -206,6 +206,25 @@ Make FamilySync configurable, administrable, and maintainable for real multi-mem
|
||||
**Plans**: TBD
|
||||
**UI hint**: yes
|
||||
|
||||
### Phase 13: Real Lint Gate (ESLint)
|
||||
|
||||
**Goal**: The CI `fast-checks` lint step stops being a hollow no-op — a real, type-aware ESLint flat config (typescript-eslint `recommendedTypeChecked` + React/react-hooks for the PWA) plus Prettier are wired across both apps, all first-run violations are genuinely fixed, and `pnpm lint` / `pnpm format:check` actually fail on violations and gate PRs to main.
|
||||
**Mode:** standard
|
||||
**Depends on**: Phase 8 (Gitea CI shipped the lint gate slot wired to auto-activate once a package `lint` script lands; this phase makes it real and adds the format gate). Independent of Phases 9/10/11/12.
|
||||
**Requirements**: none (promoted from backlog 999.16; no formal REQ-IDs)
|
||||
**Success Criteria** (what must be TRUE):
|
||||
|
||||
1. **SC-1:** `pnpm lint` exits non-zero on an introduced violation (today it exits 0); `pnpm format:check` exits non-zero on an unformatted file.
|
||||
2. **SC-2:** The CI `fast-checks` lint step blocks a PR to main on lint violations, and a new `format:check` step blocks on format violations.
|
||||
3. **SC-3:** The first real run's existing violations are resolved so the baseline gate ends green — `pnpm lint` AND `pnpm format:check` both exit 0 across both apps.
|
||||
|
||||
**Decisions** (LOCKED, from 13-CONTEXT.md): D-13-01 `recommendedTypeChecked` via `projectService:true`; D-13-02 React/hooks plugins scoped to `apps/pwa` only; D-13-03 no strict presets; D-13-04 `--max-warnings 0`; D-13-05 fix all violations now; D-13-06 fixes address, never mask (justified suppressions only); D-13-07 Prettier standalone + `eslint-config-prettier`; D-13-08 isolated reformat commit; D-13-09 lint all TS/TSX incl. tests/e2e/config; D-13-10 `disableTypeChecked` override for non-project files.
|
||||
|
||||
**Plans**: 3 plans
|
||||
- [ ] 13-01-PLAN.md — Install ESLint/Prettier deps + flat config + package scripts + prove the gate fails (SC-1)
|
||||
- [ ] 13-02-PLAN.md — Fix all first-run lint violations across both apps, green `pnpm lint` (D-13-05/06)
|
||||
- [ ] 13-03-PLAN.md — Prettier reformat (isolated commit) + CI format:check step + green baseline (SC-2, SC-3)
|
||||
|
||||
## Progress
|
||||
|
||||
| Phase | Milestone | Plans Complete | Status | Completed |
|
||||
@@ -222,6 +241,7 @@ Make FamilySync configurable, administrable, and maintainable for real multi-mem
|
||||
| 10. Admin Role & Settings | v1.1 | 0/? | Not started | - |
|
||||
| 11. Per-Event Reminders | v1.1 | 0/? | Not started | - |
|
||||
| 12. Initial Setup Wizard | v1.1 | 0/? | Not started | - |
|
||||
| 13. Real Lint Gate (ESLint) | v1.1 | 0/3 | Not started | - |
|
||||
|
||||
## Backlog
|
||||
|
||||
@@ -426,6 +446,8 @@ Plans:
|
||||
|
||||
**Context:** Raised during Phase 8 execution, 2026-06-11 — user noted the `--if-present` lint step "didn't fix the linter, just made it so it didn't have to exist to proceed" and wants a lint gate that actually fails. Tags: ci, lint, eslint, typescript-eslint, quality, gitea.
|
||||
|
||||
> **Promoted into v1.1 Phase 13 (Real Lint Gate (ESLint)) — no formal REQ-IDs; scope expanded to include a Prettier `format:check` gate.** Backlog entry retained for history.
|
||||
|
||||
**Requirements:** TBD
|
||||
**Plans:** 0 plans
|
||||
|
||||
|
||||
Reference in New Issue
Block a user