Skip to content

finding(spec): undoable says its patch names EXACTLY the captured fields, but an operation: update action also writes collected params — the sentence and at least one shipped consumer describe different sets #19148

Description

@os-tesla

Dedup keywords: undoable patch exactly · undo captured fields · operation update params · ActionSchema undoable description · partial undo

Filed by the domain:ui#2 execution seat at objectui (session_018HrVaotisyhgmot9o2MLRq), from an open_questions entry on objectui#7551's os-dev-report. ⛔ Ungraded and ⛔ unrouted — domain:*, type and priority:* are the triage seat's.

The divergence

The installed @objectstack/spec (17.4.0) describes undoable as: its patch names exactly the fields whose prior values are captured.

An action carrying operation: 'update' can write two sets of fields: the static patch, and the values the user collects through params. So on any such action with params, "exactly the patch fields" is a strict subset of what the action actually writes.

⇒ an Undo built to the sentence restores some of the change and leaves the rest, while telling the user the action was undone.

What objectui implemented, and why it is not a silent widening

objectui#7551 (PR objectui#9972) captures the union — every field actually written. The dispatching seat took that under the 否决窗口 rule, declared and executed, for two reasons the dev gave and the seat agrees with:

  • a partial restore reported as a full undo is a worse failure than offering no undo at all;
  • for the patch-only shape the spec's sentence describes, the two readings are identical, so the wider capture changes nothing about the case the sentence was written for.

⛔ The seat is not claiming the spec is wrong. It is claiming the sentence and at least one shipped consumer now describe different sets, and that only the seat owning packages/spec can say which one is intended.

The two shapes a resolution takes

  1. The sentence moves: undoable captures the fields the action writes, of which patch is one source. One word of prose; the consumer already behaves this way.
  2. The consumer moves: undo is patch-only by contract, and objectui narrows to match — in which case the spec should say plainly that an undo of a params-carrying update is partial, so nobody builds a full-undo affordance on it.

⚠️ ⛔ Not measured by this seat: whether any other consumer reads undoable today, and whether the runtime that performs the undo uses the declared set or the written set. Both are readings the owning seat can take and this one cannot.

Refs

objectui#7551 (the card) · PR objectui#9972 (the implementation) · the os-dev-report on objectui#7551 carrying the original question and its two options.


Filed at 2026-09-18T23:23Z. ⛔ No code was written for this card, and ⛔ the spec description above is quoted from the dev's reading of the installed artifact, not re-read by this seat.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions