92 lines
3.9 KiB
Markdown
92 lines
3.9 KiB
Markdown
# Phase 13: Real Lint Gate (ESLint) - Discussion Log
|
|
|
|
> **Audit trail only.** Do not use as input to planning, research, or execution agents.
|
|
> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.
|
|
|
|
**Date:** 2026-06-11
|
|
**Phase:** 13-real-lint-gate-eslint
|
|
**Areas discussed:** Rule strictness, Existing-violation strategy, Prettier scope, Lint file coverage
|
|
|
|
---
|
|
|
|
## Rule Strictness — ruleset
|
|
|
|
| Option | Description | Selected |
|
|
|--------|-------------|----------|
|
|
| `recommended` (non-type-aware) | Syntactic only, fast, no tsconfig wiring; misses async/promise bugs | |
|
|
| `recommendedTypeChecked` | Type-aware; catches floating/misused promises + unsafe any; needs projectService, slower, more first-run violations | ✓ |
|
|
| `strict`/`strictTypeChecked` | Maximal rules; heavy churn + bikeshed risk | |
|
|
|
|
**User's choice:** `recommendedTypeChecked`
|
|
**Notes:** Motivated by async-heavy backend (outbox/push/reminder schedulers). projectService: true.
|
|
|
|
## Rule Strictness — gate threshold
|
|
|
|
| Option | Description | Selected |
|
|
|--------|-------------|----------|
|
|
| `--max-warnings 0` | Any warning fails CI; every rule is error-or-off | ✓ |
|
|
| Errors only | Warnings surface but don't fail; softer rollout, accumulation risk | |
|
|
| You decide | Pick based on first-run count | |
|
|
|
|
**User's choice:** `--max-warnings 0`
|
|
|
|
---
|
|
|
|
## Existing-Violation Strategy
|
|
|
|
| Option | Description | Selected |
|
|
|--------|-------------|----------|
|
|
| Fix all violations now | Phase green across both apps; real bugs fixed; larger phase | ✓ |
|
|
| Minimal green ruleset, ratchet later | Enable only passing rules; small phase, weaker gate, deferred work | |
|
|
| Baseline file (snapshot + ratchet) | Snapshot current violations as accepted; new-only fails; extra tooling | |
|
|
|
|
**User's choice:** Fix all violations now
|
|
**Notes:** Hard constraint added (D-13-06): fixes must address the violation, not mask it — no blanket eslint-disable, no `void` to silence floating promises; suppressions need justifying comments.
|
|
|
|
---
|
|
|
|
## Prettier Scope
|
|
|
|
| Option | Description | Selected |
|
|
|--------|-------------|----------|
|
|
| `eslint-config-prettier` only | Disable conflicting format rules, no Prettier itself; phase stays ESLint-only | |
|
|
| Add Prettier + format gate too | Full lint+format; scope creep beyond goal; reformats all files now | ✓ |
|
|
| Defer Prettier entirely | ESLint only, no config-prettier; future conflict risk | |
|
|
|
|
**User's choice:** Add Prettier + format gate too
|
|
**Notes:** Expands ROADMAP Phase 13 goal ("ESLint only") — flagged for planning to update ROADMAP one-liner + success criteria. Follow-up decided wiring: standalone `prettier --check` + eslint-config-prettier (rejected eslint-plugin-prettier).
|
|
|
|
### Prettier wiring (follow-up)
|
|
|
|
| Option | Description | Selected |
|
|
|--------|-------------|----------|
|
|
| Standalone + config-prettier | Separate `prettier --check` CI step + eslint-config-prettier off-switch; clean separation | ✓ |
|
|
| eslint-plugin-prettier | Prettier as an ESLint rule; one gate, slower/noisier, discouraged | |
|
|
|
|
**User's choice:** Standalone + eslint-config-prettier
|
|
|
|
---
|
|
|
|
## Lint File Coverage
|
|
|
|
| Option | Description | Selected |
|
|
|--------|-------------|----------|
|
|
| All TS/TSX: src + tests + e2e + configs | Most thorough; needs projectService + config-file override; more first-run fixes | ✓ |
|
|
| src/ + tests, skip configs | Simpler, configs unchecked | |
|
|
| src/ only | Smallest scope; tests + e2e harness + configs unlinted | |
|
|
|
|
**User's choice:** All TS/TSX (src + tests + e2e + configs)
|
|
**Notes:** Config files need a non-type-checked override block (D-13-10).
|
|
|
|
---
|
|
|
|
## Claude's Discretion
|
|
|
|
- Flat-config file layout (single root vs per-app)
|
|
- Exact `.prettierrc` options (standard defaults)
|
|
- CI step ordering within `fast-checks`
|
|
|
|
## Deferred Ideas
|
|
|
|
None — Prettier was folded into scope, not deferred. Reviewed-but-not-folded: the Phase 8 Gitea-CI todo (already complete, matched on shared keywords only).
|