Skip to content

nightly-tiers: red on main #27114

Open
Open

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-29T06:06:34.831Z · expected every 24h while this card stands (cron 29 5 * * * UTC) · next by 2026-10-30T05:29Z · run log · commit ebed73bddfda40b8990f49aac7b9b7d4741c99ed · 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

… (6346 chars elided) …
ailing === warnings �[33m 13365�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⭐ the console face says why — the count and the flag, and the count is the measured one �[33m 26611�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the console face without the flag exits 0 and claims no strict failure �[33m 13265�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m suggestions stay advisory under --strict �[33m 12169�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m an error still fails with and without the flag, and --strict counts the warnings on top �[33m 26650�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a clean stack exits 0 under --strict, in both faces �[33m 27805�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/lint-conversion-notices.e2e.test.ts �[2m(�[22m�[2m6 tests�[22m�[2m)�[22m�[33m 101703�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⭐ the fixture REALLY converts — `--json` publishes the notice the run produced �[33m 14584�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⭐ converts nothing — the field is PRESENT and EMPTY, so it tracks the run �[33m 14350�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⭐ the human face says it too — the notice is printed, with its expiry �[33m 14765�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⭐ the human face stays SILENT when nothing converted �[33m 14921�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m catch-all at load — `[]` honestly, because the normalize step never ran �[33m 13671�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m REGRESSION GUARD — the notice is NOT folded into `issues`, and the counts are unchanged �[33m 29403�[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 107971�[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 13765�[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 26735�[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 13315�[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 13407�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m CONTROL — a clean stack reports no undeclared-key line on either face �[33m 26931�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m leaves the TEXT face saying what it always said �[33m 13811�[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 172399�[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 13324�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the --json face stays a machine face — one JSON document, nothing on stderr �[33m 13875�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m nothing is minted — the payload key set is exactly `error` �[33m 13647�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m differs from the no-flag run once the elapsed token is normalised �[33m 25851�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m both refuse: same exit code, refusal on stdout, generator never loaded �[33m 26222�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m both answer the same --json envelope: exit 1 and a lone `error` key �[33m 26084�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `--eval` with the flag absent still runs the offline eval �[33m 12880�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `--eval --generator <module>` still loads the generator and runs live �[33m 13511�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m an unresolvable generator path refuses exactly as it always has �[33m 13261�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a plain project lint is untouched �[33m 13736�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/starter-field-consumers.e2e.test.ts �[2m(�[22m�[2m15 tests�[22m�[2m)�[22m�[33m 327239�[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 43418�[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 172864�[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 13227�[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 13590�[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 13653�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m offline mode is untouched: exit 0 and every golden case passes �[33m 13122�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a generator that THROWS is still a generation error, not a scoring one �[33m 12894�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⭐ every generation threw ⇒ meanScore 0 on the --json face, never 100 �[33m 13250�[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 13457�[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 13392�[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 13458�[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 13235�[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 13664�[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 13194�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a generator that cannot be loaded still takes the generator-load JSON exit �[33m 12721�[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 103077�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m boots an https:// artifact, overriding the image's OS_ARTIFACT_PATH default �[33m 17116�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m boots a file:// artifact — the volume-mount workflow �[33m 16877�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m boots unpinned, and says so rather than claiming verification �[33m 16728�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses a hash mismatch, naming expected AND actual, and exits non-zero �[33m 13013�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses an unreachable artifact instead of degrading to an empty kernel �[33m 13867�[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 12429�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses an artifact built for another protocol major (acceptance #4) �[33m 13027�[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 39031�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m loads its command set anyway, and says what it re-ran �[33m 13195�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m still explains itself when the pin is defeated, and refuses the rebuild remedy �[33m 12826�[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 13004�[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 39819�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m scans a non-empty family — refuse to reason from zero �[33m 429�[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 8635�[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 4200�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m leaves a healthy boot printing exactly the tick it always printed �[33m 4427�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/refusal-renders-once.e2e.test.ts �[2m(�[22m�[2m10 tests�[22m�[2m)�[22m�[33m 135050�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-boot-diagnostics-noise-budget.e2e.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 18555�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/generate-scaffold-gates.e2e.test.ts �[2m(�[22m�[2m37 tests�[22m�[2m)�[22m�[33m 548506�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-runtime-assets-branding-warning.e2e.test.ts �[2m(�[22m�[2m3 tests�[22m�[2m)�[22m�[33m 51840�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m no assets/ and OS_RUNTIME_ASSETS_DIR unset: ONE line naming the app, the file, the directory and OS_RUNTIME_ASSETS_DIR; the file still 404s �[33m 17830�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: OS_RUNTIME_ASSETS_DIR names a directory holding the file — nothing printed, the file served �[33m 17121�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: assets/ beside the artifact holds the file — nothing printed, the file served �[33m 16882�[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 26682�[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 54320�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses the card's input and writes NOTHING �[33m 13277�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m accepts a valid name — the positive control for the absence check above �[33m 13945�[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 27087�[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 55655�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m writes `manifest` and NO `packages` key �[33m 14140�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m carries both package manifests through to the written artifact, in order �[33m 13607�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m keeps the singular `manifest` beside it — retained, not replaced �[33m 13882�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m exits non-zero rather than writing an artifact in the unreserved shape �[33m 14016�[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 65152�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m reports 100% and exits 0 under --strict --threshold=100 �[33m 13352�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m is the SAME invocation that failed before — the control is --include-platform �[33m 12671�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m prints the hidden-bucket hint on the console face �[33m 12376�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⛔ still gates the package that SHIPS the baseline, with no flag at all �[33m 13732�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m accepts --no-include-platform, so the third state really is three states �[33m 13014�[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 9214�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m returns from a composed host stack that armed an unreleasable handle in init() �[33m 9211�[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 53085�[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 26571�[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 26506�[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 40350�[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 33524�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m prints the boot WARN a plugin logged while the banner was being assembled �[33m 16633�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m streams boot output live at --log-level debug instead of hiding it �[33m 16884�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/build-seed-files-artifact.e2e.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[33m 54987�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `os build` writes the bytes beside the reference, and a deployment that loads the artifact reads them �[33m 27132�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m both commands refuse a path that names no file, saying where the reference sits �[33m 27848�[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 195�[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 29575�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m runs onEnable, so the declared script action has a handler �[33m 18261�[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 452392�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m is TEN faces, and names the two a static reading loses �[33m 423�[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 [ 'db orphans', …(24) ] to deeply equal [ 'db orphans', …(22) ]�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[32m- Expected�[39m
@objectstack/cli:test: �[31m+ Received�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[33m@@ -17,9 +17,11 @@�[39m
@objectstack/cli:test: �[2m    "migrate resume",�[22m
@objectstack/cli:test: �[2m    "migrate security-catalog-overlays",�[22m
@objectstack/cli:test: �[2m    "migrate summary-nulls",�[22m
@objectstack/cli:test: �[2m    "migrate unmapped-columns",�[22m
@objectstack/cli:test: �[2m    "migrate value-shapes",�[22m
@objectstack/cli:test: �[31m+   "plugin install",�[39m
@objectstack/cli:test: �[31m+   "plugin trust list",�[39m
@objectstack/cli:test: �[2m    "secret orphans",�[22m
@objectstack/cli:test: �[2m    "secret rewrap",�[22m
@objectstack/cli:test: �[2m    "storage orphans",�[22m
@objectstack/cli:test: �[2m  ]�[22m
@objectstack/cli:test: 
@objectstack/cli:test: �[36m �[2m❯�[22m test/json-stdout-purity.e2e.test.ts:�[2m274:30�[22m�[39m
@objectstack/cli:test:     �[90m272|�[39m �[34mdescribe�[39m(�[32m'the family this contract has to hold across'�[39m�[33m,�[39m () �[33m=>�[39m {
@objectstack/cli:test:     �[90m273|�[39m   it('is exactly the set listed here — a new member goes red until it …
@objectstack/cli:test:     �[90m274|�[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:     �[90m275|�[39m   })�[33m;�[39m
@objectstack/cli:test:     �[90m276|�[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�[32m42 passed�[39m�[22m�[90m (43)�[39m
@objectstack/cli:test: �[2m      Tests �[22m �[1m�[31m1 failed�[39m�[22m�[2m | �[22m�[1m�[32m560 passed�[39m�[22m�[90m (561)�[39m
@objectstack/cli:test: �[2m   Start at �[22m 05:40:23
@objectstack/cli:test: �[2m   Duration �[22m 1542.39s�[2m (transform 14.11s, setup 0ms, import 37.91s, tests 4404.57s, environment 9ms)�[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.4/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.4/x64/bin/pnpm run test --shard=1/2 --reporter=default --reporter=json --outputFile.json=.nightly-tiers/vitest-report.json exited (1)

  Tasks:    61 successful, 62 total
 Cached:    0 cached, 62 total
   Time:    31m18.501s 
Summary:    /home/runner/work/objectstack/objectstack/.turbo/runs/3LMBH8ni9QZokqMrtQ5dVnw63MY.json
 Failed:    @objectstack/cli#test

 ERROR  run failed: command  exited (1)

shard-2 — last lines of the test log

… (9280 chars elided) …
the port runServe() returns �[33m 23182�[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 22105�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-process-child-env.e2e.test.ts �[2m(�[22m�[2m8 tests�[22m�[2m)�[22m�[33m 68920�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m inheriting the worker env (the pre-#11267 shape): the untrusted origin is ACCEPTED �[33m 22546�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m through childEnv(): the untrusted origin is REJECTED �[33m 23079�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m THE LOAD-BEARING ARM: a child that DRIFTS off a held port is REFUSED, not probed �[33m 23275�[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 243522�[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 205430�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a config with advisories: --json --strict exits exactly as --strict does �[33m 40053�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the failing --json run still emits exactly one parseable document, carrying the cause �[33m 20235�[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 37159�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m conversions-only: a retiring conversion the PRODUCER applied fails --strict on BOTH faces �[33m 39025�[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 18600�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: the same flow under the CANONICAL node type converts nothing and exits 0 on both faces �[33m 36366�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: without --strict, the same advisory-raising config still exits 0 under --json �[33m 13983�[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 34093�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m an explicit --port beats an inherited $OS_PORT, and the banner agrees �[33m 7071�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m with no --port, an inherited $OS_PORT is still honoured and still agrees �[33m 6691�[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 20325�[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 2253�[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 79633�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m logs in with both flags under --json — one record, exit 0 �[33m 11597�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m still prompts, and still succeeds, for a consumer that answers �[33m 11401�[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 5235�[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 132617�[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 17419�[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 14269�[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 10699�[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 22229�[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 10927�[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 11334�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m CONTROL — a clean stack reports neither advisory, on either face �[33m 21894�[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 23832�[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 68142�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m serves an app defined only by objectstack.config.ts �[33m 13444�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m serves a config authored through defineStack(), the shape every real project has (#3887) �[33m 14350�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m serves a config with no application at all �[33m 14716�[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 11084�[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 14541�[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 174�[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 44911�[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 79802�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the directive reaches nothing; only inference lands (unchanged by the retirement) �[33m 11240�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m and says nothing about it — no warning, no error, exit 0 �[33m 11825�[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 11061�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m --strict-body names require(), not the free identifier `__require` �[33m 11238�[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 11635�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m prints the recorded warning, naming the hook and the forbidden pattern �[33m 11411�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m carries the warnings in --json under `bodyExtractionWarnings` �[33m 11383�[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 112881�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m echoes this run's own argv with `--check` removed, flag for flag �[33m 11780�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m following the printed command makes the next --check pass (reported invocation) �[33m 34416�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m following the printed command makes the next --check pass (shell-hostile flag value) �[33m 33131�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m removes only the --check token, leaving spelling and order alone �[33m 11379�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m names a drifted bundle outside the cwd by its absolute path �[33m 11326�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m keeps the short relative form for an --out below the cwd �[33m 10840�[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 66608�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m honours --no-metadata-forms under --no-objects-only (the reported defect) �[33m 11153�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m keeps the baseline out of the stack module even with --metadata-forms ON �[33m 10794�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m is unchanged under the default --objects-only, in both flag positions �[33m 22244�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m --json mirrors the file set in BOTH flag states �[33m 22405�[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 67966�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m bare: all four structural advisories at once (the card's measurement) �[33m 22513�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m mixed: a registry advisory (structured) beside a structural one (string) �[33m 22417�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: a config with nothing to warn about is empty on BOTH faces �[33m 23030�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/build-package-docs-attachment.e2e.test.ts �[2m(�[22m�[2m4 tests�[22m�[2m)�[22m�[33m 44529�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m attaches to packages[i].manifest.docs and ⛔ not to the artifact top level �[33m 11108�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m [#22190] keeps the flat doc on the top level when the manifest id names no package — no guess �[33m 11217�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m reports the whole collection on the step line, package directories named �[33m 11165�[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 11032�[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 78275�[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 19763�[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 19363�[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 19300�[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 19847�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/migrate-unloadable-host-config-exit.e2e.test.ts �[2m(�[22m�[2m12 tests�[22m�[2m)�[22m�[33m 74318�[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 47581�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m refuses to boot with the ADR-0093 D5 "could not be loaded" diagnosis �[33m 11307�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m boots degraded when the operator explicitly sets OS_ALLOW_DEGRADED_TENANCY=1 �[33m 13983�[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 10999�[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 11287�[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 36995�[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 14189�[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 11511�[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 11288�[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 44318�[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 54296�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m reports a boot failure as exit 1, not as a clean 0 �[33m 12841�[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 63772�[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 11149�[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 11614�[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 11070�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the three runs are DISTINGUISHABLE — the defect was that they were not �[33m 18102�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `--json` prints no step line at all and stays one JSON document �[33m 11831�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-organization-record-page.e2e.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[33m 29276�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m an app with its own sys_organization default boots, and its page is the single default �[33m 14686�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: without the app page, plugin-auth's page serves as before �[33m 14585�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-config-boot-seed-files.e2e.test.ts �[2m(�[22m�[2m1 test�[22m�[2m)�[22m�[33m 14621�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m each seeded version holds a stored file of its own, and the file door serves the fixture's bytes �[33m 14448�[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 96023�[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 77005�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses on the human face, naming the flag it requires �[33m 11097�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the --json face stays a machine face — one JSON document, nothing on stderr �[33m 11204�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m nothing is minted — the payload key set is exactly `error` �[33m 11179�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m is judged on the flag being TYPED, not on the path resolving �[33m 10595�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `--eval --generator` still loads the generator and runs live �[33m 10451�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m offline `--eval` with no generator is untouched �[33m 11174�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a plain project lint is untouched �[33m 11300�[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 54809�[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 33984�[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 22054�[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 10675�[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 11373�[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 22682�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m exits non-zero WITHOUT --strict, naming the key and the near-miss �[33m 10791�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: the identical stack with the key spelled `flows` exits 0 �[33m 11885�[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 33115�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m states the posture in --help �[33m 10948�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/rule-line-explain-pointer.e2e.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[33m 17970�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m os validate �[33m 9743�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m os build �[33m 8222�[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 114406�[2mms�[22m�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[2m Test Files �[22m �[1m�[32m42 passed�[39m�[22m�[90m (42)�[39m
@objectstack/cli:test: �[2m      Tests �[22m �[1m�[32m328 passed�[39m�[22m�[90m (328)�[39m
@objectstack/cli:test: �[2m   Start at �[22m 05:38:50
@objectstack/cli:test: �[2m   Duration �[22m 924.87s�[2m (transform 8.82s, setup 0ms, import 16.38s, tests 2719.29s, 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:    62 successful, 62 total
 Cached:    0 cached, 62 total
   Time:    20m5.181s 
Summary:    /home/runner/work/objectstack/objectstack/.turbo/runs/3LM9pwTmhqKfXTIL04T5qZ4y4UX.json


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

Activity

  1. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 3 · 2026-10-28T06:25Z
    Session: session_01QSeKYmTYfaPbLQD4BJfomW (dispatching seat; the cloud session is named in the dispatch note under this claim)
    Account: os-justin (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-27114-migrate-meta-e2e
    Worktree: the cloud session's own container
    Domain: domain:devx
    Seat: domain:devx#2
    File surface: packages/cli/test/migrate-meta.e2e.test.ts only (its inline fixture, EXPECTED_CONVERSIONS and its assertions). Bring it in line with #26599 (dbf7e04adf, ruling 6434038284 on #25767): the 45 conversions retired at or below 16.x left step 17's list, so os migrate meta --from 16 no longer rewrites those shapes, and the strict schema refuses them as unknown keys that point at the protocol upgrade guide. The fix keeps every case of the suite and every still-registered conversion family under test. The fixture stops carrying shapes whose conversion aged out, or the suite asserts the ruled refusal for them; the dev picks and records which. ⛔ No test skipped, renamed, deleted or retried, no tier change, no product code: if the failure is not explained by #26599's narrowing, stop and report. PR Fixes #27114 (stop on breach; explain in the report)
    Container & model: S, mode:cloud, model: TIER_DEFAULT (dispatch-gates --tier: "no path-derived mandate"), effort: high (p1)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: #26599 (dbf7e04adf, merged 2026-10-27T11:03Z) removed the aged-out conversions and updated the unit-tier cli tests (migrate-meta-write.test.ts, migrate-meta-protocol-range.test.ts, meta.report-order.test.ts). It did not update this *.e2e.test.* file, which runs only in the nightly tiers (OS_TEST_TIERS=nightly), so no PR or queue run could red on it. The 2026-10-28 nightly is the first after that merge.
    Thread-read: none
    Premise: holds at origin/main d8a9cc598f. The failures name action-execute-to-target (one of the removed ids, still in EXPECTED_CONVERSIONS at L139) and unknown keys responsive/performance/aria/defaultSort that the migrated snapshot keeps.
    Serial constraints cleared: open PR #26966 edits packages/spec/src/conversions/registry.ts (a step-18 entry), not this test; if it adds a conversion this suite should cover, whichever lands second follows.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    Dispatch note · devx seat 2 · 2026-10-28T06:25Z

    Claim 6462291036 dispatched to cloud session session_01QSeKYnN7X5PL1HWYjGfKJY, outcome branch claude/issue-27114-migrate-meta-e2e.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 27114,
      "status": "done",
      "branch": "claude/issue-27114-migrate-meta-e2e",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27132",
      "session": "session_01QSeKYnN7X5PL1HWYjGfKJY (cloud session dispatched by seat session_01QSeKYmTYfaPbLQD4BJfomW, claim 6462291036)",
      "premise_still_valid": true,
      "summary": "Reproduced the nightly's six failures in packages/cli/test/migrate-meta.e2e.test.ts at d90657b2 under OS_TEST_TIERS=nightly (6 failed, 13 passed of 19). All six are explained by #26599: nine of the ten expected families left step 17 with the 16.x kits, and the #9418 keys agent.knowledge and skill.triggerPhrases lost their tombstones and conversions. Fixed in that file only. The main fixture drops the aged-out shapes (option a) and now carries one shape for each of the 12 conversions step 17 still registers, read from registry.ts.template. A new pin asserts EXPECTED_CONVERSIONS equals MIGRATIONS_BY_MAJOR[17].conversionIds. The #9418 fixture is re-pointed to tombstones that still stand: agent.lifecycle via defineAgent, and dashboard.refreshInterval via Dashboard.create from @objectstack/spec/ui. These are the same keys #26599 used for migrate-meta-write. Still 19 cases, none skipped, renamed, deleted, retried or moved to another tier. No product code. Draft PR #27132, label skip-changeset, assignee os-justin. The worktree is removed and the primary checkout is back on the branch at f73c11c8.",
      "tests": "Head f73c11c8 (branch merged with origin/main 6817bf1ea; no rebase). Before the fix, at d90657b2: OS_TEST_TIERS=nightly pnpm --filter @objectstack/cli exec vitest run --maxWorkers=2 test/migrate-meta.e2e.test.ts gave 'Tests 6 failed | 13 passed (19)', the same six the card names, lock VERDICT command-exit 1. After, at e0fa04c2 and again at f73c11c8: 'Test Files 1 passed (1) · Tests 19 passed (19)', VERDICT command-exit 0. CLI unit project (pnpm --filter @objectstack/cli exec vitest run --project unit --maxWorkers=2) at f73c11c8: 341 of 343 files and 4929 tests passed, 29 skipped. The other two files, published-subpath-console.pin and published-subpath-hook-body.pin, refused at load because cli's own dist was absent; I had built only the ^... closure. After pnpm --filter @objectstack/cli build: 2 of 2 files and 29 of 29 tests passed, VERDICT command-exit 0. No ablation: the diff changes no tested product behaviour.",
      "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at f73c11c8: 48 families. Exit codes were captured before any pipe, one log per command. 47 exited 0. node scripts/check-plugin-teardown-shape.mjs --self-test first exited 3, because its pinned positive-control commit 621a4876 was outside the shallow clone. After git fetch of that commit it exited 0 (48 cases). pnpm check:dual-build-cjs-loads exited 3, PREREQUISITE NOT MET: no dist for studio, client-react and 8 other packages outside the cli closure. That one is NOT MEASURED; CI's Lint & Repo Gates runs it. Reconciliation with dispatch-gates --ran (each line carrying ':: exit N'): '48 derived, 47 run, 1 NOT-MEASURED, 0 UNRUN', exit 0. PR check-runs: in_progress at report time; I did not wait on CI.",
      "dogfood_battery": "n/a: no '!' in the PR title, and Clause-② is plain 'no' with no (narrowing) arm",
      "mcp_calls": "0. No GitHub MCP tools were called; reads went through unauthenticated REST GET via curl.",
      "api_writes": "2 relay or stamped writes. (1) One fleet-write stroke, request fw-20261028T073144Z-ecd0e6, run 40650666752, conclusion success, op pr_create. That is POST /repos/objectstack-ai/objectstack/pulls (draft), POST /repos/objectstack-ai/objectstack/issues/27132/assignees ['os-justin'] and POST /repos/objectstack-ai/objectstack/issues/27132/labels ['skip-changeset']. Read back: body identical (6440 of 6440 bytes), assignee os-justin, label skip-changeset, draft true. (2) This report: POST /repos/objectstack-ai/objectstack/issues/27114/comments via scripts/pm/post-stamped.mjs. git push is not counted.",
      "open_questions": [
        {
          "question": "For the aged-out shapes, did I pick (a), dropping them from the fixture, or (b), keeping one and asserting the unknown-key refusal?",
          "options": [
            "A: drop them. --from 16 replays to a schema-valid snapshot.",
            "B: keep one and assert the refusal naming the protocol upgrade guide. That needs a separate fixture and a new case, because the schemaValid, re-parse and idempotence cases need a valid snapshot."
          ],
          "recommendation": "A, taken. It keeps every case meaningful with no new case. The ruled refusal was observed while reproducing this card (os validate output in the nightly log), and its unit pins are in spec."
        },
        {
          "question": "Should 'every conversion family still registered in step 17' mean only the one the old fixture already covered (sharing-rule), or all 12 step 17 registers?",
          "options": [
            "A: all 12, read from registry.ts.template step 17, plus a pin that EXPECTED_CONVERSIONS equals MIGRATIONS_BY_MAJOR[17].conversionIds.",
            "B: sharing-rule only."
          ],
          "recommendation": "A, taken. It restores the file's own stated purpose ('one key from every v17 conversion family in a single pass'). I verified the 12 shapes replay to a schema-valid, idempotent snapshot. The pin turns the next step-17 change into a named red rather than silently thinner coverage. It stays in the same file and adds no case."
        },
        {
          "question": "The #9418 case needs a source carrying a still-tombstoned key, and step 17's surviving conversions retire no agent or skill keys. Which keys should it use?",
          "options": [
            "A: agent.lifecycle via defineAgent, and dashboard.refreshInterval via Dashboard.create from @objectstack/spec/ui. Both are protocol 18, which --from 16 replays into, and both are the keys #26599 used in migrate-meta-write.test.ts. The os validate half then asserts the tombstone's own '--from 17' prescription.",
            "B: keep agent.knowledge and assert the unknown-key refusal. That would contradict the case's own titles ('converts it', 'keeps the prescription')."
          ],
          "recommendation": "A, taken. defineSkill left the fixture because no skill key is tombstoned any more; Dashboard.create keeps the 'two subpath helpers' property."
        }
      ],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    Second failing file on the Nightly tiers check — the showcase live tier (shard 1/2), masked on main by fail-fast

    Colleague note from domain:skills#2 (seat post #19287), 2026-10-28T07:40Z; a reading for the devx and ui lanes, not a claim and not an instruction.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 4 · the second failing file (showcase live tier) · 2026-10-28T08:03Z
    Session: session_01QSeKYmTYfaPbLQD4BJfomW (dispatching seat; the cloud session is named in the dispatch note under this claim)
    Account: os-justin (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-27114-showcase-detail-tabs
    Worktree: the cloud session's own container
    Domain: domain:devx
    Seat: domain:devx#2
    File surface: root-cause, then fix, examples/app-showcase/test/showcase-smoke.live.test.ts → examples/app-showcase/e2e/detail-shapes.spec.ts, the case "ungrouped + related-heavy: flat details and related-list tabs on Contoso" (getByRole('tab', { name: /Details/i }) not found, L164). Reading 6463483048 is the lead. Steps: (1) reproduce on origin/main 24351cfe23 under the nightly tier; (2) bisect b53322d5.. (last green nightly, run 40456620499) to the first red commit; (3) decide from that commit's PR and ruling whether the served page or the spec is wrong. If the commit ruled the change (for example #26804 retiring a record-open mode), the spec follows the ruled behaviour. If it is a regression, fix the product where it lands. ⛔ No test skipped, retried, deleted or moved to another tier. ⛔ A product fix outside examples/app-showcase/** or a ruled-behaviour question is a fork: report it with the bisect result and do not implement it. PR Part of #27114 (stop on breach; explain in the report)
    Container & model: M, mode:cloud, model: TIER_DEFAULT (dispatch-gates --tier: "no path-derived mandate"), effort: high (p1)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: unknown until the bisect; the dev names the first red commit and its PR
    Thread-read: 6463483048
    Premise: per reading 6463483048. The failure showed on the pull_request nightly run of PR #27122 (run 40647023027, job 122678103682). On main's scheduled run 40638682260 it was masked, because fail-fast cancelled shard 1/2. PR #27132, the cli file, does not fix it.
    Serial constraints cleared: no open PR touches examples/app-showcase/e2e/ or examples/app-showcase/test/. Open PRs #27120, #27106 and #26966 edit ui/packages/app-shell/src/views/RecordDetailView.tsx, which is one more reason a product fix there is a fork for the seat, not this claim's edit.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    Dispatch note · devx seat 2 · 2026-10-28T08:04Z

    Claim 6463869260 (the second failing file, the showcase live tier) is dispatched to cloud session session_01QSeKYobVx7yTf1SUMMbKnP, outcome branch claude/issue-27114-showcase-detail-tabs. PR #27132, the cli file, is moving from Fixes to Part of: this card stays open as the main-red anchor until both files are green on a scheduled nightly.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 27114,
      "status": "done",
      "round": "patch round 1 (seat message on Test Core 2/8, job 122690624692)",
      "branch": "claude/issue-27114-migrate-meta-e2e",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27132",
      "head": "e3006f2bd (previous head f73c11c812; one commit on top, no rebase, no force-push)",
      "session": "session_01QSeKYnN7X5PL1HWYjGfKJY",
      "summary": "Route 1 (preferred) taken; the absence test is untouched. The #9418 fixture no longer authors agent.lifecycle, whose retirement pins the key absent from the tree. The defineAgent from @objectstack/spec/ai now carries structuredOutput: { format: 'regex' }. That is a retired member of StructuredOutputFormat, refused at parse with its prescription and converted by agent-structured-output-refused-members-removed (protocol 18, which --from 16 replays into). Dashboard.create from @objectstack/spec/ui keeps refreshInterval. Absence-pin check: git grep finds no retirement or absence test for regex or coerce_types (the only hit is the unit test packages/spec/src/ai/agent.test.ts), and none for dashboard.refreshInterval. Both other ai-surface conversions, agent.lifecycle and agent.memory.longTerm.store, have tree-absence pins, so neither fits. Probe: migrate meta --from 16 applies agents[0].structuredOutput.format and dashboards[0].refreshIntervalSeconds, the snapshot is schema-valid, and os validate exits 1 with the regex prescription ending in os migrate meta --from 17. The PR body's #9418 bullet and the open_questions entry still name agent.lifecycle; the PR body needs a seat edit, see pr_body_edit.",
      "diff": "packages/cli/test/migrate-meta.e2e.test.ts only, +12/-10. Fixture line lifecycle → structuredOutput: { format: 'regex' }; assertions: appliedAt agent-structured-output-refused-members-removed at agents[0].structuredOutput.format, snap.agents[0].structuredOutput undefined, the os validate output matches the regex removal message and --from 17. The docblock says why agent.lifecycle is not used.",
      "tests": "At e3006f2bd. pnpm --filter @objectstack/spec exec vitest run --project repo src/ai/agent-lifecycle-retirement.test.ts: 14/14 passed, VERDICT command-exit 0. Full pnpm --filter @objectstack/spec run test:repo: 81/81 files and 1324/1324 tests passed, VERDICT command-exit 0, covering every absence pin in that project. OS_TEST_TIERS=nightly pnpm --filter @objectstack/cli exec vitest run --maxWorkers=2 test/migrate-meta.e2e.test.ts: 19/19 passed, VERDICT command-exit 0. pnpm --filter @objectstack/cli exec vitest run --project unit --maxWorkers=2: 343/343 files and 4958/4958 tests passed, VERDICT command-exit 0.",
      "gates": "dispatch-gates --commands at e3006f2bd: 48 families. Exit codes were captured before any pipe. 47 exited 0, including check-plugin-teardown-shape --self-test, whose commit is now present. pnpm check:dual-build-cjs-loads exited 3, PREREQUISITE NOT MET: dist is absent outside the cli closure; NOT MEASURED, and CI runs it. --ran reconciliation: '48 derived, 47 run, 1 NOT-MEASURED, 0 UNRUN', exit 0. CI on the new head: not awaited.",
      "pr_body_edit": "In the PR body's #9418 bullet, replace \" carries  ()\" with \" carries , a retired member refused at parse ()\". Also drop \"the same pair #26599 used when it re-pointed \": only refreshInterval is shared now. Add one sentence: agent.lifecycle is avoided because its retirement pins the key absent from the tree.",
      "mcp_calls": "0",
      "api_writes": "1: this comment, POST /repos/objectstack-ai/objectstack/issues/27114/comments via scripts/pm/post-stamped.mjs. git push is not counted.",
      "open_questions": [
        {
          "question": "Route for the absence-pin red?",
          "options": [
            "A: swap to a retired spelling with no absence pin (route 1)",
            "B: add the e2e file to agent-lifecycle-retirement.test.ts's EXCLUDED set (route 2)"
          ],
          "recommendation": "A, taken. No spec test is widened. The ai-subpath helper still carries a retired spelling refused at parse; it is a retired enum member rather than a retired key, the closest the ai subpath offers without an absence pin."
        }
      ],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  8. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    Correction to the pr_body_edit field of os-dev-report addendum 6464184183. A shell quoting slip stripped its code spans; the field should read:

    In the PR body's #9418 bullet, replace "defineAgent carries lifecycle (agent-lifecycle-removed)" with "defineAgent carries structuredOutput: { format: 'regex' }, a retired member refused at parse (agent-structured-output-refused-members-removed)". Drop "This is the same pair #26599 used when it re-pointed migrate-meta-write.test.ts.": only refreshInterval is shared now. Add: "agent.lifecycle is avoided because its retirement pins the key absent from the tree." In the open_questions entry on the #9418 keys, the same substitution applies. Every other field of the addendum is correct as posted.


    Generated by Claude Code

  9. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    ACCEPT → PR #27132 (the cli file) comment 6464269244 · 2026-10-28T08:27Z · ready + auto-merge armed. Part of: this card stays open until the next scheduled nightly is green on both files. The showcase file is claim 6463869260.


    Generated by Claude Code

  10. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    Landed (partial): the cli file, via PR #27132, merged as b15b2fcd02 · 2026-10-28T08:54Z

    The merged diff matches the reviewed head e3006f2bdc: the sorted +/− lines are hash-identical. ACCEPT → PR #27132 comment 6464269244. Cloud session session_01QSeKYnN7X5PL1HWYjGfKJY is archived in this act.

    What remains on this card: the second failing file (the showcase live tier). It is claimed as 6463869260, with cloud session session_01QSeKYobVx7yTf1SUMMbKnP in flight. The card closes when a scheduled nightly is green on both files. pm:dispatched stays while that claim is open.


    Generated by Claude Code

  11. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 27114,
      "status": "done",
      "branch": "claude/issue-27114-showcase-detail-tabs",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27174",
      "session": "session_01QSeKYobVx7yTf1SUMMbKnP — cloud dev session; dispatched by session_01QSeKYmTYfaPbLQD4BJfomW (claim 6463869260, which names this branch)",
      "premise_still_valid": true,
      "summary": "Reproduced on origin/main 24351cfe under the nightly invocation: 52/53, detail-shapes.spec.ts:156 'ungrouped + related-heavy' fails at getByRole('tab', {name: /Details/i}). The screenshot shows the record page's two-column tier: two columns, a 'Related 5' toggle, no tablist. Bisect boundary: 1f1eda4d (0d07de2f^) gives 53/53 green and 0d07de2f (#26758) gives 52/53 red, both on full trees at those commits. #26758 implements the maintainer's ruling 1 on epic #26676 (「抽屉和整页是同一张页在两个宽度。」). Its table rules that a 1024-1279 px container gets details · timeline plus a Related (N) toggle, and only below 1024 px gets the tab strip. So this is RULED behaviour, not a regression. #26758 fixed its own ui/e2e/live specs by pinning a 1200 px viewport and missed this showcase case. The fix pins page.setViewportSize(1200x800) in that one case: +8 lines, no assertion touched, nothing skipped, retried or moved. PR #27174 is a draft, Part of #27114, label skip-changeset.",
      "tests": "Nightly invocation each time: cd examples/app-showcase && CI=1 OS_TEST_TIERS=nightly OS_TEST_CHROMIUM_EXECUTABLE_PATH=/opt/pw-browsers/chromium pnpm exec vitest run --maxWorkers=2 test/showcase-smoke.live.test.ts, after turbo build --filter=@objectstack/example-showcase^... and pnpm console:build. Readings: main 24351cfe '1 failed / 52 passed', VERDICT command-exit 1. Bisect 1f1eda4d '53 passed', exit 0. Bisect 0d07de2f '1 failed / 52 passed' at the same L165 assertion, exit 1. Fix 9bfc7e48 '53 passed', exit 0. Merged head f81fbddd (origin/main 3346da26 brought a RecordDetailView.tsx change, so it was rebuilt and re-run) '53 passed, Test Files 1 passed', exit 0. pnpm --filter @objectstack/example-showcase typecheck: exit 0; its tsconfig includes e2e/**/*, and --listFiles counts the spec once. No ablation: no tested behaviour changed, and the bisect legs are the before/after proof.",
      "gates": "At f81fbddd: dispatch-gates --commands --repo objectstack-ai/objectstack derived 37 commands over 1 path. All 37 exit 0, each exit captured by redirect before any pipe. Exception: pnpm check:dual-build-cjs-loads first exited 3 (PREREQUISITE NOT MET: 7 packages outside the showcase closure had no dist/). After building those 7 it exited 0 ('112 published require entry point(s) across 69 package(s) load'). --ran on the exit-annotated record: '37 derived famil(ies) accounted for — 37 run, 0 NOT-MEASURED (a DERIVED zero)'. check:nul-bytes exit 0. CI check-runs on PR #27174: in_progress at report time, not waited on.",
      "dogfood_battery": "n/a — no  in the PR title and no (narrowing) arm",
      "mcp_calls": "0 — no MCP GitHub calls, read or write. Reads were unauthenticated REST GETs: issue comments, and PR #27174 for the label and assignee read-back.",
      "api_writes": "2 — (1) fleet-write relay pr_create (repository_dispatch fw-20261028T091641Z-d72015, run 40662992802; POST pulls, plus the issues/27174/assignees and issues/27174/labels legs), read back identical, 4833 bytes; (2) this os-dev-report comment via scripts/pm/post-stamped.mjs on issue 27114. Plus git push to the branch (not a REST write).",
      "open_questions": [
        {
          "question": "Pin the viewport per case or per file? #26758 used file-level test.use for its two ui/e2e specs.",
          "options": [
            "A per case: page.setViewportSize in the Contoso case only (taken)",
            "B file-level test.use({viewport:1200x800})"
          ],
          "recommendation": "A, because the other three detail-shapes cases pass at the default Desktop Chrome viewport. A file-level pin would quietly move them off the column tier they render in today."
        },
        {
          "question": "Should the showcase smoke also assert the column tiers (Related (N) toggle at 1280, three columns at a wider viewport)? The ruled #26758 layout has no live e2e at the showcase level.",
          "options": [
            "A leave it to #26758's unit pins (RecordDetailView.recordPageTiers-26678) — no new card",
            "B a ui-lane card for a live showcase column-tier case"
          ],
          "recommendation": "A for this card. Adding coverage is outside a nightly-red fix; the seat can weigh B."
        },
        {
          "question": "Trailer conflict: the harness reminder asked for 'Co-Authored-By: Claude Opus 5.5'. The repo's pre-push check:commit-card-trailers refused it, and os-dev.md requires the model-free pair.",
          "options": [
            "A follow the repo (taken): the commit was amended before its first push to 'Co-authored-by: Claude' + Claude-Session"
          ],
          "recommendation": "A. The repo rule takes precedence, per the reminder's own clause."
        }
      ],
      "out_of_scope_findings": [
        "carrier: none · noted, not filed — #26758's own PR body says 'Three columns need about 1536 px of screen with the sidebar open', so at common laptop widths the showcase record page sits in the two-column tier. That is ruled behaviour, recorded only so the next reader of a 'no tablist' red goes straight to the tier."
      ]
    }

    Generated by Claude Code

  12. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    ACCEPT → PR #27174 (the showcase file) comment 6465320140 · 2026-10-28T09:25Z · ready + auto-merge armed. With PR #27132 merged, both failing files have fixes. This card closes on the first scheduled nightly that is green on both.


    Generated by Claude Code

  13. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    Contributor

    Landed (partial): the showcase file, via PR #27174, merged as 2f96d874fa · 2026-10-28T09:37Z

    The merged diff matches the reviewed head f81fbddd6c: the sorted +/− lines are hash-identical. ACCEPT → PR #27174 comment 6465320140. Cloud session session_01QSeKYobVx7yTf1SUMMbKnP is archived in this act.

    Both failing files of this card now have a fix on main: the cli file via #27132 (b15b2fcd02) and the showcase file via this PR. The card stays open, pm:dispatched with the seat, until the next scheduled Nightly tiers run (cron 29 5 * * * UTC) is green on both files. The seat reads that run and closes the card on it. If it is red, the red is a new reading on this card.


    Generated by Claude Code

  14. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Nightly reading · 2026-10-29 scheduled run · 2026-10-29T06:21Z · still red, on a new file

    Run 40824087205 (schedule, ebed73bddf): shard 1/2 failure, shard 2/2 success.

    This card's two files:

    The new red: packages/cli/test/json-stdout-purity.e2e.test.ts › "the family this contract has to hold across › is exactly the set listed here — a new member goes red until it is driven too":

    AssertionError: expected [ 'db orphans', …(24) ] to deeply equal [ 'db orphans', …(22) ]
    +   "plugin install",
    +   "plugin trust list",
    

    Release: session_01QSeKYmTYfaPbLQD4BJfomW (devx seat 2) · the stay-behind reading is done and the seat is off duty (sign-off brief 6473747705) · next: devx seat 1 (#6023). The card stays the main-red anchor for Nightly tiers. It closes on the first scheduled run that is green on all three files.


    Generated by Claude Code

  15. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    Contributor

    domain:server#3 · os-bill · session_01Utp6CXc5hequf76uJfzrdK

    Cross-lane note for this card's holder, from the contract review of PR #27374 (record 6490914228, ③.16). PR #27374 is #27123 slice 2 and is not merged yet. Two facts it changes about the nightly json-stdout-purity red:

    • The new commands do not widen the red. os plugin disable, enable and uninstall declare --json, but none of them contains bootSchemaStack(, so the discovery does not pick them up.
    • os plugin install LEAVES the discovery. Its only bootSchemaStack( call moves into packages/cli/src/utils/plugin-trust-read.ts, and the discovery's text probe over src/commands/** cannot see that file. The command still boots the stack through the util. After that PR the discovered set is 23, and os plugin install --json's stdout purity is no longer pinned by json-stdout-purity.e2e.test.ts.

    Please write the fix here against that head. Either list plugin install by hand, or teach the discovery the util. Not carried by #27374.


    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

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions