Skip to content

Conversation

@tyemirov
Copy link
Collaborator

  • feat(auth): gate Gravity behind landing page (GN-126)
  • feat(domain): introduce LandingAuthAttributes smart constructor; move validation to edge
  • feat(frontend): introduce mpr-ui static loader; move auth wiring to config edge
  • feat(frontend): introduce MprUiCdnAssets smart constructor; move validation to edge
  • feat(frontend): allow runtime google client id override; validate at edge
  • Fix GN-434 sync end-to-end focus race
  • Document GN-434 resolution
  • Fix GN-435 htmlView anchor drift
  • Fix GN-438 runtime Google client ID
  • Fix GN-439 IndexedDB persistence
  • Fix GN-439 test harness constant
  • Load tauth.js via CDN and untrack env files
  • Load mpr-ui via runtime config
  • Fail fast on auth boot and pre-init GIS
  • Fix GN-442 auth boot and gHTTP /me proxy
  • Align login button auth wiring
  • feat(auth): adopt mpr-ui config.yaml loader
  • fix(auth): pre-init tauth before mpr-ui login
  • chore(dev): align ghttp/tauth config with demo
  • fix(auth): serialize concurrent auth operations to prevent race condition
  • chore(deps): bump mpr-ui to v3.6.2
  • fix(tests): resolve TAuth harness timing issues and update page-separation tests
  • Shortcuts for docker orchestrtaion
  • Fix GN-447 auth bootstrap and login E2E
  • feat(ui): enforce fullscreen menu-only toggle and tests

tyemirov and others added 26 commits January 22, 2026 22:54
- add landing auth gate with invariants: signed-out sees landing, signed-in sees app

- adapt handlers/adapters to construct at edges: mpr-ui auth + per-test harness isolation

- remove interior defensive checks (shared harness globals) to prevent test flakes

- wrap errors with operation+subject+stable code (e.g., mpr_ui.load_failed)

- CI: go vet/staticcheck | ineffassign | npm test | make ci passing
… validation to edge

- add LandingAuthAttributes invariants: base/login/logout/nonce attributes set from runtime config

- adapt landing login wiring to construct attributes at bootstrap edge

- remove interior defensive checks (n/a)

- wrap errors with operation+subject+stable code (n/a)

- CI: make test, make lint, make ci passing
…onfig edge

- add static mpr-ui bundle tag and template mounts for auth elements

- adapt bootstrap to mount auth elements after runtime config + tauth load

- remove dynamic mpr-ui loader to avoid pre-init attributes

- wrap errors with operation+subject+stable code (unchanged)

- CI: make test | make lint | make ci passing
…dation to edge

- add MprUiCdnAssets with invariants: mpr-ui css/js use @latest CDN tag

- adapt handlers/adapters to construct at edges (update CDN mirror patterns)

- remove interior defensive checks (validated once at boundary) (not applicable)

- wrap errors with operation+subject+stable code (unchanged)

- CI: make test | make lint | make ci passing
…edge

- add runtime googleClientId override with invariant: non-empty string

- adapt runtime config JSON + harness payloads to supply client id

- keep validation at runtime-config boundary; no new interior checks

- emit stable error code for invalid client id (app_config.invalid_google_client_id)

- CI: make test/make lint/make ci, tsc --noEmit passing
- add frontend/config.yaml with per-origin auth settings

- load mpr-ui config before bundle and remove manual auth wiring

- enforce strict auth boot via config loader promise

- CI: make lint passing; make test/make ci killed by sandbox
- wait for DOMContentLoaded before config load

- init tauth + prime nonce prior to loading mpr-ui.js

- CI: make lint passing; make test killed by sandbox
- mirror mpr-ui demo proxy routes and origin lists

- expand CORS + tenant origin placeholders in config.tauth.yml

- CI: make lint passing; make test killed by sandbox
…tion

Added auth operation chaining to prevent race conditions when concurrent
auth events (authenticated/unauthenticated) interleave during async
operations like IndexedDB hydration.

Previously, rapid auth state changes could cause activeStorageKey to
change during hydrateActiveScope(), leading to a mismatch when
ensureHydrated() was called and throwing 'storage.notes.not_ready' error.

Changes:
- Added authOperationChain (Promise) to serialize auth operations
- Added authOperationId (number) to track and cancel stale operations
- Modified handleAuthAuthenticated to chain operations and check ID
- Modified handleAuthUnauthenticated with same pattern

Tests: node --test tests/auth.operationChain.test.js (9 tests)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Updates mpr-ui CDN references from @latest to @v3.6.2 which includes
the MU-132 fix for dispatching authenticated event after credential
exchange.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ation tests

- Remove authenticatedCount checks that required mpr-ui callback firing
- Use waitForSyncManagerUser to verify authentication completion
- Set initialProfile in TAuth harness to match expected test users
- Update UI tests to use prepareFrontendPage for proper auth flow
- Add skipAppReady option for landing page tests
- Set default 5-second timeouts for auth wait functions
- Refactor test harness to properly coordinate session cookies
- Add page-separation architecture (app.html + index.html)
- Delete legacy auth modules (auth.js, tauthSession.js, authControls.js)
- Add profileNormalization utility for TAuth/mpr-ui profile mapping

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- remove standalone fullscreen control and styling

- update menu toggle state handling with prefixed fullscreen events

- add Playwright coverage for menu-only toggle and webkit fallback

- CI: make test, make lint, make ci
@tyemirov tyemirov self-assigned this Jan 30, 2026
@tyemirov tyemirov closed this Jan 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants