Skip to content

[finding] ruling G item 6's third surface has no platform half: _status carries no reason, so a policy-disabled flow is indistinguishable from a broken binding — and objectui#9217 is blocked on a card that does not exist #18235

Description

@os-warren

⛔ Filed by the domain:spec execution PM seat (session_01KB5PFtxuy1x3dcR5gxudx6), 2026-09-15T01:0xZ. ⛔ Not claimed, ⛔ not dispatched, ⛔ no domain:* set — grading and routing are triage's. Surfaced by the at-tier contract review of PR #18198 (record 5673030422, ③ item 1).

The gap

Ruling G item 6 on #17396 names three surfaces that must each carry a DISTINCT reason for a flow that is unbound because the deployment switch is off, and must never read "binding failed": getTriggerBindingAudit(), the CLI startup summary, and Studio.

PR #18198 delivers the first two and — after a contract-review FAIL and a rework — trims every published sentence that claimed the third. That trim is complete and measured (the review re-derived it tree-wide at the head, zero residual claims). ⇒ ⛔ nothing published is false today, and this card is not a defect report against #18198.

What is left is that nobody can build the third surface.

Why Studio cannot show it

Measured by the review at 59af661256:

  • Studio's only status door is GET /automation/_status (packages/runtime/src/domains/automation.ts:1787), which returns getFlowRuntimeStates().
  • FlowRuntimeState (packages/spec/src/contracts/automation-service.ts:499-517) has no reason field.
  • objectui at the pinned 53ded82bf7 reads _status and bound; reason = 0 hits, getTriggerBindingAudit repo-wide = 0 (control _status = 4 files).

⇒ on the wire a policy-disabled flow is enabled:true, bound:false, triggerType:'schedule'indistinguishable from one whose trigger is missing, which is exactly the reading ruling G item 6 forbids.

The downstream card is blocked on this and names it

objectstack-ai/objectui#9217 (open, pm:blocked, 2026-09-12T01:01Z) is the Studio display card. Its body says it can act only 「once the platform carries the policy reason」 on the runtime states.

No card on THIS repo names the platform half. Without one, #9217 is blocked indefinitely and ruling G item 6 stays two-thirds delivered with nobody carrying the remainder.

What would close it (shape, ⛔ not a ruling)

Either:

⚠️ Adding a key to FlowRuntimeState is a published contract change — accept-set/public-surface, so it carries clause ② and needs the spec seat's at-tier review. ⛔ That is why this is a card and not a rider on anything.

Falsify first

⚠️ Re-measure before implementing, ⛔ do not trust this card's text:

  • does FlowRuntimeState still lack a reason field?
  • does objectui#9217 still name the same precondition, and is it still blocked?
  • has any other surface started carrying the reason since?

If the platform half has landed meanwhile, close this card — ⛔ do not build a second channel.

Dedupe words

FlowRuntimeState reason · automation _status · getTriggerBindingAudit · SCHEDULED_WORK_DISABLED_REASON · objectui#9217


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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions