docs: add defense beat goals and anchor terms
This commit is contained in:
@@ -2,9 +2,9 @@
|
||||
|
||||
> **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:** Replace the terminology-heavy timed narration for Scenes 1-8 with short spoken English that carries one idea per beat.
|
||||
**Goal:** Replace the terminology-heavy timed narration for Scenes 1-8 with a clear audience goal, anchor terms, and short suggested wording for every beat.
|
||||
|
||||
**Architecture:** Keep `presenter-notes.ts` as the typed source of truth and keep the readable runbook synchronized through its existing test. Only `mustSay` text and timing change; evidence pointers, warnings, fallbacks, and Q&A links remain available to the presenter.
|
||||
**Architecture:** Keep `presenter-notes.ts` as the typed source of truth and add `goal` plus `keywords` beside the existing suggested `mustSay` wording. Render all three in `/presenter`, keep the readable runbook synchronized through tests, and preserve evidence pointers, warnings, fallbacks, and Q&A links.
|
||||
|
||||
**Tech Stack:** TypeScript, Vitest, Markdown runbooks, React presenter route.
|
||||
|
||||
@@ -12,14 +12,16 @@
|
||||
|
||||
- The audience-facing storyboard remains unchanged in this slice.
|
||||
- Do not remove evidence warnings, replay disclosures, or Q&A links.
|
||||
- Scenes 1-8 must use one mandatory spoken idea per beat and avoid lists of unexplained system nouns.
|
||||
- Every beat must define one audience goal and one to three anchor terms.
|
||||
- Scenes 1-8 must additionally use one short suggested sentence per beat.
|
||||
- `mustSay` is suggested wording, not a word-for-word obligation; `/presenter` must label it accordingly.
|
||||
- Provider neutrality, typed contracts, source resolution, resume boundaries, and NodeUse remain optional-detail or Q&A material unless a beat visually demonstrates them.
|
||||
- The timed Scenes 1-8 path must total 257 seconds or less.
|
||||
- The complete must-say catalog must contain 500-700 words.
|
||||
|
||||
---
|
||||
|
||||
### Task 1: Pin The Simpler Speech And Timing Contract
|
||||
### Task 1: Pin Goals, Keywords, Simpler Speech, And Timing
|
||||
|
||||
**Files:**
|
||||
- Modify: `web/apps/console/src/presentation/presenter/presenter-notes.test.ts`
|
||||
@@ -31,7 +33,7 @@
|
||||
|
||||
- [ ] **Step 1: Replace the old timing and word-budget expectations**
|
||||
|
||||
Assert scene totals of `[30, 30, 35, 40, 36, 32, 12, 42, 35, 30, 50, 120, 75]`, a complete-deck target of `642` including the existing 75-second navigation buffer, and a `500-700` word budget. Add a loop over Scenes 1-8 that strips Markdown emphasis, splits on whitespace, and asserts no `mustSay` value exceeds 28 words.
|
||||
Assert scene totals of `[30, 30, 35, 40, 36, 32, 12, 42, 35, 30, 50, 120, 75]`, a complete-deck target of `642` including the existing 75-second navigation buffer, and a `500-700` word budget. Check every beat has a non-empty `goal` and one to three non-empty `keywords`. Separately check that no suggested `mustSay` value in Scenes 1-8 exceeds 28 words.
|
||||
|
||||
```ts
|
||||
const openingSceneIds = new Set([
|
||||
@@ -45,6 +47,13 @@ const openingSceneIds = new Set([
|
||||
"prepared-lifecycle",
|
||||
]);
|
||||
|
||||
for (const note of presenterNotes) {
|
||||
expect(note.goal.trim().length, `${note.sceneId}/${note.beatId}`).toBeGreaterThan(0);
|
||||
expect(note.keywords.length, `${note.sceneId}/${note.beatId}`).toBeGreaterThanOrEqual(1);
|
||||
expect(note.keywords.length, `${note.sceneId}/${note.beatId}`).toBeLessThanOrEqual(3);
|
||||
expect(note.keywords.every((keyword) => keyword.trim().length > 0)).toBe(true);
|
||||
}
|
||||
|
||||
for (const note of presenterNotes.filter((item) => openingSceneIds.has(item.sceneId))) {
|
||||
const words = note.mustSay.replaceAll("**", "").trim().split(/\s+/);
|
||||
expect(words.length, `${note.sceneId}/${note.beatId}`).toBeLessThanOrEqual(28);
|
||||
@@ -79,7 +88,7 @@ git add web/apps/console/src/presentation/presenter/presenter-notes.test.ts
|
||||
git commit -m "test: define simpler defense speech contract"
|
||||
```
|
||||
|
||||
### Task 2: Rewrite Scenes 1-8 Must-Say Notes
|
||||
### Task 2: Add Goals And Keywords To Every Beat, Then Rewrite Scenes 1-8
|
||||
|
||||
**Files:**
|
||||
- Modify: `web/apps/console/src/presentation/presenter/presenter-notes.ts`
|
||||
@@ -87,7 +96,7 @@ git commit -m "test: define simpler defense speech contract"
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: `beatNote()` and the existing note metadata.
|
||||
- Produces: the exact presenter speech rendered by `/presenter`.
|
||||
- Produces: presenter goals, anchor terms, and suggested speech rendered by `/presenter`.
|
||||
|
||||
- [ ] **Step 1: Set the new target seconds**
|
||||
|
||||
@@ -104,7 +113,72 @@ Use these per-beat values:
|
||||
// Scene 8: 7, 7, 7, 7, 7, 7
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Replace the exact `mustSay` values for Scenes 1-8**
|
||||
- [ ] **Step 2: Extend the presenter note type and constructor**
|
||||
|
||||
Add these required fields:
|
||||
|
||||
```ts
|
||||
export type PresenterBeatNote = {
|
||||
readonly sceneId: MainSceneId;
|
||||
readonly beatId: string;
|
||||
readonly targetSeconds: number;
|
||||
readonly goal: string;
|
||||
readonly keywords: readonly [string, ...string[]];
|
||||
readonly mustSay: string;
|
||||
// existing metadata remains unchanged
|
||||
};
|
||||
```
|
||||
|
||||
Add `goal` and `keywords` parameters to `beatNote()` before `mustSay`. Keep
|
||||
`mustSay` as the existing field name to avoid unrelated navigation churn.
|
||||
|
||||
- [ ] **Step 3: Add exact goals and keywords for every beat**
|
||||
|
||||
Use this catalog in storyboard order:
|
||||
|
||||
```text
|
||||
thesis/title: Goal "Separate the AI-agent ambition from the implemented contribution." Keywords "AI-agent goal", "platform underneath"
|
||||
thesis/substrate: Goal "State what the platform lets its users do." Keywords "agents and humans", "build, run, inspect"
|
||||
problem/direct-actions: Goal "Show why one successful chat is not yet automation." Keywords "tool calls", "not reusable"
|
||||
problem/missing-contracts: Goal "Name the minimum durable properties reusable automation needs." Keywords "saved definition", "validation", "execution records"
|
||||
positioning/landscape: Goal "Place the work beside familiar adjacent systems." Keywords "Python / n8n / Zapier", "LangGraph", "MCP"
|
||||
positioning/lda-position: Goal "State the platform's narrow position without a superiority claim." Keywords "provider-neutral", "workflow layer", "not a replacement"
|
||||
planner-runtime/planner: Goal "Assign workflow decisions to an external planner." Keywords "human or AI planner"
|
||||
planner-runtime/runtime: Goal "Assign execution and recording to the runtime." Keywords "validation", "step-by-step execution", "state and traces"
|
||||
planner-runtime/boundary: Goal "Introduce the public seam between clients and runtime." Keywords "Workflow API", "CLI", "JSON-RPC"
|
||||
lifecycle/draft: Goal "Introduce the editable lifecycle state." Keywords "Draft", "being built"
|
||||
lifecycle/artifact: Goal "Introduce the immutable saved definition." Keywords "Artifact", "immutable version"
|
||||
lifecycle/deployment: Goal "Connect a saved definition to a runnable environment." Keywords "Deployment", "sources", "ready"
|
||||
lifecycle/run: Goal "Introduce one persisted execution record." Keywords "Run", "status", "output and trace"
|
||||
architecture/overview: Goal "Show how the implementation realizes the earlier concepts." Keywords "architecture spine"
|
||||
architecture/client: Goal "Show that humans and agents share one public surface." Keywords "shared operations"
|
||||
architecture/api: Goal "Identify the system's public front door." Keywords "Workflow API", "public boundary"
|
||||
architecture/runtime: Goal "Explain what the server composes behind the API." Keywords "WorkflowServer", "records and capabilities", "execution core"
|
||||
agent-handoff/request: Goal "Disclose the prepared demonstration before it begins." Keywords "prepared example", "not an autonomous planner"
|
||||
prepared-lifecycle/discover: Goal "Show that authoring starts with interface discovery." Keywords "sources", "capabilities"
|
||||
prepared-lifecycle/draft: Goal "Show mutable workflow authoring." Keywords "Draft", "editable workflow"
|
||||
prepared-lifecycle/diagnose: Goal "Show a concrete structured validation failure." Keywords "validation", "missing_outcome_edge"
|
||||
prepared-lifecycle/repair: Goal "Show the exact focused correction and revalidation." Keywords "set-route", "validation passes"
|
||||
prepared-lifecycle/artifact: Goal "Show the transition to an immutable saved version." Keywords "Artifact", "immutable"
|
||||
prepared-lifecycle/deployment: Goal "Show source binding and readiness before execution." Keywords "Deployment", "three local sources"
|
||||
run-from-deployment/input: Goal "Show the concrete inputs supplied before execution." Keywords "run input", "selected documents"
|
||||
run-from-deployment/operation: Goal "Show that one public operation creates a persisted execution." Keywords "workflow.runs.start", "persisted Run"
|
||||
run-from-deployment/graph: Goal "Show the reusable workflow executing beyond the chat conversation." Keywords "workflow graph", "declared interrupt"
|
||||
typed-human-boundary/interrupt: Goal "Show what the paused workflow asks from the operator." Keywords "issue_review", "interrupt payload", "resume schema"
|
||||
typed-human-boundary/approval: Goal "Show that the operator chooses a declared continuation." Keywords "submitted", "revision-requested", "typed resume"
|
||||
resume-output-evidence/resume: Goal "Show continuation of the same recorded run." Keywords "workflow.runs.resume", "same Run"
|
||||
resume-output-evidence/output: Goal "Show the persisted terminal results of the submitted path." Keywords "report output", "issue-board changes"
|
||||
resume-output-evidence/trace: Goal "Show that execution evidence remains inspectable after completion." Keywords "trace frames", "protocol evidence"
|
||||
evaluation/cohort: Goal "Describe the external-agent evaluation design." Keywords "36 trials", "two challenges", "three profiles"
|
||||
evaluation/validity: Goal "Separate audited valid evidence from contaminated samples." Keywords "27 pass", "8 invalid", "1 fail"
|
||||
evaluation/findings: Goal "State what the evaluation supports and what it cannot prove." Keywords "longitudinal evidence", "not a benchmark"
|
||||
conclusion/limits: Goal "Bound the prototype claims before the final contribution statement." Keywords "prototype", "not production security"
|
||||
conclusion/future: Goal "Name the surrounding layers left as future work." Keywords "live agent", "scheduling", "controlled evaluation"
|
||||
conclusion/conclusion: Goal "Restate the implemented contribution and planner-runtime boundary." Keywords "planner proposes", "platform executes"
|
||||
conclusion/questions: Goal "Open structured examiner discussion without introducing new claims." Keywords "defense questions", "evidence"
|
||||
```
|
||||
|
||||
- [ ] **Step 4: Replace the exact `mustSay` values for Scenes 1-8**
|
||||
|
||||
Use these sentences in storyboard order:
|
||||
|
||||
@@ -144,18 +218,60 @@ Finally, a deployment connects it to the three local sources it needs.
|
||||
|
||||
Preserve the existing warnings, fallbacks, evidence pointers, and Q&A branch IDs. Move the existing qualification about fixed definitions/provider variability into `optionalDetail` on `planner-runtime/runtime` if it is not already represented by `warning`.
|
||||
|
||||
- [ ] **Step 3: Run the focused test and verify only runbook synchronization remains RED**
|
||||
- [ ] **Step 5: Run the focused test and verify only UI/runbook synchronization remains RED**
|
||||
|
||||
Run the focused presenter-note test. Expected: catalog/timing/word constraints pass; synchronization fails because the readable runbook still contains the old speech.
|
||||
|
||||
- [ ] **Step 4: Commit the typed catalog rewrite**
|
||||
- [ ] **Step 6: Commit the typed catalog rewrite**
|
||||
|
||||
```powershell
|
||||
git add web/apps/console/src/presentation/presenter/presenter-notes.ts web/apps/console/src/presentation/presenter/presenter-notes.test.ts
|
||||
git commit -m "docs: simplify opening defense speech"
|
||||
```
|
||||
|
||||
### Task 3: Synchronize The Readable Speech Runbook
|
||||
### Task 3: Render Goals And Keywords In `/presenter`
|
||||
|
||||
**Files:**
|
||||
- Modify: `web/apps/console/src/presentation/presenter/PresenterNote.tsx`
|
||||
- Modify: `web/apps/console/src/presentation/presenter/PresenterNote.test.tsx`
|
||||
- Modify: `web/apps/console/src/presentation/presenter/presenter.css`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: `PresenterBeatNote.goal`, `keywords`, and `mustSay`.
|
||||
- Produces: a rehearsal surface that distinguishes the slide goal, anchor terms, and flexible wording.
|
||||
|
||||
- [ ] **Step 1: Write failing presenter-note tests**
|
||||
|
||||
Assert the current note renders regions labelled `Beat goal`, `Anchor terms`,
|
||||
and `Suggested wording`. Assert every keyword is visible and that the old label
|
||||
`Must say` is absent.
|
||||
|
||||
- [ ] **Step 2: Run the focused test and verify RED**
|
||||
|
||||
Run `PresenterNote.test.tsx` directly.
|
||||
|
||||
- [ ] **Step 3: Render the three-level rehearsal hierarchy**
|
||||
|
||||
Render the goal first as one concise sentence, keywords second as a plain list
|
||||
of one to three strong terms, and the Markdown sentence under `Suggested
|
||||
wording`. Do not render keywords as decorative pills; use readable inline text
|
||||
or a compact list.
|
||||
|
||||
- [ ] **Step 4: Style for desktop and mobile rehearsal**
|
||||
|
||||
Keep the goal visually strongest, keywords high-contrast and scannable, and
|
||||
suggested wording readable but subordinate. Preserve the stable Previous/Next
|
||||
bar and existing Q&A sidebar.
|
||||
|
||||
- [ ] **Step 5: Run tests and commit**
|
||||
|
||||
```powershell
|
||||
pnpm --dir web --filter @lda/console test -- src/presentation/presenter/PresenterNote.test.tsx
|
||||
git add web/apps/console/src/presentation/presenter
|
||||
git commit -m "feat: show presenter goals and anchor terms"
|
||||
```
|
||||
|
||||
### Task 4: Synchronize The Readable Speech Runbook
|
||||
|
||||
**Files:**
|
||||
- Modify: `docs/runbooks/defense-speech-and-claim-audit.md`
|
||||
@@ -165,6 +281,10 @@ git commit -m "docs: simplify opening defense speech"
|
||||
- Consumes: exact `mustSay` strings from Task 2.
|
||||
- Produces: a readable rehearsal document synchronized with `/presenter`.
|
||||
|
||||
Add each beat's **Goal** and **Anchor terms** throughout the runbook. For Scenes
|
||||
1-8, also replace the **Suggested wording** with the exact plain-text version of
|
||||
Task 2's `mustSay` value so the existing synchronization test stays meaningful.
|
||||
|
||||
- [ ] **Step 1: Update timing prose and table**
|
||||
|
||||
Change the must-say target from `11:00` to `9:27`, retain a `1:15` navigation buffer, and set the complete-deck target to `10:42`. Update the Scenes 1-8 segment times to match Task 2; leave Scenes 9-13 targets unchanged.
|
||||
@@ -194,7 +314,7 @@ git add docs/runbooks/defense-speech-and-claim-audit.md
|
||||
git commit -m "docs: synchronize simplified defense runbook"
|
||||
```
|
||||
|
||||
### Task 4: Close The Speech Slice
|
||||
### Task 5: Close The Speech Slice
|
||||
|
||||
**Files:**
|
||||
- Modify: `docs/current_roadmap.md`
|
||||
|
||||
@@ -16,8 +16,11 @@ This design separates two independently shippable changes:
|
||||
|
||||
## Speech Contract
|
||||
|
||||
Each beat has one spoken idea. The presenter may use optional notes during Q&A,
|
||||
but the timed path does not require lists of architecture terms.
|
||||
Each beat has one audience goal, one to three anchor terms, and one suggested
|
||||
sentence. The anchor terms preserve the thesis vocabulary that identifies the
|
||||
beat; the sentence is rehearsal help, not a word-for-word obligation. The
|
||||
presenter may use optional notes during Q&A, but the timed path does not require
|
||||
lists of architecture terms.
|
||||
|
||||
The simplified story is:
|
||||
|
||||
@@ -34,9 +37,11 @@ The simplified story is:
|
||||
8. The example discovers capabilities, authors a draft, diagnoses a missing
|
||||
route, repairs it, saves an artifact, and creates a deployment.
|
||||
|
||||
Terms such as provider neutrality, typed contracts, source resolution, explicit
|
||||
resume boundaries, and NodeUse remain available in visuals, optional notes, and
|
||||
Q&A. They are not mandatory opening narration.
|
||||
Terms such as provider neutrality, Workflow API, Draft, Artifact, Deployment,
|
||||
Run, validation, and traces remain explicit anchor terms where they identify a
|
||||
slide's purpose. More detailed terms such as source resolution, explicit resume
|
||||
boundaries, and NodeUse remain available in visuals, optional notes, and Q&A.
|
||||
They are not mandatory opening narration.
|
||||
|
||||
The target for Scenes 1-8 is approximately four minutes, including navigation.
|
||||
The complete must-say path should remain comfortably below the previous 11-minute
|
||||
|
||||
Reference in New Issue
Block a user