# Presentation Opening Title Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Rebuild Scene 1 as an agent-shaped title composition that identifies
`Runner / platform` as the implemented contribution without stealing Scene 2's
problem framing.
**Architecture:** Keep the existing `OpeningThesisScene` and `ConceptNode`
primitives, but give Scene 1 its own wrapper and connected-role composition.
The scene owns its two beat states through `data-opening-focus`; no global
theme, router, or story-flow changes are required. The formal thesis title stays
in a compact Scene 1 caption while the role system becomes the focal artifact.
**Tech Stack:** React 19, TypeScript, Vitest + Testing Library, existing
presentation CSS and concept SVG primitives.
## Global Constraints
- Preserve the existing editorial canvas, Barlow Condensed/Source Sans/IBM Plex
Mono typography, and cyan as the only active presentation accent.
- Do not change Scene 2's transcript, copy, or direct-actions-versus-reusable-
automation responsibility.
- Do not introduce a third presentation theme, a new component library, or
generic same-weight card grids.
- Keep both Scene 1 beats readable and unclipped at 1280x720 and respect the
existing reduced-motion rule.
- Add a concise comment for the non-obvious fallback or state mapping only.
---
### Task 1: Define the Scene 1 Copy And Beat Contract
**Files:**
- Modify: `web/apps/console/src/presentation/opening/OpeningThesisScene.tsx`
- Modify: `web/apps/console/src/presentation/opening/OpeningThesisScene.test.tsx`
**Interfaces:**
- Consumes: `SceneDefinition`, `SceneBeatDefinition`, `ConceptNode`, and
`ConceptRail`.
- Produces: `OpeningThesisScene` markup with `data-opening-focus="title" |
"contribution"`, a main heading, and an agent-role group.
- [x] **Step 1: Write failing title-beat assertions**
```tsx
const opening = screen.getByRole("region", { name: /thesis opening/i });
expect(opening).toHaveAttribute("data-opening-focus", "title");
expect(screen.getByRole("heading", { name: "An AI Agent for Workspace Workflows" })).toBeInTheDocument();
expect(screen.getByRole("group", { name: "AI agent roles" })).toBeInTheDocument();
expect(screen.queryByRole("heading", { name: "Thesis" })).not.toBeInTheDocument();
expect(screen.queryByText("Decomposed")).not.toBeInTheDocument();
```
- [x] **Step 2: Run the title-beat test and verify it fails**
Run:
```powershell
pnpm --dir web --filter @lda/console test -- src/presentation/opening/OpeningThesisScene.test.tsx
```
Expected: FAIL because the main heading is currently `Thesis` and the agent
roles retain the old `AI agent components` label.
- [x] **Step 3: Write failing contribution-beat assertions**
```tsx
render();
const opening = screen.getByRole("region", { name: /thesis opening/i });
expect(opening).toHaveAttribute("data-opening-focus", "contribution");
expect(screen.getByText("Runner / platform")).toBeInTheDocument();
expect(screen.getByText("Implemented contribution")).toBeInTheDocument();
expect(screen.getByText("Lifecycle, validation, records, traces, and interrupt/resume")).toBeInTheDocument();
expect(screen.getByText("Planner")).toBeInTheDocument();
expect(screen.getByText("Tool surface")).toBeInTheDocument();
```
- [x] **Step 4: Run the contribution-beat test and verify it fails**
Run:
```powershell
pnpm --dir web --filter @lda/console test -- src/presentation/opening/OpeningThesisScene.test.tsx
```
Expected: FAIL because the current label is `Workflow Platform` and no
`Implemented contribution` scope exists.
- [x] **Step 5: Implement the semantic opening composition**
Replace the old title-card strings and decomposition labels with this structure:
```tsx
const contributionBeat = beat.id === "substrate";
return (
{beat.caption}
Product goal
An AI Agent for Workspace Workflows
{contributionBeat ? (
<>
Implemented contribution
Lifecycle, validation, records, traces, and interrupt/resume
>
) : null}
);
```
Keep `scene.evidencePointer` after the section. If `ConceptNode` needs to
accept multi-line metadata, change its `children` wrapper to retain nested
content without changing its behavior in Scene 2.
- [x] **Step 6: Run the focused tests and verify they pass**
Run:
```powershell
pnpm --dir web --filter @lda/console test -- src/presentation/opening/OpeningThesisScene.test.tsx src/presentation/SceneBody.test.tsx
```
Expected: PASS. Scene 1 tests enforce the new title and contribution wording;
Scene 2 integration assertions remain unchanged.
- [x] **Step 7: Commit the semantic composition**
```powershell
git add web/apps/console/src/presentation/opening/OpeningThesisScene.tsx web/apps/console/src/presentation/opening/OpeningThesisScene.test.tsx
git commit -m "feat: reframe presentation opening as agent roles"
```
### Task 2: Render One Connected Agent System Instead Of Three Cards
**Files:**
- Modify: `web/apps/console/src/presentation/presentation.css`
- Test: `web/apps/console/src/presentation/opening/OpeningThesisScene.test.tsx`
**Interfaces:**
- Consumes: the `opening-thesis-scene`, `opening-thesis`, and `ConceptRail`
markup created in Task 1.
- Produces: distinct title and contribution layouts controlled solely by
`data-opening-focus`.
- [x] **Step 1: Add a failing structural assertion for the connected system**
```tsx
const roles = screen.getByRole("group", { name: "AI agent roles" });
expect(roles).toHaveClass("opening-thesis__agent-system");
expect(roles.querySelectorAll("[data-concept-emphasis]")).toHaveLength(3);
```
- [x] **Step 2: Run the test and verify it fails**
Run:
```powershell
pnpm --dir web --filter @lda/console test -- src/presentation/opening/OpeningThesisScene.test.tsx
```
Expected: FAIL because Scene 1 currently uses the generic concept rail class
without a Scene 1 system hook.
- [x] **Step 3: Implement Scene 1-specific layout rules**
Add `className="opening-thesis__agent-system"` to the Scene 1 `ConceptRail`.
Replace the existing `.opening-thesis` and `.opening-thesis__title-card` block
with rules following this shape:
```css
.opening-thesis-scene {
display: grid;
flex: 1 1 auto;
min-height: 0;
grid-template-rows: auto minmax(0, 1fr);
gap: 0.85rem;
}
.opening-thesis {
display: grid;
min-height: 0;
align-content: center;
gap: clamp(1.5rem, 4vh, 3rem);
}
.opening-thesis__statement {
max-width: 21ch;
}
.opening-thesis__statement h2 {
margin: 0;
font: 800 clamp(2.8rem, 6.5vw, 5.25rem) / 0.95 var(--font-editorial);
letter-spacing: -0.03em;
text-wrap: balance;
}
.opening-thesis__agent-system {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 0;
}
.opening-thesis__agent-system .concept-node {
border: 0;
border-radius: 0;
background: transparent;
}
.opening-thesis__agent-system .concept-node:not(:last-child)::after {
position: absolute;
top: 50%;
right: -0.45rem;
width: 0.9rem;
border-top: 1px solid var(--stage-line);
content: "";
}
.opening-thesis[data-opening-focus="contribution"] .opening-thesis__agent-system {
grid-template-columns: 0.72fr 0.72fr minmax(0, 1.56fr);
}
```
Add a compact contribution label treatment inside only the selected platform
role. It may use cyan text and a solid stage-surface background, but the planner
and tool roles remain connected context rather than dimmed generic cards. Add a
`prefers-reduced-motion` override matching the existing presentation rules.
- [x] **Step 4: Run the focused tests and typecheck**
Run:
```powershell
pnpm --dir web --filter @lda/console test -- src/presentation/opening/OpeningThesisScene.test.tsx src/presentation/SceneBody.test.tsx
pnpm --dir web --filter @lda/console typecheck
```
Expected: PASS with no TypeScript errors.
- [x] **Step 5: Capture both 720p opening beats and inspect them**
Run:
```powershell
playwright-cli goto 'http://127.0.0.1:5173/present#scene/thesis/title'
playwright-cli screenshot --filename='web/apps/console/.visual-smoke/opening-title-agent-system.png' --hires
playwright-cli goto 'http://127.0.0.1:5173/present#scene/thesis/substrate'
playwright-cli screenshot --filename='web/apps/console/.visual-smoke/opening-contribution-agent-system.png' --hires
```
Expected: the first screenshot has `An AI Agent for Workspace Workflows` as its
largest text; the second makes `Runner / platform` clearly dominant without
clipping the formal title, footer, or role labels.
- [x] **Step 6: Commit the visual system**
```powershell
git add web/apps/console/src/presentation/opening/OpeningThesisScene.tsx web/apps/console/src/presentation/opening/OpeningThesisScene.test.tsx web/apps/console/src/presentation/presentation.css
git commit -m "style: connect presentation opening agent roles"
```
### Task 3: Record Completion And Verify The Presentation Surface
**Files:**
- Modify: `docs/current_roadmap.md`
- Move: `docs/superpowers/plans/2026-07-11-presentation-opening-title.md` to `docs/historical/superpowers/plans/2026-07-11-presentation-opening-title.md`
**Interfaces:**
- Consumes: completed Scene 1 component, focused tests, and captured local
screenshots.
- Produces: a roadmap that accurately marks the Scene 1 title slice complete
and retains the separate rehearsal slice as next work.
- [x] **Step 1: Update the roadmap entry**
Replace the current Scene 1 next-slice wording with:
```markdown
7. Completed: Scene 1 now introduces the agent-shaped product goal through
Planner -> Tool surface -> Runner / platform, then identifies the last role
as the implemented contribution. Scene 2 remains responsible for the
automation problem. Implementation:
[`presentation opening title`](historical/superpowers/plans/2026-07-11-presentation-opening-title.md).
```
- [x] **Step 2: Run the full web verification suite**
Run:
```powershell
pnpm --dir web test
pnpm --dir web typecheck
pnpm --dir web build
git diff --check
```
Expected: all workspace tests, typechecks, and builds pass. The existing Vite
chunk-size warning may remain; do not change bundle configuration in this slice.
- [x] **Step 3: Archive the completed plan and commit documentation**
```powershell
Move-Item docs/superpowers/plans/2026-07-11-presentation-opening-title.md docs/historical/superpowers/plans/2026-07-11-presentation-opening-title.md
git add docs/current_roadmap.md docs/historical/superpowers/plans/2026-07-11-presentation-opening-title.md
git add -u docs/superpowers/plans
git commit -m "docs: complete presentation opening title slice"
```
## Self-Review
- Spec coverage: Task 1 implements exact title/role/copy acceptance criteria;
Task 2 implements the connected visual system, focus state, and 720p visual
evidence; Task 3 records completion and verifies the presentation surface.
- Placeholder scan: no TODO, TBD, or deferred implementation steps remain.
- Type consistency: `data-opening-focus` has only `title` and `contribution`
values in the plan, and Task 1's tests use the same names that Task 2 styles.
- Scope: the rehearsal contract is deliberately excluded and remains the next
independent slice.