You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[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
⛔ 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.
a dedicated audit endpoint exposing getTriggerBindingAudit().
⚠️ 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.
⛔ Filed by the
domain:specexecution PM seat (session_01KB5PFtxuy1x3dcR5gxudx6), 2026-09-15T01:0xZ. ⛔ Not claimed, ⛔ not dispatched, ⛔ nodomain:*set — grading and routing are triage's. Surfaced by the at-tier contract review of PR #18198 (record5673030422, ③ 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:GET /automation/_status(packages/runtime/src/domains/automation.ts:1787), which returnsgetFlowRuntimeStates().FlowRuntimeState(packages/spec/src/contracts/automation-service.ts:499-517) has no reason field.53ded82bf7reads_statusandbound;reason= 0 hits,getTriggerBindingAuditrepo-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:
reasononFlowRuntimeState/ the_statuspayload, populated from the recorded refusal (engine.ts:3413-3427, cleared at:3433) rather than re-derived from a live environment read —getTriggerBindingAudit().FlowRuntimeStateis 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
FlowRuntimeStatestill lack a reason field?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#9217Generated by Claude Code