Skip to content

nightly-tiers: red on main #21347

Description

@github-actions

os-nightly-tiers — machine-findable marker for this generated card. ⛔ Do not delete this line: it is how the nightly finds this card instead of filing a new one every night.

nightly-tiers: red on main

Swept 2026-10-02T06:01:16.136Z · expected every 24h while this card stands (cron 29 5 * * * UTC) · next by 2026-10-03T05:29Z · run log · commit 222ecc27f9050857d4620e7010d8b85f9d35e378 · trigger schedule · tiers job result failure.

The Swept line above is this nightly's heartbeat, and it states the cadence that makes
「stalled」 decidable: while the tiers stay red this card is refreshed on that schedule, so a
timestamp still sitting there past the next by deadline means either the standing caller
died or the nightly went green — nothing here files or closes anything on green, so both
readings end at this card. ⛔ Do not carry a cadence over from a sibling patrol anchor: they
differ by up to 4× and each states its own.

The e2e and live test tiers — the files named *.e2e.test.* and *.live.test.* — run here
nightly on main under OS_TEST_TIERS=nightly and nowhere else (the per-PR and merge-queue
Test Core runs under queue). A red here is a real suite that no pull request will red on;
this card is the channel that sees it. Nothing is blocked by it.

⛔ The remedy is never to rename, skip or delete the failing test to make the nightly green.
Reproduce locally with OS_TEST_TIERS=nightly pnpm --filter <pkg> test, fix what it names, and
let the next nightly refresh this card.

Failing files

  • packages/cli/test/json-stdout-purity.e2e.test.ts

shard-1 — last lines of the test log

