save_sheet
Upsert a workflow sheet by ID — create or replace it without resending others. Supports legacy stations or v2 board format with nodes, edges, and nested child boards.
Instructions
Upsert ONE workflow sheet by id — create it or replace it in place WITHOUT resending the others. sheet = { id (slug), code (SHORT badge), name, title, sub, schema? (2 for the v2 board form), shared? (true ⇒ this sheet is a reusable COMPONENT other sheets mount), status? (done|partial|todo — a shared component's single status, mirrored by every mount), AND EITHER legacy stations[] OR a v2 "board" }. A v2 board (the infinite-canvas / nested-chart form the app now renders) = { nodes:[ NODE ], edges:[ EDGE ], view?:{x,y,zoom} }. NODE = { id (unique within this board), x, y, w?, h? (local px), title, sub?, status (done|partial|todo), detail?{in[],out[],note,open[]}, algorithm?, board? (a NESTED child board — revealed by zooming into the node), boardRef? (TRANSCLUDE another sheet by id instead of owning a board — mounts that shared component live+read-only and inherits its status; mutually exclusive with board; see list_shared) }. EDGE = { id, from (node id in THIS board), to (node id in THIS board), kind? (flow|loop|dep), label?, fromSide? (top|right|bottom|left — the side the edge leaves the source node) } — edges are intra-board only; link across levels by nesting, not by an edge. Legacy stations[] sheets still load and auto-migrate to a board on read. Use this to CREATE a sheet or rewrite it wholesale; for surgical edits to an existing sheet prefer edit_board / set_node (they don't resend the tree). CONCURRENCY: pass "baseRev" (a sheet's rev from list_sheets or a prior write) to make the write FAIL if the sheet changed since — by default a write is auto-rejected if a human edited the sheet in the app since you last read it; pass force:true to overwrite anyway. Returns created-or-updated + the new rev + lint warnings. Persists to this session's project.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| sheet | Yes | ||
| baseRev | No |