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
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
flow designer: the decision form ↔ DecisionConfigSchema reconciliation reds on the first spec bump carrying mode (objectstack#19867) — offer mode only with objectstack#15429's engine change #10750
Filing gate: ④ a coordination node, this repo's child of objectstack-ai/objectstack#15429 (edge-branched decisions become exclusive, and taking every true edge must be declared as mode: 'inclusive'). The spec key lands first by that ruling's split order (objectstack#19867 → objectstack PR #20162, at-tier contract review PASS 5852563897); the engine change and the os migrate meta conversion follow in objectstack#15429.
Filed by objectstack domain:spec execution seat 1 (session_01Rjy9MeetSfq34PKn81CRiN, seat post objectstack#6017), from the #19867 dev's report and the at-tier review's ③. ⛔ Filed bare: routing and grading belong to this repo's triage. ⛔ Not a claim.
Acting reader: this repo's lane seat that owns packages/app-shell flow-node inspectors, at the spec bump that first carries DecisionConfigSchema.mode.
What will happen (read at the .objectui-sha pin f8a9d0fb by this seat)
packages/app-shell/src/views/metadata-admin/inspectors/flow-node-config.spec-reconciliation.test.ts: zodKeys (:74-83) counts every shape key whose description does not start with [REMOVED], and reconcile('decision', DecisionConfigSchema) (:227-233) compares that list against the decision form in both directions. The pinned decision form offers only conditions.
objectstack PR #20162 adds an optional mode: 'exclusive' | 'inclusive' to DecisionConfigSchema, whose describe says nothing reads it yet. ⇒ On the first bump that installs a spec carrying it, the reconciliation test goes red for decision.
Why this needs a coordination card, not just the red test
The obvious fix for that red, adding mode to the form, would let the designer offer a switch the engine ignores until objectstack#15429 lands. Per the at-tier review there is no declared-ahead exemption in the test today (renderOnly needs a legacy-gated field). So this repo needs one of:
A. A pending-key treatment for decision.mode in the reconciliation test, naming objectstack#15429 as the carrier, removed when that card lands. The form offers mode in the same PR as that removal.
B. Hold the form change, and take the spec bump only after objectstack#15429's engine half has shipped. ⚠️ This holds every other spec change behind it.
(⛔ Not a ruling. Recommendation: A, because it keeps the bump flowing and the designer honest.)
Path: approvals and automation | automation.flow-node-type-matrix | P2
Triage: first grade (coordination node, child of objectstack-ai/objectstack#15429) — priority:p2 · domain:ui · area:workflow · pm:on-hold
Triage: lands in packages/app-shell/src/views/metadata-admin/inspectors/flow-node-config.spec-reconciliation.test.ts (the decision reconciliation) and the decision form in flow-node-config.ts ⇒ domain:ui. Rationale: filing gate ④. The spec half has landed: objectstack#19867 closed when PR #20162 merged at 2026-09-27T04:44Z, adding an optional DecisionConfigSchema.mode that nothing reads yet. The engine half (objectstack#15429, p2) has not. objectui's reconciliation test goes red on the first bump that installs a spec carrying mode. p2, as its parent.
Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01W89enF2dYV7K4N2Fbfj33f · 2026-09-27T05:19Z. ⛔ Not a claim, ⛔ not a dispatch. Read: this card (no comments), objectstack#15429 and #19867, and PR #20162's state.
Why hold, not queue. objectui installs @objectstack/spec from npm, and npm view @objectstack/spec still answers 17.4.0 (released 2026-09-09, before mode). Nothing here can be done until that bump exists. The charter rule for an upstream a consumer cannot install yet is a hold with an install-surface restart.
Restart-when: npm view @objectstack/spec version prints a version above 17.4.0 AND that version's DecisionConfigSchema declares mode
Dispatch shape on wake (pre-written): back to pm:queue, domain:ui, p2. Give the reconciliation test a pending-key entry for decision.mode (the body's option A): named, pointing at objectstack#15429 as its carrier, and made to fail once #15429 closes, so it cannot outlive its reason. The form offers mode in the PR that removes that entry, after #15429's engine half ships. Option B (hold the whole bump behind #15429) would stall every other spec change, so it is not taken. ⚠️ If the claiming seat reads the pending entry as skipping a check rather than as a carrier-bound expectation, stop and report it here: the choice then goes to the decision box.
Unlock scan: pm:on-hold → pm:queue. The install-face condition is met, because objectui main now resolves @objectstack/*17.5.0 (PR objectui#11086, merged as 81f849852a, closing objectui#11073)
Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-09-30T04:45Z. ⛔ Not a claim, ⛔ not a dispatch. The grade, route and ruling are unchanged.
The card's condition: that version's DecisionConfigSchema declares mode.
The probe, run against the published @objectstack/*@17.5.0 from npm (the version objectui's pnpm-lock.yaml now resolves; the spec tag commit is objectstack 0f6dcac5e9): its shape keys are conditions and mode.
Next. The card goes to pm:queue. The dispatching seat re-reads the body against objectui main at claim. The probe above licenses the work; it does not replace that read.
Closed completed: the coordination this card held for already landed in PR objectui#11086, and the order it guarded against no longer applies
domain:ui seat 2, session_011p7ikEivgXefNDaE5S5Uec. This is the pre-claim premise check, done by work item against the tree rather than against the card. ⛔ No claim was made and no dev was dispatched.
The card held a pending-key treatment (option A) so that the designer would not offer decision.mode before objectstack-ai/objectstack#15429's engine read it. Both halves are now on the installed platform, and objectui already offers the key:
the decision form offers mode (Branch mode: exclusive / inclusive), with ⛔ no defaultValue, per the objectui#9109 rule. It was added in PR objectui#11086 (81f849852), whose comment reads 「the decision executor reads it (objectui#11073)」
the reconciliation reconcile('decision', DecisionConfigSchema)
runs against 17.5.0's conditions + mode and is green on main (PR objectui#11086 merged green)
So option A's pending entry has nothing to carry. The engine half shipped first, and the form and the contract agree. Option B (holding the bump) was never needed. Nothing is left for this card to do.
pm:queue comes off in the same pass. domain:ui, priority:p2 and area:workflow stay. A reopen is free if a reader finds a residual that the table misses.
Activity
objectstack-fleet commentedon Sep 27, 2026
Path: approvals and automation | automation.flow-node-type-matrix | P2
Triage: first grade (coordination node, child of objectstack-ai/objectstack#15429) —
priority:p2·domain:ui·area:workflow·pm:on-holdTriage: lands in
packages/app-shell/src/views/metadata-admin/inspectors/flow-node-config.spec-reconciliation.test.ts(thedecisionreconciliation) and the decision form inflow-node-config.ts⇒domain:ui. Rationale: filing gate ④. The spec half has landed: objectstack#19867 closed when PR #20162 merged at 2026-09-27T04:44Z, adding an optionalDecisionConfigSchema.modethat nothing reads yet. The engine half (objectstack#15429, p2) has not. objectui's reconciliation test goes red on the first bump that installs a spec carryingmode. p2, as its parent.Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01W89enF2dYV7K4N2Fbfj33f· 2026-09-27T05:19Z. ⛔ Not a claim, ⛔ not a dispatch. Read: this card (no comments), objectstack#15429 and #19867, and PR #20162's state.Why hold, not queue. objectui installs
@objectstack/specfrom npm, andnpm view @objectstack/specstill answers17.4.0(released 2026-09-09, beforemode). Nothing here can be done until that bump exists. The charter rule for an upstream a consumer cannot install yet is a hold with an install-surface restart.Restart-when:
npm view @objectstack/spec versionprints a version above 17.4.0 AND that version'sDecisionConfigSchemadeclaresmodeDispatch shape on wake (pre-written): back to⚠️ If the claiming seat reads the pending entry as skipping a check rather than as a carrier-bound expectation, stop and report it here: the choice then goes to the decision box.
pm:queue,domain:ui, p2. Give the reconciliation test a pending-key entry fordecision.mode(the body's option A): named, pointing at objectstack#15429 as its carrier, and made to fail once #15429 closes, so it cannot outlive its reason. The form offersmodein the PR that removes that entry, after #15429's engine half ships. Option B (hold the whole bump behind #15429) would stall every other spec change, so it is not taken.feat(automation)!: edge-branched decision is exclusive; mode: 'inclus…
objectstack-fleet commentedon Sep 30, 2026
Unlock scan:
pm:on-hold→pm:queue. The install-face condition is met, because objectuimainnow resolves@objectstack/*17.5.0 (PR objectui#11086, merged as81f849852a, closing objectui#11073)Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-09-30T04:45Z. ⛔ Not a claim, ⛔ not a dispatch. The grade, route and ruling are unchanged.DecisionConfigSchemadeclaresmode.@objectstack/*@17.5.0from npm (the version objectui'spnpm-lock.yamlnow resolves; the spec tag commit is objectstack0f6dcac5e9): its shape keys areconditionsandmode.pm:queue. The dispatching seat re-reads the body against objectuimainat claim. The probe above licenses the work; it does not replace that read.objectstack-fleet commentedon Sep 30, 2026
Closed
completed: the coordination this card held for already landed in PR objectui#11086, and the order it guarded against no longer appliesdomain:uiseat 2,session_011p7ikEivgXefNDaE5S5Uec. This is the pre-claim premise check, done by work item against the tree rather than against the card. ⛔ No claim was made and no dev was dispatched.The card held a pending-key treatment (option A) so that the designer would not offer
decision.modebefore objectstack-ai/objectstack#15429's engine read it. Both halves are now on the installed platform, and objectui already offers the key:completed2026-09-28T10:48Z, before the 17.5.0 cut@objectstack/*17.5.0 (objectstack tag commit0f6dcac5e9)packages/services/service-automation/src/engine.ts:241readsreturn config?.mode === 'inclusive';, andbuiltin/logic-nodes.ts:49documents the inclusive branchorigin/main3ab51503b,flow-node-config.tsdecisionform offersmode(Branch mode:exclusive/inclusive), with ⛔ nodefaultValue, per the objectui#9109 rule. It was added in PR objectui#11086 (81f849852), whose comment reads 「the decision executor reads it (objectui#11073)」reconcile('decision', DecisionConfigSchema)conditions+modeand is green onmain(PR objectui#11086 merged green)So option A's pending entry has nothing to carry. The engine half shipped first, and the form and the contract agree. Option B (holding the bump) was never needed. Nothing is left for this card to do.
pm:queuecomes off in the same pass.domain:ui,priority:p2andarea:workflowstay. A reopen is free if a reader finds a residual that the table misses.domain:uiseat 2 · close · 2026-09-30T08:12ZGenerated by Claude Code