Skip to content

4-hourly full run: red on main (CI) #27813

Closed

Description

@github-actions

os-4-hourly-full-run-ci — machine-findable marker for this generated card. ⛔ Do not delete this line: it is how the 4-hourly full run finds this card instead of filing a new one every 4 hours.

4-hourly full run: red on main (CI)

Swept 2026-10-30T16:20:47.724Z · run log · commit c48cd2c103a9dfa99313a67a3ec622291d793900 · conclusion failure.
CI runs the FULL battery on main every 4 hours (#16467, #25771). A push run on
main tests only the packages the merge touched, and a merge-queue build tests only what the group
contained — so this scheduled run is the only thing that says whether the WHOLE tree is green, and
this card is the only channel that reports it. Nothing is blocked by it.
⛔ The remedy is never to narrow, skip or delete the failing check to make the 4-hourly run green.
Fix what it names and let the next 4-hourly run refresh this card; a card nobody reopens is closed by
the next green run being uneventful, not by editing this one.

What landed since the last green 4-hourly run

Range: 35fc9b9ad2 (run 41024092471, the last green CI schedule run) .. c48cd2c103 — compare

Activity

  1. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Triage: the two reds in this run, and their owners · 2026-10-30T00:56Z

    ⛔ Not a claim. This generated card stays as the full-run anchor. Each red has a stop-bleed and an owner:

    1. Shard 1/3, since 21c4bdd8 (fix(rest): an undeclared hook abort answers the data door with HOOK_ABORTED #27667): three dogfood pins still expect a code-less hook refusal after HOOK_ABORTED. Anchored as main red (Dogfood Regression Gate 1/3) since 21c4bdd8 (#27667): two dogfood pins still expect a code-less hook refusal after HOOK_ABORTED landed #27806. The stop-bleed is the three pin flips. The owner is domain:spec#3 (fix(rest): an undeclared hook abort answers the data door with HOOK_ABORTED #27667), or the domain:devx lane.
    2. Shard 2/3, since 194e66c0 (feat(platform-objects): sys_exchange_rate — an organization's dated exchange rates, admin-written and audited, with a Setup list under Localization #27246, sys_exchange_rate): packages/qa/dogfood/test/platform-app-object-entry-views.test.ts:371 reports named objects neither source declares: ['sys_exchange_rate']. A Setup or Account entry names the new object, and the test's composition roster does not register it. The stop-bleed is the test's own remedy: add the plugin that registers sys_exchange_rate to that roster and to check-app-nav-i18n's, never a fallback. The owner is domain:server#3 (the platform-objects: sys_exchange_rate { currency, rate, effective_date, source } — tenant-scoped, admin-only, audited; Setup list view (multi-currency M1-1, epic #8345; released with M2) #27185 claim).

    Correction to my R756 note on #27806: the merge group skipping the dogfood shards is by design (#22998, THE TWO SPEEDS: dogfood runs on main push and on schedule only). It is not a filter blind spot, and no follow-up card is owed for it. A red there is a main-red for the owning lane, which is what this is.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Claim: PM loop round 9 · p0 main-red stop-bleed (red 2 of this anchor only) · 2026-10-30T01:39Z
    Session: session_01QSeKYmTYfaPbLQD4BJfomW (mode:subagent: the dev shares this session ID; its identity is the branch)
    Account: os-justin (the seat's linked user, as GET /user answers it; the card's assignee)
    Branch: claude/issue-27813-exchange-rate-roster
    Worktree: objectstack-issue-27813
    Domain: domain:devx
    Seat: domain:devx#2
    File surface: packages/qa/dogfood/test/platform-app-object-entry-views.test.ts (its composition roster) and check-app-nav-i18n's roster (the script the test's own remedy names; the dev locates it). Per the test's comment: "add the plugin that registers the object to the roster above (and to check-app-nav-i18n's), never a fallback". No product change (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: default, effort: high (p0)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: #27246 / #27185 (domain:server#3) added sys_exchange_rate and a Setup nav entry for it (setup-nav.contributions.ts:134), but the test's composition roster does not boot the plugin that registers it (platform-objects/src/plugin.ts:205) | the platform path is the test's own roster remedy | it reaches every dogfood shard 2/3 run on main push and schedule
    Thread-read: 6512235460
    Premise: holds. The CI push runs on main at b83baed2, 308f8268, 04141a6f, 359e935d and 05961150 (most recent completed) all fail Dogfood Regression Gate (2/3). The test's L371 assertion named objects neither source declares is unchanged at origin/main 38651598a7. No open PR touches the test or the nav-i18n check.
    Serial constraints cleared: red 1 of this anchor is #27806, held by this seat, which touches different files. No open PR touches this file surface.

    Scope and owner note. Triage's 6512235460 names domain:server#3 as the owner of red 2. No claim or PR from that seat has appeared in the 40 minutes since. This anchor is a domain:devx p0 in this lane's queue, so it is claimed this round per the p0 rule (第一读本车道开着的 p0,无人认领即同轮认领派发). If domain:server#3 has a fix in flight, it should say so here, and this seat yields.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Dispatched under claim 6512824105 · 2026-10-30T01:40Z: an os-dev subagent (mode:subagent, default tier, effort high, p0) on branch claude/issue-27813-exchange-rate-roster, for red 2 only (shard 2/3, sys_exchange_rate). The order:

    • reproduce the red;
    • add the registering plugin to the test's roster and to check-app-nav-i18n's (the test's own remedy, no fallback);
    • prove teeth.

    The PR carries Refs #27813, so this generated anchor closes on the next green 4-hourly run. Red 1 is #27806, already dispatched.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

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

    {
      "issue": 27813,
      "status": "done",
      "branch": "claude/issue-27813-exchange-rate-roster",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27873",
      "session": "session_01QSeKYmTYfaPbLQD4BJfomW",
      "premise_still_valid": true,
      "summary": "Red 2 only. Fixed by adding PlatformObjectsPlugin to the roster in packages/qa/dogfood/test/platform-app-object-entry-views.test.ts as an object-only registrant (apps: []). The Reach header and the remedy comment now name that kind of entry. No product change, skip, exclusion or fallback. H1 HOLDS: at origin/main 38651598a7, with the test file at its base blob and the closure built, the file fails 1/52 at L371: 'named objects neither source declares: expected [ sys_exchange_rate ] to deeply equal []'. H2 HOLDS: the objects list at packages/platform-objects/src/plugin.ts:205 is in PlatformObjectsPlugin.init, which registers through the manifest service. The test roster did not boot that plugin; nav_exchange_rates arrives through @objectstack/setup (SETUP_NAV_CONTRIBUTIONS). The registration is neither gated nor lazy. H3 FALSIFIED, measured with on-disk probes through scripts/ablation-replace.mjs, each restored to HEAD: check-app-nav-i18n's CONTRIBUTORS is a NAV roster. Adding the plugin with apps ['setup'] reds the run ('landed NO setup navigation id'). Adding it with apps [] reds the self-test ('every CONTRIBUTORS entry declares at least one app IN the population'). The script header records that widening this roster with a non-nav entry was refused. That gate is green unchanged and already labels nav_exchange_rates, which comes from @objectstack/setup. So the plugin went into the test roster alone, following the ruling's intent (the test's own remedy, no fallback). The literal 'and to check-app-nav-i18n's' clause is NOT executed. This conflict is named here and in the PR body, not decided silently.",
      "tests": "At head ed373afd88: pnpm --filter @objectstack/dogfood exec vitest run --maxWorkers=2 test/platform-app-object-entry-views.test.ts gives 'Tests 52 passed (52)', lock VERDICT command-exit 0. The verbose -t run shows '(a) ... > sys_exchange_rate' passing. pnpm --filter @objectstack/dogfood typecheck: VERDICT command-exit 0. Teeth: the roster entry was deleted on disk (ablation-replace: anchor 1 -> 0, blob 095a91fbc110 -> 825f7e6fdc38). That gives 'Tests 1 failed | 51 passed (52)' with the same assertion, now at L384. The file was then restored, and ablation-replace confirmed 'blob == HEAD (095a91fbc110) and git diff HEAD is empty'. H1 reproduction at base blob: 1 failed | 51 passed, L371, VERDICT command-exit 1. No build or dist leg was needed, because the mutated file is the test itself. pnpm check:app-nav-i18n: exit 0, 'OK (12 contributor(s), 4 locale(s), 2 app(s) ...)'.",
      "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack gave 51 commands. All were run at ed373afd88, with each exit code written to disk before any pipe. 50 exited 0. pnpm check:dual-build-cjs-loads exited 3: PREREQUISITE NOT MET, eight packages outside this diff have no dist. Its reading is NOT MEASURED: dual-build-cjs-loads, reason: whole-workspace build not present locally. --ran with exit codes: '51 derived famil(ies) accounted for — 50 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)'. Also ran pnpm check:app-nav-i18n: exit 0. PR check-runs at ed373afd88 when this report was written: 27 total (in_progress 18, skipped 8, success 1, failure 0). Dogfood Regression Gate does not run on pull_request or in the merge queue, so its first CI reading is the post-merge main push.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/pulls, plus the label leg POST /repos/objectstack-ai/objectstack/issues/27873/labels [skip-changeset]); post-stamped comment POST /repos/objectstack-ai/objectstack/issues/27813/comments (this report). git push of the branch is not counted here.",
      "line_budget": "1 file, +15 / -1 (16 changed lines, dispatch-gates count); no skills/** touched",
      "files_changed": ["packages/qa/dogfood/test/platform-app-object-entry-views.test.ts"],
      "deviations": [
        "The dispatch's check-app-nav-i18n clause (ruling and H3) is not executed. Both ways of adding the plugin red that gate (measured above), and the gate's header records that widening the roster this way was refused. The plugin is in the test roster only.",
        "Commit trailer is the model-free 'Co-Authored-By: Claude' (anthropic noreply address) instead of the harness reminder's model-named one. check:commit-card-trailers refused the push otherwise, and os-dev.md says the harness trailer is reported, not copied. A first commit also carried 'Refs #27813' and was reworded before any push.",
        "The first H3 probe pair was a no-op, and its readings are void: ablation-replace refused because the replacement contained the anchor (anchor count 1 -> 1). Both probes were re-run with an anchor the insertion removes, and both mutations landed (anchor 1 -> 0)."
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none · noted, not filed. The test header says the roster mirrors check-app-nav-i18n's CONTRIBUTORS, but that gate also boots @objectstack/service-settings and the test does not. Its only contribution, nav_settings_branding, is type 'url', so no object entry is missing from the test's population. This is recorded in the PR's Acceptance notes."
      ]
    }
  5. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    ACCEPT → PR #27873 (red 2, shard 2/3) · 2026-10-30T02:44Z · ready + auto-merge armed. Red 1 is #27806 / PR #27878, which is still in CI.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Landed (red 2 stop-bleed): PR #27873, merged as e65536193a · 2026-10-30T03:04Z

    The merged diff matches the reviewed head ed373afd88: the sorted +/− lines are hash-identical. ACCEPT → PR #27873 comment 6513665654.

    This anchor stays open, still pm:dispatched with the seat, until two things happen: the first main push after this merge shows Dogfood Regression Gate (2/3) green, which the seat reads and records here, and red 1 lands via PR #27878 (#27806). The next green 4-hourly full run then closes the anchor as designed.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Both stop-bleeds proven on main · 2026-10-30T03:25Z

    Main push CI run 40996359151 ran on 784dc9ae66, which contains both fixes: #27878 (816889e2fb, red 1) and #27873 (e65536193a, red 2).

    Both reds this anchor named are cleared on main. The anchor closes on the next green 4-hourly full run, as designed. pm:dispatched comes off in this act. Nothing in the seat's hands is still open on this card.


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Two green scheduled full runs since both stop-bleeds · 2026-10-30T08:56Z

    The scheduled CI full runs at 2026-10-30T04:04Z and 2026-10-30T08:05Z are both green, after PRs #27873 and #27878 landed. The card's own close condition (「closed by the next green run」) is met, and this generated card has not closed itself, probably because it carries pm:dispatched. The owning seat (domain:devx#2) closes it as completed.


    Generated by Claude Code

  9. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Seat reading of the 12:05Z full run · 2026-10-30T14:27Z

    Correction first: the seat missed triage's close request 6518942541, made after the two green full runs at 04:04Z and 08:05Z. This card was not on the seat's watch list after its two stop-bleeds landed, so it was not closed then. The 12:05Z scheduled run (41052787764, on 5448585d87) then went red and refreshed the card.

    What is red: one test, in Dogfood Regression Gate (3/3):

    Already fixed: PR #28095 merged as 91a423ef6b at 13:11Z, after this run's commit. Main's push CI run 41061160045 on that merge shows Dogfood Regression Gate (1/3), (2/3) and (3/3) all success, plus the verify job. #28082 is closed with a landing note (6523907567).

    Next: nothing is owed in code. The seat now watches this card and reads the next scheduled full run (due about 16:05Z):

    • green: the seat closes the card as completed, per triage's request;
    • red: the seat files the new red as its own stop-bleed.

    Generated by Claude Code

  10. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Seat reading of the 16:03Z full run · 2026-10-30T16:24Z

    Scheduled CI run 41086418942 on c48cd2c103 is red on one test, in Test UI (9/16):

    The dogfood red is gone. All three Dogfood Regression Gate shards are green in this run, which confirms #28095 on the full battery.

    Owned elsewhere: #28185 (domain:ui, pm:dispatched) is the anchor for this red, and #28189 is a merge-queue duplicate. The fix lands in ui/**, so the devx seat dispatches nothing for it.

    Next: the seat keeps watching this card. On the first green full run after #28185 lands, it closes the card as completed.


    Generated by Claude Code

  11. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    Contributor

    domain:devx#2 · os-justin · session_01QSeKYmTYfaPbLQD4BJfomW

    Closed as completed · 2026-10-30T20:27Z. This follows triage's request 6518942541 ("The owning seat (domain:devx#2) closes it as completed") and the card's own close condition: closed by the next green run.

    Green full run: the scheduled CI run 41120209464 on 86cf7ceff6 (2026-10-30T20:03Z) concluded success, with 42 of 42 jobs green. Both reds this card carried today are cleared on the full battery:

    Root cause: spec/lint diffs skip the Test UI shards. That is #28220, which is awaiting the maintainer's ruling on the ci.yml change (6529967823).

    The next red 4-hourly run reopens or refreshes this card automatically.


    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:devxpriority:p0Critical: blocker, must ship before MVP

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions