Blocked-by: objectstack-ai/objectstack#14945
Related: objectstack-ai/objectstack#14945 · objectstack-ai/objectstack#15788
Filed by objectstack's domain:spec execution seat (session_01M59rPZZFzqhfMUPFqqZTkf, 2026-09-05T08:01Z) as execution lane (3) of the maintainer ruling on objectstack-ai/objectstack#14945 (director seat comment 5548735593, decision batch #42, verbatim 「13753 我让别人处理了,其他同意」), quoted verbatim:
Ruled: 2′. Shape, to be declared contract-first:
packages/spec flow schema: the end node accepts outcome?: 'completed' | 'refused' (default completed) and, when refused, a message string that goes through the same interpolation a screen description gets ({record.name} etc.); a refused end is a terminal state, never resumed.
- run record /
sys_automation_run: the run's terminal status carries the outcome (refused distinct from failed; a refusal is a successful evaluation that says no) and the rendered message.
- runner (objectui
FlowRunner): on refused, render the message with Close only, no Submit, no "completed" toast; the invoking action's successMessage stays suppressed exactly as today (silent — ⛔ do not touch).
(3) objectui ui seat — FlowRunner rendering (cross-repo card filed by the spec seat with Related: objectstack#14945). Re-verify the console half on today's tree first (the census ran on the 17.2.0 pin). Pins: a refused end with an interpolated message on a two-record fixture yields per-record text; no Submit rendered; no completion toast; successMessage still silent.
This card is lane (3): the console's FlowRunner rendering of a run that ended with outcome: 'refused'. Lane (1) — the spec contract — is dispatched on objectstack#14945; lane (2) — service-automation honouring the outcome and persisting it on the run — is objectstack#15788. Routing (domain:ui per the three-stream rule) and priority are the objectui triage's; named reader: the objectui domain:ui execution seat, at dispatch time. The Blocked-by: line is the unlock scan's — this card returns to the queue when the spec contract lands (objectstack#14945 closes); the pin consumption gate is the usual one (the @objectstack/spec pin must carry the new outcome / message keys and the run-status vocabulary before this can be built — an installed-surface probe, not "upstream merged").
What the card measured (objectstack#14945, on the 17.2.0 console pin — re-verify on today's tree first)
A message-only screen node ({title, description}, no fields) is today the only channel that interpolates per-record text, and it renders Cancel + Submit; submitting resumes the run to end, and FlowRunner toasts its neutral Flow "…" completed — a user being told "this is refused" clicks Submit and is told the flow completed. One thing works and must not be "fixed": the invoking action's own successMessage does not fire behind the dialog — a paused run returns {success: true, silent: true} and silent suppresses the action toast (measured on the shipped console bundle, RecordDetailView flow handler). The defect is the terminal toast and the Submit affordance, ⛔ not a double-toast.
Deliverables (for the objectui seat's dispatch, against the spec contract as landed)
FlowRunner: when the run's terminal outcome is refused, render the rendered message as a notice with Close only — no Submit, no Flow "…" completed toast; completed runs unchanged.
silent untouched — pin that the invoking action's successMessage still does not fire.
- Pins: a
refused end with an interpolated message on a two-record fixture yields per-record text in the dialog; no Submit rendered; no completion toast; successMessage still silent.
- Changeset per objectui's convention; closing keyword
Fixes this card; the objectstack cards are referenced verb-less.
Generated by Claude Code
Blocked-by: objectstack-ai/objectstack#14945
Related: objectstack-ai/objectstack#14945 · objectstack-ai/objectstack#15788
Filed by objectstack's
domain:specexecution seat (session_01M59rPZZFzqhfMUPFqqZTkf, 2026-09-05T08:01Z) as execution lane (3) of the maintainer ruling on objectstack-ai/objectstack#14945 (director seat comment5548735593, decision batch #42, verbatim 「13753 我让别人处理了,其他同意」), quoted verbatim:This card is lane (3): the console's
FlowRunnerrendering of a run that ended withoutcome: 'refused'. Lane (1) — the spec contract — is dispatched on objectstack#14945; lane (2) —service-automationhonouring the outcome and persisting it on the run — is objectstack#15788. Routing (domain:uiper the three-stream rule) and priority are the objectui triage's; named reader: the objectuidomain:uiexecution seat, at dispatch time. TheBlocked-by:line is the unlock scan's — this card returns to the queue when the spec contract lands (objectstack#14945 closes); the pin consumption gate is the usual one (the@objectstack/specpin must carry the newoutcome/messagekeys and the run-status vocabulary before this can be built — an installed-surface probe, not "upstream merged").What the card measured (objectstack#14945, on the 17.2.0 console pin — re-verify on today's tree first)
A message-only
screennode ({title, description}, nofields) is today the only channel that interpolates per-record text, and it renders Cancel + Submit; submitting resumes the run toend, andFlowRunnertoasts its neutralFlow "…" completed— a user being told "this is refused" clicks Submit and is told the flow completed. One thing works and must not be "fixed": the invoking action's ownsuccessMessagedoes not fire behind the dialog — a paused run returns{success: true, silent: true}andsilentsuppresses the action toast (measured on the shipped console bundle,RecordDetailViewflow handler). The defect is the terminal toast and the Submit affordance, ⛔ not a double-toast.Deliverables (for the objectui seat's dispatch, against the spec contract as landed)
FlowRunner: when the run's terminal outcome isrefused, render the rendered message as a notice with Close only — no Submit, noFlow "…" completedtoast;completedruns unchanged.silentuntouched — pin that the invoking action'ssuccessMessagestill does not fire.refusedend with an interpolated message on a two-record fixture yields per-record text in the dialog; no Submit rendered; no completion toast;successMessagestill silent.Fixesthis card; the objectstack cards are referenced verb-less.Generated by Claude Code