Repository navigation
fix(service-sms, runtime): the Send test SMS refusals and the flow clone notice name admin controls, not REST recipes - #25421
Conversation
The Send test SMS refusals no longer tell the admin to pass "to" in the request body, and the flow clone notice no longer gives a PUT/toggle endpoint recipe. Each names the control the admin uses in the console. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016g7nYP9wdNx1GDa5XDr7Uy
📓 Docs Drift CheckThis PR changes 2 package(s): 8 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 6 release-owned page(s) also name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 27 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 0cb35d3dc727bc1986be75781a0c045b4d2068b8 && git checkout 0cb35d3dc727bc1986be75781a0c045b4d2068b8
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin f0fdd45bbc83f13d35af54f1ec903320340617c1 f57343bda5d956ad6d8adf9f741db5cb3b1fc0dc && git checkout -B drift-repro f0fdd45bbc83f13d35af54f1ec903320340617c1 && git merge --no-ff f57343bda5d956ad6d8adf9f741db5cb3b1fc0dc
node scripts/docs-audit/affected-docs.mjs --json f0fdd45bbc83f13d35af54f1ec903320340617c1
|
席位核对 · ACCEPT · 2026-10-23T13:17Z
Generated by Claude Code |
|
Merge-queue ejection, read by the The queue run
Generated by Claude Code |
Requested by Sales · project thread
Fixes #25345
Clause-②: no
Metadata-protocol: none
Two pieces of admin copy that the console shows told the admin to call the REST API. Each one now names the control the admin uses instead. The REST detail stays in developer copy.
What changed
Send test SMS (
packages/services/service-sms/src/sms-plugin.ts,resolveSmsTestRecipient). Four refusals saidpass "to" in the request body: no signed-in user, no data engine, a failed account read, and an account with no phone number. The settings page has no recipient field, so the admin could not follow that advice from the page. Each refusal still says that nothing was sent. It now says what the admin can do there: press Send test SMS while signed in as an admin whose account has a phone number, or press it again once the account can be read. Atoin the request still wins. That override is documented in the function's TSDoc, for API callers, and not in the refusal.Flow clone notice (
packages/runtime/src/flow-clone.ts,FLOW_CLONE_NOTICE). The old notice said to send the clone's complete definition withstatus: 'obsolete'to the automation PUT route, and it named the toggle route. The new notice keeps its first two facts unchanged: references are not re-pointed, anddraftis not an off-switch. The remedy now names the console's two switches:The REST recipe stays in the client SDK's
automation.toggleTSDoc (packages/client/src/index.ts), which this PR does not change.Landing, and one premise corrected
origin/main830a63a680,smsSettingsManifest(packages/services/service-settings/src/manifests/sms.manifest.ts) declares no recipient field. The fix for Setup → Email and SMS: Send test has nowhere to enter a recipient, and Email saves with its required fields empty #24767 landed as fix(plugin-email, service-sms): Send test goes to the signed-in admin when the request names no recipient #24848, and that PR did not add a field: it made the test go to the signed-in admin's ownsys_user.phone_number. The handler's own TSDoc says "The served form has no recipient input". So the refusals name the control that does exist, which is the Send test SMS button and the admin's own account number. Adding a recipient field is aservice-settingsmanifest change, outside this claim.main2c4e5f5afd.packages/app-shell/src/views/setup/PackagedAutomationPage.tsxrenders the server notice verbatim, and beside it aSwitch "{{label}}" offbutton. That button turns off the packaged SOURCE through the packaged-flow toggle, not the clone. Studio's flow switch (engine.studio.auto.enabled/disabled, "Disable this automation (publish to apply)") writes the clone'sstatus: 'obsolete'. The notice names each control for the flow it really switches. objectui's ownCLONE_NOTICEinPackagedAutomationPage.test.tsxis fixture text, and the page renders whatever string arrives. Nothing there parses the notice.Pins
packages/runtime/src/domains/automation-flow-clone.test.ts: the existing notice pin asserted'PUT /api/v1/automation/'. It now asserts the new remedy (Switch "…" off,does not reach the clone, the Studio sentence). A new case asserts that the served notice equalsFLOW_CLONE_NOTICEand contains no/api/, no "request body" and noPUT/POST.packages/services/service-sms/src/sms-test-recipient.pin.test.ts: a new block drives the servedPOST /api/settings/sms/testroute for no phone number, a failed read and no data engine. A newnoEngineharness option covers that last case. It also drives the in-process call with no user. Each refusal is checked for its opening sentence and its remedy, for "nothing was sent" and "Send test SMS", and for the absence of/api/, "request body" andpass "to".packages/qa/dogfood/test/automation-flow-clone-door.dogfood.test.tscompares against the imported constant, and no doc quotes either string.Verification (head
f57343bda5)pnpm --workspace-concurrency=2 --filter '@objectstack/service-sms^...' --filter '@objectstack/runtime^...' build, under the verify lock:VERDICT command-exit 0.pnpm --filter @objectstack/service-sms test: Test Files 7 passed (7), Tests 107 passed (107).pnpm --filter @objectstack/service-sms typecheck: exit 0.pnpm --filter @objectstack/runtime typecheck: exit 0, test layer OK.pnpm --filter @objectstack/runtime test: Test Files 438 passed (438), Tests 7023 passed, 19 skipped (7042),VERDICT command-exit 0.dispatch-gates.mjs --commands): 69 derived. 68 ran with exit 0.check:dual-build-cjs-loadsis NOT MEASURED: it exited 3, PREREQUISITE NOT MET, because it needs a full-repodist. It is left to CI.--ranreconciliation: 69 accounted, 68 run, 1 NOT-MEASURED.Acceptance notes
plugin-email'smail/testrefusals (packages/plugins/plugin-email/src/email-plugin.ts, around lines 196, 209 and 216) still saypass "to" in the request bodyto the admin on Setup → Email. They are not changed here, and they are listed in the report for the seat.Provide a valid "to" phone number (E.164 recommended).is unchanged. It is reachable only when the caller names ato, which the served form never sends.🤖 Generated with Claude Code
https://claude.ai/code/session_016g7nYP9wdNx1GDa5XDr7Uy