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 }}
Repository navigation
Studio connector_action form shows no envelope editor and no in-form refusal for a template token in connectorConfig.input #28164
Filing gate: ② should-fix ④.3 of the contract review of PR #28150 (#27968), record 6525595405. Filed by domain:spec seat 1. ⛔ Not a claim. Triage sets the grade and routes the card to the ui/ lane.
Reach: an app builder editing a connector_action node in Studio. After #28150, a {…} token in connectorConfig.input is refused at publish. Studio's hand-written connectorConfig form offers no CEL-envelope editor for those values and shows no in-form refusal, so the builder meets the located refusal only at the runtime authoring gate. The verdict is right, but it arrives in the wrong place.
flow-value-envelope.tsisValueEnvelopeSlot answers true for ['config','input'] on connector_action. That path is unreachable, because the parse refuses the loose key. It never reads the ledger's block (connectorConfig).
FlowNodeConfigField.tsxvalueSlotRefusals and flow-simulator.ts:123 call the judge config-only.
What changes
The Studio readers honour the ledger's block root. The connectorConfig.input values get the same envelope editor and in-form refusal as other value slots.
Add a test with a token typed into an input value, which shows the refusal in the form.
The Studio readers live in ui/packages/app-shell (FlowNodeConfigField.tsx, flow-simulator.ts, flow-value-envelope.ts), so the card is domain:ui. If honouring the ledger's block root needs a spec export, that is a spec card. It is not a cross-domain exception.
Blocked-by: #28150 is now in the body. pm:blocked.
Claim: PM loop round 4 · 2026-10-31T02:44Z
Session: session_01L9qibz8HEj53Wx2uphTo2o (seat; implementation by card thread session session_01L9qibxVHVAdKszs18owvD6, mode:thread)
Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/project-thread-ug538h (the card thread's designated push branch, the recorded platform exception to claude/issue-<n>-<slug>)
Worktree: objectstack-issue-28164
Domain: domain:ui
Seat: domain:ui#3
File surface: views/metadata-admin/inspectors/flow-value-envelope.ts (+test), FlowNodeConfigField.tsx, flow-simulator.ts, the connector_action form component, i18n keys, tests, .changeset/28164-*.md (stop on breach; explain in the report)
Container & model: M, mode:thread, model: default (dispatch-gates --tier re-run on the actual diff), effort: high
Clause-②: no (expected; re-judged on the diff)
Metadata-protocol: none
Responsibility: the Studio readers' config-only judge is ours; the ledger's connectorConfig block (#28150) is correct and stays
Thread-read: none
Premise: per the card's measurement; the dev re-measures on current main before code
Serial constraints cleared: seat-3 siblings #28239#28240#28241#28179#28164 hold declared regions of shared files (FRAME.md); #28148 (paused) holds views/setup/PackagedAutomationPage.tsx + packagedFlowLedger.ts
Maintainer 2026-10-31 「ui 车道一堆任务啊,应该并发开满啊」. Order: /mnt/project-files/ui-seat-3/r2026-10-31/dispatch-28164.md under FRAME.md.
{
"issue": 28164,
"status": "done",
"branch": "claude/project-thread-ug538h",
"pr": "https://github.com/objectstack-ai/objectstack/pull/28312",
"session": "session_01L9qibxVHVAdKszs18owvD6",
"premise_still_valid": true,
"summary": "Studio readers now honour the ledger block: isValueEnvelopeSlot matches flowNodeExpressionBlock(entry) (true for connector_action connectorConfig.input, false for config.input); FlowNodeConfigField isScalarValueSlot/valueSlotRefusals accept a declared sibling block and hand the node to resolveFlowNodeValueSlots/flowNodeValueTemplateRefusals, so typed connector input fields get the text/CEL toggle and the in-form refusal; the repeater gets the toggle and per-row refusal. flow-simulator configRefusal takes the node and names the block; the Debug run judges connector_action before mocking. Six-map pin is now seven (connector_action:connectorConfig.input), confirmed against FlowValueSlotSchema.",
"tests": "head ac2e380a: pnpm --dir ui exec vitest run inspectors/ + previews/ + 31 importer files -> Test Files 405/405, Tests 4763 passed 1 skipped (lock VERDICT command-exit 0); pnpm --filter @object-ui/app-shell type-check -> exit 0; eslint on 6 changed ui files -> exit 0. Full app-shell suite (~1987 files, 2 workers) stopped unfinished after ~50 min: declared narrowing, CI Test UI runs it. Ablation (fix committed; 3 sources restored from origin/main, src-aliased so no build): 3 test files -> Test Files 3 failed, Tests 8 failed | 11 passed; restored via git checkout HEAD, git diff HEAD empty. First ablation attempt was a no-op (ui/-prefixed paths refused by the vitest invocation guard), rerun with ui-relative paths.",
"gates": "dispatch-gates --commands (tree ac2e380a): 35 families, all run with stdin from /dev/null, all exit 0 (check:query-options-erasure first cut at a 280s cap -> 124, rerun -> 0; check:type-check-debt first NOT MEASURED exit 3 from lock queue, rerun under lock -> 0; check-sdui-manifest + --self-test -> 0; ui vitest scripts/ -> 169 passed 2 skipped). dispatch-gates --ran: 35 derived, 35 run, 0 NOT-MEASURED, 0 UNRUN. pnpm check:new-line-citations -> 0 new, exit 0. CI check-runs: in_progress at report time.",
"line_budget": "7 files, +380 / -34: sources +97/-27 (FlowNodeConfigField 57/10, flow-value-envelope 23/12, flow-simulator 17/5), tests +269/-7, changeset +14",
"deviations": "none of scope; one declared narrowing (full app-shell suite left to CI). Files: exactly the dispatched surface plus two new test files and the changeset; no i18n keys added; StudioDesignSurface.tsx untouched.",
"files_changed": [
".changeset/28164-connector-input-value-slot.md",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeConfigField.tsx",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeInspector.connectorInputEnvelope-28164.test.tsx",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/flow-value-envelope.test.ts",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/flow-value-envelope.ts",
"ui/packages/app-shell/src/views/metadata-admin/previews/simulator/__tests__/flow-simulator.connectorInput-28164.test.ts",
"ui/packages/app-shell/src/views/metadata-admin/previews/simulator/flow-simulator.ts"
],
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "5 — reads only: issue_read get #28164, get_comments #28164 x2, get_labels #28164, get #28185; zero write tools (plus one unauthenticated public REST read of the #28164 assignee)",
"api_writes": "2 — relay pr_create (#28312, run 41167664520) and this os-dev-report comment via post-stamped",
"open_questions": [],
"out_of_scope_findings": [
"noted, not filed · carrier: none · the Debug run mocks create_record/update_record fields.* and http body without judging their value slots; only connector_action was in scope (PR #28312 Acceptance notes)"
]
}
Activity
objectstack-fleet commentedon Oct 30, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 审批与自动化 | none | P②
Triage: p2 ·
domain:ui·area:studio·pm:blockedon #28150 · 2026-10-30T15:01Z⛔ Not a claim.
connectorConfig.inputonly at publish, with no envelope editor and no in-form refusal. The verdict is right; the place it shows is wrong.ui/packages/app-shell(FlowNodeConfigField.tsx,flow-simulator.ts,flow-value-envelope.ts), so the card isdomain:ui. If honouring the ledger'sblockroot needs a spec export, that is a spec card. It is not a cross-domain exception.Blocked-by: #28150is now in the body.pm:blocked.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: unblocked · p2 ·
pm:queue· 2026-10-30T16:05Z⛔ Not a claim.
Blocked-by: #28150, and PR fix(spec,service-automation,lint)!: registration and validate judge a connector_action's connectorConfig.input value slot #28150 merged at 2026-10-30T15:18Z.pm:blockedis removed, and the card is back inpm:queueat its p2 grade.Generated by Claude Code
objectstack-fleet commentedon Oct 31, 2026
domain:ui#3 · os-tesla · session_01L9qibz8HEj53Wx2uphTo2o
Claim: PM loop round 4 · 2026-10-31T02:44Z
Session:
session_01L9qibz8HEj53Wx2uphTo2o(seat; implementation by card thread sessionsession_01L9qibxVHVAdKszs18owvD6,mode:thread)Account:
os-tesla(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/project-thread-ug538h(the card thread's designated push branch, the recorded platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-28164Domain:
domain:uiSeat:
domain:ui#3File surface:
views/metadata-admin/inspectors/flow-value-envelope.ts(+test),FlowNodeConfigField.tsx,flow-simulator.ts, the connector_action form component, i18n keys, tests,.changeset/28164-*.md(stop on breach; explain in the report)Container & model:
M,mode:thread,model: default(dispatch-gates --tierre-run on the actual diff),effort: highClause-②: no (expected; re-judged on the diff)
Metadata-protocol: none
Responsibility: the Studio readers' config-only judge is ours; the ledger's
connectorConfigblock (#28150) is correct and staysThread-read: none
Premise: per the card's measurement; the dev re-measures on current
mainbefore codeSerial constraints cleared: seat-3 siblings #28239 #28240 #28241 #28179 #28164 hold declared regions of shared files (FRAME.md); #28148 (paused) holds
views/setup/PackagedAutomationPage.tsx+packagedFlowLedger.tsMaintainer 2026-10-31 「ui 车道一堆任务啊,应该并发开满啊」. Order:
/mnt/project-files/ui-seat-3/r2026-10-31/dispatch-28164.mdunderFRAME.md.objectstack-fleet commentedon Oct 31, 2026
domain:ui#3 · os-tesla · session_01L9qibxVHVAdKszs18owvD6
os-dev-report
{ "issue": 28164, "status": "done", "branch": "claude/project-thread-ug538h", "pr": "https://github.com/objectstack-ai/objectstack/pull/28312", "session": "session_01L9qibxVHVAdKszs18owvD6", "premise_still_valid": true, "summary": "Studio readers now honour the ledger block: isValueEnvelopeSlot matches flowNodeExpressionBlock(entry) (true for connector_action connectorConfig.input, false for config.input); FlowNodeConfigField isScalarValueSlot/valueSlotRefusals accept a declared sibling block and hand the node to resolveFlowNodeValueSlots/flowNodeValueTemplateRefusals, so typed connector input fields get the text/CEL toggle and the in-form refusal; the repeater gets the toggle and per-row refusal. flow-simulator configRefusal takes the node and names the block; the Debug run judges connector_action before mocking. Six-map pin is now seven (connector_action:connectorConfig.input), confirmed against FlowValueSlotSchema.", "tests": "head ac2e380a: pnpm --dir ui exec vitest run inspectors/ + previews/ + 31 importer files -> Test Files 405/405, Tests 4763 passed 1 skipped (lock VERDICT command-exit 0); pnpm --filter @object-ui/app-shell type-check -> exit 0; eslint on 6 changed ui files -> exit 0. Full app-shell suite (~1987 files, 2 workers) stopped unfinished after ~50 min: declared narrowing, CI Test UI runs it. Ablation (fix committed; 3 sources restored from origin/main, src-aliased so no build): 3 test files -> Test Files 3 failed, Tests 8 failed | 11 passed; restored via git checkout HEAD, git diff HEAD empty. First ablation attempt was a no-op (ui/-prefixed paths refused by the vitest invocation guard), rerun with ui-relative paths.", "gates": "dispatch-gates --commands (tree ac2e380a): 35 families, all run with stdin from /dev/null, all exit 0 (check:query-options-erasure first cut at a 280s cap -> 124, rerun -> 0; check:type-check-debt first NOT MEASURED exit 3 from lock queue, rerun under lock -> 0; check-sdui-manifest + --self-test -> 0; ui vitest scripts/ -> 169 passed 2 skipped). dispatch-gates --ran: 35 derived, 35 run, 0 NOT-MEASURED, 0 UNRUN. pnpm check:new-line-citations -> 0 new, exit 0. CI check-runs: in_progress at report time.", "line_budget": "7 files, +380 / -34: sources +97/-27 (FlowNodeConfigField 57/10, flow-value-envelope 23/12, flow-simulator 17/5), tests +269/-7, changeset +14", "deviations": "none of scope; one declared narrowing (full app-shell suite left to CI). Files: exactly the dispatched surface plus two new test files and the changeset; no i18n keys added; StudioDesignSurface.tsx untouched.", "files_changed": [ ".changeset/28164-connector-input-value-slot.md", "ui/packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeConfigField.tsx", "ui/packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeInspector.connectorInputEnvelope-28164.test.tsx", "ui/packages/app-shell/src/views/metadata-admin/inspectors/flow-value-envelope.test.ts", "ui/packages/app-shell/src/views/metadata-admin/inspectors/flow-value-envelope.ts", "ui/packages/app-shell/src/views/metadata-admin/previews/simulator/__tests__/flow-simulator.connectorInput-28164.test.ts", "ui/packages/app-shell/src/views/metadata-admin/previews/simulator/flow-simulator.ts" ], "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "5 — reads only: issue_read get #28164, get_comments #28164 x2, get_labels #28164, get #28185; zero write tools (plus one unauthenticated public REST read of the #28164 assignee)", "api_writes": "2 — relay pr_create (#28312, run 41167664520) and this os-dev-report comment via post-stamped", "open_questions": [], "out_of_scope_findings": [ "noted, not filed · carrier: none · the Debug run mocks create_record/update_record fields.* and http body without judging their value slots; only connector_action was in scope (PR #28312 Acceptance notes)" ] }objectstack-fleet commentedon Oct 31, 2026
domain:ui#3 · os-tesla · session_01L9qibz8HEj53Wx2uphTo2o
Landed · 2026-10-31T05:12Z
3d9175d047(ACCEPT 6539013542)completedby the PR'sFixeslineState:
pm:dispatchedremoved (closed card).