You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(cli): resolve packages[] at the four config-load boundaries and the gates that key off config.objects (#15228)
* fix(cli): resolve `packages[]` at the four config-load boundaries and the gates that key off `config.objects`
The CLI holds four independent config-load boundaries, and every read of a
package-owned collection behind them was an inline expression against the
flattened top level. A stack carrying each definition once under `packages[]`
reached those expressions with the key absent, and nothing threw: `os serve`
booted with no query engine and no storage driver, its i18n plugin never
registered, `os dev`'s recompile inventory went permanently empty, and `os
build`'s union author-time rule run judged an empty stack and published green.
One seam (`utils/stack-collections.ts`) now answers all of them, in
`resolveArtifactPackageOrder`'s dependency order. Each predicate starts from the
expression it replaced, so every stack that boots or builds today takes the
identical branch — including one declaring an empty `objects: []` — and
`packages[]` is consulted only where the old read returned nothing.
Being callable is the other half of the point: the #15004 acceptance probe could
not reach an expression inside an oclif command body, which is why these four
sites sat outside its ledger. The probe now carries a row per site that calls the
decision each command makes.
No command emits anything different. `OPTION_B_LOSSES` is unchanged at 24 rows:
none of them names a cli reader.
Part of #15006
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHvF5hyiZjnCyExFnfQB8m
* docs(cli): name the filed issue for the one option-B site this card leaves alone
`plugins` / `devPlugins` are package-owned collections that `serve.ts` and
`schema-migration-plugins.ts` read off the top level only, and the mechanical
repair is wrong there: `packages[i].manifest.plugins` in a JSON artifact is inert
data where `kernel.use()` needs a live instance. Whether a live-object collection
belongs in the package-owned key set at all is a `packages/spec` question
upstream of every reader in this program, so the pin's header points at #15219
instead of at this card's report.
Part of #15006
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHvF5hyiZjnCyExFnfQB8m
* perf(cli): resolve the package list once per caller, not once per collection key
`resolveArtifactPackageOrder` parses every `packages[]` entry whole, and the
`os build` union fold asks about all 37 package-owned collections — so the first
cut ran that parse 38 times per build, and the `AppPlugin` wrap gate ran it four
times per boot. The bodies are resolved once and handed to `collectFrom`, which
is the only shape that changed; every answer is identical.
Also corrects the probe's note: six rows enter, not four. The two beyond the
card's named sites are the reads sitting beside them on the same boundaries —
the `AppPlugin` wrap gate, which measured does NOT lose, and the i18n
auto-registration gate, which does.
Part of #15006
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UHvF5hyiZjnCyExFnfQB8m
---------
Co-authored-by: Claude <noreply@anthropic.com>
0 commit comments