v2.1.1 #9

Merged
xavier merged 8 commits from dev into main 2026-08-27 23:10:36 +02:00
Owner
No description provided.
docs(plans): open v2.1.1 scope — session restore on reload (boot-order race)
All checks were successful
release / build + scan + publish (push) Successful in 46s
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 2m15s
9b1843075f
Principal-directed promotion of the two session-restore backlog items
(ephemeral reload + hard-reload/deep-link bounce) into a single-purpose
maintenance version; same root cause (module-scope router creation races
async boot/restore), one fix. Fix shapes (router-after-boot vs guard-gated
boot), comment truth-up, and the regression-E2E coverage are recorded as
promotion commitments; the Plan layer awaits the Principal's greenlight.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
The browser router was created at module scope; react-router's
constructor runs the initial navigation immediately, so requireSession
saw status 'uninitialized' and bounced valid restorable sessions to
/login before main.tsx's boot() reached restoreOnLoad(). Per ADR #51
shape (a): buildRouter() factory called in the boot-then-render seam;
App receives the router as a prop; the guard's 'uninitialized' branch
becomes a loud invariant Error (never a redirect). Comment truth-up
sweep: session-guard.ts header, main.tsx docblock, App.tsx docblock.

Blast-radius correction vs ADR #51 §4: app-locale.test.tsx (not just
session-guard.test.ts) needed adapting — it vi.mocks the router module
and renders the production <App />, which now requires the router
prop. The mock exposes the same buildRouter() factory over its shared
singleton memory router; suite design unchanged. cross-tab-component
and error-pages byte-untouched.

Verification: pnpm -r build, pnpm -r test (2907 passing), typecheck,
lint — all green.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
Commitment 3 of the v2.1.1 plan: tests/e2e/session-restore.spec.ts
pins the reload/deep-link matrix — post-login reload x {remember ON,
remember OFF}, deep link with a valid restorable session, and the
negatives (absent session and expired session bounce to /login, with
the expired blob erased per auth-session.md). Expiry simulated by
backdating lastActivity past the live /config sessionTimeoutSeconds
(no forked short-timeout stack); testing note added to auth-session.md
(mechanics only, the plan's one permitted spec edit).

Second blast-radius correction: i18n-live-switch.spec.ts test 1 had
pinned the pre-fix boot-order race itself — asserting the French LOGIN
FORM after reload via a documented workaround. Post-fix it asserts the
protected surface re-renders authenticated in French (strictly
stronger; i18n contract unchanged).

5/5 new tests green (run twice), minio-happy-path smoke 13/13,
pnpm -r test 2907/2907.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
Reviewer verdict CLEAN over 4246c63..148591a with no change requests:
loud invariant throw kept (ruling 1), both blast-radius adaptations
accepted (rulings 2-3), V7-era sketch comments left as-is (ruling 4).

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
Full battery against 2f892a0 (clean tree): build, unit 2907/2907,
integration 7/7, E2E 66 passed / 0 failed / 5 AWS-gated skips with
0 retries, typecheck, lint, duckdb-pin + locale-catalog gates (both
no-ops as expected). All stacks torn down; tree clean. v2.1.1 awaits
the Principal's tag; post-tag file deletion per convention.

Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
docs(architecture): ADR #51 §4 amended — post-implementation blast-radius corrections (app-locale module mock, i18n-live-switch bug pin)
All checks were successful
CI / pnpm gate (typecheck, lint, build, test) (push) Successful in 2m7s
CI / pnpm gate (typecheck, lint, build, test) (pull_request) Successful in 1m46s
release / build + scan + publish (push) Successful in 44s
641910070d
Co-Authored-By: Xavier's assistant <assistant@gijoe88.com>
xavier merged commit 641910070d into main 2026-08-27 23:10:36 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
xavier/s3-vedrfolnir!9
No description provided.