Proposed-Value Edit#

How the Review Workbench offers, carries, and replays a reviewer's inline edit to a proposed Candidate value. Two decisions ratified together in 1.14.0, both surfaced by the first real integration (OpenTherapist).

Editing is a per-Review-Item producer choice (2026-07-17)#

Before this decision the inline proposed-value editor always rendered until an item had a decision; there was no way to turn it off for a queue where an edited value is meaningless or must not be accepted (an approve/keep identity decision, a value the producer will re-derive). Consumers hid the editor with host CSS — detection, not prevention: the input was still in the DOM and still editable.

Decision: ReviewItemSpec.editable (default true) controls whether the inline editor renders for that item. false removes the editor entirely — the decision is keep-current / use-proposed / reject only, and effectiveValue is always the selected candidate's own value. This is enforcement (the affordance is absent), not a cosmetic hide. currentProposedReviewItem accepts a matching editable? input. Default-true keeps every existing item unchanged.

An inline edit is carried in the event log, not browser state (2026-07-17)#

The reviewer's edit (editedValuesByItemName) lived only in the workbench's browser session state and never rode the Review Session Event log. A server apply path that derives from pre-decision snapshot + persisted events — the documented server-owned apply boundary — would replay the unedited proposal and silently apply a value the reviewer never saw. The reviewer's screen and the applied result disagreed, with no error: a divergence trap.

Decision: an accept-proposed decision event carries the edit on spec.data.workbenchEditedValue, and replayReviewSessionEvents reconstructs editedValuesByItemName from it. snapshot + persisted events is now a complete record of reviewer intent; the derived effectiveValue reflects the edit with no separate edit channel. Replay clears a stale edit when the decision moves off accept-proposed or is cleared. Backward compatible: events without the key replay exactly as before.

Boundary preserved: this does not move review authority into Survey. The edit is producer-facing review input carried through the same replay/derive machinery as every other decision; the producer still owns whether an edited value updates a record, and re-validates it against current product state before applying (see consumer-integration-guide.md). The original proposed value stays in the provenance trail (the candidate's own value), so the edit never rewrites history.

Source: docs/decisions/proposed-value-edit.md