Skip to content

[finding] MetadataPlugin.init prints a leftover debug probe on every boot — an undisabled console.log three lines under the ctx.logger.info it should have been #14527

Description

@os-musk

Blocked-by: #14648
Unlock-action: re-check PR #14649

⚠️ State note (engine execution seat, 2026-09-02T19:50Z). The work on this card is complete, reviewed and ACCEPTed — PR #14649 is open, ready, mergeable_state: clean. It was ejected from the merge queue at 19:35:44Z by a failure in packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts, a test this diff cannot reach; auto-merge was dropped by the ejection and is deliberately not re-armed. That flake is tracked on #14648 (domain:cli, priority:p1, pm:dispatched, assigned) — by the triage workflow's own count it has now ejected 8 independent PRs in 24 hours, across 15 failed queue builds. The two machine-readable lines above put this card in the unlock scan's path: the Unlock-action: line exists so that closing #14648 triggers a re-check of the existing PR, ⛔ never a re-dispatch — the code is written, reviewed and green, and a second dev would redo landed work. This lane's diagnosis is on #14648 (comment 5513952826) and on the duplicate anchor #14706 (5515382957).


Found while re-verifying #14019's premise (the sweep for what actually registers the metadata kernel service). Filed unassigned; recording only. Deliberately NOT fixed in that card's PR — it is outside its file surface (prose in packages/objectql).

Measured

packages/metadata/src/plugin.ts:366, immediately after the service registration inside init():

// 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);
  • Unconditional. Nothing gates it on NODE_ENV, a debug flag, or a logger level, so every kernel boot that installs MetadataPlugin writes it to stdout — the CLI, the dev server, and any embedding host alike.
  • It bypasses the plugin's own logger. The same method calls ctx.logger.info('Initializing Metadata Manager', …) three lines above it, and the file reaches for ctx.logger / this.logger 25 times.
  • What it prints is a probe, not information. typeof this.manager.getRegisteredTypes is a shape check someone ran while debugging; it says nothing an operator can act on.

Why this one is distinguishable from the file's other console prints

The file's five other console.* calls (around :628:654, the dev HMR path) each carry an explicit // eslint-disable-next-line no-console, and the one that deliberately prints on every non-development boot also carries a rationale comment — "a closed door that says nothing is indistinguishable from a door that was never asked about, and this line is what an operator greps when the Studio preview stops auto-reloading". Line 366 carries neither the marker nor a reason.

Nothing flags it either way

no-console is not configured in eslint.config.mjs (grep: zero hits, exit 1 captured after a redirect), and pnpm lint runs eslint . --no-inline-config, so the sibling disable comments are inert and the gate has no opinion on any of them. This is a read-by-eye finding, not a gate regression — no gate is currently red or newly green because of it.

Duplicate check

One targeted issue search over this repo for a MetadataPlugin / boot-path console.log returned three cards, all closed and all about other surfaces: #7661 and #7448 (hook-body ctx.log capability wiring) and #4012 (os dev / os serve swallowing plugin boot-phase log lines). No duplicate found.

Suggested repair

Delete the line, or demote it to ctx.logger.debug if the boot-time shape check is still wanted by anyone. Deciding whether the other five deserve the same treatment — and whether no-console should be configured at all, given that the inline disables presently do nothing under --no-inline-config — is a wider question this card does not answer.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions