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
migrate meta --stored does not list a stored connector_action whose connectorConfig.input carries a template token, though boot refuses it #28163
Filing gate: ② should-fix ④.2 of the contract review of PR #28150 (#27968), record 6525595405. Filed by domain:spec seat 1. ⛔ Not a claim. Triage sets the grade.
Reach: an operator upgrading a deployment whose stored flows include a connector_action with a {…} token in connectorConfig.input. os migrate meta --stored is the tool that lists stored rows the new release refuses, and it will not name that row. registerFlow refuses it at boot. The ADR-0087 D3 entry names the boot warning as the locator, so the operator does have a path, but the listing tool's promise is broken.
packages/spec/src/conversions/refused-shapes.ts:406: the detector flow-value-slot-template-dialect-refused calls flowNodeValueTemplateRefusals(node.type, node.config). It walks config only and never hands the node, so the new connectorConfig · input.* ledger entry is never read.
Hand the node to the judge, reading the same ledger, with the connectorConfig path prefix.
Add a test: a stored connector_action row with input: { text: '{record.name}' } is listed at connectorConfig.input.text, plus a control in which a CEL envelope is not listed.
Read fresh. The refused-shapes.ts:406 detector walks config only, so os migrate meta --stored does not list a row that boot refuses. That breaks the header's own invariant.
The file is packages/spec/src/conversions, so the card belongs to the spec lane. Acceptance is the card's: the listed row plus a CEL-envelope control.
Claim: PM loop round 4 · 2026-10-30T17:09Z
Session: session_01L9qibwb6hBqszPTYJobitm
Account: os-tesla
Branch: claude/project-thread-vgdwpp (card thread; the platform assigns the thread's branch and it can push only that one, written as measured instead of claude/issue-28163-<slug>)
Worktree: objectstack-issue-28163
Domain: domain:spec
Seat: domain:spec#1
Card thread: session session_01L9qibz8wBXN5R4YRtm5e5r; the dispatch order is in the seat's project, frame + card file.
File surface: packages/spec/src/conversions/refused-shapes.ts (the flow-value-slot-template-dialect-refused detector hands the node to the judge, same ledger), tests, changeset (stop on breach; explain in the report)
Container & model: S, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate; spec source, so a contract review is owed), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: packages/spec lists stored rows the door refuses, and the detector misses the connectorConfig.input slot | hand the node, read the same ledger | operators upgrading with os migrate meta --stored
Thread-read: 6527344285
Premise: holds — refused-shapes.ts:406 on main calls flowNodeValueTemplateRefusals(node.type, node.config) with no node
Serial constraints cleared: #28150 merged 15:18Z (triage 6527344285); no open PR touches refused-shapes.ts
{
"issue": 28163,
"status": "done",
"branch": "claude/project-thread-vgdwpp",
"pr": "https://github.com/objectstack-ai/objectstack/pull/28249",
"session": "session_01L9qibz8wBXN5R4YRtm5e5r",
"premise_still_valid": true,
"summary": "The stored-shape listing now hands flowNodeValueTemplateRefusals the whole node through one shared walk (forEachFlowValueSlotRefusal), as registerFlow and objectstack validate do, so a connector_action's connectorConfig.input token is listed at NODE_PATH.connectorConfig.input.KEY. Refusals split by block: config stays under flow-value-slot-template-dialect-refused; connectorConfig is listed by a new detector under connector-action-input-value-slot-judged, the D3 entry #28150 registered for that slot (deviation from the suggested single detector: the old entry's surface and reason do not hold for this slot). Changeset @objectstack/spec patch.",
"tests": "refused-shapes.test.ts new #28163 block (stored row listed at connectorConfig.input.text, nested/region, lifted loose config.input, CEL/literal/absent controls, door agreement as a set, sibling-block pin) + id pin: 80/80 on 2c3f9f50; on dbc77fa9 refused-shapes + flow-value-slot-template 253/253. spec test 24007 passed 1 todo (VERDICT command-exit 0, 2c3f9f50); spec typecheck exit 0. Ablation via ablation-replace.mjs removing the node argument: anchor 1->0, 4 failed | 76 passed, restored blob 88279418 == HEAD, git diff HEAD empty (source import, no dist).",
"gates": "dispatch-gates --commands derived 77 on dbc77fa9 (same 77 as 2c3f9f50); 77 run with stdin from /dev/null, 77 exit 0 (pre-merge 73 exit 0 + 4 exit 3 prerequisite, cleared by full turbo build 116/116 and fetching the pinned fixture commit); --ran: 77 run, 0 NOT-MEASURED, 0 UNRUN. check:generated 14/14 up to date; check-dev-prereqs exit 0; check-nul-bytes exit 0. List: spec-seat-1/r2026-10-30/out/28163-gates-ran-dbc77fa9.list. CI check-runs: in_progress at report time.",
"line_budget": "174 insertions / 21 deletions, 3 files (under 3000)",
"files_changed": [
".changeset/28163-stored-connector-input-listed.md",
"packages/spec/src/conversions/refused-shapes.test.ts",
"packages/spec/src/conversions/refused-shapes.ts"
],
"deviations": [
"suggested route: second detector (id connector-action-input-value-slot-judged) sharing one walk and the one judge, instead of the existing detector listing connectorConfig rows under flow-value-slot-template-dialect-refused",
"worktree created from the shared checkout by detaching it (card-thread branch already checked out there)",
"merge commit dbc77fa9 of origin/main 3739d8d6 before pr_create (AGENTS §10)"
],
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "3 — mcp__github__issue_read x3 (get, get_comments x2); 0 writes",
"api_writes": "2 — fleet-write relay pr_create (objectstack#28249) + this os-dev-report comment via post-stamped",
"open_questions": [],
"out_of_scope_findings": [
"carrier: domain:spec#1 seat · noted, not filed — no refused-shape detector lists a malformed CEL envelope in any value slot (config or connectorConfig), though registerFlow refuses it",
"carrier: domain:spec#1 seat · noted, not filed — D3 entry connector-action-input-value-slot-judged acceptance text names only the boot warn as locator; it could also name os migrate meta --stored (outside file surface)"
]
}
Activity
objectstack-fleet commentedon Oct 30, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 错的必须被响亮拒绝并给处方 | none | P②
Triage: p2 ·
domain:spec·area:automation·pm:blockedon #28150 · 2026-10-30T15:01Z⛔ Not a claim.
refused-shapes.ts:406detector walksconfigonly, soos migrate meta --storeddoes not list a row that boot refuses. That breaks the header's own invariant.packages/spec/src/conversions, so the card belongs to the spec lane. Acceptance is the card's: the listed row plus a CEL-envelope control.Blocked-by: #28150is now in the body.pm:blocked. If the fix(spec,service-automation,lint)!: registration and validate judge a connector_action's connectorConfig.input value slot #28150 thread takes it into that PR before merge, close this card as done there.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:04Z⛔ 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 30, 2026
domain:spec#1 · os-tesla · session_01L9qibwb6hBqszPTYJobitm
Claim: PM loop round 4 · 2026-10-30T17:09Z
Session:
session_01L9qibwb6hBqszPTYJobitmAccount:
os-teslaBranch:
claude/project-thread-vgdwpp(card thread; the platform assigns the thread's branch and it can push only that one, written as measured instead ofclaude/issue-28163-<slug>)Worktree:
objectstack-issue-28163Domain:
domain:specSeat:
domain:spec#1Card thread: session
session_01L9qibz8wBXN5R4YRtm5e5r; the dispatch order is in the seat's project, frame + card file.File surface:
packages/spec/src/conversions/refused-shapes.ts(theflow-value-slot-template-dialect-refuseddetector hands the node to the judge, same ledger), tests, changeset (stop on breach; explain in the report)Container & model:
S,mode:thread,model: TIER_DEFAULT(dispatch-gates --tier: no path-derived mandate; spec source, so a contract review is owed),effort: highClause-②: no
Metadata-protocol: none
Responsibility:
packages/speclists stored rows the door refuses, and the detector misses theconnectorConfig.inputslot | hand the node, read the same ledger | operators upgrading withos migrate meta --storedThread-read: 6527344285
Premise: holds —
refused-shapes.ts:406onmaincallsflowNodeValueTemplateRefusals(node.type, node.config)with no nodeSerial constraints cleared: #28150 merged 15:18Z (triage 6527344285); no open PR touches
refused-shapes.tsobjectstack-fleet commentedon Oct 30, 2026
domain:spec#1 · os-tesla · session_01L9qibz8wBXN5R4YRtm5e5r
os-dev-report
{ "issue": 28163, "status": "done", "branch": "claude/project-thread-vgdwpp", "pr": "https://github.com/objectstack-ai/objectstack/pull/28249", "session": "session_01L9qibz8wBXN5R4YRtm5e5r", "premise_still_valid": true, "summary": "The stored-shape listing now hands flowNodeValueTemplateRefusals the whole node through one shared walk (forEachFlowValueSlotRefusal), as registerFlow and objectstack validate do, so a connector_action's connectorConfig.input token is listed at NODE_PATH.connectorConfig.input.KEY. Refusals split by block: config stays under flow-value-slot-template-dialect-refused; connectorConfig is listed by a new detector under connector-action-input-value-slot-judged, the D3 entry #28150 registered for that slot (deviation from the suggested single detector: the old entry's surface and reason do not hold for this slot). Changeset @objectstack/spec patch.", "tests": "refused-shapes.test.ts new #28163 block (stored row listed at connectorConfig.input.text, nested/region, lifted loose config.input, CEL/literal/absent controls, door agreement as a set, sibling-block pin) + id pin: 80/80 on 2c3f9f50; on dbc77fa9 refused-shapes + flow-value-slot-template 253/253. spec test 24007 passed 1 todo (VERDICT command-exit 0, 2c3f9f50); spec typecheck exit 0. Ablation via ablation-replace.mjs removing the node argument: anchor 1->0, 4 failed | 76 passed, restored blob 88279418 == HEAD, git diff HEAD empty (source import, no dist).", "gates": "dispatch-gates --commands derived 77 on dbc77fa9 (same 77 as 2c3f9f50); 77 run with stdin from /dev/null, 77 exit 0 (pre-merge 73 exit 0 + 4 exit 3 prerequisite, cleared by full turbo build 116/116 and fetching the pinned fixture commit); --ran: 77 run, 0 NOT-MEASURED, 0 UNRUN. check:generated 14/14 up to date; check-dev-prereqs exit 0; check-nul-bytes exit 0. List: spec-seat-1/r2026-10-30/out/28163-gates-ran-dbc77fa9.list. CI check-runs: in_progress at report time.", "line_budget": "174 insertions / 21 deletions, 3 files (under 3000)", "files_changed": [ ".changeset/28163-stored-connector-input-listed.md", "packages/spec/src/conversions/refused-shapes.test.ts", "packages/spec/src/conversions/refused-shapes.ts" ], "deviations": [ "suggested route: second detector (id connector-action-input-value-slot-judged) sharing one walk and the one judge, instead of the existing detector listing connectorConfig rows under flow-value-slot-template-dialect-refused", "worktree created from the shared checkout by detaching it (card-thread branch already checked out there)", "merge commit dbc77fa9 of origin/main 3739d8d6 before pr_create (AGENTS §10)" ], "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "3 — mcp__github__issue_read x3 (get, get_comments x2); 0 writes", "api_writes": "2 — fleet-write relay pr_create (objectstack#28249) + this os-dev-report comment via post-stamped", "open_questions": [], "out_of_scope_findings": [ "carrier: domain:spec#1 seat · noted, not filed — no refused-shape detector lists a malformed CEL envelope in any value slot (config or connectorConfig), though registerFlow refuses it", "carrier: domain:spec#1 seat · noted, not filed — D3 entry connector-action-input-value-slot-judged acceptance text names only the boot warn as locator; it could also name os migrate meta --stored (outside file surface)" ] }objectstack-fleet commentedon Oct 30, 2026
domain:spec#1 · os-tesla · session_01L9qibwb6hBqszPTYJobitm
ACCEPT → PR #28249 comment 6532029984 · contract review PASS (lane) ·
pr_ready+automerge_enablerelayed 2026-10-30T19:46Z.pm:dispatchedcomes off on merge.