Uh oh!
There was an error while loading. Please reload this page.
fix(metadata): drop the leftover boot-time debug probe from MetadataPlugin.init - #14649
fix(metadata): drop the leftover boot-time debug probe from MetadataPlugin.init#14649os-musk wants to merge 2 commits into
MetadataPlugin.init#14649Conversation
…Plugin.init` (#14527) `init()` printed a bare `console.log` immediately after `ctx.registerService('metadata', this.manager)`, reporting `typeof this.manager.getRegisteredTypes`. Nothing gated it, so every kernel boot that installs `MetadataPlugin` wrote it to stdout. It reported a statically known fact and a repo-wide search found no reader of the string, so it is deleted rather than demoted to `ctx.logger.debug`. The `ctx.logger.info('Initializing Metadata Manager', ...)` call three lines above already announces the step through the plugin's own logger. The file's five other `console.*` calls (the dev HMR path) are untouched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
…tadata-plugin-debug-probe
📓 Docs Drift CheckThis PR changes 1 package(s): 5 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 1 release-owned page(s) also name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 12 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 8bd18a6f4e2db0764aa87b42e38e373abcd5f266 && git checkout 8bd18a6f4e2db0764aa87b42e38e373abcd5f266
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 20b883918aa787e65299e72b85c2b3396aa2006f 9d422124467501b60af0f1885d7a78b5c77d5bb9 && git checkout -B drift-repro 20b883918aa787e65299e72b85c2b3396aa2006f && git merge --no-ff 9d422124467501b60af0f1885d7a78b5c77d5bb9
node scripts/docs-audit/affected-docs.mjs --json 20b883918aa787e65299e72b85c2b3396aa2006f
|
os-musk
commented
Sep 2, 2026
Landing provenance (engine execution seat, session
The red on this head was diagnosed, not waited out.
The re-run on the identical head, with no push and no rebase, passed at 17:45:27Z. Red then green on a byte-identical tree is the controlled A/B, and it is now recorded on the queue-flake anchor #14648 (comment 5513952826) together with the shape of a real fix. That anchor is
Owed by the seat at MERGED: verify by content on Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 33671786568 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
os-musk
commented
Sep 2, 2026
Ejected from the merge queue at 19:35:44Z — not this PR's failure, and deliberately NOT re-queuedEngine execution seat (session What failed: Verified by content that nothing landed: Why it is not this PR's. The diff is two files in Why it is not a regression at all. The assertion is a wall-clock claim, not a behavioural one: ⭐ The class has escalated since that first stand-down. The triage workflow's own count is now 8 independent PRs in 24 hours (#14499, #14593, #14617, #14629, #14631, #14649, #14665, #14675) across 15 failed queue builds, and it states that figure as a lower bound. Anchor: #14648 ( Why this PR is not being re-queued. The triage workflow's checklist, item 2: once an aggregation issue exists, re-queuing before the fix only burns another full-queue round for every PR behind it — and with 15 failed builds in 24h that cost is now measurably superlinear. ⛔ No re-queue while the anchor is open and unfixed. ⛔ The test is not being skipped, quarantined, relaxed or re-baselined by this lane, and no second re-run has been spent — weakening a gate stays a human act and none of it is ours to do. State: PR stays open, ready, Generated by Claude Code |
Fixes#14527
MetadataPlugin.init()carried a bareconsole.logimmediately afterctx.registerService('metadata', this.manager), printingtypeof this.manager.getRegisteredTypes. Nothing gated it onNODE_ENV, a debug flagor a logger level, so every kernel boot that installs
MetadataPluginwrote it tostdout — the CLI, the dev server and any embedding host alike.
What changed
One line deleted from
packages/metadata/src/plugin.ts, plus a changeset. The wholecontribution is
2 files changed, 30 insertions(+), 1 deletion(-), and the singlesource hunk is:
// Register Metadata Manager as the primary metadata service provider. ctx.registerService('metadata', this.manager); - console.log('[MetadataPlugin] Registered metadata service, has getRegisteredTypes:', typeof this.manager.getRegisteredTypes);Deleted rather than demoted to
ctx.logger.debugThe triage allowed either. Deletion was chosen on two measurements:
has getRegisteredTypes,and separately
Registered metadata service) returns exactly one hit: the emitting lineitself. No test, script, doc or workflow consumes it.
getRegisteredTypesis a method the classdeclares, so the
typeofit printed cannot vary in a way an operator could act on.Demoting would preserve a probe whose answer is fixed at compile time.
The
ctx.logger.info('Initializing Metadata Manager', ...)call three lines above alreadyannounces the same lifecycle step through the plugin's own logger, carrying the fields that
are actually actionable (
root,watch,artifactSource).Severity is bounded, per the triage: on the two paths where a stray stdout line would break
a parser —
--jsonpayloads and theos serveprotocol channel —packages/clialreadyreserves stdout by redirecting to stderr, so nothing downstream depended on this line being
present or absent.
Deliberately not touched
console.*calls (:627–:653on this tree, the dev HMR path).Each carries
// eslint-disable-next-line no-console, and the one that prints on everynon-development boot carries a written rationale for doing so. That distinction is what
makes this a one-line change and not a six-line one. The file's
console.*count went6 -> 5and itseslint-disablecount stayed at5.eslint.config.mjsand theno-consolequestion. No inline disable was added, nonewas removed, and the rule was not configured. That question, and the inert-suppression
population behind it, is the separate card 134
eslint-disablecomments across 45 source files are structurally inert —pnpm lintruns--no-inline-config#14529.Why no gate moves in either direction here
Re-measured on this tree, with eslint's own resolved config rather than a text search:
no-consoleis not configured, and the repo's only lint invocation passes--no-inline-config, so the sibling disable comments are inert. Repo-widepnpm lintisgreen (exit 0, no output, 118s) while the file still contains five
console.*calls — whichis the positive control that the rule really is off. This change therefore turns no gate
green and no gate red.
Measurements
Everything below was run at head
9d4221244, after mergingorigin/main.The shipped artefact moved. No assertion exists to ablate, so no ablation is owed; the
proof is the built output instead.
grep -rn 'has getRegisteredTypes' dist/inpackages/metadata:dist/index.js,index.cjs,node.js,node.cjs+ 4 sourcemaps)logger.infoabove itBoth controls still hold, so the zero is a real absence rather than a broken grep or an
unbuilt
dist/. The probe is likewise absent from the 677-test run log, in which thesibling
console.logstill appears 17 times.Tests.
pnpm --filter @objectstack/metadata exec vitest run --maxWorkers=2—Test Files 43 passed (43),Tests 677 passed (677).Type check.
@objectstack/metadatahas notypecheckscript on this tree (PR #14627,which adds it, has not landed), so the substitute was
pnpm --filter @objectstack/metadata exec tsc --noEmit -p tsconfig.json. It reports 89errors — all 89 in
*.test.tsfiles, zero inplugin.tsand zero in any non-test file. Areverse check confirms they are pre-existing rather than mine: restoring the pre-change
plugin.tsfrom the merge base and re-running gives the same 89, also with zero inplugin.ts. The restore was verified by blob hash (8e4d1e3c...on disk equals theHEADblob) with an empty
git diff HEAD.--listFilesconfirmsplugin.tsis in the programthat was checked.
Gates. The family union was re-derived from the actual change set on this tree
(
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack, 2 paths vs mergebase
ca48cf377) and gives 30 families — identical before and after the merge. 27 aregreen. Three answer exit 3, which each script's own verdict text defines as NOT MEASURED
rather than a failure, and none for a reason this change can influence:
check-test-completeness.mjs— needs a savedturbo run testlog as an argument; thederived family names it with none, which the script documents as the unreachable branch
("record this gate as NOT MEASURED; it is not a red").
scripts/pm/check-half-states.mjs— needs repo-scoped REST egress, which this containerrefuses (a direct REST probe answers 403). It sweeps the PM board, not this diff. Its
--self-testwrapper,pnpm check:pm-half-states, is green at 2062 cases.check:dual-build-cjs-loads—PREREQUISITE NOT MET: it reads built output and 57packages have no
dist/in this worktree. Its--self-testis green at 93 cases, and theproperty it asserts was checked directly for the package this PR touches: all four
published
requireentries of@objectstack/metadata(index.cjs,node.cjs,errors.cjs,migrations/index.cjs) load, withMetadataPluginexported as a function.Always-runs:
pnpm lintgreen (full repo, not narrowed),pnpm check:nul-bytesgreen(7991 files),
pnpm check:error-status-conformancegreen.Changeset.
@objectstack/metadata: patch. The file is in the published entry closure,measured three ways:
src/index.ts:14re-exportsMetadataPluginfrom./plugin.js; themanifest ships
"files": ["dist"]withexports["."]resolving to./dist/index.jsandpublishConfig.access: public; andpnpm check:published-filescounts this package amongthe 69 publishable members with a
fileswhitelist and anexportsmap. Most directly, theprobe string was physically present in the shipped bundles before this change. One fewer
line on boot is observable, so
skip-changesetwould have been wrong.This PR touches no
package.json, soValidate Package Dependenciesshould not run on it.That job is red on
mainfor four lockfile advisories tracked in #14639, and no lockfilechange is carried here.
🤖 Generated with Claude Code
Generated by Claude Code
Generated by Claude Code