V1 Web PWA · Walk result

Oshun V1 PWA — Walkthrough + E2E Completeness Audit

A dated evidence record for V1 Web PWA: observed behavior, current source reconciliation, automation evidence, and explicit proof limits.

walked · no verdict· date unknown
6sections60 minread5tables

On this page

Date: 2026-06-22 · Synthesis lead: Codex · Scope: 8 newly-written route walkthroughs, an adversarial re-grade of all 52 journeys' TRUE e2e depth, and a staleness sample of the per-view docs (44 sampled across 3 surface clusters).

2026-06-23 supersession note: the /operator/lms page-DOM gap called out in this dated audit is now resolved by operator-lms.spec.ts against a seeded real BFF roster plus lms-connectors.spec.ts seeded API coverage. The current source-of-truth row is WALKTHROUGH/journeys/coverage.md.

2026-06-23 supersession note: the /personas page-DOM gap called out in this dated audit is now resolved and deepened by personas-picker.spec.ts. The browser page now renders real BFF top-level blocked[] persona cards, and the spec drives a live browser→BFF pre-consent blocked roster, real voice-consent grant, select, active read-back after reload, and clear persistence. The pure persona-session-picker.spec.ts BFF round-trip remains the companion API guard.

2026-06-23 supersession note: veritas-retraction-cascade-customer-view is no longer render-only/shallow. veritas-retraction-cascade.spec.ts now covers the /library saved-claim retraction notice with corrected-source, recourse, and remove-from-library affordances; the 2026-06-27 update adds the authenticated BFF personal-letter route plus per-user 404/no-leak browser coverage; the 2026-06-29 update adds polished /nisaba/notebook retraction-disclosure drill-down with corrected-source navigation and honest keep-with-marker placeholder state. Customer-shell subscriber/audit fan-out, persisted notebook acknowledgement writes, and kept-offering re-render remain open; current depth is partial.

2026-06-23 supersession note: nyx-tonight-observation now covers the event detail → observation-log handoff, local oshun.nyx persistence, an eventId-backed History row, and Home Nyx support-card read-back of the newly saved target/notes. 2026-06-24 deepening adds real /v1/nyx/observations POST/GET read-back plus a local-storage-cleared observation-log reload from the BFF. A later 2026-06-24 pass adds the Home footing "Sky observations" current-week KPI read-back and click-through to /domains/nyx/observation-log. A later 2026-06-24 pass verifies every generated Nyx event-detail Nisaba, Veritas, Tara, and Metis cross-domain card target against hydrated shell destinations. A later 2026-06-24 pass fixes and verifies the event-calendar close route for both direct and hydrated-shell arrivals; residual documentation-only Nyx gaps keep the depth partial.

2026-06-23 supersession note: arete-create-habit now covers the /domains/arete/habits?wizard=loop handoff, Cue→Routine→Reward wizard step-through, real /v1/arete/habits POST, returned BFF habit id persisted in local oshun.arete, the newly-created dashboard row, real /v1/arete/habits/:habitId/check-in POST, polished /arete Done-today / 1-day streak / 1 / 7 KPI read-back through /v1/arete/room, and Home Arete 1d streak • done today read-back. Cross-device check-in sync remains open; Home legacy KpiGrid is not live per the home walkthrough; current depth is partial.

2026-06-24 supersession note: the arete-create-habit cross-device check-in gap is now closed for the polished /arete BFF read model. arete-create-habit.spec.ts creates and checks in a habit on device A, then opens /arete in a second browser context using the same real member session with no oshun.arete local store; device B reads Done today, 1-day streak, and 1 / 7 from the fresh authenticated /v1/arete/room response. A later 2026-06-24 pass also asserts the wizard's selected sampleIdentityStatements line in the real habit-create whyItMatters request, persists that identity id locally, and reads the created habit back from IdentityPanel; another pass asserts seeded sample-habit toggles remain local-only and emit no BFF check-in write. Home Arete remains same-browser local continuity; a later pass asserts the live Home HomeFootingSummaryStrip practice-streak metric adds the pending same-day local Arete check-in while profile sync is still pending.

2026-06-23 supersession note: themis-assessment-appeal now covers the teacher override branch over real BFF HTTP: repeat adjudication accepts teacherOverride, downgrades to verdictClass: "inconclusive", records status: "overturned", uses decision.decidedBy: "teacher-op", and persists the override rationale into the audit read-back. Detection from the customer assessment submit, /operator/metis review UI, gradebook, and /messages notification remain open; current depth is partial.

2026-06-24 supersession note: themis-assessment-appeal now also covers the upheld branch over real BFF HTTP: repeat adjudication with a matching teacherOverride.verdictClass keeps verdictClass: "violation", records status: "upheld", preserves recommendedAction: "score_hold", and persists the upheld rationale into the audit read-back before the appeal is resolved.

2026-06-26 supersession note: customer assessment submit adjudication is now covered. /metis/assessment posts to /v1/metis/assessment-submissions, runs detection + Themis adjudication, renders the compact verdict read-back, and follows appealable verdicts into /integrity/<verdictId>/appeal.

2026-06-26 supersession note: the learner-safe evidence/rationale pane is now covered on /integrity/<verdictId>/appeal; it renders real audit rationale, signal metadata, evidence excerpts, policy binding, and classifier provenance from the BFF audit record. Upheld-without-teacherOverride, /operator/metis review UI, gradebook, and /messages remain open.

2026-06-26 supersession note: the /operator/metis review UI now reads the live BFF appeal queue, renders dispute/evidence/timeline/due-process detail, blocks blank resolution, resolves through the real BFF, and reads back status: "closed". Remaining Themis gaps are upheld-without- teacherOverride, dedicated verdict-class controls, gradebook read-back, and /messages.

2026-06-26 supersession note: the Themis decision notification bridge is now covered. POST /v1/metis/integrity/appeals/:appealId/resolve publishes an in-app incident row to the claimant's customer message center, and operator-metis-themis-review verifies /messages render, appeal-record follow, clicked receipt, and mark-read read-back over real dev infra. Remaining Themis gaps are upheld-without-teacherOverride, dedicated verdict-class controls, and gradebook read-back.

2026-06-26 supersession note: terminal gradebook correction read-back is now covered. Appealable non-clear submissions emit an initial pending Metis gradebook entry; appeal resolution emits the terminal integrity verdict as an integrity_verdict_change correction with cascadeFrom: "appeal", and operator-metis-themis-review renders the correction plus reads GET /v1/metis/gradebook/<assessmentId>/latest from the real BFF. Remaining Themis gaps are upheld-without-teacherOverride and dedicated verdict-class controls.

2026-06-26 supersession note: the remaining Themis appeal-decision gaps are now covered. /operator/metis renders Uphold / Revise / Dismiss / Escalate verdict controls, submits outcome: "uphold" to POST /v1/metis/integrity/appeals/:appealId/decision without a raw client teacherOverride, reads back verdict.status: "upheld", and keeps the gradebook and /messages read-backs. BFF route tests cover the inconclusive, clear, and severe outcome mappings through the canonical bridge. No current themis-assessment-appeal gaps remain tracked.

2026-06-23 supersession note: the high-severity studio-neith-inverse-modeling.md drift is closed. The walkthrough now matches the current JSON-payload fit-quality workspace, and studio-neith-inverse-modeling.spec.ts covers direct admin navigation, live BFF catalog/evaluate success, non-admin fail-closed, client invalid JSON with no POST, BFF invalid-payload detail, route-map, and Isis quick links.

2026-06-23 supersession note: the false Arete "unwired / DO NOT click" drift is closed for arete-living-offering-create and weekly-review-arete. The journey steps, failure modes, open questions, and spec headers now name the wired AreteOfferingActions / AreteReviewClose BFF paths and leave only the real residual gaps (draft gallery read-back, C2PA/receipt, crisis pre-screen).

2026-06-23 supersession note: the weekly-review-arete step-9 /arete continuity read-back gap is closed. AreteRoom now renders the latest member-scoped review closure from /v1/arete/room, backed by the same areteReviewStore used by /v1/arete/review/closed; arete-review-close returns to /arete and asserts the week-closed card.

2026-06-23 supersession note: the veritas-evidence-trail step-9 test.skip finding is closed for the standard local Playwright stack. The test BFF now honors OSHUN_VERITAS_ADAPTER=mock, veritas-full-journey and veritas-evidence-trail assert the seeded grounded-lead Save/Report actions without conditional skips, and veritas-route.test.ts guards the env override plus the fail-closed home-briefing outage path. Browser-level unavailable rendering and the remaining static claim/source drill gaps keep the journey partial.

2026-06-23 supersession note: the veritas-evidence-trail browser-level unavailable rendering gap is now partially closed by veritas-full-journey. The spec first proves the live BFF returns 403 domain_scope_missing for a signed-in token without domain:veritas, then loads /veritas with that same token and asserts the honest no-lead UI, Evidence · 0 claims, method note, and absent Save/Report actions. Downstream outage remains covered at veritas-route.test.ts and shares the same RSC non-2xx fallback. The static claim-underlines, source-row drill, and browser-induced downstream 503 called out here are closed by later supersession notes below.

2026-06-23 supersession note: the veritas-evidence-trail polished claim-mode interaction gap is now closed. /veritas/claim delegates to VeritasClaimInteractive, whose underlined claim buttons and all-claims table update data-veritas-selected-claim; selected evidence rows are real anchors to /veritas/source/[sourceId]. veritas-evidence-trail.spec.ts drives that browser chain and lands on the matching source profile. The source-id route is now closed; the journey remains partial because the downstream-outage browser 503 leg remains open.

2026-06-23 supersession note: the veritas-evidence-trail browser-induced downstream 503 gap is now closed by veritas-home-outage.spec.ts plus playwright.veritas-outage.config.ts. That dedicated run boots the real BFF with OSHUN_VERITAS_ADAPTER=outage, proves /v1/veritas/briefing/home returns 503 veritas_home_briefing_unavailable, then loads /veritas against that BFF and asserts the honest no-lead UI with no Save/Report action row.

2026-06-23 supersession note: the citation-drift-resolution seeded-ledger test.skip finding is closed for the standard local Playwright stack. Next now honors the harness-only OSHUN_ISIS_PROVENANCE_LEDGER_FIXTURE=clean path when OSHUN_ENABLE_TEST_HARNESSES=true; the browser spec asserts the clean hash-chain verdict, 16-field bundle detail, empty tenant, unavailable ledger, and broken-ledger verdict with no conditional skips. Recheck/re-render/retract write paths remain unwired, so the journey stays partial.

2026-06-23 supersession note: the sophia-grounded-answer grounded-WITH- citations BFF gap is closed for the real /v1/sophia/answer branch. sophia-answer-bff.spec.ts now drives the live BFF through the in-process Nisaba public-domain corpus and asserts groundingState: "grounded", stable citation IDs, retrieved claims, and citation-map invariants; it also preserves the no-sources abstention guard. sophia-grounded-answer-page.spec.ts submits the shipped /sophia form to the live BFF and renders grounding state, witnesses, claim rows, and the live citation handoff into a Nisaba passage reading frame. The same spec now also saves the grounded answer through the real saved-items BFF and verifies a fresh /library context hydrates the saved Sophia answer snapshot, witness trail, and grounded trust state; it now also carries the citation locator into Nisaba, highlights the exact reading excerpt, and verifies browser-back restores the /sophia answer card and scroll position. The same spec now submits the shipped /search input to the live /v1/search BFF for a Nisaba query and verifies the grounded preview evidence context. Contradiction loop UI, synthetic/retracted/cross-tenant failure modes, and labels beyond the current extractive retrieved path remain open, so the journey stays partial.

2026-06-24 supersession note: pwa-update-flow no longer has open browser-level gaps for the reading-mode prompt, lost OSHUN_SKIP_WAITING, or controllerchange reload-loop guard. pwa-smoke drives the Nisaba reading-mode prompt, Keep-reading deferral, and mid-passage scroll restore after an explicit refresh; pwa-failure-modes now drives the lost-message manual reload escape and a real apply path that reloads exactly once, clears the prompt, and preserves /explore. The journey remains partial: the real sw.js stale-cache purge, multi-tab reload sequence, cold-start no-prompt behavior, and the in-flight BFF write/read-back leg are now browser-driven in pwa-lifecycle-deepening; the raw service-worker queue/replay substrate is browser-driven in offline-background-sync. 2026-06-26 adds the queued-write update-prompt UI and telemetry: sw.js publishes OSHUN_SYNC_QUEUE_STATUS, pwa-lifecycle-deepening verifies a real pending service-worker queue row is surfaced in the Refresh-now prompt, and the same spec now asserts pwa_update_applied for both the Refresh-now controllerchange path and the silent standalone cold-start path plus pwa_sync_queued for the pending queue row. Current canonical matrix depth for pwa-update-flow is deep.

2026-06-24 supersession note: public-scene-abuse-report now covers the real operator decision write verbs. public-scene-abuse-report.spec.ts seeds fresh public reports, resolves one through POST /v1/admin/abuse-reports/:id/resolve with note/actor/list read-back, dismisses another through POST /v1/admin/abuse-reports/:id/dismiss, and asserts an unknown report id returns 404 abuse_report_not_found. The prior operator-row/deep-link leg and the public form/report edges remain covered. The artifact takedown cascade is now covered as real-BFF infrastructure by scene-password-and-grants.spec.ts: an operator-scoped originating-user-account-deletion takedown tombstones both public share links for one artifact, denies both embeds as revoked, makes an existing download grant return 410 download_grant_inactive_share, and writes takedown_cascaded to tenant audit. Remaining public-report gaps are the unbuilt operator-detail UI that connects a public-report INC to that cascade action, actor restriction branch, modal rationale-floor UX, brigade clustering, and signed-in reporter status surface.

2026-06-24 supersession note: scene-keep-and-share now covers the password-protected embed branch. scene-password-and-grants.spec.ts seeds a link-with-password share, opens /scene/:shortCode/embed in the browser, and asserts the iframe-safe "not embeddable" card, target="_top" Open-offering link, and absence of full viewer chrome, Report, Download-grant, and form controls. The direct public playable embed, revoke tombstone, delete cascade, password unlock, explicit-consent 400, tenant_internal_only policy public-share 403 denied_public_scope on the Playwright dev-BFF override path, mass-share 429, and download-grant request remain covered by sibling scene specs. The private_only crisis-touched artifact branch is also now covered: a crafted private-link share with x-oshun-living-scene-crisis-label: crisis-frame-active fails with 422 and crisis-private-only:crisis-frame-active. The production-mode stored-tenant-policy posture is now covered by scene-stored-tenant-policy.e2e.ts under playwright.living-scenes-stored-policy.config.ts: the isolated real BFF runs with header policy overrides off, rejects spoofed tenant_lotus public sharing with 403 denied_public_scope, records share_denied in tenant audit, and still allows tenant-internal. At that point, the keep/share gaps still included customer share-settings snippet/oEmbed copy UI, download-media integrity, non-crisis Lilith pre-share failure, and network-idempotent retry.

2026-06-24 supersession note: the scene-keep-and-share network-idempotent retry gap is now closed by the BFF share route and scene-viewer-deepening.spec.ts: a retry for the same artifact + channel at a later timestamp returns the existing active share with idempotentReplay: true and the tenant audit API still has exactly one share_created row for that artifact/channel. At that point, the keep/share gaps still included customer share-settings snippet/oEmbed copy UI, download-media integrity, and non-crisis Lilith pre-share failure.

2026-06-24 supersession note: the scene-keep-and-share non-crisis Lilith pre-share failure gap is now closed by the BFF share route and scene-password-and-grants.spec.ts. A kept artifact whose materialized segment trips the safety-frame check is rejected with 422 lilith_blocked, returns structured lilithReasons, creates no share id, and records a tenant-audit share_denied row with policyDisposition: "denied_lilith_pre_share". At that point, the keep/share gaps still included customer share-settings snippet/oEmbed copy UI and download-media integrity.

2026-06-24 supersession note: the prior download-media integrity gap is now closed for the shipped V1 renderer by the BFF grant-redemption route and scene-password-and-grants.spec.ts. POST /download-grants now returns the actual APNG materialization format instead of claiming MP4; redeeming /download-grants/<grantId>/media streams the same bytes signed into the share's C2PA manifest, exposes the visible-mark short code, reports audioWatermarkIntact: "not-applicable" for the silent renderer, and expires after the 900-second TTL. At that point, the remaining keep/share gap was the customer share-settings snippet/oEmbed copy UI.

2026-06-24 supersession note: the customer share-settings snippet/oEmbed copy gap is now closed by apps/oshun/web/src/app/scene/[id]/ShareSettingsPanel.tsx and living-scene-card.spec.ts. The browser journey opens the public viewer, asserts the literal 960×540 iframe snippet and oEmbed endpoint, clicks the iframe and oEmbed copy controls, verifies clipboard contents, fetches /scene/<shortCode>/oembed, and asserts the returned oEmbed HTML matches the copied iframe snippet. The journey remains partial until the persisted customer kept-artifact share/revoke management surface is fully shipped and browser-driven; the real lifecycle is currently proven through authenticated BFF requests plus the public viewer/browser branches.


1. Executive Summary#

Routes documented this pass: 8#

All 8 routes were written from source-reading (status: drafted, no live walk). Every one has real interactions; none is a render-only specimen. 5/8 already have a backing e2e spec; 3/8 (/operator/lms, /operator/personas, /personas) have no page-DOM spec and need one authored.

Dated finding: the /operator/lms, /operator/personas, and /personas page-DOM gaps are now closed by the 2026-06-23 supersession notes above and the reconciled route rows below.

2026-06-23 supersession note: the /operator/personas page-DOM gap is now resolved and deepened by operator-personas-console.spec.ts. The browser console reads the live BFF roster with persona-admin scope, covers auto-select and empty fail-soft states, drives a real browser submit-for-review transition to in-review with status/audit repaint and BFF read-back, verifies approve-for-release field rendering, and keeps a deterministic 409 inline-error branch. persona-lifecycle-bff.spec.ts remains the pure real-BFF lifecycle chain/scope/rollback companion.

Journeys by TRUE depth (52 total)#

TRUE depth Count Journeys
deep 18 aaa-upgrade-entitlement-bounce, first-time-anonymous-visitor, onboarding-ten-steps, scene-public-viewer-anonymous, telegram-bot-assistant-delivery, user-flag-to-review, account-deletion-and-dsar, incident-triage, messages-center-deliver-and-unsubscribe, tenant-audit-log-investigation, agentic-pipeline-customer-invocation, install-as-pwa, public-scene-abuse-report, lilith-studio-tara-scene-publish, metis-lesson-completion, multi-device-workspace-handoff, tara-daily-ritual, first-tara-sit, tara-to-nisaba-handoff, pwa-update-flow
partial 30 assistant-handoff-context-carry, memory-edit-pause-forget, nisaba-notebook-capture-and-cite, atelier-image-to-library, nisaba-scholarly-read, persona-voice-avatar-approval-workflow, search-explore-deep-read-library-save, veritas-evidence-trail, citation-drift-resolution, messages-quiet-hours-and-channel-binding, nyx-event-calendar-sync-reminder, psyche-tutor-live-session-to-graded-record, sign-up-and-pay-crypto, tenant-bulk-member-invite-scim, arete-create-habit, crisis-aware-tone-policy, library-save-collection-share, metis-byom-ingest-to-course, nyx-to-tara-bridge, sophia-grounded-answer, tenant-onboard, veritas-to-nisaba-deeper, arete-living-offering-create, editorial-review-approval, nyx-tonight-observation, tenant-sso-config-saml-oidc-claim-mapping, weekly-review-arete, arete-streak-recovery, lms-connectors-operator, offline-first-time-use, scene-keep-and-share, themis-assessment-appeal, veritas-retraction-cascade-customer-view
shallow 0
none 0

Note: this dated section has been superseded by the 2026-06-23 notes above for /operator/lms and veritas-retraction-cascade-customer-view; use WALKTHROUGH/journeys/coverage.md for canonical current counts.

Over-claims (TRUE depth < claimed): 2#

  • tenant-sso-config-saml-oidc-claim-mapping — claimed deep, TRUE partial
  • offline-first-time-use — claimed deep, TRUE partial

Under-claims (TRUE depth > claimed): 5 (grade up the matrix)#

scene-public-viewer-anonymous (partial→deep), account-deletion-and-dsar (partial→deep), incident-triage (partial→deep), lilith-studio-tara-scene-publish (partial→deep), metis-byom-ingest-to-course (shallow→partial).

Walkthrough staleness drift (44 sampled)#

Severity Count
high 1
low 2
(clean) 41
  • customer: 16 sampled, 0 drift
  • studio: 16 sampled, 1 high
  • operator+workspace+shell: 12 sampled, 2 low

2. The 8 Routes#

route wrote file hasRealInteractions specExists renderOnlySpecimen specPlan
/assistant WALKTHROUGH/customer/02-home-discovery/assistant.md yes (4) yes no Covered by shared-shell-entry-routes.spec.ts + shell-surface-states.spec.ts (live entry card + all 8 preview modes); 2026-06-24 deepening covers explicit [data-assistant-entry-route-open] click re-dispatch and assistant surface reopen; 2026-06-25 covers 390 px tap target, assistant preview primary/secondary navigation, and proxy auth gate.
/auth/verify-email WALKTHROUGH/customer/00-public/auth-verify-email.md yes (3) yes no Covered deep by email-verify-roundtrip.spec.ts: real BFF fresh token → verified, replay → error, no-token missing state, delayed confirm → transient verifying copy, alreadyVerified: true alternate success copy, safe next=/tara Continue handoff, unsafe external next fallback to /, and 44 px Continue target at 390 px.
/integrity/[verdictId]/appeal WALKTHROUGH/customer/08-metis/integrity-verdictId-appeal.md yes (5) yes no Covered deep by integrity-appeal.spec.ts (seed verdict → file → read-back filed; 400/403; operator resolve); 2026-06-24 deepening covers browser-routed load-error and file-error branches; 2026-06-25 covers teacher-cleared appealAllowed=false over the real BFF, direct POST 409, blocked customer render, delayed loading state, 390 px control targets, and proxy auth gate.
/notifications WALKTHROUGH/customer/02-home-discovery/notifications.md yes (13) yes (deep) no Covered by notifications-route.spec.ts at the full-page route: Activity-owned desktop/mobile nav state, no /notifications manifest shortcut, control strip, inbox/lane/domain filter/reset, BFF cursor-backed load-more, loading vs empty states, 500 unavailable disclosure, retry recovery, mobile tap targets, support→/profile, normalized notification-center telemetry, live BFF write persistence, bulk mark-all/dismiss writes, and swallowed write-failure behavior.
/operator/lms WALKTHROUGH/operator/operator-lms.md yes (6) yes no operator-lms.spec.ts now covers page-DOM seeded roster + invalid panel, wrong-scope fail-soft empty state, malformed-JSON no-POST, real-BFF 400/invalid/valid validate legs, native disabled/busy validator semantics, alert/status feedback, footer destinations/tap targets, and 503 failure copy; lms-connectors.spec.ts remains the companion BFF guard.
/operator/personas WALKTHROUGH/operator/operator-personas.md yes (12) yes no operator-personas-console.spec.ts now covers live roster read, auto-select/detail, no-scope empty fail-soft, real browser submit-for-review success + audit repaint, approve-for-release field rendering, mobile roster/detail stacking, 44 px controls/footer targets, native disabled/busy submit semantics, proxy gate, and 409 inline error/no optimistic mutation.
/personas WALKTHROUGH/customer/10-lilith/personas.md yes (3) yes no personas-picker.spec.ts now covers the page DOM, real BFF blocked roster, voice-consent unlock, select→active persistence, reload read-back, clear persistence, measured select/clear tap targets and ARIA labels, plus deterministic loading, recoverable retry, true-empty, BFF-401, and select-500 UI branches.
/settings WALKTHROUGH/customer/09-account/settings.md yes (22) yes no Covered by shared-shell-entry-routes.spec.ts + shell-surface-states.spec.ts; direct-route coverage includes live shell render, breadcrumbs to /profile and /, Account shortcut active state, edit/cancel, save PATCH handoff, sync refresh, export toast, sign-out busy/disabled state, 390 px tap targets, and proxy auth gate. Nested profile subsections remain covered by their dedicated profile specs.

3. Journey Re-grade (worst-first)#

Legend: ⚠ = over-claim (TRUE < claimed); ⬆ = under-claim (grade up).

