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

> 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 `:4010` → `next 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
   `fetch`es, 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 asserting** —
`openAuthenticatedShellPath` / `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`](./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 --version` — `PostgreSQL 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 --version` — `PostgreSQL 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 --version` — `PostgreSQL 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/:eventId` → `GET /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

## 176. 2026-06-28 Telegram profile expired-link recovery

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

## 209. 2026-06-29 Profile notifications footer telemetry coverage

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

## 210. 2026-06-29 Profile persona footer telemetry coverage

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

## 211. 2026-06-29 Profile Telegram deep-link telemetry coverage

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_RENDER` →
`blender-render`, `openpose` → `pose`, `feature-map` → `cached-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
