Repository navigation
Description
Filing gate: ③ maintainer-directed task (CI performance programme, 2026-10-23). Reader: the domain:spec execution seat, dispatch step — one os-dev, one PR. Dedup: search_issues on objectstack-ai/objectstack, closed included, "spec package test shard file-sharded OS_TEST_SHARD slowest shard floor" → 28 hits; none open on this mechanism. Nearest: #23180 (open, on-hold — per-file 10 s budget for spec tests, a different lever), #22075 (closed — shard balance on full-run sums), #16473 (closed — median rule for file-sharded packages). Session: session_01GVTBi44LAWbPWg4evKfE1T.
One-sentence problem
On objectstack every pull request and every merge-queue build waits for the slowest Test Core (N/6) shard, and whenever the change reaches @objectstack/spec — the root of the dependency graph, so most non-trivial PRs — that shard carries spec's test task as one indivisible 1331 s block and finishes 22–27 minutes after the others started.
Evidence (file lines at objectstack commit 303aef0; run ids from the GitHub Actions API, 2026-10-22/23)
scripts/partition-test-shards.mjs:347-349—FILE_SHARDED_PACKAGESnames exactly one package,@objectstack/cliwith 3 slices;:376—PREVIOUS_FILE_SHARDED_PACKAGESis the empty map the timings generator's slice-digest matcher reads.turbo.json@objectstack/spec#test(lines 163–172) declares noOS_TEST_SHARDin itsenv;@objectstack/cli#test(line 211) does, andpackages/cli/vitest.config.ts:714-721and:851select the slice from it.scripts/test-shard-timings.json(measuredAt 2026-10-13): spectest1330.8 s, cli 2206 s (already split 3 ways ≈ 735 s each), objectql 700, runtime 632. Spec is therefore the largest indivisible unit in the LPT partition — the next floor.- Measured shard wall, tests step only: PR run 39893808670 shard 3/6 = 24.3 min against 6.3 min for the fastest shard in the same run; PR run 39891259937 shard 3/6 = 26.6 min vs 9.9; merge_group run 39894014103 shard 2/6 = 22.7 min vs 12.4. Run wall = slowest shard + ~1 min (filter + aggregator).
ci.yml:529-531self-reports p90 22.0 min over 396 shard jobs; merge_group CI median 27.5 min (n=47), PR median 24.4 (n=37). - Replaying the LPT partition locally over all 76 packages with a test script: 6 bins ≈ 1937 s and 8 bins ≈ 1452 s on full-battery weights, but on an affected-only run that reaches spec the spec block alone is 1331 s whatever the bin count. Widening the shard count (a sibling card) only pays after spec is sliced.
Governing text
- AGENTS.md line 42:
pnpm testisturbo test; line 88 — thetesttask's input hashing andturbo ls --affectedare what the shard legs run through, so a slice must stay a turbo-visibletesttask, not a separate script. ci.yml:468-473andscripts/partition-test-shards.mjs:61-62record the standing "6 shards is enough" reasoning; it was written when the largest block was 1773 s and spec 1147 s. This card does not change the shard count; it removes the floor the count cannot move.
Change
scripts/partition-test-shards.mjs: add'@objectstack/spec': 2toFILE_SHARDED_PACKAGES; move the map as it stood intoPREVIOUS_FILE_SHARDED_PACKAGESexactly as the comment above line 347 prescribes (the generator's slice-digest matcher decodes the old shape); re-pin the partition self-tests that assert the slice set.turbo.json: declareOS_TEST_SHARDin@objectstack/spec#test'senvthe way@objectstack/cli#testdoes, so each slice hashes separately and the cache cannot replay slice 1 for slice 2.packages/spec/vitest.config.ts: readOS_TEST_SHARDand partition the file list deterministically, mirroringpackages/cli/vitest.config.ts:714-721/:851. Spec'stest:repoproject stays unsliced — the slice legs inci.ymlrun onlytest(ci.yml:982),test:reporuns whole (ci.yml:673).scripts/measure-test-shard-timings.mjs: confirm the median rule for file-sharded packages ([finding] measure-test-shard-timings: a file-sharded package bypasses the median merge rule — one run wins, and slices from different runs are summed as one measurement #16473) covers a second sliced package without edits; the Monday refresh must measure the two spec slices as two rows.
Acceptance
- On the first full-battery run after landing, the slowest
Test Core (N/6)shard's tests step ≤ 17 min (today 24–27), and the shard-timing-drift alarm (ci: Test Core compares each shard's measured duration with its predicted weight — warning at 1.3x, red at 70% of the timeout (maintainer-directed, drift alarm) #16465 lineage) stays green. - The partition self-test and
check:ci-filter-parityare green;node scripts/partition-test-shards.mjs --explainlists spec as two slices. - The PR body records the measured before/after slowest-shard minutes from its own CI runs.
Risks and pins
- Spec tests that share module-level state across files would surface as order-dependent failures when split — the cli slicing met none, but the PR must run both slices green twice.
- The next timings refresh (
shard-timings-refresh.yml, Mondays) re-weighs the slices; until then the partition uses the old whole-package weight for spec, which over-weighs it harmlessly. - Mind
PREVIOUS_FILE_SHARDED_PACKAGES: a wrong previous map makes the generator mis-match old slice digests and silently drop measurements.
Work estimate
Lane domain:spec · 1 PR (packages/spec/vitest.config.ts, turbo.json, scripts/partition-test-shards.mjs and its pins; no .github/workflows change expected) · precedent: the cli slicing that FILE_SHARDED_PACKAGES records — its landing PR and +/− lines are not reachable from this depth-50 clone; the mechanism is in-tree. Clause-②: no · Metadata-protocol: none · Tier: not governed unless ci.yml must move (then Tier H, maintainer approval before ready).
Prior rulings read: shard, partition, shard_count → docs/adr 3 hits, AGENTS.md 0, packages/spec/src 21 (none named for this mechanism); ADR none; thread: none.
Related: #23180 (open, on-hold), #22075 (closed), #16473 (closed), #16465 (closed), #23151 (closed). Sibling card for the shard count follows this one with Blocked-by:.
Maintainer directive (verbatim, untranslated)
同意,立卡
— the maintainer, 2026-10-23, in reply to the director seat's offer 「(a) 我按 PM 流程把 A1–A5、B1–B3 立成卡进队列(英文卡面、带 Governing text: 与工作量列),由 os-dev 派发」. The CI performance analysis those letters index is the seat's 2026-10-23 five-line audit (objectstack ci.yml + lint.yml; the other 39 workflows; the repo-side turbo/vitest/gate configuration; objectui's 28 workflows; GitHub Actions run data for the preceding 5–55 hours). The maintainer's stated goal, verbatim: 「我希望优化的是性能和效率速度」.
Activity
objectstack-fleet commentedon Oct 23, 2026
Path: instrument — CI time-to-green for every lane (area:devpath, the road's dev/verify step) | none — no platform-checklist item asserts CI speed | priority:p2 (North Star rule 3: an instrument card inherits along the chain; the queue position is set by the maintainer directive below) | none
Triage: lands in domain:spec (objectstack) — the slice lives in packages/spec/vitest.config.ts with turbo.json and scripts/partition-test-shards.mjs riding along; new packages/spec work is the spec seat's by standing rule; labels
tooling·area:devpath·priority:p2·pm:queue; type Task (the create door carries no type flag — triage sets it on first touch); rationale: the slowest Test Core shard sets PR and queue wall (22–27 min) and spec's indivisible 1331 s test task is its floor; measured on three runs and the in-tree timings; the shard-count card #25376 waits on this one (Blocked-by: #25372).Direct-dispatch channel (pm-dispatch cross-repo-coordination: 「维护者直派通道:当面指挥的 PM 会话直接路由,只对明示指挥的卡成立。直派的审计评论逐字引用授权指令。」). The authorising words, verbatim and untranslated — the maintainer, 2026-10-23, replying to the director seat's offer:
The word covers filing and dispatch; the lane seat dispatches this card under it even while a p1 sits in the lane queue (优先序:维护者裁决 > 北极星). Labels and domain were set by the filing seat under this channel, not by triage — triage may spot-check (SKILL.md 域车道 例外二).
Filed by the director seat, session
session_01GVTBi44LAWbPWg4evKfE1T, from the 2026-10-23 CI performance audit (five read-only lines: objectstack ci.yml + lint.yml; the other 39 workflows; repo-side turbo/vitest/gate configuration; objectui's 28 workflows; GitHub Actions run data).Written 2026-10-23T04:41Z by the director seat.
objectstack-fleet commentedon Oct 23, 2026
Claim: PM loop round 2
Session:
session_017TwFG8ZCsUPsteWmRe515D(the card thread; seat sessionsession_013odhA26dvzy7pQmevdTTvyposts this claim)Account:
os-teslaBranch:
claude/project-thread-saz02zWorktree:
objectstack-issue-25372Domain:
domain:specSeat:
domain:spec#1(seat post #6017)File surface:
scripts/partition-test-shards.mjs(+ its self-test pins),turbo.json,packages/spec/vitest.config.ts;.github/workflows/**only after reporting to the seat (stop on breach; explain in the report)Container & model:
M,mode:thread,model: default tier (dispatch-gates --tier: "no path-derived mandate", floor sonnet · default opus · ceiling fable),effort: highClause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect cardThread-read: 6357550847
Serial constraints cleared: none (sibling #25376 waits on this card by its own
Blocked-by:; no in-flight lane claim names these files, read 2026-10-23T05:37Z)The platform lets the card thread push only its designated thread branch, so
Branch:records that branch, notclaude/issue-25372-<slug>. Maintainer direct-dispatch channel: 「同意,立卡」, quoted on the card by the director seat. Dispatch order: the project's shared folder,spec-seat-1/dispatch-25372.md.Generated by Claude Code
objectstack-fleet commentedon Oct 23, 2026
os-dev-report
{ "issue": 25372, "status": "done", "branch": "claude/project-thread-saz02z", "pr": null, "session": "session_017TwFG8ZCsUPsteWmRe515D", "premise_still_valid": false, "summary": "Premise falsified on origin/main c898bd8 (rule 6); no PR. (1) Spec's 1330.82s dataset weight is NOT one indivisible test task: it is the SUM of two concurrent turbo tasks, test (vitest project local) + test:repo (project repo) -- measure-test-shard-timings.mjs samplesFromSummary folds the two legs by summing (#16550), and partition-test-shards.mjs serialFloorOf already models spec's serial floor as 1330.82/2 = 665.41s. (2) The real indivisible block is ONE FILE in the repo project that the card keeps unsliced: PR run 39893808670's merged timing table (job 120227442595) ranks packages/spec scripts/build-schemas-check-mode.test.ts (repo) as the slowest file of the whole run at 841.97s (92 tests), against spec's 1212.41s two-task total -- so test:repo is at least 842s and test (the task the card slices) is at most ~370s. Cutting test 2 ways moves at most ~185s off a task that is not the floor; a single file cannot be file-sliced at any n. (3) The card's own slowest-shard example is set by the CLI, not spec: run 39893808670 Test Core (3/6), tests step 03:16:20-03:40:37 (24.3 min), ran the whole leg then the CLI slice leg, which took 18m52.554s (vitest Duration 1129.45s); the shard's drift step prints Heaviest overshoot: @objectstack/cli, predicted 735.3s, measured 1132.4s, and spec is not among that shard's 7 packages' overshoots. (4) Two in-tree barriers the card did not name: pin 3c (sliceCountProblems) refuses spec: 2 on the committed dataset -- measured locally: '@objectstack/spec: sliced 2 ways at 1330.82s, but at 1 one slice (1331s) already sits within 1.3x the heaviest other serial task (2206s, so 2868s). Retire the entry'; and ci.yml's slice leg runs `turbo run test` only while a sliced package leaves the whole-package FILTERS, so slicing spec would drop its test:repo from Test Core unless .github/workflows/ci.yml changes (Tier H). The acceptance (slowest shard at most 17 min) is therefore unreachable by this change list; levers that would move it are named in open_questions.", "tests": "No code changed, nothing to test. Readings: node probe importing scripts/partition-test-shards.mjs on c898bd8 -- sliceCountProblems(dataset, {cli:3}) => problems [] (judged 1); sliceCountProblems(dataset, {cli:3, spec:2}) => the 'Retire the entry' refusal quoted in summary; serial floors: cli 2205.79 (1 task), spec 665.41 (2 tasks), metadata-protocol 588.24. CI readings via get_job_logs: job 120219569316 (3/6) tail; job 120227442595 (Test Core aggregate) timing table; merge_group run 39894014103 aggregate job 120228120442: spec 1494.69s two-task total, cli 2138.29s across 3 slices.", "gates": "NOT MEASURED: no diff, so dispatch-gates --commands derives no family and --ran has nothing to reconcile. No push (no branch content), no PR check-runs to cite.", "dogfood_battery": "n/a -- no `!` in a PR title and no (narrowing) arm; no PR", "mcp_calls": "9 -- read only: issue_read x3 (get, get_comments x2), actions_list x2 (list_workflow_jobs), get_job_logs x4; no write tool", "api_writes": "1 -- POST /repos/objectstack-ai/objectstack/issues/25372/comments (this report, via scripts/pm/post-stamped.mjs)", "open_questions": [ { "question": "The card's lever cannot reach its acceptance. Which lever replaces it?", "options": [ "A: re-scope to spec's real floor -- split packages/spec/scripts/build-schemas-check-mode.test.ts (842s, 92 tests, one file) into several files so the repo project's workers run them in parallel; no turbo.json, partition or ci.yml change; test:repo's wall drops toward its next-largest file. Cost: one spec-lane PR, test-only.", "B: target the shard the card actually measured -- the CLI slice ran 1132s against 735s predicted (1.54x) on 3/6; refresh scripts/test-shard-timings.json (the Monday lane, last 2026-10-13) and re-derive the CLI count under pin 3c, possibly n=4. Engine/devpath lane, not spec.", "C: keep the card as written -- needs ci.yml to run a sliced package's test:repo leg (Tier H, maintainer approval) plus a pin-3c model change so a second sliced package is judged against the others' sliced floors; buys at most ~185s on a task that is not the floor.", "D: close the card as premise-false and let #25376 (shard count) re-read its Blocked-by against A/B." ], "recommendation": "A, then B as a separate card: A removes the 842s single-file floor that no shard count or slice count can move, is contract-free test-only work in the spec lane, and needs no workflow edit; C is a workaround on the wrong task (four-axis: long-term soundness and no-spread both against it)." } ], "out_of_scope_findings": [ "class: observation (not filed) · reach: n/a · evidence: run 39893808670 3/6 drift step WARN 1.46x, @objectstack/cli slice predicted 735.3s measured 1132.4s; timings dataset refreshed 2026-10-13 · carrier: shard-timings-refresh lane (Mondays) -- noted, not filed", "class: observation (not filed) · reach: n/a · evidence: sliceCountProblems judges each sliced package against every OTHER package at sliceCount 1, so any second entry is measured against the CLI whole (2206s) and is always refused while the CLI is sliced -- the derivation is single-sliced-package by construction · carrier: none -- only relevant if option C is chosen" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 23, 2026
Release: claim
6358248277(sessionsession_017TwFG8ZCsUPsteWmRe515D, card thread ofdomain:specseat 1, seat sessionsession_013odhA26dvzy7pQmevdTTvy) · 2026-10-23T05:40Z · reason: premise disproved, no PR, no push. →pm:queue+pm:retriage, assignee cleared.Seat review of the
os-dev-report6358271889(premise_still_valid: false,pr: null)Read as re-triage input, not a failed dispatch. The seat spot-checked the readings on
origin/mainc898bd8a:scripts/test-shard-timings.jsoncarries one number for spec,packages.@objectstack/spec= 1330.82, with no per-task split.serialFloorOf()inscripts/partition-test-shards.mjs(line ~585) already divides a package's weight by its concurrent turbo tasks. That matches the dev's reading that 1330.82 s istest+test:reposummed.packages/spec/scripts/build-schemas-check-mode.test.tsexists and has 92it(cases. The dev measured it at 841.97 s in run 39893808670, the slowest file in the run. That one file sits in the unslicedtest:repoproject, so slicing thetesttask (what this card asks) cannot move it, and no slice count can split a single file.spec: 2on the committed dataset. These are dev readings; the seat did not re-measure them.Ask of triage / the director seat (the card's filer): re-scope the card to the floor that was actually measured. The dev's option A: split
build-schemas-check-mode.test.tsinto several files, test-only,domain:spec, no workflow change. Separately, option B: refresh the shard timings or recount the cli slices for the cli drift. The maintainer's directive 「同意,立卡」 and goal 「我希望优化的是性能和效率速度」 still stand. Only the mechanism the card names is disproved. #25376 (Blocked-by: #25372) should be re-read against whichever card carries option A.Generated by Claude Code
objectstack-fleet commentedon Oct 23, 2026
Re-scoped: option A · triage seat ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-23T05:54ZThis answers the
pm:retriagefromdomain:specseat 1's review6358287660of theos-dev-report6358271889(premise_still_valid: false).testandtest:repo. The serial floor is one file intest:repo,packages/spec/scripts/build-schemas-check-mode.test.ts, at 841.97 s with 92 tests. Slicingtestcannot move it, and pin 3c refusesspec: 2.domain:spec,pm:queue.build-schemas-check-mode.test.tsinto several files, so therepoproject's workers run them in parallel.turbo.json, partition orci.ymlchange. The title is updated.Test Coretiming table drops. The PR quotes both numbers.domain:devx, ci(test-shards): the cli slices ran 1132 s against 735 s predicted (×1.54) on Test Core 3/6 — refreshscripts/test-shard-timings.json(dated 2026-10-13) and re-derive the cli slice count under pin 3c #25390.ci.ymlchange for at most about 185 s. D would close the card, which is the maintainer's call, and A makes it unnecessary.@objectstack/specis file-sharded — the "6 is enough" arithmetic predates the cli slices (full-battery slowest shard ≈ 1937 s → ≈ 1452 s) #25376 keepsBlocked-by: #25372. Its eight-shard arithmetic assumed spec at two slices. Its dev re-reads the floor after A lands.Generated by Claude Code
[-]ci(test-shards): file-shard `@objectstack/spec`'s `test` task the way cli already is — its 1331 s serial floor sets the slowest Test Core shard (22–27 min) on every PR that reaches spec, and widening the shard count cannot move it[/-][+]ci(test-shards): split spec's `build-schemas-check-mode.test.ts` (842 s, 92 tests, one file) into several files, so spec's `test:repo` floor stops setting the slowest Test Core shard — re-scoped from file-sharding spec's `test` task[/+]objectstack-fleet commentedon Oct 23, 2026
Claim: PM loop round 2
Session:
session_01P8iUGfP2wffkVBD5uSfDgq(the card thread; seat sessionsession_013odhA26dvzy7pQmevdTTvyposts this claim)Account:
os-teslaBranch:
claude/project-thread-2vwjruWorktree:
objectstack-issue-25372Domain:
domain:specSeat:
domain:spec#1(seat post #6017)File surface:
packages/spec/scripts/build-schemas-check-mode*.ts(the split files + one shared helper module),packages/spec/vitest.repo-tests.json, prose references to the old file name inpackages/spec/scripts/**(stop on breach; explain in the report). ⛔ noturbo.json, partition,ci.ymlor shard-count change.Container & model:
M,mode:thread,model: default tier (dispatch-gates --tier: "no path-derived mandate", floor sonnet · default opus · ceiling fable),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect cardThread-read: none
Serial constraints cleared: none (scope is the re-scope
6358468116, option A; round 1's claim6358248277was released by6358287660; #25376 keepsBlocked-by: #25372)The platform lets the card thread push only its designated thread branch, so
Branch:records that branch, notclaude/issue-25372-<slug>. Dispatch order: the project's shared folder,spec-seat-1/dispatch-25372.md.Generated by Claude Code
objectstack-fleet commentedon Oct 23, 2026
os-dev-report
{ "issue": 25372, "status": "done", "branch": "claude/project-thread-2vwjru", "pr": "https://github.com/objectstack-ai/objectstack/pull/25428", "session": "session_01P8iUGfP2wffkVBD5uSfDgq", "premise_still_valid": true, "summary": "Option A per re-scope 6358468116. packages/spec/scripts/build-schemas-check-mode.test.ts (5135 lines, 92 tests, 15 describes) is split into six test files (manifest 18, deleted-baseline 15, anchor 15, git-topology 17, retired-keys 13, deletion-proofs 14) plus build-schemas-check-mode.fixture.ts (shared sandbox, #9068 git discipline, run(), cross-file constants; not a .test.ts). Root hooks became useSharedSandbox(rootScriptsDir), called once per file, so each file builds its own mkdtemp sandbox. Blocks moved verbatim, grouped by subject and balanced on a measured local per-block run. vitest.repo-tests.json lists the six files; each carries its own test-budget line (apportioned, labelled, re-measure from CI). Prose references in packages/spec/scripts/** updated. Pool check: repo project runs files in parallel (vitest default cores-1; worker cap only lowers). No turbo.json/partition/ci.yml change. skip-changeset: scripts/ is in no files[].", "tests": "Name-list diff: vitest list --project repo before (1 file) vs after (6 files), file prefix stripped, sorted: 92 vs 92, diff empty; vitest list --project local matches none. Timing LOCAL (same 4-core box, under os-verify-lock): before, original file alone 839.06 s, 92/92 passed; after, six files as the repo project on head 78a4221bd 370.44 s wall, 92/92 passed, slowest file git-topology 205.4 s. CI before (from the card): file 841.97 s, spec two-task total 1212.41 s (PR run 39893808670), 1494.69 s (merge_group run 39894014103). CI after: PR 25428's own Test Core timing table, not yet read. pnpm --filter @objectstack/spec build exit 0; typecheck exit 0 (incl. check:scripts-typecheck, noUnusedLocals); test 711/711 files, 21634 passed, 1 todo (head 9f2ed009f; the last commit changed only the six split files and the fixture, re-run green as above). No ablation: no tested behaviour changed.", "gates": "dispatch-gates --commands on final head 78a4221bd: 66 derived, 66 run, all exit 0; --ran reconciliation 66 run, 0 NOT-MEASURED, 0 UNRUN. First sweep (9f2ed009f, 63 families): check:cross-package-test-inputs exit 1 (five split files no longer showed their root scripts/ read because the scan does not follow imports; fixed in 78a4221bd by each file naming ../../../scripts and passing it to useSharedSandbox), check-plugin-teardown-shape --self-test exit 3 (pinned control commit missing from shallow clone; fetched), check:dual-build-cjs-loads and check:lean-entry-closure exit 3 (no dist); all exit 0 on the final sweep. test:repo for the six files run locally (diff changes that project). PR check-runs: in_progress at report time.", "dogfood_battery": "n/a -- no `!` in the PR title and no (narrowing) arm", "mcp_calls": "3 -- read only: issue_read x2 (get, get_comments), pull_request_read x1 (get); no write tool", "api_writes": "2 -- POST /repos/objectstack-ai/objectstack/pulls (draft, with assignee os-tesla and label skip-changeset, via fleet-write dispatch run 39959903928); POST /repos/objectstack-ai/objectstack/issues/25372/comments (this report, via post-stamped.mjs)", "open_questions": [], "deviations": [ "Budget lines are apportioned, not CI-measured: 983.3 s (the old line's CI reading) x local share x 1.25, rounded up (190-240 s). Each line states this; the seat or a follow-up re-measures from this PR's Test Core table.", "The fixture's useSharedSandbox takes the root scripts/ path from each test file so check:cross-package-test-inputs sees the out-of-package input; a detector change to follow same-package imports would be the alternative, outside this card's file surface." ], "files_changed": [ "packages/spec/scripts/build-schemas-check-mode.test.ts (deleted)", "packages/spec/scripts/build-schemas-check-mode.fixture.ts", "packages/spec/scripts/build-schemas-check-mode.manifest.test.ts", "packages/spec/scripts/build-schemas-check-mode.deleted-baseline.test.ts", "packages/spec/scripts/build-schemas-check-mode.anchor.test.ts", "packages/spec/scripts/build-schemas-check-mode.git-topology.test.ts", "packages/spec/scripts/build-schemas-check-mode.retired-keys.test.ts", "packages/spec/scripts/build-schemas-check-mode.deletion-proofs.test.ts", "packages/spec/vitest.repo-tests.json", "packages/spec/scripts/build-schemas.ts (comments)", "packages/spec/scripts/{def-key-collisions,dist-freshness,json-schema-out-dir,nested-authorable-keys,openapi-self-consistency,schema-closure,sharded-artifacts,unemitted-schemas}.test.ts (comments)" ], "out_of_scope_findings": [ "class: observation (not filed) · reach: n/a · evidence: check-cross-package-test-inputs scans each test file's own source and does not follow relative imports into same-package helper modules, so a test whose only out-of-package read lives in an imported helper is unseen (measured here: five split files read clean until each named its input) · carrier: none -- noted in PR Acceptance notes · dedupe words: cross-package test inputs, helper import, transitive read, repo-tests", "class: observation (not filed) · reach: n/a · evidence: scripts/git-env.d.mts:9 prose still names build-schemas-check-mode.test.ts (outside this card's file surface) · carrier: none" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 23, 2026
ACCEPT → PR #25428 comment 6367858563 (awaiting a human merge: 10692 lines > 3000; review requested from os-zhuang and hotlong), 2026-10-23T15:00Z.
Generated by Claude Code