Repository navigation
ci: rebalance native module shards from measured Actions timings - #1148
Merged
seathatflowsinourveins merged 1 commit intoOct 15, 2026
Merged
Conversation
Refresh duration weights, reserve shard zero headroom, and retain native module and aggregate contracts. Include balance and privacy regressions and reconcile organization eligibility in the macOS decisions.
seathatflowsinourveins
force-pushed
the
ci/rebalance-validate-shards-20261015
branch
from
October 15, 2026 12:33
abe6b7c to
6028d29
Compare
seathatflowsinourveins
deleted the
ci/rebalance-validate-shards-20261015
branch
October 15, 2026 13:51
This was referenced Oct 15, 2026
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 15, 2026
…-0005) and scheduling-supervision (A5-0024) From the practice gap ledger of 2026-10-15 (rows A3-0090, B2-0005 and A5-0024, each ruled ADOPT and re-checked AGREE by the co-op's Codex lane). The plan asks for one PR per layer page; the coordinator combined these two small pages in one commit. This commit is the branch squashed onto the same base under the digest-custody precedent of #1091, #1148 and #1150: no commit in the branch keeps a private digest prefix. observation-inference, slot usage-cost-monitoring: - A3-0090: the template and the collector example set OTEL_METRICS_INCLUDE_ENTRYPOINT=true (off by default; env-vars.md:510, monitoring-usage.md:156 and :584 at client 2.1.300), so metrics carry app.entrypoint to split interactive, -p and SDK runs. The row records that the collector's transform/privacy metric allowlists (the repository profile, and the 2604 profile the live collector runs) do not keep app.entrypoint yet, so the collector sums the label away until they do; the host steps go to the command center as a host diff, named without a path. The dispositions catalog records the switch as adopt-pending on the template, and the new-WSL client configuration record gains a dated projection (404 pieces, one more wired through the otel-collector-contrib slot). - B2-0005: signed in with the plan, claude -p, Agent SDK and third-party app runs draw the plan's usage limits (support article 15036540, its 2026-06-15 and 2026-10-07 updates); the Max and Team monthly API credits cover a linked Console organization's API-key usage only and leave the plan's limits unchanged (support article 17154008). scheduling-supervision, slot scheduled-tasks: - A5-0024, a correction: --resume and --continue restore CronCreate tasks that have not expired or passed, and a backgrounded session keeps them firing (scheduled-tasks.md:11, :228, :230). Measured on this host on 2026-10-15 and retained in evidence/artifacts/d4-bg-trial-20261015/scheduled-task-carry.json: a one-shot CronCreate task fired at 07:36:00Z inside the copy that claude --resume <id> --bg started. The route now has resume and background paths run CronList first and cancel stale tasks with CronDelete (scheduled-tasks.md:159-160). Digest custody (command center, 2026-10-15; the GPT read at 8c03cbe, P1): repository text cites committed files and public sources only. test_the_rows_cite_no_scratch_path_or_unpublished_digest checks both rows for the scratch roots and the private findings files' name and holds no private value; a synthetic negative control plants a scratch reference with a synthetic digest and is caught. The slot manifest's sha256_when_labeled follows slots.json. tests/test_native_practice_ledger_obs_sched.py: 6 of 6 tests failed before on the base (38 subtests); 7 pass now; native-practice modules 106 OK; the mechanism modules pass except four CachedArtifactTests in test_upstream_surface_watch, which fail the same way on the base; validate rc 0. Co-Authored-By: Claude Opus 5.5 <[email protected]>
5 tasks done
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 15, 2026
…-0005) and scheduling-supervision (A5-0024) From the practice gap ledger of 2026-10-15 (rows A3-0090, B2-0005 and A5-0024, each ruled ADOPT and re-checked AGREE by the co-op's Codex lane). The plan asks for one PR per layer page; the coordinator combined these two small pages in one commit. This commit is the branch squashed onto the same base under the digest-custody precedent of #1091, #1148 and #1150: no commit in the branch keeps a private digest prefix. observation-inference, slot usage-cost-monitoring: - A3-0090: the template and the collector example set OTEL_METRICS_INCLUDE_ENTRYPOINT=true (off by default; env-vars.md:510, monitoring-usage.md:156 and :584 at client 2.1.300), so metrics carry app.entrypoint to split interactive, -p and SDK runs. The row records that the collector's transform/privacy metric allowlists (the repository profile, and the 2604 profile the live collector runs) do not keep app.entrypoint yet, so the collector sums the label away until they do; the host steps go to the command center as a host diff, named without a path. The dispositions catalog records the switch as adopt-pending on the template, and the new-WSL client configuration record gains a dated projection (404 pieces, one more wired through the otel-collector-contrib slot). - B2-0005: signed in with the plan, claude -p, Agent SDK and third-party app runs draw the plan's usage limits (support article 15036540, its 2026-06-15 and 2026-10-07 updates); the Max and Team monthly API credits cover a linked Console organization's API-key usage only and leave the plan's limits unchanged (support article 17154008). scheduling-supervision, slot scheduled-tasks: - A5-0024, a correction: --resume and --continue restore CronCreate tasks that have not expired or passed, and a backgrounded session keeps them firing (scheduled-tasks.md:11, :228, :230). Measured on this host on 2026-10-15 and retained in evidence/artifacts/d4-bg-trial-20261015/scheduled-task-carry.json: a one-shot CronCreate task fired at 07:36:00Z inside the copy that claude --resume <id> --bg started. The route now has resume and background paths run CronList first and cancel stale tasks with CronDelete (scheduled-tasks.md:159-160). Digest custody (command center, 2026-10-15; the GPT read at 8c03cbe, P1): repository text cites committed files and public sources only. test_the_rows_cite_no_scratch_path_or_unpublished_digest checks both rows for the scratch roots and the private findings files' name and holds no private value; a synthetic negative control plants a scratch reference with a synthetic digest and is caught. The slot manifest's sha256_when_labeled follows slots.json. tests/test_native_practice_ledger_obs_sched.py: 6 of 6 tests failed before on the base (38 subtests); 7 pass now; native-practice modules 106 OK; the mechanism modules pass except four CachedArtifactTests in test_upstream_surface_watch, which fail the same way on the base; validate rc 0. Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 16, 2026
…-0005) and scheduling-supervision (A5-0024) From the practice gap ledger of 2026-10-15 (rows A3-0090, B2-0005 and A5-0024, each ruled ADOPT and re-checked AGREE by the co-op's Codex lane). The plan asks for one PR per layer page; the coordinator combined these two small pages in one commit. This commit is the branch squashed onto the same base under the digest-custody precedent of #1091, #1148 and #1150: no commit in the branch keeps a private digest prefix. observation-inference, slot usage-cost-monitoring: - A3-0090: the template and the collector example set OTEL_METRICS_INCLUDE_ENTRYPOINT=true (off by default; env-vars.md:510, monitoring-usage.md:156 and :584 at client 2.1.300), so metrics carry app.entrypoint to split interactive, -p and SDK runs. The row records that the collector's transform/privacy metric allowlists (the repository profile, and the 2604 profile the live collector runs) do not keep app.entrypoint yet, so the collector sums the label away until they do; the host steps go to the command center as a host diff, named without a path. The dispositions catalog records the switch as adopt-pending on the template, and the new-WSL client configuration record gains a dated projection (404 pieces, one more wired through the otel-collector-contrib slot). - B2-0005: signed in with the plan, claude -p, Agent SDK and third-party app runs draw the plan's usage limits (support article 15036540, its 2026-06-15 and 2026-10-07 updates); the Max and Team monthly API credits cover a linked Console organization's API-key usage only and leave the plan's limits unchanged (support article 17154008). scheduling-supervision, slot scheduled-tasks: - A5-0024, a correction: --resume and --continue restore CronCreate tasks that have not expired or passed, and a backgrounded session keeps them firing (scheduled-tasks.md:11, :228, :230). Measured on this host on 2026-10-15 and retained in evidence/artifacts/d4-bg-trial-20261015/scheduled-task-carry.json: a one-shot CronCreate task fired at 07:36:00Z inside the copy that claude --resume <id> --bg started. The route now has resume and background paths run CronList first and cancel stale tasks with CronDelete (scheduled-tasks.md:159-160). Digest custody (command center, 2026-10-15; the GPT read at 8c03cbe, P1): repository text cites committed files and public sources only. test_the_rows_cite_no_scratch_path_or_unpublished_digest checks both rows for the scratch roots and the private findings files' name and holds no private value; a synthetic negative control plants a scratch reference with a synthetic digest and is caught. The slot manifest's sha256_when_labeled follows slots.json. tests/test_native_practice_ledger_obs_sched.py: 6 of 6 tests failed before on the base (38 subtests); 7 pass now; native-practice modules 106 OK; the mechanism modules pass except four CachedArtifactTests in test_upstream_surface_watch, which fail the same way on the base; validate rc 0. Co-Authored-By: Claude Opus 5.5 <[email protected]>
seathatflowsinourveins
added a commit
that referenced
this pull request
Oct 16, 2026
…-0005) and scheduling-supervision (A5-0024) (#1158) From the practice gap ledger of 2026-10-15 (rows A3-0090, B2-0005 and A5-0024, each ruled ADOPT and re-checked AGREE by the co-op's Codex lane). The plan asks for one PR per layer page; the coordinator combined these two small pages in one commit. This commit is the branch squashed onto the same base under the digest-custody precedent of #1091, #1148 and #1150: no commit in the branch keeps a private digest prefix. observation-inference, slot usage-cost-monitoring: - A3-0090: the template and the collector example set OTEL_METRICS_INCLUDE_ENTRYPOINT=true (off by default; env-vars.md:510, monitoring-usage.md:156 and :584 at client 2.1.300), so metrics carry app.entrypoint to split interactive, -p and SDK runs. The row records that the collector's transform/privacy metric allowlists (the repository profile, and the 2604 profile the live collector runs) do not keep app.entrypoint yet, so the collector sums the label away until they do; the host steps go to the command center as a host diff, named without a path. The dispositions catalog records the switch as adopt-pending on the template, and the new-WSL client configuration record gains a dated projection (404 pieces, one more wired through the otel-collector-contrib slot). - B2-0005: signed in with the plan, claude -p, Agent SDK and third-party app runs draw the plan's usage limits (support article 15036540, its 2026-06-15 and 2026-10-07 updates); the Max and Team monthly API credits cover a linked Console organization's API-key usage only and leave the plan's limits unchanged (support article 17154008). scheduling-supervision, slot scheduled-tasks: - A5-0024, a correction: --resume and --continue restore CronCreate tasks that have not expired or passed, and a backgrounded session keeps them firing (scheduled-tasks.md:11, :228, :230). Measured on this host on 2026-10-15 and retained in evidence/artifacts/d4-bg-trial-20261015/scheduled-task-carry.json: a one-shot CronCreate task fired at 07:36:00Z inside the copy that claude --resume <id> --bg started. The route now has resume and background paths run CronList first and cancel stale tasks with CronDelete (scheduled-tasks.md:159-160). Digest custody (command center, 2026-10-15; the GPT read at 8c03cbe, P1): repository text cites committed files and public sources only. test_the_rows_cite_no_scratch_path_or_unpublished_digest checks both rows for the scratch roots and the private findings files' name and holds no private value; a synthetic negative control plants a scratch reference with a synthetic digest and is caught. The slot manifest's sha256_when_labeled follows slots.json. tests/test_native_practice_ledger_obs_sched.py: 6 of 6 tests failed before on the base (38 subtests); 7 pass now; native-practice modules 106 OK; the mechanism modules pass except four CachedArtifactTests in test_upstream_surface_watch, which fail the same way on the base; validate rc 0. Co-authored-by: Claude Opus 5.5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Scope
Refresh the native module timing weights used by validate's existing greedy planner, and prefer other shards over shard 0 when estimated loads tie. Old weights estimated
test_pre_push_gateat 22.5 seconds; three recent successful CI runs put it at a 917.9-second median. Shard 0 also has 111 seconds of measured fixed validation work. The new assignment isolates the two largest modules on shards 1/2 and leaves shard 0 headroom for its validators. The eight-shard matrix, job names, native fixtures and aggregate are unchanged.Reconcile the ownership-dependent statements in both macOS decisions: live readback identifies a public Organization repository on GitHub Free, so the merge-queue availability reopen triggers are met. Queue activation and a new macOS policy remain separate follow-ups. Unpublished Blacksmith working records are cited by name only, with a scoped Markdown privacy regression.
f165498aa6340860ef52de3a720ca2981eced062lane:foundationscripts/validate_shards.py(assignment tie-break only),scripts/validate_shard_weights.json,tests/test_validate_shards.py,tests/test_workflow_hardening.py(hang-fixture shard selection only), the ownership-dependent statements indocs/decisions/2026-10-03-macos-{ci-scope,full-suite-coverage}.md,evidence/artifacts/validate-shard-balance-20261015/{README.md,timings.json}, and their entries inmanifests/evidence.json.Branch history cleanup
The PR branch is squashed to
6028d29eb004b60cfbd729cfbd9ff3f5d75446fa, one commit on its original basef165498aa6340860ef52de3a720ca2981eced062. Its tree is identical toabe6b7c8891554ee424de7f74505a1af94498be8; neither removed unpublished-source digest occurs in the new branch's history.The replaced commits
cc52dc0cd0116ba422b797e688748a5aa368f257,18412c35666cc12f2d5fba095d36ae5783abf32c,7a93124d834b310d3c341669f08d0439a6e1a1af, andabe6b7c8891554ee424de7f74505a1af94498be8may remain reachable by SHA on GitHub until garbage collection. A purge of retained GitHub copies is an owner-only GitHub Support request; this branch rewrite does not perform that purge.SOTA sources
scripts/validate_shards.pyat base f165498a, lines 135–160. It uses descending-duration/least-load assignment and preserves native module ownership;ModuleSuite/run_shardretain module fixtures. The assignment's tie-break accounts for the 22 steps guarded by exactlyif: matrix.shard == 0: 21 in validate.yml lines 59–239 and the semantic-contract step at lines 379–381, at the same pin. The PR-only condition at line 120 is excluded. Their measured totals are 111/112/99 seconds in the three baseline jobs.v3.12.3,Lib/unittest/runner.py,_printDurations,case.py,TestCase.run, andsuite.py,TestSuite.run: hosted native duration samples and indivisible fixture semantics.gh 2.102.0fetched job/step timestamps, native logs and uploaded inventories from runs 38486609305, 38647310087, and 38675090239.gh api orgs/native-agent-stack --jq '{type, plan: .plan.name}'returned{"type":"Organization","plan":"free"};gh api repos/native-agent-stack/native-agent-stack --jq .owner.typeindependently returnedOrganization.private=false; merge queues are available for public organization repositories. The activerules/branches/maintypes contain nomerge_queue, so availability reopens the decision for evaluation without claiming activation. Larger runners still require Team or Enterprise Cloud; a Support concurrency increase remains unverified.2026-10-12-harbor-parallel-runtimes.md, lines 119–131 at 7a93124. Unpublished working records are named without digests. The existing JSON guard's Markdown gap is separately recorded; this PR adds a narrow README regression without copying the private digests into the test.Evidence-class table
native_provenevidence/artifacts/validate-shard-balance-20261015/timings.json--durations 50plus completion-delta overhead; mapped through uploaded discovery inventories; median across observed runs. This is not a hosted after result.local_integrationsource_review+local_integrationnative_provennative_provenMEASURED before / after
Job seconds,
completed_at - started_at; queue time is excluded. Before uses the latest successful main push on each sampled day available before 2026-10-15 05:50Z, all attempt 1. Different heads and runner conditions make this an observational comparison, not a controlled paired benchmark. The broader Blacksmith screen's 30-minute median is not reused as this sample's baseline.After: run 38696923599, complete attempt 2, head
7a93124d834b310d3c341669f08d0439a6e1a1af, tested merge checkout30e0ca2030b051fe88192914e3e0e2a41662664f. All eight shards and the unchanged aggregate passed: 14,971 tests, zero failures/errors, 1,299 skips, 414 executed modules, complete counts. This wasgh run rerun 38696923599for all jobs, with no code changes.Attempt 1 is also retained below: seven shards passed, but shard 7 failed the unchanged metrics-registration fixture described below and the aggregate correctly failed. No results are stitched across attempts.
The successful complete rerun measured a 1036-second critical job (17m16s), 183 seconds / 15.0% below the 1219-second before median (20m19s). This is an observed improvement in that run, not evidence of a stable 15% gain: the same head and merge checkout in attempt 1 had a 1606-second critical job (26m46s), 387 seconds / 31.7% worse, with a separate metrics-fixture failure. Both results remain visible.
The indivisible native pre-push suite took 1529.127 seconds in attempt 1 and 968.762 seconds in attempt 2; the latter is still the critical path. Moving module assignments cannot shorten that suite. The isolated landscape-sweep suite took 756.240 and 767.496 seconds respectively. Shard 0's measured job times were 461 and 643 seconds after the tie-break left room for its fixed validators. These observations support the assignment mechanism and expose substantial runtime variability; different before revisions, runner conditions and queue delays prevent a controlled causal claim.
Attempt 1's failed test is
tests.test_adaptive_paper_metrics.FileSdRegistrationTests.test_a_clean_stop_of_an_unfinished_trial_stays_registered(finished/not_ready): its exporter registration wait expired after 30 seconds. The test and exporter are unchanged from the base; the isolated test passes locally in 0.94 seconds and the complete attempt-2 rerun passed without any code/test change. A synthetic reuse of a stopped exporter's loopback port reproduced the exact timeout while the exporter was running and its target remained listed: the fixture waits for a target absent from its previous set. That demonstrates a pre-existing fixture mechanism, not proof that CI reused the port. No trading code or assertions are changed here. Both repaired hang-diagnostic tests passed in native shard 4.Expected balance and limits
The frozen CI timing table predicts old assignment loads of
[435.534, 356.046, 1033.212, 370.260, 1180.264, 340.245, 325.995, 391.078]seconds and refreshed loads of[456.485, 917.878, 775.843, 456.485, 456.485, 456.485, 456.485, 456.485]. These are historical scheduling estimates, separate from the measured table and not a guarantee of current module runtimes.The regression asserts (a) maximum expected shard time <= the largest indivisible module + 1 second, (b) every other shard <= that largest module, and (c) max/median < 2.1. Old weights fail all three assertions (ratio 3.1005); updated weights pass (ratio 2.011). An additional assertion includes the median 111-second shard-0-only validator cost: the original tie-break fails at 1028.878 seconds against 918.878 allowed; the new tie-break gives shard 0 567.485 seconds including its validators, leaving the critical path at the largest module. No bound was weakened. The one-second allowance covers numeric/proxy noise, not common runner setup.
The duplicate-receipt fixture now duplicates whichever shard contains the test, rather than assuming shard 0. It still requires aggregate rejection and zero counted tests, and now asserts the exact unknown-shard list.
The hang-diagnostic fixtures similarly locate their single test through the native assignment. The old hardcoded shard 0 became empty after the tie-break change: both fixtures failed locally and in job 116287596097, run 38694437548 at
18412c35, returning 0 instead of 124. The fix changes only fixture shard selection. The hang body, 3-second timeout, signal, status 124 and traceback assertions are unchanged; both diagnostic test methods are AST-identical before/after. The completed after column uses the subsequent fixed head's complete workflow.The baseline medians are 917.878 seconds / 15.30 minutes for
test_pre_push_gateand 775.843 seconds / 12.93 minutes fortest_landscape_sweep_harness. While those fixtures remain indivisible, balancing the six remaining shards (456.485 seconds each) cannot produce near-equal durations or max/median < 1.5. Setup, discovery, aggregation, queues, PR-only steps and new modules using the existing 10-second fallback are outside the frozen model; the additional assertion accounts separately for the shard-0-only validators.All 24 extracted event counts match their native test counts; reconstructed suite times agree within 0.37 seconds. Module totals remain proxies, incorporating fixture/log-delivery effects. Of 410 owners, 392 have three observations, 16 have two, and two have one. Unknown modules still execute via the existing fallback.
Local commands run
Decision record
evidence/artifacts/validate-shard-balance-20261015/README.mdrecords sources, the layer-resolution delta, extraction, before timings, attainable bound and follow-up. It retains the existing native module design; hosted results that do not improve the critical path reopen the estimates.Follow-ups
GPT fix2 delta P3s (
cc-reads-20261005/fix2-pr1148/GPT-VERDICT-6028d29eb.md): broaden the planner citation to support its full explanation; repair inherited registry hygiene; retain captures for the fixed-validator measurement; and add a fail-first regression for the organization-eligibility correction. The local review's P2 identifies the same missing regression atdocs/decisions/2026-10-03-macos-ci-scope.md:77–81; address it in a follow-up with an observed failure against the prior ownership text. These are recorded follow-ups, with no additional code change in this PR.CC delta P3: reconcile
docs/decisions/2026-10-03-macos-full-suite-coverage.md:120–127withevidence/receipts/github-ci-measurements-20261003.json:153–158. The corrected decision removed the historical 2026-10-03 owner-type quote that the receipt still says the decision carries. Preserve the historical observation and distinguish it from current eligibility when repairing that provenance reference in a follow-up.Extend the general published-digest guard to Markdown in a separate PR; the current JSON-only guard does not catch this format. The scoped README invariant here remains in place. Re-evaluate the native merge-queue option now that the documented public-organization availability trigger is met, including required
merge_groupchecks and ruleset integration before activation.Fixture-aware splitting remains separate. The three baseline
pre_push_gatemodule estimates range from 684.525 to 1171.164 seconds, median 917.878. The first hosted measurement in this PR (run 38690547118, headcc52dc0cd0116ba422b797e688748a5aa368f257, before the tie-break correction) passed all eight shards and the aggregate, but its pre-push module alone took 1480.146 seconds / 24.67 minutes. Its job times were[1671,678,482,470,539,538,580,484]seconds: that run did not improve the 1219-second before critical-path median, and disproves treating the historical 15.30-minute estimate as a current runtime ceiling. The final head's own run is reported in the after column; no wall-time speedup is inferred from model predictions. Native fixture-preserving assignment cannot reduce an indivisible module's execution time.Refresh timing inputs when CI provides changed evidence. Full workflow reruns remain the practice; a partial shard rerun cannot satisfy the unchanged eight-report aggregate.
Host evidence
Not applicable: no files under
evidence/hosts/or platform-status claims change.Checklist
scripts/*.pyor workflow files; no new source-policy grant needed.