name claimed TRUE key uncovered
veritas-retraction-cascade-customer-view shallow partial personal-letter path now runs through authenticated BFF personal-letter read, covers disabled read-once honesty + re-open-to-story navigation, and asserts per-user 404/no-leak for another authenticated reader; /library saved-claim notice now covers corrected-source, recourse, remove affordance, empty-state transition, and item_unsaved analytics for the removal; polished /nisaba/notebook now covers retraction notice disclosure, per-citation original-quote row, corrected Veritas source navigation, and honest keep-with-marker placeholder state. Cascade subscriber/audit fan-out, persisted notebook acknowledgement writes, and kept-offering re-render surfaces remain undriven or unwired
pwa-update-flow deep deep real sw.js activation stale-cache purge is browser-driven; reading-mode prompt + mid-passage scroll-restore are covered in pwa-smoke, and the 2026-06-25 update runs that reading-mode branch on the live Nisaba passage route without stubNisabaWorkspaceApi, clearing stale offline snapshots and asserting /v1/nisaba/passages/:id BFF hydration before/after refresh; two-tab controllerchange reload/URL-preservation/no-stale-chunk behavior, backgrounded-PWA cold-start no-prompt behavior, in-flight BFF write/read-back across refresh, explicit Refresh-now pwa_update_applied, silent-cold-start pwa_update_applied, real service-worker queued-write update-prompt note, pwa_sync_queued, and reduced-motion spinner are covered in pwa-lifecycle-deepening; raw service-worker queued-write persistence/replay is covered in offline-background-sync
tenant-sso-config-saml-oidc-claim-mapping ⚠ deep partial live OIDC callback now proves configured lowercase + first-only transforms and two fail-closed callback verdicts; BFF test-connection now proves successful/fail-closed OIDC probe outcomes; metadata-XML/OIDC-discovery import parsing now runs over real HTTP; /operator/sso now persists SAML XML/OIDC discovery imports, all seven claim slots, and all four transform options through the live BFF and renders successful/fail-closed Test verdicts; tenant-admin /identity now covers anonymous gating, tenant-scoped live SSO roster read-back, read-only sample identity-engine evidence, and axe; tenant-admin import/upload controls, per-tenant auth-policy edit panel, tenant-admin sandbox sign-in per-verdict UI, enable state-machine remain uncovered
offline-first-time-use ⚠ deep partial local save-while-offline, search-result offline-save local persistence + sync hint, Tara reflection offline local queue + sync dot, real-SW uncached navigation document fallback with service-worker recovery controls that hydrate when the client is available, auth/session real-SW cache denial plus profile Active devices denial copy, Nisaba fresh/expired 24h BFF cache responses plus component-level expired workspace copy, live Nisaba lexicon/morphology offline degradation copy, and raw service-worker write-queue/replay are now browser-driven; natural sync scheduling for the search/Tara writes remains undriven
assistant-handoff-context-carry partial partial customer memory-off shell branch now covered by assistant-continuity-journey: real /v1/preferences patch → hydrated customer handoff → /v1/assistant/sessions payload/BFF continuity/transcript/turn all memoryScope=off; selected-text PII redaction is now browser-driven into the live session-create handoff; assistant-session-bff now covers real Iris bridge bootstrap/profile-memory posture, profile + notebook recall through the live message route with response.memoryRecall and answer-text folding, assistant-turn persistence into /v1/iris/adapter/review, route-level mismatched-shell artifact sanitization (customer Veritas handoff accepted, admin artifact dropped before continuity merge), and operator-frame suppression; remaining gaps are browser-visible null-artifact/entity mismatch variants, exact continuity-copy variants, grounding inspect, and cross-domain nav depth
memory-edit-pause-forget partial partial profile-memory-controls covers edit/pause/export/hard-delete/full-clear grace plus browser telemetry for edit, pause header/banner source, hard-delete, full-clear request/cancel, and a no-raw-memory-content payload guard; memory-edit-pause-forget now covers Step 2 filters + detail-pane provenance/recalls/reference metadata, Step 4 same-origin two-tab edit conflict with stale-draft preservation, keep-remote and overwrite resolution, and both conflict telemetry events, real Iris BFF review/consent hydration, synced export receipt through /v1/iris/adapter/export, pause-banner resume, tenant-scope rejection, persisted profile pause writes through /v1/iris/adapter/pause with memory_pause_toggled persisted: "bff", assistant dock memory-off handoff/disclosure, collapsed dock memory-off summary, cross-device pause/resume propagation into a second browser context sharing the same real BFF session, synced profile-memory hard-delete through DELETE /v1/iris/adapter/memory/:memoryId, transient Iris review retry, anonymous/offline route failure modes, and the server-authoritative no-write gate (409 iris_memory_paused with review absence until resume). Remaining gap: full-clear cron execution and DSAR export-request persistence.
nisaba-notebook-capture-and-cite partial partial authenticated browser notebook-create form now covers CSRF-backed real BFF create/readback, visibility radio semantics, mobile containment, and text-safe submit/success telemetry; real BFF notebook CRUD/capture, live notebook-backed study-note telemetry, live notebook-backed Nisaba→Metis source-backed tutoring handoff, authenticated-shell split-view notebook note/citation/annotation/collection/study-plan/mobile-lineage flows over real BFF notebook+annotation seeds, authenticated-shell reading-compare-annotate annotation update/archive over a real BFF-seeded annotation, and the dedicated authenticated-shell capture/citation surface over the live Dhammapada passage are now covered; remaining gaps are the inline highlight→notebook browser gesture, Sophia stable-ID round-trip, export downloads/integrity manifests, and display-only/edit conflict failure modes
atelier-image-to-library partial partial 2026-06-27 update: editable prompt, specimen tap-to-select, aspect/style controls, Lock seed, Compare side-by-side, step-rail advancement after select/save, Cast, Refine, Save, save→saved-items BFF read-back→clean-device /library, and 390 px index/image stacking are browser-driven; Cast/Refine POST the browser-entered prompt, selected specimen, aspect, style, and seed-lock state to the real fail-closed /v1/atelier/cast seam. 2026-06-28 update: Save now carries trustState.provenanceState='partial' through real saved-items BFF metadata and renders the Library provenance badge + lineage note on first and clean second-device /library?kind=generated-artifact loads. Remaining gaps are plate-specific library resume/variant lineage, telemetry/crisis/AAA handoff, and provider-credentialed image-success path
nisaba-scholarly-read partial partial dashboard overview, study shelf, shared concept graph, Metis objective bridge, ranked domain recommendations, desktop reading-compare-annotate passage/workflow/compare/annotation paths, route-level reading accessibility, deeper split-view navigation/editing paths, and cross-domain readability checks now run through the authenticated shell without workspace route stubs; compact reading-desk now swaps Pali / English / Both bodies through real language buttons backed by the live passageBodies payload; split-view seeds/reads real BFF notebook+annotation records and waits for live daily/detail BFF responses across compare, grounded, manuscript, annotation update/archive, notebook note, citation/export, scholar, notebook, concept, lexicon, timeline, influence, collections, study-plan, mobile lineage, and mobile note routes; domain-readability now seeds/reads a real BFF notebook and proves live Dhammapada 62ch study-lane/readability posture for passage, compare, grounded evidence, and note routes; headword/folio/notebook-editor/plan-complete/scholar-apparatus interactions remain display-only or unwired
persona-voice-avatar-approval-workflow partial partial full registry lifecycle state-machine, deprecate/retire/recovery, signoff failure modes; consumer picker page-DOM + BFF round-trip now covered
search-explore-deep-read-library-save partial partial real BFF Nisaba nisaba-passage-speech result click now proves destination enters the parameterized passage-mode workspace and renders exact passage id/reference/source/title/body plus compare/support/workflow rails; real BFF Veritas claim result click now proves the claim-detail evidence workspace renders from search; real BFF Veritas story result click now proves the story timeline workspace renders from search; real BFF Tara practice result click now proves the immersive session player renders from search; real BFF Nyx sky-event result click now proves the canonical event-detail workspace renders from search after correcting the live seed target to /events/quadrantid-meteor-shower-peak; real BFF Metis course result click now proves the active study destination preview renders from search; real search-result save→saved-items BFF→Nisaba in-domain unsave/resave de-dupe→cache-free Library hydrate→Nisaba resume URL now also proves the resumed exact passage workspace; real search-result saves now also prove cache-free Library hydrate/resume for Veritas claim/story, Tara practice-as-meditation, Nyx sky-event, and Metis course object templates; 2026-06-29 update: live Explore-dashboard nisaba-passage-speech result save now proves Explore source=explore/surface=dashboard saved-items BFF metadata read-back and clean-device Library hydrate; live-BFF 403 domain_scope_missing now proves the visible search fetch-failure error state clears stale result rows and same-query Retry reissues the live request; long-list Browser Back now restores the /search?q=a scroll position after opening the Nisaba deep-read; remaining gaps are broader non-search save-producer sync and object-template permutations outside the seeded search-result matrix
veritas-evidence-trail partial partial BFF-backed grounded lead, wrong-scope and downstream-503 no-lead browser renders, claim underline → rail update, source-id drill, and 2026-06-29 direct /veritas Save to notebook → saved-items BFF metadata read-back → clean-device Library hydrate are deterministic in Playwright; /veritas/topic now has row/cell-level masthead, settled/open, reading-history, primary-source, gaps, and static-follow coverage, and claim/source/counterclaim citation-band/provenance/reviewer/hash consistency is asserted; story SVG, dynamic topic follow toggle behavior, and retraction trigger depth remain
citation-drift-resolution partial partial hash-chain + 16-field bundle now run under Playwright harness; 2026-06-30 update adds BFF-backed terminal recheck/re-render/retract controls, rationale validation, per-operator resolution read-back, drift.* audit-log read-back, and broken-ledger disabled-action coverage. 2026-07-01 adds BFF-backed per-source drift classification UI, short-rationale blocking, classification read-back, and drift.source_classified audit-log verification for all three drift sources. The latest lifecycle follow-up now resolves shared INC-2041 through the real operator incident store after a chosen terminal drift decision, reads the incident back with created→resolved history, and verifies the linked incident.resolved audit payload. Remaining gaps are background Sophia cascade, downstream Isis re-render append/publication gates/customer retraction cascade/cache purge, explicit incident.created admin-audit emission, and stale operator.tsx file:line citations
messages-quiet-hours-and-channel-binding partial partial message-center after-window quiet-hours replay now delivers queued rows with sent/delivered receipts; browser notification preferences now expose quiet-hours weekday pressed state, narrow Sun/Sat out through real BFF PATCHes, and reload with the persisted start time/active-day mask. The notifications-preferences API now proves the shipped preference matrix across every launch domain (tara, veritas, nyx, arete, nisaba, metis), every persisted delivery modality (inApp, push, emailDigest), and every category kind (reminder, update, event, insight) through real PATCH→GET top-level + nested preferences.domains read-back with no cross-domain bleed. The local BFF dispatch seam now also activates a real crisis frame, reads the member projection back, suppresses a non-essential reengagement message with 202 dispatch.suppressed.crisis_frame, writes no inbox row, and still delivers a critical incident bypass. External provider handoff beyond the message-center receipt seam, provider-level WhatsApp/SMS/email category binding, Lilith tone-band persona-policy, and real deploy-bound OTP/magic-link delivery remain uncovered
nyx-event-calendar-sync-reminder partial partial ICS UID namespacing, event-linked observation creation/BFF read-back, and real /v1/nyx/event-actions reminder-state contract are now covered, including invalid body, event-id mismatch, missing reminder-time 400s, no snapshot mutation, and route reconstruction from cadence+channels. The admin calendar-connector runtime is also now covered over the real BFF: seeded env connector roster, unsupported Apple descriptor retention, secret-free summaries, import failed-run no-refresh-token issue, malformed export 400, and provider export 502 fail-closed. Remaining gaps are external two-way provider OAuth/webhook reconciliation, actual reminder dispatch/delivery/notification cold-start, quiet-hours dispatch deferral, richer event-metadata prefill, and explicit observation-to-event back-link control
psyche-tutor-live-session-to-graded-record partial partial live-voice envelope, library write, full mastery adaptive-loop, operator review lane (all unbuilt surfaces)
sign-up-and-pay-crypto partial partial rendered CryptoPaywall now covered for BFF-issued BTC and USDC/Base invoices, including anonymous /billing/crypto redirect, pending/sanitization gate, asset/network controls, trust-tier badge, address/QR/copy, issued-paywall support action in BTC address-visible, USDC disclosure-gated, and USDC post-ack states, and disclosure ack; 2026-06-27 settlement addendum now posts a signed HMAC webhook to the real BFF settlement receiver, verifies invoice confirmed, purchaser /v1/profile plan freepro, purchaser-scoped invoice ledger txId, by-id status: "confirmed", stale browser address hidden on reload, and idempotent webhook re-delivery. Remaining gaps are sign-up funnel, deploy-bound chain watcher/provider leg, rate-lock oracle provenance, receipt download, explicit success/Continue CTA telemetry, and return-to-gated handoff
tenant-bulk-member-invite-scim partial partial CSV bulk (unwired), IdP callback, outbound invite email, full SSO/MFA/onboarding first-login, operator-table refresh from IdP-created rows, downstream role/callback/first-login audit reconciliation; SCIM bearer/tenant gates + live Postgres Users POST→GET→PATCH→DELETE→revive lifecycle, canonical mirror, SCIM Groups create/list/read/patch/delete membership sync, SCIM Bulk ordered create/group-sync/patch/delete sequencing, SCIM tenant.scim_provision.* audit-log read-back, and the signed-in /tenant/invite accept-page spot-check are now covered
tenant-bulk-operations-export partial partial Dedicated V1 admin bulk operations/export journey added. Real-BFF coverage now proves platform-only operation/export scope gates, clean users bulk operation draft→validate→dry-run→stage→commit, row-level commit outcomes through the real users executor, entitlements bulk operation commit into /v1/profile plan read-back, rosters bulk operation commit into /v1/admin/lms/oneroster commit/tenant totals read-back, persona-assignments bulk operation commit into /v1/personas/active read-back, unsupported content commit failure with terminal failed and null committedAt, duplicate commit 409, validation-error dry-run blocking, per-operator isolation, content JSON export manifest creation/read/verify, approval-gated raw file download with retention/hash/residency headers, unsupported export matrix 400, mismatched record-kind 422, per-record residency metadata violation 422, release/download audit payloads, and audit-search read-back. Remaining gaps are tenant/operator upload-preview UI, CSV parsing/resumable upload, browser-visible release/download controls or future multi-actor approval separation, and real commit executors for content/taxonomy beyond the loud-failure contract
tenant-integrations-api-keys-webhooks partial partial Dedicated V1 section 20.6 tenant integrations journey added. Real-BFF coverage now proves platform-admin snapshot scope gates, API key create/rotate/revoke with raw-token non-leakage, downstream x-oshun-api-key tenant-resource auth with tenant/scope/IP/revoked boundaries and lastUsedAt read-back, duplicate revoke 409, malformed create 400, webhook create with signing-secret non-leakage, signed sandbox simulator delivery, inactive simulator failure without signed request, non-sandbox simulator 409, outbound dispatch handoff with signed canonical request, partner receipt retry/backoff, dead-letter exhaustion, success receipt, connector upgrade, real connector health probes, and audit-search/audit-log taxonomy read-back. Remaining gaps are tenant-admin UI controls and autonomous outbound retry/replay workers
tenant-oneroster-roster-sync deep deep Dedicated OneRoster journey added from the V1 tenant spine. Real-BFF coverage now proves tenant-console-scoped dry-run, clean/conflict reports, apply commit, list read-back, tenant.oneroster.commit.applied audit-log read-back, periodic SIS pull reconciliation with a derived tenant-scoped pull commit, duplicate pull 409 without extra success audit, pull conflict 422 with no roster mutation plus tenant.oneroster.pull.conflicts_detected audit read-back, duplicate commit 409 without extra audit emission, malformed payload rejection, conflict apply no-mutation/no-audit, Metis roster-card refresh, and the dedicated /operator/lms diff preview table. The operator table is seeded through real /v1/admin/lms/oneroster/apply, driven through browser /v1/admin/lms/oneroster/preview, renders clean user-create/user-update/enrollment-create rows plus blocked conflict rows, and reads the roster back to prove preview has no mutation side effect. Production scheduler ownership remains an external deployment-policy question, not a local walkthrough/test gap.
arete-create-habit partial partial wizard create now POSTs real BFF, includes the selected identity line in whyItMatters, keeps BFF id locally, persists a selected identity id locally with IdentityPanel read-back, records first check-in through real BFF, reads back on Home + polished /arete, proves second-device /arete read-back without local Arete state, asserts live Home footing practice-streak pending-local increment, asserts seeded sample-habit toggles are local-only/no-BFF-write boundaries, and asserts /arete/streak reads the live BFF zero/first-check-in count with a 42-cell heatmap that has exactly one accessible today marker
crisis-aware-tone-policy partial partial web cascade from a REAL signal (localStorage-seeded clock only), anonymous public safety surface, re-frame protection; 2026-06-30 update: /profile/safety resource rows now expose actionable us-988 / audit links and emit lilith_safety_resource_opened telemetry from the live frame record
library-save-collection-share partial partial 2026-06-27 update: collection-share.spec.ts drives the visible named-users grant controls and public-profile slug/tier controls through the collection editor, then reads back the live BFF policy; library-shared-web-view.spec.ts opens a generated /share/:token URL as a separate signed-in recipient, renders the real BFF granted tier/via state, proves no same-id recipient local collection fallback, and renders a real insufficient-permission denial; library-save-collection-share.spec.ts now carries a guest saved item through real /welcome sign-in, the pending-auth /v1/library/saved-items/sync replay, BFF read-back, and a clean second-device /library hydrate; library-collection-management.spec.ts now covers legacy oshun.library.collections.v1 version:0 migration to current version:1 with duplicate/stale item sanitization on a direct collection link; atelier-plate-actions.spec.ts now covers a non-search Atelier generated-artifact save through saved-items BFF metadata read-back and clean second-device Library hydrate. 2026-06-28 update: library-save-collection-share.spec.ts now also drives a direct non-search Nisaba passage save from /domains/nisaba?path=/library/passage/..., waits for the real saved-items POST, asserts persisted passage metadata, and hydrates the saved row on a clean second device. 2026-06-29 update: veritas-evidence-trail.spec.ts now drives direct /veritas Save to notebook through the real saved-items POST, asserts persisted Veritas passage metadata, and hydrates the saved row on a clean second device. The same 2026-06-29 slice adds explore-real-search-continuity.spec.ts for live Explore-dashboard result save → real saved-items POST → Explore-specific metadata → clean second-device Library hydrate, and strengthens sophia-grounded-answer-page.spec.ts for direct /sophia grounded-answer save → real saved-items query/primary-witness/trust metadata → clean second-device Library hydrate. The earlier tokenized invite/referral link, revoke, private, saved-items seed/readback, paywall, and cross-device sync coverage still stand. Remaining gaps are other non-search save producers beyond Atelier/Nisaba/Veritas/Sophia and broader per-domain save-toggle permutations outside the seeded Search/Explore/Sophia matrix.
nyx-to-tara-bridge partial partial Tara event-detail card now covers multi-event recommendation semantics across awe/moon/meteor/seasonal/cosmic mappings, destination copy/telemetry, origin=explore&stack=nyx, Tara player start telemetry, completion reciprocal Nyx continuity card, and the /nyx "From Nisaba" canon link into Nisaba. Remaining gaps are crisis-frame suppression, cadence deferral, offline PWA cold-start/back-stack preservation, Iris memory capture/future re-surface, comparative-persona gating for cross-tradition canon, tone-band honor beyond telemetry, and the domain-only sleep_hygiene_to_sleep_descent relationship path not currently reachable from seeded event detail
sophia-grounded-answer partial partial real BFF grounded-with-citations + /sophia render now driven, including normalized passage citation links, a live handoff into the Nisaba reading frame, real saved-items query/primary-witness/surface/trust metadata read-back plus clean-device Library readback, cited-locator highlighting, browser-back restoration for the grounded answer, and a typed /search UI query to live /v1/search with grounded preview evidence context; contradiction loop, synthetic/retracted/cross-tenant FMs, and non-retrieved label paths remain
tenant-onboard partial partial tenant-member-actions now covers the real-HTTP invite acceptance lifecycle: pending invite → signed-in /tenant/invite browser accept page → tenant-console cockpit read-back, plus direct BFF accept, reuse, and wrong-token failures; remaining gaps are branded outbound email/root-link handoff, invite-link SSO/MFA, OnboardingWizard/first action/audit-chain continuity, elevated-permission gate UI, CSV import, and token-lifecycle UI copy
veritas-to-nisaba-deeper partial partial handoff now covers landed Nisaba citation marker → matching source inspector, counterclaim tab inspection telemetry → open-nisaba-counterclaim-lineage → real Nisaba source-lineage landing, saved-claim state after browser-back, backend retraction fan-out, and 2026-06-29 claim-ai-governance-adoption retracted-source confidence band → soft-correction href → real /nisaba/notebook correction notice → /nisaba/compare edition-update diff → corrected Veritas source; remaining gaps are exhaustive step-6 citation integrity on every landed passage claim, AAA-gate bounce, and broader tenant/source-scope failure modes
arete-living-offering-create partial partial 2026-06-27 update: intention capture is now a real /arete/offering textarea that feeds the scene preview copy, score selection clicks update the active score, selected material swatches can move earlier/later and drag/drop locally, recipient/occasion sharing edits update both the masthead summary and send target, those selected values persist through the live BFF + /arete/offerings gallery read-back, keep/send first pre-screen the browser-entered intention through the real Lilith safety-assessment BFF route, block a crisis-like intention with 988 resources + no keep write, fail closed on a safety-assessment 503 before any keep write, carry clean intention into the live BFF as a private member-scoped preview, and the cue-privacy controls now open the full promise plus a real /v1/arete/offerings/receipt envelope with C2PA/cue-privacy/private-intent hashes and no raw intent rendering. Both Save draft and Send now also cover a forced 503 with visible alert, enabled retry, and live BFF draft-kept / delivered recovery. Direct /domains/arete/coach browser submit now reaches the real coach BFF and covers forced-503 honest fallback. Remaining gaps are adjacent/below-threshold tone-band handling, pre-submit score-preview safety gating, Arete binary media signing beyond the receipt envelope, and wiring /arete/offering itself into coach scoring/composition
editorial-review-approval partial partial author submit-for-review, publish leg + Isis ProvenanceBundle, audit reconstruction; spec actually drives the INC decision panel (wrong surface)
nyx-tonight-observation partial partial observation-log local persistence + eventId History row + real /v1/nyx/observations POST/GET + local-cleared reload + Home Nyx support-card read-back + Home footing current-week KPI now covered; event-detail Veritas/Tara/Metis cross-domain target click-throughs now covered; 2026-06-25 update: Nyx→Nisaba overlay and concept-graph links no longer use stubNisabaWorkspaceApi, block service workers, clear stale Nisaba offline snapshots, seed/read a real /v1/nisaba/notebooks record, and wait for live daily/notebook BFF hydration before asserting the landed workspace view; event-calendar direct/hydrated close routing now covered; residual documentation-only Nyx gaps remain
weekly-review-arete partial partial close/save footer + arete_weekly_review_closed browser telemetry + step-9 /arete continuity read-back now covered; mood-thread caption and margin suggestion are now data-backed; per-act completion state, richer plan-adjustment read-back, crisis-supersedes, and Sunday push remain
arete-streak-recovery partial partial primary recovery offer + Begin click through to Tara, recovery-origin Tara partial completion -> Arete engagement read-back, written one-sentence return -> /v1/arete/recovery/journal partial engagement read-back, real /v1/arete/streak trigger-engine timing now proves two missed windows stay grace_window/intact and the third missed window crosses to freeze_window/protected, heatmap a11y, coach-card Approve/Not-this-week BFF read-back, approved coach adjustment propagation into /arete/plan invitation + next intention row, and /arete/streak Adjust/Begin navigation-only no-mutation guard are now covered; durable Tara session-start write, browser-visible route/notification gating from the trigger engine, and crisis-supersedes remain
lms-connectors-operator partial deep /operator/lms page DOM, seeded valid+invalid roster, dry-run validate gates/results, and LTI login→launch JWKS fail-closed are now covered over real dev infra; in-app connector CRUD remains deferred
scene-keep-and-share partial partial public share → viewer, share-settings iframe/oEmbed copy, oEmbed JSON, playable embed, revoke/delete tombstones, password-protected share/gate/embed break-out, explicit-consent BFF enforcement, APNG download-grant integrity, operator takedown cascade over two public shares + embed denial + existing grant 410 + tenant audit, Lilith pre-share re-check 422, tenant-policy gates, mass-share/rate-limit, stored-policy override-off, idempotent retry; persisted customer share/revoke management UI remains unshipped/browser-undriven
themis-assessment-appeal partial deep teacher override, uphold, teacher-cleared appealAllowed=false, learner assessment submit→detection→Themis adjudication→audit/appeal-link handoff, learner-safe audit rationale/evidence/classifier read-back, /operator/metis live appeal queue/read/outcome-decision UI, uphold-without-client-teacherOverride, dedicated verdict controls, terminal gradebook correction/read-back, and /messages decision notification read/follow/mark-read are now covered over real BFF HTTP/browser flows; no current gaps remain tracked for this journey
account-deletion-and-dsar ⬆ partial deep Redis fan-out signed receipt now covered for voice_profile; 2026-06-26 browser /profile?path=data-rights coverage also seeds real Isis generated_outputs, renders the signed generated_artifact receipt, and verifies hard-delete; full six-service RPC/audit-platform fan-out and anon email-link verification remain
incident-triage ⬆ partial deep /operator/incidents queue render-only, server-side audit durability (no GET-rehydrate), cross-surface audit correlation; threshold desync (20 vs 50 char)
scene-public-viewer-anonymous ⬆ partial deep doc UNDERSELLS its own coverage (reduced-motion + tenant-auth ARE driven); download-grant APNG redemption/media integrity and expired unlock-token cookie fallback are now covered; only PWA cold-launch remains genuinely uncovered
lilith-studio-tara-scene-publish ⬆ partial deep genuinely deep at authoring layer (state transitions, a11y-blocked publish, revert, release-stream 201/401/403/400); only cross-surface steps 11-12 deduct
metis-byom-ingest-to-course ⬆ shallow partial browser-backed /metis/ingest text source now posts to the real BFF and renders the returned outline; browser-backed /metis/courses/new now posts with bearer+CSRF, receives awaiting-syllabus-review, and hydrates the same learner's drafted course on /metis; metis-ingest-bff + metis-byom-decision still carry the contract/operator depth; approved bundle→Sophia/KG→published CourseBuild pipeline remains uncovered
aaa-upgrade-entitlement-bounce deep deep CTA hrefs, view telemetry, and both CTA click telemetry events are now browser-covered; in-place AaaGate AaaBlockedCard remains represented by the fail-closed legacy hub 404 before embed. Remaining observability gap is proxy-side structured access-log telemetry for redirect / 404 boundary decisions beyond the existing X-Studio-Boundary response header.
first-time-anonymous-visitor deep deep Mailpit verify-link ?next= auto-handoff now covers both the signup browser and a fresh browser context with newly minted HttpOnly cookies; OG/Twitter image handlers, ?reauth=1, onboarding-abandon banner remain
onboarding-ten-steps deep deep Step 4 sensitive-context opt-ins now mirror into the Memory step and real preferences patch. First-run target weighting is covered by unit helper checks plus browser no-redirect Finish branches for structured-learning → Metis and Tara-only general practice → Tara. Offline Finish is now covered by onboarding-lifecycle.spec.ts over real dev infra: browser-offline Finish queues PATCH /v1/preferences in the shipped service-worker IndexedDB queue, Chromium Background Sync replays it, BFF preferences read-back proves persistence, and the queue drains.
telegram-bot-assistant-delivery deep deep route-level rate-limit trigger, fail-closed grounder throw paths, fail-closed voice STT, successful voice-transcript crisis interrupt, Postgres-backed audit-sink persistence, and /profile/telegram expired deep-link disablement with refresh recovery are now covered over the real BFF/browser stack; remaining gaps are outbound Telegram delivery / TTS-back and external STT credentials path
user-flag-to-review deep deep flag affordance, /api/trust-safety/flagsPOST /v1/user-reports, and live admin moderation workspace read-back are covered for the Nisaba submission; Metis lesson/tutor now mount TrustSafetyFlagButton with verified target kind/id/label metadata and dialog controls; real-BFF operator decision now updates a live customer report, emits trust_safety.user_report.decided audit-search evidence, reads the reporter-scoped /v1/user-reports/mine receipt back with cross-reporter isolation, opens /profile/safety to prove the submitted-report browser receipt renders as actioned/content_removed, then opens /messages to prove the in-app report-decision notification row, delivery receipts, Safety Center deep-link follow, and clicked receipt. Remaining gaps are actor suspension / second-reviewer signoff, external push/email delivery + appeal, crisis/severity classification, brigade rate-limits, and origin surfaces outside Veritas / Nisaba / Tara / Metis
messages-center-deliver-and-unsubscribe deep deep 2026-06-26 live browser /messages path now seeds the real BFF through admin dispatch to the browser access-token subject, renders real /api/messages/inbox rows/receipts, follows through the Next proxy, mark-read/archive/unsubscribe/resubscribe through live /api/messages/*, proves same channel+category re-dispatch is 422 suppressed, then proves restored dispatch renders after reload; remaining gaps are external transport provider delivery beyond the receipt seam and broader multi-stage channel receipt permutations
tenant-audit-log-investigation deep deep bookmark/share UI (BFF-only), feed CONTENT narrowing, chain-of-custody hash (product gap), optimistic concurrency
agentic-pipeline-customer-invocation deep deep push/cron triggers, tone-reviewer pre-check, tool DAG (creds-bound), review-gate variants, failure modes
install-as-pwa deep deep iOS A2HS, offline write-queue→sync flush, push notificationclick, sign-out wipe, manifest-404 FM
public-scene-abuse-report deep deep report form, operator S1 inbox, resolve/dismiss write verbs, revoked-share/rate-limit edges, and real-BFF takedown-cascade reconciliation are covered; remaining gaps are the public-report operator-detail cascade UI, actor restriction branch, rationale modal UX, brigade clustering, and signed-in reporter status surface
metis-lesson-completion deep deep assessment submit now posts to real BFF and renders Themis read-back/appeal handoff; save-excerpt→/library (product gap), per-course detail nav, tutor-nudge click, and draft auto-save BFF remain
multi-device-workspace-handoff deep deep 2026-06-28 update: mobile deep-link restore now proves active evidence-source equality with desktop, Home continuity now proves syncing, exact "Sync delayed" copy, retry, and healthy sync states, and Iris failure-mode coverage now proves failed writes leave no false success or storage receipt while post-eviction mobile handoff payloads recompute against the active tab; desktop reload still proves URL-restored side-panel kind + real-BFF Nisaba reading-anchor equality; remaining gaps are post-mobile desktop reload side-effects
tara-daily-ritual deep deep streak-increment write (Arete fixture), return-to-hub no-double-count, cross-domain streak consistency (unit-only)
first-tara-sit deep deep captions/vibration a11y, first-sit cross-domain bridges, audio-fail retry on /tara/sit/<id>, streak increment
tara-to-nisaba-handoff deep deep destination citation-trail payoff now opens the authenticated Nisaba shell with no workspace route mock, carries an exact Sophia-style locator into the Nisaba URL, proves the reading frame highlights that paragraph-1 sentence, and asserts the primary source-trail step exposes Canonical source plus the chapter/paragraph/sentence locator; browser-back from the Nisaba handoff now restores /domains/tara?...&taraSessionState=complete with the Tara completion surface and companion card; remaining gaps are cadence-decay, crisis suppression, and citation-404 edition-update

4. Stale-Spec Risks (deduped — likely RED when run / silent-drift hazards)#

These are line-anchor drift, fixture-coupling, or stub/tautology hazards flagged across the journey specs. Ordered roughly by severity (skip/tautology first, then fixture-coupling, then line-anchor drift).

Test-skip / tautology / silent-degrade (highest):

  1. veritas-evidence-trail.spec.ts:351-354 — step-9 Save→/library (the only deep candidate) is test.skip when data-veritas-article-actions count===0 ("veritas downstream offline"). Closed 2026-06-23: Playwright boots the BFF with OSHUN_VERITAS_ADAPTER=mock; Save→/library, Save toggle, and Report now assert the seeded grounded lead without conditional skips.
  2. sophia-grounded-deepening.spec.ts — runs on VeritasRAG DEMO_RESPONSES['renewable'] (3s setTimeout canned reply, hard-coded IEA/BloombergNEF/IRENA citations, skipAxe): a tautology for the grounding pipeline — must not be read as covering grounding. Closed 2026-06-23 for the real-BFF grounded-WITH-citations requirement and extended 2026-06-24 for the real-BFF cautious/partial branch: sophia-answer-bff.spec.ts now asserts the live BFF cited branch and limited-support partial branch; sophia-grounded-answer-page.spec.ts renders both through /sophia, follows a normalized passage citation into the Nisaba reading frame, verifies the cited locator highlight/back restore leg, and verifies the grounded answer persists through real saved-items Library readback. The VeritasRAG spec remains intentionally scoped to canned citation drill-down and pin UI behavior.
  3. citation-drift-resolution.spec.ts — steps 5-6 hash-chain + 16-field bundle assertions run only with a seeded Isis ledger; default e2e env skips them (test.skip). Closed 2026-06-23: Playwright now starts Next with a harness-only Isis fixture ledger, and the spec asserts clean, broken, unavailable, empty-tenant, and 16-field detail branches without skips.
  4. account-deletion-dsar (profile-customer-data-deletion.spec.ts:105-171) — hand-builds the deletion-snapshot wire shape inline (receiptSignatureHex/auditKeyId/rowsRemoved); if state.ts:393 emitted shape changes, the mock silently diverges from production without failing. Closed 2026-06-26: the positive generated_artifact browser receipt now runs against the live BFF and Isis generated_outputs table; the inline snapshot remains only for the unattested tombstone negative-render guard.

Fixture-string coupling (medium — breaks many assertions on a fixture edit): 5. Closed 2026-06-25nisaba-notebook-capture-cite.spec.ts now runs through the authenticated shell without stubNisabaWorkspaceApi, waits for the live /v1/nisaba/passages/nisaba-passage-attention response, and asserts the live Dhammapada source/provenance trail instead of the removed "Practice Commentary Reader" fixture. A related 2026-06-25 closure removed stubNisabaWorkspaceApi from the Nisaba compare breakpoint leg in viewport-fit.spec.ts; it now opens /domains/nisaba?origin=explore&path=%2Fcompare through the authenticated shell, clears stale Nisaba offline snapshots only for that live route, waits for /v1/nisaba/passages/daily, and asserts the compare layout plus evidence/notebook inspector posture across audited breakpoints. A further 2026-06-25 closure removed the same fixture from shell-route-signoff.spec.ts; the shell signoff path now seeds and reads back a real /v1/nisaba/notebooks record, clears stale Nisaba offline snapshots, waits for live /v1/nisaba/passages/daily or /v1/nisaba/passages/:id hydration, and captures compare/passage signoff evidence from the authenticated shell. A further 2026-06-25 closure removed the fixture from redesigned-surface-breakpoints.spec.ts; it now seeds and reads back a real /v1/nisaba/notebooks record, clears stale Nisaba offline snapshots, and waits for live daily/detail BFF hydration while asserting compare, passage, and notebook split/stacked breakpoint posture through the authenticated Nisaba shell. A further 2026-06-25 closure removed the fixture from visual-regression-pages.spec.ts; the Nisaba passage, compare, notebook, evidence, note, mobile lineage, and mobile note snapshots now seed/read a real /v1/nisaba/notebooks record, clear stale offline snapshots, and wait for live daily/detail BFF hydration before capture. 6. atelier-image-to-library.spec.ts — pinned to exact atelier-depth.ts strings ("Specimen 047", "Seed - 0x4f2a - locked", "p.07"); ~10 render assertions break on any fixture wording change. Also internally inconsistent: line 8 calls "Cast twelve more" unwired, line 233 treats it wired. 7. veritas-retraction-cascade.spec.ts / veritas.tsx:1774-1937 — page content still pins the seeded Renata notice (38%/41%, "16 January", promise list), but the route now loads it through the authenticated BFF personal-letter endpoint and asserts a second reader receives 404/no letter. 8. veritas-to-nisaba-bridge.spec.ts — hard-codes CANONICAL_CLAIMS['claim-renewables-capacity'] text + source-iea; also pins URL fragments from buildHydratedWebDomainRoutePath (encoding-coupled). 9. tenant-audit-log-investigation.spec.ts — pins AUDIT_FIXTURE rows ("eli@oshun.app", "incident.acknowledge", "tenant:tenant-oxbow"; domain-stubs.ts:479-515) → fixture edit breaks 6 assertions. 10. incident-triage.spec.ts — pins "6 open · 1 critical" (line 140) + INC-2036..INC-2041 with fixed category→filter mapping (operator-depth.ts:280-326); also threshold desync: UI rationale floor 20 chars (line 292) vs BFF escalate/resolve floor 50 chars (445-465). 11. tenant-onboard.spec.ts / tenant-member-invite-scim.spec.ts — hard-code EXPECTED_KPI ('247'…'0.9% monthly churn') + row IDs L-00041..L-00048 (operator-depth.ts:127-193); high brittleness, low correctness-risk. 12. lilith-saraswati-persona-dossier-smoke.spec.ts:40-41 — pins data-required-field-count='17'; computed from editorState.validation, so adding/removing a required dossier field silently breaks it. Also persona-rehearsal-bff.spec.ts:219 seeds persona-zen-guide (404s if the workspace seed renames it). 13. Closed 2026-06-24arete-streak-recovery.spec.ts now clicks the primary recovery offer and Begin · 6 min through to the exact Tara sit URL, so the former loose href regex cannot mask a target/order change for the primary return path. 14. search-saved-and-recent.spec.ts:156,277 — hardcoded 2-item SEARCH_RESULTS; recent-row label "compassion in Nisaba" depends on client <query> in <domain> build; source==='recent' tag coupled to search-suggestions.ts. 15. metis-lesson-completion — tutor header "session 14 · 11 turns · saved to library" is a fixture string; no spec verifies a real library write (product gap masked by fixture).

Line-anchor drift (lower — selectors resolve, cited line numbers stale): 16. citation-drift-resolution.spec.ts header — cites operator.tsx:514/543-546/618-619 + operator-depth.ts:206-213 but selectors actually live in AdminInboxConsole.tsx:36/49/109; every file:line citation drifted. 17. first-time-visitor-deepening.spec.ts — pins MarketingLanding.tsx:244, WelcomeAuthPanel.tsx:828-831/862-919. 18. memory-edit-pause-forget specs — pin many ProfileMemoryControls.tsx anchors (:508/:525-550/:604/:641-669/:709/:719/:1127-1130); also localStorage key oshun-profile-memory-controls-v1 hardcoded (memory-state.ts:18) — a key bump silently breaks seeding. 19. nisaba-notebook-capture-cite.spec.ts — pins ~dozen NisabaSurface.tsx anchors (10302/10419/10433/10459/10484/5280-5281/12631-12670) in a ~13k-line component + NisabaCitationTrailPanel.tsx:577. 20. onboarding-deepening.spec.ts — pins OnboardingWizard.tsx (542-565/1170/1456/2168/307-380/901-913/1199/3557); button-label literals ("Get started"/"Continue") asserted by accessible name. 21. account-deletion-dsar.spec.ts — drifted anchors: grace-banner :553-577→:574, dsar-input :1223→:1240, button-text :1226→:1245. 22. sophia-grounded-deepening.spec.ts — line-number comments at GroundedAnswerEvidenceSidebar.tsx:153/187/263/264 + VeritasRAG.tsx:817/872; abstention assert coupled to answer-composer.ts copy. 23. nisaba-scholarly-read.spec.ts — pins scholar fixture strings ("Marcus Aurelius...IV.viii-xii", "4 witnesses · 6 editions · 11 translations", "Edition: Farquharson 1944"; nisaba.tsx:195-221); two different scholar surfaces (/nisaba/scholar vs data-nisaba-scholar-mode-toggle) — maintenance hazard. 24. pwa-lifecycle-deepening.spec.tsPwaUpdatePrompt.tsx:250→267, PwaBootstrap.tsx:240-242→242. 25. multi-device-handoff-deepening.spec.tsMultiPanelWorkspace.tsx:1300-1306→1402; hard-codes notebook slug nisaba-notebook-1 + tab=study-evidence. 26. nyx-tonight-observation.spec.tsrooms.tsx:814-817→891-893, canon Link 1028-1058→1135-1136. 27. arete-streak-recovery.spec.tsarete.tsx:341-345→ masthead :201, eyebrows :370/:423/:440. 28. Closed 2026-06-25tara-to-nisaba-handoff-destination.spec.ts now opens the live authenticated Nisaba destination without stubNisabaWorkspaceApi and asserts the real citation-trail panel/status/derivation step over the live passage. 29. assistant-handoff-deepening.spec.ts:64 — test NAME says outcome=success but body correctly asserts ...outcome='applied' (cosmetic title drift).

Stale doc-claim baked into a spec (will mislead a maintainer): 30. Closed 2026-06-24tenant-sso-config.spec.ts now consistently says /operator/sso renders the live ssoConnectionStore after real POST /v1/admin/sso seeds; the contradictory retired-SSO_FIXTURE wording is gone. 31. Closed 2026-06-23arete-living-offering-create.spec.ts and arete-living-offering-create.md now describe Save-draft/Send as wired through AreteOfferingActions and /v1/arete/offerings/keep; residual gaps are draft gallery read-back, crisis pre-screen, and C2PA/receipt. 32. Closed 2026-06-23arete-weekly-review.spec.ts and weekly-review-arete.md now describe Save-as-private-letter/Close-the-week as wired through AreteReviewClose and /v1/arete/review/close, with /arete read-back now asserted through /v1/arete/room; the data-backed margin suggestion reveal is also now covered in arete-weekly-review.spec.ts. Residual gaps are Sunday push, per-act completion, and richer plan-adjustment propagation. 33. Closed 2026-06-24 — the arete-streak-recovery session-completion → streak-engagement gap is now covered. A recovery-origin Tara sitting completion posts to /v1/tara/sittings/:id/complete, returns areteRecoveryEngagement, writes a member-scoped Tara recovery return Arete partial / done check-in, and reads it back through /v1/arete/room plus the /arete hub. 2026-06-29 update: /v1/arete/streak trigger-engine timing now proves the two-missed-window grace boundary vs third-missed-window recovery threshold. Durable session-start, browser-visible route/notification gating from that engine state, and crisis supersession remain open. 34. Closed 2026-06-26 — the arete-streak-recovery approved coach re-scope now reads the durable /v1/arete/coach/decision state into /arete/plan?intent=adjust and asserts the plan invitation plus next intention row carry the same offered action. 35. editorial-review-approvaloperator-editorial-review-approval.spec.ts actually drives the INCIDENT decision panel (INC-2041, shared with incident-triage), NOT the editorial artifact lifecycle; the journey's substance is not what the spec drives.


5. Walkthrough Staleness Drift (high-severity first)#

file issue severity
WALKTHROUGH/studio/domain-bridges/neith/studio-neith-inverse-modeling.md Closed 2026-06-23. The walkthrough now documents the current JSON-payload fit-quality lane (data-fq-* selectors, /v1/admin/studio/fit-quality catalog + evaluate POST, fail-closed admin scope) instead of the removed reference-image UI. studio-neith-inverse-modeling.spec.ts adds direct page-DOM coverage against the live BFF evaluator plus non-admin and invalid-input branches. closed
WALKTHROUGH/operator/operator-admin.md Cites AdminInboxDecisionPanel at operator.tsx:657, but operator.tsx is 531 lines and the component is no longer rendered directly there. Still reachable (AdminInbox → AdminInboxConsole → AdminInboxDecisionPanel at AdminInboxConsole.tsx:140). Stale line/location citation only; component + three-verdict picker still present. low
WALKTHROUGH/operator/operator-overview.md Line 46 claims LOperatorBar rendered with product="Lilith", but app/operator/page.tsx:27 passes product="OSHUN". Component present; only the cited prop value drifted. low

6. Prioritized Closure Backlog (highest leverage first)#

A. Fix over-claimed matrix grades (de-fabricate; do first — cheapest, restores trust)#

  1. pwa-update-flowclosed 2026-06-24 for stale-cache purge evidence; later 2026-06-24 coverage also closes reading-mode mid-passage scroll restore and the multi-tab controllerchange reload sequence; the cold-start no-prompt path and in-flight BFF write/read-back path are also now browser-driven; later coverage also drives the raw service-worker queue/replay substrate; 2026-06-26 coverage also renders the real queued service-worker write count in the update prompt and asserts pwa_update_applied / pwa_sync_queued telemetry. The current matrix is deep for this journey.
  2. tenant-sso-config-saml-oidc-claim-mapping → regrade deep→partial; live callback transform semantics are now covered for lowercase + first-only, with callback failures for missing mapped email and JIT-disabled unknown users; BFF OIDC test-connection has both successful and fail-closed real-HTTP coverage; SAML/OIDC metadata import now has real-HTTP coverage; /operator/sso now persists metadata/discovery imports, all seven claim slots, and all four transform options through the live BFF; tenant-admin /identity now has real-infra browser coverage for anonymous gating, tenant-scoped SSO roster read-back, read-only sample identity-engine evidence, and axe. The remaining uncovered spine is tenant-admin import/upload controls, auth-policy edit panel, sandbox-probe UI verdicts, and enable state. The contradictory SSO_FIXTURE comment (#30) is closed.
  3. offline-first-time-use → regrade deep→partial; the /healthz probe, deep-route fallback controls, local offline library edit, and raw service-worker queue/replay substrate now meet the browser bar. The auth/session network-only cache-denial transport and uncached deep-route document fall-through with service-worker fallback controls are now also real-SW covered. Search-result offline-save local persistence and visible sync feedback plus Tara reflection offline queue UI are now driven, and the profile Active devices refresh path shows the exact network-only denial copy; the Nisaba 24h cache window now has real-service-worker fresh/expired BFF response coverage plus component-level expired-cache workspace copy. The uncached Nisaba lexicon/morphology offline hint is now covered by nisaba-split-view against a live hydrated passage. Natural sync scheduling for those writes is still undriven.

B. New page-DOM specs for the 3 spec-less routes (this pass's direct gap)#

  1. Closed 2026-06-23apps/oshun/web/e2e/operator-personas-console.spec.ts covers roster auto-select/detail, empty fail-soft, approve-for-release field rendering, 409 inline error/no optimistic mutation, and now a real browser submit-for-review success path with status/audit repaint and BFF read-back.
  2. Closed 2026-06-23apps/oshun/web/e2e/operator-lms.spec.ts covers seeded roster + invalid-panel skip ordering, wrong-scope empty state, malformed-JSON client reject with no POST, real-BFF validate verdicts, and 503 failure copy.
  3. Closed 2026-06-23apps/oshun/web/e2e/personas-picker.spec.ts now covers the /personas page DOM, real BFF blocked roster rendering, voice consent unlock, select→active persistence, reload read-back, clear persistence, and deterministic 401/500 UI failure branches.
  4. Reconciled apps/oshun/web/e2e/notifications-route.spec.ts: the route now has direct deep coverage plus live BFF write persistence, retry recovery, and normalized browser telemetry for open/filter/reset/read/dismiss/mark-all interactions. A follow-up update added BFF cursor-backed load-more coverage for 50+ notification feeds. Remaining route question is first-class nav intent.

C. Walkthrough doc fixes (drift)#

  1. Closed 2026-06-23studio-neith-inverse-modeling.md now matches the current JSON-payload form workspace, and studio-neith-inverse-modeling.spec.ts covers the live lane.
  2. Fix operator-admin.md line citation (operator.tsx:657AdminInboxConsole.tsx:140).
  3. Fix operator-overview.md LOperatorBar product value (Lilith → OSHUN, page.tsx:27).

D. Spec de-fabrication / stale-comment fixes (RED-when-run + misleading)#

  1. Reconcile scene-public-viewer-anonymous doc Uncovered list — it undersells coverage (reduced-motion + tenant-auth ARE driven) — and grade matrix partial→deep.
  2. Reconcile lilith-studio-tara-scene-publish (partial→deep), account-deletion-and-dsar (partial→deep), incident-triage (partial→deep), metis-byom-ingest-to-course (shallow→partial) matrix grades.
  3. Closed 2026-06-23 — deleted/reconciled the false "unwired / DO NOT click" claims in the Arete living-offering and weekly-review specs and journey docs; both now point at the wired AreteOfferingActions / AreteReviewClose BFF paths.
  4. Closed 2026-06-24 — updated telegram-bot-assistant-delivery evidence: voice STT is documented as real fail-closed (resolveSttVoiceProvider, "could not transcribe"), and the focused real-BFF spec now also proves the route-level 13th-message rate-limit trigger instead of leaving it as unit-only.
  5. Closed 2026-06-24 — wired the Telegram webhook response audit envelope into the BFF admin audit-events sink and proved the real local Postgres-backed admin_audit_event row from telegram-webhook-delivery. The remaining Telegram gaps are outbound delivery/TTS-back and external STT credentials. The grounder throw paths were closed on 2026-06-26 as fail-closed abstention coverage instead of 500 behavior.
  6. Closed 2026-06-24 — updated user-flag-to-review docs and browser E2E evidence for the shipped TrustSafetyFlagButton + POST /v1/user-reports path; the focused spec now reads the real admin moderation workspace back and asserts the submitted live cust-ur-* report is queued.
  7. Closed 2026-06-26 — extended the user-flag-to-review origin coverage to the Metis lesson and Metis tutor headers. The focused browser spec now asserts both Metis report buttons expose stable target kind/id/label metadata and open the shared category/rationale dialog; the full live submit → moderation read-back path remains covered by the Nisaba flag in the same spec.

E. Convert test.skip/tautology coverage into real assertions#

  1. veritas-evidence-trailsave/report skip closed 2026-06-23: Playwright seeds the Veritas adapter through the BFF, and the browser specs now fail if the grounded-lead action row is absent. Browser no-lead render partially closed 2026-06-23: veritas-full-journey drives a live BFF non-Veritas-scope denial through the /veritas RSC fallback and asserts the honest empty state plus no Save/Report actions. Claim/source drill closed 2026-06-23: veritas-evidence-trail now clicks an underlined claim, asserts the rail changes, clicks the claims table back to the peak claim, and follows the selected Statnett source row to /veritas/source/statnett-operator-data. Source-id profile routing closed 2026-06-23: the spec also renders /veritas/source/nve-regulator-note and asserts its non-default source profile. Browser downstream-503 leg closed 2026-06-23: veritas-home-outage boots a real outage-mode BFF and asserts the /veritas no-lead browser render after a live 503.
  2. sophia-grounded-answerBFF/page grounded-WITH-citations gap closed 2026-06-23; cautious/partial branch added 2026-06-24: sophia-answer-bff.spec.ts drives the live BFF in-process Nisaba corpus to groundingState='grounded', groundingState='partial', stable-ID citations, retrieved claims, and citation-map invariants, while sophia-grounded-answer-page.spec.ts renders both cited states through /sophia, including a normalized passage-citation handoff into Nisaba, cited-locator highlighting/back-nav restoration, and real saved-items Library readback for the grounded answer; it also submits a typed /search query to live /v1/search and verifies grounded preview evidence context. Remaining work: contradiction loop UI, synthetic/retracted/cross-tenant failure modes, and labels beyond the current extractive retrieved path.
  3. citation-drift-resolutionseeded-ledger skip closed 2026-06-23: steps 5-6 hash-chain assertions execute under the harness fixture ledger, and the BROKEN-ledger fixture asserts data-verification-ok='false'. Remaining work: wire recheck/re-render/retract actions and audit-log chain.

F. Highest-value uncovered journey legs (real product/coverage gaps)#

  1. Closed 2026-06-24 for the message-center replay seammessages-quiet-hours-and-channel-binding now proves delayed quiet-hours dispatch replays via /v1/admin/customer-messages/replay-due after the window closes and writes queued → sent → delivered receipts. 2026-06-26 update: the local message-center dispatch seam also now proves active crisis-frame suppression for non-essential messages and safety-critical incident bypass, including a delayed quiet-hours replay that remains held with dispatch.suppressed.crisis_frame if a crisis frame activates before the replay boundary runs. 2026-06-29 update: the shipped notifications-preferences BFF matrix now covers all launch domains × persisted modalities × category kinds via PATCH→GET read-back. Remaining gaps are external Telegram/WhatsApp/email/SMS provider handoff beyond that receipt seam, provider-level category binding for those real channels, Lilith tone-band persona-policy, and real OTP/magic-link ownership flows.
  2. Closed 2026-06-24 for different-device verify-link semanticsfirst-time-anonymous-visitor now opens the real Mailpit verification link in a fresh browser context with no auth cookies, confirms the single-use BFF token through the same-origin verify-email proxy, lands in /onboarding?redirect=/tara, and proves the new device receives HttpOnly oshun-session and oshun-access cookies plus a verified /api/auth/session.
  3. account-deletion-and-dsar — finish the residual deletion edges: full six-service fan-out with service-specific @oshun/audit-platform attestations and deletion identity-verification email-link round-trip. 2026-06-25 update: local-dev Isis generated_artifact completion is now covered by data-rights-dsar-bff: the spec migrates the Isis DB, seeds generated_outputs, runs immediate category-select deletion over the live Redis-backed BFF fan-out, verifies a signed erased receipt with rowsRemoved=1, and confirms the row is hard-deleted. A real Redis voice_profile signed receipt also renders from live BFF data. 2026-06-26 update: the /profile?path=data-rights browser flow now covers the generated_artifact Isis path too, including the signed UI receipt and post-erasure row-count check.
  4. nyx-tonight-observation / nyx-event-calendar-sync-reminderobservation persistence closed 2026-06-23 and BFF read-back deepened 2026-06-24: NewObservationForm now writes local-first, carries the eventId back-reference, posts to /v1/nyx/observations, and reloads from the BFF after local Nyx storage is cleared. 2026-06-24 update: the Home footing "Sky observations" KPI now counts the newly saved current-week row and routes back to /domains/nyx/observation-log. Later 2026-06-24 update: event-detail Nisaba/Veritas/Tara/Metis cross-domain card target click-throughs now land on hydrated shell destinations. Later 2026-06-24 update: event-calendar direct-route close now replaces to /domains/nyx?origin=explore, and hydrated-shell close removes only path while preserving origin and stack.
  5. arete-create-habitbrowser wizard→BFF and polished /arete read-back closed 2026-06-23; first check-in same-browser continuity closed 2026-06-23: the Cue/Routine/Reward wizard POSTs /v1/arete/habits, stores the returned BFF id locally, renders the dashboard row, POSTs the first check-in to /v1/arete/habits/:habitId/check-in, and /arete reads Done-today / 1-day streak / 1 / 7 back through /v1/arete/room; Home reads the local continuity store as 1d streak • done today. 2026-06-24 update: a second browser context now reads the checked-in habit back from /v1/arete/room with no Arete localStorage, and the wizard's selected identity is asserted in the real create request, persisted locally, and read back in IdentityPanel; a later pass asserts the live Home HomeFootingSummaryStrip practice-streak metric adds the pending same-day local Arete check-in. A later pass wires /arete/streak to the live /v1/arete/streak rollup and asserts both the fresh-member 0 days state and the first-check-in 1 day state with the padded 42-cell heatmap.
  6. Partially closed 2026-06-24public-scene-abuse-report artifact-side takedown cascade is now proven against the real local BFF by scene-password-and-grants: a tenant operator cascades an originating-user-account-deletion takedown across two public share links, both public viewers tombstone, embeds deny as revoked, an existing download grant returns 410, and tenant audit records takedown_cascaded. Remaining work for this item is the public-report operator-detail UI connection, ≥50-char rationale modal UX, actor-side consequence branch, brigade clustering, and signed-in reporter status surface.

G. Line-anchor hygiene (batch, lowest leverage)#

  1. Refresh drifted file:line citations across specs in §4 items 16-29 (selectors resolve; comments mislead). Prefer attribute selectors over line anchors; remove pinned line-number comments in long components (NisabaSurface ~13k lines especially).