You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ci: port the ui per-file test timings reporter and its dataset refresh, so CI can read Test UI file costs again (frozen since 2026-10-19) #29517
Filing gate ③, a task the maintainer set by ruling.#29469 ruling 6583487846 (batch #458 item 1, Q2 letter A, maintainer 「同意」). ⛔ Not a claim. Reader who acts: the domain:devx seat; the PR touches .github/workflows/** (Tier H, the maintainer's approval).
Why
ui/scripts/test-shard-timings.json holds per-file vitest timings from CI, last measured 2026-10-19 (six full-battery runs). The reporter that refreshed it was not carried over when ui/ was imported (the comment above Run the ui tests in ci.yml says so). Since then CI cannot read Test UI file costs: the #25911 pilot's after-reading is NOT MEASURED in CI (#29469, 6582607393), the four rollout folds cannot be checked in CI, and Test UI shard balancing runs on stale data.
Change
Port the per-file timings reporter into the Test UI legs of ci.yml and the dataset refresh that rewrites ui/scripts/test-shard-timings.json, matching what the core legs already do for scripts/test-shard-timings.json (see PR chore(ci): refresh the Test Core shard-timings dataset #28978 for the core refresh).
⛔ A reporter and a dataset only: no new failing check, no threshold.
Done when
A full-battery run on main writes fresh Test UI timings, and the dataset on main carries a measurement date after this card's filing.
Claim: PM loop round 3
Session: session_01JQwxbaBjisxkQo9hht9bFB
Account: os-warren
Branch: claude/project-thread-f33d6x
Worktree: objectstack-issue-29517
Domain: domain:devx
Seat: domain:devx#1
File surface: .github/workflows/ci.yml (the Test UI legs: the per-file timings reporter and its artifact upload), one new weekly refresh workflow for ui/scripts/test-shard-timings.json, ui/scripts/test-file-timings.mjs and its test only if a path or env name must change; skip-changeset
Container & model: M CI wiring, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: CI has not read Test UI file costs since 2026-10-19, so the #25911 pilot's after-reading and the four rollout folds of #29469 cannot be checked, and Test UI shard balancing runs on stale data; the reporter and refresh were not carried over when ui/ was imported (ci.yml comment above Run the ui tests)
Ruling-ref: 6583487846
Thread-read: 6583780380
Premise: holds (seat read on main399df5bb: dataset measured.at 2026-10-19; its generated_by names a workflow that does not exist here; ui/scripts/test-file-timings.mjs carries writer, selector and generator)
Serial constraints cleared: none (33 open non-mailbox PRs read; none touches the surface)
Governed: .github/workflows/** is Tier H, so the maintainer merges it. ⛔ A reporter and a dataset only, per the ruling: no new failing check, no threshold. Lane order at pick: #29517, #29520 (both p2), then #29353 (p3); seat 1 takes positions 1 and 3, #29520 stays for domain:devx#2.
File surface widened by one ungoverned file: scripts/pm/dispatch-gates.self-test.mjs. The new refresh workflow is path-filtered and runs no named check, so it carries a dispatch-gates: no-check-families declaration; the live marker census in that self-test gains the declaring row (count 9 → 10), which the census comment assigns to the declaring author. Seat accepts the breach as explained.
Serial: open PR #29556 (#29353) edits the same file and lands first; this card's branch merges origin/main after it and re-measures the census before reporting its final head.
{
"issue": 29517,
"status": "done",
"branch": "claude/project-thread-f33d6x",
"pr": "https://github.com/objectstack-ai/objectstack/pull/29588",
"head": "82d9d267",
"session": "session_01JQwxbXf3xRiPQrLhrgsFzw",
"premise_still_valid": true,
"summary": "Test UI's whole-suite leg in ci.yml now passes ui/scripts/test-file-timings.mjs beside the default and github-actions reporters and uploads each shard's report as test-file-timings-N on the full battery's events (continue-on-error, if-no-files-found warn, retention 7 days on schedule and 2 otherwise). New .github/workflows/ui-test-timings-refresh.yml (weekly on Mondays, workflow_dispatch, pull_request on its own paths) runs select --shards 16 --limit 6, downloads the reports, merges them into ui/scripts/test-shard-timings.json and opens the PR as the fleet App with skip-changeset, dry-run on pull_request, NOT MEASURED and green when no run is eligible. The selector's shardJobName now spells Test UI (N/M) (it spelled objectui's Test (shard N/M), which no job here carries) and generated_by names the workflow that exists; the committed dataset's generated_by is generator output and is rewritten by the first refresh, never by hand. Report-only per ruling: no threshold, no new failing check.",
"tests": "ui test-file-timings.test.ts plus select-affected-tests-wiring.test.ts: 2 files, 25 tests passed (4 new pins against the parsed root ci.yml and the refresh: shard job name, reporter on the whole suite and not on the affected speed, upload name/path/report-only shape, refresh --shards equal to the matrix width, download pattern, generated_by names an existing workflow). Live: the exact CI spelling (pnpm --dir ui run test --shard=1/1 with the three reporters, GITHUB_WORKSPACE set) under vitest 4.1.12 exited 0 and wrote a objectui.test-file-timings/1 report; that report through merge wrote a valid dataset with the new generated_by. No ablation: CI wiring and a name, no tested package behaviour.",
"gates": "At head 82d9d267 (after merging origin/main once PR #29556 landed): dispatch-gates --commands derived 69; 68 exit 0 first pass; pnpm --dir ui exec vitest run scripts/ exit 1 on the first post-merge pass (5 cases in check-doc-json-fences.test.ts, zod TypeError, file not in this diff), exit 0 after re-running the seven-package build (turbo replay): Test Files 170 passed, 2 skipped. check:pm-dispatch-gates exit 0 (1945 cases, census of ten declarations). --ran: 69 derived, 69 run, 0 NOT-MEASURED, exit 0. Outside the derived set: pnpm --dir ui run type-check:scripts exit 0; eslint on the two ui files exit 0. PR check-runs: not yet concluded at report time (in_progress).",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2 relay writes plus git push: fleet-write pr_create (PR 29588, labels skip-changeset, read-back 9918 bytes identical) and this post-stamped comment",
"file_surface": "As claimed, plus scripts/pm/dispatch-gates.self-test.mjs (6 lines, census row 9 to 10 for the refresh's dispatch-gates no-check-families declaration), accepted by the seat; not governed.",
"deviations": [
"The reporter is spelled from the workspace root, not as ./scripts/test-file-timings.mjs: check-self-test-wired keys a ./scripts/ path in a workflow to the ROOT scripts/ and its --self-test redded on the relative spelling.",
"PR body footer uses the AGENTS.md session-URL form rather than the harness-suggested one."
],
"body_amendments": [],
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · noted, not filed: ui/scripts/dependabot-merge-gate.mjs still describes objectui's own test-shard-timings-refresh.yml in its OPTIONAL_CONTEXTS row (the job name now exists again under the root workflow); the file is legacy objectui text and was left alone."
]
}
ACCEPT → PR #29588 comment 6588408085 · head 5f0c784fe6 · contract review PASS 6588359667 (after 6587756255; its four should-fixes taken). Tier H: approvers requested (2026-11-02T21:05Z), awaiting a human approval; the seat lands it on an authorised APPROVED review.
Landed · 2026-11-02T23:27Z · PR #29588 merged as 3bd4bf66b1 (reviewed head 5f0c784fe6, contract review PASS 6588359667 after 6587756255, seat record ACCEPT 6588408085; Tier H, the maintainer readied and queued it). Test UI's full-battery legs now pass the per-file timings reporter and upload each shard's report on push and schedule runs; ui-test-timings-refresh.yml merges them weekly (Mondays 05:47 UTC, or a manual run on main) into ui/scripts/test-shard-timings.json and opens a fleet PR. It is report-only per ruling 6583487846: no threshold and no new failing check. The first refresh PR needs one full battery on main first. pm:dispatched is removed in this stroke.
Activity
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: p2 ·
domain:devx·pm:queue· 2026-11-02T17:29Z⛔ Not a claim.
domain:devx(Tier H.github/workflows/**). ⛔ A reporter and a dataset only, with no new failing check or threshold. p2.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbaBjisxkQo9hht9bFB
Claim: PM loop round 3
Session:
session_01JQwxbaBjisxkQo9hht9bFBAccount:
os-warrenBranch:
claude/project-thread-f33d6xWorktree:
objectstack-issue-29517Domain:
domain:devxSeat:
domain:devx#1File surface:
.github/workflows/ci.yml(the Test UI legs: the per-file timings reporter and its artifact upload), one new weekly refresh workflow forui/scripts/test-shard-timings.json,ui/scripts/test-file-timings.mjsand its test only if a path or env name must change;skip-changesetContainer & model:
M CI wiring,mode:thread,model: default tier (dispatch-gates --tier: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility: CI has not read Test UI file costs since 2026-10-19, so the #25911 pilot's after-reading and the four rollout folds of #29469 cannot be checked, and Test UI shard balancing runs on stale data; the reporter and refresh were not carried over when
ui/was imported (ci.ymlcomment aboveRun the ui tests)Ruling-ref: 6583487846
Thread-read: 6583780380
Premise: holds (seat read on
main399df5bb: datasetmeasured.at2026-10-19; itsgenerated_bynames a workflow that does not exist here;ui/scripts/test-file-timings.mjscarries writer, selector and generator)Serial constraints cleared: none (33 open non-mailbox PRs read; none touches the surface)
Governed:
.github/workflows/**is Tier H, so the maintainer merges it. ⛔ A reporter and a dataset only, per the ruling: no new failing check, no threshold. Lane order at pick: #29517, #29520 (both p2), then #29353 (p3); seat 1 takes positions 1 and 3, #29520 stays for domain:devx#2.objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbaBjisxkQo9hht9bFB
Claim surface note · 2026-11-02T18:48Z
File surface widened by one ungoverned file:
scripts/pm/dispatch-gates.self-test.mjs. The new refresh workflow is path-filtered and runs no named check, so it carries adispatch-gates: no-check-familiesdeclaration; the live marker census in that self-test gains the declaring row (count 9 → 10), which the census comment assigns to the declaring author. Seat accepts the breach as explained.Serial: open PR #29556 (#29353) edits the same file and lands first; this card's branch merges origin/main after it and re-measures the census before reporting its final head.
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbXf3xRiPQrLhrgsFzw
os-dev-report
{ "issue": 29517, "status": "done", "branch": "claude/project-thread-f33d6x", "pr": "https://github.com/objectstack-ai/objectstack/pull/29588", "head": "82d9d267", "session": "session_01JQwxbXf3xRiPQrLhrgsFzw", "premise_still_valid": true, "summary": "Test UI's whole-suite leg in ci.yml now passes ui/scripts/test-file-timings.mjs beside the default and github-actions reporters and uploads each shard's report as test-file-timings-N on the full battery's events (continue-on-error, if-no-files-found warn, retention 7 days on schedule and 2 otherwise). New .github/workflows/ui-test-timings-refresh.yml (weekly on Mondays, workflow_dispatch, pull_request on its own paths) runs select --shards 16 --limit 6, downloads the reports, merges them into ui/scripts/test-shard-timings.json and opens the PR as the fleet App with skip-changeset, dry-run on pull_request, NOT MEASURED and green when no run is eligible. The selector's shardJobName now spells Test UI (N/M) (it spelled objectui's Test (shard N/M), which no job here carries) and generated_by names the workflow that exists; the committed dataset's generated_by is generator output and is rewritten by the first refresh, never by hand. Report-only per ruling: no threshold, no new failing check.", "tests": "ui test-file-timings.test.ts plus select-affected-tests-wiring.test.ts: 2 files, 25 tests passed (4 new pins against the parsed root ci.yml and the refresh: shard job name, reporter on the whole suite and not on the affected speed, upload name/path/report-only shape, refresh --shards equal to the matrix width, download pattern, generated_by names an existing workflow). Live: the exact CI spelling (pnpm --dir ui run test --shard=1/1 with the three reporters, GITHUB_WORKSPACE set) under vitest 4.1.12 exited 0 and wrote a objectui.test-file-timings/1 report; that report through merge wrote a valid dataset with the new generated_by. No ablation: CI wiring and a name, no tested package behaviour.", "gates": "At head 82d9d267 (after merging origin/main once PR #29556 landed): dispatch-gates --commands derived 69; 68 exit 0 first pass; pnpm --dir ui exec vitest run scripts/ exit 1 on the first post-merge pass (5 cases in check-doc-json-fences.test.ts, zod TypeError, file not in this diff), exit 0 after re-running the seven-package build (turbo replay): Test Files 170 passed, 2 skipped. check:pm-dispatch-gates exit 0 (1945 cases, census of ten declarations). --ran: 69 derived, 69 run, 0 NOT-MEASURED, exit 0. Outside the derived set: pnpm --dir ui run type-check:scripts exit 0; eslint on the two ui files exit 0. PR check-runs: not yet concluded at report time (in_progress).", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "2 relay writes plus git push: fleet-write pr_create (PR 29588, labels skip-changeset, read-back 9918 bytes identical) and this post-stamped comment", "file_surface": "As claimed, plus scripts/pm/dispatch-gates.self-test.mjs (6 lines, census row 9 to 10 for the refresh's dispatch-gates no-check-families declaration), accepted by the seat; not governed.", "deviations": [ "The reporter is spelled from the workspace root, not as ./scripts/test-file-timings.mjs: check-self-test-wired keys a ./scripts/ path in a workflow to the ROOT scripts/ and its --self-test redded on the relative spelling.", "PR body footer uses the AGENTS.md session-URL form rather than the harness-suggested one." ], "body_amendments": [], "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: none · noted, not filed: ui/scripts/dependabot-merge-gate.mjs still describes objectui's own test-shard-timings-refresh.yml in its OPTIONAL_CONTEXTS row (the job name now exists again under the root workflow); the file is legacy objectui text and was left alone." ] }objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbaBjisxkQo9hht9bFB
ACCEPT → PR #29588 comment 6588408085 · head
5f0c784fe6· contract review PASS 6588359667 (after 6587756255; its four should-fixes taken). Tier H: approvers requested (2026-11-02T21:05Z), awaiting a human approval; the seat lands it on an authorised APPROVED review.objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbaBjisxkQo9hht9bFB
Landed · 2026-11-02T23:27Z · PR #29588 merged as
3bd4bf66b1(reviewed head5f0c784fe6, contract review PASS 6588359667 after 6587756255, seat record ACCEPT 6588408085; Tier H, the maintainer readied and queued it). Test UI's full-battery legs now pass the per-file timings reporter and upload each shard's report on push and schedule runs;ui-test-timings-refresh.ymlmerges them weekly (Mondays 05:47 UTC, or a manual run onmain) intoui/scripts/test-shard-timings.jsonand opens a fleet PR. It is report-only per ruling 6583487846: no threshold and no new failing check. The first refresh PR needs one full battery onmainfirst.pm:dispatchedis removed in this stroke.