Skip to content

nightly-tiers: red on main #22208

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-08T06:22:44.747Z · expected every 24h while this card stands (cron 29 5 * * * UTC) · next by 2026-10-09T05:29Z · run log · commit 1e5d322c1e14803056c789c71d8ba87a538aa23c · 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/build-json-failure-warnings.e2e.test.ts
  • packages/cli/test/validate-json-failure-warnings.e2e.test.ts

shard-1 — last lines of the test log

@objectstack/cli:test: 
@objectstack/cli:test: �[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/11]⎯�[22m�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[41m�[1m FAIL �[22m�[49m �[30m�[45m integration �[49m�[39m test/build-json-failure-warnings.e2e.test.ts�[2m > �[22m#11772 — every `os build --json` failure exit carries the advisory lists the run computed�[2m > �[22mthe catch-all — a THROWN failure still reports what the run had computed
@objectstack/cli:test: �[31m�[1mAssertionError�[22m: expected 'undefined' to contain 'EISDIR'�[39m
@objectstack/cli:test: 
@objectstack/cli:test: Expected: �[32m"EISDIR"�[39m
@objectstack/cli:test: Received: �[31m"undefined"�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[36m �[2m❯�[22m test/build-json-failure-warnings.e2e.test.ts:�[2m416:35�[22m�[39m
@objectstack/cli:test:     �[90m414|�[39m     expect(run.code, `expected the write to throw:\n${run.stdout}${run…
@objectstack/cli:test:     �[90m415|�[39m     �[35mconst�[39m payload �[33m=�[39m �[34mpayloadOf�[39m(run�[33m,�[39m �[32m'thrown'�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m416|�[39m     �[34mexpect�[39m(�[33mString�[39m(payload�[33m.�[39merror))�[33m.�[39m�[34mtoContain�[39m(�[32m'EISDIR'�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m   |�[39m                                   �[31m^�[39m
@objectstack/cli:test:     �[90m417|�[39m     �[34mexpect�[39m(
@objectstack/cli:test:     �[90m418|�[39m       �[34mclasses�[39m(payload�[33m.�[39mwarnings)�[33m,�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/11]⎯�[22m�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[41m�[1m FAIL �[22m�[49m �[30m�[45m integration �[49m�[39m test/build-json-failure-warnings.e2e.test.ts�[2m > �[22m#11772 — every `os build --json` failure exit carries the advisory lists the run computed�[2m > �[22m3b (author-time rules) — REGRESSION GUARD: this exit already carried `ruleAdvisories`
@objectstack/cli:test: �[31m�[1mAssertionError�[22m: expected undefined to be 'author-time rules failed' // Object.is equality�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[32m- Expected:�[39m
@objectstack/cli:test: "author-time rules failed"
@objectstack/cli:test: 
@objectstack/cli:test: �[31m+ Received:�[39m
@objectstack/cli:test: undefined
@objectstack/cli:test: 
@objectstack/cli:test: �[36m �[2m❯�[22m test/build-json-failure-warnings.e2e.test.ts:�[2m453:27�[22m�[39m
@objectstack/cli:test:     �[90m451|�[39m     expect(run.code, `expected the rule gate to fail:\n${run.stdout}${…
@objectstack/cli:test:     �[90m452|�[39m     �[35mconst�[39m payload �[33m=�[39m �[34mpayloadOf�[39m(run�[33m,�[39m �[32m'rulefail'�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m453|�[39m     �[34mexpect�[39m(payload�[33m.�[39merror)�[33m.�[39m�[34mtoBe�[39m(�[32m'author-time rules failed'�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m   |�[39m                           �[31m^�[39m
@objectstack/cli:test:     �[90m454|�[39m     expect((payload.issues as Array<{ rule: string }>).map((i) => i.ru…
@objectstack/cli:test:     �[90m455|�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/11]⎯�[22m�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[41m�[1m FAIL �[22m�[49m �[30m�[45m integration �[49m�[39m test/validate-json-failure-warnings.e2e.test.ts�[2m > �[22m#12047 — every `os validate --json` failure exit carries the advisory lists the run computed�[2m > �[22mrule errors — carries rule + key, and NOT the capability hint one step later
@objectstack/cli:test: �[31m�[1mAssertionError�[22m: expected [ undefined ] to include 'expression-invalid'�[39m
@objectstack/cli:test: �[36m �[2m❯�[22m test/validate-json-failure-warnings.e2e.test.ts:�[2m360:76�[22m�[39m
@objectstack/cli:test:     �[90m358|�[39m     �[35mconst�[39m payload �[33m=�[39m �[34mpayloadOf�[39m(run�[33m,�[39m �[32m'rulefail'�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m359|�[39m     �[34mexpect�[39m(payload�[33m.�[39mvalid)�[33m.�[39m�[34mtoBe�[39m(�[35mfalse�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m360|�[39m     expect((payload.errors as Array<{ rule: string }>).map((i) => i.ru…
@objectstack/cli:test:     �[90m   |�[39m                                                                            �[31m^�[39m
@objectstack/cli:test:     �[90m361|�[39m
@objectstack/cli:test:     �[90m362|�[39m     // This exit already published `ruleAdvisories` before the change;…
@objectstack/cli:test: 
@objectstack/cli:test: �[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/11]⎯�[22m�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[41m�[1m FAIL �[22m�[49m �[30m�[45m integration �[49m�[39m test/validate-json-failure-warnings.e2e.test.ts�[2m > �[22m#12047 — every `os validate --json` failure exit carries the advisory lists the run computed�[2m > �[22mcapability errors — carries rule + key + cap; the doc advisory is not computed yet
@objectstack/cli:test: �[31m�[1mAssertionError�[22m: expected [ undefined ] to deeply equal [ 'governance' ]�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[32m- Expected�[39m
@objectstack/cli:test: �[31m+ Received�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[2m  [�[22m
@objectstack/cli:test: �[32m-   "governance",�[39m
@objectstack/cli:test: �[31m+   undefined,�[39m
@objectstack/cli:test: �[2m  ]�[22m
@objectstack/cli:test: 
@objectstack/cli:test: �[36m �[2m❯�[22m test/validate-json-failure-warnings.e2e.test.ts:�[2m374:78�[22m�[39m
@objectstack/cli:test:     �[90m372|�[39m     �[35mconst�[39m payload �[33m=�[39m �[34mpayloadOf�[39m(run�[33m,�[39m �[32m'capfail'�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m373|�[39m     �[34mexpect�[39m(payload�[33m.�[39mvalid)�[33m.�[39m�[34mtoBe�[39m(�[35mfalse�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m374|�[39m     expect((payload.errors as Array<{ token: string }>).map((i) => i.t…
@objectstack/cli:test:     �[90m   |�[39m                                                                              �[31m^�[39m
@objectstack/cli:test:     �[90m375|�[39m
@objectstack/cli:test:     �[90m376|�[39m     // The fixture ships a doc raising an advisory, and the docs gate …
@objectstack/cli:test: 
@objectstack/cli:test: �[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/11]⎯�[22m�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[41m�[1m FAIL �[22m�[49m �[30m�[45m integration �[49m�[39m test/validate-json-failure-warnings.e2e.test.ts�[2m > �[22m#12047 — every `os validate --json` failure exit carries the advisory lists the run computed�[2m > �[22mdoc errors — all four computed lists ride the payload
@objectstack/cli:test: �[31m�[1mAssertionError�[22m: expected [ undefined ] to deeply equal [ 'docs/namespace-prefix' ]�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[32m- Expected�[39m
@objectstack/cli:test: �[31m+ Received�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[2m  [�[22m
@objectstack/cli:test: �[32m-   "docs/namespace-prefix",�[39m
@objectstack/cli:test: �[31m+   undefined,�[39m
@objectstack/cli:test: �[2m  ]�[22m
@objectstack/cli:test: 
@objectstack/cli:test: �[36m �[2m❯�[22m test/validate-json-failure-warnings.e2e.test.ts:�[2m392:76�[22m�[39m
@objectstack/cli:test:     �[90m390|�[39m     �[35mconst�[39m payload �[33m=�[39m �[34mpayloadOf�[39m(run�[33m,�[39m �[32m'docsfail'�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m391|�[39m     �[34mexpect�[39m(payload�[33m.�[39mvalid)�[33m.�[39m�[34mtoBe�[39m(�[35mfalse�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m392|�[39m     expect((payload.errors as Array<{ rule: string }>).map((i) => i.ru…
@objectstack/cli:test:     �[90m   |�[39m                                                                            �[31m^�[39m
@objectstack/cli:test:     �[90m393|�[39m
@objectstack/cli:test:     �[90m394|�[39m     �[34mexpect�[39m(
@objectstack/cli:test: 
@objectstack/cli:test: �[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/11]⎯�[22m�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[41m�[1m FAIL �[22m�[49m �[30m�[45m integration �[49m�[39m test/validate-json-failure-warnings.e2e.test.ts�[2m > �[22m#12047 — every `os validate --json` failure exit carries the advisory lists the run computed�[2m > �[22mcatch-all (late throw) — a THROWN failure still reports what the run had computed
@objectstack/cli:test: �[31m�[1mAssertionError�[22m: expected 'undefined' to contain 'ENOTDIR'�[39m
@objectstack/cli:test: 
@objectstack/cli:test: Expected: �[32m"ENOTDIR"�[39m
@objectstack/cli:test: Received: �[31m"undefined"�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[36m �[2m❯�[22m test/validate-json-failure-warnings.e2e.test.ts:�[2m413:35�[22m�[39m
@objectstack/cli:test:     �[90m411|�[39m     expect(run.code, `expected the docs read to throw:\n${run.stdout}$…
@objectstack/cli:test:     �[90m412|�[39m     �[35mconst�[39m payload �[33m=�[39m �[34mpayloadOf�[39m(run�[33m,�[39m �[32m'thrown'�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m413|�[39m     �[34mexpect�[39m(�[33mString�[39m(payload�[33m.�[39merror))�[33m.�[39m�[34mtoContain�[39m(�[32m'ENOTDIR'�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m   |�[39m                                   �[31m^�[39m
@objectstack/cli:test:     �[90m414|�[39m     �[34mexpect�[39m(
@objectstack/cli:test:     �[90m415|�[39m       �[34mclasses�[39m(payload�[33m.�[39mwarnings)�[33m,�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/11]⎯�[22m�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[41m�[1m FAIL �[22m�[49m �[30m�[45m integration �[49m�[39m test/validate-json-failure-warnings.e2e.test.ts�[2m > �[22m#12047 — every `os validate --json` failure exit carries the advisory lists the run computed�[2m > �[22mstructural control — the fixture shape DOES raise a structural advisory on success
@objectstack/cli:test: �[31m�[1mAssertionError�[22m: expected the control to pass:
@objectstack/cli:test: {
@objectstack/cli:test:   "valid": false,
@objectstack/cli:test:   "errors": [
@objectstack/cli:test:     {
@objectstack/cli:test:       "code": "invalid_union",
@objectstack/cli:test:       "errors": [
@objectstack/cli:test:         [
@objectstack/cli:test:           {
@objectstack/cli:test:             "code": "invalid_value",
@objectstack/cli:test:             "values": [
@objectstack/cli:test:               false
@objectstack/cli:test:             ],
@objectstack/cli:test:             "path": [],
@objectstack/cli:test:             "message": "Invalid input: expected false"
@objectstack/cli:test:           }
@objectstack/cli:test:         ],
@objectstack/cli:test:         [
@objectstack/cli:test:           {
@objectstack/cli:test:             "code": "invalid_value",
@objectstack/cli:test:             "values": [
@objectstack/cli:test:               "global"
@objectstack/cli:test:             ],
@objectstack/cli:test:             "path": [],
@objectstack/cli:test:             "message": "Invalid input: expected \"global\""
@objectstack/cli:test:           }
@objectstack/cli:test:         ],
@objectstack/cli:test:         [
@objectstack/cli:test:           {
@objectstack/cli:test:             "code": "invalid_value",
@objectstack/cli:test:             "values": [
@objectstack/cli:test:               "organization"
@objectstack/cli:test:             ],
@objectstack/cli:test:             "path": [],
@objectstack/cli:test:             "message": "Invalid input: expected \"organization\""
@objectstack/cli:test:           }
@objectstack/cli:test:         ]
@objectstack/cli:test:       ],
@objectstack/cli:test:       "path": [
@objectstack/cli:test:         "objects",
@objectstack/cli:test:         0,
@objectstack/cli:test:         "indexes",
@objectstack/cli:test:         0,
@objectstack/cli:test:         "unique"
@objectstack/cli:test:       ],
@objectstack/cli:test:       "message": "`indexes[].unique: true` was retired at protocol 18 (ADR-0120 D1) — on a declared index bare `true` never stated a scope: it built the index over exactly `fields`, one holder across the whole installation, while reading like \"unique per organization\". State the scope: `unique: 'global'` (installation-wide — the exact index bare `true` built, so nothing on disk changes) or `unique: 'organization'` (one holder per organization — the driver prepends the NULL-safe organization key part to `fields` at registration). Field-level `unique: true` is unaffected. Run `os migrate meta --from 17` to list the mechanical edits for existing sources; apply them by hand."
@objectstack/cli:test:     }
@objectstack/cli:test:   ],
@objectstack/cli:test:   "warnings": [
@objectstack/cli:test:     "objects.ctrl_ticket.fields.title.visibleWhen.zzzUndeclaredProbeKey: 'zzzUndeclaredProbeKey' is not a declared field key, so its value is dropped at load."
@objectstack/cli:test:   ],
@objectstack/cli:test:   "conversions": [],
@objectstack/cli:test:   "duration": 102
@objectstack/cli:test: }
@objectstack/cli:test: defineStack: objects.ctrl_ticket.fields.title.visibleWhen.zzzUndeclaredProbeKey: 'zzzUndeclaredProbeKey' is not a declared field key, so its value is dropped at load.
@objectstack/cli:test: : expected 1 to be +0 // Object.is equality�[39m
@objectstack/cli:test: 
@objectstack/cli:test: 
@objectstack/cli:test: �[32m- Expected�[39m
@objectstack/cli:test: �[31m+ Received�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[32m- 0�[39m
@objectstack/cli:test: �[31m+ 1�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[36m �[2m❯�[22m test/validate-json-failure-warnings.e2e.test.ts:�[2m441:83�[22m�[39m
@objectstack/cli:test:     �[90m439|�[39m     �[90m// stay off the failure payloads.�[39m
@objectstack/cli:test:     �[90m440|�[39m     �[35mconst�[39m run �[33m=�[39m �[35mawait�[39m �[34mrunCli�[39m([�[32m'validate'�[39m�[33m,�[39m �[32m'--json'�[39m]�[33m,�[39m dirs�[33m.�[39mcontrol)�[33m;�[39m
@objectstack/cli:test:     �[90m441|�[39m     expect(run.code, `expected the control to pass:\n${run.stdout}${ru…
@objectstack/cli:test:     �[90m   |�[39m                                                                                   �[31m^�[39m
@objectstack/cli:test:     �[90m442|�[39m     �[35mconst�[39m payload �[33m=�[39m �[34mpayloadOf�[39m(run�[33m,�[39m �[32m'control'�[39m)�[33m;�[39m
@objectstack/cli:test:     �[90m443|�[39m     �[34mexpect�[39m(payload�[33m.�[39mvalid)�[33m.�[39m�[34mtoBe�[39m(�[35mtrue�[39m)�[33m;�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/11]⎯�[22m�[39m
@objectstack/cli:test: 
@objectstack/cli:test: �[2m Test Files �[22m �[1m�[31m2 failed�[39m�[22m�[2m | �[22m�[1m�[32m78 passed�[39m�[22m�[90m (80)�[39m
@objectstack/cli:test: �[2m      Tests �[22m �[1m�[31m11 failed�[39m�[22m�[2m | �[22m�[1m�[32m839 passed�[39m�[22m�[90m (850)�[39m
@objectstack/cli:test: �[2m   Start at �[22m 05:46:29
@objectstack/cli:test: �[2m   Duration �[22m 2149.52s�[2m (transform 29.79s, setup 0ms, import 67.29s, tests 6345.77s, environment 15ms)�[22m
@objectstack/cli:test: 
@objectstack/cli:test: JSON report written to /home/runner/work/objectstack/objectstack/packages/cli/.nightly-tiers/vitest-report.json
@objectstack/cli:test:  ELIFECYCLE  Test failed. See above for more details.
::error::command (/home/runner/work/objectstack/objectstack/packages/cli) /opt/hostedtoolcache/node/22.23.3/x64/bin/pnpm run test --reporter=default --reporter=json --outputFile.json=.nightly-tiers/vitest-report.json exited (1)
@objectstack/cli#test:  ERROR  command (/home/runner/work/objectstack/objectstack/packages/cli) /opt/hostedtoolcache/node/22.23.3/x64/bin/pnpm run test --reporter=default --reporter=json --outputFile.json=.nightly-tiers/vitest-report.json exited (1)

  Tasks:    59 successful, 60 total
 Cached:    0 cached, 60 total
   Time:    41m26.293s 
Summary:    /home/runner/work/objectstack/objectstack/.turbo/runs/3KOtep1ngfA0Fas7zQiBzcOjZYH.json
 Failed:    @objectstack/cli#test

 ERROR  run failed: command  exited (1)

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

Activity

  1. objectstack-fleet commented on Oct 8, 2026

    @objectstack-fleet
    Contributor

    Triage: re-routed, priority:p1 stands · domain:devx → domain:cli · area:devpath · pm:queue. Direction: move the two nightly-tier fixtures off the spelling #22103 retired; ⛔ never skip or rename a test

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

    Triage: lands in packages/cli/test/build-json-failure-warnings.e2e.test.ts and packages/cli/test/validate-json-failure-warnings.e2e.test.ts ⇒ domain:cli; rationale: the failing files are the CLI's, and every earlier nightly-red card went to that lane (#17633, #21347, #21551). The generator's domain:devx default does not fit here.

  2. objectstack-fleet commented on Oct 8, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 9
    Session: session_01RWZbGvPFcRKvUqASZtunCU
    Account: os-warren (the seat's linked user as get_me answers it; the card's assignee)
    Branch: claude/issue-22208-nightly-fixtures-unique-scope
    Worktree: objectstack-issue-22208
    Domain: domain:cli
    Seat: domain:cli#1
    File surface, per the card body and triage 6054352753, read on origin/main 7b926f76:

    domain:cli seat · session_01RWZbGvPFcRKvUqASZtunCU · 2026-10-08T07:41Z

  3. objectstack-fleet commented on Oct 8, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 22208,
      "status": "done",
      "branch": "claude/issue-22208-nightly-fixtures-unique-scope",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/22242",
      "session": "session_01RWZbGvPFcRKvUqASZtunCU — this run's harness-stamped id (Claude-Session line), the session claim 6055142389 names",
      "premise_still_valid": true,
      "summary": "Moved the three nightly-tier fixture sites (build-json-failure-warnings.e2e.test.ts :165 and :300, validate-json-failure-warnings.e2e.test.ts :192) off a bare declared-index `unique: true`, which protocol 18 refuses at the schema parse. They now raise the `unique/double-declaration` advisory: field `unique: true` beside index `unique: 'global'`, the shape PR #22103 already gave the two parity suites. It is a warning from the author-time rule registry, so it rides `ruleAdvisories`. The docblocks name the new advisory and say in one line why the old spelling left. Zero assertion lines changed, and no test was skipped, renamed or re-tiered: every assertion counts the rule class and none named the bare-unique rule id. H1-H5 all held: 11 failed | 10 passed on base 7b926f76 (build 6/5, validate 5/5); the structural control and a direct probe show every run stopping at the `indexes.0.unique` invalid_union; these three are the only sites across 80 tier files. The branch was merged with origin/main a87d8be2 before the PR (AGENTS §10). PR #22242 is a draft with assignee os-warren; the card's assignee is untouched; the worktree removal follows this comment. Three notes that were not filed are in the PR's Acceptance notes.",
      "tests": "H1 repro on 7b926f76: `OS_TEST_TIERS=nightly pnpm --filter @objectstack/cli exec vitest run --project integration --maxWorkers=2 --reporter=verbose` over the two files gave `Tests 11 failed | 10 passed (21)` (build 6 failed / 5 passed, validate 5 failed / 5 passed). Fixed, same command, on e8d64c30 and again on 89d4dc47: `Test Files 2 passed (2)`, `Tests 21 passed (21)`, every test named. Tier gate: `vitest list --filesOnly` with OS_TEST_TIERS unset or queue collects 356 files and neither file; nightly collects 80 files with both in [integration]. Ablation (scripts/ablation-replace.mjs wrap mode plus an outer EXIT/INT/TERM trap; no dist on the path, because the subject is the test file itself, loaded from source): the build 3b fixture went back to its base spelling; anchor x1->x0, replacement x0->x1, blob 7dfddae7->bd478edf, in-flight base-spelling count 1. Result `Tests 1 failed | 10 passed (11)`; the red is 3b, `expected undefined to be 'author-time rules failed'`. Restored: blob 7dfddae7 equals HEAD and the index, `git diff HEAD` empty, porcelain empty; the direction was the one predicted. Probes: the base 3b payload is {success:false, errors:[invalid_union at objects.0.indexes.0.unique], warnings:[]}; the new 3b payload has error 'author-time rules failed', issues ['expression-invalid'] and warnings [unique/double-declaration, warning]. On 89d4dc47: `pnpm --filter @objectstack/cli typecheck` exit 0 (check:test-typecheck OK; both files are in the 1970-file tsconfig.test.json program; the 28 raw errors are the ledgered 28 in 3 other files, 0 here). Unit project `Test Files 263 passed (263)` / `Tests 3874 passed (3874)`. 50/50 derived gates exit 0, and `dispatch-gates --ran` reads 0 NOT-MEASURED, 0 UNRUN. Full `pnpm lint` exit 0, and both files are linted (2 results, 0 errors, not ignored). Declared to CI: the integration tier beyond these two files and the other nightly-tier files.",
      "mcp_calls": "0 — no MCP GitHub tool was called; reads were `gh api` REST GETs and writes went through the scripts/pm relay",
      "api_writes": "3 — each is one repository_dispatch (POST /repos/objectstack-ai/objectstack/dispatches) that the fleet-write relay executed as objectstack-fleet[bot]: (1) pr_create -> POST /repos/objectstack-ai/objectstack/pulls (draft #22242, run 37750236362, body read back byte-identical, 7834/7834); (2) assign -> POST /repos/objectstack-ai/objectstack/issues/22242/assignees [os-warren] (run 37750323597, read back); (3) comment -> POST /repos/objectstack-ai/objectstack/issues/22208/comments (this report). Not REST: three `git push` of the branch (empty probe at 7b926f76, e8d64c30, merge 89d4dc47). No label write: the order leaves skip-changeset to the seat.",
      "open_questions": [],
      "out_of_scope_findings": [],
      "files_changed": [
        "packages/cli/test/build-json-failure-warnings.e2e.test.ts (+12 / -6)",
        "packages/cli/test/validate-json-failure-warnings.e2e.test.ts (+11 / -5)"
      ],
      "gates": {
        "derived": "50 commands from `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` at 89d4dc47: the same set as the order's list (sorted diff empty)",
        "result": "50/50 exit 0; `dispatch-gates --ran`: 50 derived, 50 run, 0 NOT-MEASURED, 0 UNRUN",
        "refused_then_measured": "check:dual-build-cjs-loads first exited 3 (PREREQUISITE NOT MET: 9 packages outside the cli closure had no dist/). After a full `pnpm build` (72/72 tasks) it exits 0.",
        "reading_with_empty_population": "check-issue-citations: exit 0, but it read 0 files, because packages/cli/test is outside its declared surface, so it judged nothing about the added `PR #22103` citation",
        "added": [
          "OS_TEST_TIERS=nightly, integration project, the two files: 21/21 on 89d4dc47",
          "pnpm --filter @objectstack/cli typecheck: exit 0",
          "pnpm --filter @objectstack/cli exec vitest run --project unit --maxWorkers=2: 263 files / 3874 tests passed",
          "pnpm lint (full): exit 0"
        ],
        "ci": "in_progress at report time on head 89d4dc47: 13 check runs completed with 0 failures, 18 in progress"
      },
      "line_budget": "n/a: no governed or line-ratcheted surface touched (no skills/**, .claude/**, AGENTS.md); the diff is +23 / -11 across 2 files, under the 5000-line human-merge threshold",
      "deviations": [
        "I built the dependency closure with `pnpm turbo run build --filter='@objectstack/cli^...'` (after the merge, `'@objectstack/cli...'`, plus a full `pnpm build` for the dual-build gate's prerequisite) instead of `pnpm --filter '@objectstack/cli^...' build`. The dist outputs are the same, replayed from the shared turbo cache where the inputs matched (first pass 58/58 cached).",
        "I merged origin/main a87d8be2 into the branch (merge commit 89d4dc47; no rebase, no force-push) before opening the PR, per AGENTS §10 and the dispatch-gates STALE TREE warning (3 gate inputs had moved). The change set against the merge base is still exactly the 2 files.",
        "The post-merge closure build hit the ~10 min foreground cap and the harness moved it to the background; it finished with exit 0 and I waited on it with tail --pid. The unit run, the gate battery and both full lints ran detached (nohup), and I waited on each in the foreground with tail --pid. No watcher outlives this report.",
        "The first full `pnpm lint` crashed (exit 2, ENOENT on a transient tsup.config.bundled_*.mjs) because it ran beside my own concurrent `pnpm build`. I read it as NOT MEASURED and re-ran it after the build: exit 0.",
        "The commits carry the model-free trailer pair (Claude-Session plus `Co-authored-by: Claude`), and the PR body ends with the AGENTS.md session-URL footer. The harness attribution reminder proposed a model-named trailer and a different footer; AGENTS.md, os-dev.md and the order take precedence. Reported here; it is not a departure from the contract."
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 8, 2026

    @objectstack-fleet
    Contributor

    ACCEPT — PR #22242 at 89d4dc47, pending CI

    domain:cli seat · session_01RWZbGvPFcRKvUqASZtunCU · read on GitHub 2026-10-08T08:34Z

    Checked on GitHub and in the diff, not from the report:

    • Shape:
      • draft, base main;
      • line 1 is Fixes #22208, line 2 is Clause-②: no;
      • assignee os-warren;
      • 2 files, +23 / −11, test only;
      • one merge of main (a87d8be2), no rebase.
    • The three fixture sites are the only code change. The two failure-warnings e2e files each move off the spelling protocol 18 refuses:
    • Every assertion line is unchanged:
      • no test is skipped, renamed or moved between tiers;
      • the tier gate is untouched (the dev's vitest list: neither file is collected without OS_TEST_TIERS=nightly).
      • The only other lines changed are comments: the docblocks name the new advisory and say in one line why the old spelling left. ADR-0120 D7 is the staging decision under which protocol 18 rejects a bare true on a declared index.
    • The dev's readings:
      • 11 failed / 10 passed on 7b926f76, matching the card's 11 (build 6 / 5, validate 5 / 5);
      • 21 / 21 under OS_TEST_TIERS=nightly at e8d64c30 and again at 89d4dc47;
      • the ablation (one fixture put back) turns exactly that test red with the card's own assertion;
      • three sites across the 80 nightly-tier files, all fixed.

    Changeset: none, and the seat applies skip-changeset in this stroke. Two test files publish nothing; the order said so.

    Done, per triage: the next Nightly Tiers run on a main that contains this PR is green. The card closes when the PR merges, and the seat reads that run after the next nightly (cron 29 5 * * * UTC).

    Next: CI on 89d4dc47, then the landing pre-checks and the queue.

  5. objectstack-fleet commented on Oct 8, 2026

    @objectstack-fleet
    Contributor

    Landed: PR #22242 → dbb7be2c53, a single-parent queue squash

    domain:cli seat · session_01RWZbGvPFcRKvUqASZtunCU · 2026-10-08T09:47Z

    • Landing shape:
      • dbb7be2c53 has one parent.
      • It is an ancestor of origin/main; the pre-merge head 89d4dc47 is not.
      • It entered the merge queue 2026-10-08T09:07:56Z and merged 2026-10-08T09:46:50Z on that first entry.
      • Fixes #22208 closed this card as completed.
    • Content on origin/main: each fixture's declared index carries unique: 'global' and its field carries unique: true, raising unique/double-declaration:
      • packages/cli/test/build-json-failure-warnings.e2e.test.ts: two sites;
      • packages/cli/test/validate-json-failure-warnings.e2e.test.ts: one site.
    • Review of record: ACCEPT 6056015814 at 89d4dc47, in one round. Test only, skip-changeset, Clause-②: no; no contract review was owed. CI on the head was green (34 runs) before the PR was armed.
    • Delivered:
      • The nightly tier's two --json failure-warnings suites no longer stop at the protocol-18 parse refusal of a bare declared-index unique: true.
      • Their authoring-rule advisory is now one the schema accepts.
      • Every assertion is unchanged. The dev's run under OS_TEST_TIERS=nightly was 21 / 21.
    • Done-when, still to read: triage's "done" is the next Nightly Tiers run on a main that contains this commit (cron 29 5 * * * UTC, so the 2026-10-09 run). If that run is red on these files again, the nightly refreshes its own card, and the seat reads it then.
  6. added a commit that references this issue on Oct 9, 2026
    dbb7be2
  7. objectstack-fleet commented on Oct 9, 2026

    @objectstack-fleet
    Contributor

    Done-when read: met

    domain:cli seat (#6024) · session_01BmsuLyUeuG5CNpZFMH1jzS · 2026-10-09T06:56Z

    The landed note 6057194905 left one reading owed: the next Nightly Tiers run on a main that contains dbb7be2c53.

    • The run: 37889758273, trigger schedule, branch main, commit 27a8b33dec, started 2026-10-09T05:41Z. Its conclusion is success: Nightly tiers (1/2) success, Nightly tiers (2/2) success.
    • It covers the fix: git merge-base --is-ancestor dbb7be2c53 27a8b33dec holds.
    • The card: it stays closed completed. Both failure-warnings e2e files ran green under OS_TEST_TIERS=nightly, and nothing re-filed this generated card.

    Nothing is left on this card for the seat.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions