LIMBFORGE EDIT-ANY-MEASUREMENT API CONTRACT =========================================== Legacy current-record editing ----------------------------- PUT /api/projects/{project_id}/measurements/{measurement_key} Required JSON: - value_mm - status - notes - change_reason Server-recorded: - changed_by - changed_at Behaviour: - Load the current record before changing it. - Require a non-empty change_reason when a record already exists. - Append the old and new values to measurement_revisions. - Update the current measurements row transactionally. - Supersede every affected immutable Design Forge snapshot. - Never alter or delete an existing snapshot. Measurement sessions -------------------- POST /api/projects/{project_id}/sessions GET /api/projects/{project_id}/sessions GET /api/projects/{project_id}/sessions/{session_id} Session-record editing ---------------------- PUT /api/projects/{project_id}/sessions/{session_id}/measurements/{measurement_key} Required JSON: - value_mm - status - notes - change_reason Behaviour: - Confirm session belongs to the project. - Load the existing session record. - Require a reason when changing an existing record. - Append revision history. - Update measurement_session_records transactionally. - Add snapshot supersession records where required. Revision history ---------------- GET /api/projects/{project_id}/revisions GET /api/projects/{project_id}/sessions/{session_id}/revisions Safety ------ - OI-only definitions remain blocked for non-OI projects. - Revision rows remain append-only. - Snapshots remain immutable. - Editing does not approve Forge generation. - Editing does not unblock CoverCanvas manufacturing export.