docs(plugin-hono-server): re-anchor the dead tracker citations in packages/plugins/plugin-hono-server/src to the commits that decided them - #20741
Conversation
…kages/plugins/plugin-hono-server/src to the commits that decided them Ruling C+D, form C: every comment site in packages/plugins/plugin-hono-server/src that cited a tracker number now answering 404 cites the commit in main's history that decided what the line describes, and says in its own words what was decided. 24 comment lines in 5 files (the census's 5 in adapter.ts and current-user-endpoints.ts, plus 19 in three test files), line for line, so every file keeps its line count and no code token, string literal or identifier moves. Anchors: 6a180e4 (a permission-store read that throws fails loud, and an unreadable authz store licenses no verdict), 79c46da (the producer-side userMessage refusal channel), 2934761 (refuse a repeated query value rather than pick one: readSingleQueryValue), f586f1a (one ExecutionContext assembler, two named anonymous entries, the fail-closed one the default) and 51ae731 (LiteKernel.use() runs the same plugin contract as ObjectKernel, the kernels converge). Claude-Session: https://claude.ai/code/session_local_1d2a197c-c20e-4e90-9be8-413d4d432289 Co-authored-by: Claude <noreply@anthropic.com>
The rewritten comment at adapter.ts's declared-envelope return survives the bundler: dist/index.js and dist/index.mjs differ between base and head in that one comment line each (parser tokens identical), so the package's published bytes move and a patch changeset is owed. Claude-Session: https://claude.ai/code/session_local_1d2a197c-c20e-4e90-9be8-413d4d432289 Co-authored-by: Claude <noreply@anthropic.com>
…no-server-citations
📓 Docs Drift Check2 anchor(s) derived from 1 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 — 7 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 8ab123c0ed42b3678cc2c88bb80fef381674019d && git checkout 8ab123c0ed42b3678cc2c88bb80fef381674019d
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin fbec216e2d184afc03b456b0bd8013ad5d47bc6f 03e5f4c0fd6f8bb63ce037d6d39141240bdccf51 && git checkout -B drift-repro fbec216e2d184afc03b456b0bd8013ad5d47bc6f && git merge --no-ff 03e5f4c0fd6f8bb63ce037d6d39141240bdccf51
node scripts/docs-audit/affected-docs.mjs --json fbec216e2d184afc03b456b0bd8013ad5d47bc6f |
Contract reviewServed-tier: ① Derived judgmentsInputs read. Card #20594's body and all 39 comments (the stage-1 to stage-10 claims, os-dev-reports, ACCEPT and Landed records; the stage-5 ruling Sampled. The whole population: all 24 rewritten sites in all 5 code files (adapter.ts 4; current-user-endpoints.ts 1; current-user-endpoints-localization.test.ts 1; handler-throw-declared-envelope.test.ts 2; ui-plugin-auto-discovery.pin.test.ts 16), each read against its anchor's message and patch via (1) Comment-only: RIGHT. An awk pass over the diff (changeset excluded) finds 24 removed and 24 added lines and 0 changed lines whose first non-blank characters are not (2) Anchors: RIGHT, none wrong or unsupported. All 5 shas exist (
No ADR or ruling record holds these decisions: a grep for the 5 numbers in (3) Numbers: RIGHT. Multiset over removed lines: #13279 x4, #9934 x2, #6307 x1, #6216 x1, #16721 x16 (the 24 dropped) plus #16599 x2, #9864 x1, #16334 x1; over added lines: #16599 x2, #9864 x1, #16334 x1. The kept numbers stand on the same lines they stood on, and no number is added. REST probe at my read: the 5 dropped answer 404; #16599, #9864, #16334 and the context-line #6878, #16363, #16049, #16050 answer 200 (#16363 is a pull request, kept as it stood). No 200 number was removed or rewritten. Shas on added lines: 6a180e4 x4, 79c46da x2, 2934761 x1, f586f1a x1, 51ae731 x16 (one sentence-initial "Commit" at :608); shas on removed lines: none. (4) Line counts: RIGHT. Additions equal deletions in every modified file (4/4, 1/1, 1/1, 2/2, 16/16), every hunk's old and new spans are equal, and the head blobs read 1,660 / 335 / 1,020 / 403 / 697 lines, the dev's figures. The changeset is a new 11-line file. (5) Judged in ②. (6) Merge head. Accept-set and public-surface changes implied by the diff: none. No runtime symbol, route, error code, envelope key, type or export moves; nothing in a Check-runs on the head at my read (2026-09-30T00:41:30Z): 34 runs, newest per name — 31 completed/success, 3 completed/skipped (Build Docs, Console Pin Gate, Packed-tarball smoke (opt-in): the expected skips), 0 in progress, 0 failed. Check Changeset, Lint & Repo Gates, the four Type Check runs, Test Core 1–6, Dogfood Regression Gate 1–3, Temporal Conformance and the four PR-shape guards are all success. ② Semver level
Clause-②: ③ Boundary flags
Implemented-by: VERDICT: PASS |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 36651967188 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Part of #20594
Clause-②: no
What changed
This is stage 10 of the
domain:clilane of the dead-citation sweep:packages/plugins/plugin-hono-server/src. Every comment site there that cited a tracker number answering 404 now cites, in ruling C+D's form C (comment 5749154545 on #19123), the commit in this repository's history that decided what the line describes, and keeps saying in its own words what that commit decided. PR #20533 is the method, and stages 1 to 9 of this card (PR #20624, PR #20632, PR #20656, PR #20673, PR #20689, PR #20703, PR #20713, PR #20723, PR #20735) are the precedents. The card stays open for the lane's remaining packages, so this PR saysPart of.That is 24 sites on 24 lines in 5 files, covering 5 numbers, rewritten to 5 distinct commits:
src/adapter.ts4,src/current-user-endpoints.ts1 (4 numbers);*.test.ts; stages 1 to 9 took test comments too):ui-plugin-auto-discovery.pin.test.ts16,handler-throw-declared-envelope.test.ts2,current-user-endpoints-localization.test.ts1.Only comments changed: 24 lines out, 24 in, every one of them a site (no companion line), and every touched file keeps its line count (1,660 / 1,020 / 335 / 403 / 697), so no line citation into these files moves. No citation number is added: over the 24 line pairs, the added numbers are a subset of the removed ones (
#16599x2,#9864,#16334, all answering 200, stay where they stood), and no PR number stands on an added line. No ADR or ruling-record file indocs/adr/orscripts/adr-anchors/records any of these 5 decisions (a grep for the 5 numbers there reads 0 hits; the control number#7329reads 1 in the same tree), so every anchor is a commit.A
patchchangeset for@objectstack/plugin-hono-serverrides along, because one rewritten comment reachesdist(measured below). That is stage 6's and stage 9's case (PR #20703, PR #20735), not stages 5 and 7's.Census:
packages/plugins/plugin-hono-server, before and afterInstrument. The gate's own
node scripts/check-issue-citations.mjs --census --json, read-only and unchanged, run underwith-fleet.sh --readfor the token. The count is itsallocated-but-absentfindings underpackages/plugins/plugin-hono-server/. Both runs enumerated the whole board.allocated-but-absentf927864ea0, run 2026-09-29T23:42:29Z to 23:46:56Z91ce7e5e8f, run 23:58:22Z to 2026-09-30T00:02:19ZThe whole-repo drop of 5 is exactly these sites: a site-by-site diff of the two JSON outputs has 5 findings gone (
adapter.ts:225,:227,:308,:349;current-user-endpoints.ts:448) and none added. The other three tallies (resolves33,003,resolves-as-pull-request1,984,cross-repo-unjudged995) are equal in both runs.packages/plugins/plugin-hono-serveris byte-identical at91ce7e5e8fand at the head.Supplementary scan (test files, strings and files outside
src/included). The gate's exportedextractCitationsandclassifyCitationover all 41 tracked files of the package (CHANGELOG.mdexcluded), comment-prose and whole-file projections, with the board from the gate's ownprobeBoard: 347 citations and 32 dead before, 323 and 8 after. Undersrc/: comments 5 dead to 0, test comments 19 to 0, strings 0 and test strings 2 unchanged. Its before list ofsrc/comment sites equals the census's. The 8 left are 2 test strings and 6 sites outsidesrc/(see Acceptance notes).Per-site table
git blameat the base ties each line to the commit that wrote it, and each anchor was read in its message, changeset or diff, not only its subject.#13279adapter.ts:225,:227;handler-throw-declared-envelope.test.ts:84;current-user-endpoints-localization.test.ts:906a180e42d:tryFindinresolveAuthzContextraisesAuthzStoreUnavailableError(503SERVICE_UNAVAILABLE) when a permission-store read is issued and throws, instead of answering it as an empty read, and each fail-closed transportcatch(requireDatasourceAdmininservice-datasourceamong them) re-raises it: an unreadable store licenses no verdict, the maintainer's 2026-08-30 ruling recorded in its message. The first three lines blame tocefe068702(the declared-envelope rendering, PR #17412) and the fourth to5f7fa1de0; both wrote them citing this ruling. PR #13475 (200) names #13279. Stages 1, 2, 4 and 9 gave the number this anchor.#9934adapter.ts:308;handler-throw-declared-envelope.test.ts:15279c46da90: the producer-side user-facing marking for hook refusals, theuserMessagechannel, a text field a producer sets at throw time and every classified envelope carries. Both lines blame tocefe068702. The PR that landed it (PR #9992) answers 404 too. Stages 1, 2, 4 and 6 gave the number this anchor.#6307adapter.ts:349293476148: refuse a repeated?version=onGET/DELETE /packages/:idrather than pick one value, throughreadSingleQueryValue, which it introduces. The line blames to7cdbcbb306(surface repeated query parameters as arrays, PR #7396), which says it follows that direction. Stages 2 and 8 gave the number this anchor.#6216current-user-endpoints.ts:448f586f1a89: oneExecutionContextassembler with two named anonymous entries,assembleExecutionContextthe default, fail-closed one andassembleExecutionContextOrGuestthe explicit guest one, the maintainer's 2026-08-08 Option A recorded in its docblock. The line blames to6615a024c3(the current-user faces adopt the shared assembler). Stages 1, 2 and 7 gave the number this anchor.#16721ui-plugin-auto-discovery.pin.test.ts:27,:37,:42,:180,:211,:217,:360,:363,:495,:498,:594,:596,:604,:608,:631,:64651ae73123:LiteKernel.use()runs the sameassertPluginContractasObjectKernel.use()and refuses the same plugin objects with the same envelope, the maintainer's 2026-09-08 option A (the kernels converge) recorded in its changeset. 15 lines blame to it;:180blames to3c48234b3, which re-wrapped that sentence and keeps its fact. Itslite-kernel.tsdocblock records the measurement taken before converging, which:604describes ("before commit 51ae731").:363,:498and:631said thehono-plugin.tsquestion was "noted on" the dead number; that note is the text this commit wrote into this file, so they now say "raised with" / "recorded with" it. New anchor; no other package has re-anchored this number yet.Anchor checks. Every cited sha matches exactly one object (
git rev-parse --disambiguate, count 1 for each of the 5), is a commit, has one parent, and is an ancestor ofmain(merge-base --is-ancestoragainstf927864ea0, exit 0 for all 5). The checkout is not shallow. The control leg2672f855fa(2026-08-09, the parent of the oldest anchor293476148) exits 0 againstorigin/main, and the negative control, this branch's own head, exits 1. Four anchors reuse the landed stages' (6a180e42d,79c46da90,293476148,f586f1a89), so each number carries one anchor across the tree; one is new (51ae73123).Numbers. All 5 dropped numbers answer 404 by REST (probed 2026-09-30T00:14:17Z). The numbers kept on or beside the changed lines answer 200:
#16599,#9864,#16334,#16363,#16049,#6878,#3867,#8086,#16545,#15999,#5090.packages/plugins/plugin-hono-server/srchas no slash-joined#A/#Bwithout spaces; the spaced pairs (#3867 / #8086,#2408 / #3361) are read by the grammar and every half answers 200.Mechanical guard: no code token moves
H2 holds on the parser-token reading; the emitted
distis NOT byte-identical, because one rewritten//comment sits inside a returned object literal and the bundler keeps it.Token guard. It compares the TypeScript parser's leaf tokens (TypeScript 6.0.3,
getChildrenwalk, JSDoc nodes excluded) of the 5 touched files at basef927864ea0and at the head. Controls mutate the head text in memory only.StringLiteralper file, exit 1.All 48 changed lines (24 out, 24 in) are
//or*comment lines.Emitted
dist.pnpm --filter @objectstack/plugin-hono-server buildat the head, then at base (the base blobs of the 5 touched files restored in place under a trap-armed restore; an on-disk probe read#99341 andcommit 79c46da900 inadapter.tsbefore that build; afterwards every touched blob equals its HEAD blob,git diff HEADis empty and the status is clean), with the same dependency builds:index.jsandindex.mjsdiffer, in one line each: theadapter.ts:308comment,refusal text (#9934)at base andrefusal text (commit 79c46da90)at head.index.d.ts,index.d.mtsand both.mapfiles are equal. No docblock of this diff reaches the declaration files.index.js, 10,521 inindex.mjs), so the wholedistdelta is comment text. Its code control (a code line appended) reads COUNT/TOKENS DIFFER in each.scripts/ablation-replace.mjs, wrap mode, anchormessage: 'No response from handler' }hit 1 to 0, planted marker 0 to 1, blob6a0c10f76282tod5223196afeb;scripts/ablation-dist-preflight.mjsfound the marker inindex.jsandindex.mjs):index.js,index.mjsand both.mapfiles differ from the head build. The blob was restored to HEAD6a0c10f76282withgit diff HEADempty,distwas rebuilt, its six sha256 values equal the first head build, and the preflight in--absentmode reads the marker absent from all 6 files with a clean tree.A raw scan of the 6 changed files for ASCII control bytes finds none, and
check:nul-bytesexits 0.Changeset
patchfor@objectstack/plugin-hono-server(.changeset/plugin-hono-server-provenance-anchors.md), in PR #20632's form. The package'sfiles[]isdist,README.mdandCHANGELOG.md, and the build above emits differentindex.js/index.mjsat base and head, so this diff publishes.check-changeset-no-major,check-empty-changeset,check-adr-0087-registrationandcheck-changeset-fixedall exit 0.Gates (head
03e5f4c0fd)This host has no
flock, soos-verify-lock.shran in its declared unlocked mode. Its official wording, verbatim (printed by every run; the command line differs per run and is listed in the verdicts below):Its verdict line from each run (the closure build and the three
distbuilds atfeaf0c9b73, whosepackages/plugins/plugin-hono-serveris byte-identical to this head; the first whole-workspace build, tests and typecheck at91ce7e5e8f; the second whole-workspace build, tests and typecheck at this head after the merge; the scratch-script paths shortened toSCRATCH):@objectstack/plugin-hono-serverwith its closure (7 of 81 workspace projects), then the whole workspace,turbo run build --filter='./packages/*' --filter='./packages/*/*' --concurrency=2, 71 of 71 tasks, before and again after the merge. The tree was clean after each, and the package's sixdistfiles after each whole build equal the first head build by sha256.vitest run --maxWorkers=2: 27 files, 324 tests passed (every*.test.tsundersrc/), at this head and at91ce7e5e8f.pnpm --filter @objectstack/plugin-hono-server typecheckexits 0 at this head and at91ce7e5e8f(tsc --noEmit,tsc --noEmit -p tsconfig.typecheck.json, andcheck:test-typecheckOK with 0 files / 0 errors / 0 pinned signatures).--listFiles:tsconfig.jsonandtsconfig.test.jsoneach compile 33src/files including all 27 tests and all 5 touched files.origin/mainbrought apackages/specchange, sopnpm --filter @objectstack/spec check:generatedran after the rebuild: "All 15 generated artifacts are up to date" (exit 0).pnpm lint(eslint . --no-inline-config) exits 0 at this head (2026-09-30T00:25:09Z to 00:25:36Z), and at91ce7e5e8f.origin/main(fbec216e2d),node scripts/check-issue-citations.mjs --base origin/mainreports "no issue citations added against fbec216 (2 file(s) read)" (exit 0).node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsderived 63 families, the same list at91ce7e5e8fand at this head. All 63 exit 0 at this head in one pass, and--ranwith the exit-coded record reads "63 derived, 63 run, 0 NOT-MEASURED, 0 UNRUN" (a derived zero). Among them:check:issue-citations,check:doc-authoring,check:nul-bytes,check:published-files,check:dts-closure,check:dual-build-cjs-loads,check:type-check-debt,check-adr-0087-registration,check-empty-changeset.check-changeset-fixed,check:authz-resolver,check:error-code-casing,check:filter-alias-parity). The other three need a pull request's context; they are run against this PR once it exists and reported on the card. The 18 self-test-only rows grade their checkers' fixtures and cannot judge this diff.Hypotheses (measured first)
f927864ea0the filtered census answers 5 sites on 5 lines, 4 numbers, 2 files, as on the seat's0be898499f. The whole-repo count is 1,105.packages/plugins/plugin-hono-server. No site was left for an open PR (the file lists of all open PRs were read at 2026-09-29T23:48:36Z, 6 PRs, and again at 2026-09-30T00:15:14Z, 9 PRs: only the Version Packages PR chore: version packages #20639 touches the package, inCHANGELOG.mdandpackage.json) or for an unfound anchor.distreading. The parser leaf-token diff of all 5 touched files is empty with its controls firing. The emitteddistdiffers in one comment line ofindex.jsand ofindex.mjs, token-identical with a code control. That is why the changeset ships.Acceptance notes
packages/plugins/plugin-hono-server/src:#16721at the end of the group-Fdescribetitle ofui-plugin-auto-discovery.pin.test.ts(:635, a test title, no assertion text). It stays on the card for its form-D stage; no string moved here. The supplementary scan's second test-string hit,:111('.os-pin{color:#123456}'), is a CSS hex colour in a fixture, not a citation: the whole-file projection reads it as a six-digit number, while the census blanks strings and defers test files.src/**, a later stage of the card:objectstack.config.ts:19(#11332) and:26(#10724),tsconfig.test.json:3and:61(#13176),tsconfig.typecheck.json:12(#11332and#10724;#4914in the same group answers 200). The other citations in the package outsidesrc/**(CHANGELOG.mdexcluded) answer 200:tsconfig.test.json(#14062,#5286,#5449,#12542),tsconfig.typecheck.json(#13284,#5475,#10756),vitest.config.ts(#10374,#9457,#7378;#8129resolves as a pull request).README.mdcarries none.hono-plugin.ts:521and:523still carry the&& plugin.staticPathconjunct and theplugin.slug || plugin.name.split('/').pop()derivation that, since51ae73123, neither published kernel'suse()lets an input reach. The pin file says so and leaves the call tohono-plugin.ts; the tracker note it pointed at is gone, so this file's text (and commit3c48234b3's message) are the record. Unreachable defensive code, not a defect: noted, not filed.handler-throw-declared-envelope.test.tsstill says "before this card" (:85) and "the card" (:19,:32) around its rewritten lines. They cite no dead number, so they were left, as the landed stages left theirs.origin/main. The branch mergedorigin/mainonce (03e5f4c0fd, mergingfbec216e2d: the ADR-0087 migration chain moves to@objectstack/spec/migrations).packages/specis in this package's dependency closure, so the workspace was rebuilt and the package's tests, typecheck and every gate above were rerun at the merge head; nothing inpackages/plugins/plugin-hono-serverchanged.Deviations
check:dual-build-cjs-loads,check:lean-entry-closureandcheck:type-check-debtexited 3 (PREREQUISITE NOT MET: built output absent) in the first pass, before the whole-workspace build. Rerun after it, each exits 0, and all 63 exit 0 in the single pass at this head.check:generatedrun was void. This host's globalpnpmis a v11 front end that rejects the-seach sub-gate passes, so all 15 rows read "unexpected argument '-s'" (exit 1, nothing measured). Rerun with the real pnpm 10.31 binary first onPATH, it reads all 15 up to date (exit 0).Claude-SessionplusCo-authored-by: Claude), and the pre-push trailer check passed on every push. The harness's attribution reminder asked for a model-named trailer and a different PR footer, and AGENTS.md overrides it. The merge commit carries git's default message.Generated by Claude Code