# description
Self-describing canvas bundle written by Totally Lean. Top-level wrapper carries the canvas, optional AI agent histories, and discoverability hints. The canvas itself models Ash Maurya's Lean Canvas (nine sections) plus optional threads, item-to-item links, weights, validation markers, and theme.

# properties.$schema.description
URL of this schema document. Editors and agents use this for autocomplete and validation.

# properties._viewer.description
Hint for users who open the file without our app — points to the public web viewer.

# properties.schema.description
Schema version identifier. Bumps on incompatible shape changes.

# properties.exportedAt.description
Milliseconds since epoch — when the bundle was written.

# properties.agentHistories.description
Optional. Per-agent conversation history keyed by agent id (critic, explorer, onboarding). Sessions with no exchanges are omitted.

# properties.twoTierPitch.description
Optional. The per-canvas two-tier pitch (elevator + 9 section narrations) plus its userEdited flag. Travels with the bundle so re-importing a canvas restores the user's pitch edits.

# properties.twoTierPitch.properties.generatedAt.description
Milliseconds since epoch — when the pitch was generated.

# properties.twoTierPitch.properties.userEdited.description
True if the user edited any line via the review screen since the last fresh generate.

# $defs.LeanCanvas.properties.sectionTitles.description
Optional per-section title overrides; defaults applied when absent.

# $defs.LeanCanvas.properties.threads.description
Cross-cutting thread definitions for grouping items semantically.

# $defs.LeanCanvas.properties.links.description
Directional item-to-item links across sections.

# $defs.LeanCanvas.properties.sectionHeights.description
Per-section pixel heights on the Canvas planning board.

# $defs.LeanCanvas.properties.sectionWidths.description
Per-section pixel widths on the Canvas planning board.

# $defs.LeanCanvas.properties.sectionPositions.description
Per-section {x, y} positions on the Canvas planning board.

# $defs.LeanCanvas.properties.agentInstructions.description
Per-canvas markdown brief for AI agents. Optional. Travels with the file. Intended to be prepended to agent system prompts so a session knows the audience, tone, and constraints specific to this canvas.

# $defs.Sections.description
The nine Lean Canvas sections, each an array of CanvasItem.

# $defs.CanvasItem.properties.threadId.description
DEPRECATED — use threadIds. Kept for backward compatibility with older saved canvases.

# $defs.CanvasItem.properties.threadIds.description
Threads this item belongs to. Multi-thread, canonical field.

# $defs.CanvasItem.properties.weight.description
Optional numeric weight for Sankey flow scaling. Unitless.

# $defs.CanvasItem.properties.unit.description
Optional free-form display unit ($, users, %, etc.).

# $defs.CachedPitch.description
AI-generated pitch text, persisted with the canvas. Stale-detection via canvasHash.

# $defs.CachedPitch.properties.version.description
Cache schema version. Absent in legacy exports (treated as v1 by tolerant readers); when present must be 1. Phase C will permit value 2.

# $defs.AgentHistory.description
Conversation history for a single AI agent on this canvas.

# $defs.PersistedExchange.properties.suggestion.description
Optional sticky suggestion lifecycle (pending / accepted / skipped).