Release notes

Each line is a single product change, written for you first—if the change had a short note in our source history, you’ll see that wording here. Newest first.

The line under each title is the human summary of what you might notice; the short code links to the exact change in source control.

This build: Web 0.1.1008 · API 0.1.193 · Cloud 1.0.4 · AI 0.1.26.

Last updated: June 21, 2026 at 8:52 AM

  1. Align turn plan with org kanban lifecycle · a41da09

    Merge IFEOMA-CLOUD360 turn-plan structure with TC kanban: group closeout, continuous drain/register, no circumvention rule, and adopter todo-lifecycle KB. Bundle sync + validate/audit gates green.

  2. DRY control-plane target schemas across fleet and pipeline APIs. · ff155da

    Shared control-plane-targets.yaml is now the SSOT for tenant targets and FleetTargetDescriptor; bundle tooling merges product shared schemas so nested refs resolve in generated Python models.

  3. Sync local changes · f8c5cc0

  4. Mark admin OpenAPI wire-parse and arch rebaseline done · 36703db

    Close API-OPENAPI-ADMIN-SYNTHETIC-MATCH-IRT, PSYCHOMETRIC-JOURNEY, and SIMULATION-MATCH-READS rows; log 2026-05-30 clean-arch rebaseline job ids.

  5. Strict admin API wire parsers for all JSON responses · eb06210

    Extend parseAdminResponsesFromWire for recalc, synthetic, psychometric, journey-length, pair-explain, match diagnostics, simulation agents, and max-visible-profiles. Remove response casts from features/admin/api.ts; add AdminTargetUserIdRequiredError, vitest fixtures, and README boundary docs.

  6. Typed admin recalculate-matches and tighten IRT/synthetic schemas · 6f0785e

    Add oneOf single/batch recalculate responses, AdminRecalculateMatchesRequest, strict AdminMatchIrtStatusResponse, and AdminBulkRecalcSummary maps on synthetic generate. Regenerate product OpenAPI bundle and zod/web-client artifacts.

  7. Typed admin profiles and connection-stage responses · c7429e0

    Add OpenAPI schemas for admin profiles CRUD, connection-stage, and biometric reset; DRY adminWireParse; fix connection-stage wire (no phantom success field).

  8. Typed AdminStats for GET /api/admin/stats · 7476727

    Replace loose additionalProperties response with AdminStats schema; parse at web boundary with generated Zod (no silent field mapping).

  9. Mark chat-session push done; add admin OpenAPI backlog · bd59379

  10. Typed PersistedChatSession for chat session CRUD · 7b4736a

    Replace loose session blobs with OpenAPI components and Zod validation at web and backend boundaries; add route test and contract-first invariants.

  11. CI billing blocker note and OpenAPI chat-session schema follow-ups · b5218df

    GHA skipped all jobs on ef9f95b1 due to org billing; local backend vitest green.

  12. Backend route mongo mocks, vitest serial pool, strict chat session messages · ef9f95b

    Route tests mock platform RBAC so internal auth does not open localhost Mongo; Vitest runs single-file to clear EnvironmentTeardownError; chat session wire requires a messages array instead of defaulting to [].

  13. Defer UserBlockService Mongo until use; assert self-peer before block checks. · b90ceba

    Discovery tests mock dismissals/profiles collection modules; align match bulk, pair-explain, and WebAuthn tests with ml_wave default and storage sanitize contract.

  14. Track tenant manifest JSON and align backend chat test mocks · a10016c

    GHA tenant list smoke failed because manifest.json and state/infra.json were gitignored. Backend vitest failed after messaging gates began calling getExistingConnectionStage: tests now use shared ConnectionService and Mongo stubs (blocks, dismissals, profiles). Config runtime test expects localhost domain from test env; admin bulk authUid prefix sim-gen.

  15. Mark passkey OTP mock and verify-stack pipeline-root fixes done · f52ca27

  16. Resolve pipeline root in fleet verify-stack and UI tests · 92ede80

    Tests used parents[3] as pipeline root; on GHA that is the application root and breaks application_root_from_pipeline_root. Use resolve_app_pipeline_root and hosting_dir_from_pipeline_root; add a fleet unit invariant. Mock InputOTP in passkeyLoginOption tests to avoid input-otp timers after jsdom teardown.

  17. Remove wrong pipeline_root fixtures overriding conftest SSOT · d6c9bf7

    Module-level parents[3] fixtures pointed at the application root, breaking tenant_packages_dir_from_pipeline_root on GHA where source/ is not a sibling of the checkout parent. All fleet unit tests use conftest _PIPELINE_ROOT.

  18. SSOT pipeline_root fixture for unit tests on CI · 9a0b7f8

    fleet/tests/unit conftest exposes canonical pipeline/ path; remove wrong parents[3] fixtures that break tenant_packages_dir resolution when the repo has no source/ sibling above the application root (GHA layout).

  19. Compile discovery.scope.restoreLoadFailed into messages bundles · c0ac3b6

    Shard keys must be built before CI messageKeysReferencedInSource runs.

  20. Hygiene batch — wire parser, match-intent UX, fleet/pipeline tests · 5969031

    Fail-closed optional string fields on chat wire rows; surface match-intent restore failures via i18n toast. Fix merge_env(mode=) in tenant-live-health, stabilize ml-internal unit tests with monkeypatch, bind verify-live tests to pipeline/src, and add MATCH_SCORING_SOURCE to env schema for seeder parity.

  21. Install operator requirements for Python CI pytest batch · 26f579c

    Operator infra CLI tests import FastAPI TestClient; hosting-only deps were insufficient.

  22. Anonymous topic modal distinguishes bank load failure · 84eda77

    Reuse useIcebreakerQuestionBank SSOT; show loadFailed + retry instead of empty-bank copy when GET /api/questions fails.

  23. Fail-closed chat connection transport for unknown stages · f7c562f

    Explicit live-stage allowlist; wire typos and schema drift map to inaccessible instead of live messaging (messagingLifecycleGate parity).

  24. ML pytest lab fixtures and KB p124 todo token · 8569e57

    Materialize lab_ui_table_bands and minimal pipeline_artifacts on GHA from tracked config/pytest_lab; ignore testbench-only and rich TUI tests.

  25. Arch audit rebaseline 30/18/17 and chat fallback backlog · 96e4db5

    Record clean-arch P0=0 audits and scoped anti-pattern findings for follow-up.

  26. ML pytest policy SSOT, chat peer invariant, test corruption · d00d5cc

    Root-cause CI failures: stage learning policy on GHA (prod_mongo), missing gitignored JSON fixtures, REPRO-PATHS app-pipeline typo, chat route normalizing before pair invariant, and a corrupted vitest import line.

  27. ML pytest policy path and live-test ignores on GHA · 7c54ff8

    Set ML_SERVICE_LEARNING_POLICY to tracked stage JSON in conftest and CI env so scorecard parity loads at import. Add pytest.ini live-module ignores so jsdom runners skip rich/TUI suites reliably.

  28. ML pytest green + universe DPR atomic CI fix · 96dc903

  29. Stub device hints in universe DPR atomics for CI jsdom · c745658

    Vitest reports low hardwareConcurrency and triggered low-power DPR caps; mock desktop-tier hints so cap assertions match UNIVERSE_WEBGL_MAX_DPR SSOT.

  30. Pytest green — mmr.nlp import SSOT and cohort feature version · 71f8a13

    Route mmr.nlp package root through lab (NlpConfig/runner) while production submodules (errors, backends) alias src.mmr.nlp for identical exception types. Align offline learning loop NLP v2 with fit_for_wave cohort affect resolution; fallback outcome models use feature_names_for_version. Tests catch domain_errors and fix live scorecard agent email typo.

  31. Web atomic green, BFF /uploads reject, admin route invariants · 9318871

    Align offline tests with backend admin route split, contract-first feature flags, i18n key SSOT, and post-0.1.909 BFF proxy rules. Refresh compliance ratchet baseline for fleet ML ops additions.

  32. SBOM prune exported images only; ML CI offline pytest scope · b22b6c2

    - Do not docker-rmi manifest images before their SBOM (simulation-worker fix) - Ignore test_live_* in ML pytest; track contracts scorecard fixture in git - Align adminApiDocsTabInvariant with PRODUCT_ADMIN_OPENAPI_SPEC_PATH SSOT - Arch audit rebaseline jobs 4cc4eb0d / 21ee1b25 / 42181ca5 (P0=0)

  33. Prune peer images before each syft SBOM on Build once · f1ea52b

    GHA runners keep all built images until the SBOM step; syft still hit no space left on device for application-ml-service. Drop other manifest images before each scan, sort ml-service last, and clear stereoscope /tmp.

  34. Free GHA disk after each syft SBOM export · 72660e6

    Syft failed on application-ml-service with no space left on device when writing docker image tar. Prune each local image after a successful scan and surface syft stderr in BuildSbomError messages.

  35. Restore web tsc inventory tests and ML pytest dev deps · 35a736b

    - Remove markdown corruption from universePrototypeDockI18nE2eInventory.test.ts - Add getOrbStateByPercentage SSOT; fix connection stage test fixtures - CI installs ml-service requirements-dev.txt (mongomock + httpx) - Syft SBOM export: drop --quiet so CI logs stderr on failure

  36. Un-ignore web-client features/**/lib next to src/lib gitignore rule · f1e0cf9

    Parent-directory exclusion from blanket lib/ blocked feature-owned helpers even with late negation rules; colocate exceptions with src/lib.

  37. Track web-client feature lib helpers ignored by blanket lib/ rule · 6e3d64c

    Move features/**/lib un-ignore next to src/lib exceptions and add eight error/journey/i18n/ui resolver modules so Docker Build once can resolve imports that passed locally but were never committed.

  38. Track missing OpenAPI generated api model files · bee1c86

    Root cause: src/generated/** gitignore blocked new OpenAPI Generator model modules while models/index.ts re-exported them — local builds worked (files on disk) but GHA Docker build:direct failed with 55 module not found errors. Un-ignore generated api client paths and commit the missing model artifacts from contracts generate-all.

  39. Mark CI web-lib gitignore fix todos done · a7f4bd3

  40. Track web-client src/lib sources omitted by gitignore · 1ac5a71

    Root cause: blanket lib/ ignore had app-source un-ignore rules only; source/20_web-client/src/lib/** (strictJsonObject, errors/core, navigation SSOT, etc.) existed locally but never reached GHA, breaking npm run build:direct in Docker. Mirror app-source exceptions and commit lib + tests/atomic/lib invariants.

  41. Track prod learning policy and psychometric config JSON · 215f970

    Root cause: blanket *.json gitignore hid files required by backend/ml-service Docker COPY steps, breaking GHA Build once. Add SSOT exceptions matching learning_policy.stage.json and commit both artifacts.

  42. Mark audit evidence commit todo done · adb2bf3

  43. Sync audit rebaseline 25 and stage semver evidence · 8ba1444

    Record P0=0 jobs ef7f4cab/c26655c8/bc909fea, refresh AGENTS.md stage table to web 0.1.1001 and API 0.1.188, and align project todos.

  44. Mark architecture commit and stage deploy todos done · 9d543ad

  45. Sync architecture audit evidence and project todos · 75ac595

    Record latest clean-arch rebaseline jobs and close commit-gate hygiene rows.

  46. Arch hygiene, i18n shards, and production build fixes · 5e05ef6

    Stop exporting server-only UnprefixedRouteShell from the app-shell barrel, localize discovery scope and profile culture copy, consolidate dev operator errors under devShell i18n, remove dead adminAuth, and fix TS/build blockers.

  47. Auth request SSOT and fail-closed profile route guards · d3620b9

    Extract AuthenticatedRequest to lib/auth, route profile handlers through getAuthenticatedRequest, and add architecture invariants for clean-arch audit.

  48. Mirror @config alias in vitest for SSOT threshold tests · e39f3f0

    Vitest only resolved @/ while threshold loaders use @config/* from tsconfig; add the alias to both vitest configs, an invariant test, and the prod audit sweep.

  49. Unblock clean-arch rebaseline at P0 zero · 2f7205e

    Document dependency_graph_analyser at /home/doc1024/Documents/tools/… in core-agent rules; remove JSDoc import() links that caused phantom P0 edges. Re-audit job f4b90c1e confirms error_violations 0 (was 116 pre-epic).

  50. Enable prod learning and ML wave env keys for ifeoma-tc · 086e611

    Add learning scorecard ingress, outbox polling, and local NLP backend settings to prod tenant env so ML wave scoring aligns with stage policy.

  51. Record clean-arch audit runbook and close WEB-ARCH todos · 8be545d

    Document dependency_graph_analyser path, navigation index entry, rebaseline metrics (P0 116→2), and mark WEB-ARCH epic items done in project todos.

  52. Clean architecture layer boundary sweep · b8620b1

    Split design-system presentation from features wiring: AppNav, match-card, journey chrome, i18n shell, errors, auth guards, and UI chrome resolvers. Remove nextjs-api shim, move Match type to features/discovery, add layer invariant tests, waitlist landing client, and contract-first HTTP gates.

  53. Add diagnostics CLI commands for fleet invoke · 891fc62

    Register workstation diagnostics helpers and fleet subprocess wrapper with CLI docs and tests so operators can run targeted health checks without chaining legacy fleet CLIs ad hoc.

  54. Add mobile app waitlist public API · 22033b1

    OpenAPI POST /api/public/mobile-app-waitlist with generated web client, Zod schemas, and BFF public-route proxy exclusion so the Next.js handler receives traffic instead of Fastify upstream.

  55. Centralize product threshold JSON SSOT · 1eba23c

    Move match, connection-ring, admin, and journey maturity thresholds to source/config with web-client mirrors and a Docker sync script so runtime and vitest SSOT tests read the same files.

  56. Remove deprecated matchScoreBandLocaleKey · e51a693

    Unused after formatMatchScoreBandRangeLabel SSOT labels; closes CL-HYGIENE-003.

  57. Close continuous-learning prod audit v3.5 · 4a8a33a

    Centralize threshold and scorecard-label SSOT in config JSON with parity CLIs and vitest/pytest guards; migrate ML routes to mmr adapters with a single routes/dependencies seam and thin jobs shims; remove IRT paths and silent fallbacks; rebuild i18n for dynamic maturity/learning band placeholders.

  58. Sync project todos, AGENTS stage table, E2E merged-env notes · 01eef0f

    Record Qwen/match-fit/openers/admin QA completion rows, stage deploy verify todos, and E2E helper documentation for locale shards and health gates.

  59. Prototype dock operator locale i18n build scripts · 7f31a93

    Add scripts to build and apply final prototype-dock operator locale strings for universe scene debug chrome.

  60. E2E and vitest for match-fit, openers, admin QA · 4601911

    Add Playwright specs and route stubs for match-fit peer sheet, connection openers DE language note, admin journey-length narrative, and outcome-by-band viewports. Locale shard helpers, health version gates, and invariant tests.

  61. Match-fit, openers, admin QA, server-prose language chips · a67fbc5

    Ship discovery match-fit narrative, connection openers, profile NLP affect, admin psychometric/journey-length/outcome panels, and shared ServerGeneratedProseLanguageNote. Contract-first generated clients, typed connections API validation, admin confirm-modal SSOT, universe empty-pool i18n, and web 0.1.999.

  62. Match ML ops CLI, tenant gather NLP, contract models · 3333301

    Add fleet commands for match-item-stats and admin outcome-by-band probes; refresh generated contract models; extend operator tenant-deployment gather and CLI HTTP helpers for steered deploy workflows.

  63. NLP secrets, ml-service health probe, stage env · 350f152

    Extend merge-env and tenant API for NLP backend settings, bake ml-service NLP deps in compose, and refresh ifeoma-tc stage/deploy env templates for Qwen.

  64. Match-fit, openers, admin QA, E2E ml_wave materialization · 572f361

    Wire discovery match-fit narrative, connection openers, icebreaker recommendations, profile NLP affect, and admin psychometric/journey-length routes. Add grounded fact bundle SSOT, Qwen client integration, ml_wave E2E discovery peer seeding, and match recalculation scheduler guards (API 0.1.187).

  65. Qwen grounded generation, NLP jobs, learning audits · 0775911

    Add on-prem Qwen routes and jobs for match-fit narrative, question-bank QA, reflection enrich, and connection openers. Ship learning scorecard ingress, label audits, cohort weight tests, and NLP env contract updates (0.1.6).

  66. Regenerate web-client and fleet API clients · 7e386d1

    Refresh generated TypeScript and Python models after OpenAPI additions for match-fit, openers, admin QA, profile NLP affect, and ml-service Qwen routes.

  67. Qwen surfaces, match-fit, openers, admin QA routes · 46a7895

    Add product OpenAPI paths and schemas for match-fit narrative, connection openers, icebreaker recommendations, profile NLP affect, admin psychometric audit, journey-length recommendation, and match outcome by band. Extend ml-service and tenant API contracts for grounded generation and NLP settings.

  68. Restore structural label fix row · 011f0b0

  69. Bank audit DONE, rename outcome label diversity todo · 50898c2

  70. NLP backend blank settings defer to env (0.1.17) · 27d1b75

    Empty Settings.nlp_backend no longer blocks NLP_BACKEND merge-env. Profile NLP route maps NlpError to HTTP 503 with explicit detail.

  71. Tenant-audit-profile-bank-alignment + gate plane C trace (0.1.16) · d72e7e6

    Ship audit script in ML image; Fleet SSH docker exec for legacy bank drift. Learning gate logs plane C skew/kurtosis for operator grep.

  72. Sync cohort deploy and plane C partial status · e6ca7e8

  73. Mark ML wave stage gate pass and cohort deploy DONE · 9a75fad

    Stage wave 0 commitApplied true on AI 0.1.15; plane C y=0 diversity remains partial.

  74. PsychometricRegistry.questions is a list; build_item_surfaces_for_wave incorrectly called .values() causing wave 500 after gate pass on mongo bank. · bf3968e

  75. Bootstrap 03_weights for wave commit (0.1.14) · 094248a

    Stage wave run-once returned HTTP 500 when gate passed but calibration-artifacts lacked 03_weights.json. Bootstrap uniform baseline under bootstrap_mode and map LearningExportError to HTTP 200.

  76. Add grep-friendly cohort overlap traces and a Mongo bank-alignment audit CLI for legacy profile journey key drift. · 22aef06

    Add grep-friendly cohort overlap traces and a Mongo bank-alignment audit CLI for legacy profile journey key drift. Fix label_all_pairs to resolve agents by subject_id (authUid) instead of email-only lookup. Untrack lab learning.db.

  77. Phase 1 prod wave, mongo psychometric bank, NLP boundary · d7a4116

    Port continuous-learning core to src/mmr (wave runner, cohort, egress, NLP affect), load psychometric registry from Mongo on stage, fix prod NLP to use src/mmr/nlp/models (not lab/), pass ML/NLP env through compose, and align tenant stage mode_overrides. ML service 0.1.11; tests include import boundary and OpenAPI route SSOT.

  78. Align ifeoma-tc stage env ML service version to 0.1.6 · 466ba37

    Refresh PACKAGE_INDEX and stage/deploy env pins after ML service semver bump.

  79. Update master-plan and module todos for peer lifecycle, admin Q&A, and mailbox gate workstreams. · 3511007

    Update master-plan and module todos for peer lifecycle, admin Q&A, and mailbox gate workstreams. Extend CI workflow coverage and document admin answers import versioning.

  80. Contract-first APIs, chat peer lifecycle, admin question bank, mailbox gate · 1e018ae

    Migrate remaining product HTTP to generated clients; add inactive-chat inbox filtering, acknowledge-unavailable-peer UX, admin Q&A export/import UI, and strict preferences parsing. Fail closed when session and profile lack a mailbox (app shell gate, onboarding read-only email, settings without no-email fallback). Bump web client to 0.1.969 with i18n and tests.

  81. Peer lifecycle dismissals, admin Q&A export/import, preferences strict blob · 19b3d96

    Implement acknowledge-unavailable-peer with viewer_peer_dismissals, filter dismissed peers from connections and discovery lists, admin answers export/import routes, and UserPreferencesBlob validation on preferences. Add mongo integration tests and chat session peer profile policy. Bump API package to 0.1.175.

  82. Extend product API for peer lifecycle, preferences, and admin Q&A · 1cee573

    Add OpenAPI paths and schemas for acknowledge-unavailable-peer, user preferences blob, admin question answers export/import, and stricter question/connection-statement models. Regenerate web, zod, and fleet contract models from the updated product spec.

  83. Record ProfileDeleteResponse and landing trust todo evidence · ee5d43d

    Mark contract and landing-trust slices done; clarify full-deletion scope backlog.

  84. Regenerate release-notes after ProfileDeleteResponse and landing trust commits. · c38f830

  85. Guard landing trust strip against data-export copy · d16dbe3

    Assert dataSelfService uses delete iconography and docs omit export claims.

  86. Align profile settings README with delete-only data UX · 793ce68

    Remove export-account references; document DELETE /api/profile and sign-out after self-service deletion.

  87. Validate ProfileDeleteResponse at parser boundary · 2eeda38

    Require profilePictureCleared and journeyReflectionCleared on DELETE /api/profile and expose the typed result from deleteProfileAccount.

  88. Regenerate clients for ProfileDeleteResponse fields · 7dc5f01

    Refresh OpenAPI types, profile API stubs, and Zod bundles after extending the profile delete response with picture and journey reflection flags.

  89. Extend ProfileDeleteResponse with deletion scope fields · 153d0a3

    Document profilePictureCleared and journeyReflectionCleared on self-service DELETE /api/profile, including what is and is not hard-deleted today.

  90. Landing trust badges reflect delete-only data controls. · 85649c7

    Removes export copy from the trust strip, uses a delete-account icon, and refreshes landing locale shards plus compiled message bundles.

  91. Document ProfileDeleteResponse on DELETE /api/profile. · 8df1102

    Adds the OpenAPI schema and route response for self-service account deletion so codegen and client parsers share one contract-first delete envelope.

  92. Records completed chat lifecycle, contract-first HTTP, i18n CSV hardening, account-deletion orchestration, and stage E2E verification rows. · a49d498

  93. Regenerates messages/*.json and release-notes evidence after profile-delete, chat contract-first, and i18n shard updates in this batch. · a41eb11

  94. E2E journey welcome gate and chat viewport shell specs. · e513f6d

    Dismisses journey-intro before polling hub progress URLs and adds Playwright viewport coverage for lifecycle-ack and unknown-peer chat routes.

  95. Harden i18n CSV tooling with shared SSOT helpers. · 99df57a

    Centralizes shard listing, leaf flattening, and cell codec across export/import scripts; rejects CSV path conflicts and missing locale cells; removes dead chat.system.profileNotAvailable keys from locale shards.

  96. Contract-first chat messages, media upload, and transcript export. · 3d5368a

    Routes chat HTTP through generated api.chat clients with strict response parsers and shared error mapping so features/chat no longer uses ad-hoc fetch or raw JSON casts.

  97. Chat peer lifecycle ack dialog and strict chats-route transport. · e189193

    Ports lifecycle-ack test ids onto BaseModal, decouples thread render phases from connection-stage gates, and resolves embedded chat routes through strict peer transport validation with general peer-unavailable copy.

  98. Contract-first profile delete and honest settings UX. · 389b101

    Uses generated deleteProfileAccount with parseProfileDeleteResponse, signs the user out after a successful delete, and localizes updated delete-modal copy across all base locale profile shards.

  99. Orchestrate self-service account deletion side effects. · b927c18

    Adds AccountDeletionService to purge profile media, journey reflection, and connection rows; wires DELETE /api/profile to structured success logging and extends contract tests for the delete response envelope.

  100. Regenerate product API clients across modules. · 03d1217

    Keeps fleet, tenant, pipeline, and ML service generated models aligned with the current OpenAPI contract surface; refreshes tracked web Zod schema index.

  101. Mark chat lifecycle hardening todos done at web 0.1.929 · fd5d1cc

  102. Fail-closed connection validation and profile delete contract · c15a17a

    Remove English getConnectionActionLabel shim, add canBlock SSOT, align DELETE /api/profile OpenAPI with connectionsEnded, and wire resolvePeerTransportId in ChatView.

  103. Record chat peer lifecycle completion and repo semver 0.1.928 · 203a3b3

    Update master plan, AGENTS semver table, and project todo rollups for the lifecycle slice.

  104. Regenerate product API clients and profile delete route · cfe5331

    Refresh OpenAPI-derived web/backend artifacts for self-service profile delete and admin API docs surfaces.

  105. Chat peer lifecycle UX with general unavailable copy · 561bdae

    Decouple viewer vs peer thread gates, add lifecycle acknowledgement, inbox stub labels, and i18n for quiet peer-unavailable messaging across five locales.

  106. Chat peer lifecycle gates and profile-delete cascade · 7040320

    Centralize peer profile checks and read-only transcript policy on chat paths, terminate connections when a profile is deleted, and document viewer-only block semantics.

  107. Extract admin maturity bands · a7eeb05

    Move platform maturity thresholds into a named helper so analytics buckets and averages do not depend on inline coercion.

  108. Capture product readiness gate layers · b5140fd

    Document the separate onboarding, journey, signal, discovery, and chat gates so future cleanup does not collapse unlike completeness metrics.

  109. Record admin cleanup follow-up evidence · 81513e1

    Update product todos and stage notes with completed verification rows plus remaining deploy/report work.

  110. Bump product versions · 123bec1

    Refresh deployable semvers and release notes after the admin cleanup and UI consistency work.

  111. Cover admin journey and locale invariants · 1b745c2

    Lock admin analytics to capped Match targets and add regression coverage for locale-aware links, timestamps, percent display, and quadrant labels.

  112. Localize dynamic admin and profile UI · f3fa850

    Move hardcoded profile/admin presentation through locale-aware helpers so operators and profile surfaces do not render English-only fallbacks or browser-default dates.

  113. Drop legacy discovery English fallbacks · e7972cc

    Let missing legacy list bio and location remain absent so display components, not transformers, own user-facing fallback copy.

  114. Share discovery intent score reader · f48e554

    Consolidate viewer and peer intent score branching so both readers derive from the same enriched-or-scoped path.

  115. Centralize journey readiness targets · f5223ab

    Route journey completion checks through the target SSOT so hub, You, analytics, and route phase logic cannot drift from Match readiness.

  116. Delete selected profiles from table · 6752a4a

    Replace the one-off no-email cleanup with table filters, sorting, and explicit selected-profile deletion so admin cleanup is inspectable before destructive action.

  117. Add WEB-I18N-BASELINE-ZERO todos and refresh score SSOT evidence · 15ac7ec

    Roll up the remaining i18n scanner baseline cleanup across master-plan and module todo indexes, and document the stricter discovery score SSOT audit (8 tests).

  118. Audit discovery match score math stays in score model · 6f847d2

    Extend SSOT audit to forbid computeDiscoverySessionMatchScores and sessionMatchScore calls outside the canonical discovery score modules.

  119. Mark P133-MERGE-PR done after p124-repo-layout merge to main · e5a794c

  120. Sync generated schemas and P133 merge-pr todo note · 0bba11f

    Regenerated contract models and web zod schemas; update pipeline todo for PR #4 CI status after hosting/python-ci fixes on p124-repo-layout.

  121. Defer VMCreator until after network preflight · ee75108

    Unit tests for create_vm policy and network discovery must not require virt-install on CI runners; only disk/image provisioning needs it.

  122. Hosting VM guard before virt-install; align chat media wire test · c1ee4a2

    Check existing VM policy before VMCreator init so unit tests pass without virt-install on GHA. Install hosting requirements in python-ci job. Expect API media URLs from mediaId in wire parity test.

  123. Install operator hosting requirements in GHA python-ci (paramiko for edge TLS unit tests). · d1659c4

    Install operator hosting requirements in GHA python-ci (paramiko for edge TLS unit tests). Align chat media wire test with API URL derivation; mock UserBlockService in POST messages gate test so offline route tests avoid Mongo.

  124. Add dnspython to fleet requirements for DNS unit tests · ffd3e9c

    GHA python-ci fleet batch imports fleet_manager._dns; dnspython was only listed under operator hosting, not fleet/requirements.txt.

  125. Add pytest-order for hosting pytest.ini addopts · ec7d0ca

    Fleet batch runs operator hosting tests with --order-scope=module; install pytest-order alongside httpx in fleet/requirements.txt.

  126. Add pytest-order for hosting pytest.ini addopts · 4bb5b16

    Fleet batch runs operator hosting tests with --order-scope=module; install pytest-order alongside httpx in fleet/requirements.txt.

  127. Install httpx for pipeline sidecar client tests · e4d1159

    Fleet CI batch imports deployment orchestration tests that use httpx-backed sidecar clients; declare httpx in fleet/requirements.txt with operator parity.

  128. Install httpx for pipeline sidecar client tests · 0593204

    Fleet CI batch imports deployment orchestration tests that use httpx-backed sidecar clients; declare httpx in fleet/requirements.txt with operator parity.

  129. Defer PatReadResult annotations in deployment contracts · 4cc5ec2

    Add future annotations so classmethod return types resolve during module load (fixes Python CI collection on deployment whitelist tests).

  130. Defer PatReadResult annotations in deployment contracts · bd9f062

    Add future annotations so classmethod return types resolve during module load (fixes Python CI collection on deployment whitelist tests).

  131. Restore P133 PR gates (KB link, PyYAML, match-gate parity) · 61023da

    Track pipeline/build/README-BUILD-DIGEST-PROMOTION.md for KB link checks; install PyYAML in manifest post-build CI job; add source/tools parity script after app-source → source layout.

  132. Restore P133 PR gates (KB link, PyYAML, match-gate parity) · 0b416ba

    Track pipeline/build/README-BUILD-DIGEST-PROMOTION.md for KB link checks; install PyYAML in manifest post-build CI job; add source/tools parity script after app-source → source layout.

  133. Skip PR build-once when diff has no catalog components · 5fffb54

    Doc-only or layout-only PRs no longer fail the affected-components step; downstream SBOM/cosign/upload and deploy-consume skip when compose is skipped.

  134. Skip PR build-once when diff has no catalog components · 581e8d5

    Doc-only or layout-only PRs no longer fail the affected-components step; downstream SBOM/cosign/upload and deploy-consume skip when compose is skipped.

  135. Exclude root .gitignore from P124 path gate · e937c82

  136. Track manifest fixtures and install pytest in post-build job · e5f7d41

    Un-ignore pipeline/common/tests/fixtures/*.json so GHA offline manifest gates can read promotion fixtures. Add pytest + fleet PYTHONPATH to the build-manifest-post-verify workflow job.

  137. Mark B52-CI-GHA-COMPOSE done · bf3f221

  138. Mark B52-CI-GHA-COMPOSE done after green build-once · 89cfd87

  139. Default build CLI invocation_id for build-once GHA · 08a5163

    Build manifests require invocation_id; ci_build_once invokes build/cli.py without fleet. Generate a UUID v4 per CLI run when --invocation-id is omitted.

  140. Default build CLI invocation_id for build-once GHA · 5cd6107

    Build manifests require invocation_id; ci_build_once invokes build/cli.py without fleet. Generate a UUID v4 per CLI run when --invocation-id is omitted.

  141. Narrow P124 path gate and refresh tenant path strings · d6da672

    Gate only flags app-pipeline/ layout paths and pipeline/tenant/ (not every "tenant" token). Update KB, tests, and tracked env paths for post-layout tree.

  142. Narrow P124 path gate and refresh tenant path strings · 8aeb41a

    Gate only flags app-pipeline/ layout paths and pipeline/tenant/ (not every "tenant" token). Update KB, tests, and tracked env paths for post-layout tree.

  143. Track src/lib/api/version.json for Docker builds · a230dab

    The API semantic version module imports version.json; the global *.json ignore rule kept it out of git so CI build:direct type-check failed.

  144. Track src/lib/api/version.json for Docker builds · 4aebff8

    The API semantic version module imports version.json; the global *.json ignore rule kept it out of git so CI build:direct type-check failed.

  145. Restore consumer map links and fleet bootstrap in manifest scripts · 718aa59

    Add contracts/consumers/README.md, point KB links at operator-control-plane.mdc and Operator hosting paths, and call ensure_fleet_sys_path from repo-root manifest verify scripts so GHA post-build gates load common.vm_states.

  146. Restore consumer map links and fleet bootstrap in manifest scripts · 5b72f7c

    Add contracts/consumers/README.md, point KB links at operator-control-plane.mdc and Operator hosting paths, and call ensure_fleet_sys_path from repo-root manifest verify scripts so GHA post-build gates load common.vm_states.

  147. Whitelist web-client scripts/lib and features/*/lib · 3ee3638

  148. Add releaseNotesCliExit for prebuild scripts in CI · 8197820

    Docker build:direct type-checks scripts/; releaseNotesCliExit was missing from the repo (ignored lib/ path). Provide fatal stderr helpers used by generate-release-notes and verify-release-notes-bundle-semvers.

  149. Add releaseNotesCliExit for prebuild scripts in CI · 008d43d

    Docker build:direct type-checks scripts/; releaseNotesCliExit was missing from the repo (ignored lib/ path). Provide fatal stderr helpers used by generate-release-notes and verify-release-notes-bundle-semvers.

  150. Commit landing scroll hooks and journey seed JSON for CI · 7351346

    Restore missing landingScrollPerformance module referenced by landing UI, whitelist lib/data/seeds JSON from the global *.json ignore, and track default question/statement banks required by build:direct in Docker.

  151. Commit landing scroll hooks and journey seed JSON for CI · 491aee3

    Restore missing landingScrollPerformance module referenced by landing UI, whitelist lib/data/seeds JSON from the global *.json ignore, and track default question/statement banks required by build:direct in Docker.

  152. Compliance ratchet bootstrap and operator fleet status path · 5355510

    Bootstrap fleet/src before check_compliance imports common; refresh compliance baseline after layout-era drift. Restore GET /fleet/tenants/{tenantId}/status in operator-gateway fleet paths source. Harden compose-build test subprocess mocks with stderr fields.

  153. Track ISO geography JSON for Docker/CI builds · 518e607

    The backend imports iso3166Alpha2Codes.v1.json at compile time; it was ignored by the global *.json rule so GHA build-once backend images failed with TS2307. Whitelist the file like cultureTaxonomyV1.json.

  154. Surface compose build errors and inject CI compile-time env · 866a442

    Log redacted docker compose stderr on failure, pass --ci-public-site-url from ci_build_once for allowlisted NEXT_PUBLIC_* / Server Actions keys, and add ci_build_time_env helper for GHA build-once web-client builds.

  155. Bootstrap fleet common merge for build-once GHA job · 7b5f95a

    Load pipeline_paths via importlib before common package init, set job PYTHONPATH to fleet/src, and pass fleet_operator_pythonpath_entries to build subprocesses so ci_build_once resolves common.vm_states on runners.

  156. Repair build-once workflow YAML and cosign step guards · e6c2e85

    Indent embedded Python in the PR affected-components step so GitHub accepts the workflow file; map cosign secrets to job env for valid step-level if conditions. Add contract test that the workflow parses.

  157. Record full-product-workflow GHA E2E pass · e55a1d0

  158. Inject infra into build_pipeline_build_context callers · c7a886e

    Pass tenant infra snapshot from Operator bridge and fleet tests instead of reading tenant.get_infra() inside pipeline build (module-boundaries).

  159. Restore valid OpenAPI fragment after control-plane commit corruption. · 4128ce3

    Align compliance script bootstrap with fleet_operator_pythonpath_entries.

  160. Close ADMIN-MATCH-PAIR-EXPLAIN with Playwright CI evidence · 66b213b

  161. Preflight skip for authenticated E2E workflows when E2E_MERGED_ENV unset · 94d2a08

    Align chat icebreaker and full-product-workflow GHA with admin match diagnostics (notice + skip). Add ubuntu24.04 Playwright override. Close admin match E2E todo row and refresh master-plan reconciliation.

  162. Admin match E2E green on stage and CI; fix pipeline pytest imports · 5da4f66

    Record Playwright admin-match-diagnostics 2 passed (stage + GHA run 26378285439). Pipeline tests import infrastructure.infra_ops via ensure_fleet_sys_path; add pipeline_control_src fixture for src namespace isolation.

  163. Green admin match diagnostics on stage via email-token login · 6329247

    When E2E_ZITADEL_SKIP_MANAGEMENT_PROVISION=1, sign in with NextAuth email-token only (no flaky Zitadel signedin loop). Navigate admin shell then user-profiles section. Verified: explain panel and compare matrix passed against stage (ifeoma-tc).

  164. Harden admin Zitadel login and document E2E_MERGED_ENV secret · 5fd995e

    Fix pipeline traefik tests to import infrastructure.infra_ops via ensure_fleet_sys_path. Admin session helper handles Zitadel signedin interstitial and email-token fallback; add GitHub secret setup doc. Extend admin route diagnostics vitest coverage.

  165. Align build context and tests with tenant.get_infra() registry · ea733da

    Use resolve_infra_registry_url on tenant infra snapshot; mark control-plane smoke tests integration; tighten deployment architecture pytest. Refresh operator-control-plane KB for HTTP-only steered deploy CLI.

  166. Note build:direct i18n compose and GHA admin E2E skip · ce693be

    Docker image build uses build:direct (shard messages + SW + next build). Document that admin match diagnostics workflow_dispatch skips Playwright when E2E_MERGED_ENV is not configured.

  167. InfraOrchestrationHost SSOT for deploy and reachability · 9b38296

    Introduce pipeline deployment.infra_orchestration_host and operator infrastructure_control host/composed_behaviors so deploy gates, whitelist policy, and verification resolve infra through one protocol instead of FleetManager type hints. Extend operator gateway contracts, steered-deploy UI invariants, and fleet/operator pytest coverage for host resolution.

  168. Skip admin match diagnostics E2E when E2E_MERGED_ENV is unset · 1541d15

    Add a preflight job so workflow_dispatch no longer fails on repos without the merged tenant secret; emit a notice with setup instructions instead.

  169. Extract e2eSeedConversationRequest helper; repeat seed when pair is already conversation_active returns 200 without 500. · 8ef0b57

    Extract e2eSeedConversationRequest helper; repeat seed when pair is already conversation_active returns 200 without 500. Admin profile search utils aligned.

  170. Record product push and post-push stage rebuild · 2d8466a

    Eleven commits on main deployed via rebuild-app; stage semver unchanged at web 0.1.913 / API 0.1.165 / AI 0.1.6; chat media 401/404 smoke OK.

  171. Refresh stage reconciliation to web 0.1.913 · 6adc40b

    Align reconciliation table with AGENTS.md live semver after admin match and weight-pipeline deploy loop.

  172. Stop proxying public /uploads; map wire mediaUrl to participant read path. · 8f767f4

    BFF and proxy matcher tests lock routing behaviour.

  173. Participant-only GET /api/chat/media/:mediaId · 4f1a582

    Authorize thread participants before streaming GridFS bytes; mediaUrl points at /api/chat/media/{id}. Remove public registerUploadsStatic plugin.

  174. Chat media read route and mediaUrl contract · 1b4271d

    GET /api/chat/media/{mediaId} plus UploadMediaResponse.mediaUrl as participant-authenticated path (not public /uploads).

  175. Localize profile last-active labels via profileEnrichment · 5d71014

    Replace hard-coded activity strings with profileLastActiveLabel + i18n shards; ProfileCard surfaces pass translate into enrichProfile.

  176. Single SSOT for discovery match percent display · 368c074

    Centralize display scores in getDiscoveryMatchScore / deriveDiscoveryProfileScoreModel; resolveMatchPercent returns null without silent zero; list, universe, chat, and connection surfaces share enrichment. Vitest SSOT audit and parity tests.

  177. Admin match diagnostics Playwright and stage evidence · a5e4484

    workflow_dispatch CI, npm test:e2e:ui:admin-match-* scripts, runbook links, and AGENTS.md stage 0.1.913 / API 0.1.165 / AI 0.1.6 verification rows.

  178. Admin pair-explain panel and compare matrix UI · e93a6c2

    User Profiles: explain pair, 2–3 profile compare matrix, journey 15/5 targets, materialized-score SSOT for operator diagnostics. i18n admin.matchExplain/* and admin.matchCompare/*; build:direct runs i18n:messages:build (0.1.913).

  179. Admin pair-explain API and match weight floor · f3d42f2

    MatchPairExplainService exposes bidirectional operator diagnostics; discovery list shares discoveryPeerInclusionEvaluator. loadMatchItemWeights applies floor when stats exist but weight is null (0.1.165).

  180. Materialize match item weights for degenerate histograms · 46ef4f2

    Resolve matchingDimension from the questions bank when answers omit it, use a present-answer bucket for item-stats, and apply entropy floor 0.15 for single-bucket items so backend recalc can load weights (0.1.6).

  181. Add admin match pair-explain OpenAPI and codegen · 2b0e005

    Operator diagnostics for bidirectional match rows, journey gates, discovery exclusion reasons, and ML weight context. Regenerates product zod and web-client types.

  182. Refresh stage order consistency doc references · baae4a2

  183. Stage web 0.1.908 and API 0.1.160 voice upload evidence · fe0dc45

  184. Deployment DTO boundaries, chat uploads proxy, semver bump · c77ce8e

    Align module boundary checks and deployment contracts with P133 schema batch; centralize infra registry URL resolution; extend tenant-deployment runner tests. Serve chat media via backend static /uploads plugin and BFF proxy routes. Bump web 0.1.907 and API 0.1.158; refresh generated contract models and todo evidence.

  185. P133-CI-SCHEMA partial progress on schema batch · 36d7f5b

    Record schema workflow steps 1–6 green; module-boundaries step 8 blocked by three pre-existing deployment/fleet import violations.

  186. List only tenants with initialized infra mode · 9703177

    Exclude manifest-only lab directories from GET /v1/tenants so partial packages do not 500 the control API. Schema batch module-boundaries step now includes fleet PYTHONPATH for common.vm_states.

  187. Record duplication refactor plan closure · bd68c5d

    Mirror DUPLICATION-REFACTOR-B7F5 as done on master plan and pipeline todo rollup.

  188. Align inbox and adapter tests with duplication SSOT · cc943fd

    Update transformToMatch and chats inbox tests for chat_active name policy and enriched display scores; preserve authUid in discoveryProfileAdapter; fix useDiscoveryProfilesForMatch sort invariant source check.

  189. Unify chat wire, media semantics, and contract parity · 14effbd

    Emit full ChatMessageWire including icebreaker fields; centralize media kind resolution for send, push, and export; align matchScope on discovery vs connections; use ListConnectionsQuery Zod at runtime and ProfilePublic builder for picture routes; add generated schema and route parity tests.

  190. Dedupe profile, score, ring, and name policies · 4c3a057

    Add shared pairwise dimensions, connection ring, peer name disclosure, discovery wire parser, match percent helper, and chat profile stub factory. Wire inbox and connection detail through connection-first discovery resolvers; fence legacy ListView mapper; align score APIs with enriched reads; update SSOT invariants.

  191. Single-source deploy gates and preflight policies · 3251153

    Extract deployment gate, whitelist CIDR, DNS/mail, and infra health policies so steered Operator workflows run the same multi-target gates as in-process deploy. Fence Pipeline re-gather behind explicit debug options, block direct Pipeline production bypass without runtimeContext, and add parity tests for gather fencing, job federation, legacy delegates, and sidecar clients.

  192. Refresh project todo rollups · 57574f0

    Update the workspace plan and pipeline todo rollups so committed work reflects the latest control-plane and product status.

  193. Version matching intelligence materials · 74cc250

    Replace draft matching intelligence docs with versioned overview, peer, press, and whitepaper materials for clearer ML-service publishing.

  194. Add deploy preflight remediation · 7908682

    Wire manifest deploy preflight and admin whitelist remediation through Operator workflows so deployment gathers fail clearly before Pipeline execution.

  195. Remove execute workflow route · 2b51a73

    Drop the legacy Fleet execute route and refresh Fleet contract/client surfaces so status and proxy behavior move through explicit supported routes.

  196. Expose infrastructure control facets · f9d7fa1

    Add contract-backed gateway routes and UI types for infrastructure control so the operator surface owns these workflows through explicit API facets.

  197. Relocate infrastructure test suite · 4db277c

    Move infrastructure-heavy operator tests under the z_infrastructure package so the default test layout can separate focused gateway checks from long-running infra coverage.

  198. Add media wire message contract · 4960412

    Promote chat media payloads into the product contract so backend and web clients share the same generated message wire shape.

  199. Unify profile sheet score source · bca1e68

    Move chat and match profile-sheet data onto a discovery-owned resolver and score model so the same peer uses one enriched DiscoveryProfile across surfaces.

  200. Unify chat peer profile resolution with discovery sources · 614bb0f

    Resolve inbox and thread peer labels from discovery profile data, remove the unused consent hook, and add atomic/E2E coverage for profile-source parity.

  201. Explicit-context deploy preflights and snapshot rollback (P1) · e2c4c92

    Gather tenant infra/targets/domains from Tenant API into deployContext, extract preflight and snapshot logic into deploy_preflights, and skip manager-bound snapshots on the Pipeline-exclusive deploy path.

  202. Drop Fleet live-health proxy and refresh migration docs · d5363b2

    Remove the gateway proxy for Fleet live-health-runs, regenerate Operator web types/mocks, and update migration runbooks to point at Operator-native workflows.

  203. Remove remaining transitional workflow routes (P6) · 61faf1d

    Drop live-health-runs and transitional route helpers from Fleet so workflow orchestration stays on Operator/Pipeline. Update Fleet OpenAPI, route catalog, and async-route tests to assert the removed surface returns 404.

  204. Add matching intelligence overview materials · 6fd370b

    Add audience-facing ML and matching overview docs to explain the matching intelligence service and related launch narratives.

  205. Run post deploy health in full deploy worker · 695a50b

    Run explicit-target post-deploy health checks from Pipeline fullDeploy so deploy verification starts moving out of the legacy manager deploy spine.

  206. Own app infra dispatch helper · e8762d7

    Move the generic app-infra lifecycle dispatch body into Operator infrastructure control so Fleet's facet delegates through the owning layer.

  207. Remove direct infra sidecar route · 2b13d39

    Shrink Fleet's HTTP contract by dropping the app-infra action endpoint and keeping Operator's infrastructure route as the compatibility entrypoint.

  208. Move reachability checks to verification · afa21df

    Make Operator verification the implementation home for reachability and stage checks while leaving manager compatibility wrappers for transitional callers.

  209. Add Operator infrastructure OpenAPI surface · 0b8cd95

    Bundle POST /v1/infrastructure/tenants/{tenantId}/infra/{action}, mark legacy fleet infra proxy deprecated, and regenerate operator web API types.

  210. Add infrastructure control package and native infra routes · abebcc7

    Introduce operator/src/infrastructure_control for app-infra lifecycle dispatch, POST /v1/infrastructure/tenants/{tenantId}/infra/{action}, and manifest-deploy infra preflight in tenant-deployment workflows. Deprecate fleet infra proxy path.

  211. Reconcile todos, KB, and rules for manager and infra extraction · cab5b45

    Update master plan, module boundaries, fleet-cli KB, and operator todos after splitting fleet manager control into operator-owned packages.

  212. Embed discovery profile filters in match intent scope picker · e002362

    Bridge list/universe filter chips into the scope picker modal, normalize viewer residence country codes, and add atomic plus Playwright viewport coverage.

  213. Refresh generated clients and route catalogs · fd36229

    Regenerate sidecar contract models and update fleet/pipeline route catalogs after control-plane API surface changes.

  214. Fix imports after manager relocation and infra extraction · 73b46e7

    Update integration and VM/traefik tests to use operator infrastructure paths and manager.* orchestration modules.

  215. Update unit and batch tests for manager and import paths · ed7e93b

    Refresh fleet test imports for operator/src/manager and fleet_manager, keep reconcile multi-target coverage in fleet, and add workflow CLI redirect guards.

  216. Update CLI, server, and runners for manager split · 0f5c7e3

    Redirect workflow commands to Operator/Pipeline successors, fix import paths to manager.* and fleet_manager, and refresh fleet docs for the new layout.

  217. Wire deploy orchestration and tenant deployment runner · 47924a4

    Port deploy helpers to deploy_orchestration, extend tenant deployment context and runner intents, and align preflight/import paths with the manager split.

  218. Migrate fleet infra unit tests and add infrastructure harness · 3effe52

    Add operator/tests/infrastructure conftest and fleet fixtures, move VM/provision/infra unit coverage from fleet, and drop operator/tests/__init__ that shadowed fleet helpers.

  219. Align infra_ops paths and execution with operator layout · d1e76b8

    Use pipeline_paths for app_infra resolution and tighten infra execution, firewall, reachability, and remote ops against the operator infrastructure trees.

  220. Split manager into fleet_manager facets and operator control · 5d1750d

    Move orchestration, deploy, reachability, and checks under operator/src/manager while FleetManager facets live in fleet/src/fleet_manager. Update sys.path bootstrap and import rewrite tooling so callers use manager.* without fleet owning workflow source.

  221. Move contracts_generate and paths out of fleet · 49f8068

    Centralize schema-generation helpers under the contracts module and route pipeline preflight imports through contracts_import so fleet no longer owns contracts tooling source.

  222. Fix ifeoma-tc deploy env paths for application repo layout · 8e771c8

    Point APP_PIPELINE_ROOT and APP_INFRA_ENV_FILE at pipeline/ and tenant/ paths after repo layout normalization.

  223. Document operator gather → runtimeContext → pipeline flow, refresh master plan/todo rows for build-runs mock closure, and extend agent anti-patterns. · 3c4f293

  224. Align infra/hosting tests with operator app_infra paths · 512ab78

    Update traefik and harbor compose test paths after infra module extraction from fleet into operator-owned infrastructure control.

  225. Cover operator workflow gather/runtimeContext wiring, direct-pipeline CLI guard, fleet proxy routes, and regenerate operator-web API types/mocks. · edf27a5

  226. Tenant deployment, gather wire, and import path coverage · 68897e4

    Add unit tests for wire/validation/runner/context, migrate deployment tests off load_package path hacks, and sync build/deploy run API tests with inline background job execution.

  227. Centralize sidecar import path bootstrap for pytest · 438f209

    Add ensure_pipeline_sidecar_import_path SSOT, root pipeline conftest, and infra registry URL helper so src.client resolves consistently across tests.

  228. Package-relative start_app imports and inventory contracts · 19914e4

    Use deployment package imports in start_app/zitadel_provision, resolve inventory contracts via deployment package init, and drop legacy deployment conftest path hack.

  229. Remove duplicated build/deploy context loaders and fleet rebuild/reconcile HTTP routes; thin orchestration to pipeline sidecar calls and pipeline-owned dev_sync/deploy modules. · dff274d

  230. Expose domains, manifest, and PAT value for deployment gather · 46d018f

    Add control-plane routes consumed by operator tenant-steered deployment workflows when materializing env and building runtimeContext.

  231. Tenant deployment gather workflow and CLI steering · fb9c080

    Gather Tenant+Fleet material over HTTP, attach runtimeContext to pipeline tenant-deployment-runs, add tenant proxy facades, and route redeploy through the operator workflow instead of subprocess chains.

  232. Sidecar HTTP clients and tenant-deployment runs API · 6012764

    Add pipeline src.client for Tenant/Fleet descriptor calls and wire tenant-deployment-runs plus runtime workers through prebuilt runtimeContext.

  233. Move deploy orchestration and tenant deployment core · cd05c43

    Relocate fleet deploy helpers, dev_sync, build context, and registry push tunnel into pipeline; add tenant deployment wire/validation, context resolution, runner, purge runtime, and rebuild prefights.

  234. Tenant-steered deployment OpenAPI surface · 926345f

    Add pipeline tenant-deployment-runs, tenant materialize/domains/PAT facades, and operator workflow routes; trim stale fleet reconcile/rebuild paths and refresh parity tooling.

  235. Gitignore local test-golden VM image blob · 57c5422

    Exclude multi-GB provisioning test-golden from git; file remains local only.

  236. Remove ProfileEnvironmentBadge from header · 8a4f903

    Drop the redundant profile environment badge; tenant and profile selectors remain in the operator header.

  237. Verify contract-revisions manifest in schema-contract workflow · d23ea9d

    Run update-contract-revisions.mjs --check after generate-all-contracts so CI fails when the committed manifest drifts from generated artifacts.

  238. Document contract-revisions manifest and codegen flow · 13dc0e0

    Cross-link revision tooling from contracts, apis, generated, and tools READMEs.

  239. Expose contractRevision on control-plane capabilities · eb89598

    Extend contracts OpenAPI and wire fleet, pipeline, and tenant sidecar capabilities/health routes to surface module revision metadata from the manifest. Fix contracts sidecar import test to include pipeline on sys.path.

  240. Add contract-revisions manifest tooling · 9eb2836

    Introduce per-module content hashes in contract-revisions.json, update scripts to refresh or verify the manifest after codegen, and add a shared Python loader plus unit tests for sidecar capabilities.

  241. Operator infra paths and workflow CLI split · e8a1938

    Route hosting/app_infra through fleet_layout and infrastructure.* imports with operator/src on PYTHONPATH (no fleet→operator symlinks). Redirect migrated fleet workflow commands to operator/cli.py and document symlink bridges as an anti-pattern in agent rules.

  242. Refresh agent rules and KB for contracts repo layout · 96c31ba

    Update cursor rules, skills, master plan, and AGENTS.md to document the apis/, tools/, and generated contracts structure and operator boundaries.

  243. Update schema-contract workflow for contracts layout · 8db4761

    Point CI and root gitignore at contracts/apis, contracts/tools, and the tracked contracts/generated hub instead of legacy app-* paths.

  244. Align tenant API docs and P124 path migration scripts · 98211a8

    Update tenant server routes and documentation for the contracts layout and refresh repo-layout migration helpers under scripts/.

  245. Adopt application-root layout and gateway contract paths · 6a1d8a2

    Update operator control plane, web client, infrastructure hosting paths, and tests for the monorepo layout and contracts/apis operator gateway SSOT.

  246. Refresh contract consumer paths in product modules · 7e9b968

    Update web-client, backend, and ml-service scripts and docs for the contracts/generated hub and distributed schema locations.

  247. Update contract tool paths and control-plane wiring · db4ceb9

    Align Makefile, path helpers, server routes, and agent docs with the centralized contracts/apis and contracts/tools layout.

  248. Align contract paths and move app_infra to operator · 2652abf

    Update Fleet API clients, schema generation, and tests for the contracts layout and drop the in-tree app_infra package now owned by operator.

  249. Update module entrypoints and retire app-* packages · 5047270

    Point interface.py, cli.py, and the contracts control plane at the new apis/, tools/, and generated paths and remove the legacy app-* layout.

  250. Keep product codegen hub tracked at contracts/generated · 1a735d0

    Restore the generated OpenAPI hub after gitignore rules incorrectly dropped it from the index, and align ignore rules so contracts/generated stays versioned like the former contracts/product/generated tree.

  251. Move product codegen hub to contracts/generated · ce4e8de

    Relocate zod schemas and web-client distribution artifacts from contracts/product/generated to contracts/generated and remove the legacy product package folder.

  252. Centralize codegen and compliance under contracts/tools · 3c56fce

    Move product, tenant, fleet, pipeline, operator-gateway, and compliance tooling into contracts/tools so generators, parity checks, and boundary validators share one orchestrated entrypoint.

  253. Relocate OpenAPI SSOT to contracts/apis · 4aeff5f

    Centralize product, tenant, fleet, pipeline, contracts, ml-service, and operator gateway specs under contracts/apis so downstream tooling shares one layout instead of scattered app-* openapi trees.

  254. Remove deprecated control_plane shims · b347f95

    Control plane entry lives under operator/control_plane_start.py; drop root scripts/ forwarders that duplicated the operator CLI.

  255. Fix ifeoma-tc stage env paths for pipeline layout · 8f4c026

    Update APP_PIPELINE_ROOT and APP_INFRA_ENV_FILE from legacy app-pipeline paths to tenant/ and pipeline/ roots.

  256. Align README and START paths with monorepo layout · 0fd7c94

    Point architecture links at project KB and Traefik location under fleet app_infra after pipeline/tenant path consolidation.

  257. Discovery peer identity and match pipeline hardening · c5cc74a

    Introduce discoveryPeerIdentity and filtered profile page assembly; tighten profile/match mappers and storage sanitization; extend matching lib and tests. Bump backend to 0.1.157.

  258. Regenerate tenant contract models from tenant-control OpenAPI · cffd93c

    Refresh fleet and ml-service generated Python models after tenant-control spec updates.

  259. Add OpenAPI response descriptions for control bundles · dde8d1a

    Swagger bundle validation requires description on every response; tenant and pipeline *-control sources and rebundled YAML are aligned so validate-control-bundles.mjs passes.

  260. Add control plane agent guidance · eb4d869

  261. Extend tenant control API server · 1589052

  262. Add control sidecar run APIs · 3ca737e

  263. Add control sidecar API flows · 43ac5f6

  264. Add control plane contract bundles · 68a4a49

  265. Add control plane web UI contracts · 3c4f8fc

  266. Remove duplicate tenant-api cursor rule · 19d5428

    Rule content lives under fleet and application .cursor after layout consolidation; tenant module keeps module.mdc only.

  267. Remove duplicate cursor rules from pipeline module · 589b045

    Drop pipeline/.cursor/rules now that fleet and application roots own MODULE_BOUNDARIES, AGENT-BEHAVIOUR, and runbooks; keep pipeline/.cursor/kb.

  268. Remove archived cursor plans under pipeline/.cursor · a21ea7d

    Delete completed, tbd, and todo plan trees from the pipeline module; agent norms and runbooks live under fleet/.cursor and application .cursor after P133.

  269. Gitignore ephemeral test-20260522 tenant scaffolds from local runs · 7c324e1

    Fleet unit tests that call create/status leave timestamped tenant dirs under tenant/tenants/; ignore them so generated .env and secrets trees stay local.

  270. Add empty infra compose scaffolds for dev template tenants · 76f9923

    Track placeholder docker-compose.yml under ifeoma-dev and source-tenant so tenant package layout matches ifeoma-tc and test-unit-delegation after P133.

  271. Note P133 layout cross-links in module todos · 15a9d3d

    Align source module boundaries doc and PROJECT-TODOS with fleet-owned pipeline relocation; no product runtime changes in this slice.

  272. Sync master-plan P133 todos with fleet layout batch state · 709e1ac

    Record open P133-CI-BATCH2, loader-path, and merge-PR rows after the pipeline-to-fleet relocation commits on p124-repo-layout.

  273. Update workflow paths for fleet-owned common and schema checks · 6d78046

    Adjust ci.yml and schema-contract.yml for imports and working directories after pipeline/common moves under fleet/src.

  274. Package exports and control-plane route paths for P133 layout · e94a2fb

    Update tenant module init, server allowlist, and tenant API docs so Fleet/T-API loaders resolve packages from application root consistently.

  275. Align tenant-control generation and compliance bootstrap · b1df4b3

    Refresh app-tenant OpenAPI sources and generators for fleet layout; move compliance script bootstrap paths so boundary checks resolve modules from application root after pipeline/common relocation.

  276. Point tests and tools at fleet-owned modules · 8821495

    Keep pipeline as build/deploy entry with shims under pipeline/common; update run.py, compliance trace tools, and integration tests for the fleet/src/common and app_infra import paths introduced in P133 layout.

  277. Wire imports, fleet API server, and layout test helpers · 2bc97d7

    Update FleetManager, CLI, runners, and unit tests for fleet-owned common and app_infra paths; add fleet control HTTP server, network mesh package, and isolated-test layout helpers used by P133 batch CI.

  278. Relocate pipeline common, infra, hosting, and tenant API · 12408da

    Move pipeline/common, pipeline/infra (app_infra), pipeline/hosting, and pipeline/network into fleet/src; rename tenant_api to api/tenant so Fleet owns shared orchestration code beside FleetManager.

  279. Drop the standalone Figma export app from the application root; product UI lives under source/20_web-client per the P133 layout. · efa191a

  280. Sync open todos across master plan and module PROJECT-TODOS files · a487312

    Mirror P133 batch-2 blockers, merge/schema gates, and B52-CI-GHA-COMPOSE on master-plan, pipeline hub, fleet, contracts, and tenant todo tables.

  281. Add build-once workflow and offline manifest post-verify in ci.yml · 56870ac

    Introduce build-once.yml for compose build, SBOM, and optional cosign artifacts; extend ci.yml with build-manifest-post-verify parity checks.

  282. Build invocation correlation and tenant-rebuild component docs · d8d46e2

    Pass invocation_id into build requests, document tenant-rebuild component catalog alignment, and keep batch CI runner in sync with layout branch.

  283. Manifest v2 output, component catalog, and deploy digest handoff · df473c2

    Wire build interface to provenance/SBOM byproducts, align deployment start_app with tenant-rebuild component order, and document completed generalised-build phases in module todos.

  284. Build-once manifest v2 helpers, SBOM, cosign, and CI scripts · 6b92a76

    Add shared build provenance, SBOM export, cosign sign/verify gates, manifest post-build and deploy-consume checks, tenant rebuild component IDs, and offline CI contract tests plus operator scripts for GHA parity.

  285. Test layout SSOT and tenant API session coercion · f4895df

    Introduce tenant_packages_dir_for_test_root for isolated pytest trees, align status/tenant manager tests with T-API contracts, fix merge_env app_tenant_package_init path, and coerce leader/target config execute responses to TargetConfig.

  286. TenantManifest from_dict and edge_tls execute allowlist · 017929e

    Add typed from_dict/to_dict on TenantManifest so fleet status and tenant API sessions coerce HTTP manifest JSON correctly. Allow edge_tls_material_status on the tenant execute allowlist for merge_env TLS checks.

  287. Canonical continue-loop mission paste for master-plan loop · 2657ddf

    Add continue-loop-mission-paste.md with 2026 paths (master-plan.mdc, pipeline/source todos, doing state) and wire it through product-continue-master-plan, agent-behaviour, source-agent-behaviour, agent-hub, and AGENTS.md.

  288. Extend KB link checker for memory modules and handbook · 0c00045

    Scans module/meta/hooks memory, agent-behaviour-full.md, and pipeline/00_PROJECT-todos.md so broken relative links fail CI locally.

  289. Refresh source hub links for renamed product rules · 559156b

    Updates source README and product-test-determinism rule description plus agent todo-notes pipeline rule paths.

  290. Point fleet docs and runners at pipeline/.cursor/rules paths · 8172a14

    Replaces stale app-root pipeline rule links and updates MODULE_BOUNDARIES doc pointers to fleet-module-boundaries.mdc across runners, tests, and README indexes.

  291. Align app memory, hooks index, and skills with rule rename · 2ad74e7

    Fixes README.mdc as KB index SSOT, app-pipeline/app-source module paths, continual-learning-index hook, fleet-cli and diagnostics paths, and fleet-tenant-cli-ops skill references.

  292. Fix rule and KB cross-links in pipeline module · dc6a1cc

    Corrects pipeline-runners and stage-remote paths, fleet-module-boundaries references, relative links in 00_PROJECT-todos.md, and active tbd/todo plan pointers.

  293. Rename handbook reference to agent-behaviour-full.md · a9e2965

    Keeps the fleet-pipeline-agent-handbook deep reference aligned with kebab-case rule naming and fixes stale README_INDEX / AGENT-BEHAVIOUR pointers inside the handbook body.

  294. Sync KB, plans, and skills with renamed module rules · d57d146

    Update agent-navigation index, module memory cards, master plans, fleet skill, PR template, and todo-notes for fleet-module-boundaries and kebab-case paths.

  295. Propagate renamed cursor rule paths through KB and tooling · 3e438be

    Update fleet-cli KB, done/todo plans, agent handbook, runners overview refs, and pipeline README/todos to kebab-case rule filenames.

  296. Update fleet docs, runners, and tests for renamed cursor rules · b79f3f5

    Replace legacy MODULE_BOUNDARIES and runbook rule paths with fleet-module-boundaries and kebab-case pipeline rule filenames across READMEs, runners, and batch test entrypoints.

  297. Refresh source module hub and docs for product-* rule names · aa6d8dd

    Cross-link source-agent-behaviour, product-layer-boundaries, and related rules after kebab-case rename; fix design-system README boundary pointer.

  298. Align hub and compliance tooling with renamed cursor rules · 67a6a0b

    Update module hub, README, todos, and boundary-check scripts to reference contracts-openapi-surface and contracts-compliance rule paths.

  299. Update app-root rules index for renamed module paths · 9294db7

    Point module-boundaries, modules-index, rules-index, and errors hub at fleet-module-boundaries, product-*, and contracts-* rule filenames; add naming convention table to rules-index.

  300. Rename cursor rules to kebab-case fleet-* names · 9664167

    Retire SCREAMING_SNAKE rule filenames (AGENT-BEHAVIOUR, MODULE_BOUNDARIES, SWIMLANE, etc.) in favour of clear kebab-case paths such as agent-behaviour, fleet-module-boundaries, and fleet-swimlane; update pipeline module hub.

  301. Sync generated models after OpenAPI regen · 5c374b7

    Refresh ml-service contract_models and minor ProfileService alignment with generated contract shapes.

  302. Harden tenant API server deps and extended routes · 4bebecf

    Adjust server entrypoints for layout and tenant API contract consistency.

  303. Refresh hosting test paths and compliance baseline · 46bbbcf

    Keep workload provider unit test and compliance baseline aligned with current pipeline package layout.

  304. Layout-aware test helpers and tenant package fixtures · 02f10c2

    Add layout_roots and tenant_package test helpers; align unit tests and CLI paths with repository layout under pipeline/ and tenant/.

  305. Fix documentation paths after pipeline layout rename · 3e580d4

    Update fleet/docs and manager README links from legacy app-pipeline paths to pipeline/ and current rule locations.

  306. Track cursor skills and plans README in version control · 7afc91b

    Un-ignore .cursor/skills and plans/README.md; drop obsolete MASTER plan symlink entry now that master-plan.mdc is the rollup SSOT.

  307. Point source READMEs at profile-identity and error rule paths · 471242f

    Align backend and web-client documentation with .cursor/rules paths after the kebab-case and five-module agent layout.

  308. Application agent map, skills, and navigation indexes · e20e113

    Add .cursor/README, modules-index, product/fleet skills, slim errors index, and KB cross-links; retire duplicate plan filenames; point AGENTS.md at new map.

  309. Restructure cursor rules and dedupe cross-module copies · 8c8defa

    Add module hub and web-product rule; rename layer boundaries and product change-flow; remove duplicate ROOT_CAUSE, tone, and PYTHON-PACKAGE rules (now canonical under pipeline); drop CONTINUOUS-DEV-LOOP superseded by skill.

  310. Cursor module hub, handbook skill, and rule dedupe · cf8ce51

    Add pipeline/.cursor/rules/module.mdc and fleet-pipeline-agent-handbook skill; consolidate cross-module norms; remove duplicate e2e-playwright rule (canonical under source); fix done-plan links to MODULE_BOUNDARIES.

  311. Add cursor module hub and tenant-api rules · 903e700

    Document tenant HTTP API ownership, merge-env contract, and links to fleet-tenant-cli-ops without in-process TenantInterface in fleet.

  312. Add cursor module hub and fleet-orchestration rules · ef2eb82

    Fleet hub points to handbook skill, pipeline AGENT-BEHAVIOUR, and shared cross-module norms without duplicating pipeline runbooks.

  313. Add cursor module hub and openapi topic rules · f5ef9f7

    Introduce contracts/.cursor/rules/module.mdc with openapi-surface and compliance topics; link todos and README to the five-module map.

  314. Extend KB rule link checker for module rules and skills · a02fe5e

    Scan per-module .cursor/rules trees and skill SKILL.md files so agent navigation links stay valid after the five-module layout.

  315. Update renamed rule bodies and add master-plan todos-index · c5896e8

    Slim agent-hub navigation, expand rules-index registry, add core-agent always-on stub, master-plan and todos-index intelligent rules.

  316. Rename application .cursor/rules to short kebab-case names · 68ed209

    git mv only — follow-up commit updates rule bodies (agent-hub, rules-index, master-plan, todos-index, core-agent).

  317. Sweep remaining path references after layout rename · 44740c1

    Mechanical app-* to contracts/pipeline/fleet/tenant/source updates across workflows, contracts, product source, compliance tools, and fleet modules. Tenant merged .env.* files left unstaged (operator secrets).

  318. Align rules, KB, and master plan with pipeline layout and build-once · f146ff7

    Refresh agent rules, memory KB paths, AGENTS semver table, master plan rollups, and fleet-cli runbook for contracts/pipeline/fleet/source layout.

  319. Gate stale app-* paths and run affected-components tests in batch · b40dfd6

    Wire p124-rg-active-gate.py into the kb-rule-links job and enable CI_AFFECTED_COMPONENTS step in run_batch_ci_tests for F-BUILD-07.

  320. Thread invocation_id through reconcile and affected build CLI · 795c212

    Mint one invocation_id per reconcile, pass it to build and deploy, persist on last_deployment, and add affected-components / build --affected-only CLI for CI subset builds plus source_revision deploy gates on stage/prod.

  321. Digest-first deploy gates and affected-component SSOT · 5f02c45

    Add component-id validation for service_registry_images, pre-deploy source_revision matching, and git-diff affected-component resolution. Document promotion in build-output/DEPLOY.md and extract compose service name mapping to common.compose_full_service_names.

  322. Rename top-level modules and flatten contracts/product out of the app-pipeline mirror path. · 3d01368

    Rename top-level modules and flatten contracts/product out of the app-pipeline mirror path. Update SSOT path helpers, compliance scans, codegen scripts, compose paths, CI workflows, docs, and KB references. Operator cwd: pipeline/ with PYTHONPATH=.:../fleet:../fleet/src. TC_TENANT_PATH=tenant/tenants/<id>. Post-merge: merge-env and target dev-sync for /opt/app/deployment paths on VMs.

  323. Reconcile KB, master plan, and behaviour rules for build-once · ca6fd78

    Refresh layer-trace docs, master plan closure rows, and knowledge-base paths for generalized builds, digest deploy, and OpenAPI hub layout.

  324. Point schema and contract workflows at app-contracts root · 2f8c284

    Update CI paths and root README/AGENTS pointers after hoisting contracts and standardizing OpenAPI verification entrypoints.

  325. Refresh todos, compliance tools, and fleet KB paths · 0bb14f8

    Update project todos and pipeline entrypoints for application-root paths; extend compliance checks and KB cross-links for build-once workflows.

  326. Align CLI paths with application-root layout · 1d80645

    Update pipeline and tenant health commands for hoisted app-contracts and application_root resolution used by build and deploy.

  327. Sync generated clients and route contracts from OpenAPI · 2d43648

    Refresh web-client, backend zod, and ml-service generated types; align admin and internal routes, health probes, i18n, and tests with the expanded contract surface.

  328. Extend OpenAPI sources and tighten mutating error responses · a494e2a

    Add decomposed path YAML, shared error response components, compliance bootstrap for app-contracts layout, mutating-500 verification tools, and regenerated hub zod/tenant types from the bundled spec.

  329. Cover build manifest load and tenant artifact handoff · 7964115

    Add regression tests for manifest promotion, git revision helpers, and tenant state artifact_manifest digest resolution.

  330. Read artifact manifest digests from on-disk build output · 87c3f2a

    Prefer the persisted manifest file for registry digest fields in tenant state and align control-plane routes with the build-once contract.

  331. Propagate build components and artifact_path to tenant API · dacbc03

    Map BuildResult components into BuildStateSummary and prefer manifest artifact_path for digest handoff; add unit tests for summary and deploy manifest wiring.

  332. Resolve deploy images from build manifest digests · 316822e

    Use deploy_image_refs so compose deploy pins images by digest from the on-disk artifact manifest instead of tag-only references.

  333. Generalize per-component builds and split build_interface · cd52b1a

    Add build-components catalog, bundle registry, failure policy, and digest metadata; replace the monolithic build_interface module with a focused package while validating application_root via constants_paths.

  334. Add build manifest and deploy image ref contracts · 5427bc4

    Introduce ComponentArtifact SSOT, digest-first deploy_image_refs, and build manifest load/promotion helpers so fleet, build, and deploy share one artifact shape.

  335. Unify codegen entrypoints for product, tenant, and ML · ede0787

    Add generate-all-contracts.js so Fleet reconcile, app-contracts CLI, preflight, and schema-contract CI always regenerate tenant and ML artifacts, not only the product OpenAPI pipeline.

  336. Remove stale build-output and container_mount docs · d728002

    Drop generated README copies under app-build/build-output; deploy notes live in app-build README and fleet docs.

  337. Relocate golden-image VM API and E2E helpers beside app-fleet for a flatter application repository layout. · d216570

  338. Refresh rules and KB for application-root layout · 0e5d919

    Update AGENTS.md, root README, and cursor memory/rules paths for app-contracts, app-fleet, and app-tenant at the repository root.

  339. Point OpenAPI codegen paths at app-contracts root · 8a59c8e

    Update web-client and backend schema script paths, generated READMEs, and mobile docs for the hoisted app-contracts layout.

  340. Align paths after fleet, tenant, and contracts hoist · bd6c01d

    Update common/, tests, tools, and pipeline docs for application-root app-fleet, app-tenant, and app-contracts; add tenant API HTTP tests and check_no_direct_tenant_import; remove app-pipeline/app-source symlink.

  341. Add OpenAPI contract and Pydantic codegen · 3384249

    Introduce app-contracts/app-ml-service with health and internal match job paths; generate contract_models.py into 30_ml-service; chain ML regeneration in generate-contract-schemas and schema-contract CI.

  342. Hoist app-contracts to application root · 26e8283

    Move product OpenAPI, compliance tools, and tenant-control specs from app-pipeline/app-contracts to app-contracts/; add consumers index and deferred app-api-contracts shell.

  343. Move app-tenant from app-pipeline to application root · 263bde2

    Relocate tenant packages, control API server, and fixture tenants next to app-fleet and app-contracts for a single application-root layout.

  344. Move app-fleet from app-pipeline to application root · ea746b2

    Hoist FleetManager, CLI, and tests so PYTHONPATH and imports use app-fleet/ at the repo root; app-pipeline remains the pipeline shell.

  345. Repair doc and runner references after hub removal · 3cc21dd

    Point agents, CI, KB, and web-client READMEs at live paths (batch test runners, feature-local chat/profile/universe docs, FigmaDesign folder). Fix corrupted iOS/Android doc links from the platform docs move.

  346. Remove pipeline docs hub and legacy runner shims · 6ac1bd1

    Intentional cleanup: drop app-pipeline/docs, chat-gap-program, README-HOW-TO-RUN-TESTS, run_tests/run_ci wrappers, HA todo doc, FIGMA_DESIGN_REFERENCE rule, and continual-learning hook index. Point CI and agent rules at app-fleet/tests/run_batch_* scripts and in-repo KB; refresh broken markdown links.

  347. Fix README links after documentation tree removal · 224e139

    Point indexes at module READMEs, app-pipeline architecture docs, and in-repo KB paths so check_kb_rule_links.py stays green.

  348. Align agent docs with removed hub trees and scripts path · 6cf68bc

    Point KB link checker at scripts/, drop references to deleted docs/agent-rules-changelog.md, and document match list route wording.

  349. Discovery list overlap filter and responsive E2E guards · e336084

    Align generated validation schemas, tighten overlap filtering tests, and add viewport scroll assertions for public responsive specs.

  350. Regenerate Zod schemas from OpenAPI · 54ae0c5

  351. IRT gate jobs and SSOT threshold parity checks · 2882e63

    Add match_gate_thresholds loader, IRT pilot/sparsity/theta jobs, Docker config copy, pytest SSOT test, and CI parity script under app-source/tools.

  352. Load match gate thresholds from shared JSON SSOT · e1a901c

    Centralize population gate constants in app-source/config for Docker and backend parity; wire matchGateConfig and IRT proximity paths to the file and add regression tests.

  353. Remove hub documentation trees and relocate link checker · 95708f1

    Drop platform docs, web-client docs hub, documentation-archive, and root tools/ per intentional cleanup. Move check_kb_rule_links.py to scripts/ and point CI kb-rule-links job at the new path.

  354. Move simulation-worker under 10_backend · 041300d

    Relocate the headless API exerciser to app-source/10_backend/simulation-worker, update imports to ../../src/services/sim-user, fix Dockerfile and compose dockerfile path, and refresh CI, Fleet, and doc cross-links.

  355. Replace stale hosting_remote deploy steps in app-pipeline README · ebee413

    Update workflow diagram and production deploy section to Fleet merge-env, rebuild, and tenant-live-health instead of legacy hosting_remote scripts.

  356. Fix pipeline README tree, indexes, and link checker scope · 19fb435

    Align app-pipeline/README with app-pipeline/* module layout; replace missing README_INDEX links; document slim legacy-central in web index; fix Fleet rebuild snippet in discovery-universe-manual-matrix; extend link checker to web-client top-level docs and app-pipeline/README.

  357. Clarify app-hosting lives under app-pipeline in root README · 778ef1a

    Replace top-level app-hosting/ references with app-pipeline/app-hosting and Fleet merge-env in the architectural overview.

  358. Trim legacy-central and align root READMEs with Fleet layout · 6da338a

    Archive stale web-client legacy-central slices (infrastructure, phases, patterns, tasks) while keeping ADR-001, API client guides, feature matrix, and chat phase 13. Replace obsolete 00_bootstrap snippets in root and app-pipeline READMEs with Fleet merge-env and live-health commands.

  359. Fix archive links, service paths, and link checker scope · ae1c073

    Correct documentation-archive relative URLs from module doc indexes, refresh investor proposal and Zitadel footer targets, repair backend README code links after service folder moves, archive obsolete 01-README_FIRST.md, and extend check_kb_rule_links.py for app-source docs (excluding legacy-central stubs and root README).

  360. Archive obsolete material and refresh active indexes · eafedde

    Move superseded web-client task boards, verification snapshots, pipeline audits, and related dumps to documentation-archive/2026-05-21/ with paths preserved. Update module README hubs, phase native links, KB paths, and replace stale CQRS marketing copy with Fastify + OpenAPI wording.

  361. Fix Android paths in legacy-central phases README · 14425ab

    Point verification/plan links at 50_android/docs instead of obsolete docs/40_android paths.

  362. Second-pass audit — fix stale paths and CQRS copy · 9da6a39

    Replace obsolete CQRS/Firestore architecture text in 00_platform, fix README_INDEX links, and retarget iOS/Android/web path references after module doc migration.

  363. Drop obsolete CQRS archive from web-client legacy-central · 9f1b615

    Remove project-management-cqrs copies and backend-endpoints-cqrs task guides that referenced deleted 00_platform/08-implementation-cqrs docs.

  364. Refresh platform hub and cross-links for module docs · 4e09530

    Update 00_platform ownership table, central docs README, iOS/Android indexes, and repo READMEs after native-module doc moves and CQRS removal.

  365. Move iOS docs into 40_ios/docs · c78552b

    Relocate app-source/docs/03_ios under the iOS module and add a docs index.

  366. Retarget links after module doc relocation · 1cef96b

    Update READMEs, agent rules, pipeline docs, and in-repo cross-references from app-source/docs/{01_backend,02_web-client} to per-module docs paths.

  367. Point module owners at 10_backend, 20_web-client, and 30_ml-service docs/ and document what remains in the central folder. · f375a61

  368. Move ML matching doc into 30_ml-service/docs · 91fa622

    Relocate README_MATCH_CALCULATION_ML.md under the ml-service module with a docs README index.

  369. Move web-client docs into 20_web-client/docs · ebbe884

    Relocate docs/02_web-client archive to legacy-central/, verification reports, and universe/responsive matrices under the web-client module.

  370. Move backend docs into 10_backend/docs · 1c40f59

    Relocate docs/01_backend, matching E2E/privacy evidence, and chat ADRs under app-source/10_backend/docs with a module README index.

  371. Verification reports use /match product URLs (P97) · f7be15d

    Align reveal and list screen routes with App Router paths (/match, /match/list).

  372. Model Fleet simulation-worker bootstrap route in OpenAPI sources; regen Zod and web client API types. · 8f35778

    Model Fleet simulation-worker bootstrap route in OpenAPI sources; regen Zod and web client API types. check:openapi-backend-paths now OK.

  373. Sync generated schema index timestamps (P88) · 49c7c21

    Regenerate via generate-all.js; web copy matches app-contracts SSOT.

  374. Dedupe universePeerHoverCardModel vitest (P87) · cba6e6e

    Merge features/discovery cases into tests/atomic/discovery SSOT; remove duplicate file.

  375. Universe hover age and why-match rows (P86) · 097bafe

    Wire universePeerHoverCardModel age and whyMatch into UniversePeerHoverTooltip; extend vitest invariants. Web 0.1.906 on stage.

  376. Force-recreate simulation-worker after web rebuild · 1ede08a

    Use docker compose up -d --force-recreate --no-deps when re-upping the profile-scoped worker after tenant-rebuild-web-client prunes fixed-name containers.

  377. Reject blocked peers on chat peer-scoped routes · 1413c32

    assertViewerPeerNotBlocked in normalizeChatRouteOtherUserId and thread resolution; replyIfConnectionClientError on chat handlers (404 parity).

  378. Invalidate connections and conversations after block · 4bb47a9

    ChatSessionApplication.invalidateCachesAfterPeerSafetyAction wires discovery plus invalidateConnectionCaches; fallback path passes viewer+peer auth uids. Vitest 3; backend listConversations block test; typed-error routing doc row.

  379. Return 404 on connection stage for blocked peers · 4b3cdc4

    ConnectionService checks UserBlockService before materializing rows; replyIfConnectionClientError maps CONNECTION_PEER_NOT_FOUND (discovery parity).

  380. Exclude blocked peers from connections and chat inbox lists · df5ff60

    UserBlockService.listBlockedAuthUidsForViewer filters GET /api/connections and GET /api/chat/conversations after canonical peer resolution; vitest coverage.

  381. E2E semver gate SSOT and remove reportPending i18n keys · 51276d1

    Add skipE2EWhenWebVersionBelow helper with vitest; wire P62 viewport spec. Drop obsolete reportPending* from chatMessageKeys and translation CSV export.

  382. Fix P62 E2E when viewer has residence country · a07d8ce

    Stage E2E user has DE residence so My country is enabled per P59; assert visible instead of disabled. Close P62/P71 in plan docs and refresh AGENTS stage semver (web 0.1.904, API 0.1.148).

  383. Regenerate merged locale JSON from shards and refresh release-notes bundle for the discovery filter, admin reports, and chat safety slices. · 5efa60a

  384. Reconcile MASTER plan and todos for P57–P70 closure · 19ebfcd

    Mark P64b, P57–P61, P66, P56d, P68–P70 done; keep P62 viewport proof and P71 stage deploy as the only open items. Refresh AGENTS stage vs repo row.

  385. Add signed-in E2E coverage at 540×960 and 1080×2340 for match profile filter bundle (P62) and embedded /chats?userId= shell (P64b). · afc7327

  386. Wire POST user block and tighten report UX · d4cc1e7

    Route blockPeerUser through POST /api/users/{id}/block instead of DELETE connections; guard report when no connection exists; remove stale pending-report copy and align MessagingHeader errors across locales.

  387. Universe hover card polish, a11y, and operator debug · 8941932

    Improve hover tooltip dialog semantics, reduced-motion transitions, and coordinate debug panel peer snapshot for P56d operator workflows.

  388. Admin user reports tab with paginated list · f94a254

    Wire GET /api/admin/reports into AdminPanel User reports section with React Query, table UI, and five-locale admin i18n shards.

  389. Match toolbar profile filters and display score boost · e15f3ed

    Add age, gender, and residence country filter chips on discovery list chrome; pass query params to discovery API; SSOT filter-positive bumps on displaySessionMatchPercentage. Regenerate API client and discovery i18n.

  390. Exclude blocked peers from discovery list and detail · 31c2d25

    Wire UserBlockService into DiscoveryQueryService so blocked profileIds never appear in list results and single-peer fetch returns not-found. Add blocked-peer vitest and userBlocks stubs on discovery test harness.

  391. List user reports from Mongo with cursor pagination for the admin panel. · de0232a

    List user reports from Mongo with cursor pagination for the admin panel. Register route on admin plane with vitest coverage.

  392. Discovery list filters for age, gender, and residence · 5df0753

    Apply optional ageBand, gender, and residenceCountryCode on GET /api/discovery/profiles; map ageBand on DiscoveryProfile. Bump API 0.1.148 with focused route and filter unit tests.

  393. Discovery profile filters and admin reports OpenAPI · be50986

    Add ageBand, gender, and residenceCountryCode query params on discovery list; DiscoveryProfile.ageBand on wire; admin GET /api/admin/reports with typed list response. Regenerate bundled OpenAPI and zod schemas.

  394. LabelKey typing on hover card model · a28958d

    Use labelKey() for intent scope titles and age-band labels so stage build type-check passes.

  395. LabelKey typing for universe hover age bands · 69b937c

    Unblocks production build after ageBand hover row addition.

  396. Wire peerSeen prop on universe hover tooltip · 6e344f0

    Layer already passes peerSeen from impression storage; accept optional eyebrow on UniversePeerHoverTooltip so stage build type-checks.

  397. Universe peer hover card P56 + seen impressions + sphere decals · 6f7f790

    Hover IA with orb preview, context rows, ageBand display, why-match line; localStorage impressions with Seen eyebrow and dim canvas labels; Canvas2D blurred profile decals; strict intent toggle moved into scope picker modal.

  398. Coarse age bands derived from stored birth year on the discovery mapper; OpenAPI DiscoveryAgeBand enum and Zod regen distributed to backend. · 3f2ec3c

  399. Universe hover card IA (P56c, 0.1.895) · 940d56e

    Orb header, single match line, intent/geo context rows, placement axis only, and truncated synergy chips; drop redundant ring/band/intent score panels.

  400. Stage web 0.1.894 after P64 deploy · bf7d3a8

  401. Close P64 deploy evidence; P64b browser proof open · dab77c7

    Stage web 0.1.894 after tenant-rebuild-web-client; reconcile P54/P63/P55/P67 semver rows; split P64 shell (done) from viewport browser proof (P64b).

  402. Stage 0.1.894 deployed; P55/P64 code closed · ad37e6d

    Reconcile MASTER after tenant-rebuild-web-client; P64 viewport proof remains open.

  403. Embedded chat thread shell gutters (P64) · a9b9fe8

    Use chatEmbeddedThread BaseScreen band instead of discoveryFullBleed so embedded /chats?userId= threads get LAYOUT_BRAND gutters and safe-area top without double vertical padding; LayoutGrid shellVerticalPadding opt-out for ChatContainer.

  404. Reconcile MASTER-PLAN and add detailed rows · f42f503

    Close P55/P65 in MASTER; split P64 code-done vs stage proof; add P66–P67 with acceptance columns in app-source todos; note stage 0.1.893 vs repo 0.1.894.

  405. Verify and complete ML match calculation pipeline · d776e80

    Add README_MATCH_CALCULATION_ML.md with code-backed boundaries between ml-service population jobs, backend pairwise persistence, and web-client session intent. Fix stale 45s debounce and profileId wording in README_MATCHING_SYSTEM.md; cross-link E2E and module READMEs.

  406. Embedded chat shell + universe label privacy (0.1.894) · ebdeb35

    chatEmbeddedThread BaseScreen band owns gutters/safe-area; composer pad only in route. Universe 3D chrome uses discoveryUniversePeerLabel (no quote/bio).

  407. Record chat header, embedded shell, and universe backlog rows · cb7f50d

    Update AGENTS stage semver evidence and MASTER-PLAN / project todos for P52–P63 chat work and P55–P62 universe filter bundle.

  408. Regenerate merged next-intl messages (presenceOffline/Online) and release notes so stage builds match chat header i18n shards. · a32c159

  409. Chat header, embedded shell, and gate invariants · 0267a2a

    Add Vitest coverage for legal-name header wiring, presence resolution, embedded pathname layout, and explore-shell gate suppression on active chats; add Playwright viewport spec and E2E stubs for P54.

  410. Full-bleed embedded chats thread shell layout · 316b410

    Recognize embedded thread pathnames in the app shell, remove extra padding, and align composer margins for in-shell /chats?userId= threads.

  411. Suppress Universe gate on embedded chat_active threads · d2f3977

    Derive embedded shell gate from connection stage query and defer overlay until peer context loads so active chats do not flash Connect from Universe.

  412. Messaging header presence dot and peer photo chrome · 343c5f3

    Simplify MessagingHeader to peer name plus online/offline indicator; add expandable peer avatar with lightbox and i18n for presence labels.

  413. Show peer legal names in chat only at chat_active · d15c006

    Remove secure-profile reveal path from thread enrichment; resolve labels via discovery legal-name helpers and single-peer fetch after mutual reveal.

  414. Add P52 chat header reveal Playwright smoke · 6455b5b

  415. Close P51 chat name privacy on stage 0.1.889 · 4b1044c

    Update AGENTS semver table and MASTER/product todo evidence after verified deploy.

  416. Gate chat peer legal names on chat_active stage · 0d39b10

    Use discoveryPeerLegalDisplayNameOrEmpty across inbox, transformToMatch, and thread chrome; fetch single discovery profile after reveal when the peer is outside the prefetch window; reject authUid stub labels. Web 0.1.889.

  417. Record web 0.1.888 chat reveal fix and plan reconciliation · 2f79df1

    Update AGENTS stage semver table, project master plan, and product todos for mutual-reveal passkey removal and discovery placement work.

  418. Remove passkey gate from chat mutual reveal · 16f8cc5

    Delete useSecureProfilesAfterMutualReveal and resolve thread names from public profile and discovery rows via chatMutualRevealDisplayName. Align useConnections.hasMutualReveal with validation consent flags. Login and Settings passkey flows are unchanged. Web 0.1.888.

  419. Align universe placement with axis chrome and shared fit copy · b3ca137

    Sector center angles match Canvas2D ring layout; tooltip and list rows show placement axis plus style profile via DiscoveryPeerFitPlacementLines; Vitest coverage for sector alignment, tooltip model, and list card placement.

  420. Stage simulation worker, BFF internal auth, and admin sim APIs · 2f91300

    Consolidate synthetic profile logic under sim-user/, add provision-actor and ensure-simulation-worker Fleet/compose paths, wire simulation-worker ticks from Mongo with traefik networking, and allow Fleet POSTs to /api/internal/* via x-internal-secret on the web BFF. Includes OpenAPI behaviour schemas, long-admin and discovery SSE Node BFF routes, profile generator server generate, and docs/KB. Excluded from commit: ifeoma-tc .env.stage (SIMULATION_ACCESS_TOKEN and rotated IdP secrets — apply via merge-env on the o…

  421. Fix matchCalculation Mongo mock for item weights · 8039259

    Add createMatchCalculationMongoMock with getDb + empty matchItemStats so loadMatchItemWeights does not emit vitest mock errors during calculateMatch tests.

  422. Close P21 on MASTER-PLAN and product todos · 57cb041

  423. Synthetic profile generate API and Fleet CLI · c0eeb04

    Add persona-complete lab cohort generation (reflection answers, connection ratings, match recalc), OpenAPI route, tenant-generate-synthetic-profiles, ML README, Redis overcommit KB, and backend 0.1.135. Excludes tenant .env.stage secret rotation from the commit.

  424. Post-deploy hygiene for AI strip (AGENTS, tenant ML version) · 600abca

    Refresh AGENTS.md stage table to web 0.1.876 and aiServiceVersion 0.1.1. Add ML_SERVICE_VERSION=0.1.1 to ifeoma-tc .env.stage (revert accidental ZITADEL_CLIENT_SECRET rotation). Sync contract generated index timestamps after Fleet rebuild.

  425. Add AI service version to build-info and landing footer · 0d594fb

    Expose ml-service semver via GET /api/build-info (ML_SERVICE_URL health probe), BuildVersionsStrip, and release-notes bundle schema v6. Fleet merge-env injects ML_SERVICE_VERSION from 30_ml-service pyproject.toml. Web 0.1.876, ML 0.1.1.

  426. Close P14 on MASTER-PLAN · 9de8312

  427. Align Xcode tree references to app-source/40_ios · 8b96f36

    Updates operational docs, START.MD, and validate-path FOLDER_MAPPINGS after P13 rename. Documentation namespace docs/30_ios/ is unchanged. Adds 40_ios/README_INDEX.md as the module entry point.

  428. Close P13 on MASTER-PLAN and product todos · abe6dea

  429. Renames app-source/30_ios to 40_ios with DIR_IOS and SourcePublicInterface updates. · cb853cf

    Renames app-source/30_ios to 40_ios with DIR_IOS and SourcePublicInterface updates. Adds MatchMlVars to seed_env (REDIS_URL, ML_SERVICE_URL, IRT flag) and documents Fleet tenant-rebuild-app as ml+backend+web. Excludes operator .env.stage secret churn from this commit.

  430. Wire REDIS_URL and ML_SERVICE_URL in ifeoma-tc env definitions · 3ba5eae

    Non-secret internal service URLs for match item stats and ML proxy on all profiles; stage keeps MATCHING_V2_IRT_ENABLED=false until irtPilotGates.ready.

  431. ML service, item stats, IRT pilot gates, and CI pytest · 271acae

    Add 30_ml-service on app_net/traefik for population item stats and IRT trait vectors; parse profile journey fields as Mongo maps aligned with backend. Enforce B0 sparsity gates before IRT fit; extend sparsity report with irtPilotGates; wire Fleet admin triggers and GitHub Actions ml-service-tests. Backend 0.1.134.

  432. Model admin match ML and e2e discovery-peer OpenAPI paths · b8f8ee5

    Add five platform-admin /api/admin/match/* routes plus POST /api/internal/e2e/ensure-discovery-peers with request/response schemas. Regenerate bundled OpenAPI, Zod, and web Admin/Internal API clients; check:openapi-backend-paths is green. Align backend passesStrictDiscoveryMatchIntentScopeFilter with web exact-match semantics (distinct from mutual visibility). Backend 0.1.133.

  433. Refresh ifeoma-tc PACKAGE_INDEX after stage deploys · 2971342

  434. Record web 0.1.875 / API 0.1.131 evidence and reconcile master-plan todos for client-derived match intent and misalignment penalty work. · 5e42551

  435. Refresh OpenAPI-generated client types, validation schemas, service worker bundle, and release-notes metadata for discovery intent contract changes. · 7448cc4

  436. Discovery UI polish, i18n, and match-intent documentation · 3daf20d

    Align list/universe copy with client-derived scores; harden list name privacy; document match intent scope and discovery features in README and shards.

  437. Discovery peer intent SSE and service worker cache patch · dde5a61

    Forward discovery events through the BFF; patch TanStack discovery cache on SSE and push without refetching scores. Add contract tests and strict-scope E2E helpers.

  438. Chats inbox transport match % with intent enrichment · 049a2c0

    Resolve peer match scores from dimensions and connection fallback before transformToMatch; skip rows with no score instead of throwing when API omits %.

  439. Universe strict-intent ghosts and intent-aware layout scores · 149b621

    Dim non-matching peers on the disc when Same intent only is off; use displaySessionMatchPercentage for radius, labels, and pick targets. Keep layout transition keys scoped to session intent.

  440. Client-derived match intent scores and 75% misalignment penalty · 2d0f9a2

    Derive session, peer-intent, and display percentages from pairwise dimensions in the browser; apply ×0.25 display when focused viewer intent does not exactly match peer scope (null or other focused id; explicit Open exempt). Remove legacy matchScope query wiring.

  441. Discovery slim batch, null intent on wire, and intent SSE · 8d5a1a7

    Map peer discoveryMatchIntentScopeId without defaulting missing Mongo rows to balanced; align matchIntentScopeAlignment with client strict/penalty rules. Add discovery events SSE and optional Web Push on peer intent updates. Bump 0.1.131.

  442. Nullable peer discovery intent and discovery events API · 51026da

    Expose discoveryMatchIntentScopeId as null when a profile never persisted a scope so the web client can apply the misalignment penalty without treating legacy rows as explicit Open. Regenerate OpenAPI bundle and Zod schemas.

  443. Update README_* path references in app-source comments · f3b199b

    Align JSDoc, test README invariants, and cross-module comments with the README_INDEX / README_<TOPIC> naming convention across backend and web-client.

  444. Update AGENTS semver table and project todos · 0226d9c

    Record stage evidence for discovery scope work, mark universe disk-spin E2E done in 00_PROJECT-TODOS, and note README_* doc convention in rules changelog.

  445. Sync README_INDEX path references in pipeline and cursor · d848939

    Update cross-links in app-pipeline KB, plans, rules, and .cursor memory to match app-source README_* naming (no runtime behaviour change).

  446. I18n for push embedder errors and strict-scope load · 18dde3d

    Refresh locale bundles with embedder-aware push failure copy, strict-filter load error string, and README_INDEX path references in admin fleet hints.

  447. Discovery E2E disk spin and scope realtime helpers · 16abdb6

    Add Playwright disk-spin viewport spec, shared discovery list/stub helpers, and tighten scope-realtime E2E selectors. Register npm scripts for the new spec and bump web client to 0.1.858.

  448. Match-intent strict scope UX and feature doc · 4f17c59

    Harden strict-scope provider load failures with localized copy, expand README_MATCH_INTENT_SCOPE product description, and add Vitest for provider invariants and E2E list-padding helper.

  449. Uniform disc spin and animated universe peer layout · 3adf628

    Peers rotate with the full colour-ring angle (remove radius-weighted spin). Add on-disc layout interpolation for enter/exit transitions and centralize discovery list request URL building. Extend coordinate-debug and Vitest coverage for spin convention and layout lerp.

  450. Internal E2E route to ensure discovery peers · 6f9cbfc

    Add POST /api/internal/e2e/ensure-discovery-peers for lab flows that need at least two discoverable profiles on stage. Wire helpers under lib/e2e and cover the route with focused Vitest. Bump backend to 0.1.124.

  451. Add main features catalog and docs hub index · cdf8928

    Introduce README_MAIN_FEATURES.md as the product-area catalog (nav, gates, shell features, onboarding, public pages) and docs/README_INDEX.md as the web-client documentation entry point. Cross-link area plans from the hub.

  452. Adopt README_INDEX and README_* naming in app-source · f48c7c2

    Rename per-directory README.md to README_INDEX.md and topic markdown to README_<TOPIC>.md under app-source/10_backend and 20_web-client. Update in-tree cross-links and comments that referenced the old paths.

  453. Update project plans and stage semver evidence for discovery scope · 95863cd

    Reconcile MASTER-PLAN and AGENTS.md with shipped match-intent scope work on ifeoma-tc stage (web 0.1.852, API 0.1.120).

  454. Discovery scope, universe layout, and push atomics · df890d1

    Add Vitest coverage for strict scope, profile rehydrate, disk spin parity, enrichment scope invariants, and discovery scope realtime E2E helpers. Bump web-client to 0.1.852.

  455. I18n for discovery strict scope and push embedder errors · fbeeb82

    Update discovery and profile shards plus legacy message bundles across all base locales.

  456. Web Push VAPID validation and embedder-aware subscribe errors · eaa1808

    Validate P-256 application server keys at health and subscribe time, share parsing with the service worker, and surface clearer copy when the host has no push messaging service.

  457. Map discoveryMatchIntentScopeId from profile wire · eae597b

    Expose nullable scope on Profile for session rehydrate without inventing a default before the user has chosen or persisted a scope.

  458. Discovery match-intent scope, strict filter, and rehydrate · 214c8c9

    Session scope stays unset until gate or profile rehydrate; strict filtering applies on Match only; realtime poll and layout transitions; enrichment GETs skip session scope outside discovery.

  459. Discovery match-intent scope alignment and strict filter · cfcd6ed

    Gate strict scope on Match discovery requests only, omit self-profile scope when never persisted, and align discovery row pipeline with scope visibility.

  460. Sync Zod schemas and generated API clients · 851f952

    Regenerate web and backend validation bundles and OpenAPI TypeScript client after discovery match-intent scope contract changes.

  461. Add discovery match-intent scope to OpenAPI · ed974b3

    Expose discoveryMatchIntentScopeId on profile payloads, strictMatchIntentScope on discovery list GET, and regenerate contract schemas for downstream modules.

  462. Colocate universe layout modules under universe-layout/ · 0026069

    Move positioning, peer selection, orb visuals, and layout compatibility from discovery root/utils into a dedicated universe-layout folder for clearer boundaries.

  463. BaseScreen layout SSOT, settings skeletons, and shell follow-ups · c04310b

    Add BaseScreen/BASE_SCREEN_LAYOUT for landing, auth, app shell, journey, release notes, and marketing routes; profile settings modal skeleton UX; landing scroll perf CSS; dedupe ConnectionStatusIndicator on discovery; document /dev PageLayout split. Bump web client to 0.1.840.

  464. Post-codegen timestamp alignment only; no contract shape changes. · 17c2691

  465. Record done row in project todos and MASTER-PLAN rollup note. · 579d66a

  466. Add profile settings load and You hub modal invariants · 4ae7a54

    Cover loadProfileSettingsData and deferred photo-editor mounting with atomic guards and fleet KB notes for You hub settings performance.

  467. Record stage 0.1.827 evidence and close PWA todo rows · 8b0d93f

    Update AGENTS semver table, project todo archives, master plan hygiene, fleet KB cross-links, and tenant PACKAGE_INDEX after the stage rebuild loop.

  468. Refresh generated schema index timestamps · d64820a

    Regenerate OpenAPI distribution copies after fleet contract-schemas preflight.

  469. Bump 0.1.827 and refresh release notes bundle · f7ccca6

    Align package semver with stage deploy, add esbuild for service-worker build scripts, and regenerate release-notes.generated.json from git history.

  470. Defer profile settings and photo editor mount work · 285f62f

    Split profile settings data loading and defer ProfilePhotoEditorCore until the settings sheet is ready so You hub open stays responsive on mobile.

  471. Defer heavy peer profile charts until sheet is painted · 2c0d792

    Defer dual-radar rendering until after open animation frames so peer profile sheet interaction stays smooth on mobile viewports.

  472. Dedupe preferences and incoming connections fetches · fc7061e

    Share TanStack Query keys for GET /api/preferences and listConnections so app shell and match surfaces do not issue parallel duplicate requests.

  473. Disable app-shell prefetch on match routes · 7a73cce

    Skip Next.js RSC prefetch from AppNav and discovery CTAs while the match universe shell is loading so tab navigation does not compete with first paint.

  474. Landing hero shell-first LCP and lazy below-fold · 4c0f658

    Paint the hero title immediately, defer shooting stars and below-fold sections, and add Playwright and Vitest guards for landing LCP regression.

  475. Split You hub into controller and body modules · f3a620a

    Move YouScreen orchestration into useYouScreenController and YouScreenHubBody with localized loading copy so the hub file stays within the 400-line policy.

  476. Split universe WebGL runtime and add performance tier · 8bbc9cd

    Extract canvas-runtime modules, apply device performance tiers and DPR caps, and defer heavy work so match universe shell stays responsive on mobile GPUs.

  477. Split passkey sign-in out of useAuthSignInMethods · 5842482

    Extract useAuthPasskeySignInMethods so the auth provider orchestrator stays under the 400-line policy while preserving passkey and OTP-gated registration flows.

  478. Regenerate service worker before tenant web rebuilds · df1e9ee

    Run npm run build:service-worker on the operator host before rsync for tenant-rebuild-web-client and tenant-rebuild-app, with CLI and env opt-out mirroring the release-notes preflight pattern.

  479. Generate PWA service worker from TypeScript sources · 9545602

    Bundle src/lib/pwa/service-worker into public/sw.js via esbuild, wire build:service-worker into prebuild and build:direct, and add CI freshness guards so locale bypass rules cannot drift from the app router.

  480. Update ifeoma-tc PACKAGE_INDEX after stage rebuild and bump generated schema index timestamps from contract distribution. · c650c16

  481. Bump 0.1.813 and record stage evidence · a42f99b

    Refresh release notes bundle, E2E LCP/a11y script entries, AGENTS semver table, and tenant package index timestamp after passkey and performance deploy loop.

  482. Carry passkey setup intent through mandatory onboarding gate · 4dcac58

    Preserve passkey registration callback query across app shell onboarding so settings can open after profile completion without losing setup context.

  483. BFF upstream proxy, gateway errors, flags, and SEO URLs · c30ad26

    Bodyless DELETE passthrough for settings routes, validate feature-flag payloads before cache, delegate JSON-LD base URL to runtime public domain resolver, and extend atomic coverage.

  484. Journey hub LCP shell and match-intent chip a11y · 0353efe

    Hero paints before progress skeleton on phase=welcome, add LCP probe coverage, and fix scope chip label-content-name-mismatch by using visible text as the accessible name (remove overriding aria-label).

  485. Shell-first match universe LCP and deferred bank meta · 51b62c7

    Paint discovery strapline before WebGL and profile gates, code-split the universe scene, defer journey bank API on match, and add stage LCP probe tests.

  486. Email-identified passkey login, register, and settings · bb0c738

    NextAuth passkey providers with backend error mapping, OTP-gated setup handoff, BFF routes, profile passkey management, signalUnknownCredential cleanup, and generated client plus focused atomic and integration tests.

  487. Harden passkey auth and biometric credential routes · dc0bdb5

    Email-bound challenges without credential hints, typed biometric errors, register/status routes, rate limits, and BiometricService split with tests.

  488. Passkey register, status, and biometric credential APIs · 792ba2f

    Extend OpenAPI with email-bound passkey challenge/register flows, non-enumerating status, and biometric credential inventory endpoints; regenerate zod schemas and tighten backend path compliance scanning.

  489. Consolidate project todo files and master plan index · fd6261e

    Rename module TODOS.md files to 00_PROJECT-TODOS.md, roll open work into 00_PROJECT-MASTER-PLAN.md, and archive completed rows to *-DONE.md files.

  490. Refresh release-notes and indexes after stage rebuild · 7cbae77

    Regenerate release-notes bundle from git history and update Fleet-generated PACKAGE_INDEX plus schema index timestamps from tenant-rebuild-app.

  491. Refresh ifeoma-tc PACKAGE_INDEX generated_at · b91878c

    Fleet-regenerated package index timestamp and public_hostnames ordering.

  492. Mark large-file split backlog rows done · addd4bd

    Align app-fleet TODOS with MASTER-PLAN closure for ReleaseNotesActivity and MatchManagementTab refactors shipped in web 0.1.704+.

  493. Record stage 0.1.792 evidence and close plan/TODO rows · 9678e8e

    Update AGENTS stage semver table, MASTER-PLAN progress, and app-source TODOS for auth OTP, design tokens, and backend test splits.

  494. Bump to 0.1.792 and refresh release notes bundle · 9ec371f

    Regenerate release-notes data and extend Playwright integration-internal project matching for auth-internal E2E specs.

  495. Update feature imports for design-system token paths · ee3f16a

    Point chat, journey, landing, and matching modules at tokens/* after the design-system brand shim removal.

  496. OTP E2E, session polling, and design-system path atomics · 98c5d65

    Add internal email-OTP integration spec, auth login method helpers, polled NextAuth session waiter, and update atomics for token paths and waitlist API.

  497. I18n(web-client): add auth, UI, and chat_answer_generator locale shards · 5abf5f6

    Translate chat answer generator strings for de/es/fr/ar, extend auth provider error copy, and regenerate merged locale bundles.

  498. Add mobile waitlist API and ComingSoon modal i18n · d234385

    Wire public waitlist route, platform helpers, WebAuthn passkey mode split, and localized Coming Soon modal copy with feature-flag alignment.

  499. Harden sign-in API parsing and OTP request validation · 728ee74

    Parse sign-in BFF JSON explicitly via readSignInApiJson, return 400 on invalid email-otp request bodies, and wire login method test ids for E2E selectors.

  500. Unify peer profile orb avatar presentation · c03d26f

    Add ProfileCardOrbPreview and resolvePeerProfileOrbAvatarPresentation so discovery, connections, and admin surfaces share the same orb/photo rules.

  501. Reorganize discovery components into feature subfolders · 06535ea

    Move list, universe chrome, and legacy visualization modules out of the flat components/ directory; update barrels and discovery page imports.

  502. Consolidate design-system brand tokens under tokens/ · e18e516

    Remove root *-brand.ts shims, relocate canonical token modules into tokens/*, and update design-system imports and atomics for the new paths.

  503. Split admin and discovery route tests into modules · 2a2ab08

    Move oversized route tests under tests/routes/admin/ and tests/services/discovery/; mock PlatformSettingsService to avoid Mongo during admin route registration.

  504. Harden passkey login, biometric verify, and feature flags · 38edae2

    Split passkey registration vs authentication verification, fix FeatureFlagService for MongoDB driver 7, and bump backend package version.

  505. Extend passkey challenge OpenAPI and regen Zod schemas · a0e90a7

    Add allowCredentials to AuthPasskeyChallengeResponse and refresh generated schemas for contracts, backend, and web-client consumers.

  506. Cover email OTP, JWT bridge, and passkey route ownership · 7abf672

    Add atomic tests for OTP identity and rate limits, E2E OTP retrieval, JWT email-otp provisioning, passkey BFF proxies, and login method selector UI.

  507. Add i18n copy for OTP login and method selector · 5aecfab

    Add auth shard strings for email code, magic link, and passkey login flows across base locales and regenerate merged message bundles.

  508. Add email OTP login with passkey BFF routes and method selector · 34bfb52

    Introduce hashed email OTP challenges with rate limits, NextAuth email-otp credentials, internal E2E OTP retrieval, Next.js passkey proxy routes, and a login card that defaults to email code while keeping magic link and passkey.

  509. Separate passkey registration from login assertion verification · 6e3e065

    Split BiometricService into registration vs assertion paths, map authentication to assertion envelopes in verifyBiometricWebAuthnOrThrow, and add focused route tests so pre-auth login cannot accept registration payloads.

  510. Add backendPackageVersion helper for health probes · d954300

    Read and cache semver from package.json relative to dist layout so GET /api/health does not depend on a fragile path from route modules.

  511. Bump web 0.1.775 and update plan tracking · 038279d

    Regenerate release-notes bundle, sync contracts generated index, and record completed maintainability work in TODOS.md and MASTER-PLAN.md.

  512. Add atomic coverage and split E2E helpers · 5156d5a

    Add Vitest for peer presentation, error-handler i18n, error toast retry labels, answer generator, dev functions, and refactored admin or layout invariants. Split app_shell_navigation and brevo E2E helpers into subfolders with barrels and READMEs.

  513. Split dev functions page and add dev API routes · 953cbe5

    Refactor /dev/functions into cards, hooks, and API helpers. Add platform-admin gated Next.js routes for dev status, change-stream probe, and scheduled-task smoke tests with shared lib/dev parsing helpers.

  514. Add i18n shards for errors and answer generator · af10561

    Introduce errors_handler and chat_answer_generator locale shards with errorHandlerI18n wiring in useErrorHandler and answerGeneratorI18n in useGeneratedContent. Regenerate merged messages bundles for all base locales.

  515. Split large feature modules into subfolders · 366e24f

    Break up admin tabs, chat hooks and wire mappers, connection API wire parsing, discovery ViewMyProfile, landing HowItWorks, and profile edit flows into orchestrator-sized modules. Add profile avatar package, matching radar frame, and discovery render-path documentation without behaviour regressions.

  516. Split lib utils into focused submodules · bedbf24

    Extract error-handler, error-types, answer-generator, question-bank, profile-generator, orb-states, and personalized-universe-positioning packages with thin root barrels. Add peerProfilePresentation for shared discovery/chat orb and core-value rules plus lib/profile README.

  517. Reorganize design-system primitives and tokens · 53ebd5c

    Cluster primitives into auth-shell, journey-ui, landing-effects, layout-shell, loading-states, modal, and pwa-prompts with barrels and READMEs. Split the design-system index into domain token modules and display/chart subfolder. Remove unused landing-effects exports, WaitingForSouls, ProfileIdentityForm, and duplicate ShootingStar layers; document background shooting-star product split in README.

  518. Split discovery, match, journey, and profile services · eb7d876

    Extract DiscoveryQueryService pipeline modules, MatchStorage persistence helpers, QuestionService validation/stats, calculateProductMatch dimension scoring, and ProfileService provisioning/journey writes. Keeps facades under 400 LOC and documents layout in service READMEs. Bump API to 0.1.104.

  519. Move registrars under src/routes/<domain>/ with thin root barrels for stable imports. · 17981bf

    Move registrars under src/routes/<domain>/ with thin root barrels for stable imports. Split monolithic admin, auth, chat, connections, and profile route files into focused modules and add per-domain READMEs.

  520. Bump 0.1.742 and reconcile plan tracking · 7fc7d15

    Record completed refactors (error-states, icebreaker bank, component splits) in TODOS.md and MASTER-PLAN.md; set package.json to 0.1.742.

  521. Regenerate merged locale bundles from i18n shards · 0e9c867

    Refresh messages/*.json after auth, chat, and ui.errorPage shard updates so runtime next-intl bundles stay aligned with src/i18n/messages sources.

  522. Align hub and connection detail error recovery paths · 5f49107

    Use journey i18n for YouScreen server errors and discovery.refetch on ConnectionDetail instead of a full page reload.

  523. Co-locate error-states cluster with locale-aware ErrorPage · ebd7803

    Move ErrorPage, ErrorScreen, ErrorBoundary, and setup hints under error-states/ with cookie-locale ui.errorPage shards, NextAuth sign-out, and thin primitive barrels.

  524. Extract inbox row, action column, accept handler, and orb/percent resolvers with transport guards; log when match percentage is missing instead of silent zero. · 21b5222

  525. Split CompatibilityDimensionsRadar into subfolder · 5521cea

    Move Recharts radar layout and dimension mapping into compatibility-dimensions-radar/ so the barrel orchestrator stays under 400 LOC.

  526. Split LoginForm into login-form subfolder · dbaf8c2

    Break sign-in, email-sent, and passkey steps into separate modules with a thin orchestrator and preserve the public LoginForm import path.

  527. Split icebreaker mode and surface empty question bank · b831d1b

    Extract IcebreakerConnectionMode into icebreaker-connection-mode/ with typed bank failures, operator ErrorScreen when the question bank is empty, and i18n shards.

  528. Split QuestionCard into question-card subfolder · e295b93

    Decompose choice, slider, free-text, and footer sections into focused modules with a thin orchestrator to meet the 400-line component policy.

  529. Split useChatSystemThreadSafetyHandlers into subfolder · 8f88c0b

    Extract report/block/end handlers with transport identity guards into thread-safety-handlers/ and keep a thin hook barrel under 400 LOC.

  530. Localize biometric errors via providerErrorKey · a0900f1

    Expose BiometricResult.providerErrorKey and map web passkey failures to auth.providerErrors.webBiometric* shards instead of opaque English strings.

  531. Split universe WebGL lifecycle and canvas2d paint · c0f74af

    Move engine lifecycle and paintUniverseCanvas2d into focused subfolders with thin barrels so orchestrators stay under 400 LOC; add devicePixelRatio atomic test.

  532. Resolve discovery orb hex without silent color fallbacks · 6b40718

    Centralize orb color parsing for StarField2D/3D via resolveDiscoveryProfileOrbHexForRender so invalid stored colors log explicitly instead of defaulting to white.

  533. Split release-notes analytics into subfolder · cf9f1ce

    Extract punch card, day buckets, and UTC date helpers from the monolithic buildReleaseNotesAnalytics module so the orchestrator stays under the 400-line policy.

  534. Split large modules and tighten discovery/platform contracts · c18fa41

    Break up 500+ LOC orchestrators into focused subfolders (chat, discovery, auth, journey, platform, design-system) with barrels ≤400 LOC, add targeted Vitest coverage, localize auth provider errors, replace silent orb-color fallbacks in UniverseView3D, and map web getBiometricType via WebAuthn UVPA. Bump web to 0.1.730; update TODOS and MASTER-PLAN.

  535. Ifeoma-tc stage env — TC_FLEET_MANAGER_VERSION 1.0.4 · 3dcb0b2

    Align stage merge-env with live cloud build-info; group E2E registration emails (peer before primary). Zitadel client secret rotation stays in local merge-env only (pre-commit secret guard).

  536. Refresh PACKAGE_INDEX generated_at timestamp · 0a2e3d9

    Fleet package index regen after stage rebuild (ifeoma-tc).

  537. AGENTS stage table — live web 0.1.706 / API 0.1.94 · d419309

    Refresh canonical stage semver row and evidence bullet after tenant-rebuild-web-client + tenant-rebuild-app (2026-05-16).

  538. Refresh release-notes bundle for 0.1.706 · 01d7125

    Regenerated during tenant-rebuild-web-client; includes recent refactor commits through docs/AGENTS update (web 0.1.706 / API 0.1.94).

  539. Sync generated schema index timestamps · 2a0564c

    Fleet tenant-rebuild refreshed generate-all metadata in contracts and web-client validation barrels (no zod body change).

  540. Record deploy evidence, closed refactor rows, and large-file audit progress; align matching doc paths with backend services/ layout. · 1d6d67c

  541. Remove throw-only api-client shim · 2dce0ff

    Delete lib/api-client.ts; route callers through HttpStatusApiError and generated client; refresh validation schema barrels and release-notes bundle (0.1.706).

  542. Split UniverseView into universe-view modules · f888693

    Extract scene-prototype hook, pointer-tooltip hook, and overlay sections; orchestrator ~302 LOC (was ~892); web 0.1.706.

  543. Split admin match and question management tabs · 3c93752

    Add match-management/ and question-management/ hooks and section cards; thin tab orchestrators (web 0.1.705).

  544. Split release-notes activity into sections · eb7c7fc

    Extract heatmap/format helpers, hooks, and activity section components; orchestrator under ~120 LOC (was ~1200).

  545. Split universe-webgl canvas, dock, and hooks · de496a0

    Extract WebGL runtime hooks, pointer-hover helpers, and prototype dock sections; thin UniverseWebGLCanvas and UniversePrototypeDock orchestrators.

  546. Modularize services into domain folders · e11b550

    Group orchestrators under admin/, chat/, connection/, discovery/, journey/, match/, platform/, profile/, push/, and user/ with domain modules and barrels; update routes, lib, and tests; add Vitest global env setup (0.1.94).

  547. Split server API tests into server_api package · c56e4f2

    Extract monolithic test_server_api into focused modules with shared harness; keep smoke re-export for discover compatibility.

  548. Split CLI registration and tenant fleet runner · b2984f7

    Move subparser registration into src/cli/register/ and tenant runner logic into tenant_fleet_runner/; thin cli.py entry shell; fix unit test import paths.

  549. Remove container_mount generated schema copies · 40dec2d

    Delete stale hub package/types under container_mount; document the mount layout and drop /app/shared binds from full-stack compose templates.

  550. Remove legacy schema hub generators and validators · df6a1a4

    Drop obsolete api-generate, copy-to-platforms, zod shim, and validate-openapi-generated; consolidate distribute/generate-all around the single generate-schemas pipeline.

  551. Vibe-check contract, typed-error routing sweep, narrowed mongo races, module READMEs · 98fc3ef

    Closes a deep audit pass against silent fallbacks, deprecated shims, and inline error-mapping drift across backend + web client. Vibe-check (full stack): - New OpenAPI path POST /api/connections/vibe-check + ConnectionService.recordVibeCheck (idempotent per-user tap, materializes vibeCheck.bothTappedAt, gated on anonymous_chat_active via ConnectionTransitionError 409). - Connection list/stage responses now include vibeCheck + vibeCheckComplete. - Web client drops the hand-maintained PostConnectionVibeCheckResponse…

  552. Fleet VM flows, strict tenants, hosting libvirt API, and web client API cleanup · 086f4ec

    FleetManager gains offline VM resource orchestration and live config snapshots; list_tenants fails fast on unloadable packages; Zitadel purge and external config validation no longer swallow errors; misc_cmds re-exports and unit tests align with src.manager. HostManagementInterface exposes libvirt offline helpers via a mixin; provisioning PPI resolves workload providers. Web client consolidates same-origin API usage under lib/utils/api, improves PWA registration and push handling, i18n shards and roundtrip tooling…

  553. Split misc_cmds into package; track i18n locale shards · e8ca273

    Replace monolithic app-fleet `misc_cmds.py` with `misc_cmds/` while keeping `from src.cli.misc_cmds import …` paths. Un-ignore `src/i18n/messages/<locale>/*.json` in `.gitignore`, add per-locale shard JSON (ar/de/en/es/fr), refresh `translations-bundle.csv`, import-shards script, shared `scripts/i18n/_lib/`, and shard README. Update fleet `src/cli/README.md` module table.

  554. Merge IdP mailbox into profile POST when body omits email · ab1c7f2

    Onboarding shows read-only account email; Fastify uses JWT or stored email for the mailbox invariant and backfills Mongo when needed. Shard i18n, merged locale bundles, release notes, and semver (web 0.1.693 / API 0.1.80). Update PROFILE_SURFACES, AGENTS, MASTER-PLAN, and TODOS. Harden ErrorBoundary recovery and push entry prompt auth gating with Vitest coverage.

  555. Regenerate OpenAPI clients before tenant rebuild · 3b9dd93

    Run app-contracts generate-all on the operator host after release-notes and before gates/rsync for tenant-rebuild-web-client and tenant-rebuild-app, with CLI/env skip mirrors. Document in app-fleet README and KB; add unit tests.

  556. Refresh stage evidence and MASTER-PLAN status · 7f4707a

    Update AGENTS semver table for web 0.1.690 / API 0.1.79 and extend MASTER-PLAN closure notes for platform settings, OpenAPI parity, and E2E health gating.

  557. Runtime tunables, bearer parity, and client limits · 3d8625c

    Add Mongo-backed platform settings with admin patch routes and a public viewer snapshot; tighten internal Bearer [redacted]; wire chat list/message and discovery prefetch limits to tunables; improve push key comparison and E2E health gating against live backend semver; extend docs and Vitest coverage.

  558. Track multi-file OpenAPI sources and bundle workflow · f78122b

    Add Redocly-authored `openapi/sources/`, bundle script, CI path filters, and web-client dev hooks so edits to fragments trigger regen without hand-editing the monolithic spec.

  559. Rebundle OpenAPI from sources and regen clients · 64b53da

    Sync committed openapi.yaml with multi-file sources (Redocly bundle) and refresh Zod + openapi-typescript + axios generated artifacts for web and backend.

  560. Passkey flow, feature flags UI, and repo hygiene · cdd4598

    Wire passkey auth and Mongo-backed flags end-to-end; move biometric client code under auth; refresh i18n, docs, CI, and E2E helpers. Exclude tenant .env.stage from the commit (secrets / merge-env).

  561. Refactor db layer into grouped helpers · 1a27ed7

  562. Add frontend feature flag admin · bfe344f

  563. Add backend feature flags · 83f45ea

  564. Refresh agent orientation and backlog pointers · fd9eebd

    Update MASTER-PLAN progress, AGENTS semver table, agent behaviour annexes, app-source TODOS, rules changelog, and remove superseded match-peer plan.

  565. Bump version and refresh release notes · a695c4c

    Align package semver with the regenerated release-notes bundle for this delivery slice.

  566. Harden app shell navigation and viewport specs · db0a058

    Improve shell navigation helpers, logging, full-workflow smoke timing, responsive discovery coverage, and document gated Playwright scripts.

  567. Guard README roots and chat layout invariants · 929a4ba

    Add module README root checks, assert design-system chat surface docs, cover peer private sender label clustering, and refresh chat diagnostic layout atomics.

  568. Atomics for layout, runtime domain, and platform adapters · d3d0854

    Cover network layout and quadrant helpers, runtime public domain and migration contracts, platform voice/WebAuthn helpers, and module README presence for data, generated, and services trees.

  569. Add route and module README stubs · 547dc8e

    Document app route folders, shared feature entrypoints, and supporting lib/service modules so contributors can navigate the tree quickly.

  570. Split ChatSystem orchestration and polish messaging UI · 8e33ad6

    Extract thread prop builders and orchestration hook, tighten transcript chrome and glass tokens, refresh chat i18n shards, and align the onion plan with the new structure.

  571. WebAuthn and voice platform adapters · 2e6b13f

    Wire biometric WebAuthn and web voice recording through the platform adapter surface, refresh types and dev test cards, and document hooks.

  572. Deterministic universe layout helpers · 4cd1d36

    Add stable pair-unit hashing, tighten network layout and quadrant math, and align discovery network visualization with the deterministic paths.

  573. Mirror runtime public domain and migration contract · 2cfec31

    Expose runtimePublicDomain alongside runtime config, tighten migration helpers and docs, and align translation cache with the new domain source.

  574. Document merged-env build host parameters · 9571578

    Clarify merged env / build host wiring in docs, refresh fleet README pointers, extend the deployment template, and note tenant module layout.

  575. WebAuthn biometric flow and runtime public domain · f25066e

    Add WebAuthn helpers, extend BiometricService and admin paths, surface runtimePublicDomain on config, tighten Mongo index setup, and refresh route tests plus package metadata.

  576. Allow nullish peerPairwiseMatchDimensions · bb33fa2

    Regenerate mirrored Zod and API client artifacts; add backend wire schema test for nullish peerPairwiseMatchDimensions payloads.

  577. Centralize todos and archive legacy backlog · 70c89d2

    Move root TODO markdown into docs/archive, add per-module TODOS stubs, and refresh the pipeline todos index plus test runner notes.

  578. Close app-tenant hygiene todos; document icebreaker stage web version · 5bd9b81

    - Reverted ifeoma-tc PACKAGE_INDEX + .env.{stage,dev,prod} to HEAD; track closure in app-tenant/TODOS.md - tests/README.md: icebreaker bullet — deploy web ≥0.1.674 for /chats Accept on fresh users - MASTER-PLAN: workspace hygiene done row

  579. Icebreaker E2E blocked on stage until web 0.1.674 edge · 3b1394a

    - app-source/TODOS.md: evidence for stage health 0.1.654 vs package 0.1.674 + deploy note - MASTER-PLAN: closure row for web 0.1.674 repo + stage rebuild prerequisite - chat-icebreaker-in-thread.spec: file doc on deriveChatsListShellGate / Accept CTA

  580. Chats inbox gate when connection unlocks; journey E2E welcome · 110ccf9

    - deriveChatsListShellGate: return none when chatShellUnlocked so incoming consent is not hidden behind complete_journey - useAppShellNavGates: enable Chat tab when connections resolve and shell is chat-unlocked - ChatsPageClient: document gate + inbox behaviour - Playwright: ensureJourneyWelcomeCompleteForShellE2e in journey hub smoke; URL phase check via JOURNEY_URL_PHASE; isJourneyProgressUrl post-onboarding reflection handoff + atomic test - web 0.1.674, release-notes bundle, MASTER-PLAN progress row

  581. ChatSystemThreadPhaseBody phase switch (0.1.660) · 95f3b08

    - Extract phase switch + shells to ChatSystemThreadPhaseBody; ChatSystem builds ComponentProps bundles for icebreaker, active thread, and PeerProfileSheet. - ChatSystem.tsx ~528 LOC (wc -l); fix phase test session cast via unknown. - Refresh chat-onion counts, feature/core README, MASTER-PLAN, TODOS, AGENTS, release-notes bundle.

  582. ChatSystem thread render phase hook (0.1.659) · ffa0ab4

    - Add useChatSystemThreadRenderPhase / resolveChatSystemThreadRenderPhase with ordered gates; profile_query_failed uses profileLoadFallback when error is nullish or blank (avoids getClientApiErrorDisplayMessage(undefined) string). - ChatSystem switches on threadPhase; Vitest chatSystemThreadRenderPhase. - Refresh chat-onion wc -l + atomic counts, READMEs, MASTER-PLAN, TODOS, AGENTS, release-notes bundle.

  583. Transport derivations + peer profile trailing (0.1.658) · cdc97a8

    - Add useChatSystemThreadTransportDerivations for icebreakerActive + blindFreeTextStages. - Add ChatSystemPeerProfileTrailing presentational control for PeerProfileSheet. - Indent ChatSystemActiveThreadView props; refresh chat-onion wc -l, TODOS, MASTER-PLAN, AGENTS.

  584. Blind reveal thread controls hook (0.1.657) · 3c19a77

    - Add useChatSystemBlindRevealThreadControls for busy flag, transport-guarded press handler, and PrivateMode blindRevealUi / anonymousComposerHint memo. - Wire ChatSystem; export ChatSystemBlindRevealUi for PrivateMode props DRY. - Track useChatSystemThreadShellDerivations (was missing from index). - Docs: chat README mermaid/deep trace, hooks/core README, chat-onion wc -l, TODOS, MASTER-PLAN, AGENTS repo parity; release-notes bundle for 0.1.657.

  585. UseChatSystemSharedThreadProps; TODOS audit · d364aa8

    Extract shared anonymous/private column props memo; ChatSystem 641 LOC. Mark transformToMatch and chat/core barrel rows done; E2E rows note env. Web 0.1.655; MASTER meta TODOS sync done.

  586. Extract useChatSystemSessionMessaging from ChatSystem · 9c9450d

    Bundle useChatMode, useMessagePolling, useTypingStatus, useGeneratedContent, and useMessagingHandlers with press-reveal cache sync; ChatSystem keeps blind-reveal busy UI. Web 0.1.654; docs and stage health verified.

  587. OpenAPI admin max-visible-profiles POST · a4db314

    - Document POST /api/admin/user-preferences/max-visible-profiles (was Fastify-only; compliance script expected GET in stale todo — method is POST). - Schemas AdminSetMaxVisibleProfilesRequest/Response; operationId adminUserPreferencesMaxVisibleProfilesPost. - Regenerate web api-types; check:openapi-backend-paths OK. - Web 0.1.653; admin api/README cross-links; backend route JSDoc operation ref. - Close app-contracts TODOS; app-source TODOS + MASTER-PLAN; AGENTS pre-deploy table.

  588. Stage web 0.1.652 evidence after tenant-rebuild · 4e5baf3

  589. - New hook composes useProfile, peer resolution, connections, connection validation, secure profiles, enrichment memos, and header display strings. · 8bfb722

    - New hook composes useProfile, peer resolution, connections, connection validation, secure profiles, enrichment memos, and header display strings. - ChatSystem.tsx ~756 LOC (was ~850); hook ~204 LOC. - Docs: chat-onion plan, hooks README, MASTER-PLAN, followups wc table, app-source TODOS; app-contracts TODOS tracks OpenAPI gap for admin max-visible-profiles route. - Web 0.1.652; release-notes bundle; AGENTS semver table.

  590. OpenAPI beforeCursor and GetMessagesResponse.prevCursor · 0ab541c

    - Document GET /api/chat/messages beforeCursor (mutually exclusive with cursor). - Add prevCursor to GetMessagesResponse (required nullable; matches Fastify payload). - Regenerate web-client api-types.ts; web 0.1.651; release-notes bundle. - Close app-contracts TODOS row; refresh MASTER-PLAN, app-source TODOS, followups plan, AGENTS.

  591. AGENTS stage web 0.1.650 + Fleet release-notes after §4.2 deploy · f3a31de

  592. Chat-transport §4.2 parity with BFF + callers · b00f28a

    - Document getMessages nextjsApiRequest, beforeCursor, sendMessage/mark split - Moderation: report vs DELETE end/block vs POST …/block (OpenAPI) - Supplementary row for useChatSystemThreadSafetyHandlers; 6.6 send 401–413 note - messages/index.ts BFF path docstring; chat-onion §4.2 mandatory row + followups backlog - app-contracts TODOS: OpenAPI beforeCursor gap; app-source TODOS §4.2 done - Web 0.1.650; regenerate release notes; MASTER plan closure row

  593. Stage web 0.1.649 evidence + Fleet release-notes + 3.3 composition row · 3a2e054

    - AGENTS canonical table + post-deploy curl/live-health - chat-onion: 3.3 composition lists useChatSystemThreadSafetyHandlers - Regenerated release-notes from Fleet rebuild

  594. Extract useChatSystemThreadSafetyHandlers from ChatSystem · 947fada

    - New hook: end/mute/report/block/end+report with transport-identity guards - ChatSystem shrinks ~850 LOC; logging tag remains ChatSystem for observability - Semver 0.1.649; chat-onion + followups wc/l; TODOS §3.3 slice done + remaining row - Vitest chat 147/41; npm run build green

  595. AGENTS stage web 0.1.648 + Fleet release-notes refresh · 00179db

    - Canonical table + ship note after tenant-rebuild-web-client - Regenerated release-notes.generated.json from remote Fleet build

  596. Classify outbound send HTTP errors (401/403/400/413) · db3e9e0

    - Extend MessagingSendFailureKind + classifyMessagingSendFailure for status codes - Map toasts via resolveMessagingSendToastPresentation + chat.errors.* locales - Track i18n chat shards (git add -f); rebuild messages/*.json and CSV - Vitest: messaging send failure + toast presentation; chat-transport + README - Semver 0.1.648; regenerate release notes; TODOS + MASTER plan progress

  597. Restore stage history · 6701f56

  598. Record deployed release notes refresh · b11b3ed

    Commit the release-notes bundle regenerated by the 0.1.632 stage rebuild so the repository matches the deployed artifact.

  599. Refresh release notes after route design cleanup · 1a9b41f

    Regenerate the 0.1.632 release-notes bundle so it includes the shipped route, design-system, and docs cleanup commit.

  600. Ship route design and docs cleanup · 75ae1be

    Bundle previously local-only welcome, design-system, journey, and chat documentation work with focused invariant tests and web semver 0.1.632.

  601. Record local-only web-client ship gap · 2e9ecc5

    Track the completed-but-unshipped web-client route, design-system, and docs changes as a mandatory delivery invariant before bundling them.

  602. Align chat follow-up priority wording · 21870be

    Reword active chat follow-up docs so mandatory work, manual operator proofs, and wire-field optionality are clearly separated.

  603. Refresh chat plan evidence · a674ddf

  604. Refresh release notes after chat layout deploy · 4218255

  605. Polish chat thread layout · dd8e244

  606. Record chat thread layout follow-up · 4b14bc5

  607. Refresh release notes after universe i18n deploy · 9aecc1e

  608. Add universe operator toolbar copy · 4764fe9

  609. Record universe toolbar i18n regression · 281bafe

  610. Refresh release notes after auth shell deploy · 7c94ea5

    Include the auth shell and stage evidence commits in the generated release-notes bundle for web 0.1.629.

  611. Record stage web 0.1.629 · 275b600

    Refresh the stage semver table with the verified auth-shell deployment and browser proof.

  612. Centralize localized auth route shell · 77772da

    Route localized sign-in and auth-error pages through a shared design-system shell so public auth gates use one brand ambient and viewport-safe layout contract.

  613. Record auth route shell follow-up · 97c882a

    Track and close the localized auth route shell consistency finding in the working-loop master plan.

  614. Bump version and refresh release notes · d99bcc7

    Align package.json semver with the generated release-notes bundle.

  615. Expand TSDoc across discovery and shared libs · 6962ddb

    Add or refine module and function documentation for discovery helpers, connection icebreaker wiring, journey path resolution, profile merge and picture hooks, i18n bundle loaders, error utilities, and route constants.

  616. Align matching algorithm write-ups · f3a28b6

    Update matching algorithm summary and deep doc for backend signal and scoring behaviour changes.

  617. Cap universe WebGL present rate at 24 FPS · a043aab

    Throttle the rAF loop with UNIVERSE_WEBGL_MIN_FRAME_INTERVAL_MS, scale idle disk drift by wall time, and export the new constants.

  618. Admin match management UI and strings · a7b8be9

    Wire MatchManagementTab to new admin fields, extend message keys, and refresh locale bundles plus the translations export CSV.

  619. Chat inbox, icebreaker, and polling hardening · 0540fd0

    Improve ChatsPageClient and thread chrome, message merge/map wiring, icebreaker/private/anonymous modes, polling stability, and sender-name resolution with new atomic tests.

  620. Refine modal primitives and chat surface tokens · 2258cef

    Update BaseModal behaviour/structure, modal brand tokens, design-system exports, and chat messaging surface styling hooks.

  621. Match calculation, discovery, and admin diagnostics · 160a0ed

    Extend match pipeline (versioning, profile signals, connection ratings), discovery query enrichment, admin routes and diagnostics, and operator backfill messaging. Includes new connectionRatingSignals helper and expanded service tests.

  622. Sync OpenAPI and generated schemas · e29f056

    Regenerate app-contracts zod, backend/web validation copies, and web OpenAPI client models from the updated discovery/admin surface.

  623. Add operator universe tools toolbar aria for discovery view · 178db13

    MISSING_MESSAGE for discovery.universe.view.operatorUniverseToolsToolbarAria (operator toolbar in UniverseView). Add copy in all base locales.

  624. Prune stale outbound matches after materialised recalc · 1fa3918

    When peers are removed or the viewer has no eligible peers, `matches` rows for deleted `otherUserId` values were never deleted, so admin match-index showed permanent (orphan) weak-band rows after profile purges. After each `calculateAndStoreMatchesForUser` pass, delete outbound rows for the viewer not in the computed peer set (or all outbound when the set is empty). Also prune when the viewer lacks reflection/connection basis. Extend BulkMatchResult with optional `staleOutboundRemoved`; update contract tests with …

  625. Let admin scroll column shrink above bottom nav · 8a7ac31

    Add min-h-0 on the AdminPanel root and scroll region so flex-1 respects the dock spacer + fixed AppNav, matching the (pages) shell pattern. Document the bottomDockSpacer contract in the module header.

  626. Journey explainer, discovery, landing, profile crop, infra · 3d106f6

    Journey "how it works" explainer: richer layout, ICU-safe copy, footer context and disclosure UI; align hub/welcome/you surfaces and hooks. Discovery: universe WebGL and scope picker refinements; docs and message keys. Landing: simplify How it Works, responsive footer grid, locale overlays; add og-image asset. Profile: optional picture crop modal and canvas helper; API wiring updates. BFF binary forwarding, PWA service worker tweak, admin panel copy, design-system primitives (LayoutGrid safe centering) and new gla…

  627. Add profile API contract tests · 3663f04

    Cover GET /api/profile shape, successful POST updates, and 400 paths for invalid preferredLocale and out-of-range birthYear (BIRTH_YEAR_INVALID).

  628. Remove fixed-name app containers before compose up · ccbc452

    Try `docker rm -f` before `sudo docker rm -f` on SSH targets so docker-group users still prune orphan `container_name` rows when sudo is not passwordless. Refresh ifeoma-tc PACKAGE_INDEX generated_at ordering (merge-env).

  629. Sync release-notes with post-deploy git range · 5ad860a

  630. Refresh release-notes after chat unlock TS fix · 985f9c2

  631. Type-safe wire guard in hasChatShellUnlockFromConnections · 5c3aea6

    Validate stage via string allowlist so Next.js typecheck accepts empty-string and unknown wire values without comparing ConnectionStage to "".

  632. Regenerate release-notes bundle; refresh PACKAGE_INDEX for ifeoma-tc stage. · 6363924

  633. Align app shell navigation with Universe gate flows · 23c69d7

    Update journey-hub-and-you-smoke for gated shell behaviour.

  634. Universe vocabulary, journey and E2E notes · a2029fb

    ADR and README touch-ups for Match/Universe naming.

  635. ChatHeroOrb for tutorial, private request, reveal panels · 977c66d

    Shared orb chrome across chat onboarding surfaces.

  636. Hub screen and explainer totals wiring · a17017b

    Tighten JourneyHubScreen; align journeyVisualChrome and ReflectionPhaseExplainer.

  637. Universe tab, journey gate modal, shell layout tokens · caeaf29

    Bottom nav and explore-shell gate copy/behaviour; globals for nav height.

  638. I18n: Universe product copy, nav journey gate, discovery scope labels · bf340dc

    Match→Universe strings, journey-bank gate for discovery list, Business/Mindful for professional/support scope titles. Sync translations-bundle.csv.

  639. Session focus picker as Open plus 2×2 grid · 0b9a01a

    Quadrant order: Heart, Friends, Business, Mindful (canonical scope ids). Export MATCH_INTENT_SCOPE_FOCUS_QUADRANT_IDS from catalog.

  640. Require known non-terminal stages for Chat shell unlock · 35cdd8c

    hasChatShellUnlockFromConnections rejects empty, unknown, and terminal stages. Add Vitest for rejected/degraded/invalid rows.

  641. Keep Match step locked until bank caps known and both axes complete · c559655

    Treat reflectionTotal/connectionTotal undefined or non-positive as incomplete. Pass through from useJourneyBankMeta without coercing to 0. Extend Vitest for hub edge cases.

  642. Export bottom nav height for screen shell · e1c8423

  643. View peer profile from thread chrome · 9f75bd9

  644. Assert pairwise radar in modal · 42e3044

  645. Expose pairwise radar target · 8c50b52

  646. Mark discovery profile adapter fix · ee19c85

  647. Align discovery type labels with matching signals · e52bd61

  648. Record P2.2 cleanup · cb351f2

  649. Align app shell height with nav · ebbb5ac

  650. Shell nav, match intent scope, discovery docs, OpenAPI, i18n · 43ae57e

    - Bottom nav: Journey → Match → Chat → You; sign out on You hub; E2E helpers and tests - Match intent: picker modal/body, scope URL helper, catalog; discovery toolbar and gates - Discovery: filter/quadrant docs, StarField comments, transformToMatch quadrant allowlist + log - OpenAPI: DiscoveryProfile personalityQuadrant descriptions; backend matching doc examples - i18n: shards, bundles, EN peerProfile hint, DE Growth Seekers label; Figma parity - AGENTS + Fleet KB evidence for stage web 0.1.605 / API 0.1.65; rele…

  651. Bottom nav tab shows Universe (app.nav.tabMatch) · d9813ea

    Rename visible Match label per ADR; keep message key and /match routes. Update five locales + CSV export; AppNav docs; web 0.1.599 release notes.

  652. Single discovery list toolbar for scope and view toggle · 431208a

    Merge MatchIntentScopeChip and ListViewToggle into DiscoveryToolbarRow on /match/list; add scopeFillsRemaining layout for flex chip + ml-auto view group. Remove DiscoveryOverlapRefineListRow (superseded). Web 0.1.598; AGENTS + notes.

  653. GetDisplayName default fallback is empty string · 6319d44

    Avoid English Anonymous when callers omit the second argument; document localized fallback contract. Web 0.1.597 + release notes; AGENTS repo parity.

  654. Gitignore local test-phase1 scratch directory · 8f5ba9d

  655. Repo parity web 0.1.596, backend 0.1.65; note Web 0.1.596 · a2d4572

    Refresh package.json parity row and add HEAD bullet for profile-card unknown-name alignment; mark 0.1.578 row as superseded in repo.

  656. Localized unknown name on profile cards · 31c5214

    ProfileCard adapter drops English Anonymous; use empty minimal names and resolveTrimmedPeerDisplayNameFromProfile for API rows. ProfileHeader shows app.people.displayNameWhenUnknown when the normalized name is blank so all BaseProfileCard surfaces match chats/discovery. Bump web to 0.1.596 and refresh release-notes bundle.

  657. Align profile settings and identity prototype · 6f2a3c9

    Mirror profile identity form and settings surfaces in the Figma design reference tree.

  658. I18n bundles, release notes 0.1.595, docs, and tenant index · 69cc57c

    Refresh locale JSON and translation CSV, bump web-client semver with release-notes bundle, update matching-system and chat plan docs, responsive audit matrix, AGENTS and todos, PACKAGE_INDEX, and add match-peer-plan notes.

  659. Admin match management API and i18n keys · 37c8d5a

    Extend admin API helpers and match management tab messaging keys.

  660. Discovery list toolbar and layout-brand tokens · 913129f

    Tighten list filter toolbar and search bar; adjust match intent chip and overlap refine row for the discovery list shell.

  661. Chats inbox and thread peer labels stay consistent · 346798b

    Align ChatSystem header title with ConversationMatchCard and ChatView consent copy. Simplify chats list shell, mode indicator, transformToMatch, and related docs and tests.

  662. AppBrandHeroOrb stack and slow glow across hero surfaces · 9ec9a99

    Centralize brand hero orb props, wire slow opacity pulse timing in Orb, and replace ad hoc YouBrandOrbMark stacks on landing, journey, you hub, universe preview, network viz, and dev theme showcase.

  663. Profile identity, settings, and public schema validation · 594caba

    Use loose ProfilePublicSchema so wire fields are not stripped. Tighten peer photo loading when profileId is absent. Update settings surfaces, email normalization, and docs.

  664. Profile routes, admin extensions, and email-required tests · 2f81193

    Add profile and admin route behavior with locale error strings. Extend profile-recalc-schedule tests and add profile-email-required coverage.

  665. Discovery list refactor, matching ring bands, shell updates · 2b12aa5

    - Remove DiscoveryFilterPanel, list sort dropdown, and extractFilterOptions; streamline DiscoveryPageClient and overlap refine row - Add connectionRingBands module and matching axis order contract test; adjust radar and universe positioning - Journey hub/welcome and explainer chrome; PeerProfileSheet and culture save gate tweaks - App shell layout, routes constants, i18n bundles, matching-system agent rule, docs ADR/profile surfaces - Update atomic and E2E tests; remove obsolete testbench universe_test.html protot…

  666. Tune universe performance UX and debug-only FPS HUD · 2817640

    - Stop auto-switching to list view and remove GPU LOD overrides from FPS tier; keep measuring FPS for future use and diagnostics. - Show the performance readout only when Global Debug Mode is on; restyle as a compact low-contrast HUD above the bottom nav. - Add atomic tests for the hook and universe view performance contract.

  667. Reconcile match-peer P2.0/P2.1 and MASTER stage parity row · ccc0240

  668. Remove fake ListView compatibilityBreakdown (P2.1) · 569d380

    Web 0.1.589. MatchCard does not read compatibilityBreakdown; discovery list Match uses API-backed match percentage only.

  669. Match-peer P1.6 ConnectionDetail + MASTER log · 260f457

  670. Pairwise radar on ConnectionDetail · aa2bb1b

    - [redacted] + findConnectionRowForPeerAuthUid - ConnectionDetail: useConnections + CompatibilityDimensionsRadar variant pairwise - ConnectionsPageClient: JSDoc — depth charts live on ConnectionDetail - Vitest: resolveConnectionDetailProfile.pairwise Web 0.1.588

  671. Match-peer P1 chats inbox + MASTER stage table refresh note · a829334

  672. Chats inbox PeerProfileSheet + Match pairwise axes · 3fefb2a

    - Match: optional peerPairwiseMatchDimensions and peerMatchingSignalDimensions - transformToMatch: connection-first pairwise precedence; discovery extras args - ChatsPageClient: pass discovery matchingSignalDimensions and pairwiseMatchDimensions - ConversationMatchCard: View profile opens PeerProfileSheet (reuse discovery i18n) - Vitest: transformToMatch.peerPairwisePrecedence Web 0.1.587

  673. Match-peer P0 reconciliation + MASTER log row · ad3f408

  674. Pairwise dimensions on connections and discovery · 9093fa4

    - OpenAPI: peerPairwiseMatchDimensions on list Connection; pairwiseMatchDimensions on DiscoveryProfile - Backend: enrich connection list rows with pairwise axes; discovery mapper/query pass through - Zod (contracts, web, backend): AdminCompatibilityDimensions hoisted; nullable pairwise fields use .nullish() - Web: Connection type + connectionListRowWireToClient preserve peerPairwiseMatchDimensions; DiscoveryProfile type; tests and semvers web 0.1.586 / API 0.1.65

  675. Record Fleet rebuild outputs · 517b8a0

    Capture the Fleet-generated package index and release-notes refresh after deploying web 0.1.583 with backend 0.1.64.

  676. Align generated i18n and release notes · fbc8c21

    Keep translation exports and release-note metadata aligned after the deploy-version refresh.

  677. Keep the generated release-notes bundle aligned with the backend version that will be deployed through Fleet. · d949464

  678. Bump deploy version · faee8a5

    Mark the backend health-check hardening for a distinct Fleet rebuild and build-info verification.

  679. Harden change stream health checks · e111b1c

    Surface profile change-stream down state in health checks and stabilize route tests around peer resolution and RBAC dependencies.

  680. Preserve simplified scope copy · 24552f0

    Keep the direct session-scope labels in generated locale bundles after the universe translation refresh.

  681. Add missing discovery universe translations · 05d3518

  682. Simplify match scope choices · 5afec90

    Collapse the session scope gate into direct intent choices so people can pick what they want to find without parsing matching mechanics.

  683. Checkpoint cross-module updates and i18n tooling · 6c151fc

    Bundle current application, backend, and rules updates into one checkpoint commit, including new web/backend translation CSV round-trip tooling while excluding tenant environment files.

  684. Add adaptive fps fallback · 8b1fe64

    Add an FPS meter, low-power layout, and admin slider so the Universe view trims heavy effects or falls back to 2D when performance drops below the configured thresholds. Serialize the new control in the scene prototype JSON bundle and refresh the release notes.

  685. Stabilize universe peer card taps and gate match percent debug UI · 8570d8c

    Ensure peer cards stay open on click/tap across mobile and desktop by distinguishing hover vs click interactions, and hide numeric match percentage rows unless explicitly enabled from the Scene Prototype debug dock.

  686. Reconciliation row — correct plan vs rules commit order · 7eb0f96

  687. Reconciliation row — include 77b91aed plan footnote · 67cf1c3

  688. Reconciliation row — cite rules commit SHAs · 77b91ae

  689. Pipeline + app AGENT_BEHAVIOUR — Continue, reconciliation, OOP pointer · f457c61

  690. Reconciliation 2026-04-29 — stage 0.1.582 + agent-contract row · 57527cb

  691. Landing footer → dedicated legal routes + public pages E2E (0.1.581) · 01c16da

  692. Canonical cookie policy at /cookie with /cookies redirect (0.1.580) · bce0bcc

  693. Public legal pages use landing document scroll + doc routing (0.1.579) · 93d42ab

  694. MASTER reconciliation 2026-04-30 — chat-onion SSOT + §8 §100 · 1ba8eae

  695. Chat-onion atomics 127/34 + SSOT paragraphs · e50fac0

  696. Stage table web 0.1.578 post-rebuild curl · 83c5336

  697. MASTER reconciliation — universe radial 34cbc77d + §8 0.1.578 · 27cad28

  698. Web 0.1.578 universe match-first radial (34cbc77d) · 651eb95

  699. Root cause: API connectionRing could contradict displayed match% and pinned peers on ring 4. · 34cbc77

    - connectionRingForPeerLayout: prefer getDiscoveryMatchScore → bands (same as backend) - Vitest: stale ring 4 + 60% vs 50% radial ordering - UNIVERSE_ARCHITECTURE §4 alignment

  700. MASTER reconciliation — integration icebreaker suite 251f8fc2 · 0741cfa

  701. Run icebreaker two-peer with integration suite (no opt-in env gate) · 251f8fc

    - Remove E2E_ICEBREAKER_TWO_PEER_TRANSCRIPT skip; extend test:e2e:integration + test:e2e:all - Add run_e2e_registration_preserve_stack.py --integration (merge-env + npm integration) - Docs: README, chat-transport, playwright.config comments, .env.example

  702. Reconciliation post-af73f0af — stage 0.1.577 + §2 atomics 127/34 · 70e2af9

  703. Stage web 0.1.577 post messages/index wire-mapping tests deploy · dc17191

  704. Guard messages/index GET/POST wire→ChatMessage mapping (0.1.577) · af73f0a

  705. Stage web 0.1.576 post integration icebreaker E2E deploy · d6f6df3

  706. Icebreaker two-peer transcript E2E as integration project (0.1.576) · 7e5da8f

  707. E2E_PEER_REGISTRATION_USER_EMAIL for two-peer icebreaker E2E (ifeoma-tc) · a281b00

  708. Reconciliation row close de2fdaba + document history · a8d36b3

  709. Allow MASTER web-client plan files without git add -f · de2fdab

  710. Reconciliation post-4befdffa + symlink verify + gitignore Step 4 note · ef37ef6

  711. Symlink hyphen MASTER plan path to canonical underscore file · 6e69f14

  712. Reconciliation post-51afe2e6 + Step 4 symlink note · 4befdff

  713. Note bd9aed1c chat E2E + transport docs (Plans/KB §8) · 9143aad

  714. Reconciliation post-bd9aed1c — docs-only, stage parity unchanged · 51afe2e

  715. Icebreaker transcript polling note, onion verify stamp, E2E env hints · bd9aed1

  716. Reconciliation 2026-04-28 post-37e6ef59 — stage evidence + §1 checklist · 73415c6

  717. AGENTS stage backend 0.1.61, release-notes bundle, plan reconciliation row label · 37e6ef5

  718. Reconcile backend 0.1.61 stage deploy + §8 backend parity row · cacff48

  719. Parse chat media POST with multipart parts() not body.file (0.1.61) · 919165f

    Root cause: @fastify/multipart does not set request.body.file unless attachFieldsToBody. Reading undefined.file threw → 500 Internal server error on POST /api/chat/:id/media. Use request.parts() + validateChatMediaUpload; map FST_REQ_FILE_TOO_LARGE + validation errors.

  720. Close §8 stage parity post-deploy 0.1.575 · 9878292

  721. Stage web 0.1.575 mutual consent deploy evidence · 55c3863

  722. MASTER reconciliation repo 0.1.575 vs stage 0.1.574 + mutual consent gap row · 586bd95

  723. Mutual reveal consent copy + chats consent dismiss URL race (0.1.575) · 8ae0f4f

  724. AGENTS 0.1.574 + chat onion atomics 125/33; test chats inbox two-peer display-name scenario · a35367a

  725. MASTER reconciliation 0.1.574 atomics 125/33 + inbox display-name gap row · d9afd5c

  726. Chats inbox used legacy name only; peers with split first/last in Mongo showed as Member. · 7c4e6cf

    Align transform + discovery adapter + inbound notification map with backend name composition. Dedupe prefers named row when activity/% tie.

  727. AGENTS stage 0.1.573 + chat-onion atomics 121/32 · 50cc289

  728. MASTER reconciliation 0.1.573 wire map, §2 atomics 121/32 · 7c2b432

  729. Map Fastify chat message rows to domain ChatMessage (0.1.573) · d722133

    GET / POST responses use messageType without domain type/content; MessageBubble returned null. Normalize via mapApiRowsToChatMessages and sendMessage wire map.

  730. MASTER — stage 0.1.572 parity post-deploy (4410466a) · c010546

  731. Icebreaker transcript-well test id + two-peer E2E (0.1.572) · 4410466

  732. MASTER reconciliation — stage 0.1.571, icebreaker 0.1.572 WIP gap · d8e1dab

  733. MASTER Step 1 reconciliation — chat-transport §4.2, journey spot-check · ee304e7

  734. §4.2 chats inbox Open thread peer resolution (18b17849) · 19e37cc

  735. Canonical stage stack web 0.1.571 — chats inbox peer key · 15c4598

  736. §8 stage parity Done — curl 0.1.571 · 245f957

  737. MASTER reconciliation 2026-04-28 — chats inbox peer key, §8 0.1.571 deploy gap · 1ac170d

  738. Chats inbox Open thread uses row peerAuthUid (0.1.571) · 18b1784

    - resolveChatsInboxOpenThreadPeerAuthUid: prefer ConversationMatchCard peerRowKey over re-resolving match.id - Atomic tests document stale discovery map vs connection peer divergence

  739. Profile settings snapshot hydrate + match-profile copy (0.1.570) · 78783af

    - Add settingsSnapshotId to merged GET profile+prefs; hydrate form only when snapshot changes so matchingProfile/email churn does not reset identity gates (Save stayed disabled). - i18n: match profile terminology across base locales; analytics/maturity English fallbacks. - Atomic: profileSettingsAdapter snapshot id test.

  740. Reconciliation 2026-04-28 — stage 0.1.567 vs repo 0.1.570, §8 deploy parity row · a8380a9

  741. MASTER §8 — backlog pointers §2–§6 · 73e55dd

  742. Canonical stage stack web 0.1.568 · fe70684

  743. Todos §6 FIXME inventory + chat onion #3/#4 rows · d7edca2

  744. Icebreaker shell test id + onboarding lead hooks (0.1.568) · de9f0e4

  745. §8 AGENTS narrative dedupe Done (8ede7cdd) · 21c693c

  746. Consolidate 0.1.523–0.1.531 archaeology vs 0.1.537 rows · 8ede7cd

  747. Reconcile post-ac647b34 — phaseMatchLabel, discoveryLabel drift row · 88290e6

  748. Chat-onion plan — atomic slice 118 tests / 31 files (2026-04-29) · 1b7d8bd

  749. §5 ChatIcebreakerShell backlog row Open→Done (ec936c92) · ac647b3

  750. Post–567 reconciliation — §5 ChatIcebreaker Done, §2 chat atomics 118/31 · 782f7c1

  751. Static source assertion guards flex column wrapper for ChatMessagesArea virtual list. · ec936c9

    AGENTS + release-notes for web 0.1.567.

  752. Reconciliation 2026-04-29 — §5 QuestionPhaseBase Done, ChatIcebreakerShell Open, icebreaker gap · 9218841

  753. HAR + API show icebreaker rows returned; scroll container had zero height because the transcript well was not a flex parent so ChatMessagesArea flex-1 did not resolve. · d3f7cde

    HAR + API show icebreaker rows returned; scroll container had zero height because the transcript well was not a flex parent so ChatMessagesArea flex-1 did not resolve. AGENTS + release-notes for web 0.1.566.

  754. QuestionPhaseBase ambient slot source invariant (0.1.565) · 645df3d

    Vitest strips TS comments and asserts BRAND_ORB_AMBIENT_IN_APP_BASE_CLASSNAME does not appear in executable source; journey (pages) main owns the base wash. AGENTS: canonical stage table + 0.1.565 evidence row. release-notes: regenerate for web 0.1.565.

  755. Reconciliation 2026-04-29 — reopen 0.1.564 tests criterion for QuestionPhaseBase ambient · 2822eab

  756. Remove duplicate ambient base behind reflection/connection cards (0.1.564) · 2d3cc9e

    QuestionPhaseBase stacked BRAND_ORB_AMBIENT_IN_APP_BASE_CLASSNAME again inside the rounded AnimatePresence slot while journey (pages) main already applies that base — doubling the near-black wash behind semi-transparent glass QuestionCard/RatingCard surfaces. Paint BRAND_ORB_AMBIENT_IN_APP_LAYERS only via getBrandOrbAmbientStackedLayerStyle.

  757. Chat-transport §4.2 icebreaker row + backend 0.1.60 semver + web 0.1.563 · 22620f8

    - chat-transport: POST /api/connections/icebreaker/submit-step matrix row (IcebreakerConnectionMode). - Align app-source/10_backend/package.json with stage build-info backendVersion. - chat-onion-refactor-plan + MASTER + AGENTS + todos mirror; release-notes bundle.

  758. AGENTS + MASTER stage 0.1.562 — publicPages overlay + legal routes evidence · 14a193a

  759. Merge publicPages overlay in server bundle loader (0.1.562) · 5a91c28

    - Load overlays/<locale>/publicPages.json and deep-merge into publicPages (MISSING_MESSAGE on stage). - Extract deepMergeMessageNamespace; parity tests require publicPages.json per locale; collectStringLeafPaths walks section arrays. - Docs: CONTRACT, overlays README, tests README.

  760. Public legal pages in repo + robots disallow you/onboarding (0.1.561) · 7ed882a

    - Add locale About/Terms/Privacy/Cookies routes via PublicMarketingArticle and publicPages overlays (all base locales). - Add onboarding draft storage helpers + atomics; marketing route/path atomics; admin redirect atomic. - Extend robots.txt disallow list with locale-prefixed /you/ and /onboarding/ (authenticated shells). - Refresh release-notes bundle for web 0.1.561.

  761. Onboarding photo lead preview + dialog a11y (0.1.560) · bd4b35b

  762. Skip-analytics intro Done + ship reconciliation 0.1.559 · 528e272

  763. Skip analytics intro bucket + SSOT mapper (0.1.559) · 75c072d

  764. Step 1 reconciliation 2026-04-29 + skip-analytics SSOT gap · 7b74f27

  765. V0.1.558 ROUTES marketing build fix + gap row · 65535b8

  766. ROUTES marketing paths + document-scroll segments (0.1.558) · 0f315dd

  767. History line v0.1.557 compatibility band i18n · 20005a4

  768. I18n universe match-layout bands (0.1.557) · 509e04f

  769. Transparent journey LoadingScreen overlay (no black flash) (0.1.544) · 5513d9c

    Route shells already use (pages) main gradient; stacking BRAND_ORB ambient base on LoadingScreen caused a near-black slab during hub/reflection/connection transitions. Spinner + message only with bg-transparent.

  770. Instrumentation 0.1.543 Done + stage curl evidence · 0f90f90

  771. Split instrumentation.node for Edge Turbopack (0.1.543) · f188392

    Node-only uncaughtException capture lives in instrumentation.node.ts; instrumentation.ts dynamic-imports under NEXT_RUNTIME=nodejs only.

  772. §5 explainer Done + 0.1.543 instrumentation Open + reconciliation (night) · 69ff1f7

  773. §5 ship verification 854a74fe + stage web 0.1.542 curl evidence · 07ff92e

  774. Journey explainer ROUTES parity + legacy hyphen redirect (0.1.542) · 854a74f

    - ROUTES.JOURNEY_HOW_IT_WORKS uses journeyAppPath(explainer); legacy phase=how-it-works → explainer - OpenAPI journeyWelcomeCompleted description: phase=journey-intro - KB journey-path-phase + doc/table parity; i18n explainer grid; release-notes bundle

  775. Step 1 reconciliation — reopen §5 explainer row (routes HEAD ≠ working tree) · f6f60ca

  776. JourneyRoutePhase SSOT, track atomic/lib Vitest, 0.1.540 · f887dc2

    - Root .gitignore: negate app-source/20_web-client/tests/atomic/lib/** for CI - journeyRoutePhase.ts + journeyRoutePhaseConstants.test.ts - Stage evidence: AGENTS + Fleet KB + MASTER plan (curl 0.1.540)

  777. Audit 2026-04-29 + §5 vocabulary Done (ADR) + §8 AGENTS dedupe row · ec9a49c

  778. ADR Explore shell vs Match vocabulary + KB cross-link · 16a311d

    Accepted decision: product Match/`/match` vs ExploreShell* gate identifiers; optional symbol rename deferred.

  779. docs(plan): Explore shell Done + reconciliation 2026-04-29; Step 2 mitigation. · b0e7213

  780. Explore shell nav gates + profile gate stamps (0.1.537) · 984b519

    useAppShellNavGates + evaluateExploreShellMatchSurfaceReadiness (solo signal parity with viewerMatchingSignalReady); deriveExploreShellActiveGate; AppShellNavGateOverlay / ExploreShellGateModalLayer; AppNav + ChatsPageClient intercepts; profileGateStamps for stable React Query gate deps; backend DISCOVERY doc cross-link; Vitest atomics.

  781. docs(plan): §5 profile photo Done + reconciliation; §2 stage line. · 9463d6c

  782. Profile photo above Profile information (0.1.536) · cbebe6e

    Settings + Discovery UserProfileMenu: ProfilePhotoEditorCore before ProfileInformationSection; modal header text-only. Atomic tests + PROFILE_SURFACES; release-notes bundle refresh.

  783. Step 1 reconciliation 2026-04-28 — stage 0.1.535, doc-vs-git reopen · 26186d4

  784. PhaseMatch i18n + skip navigation DRY (0.1.535) · ebc67f3

    Rename journey.matchmakingPath discovery* keys to phaseMatch* across locales. Add nextJourneyStepForSkipNavigation for QuestionPhaseBase skip/early-continue paths.

  785. §8 backlog + journey KB phaseMatch keys (0.1.535 prep) · 90d9081

  786. HowItWorks five-card vs hub four-phase (KB + JSDoc) · 0bbc493

    Web 0.1.534 — MASTER §5 HowItWorks row, §2 parity, Step 2 gap mitigated; AGENTS semver.

  787. Step 1 reconciliation + Step 2 journey gaps (2026-04-28) · 5900b52

  788. Document discoveryLabel vs match phase id; §5 backlog shipped rows; refresh stage table. · 819e2f3

  789. Remove unused JourneyConstellation and JourneyCircle · 1c66728

    No app or feature imports; hub uses JourneyMatchmakingPath + resolveJourneyPathPhase. Update journeyPhases module doc, orb-brand/JourneyConstellation label helper JSDoc, journey-constellation-brand notes, primitives README, and feature/responsive docs rows.

  790. Add §5 journey hub SSOT vs landing pentagon + backlog · 8d1babf

  791. Stage curl evidence web 0.1.525 · 7c74d2e

  792. AGENTS + MASTER + todos — shell pathname guards 0.1.525 · 9cd55d7

    Evidence: tenant-rebuild-web-client + curl / curl parity.

  793. Shell pathname guards for Match/Chat (routes.ts) · 8925a49

    Add isMatchShellPathname / isChatsShellPathname using pathnameWithoutLeadingLocale and exact or /segment/ prefix checks — avoids naive substring matching. Wire AppPagesLayoutClient and AppNav; add Vitest routesShellPathname. Bump web to 0.1.525; refresh release-notes bundle.

  794. AGENTS + MASTER + todos — AppPagesLayoutClient route DRY 0.1.524 · 4a49cca

    Evidence: curl /api/health 0.1.524; tenant-live-health public_edge.ok.

  795. DRY AppPagesLayoutClient match/chats route flags · 398ec70

    Single onMatchRoute / onChatsRoute / pushPromptEligibleSurface (onMatchRoute || onChatsRoute). Remove discoveryFullBleed duplicate pathname.includes("/match"). Bump web to 0.1.524; refresh release-notes bundle.

  796. Fix hooks.ts JSDoc line wrap for push prompt mount · faf3f97

  797. AGENTS + MASTER + todos — push prompt shell mount 0.1.523 · a77766a

    Stage evidence: curl /api/health 0.1.523; tenant-live-health public_edge.ok.

  798. Shell-mount push browser entry prompt on Match/Chat · 007a45d

    Mount PushNotificationsBrowserEntryPrompt once from AppPagesLayoutClient with eligibleSurface for /match and /chats paths. Remove duplicate mounts from DiscoveryPageClient and ChatsPageClient so Match ↔ Chat navigation does not reset scheduling or show a second modal. Bump web version to 0.1.523; refresh release-notes bundle.

  799. Stage web 0.1.522 curl evidence · 6d1d001

  800. AGENTS + todos queue — Web Push UX 0.1.522 · 87a551e

  801. Match/Chat push consent modal; drop onboarding auto-request (0.1.522) · eda65a7

    - Remove enablePushNotifications from welcome onboarding submit (root cause of immediate browser prompt) - PushNotificationsBrowserEntryPrompt: BaseModal + bullets for Match + Chat; sessionStorage dismissed/enabled - Mount on DiscoveryPageClient + ChatsPageClient (inbox + embedded thread) - i18n profile.settings.notifications.browserEntryPrompt* (en/de/es/fr/ar); profileUiMessageKeys - device README + hooks doc + PROFILE_SURFACES navigation note

  802. Stage web 0.1.521 curl + public_edge evidence · 6bbb018

  803. Todos Chat onion #3 finding; AGENTS + MASTER stage 0.1.521 · 89d15c1

  804. - Root cause: raw | in 502|503|504 broke GFM columns (same class as §4.2 Web Push) - Extend Pipe-table hygiene process note; Evidence + chat-onion document history - Regenerate re… · 1df95e5

    - Root cause: raw | in 502|503|504 broke GFM columns (same class as §4.2 Web Push) - Extend Pipe-table hygiene process note; Evidence + chat-onion document history - Regenerate release-notes bundle

  805. Mandatory onboarding helper notes reflection URL contract · 2ab080d

  806. AGENTS stage 0.1.520 evidence; MASTER §2 parity; todos queue · a026dbd

  807. MASTER chat phases parity 0.1.519; onboarding E2E contract; todos queue · 5fddc0b

  808. Document JOURNEY_YOU vs reflection; E2E asserts section=reflection · aa0125c

    - ROUTES.JOURNEY_YOU JSDoc: legacy naming; post-welcome onboarding uses JOURNEY_REFLECTION - ensureMandatoryOnboardingCompleteForShellE2e: URL must include section=reflection after submit - Semver 0.1.520; regenerate release-notes bundle - chat-onion-refactor-plan: Code layout row 2026-04-29 sweep stamp

  809. Align public-edge evidence row with web 0.1.519 · 9f430c2

  810. Canonical stage web curl 0.1.519 · 379635c

  811. Verify stage web 0.1.519 onboarding navigation deploy · 9e39962

  812. Refresh release-notes bundle after Fleet rebuild · 906be92

  813. Route post-onboarding save to Journey reflection · a727d4f

    Welcome onboarding used ROUTES.JOURNEY_YOU (/you) after submit while the CTA says "Continue to reflection". Replace with ROUTES.JOURNEY_REFLECTION (phase=progress&section=reflection). Document in PROFILE_SURFACES; bump 0.1.519 and regenerate release-notes bundle.

  814. Todos queue mirror + MASTER — §4.2 finding and Chat onion #3 note · 9d6d188

    Sync backlog with markdown repair; optional wording in historical mirror rows replaced with working-loop framing where §5.2 E2E was referenced.

  815. Fix §4.2 Web Push pipe-table row and transport index hygiene · ff5b99d

    The Connection-request Web Push row contained an unescaped | inside a markdown table cell, breaking column alignment. Replace with explicit Fastify paths (request-conversation, request-chat). Document pipe-table hygiene in the process section; extend chat-onion Evidence row with wc -l / atomics re-verify.

  816. Normalize profile-photo mission curl rows; document release-notes bundle fix, Fleet deploy evidence, and MASTER §2 stage parity. · 0dc2f15

    Normalize profile-photo mission curl rows; document release-notes bundle fix, Fleet deploy evidence, and MASTER §2 stage parity. Cursor queue mirror updated.

  817. Regenerate release-notes bundle and bump 0.1.518 · 5559256

    Committed bundle had stale webClientVersion (0.1.499) vs package.json; verify:release-notes failed and /release-notes lagged /api/health on stage. Fleet rebuild refreshed generated JSON from git log; prebuild verify passes.

  818. Align birth-year mission checklist with 0.1.517 ship evidence · 5e80171

  819. AGENTS + Fleet KB — stage web 0.1.517 BirthYearTextInput evidence · ad18cf6

  820. BirthYearTextInput DRY + MASTER §4 + PROFILE_SURFACES · 0719d85

    Shared calendar birth-year field for onboarding, ProfileEditForm, ProfileInformationSection. Web 0.1.517; chat phase metrics unchanged (plan §2).

  821. AGENTS + Fleet KB — stage web 0.1.516 birth year input evidence · d2852dd

  822. Birth year text input — no leading-zero stickiness · 27848b1

    Use type=text + birthYearTextInputDisplayValue; number inputs left a visible leading 0 (e.g. 01984) while parse already normalized. Web 0.1.516.

  823. MASTER web-client follow-ups plan + backlog + Fleet KB evidence (stage 0.1.515) · f8e3b83

    - Add tracked MASTER plan (git add -f; .cursor/ default-ignore). - todos: chat onion wording neutral; profile mission + KB README gap closed. - app-fleet-cli-commands: Evidence row web 0.1.515. - AGENTS: canonical stack + Web 0.1.515 narrative (verified curl).

  824. Rename onboarding photo gate to shouldShowOnboardingProfilePhotoInLead · 9181d69

    Accurate name for lead-slot gating (not a separate preview row). Web 0.1.515.

  825. AGENTS + todos — stage web 0.1.514 onboarding lead circle evidence · 7845727

  826. Show onboarding profile photo in lead circle · dcb77f6

    - Render PeerProfilePictureOrOrb in the primary circle when photo is ready; camera placeholder only when not ready. - Upload row uses replace vs upload i18n; data-testid onboarding-profile-photo-lead. - PROFILE_SURFACES + onboardingProfilePhotoPreview module docs; web 0.1.514. - todos.md: mission aligned with lead slot + pending stage proof.

  827. AGENTS 0.1.513 stage evidence and todos onboarding missions · a63795d

    - Canonical stage table + Web 0.1.513 narrative (curl + tenant-live-health). - Profile photo mission: gate helper + test id; §6 TODO inventory row.

  828. Gate onboarding photo preview on profileId + test id · d299c2e

    - Add shouldShowOnboardingProfilePhotoPreviewRow (lib/profile) and tests. - Onboarding: data-testid onboarding-profile-photo-preview for E2E. - PROFILE_SURFACES.md: document replace-row preconditions. - Version 0.1.513.

  829. Stage 0.1.512 evidence, todos, chat onion wc-l anchors, KB plan index · 4a59a9c

    - AGENTS.md canonical stage table + Web 0.1.512 narrative (deploy + curl + tenant-live-health). - todos.md: profile photo + birth year missions; chat onion table note. - chat-onion-refactor-plan.md: refresh wc -l and atomic test counts (2026-04-28). - .cursor/kb/README.md: link to web-client deeper-followups MASTER plan.

  830. Profile picture initial loading state and birth year input policy · 70f732f

    - Export profilePictureObjectUrlInitialStatus and use lazy status in useProfilePictureObjectUrl so first paint matches the fetch the effect starts (fixes empty onboarding preview). - PeerProfilePictureOrOrb: show error shell whenever status is error. - Birth year: controlled input + parse strips leading zeros; coerce stored 0 to null. - Bump package.json to 0.1.512.

  831. Refresh ifeoma-tc PACKAGE_INDEX metadata · e7b4fa7

    Regenerated table-of-contents timestamp and key ordering from Fleet merge-env.

  832. Chat transport notes, canonical stage table, and authenticated-chat CI · d6352d1

    Align agent rules with chat refactor documentation; extend main-features checklist; refresh MATCHING_PRIVACY evidence; record stage semver in AGENTS.md; add web-client authenticated chat E2E workflow.

  833. Prefs hydration, stale async guard, and structured logging · 5931218

    Gate preference saves until successful load; add stale async generation helper; log runtime-config probes, token decode, sign-out subscribers, and positioning errors; strict quadrant validation; admin question upload row error metadata.

  834. Chat transport identity, polling staleness, and messaging UX · 0137cb8

    Harden transcript polling vs stale responses; unify thread identity checks; surface send failures consistently; refactor ChatSystem modes and session app; expand atomic tests for domain errors and cache sync helpers.

  835. Profile query merges, settings resilience, rating submit flow · 4920f67

    Stable self-profile caches after uploads; safer settings/export/deletion prefs; coordinate connection rating mutations with refreshed query keys.

  836. Connection stage query keys and cache invalidation · 23095bd

    Normalize stage query keys; extend ConnectionManager flows; align invalidation tests with multi-profile cache clears.

  837. Journey reflection question bank failures and typed selection · bc99bd3

    Throw on invalid balanced selection and unsupported extraction rules; map load errors; align Reflection mode and hub/welcome UX with tighter journey hooks.

  838. Discovery storage hardening and operator scope UX · 3fdc8df

    Persist match intent and universe guide with typed errors; tighten list/universe hooks and query keys; extend tests for storage modules.

  839. Strict auth uid resolution and invalid-session shell UX · 7a1f6b5

    Typed auth errors, AuthProvider handling, shell copy for broken sessions, onboarding/profile guards, and biometric sign-out bridge; align authUid tests.

  840. I18n for invalid session copy and universe guide persist · bec617a

    Expose app shell strings for unusable session UX; add discovery universe guide persistence failure message across base locales.

  841. Semver, OpenAPI-aligned codegen, and release-notes refresh · 67b896b

    Bump web-client version; regenerate API types/clients/zod from contracts; refresh release-notes data; add E2E health version gate helper script.

  842. Add behavior and tests for list conversations and two-peer private text paths; align generated zod with contracts; bump package version. · 4710cfc

  843. Extend ConversationSummary in OpenAPI and regen codegen · f5c00fe

    Sync OpenAPI YAML with generated TS/zod artefacts for typed client and BFF payloads.

  844. Backlog #4 npm script + fix chat-onion H1 corruption · 090b23c

    - package.json: test:e2e:ui-authenticated:chat-icebreaker-in-thread + semver 0.1.439 - chat-onion mandatory #4/#5 + Outstanding + Remaining short; document history row - tests/README: npm shorthand; AGENTS repo parity 0.1.439

  845. Single process § (#3), fold detail into index para · f2849e3

    - Remove duplicate H2; keep operator/E2E + stronger API hub / RQ key hooks in one block

  846. TypingStatusResponse in lib/types/chat (import audit) · 1596ee6

    - lib/api/types: TypingIndicatorResponse from @/lib/types/chat — no lib→features/chat/types coupling - features/chat/types re-exports TypingStatusResponse from lib SSOT; bump 0.1.438 - AGENTS repo parity + evidence row

  847. Repo web 0.1.437 vs stage 0.1.435 + recent evidence · feb49da

    - Canonical table: repo parity 0.1.437; live web 0.1.435 until tenant-rebuild-web-client - Narrative row: send toasts, resolveMatchPeerKey→lib, icebreaker E2E green

  848. Relocate resolveMatchPeerKey to lib/utils · 31d173d

    - SSOT in lib/utils for peer key (authUid vs Match.id) - chatGrouping/chatSorting/chatsInboxPeerDedupe import lib; chat path re-exports - Vitest tests/atomic/utils/resolveMatchPeerKey.test.ts; bump 0.1.437

  849. Send-failures row in chat-transport; README for icebreaker E2E · 37f26cc

    - chat-transport HTTP table: outbound send toasts vs resolveMessagingSendToastPresentation - tests/README: optional chat-icebreaker-in-thread spec, env + example command

  850. Typed send-failure toasts for messaging API · fb3c8c3

    - resolveMessagingSendToastPresentation: 429, CHAT_SESSION_PERSISTENCE 503, upstream 502/503/504, fetch-style network - i18n: chat.errors.toastSendRecoverableTitle + sendRateLimited/upstream/persistence/network - Atomics: resolveMessagingSendToastPresentation.test.ts; chat slice 109 tests - chat-onion-refactor-plan: mandatory #1 partial, vitest counts

  851. Move chat-sync under features/chat, thin pages, internal E2E seed · 0649634

    - Relocate messaging sync to features/chat/sync; browserCapabilities to lib/browser - Barrel: explicit hooks exports; ESLint restricts sync imports outside feature - Chats/Discovery/Connections page clients live under feature pages - Backend: POST .../e2e/seed-conversation-request provisions initiator via getOrCreateProfile; optional advanceToConversationActive - Docs, AGENTS semver, release-notes data, main-features index; chat-onion plan Phase 3.3 baseline ~1170 LOC Excludes tenant PACKAGE_INDEX.yaml and .env.st…

  852. Never classify scope optional/deferred without user approval · 05975d5

  853. Optional onion backlog table; semver 0.1.425 · 91d000b

  854. Regenerate release-notes bundle for 0.1.425 · a4d2dab

  855. Onion optional slices — peer scope strip + transport docs · c14cd9e

    - Extract ChatContainerPeerDataScopeNotice from ChatContainer (3.3, no UX change). - Clarify Phase 1.2 barrel: use resolveChatThreadTransport for combined gates. - chat-transport: supplementary 4.2 call-site matrix; defer 6.6 optimistic-send note.

  856. Queue mirror — continuation sweep (/en/you, backend logs) · f02d489

  857. Queue mirror — 2026-04-28 chat-onion + stage sweep · db9735f

  858. Canonical core/ paths + useChatMode line anchors · c83de84

  859. Evidence row + document history (2026-04-30 coherence) · c8846b3

    - Plan summary Evidence: 2026-04-30 archive pass without duplicate SHAs in table - Document history: merge 0ed08b72 narrative + follow-up clarification - todos: mirror sweep + PACKAGE_INDEX checkout note

  860. Reconcile Code verification + obsolete archive (L29–§details) · 0ed08b7

    - Clarify pick* + useChatThreadController wiring; Vitest bundle date - Still-optional rows + Phase 6 note (no phantom Partial backlog) - Obsolete snapshot rows 3–6: superseded drafts (ChatSystemActiveThreadView, atomic 88/22 @ ~0.1.424, 6.6 + pick*) - Archive preamble + § After closure / anchor line refs (useChatMode 189–214, 2026-04-30)

  861. Phase 5 atomic verification row ~0.1.424 + todos sweep row · 9020a87

  862. Stage snapshot Web 0.1.424 + API 0.1.56; evidence paragraph (ifeoma-tc) · e28ac42

  863. Release-notes from tenant-rebuild-app; AGENTS + plan + todos evidence 0.1.424 / 0.1.56 · 146046e

  864. Close 2026-04-28 connection workflow + chat onion mirror · ab8e3bc

  865. Repo parity Web 0.1.424 + API 0.1.56; stage redeploy gate · 7d98a96

  866. Onion ADR/checklist/plan coherence (pick*, ActiveThreadView, wc -l) · 7fedc37

  867. Pick shared ChatSessionApplication per thread + ActiveThreadView · 71e1149

    - pickChatSessionApplicationForThread: dedupe ChatSessionApplication for parent/embedded chats - ChatSystemActiveThreadView: Phase 3.3 slice for happy-path container surface - Wire useChatThreadController / handlers / polling; ChatSessionApplication tests - Design-system chat glass/inset surfaces exports - Bump web-client to 0.1.424

  868. Incoming connection workflow badge + unified cache invalidation · e0358c4

    - Incoming requests: conversation_requested plus peer-initiated chat_requested (incomingConnectionWorkflowPending helper + tests) - Discovery requestConversation: invalidateConnectionCaches after success (replaces narrow incomingRequests invalidation only) - AppNav docstring aligned with badge semantics

  869. Web push for connection workflow requests · b668696

    - ConnectionWorkflowPushDispatcher: conversation + private chat request notifications (preference gate + i18n; fire-and-forget with structured warn on failure) - Wire dispatch after successful request mutations in connections routes - Vitest preference gating contract - Bump backend to 0.1.56

  870. Mirror 2026-04-29 backlog vs open working tree · 97df2ee

    - References docs commit fc27ac35 pushed; stage web/api semver evidence - Lists Cursor todos A-E for topical commits + E2E + env noise cleanup

  871. - chat-transport: pair session blob; no client overwrite of currentTurn when messages empty - chat-onion: Evidence line counts, ICEBREAKER refs to CHAT_* tokens, 2026-04-29 histor… · fc27ac3

    - chat-transport: pair session blob; no client overwrite of currentTurn when messages empty - chat-onion: Evidence line counts, ICEBREAKER refs to CHAT_* tokens, 2026-04-29 history - AGENTS canonical stage semver (web/backend) + fleet rebuild evidence - useChatModule docblock refs chat-transport; release-notes bundle refreshed by Fleet

  872. Fix onion plan stale-check line refs (describe Done table) · dd91aad

  873. PLAN_STATUS=closed HTML marker in onion plan (clarify archived Partial) · 8abc9a0

  874. 4.2 BFF cross-refs in hooks and api (messages JSDoc-safe) · 5f13c63

    - Point useChatMode, useMessagePolling, useTypingStatus, downloadServerChatTranscriptExport, api barrel to chat-transport BFF index; fix messages block comment (no */ inside). - Web 0.1.405; plan history + AGENTS.

  875. Staleness callout + messages module BFF cross-ref · 9196f74

    - Plan: blockquote so Partial tables are not mistaken for open work. - messages/index.ts: point to chat-transport BFF index (4.2).

  876. Icebreaker route module + BFF index (4.2); plan obsolete snapshot · 6a82711

    - Add ChatSystemIcebreakerRoute for icebreaker Container+shell (3.3). - Document features/chat → BFF paths in chat-transport.md; archive pre-closure Partial table in plan. - Web 0.1.404; AGENTS + release notes.

  877. Extract ChatSystemErrorShells for early-return gates (3.3 slice) · 515744a

    - Add ChatSystemErrorShell: DRY profile/messages/session error frames (same UX). - Shrink ChatSystem.tsx (~1374 lines); plan doc notes stale Partial snapshot + 3.3 progress. - Web 0.1.403; release notes bundle; AGENTS stage table.

  878. Close chat onion plan, typing 409 handling, and E2E match-intent fixes · c93234e

    - Mark chat-onion-refactor-plan as complete; ADR and chat-transport reference updates. - Re-export chat connection transport from @/features/chat/core; consolidate imports. - Map connection-stage 409 for typing polls without noisy error logging; add atomic tests. - Harden match_intent_scope_gate E2E (post-Continue URL) and add route pattern atomics. - Sync AGENTS.md stage evidence for web 0.1.402; refresh release notes bundle and semver. - Discovery shell/layout and i18n touch-ups; E2E helper improvements (app she…

  879. Release-notes bundle after fleet rebuild · b653bff

  880. Regenerate release-notes bundle (web 0.1.388) · 1ffca12

  881. Chat onion plan checklist, stage 0.1.388, transport ADR alignment · 1a4c967

    - chat-onion-refactor-plan: master checklist [x], product flow cleanup, Phase 1 note - AGENTS: canonical stage table + Web 0.1.388 evidence row

  882. Chat onion — icebreaker ChatContainer, press-reveal cache sync, errors · 6ca97e6

    - ChatSystem: wrap icebreaker in ChatContainer; layout transcript-first - useChatMode: optional synchronizeCachesAfterPressReveal (DRY with synchronizeConnectionCachesForThread) - IcebreakerConnectionMode: mapChatApplicationError + logComponentError - ConnectionManager/validation: document invalidate vs thread sync; onboarding md:max-w-56 - Bump version to 0.1.388

  883. AGENTS + fleet KB evidence web 0.1.385 Phase 4.1 · cd76989

  884. AGENTS + release notes for web 0.1.385 (Phase 4.1) · a3b3dc7

  885. Chat application errors and cache-sync log lines (Phase 4.1 partial) · 9f11ae5

    - chatApplicationErrors: thread-identity i18n key map, formatMissingApplicationLogWithThreadIdentity. - synchronizeConnectionCachesForThread: named DRY default log line; explicit override supported. - ChatSystem/ChatView pass thread-identity context when application is null. - chat.application.threadIdentity.* in 5 locales; docs; web 0.1.385. - Fix resolvePeerAuthUid test agreedAt as Date for Connection type.

  886. AGENTS stage row + fleet KB evidence web 0.1.384 shells · faa5ebc

  887. Stage evidence for web 0.1.384 chat shells · 73aefef

  888. AGENTS + release notes for web 0.1.384 (chat shells deploy) · 7cc1102

  889. ChatAnonymousShell and ChatPrivateShell for ChatSystem (Phase 3.2) · 693e2ae

    - Named shells delegate to AnonymousMode / PrivateMode; ChatSystem uses shells barrel. - Docs: chat-onion plan 3.2, chat-transport. Web 0.1.384.

  890. ConnectionStage key in matching-system; fleet KB evidence 0.1.383+API 0.1.53 · 1720c9b

    - matching-system: icebreaker sync points to connectionStageQueryKey. - app-fleet-cli-commands: append evidence row (tenant-rebuild-app, stage parity).

  891. - Fleet full app rebuild aligned stage backendVersion with 10_backend 0.1.53. · 44e72ba

    - Regenerated release-notes.generated.json (fleet). AGENTS.md canonical table + evidence.

  892. Stage evidence for web 0.1.383 connectionStageQueryKey deploy · 4c80d34

  893. Release-notes Activity methodology for same-day commit bursts · bd5ca16

    - Clarify interval spread: window from last day with a commit before current day. - i18n methodology (5 locales), types JSDoc, commit doc, atomic test header. - Regenerate release-notes.generated.json (web 0.1.383).

  894. DRY connectionStageQueryKey for connection stage cache · fcf541b

    - Centralize ["connectionStage", peerAuthUid] in connectionStageQueryKey. - Wire useConnectionStage, invalidateConnectionCaches, useChatMode, ChatView. - Docs: chat-transport.md, chat-onion-refactor-plan.md. Web 0.1.383. AGENTS.md.

  895. Link chat-transport to components/shells · 0c0e8a0

  896. Chat shells ChatIcebreakerShell + ChatTranscriptReadOnlyBanner · ea53cf9

    - Phase 3.2: extract transport UI from ChatSystem; barrel exports in components/shells - Remove unused CHAT_SYSTEM_DEGRADED_BANNER_AUX_TEXT_CLASSNAME import from ChatSystem - Web 0.1.382; plan + AGENTS; stage verified via curl /api/health

  897. SynchronizeConnectionCachesForThread + end-connection cache sync · cfea501

    - Add util DRYing ChatView and ChatSystem post-mutation connection cache refresh - handleEndConnection and handleEndAndReport call it after endConnection (no connection seed) - Vitest; web 0.1.381; AGENTS + chat-onion plan + chat-transport

  898. OpenAPI DTO checklist (0.2); DRY safety discovery invalidation · 43db977

    - Add docs/chat-openapi-dto-checklist.md; mark Phase 0 complete in plan - Extract invalidateDiscoveryAfterPeerSafetyAction; ChatSystem block path uses it - Vitest for util; mock logComponentError in test; web 0.1.380; AGENTS stage evidence

  899. Chat onion core, ChatSessionApplication, ChatView cache sync · 1e18096

    - Add chat/core (ThreadIdentity, resolveChatThreadTransport, icebreakerFlow) - Add ChatSessionApplication + useChatThreadController; wire ChatSystem transport - Route ChatView consent/request flows through synchronizeCachesAfterConnectionMutation - Optional connection seed matches invalidateConnectionCaches; Vitest coverage - Docs: chat-onion-refactor-plan, chat-transport, ADR; AGENTS repo parity 0.1.379 - Bump web-client to 0.1.379

  900. Chats inbox peer key + peerAuthUid enrichment · 1068e58

    - Dedupe key uses resolveMatchPeerKey via chatsInboxMatchPeerKey (aligned with status maps). - Enrich missing Match.peerAuthUid from discovery/connection maps before dedupe. - Version 0.1.377.

  901. Canonical peer auth for connections and icebreaker · 9a1b8fa

    - Export peerWireIdToCanonicalAuthUid; resolve direct connection rows where userA/userB stored a profileId as the peer slot to the profile authUid. - DRY: all connection routes resolve peer via resolveChatPeerOtherUserIdForViewer before services, persist, and icebreaker transcript (fixes wrong-pair writes). - listConnections dedupes by canonical peer after profile mapping. - Tests: viewerPairDedupe canonical merge. Version 0.1.53.

  902. Release-notes + AGENTS/todos — stage web 0.1.376 · API 0.1.52 (icebreaker + dedupe) · a9bbc64

  903. Icebreaker cache merge, transcript UI, wire type · 169ade1

    - Merge mutation connection into connectionStage query before refetch; await refetch + reload messages - icebreaker_transcript ChatMessage mapping, MessageBubble, client export - Show transcript strip during icebreaker; i18n for labels - Docs: matching-system icebreaker source of truth - Bump web to 0.1.376; refresh release-notes bundle

  904. Persist icebreaker steps as chat transcript rows · d9d7be5

    - Append icebreaker_transcript message lines after submit-step + session persist - Pure payload builder + Vitest; server transcript export i18n - Bump backend to 0.1.52

  905. Dedupe inbox rows per peer auth + log invariant breaks · 9e28654

    - Web: collapse duplicate Match rows by canonical peer key in ChatsPageClient; log ChatsInboxDuplicatePeerRowsError via logComponentError when discovery yields multiple cards for one peer. - Backend: dedupe GET list paths (connections + conversations) by viewer-normalized peer with structured rootLogger.error when Mongo returns duplicate pair rows. - Tests: viewerPairDedupe (backend), chatsInboxPeerDedupe (web). - Bump web 0.1.375, backend 0.1.51.

  906. Refresh PACKAGE_INDEX generated_at (Fleet) · c5e17e5

  907. AGENTS + todos — stage web 0.1.374 deploy evidence · 4fd49f2

  908. Refresh release-notes bundle after chat peer commits · 14c5383

  909. Chat transport peer auth + mark-read + analytics · 6f891cc

    - resolvePeerAuthUidForChatTransport + chatConnectionTransportState (DRY with backend) - ChatView/ChatSystem/useMessagePolling/messages: canonical peer keys - Release notes analytics: same-day burst spread after quiet gap - Bump web to 0.1.374; regen release-notes bundle

  910. Resolve chat peer id for profileId and peerProfileId · c9eb1f9

    - Add resolveChatPeerOtherUserIdForViewer (BOLA-safe via connection proof) - Wire chat routes to normalize otherUserId to peer authUid - Vitest: chat-session-null route tests - package.json 0.1.50 (align with deployed API semver)

  911. Private chat photo upload without fetch(data:) — CSP · 221f894

    - Add blobFromDataUrl() to decode data URLs locally (connect-src blocks data:) - PrivateMode: use blob for uploadMedia after camera/file pick - Vitest: tests/atomic/utils/blobFromDataUrl.test.ts - Bump web to 0.1.373; refresh AGENTS.md + todos.md (stage evidence)

  912. Release-notes after stage rebuild; docs stage 0.1.369 evidence · 7f0ee25

    Fleet tenant-rebuild-web-client refreshed git log bundle. AGENTS + todos mirror: live edge matches web 0.1.369, public_edge ok.

  913. Align MessagingHeader safety button with title row · 96f25b3

    - Single flex row + items-center on all breakpoints; drop mobile column stack - Remove self-end on shield row (was bottom-aligning to subtitle) - Web 0.1.369; release-notes bundle; AGENTS semver note

  914. Close 2026-04-28 queue mirror with commit refs · 8375cec

  915. Canonical table + product note for mark-read body; todos open/closed rows. · 0b3aa86

  916. Connection stage contracts, icebreaker wire, mark-read body · f77e1b0

    - markMessagesRead: otherUserId2 JSON for Fastify validateBody on mark-read - ConnectionManager/ChatView: ConnectionStagePayloadContractErrorPanel; wire from API - classifyDiscoveryConnectionStageField; connectionFromApiWire; icebreaker modules - Discovery/orbs/profile: explicit stage badge and orb colors; dateConversion DRY - i18n + release-notes bundle; version 0.1.368 Refs: GET /api/connections/stage payload; list row enrichments from OpenAPI.

  917. Connection list/stage fields and ConnectionStageResponse typing · bd44db9

    OpenAPI: ConnectionStageResponse uses ConnectionConsent refs; stage payload fields for vibe-check and icebreaker; Connection gains list enrichments and anonymous_chat_active. Regenerate zod (contracts, backend, web) and TS client models.

  918. MarkMessagesRead passes otherUserId2 for POST /api/chat/mark-read · dbb1619

    Regresses OpenAPI dual-param footgun: Fastify validates JSON body only. Ignore local *.har capture files at repo root.

  919. Fleet CLI snapshot 0.1.357/0.1.49 + evidence row (cancel/503) · d80ce22

  920. Refresh release-notes bundle; docs(agents): stage 0.1.357/0.1.49 evidence · 3fbf15c

    AGENTS.md: canonical table + row for cancel-request + 503 client recovery (verified on stage).

  921. Record repo 0.1.357/0.1.49 vs stage until rebuilds · c71d9c7

  922. Connection mutation 503 recovery and cancel response parsing · ae63513

    - apiDataConnectionMutation: recover CHAT_SESSION_PERSISTENCE_FAILED for generated client POSTs - nextjsConnectionMutation: same for press-reveal and icebreaker submit (BFF ApiError body) - Fix 503 JSON parser to match flat ChatSessionPersistence503WithConnection - convertConnectionDates: explicit error if connection is missing - Tests for parser, convertConnectionDates, and 503 paths

  923. Cancel-request returns connection snapshot and aligns chat session · 8489a77

    POST /api/connections/cancel-request now mirrors other connection mutations: persistChatSessionAfterConnectionMutation, 503 CHAT_SESSION_PERSISTENCE_FAILED with connection snapshot, and 200 ConnectionMutationResponse body. Add route tests for success and persistence-503 recovery.

  924. Stage web 0.1.354 evidence + release-notes (invalidateConnectionCaches test) · 12af61f

    - AGENTS + Fleet KB snapshot and Evidence for 0.1.354; 0.1.353 note superseded - Regenerated release-notes from fleet rebuild - docs/agent-rules-changelog, todos queue mirror

  925. Lock invalidateConnectionCaches seed contract (0.1.354) · e2df248

    Vitest: setQueryData receives mapped stage view; optional seed skips set. Bump semver for the next image.

  926. Close Chats 0.1.353 queue mirror (evidence + commits) · dfb4f77

  927. App-fleet evidence web 0.1.353 + snapshot table · 83bd711

    Append-only Evidence line (Chats consent); refresh canonical stage snapshot to match AGENTS; changelog row; check_kb_rule_links ok.

  928. Release-notes bundle + AGENTS stage evidence (web 0.1.353) · 2a388ce

    Fleet tenant-rebuild-web-client refreshed the generated release-notes JSON; update canonical stage table and evidence after live health/build-info probes.

  929. Chats consent sync + list loading (0.1.353) · 02da188

    - Seed useConnectionStage cache from connection mutation rows before invalidate - Decouple Chats list full-page block from listConversations; subtitle + spinner fallbacks - Poll connection stage every 2.5s while conversation_requested; keep 8s for conversation_active - Return ConnectionResponse from [redacted] - i18n: chats.page.loadingConversationIndex (all base locales) - Tests: refetch interval + mapConnectionToConnectionStageView

  930. Continued working loop and agent behaviour consolidation · a4730a9

    - Add 'Continued working loop (product application repo)' to application AGENT_BEHAVIOUR.MDC: todos/todos.md sync, evidence-based closure, onion trace, strict refactors, stage ifeoma-tc, browser proof, Fleet/KB, i18n, design system, versioning, security, debug/test policy, finalisation. - Cross-link from app-pipeline AGENT-BEHAVIOUR §0.4, app-source rule, AGENTS.md - Changelog row for 2026-04-28

  931. Refresh PACKAGE_INDEX (fleet table of contents) · 7c102d5

    Regenerated/merged index metadata and layer ordering. Does not include runtime env (see merge-env) or HAR captures.

  932. Strict optional string[] wire + discovery filters · 91439d9

    - Add lib/utils/optionalStringArray (OptionalStringArrayWireError, optionalStringArrayOrEmpty) and atomic tests; replace silent ?? [] for interests, culture selections, shared lists - discoveryProfileAdapter: validate values object; parse core/sharedValues/interests - filterAndSort: parse list fields; min/max match require finite score (no ?? 0) - extractFilterOptions: strict list parsing - resolveConnectionDetailProfile: parse interests, sharedInterests, synergy - useChatListInboundSignals: explicit branch when c…

  933. Strict release-notes Activity line-rate and errors · 8c32cad

    - Add ReleaseNotesLinesPerHourInputError and ReleaseNotesActivityModelParameterError in features/release-notes/errors for typed, code-classified failures. - parseLinesPerHourEquivalentInput: throw on invalid user text (no null returns). - getReleaseNotesActivityAnalytics: optional numeric lineRateOverride; assert finite positive line rate for bundle and override; drop Partial-parameter merge. - ReleaseNotesActivity: committed line rate + draft; charts update only after Apply (form submit) with explicit errors; Res…

  934. Strict API mapping, typed errors, journey map parse · 0e077c2

    - Profile: ProfileMappingError + validate GET/POST/secure wire (no silent ?? coercions); mapProfileJourneyRecord wraps parseJourneyRecordMap into profile errors - Journey: JourneyResponseInvariantError; getQuestions/getConnectionStatements require arrays and matching count; saveAnswer uses parseJourneyRecordMap - lib: remove normalizeJourneyRecordMap; parseJourneyRecordMap + JourneyRecordMapInvariantError - mergeSelfProfileJourneyCache + admin UserProfilesTab use strict parse - Chats/connections/discovery: explici…

  935. Sync release-notes after stage fleet rebuild · 7022c57

  936. Journey gate for match/universe when solo signal absent (0.1.336) · 93460a3

    - Wire viewerMatchingSignalReady from API; CTA to journey on list + universe - i18n discovery.list.viewerSignalGate* (5 locales) - Regenerate release notes

  937. OpenAPI + axios client + api-types for discovery list gate field. · 734dcac

  938. Empty discovery when viewer has no solo matching signal (0.1.48) · 8a5a594

    - Add viewerDiscoveryGate (computeProfileMatchingSignalDimensions + all-zero check) - getDiscoveryProfiles: early return viewerMatchingSignalReady false - getDiscoveryProfile: 403 DISCOVERY_VIEWER_NOT_READY - Tests: rich viewer profile mocks; gate case - DISCOVERY_AND_MATERIALIZED_MATCHES: document gating

  939. Stage web 0.1.335 chats peerAuthUid evidence; dedupe semver row · 7135618

  940. Sync release-notes after tenant-rebuild-web-client · d174ec2

  941. Resolve chats peer auth from connection row (0.1.335) · ffad3aa

    Chats list passed peerAuthUid to ConversationMatchCard only when the peer appeared in the paged discovery map, so connection-only rows lost the peer Zitadel subject and showed Connection not available / could not Accept. - Add resolvePeerAuthUidForChatsListRow: prefer match.peerAuthUid, then map - ChatsPageClient: single resolved uid for statusMap and card - Tests for connection-only + empty discovery map

  942. Align last verified row with web 0.1.334 / API 0.1.47 (stage evidence) · 4215e23

  943. Mark API 0.1.47 stage evidence · 4bbfb35

  944. Regen release-notes after fleet; AGENTS API 0.1.47 verified on stage · c276dd9

  945. API 0.1.47 matchScope discovery hardening · f01d7ac

  946. MatchScope discovery skips missing dimensions and all-zero axes · 9919dbe

    - tryReadMatchDimensionsFromDocument + isNoStoredDimensionalSignal - Filter matches before session reweight; empty list returns 200 - Connection list enrichment: no throw when scope set but dimensions absent - Tests: discovery + enrichment + dimension helpers Bump to 0.1.47.

  947. Regen release-notes after fleet; AGENTS stage API 0.1.46 verified · 890b56a

  948. API 0.1.46 discovery orphan-row fix; table parity · 79692d5

  949. Return partial discovery list when match rows are orphaned · b41f28e

    Omit unresolvable rows instead of aggregating into a 500. Log per-row error, warn with skip counts, and keep totalCount as match-row cardinality. Bumps package to 0.1.46.

  950. Sync release-notes after fleet rebuild; AGENTS stage 0.1.334 evidence · a2c2c6c

  951. 0.1.334 + release notes; AGENTS stage table · 686d048

    Regenerate release-notes data. Document 0.1.334 universe ring placement; stage edge still 0.1.333 until tenant-rebuild-web-client.

  952. Place discovery universe peers on connection-ring annuli · d903cbc

    Peers use connectionRing (or match-% bands aligned with backend) for XZ radius; strongest-dimension sector and separation unchanged. Update UNIVERSE_ARCHITECTURE and dimension module docs; extend atomic tests and add connectionRingLayout.

  953. Document Mongo profile purge via Fleet and refresh stage evidence · 3272f16

    Update app-fleet-cli-commands.md, README, AGENT rules, pipeline runners, AGENTS.md, and agent-rules-changelog. Canonical snapshot table: web 0.1.333, API 0.1.45, cloud 1.0.4; stage verification and browser note for 2026-04-26.

  954. Tenant-purge-mongodb-profiles and runner purge-mongodb-profiles · 742a484

    Expose DELETE /api/admin/profiles (Super Admin clear-all contract) with the same bearer options as journey bank seed: cli.py tenant-purge-mongodb-profiles; FleetPublicInterface.purge_mongodb_profiles; run_tenant_fleet_manager --action purge-mongodb-profiles with --force/--keep-self/--dry-run. Add HTTP helper and unit tests for parse plus dry-run report.

  955. Stage evidence web 0.1.333 + full-workflow E2E command · 792443a

  956. Regen release-notes after fleet pre-rebuild (0.1.333 stage) · a344c98

  957. Full authenticated E2E workflow + 0.1.333 · 40a68f2

    - Add exerciseFullProductWorkflowShellE2e: onboarding, You settings, reflection and connection banks, match universe, list, optional Connect, chat, logout - assertSignedInConnectionPhaseNoSessionError; export clickAppNavLink - New spec full-product-workflow-smoke; npm run test:e2e:ui-authenticated:full-workflow - Bump package to 0.1.333; regen release-notes data; document in tests/README and AGENTS.md

  958. Magic-link login vs Playwright auth for operators · b533890

    - AGENT_BEHAVIOUR.mdc §9: 9.1 fleet magic-link-create; 9.2 setup+ui-authenticated - Expand magic-link-fleet-cli.md: stage example, --mode vs --profile, hygiene, Playwright table and run command; renumber live-health/stack sections - Index KB in app and app-pipeline README; app-fleet-cli-commands blurb; root AGENT_BEHAVIOUR.MDC browser-session bullet; link check passes

  959. Document magic-link session + primary nav verification on stage · 1625438

  960. Refresh stage evidence for web 0.1.332 and operator browser sweep · 41981a1

    - Replace stale 0.1.328 last-verified line with curl, tenant-live-health, and 540x960 landing/release-notes; note onboarding redirect without session.

  961. Align swimlane with deployment probe path and module policy · 4c39977

    - Remove misleading FleetManager-to-targets reconcile SSH edge; document that host probe and inventory go through DeploymentInterface and that infra reachability gates are separate orchestration. - Add MODULE_BOUNDARIES note distinguishing deploy transport from fleet gates.

  962. Regen release-notes after web rebuild · 6adc29a

  963. Remove E2E-driven list bailouts; fix match-list in tests · 6307820

    - Restore DiscoveryPageClient + UniverseView + discovery index to pre–ListViewRouteNavButton - Delete ListViewRouteNavButton (no product shims for Playwright) - match-list spec: baseURL goto, assert not sign-in, list subtitle; scope helper uses force on Continue - match_intent_scope_gate_e2e: 8s h1 probe + force continue (test-only) - Web 0.1.332, release notes, AGENTS (E2E policy note)

  964. Scope loading shell, gate probe, double ensure · fd1ed25

    - DiscoveryPageClient: show LoadingSpinner when match intent scope status is loading (no empty main) - ensureMatchIntentScopeContinued: wait for gate heading OR Continue (10s), then submit - match-list: call ensure twice after Match for hydration ordering - web 0.1.331 + release notes

  965. List-view testid, scope-gate short probe, match-list waits · 37660be

    - ListViewRouteNavButton: data-testid list-view-route-nav for stable Playwright selection - ensureMatchIntentScopeContinued: 8s gate-probe (avoid 45s penalty when scope already set) - match-list spec: prefer testid, 90s to list control - web 0.1.330 + release notes

  966. Refresh release-notes after post-deploy + align AGENTS with stage 0.1.329 · 2ab7bf5

    - Fleet tenant-rebuild-web-client appended git commits to release-notes bundle; cloud 1.0.4 on stage per /api/build-info

  967. - Regenerate release-notes data; document 0.1.329 discovery + E2E operator path · 4b589a2

  968. Ui-authenticated journey + match list smoke · cd4ecc0

    - match-list: You hub, Match, list view via radio or List view button, list subtitle - match intent gate: 45s initial heading wait for slow stage - journey hub: effective en landing hero title helper; photo spec narrowed to journey + You settings

  969. Add ListViewRouteNavButton for client-only list route escape · e24c534

    - Reuse list toggle i18n; wire DiscoveryPage pending shell and UniverseView loading/finish states - Export from discovery index for reuse

  970. Operator commands for ES logstash index prune and ILM · ef09f79

    Add elasticsearch-prune-logstash-indices and elasticsearch-put-ilm-logstash under fleet operator, with remote bash scripts and unit tests. Bump app-fleet to 1.0.4. Document in README and cli.py examples.

  971. Stage snapshot 0.1.328 / 0.1.45 / 1.0.3 + evidence row · 5670424

  972. Stage verified web 0.1.328 after rebuild · a0aa894

  973. Regen release notes and PACKAGE_INDEX after web rebuild 0.1.328 · 1aee160

  974. Signed-in Journey + profile photo + Match list (web 0.1.328) · 9c282a8

    - Add match_intent_scope_gate_e2e: dismiss MatchIntentScopeGate before discovery fetch - New signed-in-journey-profile-photo-match.spec (hub, Settings upload, list/empty) - match-list peer modal uses same gate helper; docs + release notes + AGENTS

  975. Fleet merged .env not committed; link merge-drift runbook · 0e7256c

  976. Stage verification 2026-04-26 + fix repo parity row · a089c26

  977. Regen release notes and PACKAGE_INDEX after web rebuild · 914a995

  978. Signed-in Match list peer profile modal smoke (web 0.1.327) · 5cb75b4

    - Add ui-authenticated spec: /match/list → show details → Open full profile → Profile BaseModal - MatchCard: aria-label on Open full profile (narrow viewports + a11y) - tests/README.md, AGENTS; regenerate release notes

  979. Release-notes after 0.1.326 peer profile modal (fleet regen) · 22b1e50

  980. Peer profile as BaseModal aligned with You My profile (web 0.1.326) · 28fc518

    - PeerProfileSheet: replace fixed side panel with BaseModal (large), journey-style eyebrows, violet panels, rect-brand CTAs; ProfileIdentityStrip for peer identity - ProfileIdentityStrip: self/peer variant, optional name/bio overrides, invalid orb well - DiscoveryPageClient: comment update; AGENTS + release notes

  981. Release-notes after journey hub 0.1.325 (fleet regen) · 7a2a9e3

  982. Hub shows hero title above return-visit subline (web 0.1.325) · c8caeb2

    JourneyHubScreen: h1 (landing.hero.title) before journey.hub.returnVisitSubline under the milestone path. Update module docstrings, journey page/README, AGENTS; regenerate release notes.

  983. Release-notes bundle after profile-picture commits (fleet regen) · 61adc4d

  984. Canonical web 0.1.324 + profile picture UI note · a9691ae

  985. Profile picture refresh after upload (query cache + media URL bust) · fc92ee0

    Apply POST/DELETE profile payloads to selfProfileQueryKey like onboarding. Add v= revision query param to profile-picture media GET; revision includes updatedAt and GridFS paths. Bump web to 0.1.324; regenerate release notes.

  986. Release notes from fleet pre-rebuild (0.1.323) · e7a76b8

  987. Canonical stack 0.1.323 / 0.1.45 / 1.0.3 + discovery evidence · fa9e854

  988. Bump package to 1.0.3 (mongo-profile-journey) · 1fe203a

  989. Operator mongo-profile-journey for profile audit · 66aa2a3

    Read-only mongosh summary: updatedAt and questionAnswers key list by email or authUid. Documented in app-fleet CLI KB for ifeoma-tc stage operators.

  990. Profile maturity ring from solo signal axes · ac56c2c

    When a complete matchingSignalDimensions object is present, the maturity percentage is the mean of the five 0-100 axis scores (aligned with My profile radar). Shared axis key list and isComplete guard; stricter parse errors. Web 0.1.323; release notes bundle regenerated.

  991. Include solo matchingSignalDimensions on discovery peers · 37e01b1

    DiscoveryProfile responses now carry the same server-computed five-axis solo signal scores as self GET /api/profile, so peer radar and overlap tables match the match row. OpenAPI and Zod schemas updated; profile collection audit doc amended. Backend package 0.1.45.

  992. Sync release-notes bundle (874 commits, post-deploy) · 8066099

  993. Web 0.1.322 + API 0.1.44 profile media hardening · f370153

  994. useProfilePictureObjectUrl rejects empty or non-image blobs. · d909862

    PeerProfilePictureOrOrb resets and uses img onError to fall back to the gradient orb. Regenerate release notes.

  995. Refuse to open a download stream when the files collection has no row or length is zero, avoiding 200 responses with empty bodies for stale gridfsId. · 8489941

  996. Sync release-notes bundle after 0.1.321 · 2e27ca4

  997. Remove MatchIntentScopeChip from /chats; keep scope UI on Match/discovery only. · 81c588c

    useConnections omits matchScope; useDiscoveryProfiles uses applySessionMatchIntentScope: false for enrichment. Document ListFilterToolbarRow and request type; update AGENTS.

  998. Sync release-notes bundle (868 commits, post-0.1.320 deploy) · a554b57

  999. Web 0.1.320 release notes + semver table · abdd337

  1000. Full release-notes history within configurable cap · e382595

    Replace fixed git log -n 800 with min(non-merge count, cap). Default cap is 50_000; override with RELEASE_NOTES_MAX_COMMITS. Bundle maxCommits records the effective -n. Document in docs/release-notes-commits.md. Regenerate bundle and bump to 0.1.320.

  1001. Connection rating scale — cyan track, white thumb, layout (0.1.319) · 3e281d9

    - connection-rating-scale-brand: #40C4FF active fill, chip glow, thumb glow - RatingCard: prompt → value → end labels → track → 1–10 chips; native buttons; chip segment fill matches current value; exports from design-system barrel - AGENTS + release notes

  1002. Reflection subtext matches question affordances (0.1.318) · 7400450

    QuestionCard: pick journey.questionPhase.promptSubtextChoiceOnly, promptSubtextTextOnly, or promptSubtextChoiceAndText from showTextInput/ showMultipleChoice. Replaces one line that mentioned writing your own on choice-only steps. i18n en/de/fr/es/ar; message key list; AGENTS; release notes.

  1003. 0.1.317 journey hub swap — mark stage as verified · 14c5214

  1004. Journey hub — status above hero title (0.1.317) · 866fc5f

    JourneyHubScreen: render journey.hub.returnVisitSubline before landing.hero.title under the milestone path. Docstring + AGENTS stage line; regenerate release-notes bundle.

  1005. Index journey-path-phase; rules nav; agent-rules-changelog · d5595a2

  1006. Stage web 0.1.316, journey path phase evidence, semver table · ef3c3ce

    Stage verified: GET /api/health version 0.1.316; public_edge.ok from tenant-live-health; release notes build line 0.1.316 on /en/release-notes.

  1007. Journey path phase when reflection and connection are complete · b47ff69

    resolveJourneyPathPhase returns match on section=reflection|connection when both banks are done, so the Match step is not shown locked in-flow while the hub already reflects full progress. Unit tests and KB at .cursor/kb/ journey-path-phase.md. Bump to 0.1.316; regenerate release notes.

  1008. AGENTS stage API 0.1.43 + release-notes after fleet app rebuild · b7bc074

  1009. OpenAPI matches Fastify 503/E2E bodies (0.1.43) · ed2b535

    - ConnectionMutationSnapshot: exact connectionSnapshotForResponse fields - ChatSessionPersistence503WithConnection + ConnectionMutationResponse use it - ErrorResponse: optional message, details.stack (internalServerErrorPayload) - E2eSeedProfileResolutionFailed; internal seed POST 500 oneOf - VapidPublicKeyNotConfigured503 for GET /api/push/vapid-public-key 503 - Zod + axios models regenerated (contracts, backend, web client)

  1010. Stage web 0.1.315 + profile depth evidence · 82eec73

  1011. Sync release-notes bundle after fleet stage rebuild · bc600b7

  1012. Responsive audit — profile depth on ConnectionDetail · 631d655

  1013. - Journey matching signals: band helper, two-lowest+global CTAs, i18n, maturity ring via globals - CompatibilityDimensionsRadar: journey reference frame, custom ticks, legend, hid… · 1f5d05e

    - Journey matching signals: band helper, two-lowest+global CTAs, i18n, maturity ring via globals - CompatibilityDimensionsRadar: journey reference frame, custom ticks, legend, hide table; admin unchanged - ConnectionDetail: ProfileIdentityStrip + maturity; modals i18n titles - Recharts colors from BRAND_VIOLET_RGB; release notes regen

  1014. Stage web 0.1.313 verified · cf51fed

  1015. Release notes from fleet pre-rebuild (0.1.313) · 86848dc

  1016. Brand orb background on journey hub (0.1.313) · 90208ee

    - JourneyHubScreen: decorative YouBrandOrbMark behind stepper + progress card (z-0), matches welcome screen; avoid BrandOrbSectionAmbient double-wash. - Docs: journey README; AGENTS + fleet KB semver; release notes regen.

  1017. Stage web 0.1.312 verified after tenant-rebuild · 63dcb4f

  1018. Release notes from fleet pre-rebuild (0.1.312 stage) · c1c3664

  1019. - Several low dimensions (thinking, emotional, conflict) shared Reflection route; show one chip per destination, first axis in radar order. · 403428a

    - Several low dimensions (thinking, emotional, conflict) shared Reflection route; show one chip per destination, first axis in radar order. - Add matchingSignalsLowAxisCta util + Vitest; refresh release notes + KB semver.

  1020. Release-notes CI/local drift, stage semver snapshot, KB · 8b30290

    - JSDoc on generate-release-notes-data.ts; AGENTS + fleet KB table for 0.1.311/0.1.42.

  1021. Verify OpenAPI icebreaker request body in CI and schema batch · b2e6ac6

    - Add verify-openapi-critical-request-bodies.mjs; wire GitHub schema-contract workflow and run_batch_schema_workflow (step 3/5). - Note invariant in generate-schemas.js; update fleet/docs drift guard references.

  1022. Application secrets in common; track app-tenant secrets module · ad00dfd

    - Move merge/get/absorb/stubs implementation to common/secrets_application.py so app-deployment (zitadel_provision) does not import app_tenant_root; satisfies check_module_boundaries. - Re-export from app-tenant/src/secrets/application.py; un-ignore that package in .gitignore (directory name 'secrets' matched global pattern). - Update unit test and Zitadel module docstrings.

  1023. Note E2E strapline key discovery.universe.view.modeStraplineExplore · 17c2d20

  1024. Sync release-notes.generated.json after fleet rebuild · 6664272

  1025. 0.1.311 and regenerate release notes data · e9ed599

  1026. I18n: use Match surface name across journey, connections, discovery, chats · 4689933

    Align en/de/fr/es/ar strings and privacy hints with the Match tab. Update analytics suggestedNextSteps and E2E universe smoke to use en.json strapline and legacy bottom-nav Match link.

  1027. Release notes after fleet post-push sync · 53d3cfd

  1028. Match tab, /match routes, and i18n (0.1.310) · e180ca9

    - Route (pages)/match with ROUTES.MATCH/LIST; Next.js redirects for old /discovery URLs - AppNav: tab id match, label app.nav.tabMatch; journey phase and path step id match - discoveryViewModeFromPathname: only match segment (redirects own legacy paths) - Query keys, settings accordion matchFeed, manifest shortcuts.match, PWA and robots - Non-EN discovery.page, webgl a11y, matchmakingPath, and preferences aligned to Match - Regenerate release-notes; doc kb discovery-universe-view for /match BREAKING: client no lon…

  1029. Atomic coverage for profile-information-photo embed · f037d8e

  1030. Stage evidence web 0.1.308 profile photo inline · 500b076

  1031. Profile photo inline in Profile information (0.1.308) · c7d167c

    - Extract ProfilePhotoEditorCore (upload/replace/remove); embed in ProfileInformationSection - You/UserProfileMenu: photo controls + header shows PeerProfilePictureOrOrb when ready - Remove separate ProfilePictureSection accordion; update PROFILE_SURFACES.md

  1032. Ifeoma-tc INDEX + bundle after 0.1.307/0.1.42 stage rebuild · aca13fc

  1033. OpenAPI 1.0.26 503 + stage 0.1.307 / API 0.1.42 · d45cbea

  1034. - api-types, axios, zod; new 503 model docs; release-notes bundle · bdfbe19

  1035. OpenAPI 1.0.26 — CHAT_SESSION_PERSISTENCE 503 body schemas · a51a53b

    - ChatSessionPersistence503WithConnection, E2eSeedChatSessionPersistence503 - Document 503 on request/response/icebreaker paths; zod regen; API 0.1.42 - Cross-ref OpenAPI from persistChatSessionAfterConnectionMutation docstring

  1036. Refresh ifeoma-tc PACKAGE_INDEX (stage rebuild 2026-04-26) · 12ccd03

  1037. Evidence OpenAPI 1.0.25 + web 0.1.306 / API 0.1.41 on stage · de89093

  1038. Sync generated Zod validation with OpenAPI 1.0.25 · e96462f

  1039. - api-types, axios client (Internal tag), zod; release-notes bundle - New generated InternalApi, block + e2e seed models · 61a5469

  1040. OpenAPI 1.0.25 — transcript, connections, block, e2e seed · 361e2ae

    - Document five Fastify routes in openapi.yaml; add internalE2eSecret security scheme - New schemas: BlockUserResponse, E2eSeedConversationRequest/Response - Remove matching onlyInBackend allowlist entries; zod regen (contracts + backend)

  1041. Refresh ifeoma-tc PACKAGE_INDEX (fleet regen 2026-04-26) · 3467522

  1042. Note openapi allowlist + check:openapi-backend-paths OK · a2d49cc

  1043. Allowlist Fastify-only API paths pending OpenAPI · e9a8ef3

    Document five routes (transcript-export, end-connection, press-reveal, e2e seed, user block) so check:openapi-backend-paths passes until schemas are added.

  1044. Stage evidence for profile first/last (0.1.304–305) + API 0.1.40 · ed785c1

  1045. First/last name UI, client mapping, and ProfileIdentityForm · 01750bc

    - Settings, onboarding, profile edit, View My Profile, discovery types/adapter - i18n (all base locales) + identityForm a11y keys; profileNameParts for split/compose - ProfileIdentityData uses firstName/lastName; generated API + zod - release-notes data; web 0.1.305; AGENTS + PROFILE_SURFACES

  1046. Profile first/last name persistence and API responses · 9dfb48b

    - Add profileNameParts helpers and profileNameFieldsFromStoredProfile - POST /api/profile merges firstName/lastName or splits legacy name - GET/POST responses include name block; discovery peer mapper aligned - Bump backend to 0.1.40; zod from generated bundle

  1047. OpenAPI firstName/lastName on profile shared + update request · 42f1604

    Add ProfilePublicShared and UpdateProfileRequest fields; regenerate app-contracts zod for distribute pipeline.

  1048. 0.1.303 residence hint i18n; stage evidence · cd20d94

  1049. Sync after 0.1.303 i18n deploy · 1541990

  1050. onboarding.residence.hint: local matches and one country only; feature removed. · ddcb15b

    Web 0.1.303.

  1051. Sync after OpenAPI icebreaker commit (0.1.302 / 0.1.39) · 6bace75

  1052. OpenAPI icebreaker submit-step, full regen · 938376b

    - Path POST /api/connections/icebreaker/submit-step + IcebreakerSubmitStepRequest - Regenerate zod (backend, web) and web OpenAPI client; remove Fastify-only gap - Web 0.1.302, API 0.1.39; release-notes bundle; AGENTS + fleet KB evidence

  1053. Sync bundle after 0.1.301 deploy commits · aa9184a

  1054. Update fleet KB append-only row for stage verification. · 5406d32

  1055. Journey welcome phase and profile gate · 319169f

    - Route /journey?phase=welcome: JourneyWelcomeScreen (glass, orb, how-it-works) - JourneyProfileWelcomeGate until journeyWelcomeCompleted is true - Remove localStorage hub welcome hook; hub uses kicker only - Profile types + API mapping; i18n en/de/es/fr/ar; bump to 0.1.301 - Regenerate clients, release-notes, zod (Icebreaker restored)

  1056. Persist journeyWelcomeCompleted on profile · 088b1f8

    GET/POST /api/profile expose boolean; POST accepts optional update. Bump package to 0.1.38.

  1057. Profile journeyWelcomeCompleted in OpenAPI · 30d2892

    Add self-only journey completion flag; regenerate zod. Restore IcebreakerSubmitStepRequest after schema sync (not yet in OpenAPI).

  1058. Stage web 0.1.300 parity · 683fe47

  1059. Sync release-notes after fleet rebuild (0.1.300 stage) · 0542e2b

  1060. AGENTS + fleet KB 0.1.300 journey welcome gate · ec92e79

  1061. Gate hub welcome on path intro; sync storage when past intro; web 0.1.300 · 3db27d5

    - showFirstVisitHubWelcome = storage && pathPhase intro - effect: dismissWelcome when hub path is not intro (new device + existing progress) - docstrings: JourneyHubScreen, useJourneyHubWelcomeState

  1062. Stage web 0.1.299 repo+stage parity · 9ccbe24

  1063. Sync release-notes after fleet rebuild (0.1.299 stage) · bffa42a

  1064. AGENTS + fleet KB 0.1.299 journey hub first-visit · b673802

  1065. First-visit hub welcome glass + orb; localStorage gate; web 0.1.299 · ef6c565

    - useJourneyHubWelcomeState: dismiss welcome once; path stepper shows Welcome done + Reflection current only on first visit when profile phase is still intro - JourneyHub: matchmaking first; grounding + hero title inside SURFACE_BRAND.glassJourneyPanel; YouBrandOrbMark in pointer-events-none layer z-0, panel z-10 - Return visits: landing hero title + journey.hub.returnVisitSubline - i18n: welcomeRegionAria, welcomeContinueCta, returnVisitSubline (en/de/es/fr/ar) - journey README + resolveJourneyPathPhase note

  1066. App-fleet-cli-commands — stage 0.1.298 snapshot + QuestionPhaseBase evidence · 3de53f2

  1067. 0.1.298 stage evidence + public-edge · 8deb194

  1068. Sync release-notes after fleet rebuild (0.1.298 stage) · 5c00967

  1069. Web 0.1.298 QuestionPhaseBase connection + removal of top step nav · af613a0

  1070. QuestionPhaseBase progress below card for all modes; drop top prev/next · 5a7ca1d

    Unify itemProgressAndBar for session + default under RatingCard/QuestionCard. Remove showTopStepNav; navigation stays in cards. Web 0.1.298.

  1071. Stage web 0.1.297 + Reflection session chrome below card evidence · eda3c3b

  1072. Sync release-notes after fleet pre-rebuild (0.1.297 stage) · c54cf8e

  1073. Place Reflection session progress below QuestionCard; web 0.1.297 · e0ea69f

    Move session progress line, time, save & exit, and item bar under the card in QuestionPhaseBase when sessionProgress is set; Connection keeps chrome above the card. DRY itemProgressAndBar. Regenerate release notes.

  1074. Release-notes after fleet; AGENTS stage 0.1.296 · 1f56349

  1075. Update prototype dock i18n (all locales), ADR, Scene prototype section title, universeCompatibilityDimensions doc, matching docs, testbench comment; refresh release notes, AGENTS,… · 102a2ca

    Update prototype dock i18n (all locales), ADR, Scene prototype section title, universeCompatibilityDimensions doc, matching docs, testbench comment; refresh release notes, AGENTS, fleet KB evidence.

  1076. Stage verify web 0.1.295 (score arcs removed) · 973c675

  1077. Release-notes JSON after fleet rebuild (0.1.295 stage) · bb6876d

  1078. Sync release-notes after 0.1.295 score-arc removal · d563d10

  1079. Remove Canvas2D score arcs around peer orbs; web 0.1.295 · e9faba7

    Per-peer disk-plane arc strokes and hover ring duplicated match encoding and read as "Saturn rings." Drop drawScoreArcs, CANVAS2D_SCORE_ARC, scoreArcAngles module + tests. Align testbench legend and drop U.overlay.scoreArc / drawScoreArcs. Update UNIVERSE_ARCHITECTURE and debug-issues note; AGENTS + fleet KB.

  1080. Discovery universe view — guide modal and universeGuideStorage · a133d97

  1081. Verify web 0.1.294 stage; fix repo parity row; lib/ path note · 9344055

  1082. Sync release-notes JSON after fleet rebuild (0.1.294 entries) · 7a6a9f3

  1083. Document visual guide (UniverseGuideVisualPanel) and 0.1.293 historical row. · 23702a3

  1084. Replace tabbed guide with UniverseGuideVisualPanel (diagram, callouts, warning, color key, list bailout). · 4b6616c

    Replace tabbed guide with UniverseGuideVisualPanel (diagram, callouts, warning, color key, list bailout). Add universeGuideStorage with warn-on-failure persistence; aria-label for callout list. i18n guideVisual* in en/de/es/fr/ar. Bump 0.1.294; refresh release notes. Update ADR and UNIVERSE_ARCHITECTURE.

  1085. Stage verify web 0.1.293 discovery guide · 4f1f847

  1086. Sync release-notes JSON after 0.1.293 fleet rebuild · fedb304

  1087. Ship Canvas2D legend off; pointer line in universe guide; web 0.1.293 · df91c47

    - Default showCanvas2dLegend false (avoids app shell nav covering bottom-left block) - UniverseGuideTabs: i18n guideBulletPointer; scenePrototypeDraft paste default false - E2E: scene prototype dock expects Canvas legend checkbox unchecked - ADR + UNIVERSE_ARCHITECTURE + AGENTS + fleet KB

  1088. AGENTS + fleet KB evidence for web 0.1.292 stage verification · 83b04e0

  1089. Sync release-notes JSON after 0.1.292 commit hash · 6a708c3

  1090. Remove universe profile-count line; web 0.1.292 · cad2598

    - Drop peer-count + 3D/List/badges copy from UniverseDiscoveryHeadlines (overlay + info modal) - Remove positionedProfileCount from RevealHeader and UniverseScreenInfoModal; trim i18n keys - Regenerate release notes; update AGENTS and UNIVERSE_ARCHITECTURE §8

  1091. Sync release notes after 0.1.291 fleet rebuild · 5eb3ad5

  1092. 0.1.291 release notes + AGENTS + fleet KB (connection journey) · 5e232ad

  1093. Connection URL path phase + skip connection launch intro · 1e1f9cb

    - resolveJourneyPathPhase: section=connection always yields connection so the 4-phase row matches the page (was explore when 5/5 ratings already stored). - ConnectionJourney: showIntro defaults to false; go straight to RatingCard. - Unit test for connection section with all ratings complete.

  1094. AGENTS + fleet KB — stage 0.1.290 read-only check and evidence row · 448e7b8

    Record curl/tenant-live-health parity, no backend rebuild needed, local tenant file hygiene; append ifeoma-tc 0.1.290 evidence to app-fleet-cli-commands.

  1095. Sync release notes after 0.1.290 fleet rebuild · 0373b9f

  1096. Full-width journey stepper on reflection/connection (QuestionPhaseBase) · 3a15314

    Match JourneyHub path layout: stretch wrapper + min-w-0 grid column; path nav/ol self-stretch. Applies to /journey?phase=progress&section=reflection|connection. Web 0.1.290; update AGENTS and journey README.

  1097. Evidence row for web 0.1.289 stage deploy and journey e2e · 8e08a63

  1098. Sync release notes after 0.1.289 deploy + AGENTS stage evidence · d479b1c

    Fleet rebuild refreshed generated JSON with latest commits; document verified stage curl + tenant-live-health + journey hub smoke in AGENTS.

  1099. 0.1.289 release notes + stage parity notes in AGENTS · e388d7a

    Regenerate release-notes.generated.json; document Web 0.1.289 in AGENTS canonical table and product notes.

  1100. Journey hub stepper width vs progress card (375–768) · 1ba84d4

    Authenticated spec asserts nav and card bounding boxes differ by at most 2px and no excess page horizontal scroll; document in tests README.

  1101. Full-width journey matchmaking path aligned with hub card · 93c113f

    Stretch flex-1 connectors so the 4-phase stepper matches the Journey Progress card width; nav min-w-0 with narrow-viewport horizontal scroll when needed. Add data-testid on the progress glass card for E2E width checks.

  1102. Release notes from fleet dual rebuild; AGENTS + fleet kb evidence (stage 0.1.288 / API 0.1.37) · 994f3a5

  1103. Evidence read-only loop web 0.1.288 journey hub order · 1ab77d8

  1104. Hub vertical order — hero copy, orb, path, card · 09b9d75

  1105. Release notes after fleet pre-rebuild (0.1.288) · 46f8cbc

  1106. Journey hub — hero + grounding copy above orb (0.1.288) · d9aa11b

    - Reorder stack: h1/paragraphs, YouBrandOrbMark, JourneyMatchmakingPath, glass card - Docstring describes vertical layout; AGENTS + release notes

  1107. Rename journey hub smoke spec; document in tests README · 5ea7de0

  1108. Evidence for web 0.1.287 journey + API 0.1.37 stage · 76b835a

  1109. Refresh release-notes after fleet app rebuild (API 0.1.37 live) · f651d6e

  1110. Bump 0.1.37; sync release notes + AGENTS (stage API still 0.1.36 until deploy) · e2c43d8

  1111. Icebreaker submit-step API and ConnectionService support · a775468

    - POST route + Zod IcebreakerSubmitStepRequest; service methods and tests - Regenerated zod-schemas in app-contracts and 10_backend

  1112. Journey hub consolidation, 4-phase path, DRY Screen (0.1.287) · db3dad1

    - Default /journey to progress hub; legacy grounding/how-it-works redirect - JourneyMatchmakingPath + useJourneyPathPhase; remove Grounding/HowItWorks screens - Hub: grounding copy, reassurance row, fixed CTAs to JOURNEY_REFLECTION - navigation Screen re-exports journeyPhases; remove unused getJourneyStepFromScreen - i18n introLabel, E2E/orb spec updates, release notes, AGENTS + fleet kb evidence

  1113. AGENTS + fleet kb for web 0.1.285 (reflection DELETE fix) · 3f59f9b

  1114. Sync release-notes after 0.1.285 · 076ee9e

  1115. Set JSON Content-Type on nextjsApiRequest only with a body · e02c5b9

    Avoids Fastify FST_ERR_CTP_EMPTY_JSON_BODY on bodyless DELETE to /api/journey/reflection/:id (e.g. clear reflection progress). Bump to 0.1.285.

  1116. Sync release-notes after fleet pre-rebuild · 89789d6

  1117. 0.1.284 release notes, AGENTS, fleet KB · 5a19f3f

  1118. DRY culture/residence save gate for Settings and Discovery menu · 65e1c1c

    - Add CultureResidenceSaveGatePanel using design-system amber well styles - Export CULTURE_BLOCK_DOM_ID for scroll target (CulturalIdentitySection) - UserProfileMenu: same prerequisite banner as ProfileSettings when invalid - PROFILE_SURFACES.md + atomic test expectations

  1119. Sync release-notes after fleet pre-rebuild · 2ef64fa

  1120. 0.1.283 release notes, AGENTS, fleet KB evidence · e4ee681

    Regenerate release-notes; document 0.1.283 profile-surface work in AGENTS and app-fleet-cli-commands (post-rebuild stage verification to follow).

  1121. Profile surface docs, settings gate, Discovery menu prefs · a0e3ec5

    - PROFILE_SURFACES.md: table of onboarding vs settings vs profile vs UserProfileMenu - Settings: persistent culture+residence gate with CTA; link to Profile for bio - UserProfileMenu: document contextual subset; add DiscoveryPreferencesSection - CulturalIdentitySection: anchor id for scroll-into-view - Atomic test: menu imports discovery prefs, not ProfilePictureSection

  1122. Drop unused OnboardingCultureFields variant and dead onboarding.subtitle · 8f69e57

    Remove the no-op variant prop from the shared culture typeahead. Remove the unused onboarding.subtitle key from all locales (copy wrongly implied a required photo; only subtitleShort is rendered on the welcome screen).

  1123. Append 0.1.282 read-only verification row · a7c7748

    Mirror AGENTS.md closing loop: tenant-live-health, curl routes, logs, browser.

  1124. 2026-04-26 stage read-only loop for web 0.1.282 · 2a6d240

    Record public_edge health, route HTTP 200s, target-stack-logs sample, and 540x960 browser checks (landing, release-notes, journey nav).

  1125. Stage web 0.1.282 Explore i18n evidence · 6f4b870

  1126. Stage web 0.1.282 verified (curl, release-notes, journey Explore copy) · a43eab8

  1127. Release-notes bundle after fleet web-client rebuild · 970ad38

  1128. Sync release-notes after build; docs(agents): stage web row without pending tag · a5076f3

  1129. Web 0.1.282 Explore i18n note and semver table · 0f07add

  1130. 0.1.282 and release-notes bundle · b433c2b

  1131. Align Discovery product copy with Explore across locales · b2c618c

  1132. Stage web 0.1.281 verified · 873f531

  1133. Release-notes after 0.1.281 fleet deploy · 9bbb28a

  1134. Web 0.1.281 connection intro note · da3fa5a

  1135. 0.1.281 and release-notes bundle · 8ded6a8

  1136. I18n(journey): connection launch copy across locales · a87c672

    Add preview, meta row, reflection eyebrow, scoped CTA; remove intro skip; parameterize lead by statement count.

  1137. Connection launch intro with preview and slimmer CTA · 00e6040

    Replace duplicate milestone cards and duplicate prose with a launch layout: eyebrow, headline, one lead, statement preview (static 1–10 sample), meta row with time/save and inline how-ratings work link (same modal, new inline trigger). QuestionPhaseIntro gains introCustomBody, outroCtaSubline, introStartButtonClassName; remove connection skip. JourneyPhaseImpactInfoSection supports infoModal inline link.

  1138. Stage web 0.1.280 verified after tenant-rebuild · 87367fd

  1139. Release-notes bundle after fleet web-client rebuild · 68d6697

  1140. Align release-notes bundle with post-build git log · dba9f39

  1141. Note web 0.1.280 and stage redeploy expectation · 8810c99

  1142. Sync release-notes bundle for 0.1.280 · 725a6c6

  1143. Bump version to 0.1.280 · 0d18d7b

  1144. Reflection session layout and in-card step navigation · daa1ca6

    Replace broken curiosity line and orb with a category metadata pill, chips with clear selected state, textarea after chips with length counter, and Save & continue with chevron. QuestionPhaseBase supports optional session progress header and hides duplicate top step nav. Reflection rehydrates drafts and resumed progress, adds Skip/Previous, save & exit to journey hub, and maps stored option ids to labels for chip state.

  1145. I18n(journey): question phase session strings and reflection copy · 11a78e1

    Add locale keys for session progress, time estimate, save & exit, category pill subline, prompt helper text, or-write-own-words, save & continue, and skip. Remove the broken categoryCuriosityLine pattern across all bundles.

  1146. Refresh last verified row for 0.1.279 read-only stage loop · 04b7e30

  1147. Evidence row for web 0.1.279 milestone path graphic · 43b91e3

  1148. Stage web 0.1.279 + milestone path graphic note · 3121a7c

  1149. Sync release-notes after fleet rebuild (0.1.279) · 711d34f

  1150. Align milestone path graphic — one connector, circle Discovery (0.1.279) · a45f9c1

    - Same gradient bar between 1-2 and 2-3 (remove arrow) - Connectors use circle row height so lines align to icons, not labels - Discovery: dashed ring + lock, label below like Reflection/Connection - Drop sky CTA glow on current Connection for parity with step 1

  1151. Append stage evidence for web 0.1.278 journey handoff deploy · 8416ccf

  1152. Refresh stage semver table to web 0.1.278 with deploy evidence · 86ca5f3

  1153. Sync release-notes JSON after fleet rebuild (0.1.278) · ea232d1

  1154. Replace two-card explainer with prompt preview, reassurance row, solid CTA, post-CTA next-step line. · dcf54a5

    Replace two-card explainer with prompt preview, reassurance row, solid CTA, post-CTA next-step line. Add JourneyReflectionHandoffPreview; soften stepper bloom on milestone path. View-transition timing in globals. i18n all locales; refresh release-notes data.

  1155. Sync release-notes data after stage rebuild · 617c469

  1156. Remove the Family or cultural roots block from onboarding and settings. · 08abf16

    Profile saves pass countriesOfOrigin: null; fix adapter so explicit null is not dropped (null ?? undefined). Bump web-client to 0.1.277 and refresh release-notes data.

  1157. Stage 0.1.276 read-only loop evidence (curl, health, browser) · d347e4a

  1158. Release notes after fleet 0.1.276; docs(agents): stage + KB · aeeed2c

  1159. Add optional name input (profile.editForm.* i18n) in About you; map to API name on submit. · 9e0251b

    Add optional name input (profile.editForm.* i18n) in About you; map to API name on submit. useRef prevents GET /api/profile refetch from clobbering in-progress edits. Regenerate release-notes bundle for semver 0.1.276.

  1160. Stage 0.1.275 loop evidence; fleet KB snapshot · d5004f6

  1161. Release notes from fleet pre-rebuild (0.1.275) · 878f5cc

  1162. Show residency field on profile edit; DRY with settings (0.1.275) · 8ddd3dc

    Profile /profile edit form already sent residency in updateProfile but had no input, so Culture & origin parity with UserProfileMenu settings was broken. Extract ProfileResidencyTextField; reuse in CulturalIdentitySection and ProfileEditForm. Bump package to 0.1.275.

  1163. Stage 0.1.274 closing loop evidence (curl, logs, browser) · 1b2afa2

  1164. 0.1.274 chats peer row evidence; fleet release-notes sync · e69d226

  1165. Chats inbox lists connection rows when peerProfileId is absent · db5d10c

    - resolveChatsListPeerRowKey: fallback to peer authUid (aligns AppNav incoming badge with list) - ChatsPageClient: build stub/transform with row key from profile id or authUid - Tests + AppNav docstring; web 0.1.274

  1166. Refresh ifeoma-tc PACKAGE_INDEX after last merge-env · 10d8918

  1167. Stage evidence for 0.1.273 loop (curl, health, browser) · d195411

  1168. Release notes + PACKAGE_INDEX from fleet 0.1.273 deploy · 2512e55

  1169. Culture typeahead clears search when a culture is added · 0d416ec

    - useLayoutEffect: onCultureSearch('') when selectedCulture length increases (covers race with click vs parent re-render) - Suggestion buttons: onPointerDown preventDefault (combobox focus/pointer pattern) - Bump web to 0.1.273; regenerate release notes; refresh AGENTS + fleet KB snapshot

  1170. Consolidate stage semver source; refresh rule navigation · f7300e0

    - AGENTS.md: current canonical ifeoma-tc/stage table; trim dated comments from tenant-rebuild snippet; fix tenant-live-health cwd (stay in app-pipeline) - app-fleet-cli-commands.md: canonical snapshot + append-only Evidence note - Cross-link AGENT_BEHAVIOUR (root, pipeline, app-source); changelog row - app-monitor: replace informal block with professional contract (same intent)

  1171. PACKAGE_INDEX regen commit ref e7202eb5 · 5eac38d

  1172. Refresh ifeoma-tc PACKAGE_INDEX timestamp · e7202eb

  1173. Post-0.1.272 close-loop evidence (logs, commits) · f79c50e

  1174. Refresh ifeoma-tc PACKAGE_INDEX after merge-env · ae174a1

  1175. Stage evidence for 0.1.272 culture typeahead and CSP · c87c04f

  1176. Sync release-notes and PACKAGE_INDEX after 0.1.272 deploy · 429c1d5

  1177. Culture typeahead clears query on select; CSP img-src blob · 9713c8c

    - List selection: onCultureSearch('') and close list after picking a culture slug - CSP: allow blob: for object-URL profile previews (prod + dev) - Version 0.1.272; regenerate release-notes bundle

  1178. Stage evidence for 0.1.271 and API 0.1.36 deploy · 352c7bf

  1179. Sync release-notes and PACKAGE_INDEX after 0.1.271/0.1.36 deploy · 9cfeb28

  1180. Onboarding layout, single-country residence, gender More; 0.1.271 · 34070cd

    - About you: culture, gender (OnboardingGenderChips + dialog), birth year; Where you are: residence + app language - Iso3166TypeaheadField: summary row for maxSelections 1; iso2ToFlagEmoji; z-index on listbox - ResidenceHeritageFields: compact Detect; soft geolocation copy when no country - Culture: addAnotherPlaceholder when selections exist; taxonomy Swiss children; i18n all locales - Release notes bundle regenerated

  1181. Swiss regional culture taxonomy slugs; version 0.1.36 · bbb2dad

    - Add swiss-german, swiss-french, swiss-italian, swiss-romansh (parent swiss) for API validation - Align with web-client cultureTaxonomyV1; verify via /api/build-info after deploy

  1182. Sync release-notes and PACKAGE_INDEX after final web-client rebuild · 4184d39

  1183. Regenerate release-notes after AGENTS verification commit · 4e0723a

  1184. Stage 0.1.270 fleet and browser verification evidence · c887483

  1185. Sync release-notes bundle after deploy commits; refresh PACKAGE_INDEX · aee1277

  1186. Refresh PACKAGE_INDEX generated_at · 7a5a502

  1187. Stage 0.1.270 welcome onboarding; deploy with tenant-rebuild-web-client · a4c4d87

  1188. Welcome gate gender and birth year; photo upload on pick · f812580

    - Complete onboarding when API accepts gender and calendar birth year only - Upload profile picture on file selection; cache self profile query - Send null cultural identity when culture section incomplete - Align i18n footnote and photo strings; E2E shell helper for new gate - Version 0.1.270; regenerate release-notes bundle

  1189. Stage 0.1.269 post-deploy verification evidence · 1fda6e8

  1190. ResidenceHeritageFields supports segment residence|heritage|full for layout. · cc1cadd

    About you card: culture + country side-by-side (md+); identity row below. Heritage remains under Where you are. Settings/profile unchanged (full stack).

  1191. Stage 0.1.268 post-deploy verification (health, fleet, browser, E2E) · 448a598

  1192. Move app language into the About you section beside gender and year of birth. · 8ca69b6

    Stacked single column below md breakpoint; remove duplicate locale block from Where you are. docs(agents): stage deploy note for 0.1.268

  1193. Stage 0.1.267 verification evidence (health, fleet, browser, E2E) · a6ca810

  1194. Drop optional self-describe input from CultureTypeaheadField; onboarding/settings no longer collect it. · 6d755cf

    Drop optional self-describe input from CultureTypeaheadField; onboarding/settings no longer collect it. toCulturalIdentityApiPayload always sends selfDescribe null. Onboarding gate: taxonomy selections or prefer-not-to-say only; legacy selfDescribe alone no longer completes onboarding. Remove i18n keys; update tests; refresh release notes.

  1195. Refresh ifeoma-tc PACKAGE_INDEX (fleet) · 5125a3d

    Regenerated table-of-contents timestamp and section ordering. docs(agents): stage verification evidence 2026-04-25 (health, tenant-live-health, browser, logs)

  1196. Stage E2E command evidence and 0.1.266 · b2eee81

  1197. Web 0.1.266 (E2E onboarding + nav smoke) · b73d27f

  1198. PNTS culture gate and discovery shell smoke vs TanStack cache · f4c508d

    - Replace setChecked on PNTS: checkbox unmounts after click; assert summary or skip if already PNTS - After Explore, assert /discovery URL first; optional short wait for GET (warn if cache-only)

  1199. Stage web 0.1.265 after e2e deploy · 30bdee7

  1200. Web 0.1.265 (e2e onboarding + release notes) · 5c528cf

  1201. Mandatory onboarding uses residence typeahead, not origin list · 9d36a63

    Aligns Playwright shell helper with residence + optional heritage; updates gate docstring.

  1202. Note web 0.1.264 stage deploy · 307879b

  1203. Web 0.1.264 and release notes (settings i18n key) · 88cde83

  1204. Profile.settings error key matches culture+residence gate · f97d259

    Rename to cultureAndResidenceRequired; localized de/fr/es/ar; drop stale same-as-en allowlist entry.

  1205. Record stage web 0.1.263 and API 0.1.35 deploy evidence · 3b3c6a4

  1206. Align release notes bundle after fleet tenant-rebuild-app · 4ac3484

  1207. Web 0.1.263, API 0.1.35, refresh release notes bundle · 1a5c4dd

  1208. Onboarding and profile residence keys for de fr es ar · 1b633a7

  1209. Residence country onboarding, culture typeahead, geography reverse API · 07ea43f

    - Gate completion on residenceCountryCode; optional heritage (countriesOfOrigin) - DRY typeahead and ISO country fields; geolocation + server reverse to ISO2 - Regenerate OpenAPI client and zod; Permissions-Policy geolocation for Detect - Fix discovery sort trigger width with named Tailwind (sm:min-w-48 sm:max-w-xs) - Use rect-neutral-outline-inline for Detect (valid ButtonOnlyPresetId)

  1210. Persist residenceCountryCode on profile and discovery DTOs · f2bd3ee

  1211. Add residenceCountryCode to profile and update API schema · 75b9dd0

  1212. Ifeoma-tc stage 0.1.262 / API 0.1.34 closing loop evidence · a9955e0

    Record curl + tenant-live-health + target-stack-logs --scan and release-notes/landing browser checks; note merge-env tenant file revert and deferred multipart profile-picture test.

  1213. Refresh release notes after stage rebuild · a4ffe5d

  1214. Bump web/api versions and refresh release notes · 900dccb

    Advance web-client to 0.1.262 and backend to 0.1.34, then regenerate release-notes data for /release-notes and build-info parity.

  1215. Parse profile picture multipart upload via stream API · 083354f

    Use Fastify multipart request.file() + toBuffer() so uploads from the BFF stream are reliably parsed and validated before storage.

  1216. Improve onboarding readability and move photo upload to top · 004d83f

    Reorders onboarding sections so profile picture is first, adds clearer section grouping, and shows a live avatar/orb preview beside upload controls.

  1217. Refresh release notes after fleet pre-rebuild · 46112fb

  1218. 0.1.261 and release notes data · 01cf64e

  1219. Cover origin ISO ordering for culture selections · ac7f6a8

    Asserts DE collator order, single-region priority, and multi-region union behavior.

  1220. Pass countryLabelLocale in settings and profile menu · 8ff9740

    Cultural identity origin picker labels follow preferred app language in slide-over settings and discovery profile editor.

  1221. Track web-client geography JSON data and unignore in git · d478a43

    Root *.json policy requires explicit allowlist; ISO and region-priority files are static product data (same class as cultureTaxonomyV1.json).

  1222. Locale-driven origin countries and culture-region ordering · 80b9fbb

    Wire Intl.DisplayNames and ordering to the form preferred locale; union taxonomy region priority sets for multiple culture selections. Adds geography helpers and priority map JSON.

  1223. Stage web 0.1.259 onboarding hint i18n evidence · 379c770

  1224. Release notes for i18n onboarding hint 0.1.259 · 7d3c4d7

  1225. Onboarding culture hint matches UI (no self-describe on onboarding) · b3b66f2

    Align onboarding.culture.hint with variant=onboarding: drop self-description from copy; keep keys in sync across en/de/fr/es/ar per i18n policy. Web 0.1.259.

  1226. Stage web 0.1.258 onboarding culture variant evidence · 25fde47

  1227. Release notes for 0.1.258 culture variant · 5d524b8

  1228. Culture fields variant; hide self-describe on onboarding · 6a6dfe5

    Introduce OnboardingCultureFieldsProps variant onboarding|full: onboarding omits the self-describe line; full keeps it for settings and profile edit. Mount the shared culture block in ProfileEditForm so profile save matches visible fields. Semver 0.1.258.

  1229. Stage 0.1.257 and API 0.1.33 cultural identity deploy evidence · fbab67f

  1230. Document why JSON is imported. · 231528e

    Extend /release-notes with the dist hotfix and set apiVersion to 0.1.33.

  1231. Load culture and ISO JSON via imports so dist includes assets · da79c12

    readFileSync paths next to compiled output omitted JSON from the image; static JSON imports let tsc emit files into dist and fix backend-stage unhealthy (ENOENT cultureTaxonomyV1.json) in Docker. Bump API to 0.1.33.

  1232. Release notes for cultural identity 0.1.257 and API 0.1.32 · 7e33dad

    Add the top /release-notes row and align webClientVersion and apiVersion with the deployed module versions.

  1233. Cultural identity onboarding, profile, and settings UI · b3cc3c1

    Add taxonomy-backed culture fields in onboarding and profile edit, settings section, menu and profile summaries, generated client and zod updates, i18n across locales, onboarding completion rules, and a 1x1 fixture for E2E uploads. Bump web-client version to 0.1.257.

  1234. Cultural identity v1 scope; add taxonomy seed script · a982e12

    Document that v1 covers persistence and display only; pairwise matching is deferred. Add an operator script to seed or verify the culture taxonomy data where needed.

  1235. Cultural identity profile fields and taxonomy validation · daf59f9

    Add cultureTaxonomyV1-backed validation, persist culturalIdentity, countriesOfOrigin, and residency on GET/POST /api/profile, and surface them in discovery profile mapping. Bump package version to 0.1.32.

  1236. Add CulturalIdentity and profile origin fields in OpenAPI · eb888b7

    Introduce shared CulturalIdentity, countries of origin, and residency on profile and discovery DTOs. Regenerate Zod helpers for the pipeline and downstream code generation.

  1237. Track culture taxonomy JSON in web-client and backend · aafd48c

    The global *.json ignore excluded shipped cultureTaxonomyV1.json from both runtimes. Add explicit negations for the two static taxonomy files so CI and clones build without missing-asset errors.

  1238. QuestionPhaseBase intro impact modal note · 78496d7

  1239. Release notes from fleet pre-rebuild (0.1.256) · cc59280

  1240. Connection intro impact in info modal · 11c3793

    Add JourneyPhaseImpactInfoSection (BaseModal + glass) and QuestionPhaseIntro.impactPresentation. Connection pass uses infoModal; milestone view stays scannable. Clarify connection intro copy; i18n for impactInfo in en/de/fr/es/ar. Version 0.1.256.

  1241. Release notes from fleet pre-rebuild (0.1.254) · c44faa5

    Regenerated by tenant-rebuild-web-client for ifeoma-tc stage; aligns /release-notes with deployed web 0.1.254.

  1242. Center question-phase impact panel on contentNarrow lane · 7206d12

    Replace ad-hoc max-w-lg glass panels with LAYOUT_BRAND.contentNarrow so copy and impact rows align with the journey medium column. Classic intro impact rows match milestone mobile/desktop stacking. Bump to 0.1.254.

  1243. Connection & reflection milestone intro layout · a2e2043

    Tighter vertical rhythm and horizontal padding for journeyMilestoneBoard intros; single max-w-2xl column for headline, cards, lock, and impact panel. Impact rows stack title/body on small screens; primary CTA matches How it works width and touch targets. Bump to 0.1.253.

  1244. - Stepper: single row with horizontal scroll on narrow viewports; nav max width and padding. · 4d4a339

    - Cards: two columns from md; stacked headers and lock strip below min width; CTA area rhythm. Bump version to 0.1.252.

  1245. C6f87a6d release-notes sync 123ccf58 4757c7d5 · b46a23f

  1246. Release notes from fleet (embed 123ccf58) · 4757c7d

  1247. Release notes from fleet pre-rebuild (HEAD c6f87a6d) · 123ccf5

  1248. Release-notes double-rebuild a3ac4c96 c5a73cfd evidence · c6f87a6

  1249. Release notes from fleet (embed a3ac4c96) · c5a73cf

  1250. Release notes from fleet pre-rebuild (HEAD 8808d51e) · a3ac4c9

  1251. Stage 0.1.251 journey deploy evidence · 8808d51

  1252. Release notes from fleet (embed e80a320e) · 09bdf4c

  1253. Release notes from fleet pre-rebuild (HEAD 05419263) · e80a320

  1254. Journey milestone stepper, bridge cards, phase intros (0.1.251) · 0541926

  1255. Stage loop eb54761e→9a99122e + merge-env revert policy · 8e7df0c

  1256. Release notes from fleet (embed 95d91ee6) · 9a99122

  1257. Release notes from fleet pre-rebuild (HEAD eb54761e) · 95d91ee

  1258. Stage double-rebuild release-notes row 5293d5a9 + landing nav · eb54761

  1259. Release notes from fleet (embed 5293d5a9) · c74f675

  1260. Release notes from fleet pre-rebuild (head 70cc1ca4) · 5293d5a

  1261. Stage /release-notes evidence b0a158d3 + a82d11b embed · 70cc1ca

  1262. Release notes from fleet pre-rebuild (KB a82d11b2 head) · b0a158d

  1263. Mongodb app-infra deploy + mongo-express log evidence · a82d11b

  1264. APP_INFRA sweep evidence and --infra-service usage · a7d9b7a

    - ifeoma-tc stage: traefik tail, elasticsearch watermark INFO, mongo-express cert path - Command block: --infra-service examples, --since 7d vs 168h note

  1265. Clear NODE_EXTRA_CA_CERTS for mongo-express · 2fa51eb

    Merged .env may set NODE_EXTRA_CA_CERTS for app-deployment TLS mounts; mongo-express does not mount that path. Override to empty so Node/OpenSSL does not warn on a missing file.

  1266. Target-stack-logs --infra-service for HOST/APP planes · c35115a

    - Add --infra-service (repeatable) to target-stack-logs and target-stack-logs-levels - Shared _parse_target_stack_log_service_args validates plane vs filters; fail fast before FleetManager init - Pass services= to logs_app_infra via collect_target_stack_logs; extend interface delegates - Unit tests for APP_INFRA filter and plane=all rejection

  1267. Stage evidence KB a98f4885 first on /release-notes · 10e7e4b

  1268. Release notes with KB head a98f4885 (fleet sync) · 0e33570

  1269. Stage 0.1.250 release-notes row order and c983 lag · a98f488

  1270. Release notes JSON after rebuild (10283cda head) · c983f12

  1271. Release notes from fleet pre-rebuild (0.1.250 operator sync) · 10283cd

  1272. Release notes from second fleet pre-rebuild (0.1.250 full git) · 850d994

  1273. Stage evidence for web-client 0.1.250 release-notes parity · 3cb62fb

  1274. Release notes from fleet pre-rebuild (0.1.250) · 269853f

  1275. 0.1.250 and sync release notes (include KB head) · edebabe

  1276. Stage evidence for web-client 0.1.249 admin Debug testid · e787bed

  1277. Release notes from fleet pre-rebuild (0.1.249) · 1212180

  1278. Data-testid on Super Admin Debug tab; 0.1.249 · 6f1f11c

  1279. Stage evidence for web-client 0.1.248 admin access notice · 7d61947

  1280. Release notes from fleet pre-rebuild (0.1.248) · 95f84e0

  1281. Landing notice when admin RBAC denies access; 0.1.248 · 298ed2a

  1282. Stage evidence for web-client 0.1.247 and admin RBAC browser check · fed8f60

  1283. Release notes from fleet pre-rebuild (0.1.247) · 93727f4

  1284. UniverseView operator gate uses PLATFORM_ROLE_ADMIN; 0.1.247 · 835d220

  1285. Stage evidence for web-client 0.1.246 deploy (merge-env --mode) · f034111

  1286. Sync release notes after 0.1.246 KB commit · 5c49b82

  1287. Stage evidence for web-client 0.1.246 · cb109af

  1288. Release notes from fleet pre-rebuild (0.1.246) · d2760da

  1289. 0.1.246 and refresh release notes (includes test tsc fix) · 998df3a

  1290. Type samples as DiscoveryFilter for tsc (remove as const) · 4ac7e95

  1291. Stage evidence for web-client 0.1.245 redeploy · cd3341f

  1292. Release notes from fleet pre-rebuild (0.1.245) · fa5484d

  1293. 0.1.245 and refresh release notes · 71333a1

    Ship latest generated notes bundle and semver for stage redeploy.

  1294. Refresh release notes after 0.1.244 commit stack · 28bf212

  1295. Stage evidence for web-client 0.1.244 discovery list · 1da562d

  1296. Document discovery list two-row filter layout · e0bd262

  1297. 0.1.244 and refresh release notes data · cd7cd0f

  1298. I18n: discovery list refine and remove unused list result keys · b68f7b6

    - Add discovery.page overlap/refine strings (en, de, fr, es, ar) - Remove discovery.list results heading and count keys; update canonical key lists

  1299. Consolidate list chrome with overlap bar and refine popover · c2e197c

    - Add DiscoveryOverlapRefineListRow: overlap control, popover for DiscoveryFilterPanel, list toggle - Centralize countActiveDiscoveryFilters in filterAndSort; align isDiscoveryFilterActive and tests - Remove standalone results header strip from DiscoveryListView; drop always-visible filter panel on list page

  1300. Stage 0.1.243 discovery operator-hint gate evidence · aa883c7

  1301. Show bulk-import / staging operator hint only to platform admins · 5e8b6a9

    DiscoveryEnvironmentHint (Staging or bulk import?…) is for operators; end users see only the standard empty list copy. Gate on session user platformRole. Web 0.1.243; refresh release-notes data.

  1302. Note MCP browser push subscribe limitation vs real Chrome · 31d858f

  1303. Sync release-notes.generated.json (563 entries, post-0.1.242) · 6ef7f8e

    Keeps git log-derived notes aligned after v0.1.242 and follow-up commits; edge image at 0.1.242 embeds the prior bundle until the next web-client semver bump.

  1304. Stage 0.1.242 evidence (release-notes embed after rebuild race) · edb300e

  1305. Release v0.1.242 with release-notes data aligned to git · 7c129f2

    Embeds the post-0.1.241 release-notes.generated.json so stage matches main after the fleet CLI git-log refresh cycle.

  1306. Sync release-notes.generated.json after v0.1.241 deploy (560 entries) · 6409199

  1307. Stage web 0.1.241 deploy evidence (git/image parity) · 6d29616

  1308. Release v0.1.241 and regenerate release notes · ed63912

    Aligns stage image semver with latest git (post-4232e07f) so /api/health and embedded release-notes data match the operator tree after rebuild.

  1309. docs(fleet-kb): append stage 0.1.240 journey deploy evidence (BRAND_VIOLET_HEX import fix). · 4232e07

  1310. JourneyMatchmakingPath color-brand import and useMemo; v0.1.240 · 2a9a14e

    Turbopack resolves question-phase-intro-brand without re-exporting BRAND_VIOLET_HEX; import violet from color-brand. Add missing React useMemo import for typecheck. Regenerate release-notes data for deploy.

  1311. Release v0.1.239 and regenerate release notes data · e61300c

  1312. Linear journey matchmaking path on how-it-works · d7e74b3

    Replace the five-node constellation on the bridge screen with JourneyMatchmakingPath, GlassCard Q&A, bank meta expectations, and compact path on reflection/connection intros. Harden JourneyConstellation/JourneyCircle for reduced motion and honest center affordance. Update orb journey E2E testids and all locale strings.

  1313. Stage settings notifications UI proof and admin route behavior · d32a8a6

  1314. Sync PACKAGE_INDEX after tenant-rebuild-web-client · 1799b64

  1315. Refresh PACKAGE_INDEX after Fleet metadata touch · 1c3358c

  1316. Web Push VAPID validation and operator remediation · 32080eb

  1317. Validate VAPID P-256 key for Web Push · 5dfc845

    - Add parseP256VapidApplicationServerKeyFromUrlBase64 and VapidKeyInvalidError - usePushNotifications: validate key, unsubscribe before subscribe, classify vapid-key-invalid - Extend PushNotificationErrorKind; i18n pushErrorVapidKeyInvalid (en/de/fr/es/ar) - Atomic tests; bump 0.1.238 and refresh release-notes data

  1318. Sync release notes JSON after 0.1.237 stage rebuild · b9c12d5

  1319. Scope chip opens Journey editor instead of clearing storage · 61d6dd5

    - MatchIntentScopeChip navigates to journey?phase=progress&section=session-scope - Journey renders MatchIntentScopeGate for that section; Continue returns to hub - MatchIntentScopeGate optional onAfterContinue (replaces router after save on Journey) - i18n: Adjust CTA + aria/tooltip; release notes gen for 0.1.237

  1320. Correct CLI flags for tenant-live-health and log commands · eae8df7

    - tenant-live-health, target-stack-logs, tenant-suspect-logs: --profile only (no --mode) - app-infra-refresh-traefik-tls, tenant-rebuild-app: --profile only per --help - operator verify-upstream-api: --mode (not --profile); document in app-fleet-cli-commands - Refresh dev-tenant-fleet-diagnostics, AGENT_BEHAVIOUR, stage KB playbooks, 00-MASTER

  1321. Sync release notes JSON after 0.1.236 stage rebuild · dc8e333

  1322. Release notes Activity recomputes from commits, 8 heat bands, weekly trend (0.1.236) · 830f05b

    - Resolve analytics at runtime from entry stats via buildReleaseNotesAnalytics so charts match the commit list; document that new rows need bundle regen. - Add weekly hours trend SVG; open cumulative card by default. - Expand heatmap quantile bins to 8 non-empty steps with a finer violet ramp. - i18n: lead, weekly trend, heatmap legend; tests for resolve helper.

  1323. Sync release notes JSON after 0.1.235 fleet rebuild · 6508199

  1324. ChatContainer uses getChatLayoutColumnGroundStyle (0.1.235) · 79e90ff

    Use the existing design-system helper from chat-messaging-surfaces-brand so the column ground stays a single canonical source (no duplicate hex at the call site). Regenerate release-notes bundle.

  1325. - Resolve chat peer from discovery or connection-scoped profile; show localized peerDataFromConnectionContext when Explore slice has no row (after success). · ba1e25c

    - Resolve chat peer from discovery or connection-scoped profile; show localized peerDataFromConnectionContext when Explore slice has no row (after success). - Localize compatibility dimension radar empty and non-finite admin states; remove unused peerNotInDiscovery key. - ChatContainer: brand ground token, optional peerDataScope notice. - Add buildChatSessionPeerProfileStub + atomic test; refresh release notes data.

  1326. Recharts 3 ChartContainer with positive initialDimension · 782c4e8

    Set ResponsiveContainer initialDimension, minWidth/minHeight, and replace default flex aspect-video root with a block layout + min-w-0 so radar charts do not log width/height -1 in nested flex.

  1327. Sync release notes JSON after fleet rebuild (0.1.232) · d3493c0

  1328. Record web 0.1.232 MatchIntentScopeGate master-detail evidence · 5976ae3

    Add Fleet CLI quick-ref row and agent-rules-changelog entry for the responsive scope picker layout.

  1329. Move recommended Even blend into the left rail; show option checkboxes only in the right column that swaps by active topic. · bdb3558

    Move recommended Even blend into the left rail; show option checkboxes only in the right column that swaps by active topic. Use md+ for side-by-side layout; stack on small screens. Sync active rail with draft scope via groupId (incl. general). Update discovery.scope.groupNavAria across locales; regenerate release notes data.

  1330. Stage 0.1.231 closing-loop evidence in Fleet CLI quick ref · 7b2edc2

    Expand ifeoma-tc 0.1.231 row with curl, tenant-live-health, target-stack-logs, browser, and ops caveats. Log the KB refresh in agent-rules-changelog.

  1331. Sync release notes JSON after fleet rebuild (0.1.231) · 5f233af

  1332. 0.1.231 evidence; unified app.people other-person copy · 6aa95db

  1333. App.people.displayNameWhenUnknown for other-person label; web 0.1.231 · f14f122

    Unify Member/Someone/Peer/Them into one message key (en Member; localized in de/fr/es/ar). Wire Discovery, universe 2D+3D, Chats, private chat, dual radar, admin match table. Remove redundant message keys; add appPeopleMessageKeys. Regenerate release notes.

  1334. Sync release notes JSON after fleet rebuild (0.1.230) · bff26a3

  1335. Stage 0.1.230 evidence; Discovery search input aria · ba6599c

  1336. Discovery list uses localized input aria (bio/interests) instead of inbox copy. · fd0641b

    Chats keeps default ui.searchBar.ariaSearchConversations. Regenerate release notes.

  1337. 0.1.229 and regenerate release notes data · 2357f28

  1338. Align Discovery list filters with Chats ListFilterToolbar · 4ffeae9

    Extract ListFilterToolbarRow to design-system; chats and discovery list share scope row, SearchBar tray, and sort Dropdown. APP_LIST_FILTER_CONTROL unifies select/input chrome. DiscoveryFilterPanel uses glassToolbar for extended filters; list heading uses mediumColumn typography. i18n: discovery.page.listFilter* keys.

  1339. Stage 0.1.228 discovery full-bleed layout evidence · f374832

  1340. Sync release notes JSON after fleet rebuild · ea3531b

  1341. 0.1.228 and regenerate release notes data · abfd9a7

  1342. Full-bleed universe behind bottom nav, list scroll pad · 899eb4b

    Use pb-0 on (pages) main for /discovery* so WebGL+gradient fill the shell to the fixed nav (removes the darker empty band from main padding). Add APP_SHELL_SCROLL.discoveryListScrollPadBottom for list/loading/error LayoutGrid so content still clears AppNav. Document in layout-brand, README, globals.

  1343. Pointer to discovery universe positioning and stage 0.1.227 KB evidence · 890eee3

  1344. Stage evidence for web-client 0.1.227 discovery universe layout · a746bdc

  1345. Sync release notes JSON after fleet rebuild · ec0d62e

  1346. 0.1.227 and regenerate release notes data · c93db31

  1347. Dynamic intra-sector spread and peer separation · 1fef359

    Peers in the same dimension bucket get equal angles on a sector fraction that widens with bucket size; dynamic separation strength scales with total peer count. Explicit peerSeparationStrengthPct: 0 disables ring separation.

  1348. Sync release-notes after stage web rebuild · 304a32b

  1349. Add discovery toolbar overlap filter (solo signal axes) · 7c7369d

    - Add matchingAxisAlignment (merge peer partials, max min(you,peer) per axis) shared with DualRadar - filterDiscoveryProfilesByMatchingSignalOverlap + Overlap only switch after scope in list and universe - Disable switch until GET /api/profile matchingSignalDimensions; reset on profile error - i18n en/de/es/fr/ar, discovery page message keys, web 0.1.226, release notes, AGENTS.md

  1350. Sync release-notes bundle after fleet rebuild · e0e2cf1

  1351. Use inbox thread CTA on Chat tab list, keep Open Conversation for Explore · 3e07e86

    ConversationMatchCard (conversations list under Chat) now uses chats.page.inboxOpenThread so connections.page.openConversation only appears on ConversationStarters (Explore / universe / connection detail). Bumps web to 0.1.225, regenerates release-notes data, documents the split in AGENTS.md.

  1352. Match intent scope UI layout; tenant-live-health example with --tenant · bdce287

  1353. Master–detail layout for match intent scope · 3b37863

    - Replace 2-column grid of accordions with a category rail + options panel. - Stack vertically on small viewports; side-by-side from lg (max-width rail). - Add discovery.scope.groupNavAria for the category nav landmark (en/de/es/fr/ar). Bump web-client to 0.1.224; regenerate release-notes data.

  1354. Note short post-deploy window before /api/health is 200 · 1a04e7a

  1355. Refresh French profile and app-shell copy · b0091bc

    - Sentence case and clearer error/welcome/notFound strings; tabYou → Vous. - profile_looking_for → Vos intentions (distinct from EN). Bump web-client to 0.1.223; regenerate release-notes data.

  1356. Update locale copy and ICU contract for landing hero · fc00ac9

    - Refresh EN/DE/ES/AR message bundles (tonal and UX copy). - Ensure landing.hero.subtitle and journey.explainer.introOrder keep {appName} where required by i18n tests; fix ES/AR hero subtitle branding. - fr.json: dropped a corrupt partial merge; keep fr aligned with origin until a reviewed FR sweep lands (JSON structure preserved). Bump web-client to 0.1.222; regenerate release-notes data.

  1357. Document connections query invalidation after mutations · 2d7307e

  1358. Refetch connections list after workflow mutations · 3ebe0b9

    - Back useConnections with React Query so GET /api/connections can invalidate. - invalidateConnectionCaches also invalidates [connections] for inbox parity. - Bump web-client to 0.1.221; regenerate release-notes data.

  1359. Note tenant-rebuild-web-client --skip-release-notes-refresh · a908f59

  1360. 0.1.220 and regenerate release-notes data · 53697ce

  1361. I18n: peer profile overlap states and preview quote formatting (en, de, es, fr, ar) · 554c185

  1362. Discovery list match-row chrome, universe View profile, peer overlap chart · 239c519

    - Extract shared MatchPercentRing; reuse in chats and discovery list rows - Add CompatibilityDimensionsDualRadar and PeerProfileSheet overlap section - Explicit viewer signal states (loading / error / missing) without zero fallbacks - List: onViewProfile; universe tooltip secondary View profile; i18n quote via ICU

  1363. Prevent stacked locale segments in language-picker URLs · 653b4b0

    Root cause: assignWithLocalePreservingPath passed usePathname() through withLocale without stripping existing /{locale} when the hook surfaced a prefixed path, yielding /de/en/landing after multiple switches. - Loop-strip all leading locale segments in pathWithoutLocalePrefixForIntlRouter and pathnameWithoutLeadingLocale - Pipe picker paths through pathWithoutLocalePrefixForIntlRouter before withLocale - proxy: 307 to collapse /{a}/{b}/… when a and b are both locales (bookmarks) - Vitest coverage for stacked paths…

  1364. Sync release-notes bundle after fleet web rebuild · 2427822

  1365. Bump 0.1.218 and regenerate release-notes data · 5cc0fc1

  1366. Universe guide modal-only, clearer copy and layout · 2e89825

    Remove the on-canvas glass guide panel so the WebGL scene stays clear. Universe guide remains on the toolbar Info (ⓘ) modal: larger BaseModal, prose in UniverseDiscoveryHeadlines, readable tabs and list bullets in UniverseGuideTabs. i18n: summary line works for scene/List; refreshed guide bullets in en/de/es/fr/ar.

  1367. Note fleet post-rebuild release-notes.json refresh · 10d27bb

  1368. Refresh release-notes bundle after fleet web rebuild · 279a42a

  1369. Bump 0.1.216 and regenerate release-notes data · 6a4b917

  1370. Conversations inbox lists post-request peers only · 82dcb48

    Introduce isPeerVisibleInConversationsInbox in connection validation (DRY). ChatsPageClient filters discovery and connection-stub rows; allUserIds matches the inbox. ConversationMatchCard drops Request to Connect (Discovery-only CTA). Add atomic tests for inbox eligibility.

  1371. Refresh release-notes bundle after fleet preflight · 1e41bcd

  1372. I18n scene prototype — disk reach vs peer separation · b8d94bd

    Localize Hub & spheres section; rename disk spread control for clarity; add hint lines under disk reach and peer separation sliders. RowRange optional hint. Bump web to 0.1.215; refresh release notes data.

  1373. Gate live-stack atomics behind E2E_ATOMIC_LIVE · 1429f64

    Plain vitest run skips infra TCP/Zitadel checks and HTTP atomics that expect Next/API unless E2E_ATOMIC_LIVE is set (1/true/yes). CI still uses vitest.offline.config.ts; comment documents the flag.

  1374. Document landing Hero safe-center first fold · 38f3569

  1375. Set version 0.1.214 and refresh release notes bundle · 7dca7c8

  1376. Landing Hero safe-center fold and compact narrow portrait · d5f159b

    Add LANDING_HERO_FOLD_SECTION/INNER tokens (100dvh + CSS safe center); tighten badge/headline/orb/ring spacing and orb diameter on short narrow viewports; document in Hero and orb-brand. Bump web to 0.1.214.

  1377. Universe toolbar info opens shared guide modal · dc409e7

    Add Info control after the universe/list toggle; BaseModal shows screen context (UniverseDiscoveryHeadlines) plus UniverseGuideTabs, DRY with the bottom-left dock via shared tab state and distinct aria id prefixes. Introduce universeModeStraplineKey and headline component for RevealHeader. i18n: infoModalTitle, infoButtonAria, infoButtonTooltip in all locales. Bump web to 0.1.213; refresh release-notes data.

  1378. Refresh release-notes bundle after fleet preflight · 8d244ae

  1379. Add /[locale]/release-notes and DRY server module · bd82a64

    Expose release notes at locale-prefixed URLs for SEO and deep links; keep unprefixed /release-notes as the marketing canonical. Share body and metadata via ReleaseNotesPageServer. Bump web to 0.1.212; extend e2e smoke.

  1380. Sync ifeoma-tc package index · 568d353

    Update PACKAGE_INDEX.yaml to match current tenant artifact layout.

  1381. Skip atomic backend suites when internal auth is disabled · 16796af

    Use describe.skipIf(!isInternalAuthEnabled()) for integration and UI atomics that require a configured internal auth target.

  1382. Universe WebGL labels, tooltips, and peer ring layout · c97fcb5

    Refine canvas2d painting, peer tooltip placement, prototype dock, and positioning helpers; add tests for ring separation and scene draft.

  1383. Chats list layout, match ring, and connection CTAs · bc43783

    Bump web to 0.1.211. Refine ChatsPageClient loading/aria, two-row toolbar with full-width scope chip, group tabs glow, and match cards with percent ring plus request/accept states. Add i18n keys and design tokens; refresh release notes.

  1384. Stack title above search+sort, localize list sort, harden sorter (web 0.1.200) · 4e2631e

    - Chats list header: always column layout so Conversations + count sit above the glass toolbar (search, scope chip, sort) on all breakpoints; removes md:flex-row beside-title pattern. - Replace hard-coded SORT_OPTION strings with chats.page.sort.* in all message bundles; CHAT_LIST_SORT_SPECS in chatSorting carries id+icon only. - Dropdown uses sortFilterAriaLabel; extend chatsPageMessageKeys for static i18n parity tests. - sortConversations: throw on unknown SortOption instead of returning unsorted data. sort/matc…

  1385. Refresh release-notes bundle after AGENTS docker note · f7ff7d8

  1386. Document web-client-stage docker name conflict on rebuild · ea4d9c7

  1387. Center Hero in viewport with my-auto and dvh (web 0.1.199) · 4d838bc

    - Apply safe centering: flex min-h-100dvh + inner column my-auto; clear auto margins on max-height/short-landscape for scroll without clipping - Tighten section padding, safe-area for language picker, optional tall-portrait nudge - Document pattern in file header; bump 20_web-client to 0.1.199

  1388. Session scope UX, OpenAPI + dev-sync watch (web 0.1.198, fleet 1.0.2) · fed0c0d

    Web-client - Remove global MatchIntentScope loading gate from AppPagesLayout; users reach the app shell without blocking on scope selection. - Surface active session scope on Profile (read-only card + CTA to Discovery) and as contextual GlassCard banners in ChatView for pre-establishment stages. - Release notes: sync Activity/Notes tab with URL on popstate (back/forward); extend bundle schema/types and atomic tests; add Playwright e2e for tab/URL sync. - Connections: pass optional matchScope query; journey hub/how…

  1389. Cron route returns uniform 401 + boots a one-shot warn instead of leaking deployment state via 500 (0.1.31) · d7030eb

    The /api/cron/recalculate-all-matches handler used `if (!env.CRON_SECRET) throw new Error("CRON_SECRET environment variable is not set")` which surfaced as a generic 500 with internal-server-error body for anyone probing the route on a backend that did not have the secret configured. That distinguished "deployment lacks the cron secret" from "wrong cron secret" — leaking deployment state to unauthenticated probes (the route is reachable from the public internet for external cron orchestrators per its docstring). R…

  1390. Refresh release-notes bundle to include 0.1.196 AGENTS.md commit · 87d0d0e

  1391. Point AGENTS.md at the typed-error → HTTP routing pattern doc (0.1.196) · c74f5f0

    Per the user spec ("memorize always update / refresh agent rules kb"), adds a "Where to look first" entry that names the canonical src/lib/http/typed-error-routing.md doc and summarises the rule a future agent should follow: - typed Error subclass + replyIf<Type>(reply, error) helper + one-line route catch - never inline `if (error instanceof XxxError)` or error.message.includes(...) in a route catch — both anti-patterns were responsible for the six bugs fixed across loops 8-12 Also confirms in-loop infra health a…

  1392. Refresh release-notes bundle to include 0.1.195 docs commit · a243450

  1393. Canonical typed-error → HTTP routing pattern (0.1.195) · 8bf0044

    Captures the pattern that was applied five times across loops 8-12 of this work — every fix had the same shape (service throws typed Error, route catches via a `replyIf<Type>(reply, error)` helper before the generic 500 fallback). The doc now lives next to the helpers it describes (`src/lib/http/typed-error-routing.md`) and references all nine canonical helper modules so future contributors can: 1. See the three pieces (typed error + helper + one-line route catch) with concrete code samples. 2. Know which existing…

  1394. Typed UserRegistrationDuplicateEmailError replaces fragile message-includes path (0.1.30) · 6862709

    Same audit pattern as the discovery refactor in commit 8d9366a4. The POST /api/users/register catch handler used errorObj.message.includes("already exists") || errorObj.message.includes("duplicate") to map 409. Two problems with that: 1. Any unrelated upstream Error whose message happened to contain the word "duplicate" (e.g. an HTTP layer reporting a duplicate header) would have been silently mis-mapped to "Account already exists" 409. 2. UserRegistrationService throws `new Error("An account with this email alrea…

  1395. Scope storage failures emit visible warnings (no silent fallbacks) (0.1.193) · 9406435

    Per the user spec ("NO silent fallbacks, NO defensive code BUT proper error messaging in an architectural approach"), every catch in matchIntentScopeStorage now surfaces the cause through a stable [matchIntentScopeStorage] console.warn prefix instead of a bare catch { return null; }. The function contract still returns null on failure so callers continue with React-state-only behaviour for the current tab — the change is purely making the cause visible to operators in the browser console (and by extension the admi…

  1396. Typed discovery client errors replace fragile error.message string-matching (0.1.29) · 8d9366a

    Same shape as the SELF_PEER_FORBIDDEN bug fixed in commit fdbc6b58 and the user-block / chat-cursor mappings closed in 8ff02f9b. The GET /api/discovery/profiles/:profileId catch handler used error.message.includes("Match not precomputed") / error.message.includes("Profile not found") to map 404 — pure string match on a free-text Error message that drifts the moment a service edits its wording. The self-row throw added in the self-peer rejection work never matched these strings and silently surfaced as 500. Refacto…

  1397. Refresh release-notes bundle to include 0.1.192 commit · 3e02f5c

  1398. Turn the chronic discovery-scope i18n audit failure into a tracked translation backlog (0.1.192) · 2a89fe0

    Background: messagesNonEnMustDifferFromEn has been the only chronically red web-client test for the entire scope-picker feature lifetime. Every loop has documented "out of scope, needs translation pass". The 38 offending keys (audited via vitest output → /tmp/i18n-offenders.txt) all fall under one feature: discovery.scope.* — the gate header, four category labels + descriptions, twelve scope-option leaf labels + descriptions. None are technical labels or proper nouns; all are real user-facing prose that needs nati…

  1399. Same shape as the SELF_PEER_FORBIDDEN bug fixed in commit fdbc6b58. · 8ff02f9

    A focused audit of every typed Error class thrown from backend services turned up two more routes that fell through to a generic 500 instead of mapping the typed error to its canonical HTTP status: 1. POST /api/users/:userId/block swallowed UserBlockPeerNotFoundError as 500 even though the helper replyIfUserBlockClientErrors (which sends 404 + USER_BLOCK_PEER_NOT_FOUND) already existed in lib/safety/userBlockErrors.ts. The route now calls the helper before the generic 500 fallback. 2. GET /api/chat/transcript-expo…

  1400. E2e regression spec for self-peer rejection across all 3 routes (0.1.190) · 4b0e72c

    Permanent regression coverage for the SELF_PEER_FORBIDDEN contract. The spec walks the existing magic-link HTTP-only auth path (auth-registration-http-api.spec.ts pattern), reads the viewer's authUid from GET /api/profile, then exercises the three routes that the service layer guards via assertDistinctPeer: - POST /api/connections/request-conversation { toUserId: self } - POST /api/connections/request-chat { toUserId: self } - GET /api/connections/stage?otherUserId=self Each call must return HTTP 403 with body tra…

  1401. Every connection route maps ConnectionTransitionError consistently (0.1.27) · fdbc6b5

    GET /api/connections/stage, POST /api/connections/cancel-request, and DELETE /api/connections/:connectionId previously fell through to a generic 500 with internalServerErrorPayload when the service layer threw a ConnectionTransitionError. Five other connection routes already mapped the error to the canonical 403/409 JSON body via connectionTransitionHttp; the inconsistency surfaced after the SELF_PEER_FORBIDDEN guard landed because hitting /api/connections/stage?otherUserId=<self> returned 500 instead of 403 — pro…

  1402. Refresh release-notes bundle to include 0.1.189 commit · 63681a3

  1403. Single canonical scope option lookup + explicit expired state (0.1.189) · b20a538

    DRY: extract MATCH_INTENT_SCOPE_OPTION_BY_ID and a typed matchIntentScopeOptionTitleKey() accessor in the matchIntentScope module. MatchIntentScopeChip and MatchIntentScopeOperatorPanel both consumed the same Map locally — three separate re-builds, one per consumer. The shared helper removes that duplication and gives every future consumer a single typed entry point. Three new vitest cases lock the contract: every catalog id resolves, the helper falls back for unknown ids, and the canonical map size matches the ca…

  1404. Refresh release-notes bundle to include 0.1.188 commits · 15c4602

  1405. Admin Debug tab surfaces match intent scope state for operators (0.1.188) · 031a157

    Adds MatchIntentScopeOperatorPanel — a read-only panel inside DebugSettingsTab that shows the live state of the persisted matchIntentScopeStorage record for the current browser session: active scope id + translated title, chosenAt timestamp, lastActivityAt timestamp, and a TTL-remaining countdown that turns amber inside the last 30 minutes. Polls every 30 seconds and on visibilitychange so the countdown stays fresh without a full page refresh. The panel lives in features/discovery (next to its data source) instead…

  1406. Conversation group tabs gain native tooltip + aria-describedby · 02f5d1b

    Each tab in ConversationGroupTabs now carries the matching chats.groups.<id>.description as both a native browser tooltip (title attr, sighted hover) and a visually hidden aria-describedby span (screen reader secondary label after the tab name and count). The "All" tab uses chats.groups.all.description, the per-group tabs reuse GroupMetadata.descriptionKey — the same keys the deleted vertical accordion read, so no new translations are needed and the dormant copy gains a real purpose again.

  1407. Fix universeSceneCameraDebug expectation + extend chats parity list (0.1.187) · 3d79630

    The universeSceneCameraDebug "fills pinch from defaults" test asserted the old idle default (0); the canonical default has since moved to 100 and the test drifted. Reference DEFAULT_SCENE_CAMERA_DEBUG.inputMult.{pinch,idle} directly so the test stays correct under future default changes — same contract under test, no rigid magic numbers. Extend CHATS_LIST_GROUPS_MESSAGE_KEYS_FLAT to include the new tab strip keys (chats.groups.tabsAriaLabel, chats.groups.all.title, chats.groups.all.description) so the locale-parit…

  1408. WAI-ARIA tablist keyboard navigation on ConversationGroupTabs · 20e3ded

    Implements the WAI-ARIA Authoring Practices "Automatic Activation" tablist pattern: ArrowLeft / ArrowRight cycle through the tabs (with wrap-around), Home / End jump to the first / last tab, and roving tabIndex={isActive ? 0 : -1} keeps a single tab in the page Tab order so screen-reader and keyboard-only users follow the same navigation model the rest of the app uses. Focus management is split from the React layer: nextTabForKey() is a pure helper that maps (orderedIds, currentId, key) -> next id (or null when th…

  1409. Refresh release-notes bundle to include sign-out lifecycle commits · 910119f

    Re-run of npm run generate:release-notes after deployment picked up the two preceding commits (lifecycle bus + toolbar empty-slot fix) so the in-app /release-notes page lists them. Same payload the deployed image already ships — this commit only resolves working-tree drift introduced by the fleet-driven prebuild.

  1410. Collapse empty toolbar scope slot + separator (0.1.186) · 5c1eb07

    When MatchIntentScopeChip returns null (status === "loading", or scope is unset on /chats), the parent scope wrapper and its trailing vertical separator used to leave a padded empty slot + a floating divider in the toolbar. Both DiscoveryToolbarRow and ChatsToolbarRow now use Tailwind's peer + empty pseudo pattern so the wrapper collapses on `:empty` and the separator hides via `peer-empty:hidden`. Pure CSS — no React state coupling between the chip and its parent. Bumps web-client to 0.1.186 and refreshes release…

  1411. Client session-lifecycle bus drops scope choice on sign-out · 82428b2

    Adds a tiny dependency-free event bus in lib/clientSession/sessionLifecycle so any feature that caches per-user state in localStorage / sessionStorage can register a cleanup callback through onClientSignOut(). The auth provider calls emitClientSignOut() as the first step of its sign-out path so the local cache is reset even when the network call fails or the NextAuth redirect never happens. The match intent scope provider subscribes its clearMatchIntentScope helper on mount, so the next user on a shared device can…

  1412. Center journey question screens on mobile + reset shell scroll on intro/index transitions · 4357b40

    The reflection and connection question screens looked top-pinned (and earlier versions clipped the Previous-button above the viewport) on 540x960. Two contributing causes: 1. The questions branch of `QuestionPhaseBase` carried a nested `overflow-y-auto` scroller on its `LayoutGrid` and a `[@media(max-height:760px)]:justify-start` override that defeated the safe-centering pattern just introduced in `LayoutGrid`. Removed both so the shell `<main>` owns scroll and the inner column actually centers via `my-auto` when …

  1413. Expose scope chip in universe view + allowlist new i18n keys (0.1.185) · 250fde3

    UniverseView now passes MatchIntentScopeChip into DiscoveryToolbarRow.scopeSlot so the active session scope and one-click "Change" affordance are visible from the default discovery surface (the 3D universe), not just the list view. The chip rides the same toolbar as the universe / list view toggle and inherits the existing glass surface tokens, so no new ad-hoc styles are introduced. The same-as-en i18n audit allowlist (i18nSameAsEnPolicy) gains the new keys introduced in this work — chats group tabs / card aria l…

  1414. Remove orphaned ConversationGroup component and refresh agent KB · 02afac2

    The vertical accordion ConversationGroup design-system component is no longer used now that ChatsPageClient renders ConversationGroupTabs above a flat list. Delete the file and update the design-system list/ README to point readers at the new chats-tabs component. AGENTS.md gains a note that operator redeploy-stage works end-to-end with --no-pre-teardown (the bare command still hits the FleetPublicInterface container_down KeyError) and a target-stack-logs --plane all snippet for log retrieval (target-container-log…

  1415. Bump web-client to 0.1.184 and backend to 0.1.26 with regenerated release notes · 253e2ad

    Cuts a stage build with the new self-peer rejection (backend), the scope picker accordion + checkboxes + 12h TTL persistence + top-bar chip (web-client), and the chats list horizontal group tabs + one-line ConversationMatchCard. Release-notes JSON regenerated so the in-app /release-notes page reflects the new commits and surfaces both bumped semvers next to the unchanged Cloud (fleet manager) version.

  1416. I18n: add scope tooltips, top-bar chip, conversation tabs, and card aria labels · 33c4020

    discovery.scope.groups.{romantic,professional,social,support}.tooltip plus discovery.scope.groups.tooltipAriaLabel back the new Info-icon tooltips on the gate. discovery.scope.topBar.{prefix,change,groupAriaLabel,tooltip, changeAriaLabel} drive the new MatchIntentScopeChip in /chats and /discovery toolbars. discovery.scope.defaultPresetBadge is the small "Default" pill on the recommended Balanced row. chats.groups.tabsAriaLabel + chats.groups.all.* drive the new ConversationGroupTabs strip. chats.page.cardAriaLabe…

  1417. Chats list horizontal group tabs and one-line conversation card · c88e9f7

    ChatsPageClient renders ConversationGroupTabs (an "All" tab plus one tab per non-empty ConversationGroup with its accent color and item count) above a flat priority-ordered list, replacing the previous vertical stack of collapsible group accordions. The tab strip auto-snaps back to "All" when the currently selected group becomes empty so the user never lands on an empty pane while items still exist. ConversationMatchCard collapses to a single horizontal row using the new shared MATCH_CARD_ONE_LINE_* tokens in matc…

  1418. Scope picker accordion + checkboxes, top-bar chip, 12h TTL persistence · 3260c45

    Match intent scope persistence moves from sessionStorage to a versioned JSON record in localStorage with a 12-hour inactivity TTL. The provider heart-beats lastActivityAt every five minutes and on visibilitychange so an interactive session does not silently fall through the gate, then re-gates the user when the bump returns null. clearMatchIntentScope is exported for the auth signout handler. Scope picker UI: each category becomes a native <details> accordion that auto-opens when it contains the current draft sele…

  1419. Reject self-peer connections and align match enrichment query · a658ccb

    Defence-in-depth in ConnectionService: bulk peer get-or-create silently drops self ids so a stray self entry mixed in with real peers does not blow up Discovery, while explicit mutating operations (request-conversation, request-chat, respond-*, end-connection, get-stage) raise a 403 ConnectionTransitionError with transitionCode SELF_PEER_FORBIDDEN that routes already surface via the shared connectionTransitionHttp mapper. DiscoveryQueryService drops rows whose resolved peer authUid equals the viewer (warn-logged) …

  1420. Mobile-safe vertical centering in LayoutGrid + journey intro · 3832e36

    LayoutGrid `verticalAlign="center"` previously used `min-h-full flex flex-col justify-center`. When inner content was taller than the viewport, justify-center overflowed equally above and below the scroll origin, pushing headings above the visible area on short mobile viewports (e.g. 540x960). Users could not scroll up to recover the heading because the outer scroller was already at scrollTop=0. Switch to the "safe centering" pattern: keep `min-h-full flex flex-col` on the outer wrapper and apply `my-auto` to the …

  1421. Refresh discovery and chat contract updates · 90f5d9e

    Consolidate the current discovery/chat UI, backend validation, locale copy, and regenerated API artifacts into one committed state so the stage build matches the working tree.

  1422. Regenerate release-notes JSON + KB note for /not-found localization · 1e8a995

    Refresh after deploying web 0.1.161 (cookie-driven 404 locale) and web 0.1.162 (drop · {appName} suffix to prevent title.template duplication). KB documents the pattern: when a metadata key feeds into a Next title.template, never include {appName} in the key — the template owns the suffix.

  1423. Drop duplicate '· {appName}' from notFound.metaTitle (Next title.template appends it) (0.1.162) · 1411a85

    After the 0.1.161 fix, stage still rendered: <title>Page Not Found · TrueConnection | TrueConnection</title> Brand name printed twice — once from the message key (`· {appName}`) and once from Next's `title.template` (`%s | TrueConnection`) inherited from `defaultMetadata`. Fix: stripped `· {appName}` from `app.notFound.metaTitle` in all five locale bundles. The keys now hold the bare page name only ("Page Not Found", "Seite nicht gefunden", "Page introuvable", "Página no encontrada", "الصفحة غير موجودة"); Next's t…

  1424. Localize 404 page (cookie-driven locale, drop force-static) (0.1.161) · 457099f

    Curl probe across locales surfaced an i18n + a11y regression on the root 404 page: /en/this-does-not-exist → <title>Page Not Found - 404 | TrueConnection</title> /de/non-existent → <title>Page Not Found - 404 | TrueConnection</title> ← English /ar/missing → <title>Page Not Found - 404 | TrueConnection</title> ← English …body text "Page Not Found" repeats in English on every locale. Two impacts: - Screen readers announce <title> on every navigation; a French/Arabic visitor who hits a stale link hears English on eve…

  1425. Regenerate JSON after stage rebuild (sitemap + classifier fixes) · d3f87e2

    Refresh of release-notes.generated.json picks up the latest pushed commits (web 0.1.159 capture-callback rewrite, web 0.1.160 sitemap /release-notes coverage, plus the chore + docs commits) so the public /release-notes page reflects the deployed stage build.

  1426. Regenerate release-notes JSON + KB note for sitemap /release-notes coverage · d9088ab

    Refresh after deploying web 0.1.160 (sitemap now lists /release-notes). KB documents the unprefixed-route trio pattern: when adding a new entry to UNPREFIXED_ROUTES, also add a sitemap append + a guardrail-test assertion so search-engine discovery, link-emission rules, and sitemap coverage stay in sync.

  1427. curl + grep-count probe of stage sitemap showed: total <url> entries: 15 /release-notes entries: 0 /landing entries (per-locale): 30 · 5919ab1

    curl + grep-count probe of stage sitemap showed: total <url> entries: 15 /release-notes entries: 0 /landing entries (per-locale): 30 Per-locale roots / landings / sign-in were correctly enumerated, but the unprefixed `/release-notes` public route was missing entirely. Search engines could only discover the changelog via the footer link from a landing page — sitemap discovery never surfaced it. The page is the canonical product changelog with one entry per shipped commit; missing it from the sitemap directly hurts …

  1428. Regenerate release-notes JSON + KB note for setUncaughtExceptionCaptureCallback rewrite · 6b3d3f7

    Refresh after deploying web 0.1.159 (third-time-fixed: ECONNRESET classifier now uses Node's setUncaughtExceptionCaptureCallback which replaces the EventEmitter pathway entirely, fully suppressing Next's bare ⨯ uncaughtException printer that was added by the framework after register() ran). KB documents the pattern (capture-and-replay misses listeners added later in the boot sequence) and the backend-security sweep findings (cookies hardened, log redaction working, no PII leaks).

  1429. Switch ECONNRESET classifier to setUncaughtExceptionCaptureCallback (suppresses Next's bare ⨯) (0.1.159) · cc10a90

    Stage logs at web 0.1.158 *still* showed both: {"source":"instrumentation","event":"client_socket_abort","severity":"warn",…} ← my classifier ✓ ⨯ uncaughtException: Error: aborted at ignore-listed frames { code: 'ECONNRESET' } ← Next's printer ✗ Two-line bug per harmless peer disconnect persisted across the 0.1.154 and 0.1.157 attempts. Both used `process.on('uncaughtException')` and captured the listener list at install time. Root cause: **Next.js installs its `⨯ uncaughtException` listener during HTTP server sta…

  1430. Record X-XSS-Protection fix + Traefik middlewares.yml structure trap · c4953fe

    Documents the OWASP 2026 guidance for X-XSS-Protection (deprecated; set to 0), the indentation trap with customResponseHeaders (must live inside the headers: block), and the diff-test pattern for traefik_config.py changes (so future operators verify YAML shape before redeploying).

  1431. Traefik security-headers middleware emits X-XSS-Protection: 0 (deprecated header) · d733985

    Curl probe of stage response headers showed `X-XSS-Protection: 1; mode=block`, which per OWASP 2026 guidance is actively *harmful*: the legacy IE XSS Auditor (the only consumer that ever processed the header) had known bypass vulnerabilities that could turn a missing XSS into a real one; modern browsers (Chrome 78+, Firefox, Safari) do not implement the header at all. CSP `script-src 'self' …` (set by the web-client) is the modern XSS mitigation. Fix: in `app-pipeline/common/traefik_config.py::TraefikMiddlewareCon…

  1432. Regenerate release-notes JSON + KB note for localized meta description + ar_SA + X-Powered-By · cc949df

    Refresh after deploying web 0.1.158 (localized <meta description> + og:description across all 5 locales, fixed invalid og:locale ar_AR → ar_SA, removed X-Powered-By: Next.js header). KB documents the curl evidence per locale (de/fr/es/ar all native) and the OG locale country-code rule (territory must be where the language is spoken; ar_AR was Argentina, not Arabic).

  1433. Localize <meta description> + og:description, fix invalid og:locale ar_AR, drop X-Powered-By (0.1.158) · 75a5578

    Continuing the localized-metadata sweep from 0.1.156. Curl probe of `<meta name="description">` and `<meta property="og:description">` across all five locale roots showed identical English on every locale: /en /de /fr /es /ar: <meta name="description" content="Discover meaningful connections based on shared values and authentic compatibility. Join TrueConnection to find your true match through our unique value-based matching system."/> <meta property="og:description" content="Discover meaningful connections based …

  1434. Regenerate release-notes JSON + KB note for localized <title> + classifier fix · 7e5b209

    Refresh after deploying web 0.1.156 (localized landing/layout titles for SEO + a11y) and web 0.1.157 (instrumentation classifier suppresses Next's duplicate ⨯ uncaughtException line via captured-listeners replay). KB documents the per-locale <title> evidence (de/fr/es/ar all native) and the listener-replay pattern that preserves framework error logging for real bugs while suppressing it for harmless socket aborts.

  1435. Instrumentation classifier suppresses duplicate ⨯ uncaughtException from Next's own logger (0.1.157) · 07c2f35

    Stage logs at api 0.1.156 still showed `⨯ uncaughtException: Error: aborted` **plus** the structured `client_socket_abort` warn from my classifier (introduced in 0.1.154). Two log lines per harmless peer-disconnect — the classifier's whole point was to replace the bare `⨯` line, not duplicate it. Root cause: `process.on('uncaughtException')` *adds* a listener; it does not replace existing ones. Next.js attaches its own listener at server start that prints the bare `⨯ uncaughtException` line. My classifier ran (war…

  1436. Localize <title> on /[locale] + /[locale]/landing for SEO + a11y (0.1.156) · 9085c43

    Browser-MCP probe of /de, /fr, /es, /ar plus `curl ... | grep <title>` across all five locales surfaced an SEO + accessibility bug: /en: <title>TrueConnection - Authentic Connections Through Shared Values | TrueConnection</title> /de: <title>TrueConnection - Authentic Connections Through Shared Values | TrueConnection</title> /fr: <title>TrueConnection - Authentic Connections Through Shared Values | TrueConnection</title> /es: <title>TrueConnection - Authentic Connections Through Shared Values | TrueConnection</ti…

  1437. Regenerate release-notes JSON + KB note for npm audit + SSR deep-link fix · 26cdbd1

    Refresh after deploying web 0.1.155 (uuid override + ?view=activity SSR resolve). KB documents the npm audit analysis (advisory non-applicable because next-auth only calls uuid.v4(), but overridden to keep audit clean) and the no-flash deep-link fix (browser-MCP evidence shows Activity tab selected on first paint with no Notes flash).

  1438. SSR-resolve ?view=activity deep-link so Activity tab paints with no Notes flash (0.1.155) · e26671f

    Visual smoke via browser MCP on `https://stage.trueconnection.app/release-notes?view=activity`: the page rendered with `Notes [selected]` for one paint, then flipped to `Activity [selected]` once the client `useEffect` ran. Annoying flash on every shared Activity link. Root cause: `ReleaseNotesPageView` defaulted `useState(NOTES_VIEW)` to keep SSR and client hydration in sync, then ran a `useEffect` to read `searchParams.get('view')` and switch to Activity. Server HTML always said Notes; client switched after firs…

  1439. Pin uuid >= 14 via npm overrides to clear GHSA-w5hq-g745-h8pq (audit-only) · e6f6407

    `npm audit` reported 2 moderate transitives: `next-auth@4.24.14 → uuid@8.3.2` (GHSA-w5hq-g745-h8pq — missing buffer bounds check in uuid.v3() / v5() / v6() when called with a `buf` argument). Verified by source inspection of `node_modules/next-auth/jwt/index.js` that next-auth uses **only** `uuid.v4()` (random, no `buf` arg) for `setJti(...)` — the codebase is **not exploitable**. Fix is purely to keep `npm audit` clean and the operator's "always keep dependencies up to date" rule satisfied. Approach: `overrides: …

  1440. Regenerate release-notes JSON + KB note for cron in-process + ECONNRESET classifier · b8a7646

    Refresh after deploying api 0.1.24 (in-process cron + bulk-peer Promise.allSettled) and web 0.1.154 (ECONNRESET aborted classifier). KB documents the second cross-bridge sweep, the dead chat-media-orphan cron entry that was removed (its underlying service method was a phantom), and the strict instrumentation classifier with stage evidence (17/17 responsive cells green, zero uncaughtException lines post-deploy).

  1441. Classify ECONNRESET aborted as structured warn (not bare uncaughtException) (0.1.154) · 3974f50

    Stage logs intermittently showed: web-client-stage | ⨯ uncaughtException: Error: aborted web-client-stage | at ignore-listed frames { web-client-stage | code: 'ECONNRESET' web-client-stage | } Looks alarming, isn't a crash: container stays `healthy`, process keeps serving traffic. The events come from clients (Playwright `page.close()`, browser navigations, mobile background suspends) closing the socket mid-response. Next.js 16's default `uncaughtException` printer surfaces them with a bright `⨯`, drowning out gen…

  1442. Scheduled tasks run in-process + bulk peer recalc tolerates one bad row (api 0.1.24) · 7745bb0

    Continuing the change-stream cross-bridge sweep from api 0.1.22-0.1.23, two more silently-broken nightly behaviours found: 1. **node-cron scheduled tasks** in `lib/cron/scheduled-tasks.ts` did `fetch(${urlResolver.getBackendUrl()}/api/cron/...)` for the 02:00 UTC match recalculation cron (and a chat-media-orphan-purge cron whose route handler never existed). On multi-host stage the URL resolves to the public host → web-client BFF → 401 — every nightly run silently no-op'd. Refactored to call services in-process vi…

  1443. Refresh after deploying api 0.1.22 (in-process recalc helper) + api 0.1.23 (orphan match row tolerance + self-heal). · 0621286

    Refresh after deploying api 0.1.22 (in-process recalc helper) + api 0.1.23 (orphan match row tolerance + self-heal). KB entry documents the cross-bridge anti-pattern, the in-process helper as single source of truth, and the self-heal behaviour with stage evidence (4 historic orphans cleaned on first run, zero level:50 errors after).

  1444. UpdateMatchForProfileChange tolerates orphan match rows + self-heals (api 0.1.23) · 5f77075

    The previous fix (api 0.1.22) made the change-stream call this method in-process for the first time on stage. That immediately surfaced a pre-existing latent bug masked for months by the broken HTTP-401 path: Error: updateMatchForProfileChange: profile not found for viewer authUid=69e56bff35a55760fecd5788 (match references otherUserId=ecb7bc48-…) at MatchCalculationService.updateMatchForProfileChange Root cause: `Promise.all` over every `matches` row that references the changed profile. When **one** row points at …

  1445. Recalc matches in-process from change-streams (no HTTP roundtrip-to-self) (api 0.1.22) · 6889384

    Stage logs after every profile update emitted two noise lines: web-client-stage | {"tag":"BFF_PROXY_ERROR","event":"No session token","pathname":"/api/internal/recalculate-matches"…} backend-stage | Failed to trigger match recalculation for user … 401 {"error":"Unauthorized","message":"Authentication required."} Root cause (cross-bridge anti-pattern): `lib/db/change-streams.ts` did `fetch(${urlResolver.getBackendUrl()}/api/internal/recalculate-matches)` to trigger recalc when a profile changed. On a multi-host dep…

  1446. Regenerate release-notes JSON + KB note for design-system consolidation (0.1.152 + 0.1.153) · dad87a8

    Refresh of `release-notes.generated.json` after deploying the design-system consolidation (`src/components/` → `src/design-system/components/`) and the `marketing` naming cleanup. KB entry documents the new architectural contract (single submodule, onion direction, full-path imports) and the responsive matrix evidence (11/11 cells green on stage at 320/375/768/1280).

  1447. Per the project's professional-wording rule (variables should not be named 'marketing' when 'landing' already conveys the context), this rename strips the redundant prefix: · c6f21d8

    Per the project's professional-wording rule (variables should not be named 'marketing' when 'landing' already conveys the context), this rename strips the redundant prefix: - File: `src/design-system/landing-marketing-brand.ts` → `src/design-system/landing-brand.ts` (full git history preserved via `git mv`). - Symbol: `[redacted]` → `getLandingFrostCardDiffuseGlowBoxShadow`. - Updated all docstring `{@link …}` and import-path references in `globals.css`, `design-system/index.ts`, `design-system/landing-accent-chro…

  1448. Merge src/components into src/design-system as a single submodule (0.1.152) · d20f859

    The design system now owns *everything* visual + interactive — tokens (`*-brand.ts`) **and** React components ship as one submodule under `src/design-system/`. Previously the two lived in separate top-level folders (`src/components/` for React, `src/design-system/` for tokens), which made it easy to ship UI that bypassed the token layer. Mechanical refactor (no runtime behaviour change): - `git mv src/components → src/design-system/components` — full git history is preserved for every file (`R`/`RM` status in `git…

  1449. Regenerate JSON to include 0.1.150 + 0.1.151 commits · c03b523

    Refresh of `release-notes.generated.json` after pushing the viewport-export and `/dev` hub fixes. Surfaces the new commits on `/release-notes` so the public page reflects the deployed stage build.

  1450. Add /dev hub index page (root-cause: App-Router static-folder fall-through) · 5f9a320

    Stage probe of `GET /dev` returned HTTP 500 with web-client-stage log: `⨯ Error [InvalidLocaleError]: "dev" is not a supported AppLocale` Root cause: `app/dev/` has subfolders with `page.tsx` (`/dev/platform`, `/dev/ui`, …) but no `app/dev/page.tsx` index. Next 16 App Router cannot satisfy `/dev` from the static folder, falls through to the dynamic sibling `app/[locale]/page.tsx` with `params.locale = "dev"`, and the locale layout's `generateMetadata` correctly throws `InvalidLocaleError`. Same trap exists for any…

  1451. Move themeColor from metadata to viewport export (Next 15+ contract) · c3d6227

    Root cause: `src/lib/seo/metadata.ts` baked `themeColor` into `defaultMetadata` (legacy Next 14 placement). Every locale page using `createPageMetadata()` therefore triggered `⚠ Unsupported metadata themeColor is configured in metadata export …` on every render in stage logs. Fix: split `themeColor` into a new `defaultViewport: Viewport` export and mount it once at the root layout via `export const viewport`. Next merges viewport across the route tree, so every descendant inherits the brand theme-color without per…

  1452. Rebalance Calendar HEAT_STEP_BG so all three metric views read coherently (0.1.149) · 1eef368

    The user reported the three Calendar metric views (Commits / Lines / Estimated hours) looked dramatically different — "how can they be so different". Empirical bin-distribution check on the live bundle shows: Commits bin counts → [70 inactive, 18, 3, 2, 2, 1] ← 18 of 26 active days squeezed into step 1 Lines bin counts → [70 inactive, 6, 5, 5, 5, 5] ← spread evenly Hours bin counts → [ 0 inactive, 10, 28, 36, 11, 11] ← dense (backfill) + cap cluster The visual blowout came from **step 1 being too low contrast on d…

  1453. Landing universe demo orbs sit inside the card (0.1.148) · 53be916

    Root cause: the six orbit dots in `HowItWorks → Explore Universe` walkthrough card used CSS percentages with negative values (e.g. `top: -31.96%`, `left: -40%`) that placed four of the six dots **outside** the card's rounded boundary. The "legacy polar layout formula" comment in `globals.css` never reconciled with the actual 160 × 160 (sm: 176 × 176) container size, so the dots were drawn at top-left corner positions that escaped the box. Fix at the design-system layer (`globals.css`): rewrite the six `.landing-de…

  1454. Guardrail — unprefixed-only routes must not use next-intl Link · 184d086

    Architectural follow-up to commit 4844d3df (the `/en/release-notes` href bug). That fix patched the two specific link sites; this test prevents the **pattern** from reappearing anywhere in `src/`. Background: `@/navigation` exports `Link` from `next-intl/navigation`, which transparently prepends the active locale to any relative `href`. That is correct for `[locale]/...` routes but wrong for routes registered in `src/i18n/routing/unprefixed.ts` `UNPREFIXED_ROUTES` that have **no `[locale]/...` twin** (`welcome`, `…

  1455. Release-notes footer/build-strip links use plain Next.js Link, no locale prefix (0.1.147) · 4844d3d

    The user spotted the rendered href in the landing footer build-strip was `/en/release-notes` (locale-prefixed). The route is registered as **unprefixed** in `src/i18n/routing/unprefixed.ts` `UNPREFIXED_ROUTES` — canonical URL is `/release-notes`, and `/{locale}/release-notes` 308-redirects to it. Root cause: both link sites (`BuildVersionsStrip`, `features/landing/components/Footer`) used `Link` from `@/navigation` (the next-intl-wrapped Link), which transparently prepends the active locale to any relative href — …

  1456. Authenticated responsive matrix green; document container-query typography debt (no version bump) · a71d473

    Continued the operator loop after the 0.1.146 mobile-responsive matrix commit (9822d502): 1) **Authenticated matrix runs green on stage.** Configured the setup project via `E2E_MERGED_ENV_PATH` (tenant merged env carries `E2E_REGISTRATION_USER_EMAIL`) and ran the full `responsive-auth-viewports.spec.ts` against `https://stage.trueconnection.app`. **5 routes × 4 viewports = 20 cells all passing**: `/{locale}/{you,journey,chats,discovery/list,profile}` at 320, 375, 768, 1280 widths. Every cell now also asserts the n…

  1457. Test(e2e),fix(web): mobile responsive design matrix + fixes a real /release-notes 320px overflow (0.1.146) · 9822d50

    The user asked for Playwright design tests that **prove** the pages are mobile-responsive, not just trust that the design-system tokens exist. Built on the existing harness (`assertNoExcessHorizontalScroll` + `buildResponsiveViewportPresetList`) — no new infra, just three extensions and one new helper: 1) **New helper `assert_primary_nav_reachable.ts`** — measures every bottom-nav tab's bounding rect against the nav's own width and against the WCAG 2.5.5 Target Size (Enhanced) ≥ 44 × 44 CSS px minimum. Catches exa…

  1458. Doc + KB sweep + fix OpenAPI ProfilePublic security test (no version bump, no runtime change) · e6c307c

    Sweep findings from the operator loop, no new runtime code: 1) **`docs/release-notes-commits.md` was on schema v3.** The Activity tab model had since moved to v4 (totals decomposition into evidenced + backfilled, plus `activeDays`) and gained the GitHub-style calendar axes. Refresh the schema-version line, append the v4 history entry, and bump the Calendar bullet to mention the month strip + Mon/Wed/Fri axis + quantile-on-distinct binning. 2) **`tests/atomic/security/openapi-profile-public-no-platform-role.test.ts…

  1459. Silence NextAuth debug log noise on stage + tighten layout guardrail (0.1.145) · 77973d1

    Two operator-loop sweep findings, both real: 1) **Stage logs were full of `❌ [auth] NextAuth CLIENT_FETCH_ERROR`** on every SPA navigation. Root cause: `NEXTAUTH_DEBUG=true` was set in `app-pipeline/app-tenant/tenants/ifeoma-tc/config/.../tc/.env.stage`, but the inline doc on `nextauth_logger.ts` is explicit that this flag is for **dev-only active debugging** ("set in `.env.dev` only when actively debugging authentication flows"). With it on, our `logAuthDebug` wrapper escalated NextAuth's transient SPA-abort `CLI…

  1460. Two responsive bugs surfaced together: · 433de48

    1) **Bottom AppNav** required horizontal swipe on iPhone-sized widths. Each tab carried `min-w-[3.5rem]` plus `flex-nowrap` and the row wrapped a horizontal-scroll fallback (`overflow-x-auto`). At 320– 375 px viewports, 6 items × 56 px > viewport, so the user had to scroll the primary navigation to reach Admin/Logout — anti-pattern for a mobile bottom bar. Fix: drop `min-w-[3.5rem]`, set `flex-1 min-w-0` on every tab so flexbox distributes them evenly across whatever width the viewport gives. The row class loses `…

  1461. Calendar grid was floating in ~25 % of the card width with no temporal context: a reader couldn't tell which column was January vs April or which row was Monday vs Sunday. · 2b0b04e

    Calendar grid was floating in ~25 % of the card width with no temporal context: a reader couldn't tell which column was January vs April or which row was Monday vs Sunday. The card looked half-broken because nothing labelled the axes the eye expects on a contribution heatmap. Add the standard GitHub-style axes: * **Month strip** above the grid — one short month label per first week-column that touches a new calendar month, computed by `buildMonthSegments` over the chunked weeks (skips leading padding so Jan-19-Mon…

  1462. Per operator request: on first open, every section card except Calendar is collapsed. · d19f406

    Per operator request: on first open, every section card except Calendar is collapsed. Calendar stays default-open because it's the headline visual. The other five sections (Cumulative estimated hours, Weekly summary, Per-commit weight, Daily table, When commits land UTC) now default to closed — readers expand only what they want. User can still open everything; the chevron in each card header rotates to indicate state. State is per-card via the native <details> element, no extra JS state needed. Stage 0.1.141 veri…

  1463. Define brand-violet Tailwind v4 color tokens — fixes silent transparency across admin debug, chat, journey, release-notes (0.1.140) · ebfbc1c

    Project-wide latent bug uncovered by the release-notes Activity v7 work (commit 3effdf63). The Tailwind v4 `@theme inline` block in `src/app/globals.css` historically defined the brand violet **only as the raw CSS variable** `--brand-violet-rgb` (under `:root`), never as `--color-brand-violet*` theme tokens. As a consequence every utility class of the form `bg-brand-violet-muted/N`, `text-brand-violet`, `bg-brand-violet-subtle`, `text-brand-violet-strong` resolved to *no CSS at all* and every consumer rendered tra…

  1464. Release-notes Activity v7 — actually visible heatmap gradient + Fewer→More legend (0.1.139) · 3effdf6

    Real root cause of the "calendar shows only the brightest cell, no gradient" complaint: the project's Tailwind v4 theme exposes the brand violet only as the **CSS variable** `--brand-violet-rgb` (see `app/globals.css`), **not** as a `--color-brand-violet-muted` token. Classes like `bg-brand-violet-muted/45` therefore generated **no CSS at all** — the heatmap cells, weekly bars, and per-commit bars were rendering with a transparent background and what looked like a faint violet tint was just the glass-panel substra…

  1465. Release-notes Activity v6 — split totals into evidenced + backfilled (0.1.138) · 2147048

    Reader couldn't tell which part of `estimatedHours` was Git evidence and which part was the model's backfill assumption. The "Days with commits" KPI also conflated two different questions ("how often did I commit?" vs "how often did I work?") into one number, while the more useful "days the model attributes any work to" was hidden in the byDay array. Model — schema v3 → v4 (no shim): * `totals.evidencedHours` — only the per-commit churn + interval spread; the "this much is observed" part of the bundle. * `totals.b…

  1466. Refresh maintainer doc + KB for churn_interval_v2 / schema v3 · 4aacc94

    `docs/release-notes-commits.md` was still describing the original `churn_interval_v1` model and `schemaVersion: 2`. Refresh: - Document the four ordered steps the model now runs (per-commit hours, interval spread, weekday/weekend backfill split with the 4 h / 8 h defaults, daily ceiling `maxDayHours`). - Note the self-explainable identity: pure no-commit weeks land at exactly 36 h (5 weekdays × 4 + 2 weekend days × 8) with the defaults. - Bump the schema-versioning section to `3` and add a short v1→v2→v3 history. …

  1467. Release-notes Activity v5 — split past-workday backfill into weekday vs weekend (0.1.137) · e794ec9

    Real-world cadence reported by the operator: weekdays vary 2-6 h with the occasional zero day, weekends typically go in as a focused full-day block. The previous uniform 6.4 h/day backfill flattened that pattern. Replace the single `pastWorkdayHoursPerDay` parameter with two: - `pastWeekdayHoursPerDay` default 4 h (Mon-Fri, midpoint of 2-6 band) - `pastWeekendHoursPerDay` default 8 h (Sat-Sun, "the whole weekend") Weekday detection is in **UTC** (`Date.getUTCDay()`) to keep the model deterministic regardless of wh…

  1468. Release-notes Activity v4 — sane day cap + log-scaled weekly bars + KPI label (0.1.136) · 39f0bed

    Three remaining root-cause issues from the previous sweep, fixed in one pass: 1. Daily and weekly totals were physically impossible. The model summed per-commit hours unboundedly per day; a 150-commit day produced 50+ h of work because each commit contributed `log(2)` plus the per-commit floor. Apr 20 week peaked at 979 h (= 140 h/day across 7 days). Add `maxDayHours` parameter (default 16 h) to the analytics model and apply it as a hard ceiling on each day's `estimatedHours` after every additive contribution (per…

  1469. Release-notes Activity v3 — visible past activity, per-commit churn (0.1.135) · cfa0381

    Two visualization regressions exposed real flaws in the v2 scaling: 1. Calendar Commits view hid Jan/Feb singletons. The previous `log(value)/log(max)` scale put a 1-commit day at step 1 (~14 % of the visible range), painting it as nearly empty against a 150-commit Apr peak. Replace with a quantile bin over the **distinct** non-zero magnitudes so each step lands on a different commit-count tier (1 → 7 → 53 → 84 → 150), and lift step 1 from /30 to /45 opacity so a single commit still reads as activity on dark glass…

  1470. Pin release-notes date formatting to UTC to remove hydration mismatch (0.1.133) · 2eaf49c

    `formatEntryDate` (used by the Notes list inside the client island) and `formatBundleLastUpdated` previously inherited the host timezone. SSR runs in UTC and the browser typically does not, so any commit timestamp near midnight UTC formatted to a different calendar day on each side of the boundary — triggering React error #418 (text-content hydration mismatch) on `/release-notes`, and inconsistencies between the Notes date and the heatmap / daily-table day key (which already pin UTC). Both helpers now pass `timeZo…

  1471. Release-notes Activity v2 — collapsible cards, magnitude tinting, past-workday backfill (0.1.132) · acde26f

    Algorithm (`churn_interval_v2`): Add a documented past-workday backfill so historical commit-less days that fell **strictly before** `pastWorkdayBackfillCutoffDay` (default 2026-04-13) receive an extra `pastWorkdayHoursPerDay` (default 6.4 h ≈ 0.8 × 8 h work-day) on top of the existing churn-interval spread. Days at/after the cutoff stay purely commit-driven now that day-by-day reporting is in place. Set `pastWorkdayHoursPerDay: 0` to disable. UI: Each Activity section is now a brand-styled collapsible card (`<det…

  1472. Release-notes Activity tab + estimated hours analytics (0.1.131) · 608b364

    Compose `/release-notes` as a feature submodule: `src/features/release-notes/{model,schema,ui}` with strict Zod validation, pure analytics builder, and a client island that renders calendar heatmap, cumulative estimated-hours line, weekly bars, per-commit weight bars, daily table, and an optional UTC punch-card. The `?view=activity` deep link is honoured; clicking back to Notes clears the query without a router round-trip. The prebuild generator (`scripts/generate-release-notes-data.ts`) parses `git log --numstat`…

  1473. Gitignore WIP features/release-notes; bump 0.1.128 · 085aa5f

    - Prevent partial local trees from breaking Fleet/remote next build; refresh release-notes.generated.json for new semver. - No functional app code change beyond version metadata.

  1474. Sync release notes JSON (664f0dd0 entry, fleet pre-rebuild) · ecc043d

    - Regenerate from git log after e2e/auth gate commit; keep bundle aligned with /release-notes.

  1475. Authenticated grounding + You hub smoke; document auth gate spacing · 664f0dd

    - Add ui-authenticated spec: after onboarding gate, assert grounding h1, CTA, You heading. - Clarify AUTH_GATE_VIEWPORT_COLUMN: sub-640px lower space is intentional (keyboard). - Web client 0.1.127; regenerate release notes.

  1476. Cursor kb, agent rules, and release notes index · f8489d0

    - Update app-pipeline .cursor knowledge base (README, fleet diagnostics, discovery universe); root agent-rules-changelog and release-notes-commits.

  1477. Profile media, discovery, landing, and contract sync · 57bcd95

    - Profile pictures: API integration, settings section, PeerProfilePictureOrOrb, object URL hook, stream selection, chip wrap helper; update cards and headers. - Regenerate OpenAPI client artifacts; drop legacy api-client.ts; sync zod validation; ProfilePicturePublic model and profile API docs. - Discovery: universe WebGL, camera, tooltips, list/profile adapters, types; journey matching-signals card chip layout. - Landing: remove DemoWalkthrough; refresh FAQ, HowItWorks, StickyNav, Footer; i18n overlays and message…

  1478. Profile picture pipeline, routes, and discovery mapping · eddaabf

    - GridFS storage, authorization, paths, types, and ProfilePictureService; register profile picture routes; wire server and main router. - Map discovery profile payloads; update ConnectionService and tests. - Sync validation zod from contracts; bump backend package version.

  1479. OpenAPI and zod for profile picture and profile fields · 4eccf89

    - Extend OpenAPI; regenerate generated index and zod-schemas for profile media and related profile payloads.

  1480. Tenant env, fleet context, docker-compose, schema mount · 281588d

    - Fleet tenant context env behavior; tenant interface and ifeoma-tc package index; docker-compose adjustments. - Remove obsolete container_mount schemas index (schemas generated elsewhere).

  1481. - Add repair for mangled single-line .env key concatenation and fleet manager version overlay handling. · f3d4a1b

    - Add repair for mangled single-line .env key concatenation and fleet manager version overlay handling. - Extend constants_env; unit tests for both helpers.

  1482. Sync release notes after stage 0.1.126 deploy; refresh fleet KB evidence · 4bbeab7

    - Fleet tenant-rebuild-web-client refreshed generated JSON (77a2b94 entry, timestamp). - Document ifeoma-tc stage 0.1.126 curl, health suite, and browser cache-bust checks.

  1483. Align auth, landing hero, and journey intro layouts for mobile · 77a2b94

    - Add AUTH_GATE_VIEWPORT_COLUMN: start on narrow, center from 640px; use on sign-in and auth error with LayoutGrid top. - QuestionPhaseBase intro and ConsentRequestScreen: LayoutGrid top + tighter intro padding. - Hero: top-anchored section with safe-area pt; tighter badge, headline, and orb vertical rhythm. - ErrorScreen: drop h-full centering; min-height + horizontal padding for flex parents. - Reflection empty state: min-height and flex-1 without h-full. - Web client 0.1.126; regenerate release notes.

  1484. Tighten journey grounding and You hub responsive spacing · 1ab385f

    - Add JOURNEY_SCREEN_LAYOUT (fill vs natural route shells) in layout-brand; export from design-system. - Grounding: use LayoutGrid + flex-none orb row, top safe-area, compact CTA gaps; remove flex-1 stretch that centered the orb in empty space; journey page uses natural shell for grounding only. - You hub: top-align LayoutGrid, reduce section spacing, safe-area padding on orb. - Bump web client to 0.1.125; regenerate release-notes data.

  1485. Add TC_FLEET line in .env.stage; refresh release notes · a6a8ed8

    Split TC_FLEET_MANAGER_VERSION and TRAEFIK_ACME_CERT_MAIN on separate lines so dotenv and merge-env see TRAEFIK as its own key. Regenerate release-notes.generated.json from the Fleet (git log) pre-build step.

  1486. Copyright year via UTC in browser (Footer, web 0.1.115) · 543a8b2

    - getUTCFullYear in state + useEffect after mount for client clock - i18n landing.footer.copyrightLine unchanged; prebuild JSON refresh

  1487. BuildVersionsStrip placement + KB QA (You hub, settings, stage curl) · 96924fc

    - BuildVersionsStrip: single module doc (variants + AppPagesLayoutClient / UserProfileMenu) - KB: signed-in build strip QA, tenant-rebuild-app for backend semver alignment

  1488. StickyNav file doc — locale on Hero/Footer only · 4c39006

  1489. StickyNav module note + KB evidence for 0.1.114 sticky bar · e423425

  1490. Remove language picker from sticky nav (web 0.1.114) · 0321467

    - StickyNav: drop PublicLanguagePicker; locale remains in footer and hero - Regenerate release-notes bundle

  1491. Stage 0.1.111 vs local 0.1.113 curl evidence (release-notes) · 392281a

  1492. Align /release-notes with glass surface + CQ typography tokens · 62d74d5

    - Extend LAYOUT_CQ_TYPOGRAPHY with release-notes entry and meta styles - Add PUBLIC_INLINE_LINK; reuse in LoginForm and release-notes - List items use SURFACE_BRAND.glassJourneyPanel (journey/universe glass, not ad-hoc borders) - Bump web-client to 0.1.113 + regenerate release-notes bundle

  1493. /release-notes unprefixed URL + pre-0.1.112 curl evidence · fc45f4c

  1494. Serve release notes at /release-notes, unprefixed locale via cookie · 6330758

    - Add app/release-notes with UnprefixedRouteShell; allowlist in UNPREFIXED_ROUTES - permanentRedirect from /[locale]/release-notes to /release-notes (single canonical path) - introduce resolveUnprefixedRouteLocaleFromCookies for DRY server locale resolution - createPageMetadata pathIsLocaleAgnostic for single-URL SEO canonical - AppProviders: landing document scroll for /release-notes; pathname SSOT when needed - Tests: routing, proxy allowlist, SEO; e2e public viewport path - Docs: application/docs/release-notes-…

  1495. Non-(pages) routes used app-layout (100vh + overflow hidden) without an inner overflow-y scroller, so long release-notes content was clipped with no scrollbar. · b67a587

    Non-(pages) routes used app-layout (100vh + overflow hidden) without an inner overflow-y scroller, so long release-notes content was clipped with no scrollbar. Treat /{locale}/release-notes as a landing path in AppProviders isLandingPath so html/body get landing data-layout and natural document scroll. See AppProviders.tsx isLandingPath; release-notes page docstring.

  1496. Run release-notes generator before app rebuilds (app-pipeline 1.0.2) · f143fc1

    tenant-rebuild-web-client and tenant-rebuild-app invoke npm run generate:release-notes in app-source/20_web-client on the operator host before rsync, aligning shipped JSON with a full git clone. Fail fast with a clear error if npm is missing or the script fails. - New module _release_notes_preflight; skip via --skip-release-notes-refresh or TC_FLEET_SKIP_RELEASE_NOTES_REFRESH=1 - Unit tests; KB + README + agent changelog updated

  1497. Changelog row for onboarding birth-year E2E + 0.1.100 · c2eed6c

  1498. Refresh release-notes.generated.json for 0.1.100 · 93e0ec0

  1499. Require onboarding birth-year control (web 0.1.100) · 72f925d

    Assert data-testid onboarding-birth-year is visible before submit so mandatory onboarding cannot ship without the calendar birth year field. See isProfileOnboardingComplete and profile API birthYear.

  1500. Changelog row for differentiators 0.1.99 KB evidence · ccff037

  1501. Stage evidence for differentiators 0.1.99 + release-notes flow · bf33604

  1502. Sync release-notes bundle — differentiators 0.1.99 lead · a99f74a

  1503. - Expand section subtitle and four cards (values, consent, pace, privacy) - Align with journey: reflection before feed, opt-in steps, no engagement-stack bait - i18n overlays en/d… · 60367fe

    - Expand section subtitle and four cards (values, consent, pace, privacy) - Align with journey: reflection before feed, opt-in steps, no engagement-stack bait - i18n overlays en/de/fr/es/ar; module docstring; release-notes bundle

  1504. Stage evidence for tenant-rebuild-app backend 0.1.20 parity · f2adac9

    - Document build-info 404→200, web 0.1.98, API 0.1.20, public-edge OK - Clarify tenant-rebuild-app vs tenant-rebuild-web-client; agent changelog row

  1505. Release-notes list feat testimonial name formatting first · 5d55815

  1506. Testimonial names as First L. (0.1.98) · 8b39bd6

    - Add formatAttributionNameInitialOnly in displayName utils - Apply in Testimonials for s1–s3; keep full names in messages for translators - Atomic tests; refresh release-notes bundle

  1507. Release-notes.generated.json list fd1f8f4d · 8a2398b

  1508. Refresh release-notes after bundle lead-entry commit · fd1f8f4

  1509. Regenerate from git so /release-notes lists feat(landing) richer demo walkthrough first. · 85e5d25

  1510. - Expand section subtitle; add detail paragraph per step (reflection, connection, universe, chat) - Border-accent layout for detail; update message key map and module docstrings -… · a8d0c9d

    - Expand section subtitle; add detail paragraph per step (reflection, connection, universe, chat) - Border-accent layout for detail; update message key map and module docstrings - Regenerate release-notes bundle

  1511. First entry now includes the chore bundle + KB commit; regenerate was run post-push so git log order matches main. · eb0f361

  1512. Sync release notes bundle, bump 0.1.96; KB stage evidence · 4d8e192

    - Regenerate release-notes.generated.json so /release-notes lists newest commits - Document ifeoma-tc stage rebuild/health/settle and release-notes workflow in KB - Note in agent-rules changelog

  1513. Move build version strip from You hub to settings sheet (0.1.95) · c07b66c

    Omit the fixed BuildVersionsStrip on ROUTES.JOURNEY_YOU in AppPagesLayoutClient. Add BuildVersionsStrip variant settings (inline, end of scroll) to UserProfileMenu so web/API semvers show at the bottom of My Settings. Bump web client to 0.1.95 and refresh generated release notes.

  1514. Stage evidence for web-client 0.1.94 discovery deploy · 4646109

    Record tenant-rebuild-web-client, brief /api/health 404, health and build-info parity, public-edge OK, landing and release-notes probes, signed-in discovery caveat, PACKAGE_INDEX revert.

  1515. Make DiscoveryToolbarRow mode segment optional; universe and list routes show only the universe/list switch. · 95480db

    Make DiscoveryToolbarRow mode segment optional; universe and list routes show only the universe/list switch. Fixed explore strapline via RevealHeader; deprecate UniverseModeToggle for non-product use. Improve narrow-viewport layout: RevealHeader typography, full-width guide panel with tighter max height, larger tab targets and guide copy sizing. Localize updated toolbar aria labels in all locales. Remove dead DiscoveryPageClient handlers; satisfy lint for universe effect sync.

  1516. Stage evidence for web-client 0.1.93 deploy · f963b04

    Record tenant-rebuild-web-client, health/build-info parity, public-edge OK, release-notes HTML check, web-client-stage logs, PACKAGE_INDEX revert note, and link to QuestionPhaseBase questions scroll fix.

  1517. Question phase scroll height and shell padding (0.1.93) · e686ad6

    Remove flex-1 and pb-24 from QuestionPhaseBase questions LayoutGrid. The (pages) main column already grows in the flex tree; flex-1 on the grid forced the question stack to viewport height so users scrolled through empty space below the card. mainPadBottomNav on main already clears the fixed bottom nav — duplicate pb-24 added a second deep inset. Document the invariant in the module docstring.

  1518. Stage evidence for web-client 0.1.92 deploy loop · 3d37e12

    Record tenant-rebuild-web-client, brief /api/health 404, polling to 200, tenant-live-health public-edge OK, release-notes confirmation, and PACKAGE_INDEX.yaml revert guidance for ifeoma-tc stage.

  1519. Replace the native range input with the shared Radix Slider so the thumb and filled track match the 1–10 value. · f9efcab

    Replace the native range input with the shared Radix Slider so the thumb and filled track match the 1–10 value. Extend Slider with optional track, range, and thumb class/style hooks for statement-tinted fills. Keep numeric rating buttons in a five-column grid at all breakpoints so the row no longer overflows on md widths. Tighten RatingCard and question shell vertical padding to reduce empty space above the card. Bump web client to 0.1.92 and refresh generated release notes.

  1520. Visible newest-first hint + document prebuild pipeline · 16f4e80

    The /{locale}/release-notes page already bundles git log via prebuild; add app.releaseNotes.orderHint (en/de/fr/es/ar) under the lead, clarify page and generator docstrings (newest first, oldest last in JSON order), and bump web to 0.1.91 with refreshed release-notes.generated.json.

  1521. Tighten QuestionPhaseBase questions chrome spacing · 39d2bb5

    Progress, Previous, and Next sat in separate grid rows each with large margins, stacking with LayoutGrid top padding into a tall empty band above the card. Group progress + nav in one space-y-2 chrome block, reduce grid gaps, tighten LayoutGrid top padding (!pt-1/md:!pt-2), and use compact ghost row height (h-9). Bump web-client to 0.1.90; refresh release-notes.generated.json.

  1522. Refine QuestionPhaseBase intro layout and CTAs · 6b730cb

    Connection (and reflection) intro screens used a plain h1, tight vertical rhythm, and impact lines that read as one dense block. Use LAYOUT_CQ_TYPOGRAPHY.mediumColumnPageTitle, max-w-prose copy, scrollable intro shell with safe-area padding, subtle impact rows, and rect-brand-solid-main for Begin Rating. Bump web-client to 0.1.89; refresh release notes.

  1523. Halo-inclusive layout frame for Hero, preview, journey centre · c0a93fc

    YouBrandOrbMark’s halo extends past the root box; parents that only sized the sphere (e.g. Hero motion stack with absolute rings) centred rings on the tight box, so the cluster looked shifted. Add YouBrandOrbHaloLayoutFrame (getBrandOrbHaloPadPx) and use it in Hero, UniversePreview, and JourneyConstellation. Bump web-client to 0.1.88; refresh release-notes.generated.json.

  1524. Wrap QuestionCard choice labels; i18n question phase chrome · 51b514f

    Root cause: flex items default to min-width:auto, so long chip text could not shrink inside grid cells and was clipped together with overflow-hidden and tight rounded-full pills. Use min-w-0 on the chip shell and label, whitespace-normal/break-words, rounded-2xl, h-auto/min-h touch target, and optional single-column grid below 380px. DRY shell classes via reflectionChoiceChipShellClassName; keep overflow-hidden only for the examples-branch overlay. Localize hints, submit/complete CTA, examples toggle, slider defau…

  1525. YouBrandOrbMark halo extends past the sphere box with asymmetric gradients, so centring only the tight root shifted the visual cluster. · 6765ce0

    YouBrandOrbMark halo extends past the sphere box with asymmetric gradients, so centring only the tight root shifted the visual cluster. Reserve a square of sphere + 2*getBrandOrbHaloPadPx, expand the constellation stage to fit, and split outer translate positioning from inner Framer scale. Move the You label text-shadow into orb-brand (getJourneyConstellationYouLabelTextShadowStyle) using getSrgbBlackRgba and BRAND_VIOLET_RGB. Bump web-client to 0.1.86 and refresh release-notes.generated.json. Add atomic test for …

  1526. Glass radar panel aligned with No Rush card · 5fc9110

    - Export LANDING_BRAND_VIOLET_FEATURE_CARD_GRADIENT_TAILWIND; reuse in Features and UniversePreview. - Universe preview: rounded-3xl violet glass, card glow, inset ring, subtler rings; drop ambient orb layer. - Tuned demo orb sizes for cross layout; You mark 96px. - Bump web-client to 0.1.85; refresh release-notes data.

  1527. Document PublicLanguagePicker retracted centre fix · 472d1e4

  1528. Center hero PublicLanguagePicker retracted state · c3b9f80

    Remove obsolete translateX peek math (single trigger, no chip row). Use size-11 flex centre so EN stays geometrically centred on mobile and desktop. Bump web-client to 0.1.84; refresh release-notes data.

  1529. Stage semver probes, build-info footer, onboarding cache gate · b753817

  1530. Sync profile cache before post-submit navigation · 97132bd

    Root cause: AppPagesLayoutClient hides the shell when needsOnboarding is true but the path is no longer /onboarding. After POST /api/profile, invalidateQueries refetches asynchronously, so router.replace(/you) could run while the TanStack cache still showed incomplete onboarding — fullscreen redirect appeared stuck. Merge updateProfile response into selfProfileQueryKey before replace and invalidate. Bump web-client to 0.1.83; refresh release-notes data.

  1531. Web-client(0.1.82): responsive shell, landing steps, i18n nav, orb layout · b2366a1

    - Export pathnameWithoutLeadingLocale for locale-aware AppNav active tabs; add Vitest coverage. - Layout-brand tokens for bottom nav scroll, discovery overlay clearance, chat error shells. - How It Works: five-step journey copy; overlay landing.json for all locales. - Grounding/Hero/orb: fix clipping; softer halo stops; overflow-visible orb mark. - MatchCard, RatingCard, QuestionCard, ConsentRequestScreen, MessagingHeader: responsive stacks and tokens. - Admin panel back link uses ROUTES.LANDING and admin.panel.ba…

  1532. Button wraps/shrinks for long labels; You hub grid responsive · 9435ef8

    - Base Button: min-w-0, whitespace-normal, text-center, break-words; drop root shrink-0 so grid/flex can constrain width - YouScreen: single column below 420px, full-width buttons, shrink-0 on icons - Bump web-client to 0.1.78; refresh release-notes JSON

  1533. Gate sign-in social block behind SHOW_SOCIAL_LOGIN_OPTIONS · 054563a

    - Omit divider + OAuth placeholder buttons from DOM when false (default); keep full markup for later - Document flag in LoginForm module docstring; bump web-client to 0.1.77 and refresh release-notes JSON

  1534. Back link from sign-in to landing (i18n, 0.1.76) · fcd0f1e

    - Add auth.login.backToLanding + server copy; Link to ROUTES.LANDING above card title on both steps - Stable data-testid auth-login-back-to-landing for E2E; refresh release-notes bundle semver

  1535. Refresh release-notes.generated.json after release-notes UX · 004db06

  1536. Richer release notes with versions, sanitizer, tsx generator · 730c7f3

    - Replace mjs generator with tsx script; bundle webClientVersion + apiVersion from package.json - Add sanitizeReleaseNoteText + userSummary/userDetail from commit body; PEM/JWT/Bearer/co-author stripping - Public page: headline + optional detail, collapsible technical block, build version line (test id) - i18n (en/de/fr/es/ar), Vitest atomic tests, web-client 0.1.75; refresh generated JSON - KB: fleet doc references ts generator and build-versions test id

  1537. Refresh release-notes bundle after HEAD sync · 0adee76

  1538. Sync release-notes.generated.json with HEAD · d8f310a

  1539. Refresh release-notes.generated.json (a78fae4a) · f53eaaa

  1540. Refresh release-notes.generated.json (580a147a) · a78fae4

  1541. Release-notes JSON refresh workflow for Fleet rsync builds · 580a147

  1542. Refresh release-notes.generated.json after recent commits · aa1db9b

  1543. Agent-rules-changelog for release-notes fleet KB · dfdc65b

  1544. Link release-notes route to fleet KB bullet · 0fa41b8

  1545. Fleet quick ref for /release-notes deploy checks · c5c22e6

  1546. Public /release-notes from Git history + nav links · af57aa8

    - Add prebuild script writing src/data/release-notes.generated.json (newest-first git log) - Locale route /release-notes with LayoutGrid, SEO metadata, i18n (en/de/fr/es/ar) + landing overlays - Link from BuildVersionsStrip and landing footer; ROUTES.RELEASE_NOTES + responsive E2E allowlist - Allowlist tracked JSON under web-client (release notes, i18n overlays) in root .gitignore - Bump web-client to 0.1.74

  1547. Persist birth year on onboarding and self profile · e5f9be3

    - Split OpenAPI ProfilePublicShared vs ProfilePublic so discovery peers omit birthYear - Add birthYear to UpdateProfileRequest; validate UTC calendar range on POST /api/profile - Web: mandatory onboarding + settings + edit form; gate isProfileOnboardingComplete on birthYear - Derive display age from birth year on profile card header (localized) - i18n (en/de/fr/es/ar) and backend errors.profile.birth_year_invalid - Bump web-client to 0.1.73 and backend to 0.1.20; unit tests for policy and onboarding gate

  1548. Explicit response body reads + PWA unregister logs · 9a9cc3c

    - Add readResponseTextOrThrow for DRY, non-silent Response.text failures. - Use it in features/auth/api (validateIdentifier, registerUser) and downloadServerChatTranscriptExport for !ok bodies. - 413 transcript-export: replace empty JSON catch with ChatTranscriptExportTooLargeError including parse failure context. - PWA dev unregister: console.debug scope + rejection reason. - Web-client 0.1.72; stage rebuild, target-stack-logs --scan (clean), tenant-live-health + landing browser OK.

  1549. Surface useAdminData load failures with i18n · 79d6408

    - Add profilesLoadError / statsLoadError state (cleared on retry) with admin.useAdminData.* messages in all locale bundles. - Sanitize API error text for ICU {message} placeholders; fix loadAllProfiles log component name (useAdminData). - deleteProfile rethrows the original error after log (no generic wrapper). - Web-client 0.1.71; stage rebuild + health + landing browser verified.

  1550. Strict error paths in useAdminData hook · 5a18bed

    - checkBackendStatus: log failures with logComponentError before offline. - loadProfileDetails: remove getAnalytics .catch(null); log getAnalytics failures via logError (userId + action); set analyticsRequestFailed on ProfileData when preferences succeeded; rethrow after log on preference errors instead of returning stale profileData. - Document ProfileData.analyticsRequestFailed and hooks README. Web-client 0.1.70; stage rebuild + public-edge health + build-info verified.

  1551. Opt-in wide + landscape viewports for responsive matrix · 1f3cb14

    - Add responsive_viewport_presets helper (core four + 568x320 + 1920x1080 when E2E_RESPONSIVE_EXTENDED=1); use in public and authenticated responsive viewport specs with stable caseLabel diagnostics. - Document in tests README, design-system README, responsive-audit-matrix §A/C, app-fleet KB, and AGENT_BEHAVIOUR memorize bullets. - Bump web-client to 0.1.69; stage rebuild + public-edge health OK; Playwright extended matrix 8/8 passed on stage.

  1552. Define brand-module chat/journey CSS; clear design-system allowlist · f5ec45f

    - Add globals.css rules and RGB tokens for journey steps, typing indicator, cooldown panel, and chat bubble brand classes referenced from *-brand.ts. - Align generated-question borders with Tailwind border-2; respect prefers-reduced-motion for typing dots. - Empty KNOWN_UNDEFINED_CLASSES; point test/docs to responsive-audit-matrix. - Bump web-client to 0.1.68; stage rebuild verified (health, build-info, tenant-live-health public-edge, /en/landing snapshot).

  1553. - Add PUBLIC_ROUTES for root, unprefixed landing and legacy journey redirect; cookie reset set. · e9ee7e4

    - Root readyLocator accepts /welcome, /{locale}/landing, or /{locale} after infra negotiation. - Remove superseded app-shell-layout-viewports.spec.ts; update design-system README + PR template. - responsive-audit-matrix §C/E: E2E cells + ledger + evidence line for stage 0.1.67. Evidence: npm run build:direct, tenant-rebuild-web-client stage, /api/health 0.1.67, responsive-public-viewports 8 passed, tenant-live-health public-edge OK, target-stack-logs --scan OK, browser en/landing Web 0.1.67.

  1554. - Extend DISCOVERY_UNIVERSE_VIEW_MESSAGE_KEYS (canvas2dYou, universe3d*, peerTooltipMatchUnavailable). · 3e379c0

    - UniverseView3D: useTranslations + layout compatibility for orb match line; remove scanner baseline. - Add discovery-universe-manual-matrix.md; link from responsive-audit-matrix §H + evidence 0.1.66. - Parity strings in de/es/fr/ar. Evidence: build:direct, check:translations, tenant-rebuild-web-client stage, /api/health 0.1.66, responsive-public-viewports 5 passed, tenant-live-health public-edge OK, target-stack-logs --scan clean, browser footer Web 0.1.66.

  1555. - Add APP_VIEWPORT.minFull in layout-brand; export from design-system barrel. · b967fe1

    - globals: app/landing shells and document app layout use 100dvh vs 100vh. - Wire LoadingScreen (fullscreen/section dvh), FullscreenLoadingContext, PageLayout, auth layout/error, welcome, ResponsiveCard max-heights, global-error. - UniverseView3D: h-full min-h-0 + docstring; dev/docs-graph calc uses dvh. - Docs: design-system README + responsive-audit-matrix evidence for stage 0.1.65. - Refresh localized UI baseline line keys after UniverseView3D edits. Validated: npm run build:direct, check:translations, tenant-r…

  1556. 0.1.64 APP_SHELL_SCROLL deploy + E2E settle note · 3b76a3b

  1557. APP_SHELL_SCROLL for AppNav + main safe-area · f7e2fcf

    - Add APP_SHELL_SCROLL tokens (mainPadBottomNav, mainPadOnboardingNoNav, bottomNavSafeArea). - Wire (pages) main, AppNav inner/fallback, AdminPanel scroll shell; document in README + globals + fleet KB. - Bump to 0.1.64; matrix evidence (device inset spot-check noted).

  1558. Complete 0.1.63 CQ typography deploy evidence · ecb1144

  1559. Extend LAYOUT_CQ_TYPOGRAPHY to chats, connections, onboarding · 3727a49

    - Rename analytics page tokens to mediumColumnPageTitle/Subtitle (shared shell headings). - Add onboardingPageTitle/Lead with tc-layout md steps; wire Chats, Connections, Analytics, onboarding. - Bump to 0.1.63; refresh design-system README, fleet KB, responsive matrix evidence.

  1560. LAYOUT_CQ_TYPOGRAPHY + tc-layout column guidance · a081958

  1561. Tighten 0.1.62 CQ typography evidence · 8085d3f

  1562. LAYOUT_CQ_TYPOGRAPHY for tc-layout column titles · e6c0ad8

    - Add LAYOUT_GRID_QUERY_NAME + LAYOUT_CQ_TYPOGRAPHY bundles in layout-brand (exported via design-system). - Apply to You hub, Analytics, Discovery list headings; drop redundant @container on Discovery LayoutGrid shells. - Document in LayoutGrid + design-system README; bump to 0.1.62; matrix evidence note.

  1563. Fluid clamp+cqi hero typography (gap 21) · cd71e18

    - Add FLUID_TYPE_LANDING_HERO tokens and globals.css display/lead classes (cqi to landing-hero). - Wire Hero h1 and subtitle via cn(); document in typography.ts and design-system README. - Bump web-client to 0.1.61; record stage evidence in responsive-audit-matrix.

  1564. Note 5-pass Playwright after edge settle (0.1.60) · 68a5eb2

  1565. Post-rebuild Playwright flake + JSDoc */ pitfall · 92c8cee

    Document welcome gate timeout during Traefik settle and block-comment */ termination.

  1566. Stage evidence for web-client 0.1.60 CQ pilot · 1794e23

    Record Playwright welcome flake during Traefik settle and browser check of en/landing.

  1567. Container-query pilot on LayoutGrid and landing Hero · 8bb5889

    - Name inner LayoutGrid wrapper @container/tc-layout for @sm/md/tc-layout density. - Scope landing Hero typography to @container/landing-hero (CQ type steps). - Document Phase 4 CQ pilot in design-system README. - Fix Hero JSDoc: avoid */ sequence inside block comment (Turbopack parse). - Bump 20_web-client to 0.1.60.

  1568. §C ledger + manual backlog; fix connections E2E claim · b7169a0

    - Clarify E2E vs manual (568×320, wide, zoom); add §C.1 Playwright ledger + §C.2 checklist. - Connections not in responsive-auth-viewports — table corrected; drop duplicate landing row. - design-system README: pointer to §C.1 / §C.2.

  1569. Stamp 0.1.59 + responsive-auth-viewports 6 passed (profile row) · 6321b50

  1570. - Profile page: min-w-0 column shell; stack heading+CTAs below sm; full-width stacked CTAs with whitespace-normal on xs for long labels. · d7ef74e

    - Profile page: min-w-0 column shell; stack heading+CTAs below sm; full-width stacked CTAs with whitespace-normal on xs for long labels. - Bump web-client to 0.1.59. - Matrix §C/§E: profile in E2E; evidence paragraph keeps 2026-04-22 counts + post-0.1.59 note.

  1571. Add §K shared src/components inventory (129 tsx) · 55d520c

    - Per-folder counts + primitives thematic groups; note ~122 was estimate. - Sync design-system README responsive-audit pointer to §I–§K.

  1572. Add §J profile / matching / ratings inventory · d026a57

    - Counts: 2 App Router tsx (profile) + 30 feature tsx (27+1+2); grouped tables. - Document matching/ratings as widgets (journey + admin consumers). - §C: dedicated /profile row; §E: note profile omitted from responsive-auth-viewports.

  1573. Add §I inventory for connections, journey, landing · 0cc9a49

    - Mechanical tables: 7 App Router tsx + 34 feature tsx (6+12+16) with evidence date. - §C: split connections/landing rows; cross-link §I for manual focus. - §D: Fleet commands use app-tenant path and PYTHONPATH=.

  1574. Set tsconfig rootDir for TS 6.8 Docker build; bump 0.1.19 · 5da4263

    - TS5011 blocked tenant-rebuild-app until rootDir aligned with include src/. - Bump backend package to 0.1.19 (deployed with journey + error-handling work). - Update responsive-audit-matrix §E evidence and Fleet KB (TS5011 operator note).

  1575. Classify BFF invalid-path 400 as ApiError; journey 403 clarity · 1b718b0

    - Export BFF_INVALID_API_PATH_MESSAGE from api-route-classification (DRY with bff-api-proxy). - Map HTTP 400 with that message to ApiError so logs use [api] not [validation]. - Journey reflection: structured warn log on subject mismatch; explicit 403 message. - Bump web-client to 0.1.58 and backend to 0.1.18; document README mapping; add tests.

  1576. §H discovery inventory (3 app + 25 feature TSX) · f5f2eb0

    - §H: list vs universe vs WebGL grouping; §C cross-links - README: §H pointer; web-client 0.1.57; Fleet stage rebuild → health 0.1.57

  1577. §G chat inventory (25 feature TSX) + stage 0.1.56 · 3b25f3d

    - §G: App Router chats + features/chat component/modal map for §C - §C chats row: manual modal/toolbar note; §E evidence: health semver sync - design-system README: §G pointer; web-client 0.1.56; Fleet rebuild verified edge

  1578. - §F: ADMIN_SECTION_CONFIG table (incl. · b9e665f

    debug tab ↔ global debug stack) - §C: split analytics row; §E: app-main-nav-all-tabs stage pass + debug pointer - design-system README: reference §F; bump web-client to 0.1.55 (redeploy stage to match)

  1579. Stage E2E evidence + post-rebuild /api/health 404 blip (Fleet KB) · 43e675d

    - Matrix §E: ifeoma-tc stage Playwright results and storageState cookie evidence - app-fleet-cli-commands: poll health after web-client rebuild (transient 404)

  1580. Sync §A welcome URL, §E storageState contract, ops semver note · 89db641

    - Clarify welcome lives at unprefixed /welcome only - Document that shell smoke no longer signs out before storageState export - Note health/footer semver vs rebuild in intro and §D checklist

  1581. Keep session for Playwright storageState after shell smoke · f337dcb

    exerciseAppBottomNavFromJourney ended with logoutViaAppBottomNav, which cleared NextAuth cookies before authenticated-session.setup wrote storageState — dependent ui-authenticated specs then saw sign-in. Remove the implicit sign-out; document that callers must logout explicitly when needed. Add assertNextAuthSessionCookiePresentForE2eExport before export as a hard guard. Harden responsive-auth-viewports with onboarding gate and longer describe timeout. Bump web-client to 0.1.54.

  1582. - §C: rows for unprefixed /landing smoke, authenticated (pages) overflow routes, opt-in universe spec, manual remainder. · 0496cc1

    - §C: rows for unprefixed /landing smoke, authenticated (pages) overflow routes, opt-in universe spec, manual remainder. - §E: coverage table (spec → project → paths) + ui-authenticated merge-env prerequisite. - Evidence: responsive-public-viewports + app-shell-layout-viewports (6 passed on stage); tenant-live-health public-edge OK; ui-authenticated fails without E2E_REGISTRATION_USER_EMAIL.

  1583. Add responsive audit matrix; link from design-system README · 6d3f8e8

    - New app-source/docs/02_web-client/responsive-audit-matrix.md: 27 App Router page.tsx inventory, 7 PageClient shells, §C viewport placeholders, stage ops checklist. - design-system README: point manual sheet to committed path (root .cursor/plans is gitignored). - E2E spec comment: public landing shell wording (neutral phrasing). - Evidence: Playwright responsive-public-viewports on stage (5 passed); tenant-live-health public-edge OK.

  1584. Replace marketing surface names with landing; tidy demo step access · c38b136

    - Rename BRAND_ORB_AMBIENT_MARKETING_LAYERS to BRAND_ORB_AMBIENT_LANDING_LAYERS; BrandOrbSectionAmbient variant marketing -> landing (default unchanged for dev templates). - BuildVersionsStrip variant marketing -> landing; update Footer call site. - DemoWalkthrough: drop redundant assertArrayAccess; modulo guarantees bounded index. - Debug logs: stable event keys (sticky_nav.active_section, cta_section.early_access_submit). - Docstrings: neutral public-landing wording across landing components and orb-brand. - KB:…

  1585. Resolve buildVersions keys in AST audit; localize format strings · cae9aab

    - Treat useTranslations() like getTranslations() in extractMessageKeysFromTs so messageKeysReferencedInSource resolves app.buildVersions.* paths. - Differentiate de/fr/es/ar line and apiUnavailable from en (typography). - Bump web-client to 0.1.51.

  1586. CTASection violet radial via globals.css class · f34fe37

    - Add .landing-cta-section-brand-violet-radial using --brand-violet-rgb - Remove inline style from CTASection; document parity in landing-marketing-brand - Bump web-client to 0.1.50

  1587. CTASection violet radial via globals.css class · 71158d2

    - Add .landing-cta-section-brand-violet-radial using --brand-violet-rgb - Document parity with getLandingCtaSectionBrandVioletRadialStyle; bump web-client 0.1.50

  1588. Split §10 annex, tighten globs, KB hygiene tooling · aacc0ed

    - Move validation/testing §10 to AGENT-BEHAVIOUR-ANNEX-VALIDATION.mdc (glob-scoped); shorten pipeline rule description - Scope ROOT_CAUSE_FIX, TEST-DETERMINISM, PYTHON-PACKAGE-API, ZITADEL-CLEAN-RESET with globs; reduce stacked always-on rules - Add ACCESSIBILITY_PRODUCT.mdc, repo AGENTS.md, docs/agent-rules-changelog.md, tools/check_kb_rule_links.py - Fix broken relative KB links; point 502 deep refs at NEXT_FASTIFY_TRAEFIK_ARCHITECTURE - Extend rules-and-knowledge-base with recipe, stop/evidence guidance; tenant…

  1589. Rename landing accent API (drop marketing prefix) · 20dff25

    - landing-marketing-accent-chrome → landing-accent-chrome - getLandingAccentCssVars, LANDING_ACCENT_*_VAR, --landing-accent-* - globals classes landing-accent-*; bump web-client 0.1.49

  1590. Marketing accent CSS vars + globals chrome · 3d5e999

    - Add getLandingMarketingHexAccentCssVars and documented --landing-marketing-accent-* tokens - Move PlatformBadges, pricing, features, how-it-works, demo walkthrough, universe preview, sticky nav surfaces to globals.css (remove imperative nav hover mutations) - Bump web-client to 0.1.48; extend design-system README

  1591. Hero orb rings and badge via CSS vars + globals · dba0f4b

    - Add getLandingHeroOrbDecorativeRingCssVars and ring CSS classes in globals.css - Premium badge bloom uses --brand-violet-rgb (landing-hero-premium-badge-shell) - Bump web-client to 0.1.47; document in design-system README

  1592. Cosmic background via globals.css class · d504db1

    Move LandingPage full-viewport marketing wash to `.landing-page-cosmic-fixed-bg` for DRY tokens and fewer inline styles. Document in design-system README. Bump web-client to 0.1.46.

  1593. Consolidate loop rules, track KB, tenant compose playbook · 3f26d08

    - Slim CONTINUOUS-DEV-LOOP to pointers + loop handoff phrases; fix relative paths - Extend AGENT_BEHAVIOUR (root, app-source, app-pipeline) for responsive UX, tenant secrets via merge-env, KB navigation row - Add tenant-env-compose-contract KB and index README row - Un-ignore .cursor/kb/*.md so operational playbooks version with the repo

  1594. Footer build versions strip (web + API semver) · 6c9e12a

    Add GET /api/build-info (Node) aggregating WEB_CLIENT_APP_VERSION and INTERNAL_API_URL /api/health when available. Mount BuildVersionsStrip in (pages) shell, admin panel, and landing footer; exclude /api/build-info from BFF proxy. Localized app.buildVersions.* in all locale bundles. Bump web-client to 0.1.45.

  1595. Responsive audit E2E, landing 320 overflow, stage 0.1.44 · f78a69f

    - Extend public viewport spec with /auth and /auth/error; fix /welcome gate (clear cookies, welcome-language-gate testid, i18n for title/body). - Clip landing document horizontal bleed (globals landing layout + LandingPage min-w-0) and break long hero headlines; fixes WCAG reflow measure at 320px. - Add opt-in WebGL resize spec (E2E_RESPONSIVE_UNIVERSE=1) for /discovery universe. - Atomic guardrail: disallow arbitrary max-w-[…] under src/app outside allowlist. - Bump web-client to 0.1.44; docs in design-system REA…

  1596. Bump actions to Node-24 runtime (checkout/setup-node v6, setup-python v6) · 9c375e2

    Prep for GitHub Actions Node 20 deprecation (forced Node 24 default starting Jun 2 2026; Node 20 removed Sep 16 2026 per the GitHub Changelog). ## Research-grounded version picks (2026-04-22) - actions/checkout@v4 → @v6 (v5 and v6 both on Node 24; v6.0.2 is the latest stable; v5 was the Node-24 jump) - actions/setup-node@v4 → @v6 (v6.4.0 is the latest stable; upgrades cache + checkout internals) - actions/setup-python@v5 → @v6 (v6 released Sep 2025 with Node 24 runtime) All three v6 releases require GitHub Actions…

  1597. Atomic guard prevents undefined CSS class regressions · 466fff3

    Prevents the 'landing-trust-badge-icon-shell' class of bug from recurring: brand-module constants declaring CSS class names that never get a matching rule in globals.css, silently no-op-ing at runtime. ## Design - Opt-in scope list (CSS_CLASS_BRAND_MODULES) — only scans brand modules that actually export CSS class name strings. button-brand.ts (preset IDs), layout-brand.ts (Tailwind utilities), color-brand.ts (palette helpers), etc. are deliberately out of scope because their exported strings are not CSS class ref…

  1598. Define --brand-violet-rgb + fix button-shimmer class typo · 544fdbb

    Extends the earlier landing-trust-badge-icon-shell fix with two more latent design-system bugs surfaced by a repo-wide scan for CSS classes that are referenced from .tsx but never defined in globals.css. ## Fix 1: --brand-violet-rgb missing from :root The palette module (src/design-system/theme/palette.ts) declares: { cssVar: '--brand-violet-rgb', role: 'Brand violet (r g b triplet for alpha compositing)', category: 'brand', lightValue: '167 139 250', // Tailwind violet-400 } That variable is referenced as rgb(var…

  1599. Define missing .landing-trust-badge-icon-shell so icons render white · 49ce8c0

    Root cause: TrustIndicators.tsx (Shield/Eye/Ban/Smartphone badges on the 'Built on trust and transparency' section) and Testimonials.tsx (Quote badge) both apply .landing-trust-badge-icon-shell + a --sky/--brandViolet/--pink/ --emerald colour modifier, but those classes were never defined anywhere in globals.css or any other CSS file. That made the shell a no-op — the icons inherited currentColor from the document cascade (dark) and the tinted well visible in the design tokens never rendered. Fix: add the missing …

  1600. Reverses the earlier nodemailer 8 → 7 downgrade that was intended to fix the CI npm-install peer-dep warning but inadvertently re-exposed two CVEs fixed only in nodemailer 8.0.5: · 1370a4e

    Reverses the earlier nodemailer 8 → 7 downgrade that was intended to fix the CI npm-install peer-dep warning but inadvertently re-exposed two CVEs fixed only in nodemailer 8.0.5: - SMTP command injection via unsanitised envelope.size (low) - CRLF in transport name option (moderate) Root cause: next-auth@4.24.14 declares peerOptional nodemailer@^7.0.7; that range predates the 2024+ nodemailer-8 CVE fixes and is effectively stale. The only API touched in this repo is createTransport (single call in src/lib/auth/next…

  1601. Bump typescript 5 → 6 across web-client + backend + sim-worker · 4481d76

    Major bump 10/10 (final). TypeScript 6 promotes two deprecations from warning to error (aka.ms/ts6) — fixed properly, not suppressed via ignoreDeprecations. ## Fixes applied (no escape-hatch 'ignoreDeprecations') ### app-source/10_backend/tsconfig.json - 'moduleResolution: "node"' (aka node10) → 'nodenext' node10 is slated for removal in TS 7. nodenext aligns the resolver with Node.js's own ESM/CJS resolution semantics and is the recommended modern default for ESM-emitting Node services (matches the existing 'type…

  1602. Bump vitest 3 → 4 across web-client + backend + simulation-worker · b2f9d3d

    Major bump 8/10. Cross-cutting test-runner upgrade on all three Node packages that use vitest. No @vitest/* companion packages in use, so only the main 'vitest' entry bumped. ## Breaking change encountered + fix vitest 4 tightened constructor-call semantics on vi.fn() mocks: vi.fn().mockImplementation(() => ({...})) is no longer callable with new. One test in the repo used this pattern (the only occurrence found by a repo-wide grep): tests/routes/push-subscriptions-rate-limit.test.ts Migrated to the vitest 4 offic…

  1603. Bump i18next 23 → 26 (backend, 3 majors) · c470805

    Major bump 7/10. Triple-major jump; plugin-interface and public API (init/t/exists/getFixedT) stable across v23 → v26 — no code changes needed. Dependency alignment: - i18next-fs-backend @ 2.6.4 (already latest) compatible with i18next 26 via the stable plugin protocol (.use(Backend) + loadPath option signature). Backend usage (4 imports): src/i18n.ts (plugin init + getTranslations*), src/services/{MatchPushDispatcher,ChatPushDispatcher,AdminSelfTestPushService}.ts (typed translator access via i18next.getFixedT). …

  1604. Bump intl-messageformat 10 → 11 (web-client) · 84c976c

    Major bump 6/10. One direct import in tests/atomic/admin/runDualBankSeed.test.ts (default IntlMessageFormat export). v11 keeps the default-export API stable; no code changes required. - tsc --noEmit → clean - Target test (runDualBankSeed, 3 tests) → all pass - vitest atomic → 935/950 pass (same pre-existing env-dep failures) - npm install → dedupe net -10 packages

  1605. Bump @formatjs/intl-localematcher 0.5 → 0.8 (web-client) · 1b28648

    Major bump 5/10. Single import (match() in src/proxy.ts); API stable across 0.5 → 0.8. Bonus: next-intl already internally resolves ^0.8.1 so aligning our direct dep deduplicates the dependency graph (net -1 package). - tsc --noEmit → clean - vitest atomic → 935/950 pass (same pre-existing env-dep failures) - npm install → clean (added 1, removed 2, changed 1 via dedupe)

  1606. Bump lucide-react 0.562 → 1.8 + migrate removed brand icons · ad298b4

    Major bump 4/10. Lucide 1.x removed brand logos (Twitter/X, LinkedIn, GitHub) for trademark reasons — official migration guidance is semantic-alternative icons or a brand-specific library. Fix applied: Footer.tsx now uses semantic lucide icons. Platform identity is preserved for assistive technology via the existing localised aria-labels (landing.footer.socialTwitter / Linkedin / Github), so screen readers still announce the concrete platform. - Twitter/X → AtSign (universal social-handle symbol @) - LinkedIn → Br…

  1607. Bump undici 7 → 8 (web-client test helpers) · 997b558

    Major bump 3/10. Used only in test helpers for Agent + request API (stable across v7/v8). Six imports under tests/atomic/helpers/ and tests/e2e/helpers/. - tsc --noEmit → clean - vitest atomic → 935/950 pass (same pre-existing env-dep failures) - npm install → clean

  1608. Bump chokidar 4 → 5 (web-client dev watcher) · 395084d

    Major bump 2/10. Dev-only (scripts/dev-watch-sync.mjs), zero prod impact. - Single import: scripts/dev-watch-sync.mjs (dev server file watcher) - chokidar 5 .watch()/.close() API identical to v4 for our use case - tsc --noEmit → clean - Runtime smoke: import chokidar; watch('.'); await close() → OK - npm install → clean

  1609. Bump @types/node 24 → 25 (web-client) · ce82a41

    Major bump 1/10 from deferred list. Type-only, zero runtime impact. - tsc --noEmit -p tsconfig.json → clean - vitest atomic → 935/950 pass (same 15 pre-existing env-dep failures) - npm install → clean resolution, no --legacy-peer-deps

  1610. Package dep sweep — fix CI peer-dep blocker + safe patch/minor bumps · 24e1864

    Resolves the pre-existing CI blocker (web-client `npm install` failing on nodemailer@^8 vs next-auth@^4.24.14's `peerOptional nodemailer@^7.0.7`) and applies safe patch/minor bumps where evidence justified them. ## Fix: nodemailer peer-dep conflict (web-client CI blocker) - app-source/20_web-client/package.json - nodemailer: ^8.0.5 → ^7.0.13 Scope of nodemailer use in web-client: a single `createTransport` call in `src/lib/auth/nextauth/providers/build_email_provider.ts` for the SMTP magic-link transport. That API…

  1611. Bump all module versions (patch) · faae7bf

    Patch-bumps every versioned module in the monorepo so the deployed build can be unambiguously identified via the web-client ``GET /api/health`` response (``WEB_CLIENT_APP_VERSION``, inlined from package.json at build time) and via each Python package's ``pyproject.toml`` version field. Node packages: - app-source/10_backend 0.1.16 → 0.1.17 - app-source/20_web-client 0.1.40 → 0.1.41 - app-source/simulation-worker 0.1.0 → 0.1.1 - app-pipeline/app-build/container_mount 0.1.0 → 0.1.1 Python packages: - app-pipeline 1.…

  1612. Phase 2b authenticated viewport overflow via storageState setup · 1f09032

    Lands the Playwright scaffolding the responsive-audit plan calls out as "near-term priority after first green loop" so the authenticated viewport matrix can grow to cover every (pages) route without paying the ~15 min magic-link cost per test. Single primary intent: Phase 2b authenticated overflow coverage — no product code changes, no regression fixes. - tests/e2e/helpers/authenticated_storage_state.ts: single source of truth for the storageState path (tests/.auth/authenticated-session.storage-state.json). Both t…

  1613. Versions the three-step Fleet sequence that was previously only in chat, so the remaining live-operator work for the 0.1.40 web-client bump and the P4 Login v2 dev/prod rollout is… · 41b4408

    Versions the three-step Fleet sequence that was previously only in chat, so the remaining live-operator work for the 0.1.40 web-client bump and the P4 Login v2 dev/prod rollout is discoverable in-repo: 1. tenant-rebuild-web-client --profile stage (ships 0.1.40 breadcrumbs) 2. app-infra-start-services --service zitadel-login-v2 for dev + prod 3. tenant-live-health --suite full-stack (confirm stage) Flag table verified against this commit of app-fleet/cli.py (see `_add_infra_args`, `tenant-rebuild-web-client` subpar…

  1614. Scaffold responsive-audit Phase 1-2a + PR checklist · 96fb09d

    Lands the non-blocking, evidence-free scaffolding from the responsive-audit plan so subsequent phases (manual matrix, authenticated overflow, strict cleanup) can cite concrete in-repo paths and a shared overflow helper rather than inline duplicates. Per the plan's one-primary-intent rule this PR is scope-bounded to scaffolding only — no feature-code edits, no fix-regressions. - .github/pull_request_template.md: four-checkbox responsive / strict-refactor review checklist (LAYOUT_BRAND tokens, no silent catch, i18n+…

  1615. Admin-debug i18n coverage + usePushNotifications scope · 4bbe6bc

    Three changes, one thread (P5 parity sweep): 1. adminDebugMessageKeys.ts: extend ADMIN_DEBUG_MESSAGE_KEYS_FLAT with the 8 ``admin.debug.webPushSelfTest.*`` keys actually rendered by DebugSettingsTab. The atomic test ``tests/atomic/i18n/adminDebugMessagesStaticData.test.ts`` now covers those keys against every locale bundle, closing a latent gap where a translator dropping one of them would only fail at runtime. 2. DebugSettingsTab.tsx: remove the 44-line CATEGORY_DEFAULTS constant. It was a dead English map that w…

  1616. Tenant-env-secret-guard pre-commit hook · f8e29e0

    Refuse commits that stage a merged .env.<mode> whose index diff adds a non-empty sensitive secret (ZITADEL_CLIENT_SECRET, ZITADEL_ADMIN_PASSWORD, NEXTAUTH_SECRET, VAPID_PRIVATE_KEY, MONGO_*PASSWORD, HARBOR_ADMIN_PASSWORD, INTERNAL_API_SECRET, BREVO_API_KEY, BREVO_SMTP_PASSWORD, CF_DNS_API_TOKEN, COOKIE_SECRET). Removing a secret or blanking a placeholder is not a leak and is intentionally allowed. Scope: - common/env_secret_guard.py: pure scanning library (DRY; reusable from CI, editor plugins, etc.). DEFAULT_SENS…

  1617. Remove ghost tenants; rename unit-delegation → test-unit-delegation · 4e3c31d

    The repository carried several tenant trees that were not created by any active Fleet code path and that ``fleet list-tenants`` mostly ignored: - ``app-tenant/tenants/ifeoma-dev/`` — config-only ghost, no manifest/state. - ``app-tenant/tenants/ifeoma-dev-fullstack-20260406-101646-804754/`` — disposable full-stack snapshot never auto-cleaned. - ``app-tenant/tenants/ifeoma-stage/`` — config + README, no manifest. - ``app-pipeline/ifeoma-dev/`` — leftover from the pre-``app-tenant`` layout. - ``app-tenant/tenants/ten…

  1618. Regression guard for Login v2 healthcheck + image-tag contract · 2266b2d

    Parse docker-compose.oidc.yml and assert: 1. zitadel-login-v2.healthcheck.test does NOT contain --spider; a half-read streaming response triggered TypeError: controller[kState].transformAlgorithm is not a function under Next.js 16 + Node 22, producing HTTP 503 on Login v2 subresources (vercel/next.js discussion #75995). 2. zitadel-login-v2.image interpolates ${ZITADEL_LOGIN_V2_IMAGE_TAG} — ensures the tag stays sourced from tenant env (ZitadelCoreVars) rather than a hardcoded ghcr.io tag that diverges across tenan…

  1619. Login v2 healthcheck consumes body; image tag via tenant env · 06eee83

    Root cause of the intermittent 503 on /ui/v2/login subresources and the "Could not get the context of the user" banner was the Docker healthcheck running wget --spider against a Next.js 16 streaming route. --spider closes the TCP connection as soon as headers arrive, leaving the stream half-read and triggering the Node TransformStream race TypeError: controller[kState].transformAlgorithm is not a function (vercel/next.js discussion #75995). At interval=10s this produced a continuous torrent of stream corruptions b…

  1620. Headless-chromium web-push stub + KB note · 173bbae

    Headless Chromium can't reach a real push messaging service, so pushManager.subscribe never resolved and web-push-settings-subscribe timed out on stage. Add installDeterministicWebPushStub (raw JS addInitScript) that overrides PushManager.subscribe/getSubscription with W3C-shaped in-memory objects and forces Notification permission to granted to survive cross-origin Zitadel redirects. Spec: retries=1 (cold stage sign-in), diagnostic console capture and a 30s waitForResponse window that surfaces inline feedback + c…

  1621. Sync OIDC fragments + web-push E2E · 66cb400

    Persist Zitadel OIDC client id/secret into all-mode merged env after provision (matches run_provision_and_update_env fragment refresh) and refresh PACKAGE_INDEX generated_at. Add Playwright spec web-push-settings-subscribe covering My Settings → Notifications → Push subscribe/unsubscribe against /api/push/subscriptions, plus a shared profile_settings_modal helper (openProfileSettingsFromYou, expandNotificationSettingsSection) for DRY modal navigation.

  1622. Prefer app-start / tenant-redeploy for OIDC fragment healing · 1301c4c

    Clarify that tenant-rebuild-app does not run Zitadel provision; document app-start and tenant-redeploy (without --skip-provision) as the paths that invoke run_provision_and_update_env to align oidc.json and .env.* with IdP.

  1623. Triage Zitadel Login v2 password 503; a11y SettingToggle · 1b0f323

    Document how to distinguish document vs subresource 503 on the Login v2 password URL, why loginName in the query string can still show the context banner, and how to pull APP_INFRA logs via target-stack-logs --plane app. Wire SettingToggle label/description to the Radix Switch (useId, aria-*) and bump web-client to 0.1.39.

  1624. Stage OAuth recovery evidence after tenant-redeploy + Playwright · 73e5255

    - PACKAGE_INDEX generated_at refresh from merge-env / fleet - KB: tenant-redeploy + fragment sync; logs clean; main-nav + public-edge OK

  1625. Sync OIDC client creds into secrets fragments after provision · 10fae31

    - merge_env overlays secrets/application over definition .env; provision only updated .env.* so stale oidc.json caused invalid_client at NextAuth callback - run_provision_and_update_env: resolve tenant root, persist id/secret to all modes via merge_application_secrets - provision_oidc_app: probe transport failure now raises (no fake probed_ok) - docs: TENANT_CREDENTIAL_CHANGE_TRIGGERS + fleet KB; tests for resolve/persist

  1626. OIDC fragment readme for Zitadel client secret drift · d4fe617

    - default_fragment_template(oidc): operator-facing _readme links ZITADEL_CLIENT_SECRET mismatch to invalid_client / OAUTH_CALLBACK_ERROR - KB: record post-rebuild /api/health 0.1.38 vs Playwright OAuthCallback evidence

  1627. Schedule match push on partial bulkWrite upserts · 1e937b4

    - Extract scheduleMatchPushForBulkUpsertIndices (DRY) for bulkWrite upsertedIds. - On MongoBulkWriteError with result.upsertedIds, notify first-materialised rows that still inserted before writeErrors (ordered:false partial success). - Add Vitest for partial MongoBulkWriteError; bump backend to 0.1.16.

  1628. Document OAuthCallback invalid_client triage (i18n + KB) · c9c0de1

    - Concatenate auth.errorPage.codes.OAuthCallback.operatorHint for OAuthCallback (en/de/fr/es/ar). - Fleet KB + tests README: evidence from web-client-stage logs (invalid_client invalid secret), correct compose service name for target-container-logs. - Bump web-client to 0.1.38. Operator must align ZITADEL_CLIENT_SECRET in tenant secrets with Zitadel, merge-env, rebuild.

  1629. Refresh ifeoma-tc PACKAGE_INDEX after fleet rebuild · 93ba5e3

    Fleet regenerated the table-of-contents timestamp and normalized YAML key ordering; no secret material.

  1630. Detect NextAuth errors on locale /auth/error path · 2d47266

    - admin_platform_session: treat /{locale}/auth/error like /api/auth/error; parse error_description; clearer final failure when OAuthCallback lands on App Router error page. - tests README: document OAuthCallback triage (secrets, redirect URIs, merge-env + rebuild). - Fleet KB: post-rebuild version verification via curl + tenant-live-health public-edge.

  1631. Extend openapi-fastify allowlist; document ifeoma-tc stage probes · 7d8d4e4

    - Allowlist Fastify-only paths: chat transcript export, end-connection, user block, internal e2e seed (until OpenAPI documents them). - KB: copy-paste tenant-live-health public-edge for ifeoma-tc + version check via stage /api/health + tenant-rebuild-app pointer.

  1632. SW update toast and clearer push permission copy · 2a53d1c

    - Add ServiceWorkerUpdatePrompt: listens for SW_READY_TO_ACTIVATE_EVENT and shows a persistent localised Sonner toast with Reload (deduped toast id). - Mount on locale layout and UnprefixedRouteShell; add ui.pwa.update* / reloadAction strings (en/de/fr/es/ar). - Expand pushErrorPermissionDenied copy with site-settings guidance in all locales. - Bump web-client to 0.1.37; document in AppProviders, primitives README, and fleet KB.

  1633. Rate-limit subscription mutations and document prune contract · 2bc7997

    - Add per-user pushSubscriptionMutationRateLimit (30/min, POST+DELETE) after auth on /api/push/subscriptions; export PUSH_SUBSCRIPTION_MUTATION_MAX_PER_WINDOW for tests. - Document 429 in OpenAPI; add Vitest for limiter and for WebPushNotifier 404/410 -> removeByEndpoint. - Map HTTP 429 in usePushNotifications to pushErrorSubscriptionRateLimited (all locales); bump backend 0.1.15 and web 0.1.36. - Refresh PushSubscriptionService JSDoc and fleet KB push notes.

  1634. Web Push on first materialised match row · e7d124c

    - MatchPushDispatcher: localised new-match payload, preferences.matchNotifications gating (default on), peer display name by profiles.profileId, /{locale}/discovery/list URL. - MatchStorage: after upsert insert (storeMatch upsertedCount, bulkWrite upsertedIds), schedule notifyMatchRowFirstMaterialized; failures logged, Mongo write unchanged. - Backend chat i18n strings for all five locales; tests for dispatcher + bulk dispatch wiring. - Fleet KB: document match-notification behaviour. Backend version 0.1.14. Evide…

  1635. Admin POST /api/admin/push/test and Debug self-check · 008c3ad

    - Platform admin route dispatches localised Web Push via AdminSelfTestPushService; 503 + WebPushNotConfigured when VAPID is absent; OpenAPI + generated client. - DRY: resolvePreferredLocaleForAuthUid (profiles.preferredLocale) shared by chat push. - Backend i18n: admin namespace (pushSelfTest copy) + track locales/**/*.json in git. - Admin → Debug: Send test push with Bearer fetch and inline success/error feedback; admin.debug.webPushSelfTest.* in all five message bundles. - Fleet KB: document operator self-test p…

  1636. Sonner outside overflow shell; Web Push rotation + VAPID route · 0c5073e

    - Mount Toaster as sibling of cosmic overflow shell; raise default z-index on Sonner. - Add GET /api/push/vapid-public-key (503 when unset); OpenAPI + zod + generated client. - BFF: treat vapid-public-key as public; pushSubscriptionApi attaches Bearer like other Fastify paths. - Service worker: pushsubscriptionchange re-subscribes via public VAPID GET and POSTs subscription with /api/auth/token Bearer; bump cache generation to v4. - Stage/prod web-client: bind-mount NODE_EXTRA_CA_CERTS so Node extra CA path resolv…

  1637. Cross-link Zitadel Traefik/IAM KB; mirror in AGENT-BEHAVIOUR §9 · 45e89d6

    - app-fleet-cli-commands: pointer to zitadel-traefik-and-iam-selfheal + whitelist vs PAT note - AGENT-BEHAVIOUR: non-transient Zitadel edge rollout + debug-sidecar probe hint

  1638. Two-step stage rollout; clarify Management 403 in E2E · 7767bb5

    - KB: tenant-redeploy for IAM self-heal plus app-infra-start-services oidc for Traefik labels - deleteTestUser: distinguish Traefik ip-whitelist 403 vs Zitadel IAM/PAT failures - Bump web-client to 0.1.33

  1639. Align healthz hooks with OpenAPI HealthzResponse · 0d3f298

    - Add healthzObservation mapper (API body + client observedAt ISO timestamp) - Remove invalid timestamp field; drop redundant try/catch in useHealthzQuery - Document GET /api/health in dev README; export mapper from hooks barrel - KB: preflight npm run build:direct before tenant-rebuild-web-client - Bump web-client to 0.1.32 - Regenerate ifeoma-tc PACKAGE_INDEX.yaml (Fleet merge during rebuild)

  1640. Show web client semver on Debug tab with i18n · fadf809

    - Surface WEB_CLIENT_APP_VERSION in DebugSettingsTab (matches GET /api/health) - Add admin.debug.buildInfo.* to all locales; extend adminDebugMessageKeys - Register fleet.automatedHint in canonical key list for parity tests - Document operator comparison in app-fleet-cli-commands KB - Bump web-client package to 0.1.31

  1641. Materialise connection statement i18n keys for legacy Mongo rows · 17f3fc5

    Root cause: GET /api/connection-statements omitted statementKey; ConnectionJourney called useTranslations with undefined → next-intl internal .split on undefined. - Shared resolver (web + backend) domain.seedConnectionStatements.<id>.statement - ConnectionStatementService always serializes statementKey; create persists it - OpenAPI + generated clients/zod require statementKey on list responses - Web 0.1.30, backend 0.1.11; Vitest coverage for resolver

  1642. - BFF-aligned issuer: verified Authorization Bearer [redacted].* returns 200 with the same token; malformed internal prefix returns 401 with message. · 687d65b

    - BFF-aligned issuer: verified Authorization Bearer [redacted].* returns 200 with the same token; malformed internal prefix returns 401 with message. - Web client 0.1.29; Vitest contract auth_token_route_internal_bearer. - DomainModule: reject BIND9 for staging and production (parametrized unit test). - app-fleet unit conftest: reset tenant selection via set_current_tenant(None) each test to fix session-file leak across test_fleet_ui_*. - Pipeline tests: Brevo mail inbound uses brevo.json fragment; traefik parity …

  1643. Show persistent inline feedback under the Push toggle (0.1.28) · 4dc4f97

    `sonner` toasts alone proved unreliable for the push-failure case on stage: the Toaster container mounted (the "Notifications alt+T" ARIA region is in the DOM) but the per-toast elements never rendered on Chromium when `PushManager.subscribe` rejected — reproducible across multiple deploys and independent of our wrapper styling. The user saw "nothing" because the only failure signal was a transient toast that never painted. Fix: in addition to the toast call, the settings section now keeps a persistent `role="stat…

  1644. Web-client: bump to 0.1.27 (sonner Toaster visibility fix) · 4a9f23d

  1645. Sonner Toaster uses dark+richColors defaults so toasts render · 68ee42e

    Follow-up to 65668cb3 which mounted `<Toaster />` globally. On stage the Toaster container showed up in the accessibility tree ("Notifications alt+T" region) but no toast ever became visible — not the push-error toasts and not the profile Save-Changes success toasts either. Root cause: the wrapper passed ``style={{ "--normal-bg": "var(--popover)", "--normal-text": "var(--popover-foreground)", ... }}`` onto the Toaster root, expecting sonner to inherit CSS variables into its per-toast elements. In practice sonner v…

  1646. Route /admin/v1 /v2beta externally + self-heal PAT IAM grants · 0669565

    Two regressions were blocking the admin/MFA Playwright specs against stage. Both are long-term architectural fixes that survive future Zitadel resets and dependency upgrades. ### 1. Traefik routing (docker-compose.oidc.yml) The web-client admin router tc-app-admin-stage uses PathPrefix(/admin/) at priority 50 to serve the locale-prefixed admin panel. Zitadel's admin API under /admin/v1 overlapped that prefix with a lower priority (30), so every /admin/v1/... call fell through to Next.js and was rewritten to /en/ad…

  1647. Mount global Toaster + discriminated-union push result so failures are actually visible · 65668cb

    Root cause of the user-reported "clicking Push Notifications does nothing" report on stage.trueconnection.app/en/you: 1. The entire app imports ``toast`` from ``sonner`` in ~15 places but NO ``<Toaster />`` container was mounted anywhere. Every single ``toast.error`` / ``toast.success`` call (not just push — also chat, profile, admin, ratings, …) silently enqueued into sonner's store with no visible surface. The push toggle is the feature where it hurt most because its failure path has no backup UI. 2. ``Notificat…

  1648. Drive onboarding gate in assertPostLoginJourneyProgress · 53b47fb

    Fresh magic-link registrations land on the mandatory onboarding gate at /{locale}/onboarding, which hides the bottom nav by design. The sister helper waitForAuthenticatedAppNav already calls ensureMandatoryOnboardingCompleteForShellE2e first (commit 7b146f9e), but assertPostLoginJourneyProgress — used by runRegistrationThroughBottomNav — still expected the bottom nav to render immediately post-login, so login-and-app-nav timed out for 60s waiting for a nav that can only mount once onboarding is submitted. Validate…

  1649. Merged env files materialize the full secret surface; tip revert does not erase git history. · 084e61f

    Merged env files materialize the full secret surface; tip revert does not erase git history. Aligns KB with operator security expectations.

  1650. Reject BIND9 DNS authority in staging · ef88da7

    DomainModule.execute now fails fast before package install when dns_providers.provider is bind9 and BootstrapContext.environment is staging, matching the contract enforced by unit tests. - Remove pytest.ini ignore for test_domain_module_dns_policy.py - Document policy in app-fleet-cli-commands KB

  1651. Document skip-worktree for merged tenant .env hygiene · 2ed7f81

    Operators who keep merge-env output on disk can use git update-index --skip-worktree locally; note pull conflicts and prefer checkout -- when done.

  1652. Persist merge-env output for stage (VAPID + Zitadel rotation) · aca68ec

    The previous commit (8ae0e842 feat(push): web push subscriptions, VAPID tenant env, ES2022 Intl.Segmenter) wrote the VAPID triple to the authoritative `secrets/application/stage/misc.json` fragment but did not re-materialise the downstream `.env.stage`, leaving `NEXT_PUBLIC_VAPID_PUBLIC_KEY` empty and the three backend keys absent from the deployed env bundle. Subsequent `fleet tenant-rebuild-web-client` runs (needed for unrelated refactors on v0.1.24 and v0.1.25) correctly re-ran `merge-env`, which pulled the alr…

  1653. Web-client: remove PROFILE_PEER_NO_DISPLAY_NAME sentinel, localise peer name fallback (v0.1.25) · be2a63e

    The deleted `src/lib/constants/profileDisplay.ts` exported a hardcoded English "No display name" string that was used both as a user-facing UI fallback **and** as an equality sentinel in `ConnectionManager` to decide `hasFriendlyName`. That double-duty is incompatible with localisation: the moment a translator substitutes "Aucun nom" / "Jemand" the sentinel check silently flips. This change separates the two concerns along the onion principle: - Domain layer (`transformToMatch`, `Match.name`): an empty string now …

  1654. Fleet+bff: cookie-less internal-bearer path for tenant-seed-mongodb (v0.1.24) · 66ddde5

    Close the 401 loop that blocked `fleet tenant-seed-mongodb --use-tenant-admin-credential` from reaching Fastify through the Next.js BFF: - app-pipeline/app-fleet/src/fleet_internal_bearer.py: Python minter mirrors the backend's `internal.<authUid>.<emailB64>.<sig>` contract so Fleet can auto-promote an ADMIN_EMAILS user to platform-admin without operator JWT handling. Byte-parity cross-checked against the Node reference via 13 unit tests. - app-pipeline/app-fleet/cli.py + cli/tenant + manager orchestration + runne…

  1655. Point operators at tenant-seed-mongodb for missing textKey/labelKey (v0.1.10) · a5130a1

    The live ifeoma-tc stage smoke surfaced `questions["q1_core_values"].textKey must be a non-empty locale message key — repair the Mongo document or run scripts/backfill-domain-ids.ts`. That remediation hint was wrong: `scripts/backfill-domain-ids.ts` only rewrites English category/value label tokens to snake_case domain ids, it does not restore a dropped `textKey` or option `labelKey`. The correct repair is to re-seed the packaged bank via `fleet tenant-seed-mongodb`, which POSTs the authoritative `default-question…

  1656. Extend question-bank-row-contract with JWT acquisition + stage repair recipe · fd767a1

    The prior runbook told operators what to do on /api/questions 422 but left the "how do I obtain a platform-admin JWT for --bearer-token-file" step implicit, so the next on-call would have to re-discover it. Adds: - Explicit confirmation that web-client v0.1.22's httpErrorFromResponse now preserves the Fastify envelope 'message' (no more [unknown] Unprocessable entity), so operators can read the failing row id straight out of the admin banner / errorLogger. - Two supported token sources — interactive (copy the Zita…

  1657. Document stage activation lessons + SW rolling-deploy self-healing · fbcadf4

    Two practical notes added next to the VAPID rollout section so the next operator activating Web Push on a new tenant does not rediscover them: - Three-piece wiring rule: ARG in the web-client Dockerfile, matching build.args in docker-compose-full.yml, and runtime VAPID_* env on every backend block. capabilities.webPush=true on the server-side route is NOT sufficient evidence that the client bundle has the key; grep the chunk for the public-key substring to confirm. - registerServiceWorker now calls registration.up…

  1658. Clarify that next-auth CLIENT_FETCH_ERROR at debug level is expected · 41dc125

    No runtime change. The stage smoke run logged `[next-auth][error][CLIENT_FETCH_ERROR]` entries during page transitions. Evidence from the browser console capture confirmed they arrive on `console.debug` (not `console.error`), which matches next-auth v4.24+'s intentional classification for aborted `/api/auth/session` fetches during SPA navigation and tab visibility changes (see next-auth PR #9345 and https://next-auth.js.org/errors#client_fetch_error). Adding suppression would be defensive code for a non-error. Ins…

  1659. Web-client: stop raising GL_INVALID_ENUM on /discovery universe renderer (v0.1.23) · 60a98dd

    `UniverseWebGLEngine.createStarProgram` called `gl.enable(0x8642)` to toggle `GL_PROGRAM_POINT_SIZE`. That capability is from desktop OpenGL only — it is not in the WebGL 2 enable-cap allow-list (Khronos WebGL 2.0 spec §5.14.3, which limits `enable`/`disable` to BLEND, CULL_FACE, DEPTH_TEST, DITHER, POLYGON_OFFSET_FILL, SAMPLE_ALPHA_TO_COVERAGE, SAMPLE_COVERAGE, SCISSOR_TEST, STENCIL_TEST, RASTERIZER_DISCARD), so every universe page load logged: WebGL: INVALID_ENUM: enable: invalid capability without affecting ren…

  1660. Web-client: normalise same-origin HTTP failures to AppError subclasses (v0.1.22) · be94c93

    Fixes the `[unknown] Unprocessable entity` console spam on admin?section=system-data and every other tab that goes through `nextjsApiRequest`: - Introduce `lib/api/httpErrorFromResponse` — single source of truth mapping HTTP status codes to the canonical `AppError` family (ValidationError for 400/422, AuthError for 401, PermissionError for 403, NotFoundError for 404, TimeoutError for 408/504, ConflictError for 409, RateLimitError for 429, ApiError for everything else). Parses the Fastify-style `{ error, message }`…

  1661. Web-client: delete src/i18n/translate/ wrappers, drive all call sites via next-intl (v0.1.21) · a408dbc

    Final step of the mobile-localisation refactor. All ~170 call sites have been migrated to `useTranslations()` / `getTranslations()` in prior batches (v0.1.14-v0.1.20); this commit removes the deprecated custom translation layer entirely: - Delete `src/i18n/translate/` (AppT, useTranslate, formatIcu, paramCoercion, resolve, legacy requireTranslationLookupKey shim). - `getMessageByKey` / `tryGetMessageByKey` now live at `src/i18n/resolveMessage.ts`; DebugPanel updated accordingly. - `src/i18n/index.ts` barrel re-exp…

  1662. Backend VAPID_* runtime env + sw.js cache v3 to purge stale client bundles · 49f0cd4

    Follow-up for c27a821c: the backend VAPID_* additions I made to docker-compose-full.yml were lost in a subsequent auto-hook pass; without them the running backend container had no ``VAPID_PUBLIC_KEY`` / ``VAPID_PRIVATE_KEY`` / ``VAPID_SUBJECT``, so ``WebPushNotifier`` initialised in the "disabled" state on stage and no pushes would be sent even after tenant-rebuild-app. - app-pipeline/app-deployment/docker-compose-full.yml * Re-add ``VAPID_PUBLIC_KEY`` / ``VAPID_PRIVATE_KEY`` / ``VAPID_SUBJECT`` to ``x-backend-dev…

  1663. Move provider_surface to common.contracts; drop phase 1a quarantine · 8241987

    Moves the pure provider-surface module app-pipeline/app-tenant/contracts/targets/_provider_surface.py to its architecturally correct home app-pipeline/common/contracts/provider_surface.py Rationale (onion principle): the constants `PROVIDER_SURFACE_{VIRTUAL_LIBVIRT,HOSTING_API}`, the inference `infer_provider_surface`, the cross-field validator `validate_provider_surface_cross`, and the normalizer `normalize_provider_surface_value` are pure data + pure functions shared across the tenant, fleet, and hosting layers.…

  1664. Web-client: migrate [redacted] to next-intl (v0.1.20) · 4251618

    Batch 2 of the deletion of the custom `src/i18n/translate/` layer. All files under these feature and shared-component folders now call `next-intl`'s `useTranslations()` directly at the root namespace: - `src/features/chat/` — 24 components + 4 hooks + 4 utils (plus 2 atomic tests with minimal mock-type casts) - `src/features/connections/` — 6 components + 2 utils - `src/features/analytics/` — 5 components - `src/features/matching/` — 1 component - `src/features/ratings/` — 2 components - `src/features/device/` — 1…

  1665. Drain orphan-tests backlog (5 of 6 categories) · db564a2

    Implements missing production symbols that test-first orphan tests asserted against. No remaining collection-error orphans; full app-fleet unit suite runs 2046 passed / 0 failed. - platform_admin_remote: add _parse_merged_dotenv — strict KEY=VALUE parser that raises PlatformAdminConfigurationError on duplicate keys, malformed lines, or empty keys so mongosh role updates surface operator config bugs before touching the tenant database. - misc_cmds + cli.py: add tenant-domain-upsert and tenant-domain-remove CLI comm…

  1666. Wire NEXT_PUBLIC_VAPID_PUBLIC_KEY through Dockerfile ARG/ENV and backend VAPID_* env · c27a821

    The previous push-activation attempt on stage shipped backend v0.1.9 and web-client v0.1.19 with ``capabilities.webPush: true`` reported by the health route, yet the browser still threw ``pushErrorVapidNotConfigured``. Root cause: Next.js only inlines ``NEXT_PUBLIC_*`` into the client JS bundle **at build time**. The backend runtime env had the key, and the Next.js server-side route could read it, but the Dockerfile did not declare ``ARG NEXT_PUBLIC_VAPID_PUBLIC_KEY`` and the compose file did not forward the value…

  1667. Unblock run_tests phases uncovered by push-time CI · b5e682b

    A fresh local run of `python run_tests.py all` (the same batch `run_ci.py` phase 2 runs in the new push-time CI) surfaced several pre-existing broken tests and real code drift on HEAD. This change fixes the ones with a clear, contained root cause and documents the rest as open items so the CI workflow does not red-line silently. Fixes (each verified by re-running the relevant module batch): * app-hosting workload_providers.resolve — replace the broken `from app_tenant_root.contracts import infer_provider_surface` …

  1668. Web-client: migrate admin/profile/journey/discovery to next-intl (v0.1.19) · b3fec8e

    Batch 1 of the deletion of the custom `src/i18n/translate/` layer. All files under these four feature folders now call `next-intl`'s `useTranslations()` directly at the root namespace (full dot-path keys preserved): - `src/features/admin/` — 14 files (AdminPanel + tabs + generator) - `src/features/profile/` — 17 files (cards, sections, settings, hooks) - `src/features/journey/` — 12 files (screens, modals, questionMapper) - `src/features/discovery/` — 20 files (list + universe-webgl + utils) Pattern applied (match…

  1669. Web-client: migrate features/landing/* to next-intl useTranslations (v0.1.18) · 6125904

    Removes the custom `useTranslate` / `<AppT>` wrappers from all 15 landing page components and calls `next-intl`'s `useTranslations()` directly at the root namespace with full dot-path keys (for example `t("landing.cta.headline")`). Behaviour-preserving: no message keys touched, no props or component logic changed, strict missing-key policy still enforced by `StrictIntlClientProvider.getMessageFallback` (which throws `MissingMessageKeyError`). Scope: `src/features/landing/components/` CTASection, Comparison, DemoWa…

  1670. Document APP_INFRA vs HOST_INFRA networks; neutral dev domain example · d1d4e5e

    - Split external-network expectations: APP_INFRA defaults require traefik only; HOST_INFRA includes monitoring and therefore internal_net. - Domain resolver test uses synthetic tenant-dev/example inputs (no ifeoma-* coupling).

  1671. Warn against committing merged tenant .env secrets to git · d15bb6a

    Fleet merge-env materializes operator secrets into tracked tenant paths; document revert workflow so ZITADEL_CLIENT_SECRET, VAPID_*, and admin passwords never enter the public repo.

  1672. Implement enforce_managed_bind_domain_ip_preflight (close orphan test) · ff73866

    `app-fleet/tests/unit/test_managed_bind_domain_ip_preflight.py` (4 tests) was committed ahead of the implementation and failed collection on clean checkouts with `ImportError: cannot import name 'enforce_managed_bind_domain_ip_preflight' from 'src.manager.fleet._dns.policy'`. Implement the contract the tests describe. What it gates: When `dns_mode=managed_bind9`, every tenant domain row (both `public_ingress` and `internal_service_endpoint`) must carry a literal, parseable IPv4/IPv6 `ip_address`. The zone file is …

  1673. Capabilities.webPush on /api/health + HealthzResponse drift fix · c9fcebb

    Adds operator-visible instrumentation so Web Push / VAPID configuration is discoverable from a single HTTPS probe, and cleans up the long-standing contract drift between what the backend actually returns and what the OpenAPI / valibot schemas claimed. - 10_backend/src/routes/health.ts * GET /api/health now emits ``capabilities: { webPush }`` sourced from WebPushNotifier.isConfigured(). Flags never hide misconfiguration behind a silent ``true`` — a feature that should be on but is not wired surfaces as ``false`` so…

  1674. Landing marketing uses useTranslate + document secrets refresh CLI · f091c37

    - Replace raw next-intl useTranslations with useTranslate so keys pass requireTranslationLookupKey; keep t() strings (remove legacy AppT/defaultValue). - Hero aligned the same way. - KB: tenant-refresh-secrets-templates operator commands. - Bump web-client to 0.1.16.

  1675. Auto-heal Zitadel OIDC client-secret drift on every deploy · 1a41f8d

    Root cause of stage `invalid_client (invalid secret)` outages: the deploy pipeline short-circuited Zitadel provisioning when `ZITADEL_CLIENT_SECRET` was populated. When a secret rotated out-of-band (manual Management API, incident response, restore from backup), the tenant secrets store kept the stale value and every OAuth callback failed. Nothing re-verified that the stored secret was still what Zitadel had on file. Fix (three-layer, idempotent, non-invalidating): 1. `zitadel_provision.probe_oidc_client_secret` (…

  1676. Track ratchet baseline; quarantine phase 1a until resolve.py fix · d7ab576

    * `app-pipeline/tools/.compliance-baseline.json` generated via `python3 tools/check_compliance.py --update-baseline` (1165 violations across 378 file entries on current HEAD). Verified deterministic across three consecutive scans before capture. Ratchet confirmed green against the saved baseline ("No regressions — baseline check passed."). Future code-compliance regressions will now fail CI. * `.gitignore` adds a negation for the baseline so the repository-wide `*.json` exclusion does not silently drop it. * `.git…

  1677. Non-destructive secrets template checklist refresh + pushSubscriptions admin read · fcd59c1

    Closes the last gap in the Web Push rollout — operators pulling a code update that introduces a new default secret (for example the VAPID_* keys for browser push) now pick the keys up automatically on any tenant bind, instead of silently running with a stale local checklist. - common/tenant_application_secrets_template.py * refresh_fragment_application_secrets_template — non-destructive merge: adds missing default keys, refreshes the _readme doc string, and keeps every existing value (including operator-added keys…

  1678. Resolve Zitadel management URL for host-run Playwright · c4ba3b4

    - Skip Docker service hostnames (zitadel, zitadel-application) when picking Management API origin so public ZITADEL_ISSUER wins over in-cluster URLs. - Throw when all candidates are host-unreachable (remove silent E2E_BASE_URL fallback for management). - Export pickFirstE2eReachableManagementOrigin with Vitest coverage. - app-main-nav-all-tabs: describe-level retries for cold-login flake. - Document in tests/README.md and app-fleet-cli KB; bump web-client to 0.1.15.

  1679. Web-client: prep next-intl migration — relocate requireTranslationLookupKey, pilot rbac, drop formatIcu test-site (v0.1.14) · 70a805c

    Preparation step for deleting the custom `src/i18n/translate/` layer in favour of next-intl's `useTranslations()` directly: - Move `requireTranslationLookupKey` to `src/i18n/requireTranslationLookupKey.ts` (canonical). `src/i18n/translate/requireTranslationLookupKey.ts` becomes a deprecated re-export shim so `AppT` / `useTranslate` / the translate barrel keep compiling until the full call-site migration lands. - Repoint `StrictIntlClientProvider` and the atomic test to the new path. - Pilot migration: rewrite `src…

  1680. Typed push subscription API errors with locale messages · 8edba33

    Introduce PushSubscriptionApiError (operation, status, bodySnippet) in pushSubscriptionApi instead of English Error strings. usePushNotifications maps errors to profile.settings.notifications keys for save/remove HTTP failures and empty response bodies. Bump web-client to 0.1.13. Document client UX in app-fleet-cli KB.

  1681. Locale-aware push hook errors under profile.settings.notifications · b90bb03

    - Add pushErrorPermissionDenied, pushErrorVapidNotConfigured, pushErrorSubscriptionIncomplete, pushErrorTechnical (ICU detail) in all locale bundles; reuse pushUnsupported for unsupported-browser path. - usePushNotifications: useTranslate + useCallback helpers; wrap technical failures with pushErrorTechnical. - Bump web-client to 0.1.12. Tests: npm run validate:i18n (190), npm run test:atomic:offline (880).

  1682. The VAPID keypair generator and Fleet CLI command landed in fb51d064; this change rounds out the public-facing contract so operators and agents can discover and audit the new entr… · f50c425

    The VAPID keypair generator and Fleet CLI command landed in fb51d064; this change rounds out the public-facing contract so operators and agents can discover and audit the new entry point: - app-fleet/README.md: add tenant-generate-vapid-keys to the command table with the full operator flow (merge-env, tenant-rebuild-web-client, tenant-rebuild-app). - .cursor/kb/app-fleet-cli-commands.md: Web Push / VAPID section covering --mode, --subject, --force, --json semantics and the misc.json destination. - app-fleet/cli.py…

  1683. Track Fleet VAPID generator + push-subscription test fixtures · fb51d06

    Five files landed in the working tree alongside the recent `feat(push)` commits but were never staged, which would break a clean checkout and fail CI imports: * `app-pipeline/common/vapid_keypair.py` Pure NIST P-256 keypair generator for Web Push (RFC 8292). Raises on invalid subjects and on unexpected encoding lengths (no silent fallbacks). Reused by the Fleet CLI and by `common/tests/test_vapid_keypair.py` which asserts the shape contract (base64url, no padding, correct byte counts). * `app-pipeline/app-fleet/sr…

  1684. Document push-time GitHub Actions CI in runner overview · 04c06e4

    Adds §3.1 to PIPELINE-RUNNERS-OVERVIEW.mdc describing the four offline jobs in .github/workflows/ci.yml, their relationship to run_ci.py phases, the commands needed to reproduce CI locally, and what is deliberately left out (live E2E, Brevo, Playwright, fleet SSH health). Also records two known open items so future agents do not silently re-add these as gates before the underlying code is cleaned up: - Web-client npm run lint (126 errors, mostly react-hooks/refs in features/discovery/universe-webgl; needs a dedica…

  1685. Playwright skip Zitadel management when API URL is internal · ae6cffe

    Clarify EAI_AGAIN zitadel from ZITADEL_MANAGEMENT_API_URL on laptop; document E2E_ZITADEL_SKIP_MANAGEMENT_PROVISION=1 + public E2E_BASE_URL evidence for app-main-nav-all-tabs. Refresh Last reviewed cross-link.

  1686. Type-check backend and web-client before tests · 8c2639d

    Adds `tsc --noEmit` as a gate in both JS/TS jobs. Verified locally on HEAD (backend and web-client both compile cleanly). Runs before the vitest suite so a type regression fails fast with a readable tsc error instead of surfacing as an opaque test-runtime failure. Invoked via `npx tsc` so no `package.json` changes are needed (avoids touching module version numbers for a CI-only improvement).

  1687. Run offline test suites on every push and PR · 2865bab

    Adds .github/workflows/ci.yml with four parallel jobs covering the tests that do not require live infrastructure: - python-ci: runs app-pipeline/run_ci.py (architecture compliance + main-module unit tests). SKIP_SCHEMA=1 because schema drift is already owned by schema-contract.yml and is the only step needing Java. - backend-tests: installs app-source/10_backend + the app-contracts schema-tools deps (used by the pretest hook) and runs npm test. - simulation-worker-tests: vitest unit suite for the public-API exerci…

  1688. Playwright E2E base URL and internal IdP DNS pitfalls · 23ef210

    Document evidence: /api/health 404 when NEXTAUTH_URL is not the Next origin; getaddrinfo EAI_AGAIN zitadel when merged env uses Docker-only issuer hostname. Cross-link in Last reviewed line.

  1689. Web push subscriptions, VAPID tenant env, ES2022 Intl.Segmenter · 8ae0e84

    - web-client: service worker push/notificationclick handlers, pushSubscriptionApi, and device hooks wired to a real Web Push subscription lifecycle (bumps 0.1.10) - tenant: VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY / VAPID_SUBJECT wired through the env seed builder, env var groups, secrets template, and a dedicated vapid_derived_env module so NEXT_PUBLIC_VAPID_PUBLIC_KEY is exposed to the browser and private halves stay in misc.json - backend: tsconfig target/lib bumped to ES2022 + ES2022.Intl so ChatPushDispatcher can…

  1690. - Regenerate Zod from OpenAPI; add schema tool template and generator updates. · c5f1a02

    - Backend: web-push subscriptions and notifier, chat push dispatcher, Mongo helpers; wire push routes; sync generated validation schemas; bump to 0.1.6. - Web client: timezone bootstrap and API route, routing/bundle/SEO updates, locale E2E matrix; Vitest alias plus inline/ssr.noExternal for next-intl so validate:i18n and proxy tripwire resolve next/server under Next 16; bump to 0.1.9. - Pipeline: requirements and tenant PACKAGE_INDEX touch-ups. Tests: npm test (10_backend 297), npm run validate:i18n && npm run tes…

  1691. Chat lifecycle gates, transcript export, and connection routes · d4d68a8

    - ChatService: transcript vs messaging gates (peer invariant before stage checks), read watermarks on mark-read, bounded transcript export, retention purge, media upload ordering with storage rollback, transactional sendMessage(mediaId). - Routes: GET transcript-export, multipart Content-Type check, mute/media thread id resolution via conversations lookup, 409/400 mapping for stage and peer errors. - Connections: POST end-connection with session persist; persist after request/respond conversation; transition respo…

  1692. Locales contract, query caps, rate-limit buckets, connection transitions · 2be31df

    - Add lib/locales.ts as single source for AppLocale and Accept-Language narrowing; wire i18n, profile, discovery, and synthetic profile paths to normalizeStoredAppLocale. - Remove TranslationService; keep translation access via i18next helpers. - Restore ListConnectionsQuery and tighten GetConnectionStageQuery / GetMessagesQuery (cursor vs beforeCursor) with OpenAPI-aligned caps. - Rate limit: storageKeyPrefix for isolated counters; clearRateLimitStoreForTests for Vitest; chatMediaUploadRateLimit and connectionMut…

  1693. Align journey seed Fleet flags + web-client 0.1.6 · 6f1c55b

    Refresh AGENT-BEHAVIOUR (app-pipeline + application root) and KB index for optional --verify-admin-reads and --synthetic-bootstrap-json. Extend connection-bank-seed.md with copy-paste examples. Expand FleetPublicInterface.seed_mongodb_journey_banks docstring. Sync seeds README and runDualBankSeed module note; bump web-client package version for health probe parity. Record evidence in app-pipeline/todos.md.

  1694. Optional verify GET and synthetic bootstrap after journey seed · fc2900d

    Add --verify-admin-reads (GET /api/admin/questions after bulk POSTs) and --synthetic-bootstrap-json (POST synthetic bootstrap after bulks) to tenant-seed-mongodb and run_tenant_fleet_manager seed action. Dry-run validates synthetic JSON shape; verify is rejected with dry-run. Document live operator expectations in connection-bank-seed.md and CLI KB. Default journey-only seed unchanged; dual runner entrypoint imports unchanged per design.

  1695. Clarify forbidden locale narrowers + public route matrix assertion · d32c179

    Documentation-only touch-ups to two reference files: - `src/i18n/CONTRACT.md`: note that `isAppLocale` / `isProfileLocale` are also forbidden narrowers alongside `hasLocale` / `.includes + cast`, and that `tests/atomic/i18n/forbiddenLocaleNarrowers.test.ts` enforces it. Also calls out the `LocaleCookieWriteError` surface in `src/lib/i18n/next_locale_cookie_client.ts` so future edits know that non-2xx responses from `POST /api/i18n/locale` raise there. - `tests/README.md`: correct the public-route-matrix descriptio…

  1696. Tracked connection/journey bank seed scope and runner import · 0b019cc

    Add app-pipeline/docs/connection-bank-seed.md (Fleet vs UI vs out-of-scope). Link from KB index, app-fleet-cli-commands, and agent navigation rules. Clarify run_tenant_fleet_manager _entrypoint_paths dual import as two supported entry contexts; script and pytest verified.

  1697. Cover journey bank HTTP POST order and error paths · f4c3105

    Mock _post_json to assert connection-statements bulk precedes questions bulk, payload keys, and JourneyBankSeedError on non-2xx responses. docs(seeds): document Fleet tenant-seed-mongodb for operators; bump web-client to 0.1.5 (package.json / WEB_CLIENT_APP_VERSION build surface).

  1698. Forbid new Git branches unless the user requests them · a430eeb

    Record in pipeline, application-root, and app-source agent behaviour rules: routine work stays on the current branch (typically main).

  1699. Refresh localized UI text scanner baseline · 859ca00

  1700. Commit remaining workspace changes (infra, fleet, tenants, web) · 1a2130d

    Large sync: HA/edge TLS and infra probes, Tolgee stack removal, registry and tenant env updates, backend and web-client tests and docs, lifecycle report cleanup, and related pipeline constants.

  1701. Workflows, pipeline READMEs, KB playbooks, plans, contracts, deployment · f9929a5

    Add GitHub workflows; refresh app-pipeline README and test runbook; expand .cursor/kb operator playbooks; touch done plans and runners overview; add container mount schemas and app-contracts gitignore; deployment VM override, password ops, Zitadel redirect URI test; extend app-fleet CLI.

  1702. Move Cursor plans into done, tbd, and todo folders · 56919c9

    Relocate phase2g HA follower to done; sweep deferred infra plans to tbd; stage final acceptance plan to todo.

  1703. Restore vm_api, e2e tests, docs, and project rule · 3ef743f

    Resolve merge conflict by keeping incoming modifications for the app-hosting-vm scaffolding (vm_api management module, golden-image e2e test, README/TEST_PLAN/ARCHITECTURE docs, requirements) and the PROJECT_TRUECONNECTION project rule.

  1704. Auto-heal Zitadel OIDC app config on every provision run · e2b631d

    Closes the follow-up from `9f588f5f`: the Fleet provisioner (`zitadel_provision.provision_oidc_app`) now reconciles the two fields that drift on already-bootstrapped Zitadel instances, in one idempotent PUT against `/management/v1/projects/{P}/apps/{A}/oidc_config`: * `accessTokenType` -> `OIDC_TOKEN_TYPE_JWT`. Zitadel defaults new OIDC apps to `OIDC_TOKEN_TYPE_BEARER` (opaque), which the Fastify backend rejects with `Invalid Compact JWS` when validating Bearer tokens via JWKS (see `app-source/10_backend/src/lib/z…

  1705. Zitadel JWT access-token + admin-human recovery paths on stage/prod · bc0a33b

    - Document the `OIDC_TOKEN_TYPE_JWT` requirement for Zitadel OIDC apps and how to migrate already-bootstrapped tenants (Management API `oidc_config` upsert), since `start-from-init` only sets it on fresh DBs. - Document the `v2beta/users/human` flow for creating a tenant-named admin on an already-bootstrapped Zitadel where the `_ORG_HUMAN_*` env vars were ignored. Includes the `docker exec web-client ... node` transport template (same pattern used by the NextAuth adapter debug helpers) so operators bypass the `ip-…

  1706. Pass first-instance human admin env vars to Zitadel bootstrap · a524ceb

    Previously `docker-compose.oidc.yml` passed only the `ZITADEL_FIRSTINSTANCE_ORG_MACHINE_*` env vars through to the Zitadel container, so fresh tenant bootstraps fell back to Zitadel's generated default human admin (`zitadel-admin@zitadel.<ZITADEL_EXTERNALDOMAIN>`) instead of the tenant-configured `admin@<ZITADEL_EXTERNALDOMAIN>`. Playwright sign-in then failed with `Initial User not supported` / `User not found` on stage because the merged env expected the tenant-named admin to exist. Fix: map the five `ZITADEL_FI…

  1707. End-to-end authenticated shell on stage (cookie prefix, JWT access, JWKS discovery) · 9f588f5

    Drives the Playwright `app-main-nav-all-tabs` spec to green on stage after the OIDC internal-URL / Traefik routing fixes landed in `9d8afd04`, `fb3488e8` and `be1059c3`. Four root causes were blocking the authenticated shell, each confirmed by remote evidence and fixed at the layer where it originated: 1. Session cookie prefix mismatch in Next.js server routes. `getToken({ req, secret })` auto-detects `useSecureCookies` from `request.url`, which inside the web-client container is the internal URL (`http://web-clie…

  1708. Test commit staged only · fec5fed

  1709. Drop default port from Zitadel Host override so ID-token iss matches discovery · 9d8afd0

    Root cause of stage NextAuth `OAuthCallback` error after OAuth login succeeded (evidence from web-client stderr with `NEXTAUTH_DEBUG=true`): ❌ [auth] NextAuth OAUTH_CALLBACK_ERROR technicalDetails.message: "unexpected iss value, expected https://stage.trueconnection.app, got: https://stage.trueconnection.app:443" The `zitadel-headers` Traefik middleware rewrites `Host` and `X-Forwarded-Host` for every request to the Zitadel container. With `ZITADEL_EXTERNALPORT=443`, the middleware was appending `:443` to both hea…

  1710. Remove Traefik Buffer middleware from all Next.js routers · 404bd44

    Follow-up to fb3488e8 (tc-auth-stage `tls=true`) and #11568 triage: The `request-body-limit@file` middleware uses Traefik's Buffer transport (`vulcand/oxy/buffer`), which has a known upstream bug (traefik/traefik#11568): it fails with `no data ready` on empty-body chunked HTTP 302 responses and returns a bare HTTP 500 at the edge. Next.js standalone routinely emits `302` with `Transfer-Encoding: chunked` and no Content-Length (NextAuth redirects, locale negotiation, `next.config.ts` redirects, Server Action redire…

  1711. Zitadel OIDC internal URL targets Zitadel container, not Traefik · be1059c

    Root cause of stage Playwright OAuth failure (`?error=OAuthSignin` redirected by NextAuth core): the merged env shipped `ZITADEL_ISSUER_INTERNAL=http://traefik:80`, but every Traefik router for Zitadel (`zitadel-public`, `zitadel-management`, `zitadel-login-v2`, ...) is declared `tls=true` in `app-pipeline/app-infra/services/oidc/docker-compose.oidc.yml`. With `tls=true`, those routers match only on the TLS-enabled `websecure` entrypoint, so HTTP requests on port 80 fall through with a 404 and `openid-client` disc…

  1712. Route /api/auth/* on stage so NextAuth signin stops returning 500 · fb3488e

    Root cause: `tc-auth-stage` router had no `tls=*` label, so on the `websecure` entrypoint HTTPS requests for /api/auth/* fell through to the catch-all `tc-app-stage` router. That router applies `request-body-limit@file` (Traefik Buffer middleware) which trips upstream bug traefik/traefik#11568: empty-body chunked 302 responses (Next.js `/api/auth/signin`) yield `vulcand/oxy/buffer: no data ready` and a bare `HTTP 500 Internal Server Error` (21 bytes, no CSP, no Server header) at the edge — while the upstream conta…

  1713. Internal Zitadel OIDC discovery + NextAuth route diagnostics · c0cbe06

    - When ZITADEL_ISSUER_INTERNAL is set, use it for OpenID discovery with Host from ZITADEL_ISSUER so Traefik routes to Zitadel; invalid internal URL throws AuthError. - NextAuth catch-all: force-dynamic, runtime nodejs, structured logs for uncaught errors and HTTP 5xx responses (NEXTAUTH_ROUTE_* JSON lines for container logs). - Add resolveNextAuthCatchAllSegmentsForGuards helper and Vitest coverage. - Fleet KB: remote rebuild rsyncs operator app-source; Zitadel internal issuer; NEXTAUTH_DEBUG triage for /api/auth …

  1714. Skip Zitadel admin lifecycle on stage; surface OAuth/403 errors · a971a16

    - loginZitadelUserAndLand: E2E_ZITADEL_SKIP_MANAGEMENT_PROVISION skips delete/create; resolveAdminHumanPasswordForE2E reads tenant ZITADEL_* passwords; email fallback only when not skipping; fail fast on /api/auth/error with OAuth hints. - createTestUser: explicit 403 message with skip-env guidance. - deleteTestUser: throw on 401/403 search (invalid PAT); docstring no longer claims silent success. - tests README + app-fleet KB: stage main-nav env pattern. Evidence: tenant-live-health stage full-stack OK; main-nav …

  1715. Resolve PAT from tenant secrets; drop invalid NODE_EXTRA_CA_CERTS · 02ed385

    - getZitadelPatToken reads …/customers/<c>/<p>/secrets/admin-pat.token when the merged env path is under app-tenant/tenants (Fleet materialized PAT). - Playwright config clears NODE_EXTRA_CA_CERTS if the path is missing locally (stops Node TLS spam when operator env copies VM paths). - Document PAT/TLS/magic-link vs EmailSignin in tests/README.md. - Vitest: unset_node_extra_ca_certs.test.ts.

  1716. Detect EmailSignin via signIn result url; stabilize E2E selectors · bee8159

    - Add shared nextauth_email_signin_result (HTTP JSON + SignInResponse) so Auth.js responses that only set url=/api/auth/error?error=EmailSignin are treated as failures; LoginForm now shows translated errors instead of stalling on email step. - AuthProvider signInWithEmail uses resolveNextAuthEmailSignInFailureCode before ok check. - Playwright: stable data-testid for email input/submit + card steps; parse POST body with nextAuthEmailSignInFailureFromHttpJsonBody for fast diagnostics. - E2E: extend magic-link sessi…

  1717. Clarify stage /you 502 path (Traefik → Fastify, not Next BFF) · 5329883

    - gatewayErrorUi: document tc-api-* routing vs handleApiProxy - KB: triage for GET /api/profile 502 and Retry behavior

  1718. Pass IANA timeZone into NextIntlClientProvider (SSR) · ce3258f

    use-intl production invokes onError(ENVIRONMENT_FALLBACK) when useTranslations runs on the server without timeZone; StrictIntlClientProvider rethrows onError, then next-intl's minified hook wrapper surfaces new Error(undefined) — matching stage digest 781469748 (source-mapped to useTranslate → useTranslations). Resolve timeZone from Intl.DateTimeFormat().resolvedOptions().timeZone in app/layout.tsx and thread through StrictIntlClientProvider. Evidence: .next source map column map; use-intl dist/esm/production/reac…

  1719. Stage sign-in digest triage + MongoClient prod cache note · 83fdda7

  1720. Cache MongoClient promise in production · 8d2a880

    NextAuth adapter and JWT paths call getMongoClientPromise repeatedly; only caching the connect promise in non-production spawned parallel connects and socket timeouts (GetUserByEmailError) under load. KB: extend email-token Playwright triage with adapter pool reuse note.

  1721. Redirect legacy site.webmanifest; improve E2E health diagnostics · 73921f4

    - next.config: permanent redirect /site.webmanifest → /manifest.webmanifest (canonical App Router handler). - e2e_health_stack: record same-origin HTTP 500 response URLs before asserting console is clean. - mandatory_onboarding_shell_e2e: fail fast when profile load error surface is visible (onboarding.errorLoadTitle). - KB: tenant-live-health uses --profile only; Playwright email-token/mongo triage; manifest alias probe. Evidence: curl stage /site.webmanifest → 308 Location /manifest.webmanifest; Playwright app-h…

  1722. Unblock Docker build; tolgee optional in infra registry · d6d8430

    - Export ConnectionDocument; implement ChatService.mergeAndPersistChatSessionFromConnection using mergeServerAuthorityIntoSession + saveChatSession. - Add CHAT_MESSAGE_RETENTION_MAX_AGE_DAYS to strict env schema (optional positive int). - Declare @fastify/multipart dependency; map multipart file-too-large via FST_REQ_FILE_TOO_LARGE. - InfraServiceRegistry: tolgee is APP_INFRA optional (next-intl bundles are product i18n). - KB: Tolgee decommission / optional semantics; Fleet CLI last-reviewed note. Evidence: local…

  1723. Index Fleet Mongo journey seed; link runDualBankSeed to Fleet CLI · 6ef9a46

    Pipeline KB table row points to app-fleet-cli-commands and README (tracked paths only). runDualBankSeed module header documents tenant-seed-mongodb / runner for operators. Evidence: dry-run OK for ifeoma-tc --profile stage (CLI + runner); pytest test_mongo_journey_banks_seed.py x4.

  1724. Mongo journey banks seed CLI and tenant runner · a43fd12

    Add fleet tenant-seed-mongodb (merge-env, packaged JSON, admin bulk POSTs) and run_tenant_fleet_manager --action seed-mongodb-journey-banks with explicit bearer token and fail-fast flag validation. Document operator entry points in KB, README, runners overview, and agent navigation; extend question-bank contract playbook. Tests: mongo_journey_banks_seed dry-run/path checks and runner argparse guards. Fix runner _entrypoint_paths import for package-mode pytest.

  1725. Sync question bank KB and i18n parity table row · 5e5f7f5

    Document web-client parseQuestionBankRows + translation key boundary in question-bank-row-contract.md. Extend AGENT-BEHAVIOUR Where to look to cite messagesFullLocaleParity alongside ICU placeholder parity.

  1726. Web-client Docker build args + remote build log excerpt · c19b9f1

    - docker-compose: pass NEXT_PUBLIC_SITE_URL, NEXTAUTH_URL, and NEXT_SERVER_ACTIONS_ENCRYPTION_KEY as web-client stage/prod build args so Dockerfile ENV matches merge-env (fixes next build metadataBase Invalid URL). - metadata: derive server base URL via resolvePublicSiteUrl (explicit prod error). - package-lock: sync @tanstack/react-virtual + virtual-core for npm ci in Docker. - _start_app_ops: append SSH sudo tail of /tmp/tc-web-client-build.log on remote web-client compose build failure; unit test + Fleet KB not…

  1727. Version-control src/lib for reproducible builds · b20267b

    Most of app-source/20_web-client/src/lib was missing from git while a small subset was tracked, so NextAuth and its Mongo/mail/utils dependencies could not be resolved in a clean checkout. Track the full lib subtree (auth/nextauth, API client, mail, mongodb adapter, debug, profile, bff proxy, etc.). Auth: when resolvePlatformRoleFromMongo throws, jwt_callback now assigns platformRole via bootstrapPlatformRoleFromEmail and logs the degraded mode explicitly so ADMIN_EMAILS admins are not forced to user on Mongo outa…

  1728. Ship PWA icons and skip intl for root file-shaped paths · dfc134b

    Root cause: linked /icon-192.png, /icon-512.png, and /favicon.ico were missing from public/, so Next matched app/[locale] and assertAppLocale threw InvalidLocaleError. Add generated PNG icons and a favicon, export isFileExtensionShapedRootSegment from the i18n routing barrel, and passthrough those URLs in the proxy before locale negotiation. Document the pipeline in CONTRACT.md and public/README; add Vitest coverage.

  1729. Add bank-contract strings for en/de and align journey Question type · 1976760

    The web-client question bank contract UI references journey and admin message keys; English and German bundles were missing them while other locales already carried the strings. Re-export the canonical Question model from lib/types in journey types. Refresh Fleet KB with a web-client messages parity gate and last-reviewed note.

  1730. - Remove invalid mode= kwarg from _refresh_pat_from_target (helpers_outcomes). · 383c5f9

    - Implement rebuild_web_client and rebuild_app_services in app-deployment: web-only vs full backend+web compose paths (_start_app_ops). - Document selective rebuild entrypoints in app-fleet-cli-commands KB. Remote web-client build may still fail on target (npm/build); Fleet now reaches compose instead of missing-attribute or missing-function errors.

  1731. External_dns preflight ignores internal_service_endpoint rows · 37a39bc

    enforce_dns_mode_alignment compared every domain ip_address to the ingress IP; internal.trueconnection.app rows use loopback by design and caused false mismatches. Only public_ingress domains participate in the WAN alignment check. Document in app-fleet-cli-commands KB; add unit coverage.

  1732. Un-ignore 10_backend src/lib; document in Fleet KB + rules · 4688161

    Root .gitignore lib/ matched Fastify shared modules under app-source/10_backend/src/lib/. Add negated paths mirroring 20_web-client. Document in app-fleet-cli-commands Convention table and AGENT_BEHAVIOUR memorize bullet so agents use normal git add.

  1733. Reconcile platform admin role with ADMIN_EMAILS · f7197f8

    Email-keyed profiles could keep platformRole=user while ADMIN_EMAILS listed the mailbox (e.g. stage E2E admin after NextAuth email-token sign-in), so AppNav never showed Admin. Add effectivePlatformRoleForProfileEmail: promote listed mailboxes to admin; keep stored admin when the mailbox is not in the list (Mongo ops grant). Apply in NextAuth JWT Mongo resolution, profile bootstrap, and Fastify ProfileService / platformRbac. Extend Vitest for stale-user promotion.

  1734. Harden i18n keys and question bank API contract · fa203a5

    Validate translation lookup keys before next-intl to avoid MISSING_MESSAGE internal split errors when the bank row omits textKey or option labelKey. Add QuestionBankRowContractError and parseQuestionBankRows at GET boundaries (journey getQuestions, admin list/get/create/update) so reflection and admin surfaces show localized bank_contract_violation or admin banner copy. Harden StrictIntlClientProvider getMessageFallback for invalid keys; chain service worker cache.put errors into console.warn. Tests: requireTransl…

  1735. I18n(web-client): add bank contract strings to es, fr, ar · 9585c2c

    Mirror admin.questions.errors.bankRowContract and journey.reflectionPhase errorTitleBankContract / errorMsgBankContract so full locale parity and messageKeysReferencedInSource checks pass alongside en and de.

  1736. KB and runners referenced this Fleet operation, but cli.py had no subcommand and misc_cmds lacked the helpers tested by test_sync_operator_browser_hosts.py. · 3036b71

    KB and runners referenced this Fleet operation, but cli.py had no subcommand and misc_cmds lacked the helpers tested by test_sync_operator_browser_hosts.py. Add src.manager.operator_browser_hosts (apex hostname from merged env, dns_zones from infra.json, managed domain tuple, run_tenant_stack_operator_hosts_sync using materialize_env + resolve_deployment_targets + LocalBrowserHostMappingSpec). Expose FleetPublicInterface.sync_operator_browser_hosts; wire misc_cmds handler and argparse (--dry-run, --skip, --no-dns-…

  1737. Strict tenant manifest validation in canonicalize_tenant_path · b16cd76

    Raise RuntimeError when manifest.json exists but JSON is invalid, the top-level value is not an object, or tenant_id is missing/blank — removes silent return of the shadow path for corrupt manifests. Document Playwright net::ERR_NAME_NOT_RESOLVED (operator must resolve NEXTAUTH_URL host, e.g. sync-operator-browser-hosts). Re-enable tests/unit/test_cli_canonicalize_tenant_path.py (drop pytest --ignore). Tests: pytest tests/unit/ (1997 passed, 2 skipped).

  1738. Wire tenant rebuild CLI to pipeline and public interface · 9e9a2f1

    Expose rebuild_web_client and rebuild_app_services through orchestration.pipeline, FleetManager (with topology preflight), and FleetPublicInterface. Add fleet tenant-rebuild-web-client and tenant-rebuild-app subcommands with handlers in misc_cmds. Fix rebuild flows to call resolve_remote_start_app_target_for_start_app with its real signature (removed invalid kwargs). Align dev TLS env toggle in rebuild_app_services with DEV constant. Document commands in README, cli KB, and cli module index; enable unit tests by r…

  1739. get_pat_for_app_registration no longer imports PatResultData for dict-shaped read_pat payloads (fixes unit tests and headless CI without app_infra_root). · b329d48

    get_pat_for_app_registration no longer imports PatResultData for dict-shaped read_pat payloads (fixes unit tests and headless CI without app_infra_root). Treat whitespace-only tenant admin-pat.token as missing. After a successful infra read, save_pat is required; OSError is wrapped as RuntimeError with prefix persist Zitadel PAT. Remove pytest --ignore for test_get_pat_for_app_registration_persist.py (4 tests). KB: document PAT resolution + persist for E2E/tooling. Evidence: pytest tests/unit/ — 1986 passed, 2 ski…

  1740. Server-resolve (pages) shell copy; inject connection status labels · 7578caf

    Split authenticated `(pages)` layout into a Server Component that loads `AppPagesShellUiCopy` (getTranslations after setRequestLocale) and `AppPagesLayoutClient` so loading/onboarding surfaces never call useTranslations on the client-retry path. Resolve `app.redirecting` on the server for `/{locale}/auth/` and use a tiny client redirect stub. Require `copy` on `ConnectionStatusIndicator` (ui.connectionStatus.*); pages shell passes server-resolved strings; Discovery, Analytics, and Admin pass labels from their exis…

  1741. Server-resolve locale shell copy to avoid intl client-retry 500 · 3df81e7

    Sign-in and locale shells could hit Next.js client retry without NextIntlClientProvider, surfacing useTranslations errors (documented for auth.errorPage). Resolve slow-request overlay, PWA hint, and login form copy on the server after setRequestLocale and pass props into client components. Add loadLoginFormUiCopy for auth.login strings. Evidence: GET /en/auth/sign-in returns 200 with local dev; npm run check:translations and npx tsc --noEmit pass. Full app-main-nav Playwright still needs E2E_ZITADEL_PAT or a live …

  1742. Note PACKAGE_INDEX.yaml refresh after merge-env · 6236120

  1743. Guest SSH probe, package index, strict merge_ssh_key · ae933ed

    - Track vm_guest check, SSH conn resolution, guest_ssh_probe, platform admin errors, and PACKAGE_INDEX writer; compose TenantPackageGuidePart on FleetManager. - merge_env refreshes PACKAGE_INDEX.yaml when the fleet root contains app-tenant (skips synthetic FleetManager(tmp_path) trees). - merge_ssh_key / merge_ssh_key_typed: require existing key file and valid host / vm.config structure; add ProvisioningConfigurationError module. - infra_sync_provisioning: only merge_ssh_key_typed when provisioning key exists. - p…

  1744. Track TargetConfig.provider_surface unit tests · ddc8986

    Keeps provider_surface inference and cross-field validation covered in CI; depends on tests._target_test_helpers.ensure_tenant_module().

  1745. Track domain_network_binding + re-export from contracts · d7c3c09

    The tenant DomainConfig and fleet tests import common.contracts.domain_network_binding; the module existed only as an untracked workspace file. Add it to git and export constants from common.contracts.__init__. KB: document that app-infra Traefik/Zitadel templates stay neutral in git (operator CIDRs and stage domains belong on-target via merge-env / sync, not commits). Also reverted local app-infra drift (Traefik sourceRange, ACME block, Zitadel ExternalDomain) to match the repository defaults.

  1746. Tenant CLI package + restore tenant create request contracts · 34ffbbb

    - Route app-fleet/cli.py through src.cli.tenant.tenant_cmds; remove duplicate src/cli/tenant_cmds.py; document tenant package and KB row. - Centralize TC_* path/profile helpers in src.cli._utils; reconcile cmds use merge_env without unsupported kwargs; misc_cmds exposes run_tenant_live_health_suite. - Track tenant_create_request_workflow and YAML-aware TenantCreateRequest loading. - Restore TenantCreateRequest fleet fields (public DNS, traefik CIDRs, application_secrets) with strict mode/stem validation and flat-v…

  1747. Onboarding gate, rate-limit assertions, and fleet DNS KB · 7b146f9

    - Document app-infra-start external DNS mismatch in dev-tenant-fleet-diagnostics. - Add rateLimitErrorUi constants; extend gateway_error_page_assertions with assertNoBlockingAppErrorSurfacesVisible and throwIfBlockingAppErrorSurfaceVisible. - waitForAuthenticatedAppNav: complete mandatory onboarding, stabilize nav after poll, and reuse shared bottom-nav locator. - Extract e2eBottomAppNavLocator for root-class or legacy navigation landmark. - Onboarding submit: data-testid onboarding-submit for stable E2E. - app-ma…

  1748. Tenant-live-health manifest path vs tolgee runtime · dc40238

    - Document HOST-INFRA failure when --tenant points at a directory without manifest.json (not a Fleet tenant package). - Evidence: tenant-live-health on partial ifeoma-dev path (exit 1, stderr); ifeoma-tc infra-gate reaches APP-INFRA and fails only on tolgee not running.

  1749. JSON import attribute for en locale helper on Node 20+ · b7939b7

    Playwright loads tests/e2e/helpers as native ESM; Node requires an explicit JSON import attribute (import ... with { type: "json" }) for messages/en.json. Evidence: prior playwright run failed with a TypeError about import attributes; after the change, playwright exits 0 and app-main-nav-all-tabs is skipped only when adminE2ePrereqsMet() is false (missing E2E base URL / merged env). Document the contract in tests/README.md.

  1750. Discovery, connections, chat, and shell alignment · f9e1891

    Evidence: npx tsc --noEmit; npm run check:translations; npm run test:atomic:offline (803 tests); npm run build (20_web-client). - Discovery: universe layout/positioning, stage badge chrome, RevealHeader, peer routing, WebGL engine touchpoints, constants and message keys. - Connections: client API and hooks, connection-stage polling, stage helpers/validation, detail profile resolution, match typing. - Chat: media/messages/moderation barrels, container/system/private mode, handlers, transformToMatch; chat-sync inbou…

  1751. Wire gender and orbVisuals through OpenAPI and POST /api/profile · a9e7549

    Evidence: npx tsc --noEmit; npm run check:translations; npm run test:atomic:offline (803 tests); npm run build (20_web-client); npm test -- tests/routes/profile- (10_backend). - OpenAPI: add ProfileGender, OrbVisuals; extend ProfilePublic and UpdateProfileRequest; add ar to preferredLocale enums where missing. - Fastify profile routes: persist validated gender and orbVisuals; return them on GET/POST using safeParse-based shaping for stored Mongo blobs. - Web client: build partial updateProfile bodies so omitted ke…

  1752. Fleet ensure-env path and infra-gate tolgee follow-up · 4960373

    - Document full tenant path for ensure-env and distinguish template gaps from APP-INFRA runtime failures (e.g. tolgee not running). - Add ensure-env one-liner to app-fleet-cli-commands quick reference with gitignore note for secrets/.

  1753. Localize private chat + reveal modals; refresh UI baseline · 8d6cf44

    - PrivateChatRequest: useTranslate for all copy; peerName from displayName or peerFallback ICU; design-system hero/well/dot chrome. - RevealIdentityInfo: useTranslate + shared chat-messaging-surfaces-brand helpers; backdrop via Tailwind scrim. - RequestMode passes otherUserName for accurate peer strings. - Regenerate localizedUiTextScanner.baseline.json (16 entries). - KB: monorepo Fleet CLI path + infra-gate mongo secrets template remediation. Verified: tsc --noEmit, npm run test:atomic:offline, npm run check:tra…

  1754. Restore atomic gate — i18n gaps, SW v2, tolgee proxy class · 9721e42

    - Add chat.privateChatRequest, revealIdentityInfo, and discovery.universe.view.peerTooltipViewProfile strings across en/de/fr/es/ar (static bundle tests). - Replace public/sw.js with locale-safe PWA caching (navigate + locale bypass, v2 cache names, ACTIVE_CACHES). - Export tolgee as excluded API segment; orb purple blend weights; design-system severity disc export. - Discovery adapter: require finite matchPercentage, map sharedValues to core when values.core empty. - Fix Vitest/E2E imports (seed paths, translateN…

  1755. Remove bottom-nav data-testid from production UI · c9eb85f

    Route href contract stays in appNavBottomNavModel; shell scoping uses APP_BOTTOM_NAV_ROOT_CLASS (app-nav-tab-classes) with globals.css nav.tc-app-bottom-nav. Playwright uses class + roles + en bundle copy; logout uses sign-out aria label. Add app.nav.bottomNavLandmark for the nav landmark across locales. Evidence: npm run build; test:atomic:offline nav contract; check:translations.

  1756. Correct the Convention table: --profile and --mode are independent; CLI errors if TC_FLEET_MODE/--mode is unset. · 960178e

    Correct the Convention table: --profile and --mode are independent; CLI errors if TC_FLEET_MODE/--mode is unset. Align examples and Last reviewed note with fleet tenant-live-health --help and 2026-04-21 evidence (ifeoma-tc stage infra-gate).

  1757. Bottom-nav test id parity (TS vs globals.css) · bc8fc78

    Document that APP_BOTTOM_NAV_TEST_ID must match plain-CSS attribute selectors; annotate globals.css, appNavBottomNavModel, button-brand preset, Fleet KB, and pipeline E2E registration doc. Evidence: npm run check:translations (19), test:atomic:offline (801); tenant-live-health infra-gate ifeoma-tc stage OK.

  1758. Use appNavBottomNavModel test ids in shell helpers + main-nav spec · 298831f

    Add APP_BOTTOM_NAV_LOGOUT_TEST_ID; wire AppNav logout button. app_shell_navigation uses APP_BOTTOM_NAV_TEST_ID, appBottomNavLinkTestId, logout id; clickAppNavLink throws on unknown English tab labels. app-main-nav-all-tabs imports the same helpers. AGENT-BEHAVIOUR: require model constants in Playwright nav helpers. Evidence: npm run test:atomic:offline (801), npm run build; tenant-live-health infra-gate OK.

  1759. Track optional orb Playwright specs + align docs with admin prereqs · f53fe03

    Add orb-visual-smoke, orb-journey-markers-authenticated, and orb-connection-orbs-authenticated (opt-in env flags). Align file headers, expect messages, and tests/README with adminE2ePrereqsMet (PAT optional). Fleet KB: orb Playwright paragraph, appNavBottomNav Vitest pointer, Last reviewed. Evidence: playwright orb-visual-smoke vs ifeoma-tc stage env (passed); npm run test:atomic:offline (801); tenant-live-health infra-gate OK.

  1760. DRY bottom-nav route specs + nav Vitest contract · 60f1754

    Extract appNavBottomNavModel (href rows, container + link test ids) and wire AppNav useMemo from it. Add tests/atomic/nav/appNavBottomNavRoutesContract.test.ts. Correct admin Playwright skip hints: PAT is optional (magic-link path); document in app-main-nav-all-tabs and admin-panel-sections. AGENT-BEHAVIOUR bullet for nav model + skip text accuracy. Evidence: npm run test:atomic:offline (801 tests), npm run build.

  1761. App-health-stack E2E recipe, clarify shell nav admin skip, link Vitest · f6957c7

    - Fleet KB: Playwright app-health-stack + Last reviewed (matrix, switch, health-stack, target-stack-logs tail note). - app_shell_navigation: document e2eLogWarn + explicit admin skip on stale /admin. - AuthErrorPageCopyProvider module doc: pointer to authErrorPageCopy Vitest. Evidence: playwright app-health-stack passed vs ifeoma-tc stage env; target-stack-logs tail (scanner InvalidLocaleError only); npm run test:atomic:offline 798.

  1762. Link authErrorPageCopy Vitest + KB locale-switch + full-stack evidence · 151f94b

    - JSDoc @see tests/atomic/auth/authErrorPageCopy.test.ts and CONTRACT path rule. - Fleet KB: Playwright locale-public-routes-switch recipe; Last reviewed notes matrix + switch green on ifeoma-tc stage env and tenant-live-health full-stack OK. Evidence: npm run test:atomic:offline (798); playwright locale-public-routes-switch passed; tenant-live-health full-stack ifeoma-tc stage OK.

  1763. Document E2E_MERGED_ENV_PATH + HTTPS ignore for the public path matrix without Zitadel PAT. · b890eb3

    Document E2E_MERGED_ENV_PATH + HTTPS ignore for the public path matrix without Zitadel PAT. Record agent evidence: matrix passed vs ifeoma-tc stage env; tenant-live-health public-edge OK.

  1764. Document non-throwing adminE2ePrereqsMet + Vitest path · 1bc7345

  1765. Make adminE2ePrereqsMet non-throwing for Playwright skip predicates · 0ecf281

    adminE2ePrereqsMet used getE2EBaseUrl(), which throws when E2E env is unset, so test.skip(!adminE2ePrereqsMet()) crashed instead of skipping. Use resolveE2EBaseUrlSync and narrow try/catch only for resolveAdminEmail when tenant auth hints are missing. Add Vitest contract tests/atomic/e2e/admin_e2e_prereqs_met.test.ts. Document target-stack-logs --scan InvalidLocaleError scanner noise in Fleet KB. Evidence: npm run test:atomic:offline (798 tests); playwright app-main-nav-all-tabs and admin-panel-sections (ui) with …

  1766. Track former tests/atomic/lib suites under topic dirs · 3ba08c0

    The root .gitignore lib/ rule matches tests/atomic/lib/, so those Vitest files were never committed. Move them to tests/atomic/debug, browser, design-system, utils, profile, errors, and infra. Refresh CONTRACT, Fleet KB, and AGENT-BEHAVIOUR with the path rule. Evidence: npm run test:atomic:offline (796 tests), npm run build; Fleet tenant-live-health ifeoma-tc --profile stage --mode stage --suite infra-gate OK.

  1767. Point CONTRACT at tracked authErrorPageCopy Vitest path · 426846c

    Keeps the locale contract aligned with repo .gitignore for tests/atomic/lib/.

  1768. Note tests/atomic/lib gitignore for web-client Vitest paths · ff20691

    Explain why auth error page copy tests live under tests/atomic/auth/. Refresh Last reviewed line with this fact. Evidence: npm run build (20_web-client) succeeded after KB edit.

  1769. Track auth error page copy tests outside ignored lib path · 60ee036

    Place Vitest contract tests under tests/atomic/auth/ because .gitignore ignores tests/**/lib/. Update AGENT-BEHAVIOUR to reference the new path. Evidence: npm run test:atomic:offline (796 tests passed).

  1770. Professional dev-auth warnings + Fleet KB web-client i18n gate · b5656bd

    - Replace emoji-prefixed development auth bypass console warnings with explicit bracket-tagged messages in AuthProvider (no behaviour change). - Append a focused Fleet KB note: post-change checks for root layout / next-intl / Auth (workstation build + landing probes; tenant-rebuild-web-client + tenant-live-health + web-client log strings). Update Last reviewed stamp. Tests: npm run test:atomic:offline — 791 passed; app_shell_navigation_url — 4 passed.

  1771. Feed auth.errorPage copy without useTranslations in AuthProvider · 677908b

    Next-intl can surface “NextIntlClientProvider context was not found” for `useTranslations` inside `AuthProvider` when a server segment fails first and React retries the client boundary. Sign-in error strings are a small, stable slice of the same `getMessages()` payload, so extract `auth.errorPage` on the server and pass it through `AuthErrorPageCopyProvider` + strict dot-path lookup (throws on missing keys; `{name}` interpolation only). Evidence: - `npm run test:atomic:offline` — 791 tests passed. - `npm run build…

  1772. Add missing lib/rbac sources for AppNav and admin guards · 5733020

    The committed tree referenced `@/lib/rbac/*` from `AppNav`, admin layout, and API routes, but the `src/lib/rbac/` module was never tracked—fresh clones and CI could not resolve those imports. - Add platform role constants, Mongo-backed resolver, session hook, server assert helper, and client `RequireRole` guard (copy uses `ui.*` message keys). - Resolve admin redirect locale via `tryParseAppLocale` (single choke point). Tests: `npm run test:atomic:offline` (791 tests) all passed after these adds. Note: first cold …

  1773. Restructure i18n (errors, routing, bundle, provider, translate) · 39c07b5

    Restructure `src/i18n/` per the agreed plan: split routing and bundle loading, move landing JSON to `bundle/overlays/<locale>/landing.json`, unify `MissingMessageKeyError` under `errors/types.ts`, rename `localisation/` → `translate/`, move `StrictIntlClientProvider` to `provider/`, add public `src/i18n/index.ts` and overlay README, remove dead entrypoints (`config.ts`, `server.ts`, legacy per-namespace JSON, duplicate validators), and rewire next-intl plugin + Dockerfile COPY + pipeline `PATH_WEB_CLIENT_LOCALE_OV…

  1774. Refresh AGENT-BEHAVIOUR Where to look (fleet, Zitadel, question bank) · f447195

    - Add reflection question bank row pointing to question-bank-row-contract.md (422 / textKey). - Align Fleet CLI, dev diagnostics, and memorize bullets with current KB and CLI surface.

  1775. Validate question bank rows before JSON; 422 on serialize failure · ba155c9

    - Assert textKey and option labelKeys in QuestionService.serializeQuestionDocument so API never emits undefined keys (prevents next-intl t(undefined) in admin UI). - Centralize Fastify 422/500 mapping in questionBankSerializationHttp.tryReplyQuestionBankSerializationFailure. - GET /api/admin/questions, GET /api/admin/questions/:id, GET /api/questions use the helper. - Add Playwright app-main-nav-all-tabs.spec (admin E2E) for bottom nav + question bank. - Document operator flow in app-pipeline/.cursor/kb/question-b…

  1776. Refresh agent rules and tenant diagnostics KB · 35e56f2

    - Document multi-host tenants (infra_services per profile) and tenant-live-health --profile requirement - Expand Fleet CLI quick reference (OpenAPI refresh, public-edge 404/500 triage, web client checks) - Add dev-tenant symptom rows, Playwright/e2e seed note, and presigned upload CORS context

  1777. Dev-tenant diagnostics + chore(web): SpaceBackground uses LANDING_SPACE_BG_DEEP_HEX · 4ef11d5

    - dev-tenant-fleet-diagnostics: scope, translation gate, design-token cross-links, hex888ToRgbaCssWithAlphaByte note (Fleet CLI ref unchanged). - SpaceBackground: CSS fallback uses LANDING_SPACE_BG_DEEP_HEX (manifest / cosmic shell), replacing literal #0a0118. Validated: npx tsc --noEmit; npm run check:translations; npm run test:atomic:offline (661). Fleet: print-loopback-health-probe --mode dev --tenant ifeoma-dev.

  1778. Hex888ToRgbaCssWithAlphaByte; replace hex+alpha string concat · d042ac9

    Add hex888ToRgbaCssWithAlphaByte in color-brand (exported via @/design-system) to map validated #RRGGBB + alpha byte 0-255 to CSS rgba(), replacing `${hex}30` / `${hex}80` hacks. Refactor RatingCard, NetworkVisualization peer glow, UniversePreview dot halo, profileDataNormalizer orb glow, createOrbGlow (styles.ts), and generateOrbGradient (coreValueColors). Invalid hex surfaces via requireHex888 (throws; no silent tint). Tests: tests/atomic/design-system/hex888ToRgbaCssWithAlphaByte.test.ts Validation: npx tsc --n…

  1779. Document FULL=1 verify-stack for dev reachability gate · a549cb0

  1780. Ensure_fleet_on_path before src.manager in reachability runner · 8bc2a1f

    verify-stack with FULL=1 invokes run_dev_service_reachability_verification.py with PYTHONPATH=. only; top-level imports from src.manager ran before ensure_fleet_on_path(), causing ModuleNotFoundError: src.manager. Call ensure_fleet_on_path() immediately after _runner_utils import, document contract in module docstring, merge reachability_verification_conjunct_failures import, drop redundant call in main(). Validated: pytest app-fleet/tests/unit/test_dev_service_reachability_verification.py; manual run --tenant-id …

  1781. Clarify dev-tenant KB path + record dev sweep evidence · ab73c5d

    - AGENT-BEHAVIOUR Where to look: use app-pipeline/.cursor/kb/dev-tenant-fleet-diagnostics.md - todos.md: 2026-04-13 closure (loopback, public-edge, pytest x46, verify-stack, atomics 512)

  1782. Universe star pass disk sync + dev sweep evidence · f2b7fd2

    - discovery-universe-view.md: rendering table row for star VP + diskAngleRad - todos.md: closure row with fleet public_edge + atomic offline (512 tests)

  1783. ConnectionJourney i18n + typed bank failures · 7b68cc0

    - ConnectionPhaseBankFailure + resolveConnectionPhaseBankFailureUi (no English substring matching) - journey.connectionPhase.* in en/de/fr/es/ar (errors, loading, intro) - Tests: message static data + resolver unit tests - KB playbook and todo-notes Wave 4

  1784. Always compose disk rotation in star backdrop VP · 34bd6cf

    R_y(0) is identity; removes special-case branch. docs: index discovery-universe-scene-debug-issues.md in app-pipeline KB

  1785. Sync star backdrop with universe disk spin · c8e530e

    Left-drag updates diskAngleRef for GPU peers and Canvas2D; the star/nebula pass used a backdrop VP that ignored that angle, so sky and chart drifted. - Compose proj * view * R_y(diskAngle) in buildUniverseStarBackdropViewProjection - Thread diskAngleRad through UniverseWebGLEngine.draw / drawStarPass - Document in discovery-universe-scene-debug-issues.md; extend Vitest coverage

  1786. I18n(web): chats peer display name fallback for missing discovery name · a4faf52

    - chats.page.peerDisplayNameFallback in en/de/fr/es/ar + message key inventory - ChatsPageClient peerNameByAuthUid uses t() with [discoveryData, t] - KB + todo-notes Wave 4 Chats subsection

  1787. Chats list uses ViewerSynergyInput, no generator profile stub · b1242e4

    - transformToMatch: narrow second arg to ViewerSynergyInput (interests/values.core) - ChatsPageClient: map useProfile() to viewerForSynergy; single file header - docs: chat utils README, app-pipeline KB + todo-notes Wave 4 slice

  1788. Module docstring for brand-glass Radix Select · 56fc91b

    Explains linkage to SURFACE_BRAND and globals.css violet-night classes.

  1789. Brand violet-night glass for Radix Select surfaces · 07eeaa0

    Add .surface-brand-glass-select-trigger and .surface-brand-glass-select-content in globals.css (blur, gradients, accent rgb(167 139 250), depth shadow) so profile and app selects match modal/peer-hover glass instead of flat white/5. Extend SURFACE_BRAND with glassSelectContent; glassSelectTrigger now references the trigger class plus violet focus ring tokens. Validated: npm run test:atomic:offline (507 tests). Dev tenant: tenant-live-health --suite infra-gate for ifeoma-dev returned infra_gate.ok true.

  1790. Wave 4 You hub slice note + playbook link in todo-notes · 793fda2

  1791. You hub modal tokens, parallax batching, stricter profile/select · af33251

    - Add MODAL_BRAND design tokens (gradient scrim, single glass blur, opaque chrome) - BaseModal: i18n close control; exhaustive modal width; fix JSDoc example - YouScreen: rAF parallax, reduced-motion path; gate settings on matching profile - UserProfileMenu: GetProfileResponse + default orb accent from design system - SettingsSection: opacity-only expand animation - SelectItem: throw on invalid value (fail fast) - Profile types: optional values/orbVisuals on Profile - KB: you-hub playbook under app-pipeline/.curso…

  1792. Align main app column width with /you (contentMedium) · 16d3cd0

    - Use LayoutGrid width=medium for chats, connections, discovery list mode, analytics, onboarding, auth sign-in/error, chat/connection shells, grounding. - LoginForm card uses max-w-full so column width follows parent grid. - Localize ConsentRequestScreen; extend props for ChatView/ConnectionManager. - Document contentMedium vs shellConstrained; refresh i18n UI scanner baseline. Universe discovery map remains full-bleed.

  1793. Record dev tenant public-edge ok + atomic 503 re-verify (2026-04-13) · 2b83fd4

  1794. Align virtualization KB with shipped Discovery and Chat virtualizers · 4a94eea

    - Extend virtualization-long-lists-notes with Phase B/C evidence paths - Point list-virtual-brand and design-system README @ tracked KB (app-pipeline) - Mirror evidence row in app-pipeline/todos.md

  1795. Add virtualization KB to web shell layout navigation row · b5e289f

  1796. Link app shell layout nav to virtualization KB notes · b16da3a

  1797. Track virtualization list tokens and admin list cleanup status · 68d4858

  1798. These components were never imported by AdminPanel or routes (grep in app-source). · dff90f5

    Operator profile browsing remains UserProfilesTab; journey keeps its own ProfileDetailModal. Drop adminProfileRowEstimatePx from VIRTUAL_LIST_BRAND; update design-system docs and feature matrix. KB notes the removal for fleet/product agents. Tests: npm run test:atomic:offline (503). Fleet: tenant-live-health infra-gate ifeoma-dev.

  1799. Assert more admin tab headings from messages/en.json · 4e19099

    Add visible-heading checks for infrastructure, system-data, simulation-bots, and user-profiles; document in dev-tenant KB. Tests: npm run test:atomic:offline (503). Fleet: tenant-live-health infra-gate ifeoma-dev.

  1800. Align admin Playwright spec with messages/en.json · ee54525

    Add enLocaleRegex for ICU-shaped strings; extend admin-panel-sections with locale-key lookups, Questions section smoke, and profile modal assertions. Atomic test covers regex helper; KB notes E2E English bundle alignment. Tests: npm run test:atomic:offline (503). Fleet: tenant-live-health infra-gate ifeoma-dev.

  1801. Localize Super Admin question bank tab (admin.questions.*) · fafebfa

    Wire QuestionManagementTab and QuestionFormModal to next-intl via useTranslate; add ICU-backed alerts, confirms, filters, table, modal, and dual-bank seed copy. formatDualBankSeedSummary now requires a translator and reads admin.questions.seedResult.* so seed alerts are locale-aware. Extend runDualBankSeed tests with en.json tEn helper. Document admin.questions in dev-tenant-fleet-diagnostics KB. Tests: npm run test:atomic:offline (501). Fleet: tenant-live-health --suite infra-gate ifeoma-dev.

  1802. Localize Match management admin tab · 50376dd

    Add admin.matchManagement.* across en/de/fr/es/ar with canonical key list, static parity test, and localized recalc storage warnings. MatchManagementTab uses useTranslate; Mongo/API path literals stay in code tags. KB: document namespace. Verified: npm run test:atomic:offline; tenant-live-health --suite infra-gate ifeoma-dev exit 0.

  1803. Localize Simulation bots and Profile generator admin tabs · 7e2b749

    Add admin.simulationBots.* and admin.profileGenerator.* across en/de/fr/es/ar with key lists, static parity tests, and i18nSameAsEnPolicy entries for API-aligned field identifiers. SimulationBotsTab parses JSON with localized error messages; ProfileGeneratorTab, GeneratorConfig, and ProfilePreview use useTranslate. Document namespaces in dev-tenant-fleet-diagnostics.md. Verified: npm run test:atomic:offline; tenant-live-health --suite infra-gate ifeoma-dev exit 0.

  1804. Localize Admin AnalyticsDashboard (platform metrics) · 9b56f36

    - Add admin.analyticsDashboard.* in en/de/fr/es/ar (KPIs, journey phases, maturity band labels, data-quality tiles, user counts ICU). - AnalyticsDashboard: useTranslate, export AnalyticsData type, document maturity bucket ids; map stages to locale keys; replace unsafe dynamic Tailwind color classes with fixed bar maps. - Keys file + static parity test; KB cross-link for System Data analytics. Validated: npm run test:atomic:offline (497). Fleet: tenant-live-health --suite infra-gate --tenant ifeoma-dev --profile de…

  1805. Localize Super Admin System Data tab · 07fde7a

    - Add admin.systemData.* bundles (en/de/fr/es/ar) for headers, analytics, bulk upload, export, danger zone, format guide, and parse errors (ICU). - Refactor SystemDataTab: useTranslate, typed upload banner state, JSON parse split from shape validation, AdminProfile cast for bulk upload API. - Reuse admin.userProfiles.refresh, keepMyProfile, clearAll, and clearConfirm* keys for DRY destructive flow and analytics refresh. - Remove redundant export alert; errors surface via handleError (toast). Validated: npm run tes…

  1806. Localize Admin Panel shell (title, nav, section labels) · f42ccd2

    - Replace ADMIN_SECTION_CONFIG.label with labelKey (admin.sections.*); AdminPanel uses AppT/useTranslate. - Add admin.panel.* and admin.sections.* in en/de/fr/es/ar; adminPanelMessageKeys + static parity test. - Playwright admin E2E resolves English strings via messages/en.json (en_locale_message) including infrastructure Refresh. Validated: npm run test:atomic:offline (495). Fleet: tenant-live-health --suite infra-gate --tenant ifeoma-dev --profile dev (ok).

  1807. Note admin.infrastructure locale keys vs Fleet infra-gate evidence · cdac979

  1808. Localize Super Admin Infrastructure tab and Chat Management · 2c5ab8e

    - Add admin.infrastructure.* message bundles (en/de/fr/es/ar) with stable endpoint ids for probe row titles, status badges, system info segments, and chat reset flows. - Refactor InfrastructureTab: useTranslate + AppT, INITIAL_ENDPOINTS with InfrastructureEndpointId, ICU health summary and latency formatting. - Refactor ChatManagementSection: outcome discriminated union + t() so locale switches stay consistent; document BFF/Mongo behavior in file header. - Add adminInfrastructureMessageKeys + static parity test; e…

  1809. Note shipped virtual list surfaces in README · 33ca687

  1810. Virtualized chat transcript + chat.messagesEmpty locale keys · ba8f15b

    - ChatMessagesArea: useVirtualizer, LIST_SCROLL_BRAND.region, near-bottom scrollToIndex; measureElement rows - Add chat.messagesEmpty.{title,bodyPrivate,bodyAnonymous} in all locales; extend CHAT_MESSAGE_KEYS_FLAT - Track chat i18n key catalog (chatMessageKeys.ts); note list-virtual-brand wiring - Tests: npm run test:atomic:offline (493 pass); Fleet ifeoma-dev infra-gate OK Note: .cursor/plans/virtualization-long-lists.plan.md is gitignored locally; mirror status in plan or design-system README if needed.

  1811. Localize Admin User Profiles (admin.userProfiles.*) · 72b249e

    - Wire UserProfilesTab + ProfileDetailsModal + confirm/prompt/alert to AppT and useTranslate - Add adminUserProfilesMessageKeys + static bundle test; fr: tableActions as Opérations (policy) - KB: clarify User Profiles admin UI vs Fleet SSH/Mongo operations - Tests: npm run test:atomic:offline (493 pass); Fleet ifeoma-dev infra-gate OK

  1812. Localize Admin Debug tab (admin.debug.*) · f1cc2a5

    - Wire DebugSettingsTab to AppT and nested admin.debug keys in all locales - Add adminDebugMessageKeys + static parity test; allowlist symbol-heavy affects lines - Document keys in lib/debug README; cross-link browser debug vs Fleet in dev-tenant KB - Tests: npm run test:atomic:offline (pass); Fleet: tenant-live-health --suite infra-gate ifeoma-dev OK

  1813. Clarify AppNav testid scheme vs translated labels · aeeb914

  1814. Localize AppNav labels via app.nav.* message keys · acf12d2

    - Add app.nav tab + logout strings to en/de/fr/es/ar; extend appShellMessageKeys parity test - AppNav: useTranslate, stable data-testid ids (you|journey|explore|chat|admin), aria-label for sign out - Regenerate localized UI scanner baseline Tests: npm run test:atomic:offline (491 passed) Fleet: tenant-live-health --suite infra-gate ifeoma-dev ok

  1815. Allowlist localized UI scanner baseline in .gitignore · 571d5d2

    Negate *.json ignore so localizedUiTextScanner.baseline.json can be updated without git add -f.

  1816. LAYOUT_BRAND shell (S1), LayoutGrid tiers, guard + baseline · 5342588

    - Add design-system layout-brand.ts, surface/button/index exports, README Layout section - Shell uses max-w-6xl + gutters; discovery list uses listWide + gutterX + @container - Refactor LayoutGrid (standaloneGutter); migrate analytics, admin, connections, journey hub - globals.css @theme --width-layout-* aligned with TS; atomic shellMaxWidthLiterals test - Playwright public viewport smoke for /landing; track localized UI scanner baseline (-f) npm run test:atomic:offline: 162 files / 491 tests passed Fleet evidence…

  1817. Link app shell layout (LAYOUT_BRAND) to debug KB and agent navigation · fcd277d

    - Clarify in lib/debug README that Debug toggles do not change column CSS; point to LAYOUT_BRAND and Fleet diagnostics. - Index web shell layout in app-pipeline KB README; note in dev-tenant-fleet-diagnostics when triage is CSS vs infra. - Add Where-to-look rows in application and app-pipeline AGENT_BEHAVIOUR for LAYOUT_BRAND and shellMaxWidthLiterals guard.

  1818. I18n discovery list toggle and universe zoom controls · b022542

    - ListViewToggle: wire aria-labels and tooltips to discovery.page.* keys; mark client - UniverseViewControls: discovery.universe.controls.* + canonical keys file + static-data test - Add discoveryPageMessageKeys flat list for Discovery page chrome

  1819. Expose actionLabelKey from useConnectionValidation · 96f4d73

    Consumers can use t(actionLabelKey) with connections.stageAction.*; actionLabel kept as legacy English. Docstring example updated.

  1820. I18n for connection-stage CTAs on discovery list cards · 91a8b79

    Add connections.stageAction.* keys and getConnectionActionLabelKey() mirroring getConnectionActionLabel; DiscoveryListProfileCard uses t(key). Parity test ties English bundle strings to legacy helper.

  1821. Tighten discovery list layout, contrast, and i18n · dc37ea6

    - Filters: responsive grid (min/max/stage/sort), compact inputs and padding - List: localized results header and empty states; denser list shell - Cards: emerald match badge for readability; anonymous peers show Member + stage badges via keys - Stage badges: labelKey + t() (list, universe sidebar, hover tooltip) - Universe: Scene coords button copy moved to messages (scanner) - discoveryCardDisplay: name-or-null + match percent value for i18n formatting

  1822. ProfileEditForm uses explicit locale/gender without silent defaults · 0ac6b5e

    Align the profile page edit form with ProfileInformationSection and useProfileSettings: null preferredLocale/gender show placeholder options; save is blocked with the same i18n toast until both are set. Removes hidden defaults to en/prefer_not_to_say.

  1823. Link verify-stack to web-client npm run test:atomic:offline gate · 5bdff64

    Clarify that Fleet verify-stack exercises live tenant E2E while Vitest offline suite runs on the workstation; both are used for dev-tenant quality bars.

  1824. Explicit locale/gender in settings without silent API defaults · ce9d233

    - useProfileSettings: prefer preferredLocale/gender from GET snapshot; null until loaded; no ?? en / ?? prefer_not_to_say on load. - ProfileInformationSection: placeholder selects when null; save disabled + toast if save attempted without both set. - i18n: profile.settings.errors.identityRequired + placeholder keys (en/de/fr/es/ar). - KB: profile-ui-data-lifecycle settings identity note. Tests: npm run test:atomic:offline (486). verify-stack ifeoma-dev dev: all passed.

  1825. Avoid double locale segment with next-intl router · ec60683

    useRouter from @/navigation already prefixes locale; withLocale() + replace() produced /en/en/onboarding and similar. Use locale-less ROUTES.* and router.replace(path, { locale }) when switching locale. - Pages layout + onboarding submit + LocaleFromProfileRedirect - Document withLocale vs intl router in appPaths and profile-ui KB

  1826. Landing readiness uses hero CTA (Begin Your Journey) · 8e7a456

    Fleet verify-stack failed: live /en/landing HTML did not include 'Welcome to' while the primary CTA 'Begin Your Journey' (landing.hero.ctaBeginJourney) was present. - Export LANDING_HERO_READY_REGEX from e2e_health_stack; use in fetchPublicLandingWhenReady, app-health-stack, app-http-routing, app_shell_navigation. - Document triage in dev-tenant-fleet-diagnostics.md. Verified: npm run test:atomic:offline (486), verify-stack ifeoma-dev dev (all steps pass).

  1827. Profile settings shell and user profile menu copy · 7d98df5

    Wire ProfileSettings and UserProfileMenu through useTranslate with profile.settings.shell.*, shared profile_save/profile_cancel/editForm.saving, and profile.userProfileMenu.* for modal headings. Extend PROFILE_UI_MESSAGE_KEYS_FLAT and profile-ui-data-lifecycle KB. Negate root lib/ ignore for web-client src/lib.

  1828. ProfileInformationSection uses messages; KB dev tenant vs onboarding · 7f6bf99

    - ProfileInformationSection: t() for section title + reuse profile.editForm copy for name/email (localizedUiTextScanner + parity). - messages: profile.settings.information.sectionTitle (en/de/fr/es/ar). - profileUiMessageKeys: register sectionTitle. - dev-tenant-fleet-diagnostics: clarify product onboarding vs Fleet probes. Evidence: tenant-live-health --suite full-stack exit 0 (ifeoma-dev); npm run test: atomic:offline 486/486 pass.

  1829. I18n loading strings, debug logs for onboarding/locale · 29626db

    - .gitignore: allow web-client messages/*.json (locale bundles). - Add app.loading to all locales; appShellMessageKeys; PagesLayout uses t(). - PagesLayout + LocaleFromProfileRedirect: useDebugLog (api category) for redirect telemetry; respects Admin Debug + DebugProvider. - KB: profile-ui-data-lifecycle §1.1 onboarding; index + AGENT-BEHAVIOUR row; lib/debug README table entry. - Force-add src/lib paths that were ignored by blanket lib/ rule.

  1830. Add universe_test.html scene test harness · f5dbdd4

    - WebGL universe demo with UniverseParamsApi, panel/export parity guard, meteor shader tuning (glow scale, staggered random trajectories), and default param snapshot + U.defaults sync.

  1831. Pipeline and app: fleet orchestration, contracts, infra, tenant, and backend updates · 4ece257

    - Refine app-fleet CLI, health probes, verify stack, merge-env redeploy, and related tests - Update OpenAPI/contracts codegen (remove legacy zodios client artifacts), compose and deployment - app-hosting, app-infra, and tenant seeding/validation changes - Backend: chat, connections, matching, discovery, and service-layer updates - Cursor rules and docs aligned with current behaviour

  1832. Error payloads, journey hub, matching admin, and agent docs · fc49782

    - Backend: consistent internal error responses, auth/RBAC and route handlers across API surfaces; lazy Mongo collection access in admin/question services; match recalculation and synthetic profile contract alignment. - Web: You/journey hub and navigation; AuthSessionLoading; error diagnostics tests; admin debug and loading/error primitives; discovery and journey updates; remove legacy breadcrumb components. - Contracts: OpenAPI and generated types/clients for admin and journey flows. - Docs: AGENT_BEHAVIOUR (globa…

  1833. Fleet tenant edge probes, stack verify alias, and profile/matching UX · 2b4b884

    Fleet (app-fleet): - Add verify-tenant-stack (alias verify-dev-tenant-stack), tenant-targets/target-show, tenant-edge-evidence, and shared run_public_edge_probe + public_edge_http - tenant_targets_summary on FleetManager; multi-service docker compose logs; optional PHASE0_PYTEST for non-dev profiles; tests and README updates app-hosting: compose logs accept multiple service tokens from space-separated service Contracts + app: OpenAPI/profile journey fields, generated types, backend profile route and tests; journey…

  1834. Connection statements API, journey UI, fleet PAT/sync and OpenAPI refresh · cdf76af

    - Backend: connection statement routes and service; tests and helpers - Web client: journey hub/how-it-works, connection statement picks, generated API - Fleet: PAT sync after infra, verify-dev-stack CLI, tenant/tests and hosting tweaks - Contracts: OpenAPI and regenerated TS/Zod clients; build/deploy/infra touch-ups - Remove verify_dev_tenant_stack.sh; default questions and docs updates

  1835. Fleet diagnostics, contracts sync, remove app-monitor and shell shims · ce912c2

    - Remove app-monitor tree; drop application/tools operator wrappers in favor of Fleet CLI - Add operator upstream/compose/mongo helpers, tenant-live-health probes, schema E2E wiring - Regenerate OpenAPI-derived schemas and web/backend generated clients - Backend: vitest runner shim, tsx watch exclude generated zod, admin route touch-ups - Web client: admin API, journey/YouScreen and E2E navigation helpers, seed bank test alignment - Update cursor rules, pipeline docs, and todos.md rolling evidence

  1836. Match diagnostics, synthetic profiles, fleet CLI, and contract sync · 088ba99

    - Backend: admin match diagnostics, synthetic profile lifecycle, match version, journey/profile route tests; OpenAPI-aligned admin routes - Web client: admin match management UI, discovery hints, journey constants, synthetic generator, generated API models - Pipeline: app-contracts/OpenAPI and zod generation; fleet infra reachability, execution context warnings, zitadel provision tests; tenant env updates - Docs/rules: layer trace rule, agent behaviour updates, discovery docs - Tests: atomic/e2e helpers and new co…

  1837. Point docs/tools at archived plans; infra and test README tweaks · 5032880

    - Update references from .cursor/plans/ to .cursor/plans/done/ for the matching/privacy index and API 502 runbook (rules, KB-adjacent docs, pipeline todos, tools shell headers). - Web tests README: move Playwright npm rows into the command table; clarify E2E_ADMIN_DESTRUCTIVE / admin panel scope. - Traefik: DEBUG log level; adjust forwarded-headers trust CIDR. - Zitadel sample config: ExternalDomain set to trueconnection.local for local stack alignment.

  1838. Discovery privacy tiers, connections, and contract sync · 4ea75ee

    Backend: tiered discovery (mapper + DiscoveryQueryService refactor), match recalculation scheduler after profile writes, connection transitions with ConnectionTransitionError, chat-gate route tests, discovery fixtures and expanded service/route tests. Web: discovery card/peer-routing helpers, tier-aware filters, legacy ListView safe match%, connection detail and chat flow updates, E2E nav helper, Playwright trace script. Contracts/OpenAPI: admin question models and connection stage fields; regenerated app-contract…

  1839. Discovery matches, admin API split, platform admin fleet, auth hardening · 0f7d647

    Discovery and matching: - Bulk match pipeline uses counterpart profileId UUID; enrichment via MatchCalculationService - Flat match docs and indexes documented; DiscoveryQueryService and filter UX fixes - Profile generator quadrant slugs; migration and empty-state copy for list/universe Backend admin: - Split admin routes (profiles/questions); QuestionService and bulk profile normalization - OpenAPI and generated clients updated; path allowlist adjusted Web admin and auth: - Admin panel layout; remove DataManagemen…

  1840. Admin locale routes, auth/error fixes, E2E context parity · 0a279e9

    - Localized admin under [locale]/admin; AdminPanel aligns with app shell and ?section= URLs; ThemeTab and RBAC-aligned RequireAdmin/admin routes. - Next.js 16 auth/error server page + AuthErrorPageClient; intl-safe navigation and ErrorPage/SignIn wiring. - Landing/AppProviders pointer-events and scroll; robots/proxy updates; compose and tenant env tweaks. - Backend admin route refactor + requirePlatformAdmin middleware; ProfileService adjustments and tests. - Playwright: fresh BrowserContext uses same baseURL/igno…

  1841. Brevo integration and login working · 9f41c42

    - Wire Brevo transactional mail: probes, E2E helpers, sender/from alignment, SMTP docs and BREVO_IMPLEMENTATION.md - Web client: LoginForm, auth E2E routes (mail-delivery-trace, mongo-ping), Playwright projects (ui vs integration) - Vitest layout: atomic tests under ui, integration, infra; new Brevo/mail atomic coverage - Pipeline: constants_env, pytest autouse Brevo probe hooks, fleet registration preserve-stack and misc CLI - start_app: remove orphan fixed-name backend/web-client containers before compose up - T…

  1842. Locale auth routing, contracts, edge TLS, and design reference · 69775ab

    - Move app pages and auth under [locale]; add i18n routing, Tolgee proxy, LocalePreferenceSync, connection profile resolution, and proxy matcher - Backend: auth/profile/users routes, ProfileService, TranslationService, AuthService; OpenAPI and generated client types - Pipeline: edge TLS behavior, env serialization, Harbor labels, Zitadel OIDC, tenant env, deployment compose; fleet/infra tests and docs - Add FigmaDesign-TrueConnection reference tree and cursor rules for profile identity and Figma UX alignment - Web…

  1843. Sign-in registration flow, preserve-stack --debug; Hero CTA; todos · a3f4891

    - Playwright: open /auth/sign-in with journey redirect; ensureAuthSignInEmailCaptureVisible navigates to sign-in when the email field is missing (landing uses Begin Your Journey). - Recorded create-user spec aligned; nextauth_email_signin_http comment updated. - run_e2e_registration_preserve_stack.py: --debug for headed Playwright Inspector; no subprocess timeout in debug mode. - Hero: single primary CTA; remove extra grid (Google sign-in, store modals) from hero section. - todos.md: registration HTML mail templat…

  1844. Sync workspace — admin auth route, env serialization, fleet/deploy, docs · c9c9d02

    - Web: move session admin check to GET /api/auth/admin/check (Traefik tc-auth + Next proxy) - Pipeline: merged .env dotenv quoting (Traefik Host() backticks, spaced JVM opts); parse_env_file symmetry - Tools: verify-api-upstream-health, check-traefik-infra-sanity; todos.md API502 + dev hardening evidence - App-fleet: deploy/orchestration layout refactor; CLI and docs updates - Contracts: OpenAPI/schema generation and workflow - Misc: cursor rules, plans, application docs

  1845. App-pipeline: fleet CLI under src/cli, manager API layout, plans and docs sync · 2cbf471

    - Relocate fleet CLI command modules from app-fleet/cli_commands to app-fleet/src/cli; cli.py imports src.cli.*; update unit tests and path helpers - Consolidate FleetPublicInterface, contract_loader, infra ops under app-fleet/src/manager; adjust fleet package imports and re-exports - Move completed Cursor plans to .cursor/plans/done; remove duplicate plan copies - Update MODULE_BOUNDARIES, runners/runbooks, compliance paths, and related references - Include accompanying changes across app-deployment, app-fleet, a…

  1846. App-pipeline: finalize stage stack rebuild hardening and registry tunnel refactor · 337a35f

    This commit consolidates the stage stack verification and ACME production-certificate workflow updates while introducing the registry push tunnel and remote execution package refactor to stabilize end-to-end deployment operations.

  1847. App-pipeline: harden stage TLS and registration verification loop · 0d411c3

    Consolidate stage ACME and preserve-stack workflow fixes across fleet orchestration, Traefik/Harbor compose labels, runner behavior, and supporting tests/docs so stage reachability and registration E2E can be validated deterministically under rate-limit and trust edge cases.

  1848. Materialize remote self-signed Traefik TLS artifacts · 45c89b0

    Ensure remote app-infra sync creates self-signed cert/key files and tls.yml for Traefik when ACME is disabled, so stage preserve-stack registration does not fail on Traefik default certificates.

  1849. App-pipeline: finalize fleet orchestration and stage verification hardening · af87979

    Align FleetManager lifecycle handling, stage stack verification gates, and supporting docs/tests so tenant-state-driven operations remain deterministic across VM, infra, and TLS/Harbor workflows.

  1850. App-pipeline: fleet, deployment, contracts, rules, and test layout updates · 7d1b16f

    - Fleet manager, UI actions, CLI, provisioning, and infra orchestration - Deployment (start_app, Zitadel, remote helpers, compose) - app-contracts schema tools and generated artifacts - Cursor rules and plan archive; remove tracked .env.deploy - Test package layout and pytest config adjustments across modules

  1851. Consolidate fleet UI architecture migration and multi-target pipeline updates · 1ffecca

    Unifies fleet UI into the new package structure and aligns deployment, infra, tenant, and test workflows with the latest multi-target and contract-driven execution model across app-pipeline.

  1852. Add app monitor module and web client task list · b689b80

    Track the new app-monitor files and TODO documentation so the latest local project updates are versioned and shareable.

  1853. Remove debug instrumentation from compact bar and fix plan formatting · 0a80fb7

  1854. Resolve hosting provisioning test failures — dict-to-dataclass migration · d59ce08

    Fix 8 failing tests and sweep 11 files for dict-vs-dataclass consistency across the app-hosting test suite (+10 passing tests, 1828 total). Root causes addressed: - Mock method mismatch: rollback tests set execute_command but production calls execute_sudo (test_02_security, test_04_email) - Patch on wrong module: wait_for_harbor_api patched on manager module instead of _harbor_api where it is actually called (test_harbor) - Missing I/O mocks: wait_for_ssh_port, connect_with_key/password made real connections causi…

  1855. Remove stale generated schema and client files · ed1dcea

  1856. Include remaining schema update and test report log · 731cbdb

  1857. Multi-target infrastructure, mesh networking, harbor registry, and comprehensive test coverage · c30ddc2

    - Add multi-target infra orchestration with execution plans and deploy hooks - Implement VPN mesh networking with WireGuard key manager and IPAM - Add Harbor proxy-cache registry service replacing simple registry compose - Extend fleet UI with mesh/harbor commands, service assignment actions - Add infra service registry and typed contracts (common/contracts) - Refactor env seeder with mode helpers; extend tenant state for services - Update provisioning contracts, storage operations, and cloud-init verification - A…

  1858. Major pipeline overhaul — orchestrators, domains, fleet manager, and multi-target architecture · fb70c8a

    Comprehensive refactoring across the app-pipeline and app-source modules: - Refactored orchestrators (analytics, backend, compliance, deployment, development, devops, flow_analysis, quality, testing, web) with typed interfaces and dataclasses - Removed deprecated infrastructure orchestrator and flow analysis renderers - Updated domain modules (code_analysis, flow_analysis, security, statistics, testing) with consolidated operations and improved type safety - Enhanced fleet manager with multi-target deployment, dep…

  1859. Track app-source cursor config · 6c2a065

  1860. Migrate workflows to python APIs · 1ee0b86

    Replace legacy shell workflows with Python runners using package APIs, update fleet/infra tooling, and refresh related docs and tests.

  1861. Ignore qcow2 images · b867355

    Remove large qcow2 artifacts from tracking and prevent future commits.

  1862. Update workflows and test automation · 30fab1d

    Consolidate infra/test workflow updates, add new automation and clean up generated artifacts.

  1863. Merge pull: resolve conflicts after upstream refactor (vm_api → host_api) · f1be4fc

    - README: keep upstream HostManagementInterface/Path.cwd() example, drop duplicate config/connection section - Accept upstream deletions: TEST_PLAN_TASKS.md, vm_api/ARCHITECTURE.md, vm_api/management.py - Keep local changes: PROJECT_TRUECONNECTION.MDC, requirements.txt, test_golden_image_workflow.py

  1864. Add Docker installation with repository setup and automatic user group assignment · 1bb0e77

    - Add setup_docker_repository atomic function for Docker official repository setup - Add install_docker atomic function with automatic repository setup - Enhance install_packages to detect and handle 'docker' package specially - Add Debian support (detects OS and uses correct repository URL) - Automatically start and enable Docker service after installation - Automatically add user to docker group for non-sudo Docker usage - Add Docker version verification after installation - Export new functions from host_api/os…

  1865. Restructure VM API architecture and add comprehensive test suite · dae7227

    - Refactored interface/ directory to vm_api/operations/ for better organization - Added comprehensive test infrastructure (pytest.ini, tests/ with e2e, unit, integration) - Added requirements.txt for Python dependencies - Removed legacy tools and scripts (moved functionality to vm_api/) - Updated README.md with new architecture - Added TEST_PLAN_TASKS.md for test planning - Added vm_api.py as main entry point - Restructured vm_api/ with proper separation of concerns (operations/, state/, utils/, config/) - Removed…

  1866. Initial commit: TrueConnection application with deployment, hosting, and source modules · 37f51a4

← Back to the landing page