… (5888 chars elided) …
     �[32m✓�[39m leaves no kernel-logger record on stdout�[32m 1�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m still shows the operator every boot diagnostic — on stderr�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m emits ONE JSON document on stdout — a bare JSON.parse, no extraction�[32m 1�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m leaves no kernel-logger record on stdout�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m still shows the operator every boot diagnostic — on stderr�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m emits ONE JSON document on stdout — a bare JSON.parse, no extraction�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m leaves no kernel-logger record on stdout�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m still shows the operator every boot diagnostic — on stderr�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m emits ONE JSON document on stdout — a bare JSON.parse, no extraction�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m leaves no kernel-logger record on stdout�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m still shows the operator every boot diagnostic — on stderr�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m emits ONE JSON document on stdout — a bare JSON.parse, no extraction�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m leaves no kernel-logger record on stdout�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m still shows the operator every boot diagnostic — on stderr�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m emits ONE JSON document on stdout — a bare JSON.parse, no extraction�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m leaves no kernel-logger record on stdout�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m still shows the operator every boot diagnostic — on stderr�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m emits ONE JSON document on stdout — a bare JSON.parse, no extraction�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m leaves no kernel-logger record on stdout�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m still shows the operator every boot diagnostic — on stderr�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m emits ONE JSON document on stdout — a bare JSON.parse, no extraction�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m leaves no kernel-logger record on stdout�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m still shows the operator every boot diagnostic — on stderr�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m emits ONE JSON document on stdout — a bare JSON.parse, no extraction�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m leaves no kernel-logger record on stdout�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m still shows the operator every boot diagnostic — on stderr�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m emits ONE JSON document on stdout — a bare JSON.parse, no extraction�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m leaves no kernel-logger record on stdout�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m still shows the operator every boot diagnostic — on stderr�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m emits ONE JSON document on stdout — a bare JSON.parse, no extraction�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m leaves no kernel-logger record on stdout�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m still shows the operator every boot diagnostic — on stderr�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m emits ONE JSON document on stdout — a bare JSON.parse, no extraction�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m leaves no kernel-logger record on stdout�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:      �[32m✓�[39m still shows the operator every boot diagnostic — on stderr�[32m 0�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/build-json-undeclared-key-parity.e2e.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 86161�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m reports the planted key in the payload, and the stack still builds (exit 0) �[33m 10840�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m carries the SAME undeclared-key set `os validate --json` reports on the same tree �[33m 21206�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m folds them in BESIDE the authoring-rule advisories, in the shape `os validate --json` uses �[33m 10743�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m adds NO new top-level key to the payload — this fills a declared key, it is not a new surface �[33m 10947�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m CONTROL — a clean stack reports no undeclared-key line on either face �[33m 21577�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m leaves the TEXT face saying what it always said �[33m 10840�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/migrate-apply-refuses-before-ddl.e2e.test.ts �[2m(�[22m�[2m10 tests�[22m�[2m)�[22m�[33m 34526�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/lint-eval-empty-generator-refusal.e2e.test.ts �[2m(�[22m�[2m10 tests�[22m�[2m)�[22m�[33m 138901�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses on the human face, naming the flag and the empty value it was given �[33m 11217�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the --json face stays a machine face — one JSON document, nothing on stderr �[33m 10872�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m nothing is minted — the payload key set is exactly `error` �[33m 10442�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m differs from the no-flag run once the elapsed token is normalised �[33m 21778�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m both refuse: same exit code, refusal on stdout, generator never loaded �[33m 21240�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m both answer the same --json envelope: exit 1 and a lone `error` key �[33m 20709�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `--eval` with the flag absent still runs the offline eval �[33m 10849�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `--eval --generator <module>` still loads the generator and runs live �[33m 11042�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m an unresolvable generator path refuses exactly as it always has �[33m 10397�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a plain project lint is untouched �[33m 10347�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/run-dev-cwd-tsconfig-redirect.e2e.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 30055�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m loads its command set anyway, and says what it re-ran �[33m 11146�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m still explains itself when the pin is defeated, and refuses the rebuild remedy �[33m 8924�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m CONTROL — from the repo root nothing is redirected, so nothing is re-exec'd �[33m 9980�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/diff-usage-error-stream.e2e.test.ts �[2m(�[22m�[2m12 tests�[22m�[2m)�[22m�[33m 31844�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/lint-eval-json-unscorable-stack.e2e.test.ts �[2m(�[22m�[2m13 tests�[22m�[2m)�[22m�[33m 137771�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a top-level poisoned getter: stdout is JSON, the case FAILED, the cause is named �[33m 10108�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a poisoned getter BELOW the top level is caught too — the schema parse walks there �[33m 11023�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⛔ a silent swallow would be caught: the unscorable case is not scored as clean �[33m 11224�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m offline mode is untouched: exit 0 and every golden case passes �[33m 10385�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a generator that THROWS is still a generation error, not a scoring one �[33m 10510�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⭐ every generation threw ⇒ meanScore 0 on the --json face, never 100 �[33m 10624�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m off-shape stack manifest-as-string is a SCORED case with schema errors, never a generationError �[33m 10828�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m off-shape stack objects-as-string is a SCORED case with schema errors, never a generationError �[33m 10294�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m off-shape stack objects-as-number is a SCORED case with schema errors, never a generationError �[33m 10671�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m off-shape stack objects-as-null is a SCORED case with schema errors, never a generationError �[33m 10669�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m off-shape stack nested-wrong-types is a SCORED case with schema errors, never a generationError �[33m 10288�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m off-shape stack bare-string is a SCORED case with schema errors, never a generationError �[33m 10855�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a generator that cannot be loaded still takes the generator-load JSON exit �[33m 10282�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/artifact-pinned-boot.e2e.test.ts �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[33m 84037�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m boots an https:// artifact, overriding the image's OS_ARTIFACT_PATH default �[33m 14384�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m boots a file:// artifact — the volume-mount workflow �[33m 14337�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m boots unpinned, and says so rather than claiming verification �[33m 14309�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses a hash mismatch, naming expected AND actual, and exits non-zero �[33m 10402�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses an unreachable artifact instead of degrading to an empty kernel �[33m 10366�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m never prints the credential of a pre-signed URL — on the real refusal path �[33m 10203�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses an artifact built for another protocol major (acceptance #4) �[33m 10020�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-ready-degraded-boot.e2e.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[33m 9352�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m prints ready AND the missing core service in the same output, with no unconditional tick �[33m 4207�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m leaves a healthy boot printing exactly the tick it always printed �[33m 5139�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/init-created-files-summary.e2e.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[33m 20738�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/create-refuses-invalid-project-name.e2e.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 46885�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses the card's input and writes NOTHING �[33m 10415�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m accepts a valid name — the positive control for the absence check above �[33m 10695�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses a name only the COMPOSED length catches, which `os init` must keep accepting �[33m 25770�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/compile-artifact-packages.e2e.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[33m 44083�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m writes `manifest` and NO `packages` key �[33m 10734�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m carries both package manifests through to the written artifact, in order �[33m 11959�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m keeps the singular `manifest` beside it — retained, not replaced �[33m 11098�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m exits non-zero rather than writing an artifact in the unreserved shape �[33m 10283�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/i18n-check-platform-bucket.e2e.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[33m 54371�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m reports 100% and exits 0 under --strict --threshold=100 �[33m 10077�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m is the SAME invocation that failed before — the control is --include-platform �[33m 10802�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m prints the hidden-bucket hint on the console face �[33m 11283�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⛔ still gates the package that SHIPS the baseline, with no flag at all �[33m 11100�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m accepts --no-include-platform, so the third state really is three states �[33m 11102�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/migrate-plan-exits.e2e.test.ts �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[33m 7092�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m returns from a composed host stack that armed an unreleasable handle in init() �[33m 7088�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/flow-credential-literal-doors.e2e.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[33m 41528�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m os validate — LIT prints one warning per literal and still passes; DARK prints none �[33m 20423�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m os lint — LIT reports one warning per literal and still passes; DARK reports none �[33m 21098�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-boot-diagnostics.e2e.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[33m 28811�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m prints the boot WARN a plugin logged while the banner was being assembled �[33m 14030�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m streams boot output live at --log-level debug instead of hiding it �[33m 14771�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/generate-agent-retired.e2e.test.ts �[2m(�[22m�[2m9 tests�[22m�[2m)�[22m�[33m 30680�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[42m unit �[49m�[39m test/vitest-resolution-base-collapse.e2e.test.ts �[2m(�[22m�[2m13 tests�[22m�[2m)�[22m�[32m 189�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-app-runtime-hooks.e2e.test.ts �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[33m 18496�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m runs onEnable, so the declared script action has a handler �[33m 10557�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/config-miss-stdout-purity.e2e.test.ts �[2m(�[22m�[2m174 tests�[22m�[2m)�[22m�[33m 308081�[2mms�[22m�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[31m⎯⎯⎯⎯⎯⎯⎯�[39m�[1m�[41m Failed Tests 1 �[49m�[22m�[31m⎯⎯⎯⎯⎯⎯⎯�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[41m�[1m FAIL �[22m�[49m �[30m�[45m integration �[49m�[39m test/json-stdout-purity.e2e.test.ts�[2m > �[22mthe family this contract has to hold across�[2m > �[22mis exactly the set listed here — a new member goes red until it is driven too
@objectstack/cli:test: �[31m�[1mAssertionError�[22m: expected [ 'meta resync', …(13) ] to deeply equal [ 'meta resync', …(12) ]�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[32m- Expected�[39m
@objectstack/cli:test: �[31m+ Received�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[33m@@ -1,9 +1,10 @@�[39m
@objectstack/cli:test: �[2m  [�[22m
@objectstack/cli:test: �[2m    "meta resync",�[22m
@objectstack/cli:test: �[2m    "migrate account-issuer",�[22m
@objectstack/cli:test: �[2m    "migrate apply",�[22m
@objectstack/cli:test: �[31m+   "migrate audit-metadata-bodies",�[39m
@objectstack/cli:test: �[2m    "migrate files-to-references",�[22m
@objectstack/cli:test: �[2m    "migrate meta",�[22m
@objectstack/cli:test: �[2m    "migrate multi-value-columns",�[22m
@objectstack/cli:test: �[2m    "migrate plan",�[22m
@objectstack/cli:test: �[2m    "migrate recorded-by",�[22m
@objectstack/cli:test: 
@objectstack/cli:test: �[36m �[2m❯�[22m test/json-stdout-purity.e2e.test.ts:�[2m223:30�[22m�[39m
@objectstack/cli:test:     �[90m221|�[39m �[34mdescribe�[39m(�[32m'the family this contract has to hold across'�[39m�[33m,�[39m () �[33m=>�[39m {
@objectstack/cli:test:     �[90m222|�[39m   it('is exactly the set listed here — a new member goes red until it …
@objectstack/cli:test:     �[90m223|�[39m     �[34mexpect�[39m(�[34mdiscoverFamily�[39m())�[33m.�[39m�[34mtoEqual�[39m(�[33mObject�[39m�[33m.�[39m�[34mkeys�[39m(�[33mFAMILY�[39m)�[33m.�[39m�[34msort�[39m())�[33m;�[39m
@objectstack/cli:test:     �[90m   |�[39m                              �[31m^�[39m
@objectstack/cli:test:     �[90m224|�[39m   })�[33m;�[39m
@objectstack/cli:test:     �[90m225|�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯�[22m�[39m
@objectstack/cli:test: 
@objectstack/cli:test: 
@objectstack/cli:test: �[2m Test Files �[22m �[1m�[31m1 failed�[39m�[22m�[2m | �[22m�[1m�[32m37 passed�[39m�[22m�[90m (38)�[39m
@objectstack/cli:test: �[2m      Tests �[22m �[1m�[31m1 failed�[39m�[22m�[2m | �[22m�[1m�[32m469 passed�[39m�[22m�[90m (470)�[39m
@objectstack/cli:test: �[2m   Start at �[22m 05:45:33
@objectstack/cli:test: �[2m   Duration �[22m 921.57s�[2m (transform 20.82s, setup 0ms, import 37.08s, tests 2436.67s, environment 6ms)�[22m
@objectstack/cli:test: 
@objectstack/cli:test: JSON report written to /home/runner/work/objectstack/objectstack/packages/cli/.nightly-tiers/vitest-report.json
@objectstack/cli:test:  ELIFECYCLE  Test failed. See above for more details.
::error::command (/home/runner/work/objectstack/objectstack/packages/cli) /opt/hostedtoolcache/node/22.23.3/x64/bin/pnpm run test --shard=1/2 --reporter=default --reporter=json --outputFile.json=.nightly-tiers/vitest-report.json exited (1)
@objectstack/cli#test:  ERROR  command (/home/runner/work/objectstack/objectstack/packages/cli) /opt/hostedtoolcache/node/22.23.3/x64/bin/pnpm run test --shard=1/2 --reporter=default --reporter=json --outputFile.json=.nightly-tiers/vitest-report.json exited (1)

  Tasks:    59 successful, 60 total
 Cached:    0 cached, 60 total
   Time:    20m44.111s 
Summary:    /home/runner/work/objectstack/objectstack/.turbo/runs/3K7uJY2uOnIXL5K6zTAzohY0Aht.json
 Failed:    @objectstack/cli#test

 ERROR  run failed: command  exited (1)

shard-2 — last lines of the test log

… (7571 chars elided) …
 the file migration when the metadata declares a media field �[33m 6307�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m names the value-shape scan when the metadata declares a covered field �[33m 6325�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m names both when both classes are declared �[33m 5999�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m stays silent for metadata that declares neither class �[33m 6072�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m says nothing on a chain that does not cross into 17 �[33m 5899�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m ends the human-readable upgrade with the advice, not just the JSON �[33m 5834�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses a --from below the support floor with the structured error �[33m 9254�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m loads it, converts it, and reports the migrated stack schema-valid �[33m 10564�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m still refuses the same source everywhere else — `os validate` keeps the prescription �[33m 10275�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m names this build's protocol major, in majors �[33m 10361�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m prints no padded protocol semver in the human output, under any label �[33m 9958�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m still says where the runtime stands when --to stops below this build's major �[33m 9381�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m emits the protocol version under `protocolVersion`, with no `runtime` key left �[33m 8980�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-port-readback.e2e.test.ts �[2m(�[22m�[2m13 tests�[22m�[2m)�[22m�[33m 25566�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m POSITIVE CONTROL: a real boot on a free port reads back as exactly that port �[33m 12763�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m THE LOAD-BEARING ARM: a child that drifts off a HELD port is REJECTED, not returned �[33m 12656�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/jsx-gate-manifest-notice.e2e.test.ts �[2m(�[22m�[2m43 tests�[22m�[2m)�[22m�[33m 134302�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m src/commands/validate-json-strict-exit.e2e.test.ts �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[33m 94208�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a config with advisories: --json --strict exits exactly as --strict does �[33m 20025�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the failing --json run still emits exactly one parseable document, carrying the cause �[33m 9803�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: a config with nothing to warn about exits 0 on BOTH faces under --strict �[33m 18790�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m conversions-only: a retiring conversion the PRODUCER applied fails --strict on BOTH faces �[33m 20224�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m conversions-only, without --strict: the same config exits 0 and still lists the conversion �[33m 7092�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: the same page under the CANONICAL key converts nothing and exits 0 on both faces �[33m 12038�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: without --strict, the same advisory-raising config still exits 0 under --json �[33m 6221�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/run-dev-stderr-nonblocking.e2e.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[33m 2238�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/build-json-advisory-parity.e2e.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[33m 80769�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the planted fixture reaches the code path: exit 0, both advisories on the TEXT face �[33m 9696�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m carries the #3366 capability hint in the payload, as the `{token,message}` record validate ships �[33m 9162�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m carries the ADR-0046 doc advisory in the payload, as the issue RECORD validate ships �[33m 9761�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m reports the SAME sets `os validate --json` reports on the same tree, per class �[33m 16118�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m folds them in BESIDE the authoring-rule advisories — the fold added to the list, it did not replace it �[33m 6221�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m adds NO new top-level key to the payload — this fills a declared key, it is not a new surface �[33m 6021�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m CONTROL — a clean stack reports neither advisory, on either face �[33m 11543�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the ONLY residue between the two payloads is the structural advisory set — deferred to #11896, not ported �[33m 12238�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/login-json-noninteractive.e2e.test.ts �[2m(�[22m�[2m20 tests�[22m�[2m)�[22m�[33m 41671�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m logs in with both flags under --json — one record, exit 0 �[33m 6130�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m still prompts, and still succeeds, for a consumer that answers �[33m 6120�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-host-fallback-base.e2e.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[33m 2866�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-no-artifact.e2e.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[33m 38611�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m serves an app defined only by objectstack.config.ts �[33m 8225�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m serves a config authored through defineStack(), the shape every real project has (#3887) �[33m 8141�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m serves a config with no application at all �[33m 8106�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses, and names where it looked, when there is no config and no artifact �[33m 5994�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m serves on, and says why, when the config carries an app it cannot register �[33m 8130�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/published-entry-stderr-nonblocking.e2e.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[32m 126�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/start-port-banner-agreement.e2e.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 22110�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m an explicit --port beats an inherited $OS_PORT, and the banner agrees �[33m 5226�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m with no --port, an inherited $OS_PORT is still honoured and still agrees �[33m 5057�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m still agrees when the CHILD moves the port under it — the auto-shift case �[33m 11816�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/hook-body-build-reach.e2e.test.ts �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[33m 42555�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the directive reaches nothing; only inference lands (unchanged by the retirement) �[33m 6188�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m and says nothing about it — no warning, no error, exit 0 �[33m 5994�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the covered route works end to end: an explicit `body.capabilities` survives the build �[33m 5941�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m --strict-body names require(), not the free identifier `__require` �[33m 6204�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m accept behaviour is UNCHANGED: the default build still warn-and-bundles at exit 0 �[33m 5962�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m prints the recorded warning, naming the hook and the forbidden pattern �[33m 6183�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m carries the warnings in --json under `bodyExtractionWarnings` �[33m 6073�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/i18n-extract-check-hint.e2e.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 60141�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m echoes this run's own argv with `--check` removed, flag for flag �[33m 6001�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m following the printed command makes the next --check pass (reported invocation) �[33m 17886�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m following the printed command makes the next --check pass (shell-hostile flag value) �[33m 17996�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m removes only the --check token, leaving spelling and order alone �[33m 6050�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m names a drifted bundle outside the cwd by its absolute path �[33m 6044�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m keeps the short relative form for an --out below the cwd �[33m 6158�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-package-registry-always-on.e2e.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[33m 25740�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/i18n-extract-metadata-forms-flag.e2e.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[33m 35683�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m honours --no-metadata-forms under --no-objects-only (the reported defect) �[33m 6043�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m keeps the baseline out of the stack module even with --metadata-forms ON �[33m 5840�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m is unchanged under the default --objects-only, in both flag positions �[33m 11724�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m --json mirrors the file set in BOTH flag states �[33m 12071�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/validate-json-warning-parity.e2e.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 36837�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m bare: all four structural advisories at once (the card's measurement) �[33m 12280�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m mixed: a registry advisory (structured) beside a structural one (string) �[33m 12352�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: a config with nothing to warn about is empty on BOTH faces �[33m 12199�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-organizations-mount-failure.e2e.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[33m 27064�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m refuses to boot with the ADR-0093 D5 "could not be loaded" diagnosis �[33m 6497�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m boots degraded when the operator explicitly sets OS_ALLOW_DEGRADED_TENANCY=1 �[33m 7971�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m surfaces the plugin's own error verbatim and exits, without the absent-package wording �[33m 6181�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m still exits 1 when OS_ALLOW_DEGRADED_TENANCY=1 is set — the hatch must not swallow a refusal �[33m 6410�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/start-signal-forwarding.e2e.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[33m 46645�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m os start: SIGTERM to the parent leaves no child process and a free port �[33m 11574�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m os dev (control): SIGTERM to the parent leaves no child process and a free port �[33m 11943�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m os start: SIGINT to the parent leaves no child process and a free port �[33m 11360�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m os dev (control): SIGINT to the parent leaves no child process and a free port �[33m 11767�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-organizations-host-resolution.e2e.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 20967�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m boots a walled posture with the package installed in the APP, not the framework �[33m 8154�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m still refuses to boot a walled posture when the app does not ship the package �[33m 6535�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses when the package is reachable only through NODE_PATH — the pnpm shim shape (#4719) �[33m 6273�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/create-example-retired.e2e.test.ts �[2m(�[22m�[2m11 tests�[22m�[2m)�[22m�[33m 28257�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/migrate-unloadable-host-config-exit.e2e.test.ts �[2m(�[22m�[2m9 tests�[22m�[2m)�[22m�[33m 44908�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/build-docs-step-count.e2e.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[33m 35443�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ABSENT `src/docs/`: the step line reads `0 collected`, and the artifact carries no docs �[33m 6175�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m EMPTY `src/docs/`: also `0 collected` — a present-but-empty directory is not a collection �[33m 6132�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m TWO docs: the step line reads `2 collected` — the other end of the pair �[33m 6617�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the three runs are DISTINGUISHABLE — the defect was that they were not �[33m 10182�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `--json` prints no step line at all and stays one JSON document �[33m 6329�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/build-package-docs-attachment.e2e.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 19672�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m attaches to packages[i].manifest.docs and ⛔ not to the artifact top level �[33m 6405�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m reports the whole collection on the step line, package directories named �[33m 6841�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a single-package project keeps its flat docs at the top level, with no packages[] invented �[33m 6420�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/migrate-exit-code.e2e.test.ts �[2m(�[22m�[2m5 tests�[22m�[2m)�[22m�[33m 27335�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m reports a boot failure as exit 1, not as a clean 0 �[33m 6371�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/generate-object-namespace-prefix.e2e.test.ts �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[33m 50329�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/generate-schema-retired.e2e.test.ts �[2m(�[22m�[2m10 tests�[22m�[2m)�[22m�[33m 31454�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/lint-generator-requires-eval.e2e.test.ts �[2m(�[22m�[2m7 tests�[22m�[2m)�[22m�[33m 44726�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses on the human face, naming the flag it requires �[33m 6410�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the --json face stays a machine face — one JSON document, nothing on stderr �[33m 6471�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m nothing is minted — the payload key set is exactly `error` �[33m 6397�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m is judged on the flag being TYPED, not on the path resolving �[33m 6035�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `--eval --generator` still loads the generator and runs live �[33m 6483�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m offline `--eval` with no generator is untouched �[33m 6467�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a plain project lint is untouched �[33m 6458�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/invocation-loudness.e2e.test.ts �[2m(�[22m�[2m11 tests�[22m�[2m)�[22m�[33m 20009�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/requires-retired-capability.e2e.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 13201�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m os validate --json: STACK_CAPABILITY_UNKNOWN, exit 1 — the retired token carries the prescription, the typo keeps the typo hint �[33m 6703�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m os build --json: STACK_CAPABILITY_UNKNOWN, exit 1 — the retired token carries the prescription, the typo keeps the typo hint �[33m 6494�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/qa-empty-glob-exit-code.e2e.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 18812�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m states the posture in --help �[33m 6310�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/validate-top-level-strict.e2e.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[33m 11087�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m exits non-zero WITHOUT --strict, naming the key and the near-miss �[33m 6352�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: the identical stack with the key spelled `flows` exits 0 �[33m 4730�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/generate-scaffolds-reach-stack.e2e.test.ts �[2m(�[22m�[2m11 tests�[22m�[2m)�[22m�[33m 54977�[2mms�[22m�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[2m Test Files �[22m �[1m�[32m38 passed�[39m�[22m�[90m (38)�[39m
@objectstack/cli:test: �[2m      Tests �[22m �[1m�[32m306 passed�[39m�[22m�[90m (306)�[39m
@objectstack/cli:test: �[2m   Start at �[22m 05:42:40
@objectstack/cli:test: �[2m   Duration �[22m 501.46s�[2m (transform 8.33s, setup 0ms, import 13.54s, tests 1443.38s, environment 5ms)�[22m
@objectstack/cli:test: 
@objectstack/cli:test: JSON report written to /home/runner/work/objectstack/objectstack/packages/cli/.nightly-tiers/vitest-report.json

  Tasks:    60 successful, 60 total
 Cached:    0 cached, 60 total
   Time:    11m38.204s 
Summary:    /home/runner/work/objectstack/objectstack/.turbo/runs/3K7t6tfLcOnT2bDLUsfC6nvZcZQ.json


Filed by .github/workflows/test-nightly-tiers.yml. Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    Contributor

    Triage: route — domain:devx → domain:cli · area:devpath · pm:queue. The red file is the CLI's stdout-purity e2e; check #21324 first

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-02T06:57Z. ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 1 of the domain:cli seat's session session_01VvcEokUG1tvVxkceYfR5XB (batch 3): priority:p1, to triage's route 5947030796. This card rides the in-flight dispatch of #21324 (claim 5948281021), as triage directs. No second dev and no second slot.
    Session: session_01VvcEokUG1tvVxkceYfR5XB
    Account: huangyiirene
    Branch: claude/issue-21324-verify-json-stdout (#21324's)
    Worktree: objectstack-issue-21324 (#21324's)
    Domain: domain:cli
    Seat: domain:cli#1
    File surface: #21324's claim surface, plus a read of packages/cli/test/json-stdout-purity.e2e.test.ts.

  3. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 1 of the domain:cli seat's session session_01VvcEokUG1tvVxkceYfR5XB (batch 3): priority:p1. This supersedes the riding claim 5948382312 on its own second branch. The #21324 dev's reproduction (os-dev-report on #21324, nightly_repro) shows the nightly red is not verify, so this card gets a separate dispatch. Landed as Fixes #21347.
    Session: session_01VvcEokUG1tvVxkceYfR5XB
    Account: huangyiirene
    Branch: claude/issue-21347-json-stdout-family
    Worktree: objectstack-issue-21347
    Domain: domain:cli
    Seat: domain:cli#1
    File surface, derived at origin/main 43e928dd4c:

    • The measured red (at f39760864c, matching the nightly log on 222ecc27f9, shard 1 only): packages/cli/test/json-stdout-purity.e2e.test.ts, the case "the family this contract has to hold across > is exactly the set listed here — a new member goes red until it is driven too".
    • The fix: add migrate audit-metadata-bodies to FAMILY with the arguments that drive it under --json, so the purity contract is held on the new member, not merely listed.
      • If driving it shows its --json stdout is not one document, fix that in the command.
      • ⛔ The failing case is never renamed, skipped or deleted, and the discovery is never narrowed.
    • Expected files: packages/cli/test/json-stdout-purity.e2e.test.ts only, plus any helper it already uses, if the drive needs a fixture.
    • Serial: 17.6.0: os migrate meta --stored (preview) and os migrate audit-metadata-bodies (dry run) boot the app's seed loader and write to application tables #21349 (this seat, in flight) edits packages/cli/src/commands/migrate/audit-metadata-bodies.ts. If this card's drive needs a command change, the dev stops and reports; that change then lands serially after 17.6.0: os migrate meta --stored (preview) and os migrate audit-metadata-bodies (dry run) boot the app's seed loader and write to application tables #21349. The test file alone is disjoint.
    • Changeset: none expected (skip-changeset, a test-only diff), unless a published file moves.
    • Close-out: the PR closes this card. The seat cites the nightly's next green run on main in the landed note.
      (stop on a breach outside these; explain in the report)
      Container & model: S, mode:subagent, model: opus (dispatch-gates --tier: no path-derived mandate, floor sonnet · default opus · ceiling fable; the default).
      Clause-②: no
      Thread-read: 5948382312
      Serial constraints cleared: PR #21381 (#21324) does not touch the purity test file. #21349 (in flight) owns migrate/audit-metadata-bodies.ts; this card touches it only on a measured need, after #21349 lands. No open PR touches packages/cli/test/json-stdout-purity.e2e.test.ts.
  4. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 21347,
      "status": "done",
      "branch": "claude/issue-21347-json-stdout-family",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/21394",
      "session": "session_01VvcEokUG1tvVxkceYfR5XB",
      "premise_still_valid": true,
      "summary": "Reproduced on origin/main 43e928dd4c with the claim's exact signature: discoverFamily() returns 14 members and FAMILY lists 13. The extra member is migrate audit-metadata-bodies, which calls bootSchemaStack( and declares json: Flags.boolean(. I added it to FAMILY in packages/cli/test/json-stdout-purity.e2e.test.ts with bare argv [], plus a comment on why that form. Its default is a read-only dry run, so the drive boots, reads sys_audit_log / sys_activity, writes nothing and emits one JSON document. All three per-member purity assertions now run on it (44/44, up from 41). No command change was needed, so audit-metadata-bodies.ts (#21349's surface) is untouched; discoverFamily and the failing case are unchanged. Verified that the newest Claim (5949465273) names this branch.",
      "tests": "All readings at HEAD 105d266829, the single commit, with git diff HEAD empty, unless stated. (1) Before, at 43e928dd4c with an unmodified tree: OS_TEST_TIERS=nightly pnpm --filter @objectstack/cli exec vitest run --maxWorkers=2 test/json-stdout-purity.e2e.test.ts gave 'Tests 1 failed | 40 passed (41)', 'AssertionError: expected [ 'meta resync', …(13) ] to deeply equal [ 'meta resync', …(12) ]', diff '+ \"migrate audit-metadata-bodies\"', TEST_EXIT=1. (2) After, the same command: 'Test Files 1 passed (1) / Tests 44 passed (44)', TEST_EXIT=0. (3) Sibling, OS_TEST_TIERS=nightly … test/config-miss-stdout-purity.e2e.test.ts: 'Tests 174 passed (174)', TEST_EXIT=0. (4) pnpm --filter @objectstack/cli typecheck: TYPECHECK_EXIT=0. check:test-typecheck: OK, 3 file(s) / 28 error(s) / 6 pinned signature(s) held in the ledger, unchanged. (5) Unit layer, pnpm --filter @objectstack/cli exec vitest run --project unit --maxWorkers=2: 'Test Files 2 failed | 244 passed (246) / Tests 3460 passed | 29 skipped'. Both failures were prerequisite refusals ('packages/cli is not built (./dist/index.js is absent)') in published-subpath-console.pin and published-subpath-hook-body.pin, so they are NOT MEASURED, not red. After a full cached turbo build (72 tasks, 71 cached), the two files re-ran: 'Tests 29 passed (29)', exit 0. integration layer: declared to CI. The diff touches no integration-tier file, spawn entry, or driver/kernel boot path. (6) Lint, narrowed to the 1 changed file. node node_modules/eslint/bin/eslint.js --no-inline-config --format json on that file: exit 0; JSON shows 1 file, 0 errors, 0 warnings. Population: eslint's own --print-config matches the file (5 rules). Invariance: no parserOptions.project or projectService anywhere in eslint.config.mjs (0 hits), so linting is not type-aware and this diff cannot move an untouched file's verdict. Repo-wide pnpm lint belongs to CI. (7) Ablation: the fix was committed first. node scripts/ablation-replace.mjs --anchor \"  'migrate audit-metadata-bodies': [],\" --delete, wrapping the nightly command above. Mutation landed: anchor 1 to 0, blob 2b249b4b8c54 to 4389d5638a10, and a child-side grep counted 0. Suite: 'Tests 1 failed | 40 passed (41)' with the original AssertionError signature. Restore: blob 2b249b4b8c54 == the HEAD blob, git diff HEAD empty, git status --porcelain empty. No dist was involved: vitest reads the test source directly.",
      "mcp_calls": "0 — no MCP tool used (GitHub reads were unauthenticated-proxy REST GETs; writes went through scripts/pm relay tools)",
      "api_writes": "3 — all via the fleet-write relay (each one POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create, POST /repos/objectstack-ai/objectstack/pulls, draft, created #21394, 5435 bytes sent and stored identical; (2) label-write --assign huangyiirene, POST /repos/objectstack-ai/objectstack/issues/21394/assignees, read back matched; (3) this os-dev-report comment, POST /repos/objectstack-ai/objectstack/issues/21347/comments. Plus 2 git pushes, which are not REST: the empty branch marker and 105d266829.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none (承接者:无) · noted, not filed. Observation: the reconciliation case (discoverFamily vs FAMILY) is pure source analysis with no boot, but it lives in a nightly-tier .e2e file. So the PR that added a family member (#21144) could not see it go red, and main learned only from the nightly. The pre-boot sibling (config-miss-stdout-purity.e2e) has the same shape. Also in the PR Acceptance notes. Dedupe words: json-stdout-purity reconciliation nightly-only; discoverFamily queue tier; stdout purity family pin per-PR"
      ],
      "repro": "before (43e928dd4c): 1 failed / 40 passed, the failing case being \"the family this contract has to hold across / is exactly the set listed here — a new member goes red until it is driven too\", signature identical to the claim. after (105d266829): 44 passed / 44. Wall-clock under the lock on a shared box: 130.4s and 140.2s",
      "drive": "member 'migrate audit-metadata-bodies' with extra argv [] (bare --json, the default dry run; no --apply/--yes). Fixture: the file's existing in-test fixture, unchanged (uncompiled objectstack.config.ts, one object jp_ticket, per-member SQLite file via OS_DATABASE_URL); no helper changed. Standalone probe of the same invocation: exit 0; stdout one JSON document {database, apply:false, report:{byObject:{sys_audit_log:{scanned:0,rewritten:0}, sys_activity:{scanned:0,rewritten:0}}, rewritten:0, scanned:0, failures:0}, duration}; stderr 115 lines including '[StandaloneStack] no compiled artifact', 'Bootstrap complete', 'Graceful shutdown complete' and the runner's '[stored-metadata-body-migration] would rewrite 0 of 0 …'",
      "gates": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands with no paths. The change set is 1 path (packages/cli/test/json-stdout-purity.e2e.test.ts, +6/-0) vs merge base 43e928dd4. It derived 50 commands, run one after another at 105d266829 with exit codes captured before any pipe. 49 exited 0. pnpm check:dual-build-cjs-loads exited 3 (PREREQUISITE NOT MET: 9 packages without dist/). After a full cached build at the same HEAD it re-ran with exit 0 ('105 published require entry point(s) across 66 package(s) load'). --ran over the first sweep: '50 derived, 49 run, 1 NOT-MEASURED, 0 UNRUN'. --ran keys on the first record, so it still shows that line as NOT-MEASURED; the re-run exit 0 is a separate reading. Named families: check:nul-bytes exit 0; check:cli-test-child-env exit 0; check:tier-file-adoption exit 0; check:cross-package-test-inputs exit 0. No gate script was edited, so no suite was owed for one.",
      "deviations": [
        "dispatch-gates printed a STALE TREE note. The shared origin/main ref was moved by a sibling fetch to 51550933db, at least 4 commits past base 43e928dd4c. That range changed .github/workflows/release.yml, scripts/release-pending-publish.mjs and scripts/release-verify-npm.mjs. The release.yml delta adds one release-script invocation inside a release job, so it places no PR gate on a packages/cli/test path. I did not re-derive on a merged tree and did not merge main into the branch.",
        "skip-changeset not written. The dispatch leaves it to Auto Label or the seat, and the write budget had one label-write, used for the assignee. Measured criterion: diff is test-only; @objectstack/cli files[] = dist, README.md, CHANGELOG.md, so nothing published moves. Auto Label completed and applied only size/xs. Check Changeset was in_progress at report time, so the seat may need to add skip-changeset.",
        "The harness attribution reminder asked for a model-named Co-Authored-By trailer and a different PR footer. I followed AGENTS.md and the dispatch instead: the model-free trailer pair on the commit, and the session-URL footer form on the PR body.",
        "Ran one standalone CLI probe of the new member under the verify lock before editing, to state its face accurately in the FAMILY comment. Scratchpad fixture only, no repo file."
      ],
      "files_changed": [
        "packages/cli/test/json-stdout-purity.e2e.test.ts (+6/-0: one FAMILY entry and a 5-line comment)"
      ],
      "ablations": "1, as described in tests (7). Remove the new FAMILY entry and the case goes red with the original signature (1 failed / 40 passed); restore is proven by blob == HEAD (2b249b4b8c54), an empty git diff HEAD and an empty porcelain. Ablation-replace's own verdict line: 'ok restored: blob == HEAD (2b249b4b8c54) and `git diff HEAD` is empty'.",
      "checks_after_push": "PR #21394, head 105d266829, read at report time: 31 check runs. completed/success (10): Auto Label, filter, Check PR Size, No other open PR may claim the same single-writer path, The card this PR closes must claim this branch, No other open PR may claim the same issue, Flag docs affected by code changes, Governed Surface Queue Guard, Check Documentation Links, Part-of PR must not also close its card. completed/skipped (3): Build Docs, Console Pin Gate, Packed-tarball smoke (opt-in). in_progress (18): Test Core 1-6, Build Core, Dogfood Regression Gate 1-3, Dogfood Verify CLI, Temporal Conformance, Lint & Repo Gates, the four Type Check lanes, Check Changeset. 0 failed. Commit status: Vercel success. Convergence is the PM's. The nightly tier this card is about runs only on main, so it is read on the next nightly after landing.",
      "cleanup": "Worktree /home/user/objectstack-issue-21347: node_modules is removed, then git worktree remove without --force, right after this comment posts."
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    Contributor

    ACCEPT: PR #21394 at 105d2668 (json-stdout-purity.e2e drives migrate audit-metadata-bodies). Fixes #21347; landing through the queue

    domain:cli seat · session_01VvcEokUG1tvVxkceYfR5XB · 2026-10-02T10:36Z

    • Contract faces: none of the three is hit. This is a test-only diff with Clause-②: no, so the seat self-reviews, and no isolated review is owed.
    • The fix: migrate audit-metadata-bodies (added by 336e191441, PR fix(security): close out the stored-metadata-body family — project or refuse every further read/copy/evaluate exit #21144) joins FAMILY with bare --json argv, its default dry run. All three purity assertions now run on it.
    • Readings:
      • Before, at 43e928dd4c: OS_TEST_TIERS=nightly on the file gives 1 failed / 40 passed, with the nightly's own signature.
      • After: 44 / 44.
      • Sibling: config-miss-stdout-purity.e2e is 174 / 174.
      • Ablation: dropping the entry turns the case red with the original signature; restore is proven by blob == HEAD.
    • Seat verification:
      • Checks on 105d2668, collapsed latest-per-name: 34 names, 28 success, 6 skipped, 0 red.
      • Check Changeset first failed for want of a changeset. The diff publishes nothing: @objectstack/cli files is dist, README.md, CHANGELOG.md. So the seat added skip-changeset, and the check's latest run is skipped by design.
      • check-governed-merges --pr 21394 reads not governed. The net diff is 1 file, +6 / −0.
    • Out-of-scope note: the reconciliation case is pure source analysis but lives in a nightly-tier file, so the PR that added a family member could not see it go red. The pre-boot sibling has the same shape. Acceptance notes; no product reach.
    • Close-out: the merge closes this card. The seat cites the nightly's next green run on main in the landed note, or reopens with the reading if it stays red.
    • Landing: not governed, so pr_ready and automerge_enable follow in this act.

    Generated by Claude Code

  6. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    Contributor

    Landed: PR #21394 → 56238d890d (json-stdout-purity.e2e drives migrate audit-metadata-bodies). Fixes #21347

    domain:cli seat · session_01VvcEokUG1tvVxkceYfR5XB · 2026-10-02T10:56Z

    • Landing reading: 56238d890d is on origin/main as a single-parent squash: 1 file, +6 / −0. Its git patch-id --stable is 1b7c1b7875db…, equal to the reviewed net diff at 105d2668.
    • The card: closed as completed by this merge. pm:dispatched is removed in the same act as this note.
    • The nightly reading is owed: the nightly runs on main only, on cron 29 5 * * * UTC, so the next sweep is due by the deadline on the card's own next by line. On the dev's reproduction, the file's only red case is now green (44 / 44). If that sweep is still red, the nightly's own marker files or refreshes a card, and this lane reads it.

    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdomain:clipriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions