Repository navigation
CI-001B4 — Make frontend lint non-mutating and fail closed #186
Description
Outcome
Complete through PR #189. Main commit: bec7d5e365eacb418563a172029f241f660d9768.
The frontend CI job no longer rewrites source or ignores lint failure. It runs a direct, blocking checker over 102 JS/JSX/TS/TSX files before application tests, then proves tracked and non-ignored untracked paths stayed clean.
Child of #105 (CI-001). Depends on #124 (closed).
Released claim
CLAIMED by /root at 2026-07-13T22:10:25Z on codex/issue-186-frontend-lint-gate. The isolated branch refreshed onto 28681ef74a8aaa1addb2c01d533442dd952e65c1, exact source commit 0bb164904fb6a8352c6141fc44ff7cd30425e750 was reviewed, and PR #189 squash-merged as bec7d5e365eacb418563a172029f241f660d9768.
The nine-path claim is released.
Verified invariant
- The lint process disables the repository-wide
eslint-plugin-only-warneffect so configured severity remains visible. - The reviewable baseline contains all 102 scanned files and every individual finding: 125 configured errors and 7 warnings.
- Any added, removed, moved, or changed record rejects.
- Fatal parser/configuration/process failures reject through one fixed message; hostile exception getters/Proxies cannot leak their text through the CLI or test harness.
- The exact job prefix pins the GitHub-hosted runner, read-only permission, credential-free checkout, Node 20, dependency install with lifecycle scripts disabled, direct lint, and immediately adjacent clean proof.
- Structural tests reject duplicate YAML keys, self-hosted runners, global/job/step overrides, inserted environment steps, reordered wiring, mutation, incomplete scope, and swallowed failures.
- Ignored dependency/build paths and an operating-system sandbox remain explicitly outside this proof.
Acceptance
- Add one explicit non-mutating
lint:ciscript covering frontend JS, JSX, TS, and TSX. - Preserve configured severities by disabling only the process-local effect of
eslint-plugin-only-warn. - Store all 102 scanned files and all 125 configured errors plus 7 warnings as deterministic, reviewable individual records.
- Accept only the exact reviewed records and reject fatal/malformed/missing/failed input.
- Share one safe verification wrapper between CLI and test harness and emit only one fixed bounded rejection.
- Replace the fail-open workflow line with direct Node lint followed immediately by the clean check.
- Pin the runner/job/setup trust context and reject overrides or prefix changes.
- Keep the opt-in
lint:fixutility out of CI. - Add hostile workflow, finding, parser, exception, and dirty-checkout tests.
- Prove exact lint success, deliberate fatal failure, hostile-exception redaction, and probe removal.
- Run frontend, SPA, workflow, Functions, Rules, commerce emulator, build, and diff checks.
- Update exact engineering status without claiming clean lint, branch protection, or deployment.
- Record exact pull-request and post-merge hosted evidence.
Evidence
- Three independent reviews: approved.
- PR run 29291402007: all five GitHub jobs passed; exact install, lint, clean, tests, and build steps passed; Netlify disposable preview passed.
- Post-merge run 29291515653: all five jobs passed on exact main
bec7d5e365eacb418563a172029f241f660d9768, including the named lint and clean steps.
Officer impact: None — this changes an engineering quality gate and no officer task or public behavior.
Officer documentation: None — no officer procedure changes.
Deployment evidence: Source, tests, merge, hosted PR CI, disposable preview, and post-merge CI are proven. No production website publication, Firebase deployment, Stripe/provider change, branch-protection change, or production behavior occurred.
Activity
daliu commentedon Jul 13, 2026
Claim correction before editing: the required frontend extensions are JS, JSX, TS, and TSX. Exact-base read-only lint reports 132 warnings and zero errors across those four extensions. Acceptance and excluded scope now pin ceiling 132 and explicitly forbid lint-rule weakening or application-source cleanup. The earlier 29 count covered only JS/JSX.
daliu commentedon Jul 13, 2026
Final pre-edit scope amendment: replace the count-only ceiling with an exact reviewable warning-fingerprint baseline and a dependency-free checker. Owned paths now include only
.github/scripts/check-frontend-lint.cjsand.github/lint-baseline.jsonfor that purpose. Exact 132-warning inventory: JS 2, JSX 27, TS 2, TSX 101 across 102 files. Any added, removed, or changed fingerprint must fail and require reviewed baseline movement.daliu commentedon Jul 13, 2026
VERIFICATION PAUSED at 2026-07-13T22:19:02Z: exact origin/main and the #186 worktree both reproduce one macOS Node 20.20.2 failure in untouched functions/requestValidation.test.js. Hosted exact-main Linux CI 29288647739 passed 990/990. #186 does not own or edit that path. I am keeping the #186 claim/diff unchanged and extracting a separate test-only portability fix before PR, then will refresh #186 onto the resulting main.
daliu commentedon Jul 13, 2026
DEPENDENCY CLEARED at 2026-07-13T22:28:48Z: the unrelated macOS/Linux Node 20 baseline defect is fixed under #187/#188 at main 28681ef; post-merge CI 29289912751 passed. #186 extraction resumes after a controlled refresh onto that exact main. Its original claimed paths remain unchanged.
daliu commentedon Jul 13, 2026
EXTRACTION FINISHED — 2026-07-13T22:54:46Z
Exact isolated source commit:
0bb164904fb6a8352c6141fc44ff7cd30425e750PR: #189
The nine-path claimed slice is committed and pushed. Three independent reviews approve. Exact local Node 20 evidence includes direct lint 102 files / 125 configured errors / 7 warnings; 42/42 workflow tests; 133/133 frontend tests; 10/10 SPA tests; Functions lint plus 990 pass / 32 skipped; Rules 317/317; commerce emulator 31/31; diagnostic build; fixed fatal-parser and hostile-exception probes; and the exact post-commit clean check.
Status remains
status:in-progressuntil exact PR and post-merge hosted evidence pass. No website, Firebase, Stripe/provider, branch-setting, or production change has occurred.daliu commentedon Jul 13, 2026
COMPLETE / CLAIM RELEASED — 2026-07-13T22:59:04Z
PR #189 squash-merged as exact main
bec7d5e365eacb418563a172029f241f660d9768. Pull-request CI 29291402007 and post-merge CI 29291515653 passed every GitHub job; both exact frontend jobs passed lifecycle-disabled install, direct non-mutating lint, immediate clean-check proof, tests, workflow validation, and build. Three independent reviews approved.No production website, Firebase, Stripe/provider, or branch-setting change occurred. The nine-path claim and branch ownership are released.