# Proposal workbench — pilot

Build or debug a proposal at [workbench/index.html](index.html). This is an editable storyboard with layout guidance, saved as `spreads-plan/1`. It is a first usable implementation of Spreads' existing planning method, not a second methodology.

## Use it

1. Choose **Build a proposal**, **Debug a proposal**, or a fictional example. Reopen a downloaded JSON plan from the starting screen.
2. Complete the brief and preserve approved scope, assets, wording and manual slots. Build starts from one of three provisional routes. Debug accepts a pasted outline, one headline per line; `[blank]` creates a protected manual slot.
3. Edit the title spine and each beat's audience question, point, substance, status, qualification, closing beat, before/after understanding and next connection. Add or move beats. A protected beat cannot be removed; manual blanks stay in the exported plan.
4. Inspect **Layout choices**. Eleven curated exact states offer conditional shortlists with gains, losses, prerequisites, neighbouring transitions, required slots and tested counts. The actual catalogue and semantic contracts supply their requirements at runtime. A preview remains the library's fictional specimen until an author builds an adaptation. It does not change when you edit your plan.
5. Use **Check the plan** for structural gaps. These checks find empty fields, missing claimed sources, declared gaps, repeated titles, counts outside tested instances and unfilled required slots. They cannot establish whether prose is true, an argument is sound or a visual works. An unusual order is not itself an error. Route labels are provisional planning aids, not statistically established optimal sequences.
6. **Download plan** to retain a JSON copy; **AI handoff** produces an editable Markdown storyboard with exact source links and remaining checks. Review it before sharing. Give the JSON and handoff to an authorised assistant to continue the project in its own workspace.

## One contract for UI and agents

[plan.schema.json](plan.schema.json) describes the file shape. [model.mjs](model.mjs) is the runtime model, semantic shortlist and structural checks. Runtime additionally checks unique IDs, current recommendation eligibility and import size. Imports are limited to 1 MB, 80 beats, 20,000 characters per text field and counts of 1–20. This count cap is an editor bound, not a library layout guarantee. Unknown versions, fields and invalid states are rejected without replacing the open plan.

Preserve IDs, protected flags, evidence status, sources, qualifications and manual blanks. Do not rewrite a brief to fit a route. A changed item count must retain the relationship and receive an inspected populated composition. A layout swap clears its old slot map after confirmation, retains the storyboard and marks review pending. Recheck both neighbours. Split/merge, automated argument diagnosis, semantic search across every state and native deck generation are not implemented in this pilot.

## Privacy and format

The page loads public static library files. Project text remains in memory until the user explicitly downloads or copies it. No autosave, account, analytics, AI service, URL-state or submission endpoint is present. Closing or reloading clears unsaved work; keep downloaded files somewhere appropriate to the project. The JSON and Markdown may contain confidential material and must stay out of the Spreads repository and public site.

The two [examples](examples.json) are wholly fictional test plans. Their qualifications and deliberate gaps are part of the demonstration. Neither supplies real-world evidence. HTML library render checks do not establish editable PowerPoint or PDF output. This workbench does not generate either format.

## Method and maintenance

Continue through [the AI entry point](../LLM_ENTRYPOINT.md), [semantic contracts](../SEMANTICS.md), [artwork and layout](../artwork-and-layout.md) and [reuse policy](../reuse-policy.md). Logic Poetry owns unresolved discovery and what/why decisions; Spreads helps present their supported argument. No new S-code or case payload is introduced here.

The UI inherits Spreads' existing fonts and tokens. `tokens.css` is a generated copy of the canonical `../tokens.css` root declarations, excluding its remote font import; it must be regenerated, never independently designed. Fonts are loaded from the existing local case fonts. The page's policy limits resource loading to this origin.

Serve the library root through HTTP for local testing. The public pilot is at [Spreads workbench](https://tdw-spreads.choiceoak6.chatgpt.site/workbench/). The page is optional: a configured local AI host can use the same method and plan checks directly through the Spreads MCP connector.
