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
spec(automation): TryCatchConfig.errorVariable's describe names the type TryCatchErrorValue, and the sentence reaches the generated reference page and the shipped JSON schema #24659
Filing gate ①, class (b): a user-facing description names a code type, against the convention ux-conventions.labels-over-machine-names (#24570, acceptance[3]: "user-facing banners and help text carry no raw spec path, class name or tracker id"). Found by #24576's dev (report 6277634321, out-of-scope finding 1). #24576's PR #24655 fixes the Studio inspector's copy, which comes from the node descriptor. This is the spec's copy of the same sentence. Filed by domain:services seat 2 (seat post #21118) · os-warren · session_01LR1cD9JqgkeqY7k9rrZH8s. ⛔ Not a claim. Grade and lane are triage's; the producer is packages/spec (domain:spec).
reach: two author-facing surfaces, measured on origin/main7c7741dcb and the built tree:
the generated reference page content/docs/references/automation/control-flow.mdx, the errorVariable row of the TryCatchConfig table (~:247), built from the describes by packages/spec/scripts/build-docs.ts. The page's own "## TryCatchErrorValue" section names the type as its reference entry, by design. The row is the help text;
json-schema/automation/TryCatchConfig.json, errorVariable.description: the same sentence, shipped in the @objectstack/spec tarball (package.jsonfiles lists json-schema). os generate's retirement message names that directory as the schema to point an editor at.
The producer:packages/spec/src/automation/control-flow.zod.ts:342, TryCatchConfig.errorVariable's describe: "… The value is a TryCatchErrorValue: nodeId, message, code …, and iteration / item …". The fix is in that describe, followed by gen:schema and gen:docs.
Whether the docs reference page and an editor hover fall inside the convention is for the owning lane: the item's variants list names Studio surfaces only. No editor hover was driven.
Dedupe
objectstack, MCP search_issues "TryCatchErrorValue errorVariable describe spec help text type name control-flow.mdx json-schema TryCatchConfig": 5 hits, closed included. #24576 (the descriptor's copy, open, fixed by PR #24655); #14954 and #15669 (closed: the code key in the schema, not its wording); #22502 and #22343 (closed: the variable-name rule and retry's strictness). None covers the spec describe naming the type.
Triage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch. Fresh read on origin/main191e0430ef.
The card enters on its "related reading", not on the type name.
Why not on the type name. Class (b) needs a contract that a user or a published package can read (triage-duties.md:46). ux-conventions.labels-over-machine-names is a QA checklist item, so naming TryCatchErrorValue in a describe is not a (b) on its own.
What the card is. The nodeId describe disagrees with what the engine binds. That is a describe drifted from an implementation nobody ruled wrong, which pm:queue takes as a docs fix (triage-duties.md:38).
packages/spec/src/automation/control-flow.zod.ts:386: nodeId: z.string().describe('Node the failure is attributed to').
packages/services/service-automation/src/builtin/try-catch-node.ts:270 binds nodeId: node.id, the Try / Catch node's own id. The failing inner step appears only inside message.
An author who branches on {$error.nodeId} to find the failed step reads the wrong node.
Shape. One packages/spec PR, then gen:schema and gen:docs:
Claim: PM loop round 11
Session: session_01D6F9axfoPzR7t8G1J7Ytzz
Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-24659-trycatch-describes
Worktree: objectstack-issue-24659
Domain: domain:spec
Seat: domain:spec#3 (seat post #18883)
File surface (at origin/main3a931fca18 or later; stop on a breach and explain it in the report): packages/spec/src/automation/control-flow.zod.ts (the try_catcherrorVariable and the error value's nodeId describes), the generated schema and reference docs regenerated by gen:schema / gen:docs, any test that pins those sentences, .changeset/24659-*.md.
Container & model: S, mode:subagent, model: default (no path-derived mandate)
Clause-②: no
Responsibility: n/a — a describe that drifted from the engine
Thread-read: 6279232931
Serial constraints cleared: read at this act; the dev re-checks open PRs touching the same files before opening its own.
Read on origin/main3a931fca18 at 2026-10-19T23:05Z: control-flow.zod.ts:386 describes nodeId as 'Node the failure is attributed to'; service-automation/src/builtin/try-catch-node.ts:270 binds nodeId: node.id, the Try / Catch node's own id.
os-dev-report
{
"issue": 24659,
"status": "done",
"branch": "claude/issue-24659-trycatch-describes",
"pr": "#24694",
"session": "session_01D6F9axfoPzR7t8G1J7Ytzz",
"premise_still_valid": true,
"summary": "Premise re-read on origin/main 3a931fc: control-flow.zod.ts described TryCatchErrorValue.nodeId as 'Node the failure is attributed to' while try-catch-node.ts binds nodeId: node.id (the Try / Catch node's own id). Rewrote the nodeId describe to say it is the id of this Try / Catch node, not the failing inner step (normally named inside message), and rewrote the errorVariable describe to say in words what the value carries, aligned with PR #24655's landed descriptor text, keeping the ADR-0112 code-branching hint. Regenerated with gen:schema and gen:docs (control-flow.mdx two rows; gitignored json-schema TryCatchConfig.json / TryCatchErrorValue.json carry the new text after build). No behaviour change; no test pinned either sentence; patch changeset added. Draft PR #24694 opened via the fleet-write relay with assignee baozhoutao; no labels written (none named by the dispatch, skip-changeset not applicable since the spec publishes).",
"tests": "All at head 9112cb7. pnpm --filter @objectstack/spec build && gen:schema && gen:docs: VERDICT command-exit 0, 'Generated 227 files'. check:generated: 'All 14 generated artifacts are up to date', exit 0. spec typecheck: exit 0. vitest run --maxWorkers=2 src/automation (spec): 37 files / 1576 tests passed (full spec pnpm test not run locally; declared to CI). dispatch-gates --commands (stderr names objectstack-ai/objectstack at 9112cb7; it flagged origin/main 3 commits ahead touching scripts/check-console-injection.mjs and scripts/console-spec-probes.mjs, not in this diff): 104 commands, 98 exit 0 first pass, 6 exit 3 PREREQUISITE NOT MET; after building formula/lint/client/client-react, 5 of those re-ran exit 0. NOT MEASURED: check:dual-build-cjs-loads, reason: needs every package dist/, full workspace build not run locally; declared to CI. --ran reconciliation: 104 derived, 104 run, 0 UNRUN. check:nul-bytes in the battery: exit 0. No ablation (describe-only change).",
"mcp_calls": "0",
"api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/pulls + POST /issues/24694/assignees, one relay action, run 39344733305); relay comment on issue 24659 (this report). Plus git push (not REST).",
"open_questions": [],
"out_of_scope_findings": [],
"deviations": "The branch was first pushed together with the first commit, not as an empty branch before any edit (push succeeded, no 403). Open-PR overlap check on control-flow.zod.ts: all 15 open PRs' file lists read, zero hits."
}
TryCatchErrorValue.nodeId now says it is the id of this Try / Catch node, not of the failing inner step, matching try-catch-node.ts:270 (nodeId: node.id).
errorVariable says in words what the value carries, instead of naming the type.
The generated reference page followed through gen:docs. No behaviour change.
Claim 6279303089 ends here; pm:dispatched is removed in this stroke.
Activity
objectstack-fleet commentedon Oct 19, 2026
Triage: p3 ·
bug· lanedomain:spec·area:workflow·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-19T23:00ZTriage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch. Fresh read on
origin/main191e0430ef.The card enters on its "related reading", not on the type name.
triage-duties.md:46).ux-conventions.labels-over-machine-namesis a QA checklist item, so namingTryCatchErrorValuein a describe is not a (b) on its own.nodeIddescribe disagrees with what the engine binds. That is a describe drifted from an implementation nobody ruled wrong, whichpm:queuetakes as a docs fix (triage-duties.md:38).packages/spec/src/automation/control-flow.zod.ts:386:nodeId: z.string().describe('Node the failure is attributed to').packages/services/service-automation/src/builtin/try-catch-node.ts:270bindsnodeId: node.id, the Try / Catch node's own id. The failing inner step appears only insidemessage.{$error.nodeId}to find the failed step reads the wrong node.Shape. One
packages/specPR, thengen:schemaandgen:docs:nodeId's describe says it is the Try / Catch node's id, matching PR fix(service-automation): try_catch Error Variable help describes the caught error in words #24655's descriptor text;errorVariable's describe says what the value carries in words, and the type name rides along in the same edit.⛔ No behaviour change.
Why p3. A wrong help sentence on one key, read only by authors of error branches.
findingcomes off with this grade.Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
Claim: PM loop round 11
Session:
session_01D6F9axfoPzR7t8G1J7YtzzAccount:
baozhoutao(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-24659-trycatch-describesWorktree:
objectstack-issue-24659Domain:
domain:specSeat:
domain:spec#3(seat post #18883)File surface (at
origin/main3a931fca18or later; stop on a breach and explain it in the report):packages/spec/src/automation/control-flow.zod.ts(thetry_catcherrorVariableand the error value'snodeIddescribes), the generated schema and reference docs regenerated bygen:schema/gen:docs, any test that pins those sentences,.changeset/24659-*.md.Container & model:
S,mode:subagent,model: default (no path-derived mandate)Clause-②: no
Responsibility:
n/a — a describe that drifted from the engineThread-read: 6279232931
Serial constraints cleared: read at this act; the dev re-checks open PRs touching the same files before opening its own.
Read on
origin/main3a931fca18at 2026-10-19T23:05Z:control-flow.zod.ts:386describesnodeIdas 'Node the failure is attributed to';service-automation/src/builtin/try-catch-node.ts:270bindsnodeId: node.id, the Try / Catch node's own id.Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
os-dev-report
{
"issue": 24659,
"status": "done",
"branch": "claude/issue-24659-trycatch-describes",
"pr": "#24694",
"session": "session_01D6F9axfoPzR7t8G1J7Ytzz",
"premise_still_valid": true,
"summary": "Premise re-read on origin/main 3a931fc: control-flow.zod.ts described TryCatchErrorValue.nodeId as 'Node the failure is attributed to' while try-catch-node.ts binds nodeId: node.id (the Try / Catch node's own id). Rewrote the nodeId describe to say it is the id of this Try / Catch node, not the failing inner step (normally named inside message), and rewrote the errorVariable describe to say in words what the value carries, aligned with PR #24655's landed descriptor text, keeping the ADR-0112 code-branching hint. Regenerated with gen:schema and gen:docs (control-flow.mdx two rows; gitignored json-schema TryCatchConfig.json / TryCatchErrorValue.json carry the new text after build). No behaviour change; no test pinned either sentence; patch changeset added. Draft PR #24694 opened via the fleet-write relay with assignee baozhoutao; no labels written (none named by the dispatch, skip-changeset not applicable since the spec publishes).",
"tests": "All at head 9112cb7. pnpm --filter @objectstack/spec build && gen:schema && gen:docs: VERDICT command-exit 0, 'Generated 227 files'. check:generated: 'All 14 generated artifacts are up to date', exit 0. spec typecheck: exit 0. vitest run --maxWorkers=2 src/automation (spec): 37 files / 1576 tests passed (full spec pnpm test not run locally; declared to CI). dispatch-gates --commands (stderr names objectstack-ai/objectstack at 9112cb7; it flagged origin/main 3 commits ahead touching scripts/check-console-injection.mjs and scripts/console-spec-probes.mjs, not in this diff): 104 commands, 98 exit 0 first pass, 6 exit 3 PREREQUISITE NOT MET; after building formula/lint/client/client-react, 5 of those re-ran exit 0. NOT MEASURED: check:dual-build-cjs-loads, reason: needs every package dist/, full workspace build not run locally; declared to CI. --ran reconciliation: 104 derived, 104 run, 0 UNRUN. check:nul-bytes in the battery: exit 0. No ablation (describe-only change).",
"mcp_calls": "0",
"api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/pulls + POST /issues/24694/assignees, one relay action, run 39344733305); relay comment on issue 24659 (this report). Plus git push (not REST).",
"open_questions": [],
"out_of_scope_findings": [],
"deviations": "The branch was first pushed together with the first commit, not as an empty branch before any edit (push succeeded, no 403). Open-PR overlap check on control-flow.zod.ts: all 15 open PRs' file lists read, zero hits."
}
Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
Landed ·
domain:specseat 3 ·baozhoutao· sessionsession_01D6F9axfoPzR7t8G1J7Ytzz· 2026-10-20T01:05Z1c1144fcd8through the merge queue. Verified onorigin/main: single parent, and thegit diff C^ Cpatch-id equals the reviewed head9112cb75db's against its merge base (49ea338807).TryCatchErrorValue.nodeIdnow says it is the id of this Try / Catch node, not of the failing inner step, matchingtry-catch-node.ts:270(nodeId: node.id).errorVariablesays in words what the value carries, instead of naming the type.gen:docs. No behaviour change.Claim
6279303089ends here;pm:dispatchedis removed in this stroke.Generated by Claude Code