docs: restore presentation route manifest coverage

This commit is contained in:
lda
2026-07-13 14:17:45 +07:00 Verified
parent 4480fafc1f
commit 05c7d7ceb8
3 changed files with 59 additions and 31 deletions
@@ -31,14 +31,11 @@ can be shown after selecting replay with the runbook's session-storage switch.
| `architecture/client` | Human and agent clients use the same public lifecycle operations. | Architecture client node | System architecture figure | hidden | replay-only; Thesis System Architecture; `docs/project_map.md`; `docs/source_architecture.md` | `architecture/client` | | `architecture/client` | Human and agent clients use the same public lifecycle operations. | Architecture client node | System architecture figure | hidden | replay-only; Thesis System Architecture; `docs/project_map.md`; `docs/source_architecture.md` | `architecture/client` |
| `architecture/api` | JSON-RPC handles transport concerns and delegates to WorkflowApi rather than owning domain behavior. | Architecture API node | Client operations | hidden | replay-only; Thesis System Architecture; `docs/project_map.md`; `docs/source_architecture.md` | `architecture/api` | | `architecture/api` | JSON-RPC handles transport concerns and delegates to WorkflowApi rather than owning domain behavior. | Architecture API node | Client operations | hidden | replay-only; Thesis System Architecture; `docs/project_map.md`; `docs/source_architecture.md` | `architecture/api` |
| `architecture/runtime` | Server composition supplies stores, provider projections, and the runtime while the core remains independent of MCP and Python behavior. | Runtime/providers focus | Architecture overview | hidden | replay-only; Thesis System Architecture; `docs/project_map.md`; `docs/source_architecture.md` | `architecture/runtime` | | `architecture/runtime` | Server composition supplies stores, provider projections, and the runtime while the core remains independent of MCP and Python behavior. | Runtime/providers focus | Architecture overview | hidden | replay-only; Thesis System Architecture; `docs/project_map.md`; `docs/source_architecture.md` | `architecture/runtime` |
| `authoring/discover` | Before authoring, a client can discover sources, capabilities, and schemas instead of guessing at hidden interfaces. | Authoring discovery surface | Capability/schema list | hidden | replay-only; CLI documentation; draft authoring API; challenge UX findings | `authoring/discover` |
| `authoring/author` | Focused operations let an external agent change a mutable Draft while preserving a clear lifecycle boundary. | Draft authoring surface | Workflow structure | hidden | replay-only; CLI documentation; draft authoring API; challenge UX findings | `authoring/author` |
| `authoring/diagnose` | Validation returns structured diagnostics, affected paths, repair hints, and suggested next actions. | Diagnostic receipt | Draft authoring surface | hidden | replay-only; CLI documentation; draft authoring API; challenge UX findings | `authoring/diagnose` |
| `authoring/repair` | These surfaces make invalid intermediate drafts repairable; they support a loop, but no hint guarantees success. | Repair guidance | Diagnostic receipt | hidden | replay-only; CLI documentation; draft authoring API; challenge UX findings | `authoring/repair` |
| `agent-handoff/request` | I will now show a prepared demonstration built on this platform. The chat is a presentation interface, not the autonomous planner evaluated by the thesis. The chat translates a report request into the same public lifecycle operations an external agent could call. This prepared path demonstrates product behavior and recorded evidence, not a fresh model-performance result. | Agent request surface | Workflow substrate framing | hidden | replay-only; Constrained demo agent and prepared replay recipe | `agent-handoff/request` | | `agent-handoff/request` | I will now show a prepared demonstration built on this platform. The chat is a presentation interface, not the autonomous planner evaluated by the thesis. The chat translates a report request into the same public lifecycle operations an external agent could call. This prepared path demonstrates product behavior and recorded evidence, not a fresh model-performance result. | Agent request surface | Workflow substrate framing | hidden | replay-only; Constrained demo agent and prepared replay recipe | `agent-handoff/request` |
| `prepared-lifecycle/discover` | The later issue-review example first inspects configured local.lda_docs, report, and issue-board capabilities. | Prepared lifecycle: discovery | Capability/schema evidence | hidden | replay-only; `examples/lda_report_workflow`; deployment inspect replay evidence | `prepared-lifecycle/discover` | | `prepared-lifecycle/discover` | The later issue-review example first inspects configured local.lda_docs, report, and issue-board capabilities. | Prepared lifecycle: discovery | Capability/schema evidence | hidden | replay-only; `examples/lda_report_workflow`; deployment inspect replay evidence | `prepared-lifecycle/discover` |
| `prepared-lifecycle/draft` | It creates and edits a Draft for report generation, making the proposal visible before execution. | Prepared lifecycle: draft | Workflow definition | hidden | replay-only; `examples/lda_report_workflow`; deployment inspect replay evidence | `prepared-lifecycle/draft` | | `prepared-lifecycle/draft` | It creates and edits a Draft for report generation, making the proposal visible before execution. | Prepared lifecycle: draft | Workflow definition | hidden | replay-only; `examples/lda_report_workflow`; deployment inspect replay evidence | `prepared-lifecycle/draft` |
| `prepared-lifecycle/validate` | It validates incomplete state, exposes a missing output binding, and applies a targeted repair. | Prepared lifecycle: validation | Diagnostic evidence | hidden | replay-only; `examples/lda_report_workflow`; deployment inspect replay evidence | `prepared-lifecycle/validate` | | `prepared-lifecycle/diagnose` | Validation returns structured diagnostics, affected paths, repair hints, and suggested next actions. | Diagnostic receipt | Draft authoring surface | hidden | replay-only; `examples/lda_report_workflow`; deployment inspect replay evidence | `prepared-lifecycle/diagnose` |
| `prepared-lifecycle/repair` | These surfaces make invalid intermediate drafts repairable; they support a loop, but no hint guarantees success. | Repair guidance | Diagnostic receipt | hidden | replay-only; `examples/lda_report_workflow`; deployment inspect replay evidence | `prepared-lifecycle/repair` |
| `prepared-lifecycle/artifact` | It saves the validated plan as immutable artifact lda_report_case_study version 1. | Prepared lifecycle: artifact | Lifecycle state | hidden | replay-only; `examples/lda_report_workflow`; deployment inspect replay evidence | `prepared-lifecycle/artifact` | | `prepared-lifecycle/artifact` | It saves the validated plan as immutable artifact lda_report_case_study version 1. | Prepared lifecycle: artifact | Lifecycle state | hidden | replay-only; `examples/lda_report_workflow`; deployment inspect replay evidence | `prepared-lifecycle/artifact` |
| `prepared-lifecycle/deployment` | This later issue-review example is richer than the thesis three-node deterministic report case study: it is an implementation extension built on the same platform. Deployment binds and validates a ready configuration but does not run the workflow. | Prepared lifecycle: deployment | Binding/readiness evidence | hidden | replay-only; `examples/lda_report_workflow`; deployment inspect replay evidence | `prepared-lifecycle/deployment` | | `prepared-lifecycle/deployment` | This later issue-review example is richer than the thesis three-node deterministic report case study: it is an implementation extension built on the same platform. Deployment binds and validates a ready configuration but does not run the workflow. | Prepared lifecycle: deployment | Binding/readiness evidence | hidden | replay-only; `examples/lda_report_workflow`; deployment inspect replay evidence | `prepared-lifecycle/deployment` |
| `run-from-deployment/input` | The deployment receives selected local documents and an issue-board path. | Workflow input panel | Prepared deployment | hidden | live-capable; `workflow.runs.start` replay evidence | `prepared-lifecycle/deployment` | | `run-from-deployment/input` | The deployment receives selected local documents and an issue-board path. | Workflow input panel | Prepared deployment | hidden | live-capable; `workflow.runs.start` replay evidence | `prepared-lifecycle/deployment` |
+22 -26
View File
@@ -16,30 +16,26 @@
{"sceneId":"architecture","beatId":"client","route":"architecture/client","fileStem":"06-architecture-client"}, {"sceneId":"architecture","beatId":"client","route":"architecture/client","fileStem":"06-architecture-client"},
{"sceneId":"architecture","beatId":"api","route":"architecture/api","fileStem":"06-architecture-api"}, {"sceneId":"architecture","beatId":"api","route":"architecture/api","fileStem":"06-architecture-api"},
{"sceneId":"architecture","beatId":"runtime","route":"architecture/runtime","fileStem":"06-architecture-runtime"}, {"sceneId":"architecture","beatId":"runtime","route":"architecture/runtime","fileStem":"06-architecture-runtime"},
{"sceneId":"architecture","beatId":"node-use","route":"architecture/node-use","fileStem":"06-architecture-node-use"}, {"sceneId":"agent-handoff","beatId":"request","route":"agent-handoff/request","fileStem":"07-agent-handoff-request"},
{"sceneId":"authoring","beatId":"discover","route":"authoring/discover","fileStem":"07-authoring-discover"}, {"sceneId":"prepared-lifecycle","beatId":"discover","route":"prepared-lifecycle/discover","fileStem":"08-prepared-lifecycle-discover"},
{"sceneId":"authoring","beatId":"author","route":"authoring/author","fileStem":"07-authoring-author"}, {"sceneId":"prepared-lifecycle","beatId":"draft","route":"prepared-lifecycle/draft","fileStem":"08-prepared-lifecycle-draft"},
{"sceneId":"authoring","beatId":"diagnose","route":"authoring/diagnose","fileStem":"07-authoring-diagnose"}, {"sceneId":"prepared-lifecycle","beatId":"diagnose","route":"prepared-lifecycle/diagnose","fileStem":"08-prepared-lifecycle-diagnose"},
{"sceneId":"authoring","beatId":"repair","route":"authoring/repair","fileStem":"07-authoring-repair"}, {"sceneId":"prepared-lifecycle","beatId":"repair","route":"prepared-lifecycle/repair","fileStem":"08-prepared-lifecycle-repair"},
{"sceneId":"agent-handoff","beatId":"request","route":"agent-handoff/request","fileStem":"08-agent-handoff-request"}, {"sceneId":"prepared-lifecycle","beatId":"artifact","route":"prepared-lifecycle/artifact","fileStem":"08-prepared-lifecycle-artifact"},
{"sceneId":"prepared-lifecycle","beatId":"discover","route":"prepared-lifecycle/discover","fileStem":"09-prepared-lifecycle-discover"}, {"sceneId":"prepared-lifecycle","beatId":"deployment","route":"prepared-lifecycle/deployment","fileStem":"08-prepared-lifecycle-deployment"},
{"sceneId":"prepared-lifecycle","beatId":"draft","route":"prepared-lifecycle/draft","fileStem":"09-prepared-lifecycle-draft"}, {"sceneId":"run-from-deployment","beatId":"input","route":"run-from-deployment/input","fileStem":"09-run-from-deployment-input"},
{"sceneId":"prepared-lifecycle","beatId":"validate","route":"prepared-lifecycle/validate","fileStem":"09-prepared-lifecycle-validate"}, {"sceneId":"run-from-deployment","beatId":"operation","route":"run-from-deployment/operation","fileStem":"09-run-from-deployment-operation"},
{"sceneId":"prepared-lifecycle","beatId":"artifact","route":"prepared-lifecycle/artifact","fileStem":"09-prepared-lifecycle-artifact"}, {"sceneId":"run-from-deployment","beatId":"graph","route":"run-from-deployment/graph","fileStem":"09-run-from-deployment-graph"},
{"sceneId":"prepared-lifecycle","beatId":"deployment","route":"prepared-lifecycle/deployment","fileStem":"09-prepared-lifecycle-deployment"}, {"sceneId":"typed-human-boundary","beatId":"interrupt","route":"typed-human-boundary/interrupt","fileStem":"10-typed-human-boundary-interrupt"},
{"sceneId":"run-from-deployment","beatId":"input","route":"run-from-deployment/input","fileStem":"10-run-from-deployment-input"}, {"sceneId":"typed-human-boundary","beatId":"approval","route":"typed-human-boundary/approval","fileStem":"10-typed-human-boundary-approval"},
{"sceneId":"run-from-deployment","beatId":"operation","route":"run-from-deployment/operation","fileStem":"10-run-from-deployment-operation"}, {"sceneId":"resume-output-evidence","beatId":"resume","route":"resume-output-evidence/resume","fileStem":"11-resume-output-evidence-resume"},
{"sceneId":"run-from-deployment","beatId":"graph","route":"run-from-deployment/graph","fileStem":"10-run-from-deployment-graph"}, {"sceneId":"resume-output-evidence","beatId":"output","route":"resume-output-evidence/output","fileStem":"11-resume-output-evidence-output"},
{"sceneId":"typed-human-boundary","beatId":"interrupt","route":"typed-human-boundary/interrupt","fileStem":"11-typed-human-boundary-interrupt"}, {"sceneId":"resume-output-evidence","beatId":"trace","route":"resume-output-evidence/trace","fileStem":"11-resume-output-evidence-trace"},
{"sceneId":"typed-human-boundary","beatId":"approval","route":"typed-human-boundary/approval","fileStem":"11-typed-human-boundary-approval"}, {"sceneId":"evaluation","beatId":"cohort","route":"evaluation/cohort","fileStem":"12-evaluation-cohort"},
{"sceneId":"resume-output-evidence","beatId":"resume","route":"resume-output-evidence/resume","fileStem":"12-resume-output-evidence-resume"}, {"sceneId":"evaluation","beatId":"validity","route":"evaluation/validity","fileStem":"12-evaluation-validity"},
{"sceneId":"resume-output-evidence","beatId":"output","route":"resume-output-evidence/output","fileStem":"12-resume-output-evidence-output"}, {"sceneId":"evaluation","beatId":"findings","route":"evaluation/findings","fileStem":"12-evaluation-findings"},
{"sceneId":"resume-output-evidence","beatId":"trace","route":"resume-output-evidence/trace","fileStem":"12-resume-output-evidence-trace"}, {"sceneId":"conclusion","beatId":"limits","route":"conclusion/limits","fileStem":"13-conclusion-limits"},
{"sceneId":"evaluation","beatId":"cohort","route":"evaluation/cohort","fileStem":"13-evaluation-cohort"}, {"sceneId":"conclusion","beatId":"future","route":"conclusion/future","fileStem":"13-conclusion-future"},
{"sceneId":"evaluation","beatId":"validity","route":"evaluation/validity","fileStem":"13-evaluation-validity"}, {"sceneId":"conclusion","beatId":"conclusion","route":"conclusion/conclusion","fileStem":"13-conclusion-conclusion"},
{"sceneId":"evaluation","beatId":"findings","route":"evaluation/findings","fileStem":"13-evaluation-findings"}, {"sceneId":"conclusion","beatId":"questions","route":"conclusion/questions","fileStem":"13-conclusion-questions"}
{"sceneId":"conclusion","beatId":"limits","route":"conclusion/limits","fileStem":"14-conclusion-limits"},
{"sceneId":"conclusion","beatId":"future","route":"conclusion/future","fileStem":"14-conclusion-future"},
{"sceneId":"conclusion","beatId":"conclusion","route":"conclusion/conclusion","fileStem":"14-conclusion-conclusion"},
{"sceneId":"conclusion","beatId":"questions","route":"conclusion/questions","fileStem":"14-conclusion-questions"}
] ]
@@ -1,4 +1,5 @@
import { describe, expect, it } from "vitest"; import { describe, expect, it } from "vitest";
import rehearsalRoutes from "../../../../../scripts/presentation-rehearsal-routes.json";
import { import {
hashForLocation, hashForLocation,
locationFromHash, locationFromHash,
@@ -24,8 +25,27 @@ describe("storyboard navigation", () => {
}); });
it("round-trips every current storyboard beat", () => { it("round-trips every current storyboard beat", () => {
const storyboardRoutes = mainScenes.flatMap((scene) =>
scene.beats.map((beat) => `${scene.id}/${beat.id}`),
);
const manifestRoutes = rehearsalRoutes.map((route) => `${route.sceneId}/${route.beatId}`);
expect(new Set(manifestRoutes).size).toBe(manifestRoutes.length);
expect(manifestRoutes).toHaveLength(storyboardRoutes.length);
for (const scene of mainScenes) { for (const scene of mainScenes) {
for (const beat of scene.beats) { for (const beat of scene.beats) {
const matchingRoutes = rehearsalRoutes.filter(
(route) => route.sceneId === scene.id && route.beatId === beat.id,
);
expect(matchingRoutes, `missing rehearsal route for scene ${scene.id}`).toHaveLength(1);
const route = matchingRoutes[0];
if (!route) continue;
expect(route).toMatchObject({
sceneId: scene.id,
beatId: beat.id,
route: `${scene.id}/${beat.id}`,
});
expect(locationFromHash(hashForLocation({ expect(locationFromHash(hashForLocation({
kind: "main", kind: "main",
sceneId: scene.id, sceneId: scene.id,
@@ -40,6 +60,21 @@ describe("storyboard navigation", () => {
} }
} }
for (const route of rehearsalRoutes) {
expect(Object.keys(route).sort()).toEqual(["beatId", "fileStem", "route", "sceneId"]);
expect(storyboardRoutes).toContain(`${route.sceneId}/${route.beatId}`);
expect(locationFromHash(hashForLocation({
kind: "main",
sceneId: route.sceneId as MainLocation["sceneId"],
beatId: route.beatId,
focusPath: [],
}))).toMatchObject({
kind: "main",
sceneId: route.sceneId,
beatId: route.beatId,
focusPath: [],
});
}
}); });
it("parses the Questions beat location", () => { it("parses the Questions beat location", () => {