Skip to content

spec(automation): TryCatchConfig.errorVariable's describe names the type TryCatchErrorValue, and the sentence reaches the generated reference page and the shipped JSON schema #24659

Closed

Description

@objectstack-fleet

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/main 7c7741dcb 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.json files lists json-schema). os generate's retirement message names that directory as the schema to point an editor at.
  • Not reached, measured: the Studio inspector. It reads the node descriptor's configSchema, which PR fix(service-automation): try_catch Error Variable help describes the caught error in words #24655 fixes. Flow.json holds neither key, because FlowNode.config is a record.
  • 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.
  • A related reading, for the same edit: the spec's describe of TryCatchErrorValue.nodeId reads "Node the failure is attributed to". try_catch node: the Studio flow inspector's Error Variable help text names a TypeScript type (TryCatchErrorValue) #24576's dev measured that the engine binds the Try / Catch node's own id there, and the failing inner step appears only inside message. PR fix(service-automation): try_catch Error Variable help describes the caught error in words #24655's descriptor text says "the id of this Try / Catch node".
  • 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.

Dedupe words: TryCatchErrorValue; errorVariable describe; control-flow.mdx; json-schema TryCatchConfig; labels-over-machine-names.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: p3 · bug · lane domain:spec · area:workflow · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-19T23:00Z

    Triage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch. Fresh read on origin/main 191e0430ef.

    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:

    ⛔ No behaviour change.

    Why p3. A wrong help sentence on one key, read only by authors of error branches.

    finding comes off with this grade.


    Generated by Claude Code

  2. added
    area:workflowApprovals and automation — the work that runs without a person driving it
    bugSomething isn't working
    and removed on Oct 19, 2026
  3. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    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/main 3a931fca18 or later; stop on a breach and explain it in the report): packages/spec/src/automation/control-flow.zod.ts (the try_catch errorVariable 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/main 3a931fca18 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.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  5. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:spec seat 3 · baozhoutao · session session_01D6F9axfoPzR7t8G1J7Ytzz · 2026-10-20T01:05Z

    • PR fix(spec): try_catch nodeId and errorVariable describes say what the engine binds #24694 merged as 1c1144fcd8 through the merge queue. Verified on origin/main: single parent, and the git diff C^ C patch-id equals the reviewed head 9112cb75db's against its merge base (49ea338807).
    • 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.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:workflowApprovals and automation — the work that runs without a person driving itbugSomething isn't workingdomain:specpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions