On this page

On this page

Get started

CI routing costs

Routing from measured wall time

Use GitHub-hosted runners for independent checks that fit the workflow's remaining time. Retain Blacksmith where the measured job tail threatens completion. Qualify RunsOn by workload before assigning it a production tier. Requested Blacksmith 8/16/32 labels delivered 2/4/8 CPUs in the capacity check; labels are not worker counts.

The table compares eleven successful B1/R1 main runs with five later successful main runs: 35679872894, 35679457587, 35678156129, 35677164460, and 35675497006. These are longitudinal observations with different source revisions, not controlled provider comparisons. Values are median [maximum] complete job seconds; a dash means unmeasured. Existing trust, retry, and hosted assignment admission still apply.

Job family Blacksmith GitHub-hosted Hybrid placement
preflight 46 [48] — Blacksmith; starts the graph
security-fast — 45 [66] Hosted when admitted
build-artifacts 280 [314] 599 [898] Blacksmith 16-class
check-lint 461 [499] 624 [631] Hosted on admitted main pushes
check-lint-core-1 / -2 — 311 [377] / 332 [358] Blacksmith 16/8-class
check-prod-types — 240 [282] Hosted
check-test-types 358 [387] 608 [664] Hosted on admitted main pushes
check-test-types-core-1 / -2 281 [321] / 257 [329] 521 [572] / 496 [524] Hosted when admitted
check-dependencies 228 [260] 434 [476] Hosted when admitted
check-additional-extension-package-boundary 200 [221] 287 [377] Blacksmith; hosted fallback
check-additional-runtime-topology-architecture 133 [161] 289 [320] Hosted when admitted
check-additional-boundaries — 217 [232] Hosted
check-bundled-channel-config-metadata — 107 [140] Hosted
check-guards / check-npm-lock — 148 [192] / 72 [82] Hosted
check-prompt-snapshots / check-source-contracts — 76 [108] / 100 [104] Hosted
Fast baseline / Bun launcher / bundled protocol / coercion — 158 [167] / 110 [147] / 211 [223] / 64 [89] Hosted
Fast channel / plugin contracts — 322 [325] / 225 [248] Hosted
control-ui-performance — 120 [130] Hosted
Docs / Python skills / native and Control UI i18n — No comparable sample Retain existing hosted routes
openclaw/ci-gate — 3 [6] Blacksmith 4-class

Independent hosted checks reached at most 664 seconds in this sample. Artifact builds reached 898 seconds before the shared preflight and gate; they retain Blacksmith. Only the gate depends on build-artifacts: the workflow does not contain a serial build-to-test job dependency.

The package-boundary check now requests the existing Blacksmith 32-class when its route selects Blacksmith. In successful PR run 36248684656, its 16-class allocation delivered four CPUs and the existing two-CPU reservation admitted two compilers. The 527-second check comprised 257 seconds of declaration preparation and 268 seconds compiling all 125 plugins. The 32-class delivers eight CPUs, allowing four compilers under that same policy. It adds no jobs or registrations. At the observed 569-second job duration, doubling the class would add 151.7 class-vCPU-minutes, or 1.17% of that run's 12,921.2 total. The later complete green run 36269840991 measured 301 seconds and 160.5 class-vCPU-minutes with all 125 plugins checked. Upstream compiler optimization also contributed, so this is not an isolated runner speedup. Hosted, retry, trust, and cache policies remain unchanged.

Exact plugin envelopes and unsplit two-worker command envelopes now feed the existing timing owner using config, complete file inventory, and worker-bound identities. Plugin row ordinals never identify a workload. Static plugin rates remain the fallback for unmeasured selections, and the refitter still requires two independent runs before replacing a price. Conservative single-run floors are explicitly labeled in the committed timing provenance. An exact measured multi-file core child above 300 seconds can split again without repricing its siblings or combining unlike capacity samples into a parent. A single-file overrun remains visible.

Gateway methods prefer measurements for the current scope and worker policy, then the full owner at that policy. Until those exist, the matching older-worker scope and full-owner measurements remain admission floors. Changing both key qualifiers must not discard the existing owner measurement.

Process-bounded plugin owners also retain per-file invocation prices across envelope changes. These prices have distinct keys from whole-envelope walls; shared wrapper overhead is charged once. Only complete successful serial receipts with one declared file per process qualify. Other process owners and missing measurements keep their existing estimates.

Telegram process overlap

Source-only Telegram database-worker envelopes with at least two singleton processes can overlap two inner processes on current self-hosted Linux runners. Admission requires an explicit current target (FROZEN_TARGET=false), one unchanged Node invocation from the canonical runtime selector (including bun-compatible), two workers, one outer plan, scheduler-owned caches, at least two actual CPUs, and 7.5 GiB of effective memory. Effective memory is the smaller of physical memory and a positive finite process constraint. Other selections or insufficient capacity retain one inner process. Each test file keeps its own process, and focused CI still stops admitting new work after failure while joining admitted peers.

The executor reports actual inner concurrency, including serial fallback. Its value participates in the existing environment-bound timing identity. Parallel receipts supply only the complete envelope wall; overlapping file durations are never summed and subtracted to derive wrapper overhead. Until that exact policy has qualified measurements, placement retains the conservative serial estimate.

A 199-case envelope measured 184.40 seconds serially and 147.31 seconds with two processes on a Linux Testbox constrained to two CPUs and 7.65 GiB. Three further qualified replays took 147.46, 146.13 and 149.34 seconds. Peak aggregate memory stayed below 4.51 GiB, with no OOM events and the same cases. Whole-row budgets still need qualification from naturally occurring CI runs.

Storage balancing additionally uses 36 config-scoped module-work hints from an unchanged two-worker replay of the exact tested merge. Setup, collection, and suite elapsed time guide placement; the longest file is never divided by the worker count. A separate 20-second allowance covers compiler and wrapper work once per child. These conservative four-CPU Testbox hints are not eight-CPU native CI file walls. Existing whole-envelope observations remain authoritative floors, unknown files retain their prior estimates, and worker policies stay unchanged. Heavy storage children retain their measured 32-class allocation when splitting leaves them alone; isolation does not imply a smaller runner.

Test family Available complete-job evidence Placement and remaining measurement
Compact large, baseline bin 13 Blacksmith 932 [967]s across five runs Retain Blacksmith; correct underestimated serial packing
Other compact large bins Blacksmith 57–616s No hosted comparator for the exact inventories
Compact small bins Blacksmith 70–731s; bin 23 median 668s No hosted comparator for the exact inventories
Whole agents-support historical benchmark Blacksmith 706s; hosted 1909s Retain Blacksmith for this parallel-heavy workload; do not apply its ratio to every family
Changed-extension envelopes Recent 47-row PR sample: median 281s, maximum 473s; another sample has a 982s tail Retain current runner and process boundaries; combined jobs need native proof
UI unit shards Hosted 296/411/317s, one run Hosted when admitted
Control UI E2E shards 1–12 Blacksmith 269–526s, one run Retain 16-class; hosted comparison missing
Browser-extension E2E Hosted 232s, one run Hosted when admitted
Real-Gateway UI E2E Blacksmith 712s, one run Retain 32-class
Windows Historical Blacksmith 676/797s on the old two-row inventory Retain native route; current five-row and hosted comparison missing
macOS Node / Swift No successful sample in these receipts Retain native routes; no latency claim

Numbered compact bins change when membership changes. A matching suffix does not establish a matching workload. Full manual native qualification, including iOS and Android, is not proven within fifteen minutes by these Linux measurements.

Hosted assignment on the critical path

In main run 35810905247 (September 23, 2026), the gate completed 1,068 seconds after run_started_at; the run metadata finalized one second later. The jobs endpoint reports 105 rows, including skipped jobs, so the second page is required to observe the gate. Each creation interval below starts when the preceding required job completed, or at run_started_at for preflight.

Required hop Job ID Creation/admission Queue Runtime
Preflight, Blacksmith 16-class 107022697718 189s 2s 60s
Core lint 1, hosted 107022907577 1s 244s 398s
CI gate, hosted 107025083351 0s 172s 2s

This is 416 seconds of hosted queueing, 190 seconds of creation/admission, 460 seconds of execution, and two seconds of Blacksmith queueing. The initial 189 seconds end exactly when run 35809764899 releases the same even main parity slot. They are workflow admission, not planner execution. The planner is inside preflight's 60 seconds; downstream creation costs one second. The six extension-lint rows finish before the slowest Node job and remain hosted.

The newest green PR at the sampling cutoff, run 35811411598, completes the gate in 780 seconds (metadata finalizes at 781 seconds):

Required hop Job ID Creation/admission Queue Runtime
Preflight, Blacksmith 16-class 107023611849 1s 8s 56s
Compact small 40, Blacksmith 8-class 107023832566 1s 8s 573s
CI gate, hosted 107025790309 0s 130s 3s

That chain spends 130 seconds in hosted queueing, two in creation, 632 executing, and 16 in Blacksmith queueing. No test depends on the artifact build in either chain. Changing matrix shape would not remove the gate's serial queue.

Trusted hybrid first attempts therefore request the 16-class for both packed core-lint rows and the 4-class for the gate. The logical lint partitions, single lint thread, extension-lint rows, main parity slots, workflow dependencies, and deadlines stay unchanged. Hosted remains the route for independent cheap work. RunsOn's cron evidence does not qualify lint or a Bash-only gate, so those workloads retain the measured Blacksmith route. The existing health owner also rejects optional check offloads after observed hosted waits reach sixty seconds, replacing its former three-minute threshold. This protects the central type and dependency rows when assignment consumes their execution slack without changing API deadlines or test coverage. The first native candidate used the 8-class for both lint rows. Its PR run 35813098351 passed in 785 seconds, but core lint 1 took 621 seconds (568 in lint itself), versus the 398-second hosted baseline (350 in lint). Core lint 2 took 353 seconds versus 323 hosted. That revision retained four actual CPUs only for the heavier row to avoid spending the queue saving on slower execution. At the historical list rates and old hosted runtimes held constant, the 16/8 split costs about $0.2984 instead of $0.1923 for two 8-class rows. These unrounded estimates exclude minimum billing and ancillary charges; native measurements, rather than that forecast, own the final cost and wall comparison.

The second packed row later exhausted its 15-minute limit in run 36422187813. A controlled four-CPU, 16-GiB-capped lease completed its unchanged stripes 3, 4, and 5 in 137.37 seconds with the existing larger-runner Go policy. Both rows now request the 16-class. The promotion adds no jobs or registrations; at the full 15-minute deadline, the second row adds at most 120 class-vCPU-minutes versus the 8-class. The lease measurement is not a native CI timing result.

The revised PR run 35814962786 measured core lint 1 at 275 seconds on the 16-class and core lint 2 at 385 seconds on the 8-class. The heavier row's reference compute was about $0.1467, versus $0.1469 for its 551-second 8-class main-shaped observation and $0.1656 for the earlier 621-second PR observation. These are unrounded complete-job costs across different CI contexts, excluding minimum billing and ancillary charges. The revised workflow still failed a UI test and had a 118-second hosted median wait; it is not a complete fifteen-minute qualification.

The change adds three actual Blacksmith registrations on ordinary hybrid main and same-repository PRs. Fork PRs keep the logical GitHub check profile, which emits five core-lint rows, so their increase can be six including the gate. A fresh current-source audit totals 71 potentially self-hosted non-Node rows across the supported automatic main/PR profiles. This conservative union includes five core-lint rows, five core-type rows, five Windows rows, and thirteen UI E2E rows; its profile maxima do not all coexist. The six extension-lint rows stay hosted.

Retain an 84-row non-Node allowance, leaving thirteen rows reserved above that union. With the unchanged 70/130 Node caps and four-main/21-PR arrival envelope, 4 × (70 + 84) + 21 × (130 + 84) = 5,110. That leaves 890 below the 6,000 operating target from the reported 10,000-per-five-minute registration limit. This replaces the stale historical 80 + 3 + 1 explanation without spending headroom or changing matrix caps. Manual/frozen release jobs and other workflows are outside this conditional arrival envelope; it does not establish complete organization-wide usage.

Ratchet admission and Node tests

Selected baseline ratchets and Node rows start independently after preflight. The final gate still requires every selected ratchet to pass. This preserves the landed parallel admission path and avoids moving ratchet setup into preflight.

The five newest broad green PR runs at the September 26 sampling cutoff (36208949888, 36208857347, 36208617238, 36208552952, and 36208291831) spent 148–173 seconds in hosted checks-fast-baseline-ratchets. Checkout took 31–33 seconds, dependency setup 27–52 seconds, and the ratchets 73–111 seconds. Those historical Node rows waited for this job. Current Node rows start alongside it. Preflight took 89–120 seconds, including 48–83 seconds of manifest planning; these hybrid runs already skipped preflight's exact dependency restore.

Same-repository hybrid PR first attempts, automatic main runs, and admitted qualification dispatches now request the existing Blacksmith 4-class for the ratchet job. Nearby default-Blacksmith runs 36208877388 and 36209067188 measured complete ratchet jobs of 85 and 91 seconds. Their setup took 12–15 seconds and ratchets 39–40 seconds. These different-head observations project 57–88 seconds less ratchet wall; they do not prove current whole-workflow savings.

Using the slower 91-second observation, the route adds at most a modeled 4 × 91 / 60 = 6.07 Blacksmith vCPU-minutes per eligible run. It adds no jobs and one actual hybrid Blacksmith registration. The job already belonged to the potentially self-hosted non-Node union under the default backend, so the existing 84-row allowance and 5,110-registration envelope stay unchanged. Hosted routing remains for the GitHub override, hybrid retries, ordinary manual or frozen targets, and noncanonical repositories. Ratchet checks, merge-tree validation, parallel Node admission, dependency reconciliation, and deadlines are unchanged.

The same five runs spent 165–209 seconds in the separate check-plan prerequisite. Its compiler inventory queries took most of the 93–154-second materialization step; every narrowed type/lint row waits for that result. Those runs' central test-type checks finished 629–667 seconds after workflow start, so advancing only Node admission cannot meet the ten-minute PR objective.

check-plan therefore uses the existing 4-class under the same hybrid admission, restoring exact dependencies only for eligible same-repository jobs on an actual self-hosted runner. The route adds one Blacksmith registration within the existing non-Node reserve. Keeping the full observed 209-second hosted wall as its conservative cost estimate adds 13.93 vCPU-minutes, or 20 vCPU-minutes with the ratchet estimate. No planner speedup is assumed in this cost bound. Native proof must establish the materialization and whole-workflow wall; compiler coverage, selected graphs, and all hosted fallbacks remain intact.

The broad fallback PR qualification does not select check-plan. Its observed wall can validate the broad Node path, but cannot establish the new narrowed type/lint critical-path improvement. That claim needs a separate native run whose changed-file plan selects this prerequisite.

These two control-job changes apply only to the hybrid backend. RunsOn retains hosted ratchets and check planning, including qualification dispatches.

RunsOn remains unqualified

The on-demand pilot measured the two critical compact jobs at 561/816 seconds on Blacksmith versus 755/1259 seconds on c8i.4xlarge: 35%/54% slower. Full Gateway-core failed on AWS at every tested worker count. Cron scaled from 156 to 138 seconds on c8i.8xlarge and 126 to 110 seconds on c8a.8xlarge at 8 versus 16 workers, but lacks a matching Blacksmith control. Checks, artifact builds, extensions, and UI have no pilot comparison.

