- What gets versioned?
- Every write to the canvas: inventory nodes (components, subassemblies, end products), suppliers, customers, supply links (supplier-to-part), BOM links (parent-to-input), customer links (customer-to-product), and canvas positions. Each logical version has a human-readable summary, actor, timestamp, and full delta of what changed.
- What's a 'logical version' vs every individual write?
- Rapid edits by the same person within 30 seconds collapse into one logical version. So dragging a node from one spot to another, then connecting an edge, then renaming the supplier, all within that window, becomes one version ("You: moved Acme, connected to PCB-RAW, renamed to Acme Plastics Ltd"). This keeps the history readable instead of producing one entry per pixel of drag.
- Can I restore to a past version?
- Yes. Click any version in the history panel, then Restore. A preview modal lists every insert, update, and delete the restore will perform, so you see exactly what'll change before confirming. The restore creates a new version that undoes everything between current and target — your history isn't rewritten, the original states stay browsable. Optimistic concurrency check on confirm catches any concurrent edits.
- How do I see the BOM revision history for one specific product?
- Open the product (subassembly or end product) modal and switch to the BOM versions tab. You'll see every revision of that product's BOM specifically, scoped to BOM-composition changes only. Renaming the product or moving its canvas position doesn't appear here. Each entry shows the full input list as of that revision, with diffs highlighted. You can also Restore just that product's BOM without touching the rest of the canvas.
- What's the load-bearing use case?
- Quality investigations, warranty work, and customer disputes. Six months after shipping an order, a customer reports a defect. You need to know exactly what parts went into that build, with what specifications, on the date you shipped. BOM versioning gives you the answer in one click — open the product, find the revision active on the ship date, see the full input list.
- Does this scale?
- Yes. Storage is delta-based with full snapshots every 25 versions for fast reads. A 100-node workspace with 30 logical versions per day (typical for active editing) generates about 11MB of history per year. At 1000 workspaces that's ~11GB/year. Reads are constant-time worst-case: load the nearest snapshot, replay at most 24 deltas, render. Tested at 1000-event replay in single-digit milliseconds.
- Who is the version attributed to when Alan makes a change?
- When Alan drafts a PO or schedules a task on your behalf, the version shows 'Alan (on behalf of You)' with both the actor identity and the user who triggered Alan. Pure cron-driven changes (reorder alerts, shop analysis) attribute to 'cron' with no user. You see who/what made every change in the history panel, never ambiguous.
- Can I delete history?
- By default no — history is retained forever as the audit trail. If a workspace ever needs history trimmed (data retention policy, compliance), there will be a workspace-level setting to truncate history older than X days. Out of scope for the v1 build.