Uh oh!
There was an error while loading. Please reload this page.
fix(spec): repoint the liveness anchors for action type / body / method at their real consumers - #12517
Merged
Merged
Conversation
…hod` The three entries cited packages/runtime/src/http-dispatcher.ts, which reads none of them: the action consumer was extracted into domains/actions.ts + action-execution.ts (+ sandbox/body-runner.ts), and the dispatcher now only delegates. Unlike the `target`/`requiredPermissions` rot repaired earlier, these three are common English/HTTP words, so the word-bounded key-mention check anchors on the coincidence and passes — call-graph verification by hand was the only way to see it. Part of #12215 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E5LFCYBJ3q2s6yW6oMLxwy
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E5LFCYBJ3q2s6yW6oMLxwy
Contributor
📓 Docs Drift Check
What this run could not see
Coarse fallback — 126 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
huangyiirene
marked this pull request as ready for review
August 26, 2026 08:15
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#12215
All three entries cited
packages/runtime/src/http-dispatcher.ts. None of them is read there — verified by call graph, not by grep, because for these three keys a grep is exactly the thing that cannot answer the question.Per-entry verdict
typehttp-dispatcher.ts(no line)sandbox/body-runner.ts:385—const type = action.type ?? 'script', the #4352 gate deciding whether abodybinds a handler at all;action-execution.ts:1309action.type === 'flow'→dispatchFlowAction,:524isHeadlessInvokableAction,:552headlessActionTypeError,:906MCP summary;domains/actions.ts:591the REST route'sactionType732b1bf, not re-gradedbodyhttp-dispatcher.ts(no line)sandbox/body-runner.ts:356—const raw = action.body, whose own header at:342calls itself "the ONE choke point where anaction.bodybecomes an executable handler";action-execution.ts:525gates headless dispatch onaction?.target || action?.bodymethodhttp-dispatcher.ts(no line)7b6f7f889packages/core/src/actions/ActionRunner.ts:1774(method = action.method || 'POST') and:1780(config.method || action.method), landing on the real request at:1800const fetchInit: RequestInit = { method, headers }evidenceScope: "cross-repo"No verdict was re-graded. All three were
liveand remainlive— citation repair only, per the triage instruction.Why the gate could not see this, and why a grep could not settle it
The word-bounded key-mention check added in PR #12214 caught
targetandrequiredPermissionsbecausehttp-dispatcher.tscontains 0 occurrences of either key. These three are common English and HTTP words that the file is full of for unrelated reasons, so the check anchors on the coincidence and passes. Counted on the cited file:type— 9 occurrences, zero action reads. Four are the TypeScriptimport typekeyword (:9,:13,:14,:21); the rest are other domains' data or prose (error.type:862, a field-type→JSON-Schema mapper:926,details.type:1156, a metadata type list:1634, an inbox query param:1765).body— 68 occurrences, zero action reads. The inbound HTTP request body threaded through the domain delegates (:890,:961,:1732,:1969), the result envelope at:728, and the file's own "Thin delegate — body extracted to ./domains/…" comments, wherebodymeans a function body.method— 41 occurrences, zero action reads. The inbound HTTP verb (15method: stringparameter declarations, route matching such asmethod === 'GET'at:2067, the log line at:2178) and the ordinary object-oriented sense in prose (:837,:2047,:2108,:2135).A regex over the action config's property names (
action?.type/.body/.methodand friends) returns zero matches in the whole 2188-line file. The action path was extracted intodomains/actions.ts+action-execution.tsand the dispatcher now only delegates:handleActions→handleActionsRequestat:1969-1970.Each repointed entry records this in its own note, so the next reader does not re-derive it.
The
methodrealm changetype: 'api'actions are client-dispatched by design —action-execution.ts:557-563(theapibranch ofheadlessActionTypeError,:551-568) refuses them server-side with "it dispatches ontarget, not through the action registry". So the server never read the verb, exactly as with thebodyShape/bodyExtrasiblings.The single in-repo occurrence of
action.method—action-execution.ts:561— is a diagnostic that interpolates the verb into that very refusal. It is evidence of non-consumption, and is deliberately not cited as a consumer.H17 — on-hold #7898/#8347 Restart-touch file
packages/runtime/src/http-dispatcher.tswas read only; it is not in this diff. No breach. All other runtime/objectui files above were likewise read-only evidence surfaces.Verification
Gate union run on the final tree,
0350639— all green, each read from the gate's own printed verdict line (exit codes captured before any pipe):check:liveness—✓ … every 'path:NNN' citation names a line that file actually has and every cited file names the property it is evidence for;line citations: 305 pointer(s) … 305 inside the cited file;key-mention anchoring: 404 pair(s) asked, 403 anchored, 1 exemptcheck:empty-state,check:strictness-ledger,check:variant-docs— greencheck:changeset-gate-self-tests,check:objectui-changeset,check:nul-bytes— greencheck-adr-0087-registration("this PR adds no declared-breaking changeset"),check-changeset-no-major,check-empty-changeset("1 declaring changeset(s) added") — greenReverse verification (both legs red as predicted, restore proven by an empty
git diff HEADand a blob hash identical toHEAD; no build/distleg applies — the gate reads the ledger JSON and sources directly viatsx):body-runner.ts:356→:99356) → exit 1,✗ 1 citation(s) name a line the cited file does not have: action/body → …:99356 (the file has 783 lines)key-mention anchoring: 405 pair(s) asked, … 1 UNANCHOREDTogether these prove the gate actually reads the new anchors rather than passing them by omission.
Changeset
@objectstack/spec: patch— following PR #12214, which carried one for the same ledger files.packages/spec/package.jsonshipslivenessin itsfilesarray, so the ledger is published package content.Out of scope, filed separately
#12516 — the two entries PR #12214 repointed the day before have already drifted:
action.targetcitesaction-execution.ts:725for a call now at:809, andaction.requiredPermissionscitesdomains/actions.ts:172-180for reads now at:393-400/:473/:526. Both stay green, because the lines are in range and the files name the keys — a fourth residual none of the three checks can see. Not folded in here: different entries, and this PR's own line numbers inherit the same exposure rather than fixing it.Generated by Claude Code