The opt-in runson profile derives from hybrid and extracts the three core-runtime-cron-parallel-* children into one serial job on c8i.8xlarge: 32 vCPUs, 64 GiB RAM, ubuntu24-full-x64, and an 80 GB gp3 root. On the retained cron comparison inventory, all 258 files kept their two-worker job and group ceilings, and the source Blacksmith jobs retained their other children. RunsOn inherits hybrid's current splitting and packing before adding its cron row. Current inventory counts and pricing are recorded in measured compact packing; the earlier fixed nine-to-four projection is not a universal result. The pilot's eight-worker, 156-second cron wall remains historical context, while the complete two-worker comparison below owns the available provider evidence.

The compatible CLI observations retain 558 and 703-second forecasts including one 60-second setup allowance. Separating their serial pair does not establish a 600-second maximum for each indivisible child. Eligible serial tooling pairs now split above a 600-second complete-wall estimate; packing separate short jobs uses a 720-second admission limit. These are placement estimates, not raised test deadlines or guarantees about the fifteen-minute workflow wall.

Qualification run 35702772380, attempt 1 at 84733d1a17a9a7321ac74099e421889099e411b4, ran the same cron descriptors on all three providers. All three cron jobs passed with two workers and one serial child plan. The RunsOn allocation reported instance-life-cycle=spot; no interruption occurred. Wait below is job creation to start, including matrix admission, not pure provider boot time.

Cron provider Observed CPUs Workers Job wall Sum of child walls Wait Result
RunsOn c8i.8xlarge Spot 32 2 396s 344.49s 24s Pass
Blacksmith 32-class 8 2 432s 393.71s 283s Pass
GitHub ubuntu-24.04 4 2 672s 624.14s 243s Pass

RunsOn's job duration was 36 seconds shorter than the Blacksmith control's, an 8.3% reduction in this single same-run comparison. It does not establish a repeated distribution or qualify the complete workflow. The fresh Blacksmith child measurement is 393.71 seconds, or 6.56 minutes of candidate serial work removed from the existing source jobs, approximately $0.4200 at the historical $0.064/minute list rate. The control's complete 7.2-minute job is an added qualification job, not the amount removed from production. The source jobs retain other children and setup. Each additional Blacksmith 8-class split adds an estimated 45–60 seconds of setup; the current inventory accounting appears below. Runtime interactions, those added steps, and AWS allocation cost must be included before claiming net whole-run savings.

The earlier baseline run 35688659765 measured the same cron descriptors at 252.63 combined child seconds. The newer 393.71-second control replaces that 4.21-minute costing assumption; the variation is another reason not to equate a child-duration forecast with realized savings.

Selection uses the runson backend on a canonical same-repository PR's first attempt, or the maintainer qualification dispatch with an exact current PR head. The repository variable remains unchanged. The existing RunsOn GitHub App supplies runners from workflow labels; no interactive AWS login is part of dispatch. The latest operator identity check failed because the AWS SSO session was expired, so administrative state, teardown, and selected-AZ prices remain unverified. The public regional price feed is available without those credentials.

Jobs request spot=true/retry=false. Spot has native on-demand fallback when capacity is unavailable; the provider's fallback documentation describes an additional 2–3 seconds, not a complete assignment SLA. retry=false opts out of automatic interruption reruns because the full-workflow recovery delay has not been shown to fit the original 900-second wall. An interruption can therefore fail this qualification. This is a Spot placement experiment, not an interruption-safe fifteen-minute tier.

The selected c8i.8xlarge has no local instance-store NVMe. No sticky disk, warm pool, custom image, or storage change is enabled. RunsOn automatically configures local NVMe on compatible instance-store types such as c8id; the pilot's corrected overlay verifier has not supplied a live performance comparison for that storage route. See RunsOn local NVMe.

The public AWS Spot price feed reported c8i.8xlarge Linux in us-east-1 at $0.6586/hour when fetched on September 22, 2026, at 06:02:13 UTC; its HTTP last-modified timestamp was 06:01:21 UTC. This is a regional reference with no availability-zone identity or assumed averaging method, not the selected runner's billing rate. The observed Spot instance launched at 08:06:00 UTC and its job completed at 08:12:57 UTC: 417 seconds from launch through job completion, giving $0.076286 estimated compute at that reference rate. This replaces the earlier 156/187-second illustrative costing.

