docs: record rehearsal screenshot runner verification

This commit is contained in:
lda
2026-07-13 00:43:37 +07:00 Verified
parent 67f22d154e
commit 0077bab225
+18 -73
View File
@@ -1,86 +1,31 @@
# Task 2 Implementation Report # Task 2 Implementation Report
## Summary ## Scope
Task 2 separates target health from replay playback. A healthy configured target Implemented the repeatable screenshot runner for the Task 1 rehearsal manifest.
now remains `Live target ready` while the demo timeline is replaying, while the
reviewed-recording fallback remains available when no target is configured or
health probing is disabled. Health probing is enabled only for main routes whose
scene is included by Task 1's `isDemoChromeScene`, including Scene 8.
## Changed Files - Added `scripts/presentation-rehearsal.ps1` with configurable base URL, output root, and viewports.
- The runner loads `scripts/presentation-rehearsal-routes.json`, validates the manifest is present/non-empty, captures every route at `1280,720` and `1024,768`, waits 800 ms, and fails with startup/capture errors.
- `web/apps/console/src/presentation/presentation-target-status.ts` - Added the rehearsal output directory to `.gitignore`.
- Removed the `replayActive` argument and replay-specific healthy-target - Documented the runner in `docs/runbooks/presentation-visual-review.md`.
branch.
- Preserved the public `PresentationTargetHealth` and `TargetProbeState`
types and existing target/probe/liveActive/failureReason inputs.
- `web/apps/console/src/presentation/presentation-target-status.test.ts`
- Updated healthy replay expectations to `ready` / `Live target ready`.
- Added explicit no-target reviewed-recording fallback coverage.
- `web/apps/console/src/presentation/usePresentationTargetStatus.ts`
- Removed replay coupling from health calculation.
- Kept disabled probing generic and ensured it does not call
`workflow.health`.
- `web/apps/console/src/presentation/usePresentationTargetStatus.test.tsx`
- Updated direct replay readiness expectations.
- Added disabled-probing coverage.
- `web/apps/console/src/presentation/PresentationRoute.tsx`
- Replaced the Scene 8 exception with `isDemoChromeScene`-based probing for
main routes.
- `web/apps/console/src/presentation/PresentationRoute.test.tsx`
- Covered healthy direct replay status, Scene 8 probing with a local
composer, title-route non-probing, and existing live controls under the
updated route behavior.
## Verification ## Verification
- TDD red run: the updated tests failed against the old replay branch, disabled ```text
Scene 8 probe, and title-route probe behavior as expected. pwsh -File scripts/presentation-rehearsal.ps1
- Focused tests: PASS: 42 routes x 2 viewports = 84 screenshots captured
- `pnpm --dir web --filter @lda/console test -- src/presentation/presentation-target-status.test.ts src/presentation/usePresentationTargetStatus.test.tsx src/presentation/PresentationRoute.test.tsx` git diff --check
- Result: 3 test files passed, 60 tests passed. PASS: no whitespace errors; only line-ending normalization warnings
- Typecheck: ```
- `pnpm --dir web typecheck`
- Result: all workspace typecheck projects passed.
- `git diff --check` passed.
## Deviations The users presentation dev server was already running. No server was stopped
or restarted.
The focused route tests that asserted live controls on the default title route ## Commit
were moved to a demo scene hash, because non-demo routes must no longer probe or
show target health actions. The live action assertions now account for both the
operator-chat and demo-stage controls that are present on a healthy demo route.
No footer rendering or file-browser changes were made. Implementation commit: `3770e345` (`test: add repeatable presentation screenshot rehearsal`)
## Concerns ## Concerns
The existing `OperatorChat.tsx` still has its own `isScene8` action-visibility The script captures screenshots but does not perform DOM geometry assertions;
condition. It was intentionally left unchanged because it is not target health those remain in the route/browser review and later rehearsal tasks as planned.
or route probing logic, and changing it would exceed this task's scope.
## Review Fix: Hide Target Status Outside Demo Arc
- `PresentationFooter` now derives demo-arc membership from `isDemoChromeScene`
and omits the target status badge for title and other non-demo routes.
- Added footer-level coverage for a non-demo `conclusion` scene and route-level
coverage for `#scene/conclusion/questions` with a configured target.
- No `PresentationStage`, `PresentationDemoRail`, file-browser, or unrelated
chat rendering changes were needed.
## Review Fix Verification
- TDD red run: both new regressions failed against the unconditional footer badge.
- Covering tests:
- `pnpm --dir web --filter @lda/console test -- src/presentation/PresentationFooter.test.tsx src/presentation/PresentationRoute.test.tsx src/presentation/presentation-target-status.test.ts src/presentation/usePresentationTargetStatus.test.tsx`
- Result: 4 test files passed, 63 tests passed.
- Typecheck:
- `pnpm --dir web typecheck`
- Result: all workspace typecheck projects passed.
- `git diff --check` passed.
## Review Fix Concerns
None beyond the pre-existing `OperatorChat.tsx` Scene 8 condition documented
above; Task 3 and unrelated presentation surfaces were not touched.