revise_proposal
Replace all pending proposal shapes with a validated new set in one all-or-nothing, undoable journal step, leaving accepted shapes untouched.
Instructions
Replace EVERY still-pending shape in a proposal with a new set, as ONE journal step (#365) — the move for "I re-measured and got a better batch". The old pending shapes go, the replacements commit under the same proposal, and undo_last puts the previous batch back exactly. All-or-nothing: the whole replacement is validated (sheet, scale, vertex count, a height for surface_area) before the first pending shape is removed, so a malformed last shape leaves the batch untouched and the error says which entry and why. Shapes the estimator already accepted are ink — they stay, and they are not part of what this replaces. verts are image px like every other tool; roles and minimums match the measure tools (floor_area/deduct ≥3, linear/surface_area ≥2, count 1). An empty shapes list is refused — withdraw_proposal is the verb for that. Coordinates are image px at render scale 2.0: PDF pt × 2, origin top-left, y down (the browser canvas's native space). Sheet payloads carry dims in both px and pt.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| shapes | Yes | ||
| proposal_id | Yes | The batch, from propose_takeoff |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | ||
| label | Yes | ||
| replaced | Yes | Pending shapes removed from the batch | |
| committed | Yes | Replacement shapes committed, all attached to the same batch | |
| shape_ids | Yes | ||
| proposal_id | Yes |