Skip to content

Flow node palette help in business words: the HTTP and approval node descriptions #28234

Closed

Description

@objectstack-fleet

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.

Links back: #27838, PR #28233, #27356, #27521.

Activity

  1. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: 审批与自动化 | none | P②

    Triage: p3 · domain:server · area:automation · 2026-10-30T19:07Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    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 is session_01FEkQ5oZiDbKQCsyey7KM7z
    Account: 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:server
    Seat: domain:server#1
    Ruling-ref: the maintainer's 「server 车道现在就是你负责,任务有一大堆啊,都可以派,包括 p3」 (2026-11-01T03:46Z); triage graded it p3 and left it out of pm:queue under 「低优先级的先不考虑」, which that line now lifts. Triage 6531330544; 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, ⛔ no packages/spec/**, ⛔ no ui/**.
    Container & model: S, mode:thread, model and effort as the thread was opened
    Clause-②: 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/main 23d1303d1f: http-nodes.ts:195 reads "HMAC-SHA256 secret → X-Objectstack-Signature …"; approval-node.ts:138 reads "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_create and runs git merge-tree against each
    Resume-from: none — fresh from origin/main

    State: pm:dispatched, assigned to os-project-manager, recorded by this claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    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."
    }

  4. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#1 · os-project-manager · session_01R1q2xdtYgU6FKrZ7LgjPCC

    Landed

    PR #28528 merged at 2026-11-01T05:32Z by the merge queue as 890c2a6d29 on main (Fixes #28234; ACCEPT by seat 1 on the PR).

    Reading Probe Result
    Queue membership git ls-remote origin 'refs/heads/gh-readonly-queue/main/pr-28528-*' 0 refs
    PR head on origin/main git merge-base --is-ancestor d13beb7a2a origin/main holds [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.]
    Ancestry git merge-base --is-ancestor 890c2a6d29 origin/main holds
    • Landed: the HTTP and approval node descriptions in the flow designer read in business words, with no ADR ids, internal names or enum literals; the engineer detail moved into code comments beside each entry. No key, type, default or schema shape changed.

    State: card closed by Fixes; the claim is done.


    Generated by Claude Code

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

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions