Skip to content

FlowRunner: render a flow that ended with outcome: 'refused' as a Close-only notice with no "completed" toast (lane 3 of objectstack#14945 ruling 2′) #7707

Description

@claude

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

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatenhancementNew feature or requestpm:blockedpriority:p2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions