Repository navigation
Flow node palette help in business words: the HTTP and approval node descriptions #28234
Copy link
Copy link
Closed
Labels
area:automationdocumentationImprovements or additions to documentationImprovements or additions to documentationdomain:serverDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatpm:dispatchedpriority:p3
Description
domain:spec#2 · os-tesla · session_01L9qibx5r5nhDMwpRs4SL6D
Filing gate: ③ Part 2 of #27838 (the producer half of #27356 row 15 and #27521 row 39). The domain:spec half lands in PR #28233 (the approval.zod.ts describes); the node descriptors are outside domain:spec, so the #27838 card thread carried this to the seat in its os-dev-report 6530217232 (out_of_scope_findings). ⛔ Not a claim. Triage sets the lane and grade.
Reach: every admin building a flow in Studio reads these as the palette and node-card text (observed on the 18.3.0 RC walkthrough).
Observed (on main)
packages/services/service-automation/src/builtin/http-nodes.ts, the HTTP node descriptor: the description and its config help name the outbox, retry / dead-letter, "HMAC-SHA256 secret → X-Objectstack-Signature", "a literal, read as written", "a CEL value envelope".packages/plugins/plugin-approvals/src/approval-node.ts≈L138: "Route a record for human approval; suspends the flow until a decision, then continues down the approve / reject branch."
Wanted (proposed wording from the card thread; the taker may improve it)
- HTTP description → "Send a request to an outside web service: wait for its answer, or hand it off to be delivered in the background with automatic retries."
method→ "The kind of request, such as GET or POST. GET by default; POST when the request is delivered in the background."durable→ "Deliver the request in the background and keep retrying if it fails, instead of waiting for the answer; the flow does not see the response."timeoutMs→ "How long to wait for an answer, in milliseconds."signingSecret→ "A shared secret used to sign each request, so the receiving service can check it came from you (sent as the X-Objectstack-Signature header)."body→ "What to send: a fixed value, or an expression worked out on each run."- Approval node description → "Ask people to approve or reject a record. The flow waits for their decision, then continues down the approve or reject path."
- Same rule as PR fix(spec): approval node field help opens in business words #28233: business words in the first sentence, no ADR ids, internal field names or enum literals; engineer detail moves to code comments. Keep any hand translations in step.
Dedupe words: flow node palette description business words, http node descriptor help, approval node description.
Metadata
Metadata
Assignees
Labels
area:automationdocumentationImprovements or additions to documentationImprovements or additions to documentationdomain:serverDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatpm:dispatchedpriority:p3
Activity
objectstack-fleet commentedon Oct 30, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 审批与自动化 | none | P②
Triage: p3 ·
domain:server·area:automation· 2026-10-30T19:07Z⛔ Not a claim.
service-automation,plugin-approvals), the server 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 (p3). It is copy only: no behaviour and no key change.Generated by Claude Code
objectstack-fleet commentedon Nov 1, 2026
domain:server#1 · os-project-manager · session_01R1q2xdtYgU6FKrZ7LgjPCC
Claim: PM loop round 1 · card thread · 2026-11-01T04:13Z
Session:
session_01R1q2xdtYgU6FKrZ7LgjPCC(the seat); the card thread issession_01FEkQ5oZiDbKQCsyey7KM7zAccount:
os-project-manager(the seat's linked user; the card's assignee)Branch:
claude/project-thread-m21gyn(the card thread's harness-pinned branch; it names no issue, so this claim is the identity record)Worktree: the card thread's own container checkout
Domain:
domain:serverSeat:
domain:server#1Ruling-ref: the maintainer's 「server 车道现在就是你负责,任务有一大堆啊,都可以派,包括 p3」 (2026-11-01T03:46Z); triage graded it p3 and left it out of
pm:queueunder 「低优先级的先不考虑」, which that line now lifts. Triage6531330544; house rule from PR #28233.File surface:
packages/services/service-automation/src/builtin/http-nodes.ts(the HTTP node description and config help),packages/plugins/plugin-approvals/src/approval-node.ts(the approval node description), hand translations of those strings, pins that assert the old strings, and changesets. Copy only: ⛔ no behaviour, key or config-shape change, ⛔ nopackages/spec/**, ⛔ noui/**.Container & model:
S,mode:thread, model and effort as the thread was openedClause-②: no (expected; the dev measures and declares)
Metadata-protocol: none (expected)
Responsibility: the code is two flow node descriptors' help text · the platform path is the Studio flow palette and node cards · reached by every admin building a flow, who reads outbox, HMAC and CEL jargon
Thread-read: 6531330544
Premise: holds (read 2026-11-01T04:13Z at
origin/main23d1303d1f:http-nodes.ts:195reads "HMAC-SHA256 secret → X-Objectstack-Signature …";approval-node.ts:138reads "Route a record for human approval; suspends the flow …")Serial constraints cleared: server seat 2 has automation cards in flight (#28055, #28202); the dev lists open PRs touching these two files before
pr_createand runsgit merge-treeagainst eachResume-from: none — fresh from
origin/mainState:
pm:dispatched, assigned toos-project-manager, recorded by this claim.Generated by Claude Code
objectstack-fleet commentedon Nov 1, 2026
domain:server#1 · os-project-manager · session_01FEkQ5oZiDbKQCsyey7KM7z
os-dev-report
{
"issue": 28234,
"status": "done",
"branch": "claude/project-thread-m21gyn",
"pr": "#28528",
"session": "session_01FEkQ5oZiDbKQCsyey7KM7z",
"premise_still_valid": true,
"summary": "Rewrote the HTTP node descriptor's description and its method / durable / timeoutMs / signingSecret / body help (service-automation http-nodes.ts) and the approval node description (plugin-approvals approval-node.ts) in business words, starting from the card's wording (body adds 'as JSON'). The outbox, retry / dead-letter, HMAC-SHA256, literal-read and CEL envelope detail moved to code comments above each entry. Copy only: no key, type, default, accepted value or behaviour change; no packages/spec or ui touched. Patch changeset on both packages with Clause-2: no and Metadata-protocol: none (measured: no authorable key or value moves). PR head d13beb7.",
"tests": "Pins: git grep -F of every old string on origin/main 23d1303 found no test, dogfood or docs snapshot asserting the descriptor text (io-node-config.mdx rows are generated from the spec describes, untouched; the ui useFlowNodePalette.test.ts fixture carries its own text). Pins changed: none; the http-node-signing.test.ts docblock that quoted the old signingSecret text was updated (comment only). No hand translations exist. At d13beb7: closure build under the lock VERDICT command-exit 0; pnpm --filter service-automation --filter plugin-approvals test: service-automation Test Files 249/249, Tests 3162/3162; plugin-approvals Test Files 106/106, Tests 1366/1366; VERDICT command-exit 0. typecheck same filter VERDICT command-exit 0. pnpm exec eslint --no-inline-config on both packages exit 0. No ablation: copy, no tested behaviour changed.",
"gates": "dispatch-gates --commands derived 61 at d13beb7; each run with exit captured before any pipe; --ran: 61 accounted, 60 run, 1 NOT-MEASURED, 0 UNRUN, EXIT=0. check-plugin-teardown-shape --self-test exit 3 on the shallow clone, then 0 after git fetch --depth=1 of 621a487 (48 cases pass). check:i18n exit 3 (CLI not built), then 0 after its prerequisite turbo build (all bundles in sync, 10 packages). NOT MEASURED: check:dual-build-cjs-loads, reason: needs a full workspace build; CI Lint and Repo Gates runs it. PR check-runs: in_progress at report time (not waited on, per os-dev.md).",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "5 — reads only: issue_read get x1, issue_read get_comments x3, pull_request_read get_diff x1 (PR 28233). No MCP write.",
"api_writes": "2 relay writes — pr_create (objectstack#28528, via fleet-write run 41274752985, draft, no labels, no assignees) and this os-dev-report comment on #28234; plus 1 git push (not REST). Write budget spent: 3 of 3.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: the ui half of #27838 · noted, not filed: ui/packages/app-shell/src/views/metadata-admin/previews/flow-canvas-parts.tsx hard-codes the HTTP palette fallback hint 'Call an external API' (the engine descriptor overlays it when present); in the PR's Acceptance notes"
],
"serial_constraint": "Open PRs listed (17 plus Version Packages) and every file list read: none touches http-nodes.ts, approval-node.ts or http-node-signing.test.ts. The only open PR in the same package, #28357 head a91c84a, merge-tree --write-tree against d13beb7 exit 0 (clean). No PR for #28055 or #28202 touches these files."
}
objectstack-fleet commentedon Nov 1, 2026
domain:server#1 · os-project-manager · session_01R1q2xdtYgU6FKrZ7LgjPCC
Landed
PR #28528 merged at 2026-11-01T05:32Z by the merge queue as
890c2a6d29onmain(Fixes #28234; ACCEPT by seat 1 on the PR).git ls-remote origin 'refs/heads/gh-readonly-queue/main/pr-28528-*'PR head onorigin/maingit merge-base --is-ancestor d13beb7a2a origin/mainholds[Edit: not measured. The queue squash-merges, so the PR head is not an ancestor and this clone lacks it; the merge commit's ancestry and content rows stand.]git merge-base --is-ancestor 890c2a6d29 origin/mainState: card closed by
Fixes; the claim is done.Generated by Claude Code