docs: simplify opening defense speech

This commit is contained in:
lda
2026-07-13 22:27:24 +07:00 Verified
parent 957174bd12
commit 2c2bd29ea5
2 changed files with 138 additions and 50 deletions
@@ -79,7 +79,7 @@ describe("presenter note catalog", () => {
}); });
it("describes the missing route and focused route repair", () => { it("describes the missing route and focused route repair", () => {
expect(presenterBeatNoteFor("prepared-lifecycle", "diagnose")?.mustSay).toMatch(/missing.*route/i); expect(presenterBeatNoteFor("prepared-lifecycle", "diagnose")?.mustSay).toMatch(/no route.*ok outcome/i);
expect(presenterBeatNoteFor("prepared-lifecycle", "repair")?.mustSay).toMatch(/adds.*route|route.*validation passes/i); expect(presenterBeatNoteFor("prepared-lifecycle", "repair")?.mustSay).toMatch(/adds.*route|route.*validation passes/i);
expect(presenterBeatNoteFor("prepared-lifecycle", "diagnose")?.mustSay).not.toMatch(/output projection/i); expect(presenterBeatNoteFor("prepared-lifecycle", "diagnose")?.mustSay).not.toMatch(/output projection/i);
}); });
@@ -10,6 +10,8 @@ export type PresenterBeatNote = {
readonly sceneId: MainSceneId; readonly sceneId: MainSceneId;
readonly beatId: string; readonly beatId: string;
readonly targetSeconds: number; readonly targetSeconds: number;
readonly goal: string;
readonly keywords: readonly [string, ...string[]];
readonly mustSay: string; readonly mustSay: string;
readonly optionalDetail: string | null; readonly optionalDetail: string | null;
readonly warning: string | null; readonly warning: string | null;
@@ -29,6 +31,8 @@ const beatNote = <const EvidencePointers extends readonly [string, ...string[]]>
sceneId: MainSceneId, sceneId: MainSceneId,
beatId: string, beatId: string,
targetSeconds: number, targetSeconds: number,
goal: string,
keywords: readonly [string, ...string[]],
mustSay: string, mustSay: string,
evidencePointers: EvidencePointers, evidencePointers: EvidencePointers,
options: PresenterBeatNoteOptions = {}, options: PresenterBeatNoteOptions = {},
@@ -36,6 +40,8 @@ const beatNote = <const EvidencePointers extends readonly [string, ...string[]]>
sceneId, sceneId,
beatId, beatId,
targetSeconds, targetSeconds,
goal,
keywords,
mustSay, mustSay,
optionalDetail: options.optionalDetail ?? null, optionalDetail: options.optionalDetail ?? null,
warning: options.warning ?? null, warning: options.warning ?? null,
@@ -52,8 +58,10 @@ export const presenterNotes = [
beatNote( beatNote(
"thesis", "thesis",
"title", "title",
22, 15,
"This project began with the goal in the title: **an AI agent for creating and automating workspace workflows**. The difficult engineering problem became **the system underneath the chat**.", "Separate the AI-agent ambition from the implemented contribution.",
["AI-agent goal", "platform underneath"],
"The title describes the original goal: an AI agent for workspace automation. My contribution is the platform underneath that agent.",
["Thesis Abstract and Introduction"], ["Thesis Abstract and Introduction"],
{ {
warning: "Do not present the submitted system as a bundled autonomous planner.", warning: "Do not present the submitted system as a bundled autonomous planner.",
@@ -63,132 +71,170 @@ export const presenterNotes = [
beatNote( beatNote(
"thesis", "thesis",
"substrate", "substrate",
23, 15,
"The submitted contribution is a **typed workflow substrate**: an external planner can propose work while **the platform owns definitions, validation, bindings, execution records, traces, and explicit resume boundaries**.", "State what the platform lets its users do.",
["agents and humans", "build, run, inspect"],
"It lets agents and humans build workflows, run them, and inspect what happened.",
["Thesis Abstract and Introduction", "Thesis Contributions"], ["Thesis Abstract and Introduction", "Thesis Contributions"],
{ qnaBranchIds: ["where-is-ai-agent", "not-just-cli"] }, { qnaBranchIds: ["where-is-ai-agent", "not-just-cli"] },
), ),
beatNote( beatNote(
"problem", "problem",
"direct-actions", "direct-actions",
22, 15,
"A model can call tools and complete one task, but **a tool transcript is not reusable automation**.", "Show why one successful chat is not yet automation.",
["tool calls", "not reusable"],
"Like the chat example, an agent can call tools and finish one task. But that conversation is not yet a reusable workflow.",
["Thesis Problem Statement and Requirements"], ["Thesis Problem Statement and Requirements"],
{ qnaBranchIds: ["direct-orchestration", "not-just-scripts"] }, { qnaBranchIds: ["direct-orchestration", "not-just-scripts"] },
), ),
beatNote( beatNote(
"problem", "problem",
"missing-contracts", "missing-contracts",
23, 15,
"Reuse needs **schemas, source bindings, persistence, traces, and declared recovery boundaries**, with **planning kept separate from execution**.", "Name the minimum durable properties reusable automation needs.",
["saved definition", "validation", "execution records"],
"Reusable automation needs a saved definition, validation, execution records, and a clear way to pause and continue.",
["Thesis Problem Statement and Requirements"], ["Thesis Problem Statement and Requirements"],
{ qnaBranchIds: ["why-schemas", "run-persistence"] }, { qnaBranchIds: ["why-schemas", "run-persistence"] },
), ),
beatNote( beatNote(
"positioning", "positioning",
"landscape", "landscape",
22, 18,
"Related systems have different centers of gravity: tool loops act now, scripts package code, hosted platforms operate workflows, agent graphs organize planners, and MCP exposes capabilities.", "Place the work beside familiar adjacent systems.",
["Python / n8n / Zapier", "LangGraph", "MCP"],
"Existing systems solve different parts of this problem: Python scripts, n8n, Zapier, LangGraph, and MCP.",
["Thesis Positioning and Related Systems"], ["Thesis Positioning and Related Systems"],
{ qnaBranchIds: ["direct-orchestration", "generated-scripts", "hosted-automation", "durable-agent-graphs", "mcp-agent-scale"] }, { qnaBranchIds: ["direct-orchestration", "generated-scripts", "hosted-automation", "durable-agent-graphs", "mcp-agent-scale"] },
), ),
beatNote( beatNote(
"positioning", "positioning",
"lda-position", "lda-position",
23, 17,
"lda.chat takes a narrower position: a typed, provider-neutral lifecycle for workflows authored or operated by external agents, not a replacement or superiority claim.", "State the platform's narrow position without a superiority claim.",
["provider-neutral", "workflow layer", "not a replacement"],
"My platform does not replace them. It provides a provider-neutral workflow layer that agents and humans can operate.",
["Thesis Positioning and Related Systems", "Thesis Source Model"], ["Thesis Positioning and Related Systems", "Thesis Source Model"],
{ warning: "Provider neutrality is demonstrated for the implemented source families, not arbitrary future providers.", qnaBranchIds: ["not-just-scripts"] }, { warning: "Provider neutrality is demonstrated for the implemented source families, not arbitrary future providers.", qnaBranchIds: ["not-just-scripts"] },
), ),
beatNote( beatNote(
"planner-runtime", "planner-runtime",
"planner", "planner",
18, 12,
"An **external model or human proposes and revises workflow structure**; this keeps planning outside the runtime.", "Assign workflow decisions to an external planner.",
["human or AI planner"],
"A human or AI planner decides what workflow to build.",
["Thesis Architecture Overview"], ["Thesis Architecture Overview"],
{ qnaBranchIds: ["where-is-ai-agent", "not-just-cli"] }, { qnaBranchIds: ["where-is-ai-agent", "not-just-cli"] },
), ),
beatNote( beatNote(
"planner-runtime", "planner-runtime",
"runtime", "runtime",
18, 16,
"For **fixed definitions and handler results**, the runtime validates the graph, resolves sources, executes steps, records state and traces, and **resumes only at declared boundaries**.", "Assign execution and recording to the runtime.",
["validation", "step-by-step execution", "state and traces"],
"The runtime validates the graph, executes it step by step, records state and traces, and pauses at declared boundaries.",
["Thesis Workflow Core", "Thesis Architecture Overview"], ["Thesis Workflow Core", "Thesis Architecture Overview"],
{ warning: "Qualify determinism; provider code, resource reads, and external side effects can vary.", qnaBranchIds: ["run-persistence", "typed-interrupts"] }, {
optionalDetail: "This explanation assumes fixed workflow definitions and handler results.",
warning: "Qualify determinism; provider code, resource reads, and external side effects can vary.",
qnaBranchIds: ["run-persistence", "typed-interrupts"],
},
), ),
beatNote( beatNote(
"planner-runtime", "planner-runtime",
"boundary", "boundary",
19, 12,
"**Typed CLI and JSON-RPC operations reach the same Workflow API**, making schemas, diagnostics, and lifecycle state machine-readable without importing runtime internals.", "Introduce the public seam between clients and runtime.",
["Workflow API", "CLI", "JSON-RPC"],
"Both sides communicate through the Workflow API. Today, clients reach it through the CLI or JSON-RPC without accessing runtime internals directly.",
["Thesis Architecture Overview", "docs/source_architecture.md"], ["Thesis Architecture Overview", "docs/source_architecture.md"],
{ qnaBranchIds: ["not-just-cli"] }, { qnaBranchIds: ["not-just-cli"] },
), ),
beatNote( beatNote(
"lifecycle", "lifecycle",
"draft", "draft",
11, 9,
"**Draft** is mutable authoring state.", "Introduce the editable lifecycle state.",
["Draft", "being built"],
"A workflow moves through four lifecycle stages. Draft means the workflow is still being built.",
["Thesis Workflow Lifecycle"], ["Thesis Workflow Lifecycle"],
{ optionalDetail: "Raw plans can also create artifacts without passing through a Draft." }, { optionalDetail: "Raw plans can also create artifacts without passing through a Draft." },
), ),
beatNote( beatNote(
"lifecycle", "lifecycle",
"artifact", "artifact",
11, 9,
"**Artifact** is an immutable workflow definition.", "Introduce the immutable saved definition.",
["Artifact", "immutable version"],
"Artifact is a saved, immutable version.",
["Thesis Workflow Lifecycle"], ["Thesis Workflow Lifecycle"],
), ),
beatNote( beatNote(
"lifecycle", "lifecycle",
"deployment", "deployment",
11, 9,
"**Deployment** binds an artifact version to concrete sources and runtime context.", "Connect a saved definition to a runnable environment.",
["Deployment", "sources", "ready"],
"Deployment connects that version to the sources it needs and checks whether it is ready.",
["Thesis Workflow Lifecycle"], ["Thesis Workflow Lifecycle"],
), ),
beatNote( beatNote(
"lifecycle", "lifecycle",
"run", "run",
12, 9,
"**Run** records one execution, including status, diagnostics, output, trace, and an explicit stopped or interrupted state.", "Introduce one persisted execution record.",
["Run", "status", "output and trace"],
"Run is one recorded execution, including its status, output, and trace.",
["Thesis Workflow Lifecycle"], ["Thesis Workflow Lifecycle"],
{ qnaBranchIds: ["lifecycle-states", "run-persistence"] }, { qnaBranchIds: ["lifecycle-states", "run-persistence"] },
), ),
beatNote( beatNote(
"architecture", "architecture",
"overview", "overview",
7, 6,
"First, the **implemented architecture spine** and its ownership boundaries.", "Show how the implementation realizes the earlier concepts.",
["architecture spine"],
"This is how those concepts are organized in the implementation.",
["Thesis System Architecture", "docs/project_map.md"], ["Thesis System Architecture", "docs/project_map.md"],
), ),
beatNote( beatNote(
"architecture", "architecture",
"client", "client",
10, 8,
"Humans and agents share **one public lifecycle surface**.", "Show that humans and agents share one public surface.",
["shared operations"],
"Humans and agents use the same public workflow operations.",
["Thesis System Architecture", "docs/project_map.md"], ["Thesis System Architecture", "docs/project_map.md"],
), ),
beatNote( beatNote(
"architecture", "architecture",
"api", "api",
11, 9,
"WorkflowApi owns lifecycle operations; **JSON-RPC only adapts transport**.", "Identify the system's public front door.",
["Workflow API", "public boundary"],
"The Workflow API is the front door. It exposes lifecycle operations without exposing runtime internals.",
["Thesis System Architecture", "docs/source_architecture.md"], ["Thesis System Architecture", "docs/source_architecture.md"],
{ qnaBranchIds: ["not-just-cli"] }, { qnaBranchIds: ["not-just-cli"] },
), ),
beatNote( beatNote(
"architecture", "architecture",
"runtime", "runtime",
13, 9,
"WorkflowServer composes **records, capabilities, API, and kernel**; providers remain outside the core.", "Explain what the server composes behind the API.",
["WorkflowServer", "records and capabilities", "execution core"],
"Behind it, the workflow server brings together stored records, available capabilities, and the execution core.",
["Thesis System Architecture", "docs/source_architecture.md"], ["Thesis System Architecture", "docs/source_architecture.md"],
{ qnaBranchIds: ["provider-security"] }, { qnaBranchIds: ["provider-security"] },
), ),
beatNote( beatNote(
"agent-handoff", "agent-handoff",
"request", "request",
20, 12,
"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.", "Disclose the prepared demonstration before it begins.",
["prepared example", "not an autonomous planner"],
"This is a prepared example, not a live autonomous AI agent. It shows how an agent could use the platform to build and run a workflow.",
["Constrained demo agent and prepared replay recipe"], ["Constrained demo agent and prepared replay recipe"],
{ {
fallback: "This is the reviewed recording, not a live model planning this workflow.", fallback: "This is the reviewed recording, not a live model planning this workflow.",
@@ -198,47 +244,59 @@ export const presenterNotes = [
beatNote( beatNote(
"prepared-lifecycle", "prepared-lifecycle",
"discover", "discover",
9, 7,
"It inspects sources, capabilities, and schemas rather than guessing at hidden interfaces.", "Show that authoring starts with interface discovery.",
["sources", "capabilities"],
"First, the agent checks which sources and operations are available.",
["examples/lda_report_workflow", "deployment inspect replay evidence"], ["examples/lda_report_workflow", "deployment inspect replay evidence"],
{ qnaBranchIds: ["prepared-replay-boundary", "why-schemas", "validation-diagnostics"] }, { qnaBranchIds: ["prepared-replay-boundary", "why-schemas", "validation-diagnostics"] },
), ),
beatNote( beatNote(
"prepared-lifecycle", "prepared-lifecycle",
"draft", "draft",
9, 7,
"Focused operations modify mutable authoring state before execution.", "Show mutable workflow authoring.",
["Draft", "editable workflow"],
"Then it builds an editable workflow draft.",
["examples/lda_report_workflow", "deployment inspect replay evidence", "CLI documentation", "Draft authoring API"], ["examples/lda_report_workflow", "deployment inspect replay evidence", "CLI documentation", "Draft authoring API"],
{ qnaBranchIds: ["raw-plan-import"] }, { qnaBranchIds: ["raw-plan-import"] },
), ),
beatNote( beatNote(
"prepared-lifecycle", "prepared-lifecycle",
"diagnose", "diagnose",
9, 7,
"Structured diagnostics identify the missing output projection.", "Show a concrete structured validation failure.",
["validation", "missing_outcome_edge"],
"Validation finds that the analyze step has no route for its ok outcome.",
["examples/lda_report_workflow", "deployment inspect replay evidence"], ["examples/lda_report_workflow", "deployment inspect replay evidence"],
{ qnaBranchIds: ["validation-diagnostics"] }, { qnaBranchIds: ["validation-diagnostics"] },
), ),
beatNote( beatNote(
"prepared-lifecycle", "prepared-lifecycle",
"repair", "repair",
9, 7,
"One focused output-map edit resolves it; hints do not guarantee automatic repair.", "Show the exact focused correction and revalidation.",
["set-route", "validation passes"],
"The agent adds that route, and validation passes.",
["Validation and diagnostics", "Challenge UX findings"], ["Validation and diagnostics", "Challenge UX findings"],
{ warning: "Do not promise that diagnostics automatically repair every workflow.", qnaBranchIds: ["validation-diagnostics"] }, { warning: "Do not promise that diagnostics automatically repair every workflow.", qnaBranchIds: ["validation-diagnostics"] },
), ),
beatNote( beatNote(
"prepared-lifecycle", "prepared-lifecycle",
"artifact", "artifact",
9, 7,
"It saves the validated plan as immutable artifact lda_report_case_study version 1.", "Show the transition to an immutable saved version.",
["Artifact", "immutable"],
"The valid workflow is saved as an immutable artifact.",
["examples/lda_report_workflow", "deployment inspect replay evidence"], ["examples/lda_report_workflow", "deployment inspect replay evidence"],
), ),
beatNote( beatNote(
"prepared-lifecycle", "prepared-lifecycle",
"deployment", "deployment",
9, 7,
"Deployment binds and validates three local sources; execution starts in the next scene.", "Show source binding and readiness before execution.",
["Deployment", "three local sources"],
"Finally, a deployment connects it to the three local sources it needs.",
["examples/lda_report_workflow", "deployment inspect replay evidence", "Thesis deterministic report case study"], ["examples/lda_report_workflow", "deployment inspect replay evidence", "Thesis deterministic report case study"],
{ warning: "This later issue-review example is richer than the thesis case study; do not present its issue-board output as thesis output.", qnaBranchIds: ["prepared-replay-boundary"] }, { warning: "This later issue-review example is richer than the thesis case study; do not present its issue-board output as thesis output.", qnaBranchIds: ["prepared-replay-boundary"] },
), ),
@@ -246,6 +304,8 @@ export const presenterNotes = [
"run-from-deployment", "run-from-deployment",
"input", "input",
11, 11,
"Show the concrete inputs supplied before execution.",
["run input", "selected documents"],
"The deployment receives selected local documents and an issue-board path.", "The deployment receives selected local documents and an issue-board path.",
["workflow.runs.start replay evidence"], ["workflow.runs.start replay evidence"],
), ),
@@ -253,6 +313,8 @@ export const presenterNotes = [
"run-from-deployment", "run-from-deployment",
"operation", "operation",
12, 12,
"Show that one public operation creates a persisted execution.",
["workflow.runs.start", "persisted Run"],
"The public **workflow.runs.start** operation validates the deployment and input, creates a **persisted Run**, and begins the reusable graph.", "The public **workflow.runs.start** operation validates the deployment and input, creates a **persisted Run**, and begins the reusable graph.",
["workflow.runs.start replay evidence"], ["workflow.runs.start replay evidence"],
{ qnaBranchIds: ["run-persistence"] }, { qnaBranchIds: ["run-persistence"] },
@@ -261,6 +323,8 @@ export const presenterNotes = [
"run-from-deployment", "run-from-deployment",
"graph", "graph",
12, 12,
"Show the reusable workflow executing beyond the chat conversation.",
["workflow graph", "declared interrupt"],
"The graph reads documents, analyzes them, builds a report, drafts proposed issues, and pauses at a declared review interrupt before issue-board changes.", "The graph reads documents, analyzes them, builds a report, drafts proposed issues, and pauses at a declared review interrupt before issue-board changes.",
["workflow.runs.start replay evidence", "examples/lda_report_workflow"], ["workflow.runs.start replay evidence", "examples/lda_report_workflow"],
{ fallback: "The operation view is replay-backed evidence of the prepared path, not a newly completed live run." }, { fallback: "The operation view is replay-backed evidence of the prepared path, not a newly completed live run." },
@@ -269,6 +333,8 @@ export const presenterNotes = [
"typed-human-boundary", "typed-human-boundary",
"interrupt", "interrupt",
15, 15,
"Show what the paused workflow asks from the operator.",
["issue_review", "interrupt payload", "resume schema"],
"Execution pauses at a **typed issue_review interrupt** exposing request data, allowed outcomes, request schema, and resume schema.", "Execution pauses at a **typed issue_review interrupt** exposing request data, allowed outcomes, request schema, and resume schema.",
["Typed interrupt payload and resume contract"], ["Typed interrupt payload and resume contract"],
{ qnaBranchIds: ["typed-interrupts", "why-schemas"] }, { qnaBranchIds: ["typed-interrupts", "why-schemas"] },
@@ -277,6 +343,8 @@ export const presenterNotes = [
"typed-human-boundary", "typed-human-boundary",
"approval", "approval",
15, 15,
"Show that the operator chooses a declared continuation.",
["submitted", "revision-requested", "typed resume"],
"The operator chooses submitted or revision-requested; this is a typed interrupt and resume contract, not a production approval gate, role system, or policy engine.", "The operator chooses submitted or revision-requested; this is a typed interrupt and resume contract, not a production approval gate, role system, or policy engine.",
["Typed interrupt payload and resume contract"], ["Typed interrupt payload and resume contract"],
{ warning: "Both outcomes resume through declared workflow branches; this is not production approval governance.", qnaBranchIds: ["typed-interrupts", "security-production-boundary"] }, { warning: "Both outcomes resume through declared workflow branches; this is not production approval governance.", qnaBranchIds: ["typed-interrupts", "security-production-boundary"] },
@@ -285,6 +353,8 @@ export const presenterNotes = [
"resume-output-evidence", "resume-output-evidence",
"resume", "resume",
16, 16,
"Show continuation of the same recorded run.",
["workflow.runs.resume", "same Run"],
"On the submitted path, **workflow.runs.resume continues the recorded interrupted Run**.", "On the submitted path, **workflow.runs.resume continues the recorded interrupted Run**.",
["workflow.runs.resume replay evidence", "Revision replay identity"], ["workflow.runs.resume replay evidence", "Revision replay identity"],
{ fallback: "The submitted replay demonstrates same-run continuation; the revision branch is recorded separately.", qnaBranchIds: ["replay-provenance", "prepared-replay-boundary"] }, { fallback: "The submitted replay demonstrates same-run continuation; the revision branch is recorded separately.", qnaBranchIds: ["replay-provenance", "prepared-replay-boundary"] },
@@ -293,6 +363,8 @@ export const presenterNotes = [
"resume-output-evidence", "resume-output-evidence",
"output", "output",
16, 16,
"Show the persisted terminal results of the submitted path.",
["report output", "issue-board changes"],
"The workflow creates the report and issue-board changes, then records terminal output.", "The workflow creates the report and issue-board changes, then records terminal output.",
["workflow.runs.resume replay evidence", "examples/lda_report_workflow"], ["workflow.runs.resume replay evidence", "examples/lda_report_workflow"],
{ warning: "Identify these issue-board changes as later example evidence, not output from the thesis three-node case study." }, { warning: "Identify these issue-board changes as later example evidence, not output from the thesis three-node case study." },
@@ -301,6 +373,8 @@ export const presenterNotes = [
"resume-output-evidence", "resume-output-evidence",
"trace", "trace",
18, 18,
"Show that execution evidence remains inspectable after completion.",
["trace frames", "protocol evidence"],
"Trace frames and protocol evidence remain inspectable; this is declared-boundary resumability, not arbitrary crash recovery or exactly-once execution. The revision replay is a separate prepared recording.", "Trace frames and protocol evidence remain inspectable; this is declared-boundary resumability, not arbitrary crash recovery or exactly-once execution. The revision replay is a separate prepared recording.",
["workflow.runs.resume replay evidence", "Revision replay identity"], ["workflow.runs.resume replay evidence", "Revision replay identity"],
{ warning: "Never claim run-ID continuity for the prepared revision recording.", qnaBranchIds: ["replay-provenance", "demo-reliability"] }, { warning: "Never claim run-ID continuity for the prepared revision recording.", qnaBranchIds: ["replay-provenance", "demo-reliability"] },
@@ -309,6 +383,8 @@ export const presenterNotes = [
"evaluation", "evaluation",
"cohort", "cohort",
40, 40,
"Describe the external-agent evaluation design.",
["36 trials", "two challenges", "three profiles"],
"The evaluation combines conformance tests, deterministic case studies, and a **manually audited external-agent campaign**: 36 trials across two challenges, two hosted models, three instruction profiles, and three waves, with three attempts per cell.", "The evaluation combines conformance tests, deterministic case studies, and a **manually audited external-agent campaign**: 36 trials across two challenges, two hosted models, three instruction profiles, and three waves, with three attempts per cell.",
["Thesis Evaluation and Appendix C"], ["Thesis Evaluation and Appendix C"],
{ qnaBranchIds: ["evaluation-validity"] }, { qnaBranchIds: ["evaluation-validity"] },
@@ -317,6 +393,8 @@ export const presenterNotes = [
"evaluation", "evaluation",
"validity", "validity",
40, 40,
"Separate audited valid evidence from contaminated samples.",
["27 pass", "8 invalid", "1 fail"],
"The author audit classified 27 trials as clean product-path passes, eight as invalid samples, and one as a failure. Invalid samples included contamination such as reading implementation files, prior artifacts, adjacent attempts, or evaluator state.", "The author audit classified 27 trials as clean product-path passes, eight as invalid samples, and one as a failure. Invalid samples included contamination such as reading implementation files, prior artifacts, adjacent attempts, or evaluator state.",
["Thesis Evaluation and Appendix C", "Author audit"], ["Thesis Evaluation and Appendix C", "Author audit"],
{ qnaBranchIds: ["evaluation-validity"] }, { qnaBranchIds: ["evaluation-validity"] },
@@ -325,6 +403,8 @@ export const presenterNotes = [
"evaluation", "evaluation",
"findings", "findings",
40, 40,
"State what the evaluation supports and what it cannot prove.",
["longitudinal evidence", "not a benchmark"],
"Because prompts, product snapshots, and hosted conditions changed across waves, these results are **longitudinal engineering evidence**. They expose authoring and diagnostic gaps, **not a benchmark** of model success, token reduction, retry reduction, or superiority.", "Because prompts, product snapshots, and hosted conditions changed across waves, these results are **longitudinal engineering evidence**. They expose authoring and diagnostic gaps, **not a benchmark** of model success, token reduction, retry reduction, or superiority.",
["Thesis Evaluation and Appendix C", "Thesis Threats to Validity"], ["Thesis Evaluation and Appendix C", "Thesis Threats to Validity"],
{ warning: "Use non-benchmark wording; do not report the counts as general model performance.", qnaBranchIds: ["evaluation-validity"] }, { warning: "Use non-benchmark wording; do not report the counts as general model performance.", qnaBranchIds: ["evaluation-validity"] },
@@ -333,6 +413,8 @@ export const presenterNotes = [
"conclusion", "conclusion",
"limits", "limits",
18, 18,
"Bound the prototype claims before the final contribution statement.",
["prototype", "not production security"],
"The prototype uses trusted in-process Python and file-backed stores; it does not provide production authentication, RBAC, sandboxing, scheduling, arbitrary crash recovery, or a bundled autonomous planner.", "The prototype uses trusted in-process Python and file-backed stores; it does not provide production authentication, RBAC, sandboxing, scheduling, arbitrary crash recovery, or a bundled autonomous planner.",
["Thesis Limitations"], ["Thesis Limitations"],
{ qnaBranchIds: ["security-production-boundary", "production-readiness"] }, { qnaBranchIds: ["security-production-boundary", "production-readiness"] },
@@ -341,6 +423,8 @@ export const presenterNotes = [
"conclusion", "conclusion",
"future", "future",
18, 18,
"Name the surrounding layers left as future work.",
["live agent", "scheduling", "controlled evaluation"],
"A live agent interface, transactional storage, richer debugging, security hardening, scheduling, and controlled comparative evaluation remain future work.", "A live agent interface, transactional storage, richer debugging, security hardening, scheduling, and controlled comparative evaluation remain future work.",
["Thesis Future Work"], ["Thesis Future Work"],
{ qnaBranchIds: ["production-readiness"] }, { qnaBranchIds: ["production-readiness"] },
@@ -349,6 +433,8 @@ export const presenterNotes = [
"conclusion", "conclusion",
"conclusion", "conclusion",
20, 20,
"Restate the implemented contribution and planner-runtime boundary.",
["planner proposes", "platform executes"],
"The contribution is **architectural and implemented**: external planners can propose workflows while a typed platform **validates, binds, executes, persists, interrupts, resumes, and inspects** them through public operations.", "The contribution is **architectural and implemented**: external planners can propose workflows while a typed platform **validates, binds, executes, persists, interrupts, resumes, and inspects** them through public operations.",
["Thesis Contributions", "Thesis Conclusion"], ["Thesis Contributions", "Thesis Conclusion"],
{ qnaBranchIds: ["where-is-ai-agent", "not-just-cli"] }, { qnaBranchIds: ["where-is-ai-agent", "not-just-cli"] },
@@ -357,6 +443,8 @@ export const presenterNotes = [
"conclusion", "conclusion",
"questions", "questions",
19, 19,
"Open structured examiner discussion without introducing new claims.",
["defense questions", "evidence"],
"That boundary is the claim I will defend: reusable agent-operated automation is inspectable because planning and execution have explicit contracts. I welcome questions.", "That boundary is the claim I will defend: reusable agent-operated automation is inspectable because planning and execution have explicit contracts. I welcome questions.",
["Thesis Conclusion", "Defense Q&A index"], ["Thesis Conclusion", "Defense Q&A index"],
{ qnaBranchIds: ["where-is-ai-agent", "evaluation-validity", "production-readiness"] }, { qnaBranchIds: ["where-is-ai-agent", "evaluation-validity", "production-readiness"] },