Skip to content

ci(self-tests): the shard sizes /3, /8, /16 are copied into five self-tests and fixtures — read them from the workflow's matrix blocks #26443

Closed

Description

@objectstack-fleet

Filing gate: ③ maintainer-directed. Maintainer, 2026-10-27, in the director summon chat, to the seat's check-retirement sweep and its offer of three cards, verbatim: 「同意」 (the sweep was ordered by 「排查一下还有哪些检查应该退役」). Filed by the director seat (session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708, sweep record 6433263738). ⛔ Not a claim. Batch-of: 11 (director seat, 2026-10-27). Dedupe: 600 newest open + closed issues grepped for the check's file name → 0 unless stated. Part of #26431. Reader: domain:devx (ci scripts) and domain:ui for the two ui fixtures.

Measured: shard-count literals live in scripts/partition-test-shards.mjs:160, scripts/check-required-contexts.mjs:2068–2083 (self-test asserts ci.yml contains Test Core (${{ matrix.shard }}/8)), scripts/check-shard-attestation.mjs:2257, 2821, scripts/pm/check-expected-skips.mjs:316, 330, 359 (the roster child handles these), ui/scripts/__tests__/select-affected-tests-wiring.test.ts:54 and select-affected-tests.test.ts:450 (/16). Changing a matrix size means editing every one; none of them is the authority (ci.yml's matrix: blocks are).

Wanted: one small reader of ci.yml's matrix sizes (or the existing parser in check-required-contexts) that the self-tests and fixtures call, so the literal appears once — in the workflow. Acceptance: git grep -nE "/(3|8|16)\b" scripts/*.mjs scripts/pm/*.mjs ui/scripts/__tests__/*.ts shows no shard-size literal outside the reader; all self-tests green. Size: S. Clause-②: no. Metadata-protocol: none.

Activity

  1. added
    toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
    pm:queueReady for the PM dispatch loop
    domain:devxDomain lane — seat card indexed by label:pm:seat
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    on Oct 27, 2026
  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 10 · 2026-10-27T04:23Z
    Session: session_01Q4MDXRbEJCNdPAP4SiXwp9 (devx seat 2) · card thread cmsg_01FdL1XeUyvVNxLreh3F4Qi9MKqYfea9FwGdabNwe4CdFw
    Account: os-steve
    Branch: claude/project-thread-6wlskb (the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn)
    Worktree: objectstack-issue-26443
    Domain: domain:devx
    Seat: domain:devx#2 (seat post #20163)
    File surface: the devx half only — one reader of .github/workflows/ci.yml's matrix: shard sizes (a new scripts/lib/ helper or the existing parser in scripts/check-required-contexts.mjs), called by scripts/partition-test-shards.mjs, scripts/check-required-contexts.mjs self-test, scripts/check-shard-attestation.mjs (L2257, L2821) so the literals /3, /8, /16 sit only in the workflow. ⛔ ci.yml read, never edited; ⛔ scripts/pm/check-expected-skips.mjs left to the roster child of #26431; ⛔ the two ui/scripts/__tests__/** fixtures are domain:ui (reported for a ui card, not touched)
    Container & model: S, mode:thread, model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — maintainer-directed filing (sweep 6433263738), Part of #26431
    Thread-read: none
    Premise: the shard-size literals are at the card's measured lines on origin/main (the dev re-greps first)
    Serial constraints cleared: #26091 (this seat, in flight) edits check-aggregator-roster, check-ci-filter-parity, check-doc-frontmatter self-tests and lint.yml; disjoint files


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 27, 2026
  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26443,
      "status": "done",
      "branch": "claude/project-thread-6wlskb",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26488",
      "session": "session_01ADHkmT3NzSaaWLSdqdDPMd",
      "premise_still_valid": true,
      "summary": "Devx half only. New scripts/ci-shard-matrix.mjs reads a job's strategy.matrix.shard size from ci.yml as text (literal list, or a planned matrix's full-roster fallback) and refuses every other shape with no default. partition-test-shards.mjs SHARD_COUNT, the check-required-contexts.mjs battery (9) anchor and the check-shard-attestation.mjs live-ci.yml anchors now derive from it. Its --self-test (27 cases, 5 pinned batteries, verdict handshake) is wired through the root alias check:shard-attestation, which lint.yml already runs. The ui fixtures and check-expected-skips.mjs were left alone, so the PR says Part of #26443 / Part of #26431.",
      "tests": "head 35440f1d: node scripts/ci-shard-matrix.mjs --self-test -> '27 cases pass across 5 batteries (live: test=8, dogfood=3, test-ui=16)'; partition-test-shards --self-test exit 0 ('8 shards, max/mean 1.00x'); check-required-contexts --self-test exit 0 (174 assertions); check-shard-attestation --self-test exit 0 (326 assertions, was 325); ci/plan-test-core-shards --self-test exit 0. No ablation: diff is scripts/config only.",
      "gates": "dispatch-gates --commands at 35440f1d: 44 derived, 44 run locally, every exit 0 captured before any pipe (incl. pnpm check:pm-dispatch-gates '1935 cases pass', check:self-test-wired 240 scripts (was 239), check:required-contexts, check:shard-attestation, and the four dist readers after a ./packages/** build under os-verify-lock, VERDICT command-exit 0). --ran: '44 derived, 44 run, 0 NOT-MEASURED (a DERIVED zero), 0 UNRUN'. CI check-runs on PR #26488: in_progress at report time. Dispatch-gates slow tier: not run locally (no script deleted or renamed), it runs on push to main and on the schedule.",
      "line_budget": "+386 / -47 over 5 files (433 changed lines, under the 3000 human-merge threshold)",
      "files_changed": ["package.json", "scripts/ci-shard-matrix.mjs", "scripts/check-required-contexts.mjs", "scripts/check-shard-attestation.mjs", "scripts/partition-test-shards.mjs"],
      "deviations": [
        "The reader is at scripts/ci-shard-matrix.mjs, not under a new scripts/lib/. Under scripts/lib/, check:pm-dispatch-gates turned one case red ('promoting 34 module(s) to gate files subtracts no inherited hint ... LOST ... via scripts/partition-test-shards.mjs (scripts/lib/ci-shard-matrix.mjs)'). The multi-segment import specifier reads as a watch hint. A sibling import is green.",
        "The acceptance grep is not empty: 105 hits remain in scripts/*.mjs + scripts/pm/*.mjs outside the reader and check-expected-skips. Each is prose, a measured-run replay at its own width, a synthetic workflow fixture, a CLI slice label or an unrelated fraction. None copies a live ci.yml size. The classification is in the PR body under Acceptance notes.",
        "Commit trailers are the model-free pair from AGENTS.md, not the harness's model-named Co-Authored-By."
      ],
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "3 — mcp__github__issue_read x2 (get, get_comments), mcp__github__pull_request_read x1 (get, body read-back); no write tool",
      "api_writes": "2 — fleet-write relay pr_create (#26488, draft, assignees os-steve, labels skip-changeset), post-stamped os-dev-report comment on #26443; plus 2 git pushes (not REST)",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: domain:ui card (seat to forward) · ui/scripts/__tests__/select-affected-tests-wiring.test.ts:54 and ui/scripts/__tests__/select-affected-tests.test.ts:450-453 still spell /16 for the Test UI matrix; the reader exports shardTotal(text, 'test-ui') for them · dedupe words: select-affected-tests /16 shard literal",
        "carrier: #26431 roster child · scripts/pm/check-expected-skips.mjs:316,330,359 spell /3, /8, /16 · noted, not touched",
        "carrier: none · scripts/ci/select-shard-timings-run.mjs:117 SHARD_COUNT = 8 is a matcher default by its own header (each run judged at its own width); outside this card's grep and file surface · noted, not filed"
      ]
    }

    Generated by Claude Code

  5. added
    pm:queueReady for the PM dispatch loop
    pm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
    and removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Oct 27, 2026
  6. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    devx seat 2 · devx half released: PR #26488 (Part of #26443, Part of #26431) merged as e5131cfb. Its +/- lines on main match the reviewed head 35440f1d in all 5 files. scripts/ci-shard-matrix.mjs is now the one reader of ci.yml's shard sizes. partition-test-shards, check-required-contexts and check-shard-attestation read it, and their /3, /8, /16 literals are gone.

    Left on this card (domain:ui): ui/scripts/__tests__/select-affected-tests-wiring.test.ts:54 and select-affected-tests.test.ts:450–453 still spell /16. They can call shardTotal(text, 'test-ui') from scripts/ci-shard-matrix.mjs. pm:retriage: please route this remainder to domain:ui (a lane change on an undispatched card is triage's act). The devx seat drops its assignee and pm:dispatched, and the card goes back to pm:queue.


    Generated by Claude Code

  7. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 27, 2026
  8. removed
    pm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
    on Oct 27, 2026
  9. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    devx seat 2 · pm:retriage withdrawn: ui seat 1 has taken the ui/scripts/__tests__/** remainder (the two /16 spellings) in its own card thread, so no lane change is needed. The card stays pm:queue for that seat's claim.


    Generated by Claude Code

  10. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_017iXjUm1rujwDk7f3KT1Pkk (seat); implementing card thread session_01ADHkmRRgsu9coZffDuXRpz
    Account: os-steve
    Branch: claude/project-thread-0bg1pt (platform-assigned card-thread branch; a card thread can push only its assigned branch, and the name carries no issue number, so this claim is the identity record)
    Worktree: the card thread's own container
    Domain: domain:ui
    Seat: domain:ui#1
    File surface: ui/scripts/__tests__/select-affected-tests-wiring.test.ts, ui/scripts/__tests__/select-affected-tests.test.ts only (test-only, skip-changeset) (stop on breach; explain in the report). ⛔ ui/.github/** and the root .github/workflows/ci.yml are out of bounds (maintainer's word, ui-merge epic in flight). Changeset in the root .changeset/.
    Container & model: S, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate), effort: low
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a: renderer defect in ui/, the producing code is the cited ui file; no platform path covers it; reached through the public Console
    Thread-read: 6434662842
    Premise: holds: scripts/ci-shard-matrix.mjs with shardTotal is on origin/main (#26488, e5131cf), 2026-10-27T05:38Z. This claim covers the ui half only (two ui tests), handed to domain:ui seat 1 by devx seat 2; the devx half stays with devx seat 2 claim 6433712787
    Serial constraints cleared: none

    Dispatch order handed to the card thread by the project coordinator (three partitions: ruling / mechanism hypotheses / suggested route); the dev does not claim, and starts only once this claim names its branch.

  11. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26443,
      "status": "done",
      "branch": "claude/project-thread-0bg1pt",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26516",
      "session": "session_01ADHkmRRgsu9coZffDuXRpz",
      "premise_still_valid": true,
      "summary": "ui half only (Part of #26443). The two ui selector self-tests no longer spell the Test UI matrix width: select-affected-tests-wiring.test.ts builds RUN_HEADER and its three --shard=1/N / 'shard 1 of N' expectations from SHARDS = shardTotal(ci.yml text, UI_JOBS.test), and select-affected-tests.test.ts 'keeps the matrix width...' reads shardTotal(rootCi(), UI_JOBS.test) and now asserts the run-step header is present. Both import ../../../scripts/ci-shard-matrix.mjs; ci.yml and the reader are untouched.",
      "tests": "head 9507724c: vitest on the two files -> Test Files 2 passed (2), Tests 49 passed (49), os-verify-lock VERDICT command-exit 0. Ablation via scripts/ablation-replace.mjs on ci.yml (trap-restored; blob == HEAD b1014f87af2c and git diff HEAD empty after each leg): leg A, matrix list alone -> 12 (on disk list12=1 list16=0): new tests Tests 1 failed | 38 passed, wiring file refuses at load 'ci.yml has no step headed ... /12)'. Leg B, whole test-ui job -> 12 (list12=1, /12=4, /16=0, of12=1; ci-shard-matrix --job test-ui answers 12): new tests 49/49 green (follow), origin/main copies of the same files Tests 1 failed | 38 passed (pinned at 16).",
      "gates": "dispatch-gates --commands at 9507724c: 18 derived, 18 run, exit codes captured before any pipe. 17 exit 0 (closing-keyword-parity scan + --self-test, comment-mask-corpus, cross-package-test-inputs, driver-memory-census, engine-double-contract, gitlink-declared, nul-bytes, published-files, query-options-erasure, refd-timer-probe, tier-file-adoption, type-check-coverage, type-check-debt, undeclared-dep-imports, watch-hint-literal, where-matcher). 'pnpm --dir ui exec vitest run scripts/' exit 1, not this diff: first run 16 files red on Cannot find package '@objectstack/spec/...' (deps unbuilt); after turbo build of the seven ui-dep closures (VERDICT command-exit 0) Test Files 1 failed | 177 passed | 2 skipped, Tests 1 failed | 5096 passed, the one red a 15 s timeout in check-i18n-dead-keys.test.ts on the shared box; that file alone 134/134 green. --ran: '18 derived, 18 run, 0 NOT-MEASURED, 0 UNRUN'. CI check-runs on #26516: in_progress at report time.",
      "line_budget": "+24 / -11 over 2 files (35 changed lines)",
      "files_changed": [
        "ui/scripts/__tests__/select-affected-tests-wiring.test.ts",
        "ui/scripts/__tests__/select-affected-tests.test.ts"
      ],
      "deviations": [
        "Recorded exit for the derived 'pnpm --dir ui exec vitest run scripts/' is 1 (unbuilt-deps run, then a shared-box timeout in an unrelated file); the timed-out file passes alone. Test UI on the PR is the authority.",
        "Edits beyond the card's two cited lines, inside the same two files: wiring test lines 291/292/309 (--shard=1/16, 'shard 1 of 16') follow the same width, and the docblock's 'shard N/16' became 'shard N/M'.",
        "Commit trailers are the model-free pair from AGENTS.md, not the harness's model-named Co-Authored-By."
      ],
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "4 — mcp__github__issue_read x3 (get_comments, get, get_labels on #26516 which answered not-an-issue), mcp__github__pull_request_read x1 (get, body/labels read-back); no write tool",
      "api_writes": "2 — fleet-write relay pr_create (#26516, draft, assignees os-steve, labels skip-changeset; read-back 5782 bytes identical), post-stamped os-dev-report comment on #26443; plus 1 git push (not REST)",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none · ui/scripts/__tests__ still has shard-shaped text: 'Test (shard N/16)' prose in check-eager-closure-budget, check-skill-examples, check-test-path-roots headers (name objectui's retired job), and check-test-shard-results' synthetic 8-shard roster (reads no workflow); none copies a live ci.yml size · noted, not filed"
      ]
    }

    Generated by Claude Code

  12. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Both halves of this card have landed, so devx seat 2 (#20163) closes it.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:devxDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions