docs: design adaptive presentation evidence

This commit is contained in:
lda
2026-07-05 23:11:54 +07:00 Verified
parent c6348c1e3b
commit 9f1c428aaa
6 changed files with 250 additions and 36 deletions
+9 -4
View File
@@ -37,6 +37,7 @@ Design contracts:
- [`workflow console lifecycle explorer`](superpowers/specs/2026-07-02-workflow-console-lifecycle-explorer.md) - [`workflow console lifecycle explorer`](superpowers/specs/2026-07-02-workflow-console-lifecycle-explorer.md)
- [`demo autoplay and replay`](superpowers/specs/2026-07-03-demo-autoplay-replay.md) - [`demo autoplay and replay`](superpowers/specs/2026-07-03-demo-autoplay-replay.md)
- [`defense presentation storyboard`](superpowers/specs/2026-07-04-defense-presentation-storyboard-design.md) - [`defense presentation storyboard`](superpowers/specs/2026-07-04-defense-presentation-storyboard-design.md)
- [`adaptive presentation canvas and evidence inspector`](superpowers/specs/2026-07-05-adaptive-presentation-canvas-design.md)
Implementation order: Implementation order:
@@ -101,12 +102,16 @@ Implementation order:
[`defense presentation storyboard`](superpowers/specs/2026-07-04-defense-presentation-storyboard-design.md). [`defense presentation storyboard`](superpowers/specs/2026-07-04-defense-presentation-storyboard-design.md).
Implementation: Implementation:
[`editorial canvas and Interactive Figure plan`](historical/superpowers/plans/2026-07-05-editorial-canvas-interactive-figure.md). [`editorial canvas and Interactive Figure plan`](historical/superpowers/plans/2026-07-05-editorial-canvas-interactive-figure.md).
12. Then: adopt source-owned AI Elements chat primitives against existing 12. Then: adapt the logical presentation canvas continuously from `4:3` to
`16:9` and replace the resizing evidence drawer with a progress-row receipt
and centered inspector. Design:
[`adaptive presentation canvas and evidence inspector`](superpowers/specs/2026-07-05-adaptive-presentation-canvas-design.md).
13. Then: adopt source-owned AI Elements chat primitives against existing
`AgentMessagePart` / `AgentDriver` contracts. `AgentMessagePart` / `AgentDriver` contracts.
13. Future: implement Schema Form Surface and synchronized Approval Session. 14. Future: implement Schema Form Surface and synchronized Approval Session.
14. Future: implement Guided Run Beat Gates, presenter companion, Scene 10 15. Future: implement Guided Run Beat Gates, presenter companion, Scene 10
product graph, final scene visuals, evidence assets, and rehearsal timing. product graph, final scene visuals, evidence assets, and rehearsal timing.
15. Add a static slide/appendix shell only after presentation mode is clear. 16. Add a static slide/appendix shell only after presentation mode is clear.
Astro remains an option, not the default next surface. Astro remains an option, not the default next surface.
Boundaries: this is not a production admin panel, generic visual workflow Boundaries: this is not a production admin panel, generic visual workflow
@@ -179,7 +179,7 @@ Recipe stages:
evidence. evidence.
Each stage produces an agent event, and operation stages must carry the same Each stage produces an agent event, and operation stages must carry the same
operation metadata already used by `OperationBlock` and the evidence drawer. operation metadata already used by `OperationBlock` and the evidence surface.
## Architecture ## Architecture
@@ -252,7 +252,7 @@ PresentationRoute
The prepared driver reads from the reviewed recording and emits agent events The prepared driver reads from the reviewed recording and emits agent events
without a server. It passes operation evidence to the hook, which forwards it without a server. It passes operation evidence to the hook, which forwards it
to the evidence drawer. to the evidence surface.
In live mode, the driver calls the connected workflow server through the In live mode, the driver calls the connected workflow server through the
existing RPC operation path. Live mode is deferred to a future slice; the existing RPC operation path. Live mode is deferred to a future slice; the
@@ -301,7 +301,7 @@ The operator chat becomes a standard event-driven chat:
- workflow tool calls are rendered compactly in chat and can expand to - workflow tool calls are rendered compactly in chat and can expand to
`OperationBlock`; `OperationBlock`;
- presentation tool calls are rendered compactly in chat and update the stage; - presentation tool calls are rendered compactly in chat and update the stage;
- tool results link to the graph, trace, and evidence drawer; - tool results link to the graph, trace, and evidence inspector;
- approval request focuses the existing typed review panel. - approval request focuses the existing typed review panel.
The existing hard-coded chat copy should be replaced only where the agent event The existing hard-coded chat copy should be replaced only where the agent event
@@ -263,7 +263,7 @@ Replay timing is presentation timing, not the original network timing:
- completion: immediate after the final event; - completion: immediate after the final event;
- Pause and Next use the same reducer actions as live mode. - Pause and Next use the same reducer actions as live mode.
The UI displays a persistent `Recorded replay` label. Raw evidence drawers may The UI displays a persistent `Recorded replay` label. The evidence inspector may
show the recording's stored request and response, but must also identify the show the recording's stored request and response, but must also identify the
recording id. recording id.
@@ -86,7 +86,7 @@ Primary controls:
- `Space` / `ArrowRight`: next beat. - `Space` / `ArrowRight`: next beat.
- `ArrowLeft`: previous scripted beat. - `ArrowLeft`: previous scripted beat.
- `Esc`: close the current overlay or evidence drawer. - `Esc`: close the current overlay or evidence inspector.
- Mouse/touch: inspect node, open evidence, submit approval, or jump timeline. - Mouse/touch: inspect node, open evidence, submit approval, or jump timeline.
Backward navigation only rewinds visual/script state. It must not undo live Backward navigation only rewinds visual/script state. It must not undo live
@@ -206,7 +206,7 @@ Resume outcomes: submitted | cancelled
The block can appear compact inside chat and expand into a terminal-like panel. The block can appear compact inside chat and expand into a terminal-like panel.
The interpreted side may highlight graph nodes or stage elements. Raw evidence The interpreted side may highlight graph nodes or stage elements. Raw evidence
remains available through the global evidence drawer. remains available through the global evidence inspector.
## Graph ## Graph
@@ -253,7 +253,9 @@ SaaS/chat clone.
## 720p Constraint ## 720p Constraint
Design for `1280x720` as a first-class target. Design for a `720px` logical height and adaptive logical widths from `960px`
through `1280px`. See the
[adaptive presentation canvas design](2026-07-05-adaptive-presentation-canvas-design.md).
Rules: Rules:
@@ -281,9 +283,9 @@ Browser smoke should cover:
2. verify replay is the default; 2. verify replay is the default;
3. advance through all beats with keyboard; 3. advance through all beats with keyboard;
4. open node spotlight; 4. open node spotlight;
5. open evidence drawer; 5. open the evidence inspector;
6. jump to `#interrupt-approval`; 6. jump to `#interrupt-approval`;
7. complete the replay path on a `1280x720` viewport; 7. complete the replay path on `1024x768` and `1280x720` viewports;
8. verify the normal console route still works. 8. verify the normal console route still works.
## Success Criteria ## Success Criteria
@@ -296,6 +298,6 @@ The slice is complete when:
4. hash links jump to important beats; 4. hash links jump to important beats;
5. operation blocks make product calls visible and interpretable; 5. operation blocks make product calls visible and interpretable;
6. graph, interrupt, output, trace, and evidence are available without clutter; 6. graph, interrupt, output, trace, and evidence are available without clutter;
7. the route is readable at `1280x720`; 7. the route is readable from `4:3` through `16:9` supported ratios;
8. the normal console remains product-like and is not forced into cinematic 8. the normal console remains product-like and is not forced into cinematic
layout choices. layout choices.
@@ -77,13 +77,15 @@ The presentation is therefore an editorial thesis deck that temporarily
transforms into the product. It is not a dashboard or chat application used as transforms into the product. It is not a dashboard or chat application used as
a decorative container for every scene. a decorative container for every scene.
The stage has three stable regions: The stage has two stable content regions and one transient inspection layer:
```text ```text
+----------------+--------------------------------+----------------+ +----------------+--------------------------------+
| agent / chat | primary graph, model, output | evidence | | agent / chat | primary graph, model, output |
| optional | always owns visual focus | optional | | optional | always owns visual focus |
+----------------+--------------------------------+----------------+ +----------------+--------------------------------+
| progress and compact evidence receipt |
+-------------------------------------------------+
``` ```
The regions may expand, collapse, or overlap, but they do not swap meanings. The regions may expand, collapse, or overlap, but they do not swap meanings.
@@ -95,22 +97,26 @@ accidental application switch.
- **Left:** agent conversation and operation intent. - **Left:** agent conversation and operation intent.
- **Center:** the primary explanation, workflow graph, output, or evaluation - **Center:** the primary explanation, workflow graph, output, or evaluation
result. result.
- **Right:** raw and interpreted evidence, trace, schemas, or source details. - **Overlay:** raw and interpreted evidence, trace, schemas, or source details.
Narrative scenes hide chat. Demo scenes may show chat as `full`, `rail`, or Narrative scenes hide chat. Demo scenes may show chat as `full`, `rail`, or
`dock`. Evidence is collapsed unless the scene explicitly needs it. `dock`. Evidence appears as a compact progress-row receipt unless the presenter
explicitly opens the centered inspector.
The dock remains visible in a corner when chat is otherwise hidden. Pointer The dock remains visible in a corner when chat is otherwise hidden. Pointer
hover may preview it, but opening chat requires a click, keyboard action, or hover may preview it, but opening chat requires a click, keyboard action, or
presenter control so the interaction remains usable without a precise mouse. presenter control so the interaction remains usable without a precise mouse.
Vertical stacking is forbidden on the main path. At `1280x720`, the presenter Vertical stacking is forbidden on the main path. Across supported logical
must not scroll to discover the graph, approval control, output, or next action. canvases from `960x720` through `1280x720`, the presenter must not scroll to
discover the graph, approval control, output, or next action.
The audience route renders a deterministic `1280x720` canvas and scales it The audience route keeps a deterministic `720px` logical height and adapts its
proportionally to the available viewport, adding letterboxing when aspect logical width continuously from `960px` to `1280px`, covering `4:3` through
ratios differ. Scenes do not reflow like a responsive website; presenter and `16:9`. Container queries adapt placement without omitting information.
audience views must preserve the same composition and Focus Path. Unsupported extreme ratios letterbox. Presenter and audience views preserve
the same semantic content and Focus Path. See the
[adaptive presentation canvas design](2026-07-05-adaptive-presentation-canvas-design.md).
## Unified Presentation Identity ## Unified Presentation Identity
@@ -456,8 +462,8 @@ receive compatibility wrappers.
records with different mutability and responsibility. records with different mutability and responsibility.
- **Primary visual:** lifecycle records, including both draft-save and direct - **Primary visual:** lifecycle records, including both draft-save and direct
plan-import paths into an immutable artifact. plan-import paths into an immutable artifact.
- **Composition:** warm Editorial Canvas; center focus; evidence panel may show - **Composition:** warm Editorial Canvas; center focus; the progress row may
one compact record at a time. show one compact evidence receipt.
- **Evidence pointer:** thesis lifecycle chapter and lifecycle explorer. - **Evidence pointer:** thesis lifecycle chapter and lifecycle explorer.
- **Transition:** selecting a deployment zooms into the runtime architecture. - **Transition:** selecting a deployment zooms into the runtime architecture.
@@ -469,8 +475,8 @@ receive compatibility wrappers.
providers and stores, then into the graph runner and one `NodeUse` execution. providers and stores, then into the graph runner and one `NodeUse` execution.
- **Primary visual:** semantic zoom through four levels rather than four - **Primary visual:** semantic zoom through four levels rather than four
unrelated diagrams. unrelated diagrams.
- **Composition:** warm Editorial Canvas; chat hidden; right evidence panel - **Composition:** warm Editorial Canvas; chat hidden; the evidence receipt
peeks for concrete package or operation names. exposes concrete package or operation names without resizing the figure.
- **Evidence pointer:** thesis architecture diagrams, `docs/project_map.md`, and - **Evidence pointer:** thesis architecture diagrams, `docs/project_map.md`, and
`docs/source_architecture.md`. `docs/source_architecture.md`.
- **Transition:** the semantic zoom backs out into the public authoring surface. - **Transition:** the semantic zoom backs out into the public authoring surface.
@@ -485,7 +491,7 @@ receive compatibility wrappers.
- **Primary visual:** an operation sequence with one structured diagnostic and - **Primary visual:** an operation sequence with one structured diagnostic and
its repair action. its repair action.
- **Composition:** warm Editorial Canvas; chat hidden; a locally dark operation - **Composition:** warm Editorial Canvas; chat hidden; a locally dark operation
or terminal block may occupy center while evidence peeks right. or terminal block may occupy center while the evidence receipt updates below.
- **Evidence pointer:** CLI documentation, draft authoring API, and challenge - **Evidence pointer:** CLI documentation, draft authoring API, and challenge
UX findings. UX findings.
- **Transition:** the operation block becomes the first card in the agent UI. - **Transition:** the operation block becomes the first card in the agent UI.
@@ -526,7 +532,8 @@ receive compatibility wrappers.
writes, trace frames, and raw/interpreted evidence. writes, trace frames, and raw/interpreted evidence.
- **Primary visual:** interrupt approval followed by output and trace projection. - **Primary visual:** interrupt approval followed by output and trace projection.
- **Composition:** chat rail during approval, then dock; center alternates - **Composition:** chat rail during approval, then dock; center alternates
between interrupt, output, and trace; right evidence panel opens once. between interrupt, output, and trace; the centered evidence inspector opens
once through an explicit action.
- **Evidence pointer:** deterministic replay recording, typed interrupt schemas, - **Evidence pointer:** deterministic replay recording, typed interrupt schemas,
run inspect result, and trace events. run inspect result, and trace events.
- **Failure fallback:** if the live server or operation fails, switch to the - **Failure fallback:** if the live server or operation fails, switch to the
@@ -543,8 +550,8 @@ receive compatibility wrappers.
estimate. estimate.
- **Primary visual:** cohort structure, audited validity, failure classes, and - **Primary visual:** cohort structure, audited validity, failure classes, and
selected product improvements discovered through trials. selected product improvements discovered through trials.
- **Composition:** warm Editorial Canvas; chat hidden; one chart at a time; - **Composition:** warm Editorial Canvas; chat hidden; one chart at a time; the
evidence panel links to the audit/run records. evidence receipt links to the audit/run records.
- **Evidence pointer:** thesis evaluation chapter, Appendix C, generated cohort - **Evidence pointer:** thesis evaluation chapter, Appendix C, generated cohort
figures, and challenge reports. figures, and challenge reports.
- **Transition:** limitations remain while the charts simplify into the final - **Transition:** limitations remain while the charts simplify into the final
@@ -681,7 +688,8 @@ The storyboard implementation is acceptable when:
6. stage and chat themes can be controlled independently; 6. stage and chat themes can be controlled independently;
7. live failure can fall back to the matching replay event without layout 7. live failure can fall back to the matching replay event without layout
reset; reset;
8. the full main path is readable at `1280x720` with browser zoom at 100%; 8. the full main path is readable from `960x720` through `1280x720` logical
canvases with browser zoom at 100%;
9. reduced-motion mode preserves all information and controls; 9. reduced-motion mode preserves all information and controls;
10. discussion branches and the Q&A index open focused evidence and return to 10. discussion branches and the Q&A index open focused evidence and return to
the originating scene without replaying the presentation; the originating scene without replaying the presentation;
@@ -0,0 +1,199 @@
# Adaptive Presentation Canvas and Evidence Inspector Design
## Status
Approved design contract for adapting the thesis presentation between `4:3`
and `16:9` displays and replacing the persistent evidence drawer.
This specification narrows and updates the geometry and evidence behavior in
the [defense presentation storyboard](2026-07-04-defense-presentation-storyboard-design.md).
The storyboard remains authoritative for narrative order, claims, and scene
content.
## Problem
The audience route currently renders one fixed `1280x720` logical canvas. A
`4:3` projector therefore shows a smaller `16:9` composition with unnecessary
letterboxing even though the available height could support a larger stage.
Evidence also occupies a persistent right column. Beat-level evidence peeks
resize the primary visual, repeatedly disturb graph layout, and expose a long
scrolling surface that an audience cannot scan quickly. Evidence is necessary
for defense credibility, but it must not compete with the current argument.
## Design Principles
1. The presentation preserves one logical height and adapts its width.
2. Aspect ratio changes composition, not semantic content.
3. The primary visual never reflows merely because evidence becomes available.
4. Automatic evidence behavior remains quiet; detailed inspection is explicit.
5. Compact and wide layouts share one state model and component tree.
6. Unsupported extreme ratios letterbox rather than producing an unreviewed
composition.
## Adaptive Logical Canvas
The logical canvas height remains `720px`. Its logical width is derived from
the viewport aspect ratio and clamped between `960px` and `1280px`:
```text
logicalHeight = 720
logicalWidth = clamp(960, logicalHeight * viewportAspect, 1280)
scale = min(viewportWidth / logicalWidth, viewportHeight / logicalHeight)
```
Representative results:
| Viewport | Logical canvas | Result |
|---|---:|---|
| `1024x768` | `960x720` | fills a `4:3` display |
| `1200x800` | `1080x720` | uses the intermediate ratio |
| `1280x720` | `1280x720` | fills a `16:9` display |
Viewports narrower than `4:3` or wider than `16:9` use the nearest supported
logical ratio and letterbox the excess. There is no URL or hidden aspect-ratio
override. Resizing the browser and Playwright viewport is the rehearsal and
test mechanism.
`PresentationCanvas` owns only logical dimensions, scale, and centering. The
presentation stage responds to its logical inline size through container
queries. This keeps geometry decisions in CSS and avoids a parallel JavaScript
"compact mode" state.
## Composition Across Ratios
Wide layouts may keep chat as a rail beside the primary visual. As logical
width decreases, chat becomes an overlay rather than reducing the primary
visual below its useful width. The exact compact threshold is a visual tuning
constant, initially around `1080px` of logical width rather than a product
contract.
The same claim, labels, controls, graph nodes, and evidence records remain
available at every supported ratio. Compact layouts may change placement,
line wrapping, or overlay treatment, but they must not omit content to fit.
Chat and detailed evidence are mutually exclusive overlays in compact layouts.
Opening one closes the other. Wide layouts may retain a chat rail while the
evidence inspector overlays the stage; evidence never reintroduces a permanent
right column.
## Evidence States
Evidence has three presentation states:
```ts
type EvidencePresentation = "hidden" | "receipt" | "inspector";
```
### Hidden
No evidence affordance is emphasized. The stable bottom progress row remains.
### Receipt
The bottom progress row gains a compact evidence control. It shows the most
relevant operation or evidence label, its status when available, and the record
count. A typical row reads:
```text
6 / 12 · 2 / 4 Evidence: workflow.runs.start · Inspect
```
Beat metadata may request a receipt. Entering such a beat updates or briefly
emphasizes the receipt; it never opens detailed evidence automatically.
### Inspector
Activating the receipt or an explicit `View raw evidence` action opens a
centered inspection overlay occupying approximately 70 percent of the logical
canvas. The inspector overlays the stage without changing primary layout.
The first view is interpreted evidence: operation, outcome, identifiers,
duration, and a concise explanation. Raw JSON and equivalent CLI information
are secondary views in the same inspector. The selected record remains stable
when switching views.
The inspector uses accessible dialog semantics, traps focus while open, returns
focus to its trigger on close, and closes on `Escape`. Reduced-motion mode uses
an immediate appearance or short crossfade rather than scale or travel.
## State and Navigation
Beat definitions may select `hidden` or `receipt`; they may not auto-select
`inspector`. Explicit presenter or audience actions open the inspector.
Changing beats closes the inspector and recomputes the receipt from the new
beat. This prevents stale raw evidence from covering the next argument. The
close-overlay order handles the inspector before discussion or figure focus.
Scene, beat, and Figure Focus Path remain canonical URL state. Evidence and
chat overlays are transient presentation state and do not enter the URL.
The existing evidence data remains canonical. This change replaces only its
presentation projection; it does not create another evidence store or transport.
## Component Boundaries
- `PresentationCanvas` calculates adaptive logical dimensions and viewport fit.
- `PresentationStage` establishes the container-query context and coordinates
mutually exclusive overlays.
- `EvidenceReceipt` renders the compact progress-row affordance.
- `EvidenceInspector` renders interpreted and raw evidence in a dialog.
- The existing `EvidenceDrawer` is removed once its callers migrate. It does
not receive a compatibility wrapper because it has no external contract.
The state layer describes evidence intent without encoding drawer geometry.
Names such as `peek` and `open` should migrate to `receipt` and `inspector` so
future components consume the semantic behavior directly.
## Error and Empty States
- No records: the receipt says `Evidence unavailable`; the inspector action is
disabled.
- A record missing optional interpreted fields: show `Unavailable` for that
field while preserving raw evidence.
- Malformed raw data: show the bounded raw text and a decoding note rather than
failing the presentation route.
- Viewport measurement unavailable during initial render: begin from the
`1280x720` logical canvas and recompute after measurement.
## Verification
Unit and component tests cover:
- logical sizing at `1024x768`, `1200x800`, and `1280x720`;
- clamping and letterboxing outside the supported ratio range;
- no primary-stage dimension change between receipt and inspector states;
- receipt content and explicit inspector opening;
- inspector close, focus restoration, and `Escape` behavior;
- chat and evidence overlay exclusivity in compact layouts;
- inspector closure and receipt update on beat navigation;
- reduced-motion behavior and empty/malformed evidence states.
Playwright review captures the same representative viewports and verifies that
the graph, current claim, progress row, and evidence receipt remain readable
without page scroll. At least one screenshot per viewport includes the open
inspector. Screenshot review is manual; brittle pixel-diff thresholds are not
required.
## Acceptance Criteria
1. The audience route uses the available stage area continuously between `4:3`
and `16:9`.
2. The primary visual exposes the same information at every supported ratio.
3. Evidence availability never resizes the primary visual.
4. Beat navigation never opens detailed evidence automatically.
5. The progress row exposes concise evidence provenance when requested.
6. The inspector is keyboard accessible and readable at all supported ratios.
7. Compact chat and evidence overlays cannot obscure each other.
8. Existing scene, beat, Focus Path, replay, and evidence data contracts remain
intact.
## Out of Scope
- arbitrary responsive layouts below `4:3` or above `16:9`;
- mobile presentation authoring;
- a URL-selectable aspect-ratio mode;
- changing the evidence transport or canonical recording format;
- redesigning individual scene visuals;
- implementing the deferred child-figure Reveal motion.