Repository navigation
fix(automation): describe the HTTP and approval flow nodes in business words - #28528
Conversation
…s words The node description and config help are the Studio flow palette and node-card text an admin reads. Rewrite the HTTP node's description and its method / durable / timeoutMs / signingSecret / body help, and the approval node's description, in business words; the outbox, HMAC, literal and CEL detail moves to code comments beside each entry. Copy only: no key, type, default or behaviour change. Claude-Session: https://claude.ai/code/session_01FEkQ5oZiDbKQCsyey7KM7z Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check2 anchor(s) derived from 2 changed package(s); no hand-written page names any of them, so this run has nothing to list — not a clean bill of health. This check sees only pages that NAME a derived anchor: one that documents this change in prose, or enumerates it in an authoring dialect, names none and stays invisible to it on every run. What this run could not see
Coarse fallback — 11 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin beb8f171f472b2f05c51a04b6190ed803013594e && git checkout beb8f171f472b2f05c51a04b6190ed803013594e
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 35b178bd0a9090aaccf9c767b0c6abf1067eff01 d13beb7a2a646b226636e04d39ec1cf58822950a && git checkout -B drift-repro 35b178bd0a9090aaccf9c767b0c6abf1067eff01 && git merge --no-ff d13beb7a2a646b226636e04d39ec1cf58822950a
node scripts/docs-audit/affected-docs.mjs --json 35b178bd0a9090aaccf9c767b0c6abf1067eff01 |
|
domain:server#1 · os-project-manager · session_01R1q2xdtYgU6FKrZ7LgjPCC 席位核对 · ACCEPT ·
|
| item | reading |
|---|---|
| Shape | Draft, base main, Fixes #28234. 4 files: http-nodes.ts and approval-node.ts (descriptor text), one test docblock comment in http-node-signing.test.ts, and one changeset with patch on @objectstack/service-automation and @objectstack/plugin-approvals. Clause-②: no, Metadata-protocol: none. |
| Diff check (seat) | Only description strings change: the HTTP node description and its method, durable, timeoutMs, signingSecret and body help, and the approval node description. Each follows the card's proposed wording and #28233's rule: business words, with no ADR ids, internal names or enum literals. The engineer detail (outbox, retry / dead-letter, HMAC-SHA256, the CEL envelope) moved into code comments beside each entry, not lost. No key, type, default or configSchema shape changes. I checked the changeset prose against the diff sentence by sentence, and it matches. |
| Evidence | CI green on head d13beb7a (35 success, 13 skipped, 0 failed), including check:dual-build-cjs-loads. Governed check: NOT governed, 72 changed lines. The report gives automation 3,162/3,162 and approvals 1,366/1,366, typecheck and scoped eslint green, and 60 of 61 derived gates green, with check:dual-build-cjs-loads NOT MEASURED locally; CI's run on this head decides it. No open PR touches the two files, and the merge-tree against #28357 is clean. |
| Landing | 「按照 pm-dispatch 规则复核过的都授权」 (Leehom, 2026-10-25T11:35Z): ready and auto-merge through the relay, once every check on this head is green or an expected skip. |
Generated by Claude Code
Requested by Leehom · project thread
Fixes #28234
Clause-②: no
Metadata-protocol: none
维护者速读
method/durable/timeoutMs/signingSecret/body五条配置提示,审批节点的描述。原来的工程细节(outbox、重试/死信、HMAC、CEL 值信封、「字面量照写」)挪进各条旁边的代码注释,没有丢。packages/spec/**与ui/**没碰。仓里没有断言旧文字的测试,也没有这些字符串的手写翻译。回滚即 revert。packages/services/service-automation/src/builtin/http-nodes.ts(描述与五条提示及其注释);packages/plugins/plugin-approvals/src/approval-node.ts(审批描述)。git show HEAD -- packages/services/service-automation/src/builtin/http-nodes.ts,预期只见description字符串与注释的改动,configSchema的键与type一个没变。What changes
The node description and config help on a flow node descriptor are the text the Studio flow palette and node cards show an admin. Two descriptors, copy only:
HTTP node (
packages/services/service-automation/src/builtin/http-nodes.ts)durable: true, the call is enqueued on the messaging outbox with retry / dead-letter; otherwise it runs inline and returns the response.methoddurabletimeoutMssigningSecretbody{ dialect: 'cel', source }evaluated per run to the payload, or a literal sent as writtenThe engineer detail each old string carried now sits in a code comment directly above its entry: the outbox arm and its retry / dead-letter, the literal-read rule for
method/timeoutMs/signingSecret, the CEL value envelope shape forbody, the HMAC-SHA256 scheme and the''unsigned opt-out forsigningSecret.urlandheadersare not in this card's ruling and are untouched.Approval node (
packages/plugins/plugin-approvals/src/approval-node.ts)Wording starts from the card's proposal. One change:
bodyadds "as JSON", since the payload is JSON-serialised and an admin choosing a fixed value needs to know that.Also:
packages/services/service-automation/src/builtin/http-node-signing.test.tshas a docblock that quoted the descriptor's oldsigningSecrettext as a fact. It now says the spec'sHttpConfigSchema.signingSecretreads that text and the descriptor says it signs each request. Comment only; no assertion changed.Changeset:
.changeset/28234-flow-node-help-business-words.md,patchon@objectstack/service-automationand@objectstack/plugin-approvals(both shipdist, which carries these strings), with both declaration lines.Tests
No red-first defect: this is copy. Pins searched on
origin/main23d1303d1fwithgit grep -Ffor each old string across the repo (dogfood, docs and snapshots included):content/docs/references/automation/io-node-config.mdxrows that look alike are generated from the spec'sHttpConfigSchemadescribes, which this card does not touch.ui/packages/app-shell/.../useFlowNodePalette.test.tscarries its own fixture text "Route a record for human approval", not read from the engine;ui/**is out of scope and the fixture stays green.http-node-signing.test.tsdocblock above.Results at
d13beb7a:pnpm --filter '@objectstack/service-automation...' --filter '@objectstack/plugin-approvals...' buildunder the verify lock →VERDICT command-exit 0.pnpm --filter @objectstack/service-automation --filter @objectstack/plugin-approvals test→ service-automationTest Files 249 passed (249),Tests 3162 passed (3162); plugin-approvalsTest Files 106 passed (106),Tests 1366 passed (1366);VERDICT command-exit 0.typecheck→VERDICT command-exit 0.pnpm exec eslint --no-inline-config packages/services/service-automation packages/plugins/plugin-approvals→ exit 0.Acceptance notes
pulls/N/files; the Version Packages PR read to its last page): none toucheshttp-nodes.ts,approval-node.tsorhttp-node-signing.test.ts. The one open PR in the same package, fix(connector-mcp): an include a credentialed MCP server does not list degrades the instance as a credential refusal, not the boot #28357 (heada91c84adc9,sys-connector-credential.object.ts), merges cleanly with this head:git merge-tree --write-treeexit 0.ui/packages/app-shell/src/views/metadata-admin/previews/flow-canvas-parts.tsxstill says "Call an external API" for the HTTP node; the engine descriptor overlays it when present. Carrier: the ui half of Flow node help in business words: approval config describe text and node palette descriptions are written for engineers (#27356 row 15, #27521 row 39) #27838.Verification
Derived gate list (
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, 61 commands on this diff), run atd13beb7a, exit codes captured before any pipe, reconciled with--ran:✓ dispatch-gates --ran: 61 derived famil(ies) accounted for — 60 run, 1 NOT-MEASURED.Gate readings
node scripts/check-plugin-teardown-shape.mjs --self-testfirst exited 3 on the shallow clone; aftergit fetch --depth=1 origin 621a4876…it exits 0 (48 cases pass).pnpm check:i18nfirst exited 3 (CLI not built); after the gate's own prerequisite build it exits 0:check-i18n-bundles: OK (10 package(s) — all bundles in sync, no undeclared authoring keys).pnpm check:dual-build-cjs-loads, reason: needs a full workspace build (34 packages withoutdist); CI's Lint & Repo Gates runs it.No
!in the title and no(narrowing)arm, so no full dogfood battery.Human Minimum
packages/specholds no runtime logic. (not touched)pnpm lintpasses. (scoped to the two packages)main, one pull request.packages/spectouched: its generated artifacts are regenerated and committed. (not touched)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.Generated by Claude Code