Final instance termination was not independently verified, so 417 seconds is not the complete billable lifecycle. Add teardown, storage, networking, and control-plane charges. The $1.49936/hour on-demand reference remains the historical September 17 quote; no on-demand fallback was observed in this qualification. No expected blended rate is claimed without fallback and interruption frequencies. The earlier approximately $0.09 sample is not a flat job price.

Native interruption recovery remains a future option requiring measured slack. RunsOn v3.3 permits two automatic reruns with retry=when-interrupted: it waits for the entire workflow attempt to finish, then reruns failed jobs and dependents. Newly launched recovery capacity is on-demand, but GitHub can assign an existing matching Spot runner. Admission must therefore account for first-attempt completion + retry delays + both failed/dependent replays <= 900s; merely placing a job off the critical path is insufficient. A 720-second first attempt leaves 180 seconds, already less than the measured 396-second cron job before recovery dispatch, assignment, and the gate.

Report observed interruptions and retry attempts separately from this documented provider behavior. No-capacity fallback or a manually requested rerun is not interruption-recovery proof. Until a complete recovery fits the original wall, the opt-in profile keeps automatic interruption retry disabled and makes no interruption-safe 900-second claim.

Packing and cost arithmetic

The 300-second changed-extension budget combines the same 119 child envelopes into 40 jobs instead of 47 on the September 22 counting inventory. Estimated work remains 10,140 seconds. At 45–60 seconds of fixed setup per job, the extension slice changes from 204.25–216 to 199–209 machine-minutes: a 5.25–7 minute saving. At the historical 8-class list rate of $0.016/minute, that is $0.084–0.112 per broad PR. Public hosted execution has no metered Linux runner charge; this saving is capacity there, not a cash saving.

The following historical replay uses the capacity-pricing candidate's committed 47b18faa725 inventory with only the extension budget changed. These conditional counts describe that earlier experiment, not the final rebased inventory or qualification of the combined branch.

Profile Broad PR Node rows, 240s → 300s Unchanged core Node rows Largest predicted core / extension job
Blacksmith 132 → 125 85 595 / 300s
Hybrid 130 → 123 83 518 / 300s
GitHub 112 → 105 65 330 / 300s

Each profile also has two dist descriptors outside the Node matrix. Main does not append these extension envelopes. Compact/PR/push/plugin caps stay 90/130/70/50. Worker counts, assertions, test deadlines, runtime-build ownership, and native-worker file ceilings remain unchanged. The workflow no longer promotes extension bundle numbers 16 and 25 to the 16-class: those positions now contain different work and follow their planner-owned 8-class route. Native proof must measure this capacity change too.

Predictions can be wrong. The old 982-second extension job included database-worker, Codex, and Matrix children taking 351/354/125 seconds; the candidate places their corresponding envelopes in separate bundles. Only the Matrix selector is identical. Its 27-second estimate substantially understates the observed 125 seconds. Applying that observation conservatively to all four Matrix children in their candidate bundle gives about 725 seconds including 60 seconds of setup, with uncertainty in the other children still requiring native proof.

Measured compact packing

Hybrid placement reuses the canonical tooling estimator from the capacity-pricing work. It reads committed Blacksmith file measurements through readToolingFileTimings and passes them through the existing estimator's optional file-map argument. Only this hybrid placement pass consumes that additional map; RunsOn inherits the hybrid plan. The broader timing payload and global pricing coefficients are unchanged, so this route does not create a competing file-price table.

The canonical collector accepts a complete singleton invocation duration when one declared tooling file, one passing file summary, one duration, matching reporter identity and successful exit agree. Native file summaries retain precedence. Six singleton file prices were refitted from successful jobs and children in three failed workflows; a seventh stayed within the owner's 15% threshold. Seven scoped native Testbox file updates fill missing eligible prices and correct the provision estimate. Failed workflows and cancelled lease cleanup never supply complete-inventory or pruning evidence.

Packing admits serial Blacksmith 8-class jobs with the existing two-worker ceiling, numbered tooling children and no runtime-build prerequisite. Every child needs complete per-file measurements or an exact complete-child native observation before its job can acquire additional packed work. Default two-second hints for unknown files do not satisfy that requirement. An incompletely measured job keeps its original membership and receives its conservative quoted cost and setup allowance.

The complete packed estimate is 60 seconds of setup plus the greater of the existing owner job price and summed canonical group prices, retaining compatible native child observations as lower bounds. Native wall floors are not discounted by a worker ratio; the canonical file estimator keeps its normal worker-aware calculation. Each packed job must fit 720 seconds including setup, preserve complete children and their order, respect sibling-family separation and retain its deadline. Higher owner prices cannot be replaced by faster historical samples.

Four new main tooling tests changed the earlier selectors. The same estimator now prices the changed inventory instead of disabling packing wholesale. Only affected jobs lacking complete file or native evidence are excluded from merging. Native observations bind to the executed config, environment, ordered selectors, child name and build mode; a parent timing key remains provenance, not admission authority. An unchanged child can therefore retain its observation when a sibling changes, while a changed executed contract expires the old observation safely.

Eligible serial tooling jobs with multiple children split above a 600-second complete-wall estimate. Complete native child totals drive this decision when available, while the existing job prediction remains a floor; otherwise canonical estimates supply the child costs. Packing still retains any higher canonical price. Exact observed critical pairs also split. Runtime preparation stays only on the requiring child, and newly split critical rows cannot be repacked or charged another setup by that pass. The 703-second CLI forecast remains an unresolved indivisible tail.

Native calibration

Linux Testbox run 35722202780 used source 2fd7485b450e12ef5574645d7b648d61ee5ce8a2 on the Blacksmith 8-class, with two observed CPUs, two workers and one child at a time. All eight selected children and the runtime preparation completed successfully. The enclosing workflow was cancelled during lifecycle cleanup, so it is not a green workflow or fifteen-minute qualification. Source correspondence retains the recorded runner-label fixture difference.

Original parent Complete core-tooling-* children and successful walls Parent test envelope Separate runtime preparation
compact-small-32 9-hosted-1: 54.406s; 8-hosted-2: 405.766s 461.693s 119.271s
compact-small-34 6-hosted-2: 327.673s; 9-hosted-2: 637.106s 965.607s —
compact-small-35 12-hosted-1: 140.024s; 13-hosted-2: 350.159s 491.441s —
compact-small-36 12-hosted-2: 148.109s; 13-hosted-1: 101.797s 251.121s —

Rounded native components plus one 60-second setup yield 235/466-second floors for the first pair and 388/698-second floors for the second. Preparation is charged only to 9-hosted-1. The new complete 9-hosted-2 sample replaces no failure outcome: the earlier failed 631-second observation remains censored. The four packing-child measurements update only their new exact fingerprints; final packing also retains the higher canonical prices. These are child/build receipts and forecasts, not complete Actions job walls with queueing.

Current inventory

Main now includes the separately owned runtime release tier; its coverage movement is not an R3 saving. On the candidate rebased onto 0a5b5381a26b, hybrid's broad-PR plan separates two critical pairs and packs seven eligible jobs into three. Four removed setups save 3–4 minutes; the two splits add 1.5–2 minutes, leaving a conditional 1.5–2 Blacksmith 8-class minutes /$0.024–$0.032 before runtime interactions. Main adds one split and its setup. Extension packing retains its separate controlled 47→40-job comparison.

The immutable nine-job calibration cohort fits four jobs with canonical forecasts of 629, 539, 662 and 672 seconds. That cohort checks the policy; it does not define the current inventory's job count. Current packed compact-small-20 forecasts 617 seconds, and tooling compact-small-32 forecasts 576.5 seconds. The longest known forecast remains the 703-second CLI child.

Profile and shape Before Node /compact Final Node /compact Final Node classes Caps Node /compact
Hybrid main 42 /43 43 /44 BS8: 13; BS32: 30 70 /90
Hybrid broad PR 99 /61 97 /59 BS8: 65; BS32: 32 130 /90
RunsOn main-shaped qualification 43 /44 44 /45 BS8: 13; BS32: 30; AWS: 1 70 /90
RunsOn broad PR 100 /62 98 /60 BS8: 65; BS32: 32; AWS: 1 130 /90
Blacksmith main 51 /52 51 /52 BS8: 18; BS32: 33 70 /90
Blacksmith broad PR 105 /67 105 /67 BS8: 57; BS32: 48 130 /90
GitHub main 58 /59 58 /59 Hosted: 58 70 /90
GitHub broad PR 111 /73 111 /73 Hosted: 111 130 /90

Compact counts include dist descriptors; broad-PR Node counts include 40 extension rows. RunsOn adds one cron job to the hybrid plan. All counts stay inside the unchanged 70/130/90 caps. Together, current Node and extension packing remove a net nine setups from a broad PR: an estimated 6.75–9 Blacksmith 8-class minutes, or $0.108–$0.144 before runtime interactions. Main adds one setup, approximately 0.75–1 minute or $0.012–$0.016. These counts and costs are planner arithmetic, not native performance acceptance. Final measurements are recorded in PR #155403.

Ordinary main still does not select AWS. The admitted main-shaped qualification can select RunsOn and excludes comparison controls. Its initial preflight stays hosted until authorization. Qualifications retain their coverage shape on reruns while using hosted routing, resource policies and deadlines; raw GitHub context continues to own authentication, concurrency and cache publication.

Whole-run acceptance

Baseline run 35679872894 took 21m18s: 5m20s before preflight creation and 15m58s from preflight creation through the gate. Blacksmith class median assignment was 8/8/3 seconds for 32/16/8-class. Workflow admission and runner assignment are different waits; include both in whole-run latency.

The baseline allocated 29/2/10 active Blacksmith 32/16/8-class jobs and 25 hosted Ubuntu jobs. Skipped placeholders consumed no runners. That is 258.15 Blacksmith machine-minutes; historical label rates imply $13.84, while the campaign's supplied estimate was $18–20. These are pricing assumptions, not an invoice. Moving artifact builds back adds one Blacksmith job and approximately 4.67 Blacksmith minutes using the older build median; extension compaction applies to PRs only.

Completion requires measured main-shaped and broad-fallback PR-shaped runs for each changed profile at or below 900 seconds, with every Blacksmith class median assignment at most 60 seconds. Record actual job and step walls, total workflow wall, class counts, and cost against the same baseline. Planner estimates, reduced rows, and a successful test result alone do not establish this performance gate. The routing and packing changes remain unqualified until those exact-head observations exist.

The two native runs at 84733d1a17a9a7321ac74099e421889099e411b4 both failed and exceeded the wall target:

Native run Complete wall Active jobs Blacksmith minutes Hosted Ubuntu minutes Estimated Blacksmith compute
Hybrid PR 35702479645 17m57s 151 906.50 111.32 $33.5011
RunsOn qualification 35702772380 17m33s 155 946.62 122.35 $34.6651

Qualification additionally used 6.6 job minutes on Spot, with the $0.076286 launch-to-completion estimate above. It includes the two extra cron controls and different dispatch admission, so subtracting these total costs would not isolate the production routing change. Blacksmith Linux class median waits were 12 seconds in the PR and 9–10 seconds in qualification. Windows medians were 48 and 61 seconds, respectively; qualification therefore also missed the under-60-second class wait target. The successful job tails were 950 seconds in the PR and 907 seconds in qualification. Passing cron controls do not turn either failed workflow into a green or fifteen-minute result. These runs predate the current calibrated packing candidate and do not qualify it. Current main-shaped and broad-PR receipts are recorded in PR #155403.

Was this useful?