V1 Web PWA · Walk result

V1 PWA — Real-Infra E2E Run Findings (2026-06-22)

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

walked · no verdict· date unknown
334sections630 minread1table

On this page

2026-06-23 targeted addendum: the Veritas retraction-cascade customer-view deepening ran green against the real Playwright dev stack: pnpm --dir apps/oshun/web exec playwright test e2e/veritas-retraction-cascade.spec.ts e2e/library-provenance-grounding.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list → 10 passed. Supporting checks: vitest for LibraryDashboard.test.tsx and librarySync.test.ts → 28 passed; pnpm --dir apps/oshun/web typecheck; pnpm --dir apps/oshun/web lint (0 errors, existing warnings only). A Next production build was not run for this addendum because this host has 15 GiB RAM and the workspace memory gate forbids Next production builds on <32 GiB hosts without explicit approval.

2026-06-24 targeted assistant addendum: the assistant-handoff-context-carry BFF boundary deepening ran green against the real Playwright dev stack: pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/assistant-session-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list → 10 passed. Supporting checks: pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/assistant.ts apps/oshun/web/e2e/assistant-session-bff.spec.ts, pnpm --dir apps/oshun/bff typecheck, and pnpm --dir apps/oshun/web typecheck. This addendum covers route-level handoff sanitization: valid customer Veritas context is merged into session continuity, while a mismatched admin artifact is dropped before continuity merge.

297. 2026-07-04 Studio Aja Human Mesh Recovery real-BFF coverage#

Closed the /studio/aja/human-mesh-recovery walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the PCK catalog, exact partial and perfect recovered-pose scoring, breadcrumbs, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-human-mesh-recovery.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/human-mesh-recovery catalog requests and /v1/admin/aja/human-mesh-recovery/assess POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the keypoint-accuracy contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact pck threshold/default-normalization catalog rendering, bearer propagation, breadcrumb, route-map and quick-action affordances, shipped partially-correct hand pose with AUC 0.5 and per-threshold PCK {0.05: 0, 0.1: 0, 0.15: 1, 0.2: 1}, edited perfect pose with AUC 1 and all thresholds correct, client-only prediction JSON / ground-truth JSON / normalization validation with no POST, BFF validation-detail surfacing, malformed success-payload fail-closed behavior, assess transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px / no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected pck metric, default thresholds, and default normalization; rejects malformed assessment results before rendering; exposes stable catalog / result / per-threshold / per-joint / route-map attributes; marks loading / result / error states with live-region or alert roles; and locks the pose and normalization controls while a real BFF assessment request is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaHumanMeshRecoveryWorkspace.tsx apps/oshun/web/src/app/studio/aja/human-mesh-recovery/page.tsx apps/oshun/web/src/components/__tests__/StudioAjaHumanMeshRecoveryWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaHumanMeshRecoveryWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaHumanMeshRecoveryPage.test.tsx apps/oshun/web/e2e/studio-aja-human-mesh-recovery.spec.ts WALKTHROUGH/studio/domain-bridges/aja/studio-aja-human-mesh-recovery.md V1/TODOS.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaHumanMeshRecoveryWorkspace.tsx apps/oshun/web/src/app/studio/aja/human-mesh-recovery/page.tsx apps/oshun/web/e2e/studio-aja-human-mesh-recovery.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaHumanMeshRecoveryWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaHumanMeshRecoveryWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaHumanMeshRecoveryPage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaHumanMeshRecoveryWorkspace.test.tsx src/components/__tests__/StudioAjaHumanMeshRecoveryWorkspace.integration.test.tsx src/components/__tests__/StudioAjaHumanMeshRecoveryPage.test.tsx src/components/__tests__/StudioAjaHumanMeshRecoveryRouteMap.test.ts — 4 files, 13 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-human-mesh-recovery-route.test.ts — 1 file, 7 tests passed.
  • Resource gate before typecheck/Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 9 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-human-mesh-recovery.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.
  • pnpm docs:center — passed; rendered 2991 files.
  • pnpm docs:center:check — passed.
  • pnpm docs:center:verify — passed.
  • Resource gate before pnpm docs:center:test: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised docs browser run, available memory stayed at or above 12 GiB with 29 GiB free swap.
  • pnpm docs:center:test — 95 passed, 11 skipped.
  • pnpm docs:center:pytest — 15 passed.

296. 2026-07-04 Studio Aja MoCap Input Formats real-BFF coverage#

Closed the /studio/aja/mocap-input-formats walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the Alembic-JSON validator catalog, exact valid-document readback, malformed document diagnostics, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-mocap-input-formats.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/mocap-input-formats catalog requests and /v1/admin/aja/mocap-input-formats/validate POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the Alembic-JSON contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact alembic-json error/warning catalog rendering, bearer propagation, route-map and quick-action affordances, shipped valid Alembic document with backend Ogawa, 120 samples, 25 fps, and 2 joints, edited malformed document with 3 blocking errors and 1 warning, client-only blank-input validation with no POST, BFF validation-detail surfacing, malformed success-payload fail-closed behavior, validate transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px / no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected alembic-json validator and required error/warning checks; rejects malformed validation results before rendering; exposes stable catalog / result / route-map attributes; marks loading / result / error states with live-region or alert roles; and locks the document textarea while a real BFF validate request is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaMocapInputFormatsWorkspace.tsx apps/oshun/web/src/app/studio/aja/mocap-input-formats/page.tsx apps/oshun/web/src/components/__tests__/StudioAjaMocapInputFormatsWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMocapInputFormatsWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMocapInputFormatsPage.test.tsx apps/oshun/web/e2e/studio-aja-mocap-input-formats.spec.ts WALKTHROUGH/studio/domain-bridges/aja/studio-aja-mocap-input-formats.md V1/TODOS.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaMocapInputFormatsWorkspace.tsx apps/oshun/web/src/app/studio/aja/mocap-input-formats/page.tsx apps/oshun/web/e2e/studio-aja-mocap-input-formats.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaMocapInputFormatsWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMocapInputFormatsWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMocapInputFormatsPage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaMocapInputFormatsWorkspace.test.tsx src/components/__tests__/StudioAjaMocapInputFormatsWorkspace.integration.test.tsx src/components/__tests__/StudioAjaMocapInputFormatsPage.test.tsx src/components/__tests__/StudioAjaMocapInputFormatsRouteMap.test.ts — 4 files, 13 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-mocap-input-formats-route.test.ts — 1 file, 7 tests passed.
  • Resource gate before typecheck/Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 9 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-mocap-input-formats.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.
  • pnpm docs:center — passed; rendered 2991 files.
  • pnpm docs:center:check — passed.
  • pnpm docs:center:verify — passed.
  • Resource gate before pnpm docs:center:test: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised docs browser run, available memory stayed at or above 12 GiB with 29 GiB free swap.
  • pnpm docs:center:test — 95 passed, 11 skipped.
  • pnpm docs:center:pytest — 15 passed.

295. 2026-07-04 Studio Aja MoCap Data Processing real-BFF coverage#

Closed the /studio/aja/mocap-data-processing walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the footskate detector catalog, planted-foot slide detection, clean and ground-penetration outputs, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-mocap-data-processing.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/mocap-data-processing catalog requests and /v1/admin/aja/mocap-data-processing/detect POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the footskate contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact footskate read/threshold catalog rendering, bearer propagation, route-map and quick-action affordances, shipped sliding planted-foot clip with score 0 and one left-foot slide period, edited clean clip with score 1 and no artifacts, edited ground-penetrating clip with two penetration events, client-only joint/JSON/frame/threshold validation with no POST, BFF validation-detail surfacing, malformed success-payload fail-closed behavior, detect transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px / no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected footskate check, left/right ankle reads, and finite positive thresholds; rejects malformed footskate results before rendering; exposes stable catalog / result / route-map attributes; marks loading / result / error states with live-region or alert roles; and locks the joint, frame, and threshold controls while a real BFF detect request is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaMocapDataProcessingWorkspace.tsx apps/oshun/web/src/app/studio/aja/mocap-data-processing/page.tsx apps/oshun/web/src/components/__tests__/StudioAjaMocapDataProcessingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMocapDataProcessingWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMocapDataProcessingPage.test.tsx apps/oshun/web/e2e/studio-aja-mocap-data-processing.spec.ts WALKTHROUGH/studio/domain-bridges/aja/studio-aja-mocap-data-processing.md V1/TODOS.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaMocapDataProcessingWorkspace.tsx apps/oshun/web/src/app/studio/aja/mocap-data-processing/page.tsx apps/oshun/web/e2e/studio-aja-mocap-data-processing.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaMocapDataProcessingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMocapDataProcessingWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMocapDataProcessingPage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaMocapDataProcessingWorkspace.test.tsx src/components/__tests__/StudioAjaMocapDataProcessingWorkspace.integration.test.tsx src/components/__tests__/StudioAjaMocapDataProcessingPage.test.tsx src/components/__tests__/StudioAjaMocapDataProcessingRouteMap.test.ts — 4 files, 10 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-mocap-data-processing-route.test.ts — 1 file, 8 tests passed.
  • Resource gate before typecheck/Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 9.8 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-mocap-data-processing.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.
  • pnpm docs:center — passed; rendered 2991 files.
  • pnpm docs:center:check — passed.
  • pnpm docs:center:verify — passed.
  • Resource gate before pnpm docs:center:test: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised docs browser run, available memory stayed at or above 12 GiB with 29 GiB free swap.
  • pnpm docs:center:test — 95 passed, 11 skipped.
  • pnpm docs:center:pytest — 15 passed.

294. 2026-07-04 Studio Aja Film/VFX Pipeline real-BFF coverage#

Closed the /studio/aja/film-vfx-pipeline walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the visual-quality catalog, film/VFX motion validation, exact seeded balanced and asymmetric outputs, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-film-vfx-pipeline.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/film-vfx-pipeline catalog requests and /v1/admin/aja/film-vfx-pipeline/analyze POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the visual-quality contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact visual-quality sub-score and impression catalog rendering, bearer propagation, route-map and quick-action affordances, shipped balanced film/VFX pose with score 0.85 / professional, edited asymmetric low-hand pose with score 0.45 / poor, client-only joint/JSON/frame validation with no POST, BFF validation-detail surfacing, malformed success-payload fail-closed behavior, analyze transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px / no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected visual-quality analyzer, all three sub-score keys, and all four impression labels; rejects malformed visual-quality results before rendering; exposes stable catalog / result / route-map attributes; marks loading / result / error states with live-region or alert roles; and locks the joint and frame controls while a real BFF analysis request is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaFilmVfxPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/film-vfx-pipeline/page.tsx apps/oshun/web/src/components/__tests__/StudioAjaFilmVfxPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaFilmVfxPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaFilmVfxPipelinePage.test.tsx apps/oshun/web/e2e/studio-aja-film-vfx-pipeline.spec.ts WALKTHROUGH/studio/domain-bridges/aja/studio-aja-film-vfx-pipeline.md V1/TODOS.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaFilmVfxPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/film-vfx-pipeline/page.tsx apps/oshun/web/e2e/studio-aja-film-vfx-pipeline.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaFilmVfxPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaFilmVfxPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaFilmVfxPipelinePage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaFilmVfxPipelineWorkspace.test.tsx src/components/__tests__/StudioAjaFilmVfxPipelineWorkspace.integration.test.tsx src/components/__tests__/StudioAjaFilmVfxPipelinePage.test.tsx src/components/__tests__/StudioAjaFilmVfxPipelineRouteMap.test.ts — 4 files, 10 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-film-vfx-pipeline-route.test.ts — 1 file, 7 tests passed.
  • Resource gate before typecheck/Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 9 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-film-vfx-pipeline.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

293. 2026-07-04 Studio Aja Gaming Pipeline real-BFF coverage#

Closed the /studio/aja/gaming-pipeline walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the perceptual-quality catalog, game-animation validation, exact seeded balanced and degraded outputs, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-gaming-pipeline.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/gaming-pipeline catalog requests and /v1/admin/aja/gaming-pipeline/analyze POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the perceptual-quality contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact perceptual-quality sub-score and rating catalog rendering, bearer propagation, route-map and quick-action affordances, shipped balanced game-animation clip with overall score 0.9058 / excellent, edited degraded clip with overall score 0.7146 / acceptable, client-only joint/JSON/frame validation with no POST, BFF validation-detail surfacing, malformed success-payload fail-closed behavior, analyze transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px / no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected perceptual-quality suite, all four sub-score keys, and all five ratings; rejects malformed perceptual-quality results before rendering; exposes stable catalog / result / route-map attributes; marks loading / result / error states with live-region or alert roles; and locks the joint and frame controls while a real BFF analysis request is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaGamingPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/gaming-pipeline/page.tsx apps/oshun/web/src/components/__tests__/StudioAjaGamingPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaGamingPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaGamingPipelinePage.test.tsx apps/oshun/web/e2e/studio-aja-gaming-pipeline.spec.ts WALKTHROUGH/studio/domain-bridges/aja/studio-aja-gaming-pipeline.md V1/TODOS.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaGamingPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/gaming-pipeline/page.tsx apps/oshun/web/e2e/studio-aja-gaming-pipeline.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaGamingPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaGamingPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaGamingPipelinePage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaGamingPipelineWorkspace.test.tsx src/components/__tests__/StudioAjaGamingPipelineWorkspace.integration.test.tsx src/components/__tests__/StudioAjaGamingPipelinePage.test.tsx src/components/__tests__/StudioAjaGamingPipelineRouteMap.test.ts — 4 files, 10 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-gaming-pipeline-route.test.ts — 1 file, 7 tests passed.
  • Resource gate before typecheck/Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 9 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-gaming-pipeline.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

292. 2026-07-04 Studio Aja Martial Arts Pipeline real-BFF coverage#

Closed the /studio/aja/martial-arts-pipeline walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the style-consistency catalog, martial-arts motion validation, exact seeded pose-shift output, Metis bridge links, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-martial-arts-pipeline.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/martial-arts-pipeline catalog requests and /v1/admin/aja/martial-arts-pipeline/analyze POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the style-consistency contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact style-consistency sub-score catalog rendering, bearer propagation, Metis bridge hrefs, route-map and quick-action affordances, seeded RightHand pose-shift with score 0.6333 and exact velocity / pose style breaks at frame 3, edited steady form with catalog window size 30 returning score 1 and no breaks, client-only joint/JSON/frame/window validation with no POST, BFF validation-detail surfacing, malformed success-payload fail-closed behavior, analyze transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px / no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected style-consistency analyzer and all three sub-score keys; rejects malformed style-consistency results before rendering; exposes stable catalog / result / style-break-row / route-map attributes; marks loading / result / error states with live-region or alert roles; and locks the joint, frame, and window-size controls while a real BFF analysis request is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaMartialArtsPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/martial-arts-pipeline/page.tsx apps/oshun/web/src/components/__tests__/StudioAjaMartialArtsPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMartialArtsPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMartialArtsPipelinePage.test.tsx apps/oshun/web/e2e/studio-aja-martial-arts-pipeline.spec.ts WALKTHROUGH/studio/domain-bridges/aja/studio-aja-martial-arts-pipeline.md V1/TODOS.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaMartialArtsPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/martial-arts-pipeline/page.tsx apps/oshun/web/e2e/studio-aja-martial-arts-pipeline.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaMartialArtsPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMartialArtsPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMartialArtsPipelinePage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaMartialArtsPipelineWorkspace.test.tsx src/components/__tests__/StudioAjaMartialArtsPipelineWorkspace.integration.test.tsx src/components/__tests__/StudioAjaMartialArtsPipelinePage.test.tsx src/components/__tests__/StudioAjaMartialArtsPipelineRouteMap.test.ts — 4 files, 10 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-martial-arts-pipeline-route.test.ts — 1 file, 7 tests passed.
  • Resource gate before typecheck/Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 10 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-martial-arts-pipeline.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

291. 2026-07-04 Studio Aja Sports Pipeline real-BFF coverage#

Closed the /studio/aja/sports-pipeline walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the physical-plausibility catalog, sports motion validation, exact seeded hip teleport output, Metis bridge links, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-sports-pipeline.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/sports-pipeline catalog requests and /v1/admin/aja/sports-pipeline/analyze POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the physical-plausibility contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact physical-plausibility sub-score catalog rendering, bearer propagation, Metis bridge hrefs, route-map and quick-action affordances, seeded hip teleport with score 0.3, implausible frames [1, 2], and exact velocity / acceleration / COM violations, edited static grounded pose with score 1 and no violations, client-only joint/JSON/frame validation with no POST, BFF validation-detail surfacing, malformed success-payload fail-closed behavior, analyze transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px / no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected physical-plausibility analyzer and all four sub-score keys; rejects malformed plausibility results before rendering; exposes stable catalog / result / violation-row / route-map attributes; marks loading / result / error states with live-region or alert roles; and locks the joint and frame controls while a real BFF analysis request is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaSportsPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/sports-pipeline/page.tsx apps/oshun/web/src/components/__tests__/StudioAjaSportsPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaSportsPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaSportsPipelinePage.test.tsx apps/oshun/web/e2e/studio-aja-sports-pipeline.spec.ts WALKTHROUGH/studio/domain-bridges/aja/studio-aja-sports-pipeline.md V1/TODOS.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaSportsPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/sports-pipeline/page.tsx apps/oshun/web/e2e/studio-aja-sports-pipeline.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaSportsPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaSportsPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaSportsPipelinePage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaSportsPipelineWorkspace.test.tsx src/components/__tests__/StudioAjaSportsPipelineWorkspace.integration.test.tsx src/components/__tests__/StudioAjaSportsPipelinePage.test.tsx src/components/__tests__/StudioAjaSportsPipelineRouteMap.test.ts — 4 files, 10 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-sports-pipeline-route.test.ts — 1 file, 7 tests passed.
  • Resource gate before typecheck/Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 10 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-sports-pipeline.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

290. 2026-07-04 Studio Aja Yoga Pipeline real-BFF coverage#

Closed the /studio/aja/yoga-pipeline walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the naturalness catalog, yoga flow form validation, exact synchronized-limb pattern outputs, Metis bridge links, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-yoga-pipeline.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/yoga-pipeline catalog requests and /v1/admin/aja/yoga-pipeline/analyze POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the naturalness contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact naturalness sub-score catalog rendering, bearer propagation, Metis bridge hrefs, route-map and quick-action affordances, seeded synchronized LeftHand/RightHand/LeftFoot/RightFoot motion with score 0.9738 and two coordination patterns, edited still balanced pose with score 1 and no patterns, client-only joint/JSON/frame validation with no POST, BFF validation-detail surfacing, malformed success-payload fail-closed behavior, analyze transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px / no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected naturalness analyzer and all four sub-score keys; rejects malformed naturalness results before rendering; exposes stable catalog / result / pattern-row / route-map attributes; marks loading / result / error states with live-region or alert roles; and locks the joint and frame controls while a real BFF analysis request is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaYogaPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/yoga-pipeline/page.tsx apps/oshun/web/src/components/__tests__/StudioAjaYogaPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaYogaPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaYogaPipelinePage.test.tsx apps/oshun/web/e2e/studio-aja-yoga-pipeline.spec.ts WALKTHROUGH/studio/domain-bridges/aja/studio-aja-yoga-pipeline.md V1/TODOS.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaYogaPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/yoga-pipeline/page.tsx apps/oshun/web/e2e/studio-aja-yoga-pipeline.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaYogaPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaYogaPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaYogaPipelinePage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaYogaPipelineWorkspace.test.tsx src/components/__tests__/StudioAjaYogaPipelineWorkspace.integration.test.tsx src/components/__tests__/StudioAjaYogaPipelinePage.test.tsx src/components/__tests__/StudioAjaYogaPipelineRouteMap.test.ts — 4 files, 10 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-yoga-pipeline-route.test.ts — 1 file, 7 tests passed.
  • Resource gate before typecheck/Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 9.6 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-yoga-pipeline.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

289. 2026-07-04 Studio Aja Fitness Pipeline real-BFF coverage#

Closed the /studio/aja/fitness-pipeline walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the smoothness catalog, exercise motion form validation, exact jerk/discontinuity outputs, Metis bridge links, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-fitness-pipeline.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/fitness-pipeline catalog requests and /v1/admin/aja/fitness-pipeline/analyze POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the smoothness contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact smoothness report catalog rendering, bearer propagation, Metis bridge hrefs, route-map and quick-action affordances, seeded jerky j motion with average / peak jerk 10800 and discontinuity frames [4, 5, 6], edited clean constant-velocity output, client-only joint/JSON/frame/threshold validation with no POST, BFF validation-detail surfacing, malformed success-payload fail-closed behavior, analyze transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px / no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected smoothness analyzer and all five report keys; rejects malformed smoothness results before rendering; exposes stable catalog / result / per-joint-row / route-map attributes; marks loading / result / error states with live-region or alert roles; and locks the joint, frame, and jerk-threshold controls while a real BFF analysis request is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaFitnessPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/fitness-pipeline/page.tsx apps/oshun/web/src/components/__tests__/StudioAjaFitnessPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaFitnessPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaFitnessPipelinePage.test.tsx apps/oshun/web/e2e/studio-aja-fitness-pipeline.spec.ts WALKTHROUGH/studio/domain-bridges/aja/studio-aja-fitness-pipeline.md V1/TODOS.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaFitnessPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/fitness-pipeline/page.tsx apps/oshun/web/e2e/studio-aja-fitness-pipeline.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaFitnessPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaFitnessPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaFitnessPipelinePage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaFitnessPipelineWorkspace.test.tsx src/components/__tests__/StudioAjaFitnessPipelineWorkspace.integration.test.tsx src/components/__tests__/StudioAjaFitnessPipelinePage.test.tsx src/components/__tests__/StudioAjaFitnessPipelineRouteMap.test.ts — 4 files, 9 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-fitness-pipeline-route.test.ts — 1 file, 7 tests passed.
  • Resource gate before typecheck/Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 9 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-fitness-pipeline.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

288. 2026-07-04 Studio Aja Dance Pipeline real-BFF coverage#

Closed the /studio/aja/dance-pipeline walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the temporal-coherence catalog, dance motion form validation, exact teleport/stutter outputs, Metis bridge links, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-dance-pipeline.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/dance-pipeline catalog requests and /v1/admin/aja/dance-pipeline/analyze POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the temporal-coherence contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact temporal-coherence sub-score catalog rendering, bearer propagation, Metis bridge hrefs, route-map and quick-action affordances, seeded RightHand teleport/stutter output, edited clean-flow output, client-only joint/JSON/frame validation with no POST, BFF validation-detail surfacing, malformed success-payload fail-closed behavior, analyze transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px / no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected temporal-coherence analyzer and all three sub-score keys; rejects malformed coherence results before rendering; exposes stable catalog / result / discontinuity-row / route-map attributes; marks loading/result/error states with live-region or alert roles; and locks the joint and frame controls while a real BFF analysis request is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaDancePipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/dance-pipeline/page.tsx apps/oshun/web/e2e/studio-aja-dance-pipeline.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaDancePipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaDancePipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaDancePipelinePage.test.tsx WALKTHROUGH/studio/domain-bridges/aja/studio-aja-dance-pipeline.md V1/TODOS.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaDancePipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/dance-pipeline/page.tsx apps/oshun/web/e2e/studio-aja-dance-pipeline.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaDancePipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaDancePipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaDancePipelinePage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaDancePipelineWorkspace.test.tsx src/components/__tests__/StudioAjaDancePipelineWorkspace.integration.test.tsx src/components/__tests__/StudioAjaDancePipelinePage.test.tsx src/components/__tests__/StudioAjaDancePipelineRouteMap.test.ts — 4 files, 9 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-dance-pipeline-route.test.ts — 1 file, 7 tests passed.
  • Resource gate before typecheck/Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 9.7 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-dance-pipeline.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

287. 2026-07-04 Studio Aja Desktop Live Capture real-BFF coverage#

Closed the /studio/aja/desktop-live-capture walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the capture frame-budget catalog, JSON payload validation, exact over-budget/dropped-frame outputs, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-desktop-live-capture.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/desktop-live-capture catalog requests and /v1/admin/aja/desktop-live-capture/analyze POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the frame-budget contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact frame_budget catalog rendering, bearer propagation, route-map and quick-action affordances, seeded 60fps four-frame capture output with 47.06 achieved fps / 2 over-budget frames / 1 dropped frame, edited clean 100fps result, client-only malformed-JSON and array-payload rejection with no POST, BFF duplicate-frame detail surfacing, malformed success-payload fail-closed behavior, analyze transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px / no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected frame_budget analysis, rejects malformed capture-budget results before rendering, rejects non-object JSON payloads before POST, exposes stable catalog / result / frame-row / route-map attributes, marks loading/result/error states with live-region or alert roles, and locks the payload editor while a real BFF analysis request is pending.

Verification, all green:

  • pnpm --dir apps/oshun/web exec prettier --write src/components/studio/StudioAjaDesktopLiveCaptureWorkspace.tsx src/app/studio/aja/desktop-live-capture/page.tsx e2e/studio-aja-desktop-live-capture.spec.ts — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaDesktopLiveCaptureWorkspace.tsx apps/oshun/web/src/app/studio/aja/desktop-live-capture/page.tsx apps/oshun/web/e2e/studio-aja-desktop-live-capture.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaDesktopLiveCaptureWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaDesktopLiveCaptureWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaDesktopLiveCaptureWorkspace.live.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaDesktopLiveCapturePage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaDesktopLiveCaptureWorkspace.test.tsx src/components/__tests__/StudioAjaDesktopLiveCaptureWorkspace.integration.test.tsx src/components/__tests__/StudioAjaDesktopLiveCaptureWorkspace.live.test.tsx src/components/__tests__/StudioAjaDesktopLiveCapturePage.test.tsx src/components/__tests__/StudioAjaDesktopLiveCaptureRouteMap.test.ts — 5 files, 8 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-desktop-live-capture-route.test.ts — 1 file, 5 tests passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 9.5 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-desktop-live-capture.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

286. 2026-07-04 Studio Aja Performance Optimization real-BFF coverage#

Closed the /studio/aja/performance-optimization walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the quantization catalog, form validation, exact symmetric/asymmetric outputs, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-performance-optimization.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/performance-optimization catalog requests and /v1/admin/aja/performance-optimization/quantize POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the quantization contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact quantization mode/report catalog rendering, bearer propagation, route-map and quick-action affordances, seeded 8-bit symmetric quantization output, edited 8-bit asymmetric output, client-only value-list and bit-width rejection with no POST, BFF validation-detail surfacing, malformed success-payload fail-closed behavior, quantize transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px / no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected quantization technique, both modes, and all seven report keys; rejects malformed quantization results before rendering; exposes stable catalog / result / route-map attributes; marks loading/result/error states with live-region or alert roles; and locks the values/bit-width/symmetric controls while a real BFF quantization request is pending.

Verification, all green:

  • pnpm --dir apps/oshun/web exec prettier --write src/components/studio/StudioAjaPerformanceOptimizationWorkspace.tsx src/app/studio/aja/performance-optimization/page.tsx src/components/__tests__/StudioAjaModelOptimizationWorkspace.integration.test.tsx e2e/studio-aja-performance-optimization.spec.ts — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaPerformanceOptimizationWorkspace.tsx apps/oshun/web/src/app/studio/aja/performance-optimization/page.tsx apps/oshun/web/e2e/studio-aja-performance-optimization.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaPerformanceOptimizationWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaPerformanceOptimizationWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaPerformanceOptimizationPage.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaModelOptimizationWorkspace.integration.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaPerformanceOptimizationWorkspace.test.tsx src/components/__tests__/StudioAjaPerformanceOptimizationWorkspace.integration.test.tsx src/components/__tests__/StudioAjaPerformanceOptimizationPage.test.tsx src/components/__tests__/StudioAjaModelOptimizationWorkspace.integration.test.tsx — 4 files, 9 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-performance-optimization-route.test.ts — 1 file, 7 tests passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 9.8 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-performance-optimization.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

285. 2026-07-04 Studio Aja Medical/Rehabilitation Pipeline real-BFF coverage#

Closed the /studio/aja/medical-rehabilitation-pipeline walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the range-of-motion catalog, rehab motion form validation, exact joint-angle outputs, embodied-instruction panel presence, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-medical-rehabilitation-pipeline.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/medical-rehabilitation-pipeline catalog requests and /v1/admin/aja/medical-rehabilitation-pipeline/analyze POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the range-of-motion contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact joint-angle-range-of-motion report catalog rendering, bearer propagation, embodied-instruction panel presence, route-map and quick-action affordances, seeded LeftLeg -90-degree out-of-range result with score 0.9762, edited clean identity-motion result with score 1, client-only empty-joint / malformed-JSON / empty-frame rejection with no POST, BFF missing-joint detail surfacing, malformed success-payload fail-closed behavior, analyze transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px/no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the expected check ID and all six report keys, rejects malformed analysis results before rendering, exposes stable catalog / result / violation / route-map attributes, marks loading/result/error states with live-region or alert roles, and locks the joint/frames controls while a real BFF analysis request is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaMedicalRehabilitationPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/medical-rehabilitation-pipeline/page.tsx apps/oshun/web/src/components/__tests__/StudioAjaMedicalRehabilitationPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMedicalRehabilitationPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMedicalRehabilitationPipelinePage.test.tsx apps/oshun/web/e2e/studio-aja-medical-rehabilitation-pipeline.spec.ts — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaMedicalRehabilitationPipelineWorkspace.tsx apps/oshun/web/src/app/studio/aja/medical-rehabilitation-pipeline/page.tsx apps/oshun/web/e2e/studio-aja-medical-rehabilitation-pipeline.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaMedicalRehabilitationPipelineWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMedicalRehabilitationPipelineWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMedicalRehabilitationPipelinePage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaMedicalRehabilitationPipelineWorkspace.test.tsx src/components/__tests__/StudioAjaMedicalRehabilitationPipelineWorkspace.integration.test.tsx src/components/__tests__/StudioAjaMedicalRehabilitationPipelinePage.test.tsx src/components/__tests__/StudioAjaMedicalRehabilitationPipelineRouteMap.test.ts — 4 files, 13 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-medical-rehabilitation-pipeline-route.test.ts — 1 file, 7 tests passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 9.6 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-medical-rehabilitation-pipeline.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

284. 2026-07-04 Studio Aja Input Video Support real-BFF coverage#

Closed the /studio/aja/input-video-support walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the video-chunking catalog, form validation, exact chunk-plan outputs, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-input-video-support.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/input-video-support catalog requests and /v1/admin/aja/input-video-support/plan POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the video-chunking contract.

The suite verifies anonymous redirect, Aja-admin catalog load, exact 5 chunking-strategy / 6 blending-strategy catalog rendering, bearer propagation, route-map and quick-action affordances, seeded 900-frame 30fps / 10s / 1s planning into 3 chunks, edited 1500-frame 30fps / 20s / 2s planning with deterministic overlapping ranges, client-only decimal frame and zero-overlap rejection with no POST, malformed success-payload fail-closed behavior, plan transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px/no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires every expected chunking and blending strategy, rejects malformed plan results before rendering, exposes stable catalog/result and route-map attributes, marks loading/result/error states with live-region or alert roles, disables native browser form validation so the in-page fail-closed messages always render, and locks every input while a real BFF plan request is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaInputVideoSupportWorkspace.tsx apps/oshun/web/src/app/studio/aja/input-video-support/page.tsx apps/oshun/web/src/components/__tests__/StudioAjaInputVideoSupportWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaInputVideoSupportWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaInputVideoSupportPage.test.tsx apps/oshun/web/e2e/studio-aja-input-video-support.spec.ts — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaInputVideoSupportWorkspace.tsx apps/oshun/web/src/app/studio/aja/input-video-support/page.tsx apps/oshun/web/e2e/studio-aja-input-video-support.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaInputVideoSupportWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaInputVideoSupportWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaInputVideoSupportPage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaInputVideoSupportWorkspace.test.tsx src/components/__tests__/StudioAjaInputVideoSupportWorkspace.integration.test.tsx src/components/__tests__/StudioAjaInputVideoSupportPage.test.tsx — 3 files, 9 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-input-video-support-route.test.ts — 1 file, 5 tests passed.
  • Resource gates before Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright rerun, available memory stayed at or above 8.5 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-input-video-support.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

283. 2026-07-04 Studio Aja Mobile Live Capture real-BFF coverage#

Closed the /studio/aja/mobile-live-capture walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the adaptive-bitrate JSON editor, selector result table, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-aja-mobile-live-capture.spec.ts suite opens the real Next Studio shell, seeds Aja-admin or non-admin browser sessions, sends /v1/admin/aja/mobile-live-capture catalog requests and /v1/admin/aja/mobile-live-capture/select POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the ABR contract.

The suite verifies anonymous redirect, Aja-admin catalog load, bearer propagation, route-map and quick-action affordances, seeded default ladder selection r720 at 3200 usable kbps, low-bandwidth floor selection lo, per-rung selected / sustainable table state through the real BFF, client-only malformed JSON and non-object rejection with no POST, BFF duplicate-rung detail surfacing, malformed success-payload fail-closed behavior, select transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px/no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and result guards strict: the client now requires the catalog selector adaptive_bitrate, rejects array/non-object payload JSON before POST, marks loading/result/error states with live-region or alert roles, exposes stable result and route-map attributes, adds table header semantics, and locks the editor while a real BFF selection is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAjaMobileLiveCaptureWorkspace.tsx apps/oshun/web/src/app/studio/aja/mobile-live-capture/page.tsx apps/oshun/web/src/components/__tests__/StudioAjaMobileLiveCaptureWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMobileLiveCaptureWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMobileLiveCapturePage.test.tsx apps/oshun/web/e2e/studio-aja-mobile-live-capture.spec.ts — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAjaMobileLiveCaptureWorkspace.tsx apps/oshun/web/src/app/studio/aja/mobile-live-capture/page.tsx apps/oshun/web/e2e/studio-aja-mobile-live-capture.spec.ts apps/oshun/web/src/components/__tests__/StudioAjaMobileLiveCaptureWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMobileLiveCaptureWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioAjaMobileLiveCapturePage.test.tsx --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAjaMobileLiveCaptureWorkspace.test.tsx src/components/__tests__/StudioAjaMobileLiveCaptureWorkspace.integration.test.tsx src/components/__tests__/StudioAjaMobileLiveCapturePage.test.tsx — 3 files, 9 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-aja-mobile-live-capture-route.test.ts — 1 file, 5 tests passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 8.4 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web exec tsc --noEmit — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-aja-mobile-live-capture.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

282. 2026-07-04 Studio Hathor Culture Evolution Simulation real-BFF coverage#

Closed the /studio/hathor/culture-evolution-simulation walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the two-culture JSON editors, reference catalog disclosure, compatibility result metrics, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-hathor-culture-evolution-simulation.spec.ts suite opens the real Next Studio shell, seeds Hathor-admin or non-admin browser sessions, sends /v1/admin/hathor/culture-evolution-simulation catalog requests and /v1/admin/hathor/culture-evolution-simulation/assess POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the workspace contract.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact social structure / attitude catalog rendering inside the reference disclosure, bearer propagation, route-map and quick-action affordances, seeded default pair compatibility: 70, edited hostile / hierarchical pair compatibility: -20, dominant-value / social-mobility / inequality metrics through the real BFF, client-only malformed JSON and non-object rejection with no POST, BFF unknown-social-structure detail surfacing, malformed success-payload fail-closed behavior, assess transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement for both editors, mobile 44px/no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and assessment guards strict: the client now requires every expected social structure and attitude enum, rejects array/non-object culture JSON before POST, marks loading/result/error states with live-region or alert roles, exposes stable catalog/result metric attributes, uses a mobile-safe editor grid, and locks both editors while a real BFF assessment is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorCultureEvolutionSimulationWorkspace.tsx apps/oshun/web/src/app/studio/hathor/culture-evolution-simulation/page.tsx apps/oshun/web/src/components/__tests__/StudioHathorCultureEvolutionSimulationWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorCultureEvolutionSimulationWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorCultureEvolutionSimulationPage.test.tsx apps/oshun/web/e2e/studio-hathor-culture-evolution-simulation.spec.ts — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorCultureEvolutionSimulationWorkspace.tsx apps/oshun/web/src/app/studio/hathor/culture-evolution-simulation/page.tsx apps/oshun/web/e2e/studio-hathor-culture-evolution-simulation.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorCultureEvolutionSimulationWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorCultureEvolutionSimulationWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorCultureEvolutionSimulationPage.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorCultureEvolutionSimulationRouteMap.test.ts --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorCultureEvolutionSimulationWorkspace.test.tsx src/components/__tests__/StudioHathorCultureEvolutionSimulationWorkspace.integration.test.tsx src/components/__tests__/StudioHathorCultureEvolutionSimulationPage.test.tsx src/components/__tests__/StudioHathorCultureEvolutionSimulationRouteMap.test.ts — 4 files, 12 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-culture-evolution-simulation-route.test.ts — 1 file, 6 tests passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 7.9 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web run typecheck — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-culture-evolution-simulation.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

281. 2026-07-04 Studio Hathor Scenario Generation real-BFF coverage#

Closed the /studio/hathor/scenario-generation walkthrough gap where the page had runtime-sweep evidence but no focused real-dev-infra coverage for the Hathor scenario-dependency catalog, packet textarea, validation result states, route map, quick actions, pending submit behavior, or fail-closed error paths.

The new apps/oshun/web/e2e/studio-hathor-scenario-generation.spec.ts suite opens the real Next Studio shell, seeds Hathor-admin or non-admin browser sessions, sends /v1/admin/hathor/scenario-generation catalog requests and /v1/admin/hathor/scenario-generation/validate POSTs to the real local BFF with browser bearer auth, and captures request headers and bodies rather than mocking the workspace contract.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact issue-type / severity catalog rendering, bearer propagation, route-map and quick-action affordances, seeded missing-scene-dependency, edited clean, missing-objective, warning-only missing-capture-requirement, and missing-cgi-export validations through the real BFF, client-only malformed JSON and non-object rejection with no POST, BFF malformed-scene detail surfacing, malformed success-payload fail-closed behavior, validate transport failure, catalog loading / 503 / malformed states, non-admin fail-closed behavior, pending submit disablement, mobile 44px/no-overflow controls, scoped axe scans, and direct BFF auth/schema gates.

Implementation hardening in the workspace made the catalog and validation guards strict: the client now requires all expected issue types and severities, rejects array packets as non-object JSON before POST, marks loading/result/error states with live-region or alert roles, exposes stable catalog/result attributes, and locks the form while a real BFF validation is pending.

Verification, all green:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorScenarioGenerationWorkspace.tsx apps/oshun/web/src/app/studio/hathor/scenario-generation/page.tsx apps/oshun/web/src/components/__tests__/StudioHathorScenarioGenerationWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorScenarioGenerationWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorScenarioGenerationPage.test.tsx apps/oshun/web/e2e/studio-hathor-scenario-generation.spec.ts — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorScenarioGenerationWorkspace.tsx apps/oshun/web/src/app/studio/hathor/scenario-generation/page.tsx apps/oshun/web/e2e/studio-hathor-scenario-generation.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorScenarioGenerationWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorScenarioGenerationWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorScenarioGenerationPage.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorScenarioGenerationRouteMap.test.ts --max-warnings=0 — passed with the existing Next pages-directory notice.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorScenarioGenerationWorkspace.test.tsx src/components/__tests__/StudioHathorScenarioGenerationWorkspace.integration.test.tsx src/components/__tests__/StudioHathorScenarioGenerationPage.test.tsx src/components/__tests__/StudioHathorScenarioGenerationRouteMap.test.ts — 4 files, 12 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-scenario-generation-route.test.ts — 1 file, 7 tests passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 29 GiB free swap, 48 GiB free disk, and no competing broad verification process; during the supervised Playwright run, available memory stayed at or above 8.2 GiB with 29 GiB free swap.
  • pnpm --dir apps/oshun/web run typecheck — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-scenario-generation.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 11 passed.

Executing the apps/oshun/web/e2e suite against a live stack (docker dev infra → BFF on :4010next start prod web on :3010), not source-reading, surfaced one systemic, suite-wide defect and a residual flaky tail. Both are recorded honestly here — the suite is not uniformly green at full workers=2 concurrency, and this document says so rather than claiming otherwise.

1. Systemic defect found + fixed — auth abuse-protection 429 cascade#

Symptom. Under a parallel suite run, a large cluster of specs (every home-*, shell-*, continuity, keyboard-a11y spec that authenticates with the bare seedCustomerSession helper) failed with the signed-out marketing home ("Welcome to OSHUN") instead of the authenticated HomeWorkspace dashboard — e.g. [data-kpi-tile] not found.

Root cause. The BFF auth abuse-protection limiter (apps/oshun/bff/src/middleware/abuse-protection.ts) defaults to 60 requests / 60s with a 5-minute sticky block, keyed by request.authContext?.userId ?? request.ip. All Playwright traffic shares one host IP (127.0.0.1), so the suite's /api/auth/session/v1/auth/refresh calls (one per page load on every bare-seeded spec) trip the limit almost immediately. /api/auth/session then returns 429, the shell renders signed-out, and every dependent assertion fails. The 5-minute block turns a transient into a multi-minute cascade (a single rate-limited run took 26+ min on timeouts alone). Specs that use primeAuthenticatedShellPage (which mocks /api/auth/session) were immune — which is why the failure looked selective.

Fix (shipped).

  • apps/oshun/bff/src/server.ts now reads OSHUN_BFF_AUTH_RATELIMIT_MAX / _WINDOW_MS / _BLOCK_MS and passes an authAbuseProtectionPolicy to createApp. Unset ⇒ production behaviour is unchanged (the 60/min default still applies); only a trusted high-concurrency caller raises the ceiling.
  • apps/oshun/web/playwright.config.ts sets those env vars on the BFF webServer so the canonical suite (and CI) boots the BFF with a test-only ceiling, exercising the real /v1/auth/* endpoints (no auth mocking).

Impact (measured). Before: dozens of bare-seeded specs failed on the signed-out home. After: in a re-run of the formerly-broken home-* + shell set, 0 anonymous-home failures; the auth cascade is gone. This is the change that makes "e2e against real dev infra at concurrency" possible at all.

2. New page-DOM specs (this pass) — verified green#

Four routes that had no page-DOM spec now have deep specs, each run green against the live stack (19/19 at workers=2, and stable on a warm-state re-run):

Spec Route Notes
operator-personas-console.spec.ts /operator/personas roster auto-select / empty / real browser submit-for-review success + audit repaint / approve-for-release reveal / 409 inline error. Drives the real BFF persona lifecycle; idempotent-resume survives warm state.
operator-lms.spec.ts /operator/lms seeded real-BFF roster + invalid panel / wrong-scope empty state / malformed-JSON client reject (no POST) / BFF-backed 400, invalid, and valid descriptor results / 503 failure copy.
personas-picker.spec.ts /personas BFF-401 in-app sign-in gate / family+blockers browse / select-sets-active / clear.
notifications-route.spec.ts /notifications control strip / lane filter+reset / 500 outage disclosure / support→/profile / optimistic-404 swallowed.

Root-cause patterns these specs had to solve (reusable for the tail below)#

  1. SSR↔client shell double-mount. A fresh context's first navigation briefly renders two copies of the route (one detaching), so route-scoped locators resolve to 2 (strict-mode) or 0 (pre-hydration). Fix: settle to one [data-shell-root] (openAuthenticatedShellPath/waitForShellSettled) — or, for non-shell RSC pages, toHaveCount(1) on the page's root component — before asserting.
  2. Service worker bypasses page.route. The PWA SW intercepts client fetches, which Playwright page.route does not intercept by default, so boundary feed mocks were silently bypassed (panel fell to its unavailable branch, flaky on whether the SW had activated). Fix: test.use({ serviceWorkers: 'block' }) on suites that mock app data fetches.
  3. Process-durable BFF state + session-refresh cookie overwrite. The in-memory BFF persona store persists across a run; and a reload's session refresh can overwrite a scoped oshun-access cookie. Fix: idempotent-resume drive chains + re-seed the scoped cookie before a post-mutation reload.

3. Residual flaky tail (pre-existing, NOT introduced here)#

After the rate-limit fix, a full workers=2 run still has a substantial flaky tail — the same double-mount / SW / a11y-gate-timing classes above, spread across the older specs that predate these patterns. Honest numbers from this session:

  • Formerly-auth-broken home-*/shell sample (53 tests): 43 passed · 4 flaky (pass on retries:1) · 6 failed — the 6 are toBeVisible/double-mount timing, not auth.
  • Full-suite artifact characterization (unique tests producing a first-attempt artifact): a11y/axe-gate ≈ 49, 60s-timeout ≈ 47, element-not-found/visible ≈ 256, anonymous-home ≈ 4 (down from dozens). Many are flaky (pass on retry); the artifact count over-counts true post-retry failures.

Scope note. Fixing this tail means applying patterns (1)–(3) across ~200 older specs (and triaging the a11y-gate failures, which are deterministic, not flake). That is a real, worthwhile quality effort but is separate from V1 walkthrough/route-coverage completeness and was not attempted wholesale here — documenting it (vs. silently green-washing) is the correct move. Recommended order: (a) land patterns (1)–(3) in the shared e2e/support helpers and migrate the bare-seedCustomerSession home/shell specs; (b) triage the ~49 a11y-gate failures against the prod build; (c) raise per-test timeout only where a real slow path is proven.

4. Service worker — a real source fix (not a test band-aid)#

The full-suite discovery (254 first-attempt failures at retries=0, after the rate-limit fix) split into: ~50 visual-regression (macOS baselines on a Linux runner — platform-gated, not flake), and the rest dominated by two classes — service-worker mock-shadowing and shell double-mount.

The tempting test-side fix (a global serviceWorkers: 'block') was rejected as a band-aid: it masks a real user-facing behaviour and drops real-infra fidelity. The correct fix was in public/sw.js (commit dc8c8f3): the SW did stale-while-revalidate on all authenticated /v1/* + /api/* GETs, which (a) cached authenticated API by URL — a cross-session member-data-leak surface (the OSHUN_CLEAR_MEMBER_DATA purge existed only to paper over it), and (b) shadowed the page's own network with an internal fetch() (≤30s-stale live reads; any page-level request observation silently bypassed). Now general BFF/API reads are network-only pass-through; the deliberate Nisaba offline allowlist (24h) + auth-network-only + same-origin asset/shell/media caching are kept. Validated against the real SW: notifications-route 5/5 green with serviceWorkers:'block' removed; PWA/offline 38/39 (the 1 is a pre-existing double-mount flake); the pwa-service-worker-policy unit test rewritten to the new contract + made version-agnostic, 9/9.

5. Shell double-mount — inherent to a correct pattern (test-side settle is right)#

The other dominant class is the brief SSR↔client double [data-shell-root]. Root cause: ShellLayout.tsx deliberately renders a minimal shell-root during SSR/first-paint (!mounted branch, line ~1721) and swaps to the full shell after setMounted(true) in a mount effect (line ~1846). This two-pass render is the standard, correct way to avoid a hydration mismatch for a client-only layout (viewport/mobile/assistant-dock are genuinely client-only) — the comment at line 1719 says as much. So this is not an app bug to fix; the transient resolves to one root in <1s.

The correct handling in tests is to settle before assertingopenAuthenticatedShellPath / waitForShellSettled (which the 74 well-written specs already call). This is correct test hygiene (assert on steady state), not masking. The fix for the ~126 bare-seedCustomerSession + page.goto specs is to adopt that settle; it is a mechanical per-spec migration (no shared chokepoint, because navigation happens inside each test).

6. What is solid (verified green this session)#

  • Two structural fixes, both verified against the live stack and committed: the BFF auth rate-limit (§1) and the service-worker pass-through (§4).
  • The 4 new specs (§2) — 19/19; first-tara-sit-deepening stale-theme fix.
  • The 8 newly-documented routes + the journey-grade de-fabrication (see v1-completeness-audit-2026-06-22.md).

7. Honest remaining tail (per-spec, not structural)#

After the two structural fixes, the residual is per-spec work, no longer one root cause: (a) the ~126 bare-seed specs' settle migration (§5); (b) ~58 axe/a11y gate failures to triage real-violation vs settle-timing (real ones are the gate doing its job — fix the component, never skipAxe them away); (c) ~50 visual-regression specs needing Linux baselines committed by a human-reviewed run (generating them unreviewed would be fabrication). These are scoped, not blocked — but they are genuinely ~150 individual diagnoses, not a single switch.

8. 2026-06-23 Nyx observation-log persistence addendum#

Closed the nyx-tonight-observation Step 9 product gap without over-claiming a server contract: event detail now links to /domains/nyx/observation-log?eventId=...; New Entry writes a normalized observation to useNyxStore / localStorage["oshun.nyx"]; History renders the saved row with data-nyx-observation-event-id.

Verification, all green:

  • pnpm --dir apps/oshun/web exec vitest run src/components/domains/nyx/NyxObservationLog.test.tsx src/components/domains/nyx/__tests__/NyxEventDetailWorkspace.test.tsx — 6 passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/web lint — 0 errors, existing warnings only.
  • pnpm --dir apps/oshun/web exec playwright test e2e/nyx-tonight-observation.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 6 passed.
  • pnpm --dir apps/oshun/web exec playwright test e2e/nyx-event-pages.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 13 passed.
  • python3 V5/tools/validate-v5-docs.py — passed.

9. 2026-06-23 Arete habit-wizard persistence addendum#

Closed the arete-create-habit wizard no-op gap without over-claiming server sync: /domains/arete/habits?wizard=loop now opens the HabitLoopWizard, Cue→Routine→Reward creates a HabitData row, writes it to useAreteStore / localStorage["oshun.arete"], and returns to the dashboard with the new habit visible. At the time of this addendum, browser wizard→BFF sync, polished /arete read-back, and first-check-in/streak/home-rail continuity remained open; later 2026-06-23 addenda supersede those gaps.

Verification, all green:

  • pnpm --dir apps/oshun/web exec prettier --check src/components/domains/arete/AreteHabitSystem.tsx src/app/domains/arete/habits/page.tsx e2e/arete-create-habit.spec.ts ../../../WALKTHROUGH/journeys/arete-create-habit.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/web lint — 0 errors, existing warnings only.
  • pnpm --dir apps/oshun/web exec playwright test e2e/arete-create-habit.spec.ts e2e/arete-habits-bff.spec.ts e2e/arete-full-journey.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 12 passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.

10. 2026-06-23 Themis teacher-override addendum#

Closed the themis-assessment-appeal teacher-override HTTP gap without over-claiming the operator UI: POST /v1/metis/integrity now accepts the canonical teacherOverride block, repeat adjudication with a changed teacher verdict marks the verdict overturned, and the real-BFF Playwright request coverage asserts the downgrade to inconclusive, decision.decidedBy, recommendedAction, audit rationale read-back, appeal resolution, and blank-rationale fail-closed behavior. Customer submit→detection→adjudication, /operator/metis review UI, gradebook read-back, and /messages notification remain open.

Verification:

  • pnpm exec vitest run libs/metis/integrations/src/themis-canonical-wiring.test.ts — 9 passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/metis-integrity-route.test.ts — 6 passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/bff exec eslint src/routes/metis-integrity.ts src/__tests__/metis-integrity-route.test.ts — 0 errors; existing route non-null warnings + ignored test-file warning.
  • pnpm exec eslint libs/metis/integrations/src/themis-canonical-wiring.ts libs/metis/integrations/src/themis-canonical-wiring.test.ts — 0 errors; ignored test-file warning.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/web lint — passed with existing warnings.
  • pnpm --dir apps/oshun/web exec playwright test e2e/integrity-appeal.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 8 passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • pnpm --dir apps/oshun/web exec prettier --check ../../../apps/oshun/bff/src/routes/metis-integrity.ts ../../../apps/oshun/bff/src/__tests__/metis-integrity-route.test.ts ../../../libs/metis/integrations/src/themis-canonical-wiring.ts ../../../libs/metis/integrations/src/themis-canonical-wiring.test.ts e2e/integrity-appeal.spec.ts ../../../WALKTHROUGH/journeys/themis-assessment-appeal.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md ../../../WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • git diff --check — passed.

Broader checks currently blocked by pre-existing unrelated repo issues:

  • pnpm --dir apps/oshun/bff lint fails outside this slice with existing broad module-boundary / duplicate-import / unused-assignment errors across Aja, Yemaya, admin, takedown, Sophia, and Themis moderation files (255 errors, 178 warnings in this run).
  • pnpm exec tsc -p libs/metis/integrations/tsconfig.lib.json --noEmit and pnpm exec tsc -p libs/metis/integrations/tsconfig.spec.json --noEmit both fail in existing upstream Isis provenance files: libs/isis/ai-providers/src/provenance/bundle.ts:305:28 and libs/isis/ai-providers/src/provenance/generation-job.ts:267:7.

11. 2026-06-23 Message quiet-hours dispatch addendum#

Closed the messages-quiet-hours-and-channel-binding dispatcher-ignore gap for the shipped message-center producer path without over-claiming external-provider delivery: POST /v1/admin/customer-messages/dispatch now reads the recipient's quiet-hours preferences, returns 202 dispatch.delayed.quiet_hours for non-essential sends inside the window without writing an inbox row, returns 201 dispatch.bypassed.safety_critical for critical/support/incident sends that must bypass quiet hours, and /v1/admin/customer-messages/replay-due delivers queued rows after the quiet window closes with queued → sent → delivered receipts. Real Telegram/WhatsApp/email/SMS provider handoff remains open beyond that message-center receipt seam.

Verification, all green:

  • Resource gate before Playwright: 15 GiB RAM, 12 GiB available, 31 GiB swap, 48 GiB free disk; no competing broad verification process.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/customer-message-center-route.test.ts — 13 passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/web exec playwright test e2e/messages-center-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 12 passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • pnpm exec prettier --check apps/oshun/bff/src/routes/customer-message-center.ts apps/oshun/bff/src/__tests__/customer-message-center-route.test.ts apps/oshun/web/e2e/messages-center-bff.spec.ts WALKTHROUGH/journeys/messages-quiet-hours-and-channel-binding.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • git diff --check — passed.

12. 2026-06-23 Mailpit email-verification addendum#

Closed the first-time-anonymous-visitor real email-delivery gap for the shipped dev stack: the Playwright-managed BFF now boots with Mailpit SMTP env, and email-verify-mailpit.spec.ts signs up through /welcome, asserts the browser receives HttpOnly oshun-session and oshun-access cookies, polls the Mailpit API on :8025 for the actual recipient email, opens the delivered /auth/verify-email?token=... link, confirms the real public BFF token, and refreshes /api/auth/session to prove verified: true. The existing email-verify-roundtrip.spec.ts was made transport-aware so it remains valid whether signup returns a non-prod preview token or SMTP delivery hides the token inside Mailpit. At the time of this addendum, verify-link ?next= preservation and automatic post-verify redirect into onboarding remained open; see §14 for the later same-browser closure.

Verification, all green:

  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; no competing broad verification process. The stale workspace BFF watch process was stopped so Playwright could boot the BFF with SMTP env.
  • pnpm --dir apps/oshun/web exec playwright test e2e/email-verify-mailpit.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 1 passed.
  • pnpm --dir apps/oshun/web exec playwright test e2e/email-verify-roundtrip.spec.ts e2e/email-verify-mailpit.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 3 passed.
  • pnpm --dir apps/oshun/web exec playwright test e2e/email-verify-roundtrip.spec.ts e2e/email-verify-mailpit.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 3 passed after formatting.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • pnpm exec prettier --check apps/oshun/web/playwright.config.ts apps/oshun/web/e2e/email-verify-mailpit.spec.ts apps/oshun/web/e2e/email-verify-roundtrip.spec.ts WALKTHROUGH/journeys/first-time-anonymous-visitor.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • git diff --check — passed.

13. 2026-06-23 Account-deletion Redis fan-out receipt addendum#

Closed the account-deletion-and-dsar signed-receipt-from-real-data gap for the BFF-owned voice_profile erasure path. The Playwright-managed BFF now boots with the local Redis deletion-fan-out env, data-rights-dsar-bff.spec.ts creates an immediate voice category deletion over real HTTP, and the BFF completes it through the voice_profile consumer with a persisted dev-key Ed25519 tombstone attestation. profile-customer-data-deletion.spec.ts then drives the browser UI through the same immediate voice deletion flow and asserts the live BFF response renders the signed receipt row instead of a page.route fixture.

The remaining deletion gaps are still real: full Tara/Arete/Veritas/Nyx/Nisaba/ Metis six-service fan-out with service-specific @oshun/audit-platform attestations, local generated_artifact/Isis completion, and the deletion identity-verification email-link round-trip. The generated_artifact path was tried during discovery and failed closed in the local dev stack, so this addendum does not claim that service as covered.

Verification, all green:

  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; Redis and Mailpit containers up; no stale BFF/web server.
  • pnpm --dir apps/oshun/web exec playwright test e2e/data-rights-dsar-bff.spec.ts e2e/profile-customer-data-deletion.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list --grep "voice-profile deletion" — 2 passed.
  • pnpm --dir apps/oshun/web exec playwright test e2e/data-rights-dsar-bff.spec.ts e2e/profile-customer-data-deletion.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 18 passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • pnpm exec prettier --check apps/oshun/web/playwright.config.ts apps/oshun/web/e2e/data-rights-dsar-bff.spec.ts apps/oshun/web/e2e/profile-customer-data-deletion.spec.ts WALKTHROUGH/journeys/account-deletion-and-dsar.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • git diff --check — passed.

14. 2026-06-23 Email verification next-path handoff addendum#

Closed the same-browser first-time-anonymous-visitor verify-link handoff gap: WelcomeAuthPanel now sends the sanitized signup redirect as verificationNextPath, the BFF email sender preserves it as /auth/verify-email?token=...&next=/tara only when it is an app-relative safe path, and the verify-email landing auto-hands a successfully verified, already-signed-in browser into /onboarding?redirect=/tara without requiring the manual Continue link. The Mailpit E2E asserts the delivered email link from real SMTP contains next=/tara, opens that actual link, and proves the browser lands in onboarding with the redirect preserved.

At the time of this addendum, this did not claim the different-device branch was done: the public confirm endpoint still verified the token without minting a fresh browser session from the email link alone. That limitation was later closed in §35.

Verification, all green:

  • pnpm --dir apps/oshun/bff exec vitest run src/auth/verification-email-sender.test.ts src/auth/customer-auth-email-verify.test.ts — 26 passed.
  • pnpm --dir apps/oshun/web exec vitest run src/components/auth/VerifyEmailConfirm.test.tsx src/components/welcome/__tests__/WelcomeAuthPanel.test.tsx — 18 passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; Redis and Mailpit containers up; no stale BFF/web server.
  • pnpm --dir apps/oshun/web exec playwright test e2e/email-verify-mailpit.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 1 passed.
  • pnpm --dir apps/oshun/web exec playwright test e2e/email-verify-roundtrip.spec.ts e2e/email-verify-mailpit.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 3 passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • pnpm exec prettier --check apps/oshun/bff/src/auth/verification-email-sender.ts apps/oshun/bff/src/auth/verification-email-sender.test.ts apps/oshun/bff/src/auth/customer-auth-store.ts apps/oshun/bff/src/auth/customer-auth-email-verify.test.ts apps/oshun/bff/src/routes/auth.ts apps/oshun/web/src/lib/auth-context.tsx apps/oshun/web/src/components/welcome/WelcomeAuthPanel.tsx apps/oshun/web/src/components/welcome/__tests__/WelcomeAuthPanel.test.tsx apps/oshun/web/src/app/auth/verify-email/page.tsx apps/oshun/web/src/components/auth/VerifyEmailConfirm.tsx apps/oshun/web/src/components/auth/VerifyEmailConfirm.test.tsx apps/oshun/web/e2e/email-verify-mailpit.spec.ts WALKTHROUGH/journeys/first-time-anonymous-visitor.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • git diff --check — passed.

15. 2026-06-23 Notifications route write-persistence addendum#

Closed the /notifications write-contract mismatch for the full-page notifications route. The BFF now accepts the browser-facing PATCH /v1/notifications-write and /notifications-write actions for mark_read, mark_unread, dismiss, and mark_all_read, while keeping the legacy POST mark-read aliases. The notification read-state store now records explicit read/unread/dismissed states, the feed projection hides dismissed notifications, and default-read highlights can be made unread. The web panel now sends concrete notificationIds for mark-all-read, and the shared Playwright auth helper exposes the real seeded BFF access token through the mocked session so client-side BFF reads/writes exercise real auth.

notifications-route.spec.ts now covers the full-page route directly with the existing boundary-rendering cases plus a live BFF toggle persistence case: it marks a real default-read notification unread, reopens /notifications and asserts the unread state is returned by a fresh BFF read, then marks the same card read and verifies the second reload.

Verification:

  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/notification-read-state-store.test.ts src/__tests__/notifications-write-route.test.ts — 14 passed.
  • pnpm --dir apps/oshun/bff run typecheck — passed.
  • pnpm --dir apps/oshun/web run typecheck — passed.
  • pnpm --dir apps/oshun/web exec playwright test e2e/notifications-route.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 6 passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; Redis/Mailpit containers up; no stale BFF/web server.
  • pnpm --dir apps/oshun/web run lint — passed with existing warnings.
  • pnpm --dir apps/oshun/bff exec eslint src/notifications/read-state-store.ts src/routes/notifications-write.ts src/routes/notifications.ts — passed. The changed BFF test files are ignored by the current ESLint config.

Known unrelated verification caveat:

  • pnpm --dir apps/oshun/bff run lint was attempted and still fails on pre-existing module-boundary, duplicate-import, unused-assignment, and related errors across untouched BFF files such as src/accessibility/*, src/aja/*, src/routes/admin-*, and src/yemaya/*.

16. 2026-06-23 Neith inverse-modeling fit-quality addendum#

Closed the Neith inverse-modeling walkthrough drift for the current JSON-payload Goodness-of-Fit lane. The workspace now waits for AuthProvider hydration before loading its catalog, so direct navigation does not race the admin bearer token. studio-neith-inverse-modeling.spec.ts covers the page-DOM contract against the live BFF: admin direct navigation, real catalog load, default-payload evaluate success (RMSE/MAE/R², worst sample, residual table), non-admin fail-closed, malformed JSON with zero evaluate POSTs, live BFF invalid-payload detail, route-map entries, and Isis quick links.

Verification:

  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioNeithInverseModelingWorkspace.test.tsx src/components/__tests__/StudioNeithInverseModelingWorkspace.integration.test.tsx src/components/__tests__/StudioNeithInverseModelingPage.test.tsx — 7 passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-studio-fit-quality-route.test.ts — 6 passed.
  • pnpm --dir apps/oshun/web run typecheck — passed after replacing a corrupted generated .next/dev/types/routes.d.ts cache file with the valid generated .next/types/routes.d.ts copy; no tracked source change was needed.
  • Targeted ESLint on the changed component passed; the changed test/E2E files are ignored by the current ESLint config and reported warnings only.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; no active broad build/test servers. During the run, available memory stayed above 8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test e2e/studio-neith-inverse-modeling.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 4 passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • pnpm exec prettier --check apps/oshun/web/src/components/studio/StudioNeithInverseModelingWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingPage.test.tsx apps/oshun/web/e2e/studio-neith-inverse-modeling.spec.ts WALKTHROUGH/studio/domain-bridges/neith/studio-neith-inverse-modeling.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • git diff --check — passed.

17. 2026-06-23 Arete wired-action reconciliation addendum#

Closed stale Arete walkthrough/spec-header drift that still described shipped action islands as unwired. The living-offering create walkthrough now documents AreteOfferingActions POSTing /v1/arete/offerings/keep for both draft and send actions, including the draft-kept and delivered UI states and the GET /v1/arete/offerings/sent read-back already covered by Playwright. The weekly-review walkthrough now documents AreteReviewClose POSTing /v1/arete/review/close for private-save and close actions, including kept-private, week-closed, and /v1/arete/review/closed persistence.

The residual gaps are now narrower and explicit: living-offering draft gallery read-back and policy/expiry semantics remain open, while weekly-review continuity-card read-back on /arete, per-act completion, crisis supersedence, and Sunday push remain unasserted. The render spec headers now point to the separate live-action specs instead of saying the footer buttons have no click handlers.

Verification:

  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; Redis/Mailpit/MinIO/Postgres containers up; no active broad build/test servers. During the focused run, available memory stayed above 9 GiB.
  • pnpm --dir apps/oshun/web exec eslint e2e/arete-living-offering-create.spec.ts e2e/arete-weekly-review.spec.ts --no-warn-ignored — passed.
  • pnpm --dir apps/oshun/web exec playwright test e2e/arete-living-offering-create.spec.ts e2e/arete-offering-actions.spec.ts e2e/arete-weekly-review.spec.ts e2e/arete-review-close.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 22 passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • pnpm exec prettier --check WALKTHROUGH/journeys/arete-living-offering-create.md WALKTHROUGH/journeys/weekly-review-arete.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md apps/oshun/web/e2e/arete-living-offering-create.spec.ts apps/oshun/web/e2e/arete-weekly-review.spec.ts — passed.
  • git diff --check — passed.

18. 2026-06-23 Personas picker live-BFF page-DOM addendum#

Closed the /personas page-DOM gap that was still relying on a route-stubbed UI spec for blocker visibility. PersonaPicker now renders the BFF's real top-level blocked[] cards by family, instead of only rendering browse.byFamily[] eligible cards. This makes the pre-consent voice/avatar gate visible in the browser when the live BFF returns an honest blocked roster.

personas-picker.spec.ts now includes a live browser→BFF test: a fresh customer loads /personas before consent and sees real blocked cards, the test grants real voice consent through /v1/consent/voice/grant, reloads the page, selects a real default-surface persona through browser POST /v1/personas/select, asserts /v1/personas/active read-back and reload persistence, clears through browser DELETE /v1/personas/active, then verifies the BFF active read-back is null. The existing deterministic route-stubbed tests remain for hard-to-induce UI branches (BFF 401 and select 500), and persona-session-picker.spec.ts continues to guard the pure BFF round-trip.

Verification:

  • pnpm --dir apps/oshun/web exec vitest run src/components/personas/PersonaPicker.test.tsx src/personas/personasClient.test.ts — 11 passed.
  • pnpm --dir apps/oshun/web exec eslint src/components/personas/PersonaPicker.tsx src/components/personas/PersonaPicker.test.tsx e2e/personas-picker.spec.ts --no-warn-ignored — passed.
  • pnpm --dir apps/oshun/web run typecheck — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; Redis/Mailpit/MinIO/Postgres containers up; no active broad build/test servers. During the focused run, available memory stayed above 9 GiB.
  • pnpm --dir apps/oshun/web exec playwright test e2e/personas-picker.spec.ts e2e/persona-session-picker.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 8 passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • pnpm exec prettier --check apps/oshun/web/src/components/personas/PersonaPicker.tsx apps/oshun/web/src/components/personas/PersonaPicker.test.tsx apps/oshun/web/e2e/personas-picker.spec.ts WALKTHROUGH/customer/10-lilith/personas.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • git diff --check — passed.

19. 2026-06-23 Operator personas live transition addendum#

Closed the remaining /operator/personas page-DOM audit drift and deepened the operator console from render/error coverage to a real browser write. The walkthrough now documents operator-personas-console.spec.ts as the page-DOM guard instead of saying no browser E2E exists.

operator-personas-console.spec.ts now hydrates the browser AuthProvider with a persona-admin dev token, while keeping the server-component roster read and client transition writes on the live BFF. The new success leg rewinds persona-sufi-guide to a draft state, reloads the browser console, submits submit-for-review through the actual form, waits for browser POST /v1/admin/personas/:id/lifecycle, asserts the returned in-review status and audit entry, verifies the page repaints from the BFF response, and confirms the BFF read-back is also in-review. The existing 409 branch remains deterministic so the inline error/no-optimistic-mutation failure mode stays pinned.

Verification:

  • pnpm --dir apps/oshun/web exec eslint e2e/operator-personas-console.spec.ts --no-warn-ignored — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; Redis/Mailpit/MinIO/Postgres containers up; no active broad build/test servers. During the focused run, available memory stayed above 8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test e2e/operator-personas-console.spec.ts e2e/persona-lifecycle-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 8 passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • pnpm exec prettier --check apps/oshun/web/e2e/operator-personas-console.spec.ts WALKTHROUGH/operator/operator-personas.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • git diff --check — passed.

20. 2026-06-23 Triage-unblock verification addendum#

Reconciled the dated v1-triage-2026-06-23.md app-bug/product-gap findings against the current checkout and turned the remaining onboarding flake into a deterministic real-infra assertion. The app-side fixes for workspace export keyboardability, shared shell PWA-toast dismissal, bounded hydration waits, home continuation impressions, assistant dock contrast, dynamic test harness routes, and the live /explore V2 tile are all present in source.

onboarding-lifecycle.spec.ts now waits for whichever wizard step is mounted before advancing edit-mode onboarding, instead of probing isVisible() before hydration and potentially skipping the goals step. That keeps the patchProfilePreferences 5xx branch focused on the real product invariant: local onboarding choices stay visible, the remote-sync error surfaces inline, and the user is not navigated away. pwa-service-worker.ts also now exits cleanly when Playwright's service-worker block causes registration to resolve without a registration object; successful registration and waiting-worker notification behavior are unchanged.

Verification:

  • pnpm --dir apps/oshun/web exec eslint e2e/onboarding-lifecycle.spec.ts src/lib/pwa-service-worker.ts --no-warn-ignored — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/lib/pwa-service-worker.test.ts src/components/__tests__/PwaBootstrap.test.tsx src/components/PwaUpdatePrompt.test.tsx — 16 passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; Redis/Mailpit/MinIO/Postgres containers up; no active broad build/test servers. During the focused run, available memory stayed above 8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test e2e/workspace-multi-panel.spec.ts e2e/shared-shell-entry-routes.spec.ts e2e/onboarding-lifecycle.spec.ts e2e/home-continuation-analytics.spec.ts e2e/assistant-continuity-journey.spec.ts e2e/v2-shell-tile.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 20 passed.
  • pnpm --dir apps/oshun/web run typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • pnpm exec prettier --check apps/oshun/web/e2e/onboarding-lifecycle.spec.ts apps/oshun/web/src/lib/pwa-service-worker.ts WALKTHROUGH/results/v1-triage-2026-06-23.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • git diff --check — passed.

21. 2026-06-23 Env-gated triage verification addendum#

Closed the remaining v1-triage-2026-06-23.md env-gated bucket against the current real dev infrastructure. The Playwright config now supplies the required test-server env defaults directly to the BFF and Next web server processes: OSHUN_TELEGRAM_WEBHOOK_SECRET=e2e-webhook-secret, OSHUN_LIVING_SCENES_HEADER_POLICY_OVERRIDES=1, and OSHUN_ENABLE_TEST_HARNESSES=true.

The focused run verified the Telegram webhook, public living-scene viewer, living-scene keep/share card, and assistant grounding-state harness together. This retires the stale "set env var + restart server" action from the dated triage sheet for the standard local Playwright path.

Verification:

  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; Redis/Mailpit/MinIO/Postgres containers up; no active broad build/test servers. During the focused run, available memory stayed above 8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test e2e/telegram-webhook-delivery.spec.ts e2e/scene-viewer-deepening.spec.ts e2e/living-scene-card.spec.ts e2e/assistant-grounding-state.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 29 passed.

22. 2026-06-23 Veritas evidence-trail skip removal addendum#

Closed the dated veritas-evidence-trail step-9 skip hazard for the standard local Playwright stack. The BFF default adapter wiring now allows OSHUN_VERITAS_ADAPTER=mock, and the Playwright config sets that value for the test BFF only. That gives /v1/veritas/briefing/home a deterministic grounded lead without replacing every domain adapter or changing normal development and production defaults.

veritas-evidence-trail.spec.ts now asserts Save→/library every run instead of test.skip-ing when the action row is absent. veritas-full-journey.spec.ts also asserts the seeded hub action row, Save toggle, and Report dialog unconditionally. veritas-route.test.ts guards both the env-selected mock adapter happy path and the existing fail-closed Veritas outage path. Remaining journey gaps stayed honest at this point: browser-level unavailable rendering, static claim underline interactivity, and static source-row drill kept the journey partial. Later addenda close the shared browser no-lead fallback render and the polished /veritas/claim underline/source drill while keeping the browser-induced downstream-503 leg explicit.

Verification:

  • pnpm exec eslint apps/oshun/bff/src/app.ts apps/oshun/bff/src/__tests__/veritas-route.test.ts apps/oshun/web/playwright.config.ts apps/oshun/web/e2e/veritas-evidence-trail.spec.ts apps/oshun/web/e2e/veritas-full-journey.spec.ts --no-warn-ignored — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/veritas-route.test.ts — 8 passed.
  • pnpm --dir apps/oshun/bff run typecheck — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; Redis/Mailpit/MinIO/Postgres containers up; no active broad build/test servers. During the focused run, available memory stayed above 8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test e2e/veritas-evidence-trail.spec.ts e2e/veritas-full-journey.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 17 passed, 0 skipped.

23. 2026-06-23 Citation-drift seeded-ledger addendum#

Closed the dated citation-drift-resolution seeded-ledger skip hazard for the standard local Playwright stack. The Next server now has a harness-only OSHUN_ISIS_PROVENANCE_LEDGER_FIXTURE=clean path, active only when OSHUN_ENABLE_TEST_HARNESSES=true, that builds a deterministic Isis provenance ledger through the same canonical in-memory bundle/ledger helpers the durable Postgres store replays.

citation-drift-resolution.spec.ts now asserts the clean hash-chain verdict, bundle index, 16-field selected-bundle detail, no-bundle detail-empty state, empty-tenant state, unavailable-ledger alert, and broken-ledger verdict without test.skip. The journey remains partial because recheck, re-render, retract, and audit-log chain write paths are not wired on the current page.

Verification:

  • pnpm exec eslint apps/oshun/web/src/lib/server/isis-provenance-loader.ts apps/oshun/web/src/lib/server/isis-provenance-loader.test.ts apps/oshun/web/playwright.config.ts apps/oshun/web/e2e/citation-drift-resolution.spec.ts libs/isis/ai-providers/src/provenance/bundle.ts libs/isis/ai-providers/src/provenance/generation-job.ts --no-warn-ignored — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/lib/server/isis-provenance-loader.test.ts — 5 passed.
  • pnpm --filter @isis/ai-providers exec vitest run src/provenance — 21 passed.
  • pnpm --dir apps/oshun/web run typecheck — passed.
  • pnpm --filter @isis/ai-providers exec tsc -p tsconfig.lib.json --noEmit — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; Redis/Mailpit/MinIO/Postgres containers up; no active broad build/test servers. During the focused run, available memory stayed above 8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test e2e/citation-drift-resolution.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 8 passed, 0 skipped.

24. 2026-06-23 Sophia grounded-answer addendum#

Closed the dated sophia-grounded-answer grounded-WITH-citations BFF gap for the real /v1/sophia/answer branch. sophia-answer-bff.spec.ts now drives the live BFF through the default in-process Nisaba public-domain corpus and asserts groundingState: "grounded", stable search-nisaba-passage-* citation IDs, retrieved claim labels, and claim-to-citation map integrity. The existing no-sources abstention branch remains covered in the same real-BFF spec.

sophia-grounded-answer-page.spec.ts adds the browser leg: the shipped /sophia form submits to the live BFF, then renders the explicit grounding state, corpus witnesses, and retrieved claim rows. The journey remains partial because contradiction loop UI, pin-to-library, synthetic/retracted/cross-tenant failure modes, real /v1/search UI queries, labels beyond the extractive retrieved path, and citation handoff into Nisaba are still open.

Verification:

  • pnpm exec eslint apps/oshun/web/src/app/sophia/SophiaAskForm.tsx apps/oshun/web/e2e/sophia-answer-bff.spec.ts apps/oshun/web/e2e/sophia-grounded-answer-page.spec.ts --no-warn-ignored — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/sophia-grounded-route.test.ts src/routes/sophia-answer-route.test.ts — 8 passed.
  • pnpm --dir apps/oshun/bff run typecheck — passed.
  • pnpm --dir apps/oshun/web run typecheck — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; no active broad build/test servers. During the focused run, available memory stayed above 8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test e2e/sophia-answer-bff.spec.ts e2e/sophia-grounded-answer-page.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 5 passed.

25. 2026-06-23 Veritas no-lead browser addendum#

Partially closed the remaining veritas-evidence-trail browser unavailable rendering gap and fixed the API guard that made the gap visible. The /v1/veritas/briefing/home handler now uses the same Veritas domain-scope guard as the rest of the Veritas API instead of serving home briefings to any authenticated token. veritas-route.test.ts now asserts a wrong-scope domain:tara token gets 403 domain_scope_missing before any Veritas adapter read runs.

veritas-full-journey.spec.ts adds the browser leg: it first proves the live BFF returns that 403 for a signed-in token without domain:veritas, then loads /veritas with the same restricted access cookie and asserts the honest no-lead UI, Evidence · 0 claims, method note, and absence of Save/Report actions. The source-row drill and polished claim-underline interaction called out here were closed in later addenda; the browser-induced downstream-503 leg is closed in addendum 29 below.

Verification:

  • pnpm exec eslint apps/oshun/bff/src/routes/veritas.ts apps/oshun/bff/src/__tests__/veritas-route.test.ts apps/oshun/web/e2e/veritas-full-journey.spec.ts --no-warn-ignored — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/veritas-route.test.ts — 9 passed.
  • pnpm --dir apps/oshun/bff run typecheck — passed.
  • pnpm --dir apps/oshun/web run typecheck — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; no active broad build/test servers. During the focused run, available memory stayed above 8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test e2e/veritas-full-journey.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 5 passed.

26. 2026-06-23 Veritas claim-rail and source-drill addendum#

Closed the polished /veritas/claim interaction gap from veritas-evidence-trail. The static claim-mode board now delegates to the client VeritasClaimInteractive component: underlined claims are focusable buttons, hover/focus/click updates data-veritas-selected-claim, the all-claims table updates the same rail, and selected source rows are anchors with data-veritas-selected-source-row / data-veritas-source-name / data-veritas-source-band hooks.

veritas-evidence-trail.spec.ts adds the browser leg: it opens /veritas/claim, asserts the initial peak-claim rail, clicks the low-confidence rolling-cuts underline and verifies the rail changes to sup=5, clicks the claims table back to sup=1, then follows the selected Statnett source row to /veritas/source and asserts the source profile. The next source-id addendum deepens this leg to /veritas/source/[sourceId]; addendum 29 below closes the browser-induced downstream-503 render.

Verification:

  • pnpm exec eslint apps/oshun/web/src/components/lilith/veritas.tsx apps/oshun/web/src/components/lilith/VeritasClaimInteractive.tsx apps/oshun/web/src/lib/lilith-data/types.ts apps/oshun/web/src/lib/lilith-data/veritas-depth.ts apps/oshun/web/e2e/veritas-evidence-trail.spec.ts --no-warn-ignored — passed.
  • pnpm --dir apps/oshun/web run typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk; no active broad build/test servers. During the focused run, available memory stayed above 7.7 GiB.
  • pnpm --dir apps/oshun/web exec playwright test e2e/veritas-evidence-trail.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 14 passed.

27. 2026-06-23 Arete first-check-in real-BFF addendum#

Closed the same-browser first-check-in continuity gap for arete-create-habit. Wizard-created habits now keep the returned habit-proposed-* BFF id in useAreteStore, and the dashboard check-in toggle for those persisted habits POSTs /v1/arete/habits/:habitId/check-in with a real CSRF/authenticated BFF request. The client applies the BFF streak result back into the dashboard, the local continuity store, polished /arete Done-today / 1-day streak / 1 / 7 KPI read-back, and the Home Arete rail 1d streak • done today read-back.

The Playwright BFF dev server now receives OSHUN_STUBS_DATABASE_URL defaulting to the local dev Postgres container. The Postgres stub adapter also bootstraps the canonical V1 tables it dual-writes so a fresh oshun_dev database can run the BFF-backed create/check-in flow without a separate Prisma migration round trip. Remaining Arete gaps are cross-device check-in sync and the non-live Home KpiGrid habit metric called out in the home walkthrough.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/domain-stubs-postgres.ts apps/oshun/bff/src/routes/domain-stubs-postgres.test.ts apps/oshun/web/playwright.config.ts apps/oshun/web/src/components/domains/arete/AreteHabitSystem.tsx apps/oshun/web/src/components/domains/arete/__tests__/AreteHabitSystem.test.tsx apps/oshun/web/e2e/arete-create-habit.spec.ts WALKTHROUGH/journeys/arete-create-habit.md WALKTHROUGH/customer/04-arete/domains-arete-habits.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/bff exec eslint --no-warn-ignored src/routes/domain-stubs-postgres.ts src/routes/domain-stubs-postgres.test.ts — passed.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored playwright.config.ts src/components/domains/arete/AreteHabitSystem.tsx src/components/domains/arete/__tests__/AreteHabitSystem.test.tsx e2e/arete-create-habit.spec.ts — passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/components/domains/arete/__tests__/AreteHabitSystem.test.tsx — 3 passed.
  • OSHUN_TEST_POSTGRES_URL=postgresql://oshun:oshun_dev@127.0.0.1:5432/oshun_dev pnpm --dir apps/oshun/bff exec vitest run src/routes/domain-stubs-postgres.test.ts — 24 passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • Resource gates before the Playwright runs: 15 GiB RAM, 12-13 GiB available, 31 GiB swap, 48 GiB free disk, and no active broad build/test servers. During the focused Arete run, available memory stayed above 7.9 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/arete-create-habit.spec.ts --workers=1 — 7 passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/arete-habits-bff.spec.ts --workers=1 — 3 passed.

28. 2026-06-23 Veritas source-id profile addendum#

Closed the ID-specific source-profile leg for veritas-evidence-trail. Selected /veritas/claim source rows now carry source ids and link to /veritas/source/[sourceId]; /veritas/source remains the default Statnett fallback. The source-id route renders VeritasSource with the selected profile data and a stable data-veritas-source-profile hook, so the evidence trail no longer lands every source drill on the same fixture card.

veritas-evidence-trail.spec.ts now clicks the Statnett selected-source row to /veritas/source/statnett-operator-data, asserts the matching profile hook and A-band Statnett profile, then directly opens /veritas/source/nve-regulator-note and asserts the NVE-specific B-band profile and rationale. The journey remains partial only because the browser-induced downstream-503 render is still represented by shared RSC non-2xx fallback coverage rather than a separate browser-induced 503 path.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/lib/lilith-data/types.ts apps/oshun/web/src/lib/lilith-data/veritas-depth.ts apps/oshun/web/src/components/lilith/veritas.tsx apps/oshun/web/src/app/veritas/source/[sourceId]/page.tsx apps/oshun/web/e2e/veritas-evidence-trail.spec.ts WALKTHROUGH/journeys/veritas-evidence-trail.md WALKTHROUGH/customer/05-veritas/veritas-source.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/lib/lilith-data/types.ts src/lib/lilith-data/veritas-depth.ts src/components/lilith/veritas.tsx src/app/veritas/source/[sourceId]/page.tsx e2e/veritas-evidence-trail.spec.ts — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/app/veritas/__tests__/page.test.tsx — 3 passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no active broad build/test servers. During the focused run, available memory stayed above 7.8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/veritas-evidence-trail.spec.ts --workers=1 — 15 passed.

29. 2026-06-23 Veritas downstream-503 browser addendum#

Closed the browser-induced downstream-503 leg for veritas-evidence-trail. The BFF now supports a test-only OSHUN_VERITAS_ADAPTER=outage mode that keeps the real route stack alive but makes the Veritas home-briefing dependencies throw, so /v1/veritas/briefing/home exercises the existing fail-closed 503 veritas_home_briefing_unavailable path. The default Playwright config excludes the outage-tagged spec; the dedicated playwright.veritas-outage.config.ts boots a separate real BFF/web stack on ports 4011/3011 with that outage adapter and runs only veritas-home-outage.spec.ts.

The browser spec first proves the live BFF returns 503 for a signed-in domain:veritas token, then loads /veritas through the real Next dev server pointed at that outage BFF. It asserts the honest no-lead UI, Evidence · 0 claims, method note, and the absence of the Save/Report action row. Remaining Veritas evidence-trail gaps after this addendum were story trajectory SVG derivation, topic interaction depth, and the server-side retraction trigger; the trajectory derivation gap was closed in addendum 240.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/app.ts apps/oshun/bff/src/__tests__/veritas-route.test.ts apps/oshun/web/playwright.config.ts apps/oshun/web/playwright.veritas-outage.config.ts apps/oshun/web/e2e/veritas-home-outage.spec.ts WALKTHROUGH/journeys/veritas-evidence-trail.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md WALKTHROUGH/results/veritas-evidence-trail.md — passed.
  • pnpm --dir apps/oshun/bff exec eslint --no-warn-ignored src/app.ts src/__tests__/veritas-route.test.ts — passed.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored playwright.config.ts playwright.veritas-outage.config.ts e2e/veritas-home-outage.spec.ts — passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/veritas-route.test.ts — 10 passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no active broad build/test servers. The focused outage run completed before a 30-second memory poll was due; post-run available memory was 13 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.veritas-outage.config.ts --workers=1 — 1 passed.

30. 2026-06-24 Arete Home footing practice-streak addendum#

Closed the stale Home KpiGrid blocker for arete-create-habit against the shipped Home surface. Legacy KpiGrid remains preview-only per the Home walkthrough; the live Home KPI surface is HomeFootingSummaryStrip ([data-kpi-grid]). The footing strip now reads the local Arete continuity store and adds one pending same-day completed local habit to the profile practice streak while profile sync is still pending. It still preserves the strongest active local Arete streak when that is higher than the profile value, and archived habits do not inflate the metric.

arete-create-habit.spec.ts now creates a habit through the real BFF-backed wizard, checks it in, returns Home with the Arete Home BFF endpoint unavailable, and asserts both the Home Arete rail (1d streak • done today) and the live Home footing practice-streak metric (profile streak + 1) in the same browser session.

Verification:

  • psql --versionPostgreSQL 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1).
  • pnpm --dir apps/oshun/web exec prettier --check src/components/home/HomeFootingSummaryStrip.tsx src/components/home/__tests__/HomeFootingSummaryStrip.test.tsx e2e/arete-create-habit.spec.ts ../../../WALKTHROUGH/journeys/arete-create-habit.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/home/HomeFootingSummaryStrip.tsx src/components/home/__tests__/HomeFootingSummaryStrip.test.tsx e2e/arete-create-habit.spec.ts — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/components/home/__tests__/HomeFootingSummaryStrip.test.tsx — 7 passed.
  • pnpm --dir apps/oshun/web run typecheck — passed.
  • git diff --check — passed.
  • Resource gates before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no active broad build/test servers. During the focused run, available memory stayed above 7.4 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/arete-create-habit.spec.ts --workers=1 — 9 passed.

31. 2026-06-24 Arete live streak-rollup addendum#

Closed the /arete/streak fixture-vs-live blocker for arete-create-habit. getAreteStreak() now reads /v1/arete/streak through the server-side BFF fetch helper and maps the real Postgres-backed rollup into the phone-shell data contract. The adapter preserves the existing fixture as an outage/malformed-data fallback, pads the BFF's 28-day heatmap into the existing 42-cell six-week visual, maps started to an engaged day, and keeps exactly one today marker.

/arete/streak now renders an honest live 0 days for a fresh member and 1 day after the real wizard-created habit check-in. The specimen frame caption also reads the live day number instead of the old hardcoded Day 47, and the large streak count/phone-frame caption no longer use negative letter spacing.

arete-create-habit.spec.ts now proves the live streak rollup in the same real-dev-infra flow that creates the habit and POSTs the first check-in. arete-streak-recovery.spec.ts keeps the humane/a11y streak-surface assertions but no longer relies on fixture-only heatmap dates.

Verification:

  • psql --versionPostgreSQL 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1).
  • pnpm --dir apps/oshun/web exec prettier --write src/lib/lilith-data/arete-depth.ts src/lib/lilith-data/arete-depth.test.ts src/components/lilith/arete.tsx src/components/lilith/mobile.tsx src/app/arete/streak/page.tsx e2e/arete-create-habit.spec.ts e2e/arete-streak-recovery.spec.ts ../../../WALKTHROUGH/journeys/arete-create-habit.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/lib/lilith-data/arete-depth.ts src/lib/lilith-data/arete-depth.test.ts src/components/lilith/arete.tsx src/components/lilith/mobile.tsx src/app/arete/streak/page.tsx e2e/arete-create-habit.spec.ts e2e/arete-streak-recovery.spec.ts — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/lib/lilith-data/arete-depth.test.ts — 2 passed.
  • pnpm --dir apps/oshun/web run typecheck — passed.
  • Resource gates before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no active broad build/test servers. During the focused run, available memory stayed above 7.2 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/arete-create-habit.spec.ts e2e/arete-streak-recovery.spec.ts --workers=1 — 15 passed.

32. 2026-06-24 PWA real service-worker cache-purge addendum#

Closed the pwa-update-flow stale-cache purge evidence gap that was previously unit-only. pwa-lifecycle-deepening.spec.ts now drives the browser ServiceWorker + Cache Storage path: it seeds the current oshun-* caches, stale versioned OSHUN caches, and a foreign cache, registers a cache-busted real sw.js, waits for activation, and asserts only the stale OSHUN caches are purged. The journey remains partial because multi-tab controllerchange, cold-start update, in-flight-write preservation, and reading-mode mid-passage restore are still undriven.

Verification:

  • psql --versionPostgreSQL 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1).
  • pnpm --dir apps/oshun/web exec prettier --write e2e/pwa-lifecycle-deepening.spec.ts ../../../WALKTHROUGH/journeys/pwa-update-flow.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/pwa-lifecycle-deepening.spec.ts — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/__tests__/pwa-service-worker-policy.test.ts — 9 passed.
  • pnpm --dir apps/oshun/web run typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the focused run, available memory stayed above 7.2 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/pwa-lifecycle-deepening.spec.ts --workers=1 — 4 passed.

33. 2026-06-24 Tenant SSO evidence reconciliation addendum#

Closed stale tenant-sso-config-saml-oidc-claim-mapping evidence drift. The journey/audit now distinguish the covered real-BFF contracts from the remaining tenant-admin UI gaps: /operator/sso renders the live ssoConnectionStore after real admin SSO seeds, tenant-sso-crud-bff covers CRUD, validation, successful/fail-closed test-connection, SAML XML import, and OIDC discovery import, and tenant-sso-oidc-login-bff covers signed OIDC callback claim transforms plus fail-closed callback verdicts. The old static SSO_FIXTURE wording in tenant-sso-config.spec.ts and the audit is retired. The journey remains partial because tenant-admin import UI, full transform-matrix UI, per-tenant auth-policy panel, sandbox-probe UI verdicts, and draft→enabled state machine remain uncovered.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/tenant-sso-config.spec.ts ../../../WALKTHROUGH/journeys/tenant-sso-config-saml-oidc-claim-mapping.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md ../../../WALKTHROUGH/results/README.md — passed.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/tenant-sso-config.spec.ts e2e/tenant-sso-crud-bff.spec.ts e2e/tenant-sso-oidc-login-bff.spec.ts — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the focused SSO run, available memory stayed above 7.3 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-sso-config.spec.ts e2e/tenant-sso-crud-bff.spec.ts e2e/tenant-sso-oidc-login-bff.spec.ts --workers=1 — 17 passed.

34. 2026-06-24 Message quiet-hours replay evidence reconciliation#

Reconciled stale audit wording for messages-quiet-hours-and-channel-binding. The focused real-BFF spec now proves the after-window replay seam that was previously called open: a delayed non-essential message stays out of the inbox inside quiet hours, /v1/admin/customer-messages/replay-due does not deliver it one second early, and the boundary replay writes the inbox row with queued → sent → delivered receipts. The journey remains partial because real external provider handoff beyond the message-center receipt seam, the per-channel×domain matrix, Lilith tone-band persona-policy, and real OTP/magic-link ownership flows remain uncovered. 2026-06-26 follow-up: active crisis-frame suppression is now covered for the local message-center dispatch seam; external provider handoff remains outside this local-dev seam.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md ../../../WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md ../../../WALKTHROUGH/results/README.md — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the focused run, available memory stayed above 8.0 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/messages-center-bff.spec.ts --workers=1 — 13 passed.

35. 2026-06-24 Email verification fresh-device session addendum#

Closed the remaining first-time-anonymous-visitor Step 7 different-device verify-link gap. The public BFF confirm route now consumes a valid email-verification token, flips emailVerified, and returns a freshly minted AuthSession using the caller's browser surface/device metadata. The web verify-email page now confirms through the same-origin /api/auth/verify-email/confirm proxy, which sets the session and access tokens as HttpOnly cookies before the page auto-hands off to onboarding.

The real Mailpit Playwright spec now proves the branch end-to-end: after signup delivers the actual /auth/verify-email?token=...&next=/tara email, a fresh browser context with no oshun-session cookie opens that link, lands in /onboarding?redirect=/tara, receives HttpOnly oshun-session and oshun-access cookies, and reads back /api/auth/session with the signed-up email and verified: true. The journey remains deep rather than complete because OG/Twitter image handlers, ?reauth=1, and onboarding-abandon resume remain uncovered.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write src/components/auth/VerifyEmailConfirm.tsx src/components/auth/VerifyEmailConfirm.test.tsx src/lib/server/auth-server.ts src/lib/server/auth-server.test.ts src/app/api/auth/verify-email/confirm/route.ts e2e/email-verify-mailpit.spec.ts e2e/email-verify-roundtrip.spec.ts ../../../apps/oshun/bff/src/auth/customer-auth-store.ts ../../../apps/oshun/bff/src/routes/auth.ts ../../../apps/oshun/bff/src/auth/customer-auth-email-verify.test.ts — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/auth/customer-auth-email-verify.test.ts — 16 passed.
  • pnpm --dir apps/oshun/web exec vitest run src/components/auth/VerifyEmailConfirm.test.tsx src/lib/server/auth-server.test.ts — 10 passed.
  • pnpm --dir apps/oshun/bff exec eslint --no-warn-ignored src/auth/customer-auth-store.ts src/routes/auth.ts src/auth/customer-auth-email-verify.test.ts — passed.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/auth/VerifyEmailConfirm.tsx src/components/auth/VerifyEmailConfirm.test.tsx src/lib/server/auth-server.ts src/lib/server/auth-server.test.ts src/app/api/auth/verify-email/confirm/route.ts e2e/email-verify-mailpit.spec.ts e2e/email-verify-roundtrip.spec.ts — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the focused run, available memory stayed above 7.5 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/email-verify-roundtrip.spec.ts e2e/email-verify-mailpit.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 6 passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.

36. 2026-06-24 User flag moderation read-back addendum#

Closed the stale user-flag-to-review intake evidence gap. The focused browser journey already drove the customer-side TrustSafetyFlagButton dialog on a Nisaba passage and submitted through the server action to POST /v1/user-reports; it now also uses an admin-scoped real BFF request to read GET /v1/admin/workspaces/moderation and prove the submitted live report is present in userReports.

The assertion is keyed by a unique rationale marker per run and checks the live queue record shape: cust-ur-* report id, origin: 'live', category misinformation, status open, priority medium, outcome none, targetKind: 'content', reporter metadata, target id, and target label. The same spec still covers the under-length rationale failure mode. The journey remains deep rather than complete because actor suspension, second-reviewer signoff, browser /profile/safety receipt rendering, notification / appeal, and origin surfaces outside Veritas / Nisaba / Tara stay open. Operator decision and reporter receipt API read-back are superseded by §163.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/user-flag-to-review.spec.ts ../../../WALKTHROUGH/journeys/user-flag-to-review.md ../../../WALKTHROUGH/customer/05-veritas/domains-veritas-claims-claimId.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/journeys/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md ../../../WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md ../../../WALKTHROUGH/results/README.md — passed.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/user-flag-to-review.spec.ts — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During startup the focused run's available memory stayed above 7.8 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/user-flag-to-review.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 2 passed.

37. 2026-06-24 Telegram webhook rate-limit and STT evidence addendum#

Closed the stale telegram-bot-assistant-delivery voice-STT audit note and moved the route-level rate-limit trigger out of the uncovered list. The journey doc already reflected the current BFF wiring: webhook.ts uses resolveSttVoiceProvider, which performs real Telegram file download plus OpenAI-compatible transcription when credentials exist, and fails closed without OSHUN_TELEGRAM_BOT_TOKEN / OSHUN_STT_API_KEY by returning the honest "could not transcribe" reply rather than grounding a fabricated transcript.

The focused real-BFF spec now also proves the stateful limiter at the route level. It sends 12 allowed /menu updates through the same userId:chatId:message bucket and asserts the 13th update returns the retry copy ("This chat is moving quickly...") with transactional audit metadata, rather than the normal command response. The journey remains deep rather than complete because outbound Telegram delivery / TTS-back, live STT credentials, audit-sink persistence, crisis scanning on voice transcripts, and grounder 500-paths remain uncovered.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/telegram-webhook-delivery.spec.ts ../../../WALKTHROUGH/journeys/telegram-bot-assistant-delivery.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/telegram-webhook-delivery.spec.ts — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the focused run, available memory stayed above 8.1 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/telegram-webhook-delivery.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 18 passed.

38. 2026-06-24 Telegram voice-transcript crisis interrupt addendum#

Closed the telegram-bot-assistant-delivery voice-transcript crisis-scan gap. The shared Telegram bot now checks successful voice transcripts with the same detectCrisisTrigger phrase list used for typed text before any Sophia grounding. This keeps STT-unavailable voice notes fail-closed while preventing a successfully transcribed crisis phrase from being routed to the grounded-answer composer.

To prove that control flow against the real local BFF without external STT credentials, the STT resolver now accepts OSHUN_TELEGRAM_STT_TEST_TRANSCRIPTS only outside production. The Playwright BFF sets a single deterministic voice_file_e2e_crisis transcript and asserts the webhook returns the exact plain-operator crisis response, hotline buttons, intentClass: 'crisis', and persona: 'plain-operator', with no Sophia disclosure footer. Production ignores that transcript map and still requires real Telegram + STT credentials.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/telegram-webhook-delivery.spec.ts playwright.config.ts ../../../libs/oshun/messaging-channels/src/telegram/bot.ts ../../../libs/oshun/messaging-channels/src/telegram/stt-provider.ts ../../../libs/oshun/messaging-channels/src/telegram/stt-provider.test.ts ../../../libs/oshun/messaging-channels/src/telegram-messaging.test.ts ../../../WALKTHROUGH/journeys/telegram-bot-assistant-delivery.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md ../../../WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm --dir libs/oshun/messaging-channels exec vitest run src/telegram-messaging.test.ts src/telegram/stt-provider.test.ts — 33 passed.
  • pnpm exec eslint --no-warn-ignored libs/oshun/messaging-channels/src/telegram/bot.ts libs/oshun/messaging-channels/src/telegram/stt-provider.ts libs/oshun/messaging-channels/src/telegram/stt-provider.test.ts libs/oshun/messaging-channels/src/telegram-messaging.test.ts apps/oshun/web/e2e/telegram-webhook-delivery.spec.ts apps/oshun/web/playwright.config.ts — passed.
  • pnpm nx run @oshun/messaging-channels:typecheck — passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the focused run, available memory stayed above 8.1 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/telegram-webhook-delivery.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 19 passed.

39. 2026-06-24 Telegram audit-sink persistence addendum#

Closed the Telegram audit-sink persistence gap. POST /telegram/webhook now records each returned channel audit envelope into the BFF admin audit-events sink after the webhook decision succeeds. Real local/dev server wiring injects the durable Postgres-backed store, so the envelope is written to admin_audit_event; route-level unit tests still prove the same behavior with the in-memory store when no durable sink is injected.

Normal responses are recorded as telegram.send, crisis interrupts as telegram.crisis-suppression. The stored payload includes the tenant id, Telegram update id, response method, and the full Telegram channel audit envelope, but not the response body text.

The focused real-BFF Playwright spec now sends /today with a unique tenant header, then polls Postgres directly for the resulting admin_audit_event row and asserts the persisted telegram.send row carries the expected audit envelope.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/telegram-webhook-delivery.spec.ts ../../../apps/oshun/bff/src/routes/telegram.ts ../../../apps/oshun/bff/src/app.ts ../../../apps/oshun/bff/src/__tests__/telegram-route.test.ts ../../../WALKTHROUGH/journeys/telegram-bot-assistant-delivery.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md ../../../WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/telegram-route.test.ts — 10 passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/telegram.ts apps/oshun/bff/src/app.ts apps/oshun/bff/src/__tests__/telegram-route.test.ts apps/oshun/web/e2e/telegram-webhook-delivery.spec.ts — passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the focused run, available memory stayed above 8.2 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/telegram-webhook-delivery.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 20 passed.

40. 2026-06-24 Public-scene takedown cascade addendum#

Partially closed the public-scene-abuse-report artifact-side takedown cascade gap through the shipped tenant-operator BFF route. The new real-infra Playwright leg seeds one kept Living Offering, creates two public share links, mints a download grant for one link, and calls POST /v1/living-scenes/admin/artifacts/:artifactId/takedown as a tenant operator with kind:'originating-user-account-deletion'.

The spec asserts the route cascades to both share ids, both public viewers return tombstones with the takedown banner state, both embed endpoints deny as revoked, the pre-existing download grant media returns 410 download_grant_inactive_share, and tenant audit includes takedown_cascaded. This proves the cascade and observability behavior against real local dev infra; the remaining public-report gap is the operator-detail UI that would launch this cascade directly from an abuse-report incident.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/scene-password-and-grants.spec.ts ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/journeys/public-scene-abuse-report.md ../../../WALKTHROUGH/journeys/scene-keep-and-share.md ../../../WALKTHROUGH/results/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md ../../../WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/scene-password-and-grants.spec.ts — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the focused full-spec run, available memory stayed above 7.3 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/scene-password-and-grants.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "originating-user deletion tombstones every public share" — 1 passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/scene-password-and-grants.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 17 passed.

41. 2026-06-24 Nyx event-action contract addendum#

Closed the remaining local BFF-contract gap in nyx-event-calendar-sync-reminder for reminder-state persistence. The focused real-infra Playwright leg still proves the authenticated PUT /v1/nyx/event-actions/:eventIdGET /v1/nyx/event-actions mirror and delivery-route reconstruction from cadence+channels, and now also proves the fail-closed write contract:

  • non-object JSON bodies return 400 invalid_event_action_state;
  • body eventId must match the route event id and mismatches return 400 event_id_mismatch;
  • enabled reminders without a valid reminderTime return 400 invalid_reminder_time;
  • rejected writes leave the user's snapshot unmutated (revision: 0, no persisted event state).

The walkthrough now marks the reminder body-shape contract, event-id observation back-reference, ICS UID namespace, and reminder-channel delivery target mapping as documented/covered. Remaining gaps stay external or product surface gaps: two-way provider sync, actual reminder dispatch and notification cold-start delivery, quiet-hours dispatch deferral, richer event-metadata prefill, and an explicit observation-to-event back-link control.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/nyx-event-actions-bff.spec.ts ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/journeys/nyx-event-calendar-sync-reminder.md ../../../WALKTHROUGH/results/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md ../../../WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/nyx-event-actions-bff.spec.ts — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the focused run, available memory stayed above 7.8 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nyx-event-actions-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 4 passed.

42. 2026-06-24 Tenant SSO claim-transform matrix addendum#

Closed the remaining /operator/sso browser-editor claim-mapping matrix gap in tenant-sso-config-saml-oidc-claim-mapping. The new real-infra Playwright leg opens an existing SAML connection in the shipped operator SSO form, adds one row for each internal claim slot (email, displayName, familyName, givenName, groups, tenant-role, preferred-locale), drives all four transform options (identity, lowercase, csv-split, first-only), toggles required/optional state, saves through the live admin SSO BFF, and polls the BFF read-back until the persisted matrix matches the browser form.

The journey remains partial for the tenant-admin import UI, per-tenant auth-policy panel, sandbox-probe verdict UI, and draft→enabled state machine, but the claim-slot/transform editor matrix is now covered by a real browser flow instead of only BFF callback/contract evidence.

Verification:

  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/tenant-sso-config.spec.ts — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the focused browser runs, available memory stayed at or above 13 GiB after startup and shutdown polling.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-sso-config.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list --grep "browser form persists every claim slot" — 1 passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-sso-config.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list --grep "claim-mapping form mutates|browser form persists|removing a connection" — 3 passed.

43. 2026-06-24 PWA multi-tab controllerchange addendum#

Closed the Step 8 multi-tab reload gap in pwa-update-flow. The shipped PwaBootstrap now reloads any tab that already has a pending staged update when controllerchange fires, not only the tab where the user clicked "Refresh now"; first-install/unknown controller changes still keep the existing ready-prompt branch. The Playwright SW-update harness now coordinates a single activation across sibling pages in one browser context.

The new real-infra Chromium leg opens /explore and /library in two tabs, stages the same update in both, applies it from /explore, broadcasts the activation to /library, and proves both tabs reload exactly once, preserve their own URLs, re-render their surfaces, clear the update prompt, and emit no stale chunk/module console errors. The journey remains partial for the backgrounded-PWA silent cold-start update and in-flight-write preservation paths.

Verification:

  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/pwa-lifecycle-deepening.spec.ts apps/oshun/web/e2e/support/pwa.ts apps/oshun/web/src/components/PwaBootstrap.tsx — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/PwaBootstrap.test.tsx --config vitest.config.ts — 1 file / 7 tests passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the full targeted lifecycle run, available memory stayed above 6.9 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/pwa-lifecycle-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list --grep "reloads every open tab" — 1 passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/pwa-lifecycle-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 5 passed.

44. 2026-06-24 PWA cold-start silent update addendum#

Closed the Step 9 browser-level cold-start silent-update gap in pwa-update-flow. The new Chromium leg launches as a standalone PWA with a saved /activity relaunch target, activates the real sw.js, reloads as a subsequent controlled cold start, and asserts /activity remains active, the activity dashboard rerenders, no data-pwa-update-prompt mounts, and navigator.serviceWorker.ready reports active=true, controller=true, and waiting=false.

The journey remains partial for the cold-start telemetry variant and Step 10 in-flight write preservation.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/pwa-lifecycle-deepening.spec.ts ../../../WALKTHROUGH/journeys/pwa-update-flow.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md ../../../WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/pwa-lifecycle-deepening.spec.ts — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the full targeted lifecycle run, available memory stayed above 7.1 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/pwa-lifecycle-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list --grep "standalone cold start restores" — 1 passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/pwa-lifecycle-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 6 passed.

45. 2026-06-24 PWA in-flight write refresh addendum#

Closed the Step 10 browser-level in-flight write/read-back leg in pwa-update-flow. The new Chromium leg creates a persisted Arete habit through the real browser wizard, starts the authenticated check-in mutation, lets the live BFF write complete while the browser still shows the optimistic "Recording check-in..." state, then applies the staged PWA update. After the refresh-now reload, the test verifies the route is preserved, the update prompt is cleared, and /arete refetches the durable success state as Done today, 1-day streak, and 1 / 7.

The journey remains partial for the service-worker background-sync queue/replay leg and the cold-start telemetry variant.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/pwa-lifecycle-deepening.spec.ts ../../../WALKTHROUGH/journeys/pwa-update-flow.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md ../../../WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/pwa-lifecycle-deepening.spec.ts — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the full targeted lifecycle run, available memory stayed above 7.0 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/pwa-lifecycle-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list --grep "refresh-now reload preserves" — 1 passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/pwa-lifecycle-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 7 passed.

46. 2026-06-24 Offline background-sync replay addendum#

Closed the raw service-worker queue/replay substrate gap shared by offline-first-time-use and the queued-write branch of pwa-update-flow. The new Chromium spec registers the real sw.js, creates a live Arete habit, queues an authenticated same-origin /v1/arete/habits/:habitId/check-in mutation via OSHUN_QUEUE_ACTION, proves the row is persisted in the service worker's oshun-sync-queue IndexedDB store, reloads while offline, proves the queued row survives, then uses Chromium's service-worker CDP hook to dispatch the oshun-background-sync event. The replay writes through the live BFF, /v1/arete/habits reads back todayKept=true / streakDays=1, and the queue drains.

The journeys remain partial for user-facing offline Save/Reflection queue hints, natural browser-delivered sync scheduling, PWA staged-update queued-write UI copy/telemetry, user-facing network-only denial copy, cold-start telemetry, and long-lived Nisaba offline pins.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/offline-background-sync.spec.ts ../../../WALKTHROUGH/journeys/offline-first-time-use.md ../../../WALKTHROUGH/journeys/pwa-update-flow.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md ../../../WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/offline-background-sync.spec.ts — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the focused run, available memory stayed above 8.7 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/offline-background-sync.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 1 passed.

47. 2026-06-24 Search result deep-read destination addendum#

Closed the URL-only part of the search-explore-deep-read-library-save deep-read gap for the Nisaba passage branch. search-saved-and-recent now clicks the real /v1/search seed nisaba-passage-speech from /search, verifies the browser lands on /domains/nisaba?origin=explore&path=/library/passage/nisaba-passage-speech, and asserts the destination renders as a passage workspace instead of falling back to the Nisaba hub root: data-nisaba-surface-mode="passage", data-nisaba-workspace-mode="passage", the Passage desk focus copy, the reading frame, the reading body, and at least one rendered passage paragraph.

The journey remains partial for exact arbitrary-passage-id body mapping, Veritas timeline destination content, saved-item-resume destination content after the Library hop, scroll restoration, silent fetch-failure UX, non-Nisaba wrong-destination cases, and duplicate save-producer edges.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/search-saved-and-recent.spec.ts ../../../WALKTHROUGH/journeys/search-explore-deep-read-library-save.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/search-saved-and-recent.spec.ts — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the final focused run, available memory stayed above 9.2 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 5 passed.

48. 2026-06-24 Search saved-item resume destination addendum#

Tightened the Library-hop half of search-explore-deep-read-library-save. search-saved-and-recent now reuses the Nisaba passage-workspace assertion after clicking the cache-free /library saved item’s Resume passage button: the real /v1/search item is saved through the browser, the real /v1/library/saved-items row is polled for resumePath, the local library cache is cleared, /library hydrates the item from the BFF, and the resumed /domains/nisaba?origin=library&path=/library/passage/nisaba-passage-speech destination must render data-nisaba-surface-mode="passage", data-nisaba-workspace-mode="passage", Passage desk focus copy, the reading frame, the reading body, and at least one passage paragraph.

The journey remains partial for exact arbitrary-passage-id body mapping, Veritas timeline destination content, scroll restoration, silent fetch-failure UX, non-Nisaba wrong-destination cases, and duplicate save-producer edges.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/search-saved-and-recent.spec.ts ../../../WALKTHROUGH/journeys/search-explore-deep-read-library-save.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/search-saved-and-recent.spec.ts — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the final focused run, available memory stayed above 9.2 GiB; after shutdown it returned to 12 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 5 passed.

49. 2026-06-24 Search Veritas claim destination addendum#

Closed the first non-Nisaba destination-content branch in search-explore-deep-read-library-save. The BFF universal search seeds now include canonical Veritas claim result claim-renewables-capacity, and search-saved-and-recent opens the real /v1/search?q=renewables%20capacity&domain=veritas result from /search. After clicking the result's open action, the browser must land on /domains/veritas?origin=explore&path=/claims/claim-renewables-capacity and render the claim-detail evidence workspace instead of the Veritas hub root: data-veritas-claim-detail-workspace, the Renewables now exceed fossil capacity title, canonical claim text containing installed global power capacity, the source-iea source row, the side-by-side counterclaim lane, and the Sophia bundle card for claim-renewables-capacity.

The journey remains partial for Veritas story and timeline destination content, arbitrary Nisaba passage-id body mapping, scroll restoration, fetch-failure UX, remaining non-Nisaba destination templates, duplicate save-producer edges, and broader in-domain save producer sync.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/search-saved-and-recent.spec.ts ../../../apps/oshun/bff/src/routes/universal-search-seeds.ts ../../../apps/oshun/bff/src/__tests__/search-route.test.ts ../../../WALKTHROUGH/journeys/search-explore-deep-read-library-save.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/search-saved-and-recent.spec.ts apps/oshun/bff/src/routes/universal-search-seeds.ts apps/oshun/bff/src/__tests__/search-route.test.ts — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/search-route.test.ts — 11 passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the final focused run, available memory stayed above 9 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 6 passed.

50. 2026-06-24 Search Veritas story destination addendum#

Closed the Veritas story/timeline destination-content branch in search-explore-deep-read-library-save. The BFF universal search seeds now include canonical Veritas story result story-renewables-capacity, BFF ranking treats story as a first-class kind, and the search UI renders a dedicated story template with timeline/provenance/evidence cues instead of a generic fallback card. search-saved-and-recent opens the real /v1/search?q=renewables%20story%20timeline&domain=veritas result from /search; after clicking the result's open action, the browser must land on /domains/veritas?origin=explore&path=/story/story-renewables-capacity and render the story timeline workspace instead of the Veritas hub root: data-veritas-story-workspace with story id story-renewables-capacity, the canonical story headline, the claim-detail lane, the source-iea source row, correction notes, topic timeline, timeline-2, and the Sophia bundle card for claim-renewables-capacity.

The journey remains partial for arbitrary Nisaba passage-id body mapping, scroll restoration, fetch-failure UX, remaining non-Nisaba destination templates, duplicate save-producer edges, and broader in-domain save producer sync.

Verification:

  • pnpm --dir apps/oshun/web exec prettier --write e2e/search-saved-and-recent.spec.ts src/components/search/SearchResultsView.tsx src/components/search/search-config.ts src/components/search/__tests__/SearchResultsView.test.tsx src/components/search/search-config.test.ts ../../../apps/oshun/bff/src/routes/universal-search-seeds.ts ../../../apps/oshun/bff/src/search/ranking.ts ../../../apps/oshun/bff/src/__tests__/search-route.test.ts ../../../WALKTHROUGH/journeys/search-explore-deep-read-library-save.md ../../../WALKTHROUGH/journeys/coverage.md ../../../WALKTHROUGH/results/README.md ../../../WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/components/search/search-config.test.ts src/components/search/__tests__/SearchResultsView.test.tsx — 2 files passed, 91 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/search-route.test.ts — 11 passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/search-saved-and-recent.spec.ts apps/oshun/web/src/components/search/SearchResultsView.tsx apps/oshun/web/src/components/search/search-config.ts apps/oshun/web/src/components/search/__tests__/SearchResultsView.test.tsx apps/oshun/web/src/components/search/search-config.test.ts apps/oshun/bff/src/routes/universal-search-seeds.ts apps/oshun/bff/src/search/ranking.ts apps/oshun/bff/src/__tests__/search-route.test.ts — passed with the repo's existing Next pages-directory warning.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gates before typecheck/lint and Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the focused Playwright run, available memory stayed above 10 GiB; after shutdown it returned to 13 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 7 passed.

51. 2026-06-24 Search Nisaba exact passage detail addendum#

Closed the exact Nisaba passage identity/body branch for the search-explore-deep-read-library-save journey. The universal search fixture now uses the real non-daily public-domain corpus passage nisaba-passage-speech (On Guarded Speech) instead of the deleted synthetic passage seed. The web BFF hooks now expose GET /v1/nisaba/passages/:passageId, and NisabaSurface hydrates /library/passage/<id> through that detail route before selecting the active reading object.

search-saved-and-recent now opens /v1/search?q=guarded%20speech&domain=nisaba, clicks the real nisaba-passage-speech result, and verifies the destination /domains/nisaba?origin=explore&path=/library/passage/nisaba-passage-speech renders data-nisaba-reading-passage-id="nisaba-passage-speech", exact Enchiridion XXXIII reference, exact Epictetus/Carter source attribution, On Guarded Speech title, the public-domain body excerpt, compare deck, workflow map, and support rail. The saved-result path then polls the real /v1/library/saved-items row, clears local library cache, hydrates /library from the BFF, resumes the item, and verifies the same exact passage workspace.

The duplicate daily Nisaba universal-search seed was removed because the live Nisaba adapter already contributes the daily public-domain passage; the final browser run no longer emits the duplicate React key warning for nisaba-passage-attention.

The journey remains partial for scroll restoration, silent fetch-failure UX, remaining non-Nisaba destination templates, duplicate save-producer edges, and broader in-domain save producer sync.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/lib/hooks/use-bff.ts apps/oshun/web/src/lib/hooks/__tests__/use-bff.test.ts apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/domains/__tests__/NisabaSurface.test.tsx apps/oshun/web/e2e/search-saved-and-recent.spec.ts apps/oshun/bff/src/routes/universal-search-seeds.ts apps/oshun/bff/src/__tests__/search-route.test.ts WALKTHROUGH/journeys/search-explore-deep-read-library-save.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md V1/features/search-discovery-recommendations.md V1/architecture/search-discovery-knowledge-graph.md — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/components/domains/__tests__/NisabaSurface.test.tsx src/lib/hooks/__tests__/use-bff.test.ts — 2 files passed, 63 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/search-route.test.ts src/__tests__/nisaba-route.test.ts — 2 files passed, 22 tests passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/domains/__tests__/NisabaSurface.test.tsx apps/oshun/web/src/lib/hooks/use-bff.ts apps/oshun/web/src/lib/hooks/__tests__/use-bff.test.ts apps/oshun/web/e2e/search-saved-and-recent.spec.ts — passed with the repo's existing Next pages-directory warning.
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/universal-search-seeds.ts apps/oshun/bff/src/__tests__/search-route.test.ts — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gates before typecheck/lint and Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed above 9.8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 7 passed.

52. 2026-06-24 Search live-BFF fetch-failure UX addendum#

Closed the basic visible fetch-failure branch for search-explore-deep-read-library-save. search-saved-and-recent now primes a real authenticated shell session whose client /api/auth/session access token is valid but intentionally lacks shell domain scopes. After the page hydrates that client token, the browser submits guarded speech through the shipped SearchResultsView controls. The live BFF /v1/search request returns 403 domain_scope_missing; the browser must render [data-search-error] with the explicit "Search unavailable" state, clear loading/summary/result rows, and retain the submitted query in the recent-search panel.

This supersedes the dated walkthrough claim that non-OK search responses silently leave prior results. The journey remains partial for a dedicated Retry control, scroll restoration after back-navigation from a deep-read, destination content for the remaining non-Nisaba result templates, duplicate save-producer edges, and broader in-domain save producer sync.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/search-saved-and-recent.spec.ts WALKTHROUGH/journeys/search-explore-deep-read-library-save.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/search-saved-and-recent.spec.ts — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed at or above 10 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 8 passed.

53. 2026-06-24 Search deep-read back-scroll restoration addendum#

Closed the Browser Back scroll-restoration branch for search-explore-deep-read-library-save. SearchResultsView now stores a session-scoped restore envelope before launching a result: submitted-workspace signature, result key, scrollY, and timestamp. When the same search state rehydrates with rendered results, it restores the saved offset and clears the marker. Stale, mismatched, or missing-result restore entries are cleared without affecting the visible search state.

search-saved-and-recent now opens the long live-BFF /search?q=a result set, scrolls to the deterministic nisaba-passage-speech row, asserts the list is actually scrolled, opens the exact Nisaba deep-read workspace, goes back, waits for search results to rehydrate, and verifies the restored scroll offset is within tolerance, the same row is in the viewport, and the sessionStorage marker has been cleared.

The next addendum closes the failure-state action branch. The current journey remains partial for destination content for the remaining non-Nisaba result templates, duplicate save-producer edges, and broader in-domain save producer sync.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/search/SearchResultsView.tsx apps/oshun/web/e2e/search-saved-and-recent.spec.ts WALKTHROUGH/journeys/search-explore-deep-read-library-save.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/components/search/__tests__/SearchResultsView.test.tsx src/components/search/__tests__/SearchResultsViewTelemetry.test.tsx — 2 test files passed, 62 tests passed.
  • pnpm --dir apps/oshun/web typecheck — passed (tsc --noEmit).
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/search/SearchResultsView.tsx apps/oshun/web/e2e/search-saved-and-recent.spec.ts — passed; ESLint emitted the repo's existing pages directory notice.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

54. 2026-06-24 Search fetch-failure Retry addendum#

Closed the dedicated Retry-control branch for search-explore-deep-read-library-save. SearchResultsView now renders [data-search-retry] inside the fetch-failure empty state and backs it with a retry nonce, so the same submitted query and domain filter refetch even when the visible input text has not changed. The retry path clears stale rows through the same fetch lifecycle as a new search and keeps the saved/recent workspace state unchanged.

search-saved-and-recent now extends the live-BFF 403 domain_scope_missing browser branch: after the first failed /search?q=guarded+speech request shows [data-search-error], the test clicks [data-search-retry], waits for the second real /v1/search request, asserts the BFF still returns domain_scope_missing while the token remains unauthorized, and verifies that loading, summary, and result rows stay absent. The component unit coverage also proves a failed submitted search can recover to rendered results when the retry request succeeds.

The journey remains partial for destination content for the remaining non-Nisaba result templates, duplicate save-producer edges, and broader in-domain save producer sync.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/search/SearchResultsView.tsx apps/oshun/web/src/components/search/__tests__/SearchResultsView.test.tsx apps/oshun/web/e2e/search-saved-and-recent.spec.ts WALKTHROUGH/journeys/search-explore-deep-read-library-save.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/components/search/__tests__/SearchResultsView.test.tsx src/components/search/__tests__/SearchResultsViewTelemetry.test.tsx — 2 test files passed, 63 tests passed.
  • pnpm --dir apps/oshun/web typecheck — passed (tsc --noEmit).
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/search/SearchResultsView.tsx apps/oshun/web/src/components/search/__tests__/SearchResultsView.test.tsx apps/oshun/web/e2e/search-saved-and-recent.spec.ts — passed; ESLint emitted the repo's existing pages directory notice.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed at or above 10 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

55. 2026-06-24 Search/in-domain saved-item de-dupe addendum#

Closed the Nisaba search-result save versus in-domain save-producer edge for search-explore-deep-read-library-save. The main Nisaba passage workspace now has a real [data-library-save-toggle="<passageId>"] action in the reading action row. It uses the shared web library store and saves the same nisaba:<passageId> identity and /library/passage/<passageId> resume path as the search result row. The older Lilith NisabaPassageActions save affordance also now writes the canonical /library/passage/<id> resume path, with the Lilith button primitive forwarding the save-state data hooks.

search-saved-and-recent now saves the real BFF nisaba-passage-speech search row, waits for the saved-items POST, polls the real /v1/library/saved-items store for exactly one row, opens the same Nisaba passage workspace, verifies the in-domain toggle is already saved, then drives in-domain unsave and resave through real DELETE/POST responses. The test requires the server count to move 1 → 0 → 1 for the same nisaba:nisaba-passage-speech key before clearing local cache, hydrating /library, and resuming the exact passage.

The browser run exposed a real BFF edge: direct save → unsave → resave inside one Unix-second route clock left the tombstone winning the tie, despite the resave route returning 201. The saved-items store now makes direct route writes monotonic per user/item while keeping tombstone-wins behavior for true same-timestamp device sync conflicts.

The journey remains partial for destination content for the remaining non-Nisaba result templates and broader non-Nisaba save producer sync.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/domains/__tests__/NisabaSurface.test.tsx apps/oshun/web/src/components/lilith/NisabaPassageActions.tsx apps/oshun/web/src/components/lilith/NisabaPassageActions.test.tsx apps/oshun/web/e2e/search-saved-and-recent.spec.ts WALKTHROUGH/journeys/search-explore-deep-read-library-save.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm exec prettier --write apps/oshun/bff/src/library/saved-items-store.ts apps/oshun/bff/src/library/saved-items-store.test.ts apps/oshun/bff/src/routes/library-saved-items.test.ts apps/oshun/web/e2e/search-saved-and-recent.spec.ts — passed.
  • pnpm --dir apps/oshun/web exec vitest run src/components/domains/__tests__/NisabaSurface.test.tsx src/components/lilith/NisabaPassageActions.test.tsx — 2 test files passed, 54 tests passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/library/saved-items-store.test.ts src/routes/library-saved-items.test.ts — 2 test files passed, 20 tests passed.
  • pnpm --dir apps/oshun/web typecheck — passed (tsc --noEmit).
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/library/saved-items-store.ts apps/oshun/bff/src/library/saved-items-store.test.ts apps/oshun/bff/src/routes/library-saved-items.test.ts apps/oshun/web/src/design-system/lilith/primitives.tsx apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/domains/__tests__/NisabaSurface.test.tsx apps/oshun/web/src/components/lilith/NisabaPassageActions.tsx apps/oshun/web/src/components/lilith/NisabaPassageActions.test.tsx apps/oshun/web/e2e/search-saved-and-recent.spec.ts — passed; ESLint emitted the repo's existing pages directory notice.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gates before focused Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed at or above 10 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "saving a real BFF search result hydrates" — 1 passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 9 passed.

56. 2026-06-24 Search non-Nisaba destination templates addendum#

Closed the remaining real-BFF search destination-content gap for the currently walkable non-Nisaba templates in search-explore-deep-read-library-save. search-saved-and-recent now clicks live /v1/search rows for Tara practice, Nyx sky-event, and Metis course results and asserts the destination surface hydrates past the hub root:

  • tara-practice-box-breathing opens /domains/tara?origin=explore&path=/meditate/session/tara-practice-box-breathing and renders the immersive Tara session player with active controls.
  • nyx-quadrantids-2026 opens the canonical Nyx event detail route /events/quadrantid-meteor-shower-peak and renders the event-detail id, title, observation plan, and Tara recommendation lane. The live BFF seed target was corrected from the stale /events/nyx-quadrantids-2026 slug to the event model's real slug, with a BFF route test locking the contract.
  • crs-002 opens /domains/metis?origin=explore&path=/courses/crs-002 and renders the Metis study destination preview with the study card in active state.

The journey remains partial for broader non-Nisaba save-producer sync and remaining object-template save/resume permutations beyond clicked destination surfaces.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/universal-search-seeds.ts apps/oshun/web/e2e/search-saved-and-recent.spec.ts WALKTHROUGH/journeys/search-explore-deep-read-library-save.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm exec prettier --write apps/oshun/bff/src/__tests__/search-route.test.ts apps/oshun/web/e2e/search-saved-and-recent.spec.ts WALKTHROUGH/journeys/search-explore-deep-read-library-save.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/search-route.test.ts — 1 test file passed, 12 tests passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/universal-search-seeds.ts apps/oshun/bff/src/__tests__/search-route.test.ts apps/oshun/web/e2e/search-saved-and-recent.spec.ts — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gates before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed at or above 9.8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "Tara practice|Nyx sky-event|Metis course" — 3 passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 12 passed.

57. 2026-06-24 Themis upheld-appeal addendum#

Closed the themis-assessment-appeal upheld-branch HTTP gap without over-claiming the still-unbuilt /operator/metis review UI. The real-BFF Playwright integrity-appeal suite now seeds a violation verdict, opens an appeal, performs a repeat operator adjudication with a matching teacherOverride.verdictClass, asserts status: "upheld", verdictClass: "violation", decision.decidedBy: "teacher-op", recommendedAction: "score_hold", audit rationale read-back, and appeal resolution-note persistence. The BFF route test locks the same canonical bridge behavior through Fastify injection. Customer assessment-submit adjudication, upheld-without-teacherOverride, the operator review UI, gradebook read-back, and /messages notification remain open.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/integrity-appeal.spec.ts apps/oshun/bff/src/__tests__/metis-integrity-route.test.ts WALKTHROUGH/journeys/themis-assessment-appeal.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/metis-integrity-route.test.ts — 7 passed.
  • Resource gate before Playwright/typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed at or above 8.9 GiB.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/__tests__/metis-integrity-route.test.ts apps/oshun/web/e2e/integrity-appeal.spec.ts — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • pnpm --dir apps/oshun/web exec playwright test e2e/integrity-appeal.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 11 passed.

57.1. 2026-06-25 Themis appeal-disabled addendum#

Closed the themis-assessment-appeal cleared-verdict appeal-policy gap without over-claiming the still-unbuilt /operator/metis review UI. The canonical bridge now fails closed when decision.appealPath.appealAllowed === false, the BFF maps that direct learner appeal attempt to 409 academic_integrity_appeal_not_allowed, and the customer /integrity/<verdictId>/appeal route renders the Appeal closed state instead of mounting a form. The real-BFF Playwright integrity-appeal suite now seeds a teacher-cleared verdict, asserts the false appeal path, proves the direct POST rejection, and verifies the blocked browser render. Customer assessment-submit adjudication, upheld-without-teacherOverride, the operator review UI, gradebook read-back, and /messages notification remain open.

Verification:

  • pnpm exec vitest run libs/metis/integrations/src/themis-canonical-wiring.test.ts — 9 passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/metis-integrity-route.test.ts — 8 passed.
  • Resource gate before typecheck/Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed at or above 8.5 GiB.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/integrity-appeal.spec.ts --project=chromium — 12 passed.

58. 2026-06-24 Tenant SSO operator probe UI addendum#

Closed the /operator/sso test-connection verdict UI gap in tenant-sso-config-saml-oidc-claim-mapping without over-claiming the separate tenant-admin sandbox sign-in app. The new real-infra Playwright leg starts a local OIDC discovery/JWKS server, creates two real SSO connections through POST /v1/admin/sso, opens the shipped operator SSO editor, clicks each row's Test action, and asserts the UI renders both the reachable verdict (Reachable, oidc-discovery: ok, oidc-jwks: ok) and the fail-closed JWKS verdict (Failed, oidc-discovery: ok, oidc-jwks: fail) returned by the real POST /v1/admin/sso/:id/test BFF route.

The journey remains partial for the tenant-admin metadata import UI, per-tenant auth-policy panel, tenant-admin sandbox account sign-in per-verdict UI, draft→enabled state machine, and external IdP sign-in.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/tenant-sso-config.spec.ts — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/tenant-sso-config.spec.ts — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During the full file run, available memory stayed at or above 9.7 GiB and returned to 13 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-sso-config.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list --grep "sandbox probe UI" — 1 passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-sso-config.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 10 passed.

59. 2026-06-24 Sophia cautious/partial grounding addendum#

Closed the sophia-grounded-answer limited-support branch gap for the real /v1/sophia/answer pipeline. sophia-answer-bff.spec.ts now drives the live BFF with the in-process Nisaba corpus query spokes, which returns the single Tao Te Ching passage search-nisaba-passage-emptiness, and asserts confidence: "cautious", groundingState: "partial", abstained: false, a retrieved claim, and a claim-to-citation map that references only the returned citation. sophia-grounded-answer-page.spec.ts submits the same query through the shipped /sophia form and verifies the visible partial state, one witness, and one retrieved claim row.

The journey remains partial for contradiction loop UI, pin-to-library, synthetic/retracted/cross-tenant failure modes, real /v1/search UI query, Nisaba citation handoff, and labels beyond the current extractive retrieved path.

Verification:

  • psql availability check — /usr/bin/psql, PostgreSQL 16.14.
  • pnpm exec prettier --write apps/oshun/web/e2e/sophia-answer-bff.spec.ts apps/oshun/web/e2e/sophia-grounded-answer-page.spec.ts WALKTHROUGH/journeys/sophia-grounded-answer.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/sophia-answer-bff.spec.ts apps/oshun/web/e2e/sophia-grounded-answer-page.spec.ts — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • Resource gate before typecheck/Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed around 10 GiB.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/sophia-answer-bff.spec.ts e2e/sophia-grounded-answer-page.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 7 passed.

60. 2026-06-24 Tenant SCIM Groups addendum#

Closed the tenant-bulk-member-invite-scim SCIM Groups gap for the local real-infra BFF path. The BFF now exposes /v1/scim/v2/Groups behind the same SCIM bearer and explicit tenant guards as /Users, persists group rows in Postgres (goal3_stub_scim_group), and synchronizes group membership into each affected persisted SCIM user's groups array.

tenant-member-invite-scim.spec.ts now creates two real SCIM users, creates a SCIM group with the first member, verifies that /Users/:id reflects the group assignment, patches the group to move membership to the second user, verifies the first user loses the group and the second gains it, lists the group, deletes it, verifies the group 404, verifies the second user loses the group, and reads the Postgres group tombstone row.

The journey remains partial for CSV bulk import, SCIM Bulk, IdP callback, outbound invite email/first-login, operator-table refresh from IdP-created rows, and audit reconciliation.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/domain-stubs-postgres.test.ts apps/oshun/bff/src/__tests__/domain-stubs-route.test.ts apps/oshun/bff/src/routes/domain-stubs.ts apps/oshun/bff/src/routes/domain-stubs-postgres.ts apps/oshun/web/e2e/tenant-member-invite-scim.spec.ts — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/domain-stubs.ts apps/oshun/bff/src/routes/domain-stubs-postgres.ts apps/oshun/bff/src/routes/domain-stubs-postgres.test.ts apps/oshun/bff/src/__tests__/domain-stubs-route.test.ts apps/oshun/web/e2e/tenant-member-invite-scim.spec.ts — passed with existing non-null assertion warnings in domain-stubs.ts.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/domain-stubs-route.test.ts — 90 passed.
  • OSHUN_TEST_POSTGRES_URL=postgresql://oshun:oshun_dev@127.0.0.1:5432/oshun_dev pnpm --dir apps/oshun/bff exec vitest run src/routes/domain-stubs-postgres.test.ts — 25 passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed around 10 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-member-invite-scim.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 7 passed.

61. 2026-06-24 Tenant SCIM Bulk addendum#

Closed the tenant-bulk-member-invite-scim SCIM Bulk gap for the local real-infra BFF path. The BFF now exposes /v1/scim/v2/Bulk behind the same SCIM bearer and explicit tenant guards as /Users and /Groups, validates the BulkRequest schema marker when supplied, dispatches ordered Users/Groups POST/PATCH/DELETE operations through the existing Postgres-backed SCIM helpers, honors failOnErrors, and returns a SCIM BulkResponse operation list with per-operation statuses.

tenant-member-invite-scim.spec.ts now creates two real SCIM users and one real SCIM group through one BulkRequest, patches the first user in the same ordered batch, reads users/groups back to prove membership fan-out and suspension state, then deletes the group and first user through a second BulkRequest. The spec verifies group tombstone behavior, live list omission after user tombstone, the remaining user's group cleanup, and the canonical v1_identity_scim_identity change log for the tombstoned user.

The journey remains partial for CSV bulk import, external IdP callback, outbound invite email/first-login, operator-table refresh from IdP-created rows, and audit reconciliation.

Verification:

  • psql availability check — /usr/bin/psql, PostgreSQL 16.14.
  • pnpm exec prettier --write apps/oshun/bff/src/routes/domain-stubs.ts apps/oshun/bff/src/__tests__/domain-stubs-route.test.ts apps/oshun/web/e2e/tenant-member-invite-scim.spec.ts WALKTHROUGH/journeys/tenant-bulk-member-invite-scim.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/domain-stubs.ts apps/oshun/bff/src/routes/domain-stubs-postgres.ts apps/oshun/bff/src/routes/domain-stubs-postgres.test.ts apps/oshun/bff/src/__tests__/domain-stubs-route.test.ts apps/oshun/web/e2e/tenant-member-invite-scim.spec.ts — passed with existing non-null assertion warnings in domain-stubs.ts.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/domain-stubs-route.test.ts — 91 passed.
  • OSHUN_TEST_POSTGRES_URL=postgresql://oshun:oshun_dev@127.0.0.1:5432/oshun_dev pnpm --dir apps/oshun/bff exec vitest run src/routes/domain-stubs-postgres.test.ts — 25 passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed at or above 9 GiB and returned to 13 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-member-invite-scim.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 8 passed.

62. 2026-06-25 Tenant SCIM audit-feed addendum#

Closed the local SCIM audit-event slice of tenant-bulk-member-invite-scim. Successful /v1/scim/v2/Users, /v1/scim/v2/Groups, and /v1/scim/v2/Bulk mutations now emit tenant.scim_provision.* events into the existing admin audit-event store with tenant id, SCIM external id, operation, status, resource type, and group membership payloads. The event feed is read through the real admin-scoped /v1/admin/audit-log/events route, not by inspecting the store directly.

tenant-member-invite-scim.spec.ts now verifies that the user lifecycle writes admin audit events for create, suspend, deactivate, and reactivate. The Bulk leg also reads back user and group audit events for ordered user create/suspend/ deactivate, group create/deactivate, and group-membership sync.

The journey remains partial for CSV bulk import, external IdP callback, outbound invite email/first-login, operator-table refresh from IdP-created rows, and the downstream role-assignment → IdP-callback → first-login audit-chain reconciliation.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/domain-stubs.ts apps/oshun/web/e2e/tenant-member-invite-scim.spec.ts WALKTHROUGH/journeys/tenant-bulk-member-invite-scim.md WALKTHROUGH/journeys/tenant-onboard.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/domain-stubs.ts apps/oshun/web/e2e/tenant-member-invite-scim.spec.ts — passed with existing non-null assertion warnings in domain-stubs.ts.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/domain-stubs-route.test.ts — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed within the safe range.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-member-invite-scim.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 8 passed.

63. 2026-06-25 Nyx calendar connector runtime addendum#

Closed the local admin-connector runtime slice of nyx-event-calendar-sync-reminder step 3. The Playwright BFF now boots with seeded OSHUN_CALENDAR_CONNECTORS: one valid Google connector and one Apple descriptor that is valid at the shared connector-contract layer but rejected by the BFF runtime as unsupported_provider because only the Google transport is implemented. The new real-HTTP Playwright leg proves the admin roster is secret-free, admin-gated, and includes both the live Google connector and the retained Apple skip reason.

The same spec drives the real admin import/export routes. Import reaches the Google transport path and returns a failed import run with a concrete no-refresh-token issue, not fabricated events. Export now returns structured 502 calendar_export_failed when provider credential resolution fails, while malformed export bodies still fail at 400 invalid_body.

The journey remains partial for true external Google/Apple/Outlook OAuth, provider webhook reconciliation, actual reminder dispatch/delivery, notification cold-start, quiet-hours dispatch deferral, richer event-metadata prefill, and an explicit observation-to-event back-link control.

Verification:

  • pnpm exec prettier --write apps/oshun/web/playwright.config.ts apps/oshun/web/e2e/calendar-connectors-bff.spec.ts apps/oshun/bff/src/routes/calendar-sync.ts apps/oshun/bff/src/routes/calendar-sync-route.test.ts WALKTHROUGH/journeys/nyx-event-calendar-sync-reminder.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md V1/AUDIT_2026-06-24.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/playwright.config.ts apps/oshun/web/e2e/calendar-connectors-bff.spec.ts apps/oshun/bff/src/routes/calendar-sync.ts apps/oshun/bff/src/routes/calendar-sync-route.test.ts — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/routes/calendar-sync-route.test.ts — 12 passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 12 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed around 13 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/calendar-connectors-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 2 passed.

64. 2026-06-25 Tenant OneRoster provisioning addendum#

Added a dedicated tenant-oneroster-roster-sync journey for the OneRoster leg in V1's tenant spine. The dry-run route now requires tenant-console admin scope instead of accepting anonymous requests, and the apply/commit route now rejects generic studio admins so roster imports stay scoped to admin:* or admin:workspace:tenant-console.

tenant-oneroster-provisioning-bff.spec.ts walks the local real-BFF API spine: dry-run 401/403/400, clean report, username-conflict and unknown-user conflict reporting, apply 401/403/201, commit list/read-back, duplicate commit 409, conflict apply 422 with no roster mutation, and malformed apply 400.

The journey remains partial for periodic SIS pulls, tenant-admin/operator diff UI, and Metis roster-card refresh. The current spec also covers tenant.oneroster.commit.applied audit-log read-back and duplicate/conflict no-phantom-audit guards.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/tenant-console/oneroster-route.ts apps/oshun/bff/src/routes/admin-oneroster-apply.ts apps/oshun/bff/src/tenant-console/oneroster-route.test.ts apps/oshun/bff/src/__tests__/admin-oneroster-apply-route.test.ts apps/oshun/web/e2e/tenant-oneroster-provisioning-bff.spec.ts WALKTHROUGH/journeys/tenant-oneroster-roster-sync.md WALKTHROUGH/journeys/README.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md — passed.
  • pnpm exec prettier --write WALKTHROUGH/results/tenant-oneroster-roster-sync.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/tenant-console/oneroster-route.ts apps/oshun/bff/src/routes/admin-oneroster-apply.ts apps/oshun/bff/src/tenant-console/oneroster-route.test.ts apps/oshun/bff/src/__tests__/admin-oneroster-apply-route.test.ts apps/oshun/web/e2e/tenant-oneroster-provisioning-bff.spec.ts — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/tenant-console/oneroster-route.test.ts src/__tests__/admin-oneroster-apply-route.test.ts src/tenant-console/oneroster-apply-store.test.ts — 12 passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed around 13 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-oneroster-provisioning-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 2 passed.

65. 2026-06-25 Tenant integrations API keys/webhooks addendum#

Added a dedicated tenant-integrations-api-keys-webhooks journey for the V1 section 20.6 tenant/operator integration-management leg. The local real-BFF spec now drives the integrations registry directly: platform-admin scope gates, snapshot read-back, API key create/rotate/revoke, raw-token non-leakage, duplicate revoke 409, malformed create 400, webhook create, signing-secret non-leakage, signed sandbox simulator delivery, inactive simulator failure without a signed request, non-sandbox simulator 409, connector upgrade, and audit-search read-back.

The first real-dev-infra run caught an implementation regression: admin search accepted an injected durable audit-events store at app registration but the route still searched the singleton in-memory store. admin-search now threads the injected store into universal search, and the route test suite includes a regression case where the event exists only in the injected store.

At the time of this 2026-06-25 pass, the journey remained partial for tenant-admin UI controls, API-key-authenticated downstream API calls, live outbound delivery retry/dead-letter workers, real connector health probes, and partner endpoint receipt. The downstream API-key-authenticated request gap was closed in the later 2026-06-26 addendum.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/tenant-integrations-api-keys-webhooks-bff.spec.ts WALKTHROUGH/journeys/tenant-integrations-api-keys-webhooks.md WALKTHROUGH/journeys/README.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/tenant-integrations-api-keys-webhooks.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md — passed.
  • pnpm exec prettier --write apps/oshun/bff/src/routes/admin-search.ts apps/oshun/bff/src/__tests__/admin-search-route.test.ts — passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/admin-search.ts apps/oshun/bff/src/__tests__/admin-search-route.test.ts apps/oshun/web/e2e/tenant-integrations-api-keys-webhooks-bff.spec.ts — passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-search-route.test.ts src/__tests__/admin-integrations-registry-route.test.ts src/admin/admin-integrations-registry-store.test.ts — 38 passed.
  • pnpm --dir apps/oshun/bff typecheck — passed.
  • pnpm --dir apps/oshun/web typecheck — passed.
  • python3 V5/tools/validate-v5-docs.py — passed.
  • git diff --check — passed.
  • Resource gate before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed within the safe range.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-integrations-api-keys-webhooks-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list — 2 passed.

66. 2026-06-25 Tenant bulk operations/export addendum#

Added a dedicated tenant-bulk-operations-export journey for the V1 admin bulk-operations/export leg in V1/features/admin-products.md. The local real-BFF spec drives the platform API directly: operation/export 401/403 gates, users bulk operation draft, validation, dry-run plan, staged commit through the real users commit executor, row-level commit outcomes, duplicate commit 409, validation-error dry-run blocking, per-operator isolation, content JSON export manifest creation/read/verify, unsupported export matrix 400, mismatched record kind 422, and audit-search read-back.

The journey remains partial for tenant/operator upload-preview UI, CSV parsing/resumable upload, real per-row residency metadata checks, export download/retention/approval handoff, and commit executors for rosters, content, taxonomy, and persona assignments.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/tenant-bulk-operations-export-bff.spec.ts WALKTHROUGH/journeys/tenant-bulk-operations-export.md WALKTHROUGH/journeys/README.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/tenant-bulk-operations-export.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed.
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/tenant-bulk-operations-export-bff.spec.ts
    • passed.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-bulk-operations-route.test.ts src/__tests__/admin-bulk-exports-route.test.ts src/admin/admin-bulk-operations-store.test.ts src/admin/admin-bulk-exports-store.test.ts
    • 40 passed.
  • pnpm --dir apps/oshun/bff typecheck - passed.
  • pnpm --dir apps/oshun/web typecheck - passed.
  • python3 V5/tools/validate-v5-docs.py - passed.
  • git diff --check - passed.
  • Resource gate before Playwright: 15 GiB RAM, 12 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers. During focused Playwright, available memory stayed within the safe range.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-bulk-operations-export-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 2 passed.

67. 2026-06-25 Profile notifications index handoff addendum#

Closed a walkthrough/test gap in the messages quiet-hours journey: the read-only /profile/notifications summary now exposes a clear handoff into the mutable delivery editor at /profile?path=notifications. The focused browser coverage loads the summary against the real /v1/profile/notifications BFF route, asserts channel/category rows from that response, follows "Change delivery settings", and reveals the quiet-hours time inputs in the shipped Profile settings editor.

The journey remains partial for deploy/external-provider legs: WhatsApp Business opt-in, real SMS OTP delivery, email magic-link delivery, richer consent panels, Lilith tone-band persona-policy sends, provider-native crisis handling beyond the local message-center dispatch seam, and full revocation cascades.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/profile/notifications/page.tsx apps/oshun/web/e2e/profile-notifications-index.spec.ts
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed

141. 2026-06-26 Themis appeal audit detail for learners#

Closed the remaining learner-facing evidence/rationale gap on /integrity/<verdictId>/appeal. The appeal workspace now renders the learner-safe Themis audit record before the filing form, including decision rationale, signal and evidence counts, policy binding, human-review state, generated-text signal metadata, learner-visible evidence excerpts, and classifier provenance. Operator-only evidence remains filtered out of the customer view. The Metis assessment-submit journey now follows a suspicious submission into the same appeal workspace and verifies the audit detail through the real BFF-created verdict.

Verification:

  • which psql && psql --version
    • passed: /usr/bin/psql, psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/integrity/IntegrityAppealWorkspace.tsx apps/oshun/web/e2e/integrity-appeal.spec.ts apps/oshun/web/e2e/metis-assessment-submit.spec.ts
    • passed; emitted the existing Next pages-directory warning
  • Resource gate before focused typecheck / Playwright
    • before browser verification: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 9.7 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/integrity-appeal.spec.ts e2e/metis-assessment-submit.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 17 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/integrity/IntegrityAppealWorkspace.tsx apps/oshun/web/e2e/integrity-appeal.spec.ts apps/oshun/web/e2e/metis-assessment-submit.spec.ts WALKTHROUGH/customer/08-metis/integrity-verdictId-appeal.md WALKTHROUGH/journeys/themis-assessment-appeal.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

257. 2026-07-03 Studio Audit Compliance Surfaces real-BFF coverage#

Closed the /studio/audit-compliance-surfaces walkthrough gap where the old runtime sweep proved only render/data health and the audit-chain lane states, quick actions, BFF gates, pending behavior, compromised-chain outcomes, and mobile containment remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/studio/audit-chain catalog and verify calls to the real local BFF with explicit studio-admin or non-admin dev bearer scopes, and captures browser request bodies and auth headers while the live verifier recomputes FNV-backed content hashes and re-links the chain.

The suite verifies anonymous redirect, studio-admin catalog load, all eight quick-action targets, 44 px controls, intact-chain verification, tamper detection, broken-link and sequence-gap detection, client-only malformed JSON with zero POSTs, live BFF 400 details, verify-network failure, malformed verify success, pending-submit lockout, catalog loading, 503 catalog failure, malformed catalog failure, catalog-network failure, non-admin fail-closed auth, direct BFF auth/schema gates, and mobile containment without horizontal overflow. The result table scroller is focusable and named so horizontally scrollable audit rows remain keyboard-accessible.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAuditComplianceSurfacesWorkspace.tsx apps/oshun/web/src/app/studio/audit-compliance-surfaces/page.tsx apps/oshun/web/e2e/studio-audit-compliance-surfaces.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAuditComplianceSurfacesWorkspace.tsx apps/oshun/web/src/app/studio/audit-compliance-surfaces/page.tsx apps/oshun/web/e2e/studio-audit-compliance-surfaces.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm exec prettier --write WALKTHROUGH/studio/governance/studio-audit-compliance-surfaces.md
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAuditComplianceSurfacesWorkspace.test.tsx src/components/__tests__/StudioAuditComplianceSurfacesWorkspace.integration.test.tsx
    • passed: 2 files, 6 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-studio-audit-chain-route.test.ts
    • passed: 1 file, 6 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed

280. 2026-07-04 Studio Hathor Narrative Structure Analysis real-BFF coverage#

Closed the /studio/hathor/narrative-structure-analysis walkthrough gap where the old runtime sweep proved only route render/data health and the live Ink/Yarn/JSON export-format catalog, admin-scope gates, seeded and edited dialogue validation journeys, route map, quick actions, touch targets, failure states, pending lockout, mobile containment, malformed payload handling, and BFF auth/schema gates remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/hathor/narrative-structure-analysis catalog requests and /v1/admin/hathor/narrative-structure-analysis/validate POSTs to the real local BFF with Hathor-admin or non-admin browser bearers, and captures auth headers and request bodies while the live @hathor/narrative validators compute per-format Ink / Yarn / JSON readiness warnings.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact Ink/Yarn/JSON format exposure, default form state, 44 px textarea/submit and quick actions, full route-map ordering, exact real-BFF output for the seeded dialogue (ink EMPTY_CHOICE, yarn ready, json ready), exact edited complete-dialogue all-ready output, missing-entry NO_ENTRY_NODE output for Ink and Yarn only, self-cycle CYCLE_DETECTED output for Yarn, browser bearer propagation, client-only malformed JSON and non-object rejection with zero POSTs, BFF each node needs id, type, and optional choices:[{targetNodeId}] detail surfacing, malformed 200 result fail-closed behavior, validation transport failure messaging, loading state, 503 catalog failure, malformed catalog failure, non-admin fail-closed auth, pending-submit lockout, mobile no-overflow containment, scoped axe scanning for the workspace/route map/actions, and direct BFF auth/schema gates. The page now exposes stable route-map and quick-action selectors, pending form/submit selectors, touch-sized controls, catalog format selectors, per-format warning-count/code selectors, and fail-closed client parsing for malformed catalog or validate-success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorNarrativeStructureAnalysisWorkspace.tsx apps/oshun/web/src/app/studio/hathor/narrative-structure-analysis/page.tsx apps/oshun/web/src/components/__tests__/StudioHathorNarrativeStructureAnalysisWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorNarrativeStructureAnalysisWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorNarrativeStructureAnalysisPage.test.tsx apps/oshun/web/e2e/studio-hathor-narrative-structure-analysis.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorNarrativeStructureAnalysisWorkspace.tsx apps/oshun/web/src/app/studio/hathor/narrative-structure-analysis/page.tsx apps/oshun/web/e2e/studio-hathor-narrative-structure-analysis.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorNarrativeStructureAnalysisWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorNarrativeStructureAnalysisWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorNarrativeStructureAnalysisPage.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorNarrativeStructureAnalysisRouteMap.test.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorNarrativeStructureAnalysisWorkspace.test.tsx src/components/__tests__/StudioHathorNarrativeStructureAnalysisWorkspace.integration.test.tsx src/components/__tests__/StudioHathorNarrativeStructureAnalysisPage.test.tsx src/components/__tests__/StudioHathorNarrativeStructureAnalysisRouteMap.test.ts
    • passed: 4 files, 12 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-narrative-structure-analysis-route.test.ts
    • passed: 1 file, 7 tests
  • Resource gate before web typecheck and focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 8.1 GiB available and recovered to 13 GiB available afterward.
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-narrative-structure-analysis.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed

279. 2026-07-03 Studio Hathor Narrative Export real-BFF coverage#

Closed the /studio/hathor/narrative-export walkthrough gap where the old runtime sweep proved only route render/data health and the live segment-type catalog, admin-scope gates, seeded and edited narrative export estimate journeys, route map, quick actions, touch targets, failure states, pending lockout, mobile containment, malformed payload handling, and BFF auth/schema gates remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/hathor/narrative-export catalog requests and /v1/admin/hathor/narrative-export/estimate POSTs to the real local BFF with Hathor-admin or non-admin browser bearers, and captures auth headers and request bodies while the live estimator computes spoken runtime, page count, and per-type word/segment breakdown.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact segment type exposure, default form state, 44 px textarea/submit and quick actions, full route-map ordering, exact real-BFF output for the seeded payload (500 words, 200s, 2 pages, dialogue/narration/choice breakdown), exact edited stage-direction output (300 words, 150s, 2 pages, narration/choice/ stage_direction breakdown), browser bearer propagation, client-only malformed JSON and non-object rejection with zero POSTs, BFF duplicate segmentId 'x' detail surfacing, malformed 200 result fail-closed behavior, estimate transport failure messaging, loading state, 503 catalog failure, malformed catalog failure, non-admin fail-closed auth, pending-submit lockout, mobile no-overflow containment, scoped axe scanning for the workspace/route map/actions, and direct BFF auth/schema gates. The page now exposes stable route-map and quick-action selectors, pending form/submit selectors, touch-sized controls, and fail-closed client parsing for malformed catalog or estimate-success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorNarrativeExportWorkspace.tsx apps/oshun/web/src/app/studio/hathor/narrative-export/page.tsx apps/oshun/web/src/components/__tests__/StudioHathorNarrativeExportWorkspace.live.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorNarrativeExportPage.test.tsx apps/oshun/web/e2e/studio-hathor-narrative-export.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorNarrativeExportWorkspace.tsx apps/oshun/web/src/app/studio/hathor/narrative-export/page.tsx apps/oshun/web/e2e/studio-hathor-narrative-export.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorNarrativeExportWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorNarrativeExportWorkspace.live.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorNarrativeExportIntegration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorNarrativeExportPage.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorNarrativeExportRouteMap.test.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorNarrativeExportWorkspace.test.tsx src/components/__tests__/StudioHathorNarrativeExportWorkspace.live.test.tsx src/components/__tests__/StudioHathorNarrativeExportIntegration.test.tsx src/components/__tests__/StudioHathorNarrativeExportPage.test.tsx src/components/__tests__/StudioHathorNarrativeExportRouteMap.test.ts
    • passed: 5 files, 26 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-narrative-export-route.test.ts
    • passed: 1 file, 5 tests
  • Resource gate before web typecheck and focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 9.0 GiB available and recovered to 13 GiB available after the first assertion-correction run.
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-narrative-export.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed

278. 2026-07-03 Studio Hathor Journal and Codex real-BFF coverage#

Closed the /studio/hathor/journal-and-codex walkthrough gap where the old runtime sweep proved only route render/data health and the live codex resolver catalog, admin-scope gates, default and edited resolve journeys, route map, quick actions, touch targets, failure states, pending lockout, mobile containment, malformed payload handling, and BFF auth/schema gates remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/hathor/journal-and-codex catalog requests and /v1/admin/hathor/journal-and-codex/resolve POSTs to the real local BFF with Hathor-admin or non-admin browser bearers, and captures auth headers and request bodies while the live codex unlock resolver computes entry unlock state, completion, missing flags, and next unlockable entries.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact unlock_state/completion/next_unlockable analysis exposure, default form state, 44 px textarea/submit and quick actions, full route-map ordering, exact real-BFF output for the seeded payload (3/4 unlocked, 75%, next e4 (secret_ending)), exact empty-discovery output (1/4 unlocked, next e2 and e4, e3 missing two flags), duplicate required/discovered flag de-duplication and sorted result rows, browser bearer propagation, client-only malformed JSON and non-object rejection with zero POSTs, BFF duplicate entryId 'e' detail surfacing, malformed 200 result fail-closed behavior, resolve transport failure messaging, loading state, 503 catalog failure, malformed catalog failure, non-admin fail-closed auth, pending-submit lockout, mobile no-overflow containment, scoped axe scanning for the workspace/route map/actions, and direct BFF auth/schema gates. The page now exposes stable route-map and quick-action selectors, pending form/submit selectors, touch-sized controls, and fail-closed client parsing for malformed catalog or resolve-success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorJournalAndCodexWorkspace.tsx apps/oshun/web/src/app/studio/hathor/journal-and-codex/page.tsx apps/oshun/web/src/components/__tests__/StudioHathorJournalAndCodexWorkspace.live.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorJournalAndCodexPage.test.tsx apps/oshun/web/e2e/studio-hathor-journal-and-codex.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorJournalAndCodexWorkspace.tsx apps/oshun/web/src/app/studio/hathor/journal-and-codex/page.tsx apps/oshun/web/e2e/studio-hathor-journal-and-codex.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorJournalAndCodexWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorJournalAndCodexWorkspace.live.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorJournalAndCodexIntegration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorJournalAndCodexPage.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorJournalAndCodexRouteMap.test.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorJournalAndCodexWorkspace.test.tsx src/components/__tests__/StudioHathorJournalAndCodexWorkspace.live.test.tsx src/components/__tests__/StudioHathorJournalAndCodexIntegration.test.tsx src/components/__tests__/StudioHathorJournalAndCodexPage.test.tsx src/components/__tests__/StudioHathorJournalAndCodexRouteMap.test.ts
    • passed: 5 files, 24 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-journal-and-codex-route.test.ts
    • passed: 1 file, 6 tests
  • Resource gate before web typecheck and focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 8.9 GiB available and recovered to 13 GiB available afterward.
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-journal-and-codex.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 12 passed

277. 2026-07-03 Studio Hathor Lore Compilation for Engines real-BFF coverage#

Closed the /studio/hathor/lore-compilation-for-engines walkthrough gap where the old runtime sweep proved only route render/data health and the live engine-format catalog, admin-scope gates, JSON/YAML/SQLite compile journeys, route map, quick actions, touch targets, failure states, pending lockout, mobile containment, malformed payload handling, and BFF auth/schema gates remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/hathor/lore-compilation-for-engines catalog requests and /v1/admin/hathor/lore-compilation-for-engines/compile POSTs to the real local BFF with Hathor-admin or non-admin browser bearers, and captures auth headers and request bodies while the live @hathor/lore-compiler QuestCompiler exports quest batches.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact json/yaml/xml/binary/sqlite format exposure, default form state, 44 px textarea/select/submit and quick actions, full route-map ordering, exact real-BFF output for the seeded JSON quest (QUEST_q1, one objective, one NPC), exact YAML output for an edited three-quest batch, exact SQLite output including the hathor_quests table and escaped Cartographer''s Seal, browser bearer propagation, client-only malformed JSON and empty-array rejection with zero POSTs, BFF invalid_quest reason surfacing, malformed 200 result fail-closed behavior, compile transport failure messaging, loading state, 503 catalog failure, malformed catalog failure, non-admin fail-closed auth, pending-submit lockout, mobile no-overflow containment, scoped axe scanning for the workspace/route map/actions, and direct BFF auth/schema gates. The page now exposes stable route-map and quick-action selectors, pending form/submit selectors, touch-sized controls, and fail-closed client parsing for malformed catalog or compile-success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorLoreCompilationForEnginesWorkspace.tsx apps/oshun/web/src/app/studio/hathor/lore-compilation-for-engines/page.tsx apps/oshun/web/e2e/studio-hathor-lore-compilation-for-engines.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorLoreCompilationForEnginesWorkspace.tsx apps/oshun/web/src/app/studio/hathor/lore-compilation-for-engines/page.tsx apps/oshun/web/e2e/studio-hathor-lore-compilation-for-engines.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorLoreCompilationForEnginesWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorLoreCompilationForEnginesWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorLoreCompilationForEnginesPage.test.tsx --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorLoreCompilationForEnginesWorkspace.test.tsx src/components/__tests__/StudioHathorLoreCompilationForEnginesWorkspace.integration.test.tsx src/components/__tests__/StudioHathorLoreCompilationForEnginesPage.test.tsx src/components/__tests__/StudioHathorLoreCompilationForEnginesRouteMap.test.ts
    • passed: 4 files, 8 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-lore-compilation-for-engines-route.test.ts
    • passed: 1 file, 6 tests
  • Resource gate before web typecheck and focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 8.4 GiB available.
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-lore-compilation-for-engines.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 12 passed

276. 2026-07-03 Studio Hathor Visual Storyboarding real-BFF coverage#

Closed the /studio/hathor/visual-storyboarding walkthrough gap where the old runtime sweep proved only route render/data health and the live storyboard catalog, admin-scope gates, default and edited linting journeys, route map, quick actions, touch targets, failure states, pending lockout, mobile containment, malformed payload handling, and BFF auth/schema gates remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/hathor/visual-storyboarding catalog requests and /v1/admin/hathor/visual-storyboarding/validate POSTs to the real local BFF with Hathor-admin or non-admin browser bearers, and captures auth headers and request bodies while the live @hathor/pre-production storyboard linter evaluates empty sequences, missing frame descriptions/actions, and missing frame locations.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact check/severity taxonomy exposure, default form state, 44 px textarea/submit and quick actions, full route-map ordering, exact real-BFF output for the seeded storyboard (2 warnings, 1 info), exact clean output for an edited complete storyboard, exact location-info output for an edited board with a single frame missing location, browser bearer propagation, client-only malformed JSON rejection with zero POSTs, BFF storyboard.frames must be an array detail surfacing, malformed 200 result fail-closed behavior, validate transport failure messaging, loading state, 503 catalog failure, malformed catalog failure, non-admin fail-closed auth, pending-submit lockout, mobile no-overflow containment, scoped axe scanning for the workspace/route map/actions, and direct BFF auth/schema gates. The page now exposes stable route-map and quick-action selectors, pending form/submit selectors, touch-sized controls, and fail-closed client parsing for malformed catalog or validation-success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorVisualStoryboardingWorkspace.tsx apps/oshun/web/src/app/studio/hathor/visual-storyboarding/page.tsx apps/oshun/web/e2e/studio-hathor-visual-storyboarding.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorVisualStoryboardingWorkspace.tsx apps/oshun/web/src/app/studio/hathor/visual-storyboarding/page.tsx apps/oshun/web/e2e/studio-hathor-visual-storyboarding.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorVisualStoryboardingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorVisualStoryboardingWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorVisualStoryboardingPage.test.tsx --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorVisualStoryboardingWorkspace.test.tsx src/components/__tests__/StudioHathorVisualStoryboardingWorkspace.integration.test.tsx src/components/__tests__/StudioHathorVisualStoryboardingPage.test.tsx src/components/__tests__/StudioHathorVisualStoryboardingRouteMap.test.ts
    • passed: 4 files, 8 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-visual-storyboarding-route.test.ts
    • passed: 1 file, 7 tests
  • Resource gate before web typecheck and focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 7.8 GiB available even after another checkout started a separate Nx typecheck.
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-visual-storyboarding.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 12 passed

275. 2026-07-03 Studio Hathor Pre-Production Project Management real-BFF coverage#

Closed the /studio/hathor/pre-production-project-management walkthrough gap where the old runtime sweep proved only route render/data health and the live project-health category catalog, admin-scope gates, default and edited scoring journeys, route map, quick actions, touch targets, failure states, pending lockout, mobile containment, malformed payload handling, and BFF auth/schema gates remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/hathor/pre-production-project-management catalog requests and /v1/admin/hathor/pre-production-project-management/assess POSTs to the real local BFF with Hathor-admin or non-admin browser bearers, and captures auth headers and request bodies while the live @hathor/pre-production project-health scorer evaluates blocked-task and category-imbalance deductions.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact 17-category taxonomy exposure, default form state, 44 px textarea/submit and quick actions, full route-map ordering, exact real-BFF output for the seeded 5-task board with one blocked task (96 / 100), exact full-health output for an edited 3-task unblocked board (100 / 100), exact imbalance output for an edited 13-task lopsided board (90 / 100), browser bearer propagation, client-only malformed task-line rejection with zero POSTs, BFF each task needs taskId, a known category, and a status detail surfacing, malformed 200 result fail-closed behavior, assess transport failure messaging, loading state, 503 catalog failure, malformed catalog failure, non-admin fail-closed auth, pending-submit lockout, mobile no-overflow containment, scoped axe scanning for the workspace/route map/actions, and direct BFF auth/schema gates. The page now exposes stable route-map and quick-action selectors, visible catalog readiness, pending form/submit selectors, touch-sized controls, and fail-closed client parsing for malformed catalog or scoring-success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorPreProductionProjectManagementWorkspace.tsx apps/oshun/web/src/app/studio/hathor/pre-production-project-management/page.tsx apps/oshun/web/e2e/studio-hathor-pre-production-project-management.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorPreProductionProjectManagementWorkspace.tsx apps/oshun/web/src/app/studio/hathor/pre-production-project-management/page.tsx apps/oshun/web/e2e/studio-hathor-pre-production-project-management.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorPreProductionProjectManagementWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorPreProductionProjectManagementWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorPreProductionProjectManagementPage.test.tsx --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorPreProductionProjectManagementWorkspace.test.tsx src/components/__tests__/StudioHathorPreProductionProjectManagementWorkspace.integration.test.tsx src/components/__tests__/StudioHathorPreProductionProjectManagementPage.test.tsx src/components/__tests__/StudioHathorPreProductionProjectManagementRouteMap.test.ts
    • passed: 4 files, 8 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-pre-production-project-management-route.test.ts
    • passed: 1 file, 7 tests
  • Resource gate before web typecheck and focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 9.2 GiB available.
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-pre-production-project-management.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 12 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 13 GiB available, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process.
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

274. 2026-07-03 Studio Hathor Economy Modeling real-BFF coverage#

Closed the /studio/hathor/economy-modeling walkthrough gap where the old runtime sweep proved only route render/data health and the live economy catalog, admin-scope gates, default and edited pricing journeys, route map, quick actions, touch targets, failure states, pending lockout, mobile containment, malformed payload handling, and BFF auth/schema gates remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/hathor/economy-simulation catalog requests and /v1/admin/hathor/economy-simulation/price POSTs to the real local BFF with Hathor-admin or non-admin browser bearers, and captures auth headers and request bodies while the live @hathor/domain-models resource pricing model evaluates prices and sensitivity curves.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact catalog summary 11 resource categories · 6 rarities, default form state, 44 px textarea/submit and quick actions, full route-map ordering, exact real-BFF output for the seeded luxury / rare resource with quality multiplier 1.25, exact real-BFF output for an edited scarce magical / legendary resource, browser bearer propagation, client-only malformed JSON with zero POSTs, BFF rarity must be a known rarity detail surfacing, malformed 200 result fail-closed behavior, price transport failure messaging, loading state, 503 catalog failure, malformed catalog failure, non-admin fail-closed auth, pending-submit lockout, mobile no-overflow containment, scoped axe scanning for the workspace/route map/actions, and direct BFF auth/schema gates. The page now exposes stable route-map and quick-action selectors, visible catalog readiness, pending form/submit selectors, touch-sized controls, and fail-closed client parsing for malformed catalog or pricing-success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorEconomyModelingWorkspace.tsx apps/oshun/web/src/app/studio/hathor/economy-modeling/page.tsx apps/oshun/web/e2e/studio-hathor-economy-modeling.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorEconomyModelingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorEconomyModelingWorkspace.integration.test.tsx
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorEconomyModelingWorkspace.tsx apps/oshun/web/src/app/studio/hathor/economy-modeling/page.tsx apps/oshun/web/e2e/studio-hathor-economy-modeling.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorEconomyModelingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorEconomyModelingWorkspace.integration.test.tsx --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorEconomyModelingWorkspace.test.tsx src/components/__tests__/StudioHathorEconomyModelingWorkspace.integration.test.tsx
    • passed: 2 files, 6 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-economy-simulation-route.test.ts
    • passed: 1 file, 7 tests
  • Resource gate before web typecheck and focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 9.3 GiB available.
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-economy-modeling.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 13 GiB available, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process.
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

273. 2026-07-03 Studio Hathor Culture Modeling real-BFF coverage#

Closed the /studio/hathor/culture-modeling walkthrough gap where the old runtime sweep proved only route render/data health and the live culture catalog, admin-scope gates, default and edited compatibility journeys, route map, quick actions, touch targets, failure states, pending lockout, mobile containment, malformed payload handling, and BFF auth/schema gates remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/hathor/culture-evolution-simulation catalog requests and /v1/admin/hathor/culture-evolution-simulation/assess POSTs to the real local BFF with Hathor-admin or non-admin browser bearers, and captures auth headers and request bodies while the live @hathor/domain-models compatibility and social-analysis functions evaluate culture pairs.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact catalog summary 13 social structures · 5 attitudes, default form state, 44 px textarea/submit and quick actions, full route-map ordering, exact real-BFF output for the seeded Highland Clans ↔ Coastal League pair, exact real-BFF output for the edited Aurelians ↔ Borealis egalitarian pair, browser bearer propagation, client-only malformed JSON with zero POSTs, BFF culture.socialStructure must be a known social structure detail surfacing, malformed 200 result fail-closed behavior, assess transport failure messaging, loading state, 503 catalog failure, malformed catalog failure, non-admin fail-closed auth, pending-submit lockout, mobile no-overflow containment, scoped axe scanning for the workspace/route map/actions, and direct BFF auth/schema gates. The page now exposes stable route-map and quick-action selectors, visible catalog readiness, pending form/submit selectors, touch-sized controls, and fail-closed client parsing for malformed catalog or assessment-success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorCultureModelingWorkspace.tsx apps/oshun/web/src/app/studio/hathor/culture-modeling/page.tsx apps/oshun/web/src/components/__tests__/StudioHathorCultureModelingWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-hathor-culture-modeling.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorCultureModelingWorkspace.tsx apps/oshun/web/src/app/studio/hathor/culture-modeling/page.tsx apps/oshun/web/e2e/studio-hathor-culture-modeling.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorCultureModelingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorCultureModelingWorkspace.integration.test.tsx --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorCultureModelingWorkspace.test.tsx src/components/__tests__/StudioHathorCultureModelingWorkspace.integration.test.tsx
    • passed: 2 files, 5 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-culture-evolution-simulation-route.test.ts
    • passed: 1 file, 6 tests
  • Resource gate before web typecheck and focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 9.2 GiB available.
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-culture-modeling.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 9 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 13 GiB available, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process.
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

272. 2026-07-03 Studio Hathor Character Modeling real-BFF coverage#

Closed the /studio/hathor/character-modeling walkthrough gap where the old runtime sweep proved only route render/data health and the live CGI packet catalog, admin-scope gates, complete/incomplete validation journeys, route map, quick actions, touch targets, failure states, pending lockout, mobile containment, malformed payload handling, and BFF auth/schema gates remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/hathor/workbench-characters catalog requests and /v1/admin/hathor/workbench-characters/validate POSTs to the real local BFF with Hathor-admin or non-admin browser bearers, and captures auth headers and request bodies while the live @hathor/characters validator evaluates CGI character export packets.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact catalog summary 5 issue types tracked, default form state, 44 px textarea/submit and quick actions, full route-map ordering, exact real-BFF output for the seeded complete packet, exact blocking/warning issue rows for a missing costume, missing visual reference, and missing CGI export target, browser bearer propagation, client-only malformed JSON with zero POSTs, BFF packet.packetId is required detail surfacing, malformed 200 result fail-closed behavior, validate transport failure messaging, loading state, 503 catalog failure, malformed catalog failure, non-admin fail-closed auth, pending-submit lockout, mobile no-overflow containment, scoped axe scanning for the workspace/route map/actions, and direct BFF auth/schema gates. The page now exposes stable route-map and quick-action selectors, visible catalog readiness, pending form/submit selectors, touch-sized controls, and fail-closed client parsing for malformed catalog or validation-success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorCharacterModelingWorkspace.tsx apps/oshun/web/src/app/studio/hathor/character-modeling/page.tsx apps/oshun/web/e2e/studio-hathor-character-modeling.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorCharacterModelingWorkspace.tsx apps/oshun/web/src/app/studio/hathor/character-modeling/page.tsx apps/oshun/web/e2e/studio-hathor-character-modeling.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorCharacterModelingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorCharacterModelingWorkspace.integration.test.tsx --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorCharacterModelingWorkspace.test.tsx src/components/__tests__/StudioHathorCharacterModelingWorkspace.integration.test.tsx
    • passed: 2 files, 6 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-workbench-characters-route.test.ts
    • passed: 1 file, 7 tests
  • Resource gate before web typecheck and focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 9.4 GiB available.
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-character-modeling.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 9 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 13 GiB available, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process.
  • pnpm docs:center:test
    • passed

271. 2026-07-03 Studio Hathor Game Design Theory MDA real-BFF coverage#

Closed the /studio/hathor/game-design-theory-mda walkthrough gap where the old runtime sweep proved only route render/data health and the MDA catalog, admin-scope gates, lookup states, route map, quick actions, touch targets, failure states, pending lockout, mobile containment, and BFF auth/schema gates remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/hathor/game-design-theory-mda catalog requests and /v1/admin/hathor/game-design-theory-mda/lookup POSTs to the real local BFF with explicit Hathor-admin or non-admin dev bearer scopes, and captures browser auth headers and request bodies while the live @hathor/theory MDA reference store resolves Hunicke aesthetics and mechanic templates.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact catalog summary 8 aesthetics · 10 mechanic templates · 14 categories, default form state, 44 px controls and quick actions, full route-map ordering, exact real-BFF output for Challenge plus Resource Collection, aesthetic-only and mechanic-only request bodies, browser bearer propagation, client-only empty-selection validation with zero POSTs, BFF invalid_mechanic_template detail surfacing, transport failure messaging, loading state, 503 catalog failure, malformed catalog failure, non-admin fail-closed auth, pending-submit lockout, mobile no-overflow containment, scoped axe scanning for the workspace/route map/actions, and direct BFF auth/schema gates. The page now exposes stable route-map and quick-action selectors, visible catalog readiness, pending form/submit state selectors, touch-sized controls, and fail-closed client parsing for malformed catalog or lookup success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorGameDesignTheoryMdaWorkspace.tsx apps/oshun/web/src/app/studio/hathor/game-design-theory-mda/page.tsx apps/oshun/web/e2e/studio-hathor-game-design-theory-mda.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorGameDesignTheoryMdaWorkspace.tsx apps/oshun/web/src/app/studio/hathor/game-design-theory-mda/page.tsx apps/oshun/web/e2e/studio-hathor-game-design-theory-mda.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorGameDesignTheoryMdaWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorGameDesignTheoryMdaWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorGameDesignTheoryMdaPage.test.tsx --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorGameDesignTheoryMdaWorkspace.test.tsx src/components/__tests__/StudioHathorGameDesignTheoryMdaWorkspace.integration.test.tsx src/components/__tests__/StudioHathorGameDesignTheoryMdaPage.test.tsx src/components/__tests__/StudioHathorGameDesignTheoryMdaRouteMap.test.ts
    • passed: 4 files, 8 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-game-design-theory-mda-route.test.ts
    • passed: 1 file, 6 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 9.3 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-game-design-theory-mda.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 9 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 13 GiB available, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process.
  • pnpm docs:center:test
    • passed

270. 2026-07-03 Studio Hathor Cinematography Planning real-BFF coverage#

Closed the /studio/hathor/cinematography-planning walkthrough gap where the old route sweep proved only page reachability and the admin reference-planning catalog, plan submission journey, Hathor theory output, route-map contract, representative panel cluster, quick actions, touch targets, failure states, pending lockout, mobile containment, and BFF auth/schema gates remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/hathor/cinematography-planning catalog requests and /v1/admin/hathor/cinematography-planning/plan POSTs to the real local BFF with explicit Hathor-admin or non-admin dev bearer scopes, and captures browser auth headers and request bodies while the live @hathor/theory planner computes shot, angle, lighting, camera-angle, and color-scheme guidance.

The suite verifies anonymous redirect, Hathor-admin catalog load, exact catalog summary 11 camera angles · 10 color schemes, default form state, 44 px planner controls and quick actions, representative full-mode panels, the full route-map ordering, exact real-BFF output for low_angle plus warm, browser bearer propagation, client-only validation with zero POSTs, BFF 400 detail surfacing, transport failure messaging, loading state, 503 catalog failure, malformed catalog failure, non-admin fail-closed auth, pending-submit lockout, mobile no-overflow containment, scoped axe scanning for the planner/route map actions, and direct BFF auth/schema gates including neutral fallback output. The page now exposes stable route-map and quick-action selectors, visible catalog readiness, pending form/submit state selectors, touch-sized controls, and fail-closed client parsing for malformed catalog or plan success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorCinematographyReferencePlanner.tsx apps/oshun/web/src/app/studio/hathor/cinematography-planning/page.tsx apps/oshun/web/e2e/studio-hathor-cinematography-planning.spec.ts
    • passed
  • pnpm exec prettier --write apps/oshun/web/src/components/__tests__/StudioHathorCinematographyPlanningWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorCinematographyPlanningPage.test.tsx
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorCinematographyReferencePlanner.tsx apps/oshun/web/src/app/studio/hathor/cinematography-planning/page.tsx apps/oshun/web/e2e/studio-hathor-cinematography-planning.spec.ts apps/oshun/web/src/components/__tests__/StudioHathorCinematographyPlanningWorkspace.integration.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorCinematographyPlanningPage.test.tsx --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorCinematographyReferencePlanner.test.tsx src/components/__tests__/StudioHathorCinematographyReferencePlanner.integration.test.tsx src/components/__tests__/StudioHathorCinematographyPlanningWorkspace.integration.test.tsx src/components/__tests__/StudioHathorCinematographyPlanningPage.test.tsx
    • passed: 4 files, 8 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-cinematography-planning-route.test.ts
    • passed: 1 file, 6 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gates before focused Playwright
    • First run: 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During the failed run, memory stayed above 5.8 GiB available.
    • Final rerun: 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-cinematography-planning.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run exposed the shared whole-document axe afterEach timing out on the huge authenticated Hathor page; the suite now uses explicit scoped axe coverage for the planner, route map, and quick actions while keeping direct request-only checks out of page-level a11y scanning
    • final rerun passed: 8 passed
  • pnpm docs:center
    • passed; rendered 2991 files
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process.
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped

269. 2026-07-03 Studio Hathor Chronicle Parser real-BFF coverage#

Closed the /studio/hathor/chronicle-parser walkthrough gap where the old runtime sweep proved only route render/data health and left the live Chronicle parser catalog, browser-admin bearer propagation, parser write path, direct BFF auth/schema gates, loading/error/unauthorized states, pending behavior, route map, quick actions, touch targets, mobile containment, and accessibility scans unchecked. The page now exposes a visible catalog summary, stable route-map and quick-action selectors, touch-sized controls, alert/status semantics, and pending form/submit state selectors.

The new Playwright spec opens the real Next Studio shell, plants Hathor-admin or non-admin browser sessions, forwards browser /v1/admin/hathor/chronicle-parser catalog and /v1/admin/hathor/chronicle-parser/parse calls to the real local BFF with the page's own bearer token, and captures browser auth headers and parse bodies. It verifies anonymous redirect, live catalog load, exact two-age parseChronicle output from @hathor/pre-production, title-page / era / event / speaker / location / word-count / histogram rendering, client-only empty-source rejection with zero POSTs, BFF detail surfacing, parse transport failure, catalog loading, 503 catalog failure, malformed catalog failure, non-admin fail-closed auth, pending-submit lockout, route-map entries, quick-action hrefs, mobile no-overflow, 44 px controls, shared axe scans on UI paths, and direct BFF 401/403/400/200 gates including document-reference parsing.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorChronicleParserWorkspace.tsx apps/oshun/web/src/app/studio/hathor/chronicle-parser/page.tsx apps/oshun/web/e2e/studio-hathor-chronicle-parser.spec.ts WALKTHROUGH/studio/domain-bridges/hathor/studio-hathor-chronicle-parser.md V1/TODOS.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioHathorChronicleParserWorkspace.tsx apps/oshun/web/src/app/studio/hathor/chronicle-parser/page.tsx apps/oshun/web/e2e/studio-hathor-chronicle-parser.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorChronicleParserWorkspace.test.tsx src/components/__tests__/StudioHathorChronicleParserWorkspace.integration.test.tsx src/components/__tests__/StudioHathorChronicleParserPage.test.tsx src/components/__tests__/StudioHathorChronicleParserRouteMap.test.ts
    • passed: 4 files, 8 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-chronicle-parser-route.test.ts
    • passed: 1 file, 5 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gates before focused Playwright
    • 15 GiB RAM, 6.0 GiB available immediately before launch, swap effectively full, 48 GiB disk free, and no other local test/build command active in this checkout. During real-dev-infra setup, available memory dipped to 3.7 GiB but stayed above the 2 GiB stop threshold.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-chronicle-parser.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 8 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

264. 2026-07-03 Studio Yemaya budget/Godot real-BFF coverage#

Closed the /studio/yemaya/budget-management and /studio/yemaya/godot-integration walkthrough gaps where the old runtime sweep proved only route render/data health and left the live Yemaya catalog reads, optimizer/NodePath writes, admin and non-admin browser states, loading/error branches, pending behavior, route maps, quick actions, touch targets, mobile containment, and direct BFF gates unchecked. The two route pages now expose stable route-map and quick-action selectors, while both lane components expose busy/disabled submit states, alert/status semantics, strict touch-sized controls, and deterministic form-state attributes for the browser tests.

The new Playwright spec opens the real Next Studio shell, plants Yemaya-admin or non-admin browser sessions, forwards browser /v1/admin/yemaya/budget-management and /v1/admin/yemaya/godot-integration GET/POST calls to the real local BFF with the page's own bearer token, and captures browser auth headers and request bodies. It verifies anonymous redirect, live optimizer catalog load, exact balanced optimizer score/impacts/weights/recommendations, live NodePath relative and %UniqueName resolution, local zero-post validation failures, live BFF validation/details, controlled loading/503/malformed/transport failure branches, non-admin fail-closed authorization, pending-submit lockout, route-map entries, quick-action hrefs, mobile no-overflow, 44 px controls, shared axe scans on rendered UI paths, and direct BFF 401/403/400/422/200 contract gates.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioYemayaBudgetManagementWorkspace.tsx apps/oshun/web/src/components/studio/StudioYemayaGodotIntegrationWorkspace.tsx apps/oshun/web/src/app/studio/yemaya/budget-management/page.tsx apps/oshun/web/src/app/studio/yemaya/godot-integration/page.tsx apps/oshun/web/e2e/studio-yemaya-budget-godot.spec.ts WALKTHROUGH/studio/domain-bridges/yemaya/studio-yemaya-budget-management.md WALKTHROUGH/studio/domain-bridges/yemaya/studio-yemaya-godot-integration.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioYemayaBudgetManagementWorkspace.tsx apps/oshun/web/src/components/studio/StudioYemayaGodotIntegrationWorkspace.tsx apps/oshun/web/src/app/studio/yemaya/budget-management/page.tsx apps/oshun/web/src/app/studio/yemaya/godot-integration/page.tsx apps/oshun/web/e2e/studio-yemaya-budget-godot.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-yemaya-budget-management-route.test.ts src/__tests__/admin-yemaya-godot-integration-route.test.ts
    • passed: 2 files, 15 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioYemayaBudgetManagementWorkspace.test.tsx src/components/__tests__/StudioYemayaBudgetManagementWorkspace.integration.test.tsx src/components/__tests__/StudioYemayaBudgetManagementPage.test.tsx src/components/__tests__/StudioYemayaBudgetManagementRouteMap.test.ts src/components/__tests__/StudioYemayaGodotIntegrationWorkspace.test.tsx src/components/__tests__/StudioYemayaGodotIntegrationWorkspace.integration.test.tsx src/components/__tests__/StudioYemayaGodotIntegrationPage.test.tsx src/components/__tests__/StudioYemayaGodotIntegrationRouteMap.test.ts
    • passed: 8 files, 14 tests
  • Resource gates before focused Playwright
    • Before typecheck/Playwright: 15 GiB RAM, 7.1 GiB available, 951 MiB swap free, 49 GiB disk free, with unrelated CPU/memory-heavy Python and Claude processes from another checkout active.
    • Immediately before Playwright: 15 GiB RAM, 7.0 GiB available, 952 MiB swap free, 49 GiB disk free. The run stayed narrow at one Chromium worker.
    • During Playwright, available memory dropped to 3.5 GiB and swap became effectively full, but it stayed above the 2 GiB stop threshold; after the run, available memory recovered to 7.7 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-yemaya-budget-godot.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 8 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

263. 2026-07-03 Studio overview IA root real-BFF coverage#

Closed the /studio overview walkthrough gap where the old runtime sweep only proved route render/data health and left the IA validator, admin/non-admin states, failure branches, pending behavior, quick-action catalog, touch targets, and direct BFF gates unchecked. The root page now exposes stable V3 and catalog quick-action selectors, labels the root catalog section, raises shared quickAction touch targets to 44 px, and hardens StudioInformationArchitectureWorkspace with strict success-response parsing, busy/disabled submit state, malformed-success fail-closed copy, alert/status semantics, and an IA catalog retry control.

The new Playwright spec opens the real Next shell and live local BFF, plants an admin-scoped browser session for live IA calls, captures browser auth headers and request bodies, and uses deterministic route fulfillment only for explicit fail-closed branches. It verifies anonymous redirect, admin-shell IA catalog load, signed-in non-admin IA authorization, default seeded violation analysis, edited clean-tree analysis, client-only malformed JSON, real BFF invalid-payload detail, pending-submit lockout, catalog loading/503/retry, malformed analyze success, analyze transport failure, V3 quick-action hrefs, every root catalog anchor shape, sentinel catalog hrefs, keyboard focusability, mobile containment, shared axe scans, and direct BFF auth/schema gates. The first focused browser run exposed two stale assumptions in the test/documentation: admin-scoped sessions render the Admin shell rather than a customer shell, and the catalog loading test had to hold all initial hydration-time catalog GETs because the client component can remount. Both assertions were corrected, and the final rerun passed.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/globals.css apps/oshun/web/src/app/studio/page.tsx apps/oshun/web/src/components/studio/StudioInformationArchitectureWorkspace.tsx apps/oshun/web/e2e/studio-overview.spec.ts WALKTHROUGH/studio/studio-overview.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/studio/page.tsx apps/oshun/web/src/components/studio/StudioInformationArchitectureWorkspace.tsx apps/oshun/web/e2e/studio-overview.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-studio-ia-tree-route.test.ts
    • passed: 1 file, 5 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gates before focused Playwright
    • Initial run: 15 GiB RAM, 9.6 GiB available before launch, 1.5 GiB swap free, 48 GiB disk free. Another checkout had CPU-heavy Python/Claude work active, so this run stayed narrow at one Chromium worker; during the run, available memory stayed above 5.5 GiB.
    • Final rerun: 15 GiB RAM, 9.5 GiB available before launch, 1.7 GiB swap free, 49 GiB disk free, with the same unrelated work still active; memory stayed above 5.6 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-overview.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run exposed the stale admin-shell/loading assumptions described above
    • final rerun passed: 10 passed
  • pnpm docs:center
    • passed; rendered 2991 files
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 9.4 GiB available before launch, 1.2 GiB swap free, 49 GiB disk free. Another checkout still had CPU-heavy Python/Claude work active, so no other verification was run concurrently.
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped

263. 2026-07-03 Studio Launch Readiness Governance real-BFF coverage#

Closed the /studio/launch-readiness-governance walkthrough gap where the old runtime sweep proved only route render/data health and the launch-readiness catalog, admin-scope gates, scoring states, quick actions, touch targets, malformed/offline failure paths, and mobile containment remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/studio/launch-readiness catalog and /v1/admin/studio/launch-readiness/evaluate POSTs to the real local BFF with explicit studio-admin or non-admin dev bearer scopes, and captures browser auth headers and request bodies while the live evaluator computes the go/no-go decision, blockers, missing sign-offs, and readiness score.

The suite verifies anonymous redirect, studio-admin catalog load, exact status/decision catalog values, quick-action targets, 44 px controls, pending-submit lockout, seeded no-go score 60%, blocker filtering (g2 only while non-blocking g4 does not veto), missing sign-off rendering, go decisions with a waived blocking gate and pending advisory gate, pending blocking vetoes, client-only malformed JSON with zero POSTs, live BFF invalid-payload details, loading, 503 catalog failure, malformed catalog failure, malformed 200 evaluate responses, evaluate-network failure, non-admin fail-closed auth, direct BFF auth/schema gates, shared axe scans on rendered UI paths, and mobile containment without horizontal overflow. The page now exposes stable quick-action selectors, pending form/submit state selectors, touch-sized controls, and fail-closed client parsing for malformed catalog or evaluate success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioLaunchReadinessGovernanceDashboard.tsx apps/oshun/web/src/app/studio/launch-readiness-governance/page.tsx apps/oshun/web/e2e/studio-launch-readiness-governance.spec.ts WALKTHROUGH/studio/governance/studio-launch-readiness-governance.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioLaunchReadinessGovernanceDashboard.tsx apps/oshun/web/src/app/studio/launch-readiness-governance/page.tsx apps/oshun/web/e2e/studio-launch-readiness-governance.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioLaunchReadinessGovernanceWorkspace.test.tsx src/components/__tests__/StudioLaunchReadinessGovernanceWorkspace.validation.test.tsx
    • passed: 2 files, 5 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-studio-launch-readiness-route.test.ts
    • passed: 1 file, 6 tests
  • Resource gate before focused Playwright
    • 15 GiB RAM, 7.8 GiB available before launch, 25 GiB swap free, 48 GiB disk free. Another checkout had CPU-heavy Python/Claude work active, so this run stayed narrow at one Chromium worker; during Playwright, memory stayed above 4.1 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-launch-readiness-governance.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped
  • git diff --check
    • passed
  • pnpm docs:center
    • passed; rendered 2991 files
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 6.8 GiB available before launch, 28 GiB swap free, 48 GiB disk free. Another checkout had CPU-heavy Python/Claude work and a TypeScript probe active, so the docs browser gate was supervised while it ran with the repo's docs-center Playwright worker defaults.
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped
  • pnpm docs:center
    • passed; rendered 2991 files
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 9.0 GiB available before launch, 29 GiB swap free, 48 GiB disk free. Another agent still had CPU-heavy Python scans active, so the docs browser gate was run serialized.
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During the run, memory stayed above 10 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-audit-compliance-surfaces.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

264. 2026-07-03 Studio Accessibility Governance real-BFF coverage#

Closed the /studio/accessibility-governance walkthrough gap where the old runtime sweep proved only route render/data health and the WCAG contrast catalog, admin-scope gates, audit states, quick actions, touch targets, malformed/offline failure paths, and mobile containment remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/studio/wcag-contrast catalog and /v1/admin/studio/wcag-contrast/audit POSTs to the real local BFF with explicit studio-admin or non-admin dev bearer scopes, and captures browser auth headers and request bodies while the live auditor computes sRGB relative-luminance ratios plus AA/AAA thresholds.

The suite verifies anonymous redirect, studio-admin catalog load, exact conformance levels, quick-action targets, 44 px controls, pending-submit lockout, seeded ratios 21, 4.54, 2.85, and 8.59, AA/AAA summary counts, relaxed large-text thresholds, low-contrast failures, client-only malformed JSON with zero POSTs, live BFF invalid-payload details, loading, 503 catalog failure, malformed catalog failure, malformed 200 audit responses, audit-network failure, non-admin fail-closed auth, direct BFF auth/schema gates, shared axe scans on rendered UI paths, and mobile containment without horizontal overflow. The page now exposes stable quick-action selectors, pending form/submit state selectors, touch-sized controls, exact result-threshold selectors, and fail-closed client parsing for malformed catalog or audit success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioAccessibilityGovernanceWorkspace.tsx apps/oshun/web/src/app/studio/accessibility-governance/page.tsx apps/oshun/web/e2e/studio-accessibility-governance.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioAccessibilityGovernanceWorkspace.tsx apps/oshun/web/src/app/studio/accessibility-governance/page.tsx apps/oshun/web/e2e/studio-accessibility-governance.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioAccessibilityGovernanceWorkspace.test.tsx src/components/__tests__/StudioAccessibilityGovernanceWorkspace.validation.test.tsx
    • passed: 2 files, 5 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-studio-wcag-contrast-route.test.ts
    • passed: 1 file, 5 tests
  • Resource gate before focused Playwright
    • 15 GiB RAM, 6.9 GiB available before launch, 23 GiB swap free, 48 GiB disk free. Another checkout had Python/Claude/TypeScript work active, so this run stayed narrow at one Chromium worker; during Playwright, memory stayed above 4.2 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-accessibility-governance.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm docs:center
    • passed; rendered 2991 files
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gates before pnpm docs:center:test
    • First run: 15 GiB RAM, 8.1 GiB available before launch, 21 GiB swap free, 48 GiB disk free. Another checkout still had Python/Claude work active, so the docs browser gate was kept serialized; during the run memory stayed above 7.4 GiB available.
    • Final rerun: 15 GiB RAM, 7.2 GiB available before launch, 21 GiB swap free, 48 GiB disk free. Another checkout had active TypeScript work, so no other verification ran in this checkout; memory stayed above 7.3 GiB available.
  • pnpm docs:center:test
    • final rerun passed: 95 passed, 11 skipped

265. 2026-07-03 Studio Isis Suspicious Activity Detection real-BFF coverage#

Closed the /studio/isis/suspicious-activity-detection walkthrough gap where the old runtime sweep proved only route render/data health and left the direct Studio Isis boundary, localhost lane bypass, seeded chargeback screens, route map, quick actions, admin-scope gates, pending behavior, malformed/offline fail-closed paths, exact predictor outputs, duplicate handling, touch targets, and mobile containment unchecked. The new Playwright spec opens the real Next Studio shell through the localhost-only Isis lane E2E bypass, proves the direct route is still hard-blocked by the Studio Isis boundary, forwards browser /v1/admin/isis/suspicious-activity GET and POST requests to the real local BFF with explicit studio-admin or non-admin dev bearer scopes, and captures browser auth headers and request bodies while the live chargeback predictor scores the transactions.

The suite verifies anonymous redirect, seeded txn-high and txn-low rows, exact probabilities (0.485 medium and 0.100 low), feature factors including high amount, high-risk payment method, new device, new location, and new account, route-map articles, quick-action targets, 44 px controls, pending-submit lockout, duplicate transaction rejection, client-side invalid amount blocking, list loading, 503 list failure, malformed list failure, list-network failure, malformed 200 screen responses, screen-network failure, non-admin fail-closed auth, direct BFF missing-bearer/forbidden/schema gates, and mobile containment without horizontal overflow. The workspace now exposes stable route-map and quick-action selectors, pending form/submit state selectors, touch-sized controls, and fail-closed client parsing for malformed list or screen success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisSuspiciousActivityDetectionWorkspace.tsx apps/oshun/web/src/app/studio/isis/suspicious-activity-detection/page.tsx apps/oshun/web/src/components/__tests__/StudioIsisSuspiciousActivityDetectionWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-isis-suspicious-activity-detection.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioIsisSuspiciousActivityDetectionWorkspace.tsx apps/oshun/web/src/app/studio/isis/suspicious-activity-detection/page.tsx apps/oshun/web/src/components/__tests__/StudioIsisSuspiciousActivityDetectionWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-isis-suspicious-activity-detection.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisSuspiciousActivityDetectionWorkspace.test.tsx src/components/__tests__/StudioIsisSuspiciousActivityDetectionWorkspace.integration.test.tsx src/components/__tests__/StudioIsisSuspiciousActivityDetectionPage.test.tsx src/components/__tests__/StudioIsisSuspiciousActivityDetectionRouteMap.test.ts
    • passed: 4 files, 8 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-isis-suspicious-activity-route.test.ts
    • passed: 1 file, 6 tests
  • Resource gate before focused Playwright
    • 15 GiB RAM, 7.6 GiB available before launch, 19 GiB swap free, 48 GiB disk free. Another checkout had CPU-heavy Python/Claude/TypeScript work active, so this run stayed narrow at one Chromium worker; during Playwright, memory stayed above 5.2 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-isis-suspicious-activity-detection.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 10 passed
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm exec prettier --write WALKTHROUGH/studio/domain-bridges/isis/studio-isis-suspicious-activity-detection.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 10 GiB available before launch, 16 GiB swap free, 48 GiB disk free. Another checkout still had CPU-heavy Python/Claude work active, so the docs browser gate was run serialized.
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

266. 2026-07-03 Studio Backup Disaster Recovery UX real-BFF coverage#

Closed the /studio/backup-disaster-recovery-ux walkthrough gap where the old runtime sweep proved route render/data health but left the live recovery evaluator flow, admin-scope behavior, malformed/offline paths, pending submit state, quick actions, mobile containment, and direct BFF contract unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/studio/backup-dr catalog/evaluate requests to the real local BFF with explicit studio-admin or non-admin dev bearer scopes, captures browser auth headers and request bodies, and verifies the deterministic RPO/RTO evaluator outputs through the same BFF route used by the workspace.

The suite verifies admin direct navigation, anonymous redirect before the surface renders, non-admin fail-closed auth, real catalog loading, seeded default payload recommendation (b1 with RPO/RTO compliance), edited RTO-breach payload with no eligible restore point, client-only invalid JSON blocking, live BFF 400 details for invalid throughput, malformed 200 fail-closed parsing, evaluate-network failure, catalog loading/failure/malformed/network states, pending-submit lockout, all five quick-action targets, direct BFF missing-bearer/forbidden/schema gates, 44 px controls, axe, and mobile containment. The workspace now exposes stable quick-action selectors, pending form/submit state selectors, strict catalog/result guards, touch-sized controls, and a focusable named scroll region around the result table for keyboard access.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioBackupDisasterRecoveryUxWorkspace.tsx apps/oshun/web/src/app/studio/backup-disaster-recovery-ux/page.tsx apps/oshun/web/src/components/__tests__/StudioBackupDisasterRecoveryUxWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioBackupDisasterRecoveryUxWorkspace.validation.test.tsx apps/oshun/web/src/components/__tests__/StudioBackupDisasterRecoveryUxPage.test.tsx apps/oshun/web/e2e/studio-backup-disaster-recovery-ux.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioBackupDisasterRecoveryUxWorkspace.tsx apps/oshun/web/src/app/studio/backup-disaster-recovery-ux/page.tsx apps/oshun/web/src/components/__tests__/StudioBackupDisasterRecoveryUxWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioBackupDisasterRecoveryUxWorkspace.validation.test.tsx apps/oshun/web/src/components/__tests__/StudioBackupDisasterRecoveryUxPage.test.tsx apps/oshun/web/e2e/studio-backup-disaster-recovery-ux.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioBackupDisasterRecoveryUxWorkspace.test.tsx src/components/__tests__/StudioBackupDisasterRecoveryUxWorkspace.validation.test.tsx src/components/__tests__/StudioBackupDisasterRecoveryUxPage.test.tsx
    • passed: 3 files, 7 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-studio-backup-dr-route.test.ts
    • passed: 1 file, 5 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 10 GiB available before launch, 14 GiB swap free, 48 GiB disk free. Another checkout had CPU-heavy Python/Claude/pnpm work active, so this run stayed narrow at one Chromium worker; during Playwright, memory stayed above 6.6 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-backup-disaster-recovery-ux.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed
  • pnpm exec prettier --write WALKTHROUGH/studio/operations/studio-backup-disaster-recovery-ux.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 9.6 GiB available before launch, 14 GiB swap free, 48 GiB disk free. Another checkout still had CPU-heavy Python/Claude/pnpm work active, so the docs browser gate was kept serialized.
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

267. 2026-07-03 Studio SDK Documentation Integration real-BFF coverage#

Closed the /studio/sdk-documentation-integration walkthrough gap where the old runtime sweep proved route render/data health but left the live SDK surface analyzer flow, admin-scope behavior, malformed/offline paths, pending submit state, quick actions, direct BFF contract, and mobile containment unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/studio/sdk-surface catalog/diff requests to the real local BFF with explicit studio-admin or non-admin dev bearer scopes, captures browser auth headers and request bodies, and verifies the deterministic public-API surface diff/semver classifier through the same BFF route used by the workspace.

The suite verifies admin direct navigation, anonymous redirect before the surface renders, non-admin fail-closed auth, real catalog loading, the seeded default payload as a major bump with changed/removed breaking symbols, an additive minor payload, an unchanged none payload, client-only invalid JSON blocking, live BFF duplicate/empty-payload 400 details, malformed 200 fail-closed parsing, diff-network failure, catalog loading/failure/malformed/network states, pending-submit lockout, all five quick-action targets, direct BFF missing-bearer/forbidden/schema gates, 44 px controls, axe, and mobile containment. The workspace now exposes stable quick-action selectors, pending form/submit state selectors, strict catalog/result guards, touch-sized controls, and a focusable named scroll region around the result table for keyboard access.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioSdkDocumentationIntegrationWorkspace.tsx apps/oshun/web/src/app/studio/sdk-documentation-integration/page.tsx apps/oshun/web/src/components/__tests__/StudioSdkDocumentationIntegrationWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioSdkDocumentationIntegrationWorkspace.validation.test.tsx apps/oshun/web/src/components/__tests__/StudioSdkDocumentationIntegrationPage.test.tsx apps/oshun/web/e2e/studio-sdk-documentation-integration.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioSdkDocumentationIntegrationWorkspace.tsx apps/oshun/web/src/app/studio/sdk-documentation-integration/page.tsx apps/oshun/web/src/components/__tests__/StudioSdkDocumentationIntegrationWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioSdkDocumentationIntegrationWorkspace.validation.test.tsx apps/oshun/web/src/components/__tests__/StudioSdkDocumentationIntegrationPage.test.tsx apps/oshun/web/e2e/studio-sdk-documentation-integration.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioSdkDocumentationIntegrationWorkspace.test.tsx src/components/__tests__/StudioSdkDocumentationIntegrationWorkspace.validation.test.tsx src/components/__tests__/StudioSdkDocumentationIntegrationPage.test.tsx
    • passed: 3 files, 7 tests
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-studio-sdk-surface-route.test.ts
    • passed: 1 file, 6 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 8.4 GiB available before launch, 12 GiB swap free, 48 GiB disk free. Another checkout had CPU-heavy Python/Claude work active, so this run stayed narrow at one Chromium worker; during Playwright, memory stayed above 5.4 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-sdk-documentation-integration.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 12 passed
  • pnpm exec prettier --write WALKTHROUGH/studio/operations/studio-sdk-documentation-integration.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 8.4 GiB available before launch, 11 GiB swap free, 48 GiB disk free. Another checkout still had CPU-heavy Python/Claude work active, so the docs browser gate was kept serialized.
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

268. 2026-07-03 Studio Observability Operational Dashboards real-BFF coverage#

Closed the /studio/observability-operational-dashboards walkthrough gap where the old runtime sweep proved route render/data health but left the live SLO burn-rate, V7 platform-cost, and V7 creator-analytics evaluator flows, admin-scope behavior, malformed/offline paths, pending submit states, quick actions, direct BFF contract, and mobile containment unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/studio/observability-dashboards catalog and evaluator requests to the real local BFF with explicit studio-admin, non-admin, or creator-analytics dev bearer scopes, captures browser auth headers and request bodies, and verifies the deterministic evaluators through the same BFF route used by the workspace.

The suite verifies admin direct navigation, anonymous redirect before the surface renders, non-admin fail-closed auth, real catalog loading, seeded and edited SLO payloads, V7 platform cost lever changes, V7 creator realm selection, client-only invalid JSON blocking, live BFF 400 details for invalid SLO, platform, and creator payloads, malformed 200 fail-closed parsing, evaluator network failures, catalog loading/failure/malformed/network states, pending-submit lockout across all three lanes, all five quick-action targets, direct BFF missing-bearer/forbidden/schema gates, creator-analytics scoped BFF access, 44 px controls, axe, and mobile containment. The workspace now exposes stable quick-action selectors, pending form/submit state selectors, strict malformed result errors, and touch-sized submit/quick-action controls.

Verification:

  • psql --version
    • available: PostgreSQL client 16.14
  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioObservabilityOperationalDashboardsWorkspace.tsx apps/oshun/web/src/app/studio/observability-operational-dashboards/page.tsx apps/oshun/web/src/components/__tests__/StudioObservabilityOperationalDashboardsWorkspace.validation.test.tsx apps/oshun/web/e2e/studio-observability-operational-dashboards.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioObservabilityOperationalDashboardsWorkspace.tsx apps/oshun/web/src/app/studio/observability-operational-dashboards/page.tsx apps/oshun/web/src/components/__tests__/StudioObservabilityOperationalDashboardsWorkspace.validation.test.tsx apps/oshun/web/e2e/studio-observability-operational-dashboards.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioObservabilityOperationalDashboardsWorkspace.test.tsx src/components/__tests__/StudioObservabilityOperationalDashboardsWorkspace.validation.test.tsx
    • passed: 2 files, 11 tests
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-studio-observability-dashboards-route.test.ts
    • passed: 1 file, 11 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gates before focused Playwright
    • Final run: 15 GiB RAM, 8.7 GiB available before launch, 7.6 GiB swap free, 48 GiB disk free. Another checkout had CPU-heavy Python/Claude work active, so this run stayed narrow at one Chromium worker; during Playwright, memory stayed above 5.2 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-observability-operational-dashboards.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run exposed undersized submit buttons and an outdated creator-status assertion; the live BFF correctly returned page for Ixchel Lab
    • second run exposed undersized footer quick-action targets
    • final rerun passed: 12 passed
  • pnpm exec prettier --write WALKTHROUGH/studio/operations/studio-observability-operational-dashboards.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 7.8 GiB available before launch, 7.5 GiB swap free, 48 GiB disk free. Another checkout still had CPU-heavy Python/Claude work active, so the docs browser gate was kept serialized.
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

164. 2026-06-26 Tenant bulk entitlement executor addendum#

Deepened tenant-bulk-operations-export beyond the users executor. The existing entitlements commit executor is now driven end-to-end by real-dev-infra tests: the spec provisions a real customer account through the users bulk-operation path, reads /v1/profile as that account to confirm plan: "free", commits an entitlements bulk operation with entitlementClass: "premium", and reads /v1/profile again to prove the profile/entitlement projection changed to plan: "premium".

This closed the unproven entitlement-executor leg at the time. The current journey has since narrowed the open executor gaps: rosters are covered in §166, persona assignments are covered in §167, and content/taxonomy remain open.

Verification:

  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-bulk-operations-route.test.ts
    • passed: 10 passed
  • Resource gate before targeted Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing build/test process; during Playwright, available memory stayed around 12 GiB
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-bulk-operations-export-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 3 passed
  • pnpm exec prettier --write apps/oshun/bff/src/__tests__/admin-bulk-operations-route.test.ts apps/oshun/web/e2e/tenant-bulk-operations-export-bff.spec.ts WALKTHROUGH/journeys/tenant-bulk-operations-export.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/tenant-bulk-operations-export.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • python3 tools/render-vdocs.py
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/__tests__/admin-bulk-operations-route.test.ts apps/oshun/web/e2e/tenant-bulk-operations-export-bff.spec.ts
    • passed
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed

165. 2026-06-26 Tenant bulk unsupported-kind failure addendum#

Superseded by §166 for rosters: roster rows now have a real OneRoster executor. The loud-failure contract remains current for unsupported kinds such as content and taxonomy; persona_assignments is superseded by §167.

Deepened tenant-bulk-operations-export at the missing-executor boundary. The real users and entitlements commit executors remain covered as successful mutations; this addendum now proves that a valid unsupported bulk kind does not silently stamp success. The real-BFF spec creates a rosters operation with required rosterId/tenantId fields, validates it, dry-runs it into a deterministic create plan, stages it, then attempts commit. The operation lands in terminal failed with committedAt: null, empty commitOutcomes, and the explicit reason no commit executor is wired for kind 'rosters' — nothing was changed; audit search also exposes admin.bulk_operation.failed.

This closes the previously unproven loud-failure contract for unsupported bulk operation kinds while keeping the journey honest: real content and taxonomy commit executors remain product gaps beyond that failure boundary. Roster and persona-assignment commits are superseded by §§166-167.

Verification:

  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-bulk-operations-route.test.ts
    • passed: 11 passed
  • Resource gate before targeted Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing build/test process; during Playwright, available memory stayed above 10 GiB
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-bulk-operations-export-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 4 passed
  • pnpm exec prettier --write apps/oshun/bff/src/__tests__/admin-bulk-operations-route.test.ts apps/oshun/web/e2e/tenant-bulk-operations-export-bff.spec.ts WALKTHROUGH/journeys/tenant-bulk-operations-export.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/tenant-bulk-operations-export.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/__tests__/admin-bulk-operations-route.test.ts apps/oshun/web/e2e/tenant-bulk-operations-export-bff.spec.ts
    • passed
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • initial run failed on stale generated .next/dev/types/routes.d.ts; after clearing apps/oshun/web/.next, rerun passed
  • python3 tools/render-vdocs.py
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed

166. 2026-06-26 Tenant bulk roster executor addendum#

Deepened tenant-bulk-operations-export from loud-failure-only roster coverage to a real roster commit executor. kind: "rosters" rows now map to the durable OneRoster apply store: the executor validates the row's tenant, converts the row into a OneRosterUser plus optional class OneRosterEnrollment, applies a deterministic bulk:<operationId>:row:<rowIndex> commit id, and returns the actual users/enrollments created plus tenant roster totals.

The real-BFF spec now creates a rosters bulk operation, validates it, dry-runs the deterministic create plan, stages, commits, then reads /v1/admin/lms/oneroster to verify the same commit id and tenant roster totals. The unsupported-kind fail-loud check moved to content, which still validates, dry-runs, and stages before terminal failed with committedAt: null.

Remaining product gaps for this journey are now narrower: content and taxonomy commit executors remain open beyond the covered loud-failure contract; persona-assignment commits are closed in §167.

Verification:

  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-bulk-operations-route.test.ts
    • passed: 12 passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-oneroster-apply-route.test.ts
    • passed: 6 passed
  • Resource gate before targeted Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing build/test process; during Playwright, available memory stayed above 10 GiB
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-bulk-operations-export-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 5 passed
  • pnpm exec prettier --write apps/oshun/bff/src/admin/bulk-commit-executors.ts apps/oshun/bff/src/__tests__/admin-bulk-operations-route.test.ts apps/oshun/web/e2e/tenant-bulk-operations-export-bff.spec.ts WALKTHROUGH/journeys/tenant-bulk-operations-export.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/tenant-bulk-operations-export.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/admin/bulk-commit-executors.ts apps/oshun/bff/src/__tests__/admin-bulk-operations-route.test.ts apps/oshun/web/e2e/tenant-bulk-operations-export-bff.spec.ts
    • passed
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 tools/render-vdocs.py
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed

167. 2026-06-26 Tenant bulk persona assignment executor addendum#

Deepened tenant-bulk-operations-export from loud-failure-only persona_assignments coverage to a real active-persona commit executor. kind: "persona_assignments" rows now require personaId and subjectId, use an optional canonical persona surface with tara as the default, and write to the existing active-persona projection through activePersonaStore.set.

The real-BFF spec now creates a persona-assignment bulk operation, validates it, dry-runs the deterministic update plan, stages, commits, then reads /v1/personas/active as the assigned subject to verify the same persona and surface. Remaining product gaps for this journey are now content and taxonomy commit executors, plus the documented UI/upload/export handoff work.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/bff/src/admin/bulk-commit-executors.ts apps/oshun/bff/src/__tests__/admin-bulk-operations-route.test.ts apps/oshun/web/e2e/tenant-bulk-operations-export-bff.spec.ts WALKTHROUGH/journeys/tenant-bulk-operations-export.md
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-bulk-operations-route.test.ts
    • passed: 13 passed
  • Resource gate before targeted Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 47 GiB free disk, and no competing build/test process; during Playwright, available memory stayed above 11 GiB
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-bulk-operations-export-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/admin/bulk-commit-executors.ts apps/oshun/bff/src/__tests__/admin-bulk-operations-route.test.ts apps/oshun/web/e2e/tenant-bulk-operations-export-bff.spec.ts
    • passed
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 tools/render-vdocs.py
    • passed: rendered 1634 files
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed

158. 2026-06-26 Public scene signed-in report receipts#

Closed the signed-in reporter leg for public-scene-abuse-report. The public report form now forwards the member access token when AuthProvider has one, and the BFF stamps reporterUserId from the validated bearer instead of trusting a body-provided reporter id. A new authenticated projection, GET /v1/living-scenes/public-reports/mine, filters the persisted abuse-report store to the current reporter and returns receipt-safe fields without operator identity. /profile/safety now renders those receipts alongside the crisis record, including open/resolved/dismissed status and operator notes.

The real browser coverage signs in a reporter, submits /scene/<shortCode>/report, reads the live BFF receipt as open, verifies the receipt row on /profile/safety, resolves the report through the real admin BFF verb, and verifies /profile/safety shows resolved plus the operator note.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write ...
    • passed for touched BFF, web, E2E, and walkthrough files
  • pnpm --dir apps/oshun/web exec vitest run src/app/profile/safety/ProfileSafetyJourney.test.tsx src/lib/living-scenes-public.test.ts
    • passed: 12 passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/my-abuse-reports-route.test.ts src/__tests__/living-scenes-route.test.ts
    • passed: 26 passed
  • pnpm exec eslint --no-warn-ignored ...
    • passed for touched BFF, web, and E2E TypeScript files
  • pnpm --dir apps/oshun/bff typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gates before typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing build/test process; during Playwright, available memory stayed above 9 GiB
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/public-scene-abuse-report.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • python3 tools/render-vdocs.py
    • passed: rendered 1634 files
  • python3 V5/tools/validate-v5-docs.py
    • passed

154. 2026-06-26 Nisaba reading-desk language buttons#

Closed the compact /nisaba language-switch gap for nisaba-scholarly-read. The BFF room payload now includes passageBodies for Pali, English, and Both while preserving passageBody as the default English body. The web desk keeps rooms.tsx server-rendered and mounts a focused client switcher for the language buttons and reading body, so the route does not pull server-only BFF fetch helpers into the browser bundle.

nisaba-scholarly-read now clicks Pali, Both, and English on the live compact desk and asserts aria-pressed, active-language attributes, and swapped reading body text. nisaba-desk-deepening pins the real /v1/nisaba/room passageBodies contract. Remaining nisaba-scholarly-read gaps are still the headword, folio, notebook-editor, plan-complete, and scholar-apparatus drill-downs.

Verification:

  • pnpm --dir apps/oshun/bff exec vitest run src/nisaba/room.test.ts
    • passed: 3 passed
  • pnpm --dir apps/oshun/web exec vitest run src/app/nisaba/__tests__/page.test.tsx
    • passed: 4 passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/nisaba/room.ts apps/oshun/bff/src/nisaba/room.test.ts apps/oshun/web/src/lib/lilith-data/types.ts apps/oshun/web/src/components/lilith/rooms.tsx apps/oshun/web/src/components/lilith/NisabaDeskLanguageSwitcher.tsx apps/oshun/web/src/app/nisaba/__tests__/page.test.tsx apps/oshun/web/e2e/nisaba-desk-deepening.spec.ts apps/oshun/web/e2e/nisaba-scholarly-read.spec.ts apps/oshun/web/e2e/nyx-tonight-observation.spec.ts
    • passed with the repo's existing Next pages-directory warning
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 9 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-desk-deepening.spec.ts e2e/nisaba-scholarly-read.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed
  • python3 tools/render-vdocs.py
    • passed: rendered 1607 files
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/bff/src/nisaba/room.ts apps/oshun/bff/src/nisaba/room.test.ts apps/oshun/web/src/lib/lilith-data/types.ts apps/oshun/web/src/components/lilith/rooms.tsx apps/oshun/web/src/components/lilith/NisabaDeskLanguageSwitcher.tsx apps/oshun/web/src/app/nisaba/__tests__/page.test.tsx apps/oshun/web/e2e/nisaba-desk-deepening.spec.ts apps/oshun/web/e2e/nisaba-scholarly-read.spec.ts apps/oshun/web/e2e/nyx-tonight-observation.spec.ts WALKTHROUGH/customer/07-nisaba/nisaba.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/journeys/nisaba-notebook-capture-and-cite.md WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/results/README.md WALKTHROUGH/results/nisaba-scholarly-read.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • git diff --check
    • passed

154. 2026-06-26 Nyx to Tara handoff telemetry#

Closed the concrete telemetry gap in nyx-to-tara-bridge. Nyx event-detail Tara recommendation cards now expose nyx_event_tara_recommendation_opened with the source event ID, Tara practice ID, relationship kind, and from=nyx. The Tara domain session player now receives shell origin/stack from TaraSurface and marks its Play control with tara_sit_started, surface=nyx_event_handoff, origin, stack, and session ID when launched from a Nyx predecessor stack.

nyx-event-pages now asserts the /events/march-equinox recommendation CTA telemetry, follows the real /domains/tara?origin=explore&stack=nyx route into the immersive ritual player, verifies the Nyx handoff start telemetry on the Play control, completes the session, and still verifies the reciprocal Tara → Nyx completion card. The journey remains partial for tone-band enforcement, Nisaba canon cross-link gating, crisis/cadence/offline failure modes, and the future Iris memory re-surface reason.

Verification:

  • pnpm --dir apps/oshun/web exec vitest run src/components/domains/nyx/__tests__/nyxEventPageModels.test.ts src/components/domains/nyx/__tests__/NyxEventDetailWorkspace.test.tsx src/components/domains/tara/__tests__/SessionPlayer.test.tsx
    • passed: 3 files, 87 tests
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/domains/nyx/nyxEventPageModels.ts apps/oshun/web/src/components/domains/nyx/NyxEventDetailWorkspace.tsx apps/oshun/web/src/components/domains/TaraSurface.tsx apps/oshun/web/src/components/domains/tara/SessionPlayer.tsx apps/oshun/web/src/components/domains/nyx/__tests__/nyxEventPageModels.test.ts apps/oshun/web/src/components/domains/nyx/__tests__/NyxEventDetailWorkspace.test.tsx apps/oshun/web/src/components/domains/tara/__tests__/SessionPlayer.test.tsx apps/oshun/web/e2e/nyx-event-pages.spec.ts
    • passed with the repo's existing Next pages-directory warning
  • python3 tools/render-vdocs.py
    • passed: rendered 1607 files
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing broad verification process; Playwright memory stayed above 12 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nyx-event-pages.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "opens Tara perspective recommendations from selected Nyx content"
    • passed: 1 passed

157. 2026-06-26 Assistant live grounding inspection#

Closed the browser-visible grounding-inspection gap for assistant-handoff-context-carry. The BFF assistant message route now derives a narrow response.grounding projection from real Veritas article cards when the live turn is backed by source metadata. The browser continuity journey opens the assistant from the Veritas domain context, sends a real message through /v1/assistant/sessions/:sessionId/message, asserts the grounded envelope names the International Energy Agency source, then clicks Inspect evidence and verifies the shared Veritas inspection overlay renders grounding level, support count, citation list, source name, and the source-directory action.

The same pass exposed latent contrast issues in the grounded badge row and assistant action pills once a live grounded turn became visible. The UI now uses theme-aware --l-ok-text and existing accent-text tokens for tinted pill labels, removes the count opacity that washed out the citation total, and lifts the assistant confidence label to var(--l-muted).

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/assistant.ts apps/oshun/web/e2e/assistant-continuity-journey.spec.ts WALKTHROUGH/journeys/assistant-handoff-context-carry.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/assistant-handoff-context-carry.md
    • passed
  • pnpm exec prettier --write apps/oshun/web/src/design-system/lilith/lilith.css apps/oshun/web/src/design-system/components/GroundingStateBadge.tsx apps/oshun/web/src/design-system/components/GroundingLevelBadge.tsx apps/oshun/web/src/components/assistant/AssistantPanel.tsx apps/oshun/web/src/app/globals.css apps/oshun/bff/src/routes/assistant.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/assistant.ts apps/oshun/web/e2e/assistant-continuity-journey.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/assistant.ts apps/oshun/web/e2e/assistant-continuity-journey.spec.ts apps/oshun/web/src/design-system/components/GroundingStateBadge.tsx apps/oshun/web/src/design-system/components/GroundingLevelBadge.tsx apps/oshun/web/src/components/assistant/AssistantPanel.tsx
    • passed with the known Next pages-directory warning
  • pnpm --dir apps/oshun/web exec vitest run src/design-system/components/__tests__/GroundingStateBadge.test.tsx src/design-system/components/__tests__/GroundingLevelBadge.test.tsx src/components/assistant/__tests__/AssistantPanel.test.tsx
    • passed: 3 files / 39 tests
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 tools/render-vdocs.py
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/assistant-continuity-journey.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "opens evidence inspection for a live grounded Veritas assistant turn"
    • first run failed only the shared axe gate on low-contrast grounded/inspect labels; after the contrast fix, passed: 1 passed

156. 2026-06-26 Assistant null-artifact handoff copy#

Closed the browser-visible null-artifact branch for assistant-handoff-context-carry. The assistant context handoff panel now renders a stable artifact chip id and shows "Artifact: no current artifact" when the sanitized handoff has no artifact, instead of implying a generic current-screen artifact.

Component coverage renders an explicit sanitized null-artifact handoff and asserts data-assistant-context-artifact="none" plus the exact chip copy. The real browser continuity journey opens the assistant from /explore, waits for the live session-create handoff, and asserts the same user-visible null-artifact copy in the mounted assistant panel. The BFF mismatched-shell rejection remains covered by assistant-session-bff; the remaining browser-side gap is the entity-mismatch variant.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/ShellLayout.tsx apps/oshun/web/src/components/__tests__/ShellLayout.test.tsx apps/oshun/web/src/components/assistant/AssistantPanel.tsx apps/oshun/web/src/components/assistant/__tests__/AssistantPanel.test.tsx apps/oshun/web/e2e/assistant-continuity-journey.spec.ts WALKTHROUGH/journeys/assistant-handoff-context-carry.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/assistant/__tests__/AssistantPanel.test.tsx
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/ShellLayout.test.tsx
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/ShellLayout.tsx apps/oshun/web/src/components/__tests__/ShellLayout.test.tsx apps/oshun/web/src/components/assistant/AssistantPanel.tsx apps/oshun/web/src/components/assistant/__tests__/AssistantPanel.test.tsx apps/oshun/web/e2e/assistant-continuity-journey.spec.ts
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/assistant-continuity-journey.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "hands back into assistant memory from explore"
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/ShellLayout.tsx apps/oshun/web/src/components/__tests__/ShellLayout.test.tsx apps/oshun/web/src/components/assistant/AssistantPanel.tsx apps/oshun/web/src/components/assistant/__tests__/AssistantPanel.test.tsx apps/oshun/web/e2e/assistant-continuity-journey.spec.ts WALKTHROUGH/journeys/assistant-handoff-context-carry.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

158. 2026-06-26 Assistant Tara to Veritas continuity depth#

Closed the cross-domain navigation-depth gap for assistant-handoff-context-carry. The browser journey now starts on /domains/tara?origin=explore, clicks the real Veritas domain shortcut, and opens the assistant from the Veritas persistent-context strip. The live session-create payload proves the assistant receives the Veritas handoff with activeRoute='/domains/veritas?origin=explore&stack=tara'; the mounted assistant strip and rail prove the user-visible return-thread and return-anchor links preserve the Explore anchor and Tara trail.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/assistant-continuity-journey.spec.ts WALKTHROUGH/journeys/assistant-handoff-context-carry.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/assistant-handoff-context-carry.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • python3 tools/render-vdocs.py
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/assistant-continuity-journey.spec.ts
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/assistant-continuity-journey.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "preserves cross-domain navigation depth when opening assistant after Tara to Veritas"
    • passed: 1 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/assistant-continuity-journey.spec.ts WALKTHROUGH/journeys/assistant-handoff-context-carry.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/assistant-handoff-context-carry.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

160. 2026-06-26 Nyx service-worker notification routing#

Closed the local service-worker leg of nyx-event-calendar-sync-reminder steps 7-8. A new Playwright spec loads the shipped apps/oshun/web/public/sw.js runtime, dispatches a Nyx event reminder push payload, and proves showNotification preserves the exact Nyx event actionPath, tag: oshun-nyx, notification id, and domain metadata. It then drives the notificationclick handler for both branches: no existing app window cold-opens /domains/nyx/events/jupiter-venus-conjunction, while an existing Oshun window receives OSHUN_NOTIFICATION_TAP and is focused instead of opening a duplicate. The journey remains partial because external push/email/SMS provider delivery, OS notification-tray tap automation, and quiet-hours dispatcher scheduling remain outside the local harness, but the shipped local SW routing contract is no longer untested.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/nyx-service-worker-notification.spec.ts WALKTHROUGH/journeys/nyx-event-calendar-sync-reminder.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/nyx-service-worker-notification.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nyx-service-worker-notification.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 2 passed
  • python3 tools/render-vdocs.py
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/nyx-service-worker-notification.spec.ts WALKTHROUGH/journeys/nyx-event-calendar-sync-reminder.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

159. 2026-06-26 Assistant profile and notebook recall copy#

Closed the browser-visible profile + notebook Iris recall-copy gap for assistant-handoff-context-carry. The shell now recognizes Nisaba notebook routes like /domains/nisaba?...path=/workspace/notebook/nisaba-notebook-1 as domain.notebook assistant artifacts and stamps artifact.metadata.notebookId into the sanitized handoff. The browser journey grants real Iris consents, enables profile memory through /v1/preferences, writes profile and notebook memories through /v1/iris/adapter/remember, opens the assistant from the live Nisaba notebook route, sends a real assistant message, and proves both the BFF response.memoryRecall envelope and the mounted transcript render Remembered context:, Profile memory:, Notebook memory:, and Memory: profile.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/ShellLayout.tsx apps/oshun/web/src/components/__tests__/ShellLayout.test.tsx apps/oshun/web/e2e/assistant-continuity-journey.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/ShellLayout.test.tsx
    • passed: 1 file / 59 tests
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/ShellLayout.tsx apps/oshun/web/src/components/__tests__/ShellLayout.test.tsx apps/oshun/web/e2e/assistant-continuity-journey.spec.ts
    • passed, with the repo's known Next pages-directory warning
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/assistant-continuity-journey.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "renders profile and notebook Iris recall copy in the browser transcript"
    • passed: 1 passed
  • python3 tools/render-vdocs.py
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/ShellLayout.tsx apps/oshun/web/src/components/__tests__/ShellLayout.test.tsx apps/oshun/web/e2e/assistant-continuity-journey.spec.ts WALKTHROUGH/journeys/assistant-handoff-context-carry.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/assistant-handoff-context-carry.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

157. 2026-06-26 Assistant entity-mismatch handoff sanitization#

Closed the browser-visible entity-mismatch branch for assistant-handoff-context-carry. The shell can now drive a fixed wrong-shell entity preview through the real browser, keeps the sanitizer authoritative, then retries with entity: null and an artifact metadata marker instead of dropping the whole handoff.

Component coverage asserts the shell retry removes the wrong-shell entity and adds entitySanitization='entity-shell-mismatch' without copying preview metadata. Assistant panel coverage asserts the sanitized handoff is posted with entity: null, exposes data-assistant-context-entity="none" and data-assistant-context-entity-state="shell-mismatch", and renders the exact "Entity: removed (shell mismatch)" chip without the dropped admin label. The real browser continuity journey opens /search with the mismatch preview, captures the live /v1/assistant/sessions POST, and verifies the same wire and DOM contracts.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/ShellLayout.tsx apps/oshun/web/src/components/__tests__/ShellLayout.test.tsx apps/oshun/web/src/components/assistant/AssistantPanel.tsx apps/oshun/web/src/components/assistant/__tests__/AssistantPanel.test.tsx apps/oshun/web/e2e/assistant-continuity-journey.spec.ts
    • passed, with the repo's known Next pages-directory warning
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/ShellLayout.test.tsx src/components/assistant/__tests__/AssistantPanel.test.tsx
    • passed: 2 files / 85 tests
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 tools/render-vdocs.py
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/assistant-continuity-journey.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "drops a browser-visible entity shell mismatch before session creation"
    • passed: 1 passed

155. 2026-06-26 Nisaba offline lexicon/morphology hint#

Closed the remaining Step-4 uncached lookup degradation gap for offline-first-time-use. The Nisaba lexicon/morphology inspector now carries an explicit offline state: cached term forms and morphology detail stay visible, while the live lookup refresh affordance is disabled with "Available when online" copy. The treatment is inline inside the existing inspector so the reading lane does not gain another banner or modal.

NisabaSurface component coverage now renders the lexicon route with navigator.onLine=false and asserts the offline copy, disabled online-only lookup control, and preserved morphology detail. nisaba-split-view extends the live-BFF passage hydration leg: after the authenticated workspace opens ?view=lexicon&term=term-attention, Chromium goes offline and the real browser asserts the lexicon workspace flips to data-nisaba-lexicon-online="false", shows the cached-term offline hint, disables the online-only lookup action, and keeps the selected morphology detail visible.

offline-first-time-use remains partial only for natural browser-delivered sync scheduling/replay on the specific search/Tara write surfaces.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/domains/__tests__/NisabaSurface.test.tsx apps/oshun/web/e2e/nisaba-split-view.spec.ts WALKTHROUGH/journeys/offline-first-time-use.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/offline-first-time-use.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/domains/__tests__/NisabaSurface.test.tsx
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/domains/__tests__/NisabaSurface.test.tsx apps/oshun/web/e2e/nisaba-split-view.spec.ts
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-split-view.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "passage hydration opens lexicon"
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/domains/__tests__/NisabaSurface.test.tsx apps/oshun/web/e2e/nisaba-split-view.spec.ts WALKTHROUGH/journeys/offline-first-time-use.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/offline-first-time-use.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

154. 2026-06-26 Nisaba 24h offline cache expiry#

Closed the fresh/expired Step-4 cache-window gap for offline-first-time-use. The service worker now treats the Nisaba offline BFF allowlist as a strict 24-hour cache: fresh cached /v1/nisaba/passages/daily data can still be served by the real service worker while the browser is offline, but an entry older than NISABA_OFFLINE_BFF_MAX_AGE_MS no longer silently serves stale text when the network is unavailable. Instead, sw.js returns a 503 no-store JSON response with code: "NISABA_OFFLINE_CACHE_EXPIRED" and a reconnect message.

Client-side Nisaba localStorage snapshots now apply the same 24-hour max age, so an expired local snapshot cannot bypass the service-worker expiry. The Nisaba workspace renders a compact inline Offline passage expired status when the BFF cache has aged out, preserving the existing reading-lane layout rather than adding a new modal or banner.

offline-shell-routes now proves the behavior against the real service worker: it seeds oshun-bff-v<N> with a fresh /v1/nisaba/passages/daily response, takes Chromium offline, fetches the allowlisted path through the active sw.js, and asserts the fresh cached passage JSON is returned. It then replaces that same cache key with a 25-hour-old response, clears local snapshots, fetches the path offline again, and asserts the 503 no-store expired-cache response. The workspace expired-cache UI is covered by the focused NisabaSurface component test. offline-first-time-use remains partial for natural browser-delivered sync scheduling/replay on the specific search/Tara write surfaces and the uncached Nisaba lexicon/morphology offline hint.

Verification:

  • pnpm exec prettier --write apps/oshun/web/public/sw.js apps/oshun/web/src/__tests__/pwa-service-worker-policy.test.ts apps/oshun/web/src/lib/nisaba-offline.ts apps/oshun/web/src/lib/nisaba-offline.test.ts apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/domains/__tests__/NisabaSurface.test.tsx apps/oshun/web/e2e/offline-shell-routes.spec.ts WALKTHROUGH/journeys/offline-first-time-use.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/offline-first-time-use.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/__tests__/pwa-service-worker-policy.test.ts src/lib/nisaba-offline.test.ts src/components/domains/__tests__/NisabaSurface.test.tsx
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/public/sw.js apps/oshun/web/src/__tests__/pwa-service-worker-policy.test.ts apps/oshun/web/src/lib/nisaba-offline.ts apps/oshun/web/src/lib/nisaba-offline.test.ts apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/domains/__tests__/NisabaSurface.test.tsx apps/oshun/web/e2e/offline-shell-routes.spec.ts
    • passed
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, no competing broad verification process; Playwright memory stayed above 10 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/offline-shell-routes.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "24-hour Nisaba"
    • passed: 1 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/public/sw.js apps/oshun/web/src/__tests__/pwa-service-worker-policy.test.ts apps/oshun/web/src/lib/nisaba-offline.ts apps/oshun/web/src/lib/nisaba-offline.test.ts apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/domains/__tests__/NisabaSurface.test.tsx apps/oshun/web/e2e/offline-shell-routes.spec.ts WALKTHROUGH/journeys/offline-first-time-use.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/offline-first-time-use.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

95. 2026-06-25 Nisaba scholarly-read route and row-cell addendum#

Closed the remaining ambiguity in the Nisaba scholarly-read journey by separating the real search destination from the compact desk route. Search result clicks now assert the live /domains/nisaba reader through stable workspace, signal, reading-frame, action, and quick-action anchors. The compact /nisaba desk now exposes row/cell anchors for page/header/language/sections/ marginalia/body/graph/related data, and scholar mode exposes marginalia, highlight, apparatus, witness, cross-reference, and concept row/cell anchors.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/lilith/rooms.tsx apps/oshun/web/src/components/lilith/nisaba.tsx apps/oshun/web/e2e/nisaba-scholarly-read.spec.ts apps/oshun/web/src/app/nisaba/__tests__/page.test.tsx

    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/app/nisaba/__tests__/page.test.tsx src/components/domains/__tests__/NisabaSurface.test.tsx

    • 2 files passed; 53 tests passed
  • Resource gate before Playwright

    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during the final Playwright run, available memory stayed above 8.9 GiB and returned to 13 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-scholarly-read.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list

    • 6 passed
  • Resource gate before typecheck

    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck

    • first run failed on stale generated .next/dev/types/routes.d.ts; removed generated apps/oshun/web/.next, reran after a fresh resource gate with 13 GiB available, and the clean typecheck passed
  • python3 V5/tools/validate-v5-docs.py

    • passed
  • pnpm exec prettier --write apps/oshun/web/e2e/nisaba-scholarly-read.spec.ts WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/journeys/coverage.md

    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/lilith/rooms.tsx apps/oshun/web/src/components/lilith/nisaba.tsx apps/oshun/web/e2e/nisaba-scholarly-read.spec.ts apps/oshun/web/src/app/nisaba/__tests__/page.test.tsx WALKTHROUGH/customer/07-nisaba/nisaba.md WALKTHROUGH/customer/07-nisaba/nisaba-scholar.md WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md

    • passed
  • git diff --check

    • passed

110. 2026-06-25 Profile Safety live crisis-frame recovery route journey#

Deepened the crisis-aware tone-policy journey for /profile/safety from a browser route-mock into a real-dev-infra path. The page now waits for the authenticated AuthProvider token before reading GET /v1/safety/crisis-frames/mine, and it explicitly maps the BFF CrisisKind taxonomy into Lilith recovery types before building stillness, re-entry, check-in, and incident-record state. This closes the prior hidden taxonomy mismatch where the mock used acute-grief while the live activation route emits trust-safety kinds such as suicidal-ideation.

profile-safety-crisis-recovery.spec.ts now signs in unique members, proves the real no-frame empty state, activates a crisis frame through POST /v1/admin/safety/crisis-frame/activate, polls the member's real /v1/safety/crisis-frames/mine readback until the durable projection appears, then drives /profile/safety with no route interception. It verifies stillness suspension/lift across the rendered non-safety surfaces, re-entry accept and decline, 24h deliver/dismiss, 7d opt-out, resource visibility, anonymous redirect-before-render, and the shared axe gate.

Walkthrough updates:

  • WALKTHROUGH/customer/09-account/profile-safety.md now documents the real BFF read contract, local recovery-state persistence, covered states and interactions, and remaining gaps: timeline/history, resource links, export, server writeback for recovery choices, operator parity, and cold offline.
  • WALKTHROUGH/journeys/crisis-aware-tone-policy.md and WALKTHROUGH/journeys/coverage.md now describe the live browser proof and keep the journey honestly partial because customer-input-triggered browser activation, false-positive dismissal, public web safety surface, and re-frame e2e remain uncovered.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.tsx apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.test.tsx apps/oshun/web/e2e/profile-safety-crisis-recovery.spec.ts

    • passed; repo emitted the existing Next pages-directory warning
    • post-rebase rerun after origin/main moved to 4eed79ba9e: passed with the same existing warning
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/app/profile/safety/ProfileSafetyJourney.test.tsx

    • first run: 5 failed by timeout because the test auth mock returned a new getAccessToken function every render, causing the component fetch effect to refire indefinitely
    • after stabilizing the auth mock accessor: 5 passed
    • post-rebase rerun after origin/main moved to 4eed79ba9e: 5 passed
  • Resource gate before typecheck / Playwright

    • before typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers
    • before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 12 GiB
    • post-rebase before rerun: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 12 GiB
  • pnpm nx run @oshun/web:typecheck

    • passed
    • post-rebase rerun after origin/main moved to 4eed79ba9e: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-safety-crisis-recovery.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list

    • 4 passed
    • post-rebase rerun after origin/main moved to 4eed79ba9e: 4 passed
  • python3 V5/tools/validate-v5-docs.py

    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.tsx apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.test.tsx apps/oshun/web/e2e/profile-safety-crisis-recovery.spec.ts WALKTHROUGH/customer/09-account/profile-safety.md WALKTHROUGH/journeys/crisis-aware-tone-policy.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md

    • passed
  • git diff --check

    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/operator/audit/page.tsx apps/oshun/web/e2e/tenant-audit-log-investigation.spec.ts WALKTHROUGH/operator/operator-audit.md WALKTHROUGH/journeys/tenant-audit-log-investigation.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md

    • passed
  • git diff --check

    • passed
  • python3 V5/tools/validate-v5-docs.py

    • passed
  • git diff --check

    • passed

163. 2026-06-26 Tenant integrations downstream API-key auth probe#

Closed the downstream API-key-authenticated resource gap for tenant-integrations-api-keys-webhooks. The BFF now exposes GET /v1/integrations/auth-probe as a narrow tenant-resource probe backed by the same registry store that creates API keys. It accepts x-oshun-api-key, updates the redacted key's lastUsedAt, enforces tenant and required-scope boundaries, honors IP allowlists, and rejects missing, unknown, revoked, and expired keys without leaking raw tokens or hashes.

tenant-integrations-api-keys-webhooks-bff.spec.ts now drives the full route against the real dev BFF: create key -> call tenant resource -> snapshot lastUsedAt read-back, scope denial, tenant mismatch, IP denial, and revoked-key denial. Store and Fastify route tests cover the same behavior below the browser runner.

The journey remains partial only for tenant-admin UI controls, live outbound delivery retry/dead-letter workers, real connector health probes, and partner endpoint receipt.

Verification:

  • pnpm --dir apps/oshun/bff exec vitest run src/admin/admin-integrations-registry-store.test.ts src/__tests__/admin-integrations-registry-route.test.ts

    • passed: 27 passed
  • pnpm exec prettier --write apps/oshun/bff/src/admin/admin-integrations-registry-store.ts apps/oshun/bff/src/routes/admin-integrations-registry.ts apps/oshun/bff/src/admin/admin-integrations-registry-store.test.ts apps/oshun/bff/src/__tests__/admin-integrations-registry-route.test.ts apps/oshun/web/e2e/tenant-integrations-api-keys-webhooks-bff.spec.ts

    • passed
  • Resource gate before targeted typecheck / Playwright

    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing build/test process; during Playwright, available memory stayed around 13 GiB
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/admin/admin-integrations-registry-store.ts apps/oshun/bff/src/routes/admin-integrations-registry.ts apps/oshun/bff/src/admin/admin-integrations-registry-store.test.ts apps/oshun/bff/src/__tests__/admin-integrations-registry-route.test.ts apps/oshun/web/e2e/tenant-integrations-api-keys-webhooks-bff.spec.ts

    • passed
  • pnpm nx run @oshun/bff:typecheck

    • passed
  • pnpm --dir apps/oshun/web typecheck

    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-integrations-api-keys-webhooks-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list

    • passed: 2 passed
  • python3 tools/render-vdocs.py

    • passed
  • python3 V5/tools/validate-v5-docs.py

    • passed
  • git diff --check

    • passed
  • Resource gate before Playwright

    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed around 12 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-notifications-index.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list

    • 1 passed

68. 2026-06-25 Profile notifications mobile-grid addendum#

Closed the remaining /profile/notifications responsive-layout question in the route walkthrough. The channel summary grid now uses intrinsic auto-fit/minmax columns instead of a fixed two-column template, so desktop can show multiple columns while phone widths stack the channel rows. The focused real-dev-infra Playwright spec now includes a 390 px viewport assertion that the four real-BFF channel cards render in one column without horizontal overflow.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/profile/notifications/page.tsx apps/oshun/web/e2e/profile-notifications-index.spec.ts

    • passed
  • pnpm --dir apps/oshun/web typecheck

    • passed
  • python3 V5/tools/validate-v5-docs.py

    • passed
  • git diff --check

    • passed
  • Resource gate before Playwright

    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed around 12 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-notifications-index.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list

    • 2 passed

69. 2026-06-25 Verify-email next-target/tap-target addendum#

Closed the /auth/verify-email route-walk gap around post-verification continuation. The verify-email page walkthrough is now marked walked, the route matrix row is promoted from drafted to walked, and the first-time anonymous visitor coverage links call out both the real Mailpit verify-link journey and the page-level round-trip spec. The Continue action now preserves a safe app-relative next=/tara target through the onboarding handoff, drops unsafe external next values to /, and has a measured 44 px minimum target height at 390 px width.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/auth/verify-email/page.tsx apps/oshun/web/src/components/auth/VerifyEmailConfirm.tsx apps/oshun/web/e2e/email-verify-roundtrip.spec.ts WALKTHROUGH/customer/00-public/auth-verify-email.md WALKTHROUGH/journeys/first-time-anonymous-visitor.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/README.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/auth/verify-email/page.tsx apps/oshun/web/src/components/auth/VerifyEmailConfirm.tsx apps/oshun/web/e2e/email-verify-roundtrip.spec.ts
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/auth/VerifyEmailConfirm.test.tsx
    • 5 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 9 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/email-verify-roundtrip.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 6 passed

70. 2026-06-25 Assistant route walk/tap-target addendum#

Closed the /assistant route-walk gap in the route inventory. The assistant entry route walkthrough is now marked walked, the route matrix row is promoted from drafted to walked, and the route doc now ties the signed-in gate to proxy.ts instead of leaving it as an open question. The explicit "Open assistant" button now has a 44 px minimum target height, the mobile browser spec measures it at 390 px, and the assistant preview card's primary and secondary links are clicked through to /assistant and / respectively.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/assistant/AssistantEntryRoute.tsx apps/oshun/web/e2e/shared-shell-entry-routes.spec.ts apps/oshun/web/e2e/shell-surface-states.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts WALKTHROUGH/customer/02-home-discovery/assistant.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/assistant/AssistantEntryRoute.tsx apps/oshun/web/e2e/shared-shell-entry-routes.spec.ts apps/oshun/web/e2e/shell-surface-states.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/__tests__/middleware-public-paths.test.ts
    • 35 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 7 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/shared-shell-entry-routes.spec.ts e2e/shell-surface-states.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 15 passed

71. 2026-06-25 Integrity appeal route walk/tap-target addendum#

Closed the /integrity/[verdictId]/appeal route-walk gap in the route inventory. The appeal route walkthrough is now marked walked, the route matrix row is promoted from drafted to walked, and the route doc now ties the signed-in gate to proxy.ts with a proxy-unit assertion. The form controls now guarantee a 44 px minimum touch target through the shared input style, and the browser spec delays the real audit fetch long enough to prove the loading state before measuring the name, narrative, relief, and File appeal controls at 390 px.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/integrity/IntegrityAppealWorkspace.tsx apps/oshun/web/e2e/integrity-appeal.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts WALKTHROUGH/customer/08-metis/integrity-verdictId-appeal.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/integrity/IntegrityAppealWorkspace.tsx apps/oshun/web/e2e/integrity-appeal.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/__tests__/middleware-public-paths.test.ts
    • 36 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 9 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/integrity-appeal.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 13 passed

72. 2026-06-25 Notifications route loading/tap-target addendum#

Closed the /notifications route-walk loading and mobile-action gaps. The full-page inbox now shows a dedicated [data-notifications-loading] role="status" while the live feed request is pending, keeps the empty block hidden until a successful empty response, and exposes 44 px tap targets for mark-all-read, Reset filters, toggle-read, and dismiss. The route walkthrough is now marked walked, the matrix row is promoted from drafted to walked, and the proxy unit coverage asserts both anonymous redirect and signed-in pass-through for /notifications.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/NotificationsCenterPanel.tsx apps/oshun/web/e2e/notifications-route.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts WALKTHROUGH/customer/02-home-discovery/notifications.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/NotificationsCenterPanel.tsx apps/oshun/web/e2e/notifications-route.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/__tests__/middleware-public-paths.test.ts
    • 37 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 9 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/notifications-route.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 9 passed

73. 2026-06-25 Personas picker loading/retry/tap-target addendum#

Closed the /personas route-walk state and action-accessibility gaps. The persona picker now distinguishes first-load status, retryable load failures, true empty catalogue, consent-blocked no-eligible state, and post-action status announcements. Select and clear controls expose explicit ARIA labels, busy / disabled semantics, and 44 px minimum tap targets. The browser coverage keeps the live BFF consent → select → active read-back → clear persistence path, and adds deterministic route-stubbed loading, retry, empty-catalogue, and measured tap-target assertions. The route walkthrough is now marked walked and the matrix row is promoted from drafted to walked.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/personas/PersonaPicker.tsx apps/oshun/web/e2e/personas-picker.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts WALKTHROUGH/customer/10-lilith/personas.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/personas/PersonaPicker.tsx apps/oshun/web/e2e/personas-picker.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/personas/PersonaPicker.test.tsx src/__tests__/middleware-public-paths.test.ts
    • 44 passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 9 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/personas-picker.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 9 passed

74. 2026-06-25 Operator LMS validator accessibility addendum#

Closed the /operator/lms route-walk validator semantics and footer target gaps. The dry-run validator now uses a native disabled button for empty and pending states, exposes aria-disabled / aria-busy, and announces validation errors/results through alert/status regions. The focused browser coverage continues to run the real-BFF validator legs and now also measures the validate button plus footer action targets at 44 px. The route walkthrough is now marked walked and the matrix row is promoted from drafted to walked.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/lilith/LmsConnectorValidateForm.tsx apps/oshun/web/src/app/operator/lms/page.tsx apps/oshun/web/e2e/operator-lms.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts WALKTHROUGH/operator/operator-lms.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/lilith/LmsConnectorValidateForm.tsx apps/oshun/web/src/app/operator/lms/page.tsx apps/oshun/web/e2e/operator-lms.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/app/operator/lms/__tests__/page.test.tsx src/__tests__/middleware-public-paths.test.ts
    • 43 passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 9 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-lms.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 9 passed

75. 2026-06-25 Operator personas lifecycle accessibility addendum#

Closed the /operator/personas route-walk layout, tap-target, submit-state, and proxy-gate gaps. The persona lifecycle console now stacks roster/detail at mobile width, gives roster/form/apply controls 44 px minimum targets, exposes the transition submit as a native disabled/busy button, announces transition errors as alerts, and keeps the footer links at 44 px. The route walkthrough is now marked walked and the matrix row is promoted from drafted to walked.

Verification:

  • psql --version
    • already installed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/components/lilith/PersonaLifecycleConsole.tsx apps/oshun/web/src/components/lilith/PersonaLifecycleConsole.test.tsx apps/oshun/web/src/app/operator/personas/page.tsx apps/oshun/web/e2e/operator-personas-console.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts WALKTHROUGH/operator/operator-personas.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/lilith/PersonaLifecycleConsole.tsx apps/oshun/web/src/components/lilith/PersonaLifecycleConsole.test.tsx apps/oshun/web/src/app/operator/personas/page.tsx apps/oshun/web/e2e/operator-personas-console.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/lilith/PersonaLifecycleConsole.test.tsx src/__tests__/middleware-public-paths.test.ts
    • 46 passed
  • Resource gate before broad checks
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 8.8 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-personas-console.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 6 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/lilith/PersonaLifecycleConsole.tsx apps/oshun/web/src/components/lilith/PersonaLifecycleConsole.test.tsx apps/oshun/web/src/app/operator/personas/page.tsx apps/oshun/web/e2e/operator-personas-console.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts WALKTHROUGH/operator/operator-personas.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

76. 2026-06-25 Settings direct-route accessibility addendum#

Closed the /settings direct-route walk gaps for profile edit/save, sync, export, sign-out, mobile tap targets, and proxy gating. ProfileSettingsPanel now gives the edit/save/cancel icon controls, sync refresh, account shortcut, and footer actions 44 px targets where needed; save/cancel/sign-out controls also expose explicit labels or disabled/busy ARIA. The direct-route browser coverage now exercises /settings itself rather than relying only on /profile for save/sync behavior, and the route walkthrough plus matrix row are marked walked.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/ProfileSettingsPanel.tsx apps/oshun/web/e2e/shared-shell-entry-routes.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts WALKTHROUGH/customer/09-account/settings.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/ProfileSettingsPanel.tsx apps/oshun/web/e2e/shared-shell-entry-routes.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/__tests__/middleware-public-paths.test.ts
    • 41 passed
  • Resource gate before broad checks
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 8.9 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/shared-shell-entry-routes.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 6 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/ProfileSettingsPanel.tsx apps/oshun/web/e2e/shared-shell-entry-routes.spec.ts apps/oshun/web/src/__tests__/middleware-public-paths.test.ts WALKTHROUGH/customer/09-account/settings.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

77. 2026-06-25 Neith inverse modeling evaluator accessibility addendum#

Closed the /studio/neith/inverse-modeling route-walk gaps for the live fit-quality evaluator. The lane now exposes catalog and evaluate failures as alerts, provides a native retry button for recoverable catalog outages, disables and marks the submit button busy while evaluation is pending, announces results through a status region, and keeps the payload, submit, retry, and quick-action targets at or above 44 px. The walkthrough is marked walked while preserving the open product mismatch between the current JSON evaluator and V1/TODOS.md §34's image-to-parameter/export-manifest workflow.

Verification:

  • psql --version
    • already installed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioNeithInverseModelingWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-neith-inverse-modeling.spec.ts apps/oshun/web/src/app/studio/neith/inverse-modeling/page.tsx WALKTHROUGH/studio/domain-bridges/neith/studio-neith-inverse-modeling.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioNeithInverseModelingWorkspace.tsx apps/oshun/web/src/app/studio/neith/inverse-modeling/page.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-neith-inverse-modeling.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioNeithInverseModelingWorkspace.test.tsx src/components/__tests__/StudioNeithInverseModelingWorkspace.integration.test.tsx src/components/__tests__/StudioNeithInverseModelingPage.test.tsx src/components/__tests__/StudioNeithInverseModelingRouteMap.test.ts
    • 10 passed
  • Resource gate before broad checks
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 9.6 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-neith-inverse-modeling.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 6 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/studio/StudioNeithInverseModelingWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-neith-inverse-modeling.spec.ts apps/oshun/web/src/app/studio/neith/inverse-modeling/page.tsx WALKTHROUGH/studio/domain-bridges/neith/studio-neith-inverse-modeling.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

78. 2026-06-25 Library collection direct-route state addendum#

Closed the /library/collection/[collectionId] direct-route state gaps for found, unknown, stored-custom, corrupt-storage, query-seeded, edit-persisted, and add/remove membership cases. Unknown collection IDs now keep the URL but resolve to normal filtered Library mode instead of silently selecting the first default collection. The collection E2E seeds real BFF saved items for the authenticated browser session, blocks service workers for deterministic reads, and verifies localStorage custom collection hydration, invalid item-id sanitization, follow-up edit persistence across reload, corrupt payload fallback, create-from-filter navigation, membership count recomputation, archive, and the desktop return lane.

Verification:

  • psql --version
    • already installed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/components/library/LibraryDashboard.tsx apps/oshun/web/src/components/library/__tests__/LibraryDashboard.test.tsx apps/oshun/web/e2e/library-collection-management.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/library/LibraryDashboard.tsx apps/oshun/web/src/components/library/__tests__/LibraryDashboard.test.tsx apps/oshun/web/e2e/library-collection-management.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/library/__tests__/LibraryDashboard.test.tsx
    • 25 passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 9 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/library-collection-management.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 6 passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/library/LibraryDashboard.tsx apps/oshun/web/src/components/library/__tests__/LibraryDashboard.test.tsx apps/oshun/web/e2e/library-collection-management.spec.ts WALKTHROUGH/customer/02-home-discovery/library-collection-collectionId.md WALKTHROUGH/journeys/library-save-collection-share.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

79. 2026-06-25 Profile Telegram bridge direct-route addendum#

Closed the /profile/telegram page-DOM coverage gap for the customer Telegram bridge. The route now exposes non-visual state anchors for the not-linked and linked cards, and the new Playwright spec drives the real BFF link lifecycle: authenticated GET /v1/telegram/link mints a nonce, the page renders the exact t.me deep-link href, POST /telegram/webhook with /start link-<nonce> completes the link, the BFF read-back reports linked: true, and the route reloads into the linked card with the /unlink instruction. The same spec checks footer navigation targets and proves anonymous users redirect before the route renders.

Verification:

  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 12 GiB.
  • pnpm exec prettier --write apps/oshun/web/src/app/profile/telegram/page.tsx apps/oshun/web/e2e/profile-telegram-bridge.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/profile/telegram/page.tsx apps/oshun/web/e2e/profile-telegram-bridge.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-telegram-bridge.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 3 passed
  • pnpm exec prettier --write apps/oshun/web/src/app/profile/telegram/page.tsx apps/oshun/web/e2e/profile-telegram-bridge.spec.ts WALKTHROUGH/customer/09-account/profile-telegram.md WALKTHROUGH/journeys/telegram-bot-assistant-delivery.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/profile/telegram/page.tsx apps/oshun/web/e2e/profile-telegram-bridge.spec.ts WALKTHROUGH/customer/09-account/profile-telegram.md WALKTHROUGH/journeys/telegram-bot-assistant-delivery.md WALKTHROUGH/journeys/coverage.md
    • passed
  • git diff --check
    • passed

80. 2026-06-25 Billing index direct-route addendum#

Closed the /billing direct-route coverage gap for the static billing directory. The page now exposes stable anchors for the card, rail links, and steward mailto: link; its bare main surface uses 100svh and safe-area-aware padding; and each rail/mail target has a 44 px tap floor. The Playwright spec seeds a real customer session, verifies the signed-in page-DOM render, checks the crypto/profile/AAA/mailto hrefs, proves the phone viewport has no horizontal overflow, and confirms anonymous users redirect to /welcome before the billing page renders.

Verification:

  • psql --version
    • already installed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/app/billing/page.tsx apps/oshun/web/e2e/billing-index.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/billing/page.tsx apps/oshun/web/e2e/billing-index.spec.ts
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 12 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/billing-index.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 3 passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/billing/page.tsx apps/oshun/web/e2e/billing-index.spec.ts WALKTHROUGH/customer/09-account/billing.md WALKTHROUGH/journeys/sign-up-and-pay-crypto.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

81. 2026-06-25 Operator index and tenant-console direct-route addendum#

Closed the page-DOM/direct-route layer for the operator index and tenant console, and recorded the existing incident-queue smoke in the route walkthrough. The operator index now exposes stable anchors for the main region, surface grid, and each shipped surface link. The tenant console now exposes stable anchors for the main region, KPI cells, member header columns, member rows, fixture plan/status variants, and the inert Export CSV placeholder. The Playwright spec verifies signed-in /operator, all four surface codes/titles/hrefs, 44 px surface-link targets, keyboard Enter into /operator/tenant, click navigation into /operator/admin, signed-in /operator/tenant KPI/table/dialog state, signed-in /operator/incidents severity/mitigation smoke, and anonymous redirect-before-render for /operator and /operator/tenant.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/operator/page.tsx apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/e2e/operator-surfaces.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/operator/page.tsx apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/e2e/operator-surfaces.spec.ts
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 8.6 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-surfaces.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 5 passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/operator/page.tsx apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/e2e/operator-surfaces.spec.ts WALKTHROUGH/operator/operator-overview.md WALKTHROUGH/operator/operator-tenant.md WALKTHROUGH/operator/operator-incidents.md WALKTHROUGH/journeys/tenant-onboard.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

82. 2026-06-25 Operator audit direct-route addendum#

Closed the direct-route/page-DOM coverage layer for /operator/audit while preserving the existing real-BFF audit-investigation journey. The route now has stable anchors for the page, static ledger table, empty fallback, ledger rows, row action/target-kind attributes, and footer. Column headers carry scope. The Playwright journey now verifies signed-in /operator/audit, real /v1/audit fixture rows, action/target-kind row attributes, all footer hrefs (/operator, /operator/incidents, /operator/personas, /operator/sso), the existing incidents/admin entry points, anonymous redirect-before-render, and the explorer UI round-trip over the live BFF bridge.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/operator/audit/page.tsx apps/oshun/web/e2e/tenant-audit-log-investigation.spec.ts WALKTHROUGH/operator/operator-audit.md WALKTHROUGH/journeys/tenant-audit-log-investigation.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/operator/audit/page.tsx apps/oshun/web/e2e/tenant-audit-log-investigation.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 8.6 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-audit-log-investigation.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 12 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm --dir apps/oshun/web typecheck
    • passed

83. 2026-06-25 Operator SSO direct-route and create-leg addendum#

Closed the stale /operator/sso route walkthrough gap and added the missing browser create interaction for the shipped SSO editor. The route now exposes stable anchors for the page, roster, empty fallback, roster cards, protocol / status / metadata / last-sync fields, and footer. The Playwright SSO journey now verifies signed-in /operator/sso, live BFF-seeded SAML/OIDC roster cards, stable card protocol/status attributes, footer hrefs (/operator, /operator/tenants, /operator/lms, /operator/audit), anonymous redirect-before-render, the real /v1/sso envelope, and create/edit/delete/test editor flows over the live admin SSO BFF bridge.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/operator/sso/page.tsx apps/oshun/web/e2e/tenant-sso-config.spec.ts WALKTHROUGH/operator/operator-sso.md WALKTHROUGH/journeys/tenant-sso-config-saml-oidc-claim-mapping.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/operator/sso/page.tsx apps/oshun/web/e2e/tenant-sso-config.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run src/app/operator/sso/__tests__/page.test.tsx src/components/operator/OperatorSsoEditor.test.tsx
    • 10 passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 8.4 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-sso-config.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 12 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/operator/sso/page.tsx apps/oshun/web/e2e/tenant-sso-config.spec.ts WALKTHROUGH/operator/operator-sso.md WALKTHROUGH/journeys/tenant-sso-config-saml-oidc-claim-mapping.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

84. 2026-06-25 Operator incidents direct-route addendum#

Closed the direct-route/page-DOM coverage layer for /operator/incidents while preserving the existing real-BFF incident triage journey. The route now has stable anchors for the page, open/recent lanes, empty fallback, incident lists, real incident rows, severity and mitigation fields, and footer. The Playwright journey now verifies signed-in /operator/incidents, real BFF row ids (inc-2026-05-23-bff-503, inc-2026-05-25-themis-queue), severity and mitigation attributes, footer hrefs (/operator, /operator/audit, /operator/tenants), anonymous redirect-before-render, and the existing admin decision/lifecycle flows over the live BFF bridge.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/operator/incidents/page.tsx apps/oshun/web/e2e/incident-triage.spec.ts WALKTHROUGH/operator/operator-incidents.md WALKTHROUGH/journeys/incident-triage.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/operator/incidents/page.tsx apps/oshun/web/e2e/incident-triage.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 8.5 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/incident-triage.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 12 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/operator/incidents/page.tsx apps/oshun/web/e2e/incident-triage.spec.ts WALKTHROUGH/operator/operator-incidents.md WALKTHROUGH/journeys/incident-triage.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

85. 2026-06-25 Operator tenants direct-route addendum#

Closed the direct-route/page-DOM coverage layer for /operator/tenants while preserving the existing tenant-onboard and member-management journeys. The route now has stable anchors for the page, roster, empty fallback, tenant rows, row plan/label/member/id fields, and footer. The Playwright operator-surfaces journey now verifies signed-in /operator/tenants, real BFF tenant row ids (tenant-oxbow, tenant-redbird, tenant-house), descending member-count ordering, row fields, footer hrefs (/operator, /operator/sso, /operator/incidents), anonymous redirect-before-render, and the existing operator hub plus tenant-console dialog coverage.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/operator/tenants/page.tsx apps/oshun/web/e2e/operator-surfaces.spec.ts WALKTHROUGH/operator/operator-tenants.md WALKTHROUGH/journeys/tenant-onboard.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/operator/tenants/page.tsx apps/oshun/web/e2e/operator-surfaces.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 8.9 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-surfaces.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 6 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 12 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/operator/tenants/page.tsx apps/oshun/web/e2e/operator-surfaces.spec.ts WALKTHROUGH/operator/operator-tenants.md WALKTHROUGH/journeys/tenant-onboard.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

86. 2026-06-25 Operator tenant-console row-cell addendum#

Closed the row-level page-DOM coverage layer for /operator/tenant while preserving the existing tenant-onboard/member-management journeys. The tenant console now exposes stable anchors for the header band, tenant count heading, action row, and every body-row cell. The Playwright operator-surfaces journey now verifies all eight fixture rows cell-by-cell (id, member, plan, status, sittings, last-seen, action placeholder), row plan/status attributes, the visible ellipsis action placeholders, absence of hidden row links/buttons/focus targets, and the existing Invite / + Add member dialog focus checks.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/e2e/operator-surfaces.spec.ts WALKTHROUGH/operator/operator-tenant.md WALKTHROUGH/journeys/tenant-onboard.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/e2e/operator-surfaces.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 9.1 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-surfaces.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 6 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 12 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/e2e/operator-surfaces.spec.ts WALKTHROUGH/operator/operator-tenant.md WALKTHROUGH/journeys/tenant-onboard.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

87. 2026-06-25 Operator Metis stable-anchor addendum#

Closed the direct-route/page-DOM coverage layer for /operator/metis while preserving the existing real-BFF BYOM ingest and decision journeys. The operator Metis route now exposes stable anchors for the page, header, KPI strip, review queue, review rows and cells, OneRoster card, tutor telemetry card, and Themis flag card. The Playwright BYOM ingest journey now verifies signed-in /operator/metis, anonymous redirect-before-render, all five KPI fixture values, all five review rows cell-by-cell, the LDecisionChip state distribution, OneRoster sync fields, tutor telemetry sparkline, and Themis flag fields.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/lilith/metis.tsx apps/oshun/web/e2e/metis-byom-ingest.spec.ts WALKTHROUGH/operator/operator-metis.md WALKTHROUGH/journeys/metis-byom-ingest-to-course.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/lilith/metis.tsx apps/oshun/web/e2e/metis-byom-ingest.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 8.4 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/metis-byom-ingest.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 16 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/lilith/metis.tsx apps/oshun/web/e2e/metis-byom-ingest.spec.ts WALKTHROUGH/operator/operator-metis.md WALKTHROUGH/journeys/metis-byom-ingest-to-course.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

88. 2026-06-25 Operator admin inbox row-cell addendum#

Closed the direct /operator/admin page-DOM coverage layer while preserving and stabilizing the incident-triage real-BFF decision and lifecycle coverage. The admin inbox now exposes stable anchors for the page, header, audit-log entry point, console, selected detail card, detail header/subtitle/severity, drift-source rows and cells, every queue row cell, and incident action status/severity. The BFF operator-incidents route now has an opt-in test-harness reset path so destructive lifecycle E2E coverage can start from a seeded store without weakening production idempotency/conflict behavior. The Playwright incident-triage journey now verifies signed-in /operator/admin, anonymous redirect-before-render, all six fixture inbox rows cell-by-cell, filter-chip behavior, selected detail-card attributes, all three drift-source rows, and the real audited decision and incident-action flows.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/admin/operator-incident-store.ts apps/oshun/bff/src/routes/admin-operator-incidents.ts apps/oshun/bff/src/app.ts apps/oshun/bff/src/__tests__/admin-operator-incidents-route.test.ts apps/oshun/web/playwright.config.ts apps/oshun/web/src/components/lilith/AdminInboxIncidentActions.tsx apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/src/components/lilith/AdminInboxConsole.tsx apps/oshun/web/src/components/lilith/AdminInboxQueue.tsx apps/oshun/web/e2e/incident-triage.spec.ts WALKTHROUGH/operator/operator-admin.md WALKTHROUGH/journeys/incident-triage.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/admin/operator-incident-store.ts apps/oshun/bff/src/routes/admin-operator-incidents.ts apps/oshun/bff/src/app.ts apps/oshun/bff/src/__tests__/admin-operator-incidents-route.test.ts apps/oshun/web/playwright.config.ts apps/oshun/web/src/components/lilith/AdminInboxIncidentActions.tsx apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/src/components/lilith/AdminInboxConsole.tsx apps/oshun/web/src/components/lilith/AdminInboxQueue.tsx apps/oshun/web/e2e/incident-triage.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-operator-incidents-route.test.ts
    • 11 passed
  • pnpm --dir apps/oshun/bff exec vitest run src/admin/operator-incident-store.test.ts
    • 24 passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 8.6 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/incident-triage.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 13 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/bff/src/admin/operator-incident-store.ts apps/oshun/bff/src/routes/admin-operator-incidents.ts apps/oshun/bff/src/app.ts apps/oshun/bff/src/__tests__/admin-operator-incidents-route.test.ts apps/oshun/web/playwright.config.ts apps/oshun/web/src/components/lilith/AdminInboxIncidentActions.tsx apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/src/components/lilith/AdminInboxConsole.tsx apps/oshun/web/src/components/lilith/AdminInboxQueue.tsx apps/oshun/web/e2e/incident-triage.spec.ts WALKTHROUGH/operator/operator-admin.md WALKTHROUGH/journeys/incident-triage.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

89. 2026-06-25 Operator incidents row-cell addendum#

Closed the direct /operator/incidents page-DOM coverage layer while preserving the read-only incident clipboard behavior. The route now exposes stable anchors for the page generatedAt timestamp, masthead open/recent counts, lane/list counts, row metadata, and every visible row cell. The Playwright incident-triage journey now verifies the real BFF incident feed as exactly one open investigating row and one recently closed mitigated row, including lane placement, row IDs, severity/mitigation/opened-at/acknowledged-by attributes, visible severity/summary/meta/mitigation cells, footer links, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/operator/incidents/page.tsx apps/oshun/web/e2e/incident-triage.spec.ts WALKTHROUGH/operator/operator-incidents.md WALKTHROUGH/journeys/incident-triage.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/operator/incidents/page.tsx apps/oshun/web/e2e/incident-triage.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 8.2 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/incident-triage.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 13 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/operator/incidents/page.tsx apps/oshun/web/e2e/incident-triage.spec.ts WALKTHROUGH/operator/operator-incidents.md WALKTHROUGH/journeys/incident-triage.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

90. 2026-06-25 Operator audit ledger row-cell addendum#

Closed the direct /operator/audit static-ledger page-DOM coverage layer while preserving the read-only ledger and live explorer behavior. The audit route now exposes stable anchors for the page generatedAt timestamp, cursor, masthead row count, table count, column identifiers, row metadata, and every visible When/Actor/Action/Target cell. The Playwright tenant-audit-log-investigation journey now verifies the real /v1/audit fixture as exactly three rows sorted newest-first, including row IDs, actor/action/target/occurred-at metadata, visible cells, footer links, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/operator/audit/page.tsx apps/oshun/web/e2e/tenant-audit-log-investigation.spec.ts WALKTHROUGH/operator/operator-audit.md WALKTHROUGH/journeys/tenant-audit-log-investigation.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/operator/audit/page.tsx apps/oshun/web/e2e/tenant-audit-log-investigation.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 8.4 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-audit-log-investigation.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 12 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/operator/audit/page.tsx apps/oshun/web/e2e/tenant-audit-log-investigation.spec.ts WALKTHROUGH/operator/operator-audit.md WALKTHROUGH/journeys/tenant-audit-log-investigation.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

91. 2026-06-25 Operator SSO roster row-cell addendum#

Closed the direct /operator/sso roster page-DOM coverage layer while preserving the live SSO editor behavior. The route now exposes stable anchors for the page generatedAt timestamp, masthead and roster connection counts, connection-card metadata, and every visible tenant/protocol/IdP/sync field. The Playwright tenant-sso-config journey now verifies the live BFF-seeded SAML and OIDC cards through those attributes and field cells while keeping the editor create/edit/delete/test legs over the real admin SSO BFF.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/operator/sso/page.tsx apps/oshun/web/e2e/tenant-sso-config.spec.ts WALKTHROUGH/operator/operator-sso.md WALKTHROUGH/journeys/tenant-sso-config-saml-oidc-claim-mapping.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/operator/sso/page.tsx apps/oshun/web/e2e/tenant-sso-config.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed above 8.7 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-sso-config.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 12 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/operator/sso/page.tsx apps/oshun/web/e2e/tenant-sso-config.spec.ts WALKTHROUGH/operator/operator-sso.md WALKTHROUGH/journeys/tenant-sso-config-saml-oidc-claim-mapping.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

92. 2026-06-25 Operator LMS roster row-cell addendum#

Closed the direct /operator/lms roster page-DOM evidence gap without changing the visual layout. The route now exposes stable anchors for the server fetch generatedAt timestamp, masthead connector/invalid counts, roster count, valid connector metadata, per-field roster cells, invalid descriptor metadata, and per-issue code/path/severity. The Playwright operator-lms journey now verifies the live dev-infra seeded Canvas connector and retained Moodle invalid descriptor through those anchors, while preserving the existing real-BFF dry-run validation legs.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/operator/lms/page.tsx apps/oshun/web/e2e/operator-lms.spec.ts WALKTHROUGH/operator/operator-lms.md WALKTHROUGH/journeys/lms-connectors-operator.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/operator/lms/page.tsx apps/oshun/web/e2e/operator-lms.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/app/operator/lms/__tests__/page.test.tsx
    • 1 file passed; 4 tests passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 8.6 GiB and returned to 13 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-lms.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 9 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/operator/lms/page.tsx apps/oshun/web/e2e/operator-lms.spec.ts WALKTHROUGH/operator/operator-lms.md WALKTHROUGH/journeys/lms-connectors-operator.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

93. 2026-06-25 Metis BYOM specimen row-cell addendum#

Closed the customer /metis/byom page-DOM evidence gap while preserving the display-only specimen behavior. The BYOM page now exposes stable anchors for the page material/outline counts, header, generate CTA, material table count and columns, every material row and visible cell, drop-zone constraints, upload action wrappers, generated-guide counts/meta/title, all outline rows and cells, provenance copy, and guide action wrappers. The Metis BYOM Playwright journey now verifies the complete customer specimen through those anchors before continuing to the existing operator /operator/metis assertions.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/lilith/metis.tsx apps/oshun/web/e2e/metis-byom-ingest.spec.ts WALKTHROUGH/customer/08-metis/metis-byom.md WALKTHROUGH/journeys/metis-byom-ingest-to-course.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/lilith/metis.tsx apps/oshun/web/e2e/metis-byom-ingest.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 8.4 GiB and returned to 12 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/metis-byom-ingest.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 16 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 12 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/lilith/metis.tsx apps/oshun/web/e2e/metis-byom-ingest.spec.ts WALKTHROUGH/customer/08-metis/metis-byom.md WALKTHROUGH/journeys/metis-byom-ingest-to-course.md WALKTHROUGH/journeys/coverage.md
    • passed
  • git diff --check
    • passed

94. 2026-06-25 Arete weekly-review specimen row-cell addendum#

Closed the customer /arete/review four-act specimen evidence gap without changing the Lilith visual design. The page now exposes stable anchors for route week/count metadata, masthead/layout regions, every act block and its title/kicker/duration/accent/body-part/list cells, every KPI value/color cell, the mood chart/caption, all seven journal rows and day/text cells, and the footer note/action region. The Arete weekly-review Playwright journey now asserts those anchors before exercising the existing margin-suggestion and no-shame checks; the separate close spec remains the real-BFF proof for close/save and /arete continuity read-back.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/lilith/arete.tsx apps/oshun/web/e2e/arete-weekly-review.spec.ts WALKTHROUGH/customer/04-arete/arete-review.md WALKTHROUGH/journeys/weekly-review-arete.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec prettier --write apps/oshun/web/src/components/lilith/AreteReview.test.tsx
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/lilith/arete.tsx apps/oshun/web/src/components/lilith/AreteReview.test.tsx apps/oshun/web/e2e/arete-weekly-review.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/components/lilith/AreteReview.test.tsx
    • 1 file passed; 3 tests passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 8.4 GiB and returned to 12 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/arete-weekly-review.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 11 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 12 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • first run failed on a corrupted generated .next/dev/types/routes.d.ts emitted by the prior Next dev server; removed untracked apps/oshun/web/.next, reran after a fresh resource gate with 13 GiB available, and the clean typecheck passed
  • python3 V5/tools/validate-v5-docs.py
    • passed

96. 2026-06-25 Metis tutor row-cell addendum#

Closed the customer /metis/tutor page-DOM evidence gap without changing the Lilith tutor layout. The page now exposes stable anchors for transcript/user/ assistant/citation/context counts, the header actions, every transcript turn and its speaker/body/turn/citation cells, citation provenance attributes, right-rail context rows, disclosure copy, end-of-session note cells, and composer session/status/draft/input/send state. The Playwright tutor journey now verifies those anchors before exercising the existing citation navigation, composer send/keyboard, context, disclosure, note, and no-live-voice assertions.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/lilith/metis.tsx apps/oshun/web/src/components/lilith/MetisTutorComposer.tsx apps/oshun/web/src/components/lilith/MetisTutorComposer.test.tsx apps/oshun/web/e2e/metis-tutor-session.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/components/lilith/MetisTutorComposer.test.tsx
    • 1 file passed; 5 tests passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 9.0 GiB and returned to 13 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/metis-tutor-session.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 18 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --write apps/oshun/web/e2e/metis-tutor-session.spec.ts WALKTHROUGH/customer/08-metis/metis-tutor.md WALKTHROUGH/journeys/psyche-tutor-live-session-to-graded-record.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/lilith/metis.tsx apps/oshun/web/src/components/lilith/MetisTutorComposer.tsx apps/oshun/web/src/components/lilith/MetisTutorComposer.test.tsx apps/oshun/web/e2e/metis-tutor-session.spec.ts WALKTHROUGH/customer/08-metis/metis-tutor.md WALKTHROUGH/journeys/psyche-tutor-live-session-to-graded-record.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

97. 2026-06-25 Themis appeal row-cell addendum#

Closed the customer /integrity/<verdictId>/appeal page-DOM evidence gap without changing the route contract. The page now exposes stable anchors for the displayed verdict id, form intro, each field row, submit blocked/ready/filing state, the optional institution policy link, the filed workspace's due-process summary, and filed status/case/adjudicator fields. The Playwright journey now asserts those anchors against the real BFF appeal route before continuing through the existing teacher override/uphold and validation gates.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/integrity/IntegrityAppealWorkspace.tsx apps/oshun/web/e2e/integrity-appeal.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 8.7 GiB and returned to 13 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/integrity-appeal.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 13 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/integrity/IntegrityAppealWorkspace.tsx apps/oshun/web/e2e/integrity-appeal.spec.ts WALKTHROUGH/customer/08-metis/integrity-verdictId-appeal.md WALKTHROUGH/journeys/themis-assessment-appeal.md WALKTHROUGH/journeys/coverage.md
    • passed
  • git diff --check
    • passed

98. 2026-06-25 Atelier image row-cell addendum#

Closed the /atelier and /atelier/image evidence gaps by adding stable page and row-cell anchors for the atelier index rooms/rules, the image room plate head, step rail, prompt/specimen/contact sheet, selected plate fields, provenance rows, and save/cast action states. The Playwright journey now checks the index, hardcoded image-room composition, save-to-library path, and cast provider-not-configured seam with row-scoped assertions.

While extending the save assertion, the first focused Playwright run exposed a real signed-in library-store race: an in-flight server hydrate GET could replace an optimistic local save with an empty server snapshot. The store now tracks pending optimistic saves/deletes across hydrate and server sync, with unit tests covering both "save during hydrate" and "unsave during hydrate" races.

Verification:

  • which psql && psql --version
    • /usr/bin/psql; psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/lib/library/webLibraryStore.ts apps/oshun/web/src/lib/library/webLibraryStore.sync.test.ts apps/oshun/web/src/components/lilith/atelier.tsx apps/oshun/web/src/components/lilith/AtelierPlateActions.tsx apps/oshun/web/e2e/atelier-image-to-library.spec.ts apps/oshun/web/e2e/atelier-plate-actions.spec.ts WALKTHROUGH/customer/11-atelier/atelier.md WALKTHROUGH/customer/11-atelier/atelier-image.md WALKTHROUGH/journeys/atelier-image-to-library.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/atelier-image-to-library.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/lib/library/webLibraryStore.ts apps/oshun/web/src/lib/library/webLibraryStore.sync.test.ts apps/oshun/web/src/components/lilith/atelier.tsx apps/oshun/web/src/components/lilith/AtelierPlateActions.tsx apps/oshun/web/e2e/atelier-image-to-library.spec.ts apps/oshun/web/e2e/atelier-plate-actions.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run src/lib/library/webLibraryStore.sync.test.ts
    • 1 file passed; 7 tests passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during the passing Playwright rerun, available memory stayed at or above 8.8 GiB and returned to 13 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/atelier-image-to-library.spec.ts e2e/atelier-plate-actions.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first focused run: 12 passed, 1 failed on the save hydrate race described above
    • rerun after the store fix: 13 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/lib/library/webLibraryStore.ts apps/oshun/web/src/lib/library/webLibraryStore.sync.test.ts apps/oshun/web/src/components/lilith/atelier.tsx apps/oshun/web/src/components/lilith/AtelierPlateActions.tsx apps/oshun/web/e2e/atelier-image-to-library.spec.ts apps/oshun/web/e2e/atelier-plate-actions.spec.ts WALKTHROUGH/customer/11-atelier/atelier.md WALKTHROUGH/customer/11-atelier/atelier-image.md WALKTHROUGH/journeys/atelier-image-to-library.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/atelier-image-to-library.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

99. 2026-06-25 Tenant roster export addendum#

Closed the /operator/tenant Export CSV placeholder gap. The tenant console now mounts a small TenantMemberExportCsv client island that generates pacific-theological-members.csv from the same TenantConsoleData.rows rendered in the members table. The tenant-onboard and tenant-bulk-member-invite-SCIM Playwright specs assert the downloaded filename, canonical column order, representative row content, and exported state, while the broader operator surface smoke checks the export control anchors and row count.

CSV import, bulk dry-run/commit, outbound invite email, invitee first-login, and audit-chain reconciliation remain documented product gaps; this slice only wires the existing rendered roster export.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/lilith/TenantMemberExportCsv.tsx apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/e2e/tenant-onboard.spec.ts apps/oshun/web/e2e/tenant-member-invite-scim.spec.ts apps/oshun/web/e2e/operator-surfaces.spec.ts WALKTHROUGH/operator/operator-tenant.md WALKTHROUGH/journeys/tenant-onboard.md WALKTHROUGH/journeys/tenant-bulk-member-invite-scim.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/lilith/TenantMemberExportCsv.tsx apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/e2e/tenant-onboard.spec.ts apps/oshun/web/e2e/tenant-member-invite-scim.spec.ts apps/oshun/web/e2e/operator-surfaces.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 8.5 GiB and returned to 13 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-onboard.spec.ts e2e/operator-surfaces.spec.ts e2e/tenant-member-invite-scim.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 21 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/lilith/TenantMemberExportCsv.tsx apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/e2e/tenant-onboard.spec.ts apps/oshun/web/e2e/tenant-member-invite-scim.spec.ts apps/oshun/web/e2e/operator-surfaces.spec.ts WALKTHROUGH/operator/operator-tenant.md WALKTHROUGH/journeys/tenant-onboard.md WALKTHROUGH/journeys/tenant-bulk-member-invite-scim.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

100. 2026-06-25 Isis provenance route-state addendum#

Closed the /operator/admin/isis/provenance route-state evidence gap. The Isis provenance inspector now exposes stable tenant-scope and bundle-row metadata/time anchors, the component unit test protects those anchors, and the real-dev-infra citation-drift Playwright spec now proves the clean platform ledger, tenant-preserving bundle navigation, unknown-bundle fallback, empty tenant ledger, unavailable ledger, broken tenant verdict, generated-artifact inspector, and anonymous redirect-before-render states.

The page remains read-only: recheck, re-render, retract, and downstream invalidation write actions are still documented product gaps rather than faked browser interactions.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/admin/IsisProvenanceInspector.tsx apps/oshun/web/src/components/admin/__tests__/IsisProvenanceInspector.test.tsx apps/oshun/web/e2e/citation-drift-resolution.spec.ts WALKTHROUGH/operator/operator-admin-isis-provenance.md WALKTHROUGH/journeys/citation-drift-resolution.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/admin/IsisProvenanceInspector.tsx apps/oshun/web/src/components/admin/__tests__/IsisProvenanceInspector.test.tsx apps/oshun/web/e2e/citation-drift-resolution.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/components/admin/__tests__/IsisProvenanceInspector.test.tsx
    • 1 file passed; 6 tests passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 8.0 GiB and returned to 12 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/citation-drift-resolution.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 10 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 12 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed

101. 2026-06-25 Operator index route-state addendum#

Closed the /operator index route-state evidence gap. The operator index now exposes stable anchors for the top operator bar, page count, eyebrow, title rule, responsive surface grid, surface codes, titles, descriptions, open labels, and href metadata. The shared Lilith operator bar now wraps its default status copy instead of forcing mobile horizontal overflow, and the Playwright journey proves the 390 px one-column grid/no-overflow state.

Surface click telemetry remains a documented product gap; this slice records it instead of faking an event emitter.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/operator/page.tsx apps/oshun/web/src/design-system/lilith/shells.tsx apps/oshun/web/e2e/operator-surfaces.spec.ts WALKTHROUGH/operator/operator-overview.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/operator/page.tsx apps/oshun/web/src/design-system/lilith/shells.tsx apps/oshun/web/e2e/operator-surfaces.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during the passing Playwright rerun, available memory stayed at or above 9.3 GiB and returned to 13 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-surfaces.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first focused run: 6 passed, 1 failed on the new mobile no-overflow assertion with 49 px document overflow from the shared operator bar status copy
    • rerun after the LOperatorBar wrapping fix: 7 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/operator/page.tsx apps/oshun/web/src/design-system/lilith/shells.tsx apps/oshun/web/e2e/operator-surfaces.spec.ts WALKTHROUGH/operator/operator-overview.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

102. 2026-06-25 Studio adoption ops route-state addendum#

Closed the /studio/adoption-ops route-state evidence gap. The route now exposes stable anchors for the Studio breadcrumb, route-map rows, footer quick-actions, form pending state, and per-stage analyzer result cells. The workspace now keeps the analyze submit control disabled and busy while the real BFF request is in flight, and the dedicated Playwright spec proves the admin-scoped catalog, ready form, real analyzer result, malformed-JSON client validation, real BFF 400 validation detail, catalog loading/error branch, pending-submit branch, route map, footer targets, and non-admin unauthorized fail-closed state.

The route-map subroutes remain documented as forward-looking; only the /studio/adoption-ops page exists under the current route subtree.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/adoption-ops/page.tsx apps/oshun/web/src/components/studio/StudioAdoptionOpsWorkspace.tsx apps/oshun/web/e2e/studio-adoption-ops.spec.ts WALKTHROUGH/studio/operations/studio-adoption-ops.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/studio/adoption-ops/page.tsx apps/oshun/web/src/components/studio/StudioAdoptionOpsWorkspace.tsx apps/oshun/web/e2e/studio-adoption-ops.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/components/__tests__/StudioAdoptionOpsPage.test.tsx src/components/__tests__/StudioAdoptionOpsWorkspace.test.tsx src/components/__tests__/StudioAdoptionOpsWorkspace.integration.test.tsx src/components/__tests__/StudioAdoptionOpsRouteMap.test.ts
    • 4 files passed; 7 tests passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-adoption-ops.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first focused run: 3 passed, 2 failed on the submit touch-target height and a stale validation selector
    • second focused run: 4 passed, 1 failed on footer quick-action touch-target height
    • rerun after the accessibility and selector fixes: 5 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/studio/adoption-ops/page.tsx apps/oshun/web/src/components/studio/StudioAdoptionOpsWorkspace.tsx apps/oshun/web/e2e/studio-adoption-ops.spec.ts WALKTHROUGH/studio/operations/studio-adoption-ops.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

103. 2026-06-25 Studio i18n localization route-state addendum#

Closed the /studio/internationalization-localization route-state evidence gap. The i18n localization console now exposes stable anchors for its flat quick-action footer, pending analyze state, and per-locale analyzer result cells. The workspace keeps the analyze submit control disabled and busy while the real BFF request is in flight, and the dedicated Playwright spec proves the admin-scoped catalog, ready form, real analyzer result, malformed-JSON client validation, real BFF 400 validation detail, catalog loading/error branch, pending-submit branch, footer targets, and non-admin unauthorized fail-closed state.

The shipped-bundle catalog ingestion remains documented as a product gap: V1 identifies @oshun/i18n plus the web next-intl JSON bundles as the canonical catalog sources, while the current BFF route analyzes caller-supplied catalogs.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/internationalization-localization/page.tsx apps/oshun/web/src/components/studio/StudioInternationalizationLocalizationWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioInternationalizationLocalizationWorkspace.test.tsx apps/oshun/web/e2e/studio-internationalization-localization.spec.ts WALKTHROUGH/studio/governance/studio-internationalization-localization.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/studio/internationalization-localization/page.tsx apps/oshun/web/src/components/studio/StudioInternationalizationLocalizationWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioInternationalizationLocalizationWorkspace.test.tsx apps/oshun/web/e2e/studio-internationalization-localization.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/components/__tests__/StudioInternationalizationLocalizationWorkspace.test.tsx src/components/__tests__/StudioInternationalizationLocalizationWorkspace.validation.test.tsx
    • 2 files passed; 5 tests passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 9.3 GiB and returned to 13 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-internationalization-localization.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first focused run: 5 passed
    • rerun after renaming visible analyzer copy from "placeholder" to "token": 4 passed, 1 failed on a stale browser assertion
    • rerun after the stale assertion fix: 5 passed
    • final rerun after the hook-suppression alias change: 5 passed
    • post-rebase rerun after origin/main moved: 5 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved: passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/studio/internationalization-localization/page.tsx apps/oshun/web/src/components/studio/StudioInternationalizationLocalizationWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioInternationalizationLocalizationWorkspace.test.tsx apps/oshun/web/e2e/studio-internationalization-localization.spec.ts WALKTHROUGH/studio/governance/studio-internationalization-localization.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

104. 2026-06-25 Studio enterprise tenant isolation route-state addendum#

Closed the /studio/enterprise-tenant-isolation route-state evidence gap. The tenant isolation console now exposes stable anchors for its flat quick-action footer, pending evaluate state, and tenant result cells. The workspace keeps the evaluate submit control disabled and busy while the real BFF request is in flight, and the dedicated Playwright spec proves the admin-scoped catalog, ready form, real tenant evaluator result, malformed-JSON client validation, real BFF 400 validation detail, catalog loading/error branch, pending-submit branch, footer targets, and non-admin unauthorized fail-closed state.

The live cluster-metrics utilization feed remains a documented product gap: the current route is a real admin BFF evaluator over caller-supplied tenant utilization JSON.

Verification:

  • psql --version
    • psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/app/studio/enterprise-tenant-isolation/page.tsx apps/oshun/web/src/components/studio/StudioEnterpriseTenantIsolationWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioEnterpriseTenantIsolationWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioEnterpriseTenantIsolationWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-enterprise-tenant-isolation.spec.ts WALKTHROUGH/studio/governance/studio-enterprise-tenant-isolation.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/studio/enterprise-tenant-isolation/page.tsx apps/oshun/web/src/components/studio/StudioEnterpriseTenantIsolationWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioEnterpriseTenantIsolationWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioEnterpriseTenantIsolationWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-enterprise-tenant-isolation.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/components/__tests__/StudioEnterpriseTenantIsolationWorkspace.test.tsx src/components/__tests__/StudioEnterpriseTenantIsolationWorkspace.integration.test.tsx
    • 2 files passed; 6 tests passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 12 GiB and returned to 13 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-enterprise-tenant-isolation.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 5 passed
    • post-rebase rerun after origin/main moved: 5 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved: passed (Nx cache)
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/studio/enterprise-tenant-isolation/page.tsx apps/oshun/web/src/components/studio/StudioEnterpriseTenantIsolationWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioEnterpriseTenantIsolationWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioEnterpriseTenantIsolationWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-enterprise-tenant-isolation.spec.ts WALKTHROUGH/studio/governance/studio-enterprise-tenant-isolation.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

105. 2026-06-25 Studio authentication architecture route-state addendum#

Closed the /studio/authentication-architecture route-state evidence gap. The authentication policy console now exposes stable anchors for its flat quick-action footer, pending evaluate state, and session result cells. The workspace keeps the evaluate submit control disabled and busy while the real BFF request is in flight, and the dedicated Playwright spec proves the admin-scoped catalog, ready form, real auth-policy evaluator result, malformed-JSON client validation, real BFF 400 validation detail, catalog loading/error branch, pending-submit branch, footer targets, and non-admin unauthorized fail-closed state.

The live login-telemetry feed remains a documented product gap: the current route is a real admin BFF evaluator over caller-supplied session signal JSON.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/authentication-architecture/page.tsx apps/oshun/web/src/components/studio/StudioAuthenticationArchitectureWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioAuthenticationArchitectureWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAuthenticationArchitectureWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-authentication-architecture.spec.ts WALKTHROUGH/studio/governance/studio-authentication-architecture.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/studio/authentication-architecture/page.tsx apps/oshun/web/src/components/studio/StudioAuthenticationArchitectureWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioAuthenticationArchitectureWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAuthenticationArchitectureWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-authentication-architecture.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/components/__tests__/StudioAuthenticationArchitectureWorkspace.test.tsx src/components/__tests__/StudioAuthenticationArchitectureWorkspace.integration.test.tsx
    • 2 files passed; 6 tests passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 12 GiB and returned to 13 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-authentication-architecture.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 5 passed
    • post-rebase rerun after origin/main moved: 5 passed
    • second post-rebase rerun after origin/main moved again: 5 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved: passed (Nx cache)
    • second post-rebase rerun after origin/main moved again: passed (Nx cache)
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/studio/authentication-architecture/page.tsx apps/oshun/web/src/components/studio/StudioAuthenticationArchitectureWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioAuthenticationArchitectureWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioAuthenticationArchitectureWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-authentication-architecture.spec.ts WALKTHROUGH/studio/governance/studio-authentication-architecture.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

106. 2026-06-25 Studio Neith inverse-modeling V1 closure#

Closed the V1/TODOS.md §34 Neith inverse-modeling workspace verification gap. The /studio/neith/inverse-modeling route now exposes the V1 reference-image workflow alongside the existing live BFF fit-quality lane: RGBA payload validation, feature extraction (mean, contrast, edgeEnergy, entropy, warmBias), terrain/vegetation/urban/noise parameter estimates, confidence scoring, and deterministic neith.inverse.v1 export-manifest output.

The first Playwright rerun found a serious accessibility issue on the scrollable manifest <pre> (scrollable-region-focusable). The manifest is now keyboard-focusable and labelled, and the rerun passed.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/lib/studio/neith-inverse-modeling.ts apps/oshun/web/src/lib/studio/neith-inverse-modeling.test.ts apps/oshun/web/src/components/studio/StudioNeithInverseModelingWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.test.tsx apps/oshun/web/e2e/studio-neith-inverse-modeling.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/lib/studio/neith-inverse-modeling.ts apps/oshun/web/src/lib/studio/neith-inverse-modeling.test.ts apps/oshun/web/src/components/studio/StudioNeithInverseModelingWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-neith-inverse-modeling.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/lib/studio/neith-inverse-modeling.test.ts src/components/__tests__/StudioNeithInverseModelingWorkspace.test.tsx src/components/__tests__/StudioNeithInverseModelingWorkspace.integration.test.tsx
    • 3 files passed; 14 tests passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright startup, available memory stayed at or above 12 GiB and returned to 13 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-neith-inverse-modeling.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first rerun failed on axe scrollable-region-focusable for the manifest <pre>
    • after making the manifest focusable and labelled: 6 passed
    • post-rebase rerun after origin/main moved to 94332f8cdc: 6 passed
    • second post-rebase rerun after origin/main moved again to 1b4583f697: 6 passed
  • Resource gate before typecheck / Neith procgen test
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during cargo, available memory stayed at 12 GiB.
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to 94332f8cdc: passed (Nx cache)
    • second post-rebase rerun after origin/main moved again to 1b4583f697: passed (Nx cache)
  • pnpm nx run @neith/procgen:test
    • passed; 381 Rust unit tests passed across the Neith procgen crate family plus doc-test targets
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/lib/studio/neith-inverse-modeling.ts apps/oshun/web/src/lib/studio/neith-inverse-modeling.test.ts apps/oshun/web/src/components/studio/StudioNeithInverseModelingWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioNeithInverseModelingWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-neith-inverse-modeling.spec.ts V1/TODOS.md WALKTHROUGH/studio/domain-bridges/neith/studio-neith-inverse-modeling.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

107. 2026-06-25 Studio Hathor Workbench World Editor V1 route journey#

Advanced the open V1/TODOS.md §34 Hathor substrate verification task by one surface. /studio/hathor/workbench-world-editor now has real-dev-infra Playwright coverage for the CGI scene validator: admin catalog load, issue-type and coordinate enum rendering, seeded missing-location verdict, clean export-ready verdict, BFF schema-validation detail, client-side malformed JSON rejection with no validate POST, native pending submit disablement, non-admin fail-closed state, route-map / quick-action affordances, mobile 44px controls, and the shared axe gate.

The first Playwright run found a real mobile ergonomics defect: the "Back to Studio workspace index" quick action was only 40px tall on a 390px viewport. The two quick-action links now render as 44px inline-flex tap targets, and the full route journey rerun passed.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/hathor/workbench-world-editor/page.tsx apps/oshun/web/src/components/studio/StudioHathorWorkbenchWorldEditorWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioHathorWorkbenchWorldEditorWorkspace.test.tsx apps/oshun/web/e2e/studio-hathor-workbench-world-editor.spec.ts V1/TODOS.md WALKTHROUGH/studio/domain-bridges/hathor/studio-hathor-workbench-world-editor.md WALKTHROUGH/matrix/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/studio/hathor/workbench-world-editor/page.tsx apps/oshun/web/src/components/studio/StudioHathorWorkbenchWorldEditorWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioHathorWorkbenchWorldEditorWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorWorkbenchWorldEditorWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-hathor-workbench-world-editor.spec.ts
    • passed (repo emitted the existing Next pages-directory warning)
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/components/__tests__/StudioHathorWorkbenchWorldEditorWorkspace.test.tsx src/components/__tests__/StudioHathorWorkbenchWorldEditorWorkspace.integration.test.tsx
    • 2 files passed; 6 tests passed
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/components/__tests__/StudioHathorWorkbenchWorldEditorWorkspace.test.tsx src/components/__tests__/StudioHathorWorkbenchWorldEditorWorkspace.integration.test.tsx src/components/__tests__/StudioHathorWorkbenchWorldEditorPage.test.tsx
    • 3 files passed; 7 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-workbench-world-editor-route.test.ts
    • 1 file passed; 7 tests passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 8.9 GiB and returned to 13 GiB after cleanup.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-workbench-world-editor.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run: 7 passed, 1 failed because the mobile "Back to Studio workspace index" quick action was 40px high
    • after the tap-target fix: 8 passed
    • post-rebase rerun after origin/main moved to 333fcf81af: 8 passed
  • Resource gate before typecheck
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers.
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to 333fcf81af: passed (Nx cache)

108. 2026-06-25 Profile Data Rights real-infra readback route journey#

Advanced the account/DSAR readback surface for /profile/data. The route now uses a real authenticated /v1/data-rights/consent projection from customerConsentStateStore instead of the legacy domain-stub fixture; exports and deletion requests continue to use the canonical real BFF stores. The page also exposes stable section/empty-state selectors, gives completed-export download links contextual aria labels, and forces the footer actions plus download affordance to 44 px mobile tap targets.

profile-data-readback.spec.ts now covers the real consent projection, research-consent transition reflection on the server-rendered route, empty export/deletion readback, live completed-export and scheduled-deletion snapshots, anonymous redirect gating, the real 50-row export history cap after 52 BFF-created exports, mobile touch targets/no horizontal overflow, and the shared axe gate.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/consent.ts apps/oshun/bff/src/routes/domain-stubs.ts apps/oshun/bff/src/__tests__/consent-route.test.ts apps/oshun/bff/src/__tests__/domain-stubs-route.test.ts apps/oshun/web/src/app/profile/data/page.tsx apps/oshun/web/e2e/profile-data-readback.spec.ts V1/TODOS.md WALKTHROUGH/customer/09-account/profile-data.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/matrix/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/consent.ts apps/oshun/bff/src/routes/domain-stubs.ts apps/oshun/bff/src/__tests__/consent-route.test.ts apps/oshun/bff/src/__tests__/domain-stubs-route.test.ts apps/oshun/web/src/app/profile/data/page.tsx apps/oshun/web/e2e/profile-data-readback.spec.ts
    • passed; repo emitted the existing Next pages-directory warning and existing domain-stubs.ts non-null assertion warnings
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/consent-route.test.ts src/__tests__/domain-stubs-route.test.ts
    • 2 files passed; 105 tests passed
    • post-rebase rerun after origin/main moved to e0872822ef: 2 files passed; 105 tests passed
    • second post-rebase rerun after origin/main moved again to 699a1ed81d: 2 files passed; 105 tests passed
  • Resource gate before typecheck / Playwright
    • before typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers
    • before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 8.8 GiB and returned after cleanup
  • pnpm nx run @oshun/bff:typecheck
    • passed
    • post-rebase rerun after origin/main moved to e0872822ef: passed (Nx cache)
    • second post-rebase rerun after origin/main moved again to 699a1ed81d: passed (Nx cache)
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to e0872822ef: passed (Nx cache)
    • second post-rebase rerun after origin/main moved again to 699a1ed81d: passed (Nx cache)
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-data-readback.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 5 passed
    • post-rebase rerun after origin/main moved to e0872822ef: 5 passed
    • second post-rebase rerun after origin/main moved again to 699a1ed81d: 5 passed

109. 2026-06-25 Profile Persona real-infra voice readback route journey#

Advanced the account persona voice readback surface for /profile/persona. The route now consumes the real registry-derived /v1/persona/voice DTO instead of the stale fixture shape: voiceId, family, provider/vendor, engine, voice-profile id, locale coverage, watermark algorithm, spoken-disclosure requirement, and explicit previewUrl: null while preview media is not yet a registry asset. The masthead count now says "available" instead of "approved", inactive cards say "available" instead of implying an unwired switch action, and footer links plus the preview-unavailable row are 44px mobile targets.

The BFF projection now enriches eligible voice cards from the same @oshun/persona-registry multimodal assignment used by the picker, and personas-consumer.test.ts covers no-consent empty voice rosters, profile metadata projection, and active voice readback after a real persona selection write. The first BFF test run found that selection should use the existing persona-selection contract (requestedModalities: ['text']), not a fabricated voice-only select request; the tests and Playwright seeding were corrected and rerun green.

profile-persona-readback.spec.ts now covers the real no-consent empty state, voice-consent unlock through /v1/consent/voice/grant, active voice state after POST /v1/personas/select, server-rendered card metadata matched to live /v1/persona/voice, anonymous redirect gating, the Data Rights footer handoff, mobile touch targets/no horizontal overflow, and the shared axe gate.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/personas-consumer.ts apps/oshun/bff/src/routes/personas-consumer.test.ts apps/oshun/web/src/app/profile/persona/page.tsx apps/oshun/web/e2e/profile-persona-readback.spec.ts V1/TODOS.md WALKTHROUGH/customer/09-account/profile-persona.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/journeys/persona-voice-avatar-approval-workflow.md WALKTHROUGH/matrix/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/personas-consumer.ts apps/oshun/bff/src/routes/personas-consumer.test.ts apps/oshun/web/src/app/profile/persona/page.tsx apps/oshun/web/e2e/profile-persona-readback.spec.ts
    • passed; repo emitted the existing Next pages-directory warning
    • post-rebase rerun after origin/main moved to e5610e6eb5: passed with the same existing warning
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/routes/personas-consumer.test.ts
    • first run: 10 passed, 1 failed on the incorrect voice-only selection request assumption
    • after aligning selection with the real picker contract: 11 passed
    • post-rebase rerun after origin/main moved to e5610e6eb5: 11 passed
  • Resource gate before typecheck / Playwright
    • before typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers
    • before Playwright: 15 GiB RAM, 12 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 12 GiB
    • post-rebase before rerun: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad build/test servers; during Playwright, available memory stayed at or above 12 GiB
  • pnpm nx run @oshun/bff:typecheck
    • passed
    • post-rebase rerun after origin/main moved to e5610e6eb5: passed from Nx cache
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to e5610e6eb5: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-persona-readback.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 4 passed
    • post-rebase rerun after origin/main moved to e5610e6eb5: 4 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/bff/src/routes/personas-consumer.ts apps/oshun/bff/src/routes/personas-consumer.test.ts apps/oshun/web/src/app/profile/persona/page.tsx apps/oshun/web/e2e/profile-persona-readback.spec.ts V1/TODOS.md WALKTHROUGH/customer/09-account/profile-persona.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/journeys/persona-voice-avatar-approval-workflow.md WALKTHROUGH/matrix/coverage.md
    • passed
  • git diff --check
    • passed

111. 2026-06-25 Profile Memory real-Iris empty + populated readback journey#

Advanced /profile/memory from stale local-only documentation to a verified hybrid read model. The UI now renders an explicit empty ledger row and empty inspector when the real Iris review has no records, avoiding a blank table and making the no-memory state automatable. The real-Iris Playwright block now uses the actual Next /api/auth/session bridge plus BFF, proves an empty live /v1/iris/adapter/review shows no fabricated member facts, then grants real Iris consents, writes a profile fact through /v1/iris/adapter/remember, reads it back through /v1/iris/adapter/review, and verifies /profile/memory adopts it with the sync notice, category/scope projection, inspector source, and local export JSON.

WALKTHROUGH/customer/09-account/profile-memory.md now documents the real BFF read contract, the local-only write/cache model, the new empty selectors, and remaining route gaps: visible BFF fetch errors, anonymous redirect coverage, offline behavior, and persisted server-side pause/export/delete semantics.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/profile/memory/ProfileMemoryControls.tsx apps/oshun/web/src/app/profile/memory/memory-controls.module.css apps/oshun/web/e2e/memory-edit-pause-forget.spec.ts WALKTHROUGH/customer/09-account/profile-memory.md WALKTHROUGH/journeys/memory-edit-pause-forget.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/profile/memory/ProfileMemoryControls.tsx apps/oshun/web/e2e/memory-edit-pause-forget.spec.ts
    • passed; repo emitted the existing Next pages-directory warning
  • pnpm --dir apps/oshun/web exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/app/profile/memory/ProfileMemoryControls.test.tsx src/app/profile/memory/memory-state.test.ts
    • 2 files passed; 11 tests passed
  • Resource gate before typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing build/test gates; during Playwright, available memory stayed above 7.9 GiB.
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to 3a0ccd19b8: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/memory-edit-pause-forget.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 8 passed
    • post-rebase rerun after origin/main moved to 3a0ccd19b8: 8 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/profile/memory/ProfileMemoryControls.tsx apps/oshun/web/src/app/profile/memory/memory-controls.module.css apps/oshun/web/e2e/memory-edit-pause-forget.spec.ts WALKTHROUGH/customer/09-account/profile-memory.md WALKTHROUGH/journeys/memory-edit-pause-forget.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

112. 2026-06-25 Workspace live Nisaba/search readback journey#

Reduced the route-fixture surface in workspace-multi-panel.spec.ts for the multi-device-workspace-handoff journey. The desktop all-panel flow now seeds a real authenticated /v1/nisaba/notebooks record through the BFF request fixture, opens the workspace, asserts that exact notebook appears as the active passage-<notebookId> export item, and then searches for the unique seed term through the live /v1/search hook, asserting the returned notebook-<notebookId> result. The old in-file route fulfillments for /v1/nisaba/notebooks and /v1/search were removed.

The Veritas saved-article route fixture remains intentionally scoped to the evidence card because the BFF currently exposes GET /v1/veritas/adapter/saved-articles but no authenticated save-article writer suitable for E2E setup. The journey doc and coverage matrix now state that distinction explicitly.

Verification:

  • psql --version
    • available: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/e2e/workspace-multi-panel.spec.ts WALKTHROUGH/journeys/multi-device-workspace-handoff.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/workspace-multi-panel.spec.ts
    • passed
    • post-rebase rerun after origin/main moved to 687ff6efef: passed
  • Resource gate before typecheck / Playwright
    • before typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • before Playwright: 15 GiB RAM, 12 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 8.7 GiB
    • post-rebase before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during the post-rebase Playwright rerun, available memory stayed above 9.2 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to 687ff6efef: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/workspace-multi-panel.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 8 passed
    • post-rebase rerun after origin/main moved to 687ff6efef: 8 passed
  • pnpm exec prettier --check apps/oshun/web/e2e/workspace-multi-panel.spec.ts WALKTHROUGH/journeys/multi-device-workspace-handoff.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
    • post-rebase rerun after origin/main moved to 687ff6efef: passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
    • post-rebase rerun after origin/main moved to 687ff6efef: passed
  • git diff --check
    • passed
    • post-rebase rerun after origin/main moved to 687ff6efef: passed

113. 2026-06-25 Home Nisaba live notebook continuation#

Reduced the route-fixture surface in home-nisaba-continuation.spec.ts for the Home Nisaba continuation journey. The live Home path now primes the real authenticated shell, seeds a real /v1/nisaba/notebooks record through the BFF, verifies the BFF list read returns that notebook, opens Home, and proves the browser renders that exact notebook card from the live /v1/nisaba/notebooks hook. The test now clicks all four live Home Nisaba actions: notebook, library, support, and primary passage.

The unavailable-domain path now uses the same real BFF notebook seed/readback before asserting status-first primary routing with unavailable=1, reason, path, and daypart ref. The outage path remains intentionally fixture-backed: it forces daily-passage and notebook endpoint failures to prove the curated fallback thread and fallback passage route.

The deterministic GET /v1/nisaba/passages/daily route fixture remains because V1 does not expose a deterministic daily-passage seed writer for this Home setup. An initial run exposed a hydration warning from freezing only the client clock; the final spec removes that mock and reads the stage-dependent support/ref targets from the rendered telemetry attributes instead.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/home-nisaba-continuation.spec.ts WALKTHROUGH/customer/02-home-discovery/home.md WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/home-nisaba-continuation.spec.ts
    • passed
    • rerun after removing the client-only clock mock: passed
    • post-rebase reruns after origin/main moved to db4b7d2a2b and ed0a3eee2b: passed
  • Resource gate before typecheck / Playwright
    • before typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • before first Playwright run: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during that run, available memory stayed above 9.7 GiB
    • before the final typecheck / Playwright rerun: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during the final Playwright rerun, available memory stayed above 9.2 GiB
    • post-rebase before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during the post-rebase Playwright rerun, available memory stayed above 9.1 GiB
    • second post-rebase before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during the second post-rebase Playwright rerun, available memory stayed above 9.1 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
    • rerun after removing the client-only clock mock: passed
    • post-rebase reruns after origin/main moved to db4b7d2a2b and ed0a3eee2b: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/home-nisaba-continuation.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • initial run passed 3 tests but logged hydration mismatch warnings from the client-only clock mock
    • final rerun after removing that mock: 3 passed, with no hydration mismatch warning observed in the run output
    • post-rebase reruns after origin/main moved to db4b7d2a2b and ed0a3eee2b: 3 passed each
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/home-nisaba-continuation.spec.ts WALKTHROUGH/customer/02-home-discovery/home.md WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

114. 2026-06-25 Multi-device real-BFF reading-anchor restore#

Reduced the route-fixture surface in multi-device-deepening.spec.ts for the multi-device-workspace-handoff journey. The desktop deep-link reload test no longer fulfills GET /v1/nisaba/notebooks with an in-browser route fixture. Instead it captures the authenticated shell session, creates two real /v1/nisaba/notebooks records through the BFF request fixture, asserts those exact notebook IDs return as workspace reading anchors in the browser, selects one of the live anchors, reloads the same deep link, and verifies both restore channels: URL-restored side-panel kind and localStorage-restored reading-anchor ID.

The journey doc, coverage matrix, and completeness audit now distinguish this new desktop reload equality proof from the existing mobile-viewport multi-device-handoff-deepening spec. At the time, remaining gaps were the evidence-source ID equality path, real/PWA-installed oshun:// handoff, post-mobile desktop side-effect reconciliation, syncing copy, and Iris failure no-false-success branches; the evidence-source equality gap was closed in §179, the Home sync-state copy gap was closed in §180, and the Iris no-false-success / no-stale-payload gap was closed in §181.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/multi-device-deepening.spec.ts WALKTHROUGH/journeys/multi-device-workspace-handoff.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/multi-device-deepening.spec.ts
    • passed
    • post-rebase rerun after origin/main moved to c87cf324ac: passed
  • Resource gate before typecheck / Playwright
    • before typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 12 GiB
    • post-rebase before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during the post-rebase Playwright rerun, available memory stayed above 12 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to c87cf324ac: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/multi-device-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 3 passed
    • post-rebase rerun after origin/main moved to c87cf324ac: 3 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
    • post-rebase rerun after origin/main moved to c87cf324ac: passed
  • pnpm exec prettier --check apps/oshun/web/e2e/multi-device-deepening.spec.ts WALKTHROUGH/journeys/multi-device-workspace-handoff.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
    • post-rebase rerun after origin/main moved to c87cf324ac: passed
  • git diff --check
    • passed
    • post-rebase rerun after origin/main moved to c87cf324ac: passed

115. 2026-06-25 Nisaba analytics live notebook telemetry#

Reduced the route-fixture surface in nisaba-analytics.spec.ts for the nisaba-notebook-capture-and-cite journey. The browser analytics path no longer uses stubNisabaWorkspaceApi or an offline-service-worker shadow workaround. It now primes the authenticated shell, blocks service workers for this telemetry path, seeds a real /v1/nisaba/notebooks record through the BFF request fixture, verifies active-notebook list readback from the BFF, opens the real nisaba-passage-attention workspace, saves a study note, and asserts both the local persisted note and the nisaba_note_saved analytics event use that exact live notebook ID. The same run keeps the inspector-open and compare-action analytics assertions on the browser event bus.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/nisaba-analytics.spec.ts WALKTHROUGH/journeys/nisaba-notebook-capture-and-cite.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-fix-sweep-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/nisaba-analytics.spec.ts
    • passed
    • post-rebase rerun after origin/main moved to 9ca99cccee: passed
  • Resource gate before typecheck / Playwright
    • before typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 12 GiB
    • post-rebase before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during the post-rebase Playwright rerun, available memory stayed above 12 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to 9ca99cccee: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-analytics.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 1 passed
    • post-rebase rerun after origin/main moved to 9ca99cccee: 1 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
    • post-rebase rerun after origin/main moved to 9ca99cccee: passed
  • pnpm exec prettier --check apps/oshun/web/e2e/nisaba-analytics.spec.ts WALKTHROUGH/journeys/nisaba-notebook-capture-and-cite.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-fix-sweep-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
    • post-rebase rerun after origin/main moved to 9ca99cccee: passed
  • git diff --check
    • passed
    • post-rebase rerun after origin/main moved to 9ca99cccee: passed

116. 2026-06-25 Nisaba Metis prompt live notebook handoff#

Reduced the route-fixture surface in nisaba-metis-study-prompts.spec.ts for the nisaba-notebook-capture-and-cite journey. The spec now primes the authenticated shell and blocks service workers for this live-infra path instead of stubbing the Nisaba workspace API. The direct passage leg still proves the nisaba-passage-attention lesson-path handoff into Metis, while the collections leg now seeds a real /v1/nisaba/notebooks record through the BFF request fixture, verifies active-notebook list readback, asserts the live notebook prompt relationship, and clicks source-backed tutoring to prove the encoded Metis target path carries that exact seeded notebook ID.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/nisaba-metis-study-prompts.spec.ts WALKTHROUGH/journeys/nisaba-notebook-capture-and-cite.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/nisaba-metis-study-prompts.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 12 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-metis-study-prompts.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 2 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/nisaba-metis-study-prompts.spec.ts WALKTHROUGH/journeys/nisaba-notebook-capture-and-cite.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

117. 2026-06-25 Tara to Nisaba destination live citation trail#

Removed the remaining workspace-route mock from tara-to-nisaba-handoff-destination.spec.ts for the tara-to-nisaba-handoff journey's destination payoff. The spec now primes the authenticated customer shell, blocks service workers for this live-infra path, opens the live nisaba-passage-attention destination, and asserts the real NisabaCitationTrailPanel renders a closed-enum verification status plus a derivation step over the passage's source_lineage grounded view.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/tara-to-nisaba-handoff-destination.spec.ts WALKTHROUGH/journeys/tara-to-nisaba-handoff.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/tara-to-nisaba-handoff-destination.spec.ts
    • passed
    • post-rebase rerun after origin/main moved to 67379eed3f: passed
  • Resource gate before typecheck / Playwright
    • before typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 12 GiB
    • post-rebase before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during the post-rebase Playwright rerun, available memory stayed above 12 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to 67379eed3f: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tara-to-nisaba-handoff-destination.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 1 passed
    • post-rebase rerun after origin/main moved to 67379eed3f: 1 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
    • post-rebase rerun after origin/main moved to 67379eed3f: passed
  • pnpm exec prettier --check apps/oshun/web/e2e/tara-to-nisaba-handoff-destination.spec.ts WALKTHROUGH/journeys/tara-to-nisaba-handoff.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

118. 2026-06-25 Nisaba dashboard live shell bridges#

Removed the workspace-route mock from nisaba-dashboard.spec.ts. The spec now primes the authenticated customer shell, blocks service workers for this live-infra path, opens /domains/nisaba, and asserts the real curated overview state plus the live Mind Precedes All States study shelf entry. The passage workspace leg now uses live shared-concept-graph attributes to prove the six-domain bridge and exact Nisaba→Metis objective URL, and the domain recommendation leg continues to assert live ranked recommendation targets.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/nisaba-dashboard.spec.ts WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/nisaba-dashboard.spec.ts
    • passed
    • post-rebase rerun after origin/main moved to aa256650b9: passed
  • Resource gate before typecheck / Playwright
    • before typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 12 GiB
    • post-rebase before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during the post-rebase Playwright rerun, available memory stayed above 12 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to aa256650b9: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-dashboard.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 3 passed
    • post-rebase rerun after origin/main moved to aa256650b9: 3 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
    • post-rebase rerun after origin/main moved to aa256650b9: passed
  • pnpm exec prettier --check apps/oshun/web/e2e/nisaba-dashboard.spec.ts WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
    • post-rebase rerun after origin/main moved to aa256650b9: passed
  • git diff --check
    • passed
    • post-rebase rerun after origin/main moved to aa256650b9: passed

119. 2026-06-25 Nisaba reading compare annotate live shell#

Removed stubNisabaWorkspaceApi from nisaba-reading-compare-annotate.spec.ts. The spec now primes the authenticated customer shell, seeds and reads a real /v1/nisaba/notebooks record for each test, opens the live public-domain Dhammapada nisaba-passage-attention reading desk, proves the workflow-map and compare-card target URL, and drives a real BFF-seeded annotation through browser update → archive → show-archived. The citation-format selector remains browser-driven from the live citations inspector. The hydrated Nisaba domain metadata now gives the compare, passage, library, and notebook subpaths concrete browser titles so the authenticated workflow-map compare hop also remains WCAG-clean under the shared axe teardown.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/domains/[domainId]/page.tsx apps/oshun/web/e2e/nisaba-reading-compare-annotate.spec.ts WALKTHROUGH/journeys/nisaba-notebook-capture-and-cite.md WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/nisaba-reading-compare-annotate.spec.ts apps/oshun/web/src/app/domains/[domainId]/page.tsx
    • passed
    • post-rebase rerun after origin/main moved to 4f5d6f7507: passed
    • second post-rebase rerun after origin/main moved to 53c39b6bba: passed
  • Resource gate before typecheck / Playwright
    • before typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 8.8 GiB
    • post-rebase before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during the post-rebase Playwright rerun, available memory stayed above 8.9 GiB
    • second post-rebase before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during the second post-rebase Playwright rerun, available memory stayed above 8.8 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to 4f5d6f7507: passed from Nx cache
    • second post-rebase rerun after origin/main moved to 53c39b6bba: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-reading-compare-annotate.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 5 passed
    • post-rebase rerun after origin/main moved to 4f5d6f7507: 5 passed
    • second post-rebase rerun after origin/main moved to 53c39b6bba: 5 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/domains/[domainId]/page.tsx apps/oshun/web/e2e/nisaba-reading-compare-annotate.spec.ts WALKTHROUGH/journeys/nisaba-notebook-capture-and-cite.md WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

120. 2026-06-25 Nisaba capture/citation live shell#

Removed stubNisabaWorkspaceApi from nisaba-notebook-capture-cite.spec.ts. The spec now primes the authenticated customer shell, blocks service workers, clears stale Nisaba offline snapshots, and waits for the live /v1/nisaba/passages/nisaba-passage-attention BFF response before asserting UI state. The Dhammapada citation workspace now proves BibTeX/Markdown/RIS/CSL-JSON format switching from live passage data, citation download labels, copy status, and the "Open source" path into the sources inspector with the live primary Dhammapada source, manuscript witness, anchor-source section, and lineage-paths section. The same focused spec still covers the private /nisaba/notebook export/print rail and robots noindex,nofollow meta.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/nisaba-notebook-capture-cite.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/nisaba-notebook-capture-cite.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • before Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 8.7 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-notebook-capture-cite.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 6 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/nisaba-notebook-capture-cite.spec.ts WALKTHROUGH/journeys/nisaba-notebook-capture-and-cite.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

121. 2026-06-25 Nisaba reading accessibility live shell#

Removed stubNisabaWorkspaceApi from nisaba-reading-accessibility.spec.ts. The route-level accessibility suite now primes the authenticated customer shell, blocks service workers, clears stale Nisaba offline snapshots, seeds and reads back a real /v1/nisaba/notebooks record, and waits for live Nisaba BFF responses before each scan. Coverage now includes the desktop reading desk, compare desk, manuscript, annotation, concept, lexicon, timeline, influence, collections, study-plan, citation/export, and scholar inspectors, plus the mobile notebook note sheet and mobile Nisaba home. The concept route now targets the live daily passage concept ID (nisaba-concept-attention) instead of a fixture-only fallback path.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/nisaba-reading-accessibility.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/nisaba-reading-accessibility.spec.ts
    • passed
    • post-rebase rerun after origin/main moved to ace48b0747: passed
  • Resource gate before typecheck / Playwright
    • before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during Playwright: available memory stayed above 8.6 GiB
    • post-rebase before typecheck / Playwright after origin/main moved to ace48b0747: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during post-rebase Playwright: available memory stayed above 8.5 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to ace48b0747: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-reading-accessibility.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 14 passed
    • post-rebase rerun after origin/main moved to ace48b0747: 14 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/nisaba-reading-accessibility.spec.ts WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

122. 2026-06-25 Nisaba split-view live shell#

Removed stubNisabaWorkspaceApi from nisaba-split-view.spec.ts. The split-view suite now primes the authenticated customer shell, clears stale Nisaba offline snapshots, seeds and reads back a real /v1/nisaba/notebooks record plus a real /v1/nisaba/passages/nisaba-passage-attention/annotations record, and waits for live daily/detail Dhammapada BFF responses before asserting route state. Coverage now includes compare, mobile home, grounded evidence, manuscript, annotation update/archive/show-archived, notebook note capture, citation/export, scholar, notebook, concept, lexicon, timeline, influence, collections, study-plan, mobile source lineage, and mobile note routes without workspace route stubs.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/nisaba-split-view.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/nisaba-split-view.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during Playwright: available memory stayed above 8.6 GiB
    • post-rebase before typecheck / Playwright after origin/main moved to 76473ad231: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during post-rebase Playwright: available memory stayed above 8.6 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to 76473ad231: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-split-view.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 18 passed
    • post-rebase rerun after origin/main moved to 76473ad231: 18 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/nisaba-split-view.spec.ts WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/journeys/nisaba-notebook-capture-and-cite.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

123. 2026-06-25 Domain readability live Nisaba shell#

Removed stubNisabaWorkspaceApi from domain-readability.spec.ts. The cross-domain readability audit now primes the authenticated customer shell, blocks service workers, clears stale Nisaba offline snapshots, seeds and reads back a real /v1/nisaba/notebooks record, and waits for live /v1/nisaba/passages/nisaba-passage-attention or daily-passage BFF responses before asserting Nisaba readability state. The Nisaba legs now prove the live Dhammapada passage, compare, grounded evidence, and note inspector routes keep the focused 62ch study lane, support rail, notebook rail, compare rail, and note frame constrained without workspace route stubs. The same focused spec also opens Veritas and Tara through the authenticated shell while preserving their readability assertions.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/domain-readability.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/domain-readability.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during Playwright: available memory stayed above 8.7 GiB
    • post-rebase before typecheck / Playwright after origin/main moved to 6c4ea93fed: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during post-rebase Playwright: available memory stayed above 8.7 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
    • post-rebase rerun after origin/main moved to 6c4ea93fed: passed from Nx cache
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/domain-readability.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 6 passed
    • post-rebase rerun after origin/main moved to 6c4ea93fed: 6 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/domain-readability.spec.ts WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

124. 2026-06-25 Viewport fit live Nisaba compare shell#

Removed stubNisabaWorkspaceApi from the Nisaba compare breakpoint leg in viewport-fit.spec.ts. The viewport posture audit now opens the authenticated /domains/nisaba?origin=explore&path=%2Fcompare shell route, clears stale Nisaba offline snapshots only for that live route, waits for the real /v1/nisaba/passages/daily BFF response, and asserts the compare workspace mode, responsive split/stacked study layout, compare deck, and evidence/notebook inspector posture across narrow mobile, tablet, laptop, and desktop widths.

Verification:

  • psql --version
    • already installed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/e2e/viewport-fit.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/viewport-fit.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck / first Playwright run: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during the full-file diagnostic Playwright run: available memory stayed above 7.9 GiB
    • before targeted Playwright rerun: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during targeted Playwright rerun: available memory stayed above 8.3 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/viewport-fit.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • diagnostic run: changed Nisaba live compare test passed; full file reported two unrelated failures ([data-library-item] absent in the library viewport case and profile assistant teacher-style/content-tone color-contrast at 4.27-4.38:1)
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/viewport-fit.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "Nisaba preserves its semantic reading posture across live compare breakpoints"
    • 1 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/viewport-fit.spec.ts WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

125. 2026-06-25 Library journey no Nisaba workspace fixture#

Removed the obsolete stubNisabaWorkspaceApi setup from library-save-collection-share.spec.ts. This journey spec does not hydrate a Nisaba workspace directly; it now seeds and reads back its asserted tara-evening-reset and assistant-source-trail rows through the real /v1/library/saved-items BFF before exercising the authenticated library dashboard, resume rail, saved queue, collection share-control mount, and saved-item unsave surface. The library journey documentation now points the Nisaba save-producer claim at the real-BFF search-saved-and-recent coverage, which saves a live search result, verifies the in-domain Nisaba reading action is already saved, drives real DELETE/POST unsave/resave de-dupe, hydrates /library without local cache, and resumes the exact passage workspace.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/library-save-collection-share.spec.ts WALKTHROUGH/journeys/library-save-collection-share.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/library-save-collection-share.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck / first Playwright run: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during the first Playwright run: available memory stayed above 9.3 GiB
    • before final typecheck / Playwright after adding real-BFF seed/readback: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during final Playwright: available memory stayed above 8.8 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
    • rerun after adding real-BFF saved-items seed/readback: passed
    • rerun after removing the duplicate hand-written auth route: passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/library-save-collection-share.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • diagnostic run before BFF seeding: 2 passed, 2 failed because the clean authenticated account had no saved/resume rows after the obsolete workspace fixture was removed
    • run after real-BFF seed/readback: 4 passed
    • final rerun after removing the duplicate hand-written auth route: 4 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/library-save-collection-share.spec.ts WALKTHROUGH/journeys/library-save-collection-share.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

126. 2026-06-25 Shell route signoff live Nisaba hydration#

Removed the obsolete stubNisabaWorkspaceApi setup from shell-route-signoff.spec.ts. The critical shell signoff suite still captures Home, Explore, Library, Activity, Search, Profile, profile notifications, the notifications drawer, contextual assistant dock, and shell loading/empty/offline /error previews; its Nisaba compare and passage screenshot legs now use a real per-session /v1/nisaba/notebooks seed/readback, clear stale Nisaba offline snapshots, and wait for live /v1/nisaba/passages/daily or /v1/nisaba/passages/:id hydration before asserting authenticated-shell workspace posture.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/shell-route-signoff.spec.ts WALKTHROUGH/shell/02-routing-layouts.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/shell-route-signoff.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck / Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during focused Playwright: available memory observed above 8.6 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/shell-route-signoff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 12 passed

127. 2026-06-25 PWA update live Nisaba reading route#

Removed the obsolete stubNisabaWorkspaceApi setup from the pwa-smoke reading-mode update tests. The staged update prompt still uses the browser-side waiting-service-worker harness, but the reading surface underneath now clears stale Nisaba offline snapshots and waits for live /v1/nisaba/passages/nisaba-passage-attention hydration before asserting the reading frame, the staged prompt, "Keep reading" dismissal, and explicit "Refresh now" preservation.

The first live-route diagnostic exposed a real behavior gap hidden by the old fixture: after applying the update, the route rehydrated but returned near the top instead of the previous mid-passage scroll position. PwaBootstrap now stores a per-route scroll snapshot before sending OSHUN_SKIP_WAITING and restores it after reload, preserving the snapshot across the first query-less hydration render until useBrowserSearchParams() syncs the real search string.

Verification:

  • cat /root/.codex/skills/frontend-skill/SKILL.md
    • read before the user-facing PWA behavior fix
  • pnpm exec prettier --write apps/oshun/web/src/components/PwaBootstrap.tsx apps/oshun/web/src/components/__tests__/PwaBootstrap.test.tsx apps/oshun/web/e2e/pwa-smoke.spec.ts WALKTHROUGH/journeys/pwa-update-flow.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/pwa-smoke.spec.ts apps/oshun/web/src/components/PwaBootstrap.tsx apps/oshun/web/src/components/__tests__/PwaBootstrap.test.tsx
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck / focused Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during focused Playwright: available memory observed above 12 GiB
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/PwaBootstrap.test.tsx
    • after splitting the scroll tests and preserving the snapshot across initial query hydration: 9 passed
  • pnpm nx run @oshun/web:typecheck
    • passed before the behavior fix
    • rerun after the behavior fix: passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/pwa-smoke.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "Nisaba reading"
    • diagnostic live-route run failed before the behavior fix: route rehydrated but scroll restored to 101 px instead of the prior mid-passage position
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/pwa-smoke.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "Nisaba"
    • 2 passed

128. 2026-06-25 Redesigned breakpoint live Nisaba hydration#

Removed the obsolete stubNisabaWorkspaceApi setup from redesigned-surface-breakpoints.spec.ts. The spec still validates the shell dashboard and dedicated search breakpoint postures, while the Nisaba compare, passage, and notebook breakpoint legs now seed and read back a real per-session /v1/nisaba/notebooks record, clear stale Nisaba offline snapshots, and wait for live /v1/nisaba/passages/daily, /v1/nisaba/passages/:id, and /v1/nisaba/notebooks hydration before asserting tablet/laptop/desktop split/stacked study posture, support-rail geometry, note/evidence inspector behavior, and the dynamic notebook route.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/redesigned-surface-breakpoints.spec.ts WALKTHROUGH/journeys/coverage.md WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-fix-sweep-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/redesigned-surface-breakpoints.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck / focused Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during focused Playwright: available memory observed above 8.2 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/redesigned-surface-breakpoints.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 4 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/redesigned-surface-breakpoints.spec.ts WALKTHROUGH/journeys/coverage.md WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-fix-sweep-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

129. 2026-06-25 Nyx event Nisaba bridge live hydration#

Removed the obsolete stubNisabaWorkspaceApi setup from nyx-event-pages.spec.ts. The Nyx event-detail suite still isolates the server-persisted Nyx event-action state with its scoped GET/PUT /v1/nyx/event-actions boundary mock, but its generated Nisaba overlay and concept-graph passage links now block service workers, clear stale Nisaba offline snapshots, seed and read back a real per-test /v1/nisaba/notebooks record, and assert the browser receives that exact notebook through live /v1/nisaba/notebooks hydration. The clicked Nisaba targets also wait for live /v1/nisaba/passages/daily before asserting cosmology, source-lineage, and compare workspace views.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/nyx-event-pages.spec.ts WALKTHROUGH/journeys/coverage.md WALKTHROUGH/journeys/nyx-tonight-observation.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-fix-sweep-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/nyx-event-pages.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before targeted Playwright and full-file verification: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during full-file Playwright: available memory observed above 8.1 GiB
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nyx-event-pages.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "Nisaba|concept graph"
    • 2 passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nyx-event-pages.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 14 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/nyx-event-pages.spec.ts WALKTHROUGH/journeys/coverage.md WALKTHROUGH/journeys/nyx-tonight-observation.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-fix-sweep-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

130. 2026-06-25 Nisaba visual regression live hydration#

Removed the obsolete stubNisabaWorkspaceApi setup from the Nisaba screenshot legs in visual-regression-pages.spec.ts. The seven Nisaba visual cases now block service workers through the suite context, clear stale Nisaba offline snapshots, seed and read back a real per-test /v1/nisaba/notebooks record, and assert the browser receives that exact notebook through live /v1/nisaba/notebooks hydration before capture. Passage, evidence, note, and mobile source-lineage screenshots wait for live /v1/nisaba/passages/:id; compare and notebook workspace screenshots wait for live /v1/nisaba/passages/daily.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/visual-regression-pages.spec.ts WALKTHROUGH/journeys/coverage.md WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-fix-sweep-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/visual-regression-pages.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck and focused Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during focused Playwright: available memory observed above 8 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/visual-regression-pages.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "Nisaba"
    • 7 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/visual-regression-pages.spec.ts WALKTHROUGH/journeys/coverage.md WALKTHROUGH/journeys/nisaba-scholarly-read.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-fix-sweep-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

131. 2026-06-26 Messages center live browser BFF proxy#

Added a live browser coverage leg to messages-center.spec.ts. The test seeds the BFF message store through POST /v1/admin/customer-messages/dispatch using the exact sub from the browser's real access token, opens /messages without mocking /api/messages/*, and asserts the page renders the dispatched rows and receipt disclosure through the Next proxy. It then follows the deep link via /api/messages/:id/follow and verifies the BFF records a clicked receipt, marks read, archives, unsubscribes, and proves a same channel+category re-dispatch is refused with 422 suppressed.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/messages-center.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck and focused/full Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during full-file Playwright: available memory observed above 7.8 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/messages-center.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "live BFF browser proxy"
    • 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/messages-center.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 13 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/messages-center.spec.ts WALKTHROUGH/journeys/messages-center-deliver-and-unsubscribe.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

132. 2026-06-26 Profile generated artifact deletion live browser receipt#

Closed the remaining browser-level generated_artifact receipt gap in profile-customer-data-deletion.spec.ts. The new leg decodes the browser session's real access-token sub, seeds a subject-owned Isis generated_outputs row, opens /profile?path=data-rights, submits an immediate generated_artifacts category deletion through the profile UI, and asserts the completed live BFF response renders data-profile-deletion-attestation="generated_artifact" with status=erased, rowsRemoved=1, the dev audit key id, and a truncated signature. It then polls Isis to verify the generated output row was hard-deleted. The older inline snapshot case is retained only as the unattested tombstone negative-render guard.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/profile-customer-data-deletion.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before focused/full Playwright and post-fix typecheck: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during full-file Playwright: available memory observed above 8.1 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed after the short Isis-owner seed fix
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-customer-data-deletion.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "generated artifact erasure receipts"
    • first run exposed the Isis generated_outputs.ownerId varchar(50) limit; rerun after shortening the generated-artifact test session seed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-customer-data-deletion.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 6 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/profile-customer-data-deletion.spec.ts WALKTHROUGH/journeys/account-deletion-and-dsar.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

133. 2026-06-26 Library second-device save sync resume#

Closed the full browser-level second-device library sync/resume gap for the Nisaba search-result path. The updated search-saved-and-recent.spec.ts still drives device A through the real /search save toggle, real saved-items BFF POST, in-domain saved-state read-back, real DELETE/POST unsave/resave, and BFF read-back. It now opens a fresh device-B browser context for the same member, clears library/search/Nisaba localStorage before navigation, hydrates /library?domain=nisaba&kind=passage from the real BFF store, and resumes the saved passage into the exact Nisaba workspace URL.

Verification:

  • psql --version && which psql
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1) at /usr/bin/psql
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/search-saved-and-recent.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck and focused/full Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during full-file Playwright: available memory observed above 8.8 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "second-device Library"
    • 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/search-saved-and-recent.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 12 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/search-saved-and-recent.spec.ts WALKTHROUGH/journeys/library-save-collection-share.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • git diff --check
    • passed

134. 2026-06-26 Arete streak actions navigation-only guard#

Closed the documented /arete/streak navigation-only failure mode in arete-streak-recovery.spec.ts. The new browser leg captures the member's real /v1/arete/room snapshot, clicks Adjust into /arete/plan?intent=adjust, verifies the plan masthead, then clicks Begin into /tara/sit/when-the-mind-wanders, verifies the Tara player is still not-started, and reads /v1/arete/room after both navigations to prove neither action mutates Arete engagement state or writes a hidden streak record.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/arete-streak-recovery.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck and focused/full Playwright: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
    • during full-file Playwright: available memory observed above 7.8 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/arete-streak-recovery.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "navigation-only"
    • first run hit a cold Tara RSC fallback before the Tara player hydrated; immediate rerun passed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/arete-streak-recovery.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 7 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/arete-streak-recovery.spec.ts WALKTHROUGH/journeys/arete-streak-recovery.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

135. 2026-06-26 Sophia citation handoff into Nisaba#

Closed the browser-level Sophia citation handoff gap for the shipped /sophia page. SophiaAskForm now exposes a quiet "Open in Nisaba" source link for passage citations, normalizing BFF search-nisaba-passage-* citation IDs into the underlying nisaba-passage-* route target. The updated sophia-grounded-answer-page.spec.ts submits the grounded query through the live BFF, asserts the normalized citation target, clicks it, and verifies the Nisaba passage-mode reading frame hydrates with the same passage id. The cautious/partial Tao Te Ching branch also asserts its exact Nisaba citation target.

Verification:

  • which psql
    • passed: /usr/bin/psql
  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/sophia/SophiaAskForm.tsx apps/oshun/web/e2e/sophia-grounded-answer-page.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck and browser runs: 15 GiB RAM, at least 12 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/sophia-grounded-answer-page.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "grounded-with-citations"
    • 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/sophia-grounded-answer-page.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 2 passed

136. 2026-06-26 Sophia grounded answer Library save/readback#

Closed the browser-level Sophia pin-to-Library gap for the shipped /sophia page. SophiaAskForm now exposes a stable Save answer control on grounded answer cards, builds a Library assistant-excerpt item with the answer snapshot, witness trail, grounding state, citation count, and trust metadata, and persists it through the real /v1/library/saved-items/nisaba/<itemId> BFF route. The updated sophia-grounded-answer-page.spec.ts clicks the save control, waits for the real saved-items POST, opens a fresh browser context with the local Library cache cleared at /library?domain=nisaba&kind=assistant-excerpt, and verifies that the saved Sophia card hydrates from the BFF with the exact answer/witness summary, assistant-excerpt kind, and grounded trust state before continuing the live Nisaba citation handoff.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/sophia/SophiaAskForm.tsx apps/oshun/web/e2e/sophia-grounded-answer-page.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck and browser runs: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/sophia-grounded-answer-page.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "grounded-with-citations"
    • first run failed because the Library summary placed the answer before the witness trail and truncated the asserted witness title; summary ordering was corrected and the focused rerun passed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/sophia-grounded-answer-page.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 2 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/sophia/SophiaAskForm.tsx apps/oshun/web/e2e/sophia-grounded-answer-page.spec.ts WALKTHROUGH/journeys/sophia-grounded-answer.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

137. 2026-06-26 Sophia citation locator and back restore#

Closed the browser-level Sophia cited-locator and back-navigation gap for the shipped /sophia citation path. SophiaAskForm now carries each passage citation's real BFF summary as a nested locator query parameter in the Nisaba handoff URL, exposes the locator on the citation link, and stores the last Sophia answer plus return scroll in tab session storage before leaving the page. NisabaSurface parses the locator, resolves it against the live passage body, and renders a dedicated data-nisaba-citation-locator-highlight mark without creating a user annotation. sophia-grounded-answer-page.spec.ts now asserts the locator URL contract, the matched Nisaba reading-frame locator state, the highlighted excerpt, and browser-back restoration to the same saved /sophia answer card and scroll position.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/sophia/SophiaAskForm.tsx apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/e2e/sophia-grounded-answer-page.spec.ts
    • passed
  • Resource gate before typecheck / Playwright
    • before typecheck and browser runs: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/sophia-grounded-answer-page.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "grounded-with-citations"
    • first run failed because browser-back returned to /sophia without the answer card; session answer/scroll restoration was added and the focused rerun passed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/sophia-grounded-answer-page.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • 2 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/app/sophia/SophiaAskForm.tsx apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/e2e/sophia-grounded-answer-page.spec.ts WALKTHROUGH/journeys/sophia-grounded-answer.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

138. 2026-06-26 Messages quiet-hours weekday mask browser persistence#

Closed the browser-level quiet-hours weekday-mask gap for the shipped /profile?path=notifications editor. NotificationPreferences now exposes each quiet-hours day chip as an aria-pressed toggle with stable data-profile-quiet-hours-day hooks. The updated profile-notification-preferences.spec.ts enables quiet hours through the real profile preference route, waits for the real notification-preferences PATCHes, narrows Sunday/Saturday out of the active-day mask, reloads the profile editor, and verifies the persisted start time and active-day mask come back from the BFF-backed state. A focused component test also asserts the active-day PATCH body and pressed-state transition.

Verification:

  • command -v psql && psql --version
    • passed: /usr/bin/psql, psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/profile/NotificationPreferences.tsx apps/oshun/web/src/components/__tests__/NotificationPreferences.test.tsx apps/oshun/web/e2e/profile-notification-preferences.spec.ts
    • passed; emitted the existing Next pages-directory warning
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/NotificationPreferences.test.tsx src/components/profile/__tests__/NotificationPreferences.test.tsx
    • passed: 2 files, 13 tests
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • Resource gate before typecheck / Playwright
    • before focused verification: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 9.0 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-notification-preferences.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 5 passed
  • pnpm exec prettier --check apps/oshun/web/src/components/profile/NotificationPreferences.tsx apps/oshun/web/src/components/__tests__/NotificationPreferences.test.tsx apps/oshun/web/e2e/profile-notification-preferences.spec.ts WALKTHROUGH/journeys/messages-quiet-hours-and-channel-binding.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

139. 2026-06-26 Atelier image plate controls and save refresh#

Closed the shipped /atelier and /atelier/image browser coverage gap around plate controls and responsive layout. The Atelier image room now exposes a live step rail, responsive room/composer grids, aspect and style option chips, a real seed-lock toggle, a compare side-by-side panel, selection-driven step advancement to step 4, and save-driven advancement to step 5. Cast/refine POST payloads now carry the browser-selected specimen, aspect, style, and seed state. The deterministic atelier-plate-kept save path also now refreshes existing saved library rows, and the signed-in library hydrate path keeps a pending local save refresh over an older same-id server row.

Verification:

  • command -v psql && psql --version
    • passed: /usr/bin/psql, psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm --dir apps/oshun/web exec vitest run src/lib/library/webLibraryStore.test.ts src/lib/library/webLibraryStore.sync.test.ts
    • passed: 2 files, 17 tests
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/lilith/AtelierImageComposer.tsx apps/oshun/web/src/components/lilith/AtelierPlateActions.tsx apps/oshun/web/src/components/lilith/atelier.tsx apps/oshun/web/src/lib/library/webLibraryStore.ts apps/oshun/web/src/lib/library/webLibraryStore.test.ts apps/oshun/web/src/lib/library/webLibraryStore.sync.test.ts apps/oshun/web/e2e/atelier-image-to-library.spec.ts apps/oshun/web/e2e/atelier-plate-actions.spec.ts
    • passed; emitted the existing Next pages-directory warning
  • Resource gate before focused typecheck / Playwright
    • before browser verification: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 9.1 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/atelier-image-to-library.spec.ts e2e/atelier-plate-actions.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run exposed the stale same-id library save refresh bug; after the store fix, focused rerun passed: 15 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/lilith/AtelierImageComposer.tsx apps/oshun/web/src/components/lilith/AtelierPlateActions.tsx apps/oshun/web/src/components/lilith/atelier.tsx apps/oshun/web/src/lib/library/webLibraryStore.ts apps/oshun/web/src/lib/library/webLibraryStore.test.ts apps/oshun/web/src/lib/library/webLibraryStore.sync.test.ts apps/oshun/web/e2e/atelier-image-to-library.spec.ts apps/oshun/web/e2e/atelier-plate-actions.spec.ts WALKTHROUGH/customer/11-atelier/atelier-image.md WALKTHROUGH/customer/11-atelier/atelier.md WALKTHROUGH/journeys/atelier-image-to-library.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/atelier-image-to-library.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

140. 2026-06-26 Metis assessment submit to Themis adjudication#

Closed the themis-assessment-appeal customer-submit gap without seeding the verdict through the operator route. /metis/assessment now submits a rubric-valid answer to POST /v1/metis/assessment-submissions, the BFF runs the Metis academic-integrity detector, adjudicates through the real MetisThemisCanonicalBridge, captures the audit record, and returns a compact Themis verdict result to the learner. Clear submissions render a closed appeal path; suspicious submissions render an appeal link that opens the real /integrity/<verdictId>/appeal workspace. The slice also updated the walkthrough docs to mark submit→detection→adjudication as covered while leaving operator review UI, gradebook read-back, rich learner evidence/rationale, and messages notifications open.

Verification:

  • command -v psql and psql --version
    • passed: /usr/bin/psql, psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/metis-integrity-route.test.ts
    • passed: 1 file, 9 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/lilith/MetisAssessmentEditor.test.tsx
    • passed: 1 file, 7 tests
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/metis-integrity.ts apps/oshun/bff/src/__tests__/metis-integrity-route.test.ts apps/oshun/web/src/components/lilith/MetisAssessmentEditor.tsx apps/oshun/web/src/components/lilith/MetisAssessmentEditor.test.tsx apps/oshun/web/e2e/metis-assessment-submit.spec.ts
    • passed; emitted the existing Next pages-directory warning
  • Resource gate before focused typecheck / Playwright
    • before browser verification: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 9.5 GiB
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • first run failed in stale generated .next/dev/types/routes.d.ts; after clearing apps/oshun/web/.next, rerun passed and Nx reported the target as flaky
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/metis-assessment-submit.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run exposed the clear-answer fixture was 228 words in the browser word counter; after trimming the fixture, focused rerun passed: 4 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed

142. 2026-06-26 Operator Metis Themis appeal review UI#

Closed the /operator/metis operator-review UI gap for the themis-assessment-appeal journey. The BFF appeal store now indexes filed appeals, exposes an admin-scoped GET /v1/metis/integrity/appeals queue, and keeps reset isolation for route tests. /operator/metis now mounts a live Themis appeal review panel that reads the queue, renders the canonical dispute, claimant, evidence count, timeline deadline states, due-process summary, and resolution note controls, then resolves the appeal through the existing real BFF POST /v1/metis/integrity/appeals/:appealId/resolve route and updates the row to status=closed.

Verification:

  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/metis/academic-integrity-appeal-store.ts apps/oshun/bff/src/routes/metis-integrity.ts apps/oshun/bff/src/__tests__/metis-integrity-route.test.ts apps/oshun/web/src/components/lilith/MetisThemisAppealReviewPanel.tsx apps/oshun/web/src/components/lilith/metis.tsx apps/oshun/web/e2e/operator-metis-themis-review.spec.ts
    • passed; emitted the existing Next pages-directory warning
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/metis-integrity-route.test.ts
    • first run exposed a stale due-process text assertion (Compared vs. the real Top access-to-justice profile... bridge summary); after correcting the assertion, rerun passed: 1 file, 10 tests
  • Resource gate before focused typecheck / Playwright
    • before browser verification: 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 9.8 GiB
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-metis-themis-review.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 1 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/bff/src/routes/metis-integrity.ts apps/oshun/bff/src/__tests__/metis-integrity-route.test.ts apps/oshun/web/e2e/operator-metis-themis-review.spec.ts WALKTHROUGH/customer/02-home-discovery/messages.md WALKTHROUGH/journeys/themis-assessment-appeal.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/themis-assessment-appeal.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/metis-byom-ingest.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 16 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/bff/src/metis/academic-integrity-appeal-store.ts apps/oshun/bff/src/routes/metis-integrity.ts apps/oshun/bff/src/__tests__/metis-integrity-route.test.ts apps/oshun/web/src/components/lilith/MetisThemisAppealReviewPanel.tsx apps/oshun/web/src/components/lilith/metis.tsx apps/oshun/web/e2e/operator-metis-themis-review.spec.ts WALKTHROUGH/operator/operator-metis.md WALKTHROUGH/journeys/themis-assessment-appeal.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/themis-assessment-appeal.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • git diff --check
    • passed

143. 2026-06-26 Themis decision notification to Messages#

Closed the /messages outcome-notification gap for the themis-assessment-appeal journey. The Metis integrity resolve route now publishes an in-app incident message to the claimant through the existing customer message center store after the canonical Themis appeal workspace closes. The message carries the verdict id, closed status, operator resolution note, a tracked /integrity/<verdictId>/appeal follow link, and sent/delivered receipts. The route returns a notification envelope while keeping the appeal resolution durable if message-center dedupe or suppression prevents a second delivery.

The browser coverage now seeds the appeal for the actual customer principal used by the shell session, resolves the appeal from /operator/metis, reads the learner inbox from the real BFF, opens /messages, verifies the decision row, follows the appeal-record link through the Next /api/messages proxy, checks the clicked receipt, marks the row read, and reads the final BFF state back.

Verification:

  • Resource gate before browser verification
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 12 GiB and returned to 13 GiB after exit
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/metis-integrity.ts apps/oshun/bff/src/__tests__/metis-integrity-route.test.ts apps/oshun/web/e2e/operator-metis-themis-review.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/metis-integrity-route.test.ts
    • passed: 1 file, 11 tests
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-metis-themis-review.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 1 passed

144. 2026-06-26 Themis gradebook terminal read-back#

Closed the themis-assessment-appeal gradebook terminal-state gap. The Metis integrity BFF now emits a real @metis/gradebook entry when an assessment submission produces an appealable non-clear academic-integrity verdict. That first emission is version 1 with integrityVerdict: "pending" and the Themis verdict id as integrityVerdictRef. When the appeal resolves, the same route emits a terminal integrity_verdict_change correction with cascadeFrom: "appeal", correctsVersion: 1, the operator resolution note as the correction reason, and the final integrity verdict.

The BFF exposes the role-filtered read-back route GET /v1/metis/gradebook/:assignmentId/latest, and the operator browser flow now renders the resolved row's gradebook correction (pending → violation, version 2, correctsVersion=1) before reading the same entry directly from the real BFF.

Verification:

  • Resource gate before focused typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 9.6 GiB and returned to 13 GiB after exit
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/metis/gradebook-store.ts apps/oshun/bff/src/routes/metis-integrity.ts apps/oshun/bff/src/__tests__/metis-integrity-route.test.ts apps/oshun/web/src/components/lilith/MetisThemisAppealReviewPanel.tsx apps/oshun/web/e2e/operator-metis-themis-review.spec.ts
    • passed; emitted the existing Next pages-directory warning
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/metis-integrity-route.test.ts
    • passed: 1 file, 11 tests
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-metis-themis-review.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/metis-assessment-submit.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 4 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/bff/src/metis/gradebook-store.ts apps/oshun/bff/src/routes/metis-integrity.ts apps/oshun/bff/src/__tests__/metis-integrity-route.test.ts apps/oshun/web/src/components/lilith/MetisThemisAppealReviewPanel.tsx apps/oshun/web/e2e/operator-metis-themis-review.spec.ts WALKTHROUGH/journeys/themis-assessment-appeal.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/themis-assessment-appeal.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

145. 2026-06-26 Themis verdict outcome controls#

Closed the remaining themis-assessment-appeal operator-decision gaps. The Metis integrity BFF now exposes POST /v1/metis/integrity/appeals/:appealId/decision, which accepts a compact operator outcome (uphold, inconclusive, clear, or severe) and a resolution note instead of accepting a raw client-side teacherOverride block. The route retrieves the stored canonical academic-integrity verdict, maps the outcome into the bridge's repeated adjudication contract, records the resulting upheld or overturned verdict, closes the appeal workspace, emits the customer decision message, and writes the terminal gradebook correction.

/operator/metis now renders Uphold / Revise / Dismiss / Escalate controls in the live Themis appeal row. The browser test verifies the controls, toggles the Escalate control and returns to Uphold, submits outcome: "uphold" with no raw teacherOverride, and reads back the closed workspace, upheld verdict status, gradebook correction, and /messages decision notification. The BFF route suite covers the non-default inconclusive, clear, and severe outcome mappings.

Verification:

  • pnpm exec eslint --no-warn-ignored libs/metis/integrations/src/themis-canonical-wiring.ts apps/oshun/bff/src/metis/academic-integrity-appeal-store.ts apps/oshun/bff/src/routes/metis-integrity.ts apps/oshun/bff/src/__tests__/metis-integrity-route.test.ts apps/oshun/web/src/components/lilith/MetisThemisAppealReviewPanel.tsx apps/oshun/web/e2e/operator-metis-themis-review.spec.ts
    • passed; emitted the existing Next pages-directory warning
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/metis-integrity-route.test.ts
    • passed: 1 file, 13 tests
  • Resource gate before focused typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 12 GiB
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-metis-themis-review.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 1 passed
  • pnpm --dir libs/metis/integrations exec vitest run src/themis-canonical-wiring.test.ts
    • passed: 1 file, 9 tests
  • pnpm exec tsc -p libs/metis/integrations/tsconfig.lib.json --noEmit
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check libs/metis/integrations/src/themis-canonical-wiring.ts apps/oshun/bff/src/metis/academic-integrity-appeal-store.ts apps/oshun/bff/src/routes/metis-integrity.ts apps/oshun/bff/src/__tests__/metis-integrity-route.test.ts apps/oshun/web/src/components/lilith/MetisThemisAppealReviewPanel.tsx apps/oshun/web/e2e/operator-metis-themis-review.spec.ts WALKTHROUGH/journeys/themis-assessment-appeal.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/themis-assessment-appeal.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

146. 2026-06-26 PWA queued-write update prompt#

Closed the pwa-update-flow queued-write prompt gap. The service worker now publishes OSHUN_SYNC_QUEUE_STATUS whenever a background-sync action is queued or replayed, and PwaBootstrap carries the pending count into PwaUpdatePrompt. When an update prompt appears while the real oshun-sync-queue IndexedDB store holds pending writes, the prompt renders a compact data-pwa-update-note="queued-write" continuity note with the count and copy that Refresh now preserves the held service-worker queue.

The new Chromium Playwright leg queues an authenticated Arete check-in through the real sw.js OSHUN_QUEUE_ACTION path, verifies the pending row in IndexedDB, surfaces the update prompt, and asserts the queued-write note, count, service-worker queue copy, and Refresh-now affordance. The journey remains partial only because cold-start telemetry is still unasserted.

Verification:

  • pnpm --dir apps/oshun/web exec vitest run src/components/PwaUpdatePrompt.test.tsx
    • passed: 1 file, 4 tests
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/public/sw.js apps/oshun/web/src/components/PwaBootstrap.tsx apps/oshun/web/src/components/PwaUpdatePrompt.tsx apps/oshun/web/src/components/PwaUpdatePrompt.test.tsx apps/oshun/web/e2e/pwa-lifecycle-deepening.spec.ts
    • passed; emitted the existing Next pages-directory warning
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 12 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/pwa-lifecycle-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "queued write update prompt"
    • passed: 1 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/public/sw.js apps/oshun/web/src/components/PwaBootstrap.tsx apps/oshun/web/src/components/PwaUpdatePrompt.tsx apps/oshun/web/src/components/PwaUpdatePrompt.test.tsx apps/oshun/web/e2e/pwa-lifecycle-deepening.spec.ts WALKTHROUGH/journeys/pwa-update-flow.md WALKTHROUGH/journeys/offline-first-time-use.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/pwa-update-flow.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

147. 2026-06-26 PWA update-flow telemetry closure#

Closed the remaining pwa-update-flow telemetry gaps. The shared analytics schema now includes pwa_update_applied and pwa_sync_queued, and PwaBootstrap emits them from the existing service-worker lifecycle seams: Refresh-now controllerchange, silent standalone cold start with an active worker and no prompt, and pending service-worker queue status. The telemetry normalizes the transient ?surface=pwa launch marker out of the route while preserving meaningful route query state.

The Chromium real-infra browser slice now captures oshun-analytics:event inside the page and asserts:

  • pwa_update_applied for explicit Refresh-now apply on /explore
  • pwa_update_applied with applyMode: "silent-cold-start" after standalone relaunch to /activity
  • pwa_sync_queued for a real sw.js IndexedDB queue row created by OSHUN_QUEUE_ACTION

The pwa-update-flow journey and coverage matrix are now deep for the V1 PWA update lifecycle. offline-first-time-use remains partial because its remaining gaps are the broader search-result offline Save hint, Tara reflection queue UI, user-facing network-only denial copy, and long-lived Nisaba pin behavior.

Verification:

  • psql --version
    • confirmed installed: PostgreSQL 16.14 at /usr/bin/psql
  • pnpm --dir apps/oshun/web exec vitest run src/analytics/pwaLifecycleTelemetry.test.ts src/components/__tests__/PwaBootstrap.test.tsx
    • passed: 2 files, 13 tests
  • pnpm --dir libs/oshun/analytics exec vitest run src/__tests__/customer-taxonomy.test.ts
    • passed: 1 file, 41 tests
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/analytics/pwaLifecycleTelemetry.ts apps/oshun/web/src/analytics/pwaLifecycleTelemetry.test.ts apps/oshun/web/src/components/PwaBootstrap.tsx apps/oshun/web/src/components/__tests__/PwaBootstrap.test.tsx apps/oshun/web/e2e/pwa-lifecycle-deepening.spec.ts libs/oshun/analytics/src/types.ts libs/oshun/analytics/src/customer-taxonomy.ts libs/oshun/analytics/src/__tests__/customer-taxonomy.test.ts
    • passed; emitted the existing Next pages-directory warning
  • Resource gate before focused typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 48 GiB free disk, and no competing broad verification process; a separate claude process appeared during the final Playwright run, but available memory stayed above 9 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed after clearing corrupted generated .next/dev/types output left by a prior Next dev-server run
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/pwa-lifecycle-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "Refresh now|standalone cold start|queued write update prompt"
    • passed: 3 passed

148. 2026-06-26 Offline auth/session network-only SW denial#

Closed the service-worker transport half of offline-first-time-use Step 8. offline-shell-routes now registers and controls the page with the real sw.js, poisons Cache Storage with matching /api/auth/session and /v1/auth/session responses across the current oshun-* cache families, proves the online requests still come from the network, then takes the browser offline and verifies the same auth/session requests reject instead of being satisfied from cache. This is the real-browser negative control for the /api/auth/* and /v1/auth/* network-only policy.

offline-first-time-use remains partial because the customer-visible "This action requires an internet connection" action/copy, search-result offline-save sync hints, Tara reflection queue UI, and long-lived Nisaba offline-pin expiry remain undriven.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/offline-shell-routes.spec.ts WALKTHROUGH/journeys/offline-first-time-use.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/offline-first-time-use.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/offline-shell-routes.spec.ts
    • passed
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 14 GiB available, 31 GiB swap, 47 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 10 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/offline-shell-routes.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "network-only"
    • passed: 1 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/offline-shell-routes.spec.ts WALKTHROUGH/journeys/offline-first-time-use.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/offline-first-time-use.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

149. 2026-06-26 Offline uncached deep-route real-SW fallback#

Closed the service-worker navigation half of offline-first-time-use Step 7. offline-shell-routes now controls the browser with the real sw.js, reloads / so networkFirstWithFallback stores the home shell, proves a unique /domains/veritas/claims/real-sw-uncached-* URL is absent from every oshun-* cache, then takes Chromium offline and navigates directly to that uncached deep route. The navigation succeeds under the original deep URL, the customer shell renders from a response.fromServiceWorker() document response, and browser back returns to the cached home shell. Without the real service worker fallback, the offline page.goto would fail before the shell could hydrate.

offline-first-time-use remains partial because the search-result offline-save sync hint, Tara reflection queue UI, customer-visible network-only denial action/copy, and long-lived Nisaba offline-pin expiry remain undriven. Addendum #150 closes the naturally hydrated PwaOfflineFallback controls on the same real-SW navigation.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/offline-shell-routes.spec.ts WALKTHROUGH/journeys/offline-first-time-use.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/offline-first-time-use.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/offline-shell-routes.spec.ts
    • passed
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 14 GiB available, 31 GiB swap, 47 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 13 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/offline-shell-routes.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "uncached deep navigation"
    • passed: 1 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/e2e/offline-shell-routes.spec.ts WALKTHROUGH/journeys/offline-first-time-use.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/offline-first-time-use.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

150. 2026-06-26 Offline uncached deep-route hydrated fallback controls#

Closed the remaining Step-7 UI coupling gap for offline-first-time-use. When sw.js falls back from an uncached deep navigation to the cached home shell, it now marks the returned HTML document with data-oshun-sw-offline-fallback and an x-oshun-sw-offline-fallback: shell response header, plus a durable Cache Storage marker containing the target URL. The fallback document also embeds the same compact retry/cached-surface controls as a no-JS recovery layer; when React hydrates, PwaOfflineFallback reads the service-worker marker, removes the static layer, treats the shell as offline even if the browser's navigator.onLine is still optimistic, and renders the existing compact controls. The marker is cleared on the next online event so the fallback does not persist after recovery.

The real-infra Chromium leg now proves the full path in one browser: warm / under active sw.js, prove a unique Veritas deep URL is absent from Cache Storage, go offline, navigate directly to the uncached deep URL, assert the document response came from the service worker with the fallback header, and assert the service-worker marker URL plus the retry and cached-route controls are visible before browser back returns to the cached home shell.

offline-first-time-use remains partial for the search-result offline-save sync hint, Tara reflection queue UI, customer-visible network-only denial action/copy, and long-lived Nisaba offline-pin expiry.

Verification:

  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/PwaOfflineFallback.test.tsx src/__tests__/pwa-service-worker-policy.test.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/public/sw.js apps/oshun/web/src/components/PwaOfflineFallback.tsx apps/oshun/web/src/components/__tests__/PwaOfflineFallback.test.tsx apps/oshun/web/src/__tests__/pwa-service-worker-policy.test.ts apps/oshun/web/e2e/offline-shell-routes.spec.ts
    • passed
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 10 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/offline-shell-routes.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "uncached deep navigation"
    • passed: 1 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/public/sw.js apps/oshun/web/src/components/PwaOfflineFallback.tsx apps/oshun/web/src/components/__tests__/PwaOfflineFallback.test.tsx apps/oshun/web/src/__tests__/pwa-service-worker-policy.test.ts apps/oshun/web/e2e/offline-shell-routes.spec.ts WALKTHROUGH/journeys/offline-first-time-use.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/offline-first-time-use.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

151. 2026-06-26 Offline search-result save local-sync hint#

Closed the user-facing Step-5 search-save gap for offline-first-time-use. SearchResultsView now tracks result saves performed while navigator.onLine === false and renders compact inline status next to both the result-card Save affordance and the selected-result preview save action: Saved locally · sync will retry when you're back online. Unsaving the same result removes that pending local-sync marker. The store remains the existing fail-soft useOshunWebLibraryStore path, so this addendum deliberately proves local durability and visible feedback rather than over-claiming natural background-sync scheduling for the search-save write.

offline-write-deepening now resets nisaba-passage-speech through the real saved-items BFF for the seeded user, opens the live /search?q=guarded speech&domain=nisaba result set, takes Chromium offline, clicks the real result Save pill, asserts the visible local-sync hint, and verifies oshun.web.library.saved-items.v1 contains On Guarded Speech with /library/passage/nisaba-passage-speech. The journey remains partial for natural service-worker sync scheduling/replay on this specific search-save surface, Tara reflection queue UI, customer-visible network-only denial action/copy, and long-lived Nisaba offline-pin expiry.

Verification:

  • pnpm --dir apps/oshun/web exec vitest run src/components/search/__tests__/SearchResultsViewTelemetry.test.tsx
    • passed: 3 passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/search/SearchResultsView.tsx apps/oshun/web/src/components/search/__tests__/SearchResultsViewTelemetry.test.tsx apps/oshun/web/e2e/offline-write-deepening.spec.ts
    • passed with the repo's existing Next pages-directory warning
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 9 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/offline-write-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "search result"
    • passed: 1 passed

152. 2026-06-26 Tara reflection offline queue sync dot#

Closed the user-facing Step-6 Tara reflection gap for offline-first-time-use. TaraSitPlayer now renders the existing Lilith LSyncDot state="queued" beside the queued reflection copy, with data-tara-reflection-sync-state="queued" as the deterministic browser selector. This keeps the completion surface restrained and inline while making the pending local-write state explicit.

first-tara-sit-deepening no longer simulates this branch by shadowing navigator.onLine. The test now loads the real Tara sit page, reaches the completion reflection form, calls context.setOffline(true), verifies navigator.onLine === false, saves a reflection, asserts the queued sync dot and "Saved locally, will sync" copy, and reads back the queued tara:reflection:<id> localStorage payload. offline-first-time-use remains partial for natural service-worker sync scheduling/replay on the search/Tara write surfaces, customer-visible network-only denial action/copy, and long-lived Nisaba offline-pin expiry.

Verification:

  • pnpm --dir apps/oshun/web exec vitest run src/components/lilith/TaraSitPlayer.test.tsx
    • passed: 7 passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/lilith/TaraSitPlayer.tsx apps/oshun/web/e2e/first-tara-sit-deepening.spec.ts
    • passed with the repo's existing Next pages-directory warning
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 13 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/first-tara-sit-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "reflection saved while offline"
    • passed: 1 passed

153. 2026-06-26 Offline auth action denial copy#

Closed the customer-visible Step-8 action/copy gap for offline-first-time-use. SessionManagementSection now normalizes browser offline failures from the profile Active devices network-only actions to the exact inline denial: This action requires an internet connection. The refresh path still issues GET /v1/auth/sessions; it just skips GET retries when navigator.onLine === false so the button returns to idle quickly.

offline-shell-routes now opens /profile?path=sessions under the real service worker, waits for Active devices to hydrate, takes Chromium offline, clicks Refresh, asserts the /v1/auth/sessions request fails instead of being served from cache, and verifies the inline denial copy plus restored Refresh button state. offline-first-time-use remains partial only for natural browser-delivered sync scheduling/replay on the specific search/Tara write surfaces and the long-lived Nisaba offline-pin expiry path.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/profile/SessionManagementSection.tsx apps/oshun/web/src/components/profile/__tests__/SessionManagementSection.test.tsx apps/oshun/web/e2e/offline-shell-routes.spec.ts WALKTHROUGH/journeys/offline-first-time-use.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/offline-first-time-use.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/profile/__tests__/SessionManagementSection.test.tsx
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/profile/SessionManagementSection.tsx apps/oshun/web/src/components/profile/__tests__/SessionManagementSection.test.tsx apps/oshun/web/e2e/offline-shell-routes.spec.ts
    • passed
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, no competing broad verification process; Playwright memory stayed above 10 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/offline-shell-routes.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "explicit denial"
    • passed: 1 passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/profile/SessionManagementSection.tsx apps/oshun/web/src/components/profile/__tests__/SessionManagementSection.test.tsx apps/oshun/web/e2e/offline-shell-routes.spec.ts WALKTHROUGH/journeys/offline-first-time-use.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/offline-first-time-use.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

154. 2026-06-26 Assistant dock storage scope#

Closed the storage-scope gap for assistant-handoff-context-carry. shell-utility-dock.spec.ts now drives the real customer shell from /explore, clears the assistant storage keys, expands the dock, and verifies the real oshun-web-assistant-dock-mode localStorage mirror for expanded, collapsed, and closed. The test sends a real assistant message through /v1/assistant/sessions/:sessionId/message, asserts the active Explore thread and prompt are stored in sessionStorage['oshun-web-assistant-thread'], reloads the same tab to prove the collapsed dock mode and transcript restore, then opens a second tab to prove it inherits only the current local dock mode while seeding an independent sessionStorage-backed assistant session whose transcript does not contain the original prompt.

At the time of this storage-scope pass, assistant-handoff-context-carry remained partial only for per-persona/domain permittedToolGrants policy enforcement and the future recommendation BFF endpoint for persona handoff candidates; later entries close both items.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/shell-utility-dock.spec.ts WALKTHROUGH/journeys/assistant-handoff-context-carry.md WALKTHROUGH/results/assistant-handoff-context-carry.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/shell-utility-dock.spec.ts
    • passed
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing broad verification process; during the passing Playwright run, available memory stayed above 9 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed after regenerating stale .next route types
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/shell-utility-dock.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 3 passed

155. 2026-06-26 Onboarding sensitive memory reconciliation#

Closed the Step-4 sensitive-context reconciliation gap for onboarding-ten-steps. OnboardingWizard now exposes explicit wellbeing-signals and sensitive-traits switches on the Interests step, keeps both off by default, mirrors the choices into the Memory step, and carries assistant.memory.categories.sensitiveTraits through the final preferences patch alongside wellbeingSignals. The controls stay aligned with the existing memory consent model: the opted-in categories are visible on Memory, disabled while the user is still in session-memory posture, then enabled once Approved memory is selected.

onboarding-deepening.spec.ts now signs up a real browser user, enables both sensitive-context switches, verifies the Memory-step reconciliation, confirms the Ready summary chips, and asserts the real PATCH /v1/preferences request body posts scope='profile', consentGranted=true, wellbeingSignals=true, and sensitiveTraits=true. onboarding-ten-steps remains deep; the remaining documented gap is offline Finish queueing.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/onboarding/OnboardingWizard.tsx apps/oshun/web/src/lib/hooks/use-onboarding.ts apps/oshun/web/e2e/onboarding-deepening.spec.ts WALKTHROUGH/journeys/onboarding-ten-steps.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/onboarding-ten-steps.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/onboarding/__tests__/OnboardingWizard.test.tsx
    • passed: 10 passed
  • files=$(git diff --name-only -- '*.ts' '*.tsx' '*.md'); pnpm exec prettier --check $files
    • passed
  • files=$(git diff --name-only -- '*.ts' '*.tsx'); pnpm exec eslint --no-warn-ignored $files
    • passed with the repo's existing Next pages-directory warning
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 9 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/onboarding-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "sensitive context"
    • passed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/onboarding-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 4 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/onboarding-depth-introduction.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 1 passed
  • python3 tools/render-vdocs.py
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed

156. 2026-06-26 Onboarding first-run target resolver#

Closed the Step-8 first-run target weighting gap for onboarding-ten-steps. onboarding-deepening.spec.ts now completes two no-redirect browser onboarding flows through the real Finish path and real PATCH /v1/preferences: structured learning with guided courses lands on /domains/metis?origin=home, and the general practice fallback with only Tara selected lands on /domains/tara?origin=home. The Ready step is asserted before Finish via data-onboarding-first-run-entry, then the final URL and customer shell root are asserted after the preferences response.

onboarding-ten-steps remains deep; the only remaining documented gap is offline Finish queueing/background-sync replay.

Verification:

  • python3 tools/render-vdocs.py
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • pnpm exec prettier --check $(git diff --name-only -- '*.ts' '*.tsx' '*.md')
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/onboarding-deepening.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/lib/public-entry.test.ts
    • passed: 7 passed
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 9 GiB
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/onboarding-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "first-run target"
    • passed: 2 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/onboarding-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/onboarding-depth-introduction.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 1 passed

157. 2026-06-28 Onboarding offline Finish queue/replay#

Closed the offline Finish queueing/background-sync replay gap for onboarding-ten-steps. OnboardingWizard now treats browser-offline Finish as a stable saved-and-queued state: after local onboarding and preference-store persistence, it posts the exact PATCH /v1/preferences payload to the shipped service-worker queue instead of trying to navigate away. The inline Ready-step status uses data-onboarding-finish-queued and keeps a clear Continue action. The online 5xx branch remains separate and still shows data-onboarding-finish-error.

onboarding-lifecycle.spec.ts now drives the full real-dev-infra path: real signup, real service-worker controller, browser-offline Finish, IndexedDB oshun-sync-queue assertion with bearer auth and preference body, Chromium Background Sync dispatch, live BFF /v1/preferences read-back, and queue drain.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/onboarding/OnboardingWizard.tsx apps/oshun/web/src/components/onboarding/__tests__/OnboardingWizard.test.tsx apps/oshun/web/e2e/onboarding-lifecycle.spec.ts WALKTHROUGH/journeys/onboarding-ten-steps.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/customer/01-onboarding/onboarding.md WALKTHROUGH/results/onboarding-ten-steps.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/onboarding/OnboardingWizard.tsx src/components/onboarding/__tests__/OnboardingWizard.test.tsx e2e/onboarding-lifecycle.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/onboarding/__tests__/OnboardingWizard.test.tsx
    • passed: 12 passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gates before targeted/full Playwright
    • 15 GiB RAM, 12-13 GiB available before launches, 31 GiB swap, 51 GiB free disk, and no competing broad verification process; during the full Playwright file run, available memory stayed above 8.9 GiB
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/onboarding-lifecycle.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "offline Finish"
    • passed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/onboarding-lifecycle.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed

157. 2026-06-26 Trust & Safety Metis report affordances#

Closed the Metis origin-affordance gap for user-flag-to-review without overstating the combined browser coverage. MetisLesson and MetisTutor now mount the shared TrustSafetyFlagButton with stable target kind/id/label metadata:

  • metis://lesson/phl-102/stoic-ethics/section-4
  • metis://tutor/session-14-hour-with-epictetus

TrustSafetyFlagButton now submits through the same-origin /api/trust-safety/flags route, which reads the customer bearer cookie server-side and forwards the request to the real BFF POST /v1/user-reports. The focused browser spec keeps one full live UI submit in the combined run (Nisaba → same-origin route → BFF → admin moderation workspace read-back), and verifies the Metis lesson/tutor target metadata plus dialog category/rationale controls in the same run. This avoids claiming Metis live queue persistence from the combined dev-server run; an isolated Metis tutor submit was observed passing, but the stable committed gate documents only the combined-run evidence.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm --dir apps/oshun/web exec prettier --write ...
    • passed for the touched web and walkthrough files
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/TrustSafetyFlagButton.tsx src/app/api/trust-safety/flags/route.ts src/components/lilith/metis.tsx e2e/user-flag-to-review.spec.ts
    • passed
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing broad verification process; during Playwright, available memory stayed above 9 GiB
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/user-flag-to-review.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 4 passed
  • python3 tools/render-vdocs.py
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed

161. 2026-06-26 Assistant handoff tool-grant policy#

Closed the customer-domain tool-grant gap for assistant-handoff-context-carry. ShellLayout now resolves assistant permittedToolGrants from the active customer domain instead of handing every customer launch the full grant set:

  • profile and other neutral shell surfaces expose only navigation.open
  • library/search/source-study domains add library.save
  • activity/action-capable domains such as Tara add domain.action.execute

The browser handoff spec opens the assistant from /profile, /library, and /domains/tara?origin=home and asserts the mounted handoff grant attributes match those policies.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/components/ShellLayout.tsx apps/oshun/web/src/components/__tests__/ShellLayout.test.tsx apps/oshun/web/e2e/assistant-handoff-deepening.spec.ts
    • passed
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing build/test process; during Playwright, available memory stayed above 9 GiB
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/ShellLayout.test.tsx
    • passed: 60 passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/ShellLayout.tsx apps/oshun/web/src/components/__tests__/ShellLayout.test.tsx apps/oshun/web/e2e/assistant-handoff-deepening.spec.ts
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/assistant-handoff-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 3 passed
  • python3 tools/render-vdocs.py
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed

162. 2026-06-26 Assistant persona recommendation endpoint#

Closed the final named gap for assistant-handoff-context-carry: the BFF now serves canonical persona handoff candidates from GET /v1/assistant/persona-handoffs/recommendations. The endpoint uses the shared buildAssistantPersonaHandoffState policy, validates shell and memory scope query values, enforces customer domain scopes for real domain contexts, and requires an admin scope before returning admin-shell candidates.

assistant-session-bff.spec.ts now drives the endpoint against the real dev BFF for:

  • unauthenticated 401
  • customer /library candidates with recommended Stoic/source personas and restricted admin-only personas
  • requested admin persona fallback in the customer shell
  • customer domain-scope denial (domain:tara cannot request Veritas candidates)
  • admin-shell candidates with the admin session-only memory boundary

assistant-handoff-context-carry is now marked deep in coverage.md.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/assistant.ts apps/oshun/web/e2e/assistant-session-bff.spec.ts
    • passed
  • Resource gate before targeted typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 31 GiB swap, 47 GiB free disk, and no competing build/test process; during Playwright, available memory stayed around 10 GiB
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/assistant.ts apps/oshun/web/e2e/assistant-session-bff.spec.ts
    • passed
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/assistant-session-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 14 passed
  • python3 tools/render-vdocs.py
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed

168. 2026-06-26 User report decision and reporter receipt API#

Deepened user-flag-to-review beyond intake and admin queue read-back. Live customer reports now have a real moderator decision endpoint: POST /v1/admin/user-reports/:reportId/decision. The route is admin-scoped, accepts only terminal AdminReportOutcome values, updates the live customer-submitted report to actioned or dismissed, stamps the reviewer and related moderation content id, and records trust_safety.user_report.decided into the admin audit-event store.

Reporters now have a scoped receipt endpoint, GET /v1/user-reports/mine, which returns only their own live reports. The real-BFF Playwright leg creates a live privacy report, proves another reporter cannot see it, records a moderator content_removed decision, reads the reporter receipt back as actioned, and verifies the audit event through /v1/admin/search?facets=auditEvents.

Remaining product gaps for this journey are now narrower: actor suspension, second-reviewer signoff, notification delivery, appeal filing, crisis/severity classification, brigade rate-limits, and origin surfaces outside the current Veritas / Nisaba / Tara / Metis mounts. Browser /profile/safety receipt rendering is superseded by §169.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/admin/state.ts apps/oshun/bff/src/routes/user-reports.ts apps/oshun/bff/src/app.ts apps/oshun/bff/src/__tests__/user-reports-route.test.ts apps/oshun/web/e2e/user-flag-to-review.spec.ts
    • passed
  • pnpm exec prettier --write WALKTHROUGH/journeys/user-flag-to-review.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/admin/state.ts apps/oshun/bff/src/routes/user-reports.ts apps/oshun/bff/src/app.ts apps/oshun/bff/src/__tests__/user-reports-route.test.ts apps/oshun/web/e2e/user-flag-to-review.spec.ts
    • passed with the existing state.ts oshun-stub/no-fake-confidence fixture warnings
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/user-reports-route.test.ts
    • passed: 9 passed
  • Resource gate before targeted Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap, 47 GiB free disk, and no competing broad build/test process; during Playwright, available memory stayed above 9 GiB
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/user-flag-to-review.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 5 passed

170. 2026-06-26 User report decision notification delivery#

Closed the in-app decision-notification gap for user-flag-to-review. Moderator decisions on live customer reports now emit a real customer-message-center incident row to the reporter: subject "Your Trust & Safety report was reviewed", in-app channel, high priority, stable user-report-decision-<reportId> message id, Safety Center deep link, and queued → sent → delivered receipts. The decision response and audit payload include the notification message id and delivery status without failing the moderator decision if the message center reports duplicate/suppressed/store errors.

The /messages browser behavior now normal-clicks deep links by fetching the existing /api/messages/<messageId>/follow endpoint, recording the clicked receipt, and routing to the returned internal target. The focused real-dev-infra Playwright journey opens /messages as the reporter, verifies the delivered report-status row and receipts, clicks "Open Safety Center", lands on /profile/safety?reportId=<id>, and reads the BFF inbox back to prove the clicked receipt. External push/email delivery, appeals, actor suspension, second-reviewer signoff, crisis/severity classification, brigade rate-limits, and broader origin surfaces remain tracked separately.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/user-reports.ts apps/oshun/bff/src/__tests__/user-reports-route.test.ts apps/oshun/web/src/components/MessageCenter.tsx apps/oshun/web/e2e/user-flag-to-review.spec.ts
    • passed
  • pnpm exec prettier --write WALKTHROUGH/journeys/user-flag-to-review.md WALKTHROUGH/customer/09-account/profile-safety.md WALKTHROUGH/customer/02-home-discovery/messages.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • Resource gate before targeted verification
    • 15 GiB RAM, 13 GiB available, 30 GiB swap, 47 GiB free disk, and no competing broad build/test process; during Playwright, available memory stayed above 9.5 GiB
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/user-reports.ts apps/oshun/bff/src/__tests__/user-reports-route.test.ts apps/oshun/web/src/components/MessageCenter.tsx apps/oshun/web/e2e/user-flag-to-review.spec.ts
    • passed; emitted the existing Next pages-directory warning
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/user-reports-route.test.ts
    • passed: 9 passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/MessageCenter.test.tsx
    • passed: 11 passed
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/user-flag-to-review.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 5 passed
  • python3 tools/render-vdocs.py
    • passed
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed
  • python3 tools/render-vdocs.py
    • passed: rendered 1634 files
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed

169. 2026-06-26 User report receipt on Profile Safety#

Closed the browser receipt gap for user-flag-to-review. /profile/safety now reads the reporter-scoped GET /v1/user-reports/mine receipt feed in addition to the existing public-scene abuse receipt feed. The Report receipts section has a submitted-reports lane with stable row/status/outcome attributes, target label, category, submitted/updated timestamps, reporter rationale, and a customer-safe Trust & Safety reviewed marker for actioned reports.

The focused real-BFF Playwright journey now uses the already-primed browser member's real access token to create a live customer report, decisions it as a moderator with content_removed, verifies direct /v1/user-reports/mine read-back and cross-reporter isolation, then opens /profile/safety as the same reporter and proves the row renders as actioned / content_removed.

Remaining user-flag-to-review gaps are actor suspension, second-reviewer signoff, notification delivery, appeal filing, crisis/severity classification, brigade rate-limits, and origin surfaces outside the current Veritas / Nisaba / Tara / Metis mounts.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.tsx apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.test.tsx apps/oshun/web/src/app/profile/safety/safety.module.css apps/oshun/web/e2e/user-flag-to-review.spec.ts WALKTHROUGH/customer/09-account/profile-safety.md WALKTHROUGH/journeys/user-flag-to-review.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.tsx apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.test.tsx apps/oshun/web/e2e/user-flag-to-review.spec.ts
    • passed; emitted the existing Next pages-directory warning
  • pnpm --dir apps/oshun/web exec vitest run src/app/profile/safety/ProfileSafetyJourney.test.tsx
    • passed: 7 passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 tools/render-vdocs.py
    • passed: rendered 1634 files
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • Resource gate before targeted Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap, 47 GiB free disk, and no competing broad build/test process; during Playwright, available memory stayed above 9.7 GiB
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/user-flag-to-review.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 5 passed

171. 2026-06-26 Messages crisis-frame dispatch suppression#

Closed the local-dev crisis suppression leg for messages-quiet-hours-and-channel-binding. The admin-scoped customer-message dispatch route now consults the same server-side durable crisis-frame runtime used by assistant, payments, reminders, and scene gates. When a recipient has an active Lilith crisis frame, non-essential dispatches return an explicit 202 dispatch.suppressed.crisis_frame decision with no inbox row; critical incident/support dispatches still bypass with dispatch.bypassed.safety_critical.

The BFF route unit test binds a durable in-memory crisis-frame marker and proves immediate suppression, safety-critical bypass, and replay-time holding for a delayed quiet-hours dispatch whose recipient enters crisis before the replay boundary runs. The real-HTTP Playwright spec activates a live crisis frame via POST /v1/admin/safety/crisis-frame/activate, waits for the member's /v1/safety/crisis-frames/mine projection, dispatches a non-essential reengagement message and verifies the empty inbox, schedules a quiet-hours message before activation and proves /v1/admin/customer-messages/replay-due keeps it delayed with dispatch.suppressed.crisis_frame, then dispatches a critical incident and verifies inbox read-back.

Remaining messages-quiet-hours-and-channel-binding gaps are external Telegram/WhatsApp/email/SMS provider handoff beyond the message-center receipt seam, the per-channel x domain category matrix, Lilith tone-band persona-policy send checks, real OTP/magic-link ownership delivery, and the full consent-revocation cascade.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/customer/customer-message-center-store.ts apps/oshun/bff/src/routes/customer-message-center.ts apps/oshun/bff/src/__tests__/customer-message-center-route.test.ts apps/oshun/web/e2e/messages-center-bff.spec.ts WALKTHROUGH/journeys/messages-quiet-hours-and-channel-binding.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/customer/02-home-discovery/messages.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/customer/customer-message-center-store.ts apps/oshun/bff/src/routes/customer-message-center.ts apps/oshun/bff/src/__tests__/customer-message-center-route.test.ts apps/oshun/web/e2e/messages-center-bff.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/customer-message-center-route.test.ts
    • passed: 17 passed
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/messages-center-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 16 passed
  • python3 tools/render-vdocs.py
    • passed: rendered 1634 files
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • git diff --check
    • passed

172. 2026-06-27 Memory pause UI persistence and assistant dock indicator#

Closed the Step 6 browser gap for memory-edit-pause-forget. The /profile/memory pause switch now hydrates the persisted Iris pause record independently of review rows, writes pause/resume through PATCH /v1/iris/adapter/pause?role=settings, mirrors the BFF response into the profile memory control state, and emits a same-shell pause-change event. The customer shell listens for that event and refreshes the assistant-scoped pause state on focus/visibility; when pause is active, assistant handoffs and the dock panel use memory scope off. The collapsed assistant dock now carries a compact memory disclosure with data-shell-assistant-dock-memory-scope.

The Playwright journey now proves the UI and server contract together over real dev infra: a signed-in real Iris user toggles pause from /profile/memory, the live BFF pause readback reports paused: true and continuity indicator: "off", /profile assistant dock opens with data-assistant-context-memory-scope="off" and data-assistant-memory-scope="off", the collapsed dock summary exposes the memory-off scope, and returning to /profile/memory resumes through the banner button with persisted BFF readback paused: false.

At this point, the still-open memory-edit-pause-forget gaps were Step 4 browser conflict injection, full-clear cron execution at the grace-window boundary, anonymous/offline route breadth, and cross-device pause drift beyond the same-shell event/focus refresh. Step 4 was later closed in section 243.

Verification:

  • pnpm exec prettier --write WALKTHROUGH/customer/09-account/profile-memory.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/journeys/memory-edit-pause-forget.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md apps/oshun/web/e2e/memory-edit-pause-forget.spec.ts apps/oshun/web/src/app/profile/memory/ProfileMemoryControls.tsx apps/oshun/web/src/app/profile/memory/memory-state.test.ts apps/oshun/web/src/app/profile/memory/memory-state.ts apps/oshun/web/src/components/ShellLayout.tsx apps/oshun/web/src/components/__tests__/ShellLayout.test.tsx apps/oshun/web/src/components/assistant-dock/AssistantDock.tsx apps/oshun/web/src/components/assistant-dock/__tests__/AssistantDock.test.tsx
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/e2e/memory-edit-pause-forget.spec.ts apps/oshun/web/src/app/profile/memory/ProfileMemoryControls.tsx apps/oshun/web/src/app/profile/memory/memory-state.test.ts apps/oshun/web/src/app/profile/memory/memory-state.ts apps/oshun/web/src/components/ShellLayout.tsx apps/oshun/web/src/components/__tests__/ShellLayout.test.tsx apps/oshun/web/src/components/assistant-dock/AssistantDock.tsx apps/oshun/web/src/components/assistant-dock/__tests__/AssistantDock.test.tsx
    • passed; emitted the existing Next pages-directory warning
  • pnpm --dir apps/oshun/web exec vitest run src/app/profile/memory/memory-state.test.ts src/app/profile/memory/ProfileMemoryControls.test.tsx src/components/assistant-dock/__tests__/AssistantDock.test.tsx src/components/__tests__/ShellLayout.test.tsx
    • passed: 4 files, 76 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • python3 tools/render-vdocs.py
    • passed: rendered 1634 files
  • python3 V5/tools/validate-v5-docs.py
    • passed
  • Resource gates before broad/expensive checks
    • 15 GiB RAM, 13 GiB available, 30 GiB swap, 47 GiB free disk, and no competing broad build/test process; during Playwright, available memory stayed above 8.8 GiB
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/memory-edit-pause-forget.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 10 passed

173. 2026-06-28 Tenant OneRoster periodic pull reconciliation#

Closed the server-side periodic SIS pull gap for tenant-oneroster-roster-sync. The admin OneRoster route now exposes POST /v1/admin/lms/oneroster/pull as a local-dev worker handoff. A pull payload carries pullId, sourceSystem, tenantId, and normalized OneRoster users/enrollments; the route derives pull:{tenantId}:{pullId}, reuses the same dryRunOneRosterImport/apply store gate as manual commits, and persists only clean reconciliations.

The real-BFF journey now seeds a manual commit, runs a clean pull that updates an existing user plus creates a new student/enrollment, reads the derived pull commit back from /v1/admin/lms/oneroster, rejects duplicate pull ids with 409 duplicate_pull, and drives a drift-conflict pull that returns 422 has_conflicts, emits tenant.oneroster.pull.conflicts_detected, and leaves roster counts unchanged. The dedicated operator diff table was still a tracked product gap at this point; §174 closes it.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/admin-oneroster-apply.ts apps/oshun/bff/src/__tests__/admin-oneroster-apply-route.test.ts apps/oshun/web/e2e/tenant-oneroster-provisioning-bff.spec.ts WALKTHROUGH/journeys/tenant-oneroster-roster-sync.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/tenant-oneroster-roster-sync.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/bff exec eslint --no-warn-ignored src/routes/admin-oneroster-apply.ts src/__tests__/admin-oneroster-apply-route.test.ts src/tenant-console/oneroster-apply-store.test.ts src/tenant-console/oneroster-route.test.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/tenant-oneroster-provisioning-bff.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-oneroster-apply-route.test.ts src/tenant-console/oneroster-apply-store.test.ts src/tenant-console/oneroster-route.test.ts
    • passed: 13 passed
  • pnpm --dir apps/oshun/bff typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm docs:center, pnpm docs:center:check, pnpm docs:center:verify
    • passed
  • pnpm --dir apps/oshun/web e2e tenant-oneroster-provisioning-bff.spec.ts
    • passed
  • git diff --check
    • passed

174. 2026-06-28 Tenant OneRoster operator diff preview table#

Closed the dedicated operator-visible diff table gap for tenant-oneroster-roster-sync. The admin OneRoster route now exposes POST /v1/admin/lms/oneroster/preview, a no-mutation preview endpoint that diffs { tenantId, incomingUsers, incomingEnrollments } against the committed tenant roster through the same dryRunOneRosterImport engine used by apply and pull. The response contains canApply, conflict strings, before/after roster counts, and row-level user create, user update, enrollment create, and blocked conflict rows.

/operator/lms now includes a first-class OneRoster import diff table. The browser test seeds a committed roster through real /v1/admin/lms/oneroster/apply, opens /operator/lms, drives the diff form through browser /v1/admin/lms/oneroster/preview, verifies clean diff rows, verifies blocked conflict rows, and reads the roster back to prove preview has no mutation side effect. The journey now retains only production scheduler and tenant-admin commit-control questions, not a missing local walkthrough/test surface.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/tenant-console/oneroster-apply-store.ts apps/oshun/bff/src/routes/admin-oneroster-apply.ts apps/oshun/bff/src/__tests__/admin-oneroster-apply-route.test.ts apps/oshun/web/src/app/operator/lms/page.tsx apps/oshun/web/src/components/lilith/OneRosterDiffPreviewForm.tsx apps/oshun/web/src/components/lilith/OneRosterDiffPreviewForm.test.tsx apps/oshun/web/e2e/operator-lms.spec.ts WALKTHROUGH/operator/operator-lms.md WALKTHROUGH/journeys/tenant-oneroster-roster-sync.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/journeys/README.md WALKTHROUGH/results/tenant-oneroster-roster-sync.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/bff exec eslint --no-warn-ignored src/tenant-console/oneroster-apply-store.ts src/routes/admin-oneroster-apply.ts src/__tests__/admin-oneroster-apply-route.test.ts src/tenant-console/oneroster-apply-store.test.ts src/tenant-console/oneroster-route.test.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/operator/lms/page.tsx src/components/lilith/OneRosterDiffPreviewForm.tsx src/components/lilith/OneRosterDiffPreviewForm.test.tsx e2e/operator-lms.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-oneroster-apply-route.test.ts src/tenant-console/oneroster-apply-store.test.ts src/tenant-console/oneroster-route.test.ts
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/lilith/OneRosterDiffPreviewForm.test.tsx src/app/operator/lms/__tests__/page.test.tsx src/components/lilith/LmsConnectorValidateForm.test.tsx
    • passed
  • pnpm --dir apps/oshun/bff typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm docs:center, pnpm docs:center:check, pnpm docs:center:verify, pnpm docs:center:test
    • passed: docs-center test reported 61 passed, 5 skipped
  • pnpm --dir apps/oshun/web e2e operator-lms.spec.ts
    • passed
  • git diff --check
    • passed

175. 2026-06-28 Billing crypto issued-paywall support action#

Closed the /billing/crypto issued-paywall support-link gap for sign-up-and-pay-crypto. The pending invoice notice already exposed mailto:billing@oshun.app; the issued CryptoPaywall now exposes the same billing-support action when a customer is blocked at the issued-asset trust disclosure gate and when the payment address is visible.

The browser journey still runs through real dev infra: the spec issues BTC and USDC/Base invoices through the live BFF quote route, loads /billing/crypto through the app's by-id invoice fetcher, and now asserts the support action as a single 44 px target in the BTC address-visible state, the USDC disclosure-gated state, and the USDC post-ack address-visible state. The journey remains partial for the external wallet/provider, oracle, receipt, and return-to-gated-surface legs outside the local browser/BFF seam.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/billing/crypto/CryptoPaywall.tsx apps/oshun/web/e2e/billing-crypto-paywall.spec.ts WALKTHROUGH/customer/09-account/billing-crypto.md WALKTHROUGH/journeys/sign-up-and-pay-crypto.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/sign-up-and-pay-crypto.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/billing/crypto/CryptoPaywall.tsx e2e/billing-crypto-paywall.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 12 GiB available, 30 GiB swap, 51 GiB disk free, and no competing broad build/test process; during Playwright, available memory stayed above 9.2 GiB.
  • pnpm --dir apps/oshun/web e2e billing-crypto-paywall.spec.ts
    • passed: 10 passed
  • pnpm docs:center, pnpm docs:center:check, pnpm docs:center:verify, pnpm docs:center:test
    • passed
  • git diff --check
    • passed

178. 2026-06-28 Tara to Nisaba citation locator drilldown#

Closed the Step 7 locator-drilldown gap for tara-to-nisaba-handoff. The authenticated-shell Nisaba destination now carries an exact Sophia-style locator in the URL, proves the reading frame matches that sentence in paragraph 1, and asserts the rendered NisabaCitationTrailPanel primary support step exposes the Canonical source source type plus the chapter/paragraph/sentence locator.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/domains/nisaba/NisabaCitationTrailPanel.tsx apps/oshun/web/src/components/domains/nisaba/__tests__/NisabaCitationTrailPanel.test.tsx apps/oshun/web/e2e/tara-to-nisaba-handoff-destination.spec.ts WALKTHROUGH/journeys/tara-to-nisaba-handoff.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/domains/NisabaSurface.tsx src/components/domains/nisaba/NisabaCitationTrailPanel.tsx src/components/domains/nisaba/__tests__/NisabaCitationTrailPanel.test.tsx e2e/tara-to-nisaba-handoff-destination.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/domains/nisaba/__tests__/NisabaCitationTrailPanel.test.tsx
    • passed: 1 file, 8 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 12 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during Playwright, available memory stayed above 12 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tara-to-nisaba-handoff-destination.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 1 passed
  • pnpm docs:center, pnpm docs:center:check, pnpm docs:center:verify, pnpm docs:center:test
    • passed: docs-center test reported 61 passed, 5 skipped
  • git diff --check
    • passed

177. 2026-06-28 Tara to Nisaba completion back-stack restore#

Closed the remaining browser-back gap for tara-to-nisaba-handoff. Tara session completion now marks the current history entry with taraSessionState=complete; the Tara route consumes that state from live client search params as well as the server-provided route props, and SessionPlayer can mount or transition directly to the completion surface for restored browser history. The real-infra browser journey now completes a Tara sit, opens the Nisaba passage companion, verifies the live customer-shell Nisaba destination, then uses browser-back to prove /domains/tara?...&taraSessionState=complete restores the Tara completion surface and the same companion card.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/domains/[domainId]/page.tsx apps/oshun/web/src/components/DomainRouteExperience.tsx apps/oshun/web/src/components/domains/TaraSurface.tsx apps/oshun/web/src/components/domains/tara/SessionPlayer.tsx apps/oshun/web/src/components/domains/__tests__/TaraSurface.test.tsx apps/oshun/web/src/components/domains/tara/__tests__/SessionPlayer.test.tsx apps/oshun/web/e2e/tara-session-player.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored 'src/app/domains/[domainId]/page.tsx' src/components/DomainRouteExperience.tsx src/components/domains/TaraSurface.tsx src/components/domains/tara/SessionPlayer.tsx src/components/domains/__tests__/TaraSurface.test.tsx src/components/domains/tara/__tests__/SessionPlayer.test.tsx e2e/tara-session-player.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/domains/__tests__/TaraSurface.test.tsx src/components/domains/tara/__tests__/SessionPlayer.test.tsx
    • passed: 2 files, 76 tests
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the focused Playwright reruns, available memory stayed above 12 GiB, and during the full tara-session-player file it stayed above 8.8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tara-session-player.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 12 passed
  • pnpm docs:center, pnpm docs:center:check, pnpm docs:center:verify, pnpm docs:center:test
    • passed: docs-center test reported 61 passed, 5 skipped

Closed the /profile/telegram expired deep-link gap for telegram-bot-assistant-delivery. The unlinked Telegram card now uses a small client countdown panel around the live BFF nonce response: while the nonce is inside its window it renders the primary Open Telegram to link anchor, and once browser time reaches expiresAtIso it removes that stale anchor, switches the copy to the closed-window recovery copy, renders a disabled Link expired control at 44 px+, and leaves Refresh link as the active recovery action.

The browser journey still uses real dev infra. The focused spec mints a live GET /v1/telegram/link nonce, advances browser time beyond that nonce's expiresAtIso, asserts the disabled expired state, restores browser time, and clicks the real server-action refresh path to prove POST /v1/telegram/link rotates back to an active t.me link. The existing real webhook completion, linked render, mobile/offline/no-telemetry, and anonymous redirect branches stay covered in the same spec.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/profile/telegram/ProfileTelegramLinkPanel.tsx apps/oshun/web/src/app/profile/telegram/ProfileTelegramLinkPanel.test.tsx apps/oshun/web/src/app/profile/telegram/page.tsx apps/oshun/web/e2e/profile-telegram-bridge.spec.ts WALKTHROUGH/customer/09-account/profile-telegram.md WALKTHROUGH/journeys/telegram-bot-assistant-delivery.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/telegram-bot-assistant-delivery.md WALKTHROUGH/results/README.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/profile/telegram/page.tsx src/app/profile/telegram/ProfileTelegramLinkPanel.tsx src/app/profile/telegram/ProfileTelegramLinkPanel.test.tsx e2e/profile-telegram-bridge.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/app/profile/telegram/ProfileTelegramLinkPanel.test.tsx
    • passed: 1 file, 2 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during Playwright, available memory stayed above 9.8 GiB.
  • pnpm --dir apps/oshun/web e2e profile-telegram-bridge.spec.ts
    • passed: 5 passed
  • pnpm docs:center, pnpm docs:center:check, pnpm docs:center:verify, pnpm docs:center:test
    • passed
  • git diff --check
    • passed

179. 2026-06-28 Multi-device mobile evidence equality#

Closed the mobile evidence-source equality gap for multi-device-workspace-handoff. The multi-device-handoff-deepening browser journey now selects the scoped Veritas evidence source on desktop, waits until that active source is persisted in the workspace tab state, carries the desktop-persisted tab state into a fresh 390×844 mobile browser context, opens the captured workspace deep link, and asserts the mobile workspace hydrates in stacked layout with the URL-restored evidence panel and the same rendered [data-workspace-evidence-inspector] ID.

The scoped /v1/veritas/adapter/saved-articles fixture remains documented because the local BFF still exposes a saved-article read route but no authenticated saved-article writer for E2E setup; this slice closes the mobile ID-equality assertion, not that writer gap.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/multi-device-handoff-deepening.spec.ts WALKTHROUGH/journeys/multi-device-workspace-handoff.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/multi-device-handoff-deepening.spec.ts --max-warnings=0
    • passed
  • Resource gate before typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during Playwright, available memory stayed above 11 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/multi-device-handoff-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 2 passed
  • pnpm docs:center, pnpm docs:center:check, pnpm docs:center:verify, pnpm docs:center:test
    • passed
  • git diff --check
    • passed

180. 2026-06-28 Multi-device Home sync-state copy#

Closed the remaining Step 9 sync-state coverage gap for multi-device-workspace-handoff. The multi-device-handoff-deepening browser journey now holds the real Home profile/preference refresh in flight so HomeMultiDeviceContinuityPanel remains in [data-home-multi-device-status="syncing"] long enough to assert the exact "Syncing across devices" label. It then releases the same refresh as a transport failure, asserts exact "Sync delayed" copy plus the calm error detail and retry affordance, clicks Refresh sync, holds the retry in syncing, and fulfills the live profile/preferences envelopes to prove the panel returns to [data-home-multi-device-status="idle"] and exact "Synced across devices" copy.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/multi-device-handoff-deepening.spec.ts WALKTHROUGH/journeys/multi-device-workspace-handoff.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/multi-device-handoff-deepening.spec.ts --max-warnings=0
    • passed
  • Resource gate before typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during Playwright, available memory stayed above 12 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/multi-device-handoff-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 2 passed
  • pnpm docs:center, pnpm docs:center:check, pnpm docs:center:verify, pnpm docs:center:test
    • passed
  • git diff --check
    • passed

181. 2026-06-28 Multi-device no-stale handoff failure modes#

Closed the remaining Iris no-false-success / no-stale-payload failure-mode gap for multi-device-workspace-handoff. The workspace-multi-panel failed-write branch now proves a blocked writeWorkspaceIrisMobileHandoffState leaves no success timestamp and no oshun.iris.mobile-handoff.v1 receipt in localStorage. The multi-device-deepening tab-cap branch now goes beyond FIFO eviction: after MAX_WORKSPACE_TABS evicts the oldest tab, it waits for the active workspace state link, verifies the visible Iris token link shape, writes the handoff, then asserts the persisted handoff token matches the visible link while the tab-scoped Iris item IDs and route paths target the post-eviction active tab instead of the evicted tab.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/multi-device-deepening.spec.ts apps/oshun/web/e2e/workspace-multi-panel.spec.ts WALKTHROUGH/journeys/multi-device-workspace-handoff.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/multi-device-deepening.spec.ts e2e/workspace-multi-panel.spec.ts --max-warnings=0
    • passed
  • Resource gate before typecheck / Playwright
    • 15 GiB RAM, 12-13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final Playwright run, available memory stayed above 9.8 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/multi-device-deepening.spec.ts e2e/workspace-multi-panel.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed
  • pnpm docs:center, pnpm docs:center:check, pnpm docs:center:verify, pnpm docs:center:test
    • passed; docs-center test reported 61 passed and 5 skipped

182. 2026-06-28 Memory pause cross-device drift#

Closed the cross-device pause-drift breadth gap for memory-edit-pause-forget. The real-Iris Playwright journey now creates two isolated browser contexts sharing one BFF-issued session: device A pauses memory from /profile/memory, device B opens /profile, waits for the live /v1/iris/adapter/pause?role=assistant read, expands the assistant dock, and asserts the context handoff, memory disclosure, transcript state, and collapsed dock summary all report memory off. Device A then resumes from the /profile/memory banner, device B reloads /profile, and the assistant dock returns to session memory in both the memory disclosure and transcript state.

The journey remained partial at this point because Step 4 browser conflict injection and full-clear grace expiry were still open. Step 4 was later closed in section 243; full-clear grace expiry remains server-cron-bound.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/memory-edit-pause-forget.spec.ts WALKTHROUGH/journeys/memory-edit-pause-forget.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/memory-edit-pause-forget.spec.ts --max-warnings=0
    • passed
  • Resource gates before typecheck / Playwright
    • 15 GiB RAM, 12-13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final Playwright run, available memory stayed above 8.4 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/memory-edit-pause-forget.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 13 passed
  • pnpm docs:center, pnpm docs:center:check, pnpm docs:center:verify, pnpm docs:center:test
    • passed; docs-center test reported 61 passed and 5 skipped

183. 2026-06-29 Tenant Admin Identity Cockpit Coverage#

Closed the tenant-admin /identity missing-walkthrough / missing-Playwright gap for the currently shipped read-only cockpit without over-claiming the unshipped setup controls. The new tenant-admin Playwright project starts the dedicated apps/oshun/tenant-admin Next app with the real Oshun BFF, verifies anonymous /identity redirect-before-render, seeds real SSO connections through POST /v1/admin/sso, sets the tenant-admin session cookie, and proves /identity renders only the caller tenant's live SSO row via /v1/tenant-console/sso. It also verifies the read-only SSO probe, auth-challenge, federation, and evidence-table outputs, while the fixture-level axe scan caught and closed the tenant shell muted-token contrast issue.

The journey remains partial because tenant-admin metadata import/upload controls, the per-tenant auth-policy edit panel, tenant-admin sandbox sign-in per-verdict UI, and the draft→enabled state machine are still unshipped.

Verification:

  • pnpm --dir apps/oshun/tenant-admin exec eslint --no-warn-ignored playwright.config.ts e2e/fixtures.ts e2e/tenant-identity.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/tenant-sso-config.spec.ts --max-warnings=0
    • passed
  • Resource gates before Playwright
    • 15 GiB RAM, 12-13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final Playwright run, available memory stayed above 12 GiB.
  • pnpm --dir apps/oshun/tenant-admin lint
    • passed
  • pnpm --dir apps/oshun/tenant-admin typecheck
    • passed
  • pnpm --dir apps/oshun/tenant-admin exec playwright test -c playwright.config.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 2 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

195. 2026-06-29 Tara sound library coverage#

Closed the stale Tara sound library gap on /domains/tara/sounds. The route now documents the actual V1 audio behavior: ambient previews and mixer layers fetch real BFF-generated WAVs from /v1/tara/sessions/:sessionId/ambient.wav, bells are browser Web Audio synthesis, binaural beats are real stereo oscillators, and music rows remain metadata-only with an explicit no-recording disclosure.

The component now exposes stable route hooks for the root, tabs, filters, search, cards, presets, mixer, volume controls, save dialog, music rows, bell selection, and binaural cards. It also hardens the route by using real range inputs for volume controls, explicit semantic buttons for preset load/delete and bell selection, target-size-compliant custom preset delete controls, reduced motion CSS for the route animations, and SSR-safe preference hydration so localStorage-backed bell selection no longer creates stale hydration attributes.

The new Playwright coverage signs in through real dev auth seeding and drives the live customer route. It verifies default ambient state, reduced motion, master volume range, default preset loading, real 200 audio/wav ambient responses for preview and mixer fetches, category/search filtering, preview start/stop, the five-layer mixer cap, layer range/mute/remove controls, favorite persistence, custom preset save/delete, music no-recording honesty, bell keyboard selection and reload persistence, binaural filter/playback state, route back-stack, and scoped axe scans.

The walkthrough keeps the remaining product gaps explicit: music recordings are not attached to this route in V1, saved sound preferences are localStorage-only instead of profile-synced, Playwright proves WAV responses and Web Audio state but not perceptual speaker output, and mobile mixer ergonomics still need a dedicated mobile viewport pass if this route becomes a primary mobile workflow.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/domains/tara/TaraSoundLibrary.tsx apps/oshun/web/e2e/tara-sounds.spec.ts WALKTHROUGH/customer/03-tara/domains-tara-sounds.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/domains/tara/TaraSoundLibrary.tsx e2e/tara-sounds.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed before and after the SSR-safe preference hydration fix
  • Resource gates before typecheck, Playwright, and docs-center
    • 15 GiB RAM, 12-13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final Playwright run, available memory stayed above 12 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tara-sounds.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • initial focused run exposed an over-broad weather search assertion and a reload cleanup bug in the spec
    • second focused run exposed the custom preset delete target-size violation
    • third focused run exposed a real localStorage/SSR hydration mismatch for selected bell persistence
    • final run passed after those fixes: 2 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

194. 2026-06-29 Tara collections browser coverage#

Closed the Tara collections browser gap on /domains/tara/collections without claiming a live collections backend. The route now passes the collection query param into TaraCollectionsBrowserPage, resolves Tara search collection ids such as col-002 onto the shipped tara-coll-* fixture ids, and exposes stable anchors for the browser, daily widget, search, filters, result count, grid, cards, detail view, and item rows. Unknown collection ids fall back to the browser instead of rendering an empty detail.

The new Playwright coverage drives the real signed-in web route and real dev infra auth seeding. It verifies the no-selection browser, daily widget hydration, eight collection cards, card type/count metadata, live search, clear, seasonal filter, empty-result state, reduced motion, detail hydration from both search-style and canonical ids, unknown-id fallback, keyboard card activation, detail back, header back-stack, and scoped browser/detail axe scans. The existing Tara scoped-search spec was tightened so Better Sleep Collection navigation proves the detail view opens, not merely that the route shell loads.

The pass also removed the decorative Tara search highlight pulse after the focused browser run exposed that it could still compute as animated during the reduced-motion assertion. Highlighting remains by color; the nonessential pulse is gone.

The walkthrough keeps the remaining product gaps explicit: the collections route is still local simulated content, the polished /tara hub does not link to this depth route, daily-content date/refresh semantics need a product decision, and collection item rows remain display-only.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/domains/tara/TaraCollections.tsx apps/oshun/web/src/app/domains/tara/collections/page.tsx apps/oshun/web/e2e/tara-collections.spec.ts apps/oshun/web/e2e/tara-scoped-search.spec.ts
    • passed
  • pnpm exec prettier --write apps/oshun/web/src/components/domains/tara/TaraSearchEngine.tsx WALKTHROUGH/customer/03-tara/domains-tara-collections.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/domains/tara/TaraCollections.tsx src/components/domains/tara/TaraSearchEngine.tsx src/app/domains/tara/collections/page.tsx e2e/tara-collections.spec.ts e2e/tara-scoped-search.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed before and after the final Tara search reduced-motion fix
  • Resource gates before Playwright, typecheck, and docs-center
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final Playwright run, available memory stayed above 8.1 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tara-collections.spec.ts e2e/tara-scoped-search.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first focused run: collections coverage passed, existing Tara search reduced-motion assertion failed on the decorative highlight pulse
    • final run after removing the pulse: 5 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

193. 2026-06-29 Tara analytics dashboard coverage#

Closed the stale Tara analytics walkthrough gap on /domains/tara/analytics. The dashboard now exposes stable analytics anchors and remains backed by the real /v1/tara/analytics model, not seeded-random fixture history. The UI also retries the initial no-token auth hydration race so an authenticated member does not get a false empty dashboard from an early 401. The heatmap row labels now match the BFF contract (weekday: 0 is Sunday), and heatmap titles describe session counts rather than minutes.

The new Playwright coverage creates fresh signed-in users, records real Tara sit completions through /v1/tara/sittings/:id/complete, reads the BFF analytics model directly, and proves the browser dashboard mirrors that same model: empty-member state, populated totals, rhythm, completion rate, practiced day, per-sitting rows, weekday/hour heatmap cell, range switch, CSV export, reduced motion, chart title text, scoped axe scans, and route back-stack.

The walkthrough keeps the remaining product gaps explicit: no source link from the polished /tara hub to this route was found, BFF/database failures reuse the honest empty state rather than a distinct error panel, and chart titles are native hover text rather than a keyboard-accessible tooltip/data-table pattern.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/domains/tara/TaraAnalyticsDashboard.tsx apps/oshun/web/e2e/tara-analytics.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/domains/tara/TaraAnalyticsDashboard.tsx e2e/tara-analytics.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/domains/tara/__tests__/TaraAnalyticsDashboard.test.tsx
    • passed: 1 file, 2 tests
  • Resource gates before Playwright and docs-center
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final Playwright run, available memory stayed above 8.3 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tara-analytics.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed before the heatmap label correction: 3 passed
    • final run passed after the heatmap label/title correction: 3 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

192. 2026-06-29 Tara programs browser coverage#

Closed the Tara programs browser gap on /domains/tara/programs without claiming a persisted programs backend. Program cards, the route browser root, detail view, day-detail view, milestones, enrollment CTA, and current/locked day rows now expose stable anchors for the shipped UI state. The detail hero and reached milestone chip also use the existing cream-safe Tara text colors so the route-level axe scan can enforce real contrast.

The new Playwright coverage drives the shipped fixture data for enrolled tara-prog-001 and tara-prog-002, non-enrolled tara-prog-003, and a missing programId. It verifies the no-selection browser, My Programs and All Programs card counts, selection from a card, deep-link hydration, unknown-id fallback, local enrollment, future-day locking, current/completed day rows, day detail quote/intention/meditation/activity content, detail back, route header back, and scoped browser/detail accessibility scans.

The walkthrough now keeps the remaining product gaps explicit: no fixture route currently hides My Programs, there is no day-completion or un-enroll control, milestone crossing is not browser-drivable, card selection does not write a URL param, and enrollment/progress are local component state until the BFF contract lands.

Verification:

  • psql --version
    • passed: PostgreSQL 16.14
  • pnpm exec prettier --write apps/oshun/web/src/components/domains/tara/TaraCollections.tsx apps/oshun/web/e2e/tara-programs.spec.ts WALKTHROUGH/customer/03-tara/domains-tara-programs.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/domains/tara/TaraCollections.tsx e2e/tara-programs.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gates before Playwright
    • 15 GiB RAM, 12-13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final Playwright run, available memory stayed above 8.5 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tara-programs.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run caught serious color-contrast violations in the program detail hero and reached milestone chip; fixed in the route styles
    • final run passed: 5 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

189. 2026-06-29 Veritas-to-Nisaba counterclaim lineage coverage#

Closed the counterclaim handoff gap in veritas-to-nisaba-deeper. Counterclaim inspection overlays now include a counterclaim-specific open-nisaba-counterclaim-lineage action built through resolveVeritasNisabaClaimRelationship, preserving the same real shell cross-domain route contract as the primary claim source-lineage action while using the counterclaim id and disagreement source set.

The browser journey now switches to the Counterclaims tab, opens counterclaim-capacity-is-not-generation, captures the veritas_inspection_opened analytics event for the counterclaim inspection, asserts the counterclaim lineage href, and follows it into the real Nisaba surface. The journey remains partial for exhaustive landed-passage citation integrity across every interpretive claim, AAA-gated scholar bounce, and broader tenant/source-scope failure modes.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/domains/veritas/VeritasClaimDetailWorkspace.tsx apps/oshun/web/src/components/domains/veritas/__tests__/VeritasClaimDetailWorkspace.test.tsx apps/oshun/web/e2e/veritas-nisaba-bridge.spec.ts WALKTHROUGH/customer/05-veritas/domains-veritas-claims-claimId.md WALKTHROUGH/journeys/veritas-to-nisaba-deeper.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/veritas-to-nisaba-deeper.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/domains/veritas/VeritasClaimDetailWorkspace.tsx src/components/domains/veritas/__tests__/VeritasClaimDetailWorkspace.test.tsx e2e/veritas-nisaba-bridge.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/domains/veritas/__tests__/VeritasClaimDetailWorkspace.test.tsx
    • passed: 7 passed
  • Resource gates before typecheck / Playwright / docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final browser Playwright run, available memory stayed above 8.2 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/veritas-nisaba-bridge.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 9 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

188. 2026-06-29 Veritas-to-Nisaba edition-diff bridge coverage#

Closed the dedicated passage-edition diff gap that remained after the Veritas-side retracted-source confidence band landed. The Nisaba notebook retraction citation now exposes an open-edition-diff action to /nisaba/compare with the shared Veritas cascade and citation id. The compare route is query-aware: for cascade-ai-governance-survey-retraction, it renders a source-retracted edition-update notice with stable cascade/source/citation anchors, the pinned edition version, locator, original/corrected citation labels, before/after diff rows, and a corrected-source handoff back to Veritas.

The veritas-nisaba-bridge browser journey now proves the whole path from the retracted Veritas claim confidence band → Nisaba notebook marker → affected notebook citation → Nisaba compare edition diff → corrected Veritas source profile. The journey remains partial only for broader exhaustive step-6 coverage across every landed interpretive claim, locator granularity, manuscript hops, AAA-gate bounce, and tenant/source-scope failure modes.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/lib/lilith-data/types.ts apps/oshun/web/src/lib/lilith-data/nisaba-depth.ts apps/oshun/web/src/app/nisaba/compare/page.tsx apps/oshun/web/src/components/lilith/nisaba.tsx apps/oshun/web/e2e/veritas-nisaba-bridge.spec.ts WALKTHROUGH/customer/07-nisaba/nisaba-compare.md WALKTHROUGH/customer/07-nisaba/nisaba-notebook.md WALKTHROUGH/journeys/veritas-to-nisaba-deeper.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/veritas-to-nisaba-deeper.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/lib/lilith-data/types.ts src/lib/lilith-data/nisaba-depth.ts src/app/nisaba/compare/page.tsx src/components/lilith/nisaba.tsx e2e/veritas-nisaba-bridge.spec.ts --max-warnings=0
    • passed
  • Resource gates before typecheck / Playwright / docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final browser Playwright run, available memory stayed above 8.2 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/veritas-nisaba-bridge.spec.ts e2e/veritas-retraction-cascade.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 19 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

187. 2026-06-29 Veritas-to-Nisaba retracted-source confidence-band coverage#

Closed the Veritas-side step 8 browser gap in veritas-to-nisaba-deeper without conflating unrelated claims. The new claim-ai-governance-adoption route represents the AI-governance survey retraction that already drives the Nisaba notebook correction notice. Its claim detail now exposes a retracted-source confidence band with stable cascade, affected-source, prior-score, current-score, soft-correction, and Nisaba-notebook-marker anchors. The browser journey follows that notebook marker into the real /nisaba/notebook route and asserts the correction notice for cascade-ai-governance-survey-retraction.

The component now imports Veritas domain helpers from their concrete source modules instead of the stale generated package index, keeping the direct Vitest layer aligned with the shipped object-model and counterclaim helpers.

The journey remains partial because the dedicated passage-edition diff UI and exhaustive landed-passage citation coverage are still not shipped or browser-drivable.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/domains/veritas/VeritasClaimDetailWorkspace.tsx apps/oshun/web/src/components/domains/veritas/__tests__/VeritasClaimDetailWorkspace.test.tsx apps/oshun/web/e2e/veritas-nisaba-bridge.spec.ts WALKTHROUGH/customer/05-veritas/domains-veritas-claims-claimId.md WALKTHROUGH/journeys/veritas-to-nisaba-deeper.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/veritas-to-nisaba-deeper.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/domains/veritas/VeritasClaimDetailWorkspace.tsx src/components/domains/veritas/__tests__/VeritasClaimDetailWorkspace.test.tsx e2e/veritas-nisaba-bridge.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/domains/veritas/__tests__/VeritasClaimDetailWorkspace.test.tsx
    • passed: 7 passed
  • Resource gates before typecheck / Playwright / docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final browser Playwright run, available memory stayed above 8.4 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/veritas-nisaba-bridge.spec.ts e2e/veritas-claim-detail-workspace.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 12 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

184. 2026-06-29 Metis ingest proposal browser coverage#

Deepened metis-byom-ingest-to-course at the real browser boundary without over-claiming the approved bundle pipeline. The Metis BYOM Playwright file now adds a live /metis/ingest Text-source path that posts through the real BFF, waits for 202 state=completed, and asserts the returned outline in the browser status card. It also adds a live /metis/courses/new proposal path that posts through the real BFF, then opens /metis and proves the same learner's drafted proposal hydrates in "Open courses · 4".

The course proposal browser path exposed a real auth bug: the form sent CSRF but no bearer token, so the member-scoped BFF write returned Authentication required. MetisProposeCourseForm now mirrors MetisIngestForm and sends bearer auth when an API token is present. The journey remains partial because the /metis/byom file/URL upload affordances are still display-only and the safety → Sophia → KG → approved published CourseBuild branch is still not browser-drivable.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/metis/courses/new/MetisProposeCourseForm.tsx apps/oshun/web/e2e/metis-byom-ingest.spec.ts WALKTHROUGH/customer/08-metis/metis-ingest.md WALKTHROUGH/customer/08-metis/metis-courses-new.md WALKTHROUGH/journeys/metis-byom-ingest-to-course.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/metis-byom-ingest-to-course.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/metis/courses/new/MetisProposeCourseForm.tsx e2e/metis-byom-ingest.spec.ts --max-warnings=0
    • passed
  • Resource gates before typecheck / Playwright / docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final Playwright run, available memory stayed above 8.5 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/metis-byom-ingest.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 18 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

190. 2026-06-29 Tara teacher profile course handoff coverage#

Closed a real Tara teacher-profile interaction gap without inventing unshipped destinations. Course rows on /domains/tara/teachers/[id] now render as native links to the existing /domains/tara/courses/[id] detail route, and the course detail page exposes a stable data-tara-course-detail root for browser handoff assertions. The same pass makes profile social controls explicitly disabled until real teacher URLs exist and marks simulated meditation rows as display-only instead of presenting an inert pointer affordance.

The browser journey now searches the real teacher directory, opens Sarah Chen's profile, verifies featured status, disabled external-profile controls, display-only session rows, follows the tara-course-001 course row into the real course-detail route, and browser-backs to the profile. The customer walkthrough now records which profile interactions are truly shipped and which remain fixture/product gaps.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/domains/tara/TaraTeacherProfile.tsx apps/oshun/web/src/components/domains/tara/TaraCourseDetail.tsx apps/oshun/web/src/components/domains/tara/__tests__/TaraTeacherProfile.test.tsx apps/oshun/web/e2e/tara-teacher-pages.spec.ts WALKTHROUGH/customer/03-tara/domains-tara-teachers-id.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/domains/tara/TaraTeacherProfile.tsx src/components/domains/tara/TaraCourseDetail.tsx src/components/domains/tara/__tests__/TaraTeacherProfile.test.tsx e2e/tara-teacher-pages.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/domains/tara/__tests__/TaraTeacherProfile.test.tsx
    • passed: 5 passed
  • Resource gates before typecheck / Playwright / docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during Playwright, available memory stayed above 8.2 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tara-teacher-pages.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 2 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tara-teacher-pages-accessibility.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 2 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

191. 2026-06-29 Tara course detail route coverage#

Closed the Tara course-detail browser gap on /domains/tara/courses/[id] without treating fixture-only local state as a persisted course backend. The course detail component now exposes stable route, enrollment, stats, objective, teacher, section, lesson, quiz, resources, missing-course, and certificate anchors. Lesson/resource/share actions that have no shipped backing behavior are explicitly disabled, while modal-style resources, quiz, reflection, and certificate surfaces expose dialog semantics for route-level accessibility checks.

The new Playwright coverage drives the shipped route data for tara-course-001 and tara-course-003: in-progress course anatomy, local not-enrolled -> enrolled -> in-progress transition, continue CTA, section accordion open/close, locked/available/in-progress/completed lesson rows, disabled resource actions, quiz fail/pass scoring, unknown-course fallback, and a scoped axe scan of the settled course-detail root. The walkthrough now records the remaining product gaps separately: completed/certificate state is not route-reachable with current fixtures, reflection lessons are all locked, and enrollment/progress persistence still needs a BFF contract.

Verification:

  • psql --version
    • passed: PostgreSQL 16.14
  • pnpm exec prettier --write apps/oshun/web/src/components/domains/tara/TaraCourseDetail.tsx apps/oshun/web/e2e/tara-course-detail.spec.ts WALKTHROUGH/customer/03-tara/domains-tara-courses-id.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/domains/tara/TaraCourseDetail.tsx e2e/tara-course-detail.spec.ts --max-warnings=0
    • passed
  • Resource gates before typecheck / Playwright / docs-center
    • 15 GiB RAM, 12-13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during final Playwright, available memory stayed above 8.3 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tara-course-detail.spec.ts --project=chromium --grep "renders in-progress course anatomy" --workers=1 --retries=0 --reporter=list
    • passed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tara-course-detail.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 5 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped
  • pnpm exec prettier --check apps/oshun/web/src/components/domains/tara/TaraCourseDetail.tsx apps/oshun/web/e2e/tara-course-detail.spec.ts WALKTHROUGH/customer/03-tara/domains-tara-courses-id.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • git diff --check
    • passed

185. 2026-06-29 Veritas topic and citation trail coverage#

Deepened veritas-evidence-trail at the shipped polished web surfaces without claiming unimplemented dynamic topic controls. The Veritas topic component now exposes stable row/cell anchors for the topic masthead counts, settled claims, open disputes, reading-history cells, primary-source rows, gap lines, and follow status rows. The Playwright journey uses those anchors to prove /veritas/topic renders the populated topic hub and that its follow rows are static status rows, not nested action buttons.

The same pass adds cross-view citation-contract coverage from /veritas/claim into /veritas/source/:sourceId and /veritas/counterclaims: source bands, source-profile rationale, provenance, reviewer attestation, hashes, and contested-quality labels now have browser assertions that catch drift between the claim rail, source profile, and counterclaim evidence inspection panels.

The journey remains partial because the polished /veritas/topic follow affordances do not yet toggle state, and retraction-trigger behavior remains a server-side next-visit promise rather than a browser-drivable notification path. The story trajectory SVG hardcoded-specimen gap was closed in addendum 240.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/lilith/veritas.tsx apps/oshun/web/e2e/veritas-evidence-trail.spec.ts WALKTHROUGH/journeys/veritas-evidence-trail.md WALKTHROUGH/customer/05-veritas/veritas-topic.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/veritas-evidence-trail.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/lilith/veritas.tsx e2e/veritas-evidence-trail.spec.ts --max-warnings=0
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/components/lilith/veritas.tsx apps/oshun/web/e2e/veritas-evidence-trail.spec.ts WALKTHROUGH/journeys/veritas-evidence-trail.md WALKTHROUGH/customer/05-veritas/veritas-topic.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/veritas-evidence-trail.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • Resource gates before Playwright and docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final Playwright run, available memory stayed above 8.4 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/veritas-evidence-trail.spec.ts --project=chromium --grep "step 8|step 10" --workers=1 --retries=0 --reporter=list
    • passed: 2 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/veritas-evidence-trail.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 17 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

186. 2026-06-29 Veritas retraction notebook drill-down coverage#

Closed the polished notebook-drill gap in veritas-retraction-cascade-customer-view without pretending the missing acknowledgement write exists. The /nisaba/notebook specimen data now carries an optional Veritas retraction notice. The notebook renders it as a native disclosure with stable cascade/severity/affected-count anchors, an inline per-citation row, the original quote preserved with struck-through treatment, and a corrected-source link to the existing Veritas source profile. The keep-with-marker action is explicitly marked as a placeholder until the persisted notebook acknowledgement/re-citation write is implemented.

The journey remains partial because customer-shell subscriber/audit fan-out, persisted notebook acknowledgement writes, Library confidence enum retraction state, and the kept-offering re-render surface are still not shipped or browser-drivable.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/lib/lilith-data/types.ts apps/oshun/web/src/lib/lilith-data/nisaba-depth.ts apps/oshun/web/src/components/lilith/nisaba.tsx apps/oshun/web/e2e/veritas-retraction-cascade.spec.ts WALKTHROUGH/journeys/veritas-retraction-cascade-customer-view.md WALKTHROUGH/customer/07-nisaba/nisaba-notebook.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/veritas-retraction-cascade-customer-view.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/lilith/nisaba.tsx src/lib/lilith-data/types.ts src/lib/lilith-data/nisaba-depth.ts e2e/veritas-retraction-cascade.spec.ts --max-warnings=0
    • passed
  • pnpm exec prettier --check apps/oshun/web/src/lib/lilith-data/types.ts apps/oshun/web/src/lib/lilith-data/nisaba-depth.ts apps/oshun/web/src/components/lilith/nisaba.tsx apps/oshun/web/e2e/veritas-retraction-cascade.spec.ts WALKTHROUGH/journeys/veritas-retraction-cascade-customer-view.md WALKTHROUGH/customer/07-nisaba/nisaba-notebook.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/veritas-retraction-cascade-customer-view.md
    • passed
  • Resource gates before Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the final browser Playwright run, available memory stayed above 8.4 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/veritas-retraction-cascade.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/veritas-retraction-cascade-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 1 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

196. 2026-06-29 Tara teacher directory coverage#

Deepened /domains/tara/teachers from a source-described directory into a browser-proven route state machine. The directory now exposes stable page, listing, search, filter, result-count, empty-state, carousel, card metadata, status, and back-button anchors. The featured carousel records its featured count and scroll step; teacher cards and featured cards share click and keyboard activation; the in-grid empty result is rendered as a status region; and reduced-motion CSS collapses teacher animations under the browser media preference.

The Playwright coverage now proves the Tara hub secondary-tool entry, exact simulated-data totals (12 teachers, 7 featured, 5 active), Anxiety filtering, Sarah search, clear search, no-result search, carousel right/left scroll state, Space-key teacher-card routing, profile metadata, Sarah profile/course handoff, and route-level axe scans for the directory and profile. The walkthrough remains honest that the current directory is local simulated data, and that inactive and guest status styles are present but unreachable with the current V1 fixture set.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/domains/tara/TaraTeacherProfile.tsx apps/oshun/web/e2e/tara-teacher-pages.spec.ts WALKTHROUGH/customer/03-tara/domains-tara-teachers.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/domains/tara/TaraTeacherProfile.tsx e2e/tara-teacher-pages.spec.ts --max-warnings=0
    • passed
  • Resource gates before typecheck and Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the Playwright stack run, available memory stayed above 8.2 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tara-teacher-pages.spec.ts e2e/tara-teacher-pages-accessibility.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run found a real setup gap in the new reduced-motion assertion (300ms computed duration when the spec did not explicitly emulate reduced motion); after pinning page.emulateMedia({ reducedMotion: 'reduce' }) in the interaction spec, rerun passed: 5 passed.
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

197. 2026-06-29 Arete habit proposal browser submit coverage#

Closed the /arete/habits/new gap where Playwright filled the polished form but created the proposed habit through a direct API request. The route now exposes a stable page root, hydrated form state, field/cadence/domain/why state anchors, valid radio semantics with roving keyboard focus, pending/error/success anchors, and success-card response metadata. The offline branch copy was softened to match the shipped behavior: reconnect, then submit again; no retry queue is promised.

The browser coverage now proves entry from /arete/habits, hydration before controlled-input fill, default idle state, label/why state updates, cadence Arrow/Home/End behavior, true browser POST payload, pending disabled state, real BFF 202 held-for-review response, BFF read-back on /v1/arete/habits, Propose another reset behavior, rendered habit read-back, native required validation, real BFF 422 rejection, and a network-abort offline alert that preserves user-entered form state.

The first focused Playwright run found a real hydration race: the SSR input could receive text before the client form state was wired, leaving data-label-length="0". The form now exposes data-hydrated="true" and the test waits for it before filling controlled fields.

Verification:

  • command -v psql && psql --version
    • passed: /usr/bin/psql, PostgreSQL 16.14
  • pnpm exec prettier --write apps/oshun/web/src/app/arete/habits/new/page.tsx apps/oshun/web/src/app/arete/habits/new/AreteProposeHabitForm.tsx apps/oshun/web/e2e/arete-create-habit.spec.ts WALKTHROUGH/customer/04-arete/arete-habits-new.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/arete/habits/new/page.tsx src/app/arete/habits/new/AreteProposeHabitForm.tsx e2e/arete-create-habit.spec.ts --max-warnings=0
    • first run caught invalid aria-pressed on role="radio"; after removing it, rerun passed
  • Resource gates before typecheck and Playwright
    • 15 GiB RAM, 12-13 GiB available before launches, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the full Playwright run, available memory stayed above 7.3 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed; after the Playwright dev server generated a malformed stale .next/dev/types/routes.d.ts, clearing apps/oshun/web/.next and rerunning passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/arete-create-habit.spec.ts --project=chromium --grep "step 3-alt" --workers=1 --retries=0 --reporter=list
    • first run exposed the hydration race above; after adding the hydration guard, rerun passed: 2 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/arete-create-habit.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed

198. 2026-06-29 Nyx sky-almanac live-BFF coverage#

Closed the /nyx/sky-almanac gap where the walkthrough still cited only a mock-BFF runtime probe. The page now exposes stable route, almanac, section, row, detail, availability, generated-at, and count anchors so browser automation can assert the computed read-only surface without relying on fast-moving astronomy values.

The new Playwright coverage proves the live BFF GET /v1/nyx/sky-almanac default contract, the explicit observer query contract for ?lat=51.5&lon=0, the signed-in customer route, Explore nav active state, page and almanac roots, generated-at ISO shape, section/row counts, exact section titles (Sun, Moon, Chart angles, Darkness), exact row labels, detail presence, unavailable-status absence on the populated route, and a mobile standalone launch with no horizontal overflow.

The walkthrough now also corrects an overstated auth claim: the page is walked as a signed-in customer shell route, but the current domain-stubs BFF endpoint has no route pre-handler. It also records the remaining product gap that the BFF accepts observer coordinates while the page currently calls the default-observer endpoint.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/nyx/sky-almanac/page.tsx apps/oshun/web/src/app/nyx/sky-almanac/SkyAlmanacSections.tsx apps/oshun/web/src/app/nyx/sky-almanac/SkyAlmanacSections.test.tsx apps/oshun/web/e2e/nyx-sky-almanac.spec.ts WALKTHROUGH/customer/06-nyx/nyx-sky-almanac.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/nyx/sky-almanac/page.tsx src/app/nyx/sky-almanac/SkyAlmanacSections.tsx src/app/nyx/sky-almanac/SkyAlmanacSections.test.tsx e2e/nyx-sky-almanac.spec.ts --max-warnings=0
    • passed; rerun after the API-only skipAxe patch also passed
  • Resource gates before typecheck and Playwright
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during Playwright, available memory stayed above 9.3 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed; rerun after the API-only skipAxe patch also passed
  • pnpm --dir apps/oshun/web exec vitest run src/app/nyx/sky-almanac/SkyAlmanacSections.test.tsx src/lib/server/nyx-depth.test.ts
    • passed: 2 files, 7 tests
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nyx-sky-almanac.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run exposed a harness issue: the BFF-only request test did not navigate a page, so the shared axe fixture scanned Playwright's blank page and failed document-title / html-has-lang. After scoping test.use({ skipAxe: true }) to the API-only describe block, rerun passed: 3 passed.
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

199. 2026-06-29 Metis lessons/session live-BFF coverage#

Closed the /metis/lessons and /metis/session gap where the walkthroughs still cited only the older runtime probe. The guarded dev/test BFF fixture now exposes a multi-course backlog: 3 lessons across 2 courses, with exactly one assessment-ready lesson. The pages expose stable route, generated-at, count, course, row, selected-start, and queue anchors so browser automation can assert the real SSR output without relying on screenshots.

The new Playwright coverage proves the live BFF GET /v1/metis/lessons contract, the signed-in customer lessons route, Explore nav active state, course grouping, exact lesson metadata, assessment-ready and not-ready labels, course and lesson hrefs, 44px course/lesson tap targets, footer hrefs, the session route's assessment-ready start selection, two-row queue, 58 planned minutes, non-interactive queue rows, and mobile standalone launches for both routes with no horizontal overflow.

The walkthroughs now also correct an overstated auth claim: both pages are walked as signed-in customer shell routes, but the current domain-stubs BFF endpoint is a production-guarded fixture, not an auth-scoped per-user backlog.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/domain-stubs.ts apps/oshun/bff/src/__tests__/domain-stubs-route.test.ts apps/oshun/web/src/app/metis/lessons/page.tsx apps/oshun/web/src/app/metis/session/page.tsx apps/oshun/web/e2e/metis-lessons-session.spec.ts WALKTHROUGH/customer/08-metis/metis-lessons.md WALKTHROUGH/customer/08-metis/metis-session.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/metis/lessons/page.tsx src/app/metis/session/page.tsx e2e/metis-lessons-session.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/bff exec eslint --no-warn-ignored src/routes/domain-stubs.ts src/__tests__/domain-stubs-route.test.ts --max-warnings=0
    • first run exposed pre-existing non-null auth assertions in the touched route file; after replacing them with a guarded auth helper, rerun passed
  • Resource gates before typecheck, Playwright, and docs-center
    • 15 GiB RAM, 12-13 GiB available before launches, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the Playwright run, available memory stayed above 9.7 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/bff typecheck
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/domain-stubs-route.test.ts
    • passed: 1 file, 92 tests
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/metis-lessons-session.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 4 passed
  • pnpm docs:center
    • passed; rendered 1886 files
  • pnpm docs:center:check
    • passed; all 1886 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 61 passed, 5 skipped

200. 2026-06-29 Metis create-form state coverage#

Closed the /metis/courses/new and /metis/ingest form-state gaps where the walkthroughs did not yet prove pending, recoverable error, offline, reset, and standalone behavior through browser automation.

The pages and forms now expose stable route, form-state, field-state, source-kind, error, accepted-status, and response-metadata anchors. The course proposal form resets the next proposal to its full idle defaults after a successful accept. The ingest source selector now uses true role="radio" / aria-checked semantics with roving Arrow/Home/End keyboard behavior, and the ingest accepted card exposes BFF state, outline counts, segment metadata, and pending-reason attributes.

The new Playwright coverage proves the signed-in customer shell for both routes, course idle defaults, controlled fields, delayed live-BFF pending state, real accepted proposal metadata, Propose another reset, real server 422 validation, explicit offline abort handling, ingest idle URL default, source selector keyboard behavior, PDF reference acceptance through the live BFF, delayed pasted-text pending state, completed outline rendering, real invalid-URL 422 handling, Queue another reset, mobile standalone launches, no horizontal overflow, and the shared axe scan. Happy-path and validation responses use the real BFF; offline branches are explicit network aborts in the browser.

Verification:

  • command -v psql && psql --version
    • passed: /usr/bin/psql, PostgreSQL 16.14
  • pnpm exec prettier --write apps/oshun/web/src/app/metis/courses/new/page.tsx apps/oshun/web/src/app/metis/courses/new/MetisProposeCourseForm.tsx apps/oshun/web/src/app/metis/ingest/page.tsx apps/oshun/web/src/app/metis/ingest/MetisIngestForm.tsx apps/oshun/web/e2e/metis-create-forms.spec.ts WALKTHROUGH/customer/08-metis/metis-courses-new.md WALKTHROUGH/customer/08-metis/metis-ingest.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/metis/courses/new/page.tsx src/app/metis/courses/new/MetisProposeCourseForm.tsx src/app/metis/ingest/page.tsx src/app/metis/ingest/MetisIngestForm.tsx e2e/metis-create-forms.spec.ts --max-warnings=0
    • passed; rerun after scoping the form Back-link selector also passed
  • Resource gates before typecheck and Playwright
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. External docs-center work in another checkout was allowed to finish before broad checks continued; during the final Playwright run, available memory stayed above 9.4 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/metis-create-forms.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run exposed an ambiguous Back-link assertion because the shell also contains "Back to OSHUN home"; after scoping the assertion to the form and exact accessible name, rerun passed: 6 passed.
  • pnpm docs:center
    • passed; rendered 2893 files after rebasing onto the updated docs-center renderer
  • pnpm docs:center:check
    • passed; all 2893 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 77 passed, 5 skipped

201. 2026-06-29 Library collection create-form state coverage#

Closed the /library/collections/new gap where the walkthrough still listed idle, pending, accepted, server-error, offline, native-validation, standalone, field, action, and success-card interactions as unverified.

The route and form now expose stable route, form-state, field-state, seed-count, error, pending, and accepted-status anchors. The submit button explicitly surfaces aria-disabled while pending, the accepted status receives focus after the live BFF accepts the collection, and the form action rows wrap on narrow standalone viewports without horizontal overflow.

The new Playwright coverage proves the signed-in customer shell route, Library nav active state, idle form attributes, Back href, controlled label/seed fields, comma/space/newline seed parsing, delayed live-BFF pending state, exact POST body, accepted BFF response metadata, success-card focus handoff, success links, real BFF 422 validation, explicit offline abort preservation, native required/minLength validation with zero collection POSTs, mobile standalone launch, 44 px touch targets, no horizontal overflow, and the shared axe scan. Happy-path and validation responses use the real BFF; the offline branch is an explicit browser network abort.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/library/collections/new/page.tsx apps/oshun/web/src/app/library/collections/new/LibraryNewCollectionForm.tsx apps/oshun/web/e2e/library-collections-new.spec.ts WALKTHROUGH/customer/02-home-discovery/library-collections-new.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/library/collections/new/page.tsx src/app/library/collections/new/LibraryNewCollectionForm.tsx e2e/library-collections-new.spec.ts --max-warnings=0
    • passed
  • Resource gates before typecheck, Playwright, and docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the Playwright run, available memory stayed above 9.2 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/library-collections-new.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 4 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed

202. 2026-06-29 Billing index offline and standalone coverage#

Closed the /billing static account route gap where the walkthrough still listed offline and standalone states as unverified. /billing is now an exact service-worker shell navigation, so an authenticated online visit caches the static billing document and an offline navigation replays the billing directory instead of the generic offline fallback.

The Playwright coverage now proves the signed-in static billing directory, crypto/profile/AAA rail hrefs, billing steward mailto:, mobile 44 px tap-target floor, no horizontal overflow, standalone display-mode launch, real service-worker cached-document replay while navigator.onLine === false, no generic offline fallback card/marker, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/public/sw.js apps/oshun/web/src/__tests__/pwa-service-worker-policy.test.ts apps/oshun/web/e2e/billing-index.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored public/sw.js src/__tests__/pwa-service-worker-policy.test.ts e2e/billing-index.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/__tests__/pwa-service-worker-policy.test.ts
    • passed: 1 file, 11 tests
  • Resource gates before Playwright and docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the Playwright run, available memory stayed above 8.8 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/billing-index.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 5 passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed

203. 2026-06-29 Profile data standalone PWA coverage#

Closed the /profile/data account readback gap where the walkthrough still listed standalone PWA rendering as unverified. The existing route already covered authenticated readback, capped export history, anonymous gating, mobile tap targets, and real service-worker offline replay; this slice adds a standalone mobile PWA launch that keeps the read surface on the real BFF path.

The Playwright coverage now seeds a real customer session, creates a completed data export and scheduled deletion through the live BFF POST endpoints, launches /profile/data with (display-mode: standalone) mocked through the shared PWA helper, and verifies the consent rows, export row, deletion row, footer controls, 44 px touch targets, absence of the generic offline fallback, and no horizontal overflow at a 390 px phone viewport.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/profile-data-readback.spec.ts WALKTHROUGH/customer/09-account/profile-data.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/profile-data-readback.spec.ts --max-warnings=0
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the Playwright run, available memory stayed above 8.6 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-data-readback.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 7 passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed

204. 2026-06-29 Profile notifications offline and standalone coverage#

Closed the /profile/notifications account read-index gap where the walkthrough still listed offline and standalone PWA rendering as unverified. The route is now an exact service-worker shell navigation, so an authenticated online visit caches the BFF-backed notification summary document and an offline navigation replays that same channel/category summary instead of the generic fallback.

The Playwright coverage now proves the real BFF-backed email/push/SMS/Telegram channel rows, notification category rows, footer targets, sibling-route navigation, anonymous redirect, mobile channel stacking, 44 px footer tap targets, standalone display-mode launch, no horizontal overflow, real service-worker cached-document replay while navigator.onLine === false, and no generic offline fallback card/marker.

Verification:

  • pnpm exec prettier --write apps/oshun/web/public/sw.js apps/oshun/web/src/__tests__/pwa-service-worker-policy.test.ts apps/oshun/web/e2e/profile-notifications-index.spec.ts WALKTHROUGH/customer/09-account/profile-notifications.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored public/sw.js src/__tests__/pwa-service-worker-policy.test.ts e2e/profile-notifications-index.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/__tests__/pwa-service-worker-policy.test.ts
    • passed: 1 file, 11 tests
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the Playwright run, available memory stayed above 8.5 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-notifications-index.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 7 passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed

205. 2026-06-29 Profile persona offline and standalone coverage#

Closed the /profile/persona account readback gap where the walkthrough still listed offline and standalone PWA rendering as unverified. The route is now an exact service-worker shell navigation, so an authenticated online visit caches the BFF-backed active voice readback and an offline navigation replays that same persona voice document instead of the generic fallback.

The Playwright coverage now proves the real BFF-backed no-consent empty state, live voice consent grant, voice catalogue metadata, active voice selection, footer navigation, mobile control sizing, standalone display-mode launch, no horizontal overflow, real service-worker cached-document replay while navigator.onLine === false, and no generic offline fallback marker.

Verification:

  • pnpm exec prettier --write apps/oshun/web/public/sw.js apps/oshun/web/src/__tests__/pwa-service-worker-policy.test.ts apps/oshun/web/e2e/profile-persona-readback.spec.ts WALKTHROUGH/customer/09-account/profile-persona.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored public/sw.js src/__tests__/pwa-service-worker-policy.test.ts e2e/profile-persona-readback.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/__tests__/pwa-service-worker-policy.test.ts
    • passed: 1 file, 11 tests
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the Playwright run, available memory stayed above 12 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-persona-readback.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 7 passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed

206. 2026-06-29 Profile safety offline replay coverage#

Closed the /profile/safety account recovery gap where the walkthrough still listed cold visited-offline safety-record rendering as unproven. The route is now an exact service-worker shell navigation, while the sensitive safety record itself is restored only from a same-device last-frame snapshot and the frame-keyed recovery state written after a successful live BFF read.

The Playwright coverage now proves the real BFF-backed active crisis frame, accepted local re-entry choice, service-worker cached /profile/safety document, offline replay while navigator.onLine === false, no generic offline fallback marker, and a cached-document bootstrap that renders the real last frame plus the local recovery choice even when the offline cached HTML would otherwise stay on the loading shell.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.tsx apps/oshun/web/e2e/profile-safety-crisis-recovery.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/app/profile/safety/ProfileSafetyJourney.test.tsx src/lib/offline-shell-routes.test.ts src/__tests__/pwa-service-worker-policy.test.ts
    • passed: 3 files, 26 tests
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored public/sw.js src/__tests__/pwa-service-worker-policy.test.ts src/lib/offline-shell-routes.ts src/lib/offline-shell-routes.test.ts src/app/profile/safety/ProfileSafetyJourney.tsx src/app/profile/safety/ProfileSafetyJourney.test.tsx e2e/profile-safety-crisis-recovery.spec.ts --max-warnings=0
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 51 GiB disk free, and no competing broad build/test process; during the Playwright run, available memory stayed above 8.7 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-safety-crisis-recovery.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 5 passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed

207. 2026-06-29 Profile Telegram BFF-failure fallback coverage#

Closed the /profile/telegram fallback gap where a failed BFF read previously rendered a fabricated generic Telegram deep link (https://t.me/oshun_bot?start=link). The page now renders an honest unavailable card when the account-scoped /v1/telegram/link read returns null, and it exposes no Telegram href, no refresh action, and no generic start=link token until the BFF can mint a per-account nonce.

The Playwright coverage now proves the live not-linked nonce render, manual refresh nonce rotation, client expiry disablement, mobile/offline-after-load stability, real Telegram webhook completion, anonymous proxy redirect, and a protected-route BFF auth failure by keeping the real session cookie while poisoning only the forwarded oshun-access bearer.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14
  • pnpm exec prettier --write apps/oshun/web/src/app/profile/telegram/page.tsx apps/oshun/web/e2e/profile-telegram-bridge.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/profile/telegram/page.tsx src/app/profile/telegram/ProfileTelegramLinkPanel.tsx src/app/profile/telegram/ProfileTelegramLinkPanel.test.tsx e2e/profile-telegram-bridge.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/app/profile/telegram/ProfileTelegramLinkPanel.test.tsx
    • passed: 1 file, 2 tests
  • rm -rf apps/oshun/web/.next
    • passed: cleared a truncated generated .next/dev/types/routes.d.ts cache after the first browser run rendered 404s from corrupt route type state
  • pnpm --dir apps/oshun/web typecheck
    • passed after regenerating from the clean .next cache, and passed again after the final spec/docs edits
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 51 GiB disk free. A CPU-heavy docs render was active in another checkout, so the browser gate stayed limited to one spec and one worker; during the run, available memory stayed above 9.5 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-telegram-bridge.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed: 77 passed, 5 skipped

208. 2026-06-29 Profile data download/footer telemetry coverage#

Closed the /profile/data account readback gap where the walkthrough still listed telemetry absence on the completed export Download link and footer navigation controls as unproven. The route remains a read-only DSAR surface; the browser coverage now explicitly proves the completed export download anchor and all four footer action links expose no data-telemetry-event, data-analytics-event, or data-event hooks while the live BFF-backed export row is rendered.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/profile-data-readback.spec.ts WALKTHROUGH/customer/09-account/profile-data.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/profile-data-readback.spec.ts --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright and docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. An external docs-center render/check was allowed to finish before this checkout's docs-center gate started; during the focused browser run, available memory stayed above 8.7 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-data-readback.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 7 passed
  • pnpm docs:center
    • passed; rendered 2976 files after rebasing onto the updated docs-center source set
  • pnpm docs:center:check
    • passed; all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

Closed the /profile/notifications account readback gap where footer navigation telemetry absence was still listed as unproven. The route remains a read-only BFF-backed notification summary; the browser coverage now explicitly proves the rendered footer action container, all four footer action links, and footer descendants expose no data-telemetry-event, data-analytics-event, or data-event hooks in both the normal route and standalone PWA launch.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/profile-notifications-index.spec.ts WALKTHROUGH/customer/09-account/profile-notifications.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/profile-notifications-index.spec.ts --max-warnings=0
    • passed after rebasing onto the updated origin/main
  • Resource gates before typecheck/Playwright and docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. External docs-center merge/push runs from another checkout were allowed to finish before the final docs-center gates; after rebasing onto origin/main, no competing build/test jobs were active. During the focused browser and docs-center runs, available memory stayed above 11 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed after rebasing onto the updated origin/main
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-notifications-index.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 7 passed after rebasing onto the updated origin/main
  • pnpm docs:center
    • passed; rendered 2976 files
  • pnpm docs:center:check
    • passed; all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

Closed the /profile/persona account readback gap where footer navigation telemetry absence was still listed as unproven. The route remains a read-only BFF-backed persona voice catalogue; the browser coverage now explicitly proves the rendered footer action container, all three footer action links, and footer descendants expose no data-telemetry-event, data-analytics-event, or data-event hooks in the normal route, mobile viewport, and standalone PWA launch.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/profile-persona-readback.spec.ts WALKTHROUGH/customer/09-account/profile-persona.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/profile-persona-readback.spec.ts --max-warnings=0
    • passed after rebasing onto the updated origin/main
  • Resource gates before typecheck/Playwright and docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before the final focused route checks; during the browser run, available memory stayed above 9.2 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed after rebasing onto the updated origin/main
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-persona-readback.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 7 passed after rebasing onto the updated origin/main
  • pnpm docs:center
    • passed; rendered 2976 files
  • pnpm docs:center:check
    • passed; all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

Closed the /profile/telegram deep-link telemetry gap where the active Telegram handoff only had partial negative assertions. The browser coverage now proves the active deep-link wrapper, anchor, and descendants expose no data-telemetry-event, data-analytics-event, or data-event hooks before refresh, after the real refresh server action rotates the nonce, and in the 390 px mobile/offline-after-load branch. The expired replacement path also proves the wrapper, descendants, and disabled "Link expired" control remain hook-free after the stale anchor is removed.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/profile-telegram-bridge.spec.ts WALKTHROUGH/customer/09-account/profile-telegram.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed after rebasing onto the updated origin/main
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/profile-telegram-bridge.spec.ts --max-warnings=0
    • passed after rebasing onto the updated origin/main
  • Resource gates before typecheck/Playwright and docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before the final focused route and docs-center checks; during the focused browser run, available memory stayed above 9.9 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed after rebasing onto the updated origin/main
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-telegram-bridge.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed after rebasing onto the updated origin/main
  • pnpm docs:center
    • passed; rendered 2976 files
  • pnpm docs:center:check
    • passed; all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

212. 2026-06-29 Metis ingest submit/accept telemetry coverage#

Closed the /metis/ingest create-form gap where submit and accepted-state telemetry absence was still listed as unproven. The browser coverage now proves the live-BFF ingest form, submit button, accepted status card, Back-to-Metis link, Queue-another button, and descendants expose no data-telemetry-event, data-analytics-event, or data-event hooks before submit, while the delayed real BFF request is pending, after a completed text outline, after a PDF reference is accepted, and after Queue another resets the form.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/metis-create-forms.spec.ts WALKTHROUGH/customer/08-metis/metis-ingest.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/metis-create-forms.spec.ts --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright and docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before the focused route checks; during the browser run, available memory stayed above 9.2 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/metis-create-forms.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • pnpm docs:center
    • passed; rendered 2976 files
  • pnpm docs:center:check
    • passed; all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

213. 2026-06-29 Settings panel button telemetry coverage#

Closed the direct /settings account-surface gap where profile-panel button telemetry absence was still listed as unproven. The browser coverage now proves the direct settings panel renders profile buttons and that no profile-panel button exposes data-telemetry-event, data-analytics-event, or data-event after the presentational connected-service Connect action and connected-domain Manage action are clicked.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/profile-settings-flows.spec.ts WALKTHROUGH/customer/09-account/settings.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/profile-settings-flows.spec.ts --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright and docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before the focused route checks; during the focused browser run, available memory stayed above 8.6 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-settings-flows.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 19 passed
  • pnpm docs:center
    • passed; rendered 2976 files
  • pnpm docs:center:check
    • passed; all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

214. 2026-06-29 Metis course proposal submit/accept telemetry coverage#

Closed the /metis/courses/new create-form gap where submit and accepted-state telemetry absence was still listed as unproven. The browser coverage now proves the live-BFF course proposal form, submit button, accepted status card, Back-to-Metis link, Propose-another button, reset form, and descendants expose no data-telemetry-event, data-analytics-event, or data-event hooks before submit, while the delayed real BFF request is pending, after the proposal is accepted, and after Propose another resets the form.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/metis-create-forms.spec.ts WALKTHROUGH/customer/08-metis/metis-courses-new.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/metis-create-forms.spec.ts --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright and docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before the focused route checks; during the browser run, available memory stayed above 8.6 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/metis-create-forms.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • pnpm docs:center
    • passed; rendered 2976 files
  • pnpm docs:center:check
    • passed; all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

215. 2026-06-29 Verify-email Continue telemetry coverage#

Closed the /auth/verify-email public onboarding gap where the Continue link's telemetry absence was documented from source but not proven in browser coverage. The focused real-dev-infra Playwright spec now proves the verify-email state container, Continue link, and descendants expose no data-telemetry-event, data-analytics-event, or data-event hooks in the transient verifying state, real-BFF verified state, real-BFF replay-error state, mocked already-verified state, missing-token state, safe-next state, and unsafe-next state. It also click-guards Continue and asserts no oshun-analytics:event dispatch occurs from the activation.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/email-verify-roundtrip.spec.ts WALKTHROUGH/customer/00-public/auth-verify-email.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/email-verify-roundtrip.spec.ts --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright and docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before the focused route checks; during the browser run, available memory stayed above 11 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/email-verify-roundtrip.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • pnpm docs:center
    • passed; rendered 2976 files
  • pnpm docs:center:check
    • passed; all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

216. 2026-06-29 Billing rail telemetry coverage#

Closed the /billing account-directory gap where the rail links' lack of telemetry was noted in the walkthrough but not asserted in browser coverage. The focused real-dev-infra Playwright spec now proves the static billing root, card, rail list, crypto/profile/AAA rail links, and billing steward mailto: link expose no data-telemetry-event, data-analytics-event, or data-event hooks. It also click-guards all four controls and asserts no oshun-analytics:event dispatch occurs from activation.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/billing-index.spec.ts WALKTHROUGH/customer/09-account/billing.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/billing-index.spec.ts --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright and docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before the focused route checks; during the browser run, available memory stayed above 9.4 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/billing-index.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • pnpm docs:center
    • passed; rendered 2976 files
  • pnpm docs:center:check
    • passed; all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

217. 2026-06-29 Nisaba notebooks index real-infra coverage#

Closed the /nisaba/notebooks index gaps where the walkthrough documented live BFF, empty, fallback, mobile, standalone, offline, gating, and telemetry states without focused route coverage. The route now normalizes the real BFF notebookId / updatedAt / status list contract instead of assuming fixture fields, exposes stable selectors, keeps footer actions at a 44 px tap-target floor, and registers /nisaba/notebooks as a service-worker shell navigation (CACHE_VERSION=v7) so the cached BFF-backed document replays offline. The focused Playwright spec seeds notebooks through the real BFF, proves the explicit empty-array state for a fresh user, forces the signed-in/no-bearer fixture fallback, verifies mobile and standalone containment, asserts no telemetry hooks or oshun-analytics:event dispatch on card/footer activation, and confirms anonymous redirect-before-render.

The first browser attempt also exposed a dev-infra startup break: @oshun/ai/openai-compatible was path-aliased to a declaration file, so BFF dev startup could not import DEFAULT_OPENROUTER_TEXT_MODEL. The alias now points to the runtime source barrel.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/nisaba/notebooks/page.tsx apps/oshun/web/public/sw.js apps/oshun/web/e2e/nisaba-notebooks-index.spec.ts WALKTHROUGH/customer/07-nisaba/nisaba-notebooks.md WALKTHROUGH/shell/03-pwa-behavior.md tsconfig.base.json
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/nisaba-notebooks-index.spec.ts src/app/nisaba/notebooks/page.tsx public/sw.js --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright and docs-center
    • 15 GiB RAM, 12-13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. Unrelated CPU-heavy agent/Python work was active in another checkout, so verification stayed targeted and single-worker; during the focused browser run, available memory stayed above 11 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-notebooks-index.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 7 passed
  • pnpm docs:center
    • passed; rendered 2976 files
  • pnpm docs:center:check
    • passed; all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

218. 2026-06-29 Profile channel-binding BFF reload coverage#

Deepened messages-quiet-hours-and-channel-binding for the shipped email/SMS/WhatsApp profile channel-binding UI. The Playwright spec no longer blocks service workers, drives /profile "Notification channels" with the real service-worker path enabled, and proves the email lifecycle across both browser state and the direct BFF projection: send code → pending BFF read-back → verify → verified BFF read-back → full /profile reload → Remove → unbound BFF read-back → second /profile reload. The wrong-code SMS leg now also proves the BFF list stays pending, not only the visible row.

The same pass added mobile interaction coverage for the visible channel controls at a 390 px viewport, and the component now gives channel inputs/buttons a 44 px target floor. The journey and profile walkthroughs now call out the exact shipped route distinction: /profile hosts channel binding, while /profile?path=notifications hosts notification preferences.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/profile-channel-bindings.spec.ts apps/oshun/web/src/components/profile/ChannelBindingsSection.tsx WALKTHROUGH/journeys/messages-quiet-hours-and-channel-binding.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/customer/09-account/profile.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/profile-channel-bindings.spec.ts src/components/profile/ChannelBindingsSection.tsx --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/profile/ChannelBindingsSection.test.tsx
    • passed: 5 passed
  • Resource gates before typecheck/Playwright and docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before the focused route checks; during the focused browser run, available memory stayed above 9 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-channel-bindings.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 2 passed
  • pnpm docs:center
    • passed; rendered 2976 files
  • pnpm docs:center:check
    • passed; all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

219. 2026-06-29 Telegram crisis audit Postgres coverage#

Deepened telegram-bot-assistant-delivery for the durable audit-sink branch used by crisis interrupts. The focused Playwright spec now sends a crisis phrase through the real POST /telegram/webhook route with a unique tenant header, then polls the Postgres-backed admin_audit_event table and proves the row is persisted as telegram.crisis-suppression with the plain-operator persona, short-30d retention class, exact Telegram update/message/chat metadata, and no crisis response body text copied into the audit payload.

The existing /today audit proof continues to cover the normal telegram.send branch, so the Telegram journey now distinguishes both durable event types called out in the V1 channel-audit contract.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/telegram-webhook-delivery.spec.ts WALKTHROUGH/journeys/telegram-bot-assistant-delivery.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/telegram-webhook-delivery.spec.ts --max-warnings=0
    • passed
  • Resource gates before Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before the focused route checks; during the focused Playwright run, available memory stayed above 10 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/telegram-webhook-delivery.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 23 passed
  • pnpm docs:center
    • passed; rendered 2976 files
  • pnpm docs:center:check
    • passed; all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed; 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

220. 2026-06-29 Arete active-surface crisis preflight coverage#

Deepened crisis-aware-tone-policy and arete-living-offering-create by removing the legacy Lilith safety-assessment route bridge from the Arete offering browser spec. The focused Playwright coverage now proves the active /arete/offering surface sends the blocking intention directly from the browser to the live POST /v1/lilith/adapter/safety-assessment?role=safety BFF route with the auth-context bearer, then swaps the action region into the plain safety interruption with 988 resources and a /profile/safety handoff while no /v1/arete/offerings/keep write occurs.

This closes the active-surface preflight proof for one shipped Lilith-wired customer surface. The durable typed-input → crisis-frame-marker cascade remains honestly partial: operator activation still covers the Redis worker and member-visible markers, while Arete typed input covers the browser preflight and in-place safety interrupt.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/arete-offering-actions.spec.ts
    • passed
  • Resource gate before Playwright
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before the focused route check; during the focused browser run, available memory stayed above 12 GiB.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/arete-offering-actions.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/arete-offering-actions.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 9 passed
  • Resource gate before typecheck and docs-center
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active; during docs-center verification, available memory stayed at or above 13 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files were fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

246. 2026-06-30 Studio CRDT merge substrate coverage#

Closed the focused /studio/real-time-collaboration-substrate browser coverage gap for the V1 Studio collaboration substrate route. The new Playwright spec primes a real Studio admin shell session, verifies the live CRDT catalog GET uses a dev bearer, submits the default operation log to the real /v1/admin/studio/crdt-merge/merge BFF route, and asserts the converged headline plus the x/y/z element timestamp and presence rows.

The browser coverage also drives an edited shuffled operation log through the live BFF to prove LWW add-biased ties (addTs === removeTs remains present) and sorted convergence, checks all six sibling collaboration quick-action targets, holds the catalog request to prove the loading lane before surfacing a 503 error state, distinguishes malformed JSON as a zero-POST client block from a valid JSON BFF 400 detail, and proves non-admin and anonymous fail-closed states. The route remains a stateless request/response merge console; durable CRDT persistence and future op-kind extensibility are still product questions.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/studio-real-time-collaboration-substrate.spec.ts WALKTHROUGH/studio/collaboration/studio-real-time-collaboration-substrate.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore e2e/studio-real-time-collaboration-substrate.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-studio-crdt-merge-route.test.ts
    • passed: 1 file, 5 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioRealTimeCollaborationSubstrateWorkspace.test.tsx src/components/__tests__/StudioRealTimeCollaborationSubstrateWorkspace.integration.test.tsx
    • passed: 2 files, 5 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before the browser run. No competing build/test/docs jobs were active; available memory stayed above 10 GiB during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-real-time-collaboration-substrate.spec.ts --project=chromium
    • passed: 6 passed

248. 2026-06-30 Studio commenting and annotation coverage#

Closed the focused /studio/commenting-annotation-system browser coverage gap for the V1 Studio collaboration route. The new Playwright spec primes a real Studio admin shell session, verifies the live comment-thread catalog GET uses a dev bearer, submits the default comments payload to the real /v1/admin/studio/comment-threads/analyze BFF route, and asserts the thread headline plus per-comment depth, mention, and orphan rows.

The browser coverage also drives an edited comments payload through the live BFF to prove parent-chain depth (0 → 1 → 2), repeated-mention dedupe, orphan detection, resolved-thread summary, and total mention counting. It checks all six sibling collaboration quick-action targets, holds the catalog request to prove the loading lane before surfacing a 503 error state, distinguishes malformed JSON as a zero-POST client block from a valid JSON BFF 400 detail, and proves non-admin and anonymous fail-closed states. The route remains a stateless request/response analyzer; persisted annotation search and mention edge-case contracts are still product questions.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/studio-commenting-annotation-system.spec.ts WALKTHROUGH/studio/collaboration/studio-commenting-annotation-system.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore e2e/studio-commenting-annotation-system.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-studio-comment-threads-route.test.ts
    • passed: 1 file, 5 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioCommentingAnnotationSystemWorkspace.test.tsx src/components/__tests__/StudioCommentingAnnotationSystemWorkspace.integration.test.tsx
    • passed: 2 files, 5 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before the browser run. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-commenting-annotation-system.spec.ts --project=chromium
    • passed: 6 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before generation. No competing build/test/docs jobs were active; available memory stayed at or above 13 GiB during generated-doc checks.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 53 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

249. 2026-06-30 Studio Isis retention policies coverage#

Closed the focused /studio/isis/retention-policies browser coverage gap for the V1 Studio Isis output-governance route. The new Playwright spec first proves the direct route remains hard-blocked by the Studio Isis boundary, then primes an authenticated Studio shell through the localhost-only lane bypass, forwards the browser's same-origin /v1/admin/isis/retention-policies requests to the real local BFF with an admin bearer, verifies the active retention policy windows, and asserts the seeded allow/deny records for recent render, stale upload, and legal hold.

The browser coverage also calls the real BFF scan endpoint to prove continuous deletion-sweep semantics, drives exported-customer and legal-hold artifact evaluations through the UI, verifies persisted allow/deny rows and exact POST payloads, checks route-map articles plus sibling quick-actions, and covers required-field, duplicate-id, pending, loading, empty, 503 error, malformed catalog, non-admin, and anonymous fail-closed states. The route remains a client-triggered admin lane; the open product questions are breadcrumb presence, embedding behavior inside /studio/isis/outputs, and unimplemented route-map sub-path pages.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/studio-isis-retention-policies.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-retention-policies.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore e2e/studio-isis-retention-policies.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-isis-retention-policies-route.test.ts
    • passed: 1 file, 11 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisRetentionPoliciesWorkspace.test.tsx src/components/__tests__/StudioIsisRetentionPoliciesWorkspace.integration.test.tsx
    • passed: 2 files, 6 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before the browser run. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-isis-retention-policies.spec.ts --project=chromium
    • passed: 8 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before generation. No competing build/test/docs jobs were active; available memory stayed above the stop threshold during generated-doc checks.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 53 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

250. 2026-06-30 Studio Isis workflow templates coverage#

Closed the focused /studio/isis/workflow-templates browser coverage gap for the V1 Studio Isis workflow-governance route. The new Playwright spec first proves the direct route remains hard-blocked by the Studio Isis boundary, then primes an authenticated Studio shell through the localhost-only lane bypass, forwards the browser's same-origin /v1/admin/isis/workflow-templates requests to the real local BFF with an admin bearer, verifies the seeded template catalog, and asserts route-map articles plus sibling quick-actions.

The browser coverage also selects the curated illustration example, posts a manual template to the live BFF inspect endpoint, verifies the direct and lookup expression rows plus extracted variables, checks the exact POST payload, and covers pending inspect, network-failed inspect, loading, empty catalog, 503 catalog error, malformed catalog, non-admin, and anonymous fail-closed states. The route remains a client-triggered admin lane; the open product questions are breadcrumb presence, unimplemented route-map sub-path pages, and dedicated manual AT/touch/offline/telemetry passes beyond automated axe coverage.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/studio-isis-workflow-templates.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-workflow-templates.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore e2e/studio-isis-workflow-templates.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-isis-workflow-templates-route.test.ts
    • passed: 1 file, 4 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisWorkflowTemplatesWorkspace.test.tsx src/components/__tests__/StudioIsisWorkflowTemplatesWorkspace.integration.test.tsx src/components/__tests__/StudioIsisWorkflowTemplatesPage.test.tsx src/components/__tests__/StudioIsisWorkflowTemplatesRouteMap.test.ts
    • passed: 4 files, 6 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-isis-workflow-templates.spec.ts --project=chromium
    • passed: 8 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 53 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

251. 2026-06-30 Studio Project Obsidian coverage#

Closed the focused /studio/project-obsidian browser coverage gap for the V1 Studio authoring/program-governance route. The new Playwright spec primes an authenticated Studio admin shell, verifies the live critical-path catalog GET uses a dev bearer, asserts the breadcrumb, route-map articles, and quick-action targets into Isis/Yemaya/Bellona authoring neighbors, then submits the default task graph through the real /v1/admin/studio/critical-path/compute BFF route. The browser asserts project duration 9, critical path A -> C -> D, per-task critical flags, and slack rows for the non-critical B/E tasks.

The browser coverage also edits the task graph and recomputes a distinct Design -> Build -> Certify critical path through the live BFF, proves malformed JSON is a zero-POST client block, proves dependency cycles surface the live BFF dependency cycle detected detail, and covers compute network failure, loading, 503 catalog error, malformed catalog, non-admin, and anonymous fail-closed states. The route remains a pasted-graph admin console; route-map sub-path implementations, named analysis display beyond the count, and manual AT/touch/offline/telemetry passes remain product hardening items.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioProjectObsidianWorkspace.tsx apps/oshun/web/src/app/studio/project-obsidian/page.tsx apps/oshun/web/e2e/studio-project-obsidian.spec.ts WALKTHROUGH/studio/authoring/studio-project-obsidian.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore src/components/studio/StudioProjectObsidianWorkspace.tsx src/app/studio/project-obsidian/page.tsx e2e/studio-project-obsidian.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-studio-critical-path-route.test.ts
    • passed: 1 file, 6 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioProjectObsidianWorkspace.test.tsx src/components/__tests__/StudioProjectObsidianWorkspace.integration.test.tsx src/components/__tests__/StudioProjectObsidianPage.test.tsx src/components/__tests__/StudioProjectObsidianRouteMap.test.ts
    • passed: 4 files, 7 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-project-obsidian.spec.ts --project=chromium
    • passed: 7 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 54 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

252. 2026-06-30 Studio Isis generation-mode coverage#

Closed the focused /studio/isis/generation-mode-coverage browser coverage gap for the V1 Studio generation-mode governance route. The new Playwright spec proves the direct route remains Studio-boundary hard-blocked, then primes an authenticated Studio admin shell through the localhost-only lane bypass and forwards browser requests to the real local BFF. The happy path asserts the manifest-backed 18-mode coverage matrix, the image/video/audio/3d/text package list, representative text-to-image, image-to-image, text-to-3d, and music-generation rows, route-map articles, sibling quick-actions, bearer auth on the catalog request, and 44px hit targets for the input, select, submit, and quick-action links.

The browser coverage also drives the live compatibility endpoint for compatible text-to-image -> image, incompatible text-to-image -> video, and unknown text-to-hologram checks; verifies the exact POST bodies and bearer headers; and covers loading, empty coverage, 503 catalog error, malformed catalog, check network failure, non-admin unauthorized, and anonymous redirect-before-render states. The route remains a manifest-checking admin console; route-map sub-path implementations, intentional cross-domain quick action ownership, and manual AT/touch-device/offline/telemetry passes remain product hardening items.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisGenerationModeCoverageWorkspace.tsx apps/oshun/web/src/app/studio/isis/generation-mode-coverage/page.tsx apps/oshun/web/e2e/studio-isis-generation-mode-coverage.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-generation-mode-coverage.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore src/components/studio/StudioIsisGenerationModeCoverageWorkspace.tsx src/app/studio/isis/generation-mode-coverage/page.tsx e2e/studio-isis-generation-mode-coverage.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-isis-generation-mode-coverage-route.test.ts
    • passed: 1 file, 4 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisGenerationModeCoverageWorkspace.test.tsx src/components/__tests__/StudioIsisGenerationModeCoveragePage.test.tsx src/components/__tests__/StudioIsisGenerationModeCoverageRouteMap.test.ts
    • passed: 3 files, 5 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-isis-generation-mode-coverage.spec.ts --project=chromium
    • passed: 8 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 54 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

253. 2026-06-30 Studio Isis workflow-versioning coverage#

Closed the focused /studio/isis/workflow-versioning browser coverage gap for the V1 Studio workflow-governance route. The new Playwright spec proves the direct route remains Studio-boundary hard-blocked, then primes an authenticated Studio admin shell through the localhost-only lane bypass and forwards browser GET requests to the real local BFF. The happy path asserts the real @isis/workflows registry contract: schema 1.0.0, compatibility range ^1.0.0, 48 workflow rows, Behind latest: 0, representative artifact-reconstruction and music-cue-composer entries, route-map articles, sibling quick-actions, bearer auth on the catalog request, and 44px hit targets for compare controls, the behind-only filter target, and quick-action links.

The browser coverage also drives the read-only compare tool through live parameterized BFF GETs for 1.0.0 -> 2.0.0 (older, satisfies range), 2.0.0 -> 1.0.0 (newer, does not satisfy range), and invalid not-semver input; verifies the exact query strings and bearer headers; and covers the real behind-only empty filter state, loading, empty catalog, 503 catalog error, malformed catalog, compare network failure, non-admin unauthorized, and anonymous redirect-before-render states. The route remains a read-only registry browser; route-map sub-path implementations, breadcrumbs, and manual AT/touch-device/offline/telemetry passes remain product hardening items.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisWorkflowVersioningWorkspace.tsx apps/oshun/web/src/app/studio/isis/workflow-versioning/page.tsx apps/oshun/web/e2e/studio-isis-workflow-versioning.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-workflow-versioning.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore src/components/studio/StudioIsisWorkflowVersioningWorkspace.tsx src/app/studio/isis/workflow-versioning/page.tsx e2e/studio-isis-workflow-versioning.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-isis-workflow-versioning-route.test.ts
    • passed: 1 file, 4 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisWorkflowVersioningWorkspace.test.tsx src/components/__tests__/StudioIsisWorkflowVersioningWorkspace.integration.test.tsx src/components/__tests__/StudioIsisWorkflowVersioningPage.test.tsx src/components/__tests__/StudioIsisWorkflowVersioningRouteMap.test.ts
    • passed: 4 files, 8 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-isis-workflow-versioning.spec.ts --project=chromium
    • passed: 9 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 54 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

254. 2026-07-01 Studio Isis model-registry coverage#

Closed the focused /studio/isis/model-registry browser coverage gap for the V1 Studio model-governance route. The new Playwright spec proves the direct route remains Studio-boundary hard-blocked, then primes an authenticated Studio admin shell through the localhost-only lane bypass and forwards browser GET requests to the real local BFF. The happy path asserts the seeded managed-model registry contract: four default safe rows, NSFW model mm_mature_studies_v1 hidden by default, non-commercial mm_portrait_warmth_v2 visible by default, checkpoint / lora asset facets, route-map articles, sibling quick-actions, bearer auth on the catalog request, and 44px hit targets for filters, toggles, load-more, and quick-action links.

The browser coverage also drives search, asset-type, commercial-use, NSFW, and cursor-pagination interactions through the live ManagedModelBrowser BFF contract; verifies the browser query strings and forwarded BFF query strings; and covers loading, empty catalog, 503 catalog error, malformed catalog, non-admin unauthorized, and anonymous redirect-before-render states. The route remains a read-only managed-model browser; upstream Civitai intake/approval, route-map sub-path implementations, and manual AT/touch-device/offline/ telemetry passes remain product hardening items.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisModelRegistryWorkspace.tsx apps/oshun/web/src/app/studio/isis/model-registry/page.tsx apps/oshun/web/src/components/__tests__/StudioIsisModelRegistryWorkspace.test.tsx apps/oshun/web/e2e/studio-isis-model-registry.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-model-registry.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore src/components/studio/StudioIsisModelRegistryWorkspace.tsx src/app/studio/isis/model-registry/page.tsx src/components/__tests__/StudioIsisModelRegistryWorkspace.test.tsx e2e/studio-isis-model-registry.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-isis-model-registry-route.test.ts
    • passed: 1 file, 7 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisModelRegistryWorkspace.test.tsx src/components/__tests__/StudioIsisModelRegistryWorkspace.integration.test.tsx src/components/__tests__/StudioIsisModelRegistryPage.test.tsx src/components/__tests__/StudioIsisModelRegistryRouteMap.test.ts
    • passed: 4 files, 8 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-isis-model-registry.spec.ts --project=chromium
    • passed: 8 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 54 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

255. 2026-07-01 Studio Isis job-submission coverage#

Closed the focused /studio/isis/job-submission browser coverage gap for the V1 Studio job-governance route. The new Playwright spec proves the direct route remains Studio-boundary hard-blocked, then primes an authenticated Studio admin shell through the localhost-only lane bypass and forwards browser GET/POST requests to the real local BFF. The happy path asserts the real @isis/job-envelope submission catalog contract: 18 generation types, priorities low / normal / high / urgent, default form state, route-map articles, sibling quick-actions, bearer auth on the catalog request, and 44px hit targets for the type select, priority select, JSON textarea, submit button, and quick-action links.

The browser coverage also builds a valid music-generation envelope through the live BFF, verifies native pending-submit disablement, and proves the route does not fabricate envelopes for client-only malformed JSON, live BFF invalid_payload 400s, or strict zod enum validation issues surfaced as data-job-issues / data-job-issue="type". Loading, 503 catalog error, malformed catalog, non-admin unauthorized, and anonymous redirect-before-render states are also covered. The route still builds/validates an envelope rather than enqueueing it; queue handoff, route-map sub-path implementations, and manual AT/touch-device/offline/telemetry passes remain product hardening items.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisJobSubmissionWorkspace.tsx apps/oshun/web/src/app/studio/isis/job-submission/page.tsx apps/oshun/web/src/components/__tests__/StudioIsisJobSubmissionWorkspace.test.tsx apps/oshun/web/e2e/studio-isis-job-submission.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-job-submission.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore src/components/studio/StudioIsisJobSubmissionWorkspace.tsx src/app/studio/isis/job-submission/page.tsx src/components/__tests__/StudioIsisJobSubmissionWorkspace.test.tsx e2e/studio-isis-job-submission.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-isis-job-submission-route.test.ts
    • passed: 1 file, 6 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisJobSubmissionWorkspace.test.tsx src/components/__tests__/StudioIsisJobSubmissionWorkspace.integration.test.tsx src/components/__tests__/StudioIsisJobSubmissionRouteMap.test.ts
    • passed: 3 files, 6 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 51 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-isis-job-submission.spec.ts --project=chromium
    • passed: 8 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 51 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 54 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

256. 2026-07-01 Studio Isis job-management coverage#

Closed the focused /studio/isis/job-management browser coverage gap for the V1 Studio generation-job queue route. The new Playwright spec proves the direct route remains Studio-boundary hard-blocked, then primes an authenticated Studio admin shell through the localhost-only lane bypass and forwards browser GET/POST requests to the real local BFF. The happy path seeds live /v1/generation/jobs rows through the BFF, asserts queued and failed jobs in the queue console, verifies job-id search, status/kind filters, selected request and error detail, route-map articles, sibling quick-actions, bearer auth on the catalog request, and 44px hit targets for filters, process/retry buttons, job rows, and quick-action links.

The browser coverage also drains a real queued unknown-provider job with the workspace's { max: 25 } worker tick and verifies the fail-closed provider_not_configured result, then re-queues a failed job through the real retry endpoint and proves the UI reloads to queued. Loading, empty queue, 503 service failure, malformed queue response, non-admin unauthorized, and anonymous redirect-before-render states are covered. The workspace now validates every job row before rendering and includes the BFF release-gate statuses blocked and needs_review; route-map sub-path implementations and manual AT/touch-device/offline/telemetry passes remain product hardening items.

Verification:

  • command -v psql && psql --version
    • passed: /usr/bin/psql, psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisJobManagementWorkspace.tsx apps/oshun/web/src/app/studio/isis/job-management/page.tsx apps/oshun/web/src/components/__tests__/StudioIsisJobManagementWorkspace.test.tsx apps/oshun/web/e2e/studio-isis-job-management.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore src/components/studio/StudioIsisJobManagementWorkspace.tsx src/app/studio/isis/job-management/page.tsx src/components/__tests__/StudioIsisJobManagementWorkspace.test.tsx e2e/studio-isis-job-management.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/generation/jobs-route.test.ts
    • passed: 1 file, 17 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisJobManagementWorkspace.test.tsx src/components/__tests__/StudioIsisJobManagementWorkspace.integration.test.tsx src/components/__tests__/StudioIsisJobManagementPage.test.tsx src/components/__tests__/StudioIsisJobManagementRouteMap.test.ts
    • passed: 4 files, 7 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 51 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-isis-job-management.spec.ts --project=chromium
    • passed: 7 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 51 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 54 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

257. 2026-07-01 Studio Isis job-envelope coverage#

Closed the focused /studio/isis/job-envelope browser coverage gap for the V1 Studio job-envelope normalization route. The new Playwright spec proves the direct legacy Studio Isis route remains Studio-boundary hard-blocked, then primes an authenticated Studio shell through the localhost-only lane bypass and forwards browser GET/POST requests to the real local BFF. The happy path asserts the real @isis/job-envelope normalization catalog contract: seven control fields, live field/vocabulary catalog load, route-map articles, quick-actions, embedded job-pipeline lane shells, the GPU Worker AAA embed-gate, bearer auth on the catalog request, and 44px hit targets for raw-value inputs, the normalize button, and quick-action links.

The browser coverage also submits the default alias-heavy raw envelope through the live BFF and verifies canonical coercion (BLENDER_RENDERblender-render, openposepose, feature-mapcached-feature-map) with 7 resolved · 0 unresolved. It then edits ipAdapterMode to not-a-real-mode and proves the UI renders 6 resolved · 1 unresolved without fabricating a canonical value. Loading, 503 catalog error, malformed catalog, malformed successful normalization, normalize network failure, non-admin unauthorized, and anonymous redirect-before-render states are covered. The route-map deep paths remain advertised contract paths, and manual AT/touch-device/offline/telemetry passes remain product hardening items.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisJobEnvelopeNormalizationLane.tsx apps/oshun/web/src/app/studio/isis/job-envelope/page.tsx apps/oshun/web/src/components/__tests__/StudioIsisJobEnvelopeWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioIsisJobEnvelopeWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-isis-job-envelope.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-job-envelope.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/matrix/coverage.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore src/components/studio/StudioIsisJobEnvelopeNormalizationLane.tsx src/app/studio/isis/job-envelope/page.tsx src/components/__tests__/StudioIsisJobEnvelopeWorkspace.test.tsx src/components/__tests__/StudioIsisJobEnvelopeWorkspace.integration.test.tsx e2e/studio-isis-job-envelope.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-isis-job-envelope-route.test.ts
    • passed: 1 file, 6 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisJobEnvelopeWorkspace.test.tsx src/components/__tests__/StudioIsisJobEnvelopeWorkspace.integration.test.tsx src/components/__tests__/StudioIsisJobEnvelopePage.test.tsx src/components/__tests__/StudioIsisJobEnvelopeRouteMap.test.ts
    • passed: 4 files, 7 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 51 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-isis-job-envelope.spec.ts --project=chromium
    • passed: 6 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 51 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 54 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

258. 2026-07-01 Studio Isis budget-management coverage#

Closed the focused /studio/isis/budget-management browser coverage gap for the V1 Studio GPU spend-governance route. The new Playwright spec proves the direct legacy Studio Isis route remains Studio-boundary hard-blocked, then primes an authenticated Studio shell through the localhost-only lane bypass and forwards browser GET requests to the real local BFF. The happy path asserts the real @isis/runpod-surface cost-quota evaluator contract: four seeded tenants covering ok, alert, kill-switch-armed, and over-cap, status-count rollup, route-map articles, sibling quick-actions, bearer auth on the catalog request, and 44px hit targets for the status filter and quick-action links.

The browser coverage also narrows the tenant list with the status filter and verifies the operator preference is persisted locally. Loading, 503 service failure, malformed successful response, filtered-empty state, fetch/network failure, non-admin unauthorized, and anonymous redirect-before-render states are covered. The workspace now validates every tenant row, budget status, status count, and persisted filter value before rendering; route-map deep paths remain advertised contract paths, and manual AT/touch-device/offline/telemetry passes remain product hardening items.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisBudgetManagementWorkspace.tsx apps/oshun/web/src/app/studio/isis/budget-management/page.tsx apps/oshun/web/src/components/__tests__/StudioIsisBudgetManagementWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioIsisBudgetManagementWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-isis-budget-management.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-budget-management.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/matrix/coverage.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore src/components/studio/StudioIsisBudgetManagementWorkspace.tsx src/app/studio/isis/budget-management/page.tsx src/components/__tests__/StudioIsisBudgetManagementWorkspace.test.tsx src/components/__tests__/StudioIsisBudgetManagementWorkspace.integration.test.tsx e2e/studio-isis-budget-management.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-isis-budget-management-route.test.ts
    • passed: 1 file, 3 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisBudgetManagementWorkspace.test.tsx src/components/__tests__/StudioIsisBudgetManagementWorkspace.integration.test.tsx src/components/__tests__/StudioIsisBudgetManagementPage.test.tsx src/components/__tests__/StudioIsisBudgetManagementRouteMap.test.ts
    • passed: 4 files, 7 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 51 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-isis-budget-management.spec.ts --project=chromium
    • passed: 6 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 51 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 54 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

259. 2026-07-01 Studio Isis cost-tracking coverage#

Closed the focused /studio/isis/cost-tracking browser coverage gap for the V1 Studio LLM spend-governance route. The new Playwright spec proves the direct legacy Studio Isis route remains Studio-boundary hard-blocked, then primes an authenticated Studio shell through the localhost-only lane bypass and forwards browser GET/POST requests to the real local BFF. The happy path asserts the real @isis/token-budget pricing catalog and current rollup, records a unique claude-3.5-sonnet usage event, verifies the exact $0.0180 computed cost in the result, row, rollup, and provider bucket, then proves duplicate ids and unknown models fail closed.

The browser coverage also covers client token-count validation, native pending submit disablement, bearer auth on list and record requests, route-map articles, sibling quick-actions, and 44px hit targets for form controls and quick-action links. Loading, 503 service failure, malformed successful catalog, malformed successful record response, fetch/network failure, non-admin unauthorized, and anonymous redirect-before-render states are covered. The workspace now validates every pricing row, usage record, provider/model rollup, total-record count, and successful write response before rendering or acknowledging a cost entry. The record ledger remains in the service session store until production persistence is defined; route-map deep paths remain advertised contract paths, and manual AT/touch-device/offline/telemetry passes remain product hardening items.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisCostTrackingWorkspace.tsx apps/oshun/web/src/app/studio/isis/cost-tracking/page.tsx apps/oshun/web/src/components/__tests__/StudioIsisCostTrackingWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioIsisCostTrackingWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-isis-cost-tracking.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-cost-tracking.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore src/components/studio/StudioIsisCostTrackingWorkspace.tsx src/app/studio/isis/cost-tracking/page.tsx src/components/__tests__/StudioIsisCostTrackingWorkspace.test.tsx src/components/__tests__/StudioIsisCostTrackingWorkspace.integration.test.tsx e2e/studio-isis-cost-tracking.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-isis-cost-tracking-route.test.ts
    • passed: 1 file, 7 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisCostTrackingWorkspace.test.tsx src/components/__tests__/StudioIsisCostTrackingWorkspace.integration.test.tsx src/components/__tests__/StudioIsisCostTrackingPage.test.tsx src/components/__tests__/StudioIsisCostTrackingRouteMap.test.ts
    • passed: 4 files, 10 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 51 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-isis-cost-tracking.spec.ts --project=chromium
    • passed: 7 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 51 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 54 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

260. 2026-07-01 Studio Isis resource-recommendations coverage#

Closed the focused /studio/isis/resource-recommendations browser coverage gap for the V1 Studio LLM downgrade-governance route. The new Playwright spec proves the direct legacy Studio Isis route remains Studio-boundary hard-blocked, then primes an authenticated Studio shell through the localhost-only lane bypass and forwards browser GET/POST requests to the real local BFF. The happy path asserts the live fallback chain and reason catalog, renders the seeded rec-opus-budget downgrade and rec-haiku-cost no-downgrade recommendations, writes a unique claude-3-opus downgrade request, verifies the expected Sonnet fallback and 80.0% savings, then proves duplicate ids, cheapest-model no-downgrade requests, and off-chain model payloads fail closed.

The browser coverage also covers client id/model/reason validation, native pending submit disablement, bearer auth on list and record requests, route-map articles, sibling quick-actions, and 44px hit targets for form controls and quick-action links. Loading, 503 service failure, malformed successful catalog, malformed successful record response, fetch/network failure, non-admin unauthorized, and anonymous redirect-before-render states are covered. The workspace now validates every fallback-chain entry, reason, recommendation record, downgrade target, and successful write response before rendering or acknowledging a recommendation. Recommendation persistence remains in the service session store until production persistence is defined; route-map deep paths remain advertised contract paths, and manual AT/touch-device/offline/ telemetry passes remain product hardening items.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisResourceRecommendationsWorkspace.tsx apps/oshun/web/src/app/studio/isis/resource-recommendations/page.tsx apps/oshun/web/src/components/__tests__/StudioIsisResourceRecommendationsWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioIsisResourceRecommendationsWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-isis-resource-recommendations.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-resource-recommendations.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore src/components/studio/StudioIsisResourceRecommendationsWorkspace.tsx src/app/studio/isis/resource-recommendations/page.tsx src/components/__tests__/StudioIsisResourceRecommendationsWorkspace.test.tsx src/components/__tests__/StudioIsisResourceRecommendationsWorkspace.integration.test.tsx e2e/studio-isis-resource-recommendations.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-isis-resource-recommendations-route.test.ts
    • passed: 1 file, 6 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisResourceRecommendationsWorkspace.test.tsx src/components/__tests__/StudioIsisResourceRecommendationsWorkspace.integration.test.tsx src/components/__tests__/StudioIsisResourceRecommendationsPage.test.tsx src/components/__tests__/StudioIsisResourceRecommendationsRouteMap.test.ts
    • passed: 4 files, 10 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the run.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-isis-resource-recommendations.spec.ts --project=chromium
    • passed: 7 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 54 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

261. 2026-07-01 Studio Isis creator-monetization coverage#

Closed the focused /studio/isis/creator-monetization browser coverage gap for the V1 Studio marketplace payout-governance route. The new Playwright spec proves the direct legacy Studio Isis route remains Studio-boundary hard-blocked, then primes an authenticated Studio shell through the localhost-only lane bypass and forwards browser GET/POST requests to the real local BFF. The happy path asserts the live collaborator role/status catalog, writes the default 60/40 creator + modeler split, verifies the valid 100% plan and lead payee, then drives the real engine through a manual-review marketplace-terms warning and a blocked under-allocation warning. A live direct BFF POST also proves unknown roles reject with invalid_payload.

The browser coverage also covers client malformed/non-array JSON validation, native pending submit disablement, bearer auth on catalog and plan requests, route-map articles, sibling quick-actions, and 44px hit targets for the JSON textarea, submit button, and quick-action links. Loading, 503 service failure, malformed successful catalog, malformed successful plan response, fetch/network failure, non-admin unauthorized, and anonymous redirect-before-render states are covered. The workspace now validates every role/status catalog, normalized share, result status, warning, lead payee, and successful { ok: true, result } envelope before rendering or acknowledging a split plan. Canonical ownership for the cross-domain Aje/Hathor payout tail remains a product question; route-map deep paths remain advertised contract paths, and manual AT/touch-device/offline/ telemetry passes remain product hardening items.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisCreatorMonetizationWorkspace.tsx apps/oshun/web/src/app/studio/isis/creator-monetization/page.tsx apps/oshun/web/src/components/__tests__/StudioIsisCreatorMonetizationWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioIsisCreatorMonetizationWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-isis-creator-monetization.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-creator-monetization.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-ignore src/components/studio/StudioIsisCreatorMonetizationWorkspace.tsx src/app/studio/isis/creator-monetization/page.tsx src/components/__tests__/StudioIsisCreatorMonetizationWorkspace.test.tsx src/components/__tests__/StudioIsisCreatorMonetizationWorkspace.integration.test.tsx e2e/studio-isis-creator-monetization.spec.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-isis-creator-monetization-route.test.ts
    • passed: 1 file, 7 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisCreatorMonetizationWorkspace.test.tsx src/components/__tests__/StudioIsisCreatorMonetizationWorkspace.integration.test.tsx src/components/__tests__/StudioIsisCreatorMonetizationPage.test.tsx src/components/__tests__/StudioIsisCreatorMonetizationRouteMap.test.ts
    • passed: 4 files, 11 tests
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active; during the focused browser run, available memory stayed above 9.5 GiB and returned to 13 GiB.
  • pnpm --dir apps/oshun/web e2e -- e2e/studio-isis-creator-monetization.spec.ts --project=chromium
    • passed: 7 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 54 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

262. 2026-07-01 Studio Isis RIFE interpolation coverage#

Closed the focused /studio/isis/rife-interpolation browser coverage gap for the V1 Studio video-frame interpolation route. The new Playwright spec proves the direct legacy Studio Isis route remains Studio-boundary hard-blocked, then primes an authenticated Studio shell through the localhost-only lane bypass and forwards browser GET/POST requests to the real local BFF. The happy path asserts the live source/target fps catalog, writes the default exact 24→48 RIFE plan, verifies the per-pair generated-frame count and confidence estimate, then drives a 24→120 exact plan and an unsupported 30→48 plan failure. A live direct BFF POST also proves too few source frames reject with invalid_payload.

The browser coverage also covers client frame-count validation, native pending submit disablement, bearer auth on catalog and plan requests, route-map articles, sibling quick-actions, and 44px hit targets for the selects, source frames input, submit button, and quick-action links. Loading, 503 service failure, malformed successful catalog, malformed successful plan response, fetch/network failure, non-admin unauthorized, and anonymous redirect-before-render states are covered. The workspace now validates the fps catalog and every successful { ok: true, plan } envelope before rendering or acknowledging a plan. Actual RIFE execution dispatch remains a product integration question; route-map deep paths remain advertised contract paths, and manual AT/touch-device/offline/telemetry passes remain product hardening items.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisRifeInterpolationWorkspace.tsx apps/oshun/web/src/app/studio/isis/rife-interpolation/page.tsx apps/oshun/web/src/components/__tests__/StudioIsisRifeInterpolationWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioIsisRifeInterpolationWorkspace.integration.test.tsx apps/oshun/web/e2e/studio-isis-rife-interpolation.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-rife-interpolation.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/studio/isis/rife-interpolation/page.tsx src/components/studio/StudioIsisRifeInterpolationWorkspace.tsx
    • passed
  • pnpm --dir apps/oshun/bff exec eslint --no-warn-ignored src/routes/admin-isis-rife-interpolation.ts
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/admin-isis-rife-interpolation-route.test.ts
    • passed: 1 file, 5 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisRifeInterpolationWorkspace.test.tsx src/components/__tests__/StudioIsisRifeInterpolationWorkspace.integration.test.tsx src/components/__tests__/StudioIsisRifeInterpolationPage.test.tsx src/components/__tests__/StudioIsisRifeInterpolationRouteMap.test.ts
    • passed: 4 files, 10 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active; during the focused browser run, available memory stayed around 12 GiB and returned to 13 GiB.
  • pnpm --dir apps/oshun/web run e2e -- e2e/studio-isis-rife-interpolation.spec.ts --workers=1
    • passed: 7 passed
  • Resource gate before docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, and 50 GiB disk free before generation. No competing build/test/docs jobs were active.
  • pnpm docs:center
    • passed: rendered 2983 files.
  • pnpm docs:center:check
    • passed: all 2983 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths; 54 known imported-content warnings were surfaced as non-blocking.
  • pnpm docs:center:test
    • passed: 90 passed, 6 skipped.

243. 2026-06-30 Nisaba notebook create contract and coverage#

Closed the /nisaba/notebook/new create-form gap against the real Nisaba BFF. The client form now submits the live notebook-create payload { title, summary, visibility, tags: [] }, attaches both bearer auth and csrfHeaders(), normalizes the BFF mutation envelope, and emits text-safe submit/success/failure telemetry. Visibility is now a real radio group with aria-checked and roving keyboard focus.

The BFF notebook model persists visibility through create, update, list, and detail payloads, and the OpenAPI/source client contracts expose the field. The route contract tests were also brought back in line with the current honest empty Nisaba seed: notebooks, annotations, and grounded-evidence views now appear only after real mutations or a real grounding pipeline output, not as fabricated fixtures. psql was already available on the host at /usr/bin/psql (psql (PostgreSQL) 16.14), so no package install was needed.

Verification:

  • command -v psql
    • passed: /usr/bin/psql
  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/app/nisaba/notebook/new/NisabaNewNotebookForm.tsx apps/oshun/web/src/app/nisaba/notebook/new/NisabaNewNotebookForm.test.tsx apps/oshun/web/e2e/nisaba-notebook-new.spec.ts apps/oshun/web/src/analytics/nisabaStudyTelemetry.ts apps/oshun/web/src/analytics/nisabaStudyTelemetry.test.ts libs/oshun/analytics/src/types.ts libs/oshun/analytics/src/customer-taxonomy.ts libs/oshun/analytics/src/__tests__/customer-taxonomy.test.ts apps/oshun/bff/src/nisaba/state.ts apps/oshun/bff/src/routes/nisaba.ts apps/oshun/bff/src/nisaba/in-process-adapter.test.ts apps/oshun/bff/src/__tests__/search-route.test.ts apps/oshun/bff/src/__tests__/nisaba-route.test.ts apps/oshun/bff/src/__tests__/contract/nisaba-bff-contract.test.ts apps/oshun/bff/openapi/oshun-bff.openapi.yaml libs/openapi/src/specs/oshun-bff/oshun-bff-v1-contracts.yaml libs/openapi/src/generated/oshun-bff.ts apps/oshun/web/src/lib/hooks/use-bff.ts apps/oshun/mobile/src/network/oshun-bff-client.ts apps/oshun/web/src/components/domains/NisabaSurface.tsx apps/oshun/web/src/components/home/homeNisabaContinuationModels.ts WALKTHROUGH/customer/07-nisaba/nisaba-notebook-new.md WALKTHROUGH/journeys/nisaba-notebook-capture-and-cite.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/analytics/nisabaStudyTelemetry.test.ts src/app/nisaba/notebook/new/NisabaNewNotebookForm.test.tsx
    • passed: 2 files passed, 6 tests passed
  • pnpm --dir libs/oshun/analytics exec vitest run src/__tests__/customer-taxonomy.test.ts
    • passed: 1 file passed, 41 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/nisaba-route.test.ts src/nisaba/in-process-adapter.test.ts src/__tests__/search-route.test.ts
    • passed: 3 files passed, 34 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/contract/nisaba-bff-contract.test.ts
    • passed: 1 file passed, 5 tests passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/nisaba/notebook/new/NisabaNewNotebookForm.tsx src/app/nisaba/notebook/new/NisabaNewNotebookForm.test.tsx src/analytics/nisabaStudyTelemetry.ts src/analytics/nisabaStudyTelemetry.test.ts src/lib/hooks/use-bff.ts src/components/domains/NisabaSurface.tsx src/components/home/homeNisabaContinuationModels.ts e2e/nisaba-notebook-new.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/bff exec eslint --no-warn-ignored src/nisaba/state.ts src/routes/nisaba.ts src/nisaba/in-process-adapter.test.ts src/__tests__/search-route.test.ts src/__tests__/nisaba-route.test.ts src/__tests__/contract/nisaba-bff-contract.test.ts --max-warnings=0
    • passed
  • pnpm --dir libs/oshun/analytics exec eslint --no-warn-ignored src/types.ts src/customer-taxonomy.ts src/__tests__/customer-taxonomy.test.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/mobile exec eslint --no-warn-ignored src/network/oshun-bff-client.ts --max-warnings=0
    • passed
  • pnpm nx run @oshun/analytics:typecheck
    • passed
  • pnpm --dir apps/oshun/bff typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/mobile typecheck
    • passed
  • pnpm --filter @oshun/openapi run generate:oshun-v1-specs
    • passed: generated 7 Oshun V1 OpenAPI spec artifacts
  • pnpm oshun-v1:openapi:check
    • passed: validated 7 V1 spec artifacts, 6 typed API client packages, and BFF runtime drift
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, at least 7.1 GiB available during final focused Playwright, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the passing focused browser runs.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-notebook-new.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/nisaba-notebook-bff.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 5 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed

243. 2026-06-30 Profile safety resource-open telemetry coverage#

Closed the /profile/safety resource-open telemetry gap. The safety record now maps surfaced resource IDs to actionable destinations: us-988 renders as a tel:988 crisis-line link and audit-platform links back to the in-page profile safety record. Both hydrated and service-worker offline replay markup render the same labels and stable resource-link selectors.

The page emits lilith_safety_resource_opened when a member opens a surfaced resource, including the active frame ID, destination, and resource kind. The customer analytics taxonomy now records that implemented payload under canonical oshun.safety.resource_opened. The focused browser spec activates a real crisis frame through the operator BFF, loads the signed-in member's live /v1/safety/crisis-frames/mine projection, asserts the tel:988 target, and captures the browser-dispatched resource-open event from that live safety record.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/analytics/profileSafetyTelemetry.ts apps/oshun/web/src/analytics/profileSafetyTelemetry.test.ts apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.tsx apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.test.tsx apps/oshun/web/src/app/profile/safety/safety.module.css apps/oshun/web/e2e/profile-safety-crisis-recovery.spec.ts libs/oshun/analytics/src/types.ts libs/oshun/analytics/src/customer-taxonomy.ts WALKTHROUGH/customer/09-account/profile-safety.md WALKTHROUGH/journeys/crisis-aware-tone-policy.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm exec prettier --write apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.test.tsx libs/oshun/analytics/src/__tests__/customer-taxonomy.test.ts
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/analytics/profileSafetyTelemetry.test.ts src/app/profile/safety/ProfileSafetyJourney.test.tsx
    • passed: 2 files passed, 11 tests passed
  • pnpm --dir libs/oshun/analytics exec vitest run src/__tests__/customer-taxonomy.test.ts
    • passed: 1 file passed, 41 tests passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/analytics/profileSafetyTelemetry.ts src/analytics/profileSafetyTelemetry.test.ts src/app/profile/safety/ProfileSafetyJourney.tsx src/app/profile/safety/ProfileSafetyJourney.test.tsx e2e/profile-safety-crisis-recovery.spec.ts --max-warnings=0
    • passed
  • pnpm exec eslint --no-warn-ignored libs/oshun/analytics/src/types.ts libs/oshun/analytics/src/customer-taxonomy.ts libs/oshun/analytics/src/__tests__/customer-taxonomy.test.ts --max-warnings=0
    • passed
  • pnpm nx run @oshun/analytics:typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, at least 7.3 GiB available during focused Playwright, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the passing focused browser run.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-safety-crisis-recovery.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • pnpm exec prettier --write WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

247. 2026-06-30 Arete weekly-review close telemetry#

Closed the browser-observable telemetry gap on the Arete weekly-review terminal footer actions. AreteReviewClose now emits arete_weekly_review_closed only after the real /v1/arete/review/close response returns, carrying the persisted weekLabel, action, state, and closureId envelope plus sourcePath: '/arete/review'.

The focused browser spec still drives the real close/save writes through the Playwright-managed BFF, verifies /v1/arete/review/closed persistence, and returns to /arete to prove the continuity card is read from /v1/arete/room. It now also captures and asserts the analytics event for both "Close the week" (week-closed) and "Save as private letter" (kept-private). The journey remains partial for the explicitly unmodeled Sunday push/OS notification path, per-act completion state, and richer review-derived plan-adjustment read-back.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/analytics/areteReviewTelemetry.ts apps/oshun/web/src/analytics/areteReviewTelemetry.test.ts apps/oshun/web/src/components/lilith/AreteReviewClose.tsx apps/oshun/web/e2e/arete-review-close.spec.ts WALKTHROUGH/customer/04-arete/arete-review.md WALKTHROUGH/customer/04-arete/arete.md WALKTHROUGH/journeys/weekly-review-arete.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/analytics/areteReviewTelemetry.ts src/analytics/areteReviewTelemetry.test.ts src/components/lilith/AreteReviewClose.tsx e2e/arete-review-close.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/analytics/areteReviewTelemetry.test.ts
    • passed: 1 file passed, 1 test passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before the final focused browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the passing focused browser run.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/arete-review-close.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 2 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

246. 2026-06-30 AAA upgrade browser telemetry coverage#

Closed the browser-observable telemetry gap on the AAA upgrade disclosure. The server route still preserves the fail-closed entitlement boundary and open redirect protections, while a small client action component now emits aaa_upgrade_viewed, aaa_upgrade_open_yemaya_clicked, and aaa_upgrade_back_to_gallery_clicked through the existing oshun-analytics:event bridge without adding DOM telemetry hooks.

The focused browser spec now proves the full customer-facing telemetry post-condition: an AAA-tier session redirected from /studio/yemaya/studio-web sees the disclosure, records the source route, keeps both CTA destinations intact, and emits distinct analytics payloads for each CTA click. The direct /aaa-upgrade render also records a null source path, so the flow covers both redirected and direct disclosure visits. The remaining observability gap is proxy-side structured access-log telemetry for the 307 and 404 boundary decisions, which is not browser-observable.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/analytics/aaaUpgradeTelemetry.ts apps/oshun/web/src/app/aaa-upgrade/AaaUpgradeActions.tsx apps/oshun/web/src/app/aaa-upgrade/page.tsx apps/oshun/web/e2e/aaa-upgrade-entitlement-bounce.spec.ts WALKTHROUGH/customer/13-system/aaa-upgrade.md WALKTHROUGH/journeys/aaa-upgrade-entitlement-bounce.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/analytics/aaaUpgradeTelemetry.ts src/app/aaa-upgrade/AaaUpgradeActions.tsx src/app/aaa-upgrade/page.tsx src/app/__tests__/aaa-upgrade.test.tsx e2e/aaa-upgrade-entitlement-bounce.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/app/__tests__/aaa-upgrade.test.tsx
    • passed: 1 file passed, 2 tests passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before the final focused browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the passing focused browser run.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/aaa-upgrade-entitlement-bounce.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 7 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

243. 2026-06-30 Profile memory edit-conflict browser coverage#

Closed the Step 4 edit-conflict gap for memory-edit-pause-forget. The /profile/memory controls now listen for same-origin PROFILE_MEMORY_STORAGE_KEY storage events, refresh from another open tab, and preserve a dirty editor draft plus its original editBaseRevisionCount instead of silently rebasing the draft when the selected fact changes underneath it.

Conflict resolution now handles the replacement-style Iris edit model: Keep remote version selects the active remote replacement and rebases the editor, while Save my edit as the next revision targets the active replacement when the original stale item has already been soft-deleted. The Playwright journey uses two pages in the same browser context so tab B's save triggers a real browser storage event in tab A, then asserts stale-draft preservation, data-profile-memory-edit-conflict, keep-remote, overwrite, and both conflict telemetry events.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/profile/memory/ProfileMemoryControls.tsx apps/oshun/web/src/app/profile/memory/ProfileMemoryControls.test.tsx apps/oshun/web/e2e/memory-edit-pause-forget.spec.ts WALKTHROUGH/customer/09-account/profile-memory.md WALKTHROUGH/journeys/memory-edit-pause-forget.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/profile/memory/ProfileMemoryControls.tsx src/app/profile/memory/ProfileMemoryControls.test.tsx e2e/memory-edit-pause-forget.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/app/profile/memory/ProfileMemoryControls.test.tsx src/app/profile/memory/memory-state.test.ts
    • passed: 2 files passed, 18 tests passed
  • Resource gates before typecheck / Playwright
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 50 GiB disk free, and no competing build/test gates; during Playwright, available memory stayed above 6.3 GiB.
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/memory-edit-pause-forget.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "step 4"
    • passed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/memory-edit-pause-forget.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 16 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed

244. 2026-06-30 Tenant member audit events#

Closed the tenant-onboard step 2 audit-chain gap for the single-member write paths. The tenant invite route now records tenant.member_invite after a successful invite write, and the direct add-member route records tenant.member_create after a successful active-member allocation. Both events carry the tenant id, actor id, target id, role/status details, and write-specific payload fields, then flow through the existing tenant-scoped GET /v1/tenant-console/audit?tenantId=... read path.

The BFF route test covers both audit events using the injected audit store and tenant admin audit read-back. The real-HTTP Playwright BFF section now creates a live invite and direct member add against the dev BFF, reads the tenant audit cockpit endpoint, and asserts the event user, target id, and payload fields. The walkthroughs now mark the single-member audit events as implemented while keeping the remaining branded outbound email, CSV import/bulk per-row audit, and broader audit-chain reconciliation gaps explicit.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1) is installed in the environment.
  • pnpm exec prettier --write apps/oshun/bff/src/routes/admin-tenant-invitations.ts apps/oshun/bff/src/app.ts apps/oshun/bff/src/__tests__/admin-tenant-invitations-route.test.ts apps/oshun/web/e2e/tenant-member-actions.spec.ts WALKTHROUGH/journeys/tenant-onboard.md WALKTHROUGH/journeys/tenant-bulk-member-invite-scim.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/operator/operator-tenant.md
    • passed
  • pnpm --dir apps/oshun/bff exec eslint --no-warn-ignored src/routes/admin-tenant-invitations.ts src/app.ts src/__tests__/admin-tenant-invitations-route.test.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/tenant-member-actions.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-tenant-invitations-route.test.ts src/routes/tenant-console-reads.test.ts
    • passed: 2 files passed, 10 tests passed
  • pnpm --dir apps/oshun/bff typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before verification, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the passing focused browser run. During Playwright, memory stayed above 7.8 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-member-actions.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 8 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

246. 2026-06-30 Profile memory Iris export receipt#

Closed the synced /profile/memory export-receipt gap. When the memory page is hydrated from real Iris review data, Build export now first posts to /v1/iris/adapter/export?role=settings with JSON, consent, opt-out, and metadata export options. The page renders the returned non-secret receipt (exportId, memory count, checksum) and still exposes the local signed JSON artifact for download and inspection.

The real-infra Playwright coverage writes a profile fact through the real Iris remember route, hydrates /profile/memory through review and consents, captures the export request/response, asserts the receipt + toast + preview, and keeps the local signed export JSON assertion for the real user id and iris-data-storage-consent. The remaining honest gaps are DSAR request id persistence as an IrisDataRightsRequest and full-clear execution, which remains server-cron-bound.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1) is installed in the environment.
  • pnpm exec prettier --write apps/oshun/web/src/app/profile/memory/ProfileMemoryControls.tsx apps/oshun/web/src/app/profile/memory/memory-controls.module.css apps/oshun/web/src/app/profile/memory/memory-state.ts apps/oshun/web/src/app/profile/memory/ProfileMemoryControls.test.tsx apps/oshun/web/e2e/memory-edit-pause-forget.spec.ts WALKTHROUGH/customer/09-account/profile-memory.md WALKTHROUGH/journeys/memory-edit-pause-forget.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/app/profile/memory/ProfileMemoryControls.test.tsx src/app/profile/memory/memory-state.test.ts
    • passed: 2 files passed, 19 tests passed.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/profile/memory/ProfileMemoryControls.tsx src/app/profile/memory/memory-state.ts src/app/profile/memory/ProfileMemoryControls.test.tsx e2e/memory-edit-pause-forget.spec.ts --max-warnings=0
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • Resource gates before focused typecheck / Playwright / docs-center
    • 15 GiB RAM, 13 GiB available before typecheck and Playwright, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the focused browser run. During Playwright, available memory stayed at or above 6.5 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/memory-edit-pause-forget.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 16 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

245. 2026-06-30 Profile memory single-fact Iris delete#

Closed the /profile/memory synced single-fact forget gap. When the selected fact came from the real Iris review read, Clear this fact now calls the BFF single-memory delete endpoint with mode=soft before applying the local view mutation, and the step-up-gated hard delete calls the same endpoint with mode=hard before mirroring the tombstone into the local control state. The web client now consumes the canonical Iris delete summary (deletedCount/deletedMemoryIds/warnings) returned by /v1/iris/adapter/memory/:memoryId instead of assuming the lower-level storage adapter result shape.

The real-infra Playwright coverage writes a profile fact through POST /v1/iris/adapter/remember?role=assistant, captures its real memory id from /v1/iris/adapter/review, performs the /profile/memory step-up hard delete in Chromium, then reads review again and proves neither the memory id nor content is returned. The customer walkthrough and journey coverage now mark synced single-fact hard-delete as verified while keeping edit, opt-out, scope change, category/scope clear, full-clear, and export listed as remaining local-only writes.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1) is installed in the environment.
  • pnpm exec prettier --write apps/oshun/web/src/app/profile/memory/ProfileMemoryControls.tsx apps/oshun/web/src/app/profile/memory/memory-state.ts apps/oshun/web/src/app/profile/memory/memory-state.test.ts apps/oshun/web/e2e/memory-edit-pause-forget.spec.ts WALKTHROUGH/customer/09-account/profile-memory.md WALKTHROUGH/journeys/memory-edit-pause-forget.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/profile/memory/ProfileMemoryControls.tsx src/app/profile/memory/memory-state.ts src/app/profile/memory/memory-state.test.ts e2e/memory-edit-pause-forget.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/memory-edit-pause-forget.spec.ts --max-warnings=0
    • passed after tightening the final read-back assertion for the canonical records response.
  • pnpm --dir apps/oshun/web exec vitest run src/app/profile/memory/ProfileMemoryControls.test.tsx src/app/profile/memory/memory-state.test.ts
    • passed: 2 files passed, 17 tests passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/iris-route.test.ts
    • passed: 1 file passed, 11 tests passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before the final focused browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the passing focused browser run. During Playwright, available memory stayed above 6.1 GiB.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/memory-edit-pause-forget.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 15 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

243. 2026-06-30 Tenant member register live refresh#

Closed the visible roster-refresh gap in the tenant onboarding journey. The operator /operator/tenant member register now preserves the fixture ledger, then refreshes from the real tenant-console cockpit read after successful Invite / + Add member writes. Pending invites append live rows with data-tenant-member-status="invited", the invited email, role label, pending sitting cell, and "invite sent" last-seen cell. Direct add-member writes append live active-member rows with the added user ID, default member role, 0 / 0d, and not seen.

The browser E2E now bridges both the admin write routes and the tenant-scoped member read route to the live BFF with isolated test tenants, so repeated runs do not consume the shared fixture tenant's 25-seat pool. The same focused run keeps the operator-surface regression contract green: the initial page still renders the eight fixture rows and all existing table/dialog anchors.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/lib/lilith-data/types.ts apps/oshun/web/src/components/lilith/TenantMemberActions.tsx apps/oshun/web/src/components/lilith/TenantMemberRegister.tsx apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/e2e/tenant-member-actions.spec.ts WALKTHROUGH/journeys/tenant-onboard.md WALKTHROUGH/operator/operator-tenant.md WALKTHROUGH/journeys/coverage.md
    • passed
  • Resource gates before focused typecheck / Playwright / docs-center
    • 15 GiB RAM, at least 8.0 GiB available during the focused Playwright run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the passing focused browser run.
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/lib/lilith-data/types.ts src/components/lilith/TenantMemberActions.tsx src/components/lilith/TenantMemberRegister.tsx src/components/lilith/operator.tsx e2e/tenant-member-actions.spec.ts --max-warnings=0
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-member-actions.spec.ts e2e/operator-surfaces.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 14 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed

237. 2026-06-30 Profile memory BFF retry coverage#

Closed the /profile/memory recoverable hydration-error gap. The memory state helper now distinguishes synced, empty, and unavailable Iris review reads instead of collapsing empty and failed BFF reads into null. The page keeps cached rows visible on unavailable reads, exposes data-profile-memory-bff-status with a Retry Iris read action, and clears the alert after a retry reaches the real BFF hydration path.

The focused Playwright failure-mode leg seeds a real Iris session plus cached memory, aborts the initial browser review read, verifies cached facts remain visible with the retry banner, then removes the abort and waits for the real /v1/iris/adapter/review?role=settings&pageSize=100 retry response before asserting the alert is gone. Unit coverage now proves empty reviews remain non-destructive while unavailable reads surface as an explicit status.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/profile/memory/ProfileMemoryControls.tsx apps/oshun/web/src/app/profile/memory/memory-controls.module.css apps/oshun/web/src/app/profile/memory/memory-state.ts apps/oshun/web/src/app/profile/memory/memory-state.test.ts apps/oshun/web/src/app/profile/memory/ProfileMemoryControls.test.tsx apps/oshun/web/e2e/memory-edit-pause-forget.spec.ts WALKTHROUGH/customer/09-account/profile-memory.md WALKTHROUGH/journeys/memory-edit-pause-forget.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/app/profile/memory/memory-state.test.ts src/app/profile/memory/ProfileMemoryControls.test.tsx
    • passed: 2 files passed, 16 tests passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/profile/memory/ProfileMemoryControls.tsx src/app/profile/memory/memory-state.ts src/app/profile/memory/ProfileMemoryControls.test.tsx src/app/profile/memory/memory-state.test.ts e2e/memory-edit-pause-forget.spec.ts --max-warnings=0
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before browser/docs gates, 30 GiB swap free, 50 GiB disk free. No competing build/test/docs jobs were active; the focused Playwright run peaked at 6.4 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/memory-edit-pause-forget.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 14 passed
  • pnpm docs:center
    • passed: rendered 2976 files
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped

237. 2026-06-30 Settings connected-service/profile projection coverage#

Closed the direct /settings account-surface gap where connected services, connected domains, and domain statistics were documented as component-local demo or presentational rows. The profile contract now carries domainStats and connectedServices; /v1/profile projects connected services from real per-user BFF state by reading calendar OAuth connections and notification channel bindings. The settings panel renders those profile projections, routes calendar service actions to /profile?path=calendar, routes notification channel actions to /profile?path=notifications, and routes connected-domain management to /domains/<id>?origin=profile.

The focused Playwright journey seeds a verified email channel through the real /v1/profile/channels/* BFF flow, opens direct /settings, asserts the projected connected notification-channel row, and drives the service/domain management navigations. The BFF profile-route unit test also seeds a real calendar connection and verified channel binding, proves the profile projection, and asserts the calendar refresh token is not leaked.

Verification:

  • pnpm exec prettier --write libs/oshun/auth/src/profile-store.ts libs/oshun/auth/src/__tests__/profile-store.test.ts apps/oshun/bff/src/profile/state.ts apps/oshun/bff/src/routes/profile.ts apps/oshun/bff/src/__tests__/profile-route.test.ts apps/oshun/web/src/lib/auth-context.tsx apps/oshun/web/src/profile/profile-sync.ts apps/oshun/web/src/components/ProfileSettingsPanel.tsx apps/oshun/web/src/components/__tests__/ProfileSettingsPanel.test.tsx apps/oshun/web/e2e/profile-settings-flows.spec.ts WALKTHROUGH/customer/09-account/settings.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, 31 GiB swap, and 50 GiB disk free. No competing build/test process was active before the focused browser run; the run was supervised and memory remained above the safety threshold.
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/profile-route.test.ts
    • passed: 1 file passed, 5 tests passed
  • pnpm exec vitest run --config libs/oshun/auth/vitest.config.ts libs/oshun/auth/src/__tests__/profile-store.test.ts
    • passed: 1 file passed, 4 tests passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/ProfileSettingsPanel.test.tsx
    • passed: 1 file passed, 67 tests passed
  • pnpm nx run @oshun/auth-client:typecheck
    • passed
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm nx run @oshun/web:lint
    • passed with existing warnings only
  • pnpm exec eslint libs/oshun/auth/src/profile-store.ts libs/oshun/auth/src/__tests__/profile-store.test.ts apps/oshun/bff/src/profile/state.ts apps/oshun/bff/src/routes/profile.ts apps/oshun/bff/src/__tests__/profile-route.test.ts apps/oshun/web/src/lib/auth-context.tsx apps/oshun/web/src/profile/profile-sync.ts apps/oshun/web/src/components/ProfileSettingsPanel.tsx apps/oshun/web/src/components/__tests__/ProfileSettingsPanel.test.tsx apps/oshun/web/e2e/profile-settings-flows.spec.ts
    • passed: 0 errors; repository ignore warnings for ignored test/e2e files.
  • pnpm nx run @oshun/auth-client:lint
    • attempted; blocked by pre-existing project-wide auth lint errors outside this slice (billing-store.ts, customer-support-history-store.ts, data-rights-store.ts, preferences-store.ts, privacy-store.ts). Touched auth files pass the file-scoped ESLint gate above.
  • pnpm nx run @oshun/bff:lint
    • attempted; blocked by pre-existing project-wide BFF lint errors outside this slice (module-boundary, duplicate-import, and no-useless-assignment errors across unrelated accessibility/Aja/Yemaya/admin routes). Touched BFF files pass the file-scoped ESLint gate above.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-settings-flows.spec.ts --grep "connected management actions"
    • passed: 1 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

238. 2026-06-30 Profile Telegram live-status polling coverage#

Closed the account Telegram bridge gap where the not-linked page required a manual re-navigation after the user opened the Telegram deep link. The server-rendered route still fetches the first /v1/telegram/link snapshot, but the client state panel now owns the visible card, polls the authenticated account-scoped BFF read while the nonce is unlinked, and repaints in place to the linked chat state once the real /telegram/webhook /start link-<nonce> path completes the nonce.

The focused Playwright journey now opens /profile/telegram in the not-linked state, verifies the live t.me href, completes that exact nonce through the real Telegram webhook, confirms BFF linked read-back, then waits for the same browser URL to repaint from data-profile-telegram-live-status="watching" to "linked" with the /unlink instruction visible. Existing refresh, expiry, mobile/offline, anonymous redirect, telemetry-hook absence, and fail-closed invalid-bearer coverage remain intact.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/profile/telegram/ProfileTelegramLinkPanel.tsx apps/oshun/web/src/app/profile/telegram/page.tsx apps/oshun/web/src/app/profile/telegram/ProfileTelegramLinkPanel.test.tsx apps/oshun/web/e2e/profile-telegram-bridge.spec.ts WALKTHROUGH/customer/09-account/profile-telegram.md WALKTHROUGH/matrix/coverage.md
    • passed
  • Resource gates before focused Playwright
    • 15 GiB RAM, 31 GiB swap, and 50 GiB disk free. No competing build/test process was active before the focused browser run; during the run available memory stayed at or above 12 GiB.
  • pnpm --dir apps/oshun/web exec vitest run src/app/profile/telegram/ProfileTelegramLinkPanel.test.tsx
    • passed: 1 file passed, 3 tests passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/profile/telegram/ProfileTelegramLinkPanel.tsx src/app/profile/telegram/page.tsx src/app/profile/telegram/ProfileTelegramLinkPanel.test.tsx e2e/profile-telegram-bridge.spec.ts --max-warnings=0
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/__tests__/telegram-route.test.ts
    • passed: 1 file passed, 10 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-telegram-bridge.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

221. 2026-06-29 Tenant integrations operator UI coverage#

Closed the browser-visible operator UI gap for tenant-integrations-api-keys-webhooks on /operator/tenant. The Lilith tenant console now includes TenantIntegrationsPanel, which waits for the authenticated admin browser session, loads the live integrations snapshot, creates scoped API keys, creates webhook subscriptions, and runs the sandbox signed-delivery simulator through the shared api client and real BFF routes.

The focused Playwright spec seeds an admin-scoped browser session without mocking the BFF, then verifies the actual browser POST requests carry the admin bearer and the typed UI payloads. It also proves one-time raw API tokens and webhook signing secrets are surfaced only in the action result blocks and do not appear in the snapshot read-back, while the simulator returns a matched, successful, signature-verified delivery with an x-oshun-signature header.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/lilith/TenantIntegrationsPanel.tsx apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/e2e/tenant-integrations-ui.spec.ts
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/tenant-integrations-ui.spec.ts src/components/lilith/TenantIntegrationsPanel.tsx src/components/lilith/operator.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before launches, 29 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before the focused route checks; during Playwright, available memory stayed above 9 GiB, and during docs-center verification it stayed at or above 13 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/tenant-integrations-ui.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-surfaces.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 7 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files were fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

222. 2026-06-29 Operator studio route-DOM coverage#

Closed the page-DOM coverage gap for editorial-review-approval on /operator/studio. The Lilith operator studio surface now exposes stable, nonvisual data attributes around the shipped review queue, selected artifact pane, waveform/transcript, notes, and citation list, without changing the visual layout or product behavior.

The focused Playwright spec seeds an authenticated shell session and verifies the actual route render: all seven review queue rows with code/status/title/ byline/selected-state attributes, the current static queue-row boundary, the selected TR-047 artifact header/chips/waveform/transcript, the StudioReviewDecisionRow entry point, all review notes, citation statuses, and the anonymous redirect-before-render guard. The related editorial release-stream spec was also rerun to keep the existing decision-row approve/request-changes coverage green after adding the route-level hooks.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/lilith/operator.tsx apps/oshun/web/e2e/operator-studio-surface.spec.ts WALKTHROUGH/operator/operator-studio.md WALKTHROUGH/journeys/editorial-review-approval.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/operator-studio-surface.spec.ts src/components/lilith/operator.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before launches, 29 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before the focused route checks; during Playwright, available memory stayed at or above 12 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/operator-studio-surface.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 3 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/editorial-release-streams.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 8 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

223. 2026-06-29 Studio review-approval workflow real-BFF coverage#

Closed the focused route-level coverage gap for /studio/review-approval-workflows. The Studio approval-gate workspace now has the same testable pending-submit semantics and quick-action anchors as adjacent Studio console surfaces: data-aw-form-state, disabled/busy submit state, stage-name and role-satisfaction cells, and 44px quick-action links.

The focused Playwright spec seeds an admin-scoped browser session and drives the real approval-workflow BFF routes: catalog GET, default workflow POST/evaluate, rejected rollup, current-stage pointer, per-stage approval and role verdicts, malformed JSON zero-POST, live BFF 400 detail, catalog loading/error, non-admin fail-closed state, pending-submit lockout, and anonymous redirect-before-render. The walkthrough also now records that /operator/studio and /studio/review-approval-workflows are distinct surfaces today: the former is the operator editorial queue, while the latter is a stateless admin-scoped approval-gate evaluator.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioReviewApprovalWorkflowsWorkspace.tsx apps/oshun/web/src/app/studio/review-approval-workflows/page.tsx apps/oshun/web/e2e/studio-review-approval-workflows.spec.ts WALKTHROUGH/studio/collaboration/studio-review-approval-workflows.md WALKTHROUGH/operator/operator-studio.md WALKTHROUGH/journeys/editorial-review-approval.md WALKTHROUGH/journeys/lilith-studio-tara-scene-publish.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-review-approval-workflows.spec.ts src/components/studio/StudioReviewApprovalWorkflowsWorkspace.tsx src/app/studio/review-approval-workflows/page.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before launches, 29 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before focused route checks; during Playwright, available memory stayed at or above 12 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-review-approval-workflows.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioReviewApprovalWorkflowsWorkspace.test.tsx
    • passed: 3 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

224. 2026-06-29 Studio Hathor lore-validation timeline real-BFF coverage#

Closed the focused route-level coverage gap for /studio/hathor/lore-validation-timeline. The Hathor timeline validator lane now has testable catalog evidence, pending-submit semantics, quick-action anchors, and 44px automated touch checks for the main editable controls and quick-action links.

The focused Playwright spec seeds an admin-scoped Hathor browser session and drives the real timeline-validation BFF routes: catalog GET, seeded TIMELINE_ORDER_VIOLATION, opt-in TIMELINE_GAP_DETECTED, malformed JSON / empty array / invalid threshold zero-POST branches, live BFF invalid_event 400 detail, catalog loading/error, non-admin fail-closed state, pending-submit lockout, route-map / quick-action targets, shared axe, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorLoreValidationTimelineWorkspace.tsx apps/oshun/web/src/app/studio/hathor/lore-validation-timeline/page.tsx apps/oshun/web/e2e/studio-hathor-lore-validation-timeline.spec.ts WALKTHROUGH/studio/domain-bridges/hathor/studio-hathor-lore-validation-timeline.md WALKTHROUGH/matrix/coverage.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-hathor-lore-validation-timeline.spec.ts src/components/studio/StudioHathorLoreValidationTimelineWorkspace.tsx src/app/studio/hathor/lore-validation-timeline/page.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright
    • 15 GiB RAM, 13 GiB available before launches, 29 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before focused route checks.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorLoreValidationTimelineWorkspace.test.tsx src/components/__tests__/StudioHathorLoreValidationTimelineWorkspace.integration.test.tsx src/components/__tests__/StudioHathorLoreValidationTimelinePage.test.tsx src/components/__tests__/StudioHathorLoreValidationTimelineRouteMap.test.ts
    • passed: 4 files passed, 8 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-lore-validation-timeline-route.test.ts
    • passed: 1 file passed, 7 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-lore-validation-timeline.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 8 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

225. 2026-06-29 Studio Hathor lore-validation causality real-BFF coverage#

Closed the focused route-level coverage gap for /studio/hathor/lore-validation-causality. The Hathor causality validator lane now has testable catalog evidence, pending-submit semantics, quick-action anchors, and 44px automated touch checks for the main editable controls and quick-action links.

The focused Playwright spec seeds an admin-scoped Hathor browser session and drives the real causality-validation BFF routes: catalog GET, seeded CAUSALITY_CYCLE_DETECTED, opt-in CAUSALITY_ORPHAN_EFFECT / CAUSALITY_DANGLING_CAUSE, malformed JSON / empty array zero-POST branches, live BFF invalid_event 400 detail, catalog loading/error, non-admin fail-closed state, pending-submit lockout, route-map / quick-action targets, shared axe, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorLoreValidationCausalityWorkspace.tsx apps/oshun/web/src/app/studio/hathor/lore-validation-causality/page.tsx apps/oshun/web/e2e/studio-hathor-lore-validation-causality.spec.ts WALKTHROUGH/studio/domain-bridges/hathor/studio-hathor-lore-validation-causality.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-hathor-lore-validation-causality.spec.ts src/components/studio/StudioHathorLoreValidationCausalityWorkspace.tsx src/app/studio/hathor/lore-validation-causality/page.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright
    • 15 GiB RAM, 13 GiB available before launches, 29 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before focused route checks.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorLoreValidationCausalityWorkspace.test.tsx src/components/__tests__/StudioHathorLoreValidationCausalityWorkspace.integration.test.tsx src/components/__tests__/StudioHathorLoreValidationCausalityPage.test.tsx src/components/__tests__/StudioHathorLoreValidationCausalityRouteMap.test.ts
    • passed: 4 files passed, 8 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-lore-validation-causality-route.test.ts
    • passed: 1 file passed, 7 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-lore-validation-causality.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 8 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

226. 2026-06-29 Studio Hathor lore-validation taxonomy real-BFF coverage#

Closed the focused route-level coverage gap for /studio/hathor/lore-validation-taxonomy. The Hathor taxonomy validator lane now has testable catalog evidence, pending-submit semantics, quick-action anchors, and 44px automated touch checks for the main editable controls and quick-action links.

The focused Playwright spec seeds an admin-scoped Hathor browser session and drives the real taxonomy-validation BFF routes: catalog GET, seeded TAXONOMY_CYCLE_DETECTED, edited TAXONOMY_INVALID_TYPE, clean age → epoch hierarchy, TAXONOMY_HIERARCHY_VIOLATION warning, malformed JSON / empty array zero-POST branches, live BFF invalid_era 400 detail, catalog loading/error, non-admin fail-closed state, pending-submit lockout, route-map / quick-action targets, shared axe, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorLoreValidationTaxonomyWorkspace.tsx apps/oshun/web/src/app/studio/hathor/lore-validation-taxonomy/page.tsx apps/oshun/web/e2e/studio-hathor-lore-validation-taxonomy.spec.ts WALKTHROUGH/studio/domain-bridges/hathor/studio-hathor-lore-validation-taxonomy.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-hathor-lore-validation-taxonomy.spec.ts src/components/studio/StudioHathorLoreValidationTaxonomyWorkspace.tsx src/app/studio/hathor/lore-validation-taxonomy/page.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright
    • 15 GiB RAM, 13 GiB available before launches, 29 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before focused route checks.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorLoreValidationTaxonomyWorkspace.test.tsx src/components/__tests__/StudioHathorLoreValidationTaxonomyWorkspace.integration.test.tsx src/components/__tests__/StudioHathorLoreValidationTaxonomyPage.test.tsx src/components/__tests__/StudioHathorLoreValidationTaxonomyRouteMap.test.ts
    • passed: 4 files passed, 8 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-lore-validation-taxonomy-route.test.ts
    • passed: 1 file passed, 7 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-lore-validation-taxonomy.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 9 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

227. 2026-06-29 Studio Hathor lore-validation contradictions real-BFF coverage#

Closed the focused route-level coverage gap for /studio/hathor/lore-validation-contradictions. The Hathor contradiction detector lane now has testable catalog evidence, pending-submit semantics, quick-action anchors, and 44px automated touch checks for the main editable controls and quick-action links.

The focused Playwright spec seeds an admin-scoped Hathor browser session and drives the real contradictions BFF routes: catalog GET, seeded CONTRADICTION_TEMPORAL, edited clean-event payload, malformed JSON / empty array zero-POST branches, live BFF invalid_event 400 detail, catalog loading/error, non-admin fail-closed state, pending-submit lockout, route-map / quick-action targets, shared axe, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorLoreValidationContradictionsWorkspace.tsx apps/oshun/web/src/app/studio/hathor/lore-validation-contradictions/page.tsx apps/oshun/web/e2e/studio-hathor-lore-validation-contradictions.spec.ts WALKTHROUGH/studio/domain-bridges/hathor/studio-hathor-lore-validation-contradictions.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-hathor-lore-validation-contradictions.spec.ts src/components/studio/StudioHathorLoreValidationContradictionsWorkspace.tsx src/app/studio/hathor/lore-validation-contradictions/page.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright
    • 15 GiB RAM, 13 GiB available before launches, 29 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before focused route checks.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorLoreValidationContradictionsWorkspace.test.tsx src/components/__tests__/StudioHathorLoreValidationContradictionsWorkspace.integration.test.tsx src/components/__tests__/StudioHathorLoreValidationContradictionsPage.test.tsx src/components/__tests__/StudioHathorLoreValidationContradictionsRouteMap.test.ts
    • passed: 4 files passed, 6 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-lore-validation-contradictions-route.test.ts
    • passed: 1 file passed, 6 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-lore-validation-contradictions.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 8 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

228. 2026-06-29 Studio Hathor validation aggregator real-BFF coverage#

Closed the focused route-level coverage gap for /studio/hathor/validation. The Hathor validation aggregator now has stable route-map and quick-action evidence, includes the dedicated Contradictions validator affordance, and its embedded Unified Validation Dashboard workspace exposes catalog and pending submit state for route-level automation.

The focused Playwright spec seeds an admin-scoped Hathor browser session and drives the real dev BFF endpoints composed by the hub: Unified Validation Dashboard, Lore Validation Timeline, Lore Validation Causality, and Lore Validation Taxonomy. It verifies all embedded catalog GETs, seeded and clean unified-dashboard suite POSTs, seeded embedded Timeline/Causality/Taxonomy POSTs, malformed JSON / non-array / empty dashboard zero-POST branches, dashboard catalog-failure isolation while sibling lanes remain ready, non-admin fail-closed state across every embedded lane, pending-submit lockout, route-map / quick-action targets including Contradictions, shared axe, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioHathorUnifiedValidationDashboardWorkspace.tsx apps/oshun/web/src/components/studio/StudioHathorValidationWorkspace.tsx apps/oshun/web/src/app/studio/hathor/validation/page.tsx apps/oshun/web/src/components/studio/StudioHathorValidationRouteMap.ts apps/oshun/web/src/components/__tests__/StudioHathorValidationRouteMap.test.ts apps/oshun/web/src/components/__tests__/StudioHathorValidationPage.test.tsx apps/oshun/web/e2e/studio-hathor-validation.spec.ts WALKTHROUGH/studio/domain-bridges/hathor/studio-hathor-validation.md WALKTHROUGH/studio/domain-bridges/hathor/studio-hathor-unified-validation-dashboard.md WALKTHROUGH/matrix/coverage.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-hathor-validation.spec.ts src/components/studio/StudioHathorUnifiedValidationDashboardWorkspace.tsx src/components/studio/StudioHathorValidationWorkspace.tsx src/app/studio/hathor/validation/page.tsx src/components/studio/StudioHathorValidationRouteMap.ts src/components/__tests__/StudioHathorValidationRouteMap.test.ts src/components/__tests__/StudioHathorValidationPage.test.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before focused route checks.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorValidationPage.test.tsx src/components/__tests__/StudioHathorValidationWorkspace.test.tsx src/components/__tests__/StudioHathorValidationWorkspace.integration.test.tsx src/components/__tests__/StudioHathorValidationRouteMap.test.ts src/components/__tests__/StudioHathorUnifiedValidationDashboardWorkspace.test.tsx src/components/__tests__/StudioHathorUnifiedValidationDashboardWorkspace.integration.test.tsx src/components/__tests__/StudioHathorUnifiedValidationDashboardPage.test.tsx
    • passed: 7 files passed, 13 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-unified-validation-dashboard-route.test.ts src/__tests__/admin-hathor-lore-validation-timeline-route.test.ts src/__tests__/admin-hathor-lore-validation-causality-route.test.ts src/__tests__/admin-hathor-lore-validation-taxonomy-route.test.ts
    • passed: 4 files passed, 27 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-validation.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 7 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

229. 2026-06-29 Studio Hathor unified validation dashboard real-BFF coverage#

Closed the focused standalone route-level coverage gap for /studio/hathor/unified-validation-dashboard. The route now exposes stable route-map count evidence, quick-action anchors, and 44px quick-action affordance coverage while preserving the existing operational Studio layout.

The focused Playwright spec seeds an admin-scoped Hathor browser session and drives the real Unified Validation Dashboard BFF route. It verifies direct admin navigation, catalog GET bearer forwarding, seeded inconsistent validation, edited clean validation, malformed JSON / non-array / empty zero-POST branches, live BFF invalid_event detail, catalog loading/error state, non-admin fail-closed state, pending-submit lockout, route-map and quick-action targets, shared axe, 44px editable-control and quick-action checks, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/hathor/unified-validation-dashboard/page.tsx apps/oshun/web/src/components/__tests__/StudioHathorUnifiedValidationDashboardPage.test.tsx apps/oshun/web/e2e/studio-hathor-unified-validation-dashboard.spec.ts WALKTHROUGH/studio/domain-bridges/hathor/studio-hathor-unified-validation-dashboard.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-hathor-unified-validation-dashboard.spec.ts src/app/studio/hathor/unified-validation-dashboard/page.tsx src/components/__tests__/StudioHathorUnifiedValidationDashboardPage.test.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before focused route checks; during Playwright, available memory stayed above 9 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorUnifiedValidationDashboardPage.test.tsx src/components/__tests__/StudioHathorUnifiedValidationDashboardWorkspace.test.tsx src/components/__tests__/StudioHathorUnifiedValidationDashboardWorkspace.integration.test.tsx src/components/__tests__/StudioHathorUnifiedValidationDashboardRouteMap.test.ts
    • passed: 4 files passed, 8 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-unified-validation-dashboard-route.test.ts
    • passed: 1 file passed, 6 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-unified-validation-dashboard.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 8 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

230. 2026-06-29 Studio Hathor workbench worlds real-BFF coverage#

Closed the focused standalone route-level coverage gap for /studio/hathor/workbench-worlds. The route now exposes stable catalog, route-map count, quick-action, submit-state, and 44px affordance evidence while preserving the existing Studio admin layout.

The focused Playwright spec seeds admin and non-admin Hathor browser sessions and drives the real Workbench Worlds BFF route. It verifies direct admin navigation, catalog GET bearer forwarding, seeded temperate-forest analysis, edited volcanic-wasteland analysis, malformed JSON zero-POST rejection, live BFF terrain-validation detail, catalog loading/error state, non-admin fail-closed state, pending-submit lockout, route-map and quick-action targets, shared axe, 44px editor/submit/quick-action checks, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/hathor/workbench-worlds/page.tsx apps/oshun/web/src/components/studio/StudioHathorWorkbenchWorldsWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioHathorWorkbenchWorldsPage.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorWorkbenchWorldsWorkspace.test.tsx apps/oshun/web/e2e/studio-hathor-workbench-worlds.spec.ts WALKTHROUGH/studio/domain-bridges/hathor/studio-hathor-workbench-worlds.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-hathor-workbench-worlds.spec.ts src/app/studio/hathor/workbench-worlds/page.tsx src/components/studio/StudioHathorWorkbenchWorldsWorkspace.tsx src/components/__tests__/StudioHathorWorkbenchWorldsPage.test.tsx src/components/__tests__/StudioHathorWorkbenchWorldsWorkspace.test.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before focused route checks, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before focused route checks; during Playwright, available memory stayed above 9 GiB.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorWorkbenchWorldsPage.test.tsx src/components/__tests__/StudioHathorWorkbenchWorldsWorkspace.test.tsx src/components/__tests__/StudioHathorWorkbenchWorldsWorkspace.integration.test.tsx src/components/__tests__/StudioHathorWorkbenchWorldsRouteMap.test.ts
    • passed: 4 files passed, 8 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-workbench-worlds-route.test.ts
    • passed: 1 file passed, 5 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-workbench-worlds.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 8 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

231. 2026-06-29 Studio Hathor economy simulation real-BFF coverage#

Closed the focused standalone route-level coverage gap for /studio/hathor/economy-simulation. The route now exposes stable catalog, route-map count, quick-action, submit-state, and 44px affordance evidence while preserving the existing Studio admin layout.

The focused Playwright spec seeds admin and non-admin Hathor browser sessions and drives the real Economy Simulation BFF route. It verifies direct admin navigation, catalog GET bearer forwarding, seeded luxury/rare elastic pricing, edited land/common scarce pricing, zero-ratio maximum-scarcity pricing, client-only numeric rejection with no price POST, live BFF unknown-category validation detail, catalog loading/error state, non-admin fail-closed state, pending-submit lockout, route-map and quick-action targets, shared axe, 44px control/quick-action checks, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/hathor/economy-simulation/page.tsx apps/oshun/web/src/components/studio/StudioHathorEconomySimulationWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioHathorEconomySimulationPage.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorEconomySimulationWorkspace.test.tsx apps/oshun/web/e2e/studio-hathor-economy-simulation.spec.ts WALKTHROUGH/studio/domain-bridges/hathor/studio-hathor-economy-simulation.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-hathor-economy-simulation.spec.ts src/app/studio/hathor/economy-simulation/page.tsx src/components/studio/StudioHathorEconomySimulationWorkspace.tsx src/components/__tests__/StudioHathorEconomySimulationPage.test.tsx src/components/__tests__/StudioHathorEconomySimulationWorkspace.test.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright/docs-center
    • 15 GiB RAM, at least 12 GiB available before focused route checks, 30 GiB swap free, 51 GiB disk free. No competing build/test/docs jobs were active before focused route checks.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorEconomySimulationPage.test.tsx src/components/__tests__/StudioHathorEconomySimulationWorkspace.test.tsx src/components/__tests__/StudioHathorEconomySimulationWorkspace.integration.test.tsx src/components/__tests__/StudioHathorEconomySimulationRouteMap.test.ts
    • passed: 4 files passed, 8 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-economy-simulation-route.test.ts
    • passed: 1 file passed, 7 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-economy-simulation.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 9 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

232. 2026-06-29 Studio Hathor workbench timeline real-BFF coverage#

Closed the focused standalone route-level coverage gap for /studio/hathor/workbench-timeline. The route now exposes stable catalog, route-map count, quick-action, submit-state, and 44px affordance evidence while preserving the existing Studio admin layout.

The focused Playwright spec seeds admin and non-admin Hathor browser sessions and drives the real Workbench Timeline BFF route. It verifies direct admin navigation, catalog GET bearer forwarding, seeded blocking story-order plus causal-dependency verdict, edited clean export-ready packet, warning-only uncovered world-state tag, client-only malformed/primitive JSON rejection with no validate POST, live BFF empty-scenes validation detail, catalog loading/error state, non-admin fail-closed state, pending-submit lockout, route-map and quick-action targets, shared axe, 44px editor/submit/quick-action checks, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/hathor/workbench-timeline/page.tsx apps/oshun/web/src/components/studio/StudioHathorWorkbenchTimelineWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioHathorWorkbenchTimelinePage.test.tsx apps/oshun/web/src/components/__tests__/StudioHathorWorkbenchTimelineWorkspace.test.tsx apps/oshun/web/e2e/studio-hathor-workbench-timeline.spec.ts WALKTHROUGH/studio/domain-bridges/hathor/studio-hathor-workbench-timeline.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-hathor-workbench-timeline.spec.ts src/app/studio/hathor/workbench-timeline/page.tsx src/components/studio/StudioHathorWorkbenchTimelineWorkspace.tsx src/components/__tests__/StudioHathorWorkbenchTimelinePage.test.tsx src/components/__tests__/StudioHathorWorkbenchTimelineWorkspace.test.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright/docs-center
    • 15 GiB RAM, at least 8.9 GiB available during focused route checks, 30 GiB swap free, 50 GiB disk free. No competing build/test/docs jobs were active before focused route checks.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioHathorWorkbenchTimelinePage.test.tsx src/components/__tests__/StudioHathorWorkbenchTimelineWorkspace.test.tsx src/components/__tests__/StudioHathorWorkbenchTimelineWorkspace.integration.test.tsx src/components/__tests__/StudioHathorWorkbenchTimelineRouteMap.test.ts
    • passed: 4 files passed, 8 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-hathor-workbench-timeline-route.test.ts
    • passed: 1 file passed, 7 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-hathor-workbench-timeline.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 9 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

233. 2026-06-30 Studio data retention lifecycle controls real-BFF coverage#

Closed the focused standalone route-level coverage gap for /studio/data-retention-lifecycle-controls. The route now exposes stable quick-action count/id selectors and the live classify form exposes idle/pending state, disabled/busy submit semantics, and 44px editable-control evidence while preserving the existing Studio governance layout.

The focused Playwright spec seeds admin and non-admin Studio browser sessions and drives the real Studio Data Retention BFF route. It verifies direct admin navigation, catalog GET bearer forwarding, seeded retain/archive/purge/hold classification, edited unknown-class safe-retain issue, legal-hold precedence, client-only malformed JSON rejection with no evaluate POST, live BFF invalid-payload details, network-unreachable classify failure, catalog loading/error state, non-admin fail-closed state, pending-submit lockout, flat quick-action targets, shared axe, 44px editor/submit/quick-action checks, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/data-retention-lifecycle-controls/page.tsx apps/oshun/web/src/components/studio/StudioDataRetentionLifecycleControlsWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioDataRetentionLifecycleControlsPage.test.tsx apps/oshun/web/src/components/__tests__/StudioDataRetentionLifecycleControlsWorkspace.test.tsx apps/oshun/web/src/components/__tests__/StudioDataRetentionLifecycleControlsWorkspace.validation.test.tsx apps/oshun/web/e2e/studio-data-retention-lifecycle-controls.spec.ts WALKTHROUGH/studio/governance/studio-data-retention-lifecycle-controls.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-data-retention-lifecycle-controls.spec.ts src/app/studio/data-retention-lifecycle-controls/page.tsx src/components/studio/StudioDataRetentionLifecycleControlsWorkspace.tsx src/components/__tests__/StudioDataRetentionLifecycleControlsPage.test.tsx src/components/__tests__/StudioDataRetentionLifecycleControlsWorkspace.test.tsx src/components/__tests__/StudioDataRetentionLifecycleControlsWorkspace.validation.test.tsx --max-warnings=0
    • passed
  • Resource gates before Playwright/docs-center
    • 15 GiB RAM, at least 9.0 GiB available during focused route checks, 30 GiB swap free, 50 GiB disk free. No competing build/test/docs jobs were active before focused route checks.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioDataRetentionLifecycleControlsPage.test.tsx src/components/__tests__/StudioDataRetentionLifecycleControlsWorkspace.test.tsx src/components/__tests__/StudioDataRetentionLifecycleControlsWorkspace.validation.test.tsx
    • passed: 3 files passed, 7 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-studio-data-retention-route.test.ts
    • passed: 1 file passed, 5 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-data-retention-lifecycle-controls.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 10 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

234. 2026-06-30 Studio Isis video production workflows real-BFF coverage#

Closed the focused standalone route-level coverage gap for /studio/isis/video-production-workflows. The route now exposes stable route-map count/path selectors, quick-action count/id selectors, and the live workflow validation form exposes idle/pending state, disabled/busy submit semantics, and 44px editable-control evidence while preserving the existing Studio Isis lane-console layout.

The focused Playwright spec uses the established localhost-only Studio Isis lane E2E bypass for the workspace route while separately asserting the production direct-route hard-block. It seeds admin and non-admin Studio browser sessions and drives the real Isis Video Production Workflows BFF route. It verifies the production boundary, E2E lane navigation, catalog GET bearer forwarding, default valid workflow header, edited missing-section and bad-schema_version schema errors, client-only malformed JSON rejection with no validate POST, live BFF invalid_workflow details, network-unreachable validate failure, catalog loading/error state, non-admin fail-closed state, pending-submit lockout, route-map and quick-action targets, shared axe, 44px editor/submit/quick-action checks, and anonymous redirect-before-render.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/isis/video-production-workflows/page.tsx apps/oshun/web/src/components/studio/StudioIsisVideoProductionWorkflowsWorkspace.tsx apps/oshun/web/src/components/__tests__/StudioIsisVideoProductionWorkflowsPage.test.tsx apps/oshun/web/src/components/__tests__/StudioIsisVideoProductionWorkflowsWorkspace.test.tsx apps/oshun/web/e2e/studio-isis-video-production-workflows.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-video-production-workflows.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-isis-video-production-workflows.spec.ts src/app/studio/isis/video-production-workflows/page.tsx src/components/studio/StudioIsisVideoProductionWorkflowsWorkspace.tsx src/components/__tests__/StudioIsisVideoProductionWorkflowsPage.test.tsx src/components/__tests__/StudioIsisVideoProductionWorkflowsWorkspace.test.tsx --max-warnings=0
    • passed
  • Resource gates before typecheck/Playwright/docs-center
    • 15 GiB RAM, at least 13 GiB available before focused route checks, 30 GiB swap free, 50 GiB disk free. No competing build/test/docs jobs were active before focused route checks.
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisVideoProductionWorkflowsPage.test.tsx src/components/__tests__/StudioIsisVideoProductionWorkflowsWorkspace.test.tsx src/components/__tests__/StudioIsisVideoProductionWorkflowsRouteMap.test.ts
    • passed: 3 files passed, 6 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-isis-video-production-workflows-route.test.ts
    • passed: 1 file passed, 6 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-isis-video-production-workflows.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 10 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

235. 2026-06-30 Studio Concordia workbench real-BFF coverage#

Closed the focused route-level coverage gap for /studio/concordia-workbench. The root page no longer emits unsupported dynamic <Link href="/cases/[caseId]"> targets in the App Router; quick actions now resolve the placeholder to the seeded default Concordia case while preserving the documented placeholder path in a data attribute. The live Agreement Frontier lane exposes stable loading/ready/error/unauthorized, form-state, submit-state, disabled, busy, and 44px submit affordances, and the workspace now exposes role/surface/case/route-map/quick-action counts and entry selectors for deterministic route-level automation.

The focused Playwright spec forwards the browser's /v1/admin/studio/agreement-frontier calls to the real local BFF with explicit admin and non-admin dev bearers. It verifies admin catalog load, default Pareto compute, edited duplicate-option and missing-utility BFF invalid_payload details, client-only malformed JSON rejection with no compute POST, network-unreachable compute failure, catalog loading and 503 error states, non-admin fail-closed state, pending-submit lockout, route-map and quick-action targets, all 11 seeded surface renderers, viewer privacy projection, case switching, audit recording, direct /cases/:caseId/frontier subroute selection, anonymous redirect-before-render, and the existing shared-axe Concordia accessibility smoke. The case bundle remains in-memory until the production Concordia adapter lands, so adapter-offline and future production adapter behavior remain open.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioConcordiaWorkbenchWorkspace.tsx apps/oshun/web/src/app/studio/concordia-workbench/page.tsx apps/oshun/web/src/components/__tests__/StudioConcordiaWorkbenchWorkspace.live.test.tsx apps/oshun/web/src/components/__tests__/StudioConcordiaWorkbenchPage.test.tsx apps/oshun/web/e2e/studio-concordia-workbench.spec.ts WALKTHROUGH/studio/collaboration/concordia-workbench/studio-concordia-workbench.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/studio-concordia-workbench.spec.ts src/app/studio/concordia-workbench/page.tsx src/components/studio/StudioConcordiaWorkbenchWorkspace.tsx src/components/__tests__/StudioConcordiaWorkbenchPage.test.tsx src/components/__tests__/StudioConcordiaWorkbenchWorkspace.live.test.tsx --max-warnings=0
    • passed
  • Resource gates before Playwright/docs-center
    • 15 GiB RAM, at least 9.2 GiB available during focused route checks, 30 GiB swap free, 50 GiB disk free. No competing build/test/docs jobs were active before focused route checks; stale dev-server PIDs from an interrupted failing run were killed before the passing reruns.
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioConcordiaWorkbenchPage.test.tsx src/components/__tests__/StudioConcordiaWorkbenchWorkspace.live.test.tsx
    • passed: 2 files passed, 5 tests passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-studio-agreement-frontier-route.test.ts
    • passed: 1 file passed, 4 tests passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-concordia-workbench.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-concordia-workbench-accessibility.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 1 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

236. 2026-06-30 Profile notifications real-projection route coverage#

Closed the focused account notifications gap by moving /v1/profile/notifications out of the static guarded fixture set and into an authenticated account-scoped projection. The BFF now reads the consumer profile, notification preferences, and Telegram link state, syncs the profile preference store before responding, and fails unauthenticated reads closed with 401. The profile notifications page exposes stable populated/empty/count/generated-at state attributes and explicit fail-closed copy for unavailable channels or categories instead of inventing delivery preferences.

The focused Playwright spec now seeds a real browser auth/session cookie, reads the live BFF summary before asserting the page surface, flips notification preferences through PATCH /v1/preferences, verifies the read-only channel summary reflects the real preference state, and covers an invalid-bearer fail-closed empty render. The existing footer, anonymous redirect, mobile, standalone PWA, and real service-worker offline replay coverage remain intact.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/notifications-preferences.ts apps/oshun/bff/src/routes/domain-stubs.ts apps/oshun/bff/src/__tests__/notifications-preferences-route.test.ts apps/oshun/bff/src/__tests__/domain-stubs-route.test.ts apps/oshun/web/src/app/profile/notifications/page.tsx apps/oshun/web/e2e/profile-notifications-index.spec.ts WALKTHROUGH/customer/09-account/profile-notifications.md WALKTHROUGH/matrix/coverage.md WALKTHROUGH/journeys/messages-quiet-hours-and-channel-binding.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/profile-notifications-index.spec.ts src/app/profile/notifications/page.tsx --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/bff exec eslint --no-warn-ignored src/routes/notifications-preferences.ts src/routes/domain-stubs.ts src/__tests__/notifications-preferences-route.test.ts src/__tests__/domain-stubs-route.test.ts --max-warnings=0
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, at least 8.7 GiB available during the focused Playwright run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the focused browser rerun.
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/notifications-preferences-route.test.ts src/__tests__/domain-stubs-route.test.ts
    • passed: 2 files passed, 100 tests passed
  • pnpm --dir apps/oshun/bff typecheck
    • passed
  • pnpm --dir apps/oshun/web typecheck
    • passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-notifications-index.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 9 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

239. 2026-06-30 Profile safety crisis-frame timeline coverage#

Closed the focused /profile/safety timeline gap by rendering the full live GET /v1/safety/crisis-frames/mine frames[] projection instead of only the first active frame. The safety record now shows an expandable crisis-frame timeline covering the active cross-surface markers for assistant, Iris, Lilith video, Psyche, and Tara. Each row exposes stable selectors for the surface, current marker, toggle, and expanded metadata, while the existing stillness, re-entry, check-in, resource, report-receipt, and offline replay behavior stays intact.

The focused browser spec now activates a real crisis frame through the operator BFF route, reads the member-owned BFF projection back, asserts all five durable surface markers, and verifies the assistant marker can collapse and re-open to show frame ID, memory-write suspension, and halted synthesis metadata. The axe gate caught and the implementation corrected a low-contrast timeline state pill before the passing rerun.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.tsx apps/oshun/web/src/app/profile/safety/ProfileSafetyJourney.test.tsx apps/oshun/web/src/app/profile/safety/safety.module.css apps/oshun/web/e2e/profile-safety-crisis-recovery.spec.ts WALKTHROUGH/customer/09-account/profile-safety.md WALKTHROUGH/journeys/crisis-aware-tone-policy.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/matrix/coverage.md
    • passed
  • pnpm --dir apps/oshun/web exec vitest run src/app/profile/safety/ProfileSafetyJourney.test.tsx
    • passed: 1 file passed, 9 tests passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/profile/safety/ProfileSafetyJourney.tsx src/app/profile/safety/ProfileSafetyJourney.test.tsx e2e/profile-safety-crisis-recovery.spec.ts --max-warnings=0
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, at least 12 GiB available during focused Playwright, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the passing focused browser rerun.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/profile-safety-crisis-recovery.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 6 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

240. 2026-06-30 Veritas story trajectory data-derived coverage#

Closed the focused Veritas evidence-trail gap where /veritas/story rendered a hardcoded trajectory SVG unrelated to the story timeline payload. The StoryTimelineData.entries[] contract now optionally carries per-entry confidence and trajectory labels, the polished VeritasTimeline chart maps the entries in chronological order into its SVG path and markers, and each marker exposes stable point/kind/confidence/current data attributes. The chart remains a small decorative editorial aid, but its path, current today · 0.92 marker, and retracted-entry labels are now tied to the same timeline data rendered in the rail.

The focused browser spec now asserts the /veritas/story trajectory point count, data-derived path endpoints, current 04 May marker confidence, and 09 March retracted marker/label inside the existing real web/BFF Veritas evidence trail run. The journey remains partial because the polished topic follow rows are still static status rows and the retraction trigger is still a server-side next-visit promise.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/lilith/veritas.tsx apps/oshun/web/src/lib/lilith-data/types.ts apps/oshun/web/src/lib/lilith-data/veritas-depth.ts apps/oshun/web/e2e/veritas-evidence-trail.spec.ts WALKTHROUGH/customer/05-veritas/veritas-story.md WALKTHROUGH/journeys/veritas-evidence-trail.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/lilith/veritas.tsx src/lib/lilith-data/types.ts src/lib/lilith-data/veritas-depth.ts e2e/veritas-evidence-trail.spec.ts --max-warnings=0
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, at least 12 GiB available during focused Playwright, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the passing focused browser run.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/veritas-evidence-trail.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 18 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

241. 2026-06-30 Veritas retraction acknowledgement persistence#

Closed the focused Veritas retraction-cascade gap where /veritas/retraction rendered "Read once · don't keep" as an honest disabled placeholder. The BFF now exposes POST /v1/veritas/retractions/personal-letter/acknowledgement, stores a per-user acknowledgement idempotently, and hides the same reader's GET /v1/veritas/retractions/personal-letter response after acknowledgement. The web surface keeps the private letter server-rendered and delegates only the action row to a small client component that posts through the same-origin customer BFF proxy, shows saving/success/error states, and preserves the existing "Re-open the piece" story link.

The focused browser spec now proves the full customer-facing post-condition: a reader with a pending notice sees the active acknowledgement button, the POST succeeds through the web API proxy, the success state renders, and reloading the same URL returns the private 404 instead of the letter. The BFF route spec also covers direct acknowledgement, idempotent second POST, read-hidden post-condition, and Veritas scope enforcement. The journey remains partial because customer-shell subscriber/audit fan-out, real BFF-backed notebook retraction data, confidence-band retraction state, and kept-offering re-render surfaces are still not complete.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/veritas.ts apps/oshun/bff/src/__tests__/veritas-route.test.ts apps/oshun/web/src/app/api/veritas/retractions/personal-letter/acknowledgement/route.ts apps/oshun/web/src/components/lilith/VeritasRetractionActions.tsx apps/oshun/web/src/components/lilith/veritas.tsx apps/oshun/web/e2e/veritas-retraction-cascade.spec.ts WALKTHROUGH/customer/05-veritas/veritas-retraction.md WALKTHROUGH/journeys/veritas-retraction-cascade-customer-view.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/components/lilith/VeritasRetractionActions.tsx src/components/lilith/veritas.tsx src/app/api/veritas/retractions/personal-letter/acknowledgement/route.ts e2e/veritas-retraction-cascade.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/bff exec eslint --no-warn-ignored src/routes/veritas.ts src/__tests__/veritas-route.test.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/veritas-route.test.ts
    • passed: 1 file passed, 14 tests passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • pnpm --dir apps/oshun/bff typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, at least 7.6 GiB available during focused Playwright, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the passing focused browser run.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/veritas-retraction-cascade.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 13 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

242. 2026-06-30 LMS connector managed CRUD coverage#

Closed the remaining LMS connector in-app CRUD gap. The shared LMS framework can now unregister connectors and clear scoped LTI Advantage token cache entries. The BFF exposes an admin-managed connector store that validates descriptors before registration, marks list summaries as env or managed, lets managed descriptors override env descriptors with the same tenant/connector id, restores the env descriptor when that override is deleted, and tombstones env-only descriptors for the current runtime when an operator disables them.

The operator /operator/lms page now renders source badges on roster cards and a managed connector panel that saves and deletes descriptors through the real admin BFF, refreshes the server roster after successful mutations, and surfaces fail-closed validation/scope/not-found/unavailable copy. The pure-BFF E2E covers managed create/delete, env override, env restore, and tombstone-driven LTI login 404. The browser E2E drives the new CRUD panel through a live BFF bridge. The walkthrough keeps the remaining product hardening explicit: managed storage is in-memory for local dev, while durable persistence, audit events, and external LMS registration ownership still need a production backing design.

Verification:

  • pnpm exec prettier --write libs/shared/inbound-integrations/src/lms.ts apps/oshun/bff/src/tenant-console/lms-route.ts apps/oshun/bff/src/tenant-console/lms-admin-route.test.ts apps/oshun/web/src/components/lilith/LmsConnectorCrudPanel.tsx apps/oshun/web/src/app/operator/lms/page.tsx apps/oshun/web/src/app/operator/lms/__tests__/page.test.tsx apps/oshun/web/e2e/lms-connectors.spec.ts apps/oshun/web/e2e/operator-lms.spec.ts WALKTHROUGH/journeys/lms-connectors-operator.md WALKTHROUGH/operator/operator-lms.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec prettier --write libs/shared/inbound-integrations/src/lms.spec.ts apps/oshun/web/e2e/lms-connectors.spec.ts WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored libs/shared/inbound-integrations/src/lms.ts libs/shared/inbound-integrations/src/lms.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/bff exec eslint --no-warn-ignored src/tenant-console/lms-route.ts src/tenant-console/lms-admin-route.test.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/operator/lms/page.tsx src/app/operator/lms/__tests__/page.test.tsx src/components/lilith/LmsConnectorCrudPanel.tsx e2e/lms-connectors.spec.ts e2e/operator-lms.spec.ts --max-warnings=0
    • passed
  • pnpm --dir libs/shared/inbound-integrations exec vitest run src/lms.spec.ts
    • passed: 1 file passed, 7 tests passed
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/tenant-console/lms-admin-route.test.ts
    • passed: 1 file passed, 17 tests passed
  • pnpm --dir apps/oshun/web exec vitest run src/app/operator/lms/__tests__/page.test.tsx
    • passed: 1 file passed, 4 tests passed
  • pnpm nx run @oshun/inbound-integrations:typecheck
    • passed
  • pnpm --dir apps/oshun/bff typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, at least 7.8 GiB available during the final focused Playwright run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active before the passing focused browser run.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/lms-connectors.spec.ts e2e/operator-lms.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 15 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

243. 2026-06-30 Citation drift terminal decision coverage#

Closed the citation-drift journey's local UI write-path gap for terminal operator decisions. The BFF now exposes POST /v1/admin/citation-drift/:incidentId/resolutions and matching GET readback backed by a durable snapshot store. Each recheck, re-render, or retract decision validates the action-specific rationale/target fields, records a drift.* admin audit event, and returns a receipt with the audit event id.

The /operator/admin/isis/provenance selected-bundle inspector now renders a small terminal-action panel without converting the server component to a client component. It disables all actions when the ledger verification is broken, blocks short rationales client-side, posts all three terminal decisions to the real BFF, and preserves the BFF receipt on screen. The browser journey now also reads the per-operator resolution list back and queries /v1/admin/audit-log/events for the emitted drift.recheck_immaterial, drift.re_render, and drift.retract rows. The journey remains partial because background Sophia source classification, actual Isis generation append, customer-facing retraction cascade, and full INC lifecycle resolution are still not driven.

Verification:

  • psql --version
    • passed: psql (PostgreSQL) 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
  • pnpm exec prettier --write apps/oshun/bff/src/admin/citation-drift-resolution-store.ts apps/oshun/bff/src/admin/citation-drift-resolution-store.test.ts apps/oshun/bff/src/routes/admin-citation-drift-resolution.ts apps/oshun/bff/src/__tests__/admin-citation-drift-resolution-route.test.ts apps/oshun/bff/src/app.ts apps/oshun/bff/src/server.ts apps/oshun/web/src/components/admin/CitationDriftResolutionActions.tsx apps/oshun/web/src/components/admin/__tests__/CitationDriftResolutionActions.test.tsx apps/oshun/web/src/components/admin/IsisProvenanceInspector.tsx apps/oshun/web/e2e/citation-drift-resolution.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/admin/citation-drift-resolution-store.ts apps/oshun/bff/src/admin/citation-drift-resolution-store.test.ts apps/oshun/bff/src/routes/admin-citation-drift-resolution.ts apps/oshun/bff/src/__tests__/admin-citation-drift-resolution-route.test.ts apps/oshun/bff/src/app.ts apps/oshun/bff/src/server.ts apps/oshun/web/src/components/admin/CitationDriftResolutionActions.tsx apps/oshun/web/src/components/admin/__tests__/CitationDriftResolutionActions.test.tsx apps/oshun/web/src/components/admin/IsisProvenanceInspector.tsx apps/oshun/web/e2e/citation-drift-resolution.spec.ts --max-warnings=0
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/admin/citation-drift-resolution-store.test.ts src/__tests__/admin-citation-drift-resolution-route.test.ts
    • passed: 2 files, 7 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/admin/__tests__/CitationDriftResolutionActions.test.tsx src/components/admin/__tests__/IsisProvenanceInspector.test.tsx
    • passed: 2 files, 9 tests
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before the passing browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the focused browser run.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/citation-drift-resolution.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

244. 2026-07-01 Citation drift source classification coverage#

Closed the citation-drift journey's per-source classification write-path gap. The admin BFF now exposes POST /v1/admin/citation-drift/:incidentId/source-classifications plus matching GET read-back, backed by a durable snapshot store. Each classification records the source id/label/change/quality band, validates the operator rationale floor, emits drift.source_classified, and returns the audit receipt id.

The /operator/admin/isis/provenance selected-bundle inspector now renders a source-classification panel before terminal recheck/re-render/retract controls. It reuses the three drift sources from the operator inbox fixture, disables classification while the ledger verification is broken or no bundle is selected, blocks short rationales, posts source decisions to the real BFF, and shows per-source receipts. The browser journey now classifies all three drift sources and verifies both the BFF read-back and /v1/admin/audit-log/events rows for drift.source_classified.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/admin/citation-drift-source-classification-store.ts apps/oshun/bff/src/admin/citation-drift-source-classification-store.test.ts apps/oshun/bff/src/routes/admin-citation-drift-resolution.ts apps/oshun/bff/src/__tests__/admin-citation-drift-resolution-route.test.ts apps/oshun/bff/src/server.ts apps/oshun/web/src/components/admin/CitationDriftSourceClassifier.tsx apps/oshun/web/src/components/admin/__tests__/CitationDriftSourceClassifier.test.tsx apps/oshun/web/src/components/admin/IsisProvenanceInspector.tsx apps/oshun/web/e2e/citation-drift-resolution.spec.ts WALKTHROUGH/journeys/citation-drift-resolution.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/admin/citation-drift-source-classification-store.test.ts src/admin/citation-drift-resolution-store.test.ts src/__tests__/admin-citation-drift-resolution-route.test.ts
    • passed: 3 files, 12 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/admin/__tests__/CitationDriftSourceClassifier.test.tsx src/components/admin/__tests__/CitationDriftResolutionActions.test.tsx src/components/admin/__tests__/IsisProvenanceInspector.test.tsx
    • passed: 3 files, 12 tests
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/admin/citation-drift-source-classification-store.ts apps/oshun/bff/src/admin/citation-drift-source-classification-store.test.ts apps/oshun/bff/src/routes/admin-citation-drift-resolution.ts apps/oshun/bff/src/__tests__/admin-citation-drift-resolution-route.test.ts apps/oshun/bff/src/server.ts apps/oshun/web/src/components/admin/CitationDriftSourceClassifier.tsx apps/oshun/web/src/components/admin/__tests__/CitationDriftSourceClassifier.test.tsx apps/oshun/web/src/components/admin/IsisProvenanceInspector.tsx apps/oshun/web/e2e/citation-drift-resolution.spec.ts --max-warnings=0
    • passed
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before the passing browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active; memory stayed above the stop threshold during the focused browser run.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/citation-drift-resolution.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 12 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

245. 2026-06-30 Citation drift incident lifecycle coverage#

Closed the citation-drift journey's shared-incident resolution gap for the chosen terminal decision path. The citation-drift terminal-resolution BFF route now resolves the matching shared operator incident through the real operatorIncidentStore before returning the drift receipt. It maps recheck_immaterial to no-violation, maps re-render/retract to actioned, rejects a second terminal decision once the incident is already resolved, and emits a linked incident.resolved admin-audit event whose payload names the drift resolution id, drift event type, bundle id, and drift audit event id.

The browser journey now resets the real operator-incident harness before each test, records all terminal modes without leaking resolved state across cases, and then drives the granular lifecycle path in one browser flow: classify all three drift sources, choose the retract decision, read INC-2041 back from the real operator-incident BFF as resolved, assert the incident history begins with the seeded created entry and ends with the operator resolved entry, and query /v1/admin/audit-log/events for the linked incident.resolved row. The journey remains partial because the actual Isis generation append/publication gates, customer retraction cascade/cache purge, and explicit incident.created admin-audit emission are still not implemented.

Verification:

  • pnpm exec prettier --write apps/oshun/bff/src/routes/admin-citation-drift-resolution.ts apps/oshun/bff/src/__tests__/admin-citation-drift-resolution-route.test.ts apps/oshun/web/e2e/citation-drift-resolution.spec.ts WALKTHROUGH/journeys/citation-drift-resolution.md WALKTHROUGH/journeys/coverage.md WALKTHROUGH/results/v1-completeness-audit-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/bff exec vitest run src/admin/citation-drift-source-classification-store.test.ts src/admin/citation-drift-resolution-store.test.ts src/admin/operator-incident-store.test.ts src/__tests__/admin-citation-drift-resolution-route.test.ts src/__tests__/admin-operator-incidents-route.test.ts
    • passed: 5 files, 48 tests
  • pnpm --dir apps/oshun/web exec vitest run src/components/admin/__tests__/CitationDriftSourceClassifier.test.tsx src/components/admin/__tests__/CitationDriftResolutionActions.test.tsx src/components/admin/__tests__/IsisProvenanceInspector.test.tsx
    • passed: 3 files, 12 tests
  • pnpm exec eslint --no-warn-ignored apps/oshun/bff/src/routes/admin-citation-drift-resolution.ts apps/oshun/bff/src/__tests__/admin-citation-drift-resolution-route.test.ts apps/oshun/web/e2e/citation-drift-resolution.spec.ts --max-warnings=0
    • passed
  • pnpm nx run @oshun/bff:typecheck
    • passed
  • pnpm nx run @oshun/web:typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before the passing browser run, 30 GiB swap free, and 50 GiB disk free. No competing build/test/docs jobs were active.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/citation-drift-resolution.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 12 passed
  • pnpm docs:center
    • passed: rendered 2976 files.
  • pnpm docs:center:check
    • passed: all 2976 generated docs-center files are fresh.
  • pnpm docs:center:verify
    • passed: 0 structural broken links and 0 dead source paths.
  • pnpm docs:center:test
    • passed: 89 passed, 5 skipped.

246. 2026-07-03 Events agenda calendar feed coverage#

Closed the /events and /nyx/events coverage gap where both walkthroughs still cited the older runtime sweep and the browser calendar links pointed at /nyx/events.ics, a path with no Next route and no rewrite. The shared EventList now uses the same-origin BFF endpoint /v1/nyx/events.ics for all card/footer calendar actions, and both agenda pages expose stable route/count, domain, row, text, and link anchors for browser assertions.

The new Playwright coverage proves the live BFF GET /v1/events/upcoming contract, the direct BFF GET /v1/nyx/events.ics feed, the web-origin /v1/nyx/events.ics rewrite, the signed-in /events route, Explore nav active state, exact event count, event ids/domains/start/end attributes, date/title/ summary rendering, domain chips, Nyx observation links, absence of stale /nyx/events.ics hrefs, the /nyx/events Nyx-only filter with domain chips suppressed, and a mobile standalone /events launch with no horizontal overflow.

The walkthroughs now also record the product-data mismatch the test makes explicit: /events is intended and copywritten as a cross-domain agenda, but the current live /v1/events/upcoming implementation returns only Nyx ephemeris-solved events. Tara/Metis/Arete/community agenda rows remain a source wiring gap, not an E2E assertion gap.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/events/page.tsx apps/oshun/web/src/app/nyx/events/page.tsx apps/oshun/web/src/components/nyx/EventList.tsx apps/oshun/web/e2e/events-agenda.spec.ts WALKTHROUGH/customer/02-home-discovery/events.md WALKTHROUGH/customer/06-nyx/nyx-events.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored src/app/events/page.tsx src/app/nyx/events/page.tsx src/components/nyx/EventList.tsx e2e/events-agenda.spec.ts --max-warnings=0
    • passed
  • git diff --check
    • passed
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gates before focused Playwright/docs-center
    • 15 GiB RAM, 13 GiB available before launches, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 9.1 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/events-agenda.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 4 passed
  • pnpm docs:center
    • passed: rendered 2991 files
  • pnpm docs:center:check
    • passed: all 2991 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed: 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped

261. 2026-07-03 Studio Isis InstantID real-BFF coverage#

Closed the /studio/isis/instantid walkthrough gap where the old runtime sweep proved only route render/data health and the InstantID catalog, admin-scope gates, alias resolution states, route map, quick actions, touch targets, and mobile containment remained unchecked. The new Playwright spec opens the real Next Studio shell through the localhost-only Isis lane E2E bypass, proves the direct route is still hard-blocked by the Studio Isis boundary, forwards browser /v1/admin/isis/controlnet catalog and /v1/admin/isis/controlnet/resolve POSTs to the real local BFF with explicit studio-admin or non-admin dev bearer scopes, and captures browser auth headers and request bodies.

The suite verifies anonymous redirect, studio-admin catalog load, exact InstantID modes, route-map articles, quick-action targets, 44 px controls, pending-submit lockout, real BFF alias resolution for instant-id, instantid-sdxl, and ip-adapter-face, unresolved alias handling, live BFF invalid-payload errors, malformed 200 resolve responses, resolve-network failure, loading, 503 catalog failure, malformed catalog failure, catalog-network failure, non-admin fail-closed auth, direct BFF auth/schema gates, shared axe scans on rendered UI paths, and mobile containment without horizontal overflow. The page now exposes stable route-map and quick-action selectors, pending form/submit state selectors, and fail-closed client parsing for malformed catalog or resolve success payloads.

Verification:

  • pnpm exec prettier --write WALKTHROUGH/studio/domain-bridges/isis/studio-isis-instantid.md apps/oshun/web/src/components/studio/StudioIsisInstantIDWorkspace.tsx apps/oshun/web/src/app/studio/isis/instantid/page.tsx apps/oshun/web/e2e/studio-isis-instantid.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioIsisInstantIDWorkspace.tsx apps/oshun/web/src/app/studio/isis/instantid/page.tsx apps/oshun/web/e2e/studio-isis-instantid.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisInstantIDWorkspace.test.tsx src/components/__tests__/StudioIsisInstantIDWorkspace.integration.test.tsx src/components/__tests__/StudioIsisInstantIDPage.test.tsx src/components/__tests__/StudioIsisInstantIDRouteMap.test.ts
    • passed: 4 files, 6 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-isis-controlnet-route.test.ts
    • passed: 1 file, 6 tests
  • Resource gate before focused Playwright
    • 15 GiB RAM, 9.4 GiB available before launch, 29 GiB swap free, 48 GiB disk free. Another agent had CPU-heavy Python scans active, so this run stayed narrow at one Chromium worker; during Playwright, memory stayed above 5.9 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-isis-instantid.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 10 passed
  • pnpm --dir apps/oshun/web run typecheck
    • passed

247. 2026-07-03 Tara first-sit long-idle drift coverage#

Closed the first-tara-sit walkthrough gap where TaraSitPlayer's long-idle drifted branch existed in route code and component tests but was not driven by real-browser Playwright against the live /tara/sit/<id> route. The focused E2E now installs Playwright's browser clock before loading /tara/sit/when-the-mind-wanders, starts the hydrated player, fast-forwards past DRIFT_IDLE_SECONDS = 90, asserts data-session-state="drifted" and the soft pause copy, scrubs forward to recover to paused, then resumes with the tara_sit_resumed telemetry hook intact.

The first-tara-sit journey no longer lists long-idle drift as uncovered. The /tara/sit/[id] per-view file and the journey coverage matrix now cite the clock-controlled browser proof alongside the existing transport, keyboard, completion, and offline-reflection coverage.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/first-tara-sit-deepening.spec.ts WALKTHROUGH/journeys/first-tara-sit.md WALKTHROUGH/customer/03-tara/tara-sit-id.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm exec prettier --write WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/first-tara-sit-deepening.spec.ts --max-warnings=0
    • passed
  • git diff --check
    • passed
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gates before focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 8.6 GiB available.
  • Resource gates before web typecheck and docs-center
    • 15 GiB RAM, 13 GiB available, 30 GiB swap free, 48 GiB disk free, and no competing build/test process.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/first-tara-sit-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 11 passed
  • pnpm docs:center
    • passed: rendered 2991 files
  • pnpm docs:center:check
    • passed: all 2991 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed: 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped

248. 2026-07-03 Tara sit unknown-id 404 coverage#

Closed the /tara/sit/[id] coverage gap where an unknown sitting id reached Next notFound() but the walkthrough had no real-browser proof of the fallback surface. The new Playwright leg starts at /tara, deep-links to /tara/sit/not-a-real-sitting-id, records the current Next dev-shell document status as 200, and asserts the app-level 404 UI: "Page not found", exact 404, no [data-tara-sit-player], usable 404 search routing to /?q=morning%20clarity, and browser-back recovery to /tara.

The /tara/sit/[id] per-view walkthrough now marks the not-found path as walked, the first Tara sit journey cites the unknown-id route state, and the journey coverage matrix lists the app 404 search/browser-back recovery under first-tara-sit-deepening.

Verification:

  • command -v psql && psql --version
    • passed: /usr/bin/psql, PostgreSQL 16.14
  • pnpm exec prettier --write apps/oshun/web/e2e/first-tara-sit-deepening.spec.ts WALKTHROUGH/customer/03-tara/tara-sit-id.md WALKTHROUGH/journeys/first-tara-sit.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/first-tara-sit-deepening.spec.ts --max-warnings=0
    • passed
  • git diff --check
    • passed
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gates before focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During the full spec, memory stayed above 9.1 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/first-tara-sit-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "unknown sitting ids"
    • passed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/first-tara-sit-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 12 passed
  • pnpm docs:center
    • passed: rendered 2991 files
  • pnpm docs:center:check
    • passed: all 2991 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed: 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped

249. 2026-07-03 Tara reflection reconnect non-drain coverage#

Closed the verification ambiguity around Tara's offline reflection queue. The route already saved offline reflection drafts to localStorage["tara:reflection:<id>"], but the walkthrough still repeated the broader offline-first claim that sync resumes on reconnect. The strengthened Playwright leg now drives the real /tara/sit/when-the-mind-wanders route, completes the player, sets Chromium offline, saves a reflection, verifies the queued LSyncDot and "Saved locally, will sync" hint, then returns Chromium online and proves the queued UI plus localStorage draft remain. That captures the current shipped behavior without falsely claiming a reconnect drain.

The /tara/sit/[id] per-view walkthrough now marks the reconnect drain question as answered: no client-side drain exists for tara:reflection:<id> today. The first Tara sit journey separates the covered local queue behavior from the still-open product gap for a future BFF reflection route + client drain, and the coverage matrix now calls out Tara's reconnect non-drain behavior under both first-tara-sit and offline-first-time-use.

Verification:

  • pnpm exec prettier --write apps/oshun/web/e2e/first-tara-sit-deepening.spec.ts WALKTHROUGH/customer/03-tara/tara-sit-id.md WALKTHROUGH/journeys/first-tara-sit.md WALKTHROUGH/journeys/coverage.md
    • passed
  • pnpm --dir apps/oshun/web exec eslint --no-warn-ignored e2e/first-tara-sit-deepening.spec.ts --max-warnings=0
    • passed
  • git diff --check
    • passed
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gates before focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During the full spec, memory stayed above 9.0 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/first-tara-sit-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list -g "reflection saved while offline"
    • passed: 1 passed
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/first-tara-sit-deepening.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 12 passed
  • pnpm docs:center
    • passed: rendered 2991 files
  • pnpm docs:center:check
    • passed: all 2991 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed: 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped

250. 2026-07-03 Studio Isis text-to-audio real-BFF coverage#

Closed the /studio/isis/text-to-audio walkthrough gap where the route was listed as walked by the old runtime sweep but every granular state and interaction remained unchecked. The new Playwright spec proves the direct route is still hard-blocked by the Studio Isis boundary, then opens the localhost-only ?__oshunStudioIsisLaneE2E=1 lane in the real Next shell with browser requests forwarded to the real local BFF using dev bearer auth.

The suite drives the live generation-manifest contract for the text-to-audio entry, verifies prompt-required / image-controls-disabled flags, audio output package rules, route-map articles, sibling quick actions, authenticated manifest GETs, and live compatibility POSTs for text-to-audio → audio and text-to-audio → image. It also proves loading, missing manifest entry, 503 service failure, malformed manifest, check network failure, non-admin unauthorized, and anonymous redirect-before-render states fail closed without fabricating a checker or compatibility result.

The first browser run exposed that the output-package select was only 23px tall; after fixing that, the next run exposed the sibling quick-action links at 40px. Both controls now have explicit 44px minimum hit targets, and the passing suite measures the select, submit button, and quick-action links in Chromium.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/isis/text-to-audio/page.tsx apps/oshun/web/src/components/studio/StudioIsisTextToAudioWorkspace.tsx apps/oshun/web/e2e/studio-isis-text-to-audio.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-text-to-audio.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/studio/isis/text-to-audio/page.tsx apps/oshun/web/src/components/studio/StudioIsisTextToAudioWorkspace.tsx apps/oshun/web/e2e/studio-isis-text-to-audio.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisTextToAudioPage.test.tsx src/components/__tests__/StudioIsisTextToAudioWorkspace.test.tsx src/components/__tests__/StudioIsisTextToAudioWorkspace.integration.test.tsx
    • passed: 3 files, 5 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gates before focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 9.7 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-isis-text-to-audio.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run exposed the 23px select hit target; second run exposed the 40px quick-action hit target; final rerun passed: 8 passed
  • git diff --check
    • passed
  • pnpm docs:center
    • passed: rendered 2991 files
  • pnpm docs:center:check
    • passed: all 2991 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed: 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped

251. 2026-07-03 Studio Isis text-to-speech real-BFF lifecycle coverage#

Closed the /studio/isis/text-to-speech walkthrough gap where the route was listed as walked by the old runtime sweep but the granular voice-clone governance states and interactions were still unchecked. The new Playwright spec proves the direct route is still hard-blocked by the Studio Isis boundary, then opens the localhost-only ?__oshunStudioIsisLaneE2E=1 lane in the real Next shell with browser requests forwarded to the real local BFF using dev bearer auth.

The suite loads the live /v1/admin/isis/voice-cloning seed records, verifies the pending-signoff and released records, filter behavior, route-map articles, sibling quick actions, authenticated browser requests, and 44px minimum targets for the primary form controls. It then creates a unique workflow and drives the live BFF state machine through consent, identity verification, sample attach, naturalness scoring, watermark attestation, abuse-risk scoring, all four signoff roles, profile registration, and released state while capturing exact POST bodies. Separate legs cover revoke from pending consent, invalid transition payload feedback, high-abuse auto-reject, loading, 503 service failure, malformed response, network failure, non-admin unauthorized, and anonymous redirect before the surface renders.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/isis/text-to-speech/page.tsx apps/oshun/web/src/components/studio/StudioIsisTextToSpeechWorkspace.tsx apps/oshun/web/e2e/studio-isis-text-to-speech.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-text-to-speech.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/studio/isis/text-to-speech/page.tsx apps/oshun/web/src/components/studio/StudioIsisTextToSpeechWorkspace.tsx apps/oshun/web/e2e/studio-isis-text-to-speech.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisTextToSpeechPage.test.tsx src/components/__tests__/StudioIsisTextToSpeechWorkspace.test.tsx src/components/__tests__/StudioIsisTextToSpeechWorkspace.integration.test.tsx
    • passed: 3 files, 5 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gates before focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 9.3 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-isis-text-to-speech.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run exposed a test assertion count error for the 11-step lifecycle; final rerun passed: 8 passed
  • git diff --check
    • passed
  • pnpm docs:center
    • passed: rendered 2991 files
  • pnpm docs:center:check
    • passed: all 2991 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed: 0 structural broken links, 0 dead source paths
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped

252. 2026-07-03 Studio experimentation feature-flags real-BFF coverage#

Closed the /studio/experimentation-feature-flags walkthrough gap where the old runtime sweep had only proved a render, while the real flag-evaluation lane states and interactions were still unchecked. The new Playwright spec plants an admin session in the real Next shell, lets the browser GET /v1/admin/studio/experimentation-flags and POST /v1/admin/studio/experimentation-flags/evaluate fall through to the live local BFF, and captures the bearer headers plus parsed POST body before fallback.

The suite verifies the deterministic FNV-1a default result (2 on / 3 off, new-checkout bucket 48.14, dark-mode out of rollout, beta-gate rule-excluded, legacy disabled, and homepage-cta assigned to variant-a at bucket 76.12), the five quick-action targets, and 44px minimum hit targets for the JSON textarea, submit button, and sibling links. Separate legs cover anonymous redirect, loading, 503 catalog failure, malformed catalog, catalog-network failure, malformed JSON with zero evaluate POSTs, live BFF mis-summed experiment-weight validation detail, evaluate POST network failure, and non-admin unauthorized.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/studio/experimentation-feature-flags/page.tsx apps/oshun/web/src/components/studio/StudioExperimentationFeatureFlagsWorkspace.tsx apps/oshun/web/e2e/studio-experimentation-feature-flags.spec.ts WALKTHROUGH/studio/governance/studio-experimentation-feature-flags.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/studio/experimentation-feature-flags/page.tsx apps/oshun/web/src/components/studio/StudioExperimentationFeatureFlagsWorkspace.tsx apps/oshun/web/e2e/studio-experimentation-feature-flags.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioExperimentationFeatureFlagsWorkspace.test.tsx src/components/__tests__/StudioExperimentationFeatureFlagsWorkspace.validation.test.tsx
    • passed: 2 files, 5 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gates before focused Playwright
    • 15 GiB RAM, 12 GiB available before launch, 30 GiB swap free, 48 GiB disk free. A competing Vitest job in another checkout was allowed to finish before browser verification started. During Playwright, memory stayed above 9.4 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-experimentation-feature-flags.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 7 passed
  • pnpm exec prettier --write WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm docs:center
    • passed: rendered 2991 files
  • pnpm docs:center:check
    • passed: all 2991 generated docs-center files are fresh
  • pnpm docs:center:verify
    • passed: 0 structural broken links, 0 dead source paths
  • Resource gate before docs-center Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process.
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped
  • git diff --check
    • passed

253. 2026-07-03 Lilith Studio new-scene real-BFF coverage#

Closed the /lilith-studio/scene/new walkthrough gap where the old runtime sweep had only proved a render and the form states, entry points, gating, live BFF write, and mobile behavior were still unchecked. The new Playwright spec plants signed-in editorial sessions in the real Next shell, drives the browser through the live /v1/lilith-studio/scenes POST path, and captures the request body plus bearer/CSRF headers before letting the request fall through to the local BFF.

The suite verifies the idle form, working-title constraints, real role="radio" kind cells, roving keyboard selection, session-index normalization, pending disabled/progress lockout, live 202 accepted response, accepted metadata, 44 px accepted-state links, and protected handoff to the scenes editor. Separate legs cover live BFF 422 validation detail, explicit offline fail-closed messaging with retained field values, anonymous redirect, non-editorial access denial, every documented new-scene entry point from the hub, Tara mirror, and scenes editor, and mobile standalone containment without horizontal overflow.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/app/lilith-studio/scene/new/StudioNewSceneForm.tsx apps/oshun/web/src/app/lilith-studio/LilithStudioShell.tsx apps/oshun/web/src/app/lilith-studio/tara/page.tsx apps/oshun/web/src/app/lilith-studio/scenes/TaraSceneEditor.tsx apps/oshun/web/src/app/lilith-studio/scenes/TaraSceneEditor.test.tsx apps/oshun/web/e2e/lilith-studio-new-scene.spec.ts WALKTHROUGH/customer/10-lilith/lilith-studio-scene-new.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/app/lilith-studio/scene/new/StudioNewSceneForm.tsx apps/oshun/web/src/app/lilith-studio/LilithStudioShell.tsx apps/oshun/web/src/app/lilith-studio/tara/page.tsx apps/oshun/web/src/app/lilith-studio/scenes/TaraSceneEditor.tsx apps/oshun/web/src/app/lilith-studio/scenes/TaraSceneEditor.test.tsx apps/oshun/web/e2e/lilith-studio-new-scene.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/app/lilith-studio/scenes/TaraSceneEditor.test.tsx
    • passed: 1 file, 5 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gates before focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 8.9 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/lilith-studio-new-scene.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • final rerun passed: 5 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before docs-center Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process.
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

254. 2026-07-03 Studio RBAC permission-policy real-BFF coverage#

Closed the /studio/rbac-permission-policy walkthrough gap where the old runtime sweep proved only a render and the policy-evaluation lane states were still unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/studio/rbac-policy requests to the real local BFF with explicit dev bearer scopes, and captures the browser request bodies and auth headers before the live evaluator handles the payload.

The suite verifies anonymous redirect, admin catalog load, ready form metadata, the seven quick-action targets, 44 px controls, default-policy evaluation, explicit deny override, wildcard allow, default deny, inherited allow, unknown-role issues, client-only malformed JSON with zero POSTs, live BFF 400 detail, evaluate-network failure, pending-submit lockout, 503 catalog failure, malformed catalog failure, catalog-network failure, non-admin fail-closed auth, and mobile containment without horizontal overflow.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioRbacPermissionPolicyUxWorkspace.tsx apps/oshun/web/src/app/studio/rbac-permission-policy/page.tsx apps/oshun/web/e2e/studio-rbac-permission-policy.spec.ts WALKTHROUGH/studio/governance/studio-rbac-permission-policy.md WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioRbacPermissionPolicyUxWorkspace.tsx apps/oshun/web/src/app/studio/rbac-permission-policy/page.tsx apps/oshun/web/e2e/studio-rbac-permission-policy.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioRbacPermissionPolicyUxWorkspace.test.tsx src/components/__tests__/StudioRbacPermissionPolicyUxWorkspace.integration.test.tsx
    • passed: 2 files, 5 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-studio-rbac-policy-route.test.ts
    • passed: 1 file, 5 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During Playwright, memory stayed above 8.6 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-rbac-permission-policy.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 10 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before docs-center Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process.
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

255. 2026-07-03 Studio Bellona CLI-surfaces real-BFF coverage#

Closed the /studio/bellona/cli-surfaces walkthrough gap where the old runtime sweep proved only render/data health and the argv parser states, route map, quick actions, BFF gates, pending behavior, and mobile containment remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/bellona/cli-surfaces catalog and parse calls to the real local BFF with explicit Bellona admin or non-admin dev bearer scopes, and captures browser request bodies and auth headers while the live parser handles the payload.

The suite verifies anonymous redirect, Bellona-admin catalog load, route-map entries, quick-action targets, 44 px controls, default long/short/boolean argv parse, positionals, missing-required issues, unknown-flag issues, invalid-number issues, client-only malformed JSON with zero POSTs, live BFF 400 and 422 details, parse-network failure, malformed parse success, pending-submit lockout, catalog loading, 503 catalog failure, malformed catalog failure, catalog-network failure, non-admin fail-closed auth, direct BFF auth/schema gates, and mobile containment without horizontal overflow.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioBellonaCliSurfacesWorkspace.tsx apps/oshun/web/src/app/studio/bellona/cli-surfaces/page.tsx apps/oshun/web/e2e/studio-bellona-cli-surfaces.spec.ts
    • passed
  • pnpm exec prettier --write apps/oshun/web/e2e/studio-bellona-cli-surfaces.spec.ts WALKTHROUGH/studio/domain-bridges/bellona/studio-bellona-cli-surfaces.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioBellonaCliSurfacesWorkspace.tsx apps/oshun/web/src/app/studio/bellona/cli-surfaces/page.tsx apps/oshun/web/e2e/studio-bellona-cli-surfaces.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioBellonaCliSurfacesWorkspace.test.tsx src/components/__tests__/StudioBellonaCliSurfacesWorkspace.integration.test.tsx
    • passed: 2 files, 6 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-bellona-cli-surfaces-route.test.ts
    • passed: 1 file, 7 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 30 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During the final Playwright run, memory stayed above 8.7 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-bellona-cli-surfaces.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • final rerun passed: 11 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

256. 2026-07-03 Studio Quality Reliability real-BFF coverage#

Closed the /studio/quality-reliability walkthrough gap where the old runtime sweep proved only render/data health and the test-flakiness scorer states, breadcrumbs, route map, quick actions, BFF gates, pending behavior, and mobile containment remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/studio/test-flakiness catalog and score calls to the real local BFF with explicit studio-admin or non-admin dev bearer scopes, and captures browser request bodies and auth headers while the live scorer calculates pass rate, flake score, classification, and quarantine recommendations.

The suite verifies anonymous redirect, studio-admin catalog load, breadcrumbs, route-map entries, quick-action targets, 44 px controls, default stable/failing / flaky scoring, threshold-dependent quarantine changes, client-only malformed JSON with zero POSTs, live BFF 400 details, score-network failure, malformed score success, pending-submit lockout, catalog loading, 503 catalog failure, malformed catalog failure, catalog-network failure, non-admin fail-closed auth, direct BFF auth/schema gates, and mobile containment without horizontal overflow. The first focused Playwright run exposed an auto-axe scrollable-region-focusable failure on the horizontally scrollable results table; the table scroller is now focusable and named, and the final run verifies that accessibility behavior.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioQualityReliabilityWorkspace.tsx apps/oshun/web/src/app/studio/quality-reliability/page.tsx apps/oshun/web/e2e/studio-quality-reliability.spec.ts
    • passed
  • pnpm exec prettier --write WALKTHROUGH/studio/operations/studio-quality-reliability.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioQualityReliabilityWorkspace.tsx apps/oshun/web/src/app/studio/quality-reliability/page.tsx apps/oshun/web/e2e/studio-quality-reliability.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioQualityReliabilityPage.test.tsx src/components/__tests__/StudioQualityReliabilityRouteMap.test.ts src/components/__tests__/StudioQualityReliabilityWorkspace.test.tsx src/components/__tests__/StudioQualityReliabilityWorkspace.integration.test.tsx
    • passed: 4 files, 7 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-studio-test-flakiness-route.test.ts
    • passed: 1 file, 5 tests
  • pnpm --dir apps/oshun/web run typecheck
    • passed; an intermediate run failed on stale generated .next/dev route types left by the dev server, then passed after clearing the generated .next cache
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During the final Playwright run, memory stayed above 5.9 GiB available even after another checkout started a separate Vitest/TypeScript run.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-quality-reliability.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • final rerun passed: 11 passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

259. 2026-07-03 Studio Isis ControlNet real-BFF coverage#

Closed the /studio/isis/controlnet walkthrough gap where the old runtime sweep proved only route render/data health and the ControlNet catalog, admin-scope gates, alias resolution states, route map, quick actions, touch targets, and mobile containment remained unchecked. The new Playwright spec opens the real Next Studio shell through the localhost-only Isis lane E2E bypass, proves the direct route is still hard-blocked by the Studio Isis boundary, forwards browser /v1/admin/isis/controlnet catalog and /v1/admin/isis/controlnet/resolve POSTs to the real local BFF with explicit studio-admin or non-admin dev bearer scopes, and captures browser auth headers and request bodies.

The suite verifies anonymous redirect, studio-admin catalog load, exact ControlNet modes and blend precedence, route-map articles, quick-action targets, 44 px controls, pending-submit lockout, real BFF alias resolution for ControlNet openpose, IP-Adapter identity, and InstantID instant-id, unresolved alias handling, live BFF invalid-payload errors, malformed 200 resolve responses, resolve-network failure, loading, 503 catalog failure, malformed catalog failure, catalog-network failure, non-admin fail-closed auth, direct BFF auth/schema gates, shared axe scans on rendered UI paths, and mobile containment without horizontal overflow. The first Playwright run exposed that unauthenticated BFF requests fail at the auth middleware with missing_bearer_token rather than the route-level missing_auth_context; the test now asserts the live middleware contract. A second run exposed that the request-only direct BFF test should skip page-level axe because no document is rendered; only that non-UI check now uses skipAxe, while all UI paths remain covered by the shared axe fixture.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisControlNetWorkspace.tsx apps/oshun/web/src/app/studio/isis/controlnet/page.tsx apps/oshun/web/e2e/studio-isis-controlnet.spec.ts
    • passed
  • pnpm exec prettier --write WALKTHROUGH/studio/domain-bridges/isis/studio-isis-controlnet.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioIsisControlNetWorkspace.tsx apps/oshun/web/src/app/studio/isis/controlnet/page.tsx apps/oshun/web/e2e/studio-isis-controlnet.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisControlNetWorkspace.test.tsx src/components/__tests__/StudioIsisControlNetWorkspace.integration.test.tsx src/components/__tests__/StudioIsisControlNetPage.test.tsx src/components/__tests__/StudioIsisControlNetRouteMap.test.ts
    • passed: 4 files, 6 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-isis-controlnet-route.test.ts
    • passed: 1 file, 6 tests
  • Resource gate before focused Playwright
    • 15 GiB RAM, 13 GiB available before the first launch, 29 GiB swap free, 48 GiB disk free, and no competing broad build/test process. During the first two runs another checkout started separate TypeScript checks; memory stayed above 5.5 GiB available. The final rerun started from 13 GiB available and no competing heavy verification process.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-isis-controlnet.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • final rerun passed: 10 passed
  • pnpm --dir apps/oshun/web run typecheck
    • passed
  • pnpm docs:center
    • passed
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • pnpm docs:center:test
    • passed
  • git diff --check
    • passed

260. 2026-07-03 Studio Isis IP-Adapter real-BFF coverage#

Closed the /studio/isis/ip-adapter walkthrough gap where the old runtime sweep proved only route render/data health and the IP-Adapter catalog, admin-scope gates, alias resolution states, route map, quick actions, touch targets, and mobile containment remained unchecked. The new Playwright spec opens the real Next Studio shell through the localhost-only Isis lane E2E bypass, proves the direct route is still hard-blocked by the Studio Isis boundary, forwards browser /v1/admin/isis/controlnet catalog and /v1/admin/isis/controlnet/resolve POSTs to the real local BFF with explicit studio-admin or non-admin dev bearer scopes, and captures browser auth headers and request bodies.

The suite verifies anonymous redirect, studio-admin catalog load, exact IP-Adapter modes, route-map articles, quick-action targets, 44 px controls, pending-submit lockout, real BFF alias resolution for identity, ip-adapter-style, and layout, unresolved alias handling, live BFF invalid-payload errors, malformed 200 resolve responses, resolve-network failure, loading, 503 catalog failure, malformed catalog failure, catalog-network failure, non-admin fail-closed auth, direct BFF auth/schema gates, shared axe scans on rendered UI paths, and mobile containment without horizontal overflow. The page now exposes stable route-map and quick-action selectors, pending form/submit state selectors, and fail-closed client parsing for malformed catalog or resolve success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioIsisIPAdapterWorkspace.tsx apps/oshun/web/src/app/studio/isis/ip-adapter/page.tsx apps/oshun/web/e2e/studio-isis-ip-adapter.spec.ts WALKTHROUGH/studio/domain-bridges/isis/studio-isis-ip-adapter.md
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioIsisIPAdapterWorkspace.tsx apps/oshun/web/src/app/studio/isis/ip-adapter/page.tsx apps/oshun/web/e2e/studio-isis-ip-adapter.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioIsisIPAdapterWorkspace.test.tsx src/components/__tests__/StudioIsisIPAdapterWorkspace.integration.test.tsx src/components/__tests__/StudioIsisIPAdapterPage.test.tsx src/components/__tests__/StudioIsisIPAdapterRouteMap.test.ts
    • passed: 4 files, 6 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-isis-controlnet-route.test.ts
    • passed: 1 file, 6 tests
  • Resource gate before focused Playwright
    • 15 GiB RAM, 12 GiB available before launch, 29 GiB swap free, 48 GiB disk free. Another checkout had a CPU-heavy agent process active, so this run stayed narrow at one Chromium worker; during Playwright, memory stayed above 8.9 GiB available.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-isis-ip-adapter.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • passed: 10 passed
  • pnpm --dir apps/oshun/web run typecheck
    • passed; run while another checkout had a broader TypeScript rollout active, with this repo limited to the targeted web app typecheck
  • pnpm docs:center
    • passed; rendered 2991 files
  • pnpm docs:center:check
    • passed
  • pnpm docs:center:verify
    • passed
  • Resource gate before pnpm docs:center:test
    • 15 GiB RAM, 11 GiB available before launch, 29 GiB swap free, 48 GiB disk free. Another checkout still had a TypeScript rollout active, so the docs browser gate was run serialized.
  • pnpm docs:center:test
    • passed: 95 passed, 11 skipped

262. 2026-07-03 Studio Security Hardening Program real-BFF coverage#

Closed the /studio/security-hardening-program walkthrough gap where the old runtime sweep proved only route render/data health and the security-posture catalog, admin-scope gates, scoring states, quick actions, touch targets, malformed/offline failure paths, and mobile containment remained unchecked. The new Playwright spec opens the real Next Studio shell, forwards browser /v1/admin/studio/security-posture catalog and /v1/admin/studio/security-posture/evaluate POSTs to the real local BFF with explicit studio-admin or non-admin dev bearer scopes, and captures browser auth headers and request bodies while the live scorer computes severity-weighted posture and remediation rank.

The suite verifies anonymous redirect, studio-admin catalog load, exact severity/status catalog values, quick-action targets, 44 px controls, pending-submit lockout, seeded posture score 53.33, remediation ordering c2 → c3 → c5, perfect posture, deterministic same-gap remediation tie-breaks, client-only malformed JSON with zero POSTs, live BFF invalid-payload details, loading, 503 catalog failure, malformed catalog failure, malformed 200 evaluate responses, evaluate-network failure, non-admin fail-closed auth, direct BFF auth/schema gates, shared axe scans on rendered UI paths, and mobile containment without horizontal overflow. The page now exposes stable quick-action selectors, pending form/submit state selectors, touch-sized controls, and fail-closed client parsing for malformed catalog or evaluate success payloads.

Verification:

  • pnpm exec prettier --write apps/oshun/web/src/components/studio/StudioSecurityHardeningProgramWorkspace.tsx apps/oshun/web/src/app/studio/security-hardening-program/page.tsx apps/oshun/web/e2e/studio-security-hardening-program.spec.ts
    • passed
  • pnpm exec eslint --no-warn-ignored apps/oshun/web/src/components/studio/StudioSecurityHardeningProgramWorkspace.tsx apps/oshun/web/src/app/studio/security-hardening-program/page.tsx apps/oshun/web/e2e/studio-security-hardening-program.spec.ts --max-warnings=0
    • passed; emitted the existing Next pages-directory notice
  • pnpm --dir apps/oshun/web exec vitest run src/components/__tests__/StudioSecurityHardeningProgramWorkspace.test.tsx src/components/__tests__/StudioSecurityHardeningProgramWorkspace.validation.test.tsx
    • passed: 2 files, 5 tests
  • pnpm --dir apps/oshun/bff exec vitest run --passWithNoTests --maxWorkers=1 --no-file-parallelism src/__tests__/admin-studio-security-posture-route.test.ts
    • passed: 1 file, 6 tests
  • Resource gates before focused Playwright
    • First run: 15 GiB RAM, 8.0 GiB available before launch, 28 GiB swap free, 48 GiB disk free. Another checkout had CPU-heavy Python/Claude work active, so the run stayed narrow at one Chromium worker.
    • Final rerun: 15 GiB RAM, 7.5 GiB available before launch, 28 GiB swap free, 48 GiB disk free, with the same unrelated work still active.
  • pnpm --dir apps/oshun/web exec playwright test -c playwright.config.ts e2e/studio-security-hardening-program.spec.ts --project=chromium --workers=1 --retries=0 --reporter=list
    • first run exposed an incorrect test expectation for the edited payload score; the live scorer correctly returned 68.42 (13 achieved weight / 19 total weight)
    • final rerun passed: 11 passed
  • pnpm --dir apps/oshun/web run typecheck
    • passed