SHARD MAP DRAFT — the hop-era fleet shard map, computed from JOB-007
DRAFT — pending coordinator review and hop-recon factor calibration. Computed 2026-08-22 from the JOB-007 per-row wall times (
docs/phase4/DATA-sweep-row-walltimes.md, windows · corpus18770d083· i9-13900K, 2026-08-23), the H10 construction indocs/PLAN-hop-campaign.md§4.3, and the canonical fleet roster indocs/phase4/LANES.md. Every speed factor below is a PROVISIONAL PLACEHOLDER — LANES.md marks historical cross-machine ratios SUSPECT (“the hop shard map’s speed factors come from FRESH same-workload calibration at campaign recon, never from pre-anchor history”). The assignments are the method’s output at the placeholder factors; the map is re-emitted at recon onces_wandkare measured. Nothing in this file is a repo change; the paste-ready section at the end is the proposed insertion, gated on coordinator review.
1. The dataset — JOB-007, parsed
162 rows · 18,569 verdicts · 7,701 i9-seconds total (128.3 min single-machine serial) — the parsed deltas sum to 7,701 s against the sweep’s own 7,697 s aggregate, matching the DATA file’s recorded self-check (the 4 s spread is the derivation’s stated mtime-delta noise).
| Statistic | Value |
|---|---|
| rows | 162 |
| total wall | 7,701 i9-s (128.3 min) |
| median row | 10 s |
| mean row | 47.5 s |
| p75 / p90 / p95 | 16 s / 71 s / 226 s |
Distribution shape — extreme right skew. The bulk of the roster is per-row overhead; the wall lives in a handful of rows:
| Bucket | Rows | Wall | Share of total |
|---|---|---|---|
| ≤ 10 s | 95 | 831 s | 10.8 % |
| 11–30 s | 41 | 633 s | 8.2 % |
| 31–60 s | 8 | 357 s | 4.6 % |
| 61–120 s | 6 | 549 s | 7.1 % |
| 121–300 s | 6 | 1,224 s | 15.9 % |
| > 300 s | 6 | 4,107 s | 53.3 % |
Top-10 heaviest rows — 5,017 s = 65.1 % of the total wall:
| Row | Verdicts | Wall |
|---|---|---|
crypto/dsa |
4 | 1,317 s |
hash/maphash |
22 | 898 s |
crypto/tls |
400 | 659 s |
index/suffixarray |
12 | 573 s |
archive/zip |
100 | 354 s |
go/internal/gcimporter |
583 | 306 s |
go/parser |
173 | 259 s |
crypto/internal/mlkem768 |
12 | 228 s |
regexp |
45 | 226 s |
time |
159 | 197 s |
The DATA file’s own header names the two Go-vs-C# inversions this table confirms: crypto/dsa
1,317 s for 4 verdicts and hash/maphash 898 s for 22 — verdict counts are a bad proxy for wall
time in both directions (OQ-H5’s exact argument: go/doc/comment carries 10,059 verdicts at 18 s
in this reading, archive/zip 100 verdicts at 354 s).
2. Method and inputs
Construction: PLAN-hop-campaign.md §4.3, followed literally —
- rows := the 162 JOB-007 rows (re-read at the hop branch tip before dispatch, never carried);
- R := the reserved set ∩ rows — all 7 present (
index/suffixarray,hash/maphash,crypto/dsa,archive/zip,crypto/tls,go/doc/comment,go/types), 3,956 i9-s (65.9 min), pinned to the i9; - B := the remaining 155 rows, 3,745 i9-s, sorted DESC by
t_r(deterministic name tie-break), assigned LPT-greedy: each row to the bin with the smallest current projected local time (load / s_w), the plan’s literal rule; - any bin whose
load / s_wexceeds C = 5,400 s (~90 min) splits into sequential shards — at these factors and k = 1, no bin splits at any W; -
checksum: rows = R + B = 7 + 155 = 162 — holds for every W below.
Interpretation note for coordinator review: §4.3’s step 3 (recon: P dealt round-robin ASC)
and step 4 (bulk: B LPT-greedy DESC) both range over rows \ R. This draft reads the recon deal
as an execution-ordering directive, not a second allocation: all 155 non-reserved rows are
allocated by LPT, and each worker runs its bin cheapest-first, so the campaign’s opening rows
are the cheap ones and k is measured on the first ten per the plan’s own placeholder note. If
the coordinator intended recon as a separate dealt tranche, the bins move by single-digit
seconds — the cheap rows are 6–10 s each — and the makespans below are unchanged to the minute.
Fleet and provisional speed factors (s_w, i9 = 1.00 — PLACEHOLDERS, all four, to be
replaced by the LANES.md calibration pair at hop recon; the 0.35/0.45 values are rough
readings-of-record — CLAUDE.md’s “roughly 3–4× the i9” for the i7-5820K class — not measurements
of these boxes on this workload):
| W | Worker | Silicon | s_w (provisional) |
|---|---|---|---|
| 3+ | i9 (sweeper) | i9-13900K, 16C/24T | 1.00 (definition) |
| 3+ | R (R-LAPTOP) | Ryzen 7 PRO 6850U, 8C/16T | 0.45 |
| 3+ | coordinator | i7-5820K, 6C/12T | 0.35 |
| 4+ | G (G-LAPTOP) | Ryzen 5 PRO 6650U, 6C/12T | 0.35 |
| 5 | X (fifth engaged machine) | unknown — placeholder silicon | 0.35 (assumed laptop-class) |
t_r is the JOB-007 wall time × k; k = 1 is assumed throughout this draft (see §4’s caveat
— the DATA header describes the measured wall as convert + build + both hosts + compare, but the
plan carries k as a recon-measured placeholder and this draft does not preempt that).
3. The assignments
Reserved rows are marked †; the number after each row is its JOB-007 i9-seconds. Load is in
i9-seconds; “local wall” divides by the provisional s_w.
W = 3 – makespan 4,289 s local (~71 min)
| Worker | s_w | Rows | Load (i9-s) | Local wall | Shards @ ~90 min |
|---|---|---|---|---|---|
| i9-13900K (sweeper) | 1.00 | 45 | 4,272 | 4,272 s (~71 min) | 1 |
| R – R-LAPTOP 6850U | 0.45 | 66 | 1,928 | 4,284 s (~71 min) | 1 |
| i7-5820K (coordinator) | 0.35 | 51 | 1,501 | 4,289 s (~71 min) | 1 |
i9-13900K (sweeper) (45 rows):
index/suffixarray† 573 ·hash/maphash† 898 ·crypto/dsa† 1317 ·archive/zip† 354 ·crypto/tls† 659 ·go/doc/comment† 18 ·go/types† 137 ·crypto/aes9 ·crypto/hmac9 ·crypto/sha2569 ·database/sql/driver9 ·debug/plan9obj9 ·encoding/hex9 ·go/constant9 ·hash/crc329 ·internal/coverage/cformat9 ·internal/coverage/slicereader9 ·internal/cpu9 ·internal/diff9 ·internal/testenv9 ·internal/xcoff9 ·io/ioutil9 ·log/slog/internal/benchmarks9 ·testing/iotest9 ·text/scanner9 ·container/list8 ·crypto/des8 ·crypto/md58 ·encoding/base328 ·encoding/base648 ·hash/fnv8 ·image/color8 ·internal/coverage/slicewriter8 ·internal/itoa8 ·maps8 ·math/cmplx8 ·path8 ·plugin8 ·runtime/internal/math8 ·cmp7 ·container/heap7 ·crypto/internal/alias7 ·hash/adler327 ·internal/saferio7 ·math/bits7
R – R-LAPTOP 6850U (66 rows):
go/internal/gcimporter306 ·crypto/internal/mlkem768228 ·time197 ·crypto/rsa119 ·compress/flate106 ·sync/atomic82 ·crypto/internal/edwards25519/field66 ·strings56 ·database/sql47 ·os/exec43 ·crypto/ecdsa32 ·encoding/json28 ·text/template25 ·compress/gzip21 ·regexp/syntax20 ·bytes18 ·debug/buildinfo18 ·sync18 ·crypto/subtle16 ·strconv16 ·crypto/ecdh15 ·crypto/ed2551915 ·image/png14 ·net/http/fcgi14 ·syscall14 ·crypto/rand13 ·expvar13 ·crypto/internal/bigmod12 ·flag12 ·os/signal12 ·debug/gosym11 ·go/ast11 ·go/printer11 ·runtime/debug11 ·debug/macho10 ·encoding/asn110 ·errors10 ·go/format10 ·hash10 ·internal/abi10 ·internal/fuzz10 ·internal/reflectlite10 ·io/fs10 ·mime/quotedprintable10 ·net/mail10 ·net/url10 ·testing/slogtest10 ·bufio9 ·compress/bzip29 ·crypto/rc49 ·encoding/binary9 ·go/token9 ·internal/coverage/pods9 ·internal/dag9 ·io9 ·math9 ·unicode/utf169 ·crypto/internal/boring8 ·go/version8 ·internal/buildcfg8 ·internal/sysinfo8 ·os/exec/internal/fdtest8 ·text/tabwriter8 ·container/ring7 ·internal/gover7 ·unicode/utf86
i7-5820K (coordinator) (51 rows):
go/parser259 ·regexp226 ·internal/godebugs177 ·encoding/pem105 ·mime/multipart71 ·archive/tar60 ·encoding/xml54 ·math/rand/v234 ·math/rand31 ·html/template28 ·go/importer20 ·go/internal/srcimporter19 ·compress/zlib18 ·crypto/elliptic16 ·sort16 ·crypto15 ·image/gif14 ·internal/types/errors14 ·net/rpc/jsonrpc14 ·context13 ·path/filepath13 ·debug/elf12 ·image12 ·debug/dwarf11 ·go/internal/gccgoimporter11 ·image/jpeg11 ·crypto/internal/hpke10 ·encoding/csv10 ·fmt10 ·go/scanner10 ·image/draw10 ·internal/profile10 ·internal/zstd10 ·mime10 ·net/textproto10 ·runtime/metrics10 ·text/template/parse10 ·compress/lzw9 ·crypto/sha5129 ·go/build/constraint9 ·internal/coverage/cmerge9 ·internal/singleflight9 ·log9 ·testing/quick9 ·crypto/sha18 ·hash/crc648 ·internal/fmtsort8 ·net/http/internal/ascii8 ·unicode8 ·encoding/ascii857 ·runtime/internal/sys7
Checksum: 162 rows assigned = 7 reserved + 155 bulk (every roster row named exactly once).
W = 4 – makespan 3,956 s local (~66 min)
| Worker | s_w | Rows | Load (i9-s) | Local wall | Shards @ ~90 min |
|---|---|---|---|---|---|
| i9-13900K (sweeper) | 1.00 | 7 | 3,956 | 3,956 s (~66 min) | 1 |
| R – R-LAPTOP 6850U | 0.45 | 61 | 1,468 | 3,262 s (~54 min) | 1 |
| i7-5820K (coordinator) | 0.35 | 47 | 1,138 | 3,251 s (~54 min) | 1 |
| G – G-LAPTOP 6650U | 0.35 | 47 | 1,139 | 3,254 s (~54 min) | 1 |
i9-13900K (sweeper) (7 rows):
index/suffixarray† 573 ·hash/maphash† 898 ·crypto/dsa† 1317 ·archive/zip† 354 ·crypto/tls† 659 ·go/doc/comment† 18 ·go/types† 137
R – R-LAPTOP 6850U (61 rows):
go/parser259 ·regexp226 ·crypto/rsa119 ·encoding/pem105 ·crypto/internal/edwards25519/field66 ·encoding/xml54 ·os/exec43 ·math/rand31 ·html/template28 ·go/importer20 ·go/internal/srcimporter19 ·debug/buildinfo18 ·crypto/subtle16 ·strconv16 ·crypto/ed2551915 ·image/png14 ·net/rpc/jsonrpc14 ·crypto/rand13 ·path/filepath13 ·debug/elf12 ·os/signal12 ·go/ast11 ·image/jpeg11 ·runtime/debug11 ·encoding/asn110 ·fmt10 ·hash10 ·internal/abi10 ·internal/profile10 ·io/fs10 ·net/mail10 ·runtime/metrics10 ·text/template/parse10 ·compress/bzip29 ·crypto/hmac9 ·crypto/sha5129 ·encoding/binary9 ·encoding/hex9 ·go/token9 ·internal/coverage/cmerge9 ·internal/cpu9 ·internal/diff9 ·internal/testenv9 ·io/ioutil9 ·math9 ·text/scanner9 ·unicode/utf169 ·crypto/internal/boring8 ·encoding/base328 ·hash/crc648 ·internal/buildcfg8 ·internal/coverage/slicewriter8 ·internal/sysinfo8 ·net/http/internal/ascii8 ·plugin8 ·text/tabwriter8 ·cmp7 ·crypto/internal/alias7 ·internal/gover7 ·math/bits7 ·unicode/utf86
i7-5820K (coordinator) (47 rows):
crypto/internal/mlkem768228 ·time197 ·compress/flate106 ·mime/multipart71 ·strings56 ·math/rand/v234 ·encoding/json28 ·compress/gzip21 ·bytes18 ·sync18 ·sort16 ·crypto/ecdh15 ·internal/types/errors14 ·syscall14 ·expvar13 ·flag12 ·debug/dwarf11 ·go/internal/gccgoimporter11 ·crypto/internal/hpke10 ·encoding/csv10 ·go/format10 ·image/draw10 ·internal/reflectlite10 ·mime10 ·net/textproto10 ·testing/slogtest10 ·compress/lzw9 ·crypto/rc49 ·database/sql/driver9 ·go/build/constraint9 ·hash/crc329 ·internal/coverage/pods9 ·internal/dag9 ·internal/xcoff9 ·log9 ·testing/iotest9 ·container/list8 ·crypto/md58 ·encoding/base648 ·hash/fnv8 ·internal/fmtsort8 ·maps8 ·os/exec/internal/fdtest8 ·runtime/internal/math8 ·container/heap7 ·encoding/ascii857 ·internal/saferio7
G – G-LAPTOP 6650U (47 rows):
go/internal/gcimporter306 ·internal/godebugs177 ·sync/atomic82 ·archive/tar60 ·database/sql47 ·crypto/ecdsa32 ·text/template25 ·regexp/syntax20 ·compress/zlib18 ·crypto/elliptic16 ·crypto15 ·image/gif14 ·net/http/fcgi14 ·context13 ·crypto/internal/bigmod12 ·image12 ·debug/gosym11 ·go/printer11 ·debug/macho10 ·errors10 ·go/scanner10 ·internal/fuzz10 ·internal/zstd10 ·mime/quotedprintable10 ·net/url10 ·bufio9 ·crypto/aes9 ·crypto/sha2569 ·debug/plan9obj9 ·go/constant9 ·internal/coverage/cformat9 ·internal/coverage/slicereader9 ·internal/singleflight9 ·io9 ·log/slog/internal/benchmarks9 ·testing/quick9 ·crypto/des8 ·crypto/sha18 ·go/version8 ·image/color8 ·internal/itoa8 ·math/cmplx8 ·path8 ·unicode8 ·container/ring7 ·hash/adler327 ·runtime/internal/sys7
Checksum: 162 rows assigned = 7 reserved + 155 bulk (every roster row named exactly once).
W = 5 – makespan 3,956 s local (~66 min)
| Worker | s_w | Rows | Load (i9-s) | Local wall | Shards @ ~90 min |
|---|---|---|---|---|---|
| i9-13900K (sweeper) | 1.00 | 7 | 3,956 | 3,956 s (~66 min) | 1 |
| R – R-LAPTOP 6850U | 0.45 | 47 | 1,124 | 2,498 s (~42 min) | 1 |
| i7-5820K (coordinator) | 0.35 | 36 | 873 | 2,494 s (~42 min) | 1 |
| G – G-LAPTOP 6650U | 0.35 | 36 | 874 | 2,497 s (~42 min) | 1 |
| X – fifth engaged machine | 0.35 | 36 | 874 | 2,497 s (~42 min) | 1 |
i9-13900K (sweeper) (7 rows):
index/suffixarray† 573 ·hash/maphash† 898 ·crypto/dsa† 1317 ·archive/zip† 354 ·crypto/tls† 659 ·go/doc/comment† 18 ·go/types† 137
R – R-LAPTOP 6850U (47 rows):
go/parser259 ·time197 ·sync/atomic82 ·archive/tar60 ·encoding/xml54 ·math/rand/v234 ·html/template28 ·regexp/syntax20 ·compress/zlib18 ·crypto/elliptic16 ·strconv16 ·image/gif14 ·net/http/fcgi14 ·context13 ·path/filepath13 ·image12 ·go/ast11 ·image/jpeg11 ·crypto/internal/hpke10 ·errors10 ·hash10 ·internal/fuzz10 ·internal/reflectlite10 ·mime/quotedprintable10 ·runtime/metrics10 ·compress/bzip29 ·compress/lzw9 ·crypto/sha2569 ·encoding/binary9 ·go/token9 ·internal/coverage/cmerge9 ·internal/coverage/slicereader9 ·internal/singleflight9 ·io/ioutil9 ·testing/iotest9 ·testing/quick9 ·crypto/des8 ·encoding/base328 ·hash/fnv8 ·internal/fmtsort8 ·internal/itoa8 ·net/http/internal/ascii8 ·runtime/internal/math8 ·container/heap7 ·container/ring7 ·internal/gover7 ·unicode/utf86
i7-5820K (coordinator) (36 rows):
regexp226 ·internal/godebugs177 ·mime/multipart71 ·database/sql47 ·encoding/json28 ·compress/gzip21 ·bytes18 ·crypto/subtle16 ·crypto/ecdh15 ·internal/types/errors14 ·crypto/rand13 ·debug/elf12 ·debug/dwarf11 ·go/printer11 ·encoding/asn110 ·go/format10 ·internal/abi10 ·io/fs10 ·net/textproto10 ·text/template/parse10 ·crypto/hmac9 ·database/sql/driver9 ·go/build/constraint9 ·internal/coverage/cformat9 ·internal/dag9 ·internal/xcoff9 ·log/slog/internal/benchmarks9 ·unicode/utf169 ·crypto/sha18 ·hash/crc648 ·internal/coverage/slicewriter8 ·math/cmplx8 ·plugin8 ·cmp7 ·crypto/internal/alias7 ·internal/saferio7
G – G-LAPTOP 6650U (36 rows):
go/internal/gcimporter306 ·compress/flate106 ·crypto/internal/edwards25519/field66 ·os/exec43 ·math/rand31 ·go/importer20 ·debug/buildinfo18 ·sort16 ·crypto/ed2551915 ·net/rpc/jsonrpc14 ·expvar13 ·flag12 ·debug/gosym11 ·runtime/debug11 ·encoding/csv10 ·go/scanner10 ·internal/profile10 ·mime10 ·net/url10 ·bufio9 ·crypto/rc49 ·debug/plan9obj9 ·go/constant9 ·internal/coverage/pods9 ·internal/diff9 ·io9 ·math9 ·container/list8 ·crypto/internal/boring8 ·encoding/base648 ·image/color8 ·internal/sysinfo8 ·os/exec/internal/fdtest8 ·text/tabwriter8 ·encoding/ascii857 ·math/bits7
X – fifth engaged machine (36 rows):
crypto/internal/mlkem768228 ·crypto/rsa119 ·encoding/pem105 ·strings56 ·crypto/ecdsa32 ·text/template25 ·go/internal/srcimporter19 ·sync18 ·crypto15 ·image/png14 ·syscall14 ·crypto/internal/bigmod12 ·os/signal12 ·go/internal/gccgoimporter11 ·debug/macho10 ·fmt10 ·image/draw10 ·internal/zstd10 ·net/mail10 ·testing/slogtest10 ·crypto/aes9 ·crypto/sha5129 ·encoding/hex9 ·hash/crc329 ·internal/cpu9 ·internal/testenv9 ·log9 ·text/scanner9 ·crypto/md58 ·go/version8 ·internal/buildcfg8 ·maps8 ·path8 ·unicode8 ·hash/adler327 ·runtime/internal/sys7
Checksum: 162 rows assigned = 7 reserved + 155 bulk (every roster row named exactly once).
4. Analysis
4.1 What dominates
Six rows over 300 s carry 53.3 % of the whole roster’s wall; the top ten carry 65.1 %.
Five of those six are already in the plan’s reserved set (crypto/dsa 1,317, hash/maphash 898,
crypto/tls 659, index/suffixarray 573, archive/zip 354); the sixth,
go/internal/gcimporter (306 s), is the largest bulk row and lands first in every LPT deal.
The reserved pin is quantitatively right: crypto/dsa alone on a 0.35-factor box is 3,763 s
(62.7 min) — nearly the entire W=4 makespan in one row. No slow worker can carry any of the
top four rows without becoming the campaign’s critical path.
Two reserved rows earn their pin for reasons the wall-time column does NOT show, and the map must
not “optimize” them out at recon: go/doc/comment reads 18 s here but carries 10,059 verdicts and
spawns go build throughout TestStd — its cost under -test-action all (the k regime) will
diverge hardest from this table; and go/types read 137 s here against 364 s in the plan’s own
reserved table — the row moves between readings, which is itself the argument for pinning it to
the fastest, best-characterized box.
4.2 The structural finding: at W ≥ 4 the makespan IS the reserved set
| W | Makespan | Binding bin | Bulk bins finish at |
|---|---|---|---|
| 3 | 4,289 s (~71.5 min) | all three balanced (4,272–4,289 s) | — |
| 4 | 3,956 s (~65.9 min) | the i9’s reserved set, alone | ~3,250 s (~54 min) |
| 5 | 3,956 s (~65.9 min) | the i9’s reserved set, alone | ~2,497 s (~42 min) |
At W=3 the fleet is capacity-bound: makespan ≈ total / Σs_w = 7,701 / 1.80 = 4,278 s, and LPT lands within 11 s of that bound (the i9 takes 38 cheap bulk rows on top of its reserves). From W=4 the picture inverts: the three non-i9 workers absorb the entire 3,745 s bulk and still finish ~18 % below the i9’s floor, LPT gives the i9 zero bulk rows, and the campaign’s floor is the reserved set’s 3,956 s run serially on the i9. Adding the fifth worker buys no makespan at all — it only drops the bulk bins from ~54 to ~42 min. W=5’s value is margin and re-deal resilience (a reboot costs a smaller shard), not speed.
Two levers if ~66 min needs to shrink, both coordinator decisions, neither assumed here:
(1) the i9’s declared capacity is 3 concurrent worktrees — an LPT packing of the 7 reserved rows
into 3 parallel worktrees reaches ~1,369 s (≈ 23 min) on the reserved leg, at the cost of running
reserved rows under concurrent load, which is exactly the condition their $longTimeouts floors
exist to survive (crypto/dsa measured 2,444 s under concurrent gates); (2) peel go/types +
go/doc/comment (the two cheap reserves) to a bulk bin, saving 155 s of floor — barely worth the
exception to “never sharded blind”.
4.3 Is the ~90-minute shard target achievable?
Yes at every W — with k = 1 and these factors, no bin splits. The margins, as k-thresholds (the multiplier at which a bin first exceeds C = 5,400 s and must split):
| W | Largest local bin | Headroom vs 90 min | Splits when k ≥ |
|---|---|---|---|
| 3 | 4,289 s | 1,111 s | 1.26 |
| 4 | 3,956 s (i9 reserved) | 1,444 s | 1.37 |
| 5 | 3,956 s (i9 reserved) | 1,444 s | 1.37 |
So the target survives a convert-and-build multiplier of up to ~1.26 at W=3 and ~1.37 at W≥4 before any bin becomes two sequential shards. If recon measures k materially above that, the construction’s step 5 splits the affected bins mechanically — the map does not need redesigning, only re-emitting. (Whether k ≈ 1 is genuinely open: the DATA header says the measured wall already covers convert + build + both test hosts + compare, which argues k ≈ 1, but the plan prices k as a recon measurement on the first ten rows and this draft defers to that.)
4.4 Sensitivity to the suspect speed factors
Perturbing the provisional factors at W=4 (LPT re-run per scenario):
| Scenario | Makespan | Δ vs base |
|---|---|---|
| base (i9 = 1.00, R = 0.45, i7 = 0.35, G = 0.35) | 3,956 s (65.9 min) | — |
| slow laptops (R = 0.35, G = 0.25) | 3,956 s | +0 % |
| slow coordinator (i7 = 0.25) | 3,956 s | +0 % |
| fast laptops (R = 0.55, G = 0.45) | 3,956 s | +0 % |
| everything slow (R = 0.35, i7 = 0.25, G = 0.25) | 4,176 s | +6 % |
| i9 degraded 20 % (i9 = 0.80) | 4,945 s (82.4 min) | +25 % |
(The table’s scenarios re-run LPT at the true factors — i.e. a map built knowing them. The “slow laptops” row lands at +0 % by a hair: the three bulk workers’ combined capacity at the i9’s 3,956 s floor is 0.95 × 3,956 = 3,758 i9-s against the 3,745 i9-s bulk load — 99.7 % utilization.)
The headline: at W ≥ 4 the makespan is only mildly sensitive to the suspect factors — the bulk bins finish ~18 % below the i9’s reserved floor, so a mis-calibrated laptop factor mis-balances bins that were not the critical path anyway. The costlier case is executing a map built on a wrong factor: a worker sized at 0.45 that truly runs at 0.35 finishes its bin ~29 % later than projected (54 → ~70 min — briefly the critical path, lifting the makespan ~6 % over the floor, still well under C). Mis-calibration therefore costs projection accuracy, idle time and single-digit-percent finish slip — never the 90-min target. The one factor that matters is the i9’s own throughput (reboot recovery, concurrent-job load, thermal state): 20 % degradation moves the makespan 25 %, because the i9 is the floor. At W=3 the insensitivity does NOT hold — the makespan there is capacity-bound (≈ total / Σs_w), so every factor error passes straight through; a W=3 dispatch should wait for real calibration numbers, a W≥4 dispatch tolerates the placeholders.
Corollary for OQ-H6’s fallback: if the i9 drops out entirely, the reserved set cannot be
re-dealt at these budgets — crypto/dsa + hash/maphash + crypto/tls + index/suffixarray
on a 0.45 box is ~7,600 s local (~2.1 h) before the floors are raised. The re-deal rule in §6
lens 3 (raise -TestTimeout, never re-deal at the same budget) is the operative defense; the
shard map itself should name R as the reserved-set fallback since it carries the largest
non-i9 factor.
5. Ready-to-paste — proposed insertion for PLAN-hop-campaign.md §4.3
Insert after the map-construction code block and its symbol table, before “Illustrative widths over 162 rows” (which it supersedes — the illustrative table’s even-split arithmetic is now replaced by a computed deal; the coordinator may retire or keep that table). Marked DRAFT per the header; the full per-row lists land in
docs/phase4/SHARDMAP-go1.23.12.mdat dispatch time per the construction’s step 6.
### 4.3.1 The computed map at the JOB-007 reading — DRAFT, pending recon calibration
> **DRAFT (2026-08-22) — pending coordinator review and hop-recon factor calibration.** The
> construction above, executed against the anchor's per-row wall times
> ([`phase4/DATA-sweep-row-walltimes.md`](phase4/DATA-sweep-row-walltimes.md), windows · corpus
> `18770d083` · i9-13900K, JOB-007: 162 rows, 18,569 verdicts, **7,701 i9-s total**). ⚠ **Every
> `s_w` below is a provisional placeholder** — LANES.md's roster marks historical cross-machine
> ratios SUSPECT, so the factors here are class-level readings (i9 = 1.00 by definition,
> R 6850U = 0.45, i7-5820K = 0.35, G 6650U = 0.35, any fifth worker = 0.35 assumed), to be
> replaced by the calibration pair's fresh numbers at recon and the map re-emitted. `k` is
> assumed 1 pending its recon measurement. The full per-row deal (every row named exactly once,
> checksum 162 = 7 reserved + 155 bulk) is emitted to `SHARDMAP-go1.23.12.md` at dispatch.
**The reserved set is the makespan from W = 4 up.** R's seven rows sum to **3,956 s (65.9 min)**
serial on the i9 — and at W ≥ 4 the remaining 155 rows (3,745 i9-s) fit on the other workers
~18 % under that floor, so LPT hands the i9 zero bulk rows and the campaign finishes when the
reserved set does:
| `W` | Fleet | Makespan (local wall) | Binding bin | Bulk bins finish |
|:--:|:--|--:|:--|--:|
| 3 | i9 + R + coordinator | **~4,289 s (71.5 min)** | all three balanced | — |
| 4 | + G | **~3,956 s (65.9 min)** | i9's reserved set alone | ~54 min |
| 5 | + one engaged machine | **~3,956 s (65.9 min)** | i9's reserved set alone | ~42 min |
Findings the numbers force, stated before dispatch:
1. **C = 90 min holds at every W at k = 1 — no bin splits.** The split thresholds: a bin first
exceeds C at k ≥ 1.26 (W=3) / k ≥ 1.37 (W≥4). If recon's k lands above that, step 5 splits
mechanically; the map re-emits, it does not redesign.
2. **At W ≥ 4 the makespan is only mildly sensitive to the suspect factors** (±0.10 on every
non-i9 factor moves it 0–6 %) because the bulk bins are not the critical path;
mis-calibration costs projection accuracy and single-digit finish slip, never the 90-min
target. **At W = 3 it is capacity-bound and every factor
error passes through** — a W=3 dispatch waits for real calibration; W≥4 tolerates
placeholders. The one live sensitivity is the i9 itself: 20 % degradation → +25 % makespan.
3. **W = 5 buys margin, not makespan** (bulk bins 54 → 42 min). Engage a fifth machine for
re-deal resilience against the i9's ~daily reboots, not for speed.
4. **Six rows carry 53 % of the wall**, five of them already reserved; `crypto/dsa` alone on a
0.35 box would be 62.7 min. The pin is arithmetic, not caution. Two reserves are pinned for
reasons this table cannot show: `go/doc/comment` (18 s here, but 10,059 verdicts and spawns
`go build` throughout `TestStd` — the row most exposed to k) and `go/types` (137 s here vs
364 s at its prior reading — it moves between readings).
5. **Reserved-set fallback (OQ-H6): R**, the largest non-i9 factor — at raised budgets only
(~2.1 h local for the top four rows; never re-dealt at the i9's budgets, per §6 lens 3).
6. If ~66 min must shrink: the i9's 3-worktree capacity packs the reserved set to ~1,369 s
(~23 min) in 3 parallel worktrees — at the cost of running exactly the `$longTimeouts` rows
under concurrent load (crypto/dsa measured 2,444 s under concurrent gates). A coordinator
trade, not a default.
Appendix — reproduction
⚠ AMENDMENT (2026-08-24) — this file and
shardmap.pyare BANKED, and the generator has moved on. “This scratchpad directory” is nowdocs/phase4/hopA-inputs/(e0d8930e1, banked as-found).emit_md.pywas never banked — it existed only in the session that wrote this file, and it is gone;shardmap.pyalone is the reproduction path, and the tables below are its output rather thanemit_md.py’s.shardmap.pyhas since changed in one load-bearing way (549b4e556): it derives its reserved set fromrun-validated-sweep.ps1’s$longTimeoutsat generation time instead of carrying the copied list this draft was computed with — so re-running it today yields a larger reserved set than the 7 rows below, before any factor calibration. Read the deal here as the method’s output at the placeholder factors and the drifted reserved set of its day.
Computed by shardmap.py / emit_md.py in this scratchpad directory (Python 3; parses the
fenced JOB-007 table from docs/phase4/DATA-sweep-row-walltimes.md, asserts 162 rows and the
7 + 155 checksum, runs the §4.3 construction literally — reserved pin, DESC LPT to smallest
load / s_w, deterministic name tie-breaks — then the sensitivity scenarios of §4.4). The LPT
deal is deterministic: two coordinators running it against the same DATA table and factor set
emit byte-identical bins.