Skip to content

nightly-tiers: red on main #27114

Closed

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-31T06:11:52.029Z · expected every 24h while this card stands (cron 29 5 * * * UTC) · next by 2026-11-01T05:29Z · run log · commit a0f865491d365d1447e45d1efd27a251e6e6c181 · 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

… (5904 chars elided) …
l fails with and without the flag, and --strict counts the warnings on top �[33m 27516�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a clean stack exits 0 under --strict, in both faces �[33m 27904�[2mms�[22m�[39m
@objectstack/cli:test:  �[32m✓�[39m �[30m�[45m integration �[49m�[39m test/serve-port-drift-notice.e2e.test.ts �[2m(�[22m�[2m2 tests�[22m�[2m)�[22m�[33m 35339�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m POSITIVE — a really-held port produces a notice carrying REQUESTED and BOUND �[33m 17333�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m NEGATIVE — an ordinary boot on a free port says nothing about ports �[33m 17999�[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 103235�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⭐ the fixture REALLY converts — `--json` publishes the notice the run produced �[33m 15124�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⭐ converts nothing — the field is PRESENT and EMPTY, so it tracks the run �[33m 14705�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⭐ the human face says it too — the notice is printed, with its expiry �[33m 14728�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⭐ the human face stays SILENT when nothing converted �[33m 14594�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m catch-all at load — `[]` honestly, because the normalize step never ran �[33m 15062�[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 29012�[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 111634�[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 13908�[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 27644�[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 14044�[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 13554�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m CONTROL — a clean stack reports no undeclared-key line on either face �[33m 28760�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m leaves the TEXT face saying what it always said �[33m 13716�[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 174607�[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 13131�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the --json face stays a machine face — one JSON document, nothing on stderr �[33m 13233�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m nothing is minted — the payload key set is exactly `error` �[33m 13498�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m differs from the no-flag run once the elapsed token is normalised �[33m 26788�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m both refuse: same exit code, refusal on stdout, generator never loaded �[33m 26930�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m both answer the same --json envelope: exit 1 and a lone `error` key �[33m 27216�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `--eval` with the flag absent still runs the offline eval �[33m 12658�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `--eval --generator <module>` still loads the generator and runs live �[33m 14201�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m an unresolvable generator path refuses exactly as it always has �[33m 13844�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a plain project lint is untouched �[33m 13101�[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 330742�[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 45546�[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 175417�[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 13858�[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 13535�[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 13337�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m offline mode is untouched: exit 0 and every golden case passes �[33m 13623�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a generator that THROWS is still a generation error, not a scoring one �[33m 13033�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⭐ every generation threw ⇒ meanScore 0 on the --json face, never 100 �[33m 14026�[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 13570�[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 13313�[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 13209�[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 13476�[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 13645�[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 13407�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a generator that cannot be loaded still takes the generator-load JSON exit �[33m 13376�[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 40865�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m loads its command set anyway, and says what it re-ran �[33m 14254�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m still explains itself when the pin is defeated, and refuses the rebuild remedy �[33m 12975�[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 13630�[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 105227�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m boots an https:// artifact, overriding the image's OS_ARTIFACT_PATH default �[33m 17391�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m boots a file:// artifact — the volume-mount workflow �[33m 16820�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m boots unpinned, and says so rather than claiming verification �[33m 17827�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses a hash mismatch, naming expected AND actual, and exits non-zero �[33m 12876�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses an unreachable artifact instead of degrading to an empty kernel �[33m 13108�[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 13207�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses an artifact built for another protocol major (acceptance #4) �[33m 13976�[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 39497�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m scans a non-empty family — refuse to reason from zero �[33m 362�[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 9134�[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 4355�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m leaves a healthy boot printing exactly the tick it always printed �[33m 4770�[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 138708�[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 18566�[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 559003�[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 54659�[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 18536�[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 17493�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: assets/ beside the artifact holds the file — nothing printed, the file served �[33m 18623�[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 27778�[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 53499�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses the card's input and writes NOTHING �[33m 13426�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m accepts a valid name — the positive control for the absence check above �[33m 13542�[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 26522�[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 55395�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m writes `manifest` and NO `packages` key �[33m 14631�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m carries both package manifests through to the written artifact, in order �[33m 14612�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m keeps the singular `manifest` beside it — retained, not replaced �[33m 12744�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m exits non-zero rather than writing an artifact in the unreserved shape �[33m 13399�[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 57931�[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 29217�[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 28708�[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 8743�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m returns from a composed host stack that armed an unreleasable handle in init() �[33m 8740�[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 69662�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m reports 100% and exits 0 under --strict --threshold=100 �[33m 12548�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m is the SAME invocation that failed before — the control is --include-platform �[33m 13514�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m prints the hidden-bucket hint on the console face �[33m 14965�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m ⛔ still gates the package that SHIPS the baseline, with no flag at all �[33m 14253�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m accepts --no-include-platform, so the third state really is three states �[33m 14375�[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 42090�[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 35561�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m prints the boot WARN a plugin logged while the banner was being assembled �[33m 17499�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m streams boot output live at --log-level debug instead of hiding it �[33m 18057�[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 57191�[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 28855�[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 28329�[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 196�[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 32451�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m runs onEnable, so the declared script action has a handler �[33m 19075�[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 467973�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m is TEN faces, and names the two a static reading loses �[33m 419�[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', …(25) ] to deeply equal [ 'db orphans', …(24) ]�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[32m- Expected�[39m
@objectstack/cli:test: �[31m+ Received�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[33m@@ -11,10 +11,11 @@�[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 organization-ownership",�[22m
@objectstack/cli:test: �[2m    "migrate plan",�[22m
@objectstack/cli:test: �[31m+   "migrate record-currency-codes",�[39m
@objectstack/cli:test: �[2m    "migrate recorded-by",�[22m
@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: 
@objectstack/cli:test: �[36m �[2m❯�[22m test/json-stdout-purity.e2e.test.ts:�[2m358:30�[22m�[39m
@objectstack/cli:test:     �[90m356|�[39m �[34mdescribe�[39m(�[32m'the family this contract has to hold across'�[39m�[33m,�[39m () �[33m=>�[39m {
@objectstack/cli:test:     �[90m357|�[39m   it('is exactly the set listed here — a new member goes red until it …
@objectstack/cli:test:     �[90m358|�[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:     �[90m359|�[39m   })�[33m;�[39m
@objectstack/cli:test:     �[90m360|�[39m
@objectstack/cli:test: 
@objectstack/cli:test: 
@objectstack/cli:test: �[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯�[22m�[39m
@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�[32m566 passed�[39m�[22m�[90m (567)�[39m
@objectstack/cli:test: �[2m   Start at �[22m 05:44:50
@objectstack/cli:test: �[2m   Duration �[22m 1594.73s�[2m (transform 14.08s, setup 0ms, import 39.76s, tests 4549.77s, environment 7ms)�[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:    62 successful, 63 total
 Cached:    0 cached, 63 total
   Time:    32m18.433s 
Summary:    /home/runner/work/objectstack/objectstack/.turbo/runs/3LRqAfZnuiZ9qLgRqaFqVOFC3in.json
 Failed:    @objectstack/cli#test

 ERROR  run failed: command  exited (1)

shard-2 — last lines of the test log

… (9285 chars elided) …
ort runServe() returns �[33m 27809�[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 28058�[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 86796�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m inheriting the worker env (the pre-#11267 shape): the untrusted origin is ACCEPTED �[33m 28842�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m through childEnv(): the untrusted origin is REJECTED �[33m 29283�[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 28658�[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 248239�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a config with advisories: --json --strict exits exactly as --strict does �[33m 45325�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the failing --json run still emits exactly one parseable document, carrying the cause �[33m 22501�[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 46551�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m conversions-only: a retiring conversion the PRODUCER applied fails --strict on BOTH faces �[33m 46295�[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 22923�[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 43720�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: without --strict, the same advisory-raising config still exits 0 under --json �[33m 20913�[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 300842�[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 40834�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m an explicit --port beats an inherited $OS_PORT, and the banner agrees �[33m 8511�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m with no --port, an inherited $OS_PORT is still honoured and still agrees �[33m 8536�[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 23783�[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 2283�[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 96091�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m logs in with both flags under --json — one record, exit 0 �[33m 14240�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m still prompts, and still succeeds, for a consumer that answers �[33m 13544�[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 6200�[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 162537�[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 20217�[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 18258�[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 13989�[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 27769�[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 13542�[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 13250�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m CONTROL — a clean stack reports neither advisory, on either face �[33m 27070�[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 28430�[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 81295�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m serves an app defined only by objectstack.config.ts �[33m 16745�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m serves a config authored through defineStack(), the shape every real project has (#3887) �[33m 16927�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m serves a config with no application at all �[33m 17654�[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 13951�[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 16007�[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 280�[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 52519�[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 97059�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the directive reaches nothing; only inference lands (unchanged by the retirement) �[33m 13102�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m and says nothing about it — no warning, no error, exit 0 �[33m 14328�[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 14382�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m --strict-body names require(), not the free identifier `__require` �[33m 13457�[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 13790�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m prints the recorded warning, naming the hook and the forbidden pattern �[33m 13845�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m carries the warnings in --json under `bodyExtractionWarnings` �[33m 14144�[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 81513�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m honours --no-metadata-forms under --no-objects-only (the reported defect) �[33m 12940�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m keeps the baseline out of the stack module even with --metadata-forms ON �[33m 13703�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m is unchanged under the default --objects-only, in both flag positions �[33m 27414�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m --json mirrors the file set in BOTH flag states �[33m 27445�[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 136161�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m echoes this run's own argv with `--check` removed, flag for flag �[33m 12484�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m following the printed command makes the next --check pass (reported invocation) �[33m 40937�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m following the printed command makes the next --check pass (shell-hostile flag value) �[33m 41337�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m removes only the --check token, leaving spelling and order alone �[33m 13754�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m names a drifted bundle outside the cwd by its absolute path �[33m 13775�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m keeps the short relative form for an --out below the cwd �[33m 13865�[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 81421�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m bare: all four structural advisories at once (the card's measurement) �[33m 27623�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m mixed: a registry advisory (structured) beside a structural one (string) �[33m 26591�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: a config with nothing to warn about is empty on BOTH faces �[33m 27198�[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 54876�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m attaches to packages[i].manifest.docs and ⛔ not to the artifact top level �[33m 13717�[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 13075�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m reports the whole collection on the step line, package directories named �[33m 14464�[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 13608�[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 89364�[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 96680�[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 24380�[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 24834�[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 23183�[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 24281�[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 58772�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m refuses to boot with the ADR-0093 D5 "could not be loaded" diagnosis �[33m 13108�[2mms�[22m�[39m
@objectstack/cli:test:        �[33m�[2m✓�[22m�[39m boots degraded when the operator explicitly sets OS_ALLOW_DEGRADED_TENANCY=1 �[33m 17742�[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 13381�[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 14533�[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 44426�[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 17171�[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 13604�[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 13644�[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 54121�[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 66642�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m reports a boot failure as exit 1, not as a clean 0 �[33m 17475�[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 76679�[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 13608�[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 13711�[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 13862�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the three runs are DISTINGUISHABLE — the defect was that they were not �[33m 21825�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `--json` prints no step line at all and stays one JSON document �[33m 13665�[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 35949�[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 18041�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: without the app page, plugin-auth's page serves as before �[33m 17903�[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 18294�[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 18049�[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 117276�[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 95215�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m refuses on the human face, naming the flag it requires �[33m 14020�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m the --json face stays a machine face — one JSON document, nothing on stderr �[33m 13765�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m nothing is minted — the payload key set is exactly `error` �[33m 13263�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m is judged on the flag being TYPED, not on the path resolving �[33m 13484�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m `--eval --generator` still loads the generator and runs live �[33m 12905�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m offline `--eval` with no generator is untouched �[33m 14074�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m a plain project lint is untouched �[33m 13698�[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 66598�[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 41426�[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 27356�[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 13577�[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 13772�[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 27603�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m exits non-zero WITHOUT --strict, naming the key and the near-miss �[33m 13705�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m control: the identical stack with the key spelled `flows` exits 0 �[33m 13891�[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 40301�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m states the posture in --help �[33m 13268�[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 21559�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m os validate �[33m 11755�[2mms�[22m�[39m
@objectstack/cli:test:      �[33m�[2m✓�[22m�[39m os build �[33m 9799�[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 138432�[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:39:32
@objectstack/cli:test: �[2m   Duration �[22m 1126.85s�[2m (transform 10.34s, setup 0ms, import 19.16s, tests 3309.15s, 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

  Tasks:    63 successful, 63 total
 Cached:    0 cached, 63 total
   Time:    24m28.183s 
Summary:    /home/runner/work/objectstack/objectstack/.turbo/runs/3LRoZvCp3YjnAXUpxfyobOlyU9z.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. 19 remaining items

  12. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW
    os-dev-report

    {
      "issue": 27114,
      "status": "done",
      "branch": "claude/issue-27114-showcase-live-v3",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28009",
      "session": "session_01QSeKYmTYfaPbLQD4BJfomW (mode:subagent, so this is the parent seat's id; dispatch note 6516371709 names this branch)",
      "premise_still_valid": true,
      "summary": "Two test files were changed. There is no product change, no retry, no timeout raise, and no test was renamed, skipped or deleted. H1 HOLDS. Under the nightly harness at base d5951c8e37, 1440x900 draws the three-column tier. The failure snapshot shows the Panels group with 'Timeline' unpressed and 'Related column' pressed, and region 'Activity' with a collapsed toggle at the related column's foot. showcase_account declares no stageField, no option kind and no enable.files, so its timeline defaults to off. record-history-display.spec.ts now asserts [data-panel-toggle=timeline] aria-pressed=false and the Activity card heading's toggle aria-expanded=false, clicks the toggle, asserts aria-expanded=true, and reads the Changes chip inside that card. The card was chosen because it is the stream's default home and opening it writes no preference. The toggle is named via its heading because the open stream has an 'Activity' filter chip of its own; the first head hit that strict-mode collision, and the second commit corrected it. H2 HOLDS, with a second staleness. Measured with a fresh context: from 768 to 1000 px the sidebar is a 48 px icon rail, and the tier flips at window 808 (two-column) to 800 (tabs), which is window-48 against the 760 view floor. At 1024 and 1200 the sidebar is expanded and the tier is two-column, with no tablist. At 760 the mobile shell draws two-column; at 720 it draws tabs. So the desktop tabbed tier is a window of 768 to 807 px, and the case is re-pinned at 780x800 with that derivation in its comment. Inside the tabbed tier, v3 (objectstack#27055 Target 8) draws the relatedList 'primary' lists, Invoices and Projects, as body tables in the Details tab. The strip is Details/Related/Timeline, so the old Invoices/Projects tab assertions were red at every width. The case's own header names the tabbed invariant ('related lists surface as tabs'), so it stays tabbed, which is also what the drawer and split pane draw at every width. Its prominence assertions are re-pointed to v3: Details is selected, a Related tab exists, no Invoices or Projects tab exists, and the INV-1002 and Data Platform rows sit in the Details panel's tables. Clicking Related self-fetches Carl Fox, which replaces a waitForTimeout plus a non-empty-text check. The header bullet says the same.",
      "tests": "All runs used the nightly invocation, `cd examples/app-showcase && OS_TEST_TIERS=nightly pnpm exec vitest run --maxWorkers=2`, under os-verify-lock. REPRO at d5951c8e37: detail-shapes.spec.ts:173 'getByRole(tab, /Details/i) element(s) not found', 1 failed / 52 passed; record-history-display.spec.ts:92 'TimeoutError: locator.waitFor: Timeout 15000ms exceeded', 1 failed / 19 passed; Test Files 2 failed (2); VERDICT command-exit 1. GREEN at 6becc88c2b: smoke 53 passed (2.7m), live 20 passed (1.6m), Test Files 2 passed (2), Tests 2 passed (2), VERDICT command-exit 0. TEETH (trap-restored script) on top of 6becc88c2b: both files were restored to base with git restore --source (tree only). Mutated blobs 024da82966 / 486a7df9e4 equal the base blobs, and fix-marker grep counts are 0 / 0. Both cases red again: detail-shapes:156 (tab Details not found, 1 failed / 52 passed) and record-history-display:62 (waitFor 15000ms, 1 failed / 19 passed); Test Files 2 failed (2); VERDICT 1. Restore was via git checkout HEAD --. Restored blobs d355411757 / 2961a09237 equal the HEAD blobs, git diff HEAD is 0 bytes, and porcelain is empty. TYPECHECK: `pnpm --filter @objectstack/example-showcase typecheck` and `ui type-check:e2e`, VERDICT 0. --listFiles counts each edited spec once in its program. Ablation: not separately run beyond the revert leg; the diff is test-only and pins no product behaviour change.",
      "gates": "`node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derived 37 over 2 paths (merge base d5951c8e3). Each ran with its exit code written to disk before any pipe. 35 exited 0 first time. pnpm check:dual-build-cjs-loads exited 3 (PREREQUISITE NOT MET: 7 packages had no dist/); after building them it exited 0 ('113 published require entry point(s) across 70 package(s) load'). pnpm check:query-options-erasure exited 124 at my own 280 s per-gate cap; rerun uncapped, it exited 0 ('ratchet holds: 50 unswept non-test site(s) in 15 file(s), none new'). --ran reconciliation at 6becc88c2b, with each line recorded as ':: exit N': '37 derived famil(ies) accounted for — 37 run, 0 NOT-MEASURED (a DERIVED zero — all 37 recorded an exit code and none of them is 3)', exit 0. check:nul-bytes exit 0; the control-byte self-scan found no hits. check-platform-checklist was not run (no export was renamed or removed). PR #28009 check-runs at report time: Check Changeset success, Governed Surface Queue Guard success. In progress: Lint (CI release and engine gates, ESLint, PM dispatch-gates, docs and code guards, repo and tooling gates, the three scoped lanes), PR-body guards, Type Check (consumer gates, debt ledger, source gates, workspace), Check PR Size and filter. NOT MEASURED: the CI conclusions, reason: still running when this report was written.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm (Clause-②: no)",
      "line_budget": "n/a — no skills/** path in the diff. Diff vs base d5951c8e37: 2 files, +78 / -28 (detail-shapes.spec.ts +49/-19, record-history-display.spec.ts +29/-9)",
      "files_changed": [
        "examples/app-showcase/e2e/detail-shapes.spec.ts",
        "ui/e2e/live/record-history-display.spec.ts"
      ],
      "deviations": [
        "Scope reading: the dispatch said 'touch only those two spec files, plus their header comments'. In detail-shapes.spec.ts I changed more than the viewport inside the Contoso case: its Invoices/Projects tab assertions are stale under v3 at every width, so re-pinning alone could not make it green. The changes stay inside the two named files and the case title is unchanged.",
        "The first assertion after page.goto in record-history-display carries { timeout: 15_000 }. The spec's existing 15 s first-element budget moved there from the chip wait; no budget was raised.",
        "Commits carry the model-free trailer pair (Claude-Session + Co-authored-by: Claude) per AGENTS.md, not the harness reminder's model-bearing Co-Authored-By line.",
        "Gate harness: one gate hit my own 280 s per-gate cap (exit 124) and was rerun uncapped. One gate needed 7 packages built (exit 3, then rerun). Both are recorded above with final exit 0.",
        "Worktree ../objectstack-issue-27114c is removed after this report (clean, HEAD == remote 6becc88c2b)."
      ],
      "mcp_calls": "0 — no MCP GitHub calls",
      "api_writes": "3 — through the relay pr_create stroke (run 41020703405): POST /repos/objectstack-ai/objectstack/pulls (draft, no assignees) and POST /repos/objectstack-ai/objectstack/issues/28009/labels ['skip-changeset'], read back as body identical (9703 bytes) and label present. Through post-stamped: POST /repos/objectstack-ai/objectstack/issues/27114/comments (this report). git push is not counted.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none · noted, not filed. The beforeAll comment in detail-shapes.spec.ts says Contoso has '2 invoices', but the seed has 3 (INV-1002/1003/1005). It is a comment only, recorded in the PR's Acceptance notes."
      ]
    }

    Generated by Claude Code

  13. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    ACCEPT → PR #28009 · 2026-10-30T07:47Z · ready + auto-merge armed (Part of). The card stays open until a scheduled Nightly tiers run is green.


    Generated by Claude Code

  14. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Landed (partial): both showcase live-tier reds of reading 6516358130, via PR #28009, merged as 35fc9b9ad2 · 2026-10-30T08:04Z

    The merged diff matches the reviewed head 6becc88c2b: the sorted +/− lines are hash-identical. ACCEPT → PR #28009 comment 6517649311. The dev ran as mode:subagent, so there is no session to archive.

    The card stays open, still pm:dispatched with this seat, until the next scheduled Nightly tiers run (cron 29 5 * * * UTC, 2026-10-31) is green on examples/app-showcase and @objectstack/cli. The seat has a check-in armed for 06:20Z to read that run. If it is red, the red is a new reading on this card.


    Generated by Claude Code

  15. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Release: session_01QSeKYmTYfaPbLQD4BJfomW (devx seat 2) · the seat stands down on the maintainer's word 「当前任务处理完合并后下班」 / 「剩下的叫给 seat 1」, and this card has a new red with no dispatch yet · next: pm:queue, for seat 1 (#6023)

    New reading · 2026-10-31T06:21Z

    Nightly Tiers run 41173036489 (schedule, 2026-10-31T05:33Z, subject a0f865491d): failure, 1 of 3 jobs. The subject contains #28009 (35fc9b9ad2).

    The claim is released in this stroke: pm:dispatched → pm:queue, and the assignee is cleared.


    Generated by Claude Code

  16. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    Contributor

    domain:devx#1 · os-zhuang · session_01QUs3BvP5Aq9USg5GtmgAAR

    Claim: PM loop round 1
    Session: session_01QUs3BvP5Aq9USg5GtmgAAR
    Account: os-zhuang
    Branch: claude/project-thread-z0en0a (the card thread's platform-assigned push branch, the measured platform exception to the protocol branch shape)
    Worktree: objectstack-issue-27114
    Domain: domain:devx
    Seat: domain:devx#1
    File surface: packages/cli/test/json-stdout-purity.e2e.test.ts (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: default (one test file; the drive needs judgment), effort: high (p1, small surface)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the json-stdout-purity pin (packages/cli) | no other path covers a new --json command | every nightly run on main; a stop-bleed, no product change
    Thread-read: 6540032843
    Premise: holds (seat 2 reading 6540032843: discoverFamily() 26 vs FAMILY 25, new member migrate record-currency-codes from #28128; git grep record-currency-codes finds no entry in the test file at 22ce3d13fe)
    Serial constraints cleared: no in-flight card names packages/cli/test; none

    Taken at 2026-10-31T06:40Z on seat 2's hand-over (sign-off brief 6540114700: 「剩下的叫给 seat 1」).

  17. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    Contributor

    domain:devx#1 · os-zhuang · session_01QUs3BuiMGLNsVXrDee61JM
    os-dev-report

    {
      "issue": 27114,
      "status": "done",
      "branch": "claude/project-thread-z0en0a",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28375",
      "session": "session_01QUs3BuiMGLNsVXrDee61JM (mode:thread; claim 6540194438 Branch line filled by the seat)",
      "premise_still_valid": true,
      "summary": "The PM premise holds. discoverFamily() returns 26 members and FAMILY lists 25. The only missing member is 'migrate record-currency-codes', and no other member is missing (the red diff is exactly that one line). It is added to FAMILY with argv --object jp_ticket --field title --code USD, because all three flags are required and oclif refuses before boot without them. The default dry run boots read-only. Measured face: on the uncompiled fixture it answers its 'No app objects are loaded' refusal after the boot, as one compact JSON document on stdout (exit 1), with all three BOOT_DIAGNOSTICS on stderr. No PREPARE entry was needed. discoverFamily() is untouched and nothing is skipped.",
      "tests": "Nightly integration tier, local, under os-verify-lock, tree at merge base 22ce3d13 with the cli^... closure built (OS_SKIP_DTS=1, VERDICT command-exit 0). RED: test file restored from origin/main a0f86549 (identical to 22ce3d13 for this file), command 'cd packages/cli && OS_TEST_TIERS=nightly pnpm exec vitest run --project integration --maxWorkers=2 test/json-stdout-purity.e2e.test.ts'. Result 'Tests 1 failed | 76 passed (77)', the failure at :358 with the diff '+ \"migrate record-currency-codes\"', VERDICT command-exit 1. Restore was proven by the blob hash matching HEAD (67787671) and a clean porcelain. GREEN at a8c47a44: 'Test Files 1 passed (1) · Tests 80 passed (80)', VERDICT command-exit 0. Head 1bdda92a is a comment-only correction on top of that, after a manual run showed the reached face is not INVALID_FIELD as first written. No ablation was needed: the diff is test-only and the red leg is the ablation.",
      "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 48 commands (1 path, 11 changed lines), with exit codes captured before any pipe. 45 exit 0. Exit 3 (prerequisite): node scripts/check-plugin-teardown-shape.mjs --self-test (shallow clone cannot reach its pinned fixture) and pnpm check:dual-build-cjs-loads (no full dist). Exit 1: pnpm check:dts-closure, environment-only because the local closure was built with OS_SKIP_DTS=1; its self-test passed. --ran reconciliation with exit codes at 1bdda92a: 48 derived, 46 run, 2 NOT-MEASURED, 0 UNRUN. PR check-runs: in_progress at report time, not waited on.",
      "dogfood_battery": "n/a, because the title has no '!' and there is no (narrowing) arm",
      "line_budget": "+11 / -0, 1 file",
      "files_changed": [
        "packages/cli/test/json-stdout-purity.e2e.test.ts"
      ],
      "deviations": [
        "Worked in the platform-assigned card-thread checkout on branch claude/project-thread-z0en0a rather than a separate ../objectstack-issue-27114 worktree. The container is this thread's alone, and the branch is not main.",
        "The local origin/main ref was stale (a0f86549) at first derivation. I fetched to 6212fdc6 and re-derived, and the change set is now 1 path vs merge base 22ce3d13.",
        "The first commit's comment named the INVALID_FIELD face. A manual run measured the 'No app objects are loaded' refusal instead, and 1bdda92a corrects the comment only."
      ],
      "mcp_calls": "3, all reads: issue_read get, issue_read get_comments, pull_request_read get. No MCP write tool.",
      "api_writes": "2: the fleet-write relay dispatch pr_create (run 41180221321, success, body read back identical, label skip-changeset present, no assignees), and this os-dev-report comment through post-stamped.mjs on #27114. git push x2 are not REST.",
      "open_questions": [],
      "out_of_scope_findings": []
    }
  18. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    Contributor

    domain:devx#1 · os-zhuang · session_01QUs3BvP5Aq9USg5GtmgAAR

    Landed · 2026-10-31T07:55Z — PR #28375 merged through the queue as a878ff6c26.

    Probe Result
    PR #28375 merged, merged=true
    Content on origin/main packages/cli/test/json-stdout-purity.e2e.test.ts — blob sha1 identical to PR head 1bdda92a

    The green reading belongs to the next scheduled nightly on main; if that run is red, the nightly card refresh reopens the trail and the seat takes it from there.

    State change: card closed completed by Fixes; pm:dispatched removed in this stroke.

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:devxpriority: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