feat: add read-only defense presenter route
This commit is contained in:
@@ -419,8 +419,10 @@ Presentation wishlist / defense readiness:
|
||||
[`interactive graphs and Scenes 3-6 choreography`](historical/superpowers/plans/2026-07-13-scenes-3-6-kernel-choreography.md)
|
||||
adds restrained Scene 3-5 choreography, a semantic-zoom architecture map,
|
||||
the readable `wf_core` and NodeUse figures, and a factual prepared-run graph
|
||||
inspector. The next follow-up is
|
||||
[`read-only presenter route`](superpowers/plans/2026-07-13-read-only-presenter-route.md).
|
||||
inspector. Completed:
|
||||
[`read-only presenter route`](historical/superpowers/plans/2026-07-13-read-only-presenter-route.md)
|
||||
provides a static speech, evidence, timing, fallback, and Q&A reader without
|
||||
RPC, replay, or audience-window synchronization.
|
||||
- Defense Q&A branch set:
|
||||
[`defense Q&A runbook`](runbooks/defense-qna.md) collects answers for
|
||||
"Where is the AI agent?", evaluation validity, security boundaries, demo
|
||||
|
||||
+27
-27
@@ -23,11 +23,11 @@
|
||||
- Modify: `web/apps/console/src/app/AppRoutes.tsx`
|
||||
- Modify: route tests
|
||||
|
||||
- [ ] Add `/presenter` without redirecting existing routes.
|
||||
- [ ] Support `#scene/<scene>/<beat>` and `#discuss/<branch>` inside the presenter route using the existing route vocabulary.
|
||||
- [ ] Invalid hashes fail closed to the first presenter note.
|
||||
- [ ] Expose previous, current, and next note metadata without mutating `/present`.
|
||||
- [ ] Provide an “Open audience slide” link targeting the corresponding `/present#scene/...` route.
|
||||
- [x] Add `/presenter` without redirecting existing routes.
|
||||
- [x] Support `#scene/<scene>/<beat>` and `#discuss/<branch>` inside the presenter route using the existing route vocabulary.
|
||||
- [x] Invalid hashes fail closed to the first presenter note.
|
||||
- [x] Expose previous, current, and next note metadata without mutating `/present`.
|
||||
- [x] Provide an “Open audience slide” link targeting the corresponding `/present#scene/...` route.
|
||||
|
||||
## Task 2: Build the reading layout
|
||||
|
||||
@@ -35,13 +35,13 @@
|
||||
- Create: `PresenterShell.tsx`, `PresenterNote.tsx`, `PresenterSidebar.tsx`, and `presenter.css`
|
||||
- Create component tests
|
||||
|
||||
- [ ] Use a restrained two-column layout: compact scene index and a 60-72 character reading column.
|
||||
- [ ] Show scene/beat, elapsed target, current must-say text, optional detail, claim warning, fallback, evidence pointers, and linked Q&A.
|
||||
- [ ] Place the next beat preview below the current note, not beside it.
|
||||
- [ ] Collapse optional detail, evidence, and Q&A by default using accessible disclosure controls.
|
||||
- [ ] Typeset must-say text at 20-24px with at least 1.5 line height.
|
||||
- [ ] Use distinct but quiet treatments for `Say`, `Optional`, `Warning`, `Fallback`, and `Evidence`; avoid dashboard cards around every paragraph.
|
||||
- [ ] Add a print stylesheet that produces a readable speech outline.
|
||||
- [x] Use a restrained two-column layout: compact scene index and a 60-72 character reading column.
|
||||
- [x] Show scene/beat, elapsed target, current must-say text, optional detail, claim warning, fallback, evidence pointers, and linked Q&A.
|
||||
- [x] Place the next beat preview below the current note, not beside it.
|
||||
- [x] Collapse optional detail, evidence, and Q&A by default using accessible disclosure controls.
|
||||
- [x] Typeset must-say text at 20-24px with at least 1.5 line height.
|
||||
- [x] Use distinct but quiet treatments for `Say`, `Optional`, `Warning`, `Fallback`, and `Evidence`; avoid dashboard cards around every paragraph.
|
||||
- [x] Add a print stylesheet that produces a readable speech outline.
|
||||
|
||||
## Task 3: Move presenter-only discussion content out of the audience panel
|
||||
|
||||
@@ -50,26 +50,26 @@
|
||||
- Modify: `web/apps/console/src/presentation/DiscussionPanel.test.tsx`
|
||||
- Modify: presenter Q&A components and tests
|
||||
|
||||
- [ ] Delete the commented `speakerHint` block from `DiscussionPanel.tsx`.
|
||||
- [ ] Render `speakerHint` only in `/presenter` as presenter guidance.
|
||||
- [ ] Keep the audience discussion panel limited to question, answer, context, and evidence.
|
||||
- [ ] Verify every prioritized Q&A branch has a short answer and evidence pointer; show missing expanded answers as absent, not placeholders.
|
||||
- [x] Delete the commented `speakerHint` block from `DiscussionPanel.tsx`.
|
||||
- [x] Render `speakerHint` only in `/presenter` as presenter guidance.
|
||||
- [x] Keep the audience discussion panel limited to question, answer, context, and evidence.
|
||||
- [x] Verify every prioritized Q&A branch has a short answer and evidence pointer; show missing expanded answers as absent, not placeholders.
|
||||
|
||||
## Task 4: Add static timing and rehearsal affordances
|
||||
|
||||
- [ ] Show target time per note and cumulative target time.
|
||||
- [ ] Add a local-only manual “mark covered” checkbox state if it can remain component-local; do not persist or synchronize it in this slice.
|
||||
- [ ] Add keyboard navigation within `/presenter` only, with a visible help summary.
|
||||
- [ ] Do not add an automatic timer until presenter behavior is rehearsed.
|
||||
- [x] Show target time per note and cumulative target time.
|
||||
- [x] Add a local-only manual “mark covered” checkbox state if it can remain component-local; do not persist or synchronize it in this slice.
|
||||
- [x] Add keyboard navigation within `/presenter` only, with a visible help summary.
|
||||
- [x] Do not add an automatic timer until presenter behavior is rehearsed.
|
||||
|
||||
## Task 5: Verification and documentation
|
||||
|
||||
- [ ] Test route isolation, hash parsing, note completeness, Q&A rendering, keyboard navigation, and audience links.
|
||||
- [ ] Run React Doctor after focused tests.
|
||||
- [ ] Run full console tests, typecheck, and build.
|
||||
- [ ] Capture `/presenter` at `1920x1080`, `1280x720`, and `1024x768`.
|
||||
- [ ] Confirm no audience-only RPC or replay effects run on `/presenter`.
|
||||
- [ ] Update `web/README.md`, `docs/runbooks/defense-presentation.md`, and `docs/current_roadmap.md`.
|
||||
- [ ] Archive this plan and commit.
|
||||
- [x] Test route isolation, hash parsing, note completeness, Q&A rendering, keyboard navigation, and audience links.
|
||||
- [x] Run React Doctor after focused tests.
|
||||
- [x] Run full console tests, typecheck, and build.
|
||||
- [x] Capture `/presenter` at `1920x1080`, `1280x720`, and `1024x768`.
|
||||
- [x] Confirm no audience-only RPC or replay effects run on `/presenter`.
|
||||
- [x] Update `web/README.md`, `docs/runbooks/defense-presentation.md`, and `docs/current_roadmap.md`.
|
||||
- [x] Archive this plan and commit.
|
||||
|
||||
**Completion gate:** `/presenter` is usable as a standalone rehearsal and defense aid, while `/present` remains unchanged and audience-clean.
|
||||
@@ -74,6 +74,16 @@ Open:
|
||||
http://127.0.0.1:5173/present
|
||||
```
|
||||
|
||||
Open the read-only presenter notes on the presenter laptop or a second window:
|
||||
|
||||
```text
|
||||
http://127.0.0.1:5173/presenter#scene/thesis/title
|
||||
```
|
||||
|
||||
`/presenter` does not control `/present`. It is a static speech, evidence, and
|
||||
Q&A reader with local covered-state checkboxes. Use its “Open audience slide”
|
||||
links when you need to align the audience window manually.
|
||||
|
||||
### Console And Live Workflow Server
|
||||
|
||||
Use this when showing `/console` or live RPC-backed workflow operations.
|
||||
@@ -183,6 +193,9 @@ visual hierarchy, chat mode, evidence mode, and fallback route.
|
||||
- In interactive figures: `Tab` enters the current figure node, arrow keys move
|
||||
between nodes, `Enter` expands an expandable node, and `Escape` pops one
|
||||
figure focus level.
|
||||
- In `/presenter`: `ArrowRight` advances one presenter note and `ArrowLeft`
|
||||
returns to the previous note. Disclosure controls and covered checkboxes are
|
||||
local and do not affect the audience route.
|
||||
|
||||
Avoid relying on undocumented shortcuts during the defense. If a control is not
|
||||
visible or listed here, treat it as rehearsal-only.
|
||||
|
||||
Reference in New Issue
Block a user