Merge remote-tracking branch 'build/master' into class-v6-invention

This commit is contained in:
igneum-labs 2026-10-08 14:31:15 +00:00
commit f812e800ee
50 changed files with 7186 additions and 49 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,100 @@
// The class v5 tiers table (app/igneum-app/tiers/class-v5-tiers.json): the loader and the validator the test and the
// app's packaging read it through. The rows are in the shape src/ember.rs tier_from_json reads back from a card's state
// (id, clock_mhz, power_pct, mem_mhz, limit_w, mhs, w), so a card whose own search has not run can be set to a tier
// from this table by /api/tune/tier, and the search replaces the row when it runs. node --test class-v5-tiers.test.mjs
import { readFileSync } from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
export const TIER_IDS = ['efficiency', 'balanced', 'max'];
export const LABELS = ['measured', 'estimated'];
export const SOURCES = ['measured', 'stock'];
export const VENDORS = ['nvidia', 'amd', 'apple', 'intel'];
// the fields tier_from_json reads, every one a number
export const ROW_FIELDS = ['clock_mhz', 'power_pct', 'mem_mhz', 'limit_w', 'mhs', 'w'];
// the brief's card classes (floor lane 4, 8 October 2026): every one must have an entry
export const REQUIRED_CARDS = ['5090', '5080', '5070 Ti', '5070', '5060 Ti', '5060', '4090', '4080', '4070', '3090', '3080', '3070', '3060',
'9070 XT', '7900 XTX', '7800 XT', '7600 XT', '9060 XT', 'H100', 'L40S', 'A100', 'B580', 'A750', 'M5 Max', 'M4 Max', 'M4 Pro', 'M3 Max'];
export function loadTable(path) {
const p = path || join(dirname(fileURLToPath(import.meta.url)), 'class-v5-tiers.json');
return JSON.parse(readFileSync(p, 'utf8'));
}
/** Every fault in the table as a list of strings; an empty list is a valid table. */
export function validate(t) {
const faults = [];
const f = (s) => faults.push(s);
if (t.class !== 'v5') f(`class is ${t.class}, not v5`);
if (!Array.isArray(t.tier_ids) || t.tier_ids.join() !== TIER_IDS.join()) f('tier_ids must be efficiency, balanced, max');
for (const k of ['stale_when', 'on_flip', 'measured_flip', 'period']) if (!t.remeasure_rule || typeof t.remeasure_rule[k] !== 'string' || !t.remeasure_rule[k]) f(`remeasure_rule.${k} missing`);
if (!t.v5_over_v4 || typeof t.v5_over_v4.watts_pct !== 'number') f('v5_over_v4.watts_pct missing');
if (!Array.isArray(t.cards) || t.cards.length === 0) { f('cards missing'); return faults; }
const seen = new Set();
for (const c of t.cards) {
const name = c.card || '(unnamed)';
if (seen.has(name)) f(`${name}: listed twice`);
seen.add(name);
if (!VENDORS.includes(c.vendor)) f(`${name}: vendor ${c.vendor}`);
if (!LABELS.includes(c.label)) f(`${name}: label ${c.label}`);
if (!Array.isArray(c.match) || c.match.length === 0) f(`${name}: no match list`);
if (typeof c.src !== 'string' || !c.src) f(`${name}: no src`);
if (!c.stock || typeof c.stock.uj !== 'number' || c.stock.uj <= 0) f(`${name}: stock.uj missing`);
if (!Array.isArray(c.tiers) || c.tiers.length === 0) { f(`${name}: no tiers`); continue; }
const ids = c.tiers.map((r) => r.id);
for (const id of ids) if (!TIER_IDS.includes(id)) f(`${name}: tier id ${id}`);
if (new Set(ids).size !== ids.length) f(`${name}: a tier id repeats`);
const lever = c.vendor === 'nvidia' || c.vendor === 'amd';
if (lever && ids.join() !== TIER_IDS.join()) f(`${name}: a card with a lever carries all three tiers in order`);
if (!lever && ids.join() !== 'max') f(`${name}: a card with no lever carries the max tier only`);
for (const r of c.tiers) {
for (const k of ROW_FIELDS) if (typeof r[k] !== 'number' || !Number.isFinite(r[k])) f(`${name}/${r.id}: ${k} is not a number`);
if (typeof r.power_pct === 'number' && (r.power_pct < 50 || r.power_pct > 100)) f(`${name}/${r.id}: power_pct ${r.power_pct} outside 50 to 100`);
if (typeof r.clock_mhz === 'number' && (r.clock_mhz < 0 || r.clock_mhz > 4000)) f(`${name}/${r.id}: clock_mhz ${r.clock_mhz}`);
if (!LABELS.includes(r.label)) f(`${name}/${r.id}: label ${r.label}`);
if (!SOURCES.includes(r.source)) f(`${name}/${r.id}: source ${r.source}`);
if (typeof r.uj !== 'number' || r.uj <= 0) f(`${name}/${r.id}: uj missing`);
if (typeof r.note !== 'string' || !r.note) f(`${name}/${r.id}: no note`);
if (r.mhs > 0 && r.w > 0 && r.uj > 0 && Math.abs(r.w / r.mhs - r.uj) / r.uj > 0.025) f(`${name}/${r.id}: uj ${r.uj} is not w over mhs (${(r.w / r.mhs).toFixed(2)})`);
if (r.mhs > 0 && r.w > 0 && typeof r.mhw === 'number' && Math.abs(r.mhs / r.w - r.mhw) / r.mhw > 0.025) f(`${name}/${r.id}: mhw ${r.mhw} is not mhs over w`);
if (r.id === 'max' && r.source !== 'stock') f(`${name}/max: the max tier is the stock row`);
if (r.id === 'max' && (r.clock_mhz !== 0 || r.power_pct !== 100)) f(`${name}/max: stock is unlocked at 100 percent`);
if (c.vendor === 'amd' && (typeof r.core_offset_mhz !== 'number' || typeof r.power_offset_pct !== 'number')) f(`${name}/${r.id}: an AMD row carries core_offset_mhz and power_offset_pct`);
if (c.vendor === 'amd' && r.core_offset_mhz > 0) f(`${name}/${r.id}: an AMD core offset never raises the clock`);
}
const by = Object.fromEntries(c.tiers.map((r) => [r.id, r]));
if (by.efficiency && by.max && by.efficiency.uj > by.max.uj) f(`${name}: efficiency costs more per hash than stock`);
if (by.efficiency && by.balanced && by.balanced.uj + 1e-9 < by.efficiency.uj) f(`${name}: balanced is cheaper per hash than efficiency`);
if (by.balanced && by.max && by.balanced.mhs > 0 && by.max.mhs > 0 && by.balanced.mhs < by.max.mhs * 0.98) f(`${name}: balanced gives up over 2 percent of the top rate`);
if (c.label === 'measured' && !c.tiers.some((r) => r.label === 'measured' && r.source === 'measured') && lever) f(`${name}: a measured card has no measured tuned row`);
}
for (const want of REQUIRED_CARDS) if (!t.cards.some((c) => c.card.includes(want))) f(`no entry for ${want}`);
return faults;
}
/** The entry a card name matches (the first whose match list hits; the longer match wins, so "5070 Ti" beats "5070"). */
export function entryFor(t, cardName) {
const n = cardName.toUpperCase();
let best = null, bestLen = 0;
for (const c of t.cards) for (const m of c.match) if (n.includes(m.toUpperCase()) && m.length > bestLen) { best = c; bestLen = m.length; }
return best;
}
/** The tier row a card starts from, in the shape tier_from_json reads; null when the table has none. */
export function tierRow(t, cardName, id) {
const c = entryFor(t, cardName);
if (!c) return null;
return c.tiers.find((r) => r.id === id) || null;
}
/** The re-measure verdict the app applies on a class flip (src/ember.rs tiers_stale): stale when both classes are known and differ. */
export function stale(tiersClass, programClass) {
return Boolean(tiersClass) && Boolean(programClass) && tiersClass !== programClass;
}
if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
const t = loadTable();
const faults = validate(t);
if (faults.length) { console.error(faults.join('\n')); process.exit(1); }
console.log(`class ${t.class}: ${t.cards.length} card classes, ${t.cards.filter((c) => c.label === 'measured').length} measured`);
}

View file

@ -0,0 +1,109 @@
// node --test app/igneum-app/tiers/class-v5-tiers.test.mjs
// The class v5 tiers table: the shipped file validates; the measured rows carry the record's numbers; the match rule
// picks the longer name; a class flip reads stale; and the known-failed cases (a bad power rung, a missing field, a
// tuned row dearer than stock, a card class left out) are refused, so a stale or broken table cannot pass.
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { loadTable, validate, entryFor, tierRow, stale, REQUIRED_CARDS, ROW_FIELDS } from './class-v5-tiers.mjs';
const clone = (t) => JSON.parse(JSON.stringify(t));
test('the shipped table validates with no faults', () => {
const t = loadTable();
assert.deepEqual(validate(t), []);
assert.equal(t.class, 'v5');
assert.ok(t.cards.length >= REQUIRED_CARDS.length);
});
test('the measured rows are the record\'s (the 5090 at its 1,300 MHz knee, the 5080 at 1,100, the 4070 at its tune, the 9070 XT grid, the M5 Max meter)', () => {
const t = loadTable();
const r5090 = tierRow(t, 'NVIDIA GeForce RTX 5090', 'balanced');
assert.equal(r5090.clock_mhz, 1300);
assert.equal(r5090.label, 'measured');
assert.ok(Math.abs(r5090.uj - 2.38) < 0.01, `the 5090 balanced row reads 2.38 microjoules under class v5: ${r5090.uj}`);
const e5090 = tierRow(t, 'NVIDIA GeForce RTX 5090', 'efficiency');
assert.equal(e5090.clock_mhz, 1200);
const r5080 = tierRow(t, 'NVIDIA GeForce RTX 5080', 'efficiency');
assert.equal(r5080.clock_mhz, 1100);
assert.ok(Math.abs(r5080.uj - 2.06) < 0.01);
const r4070 = tierRow(t, 'NVIDIA GeForce RTX 4070', 'efficiency');
assert.equal(r4070.clock_mhz, 1860);
assert.equal(r4070.power_pct, 50);
const amd = tierRow(t, 'AMD Radeon RX 9070 XT', 'efficiency');
assert.equal(amd.core_offset_mhz, -500);
assert.equal(amd.power_offset_pct, -30);
assert.ok(Math.abs(amd.w - 149.3) < 0.01);
const apple = entryFor(t, 'Apple M5 Max');
assert.equal(apple.tiers.length, 1);
assert.equal(apple.tiers[0].id, 'max');
assert.ok(Math.abs(apple.tiers[0].uj - 1.40) < 0.01);
});
test('every entry carries the three tiers where the card has a lever, and only max where it has none', () => {
const t = loadTable();
for (const c of t.cards) {
const ids = c.tiers.map((r) => r.id).join();
if (c.vendor === 'nvidia' || c.vendor === 'amd') assert.equal(ids, 'efficiency,balanced,max', c.card);
else assert.equal(ids, 'max', c.card);
for (const r of c.tiers) for (const k of ROW_FIELDS) assert.equal(typeof r[k], 'number', `${c.card}/${r.id}.${k}`);
}
});
test('the match rule takes the longer name: a 5070 Ti is not a 5070, a 4060 Ti is not a 4060, a 9060 XT is not a 9070 XT', () => {
const t = loadTable();
assert.equal(entryFor(t, 'NVIDIA GeForce RTX 5070 Ti').card, 'NVIDIA GeForce RTX 5070 Ti');
assert.equal(entryFor(t, 'NVIDIA GeForce RTX 5070').card, 'NVIDIA GeForce RTX 5070');
assert.equal(entryFor(t, 'NVIDIA GeForce RTX 4060 Ti').card, 'NVIDIA GeForce RTX 4060 Ti');
assert.equal(entryFor(t, 'NVIDIA GeForce RTX 4060').card, 'NVIDIA GeForce RTX 4060');
assert.equal(entryFor(t, 'AMD Radeon RX 9060 XT').card, 'AMD Radeon RX 9060 XT');
assert.equal(entryFor(t, 'amd:gfx1201').card, 'AMD Radeon RX 9070 XT');
assert.equal(entryFor(t, 'NVIDIA GeForce GTX 1080 Ti'), null);
assert.equal(tierRow(t, 'NVIDIA GeForce GTX 1080 Ti', 'max'), null);
});
test('a class flip reads stale exactly as src/ember.rs tiers_stale does', () => {
assert.equal(stale('v4', 'v5'), true);
assert.equal(stale('v5', 'v5'), false);
assert.equal(stale('', 'v5'), false);
assert.equal(stale('v4', ''), false);
const t = loadTable();
assert.ok(t.remeasure_rule.measured_flip.includes('0.0 percent of rate'));
assert.equal(t.v5_over_v4.watts_pct, 2.0);
});
test('known-failed: a power rung under 50 is refused', () => {
const t = clone(loadTable());
t.cards[0].tiers[0].power_pct = 40;
assert.ok(validate(t).some((s) => s.includes('power_pct 40')));
});
test('known-failed: a row missing a field tier_from_json reads is refused', () => {
const t = clone(loadTable());
delete t.cards[1].tiers[1].limit_w;
assert.ok(validate(t).some((s) => s.includes('limit_w is not a number')));
});
test('known-failed: a tuned row dearer per hash than stock is refused, and a max tier that is not stock', () => {
const t = clone(loadTable());
const c = t.cards.find((x) => x.card.includes('4080'));
c.tiers[0].uj = c.tiers[2].uj + 1; c.tiers[0].w = c.tiers[0].uj * c.tiers[0].mhs; c.tiers[0].mhw = c.tiers[0].mhs / c.tiers[0].w;
assert.ok(validate(t).some((s) => s.includes('efficiency costs more per hash than stock')));
const u = clone(loadTable());
u.cards[0].tiers[2].clock_mhz = 1500;
assert.ok(validate(u).some((s) => s.includes('stock is unlocked at 100 percent')));
});
test('known-failed: a card class of the brief left out is refused, and a stale uj (not w over mhs) is refused', () => {
const t = clone(loadTable());
t.cards = t.cards.filter((c) => !c.card.includes('3060'));
assert.ok(validate(t).some((s) => s === 'no entry for 3060'));
const u = clone(loadTable());
u.cards[0].tiers[1].uj = 9.99;
assert.ok(validate(u).some((s) => s.includes('is not w over mhs')));
});
test('known-failed: a table under another class is refused', () => {
const t = clone(loadTable());
t.class = 'v4';
assert.ok(validate(t).some((s) => s.includes('not v5')));
});

View file

@ -0,0 +1,139 @@
# Class v6 census: the read width W = 16 and the op-mix re-weight through the sub-version 3 rules
8 October 2026, 13:2x to 14:1x UK, branch `class-v6-census` from `counter-asic-4` (base 4bb4c0ca), the census lane of the Counter ASIC 4.0 research under the Counter ASIC coordinator. The question: two class v6 changes are about to be chosen (the read width W = 16 words, the whole 64-byte item, the existing class `w64`; and an op-mix re-weight toward the families the k lane's RTL rows rank hardest for a programmable chip core), and neither may enter the class without the sub-version 3 rules. This file carries the census rows, the exact commands, and PASS or FAIL per candidate. Every number is measured on build-3 (igneum-build-3, 32 threads) or build-4 (igneum-build-4, 96 threads) under the lease pool at nice 19, measure class, owner `class-v6-census`; nothing ran on the Mac; nothing here touches the devnet, the testnet object or any served number.
## 0. One page
Both class v6 changes pass the sub-version 3 rules, measured, on 256 seeds each without an era and 256 seeds each across eight drawn eras, on build-3 and build-4 between 13:37 and 14:05 UK.
- **(a) W = 16, the whole 64-byte item, at the current mix: PASS.** 256 of 256 seeds accepted without an era (0 exhausted at the 256 cap, 0.704 rejection per candidate against the record's 0.668 and the 0.986 to 0.990 death line), 256 of 256 across eras 0 to 7 with the value-level window-bit test switched on as a refusal (0 refusals for the instrument's reason; 189 refusals at the era's stride bit against the control's 218, the record's own class on today's `load_index`), the (c''') floor refusing 1.4 percent of candidates, the F8-form top-0.1-percent share 0.999 to 1.006 of the uniform control at 2^20, the verifier +0.6 percent within a 4 percent drift. It is the cleanest address of the three: at 16 words the product's low bits 0 to 3 are alignment and never enter the address (the control carries that law at bit 0 in 116 of 256 programs).
- **(b) W = 4 at the re-weighted mix (13, 11, 6, 10, 8, 8, 7, 2, 6, 4: mulhi 6 to 2, mul 8 to 6, mad 8 to 10, add, xor, rotl, sub +1 each): PASS on the rules.** 256 of 256 both ways, 0 exhausted, rejection 0.407 (the fewest lossy ops), (c''') 1.2 percent, verifier within drift. Weaker than (a) on the address: at 4 words the product law lands on bit 2 (75 of 256 programs), and the extra `mad` raises the stride-bit refusals to 1.6 per seed on the eras whose R is in range (the control 1.2).
- **(c) both: PASS on the rules**, 256 of 256 both ways, rejection 0.426, (c''') 3.4 percent, F8-form 0.999 to 1.002, verifier -0.1 percent; the address as (a) at the low bits and as (b) at the stride bit.
The order (the coordinator's correction at 14:1x UK, taken into the close): W = 16 passes the rules but is dead on energy, measured today by floor lane 5 on the 5090, 4090, H100 and 3090 (the card pays the second sector through its own fabric, +25 to +34 percent energy per hash, equal to the chip's +33, so the edge does not move and the honest card loses a quarter of its efficiency). So the class order is: W = 8 pins (lane 3), the index fold lands first, then the re-weight (b) at W = 8 goes through this harness again (five box-minutes on 16 cores) before it enters. What this census keeps from (a): the rules hold at the widest width, and a wider read removes the product's own low bits from the address by construction (at W = 8 bits 0 to 2 are alignment, so the bit-2 law of the W = 4 rows is gone there too); the stride bit R is the fold's to remove. The W = 8 class is not a width the generator draws today (`WIDTH_WORDS` is 1, 4, 16), so lane 3's construction lands before its census runs.
## 1. The candidates and the rules
| Candidate | Class under `igneum-pow accept` | Read width | Weights (add, xor, mul, mad, shfl, rotl, sub, mulhi, rotr, or; sum 75) |
|---|---|---|---|
| ctrl, the record (class v4) | `mx8+sh256x27` | W = 1 (4 bytes) | base: 12, 10, 8, 8, 8, 7, 6, 6, 6, 4 |
| w16, the design's genesis pin | `w16m8g+sh256x27` | W = 4 (16 bytes) | base |
| (a) W = 16 at the current mix | `w64m8g+sh256x27` | W = 16 (64 bytes, two 32-byte sectors) | base |
| (b) W = 4 at the re-weighted mix | `w16m8g+sh256x27` with `IGNEUM_FG_WEIGHTS` | W = 4 | re-weighted: 13, 11, 6, 10, 8, 8, 7, 2, 6, 4 |
| (c) both | `w64m8g+sh256x27` with `IGNEUM_FG_WEIGHTS` | W = 16 | re-weighted |
**The re-weight, stated.** The k lane's RTL table (class v6 design 10.2: k absolute at N3 against the 5090's lock, highest first) reads mad 0.20, the ARX families add, xor, rotl, rotr, sub 0.17 to 0.18, the index fold 0.14, or 0.12, mul 0.08, prmt and lop3 0.06, mulhi 0.03. The re-weight moves 6 points of 75 from the two families the chip finds easiest (mulhi 6 to 2, mul 8 to 6) to the family it finds hardest (mad 8 to 10) and to four ARX families (add 12 to 13, xor 10 to 11, rotl 7 to 8, sub 6 to 7); shfl, rotr and or stay at base. `prmt` and `lop3` are chip RTL rows, not drawn families (the generator's ten non-load families are add, sub, mul, mulhi, xor, or, rotl, rotr, mad, shfl), so "prmt down" has no weight to move; the nearest drawn family, shfl, stays at base. The lossy share (or + mul + mulhi) falls from 18 to 12 of 75, inside the family-gate band (the lossy families never above their base). mulhi keeps 2 points rather than 0 so the family stays drawn (layer 3's rotation decides family membership, not this re-weight).
**The rules every candidate is judged by** (the harness, `igneum-pow/src/accept.rs` and `generator.rs` on this branch, on only under `IGNEUM_FAMILY_GATE` and never on a chain path): the class v4 rule set keyed on the class v4 shape at any read width (`is_census_shape`: the 256 x 27 block over the mx8 base with the mix one-hot on 1, 4 or 16 words), so (a') the freshness fixpoint in the draw and the acceptance, (c') saturated sources, (c'') the distinct-index ratio at 0.98 over 2^20 evaluations with the window divided by the width (the family-gate harness's calibration), and the 256-attempt cap with the last resort all apply; plus (c''') the class v5 hot-item floor at 0.995 on the same 2^20 sample (ported from the class v5 crate); plus the value-level index-bit test (the research file's 20.2b) read on every class over the bits the site's window and the width's alignment leave free, refused above 6 sigma under `IGNEUM_FG_BITTEST` (the drawn-era runs) and recorded on the accepted program otherwise.
## 2. The no-era census (256 seeds per candidate, `igneum-v6c/0..255`, the class's own 256-attempt cap)
The instrument of the research file's 20.2a-close (the invention lane's no-era census), on this branch's harness: every candidate of each seed through the whole rule, no era, the index the plain `x AND mask` so every free bit is fair to judge. `r` is the rejection rate per candidate (the record's death line for the per-load forms was 0.986 to 0.990; the class v4 control under the family-gate band read 0.595 to 0.73 across strata). The index-bit column is the value-level read on the accepted program over the 64 units' 16,384 addresses per site (sigma 64; the bits below the width's alignment are 0 by construction and not judged), so a z here is 8x smaller than the family-gate harness's 2^20 reading of the same bias.
| Candidate | Seeds accepted of 256 | Exhausted at the 256 cap | Candidates walked | r per candidate | Mean attempt, max | (c''') refused of candidates | (c'') refused | Rejections by part | Accepted programs with a site over 6 sigma; worst | Box, clock (UK) |
|---|---|---|---|---|---|---|---|---|---|---|
| ctrl, the record (W = 1, `mx8+sh256x27`) | **256** | 0 | 770 | **0.668** | 2.01, 18 | 1 (0.1 percent) | 8 (1.0 percent) | (a') 431, (a) 52, (b) 18, (c) 4 | 143 of 256 (56 percent); z 97.1 at bit 0; 116 programs at bit 0, 14 at bit 1, 5 at bits 2 and 3, 8 at bits 4 to 26 (the product's low-bit law at the load's source, the family-gate harness's 48 to 58 percent read at 2^20 replicated at 2^14) | build-3, 8 cores, 13:45 to 13:53 |
| (a) W = 16, base mix (`w64m8g+sh256x27`) | **256** | 0 | 865 | **0.704** | 2.38, 16 | 12 (1.4 percent) | 12 (1.4 percent) | (a') 500, (a) 57, (b) 19, (c) 9 | 26 of 256 (10 percent); z 41.9 at site 0 bit 15 (seed 69); bits 4, 5, 9, 10, 11, 15, 19, 21, 27 | build-3, 8 cores, 13:37 to 13:42 |
| w16, the design's genesis pin (W = 4, base mix) | **256** | 0 | 854 | **0.700** | 2.34, 16 | 9 (1.1 percent) | 11 (1.3 percent) | (a') 491, (a) 58, (b) 20, (c) 9 | 97 of 256 (38 percent); z 56.3 at bit 10; 74 programs at bit 2 | build-4, 16 cores, 13:51 to 13:55 |
| (b) W = 4, re-weighted (`w16m8g+sh256x27`, weights 13,11,6,10,8,8,7,2,6,4) | **256** | 0 | 432 | **0.407** | 0.69, 5 | 5 (1.2 percent) | 14 (3.2 percent) | (a') 123, (a) 21, (c) 9, (b) 4 | 97 of 256 (38 percent); z 71.0 at bit 23; **75 programs at bit 2** (the lowest bit the 4-word alignment leaves free: the product's low-bit law moves up to it), 22 at bits 4 to 27 | build-4, 16 cores, 13:46 to 13:50 |
| (c) W = 16, re-weighted (`w64m8g+sh256x27`, the same weights) | **256** | 0 | 446 | **0.426** | 0.74, 6 | 15 (3.4 percent) | 14 (3.1 percent) | (a') 127, (a) 21, (c) 9, (b) 4 | 32 of 256 (12.5 percent); z 34.1 at bit 18; 13 programs at bit 4, the rest spread over bits 5 to 27 | build-4, 16 cores, 13:46 to 14:00 |
What the no-era rows say. Every candidate accepts 256 of 256 seeds inside the chain's cap with no seed past attempt 18, and every rejection rate sits far under the 0.986 to 0.990 line that killed the per-load forms: the width moves r by nothing (0.668 at W = 1, 0.700 at W = 4, 0.704 at W = 16, the (c''') floor's per-width calibration adding about 1 point at W = 16) and the re-weight LOWERS it (0.407 to 0.426: six fewer points on the lossy families means fewer (a') refusals, mean attempt 0.7 against 2.0 to 2.4). The index-bit column is the product's low-bit law, and it moves with the width exactly as the alignment predicts: at W = 1 it sits at bit 0 in 116 of 256 programs (56 percent carry a biased site); at W = 4 bits 0 and 1 are alignment and the law lands on bit 2 (74 to 75 of 256); at W = 16 bits 0 to 3 are alignment and the law is gone from the address, leaving 26 to 32 of 256 programs (10 to 12 percent) with a weaker bias at bits 4 and up (z 8 to 42 at 2^14), the class the record's family-gate rows attribute to the era stride and to lossy writers upstream, which layer 1's index fold is the remedy for. The re-weight does not change the bias picture at either width (97 of 256 at W = 4 with or without it; 26 against 32 at W = 16).
## 3. The drawn-era census with the window-bit test as a refusal (eras `igneum-era-test/0..7`, 32 seeds per era, 256 per candidate)
The per-era form of the research file's 20.2a-correction: the value-level index-bit test judges only the bits inside each site's era window (so a narrow-window site's fixed top bits are never counted, the instrument fault of 10:5x UTC) and above the width's alignment, and here it REFUSES a candidate (6 sigma over the 64 units) so the count of refusals per era is read directly; a refused candidate is redrawn, as the chain would. The eras' stride rotations: era 0 R = 19, era 1 R = 6, era 2 R = 28, era 3 R = 30, era 4 R = 10, era 5 R = 22, era 6 R = 3, era 7 R = 27 (`igneum-pow show --era`). Zero refusals for the instrument's reason on every era and every candidate (the fixed window bits are not judged); every refusal below is a real bias at the era's stride bit, the adv-cache-2 class the record already carries on today's `load_index` (the product's low bits placed at address bit R by `rotl(x * M, R)`), on the eras whose R lands inside the free bits.
| Candidate | Seeds accepted of 256 | Exhausted at the 256 cap | Candidates walked | r per candidate | Mean attempt, max | Window-bit refusals per era 0 to 7 (of candidates) | The bit refused, per era (count) | Worst free bit on the accepted programs | Box, clock (UK) |
|---|---|---|---|---|---|---|---|---|---|
| ctrl, W = 1 | **256** | 0 | 1,502 | 0.830 | 4.87, 22 | 38, 33, 5, 25, 33, 33, 38, 13 (218 of 1,502, 14.5 percent) | 19 (34), 6 (31), 0 (4), 0 (23), 10 (31), 22 (31), 3 (34), 27 (9): bit R on every era with R under 28, bit 0 (the product's own) on eras 2 and 3 | 5.9 sigma (under the band by construction) | build-4, 16 cores, 13:59 to 14:02 |
| w16, W = 4, base mix (the reference) | **256** | 0 | 1,556 | 0.835 | 5.08, 40 | 29, 38, 0, 2, 48, 40, 40, 7 (204 of 1,556, 13.1 percent) | bit R on the R-in-range eras, as the control | 5.5 sigma | build-4, 16 cores, 14:02 to 14:05 |
| (a) W = 16, base mix | **256** | 0 | 1,524 | 0.832 | 4.95, 40 | 27, 41, 0, 1, 48, 32, 33, 7 (189 of 1,524, 12.4 percent) | 19 (24), 6 (33), none, 5 (1), 10 (40), 22 (26), 4 (31: R = 3 is alignment, the law's next bit), 27 (7): bit R, never bits 0 to 3 | 5.9 sigma | build-3, 8 cores, 13:54 to 13:58 |
| (b) W = 4, re-weighted | **256** | 0 | 814 | 0.686 | 2.18, 11 | 50, 54, 1, 3, 51, 51, 51, 12 (273 of 814, 33.5 percent) | 19 (46), 6 (48), 2 (1), 2 (2), 10 (46), 22 (47), 3 (46), 27 (11) | 5.3 sigma | build-3, 8 cores, 13:58 to 14:02 |
| (c) W = 16, re-weighted | **256** | 0 | 781 | 0.672 | 2.05, 11 | 50, 54, 1, 3, 50, 51, 24, 14 (247 of 781, 31.6 percent) | 19 (46), 6 (48), 4 (1), 4 (3), 10 (45), 22 (47), 4 (22), 27 (12) | 5.5 sigma | build-4, 15 cores, 13:55 to 13:59 |
What the era rows say. Every candidate accepts every seed on every era inside the cap with the bias refusal switched on, so none costs liveness: the price is attempts (mean 2 to 5, the worst seed 40 at W = 16 on eras 1, 4 and 6 against the control's 22). The refusals are the era-stride class on every candidate and on the control alike: on the four eras with R in 6 to 22 (eras 0, 1, 4, 5) about one candidate per seed is refused at bit R, on eras with R at 27 or above almost none, and the width only decides whether the product's OWN low bits are also in the address (bit 0 on eras 2 and 3 for the control: 27 refusals; gone at W = 16: 1). The re-weight raises the stride-bit incidence (1.6 refusals per seed at eras 0, 1, 4, 5 against 0.8 to 1.2 at the base mix): more `mad` means more product-sourced loads in front of the rotation, and `mad` is an injecting family the (a') rule accepts as a load's last writer. None of this is the candidates' to fix: the design's remedy is layer 1's index fold of the product's low bits before the stride rotation, after which this test becomes the guard that the fold holds; until the fold is in, the bias test stays a record per era, as section 5.1 of the design says, and the chain's rule (without it) accepts the same programs at the no-era rates of section 2.
## 4. The F8-form uniformity read (2^20 nonces per seed)
The invention lane's instrument with the era draw added (`tools/attack/v6-census/uniform`): per seed the first accepted candidate under the harness, then every load's word index over 2^20 nonces through the library's own `trace_load_indices`; per site the distinct-index ratio against `N - N^2 / 2W_s` (the window over the width); the cross-hash ITEM histogram's top 0.1 percent share against a uniform control of the same size (the F8 pass line: within 1.2x; the record's class v4 read 1.00x on the clean seeds and the plants fire at 29x and 4.8x). No era here (the no-era index is the plain `x AND mask`); the drawn-era F8 verdict is section 3's window-bit test, and the family-gate lane's 2^24 live-dataset census is the instrument for a per-era hot-set hunt, at 45 to 100 core-hours per point, which this window does not hold.
| Candidate | Seeds | Top 0.1 percent share, ratio to the uniform control (min to max) | Min site distinct ratio (min to max over seeds) | Max item reads (candidate / control) | Box, clock (UK) |
|---|---|---|---|---|---|
| ctrl, the record (W = 1) | 16 | 0.9992 to 1.0163 (PASS) | 0.9722 to 1.0001 | 26 to 29 / 29 | build-3, 8 cores, 13:50 to 13:52 |
| w16 (W = 4, base mix) | 16 | 0.9993 to 1.0053 (PASS) | 0.9967 to 1.0026 | 26 to 30 / 29 | build-3, 8 cores, 13:52 to 13:54 |
| (b) W = 4, re-weighted | 16 | **0.9989 to 1.0077** (PASS at 1.2x) | 0.9815 to 1.0026 | 26 to 30 / 29 | build-3, 8 cores, 14:02 to 14:05 |
| (a) W = 16, base mix | 16 | **0.9986 to 1.0061** (PASS at 1.2x) | 1.0439 to 1.0491 | 26 to 30 / 27 to 29 | build-3, 8 cores, 13:44 to 13:46 |
| (c) W = 16, re-weighted | 16 | **0.9987 to 1.0016** (PASS at 1.2x) | 1.0465 to 1.0491 | 26 to 30 / 27 to 29 | build-3, 8 cores, 13:42 to 13:44 |
## 5. The verifier cost
`igneum-pow bench --warps 20` on one leased core of build-4 (core 18, nice 19, 13:55 to 14:02 UK) while the box ran 80 other leased threads, so the figures carry the box's load: the control's three repeats at the start read 9.55, 9.54, 9.68 ms per 32-lane warp and the same program at the end 9.49, 9.13, 9.19 (the load fell during the run). Every pair is read against the nearest control block.
| Candidate | ms per warp, three repeats of 20 warps | Against the control | Reading |
|---|---|---|---|
| ctrl (first) / ctrl (last) | 9.55, 9.54, 9.68 / 9.49, 9.13, 9.19 | | the drift of the box: 4 percent across the run |
| w16 (W = 4, base mix) | 9.65, 9.42, 9.45 | -0.9 percent on the means (first block) | within the drift |
| (a) W = 16, base mix | 9.48, 9.75, 9.70 | **+0.6 percent** on the means (first block) | within the drift; the invention lane's +4 percent (20.2b's row) is not seen at this resolution |
| (b) W = 4, re-weighted | 9.62, 8.60, 8.38 | -5 percent on the means (the load fell mid-run; the first repeat equals the control) | within the drift |
| (c) W = 16, re-weighted | 9.15, 9.21, 9.25 | **-0.1 percent** against the last control block | within the drift |
The verifier cost delta of both changes is under the run's 4 percent drift on a loaded core; a quiet-box reading (`lease quiet`, the ladder's method with the SMT sibling loaded) is owed before the number is quoted as a figure. Nothing here approaches the 10 ms loaded gate.
## 6. PASS or FAIL per candidate against the sub-version 3 rules
The line: 256 of 256 seeds accepted on the no-era census inside the chain's cap with r far under 0.986 to 0.990; the drawn-era census on eras 0 to 7 with 0 refusals for the instrument's reason and every seed accepted; no product bit in the address that the record does not already carry (the era-stride bit under the pre-fold `load_index`, equal in kind on the control); the (c''') floor applied and its cost stated; the F8-form read within 1.2x of the uniform control.
| Candidate | No-era census | Drawn-era census and the window-bit test | Biased product bits in the address | (c''') | F8-form at 2^20 | Verifier | Verdict |
|---|---|---|---|---|---|---|---|
| (a) W = 16 at the current mix | 256 of 256, 0 exhausted, r 0.704 | 256 of 256 on eras 0 to 7, 0 exhausted, 0 instrument refusals; 189 stride-bit refusals of 1,524 candidates (the control 218 of 1,502) | the product's own low bits (0 to 3) are alignment and never reach the address; the stride bit R stays, as on the record | 1.4 percent of candidates refused | 0.999 to 1.006 of the control | +0.6 percent, within drift | **PASS** |
| (b) W = 4 at the re-weighted mix | 256 of 256, 0 exhausted, r 0.407 | 256 of 256, 0 exhausted, 0 instrument refusals; 273 stride-bit refusals of 814 | bit 2 carries the product law in 75 of 256 programs (the width's, not the mix's: the w16 reference reads 74); the stride bit refused 1.6 times per seed on R-in-range eras against the control's 1.2 | 1.2 percent | 0.999 to 1.008 of the control | within drift | **PASS on the rules; weaker than (a) on the bias count** |
| (c) both | 256 of 256, 0 exhausted, r 0.426 | 256 of 256, 0 exhausted, 0 instrument refusals; 247 stride-bit refusals of 781 | as (a) at bits 0 to 3; the stride bit refused 1.6 times per seed on R-in-range eras | 3.4 percent | 0.999 to 1.002 of the control | -0.1 percent, within drift | **PASS on the rules; the re-weight's stride-bit cost as in (b)** |
Meaning for the two changes. The read width W = 16 passes every sub-version 3 rule at the record's own rates and is the cleanest of the three on the address: a wider read removes the product's low-bit law from the address by construction. It does not enter: floor lane 5's card rows of today (the 5090, 4090, H100 and 3090) read the second sector at +25 to +34 percent energy per hash on the card, paid through its own fabric and equal to the chip's +33, so the edge does not move and the honest card loses a quarter of its efficiency; W = 16 is dead on energy, and the rules' verdict here is what it would have needed beside that. The re-weight passes the rules with a lower rejection rate (fewer lossy ops, fewer (a') refusals) and costs nothing on the verifier, but it moves weight onto `mad`, a product the (a') rule accepts at a load's source, so the era-stride bias is refused about a third more often per seed until layer 1's index fold lands; with the fold in, that cost disappears and the re-weight's chip-side gain (the k lane's ranking) stands on its own. The class order, per the coordinator's close: W = 8 pins (lane 3), the index fold lands first, then the re-weight (b) at W = 8 goes through this harness again (five box-minutes) before it enters; the W = 8 draw is lane 3's construction (the generator's widths are 1, 4 and 16 today), and the harness takes it the day it parses.
## 7. The exact commands
The harness is this branch's `igneum-pow` at 14c550e3 (the CLI binary pinned on both boxes as `/srv/builds/v6-census/bin/14c550e3/igneum-pow`, sha256 d601098699840534...; the uniform tool `v6census-uniform` beside it, 2a150ee714b06e79...), built on the box through `tools/build-remote.sh --box 3` and `--box 4` from `igneum-pow/` and from `tools/attack/v6-census/uniform/` (`build --release`). The scripts are in the tree under `tools/attack/v6-census/` (the census) and were copied to `/srv/builds/v6-census/` on each box with the launchers below.
One census job (the launcher `launch.sh <commit> <job>...`, jobs `ctrl-none a-none b-none c-none w16-none ctrl-era a-era b-era c-era w16-era`; the era jobs carry the candidate's own class, since a single allowed era width leaves the base class's mix as drawn):
```
nohup /srv/builds/_bin/lease pool 16 --min 4 --nice 19 --class measure \
--label "class v6 census: a-none (w64m8g+sh256x27, era widths 64, weights base) on 14c550e3" --owner class-v6-census -- \
env THREADS={cores} BIN=/srv/builds/v6-census/bin/14c550e3/igneum-pow OUT=/srv/builds/v6-census TAG=a-none \
CLASS=w64m8g+sh256x27 ERAS=none SEEDS=256 ERAW=64 /srv/builds/v6-census/v6census.sh > /srv/builds/v6-census/run-a-none.log 2>&1 &
# the re-weighted candidates add IGNEUM_FG_WEIGHTS=13,11,6,10,8,8,7,2,6,4; the era jobs add ERAS="0 1 2 3 4 5 6 7" SEEDS=32 IGNEUM_FG_BITTEST=1
```
Inside the script, one seed is one process (the harness flag on, the class's own cap of 256 attempts, the per-era form with the width pinned):
```
IGNEUM_FAMILY_GATE=1 igneum-pow accept --seed igneum-v6c/<i> --class w64m8g+sh256x27
IGNEUM_FAMILY_GATE=1 IGNEUM_FG_BITTEST=1 igneum-pow accept --seed igneum-v6c/<i> --class w64m8g+sh256x27 --era igneum-era-test/<e> --era-widths 64
```
The F8-form uniformity read (`uniform-launch.sh ctrl a b c w16`, no era, 16 seeds at 2^20 nonces):
```
nohup /srv/builds/_bin/lease pool 16 --min 4 --nice 19 --class measure --label "class v6 census: F8-form uniform a era none ..." --owner class-v6-census -- \
env IGNEUM_FAMILY_GATE=1 /srv/builds/v6-census/bin/14c550e3/v6census-uniform --class w64m8g+sh256x27 --seeds 16 --nonces 1048576 --threads {cores} --era none --era-widths 64 > uniform-a-none.tsv &
```
The verifier bench (`benchall.sh`, one leased core, three repeats of 20 warps per candidate, the control first and last):
```
nohup /srv/builds/_bin/lease pool 1 --min 1 --nice 19 --class measure --label "class v6 census: verifier bench per candidate, one core" --owner class-v6-census -- ./benchall.sh > bench.log 2>&1 &
# inside: IGNEUM_FAMILY_GATE=1 [IGNEUM_FG_WEIGHTS=...] igneum-pow bench --seed igneum-v6c/0 --class <class> --warps 20
```
Every job writes its lease pid to `/srv/builds/v6-census/pids/<job>.lease.pid` and the script its own to `pids/<job>.pid`; a job is stopped only through those files. The launchers (`launch.sh`, `uniform-launch.sh`, `benchall.sh`) and the summary script are in `tools/attack/v6-census/`. The summary over a TSV is `summ.py` (per era: seeds, accepted, exhausted, candidates, r, mean and max attempt, the worst index-bit sigma, the over-6-sigma count, the window-bit refusals, the rejections by part); the TSVs and logs stay under `/srv/builds/v6-census/` on the box that ran them, with copies under `docs/analysis/class-v6/logs/census/` on this branch.
## 8. Unverified and owed
- The drawn-era F8 hot-set census at 2^24 on the live dataset (ring C, 45 to 100 core-hours per point) was not run in this window; section 4 is the 2^20 no-era form plus section 3's per-era window-bit test.
- The verifier figures are from a loaded core with a 4 percent drift; the quiet-box reading is owed before a number is served.
- The (c''') floor at W = 4 and W = 16 refuses 1.2 to 3.4 percent of candidates against 0.1 percent at W = 1 on the same 2^20 sample with the window divided by the width; the family-gate lane's per-width calibration (its 09:00 item) decides whether 0.995 is the floor at every width or a sigma form replaces it. No seed was lost to it here.
- The re-weight's weights are this lane's reading of the k lane's table, not the k lane's optimiser (owed by that lane at 19:30 UK); a different split inside the band would need its own census, at about five box-minutes per candidate on 16 cores with this harness.
- The index-bit sigma on the accepted programs is read at the acceptance's 2^14 evaluations (sigma 64); the family-gate harness reads the same statistic at 2^20 and sees 8x the z. The counts here are therefore lower bounds on the share of programs carrying a biased site.
- The harness widens the class v4 rules to any width only under `IGNEUM_FAMILY_GATE`; the chain's generator and acceptance on `counter-asic-4` are unchanged by this branch, and the per-width `site_window` division in `distinct_ratio_pass` is the one unconditional edit (width 1 on every shipped class, so no shipped verdict moves).

View file

@ -0,0 +1,386 @@
# Class v6 floor lane 4: the honest denominator (8 October 2026)
Branch `class-v6-floor-denominator` from `counter-asic-4` (91117093). The question: every chip edge in the record is a
ratio over the honest tier's microjoules per hash, and the honest tier's own operating point is half the resistance,
the half the project controls through Ember's tuning. This file finds how low the honest joule goes per card class
today with software alone, under class v5, and reads the chip edge against each row; models the LPDDR6 and
unified-memory tier five years out; and lands the Ember tiers statement as a table the app reads
(`app/igneum-app/tiers/class-v5-tiers.json`, its validator and test beside it). Every figure is labelled measured (with
its source) or estimated (with its method). Nothing here moves a consensus object or a served text. Times are UK (BST).
## 0. One page
1. **The honest floor under class v5, measured today:** the RTX 5080 at an 1,100 MHz core lock reads 2.06 microjoules
per hash on class v4's shape (71.20 MH/s at 146.6 W) and about 2.10 under class v5; the RTX 5090 at its 1,300 MHz
knee 2.37 (134.76 MH/s at 318.8 W, the v5lock job's +2.0 percent over class v4 applied); the RTX 4070 at its tune
point 3.51 to 3.58; the RX 9070 XT at the ADLX grid's best point 7.9 to 8.1; the Apple M5 Max 1.40 to 1.43 at the
GPU-plus-DRAM meter with no lever. The class v5 STOCK column is now measured on 14 card classes (the rented sweep,
13:4x to 14:0x UK, every host refusing the lock): the 5080 3.48, the 4070 5.82, the 4080 4.92, the 5060 3.76, the
5060 Ti 4.02, the 3090 5.03, the 3060 6.40, the L40S 5.29, the H100 2.58, the A100 2.99, the 4090 5.0 (lane 1), so
the lock is worth 34 to 41 percent of a Blackwell or Ada card's class v5 draw (the 5080 3.48 to 2.10, the 4070 5.82
to 3.58) for under 2 percent of rate, and the stock column is a different card from the floor column. The 5080
beats the 5090 per joule at the knee, and the 16 GB and 12 GB Blackwell cards (5070 Ti, 5070) read lower still by
the Blackwell shape (1.7 to 2.1, estimated): **the honest NVIDIA floor is the mass-market Blackwell card at its
knee, not the 5090.**
2. **The chip edge against the honest floor, class v5, the chip's shadow core priced in absolute terms** (3.2 pJ per
forced op, the record's k = 0.5 at the 5090's knee; and 6.4 pJ, k = 1): the GDDR7 stored-dataset board reads 2.7x /
1.9x against the 5080's floor, 3.0x / 2.1x against the 5090's, 1.8x / 1.3x against the M5 Max; one HBM3 stack 3.3x /
2.2x, 3.6x / 2.4x, 2.2x / 1.5x; the N2 SRAM die 4.5x / 2.7x, 5.0x / 3.0x, 3.1x / 1.8x. The served 2.1x (the 5090 at
the knee, k = 1) stands; the honest sentence per joule is now "under 2x against a 16 GB Blackwell card at its knee
for a core as good as a GPU lane, 1.3x against an Apple laptop".
3. **What moves the floor is the operating point and nothing else in software.** The SM-sparse kernel is dead on
measured rows (the draw follows the work, not the SM count; research file 20.3b; floor lane 1's rows of 13:25 on a
rented 4090 and H100 say the same at stock: the best occupancy shape saves 1 to 2 percent of the watts and the draw
over idle is flat across the SM count while the rate holds, so the residual is the clock domain, reachable by the
lock and the undervolt only); the cache-policy hint is dead; the
memory clock is never touched (a step that drags it down cannot win); the power cap is flat on Blackwell at the hash
(0.41 MH/W under every limit on the 5090) and is the only lever on Ampere; the core lock walks the driver's V/F
curve and is the lever on Blackwell and Ada; AMD has the ADLX offsets (measured today: 24 percent of the 9070 XT's
draw for no rate); Apple and Intel have no lever in the app.
4. **Five years out the honest tier is the unified-memory SoC on LPDDR6**, modelled at about 1.2 microjoules per hash
under class v5 at the meter for an Apple Max-class part (0.27 of DRAM reads, 0.35 of GPU issue, 0.56 of shadow), 1.6
to 1.7 at the package; the AMD, Qualcomm, MediaTek and NVIDIA LPDDR SoCs model 3 to 10 microjoules because their
GPUs hide the latency worse, not because of the memory. Against that tier the GDDR7 chip reads 1.5x / 1.06x, one
HBM3 stack 1.8x / 1.2x, the N2 SRAM die 2.5x / 1.5x, the custom HBM4E base die 2.4x / 1.4x. The class should size the
shadow per tier with the Apple tier as the binding ceiling (it already does by the 2.0 rule: N at or under 130,000
ops) and state resistance against the best honest joule; it should NOT score the acceptance floor per tier (one
network-wide number, the same for every honest card). Pricing the Apple-bound shadow for the 5090 tier: N = 130,000
instead of 100,000 costs the 5090 +0.19 microjoules at the knee (+8 percent of its electricity) and moves its GDDR7
edge at k = 1 from 2.1x to 1.95x.
5. **The tiers for Ember** (`app/igneum-app/tiers/class-v5-tiers.json`): per card class the Efficiency, Balanced and Max
rows in the app's own tier shape, measured on the 5090, 5080, 4070, 9070 XT and M5 Max, estimated from the measured
stock rows and the architecture's shape elsewhere (Blackwell: lock 1,100 to 1,300 MHz, power 100 percent; Ada: lock
1,860 to 2,400 and 50 to 80 percent; Ampere: 80 to 90 percent and no lock below 1,800 MHz; AMD: -500 MHz and -30
percent; Apple and Intel: stock). The re-measure rule: a set measured under one class never applies under another
(the app's `tiers_stale`); the stored point is the provisional start of the re-measure, the Max tier is stock and never
stale; the measured v4 to v5 flip on the 5090 moved the knee by nothing (0.0 percent of rate, +2.0 percent of watts).
## 1. The method and the denominators
| Quantity | Value | Label | Source |
|---|---|---|---|
| Class v5 | `mx8-era<seed>+sh256x27+state`: class v4's shape (64-instruction base, a 256-instruction shadow block x27, 102,100 counted ops per hash) plus the state leaves; the worker uploads the leaves for the dataset build and frees them | measured (the kit's RESULT line on a rented 4090 and 23 other cards: every v5 fingerprint MATCH) | `~/igneum-fleet/cv5-results.txt`; `~/igneum-fleet/cardbench/rows.jsonl` 8 October |
| Class v5 over class v4 at the same point | 0.0 percent of rate, +2.0 percent of watts (the 5090 at the 1,300 MHz lock: 125.93 MH/s at 299.8 W against 125.92 at 294.0) | measured | the hash lane's v5lock job, 8 October; `scratch v4/ca4-v6-cost-rows.md` |
| The 5090 at class v4, the core-clock grid | unlocked 136.84 MH/s at 475.5 W; 1,300 MHz 134.76 at 312.5 (the knee, rate -1.5 percent); 1,200 MHz 133.80 at 305.1 (the best MH per watt, -2.2 percent); 1,100 MHz 122.43 at 287.3 (-10.5 percent); the class v4 premium 145.3 W unlocked, 81.8 W at the best points | measured, PC 1, 7 to 8 October | `docs/bench-log.md`, the class v4 efficiency passes |
| The 5080 at class v4, the core-clock grid | unlocked 71.41 at 253.1 W; 1,100 MHz 71.20 at 146.6 (the best MH per watt, -0.3 percent); 1,000 MHz 71.19 at 149.0; 900 MHz 67.66 at 137.8 (-5.2 percent); the draw floors from 1,500 MHz down; the premium 83.4 W unlocked and 41 W at the best points | measured, PC 1, 8 October 00:45 to 01:54 UTC | the same |
| The 4070 at its Ember tune (1,860 MHz lock, the 50 percent cap) | class v3 30.95 MH/s at 79.5 W (2.57); class v4 31.08 at 109.0 (3.51): +30 W for no rate; stock class v3 28.7 at 102.7 (3.58) | measured, PC 1, 6 October | `docs/plans/counter-asic-3-status.md` item 8; Ember run 6 |
| The 9070 XT on the ADLX grid | 24 rows, the rate flat at 18.9 MH/s, the best point -500 MHz core and -30 percent power = 149.3 W (7.9), 24 percent under the 202 W stock point (10.7) | measured, PC 1, 8 October 12:13 | the hash lane's AMD grid job |
| The M5 Max | class v3 27.08 MH/s at 21.0 W (0.78), class v4 26.67 at 37.3 W (1.40) at the GPU and DRAM channels of the IOReport meter; the package about 17 W more; marginal 6.9 pJ per counted op | measured, 6 October | `docs/analysis/latency-shadow-2026-10-06.md` section 3 |
| The rented stock rows (class v3 and the class v4 shape, 24 card classes) | `rows.jsonl`, 7 and 8 October: three timed runs, an nvidia-smi sampler at 1 Hz, the three power fields; no host allowed `-lgc` ("The current user does not have permission to change clocks") so no rented row carries a knee | measured (stock only) | `~/igneum-fleet/cardbench/rows.jsonl`; `bench-table.md` |
| The rented against the PC spread | the 5080 read 143.4 W at 71.16 MH/s on a rented Linux host and 169.7 W at 71.28 on PC 1 (Windows) on class v3: 18 percent apart at the same rate; the 5090 the same shape (258 W rented at 0.3.12 against 312 W on the PC) | measured; neither corrected | `site/miner-bench.json` notes |
| The chips at zero shadow | GDDR7 board 0.466 microjoules per hash; one HBM3 stack 0.321; the N2 SRAM die 0.14 | modelled | chip-model-v3 5.4 and 5.12; `class-v6/hardware-future.md` section 5 |
| The chip's shadow under class v5 | 101,170 forced ops per hash (102,100 minus the 930 base) at 3.2 pJ (k = 0.5 against the 5090's measured 6.4 pJ per op at the knee: the record's centre band) = 0.324 microjoules; at 6.4 pJ (k = 1) = 0.648 | modelled on the measured GPU rows | research file 15.1a, 20.4 |
| The chips under class v5 | GDDR7 0.79 / 1.11; HBM3 0.65 / 0.97; N2 SRAM 0.46 / 0.79 (k = 0.5 / k = 1) | modelled | this file |
Reading the identity. The chip's energy is `E_mem + c x N` with `c` the chip core's picojoules per forced op and `N`
the op count, a number that does not depend on which card is the reference; so the chip's microjoules per hash are
fixed by the class (0.79 to 1.11 on GDDR7 under class v5) and every row's edge is just that card's microjoules over
them. The record's `k` columns are this `c` divided by the reference card's own picojoules per op: k = 1 at the 5090's
knee is 6.4 pJ, k = 1 at the unlocked 5090 would be 10.8 pJ, k = 1 on the M5 Max 6.9 pJ. Stating the chip in absolute
picojoules keeps the comparison honest across cards.
What "every software knob" is, per vendor. NVIDIA through nvidia-smi: `-pl` (the power cap, percent of the default
limit, floor 50 percent, min 400 W on a 5090), `-lgc 0,<MHz>` (a core-clock cap that walks the driver's V/F curve;
administrator rights, so only through the Power Helper on Windows and never on a rented Linux host), `-lmc` (the
memory clock, never touched: a step whose memory clock falls under 95 percent of baseline is marked and cannot win);
no voltage offset (that is NVAPI's). AMD through the ADLX line in igneum-gpu-telemetry: `--set-gmax` (a core offset)
and `--set-plimit` (a power offset), no memory knob on RDNA 4, no elevation. Apple: measure only. Intel: measure only.
The kernel-side knobs the record closed: the SM-sparse variant (dead: the energy per hash never falls below base on
either class, 20.3b), `ld.global.cs` (dead: equals base within 1 W, 20.3c), the block shape (64 to 256 instructions,
fixed by the class), the occupancy (one warp per block, 24 blocks per SM, fixed by the worker's race).
## 2. The table: every card class under class v5, the lowest microjoules per hash with the knobs, and the chip edge
"Floor" is the lowest class v5 energy per hash the card reaches with the knobs available to it today; "stock" is the
card unlocked at 100 percent under class v5 (the sweep's measured rows, 13:4x to 14:0x UK, say "stock, lock owed" in
the table: no rented host allowed the lock). A measured row cites its job; an estimated row names its method and its
band. The chip columns divide the row's floor by the chip's class v5 energy at three core figures: 1.1 pJ per forced op
(the k lane's synthesised sequencer-core floor at N3, the pessimistic column), 3.2 pJ (the record's k = 0.5) and 6.4
pJ (k = 1, a core as good as a GPU lane); `E_mem` 0.466, 0.321 and 0.14 microjoules. The Apple rows are at the GPU-plus-DRAM meter (the package adds about 17 W on the M5
Max; the wall more); the NVIDIA and AMD rows are whole-card.
| Card | Tier | Class v5 floor, microjoules per hash | Label | Class v5 stock, microjoules per hash (label) | GDDR7 board at 1.1 / 3.2 / 6.4 pJ per forced op | HBM3 one stack | N2 SRAM die | The point, the band and the source |
|---|---|---|---|---|---|---|---|---|
| NVIDIA GeForce RTX 5090 | 32 GB | 2.33 | measured | 3.48 (measured) | 4.0x / 3.0x / 2.1x | 5.4x / 3.6x / 2.4x | 9.3x / 5.0x / 3.0x | 1200 MHz at 100 percent. class v4 best MH per watt (133.80 MH/s at 305.1 W, 2.2 percent of rate given); under class v5 +2.0 percent watts: 311.2 W, 2.33 Stock: the power cap is flat on this hash (0.41 MH/W under every limit), so no power rung is used on any tier |
| NVIDIA GeForce RTX 5080 | 16 GB | 2.06 | measured | 3.48 (measured) | 3.6x / 2.6x / 1.9x | 4.8x / 3.2x / 2.1x | 8.2x / 4.4x / 2.6x | 1100 MHz at 100 percent. class v4 best MH per watt; the draw floors from 1,500 MHz down; the knee is between 1,000 and 900 MHz (900 costs 5.2 percent); class v5 about 2.10 Stock: class v5 measured on a Vast 5080 (13:49 UK): 71.35 MH/s at 248.0 W (3.48, 39 samples, SM 2,769, memory 14,801); class v3 71.16 at 159.4 W on the same host; PC 1 read class v4 71.41 at 253.1 W: the three agree within 3 percent on this card; stock, lock owed on the rented host |
| NVIDIA GeForce RTX 5070 Ti | 16 GB | 1.7 | estimated | 2.84 (measured) | 2.9x / 2.2x / 1.5x | 3.9x / 2.6x / 1.8x | 6.8x / 3.7x / 2.2x | 1100 MHz at 100 percent. the Blackwell shape applied to the measured stock rows (the v3 draw x0.63, the premium x0.5): band 1.6 to 2.0; the rented host refused -lgc, so the knee is the search's to find Stock: rented pod 8 October 10:09Z: class v3 78.69 MH/s at 140.8 W, class v4 78.78 at 224.0 W; the class v5 sweep rented this card twice (14:08 and 14:13 UK) and neither host ever accepted the fleet key |
| NVIDIA GeForce RTX 5070 | 12 GB | 1.75 | estimated | 2.99 (measured) | 3.0x / 2.2x / 1.6x | 4.0x / 2.7x / 1.8x | 7.0x / 3.8x / 2.2x | 1100 MHz at 100 percent. the Blackwell shape on the measured stock rows (paired class v3 113 W): band 1.7 to 2.1 Stock: rented v4watts pod 8 October; the 7 October pod read class v3 52.0 MH/s at 102.8 W (the rate differs by host); the class v5 sweep rented this card twice (14:08 and 14:13 UK) and neither host ever accepted the fleet key |
| NVIDIA GeForce RTX 5060 Ti | 16 GB | 2.36 | estimated | 4.02 (measured) | 4.1x / 3.0x / 2.1x | 5.5x / 3.7x / 2.4x | 9.4x / 5.1x / 3.0x | 1100 MHz at 100 percent. the Blackwell shape on the PC 2 stock row: band 2.2 to 2.6; re-based on the measured class v5 stock row of 13:5x UK (the architecture's shape on the measured v3 draw and the measured premium) Stock: class v5 measured on a Vast 5060 Ti (13:5x UK): 30.84 MH/s at 123.9 W (4.02, 96 samples, SM 2,835); class v3 30.75 at 82.6 W on the same host; PC 2's enclosure row read class v4 30.9 at 114.8 W; stock, lock owed |
| NVIDIA GeForce RTX 5060 | 8 GB | 2.21 | estimated | 3.76 (measured) | 3.8x / 2.8x / 2.0x | 5.1x / 3.4x / 2.3x | 8.8x / 4.8x / 2.8x | 1100 MHz at 100 percent. class v3 measured 31.27 MH/s at 75.4 W; re-based on the measured class v5 stock row of 13:5x UK (the architecture's shape on the measured v3 draw and the measured premium) Stock: class v5 measured (13:51 UK): 30.80 MH/s at 115.7 W (3.76, 99 samples, SM 2,715, memory 13,801); class v3 30.76 at 78.8 W on the same host (the shadow +37 W = 12 pJ per op); stock, lock owed |
| NVIDIA GeForce RTX 4090 | 24 GB | 3.58 | estimated | 5.0 (measured) | 6.2x / 4.5x / 3.2x | 8.3x / 5.6x / 3.7x | 14.2x / 7.7x / 4.5x | 1860 MHz at 60 percent. the Ada shape (the 4070's measured tune: v3 x0.72, the premium x0.7) on the measured stock rows (class v3 253.4 W, class v4 353.5 W, floor lane 1, 8 October): band 3.3 to 4.0; re-based on the measured class v5 stock row of 13:5x UK (the architecture's shape on the measured v3 draw and the measured premium) Stock: floor lane 1's rented 4090 at a 450 W limit: class v3 70.63 MH/s at 253.4 W (3.59), class v4 70.63 at 353.5 W (5.0); the denominator sweep's Vast 4090 carried a 250 W host limit: class v5 62.68 at 249.9 W (3.99, the SM at 2,579 MHz) and class v3 62.40 at 200.5 W, so a 250 W cap held 89 percent of the rate at 71 percent of the draw (an Ada cap row measured); stock, lock owed |
| NVIDIA GeForce RTX 4080 | 16 GB | 3.51 | estimated | 4.92 (measured) | 6.1x / 4.4x / 3.2x | 8.1x / 5.4x / 3.6x | 14.0x / 7.6x / 4.5x | 1860 MHz at 60 percent. the Ada shape on the measured stock rows (class v3 128.6 W, class v4 185.6 W): band 3.1 to 3.7; re-based on the measured class v5 stock row of 13:5x UK (the architecture's shape on the measured v3 draw and the measured premium) Stock: class v5 measured (13:50 UK): 40.80 MH/s at 200.7 W (4.92, 72 samples, SM 2,760); class v3 40.69 at 141.5 W on the same host; the v4watts pod read class v4 40.74 at 185.6 W; stock, lock owed |
| NVIDIA GeForce RTX 4070 | 12 GB | 3.58 | measured | 5.82 (measured) | 6.2x / 4.5x / 3.2x | 8.3x / 5.6x / 3.7x | 14.2x / 7.7x / 4.5x | 1860 MHz at 50 percent. Ember run 6's tune point (1,863 MHz at 50 percent) under class v4 (sh256x27): 31.08 MH/s at 109.0 W, +30 W over class v3 at the same point for no rate; class v5 about 3.58; the ladder below 1,860 under class v4 is owed (band 3.2 to 3.6) Stock: class v5 measured on a Vast 4070 (13:54 UK): 28.43 MH/s at 165.5 W (5.82, 108 samples, SM 2,820, memory 9,801, a 210 W host limit not binding); class v3 28.40 at 116.3 W on the same host (the shadow +49 W = 17 pJ per op at the stock clock); Ember run 6's PC 1 stock on class v3 read 28.72 at 106.0 W; the tune point (1,860 MHz, 50 percent) under class v4 measured 31.08 at 109.0 W (3.51), so the lock takes 34 percent of this card's class v5 draw for no rate |
| NVIDIA GeForce RTX 4070 Ti | 12 GB | 3.6 | estimated | 4.97 (measured) | 6.2x / 4.6x / 3.2x | 8.3x / 5.6x / 3.7x | 14.3x / 7.8x / 4.6x | 1860 MHz at 60 percent. the Ada shape on the measured stock rows (class v3 95.4 W, class v4 155.3 W); the 4070 Super at a 110 W host cap held 31.26 MH/s at 108.4 W under class v4 (3.47): a cap row measured on a sibling Stock: rented pods 8 October |
| NVIDIA GeForce RTX 4060 Ti | 16 GB | 3.81 | estimated | 5.32 (measured) | 6.6x / 4.8x / 3.4x | 8.8x / 5.9x / 3.9x | 15.2x / 8.2x / 4.8x | 1860 MHz at 60 percent. the Ada shape (the 4070's measured tune: v3 x0.72, the premium x0.7) on the measured class v5 stock row; band 3.5 to 4.2 Stock: class v5 measured on a Vast 4060 Ti (14:27 UK): 18.75 MH/s at 99.8 W (5.32) under a 140 W host limit; class v3 18.74 at 79.1 W on the same host (the shadow +21 W = 11 pJ per op; this host read 7 percent under the 7 October pod's 20.10 MH/s); the v4watts pod read class v4 20.10 at 102.3 W (5.09); stock, lock owed |
| NVIDIA GeForce RTX 4060 | 8 GB | 3.77 | estimated | 4.98 (estimated) | 6.5x / 4.8x / 3.4x | 8.7x / 5.8x / 3.9x | 15.0x / 8.1x / 4.8x | 1860 MHz at 60 percent. 19.09 MH/s measured on three rented hosts, the watts unread on every one (no power sensor): the watts are the 4060 Ti's shape; band 3.7 to 4.2 Stock: watts OWED: every rented 4060 host exposed no power sensor |
| NVIDIA GeForce RTX 3090 | 24 GB | 4.51 | estimated | 5.03 (measured) | 7.8x / 5.7x / 4.1x | 10.4x / 7.0x / 4.7x | 17.9x / 9.7x / 5.7x | 1800 MHz at 80 percent. the Ampere cap lever (10 to 15 percent of the draw; a cap that takes the SM under 1,800 MHz costs rate) on the measured class v5 stock row; the 3090 Ti read class v3 61.95 MH/s at 249.5 W (4.03) Stock: the denominator sweep, RunPod, 8 October 13:25 UK: class v3 60.01 MH/s at 294.6 W (4.91), class v5 61.49 at 309.4 W (5.03, 46 samples, SM 1,673 MHz, memory 9,501); the class v5 premium on this card 5 percent at stock; stock, lock owed (the host refused -lgc and -lmc) |
| NVIDIA GeForce RTX 3080 | 10 GB | 4.2 | estimated | 4.54 (estimated) | 7.3x / 5.3x / 3.8x | 9.7x / 6.5x / 4.3x | 16.7x / 9.1x / 5.3x | 1800 MHz at 80 percent. the Ampere cap lever (10 percent, no lower: a 170 W cap took 34 percent of the class v5 rate on this card, a 180 W cap 11 percent) Stock: the sweep's two 3080 hosts both carried a limit under the class v5 draw: at 170 W class v3 50.71 MH/s at 169.2 W (3.34) held the rate and class v5 fell to 33.37 MH/s at 169.9 W (5.09) with the SM at 689 MHz; at 180 W class v3 49.83 at 177.8 W and class v5 44.31; the uncapped class v5 stock by the 3080 Ti's +30 percent: about 230 W (4.54); the Ampere cap under the shadow costs rate one for one: measured twice |
| NVIDIA GeForce RTX 3070 | 8 GB | 4.8 | estimated | 5.29 (measured) | 8.3x / 6.1x / 4.3x | 11.1x / 7.4x / 5.0x | 19.1x / 10.4x / 6.1x | 1800 MHz at 80 percent. the Ampere cap lever on the measured stock rows (class v3 142.3 W, class v4 196.4 W); the 3070 Ti 38.98 MH/s at 177.1 / 267.6 W Stock: rented pods 8 October; the class v5 sweep's two 3070 hosts closed the connection mid-bench |
| NVIDIA GeForce RTX 3060 | 12 GB | 5.77 | estimated | 6.4 (measured) | 10.0x / 7.3x / 5.2x | 13.3x / 8.9x / 6.0x | 23.0x / 12.4x / 7.3x | 1800 MHz at 80 percent. the Ampere cap lever (10 percent) on the measured class v4 stock row; the 3060 Ti at a 130 W host cap held 33.06 MH/s at 128.7 W under class v4 (3.89): a cap row measured on a sibling Stock: class v5 measured on a Vast 3060 (13:53 UK): 26.53 MH/s at 169.8 W (6.40) at the host's 170 W limit (the limit binding: the class v4 pod read 26.89 at 166.1 W, 6.18); class v3 26.53 at 120.4 W on the same host; stock, lock owed |
| AMD Radeon RX 9070 XT | 16 GB | 7.9 | measured | 10.7 (measured) | 13.7x / 10.0x / 7.1x | 18.3x / 12.3x / 8.2x | 31.4x / 17.0x / 10.0x | ADLX -500 MHz, -30 percent. the ADLX grid (24 rows, PC 1): the rate flat at 18.9 MH/s across the grid, the best point -500 MHz core and -30 percent power, 24 percent under stock; class v5 about 8.1 Stock: the app's own power reading at the stock point, 8 October 07:11 UK |
| AMD Radeon RX 7900 XTX | 24 GB | 8.0 | estimated | 10.7 (estimated) | 13.9x / 10.1x / 7.2x | 18.5x / 12.4x / 8.3x | 31.8x / 17.3x / 10.2x | ADLX -500 MHz, -30 percent. not rentable, not owned: the 9070 XT's dependent-read rate per channel (150 M per second per 32-bit channel) on 24 channels; the knob by the 9070 XT grid Stock: modelled |
| AMD Radeon RX 7800 XT | 16 GB | 9.5 | estimated | 12.8 (estimated) | 16.5x / 12.0x / 8.5x | 22.0x / 14.7x / 9.8x | 37.8x / 20.5x / 12.1x | ADLX -500 MHz, -30 percent. 16 channels of GDDR6 at the 9070 XT's per-channel rate; the knob by the 9070 XT grid Stock: modelled |
| AMD Radeon RX 7600 XT | 16 GB | 13.0 | estimated | 17.8 (estimated) | 22.5x / 16.5x / 11.7x | 30.1x / 20.2x / 13.4x | 51.7x / 28.0x / 16.5x | ADLX -500 MHz, -30 percent. 8 channels; the card-in queue holds one for a PC measurement Stock: modelled |
| AMD Radeon RX 9060 XT | 16 GB | 10.0 | estimated | 13.7 (estimated) | 17.3x / 12.7x / 9.0x | 23.1x / 15.5x / 10.3x | 39.8x / 21.6x / 12.7x | ADLX -500 MHz, -30 percent. 8 channels of GDDR6 on RDNA 4; the card-in queue holds one Stock: modelled |
| NVIDIA H100 80GB HBM3 | DC | 2.0 | estimated | 2.58 (measured) | 3.5x / 2.5x / 1.8x | 4.6x / 3.1x / 2.1x | 8.0x / 4.3x / 2.5x | 1400 MHz at 80 percent. the premium 240 to 280 W at stock says half of it is the clock; a lock on an owned host (Hopper at 1,980 MHz boost, HBM3-bound): about 500 W (2.0); band 1.9 to 2.4; rented hosts refuse -lgc Stock: the denominator sweep, RunPod, 13:25 UK: class v3 252.96 MH/s at 382.4 W (1.51), class v5 241.34 at 621.6 W (2.58, 7 samples, the SM throttled to 1,590 MHz under the 700 W cap); the 7 and 8 October pods read class v4 250.6 at 695.1 W (2.77); -lmc answered 'use --lock-memory-clocks-deferred' and the memory clock stayed 2,619; stock, lock owed |
| NVIDIA L40S | DC | 3.78 | estimated | 5.29 (measured) | 6.5x / 4.8x / 3.4x | 8.7x / 5.9x / 3.9x | 15.0x / 8.2x / 4.8x | 1860 MHz at 60 percent. the Ada shape on the measured stock rows (class v3 220.7 W, class v4 277.6 W); re-based on the measured class v5 stock row of 13:5x UK (the architecture's shape on the measured v3 draw and the measured premium) Stock: class v5 measured (13:49 UK): 56.49 MH/s at 298.7 W (5.29, 46 samples, SM 2,520); class v3 56.35 at 221.5 W on the same host; the v4watts pod read class v4 56.4 at 277.6 W; stock, lock owed |
| NVIDIA A100-SXM4-80GB | DC | 2.89 | estimated | 2.99 (measured) | 5.0x / 3.7x / 2.6x | 6.7x / 4.5x / 3.0x | 11.5x / 6.2x / 3.7x | 1200 MHz at 80 percent. the card already runs at 1,410 MHz and the 400 W host limit binds under class v5 (SM clock gives); a cap under it costs rate on Ampere, so the floor is within 5 percent of the measured stock row Stock: the denominator sweep, RunPod, 13:24 UK: class v3 138.06 MH/s at 294.9 W (2.14), class v5 133.11 at 398.1 W (2.99, 19 samples, at the host's 400 W limit, memory 1,593 MHz); the v4watts pod on a 500 W host read class v4 138.0 at 489.3 W (3.54); -lmc 'not supported' on this card; stock, lock owed |
| Intel Arc B580 | 12 GB | 10.4 | estimated | 10.4 (estimated) | 18.0x / 13.2x / 9.3x | 24.1x / 16.1x / 10.7x | 41.4x / 22.4x / 13.2x | stock, no lever. 10.6 to 11 MH/s measured on PC 2 (the enclosure), the watts unread; about 110 W by the board's class (OWED); no clock lever in the app for Intel |
| Intel Arc A750 | 8 GB | 18.8 | estimated | 18.8 (estimated) | 32.6x / 23.8x / 16.9x | 43.5x / 29.2x / 19.4x | 74.8x / 40.5x / 23.9x | stock, no lever. unmeasured; modelled from the B580 and the Alchemist board |
| Apple M5 Max | Apple | 1.4 | measured | 1.4 (measured) | 2.4x / 1.8x / 1.3x | 3.2x / 2.2x / 1.4x | 5.6x / 3.0x / 1.8x | stock, no lever. the GPU and DRAM channels of the IOReport meter (not the wall): class v3 27.08 MH/s at 21.0 W (0.78), class v4 26.67 at 37.3 W (1.40), class v5 about 1.43; the package about 17 W more; no lever (no clock cap on Apple silicon) |
| Apple M4 Max | Apple | 1.55 | estimated | 1.55 (estimated) | 2.7x / 2.0x / 1.4x | 3.6x / 2.4x / 1.6x | 6.2x / 3.3x / 2.0x | stock, no lever. the same 512-bit LPDDR5X (8,533 against 9,600 MT/s) and a 40-core GPU on N3E: about 26 MH/s; class v3 about 0.85 at the meter, class v5 about 1.55 (the M5 Max's rows scaled); a devnet row from an unnamed Apple laptop read 24.3 MH/s on class v4 |
| Apple M4 Pro | Apple | 1.65 | estimated | 1.65 (estimated) | 2.9x / 2.1x / 1.5x | 3.8x / 2.6x / 1.7x | 6.6x / 3.6x / 2.1x | stock, no lever. 256-bit LPDDR5X and a 20-core GPU: about 13.5 MH/s; the shadow's per-hash premium does not shrink with the part, so class v5 reads about 1.65 at the meter |
| Apple M3 Max | Apple | 1.75 | estimated | 1.75 (estimated) | 3.0x / 2.2x / 1.6x | 4.0x / 2.7x / 1.8x | 7.0x / 3.8x / 2.2x | stock, no lever. 512-bit LPDDR5-6400 and a 40-core GPU on N3B: about 24 MH/s; class v5 about 1.75 at the meter |
To fold any other chip core figure (the research lane's convention, 13:5x): the edge on a row is the card's class v5
microjoules over `E_mem + 101,170 x c`, with `E_mem` 0.466 (GDDR7 board), 0.321 (one HBM3 stack), 0.14 (the N2 SRAM
die), 0.18 (the custom HBM4E base die) and `c` the core's picojoules per forced op; at the k lane's synthesised
sequencer-core floor of 1.1 pJ per op at N3 (its per-unit figure before fetch, decode and the register file, due 15:00)
the chip's class v5 energy reads GDDR7 0.577, HBM3 0.432, SRAM 0.251, so the 5080's floor of 2.10 gives 3.6x, 4.9x and
8.4x and the M5 Max's 1.43 gives 2.5x, 3.3x and 5.7x; that figure is a floor on the core and the row at it is the
pessimistic column.
What the table says:
1. The honest floor per tier, measured: 32 GB 2.33 to 2.37 (the 5090 at its knee); 16 GB 2.06 to 2.10 (the 5080 at
1,100 MHz); 12 GB 3.51 to 3.58 (the 4070 at its tune); 16 GB AMD 7.9 to 8.1 (the 9070 XT on the grid); Apple 1.40
to 1.43 (the M5 Max, no lever). The 16 GB NVIDIA tier is cheaper per hash than the 32 GB tier at the knee, and the
estimated 5070 Ti and 5070 rows (1.7 to 2.1) say the 12 and 16 GB Blackwell cards are the honest NVIDIA floor: the
5090's 170 SMs carry the shadow at the same picojoules per op as the 5080's 84 but its memory system draws more
per read (16 GDDR7 devices against 8).
2. The chip edge against the honest floor at k = 1 (a core as good as a GPU lane): GDDR7 1.9x to 2.1x on Blackwell at
the knee, 1.3x on the M5 Max; one HBM3 stack 2.2x to 2.4x and 1.5x; the N2 SRAM die 2.7x to 3.0x and 1.8x. At the
record's centre (k = 0.5): 2.7x to 3.0x, 1.8x; 3.3x to 3.6x, 2.2x; 4.5x to 5.0x, 3.1x. The served 2.1x stands as the
5090 figure; the public sentence can carry the lower honest row.
3. The lock recovers half the shadow's premium on Blackwell (the 5090: 145 W to 82 W; the 5080: 83 W to 41 W) and a
third of the class v3 draw (330 to 223 W; 170 to 104 W); on Ada the 4070's tune took 30 W of 106 on class v3 and the
premium reads 30 W at the tune point; on Ampere the cap is the only lever and it costs rate past 1,800 MHz; on AMD
the ADLX offsets take 24 percent of the draw for no rate; on Apple nothing moves.
4. Every Ada and Ampere consumer row is estimated at its knee because no rented host allows `-lgc` and no founder
machine holds one but the 4070 (whose full class v4 ladder is owed to a PC 1 job). The rented stock rows are
measured and stand; the estimated knees carry bands of about plus or minus 10 percent and the rented-against-PC
watts spread of 15 to 20 percent on top.
## 3. What moves the floor, per architecture (the knob set the measured rows support)
| Architecture | The lever | What it does, measured | The tier points (Efficiency / Balanced / Max) | Known-failed |
|---|---|---|---|---|
| Blackwell (5090, 5080; 5070 Ti, 5070, 5060 Ti, 5060 by shape) | the core lock; the power cap is flat on this hash | the rate holds within 1.5 percent to 1,300 MHz on the 5090 and within 0.3 percent to 1,000 on the 5080; the draw falls a third on class v3 and the shadow's premium halves | 1,200 / 1,300 / unlocked on the 5090; 1,100 / 1,100 / unlocked on the 5080; 1,100 / 1,300 / unlocked as the prior on the others | the 5090 at 1,100 (-10.5 percent on class v4), the 5080 at 900 (-5.2 percent); the Power Helper's skip-rule fault (0.3.20) needs the padding lines |
| Ada (4090, 4080, 4070 Ti, 4070, 4060 Ti, 4060, L40S) | the core lock with a cap | the 4070's tune: 1,860 MHz and the 50 percent cap hold 30.95 MH/s at 79.5 W on class v3 (28.7 at 102.7 stock); a cap holds the rate until the SM clock falls under about 2,400 MHz (the search prior); the 4090's class v4 premium at stock is 100 W (lane 1), under the 5090's 145 for 40 percent fewer counted ops per second | 1,860 at 50 to 60 percent / 2,400 at 80 percent / unlocked | the 4070 Ti Super at a 210 W host limit with the SM at 2,400 lost 10 percent on class v4 (36.95 against 41.24 MH/s): a cap that binds under the shadow costs rate on Ada too |
| Ampere (3090, 3080, 3070, 3060, A4000 to A6000, A100) | the power cap only | a cap holds the rate until the SM falls under about 1,800 MHz; stock clocks sit at 1,900 to 2,000, so the lever is 10 to 15 percent of the draw; the 3060 Ti at a 130 W host cap held 33.06 MH/s at 128.7 W on class v4 | 80 percent with the lock at 1,800 as a ceiling / 90 percent / unlocked | the 3080 Ti at 63 percent with the SM at 749 MHz: 24 to 28 percent of rate lost |
| Hopper (H100) | the core lock on an owned host | unmeasured: rented hosts refuse `-lgc`; the premium 283 W at stock (11.2 pJ per op) says half of it is the clock | 1,400 at 80 percent / 1,600 at 90 percent / unlocked, all estimated | none measured |
| RDNA 4 (9070 XT; 9060 XT by shape) and RDNA 3 (7900 XTX, 7800 XT, 7600 XT by shape) | the ADLX core and power offsets (0.3.25); no memory knob; no elevation | the 9070 XT's grid: the rate flat at 18.9 MH/s across 24 rows, -500 MHz and -30 percent = 149.3 W against 202 | -500 MHz, -30 percent / -300 MHz, -15 percent / stock | Ember run 6 aborted on "card reports 0 W" (fixed bd7fcf4); the ADLX sampler window bug (fixed) |
| Apple (M5 Max measured; M4 Max, M4 Pro, M3 Max by shape) | none | no clock cap on Apple silicon; the GPU draws 11 W at the hash and 27 W with the shadow, the DRAM 10 W throughout | stock only (the max tier, source stock) | none |
| Intel (B580 measured for rate; A750 by shape) | none in the app | measure only; the watts unread on the B580 | stock only | a kit without the Intel rotate-fold rewrite fails its self-test on Arc (a build fault, not an Arc result) |
The one rule under the table: a step that drags the memory clock under 95 percent of baseline is marked and cannot
win, because on this hash the memory clock is the rate and the core clock is only the shadow's cost; the Ember 2
climb may raise the memory clock (5 percent of the range per probe) where the vendor exposes it, and no measured row
yet shows a gain from it (the 5090's memory sits at 13,801 of 14,001 MHz).
## 4. The LPDDR6 and unified-memory tier, five years out
The method. The M5 Max row is the only measured unified-memory point and it splits three ways at the meter: the DRAM
rail 10.2 W at 27.08 MH/s x 128 reads = 2.94 nJ per dependent read (LPDDR5X-9600, 512-bit, 32 channels of 16 bits);
the GPU 11.0 W at the hash = 0.41 microjoules per hash of issue and latency-hiding cost; the shadow +16 W = 0.62
microjoules (6.9 pJ per counted op). Each device below is modelled by scaling those three terms: reads per second by
the part's sub-channel count at the M5 Max's 108 M dependent reads per second per 16-bit channel (the rate is
activate-bound per bank, not pin-rate-bound, so 14.4 Gbps moves it little); DRAM energy per read by the generation
(LPDDR6 at JESD209-6's lower VDD and the 32-byte atom, which halves the over-fetch of a 4-byte read against LPDDR5X's
64-byte burst: 2.0 to 2.3 nJ per read at the meter against 2.94, approximate); the GPU term by the vendor's measured
latency-hiding (Apple 0.41 microjoules per hash; AMD's RDNA reads 2.4 G dependent reads per second at 199 W on the
9070 XT, so its GPU term is about 7 microjoules per hash; NVIDIA's Blackwell at a 128-bit board (the 5060) about 1.5
at the knee); the shadow term by the vendor's ALU picojoules per op (Apple 6.9 measured, NVIDIA 6.4 at the knee, AMD
about 3 W for the whole shadow on the 9070 XT, so near zero at the card's rate). Every row is modelled; none is a
measurement, and the first LPDDR6 part to be sold will replace its row.
| Device class (5 years out) | Memory | Modelled MH/s | DRAM / GPU / shadow, microjoules per hash | Class v5 at the meter, microjoules per hash | GDDR7 board edge k = 0.5 / 1 | HBM3 stack | N2 SRAM die | Custom HBM4E base die (0.18 + shadow) |
|---|---|---|---|---|---|---|---|---|
| Apple Max-class on LPDDR6 (an M7 or M8 Max, 2028 to 2030: 576-bit, 24 channels of 24 bits = 48 sub-channels, a 40 to 48-core GPU at N2) | LPDDR6-14400 | about 41 | 0.27 / 0.35 / 0.56 | **1.18** (the package about 1.6 to 1.7) | 1.5x / 1.06x | 1.8x / 1.2x | 2.5x / 1.5x | 2.4x / 1.4x |
| Apple Pro-class on LPDDR6 (384-bit, 32 sub-channels) | LPDDR6 | about 27 | 0.27 / 0.37 / 0.58 | 1.22 | 1.5x / 1.1x | 1.9x / 1.3x | 2.6x / 1.6x | 2.4x / 1.5x |
| Apple M5 Max today, for the comparison | LPDDR5X-9600 | 27 measured | 0.38 / 0.41 / 0.62 | 1.40 measured (v5 1.43) | 1.8x / 1.3x | 2.2x / 1.5x | 3.1x / 1.8x | 2.8x / 1.7x |
| AMD Strix Halo class and its LPDDR6 successor (256-bit LPDDR5X-8000 today, 40 CU RDNA 3.5; approximate) | LPDDR5X then LPDDR6 | about 12 (the GPU's latency hiding binds, not the memory: the 9070 XT's 64 CU read 2.4 G per second) | 0.35 / about 6 / about 0.2 | about 6.5 (band 5 to 9) | 8x / 6x | 10x / 7x | 14x / 8x | 13x / 8x |
| NVIDIA GB10 class (DGX Spark, N1X: 256-bit LPDDR5X-9400, a 48-SM Blackwell GPU; approximate) | LPDDR5X then LPDDR6 | about 13.5 | 0.33 / about 2.5 at a lock / 0.65 | about 3.5 (band 3 to 4.5) | 4.4x / 3.1x | 5.4x / 3.6x | 7.5x / 4.4x | 7x / 4.2x |
| Qualcomm X Elite class (128-bit LPDDR5X-8448, 8 channels; Adreno X1; no worker exists; approximate) | LPDDR5X then LPDDR6 | about 7 | 0.35 / about 2.5 / about 0.8 | about 3.7 (band 3 to 5) | 4.7x / 3.3x | 5.7x / 3.8x | 8x / 4.7x | 7.4x / 4.5x |
| MediaTek Dimensity class (64-bit LPDDR5X, 4 channels; a phone; approximate) | LPDDR5X then LPDDR6 | about 3.4 | 0.35 / about 2 / about 0.9 | about 3.3 | 4.2x / 3x | 5.1x / 3.4x | 7.1x / 4.2x | 6.6x / 4x |
| LPDDR6 controller chip, 32 channels (lane B's row: the chip built on the honest tier's own memory) | LPDDR6 | about 100 per chip | 0.25 to 0.30 at zero shadow; + 0.32 / 0.65 | 0.57 to 0.62 / 0.90 to 0.95 | against the Apple LPDDR6 row: 2.0x / 1.3x | | | |
What the rows say:
1. The honest tier five years out is Apple's unified-memory part on LPDDR6 at about 1.2 microjoules per hash under class
v5 at the meter, 15 percent under today's M5 Max; the gain is the DRAM term (0.38 to 0.27, the 32-byte atom and the
lower rail) and the GPU term at N2, not the pin rate. The other unified-memory vendors model 3 to 10 microjoules
because their GPUs hide a dependent read's latency worse (AMD's RDNA 8x worse than Apple's per read, measured on
the 9070 XT), and the memory does not rescue a GPU term that large. So "the unified-memory SoC tier" as the reference
joule means the Apple tier specifically, until a measurement on a Strix or GB10 part says otherwise.
2. Against the Apple LPDDR6 row every chip's edge is the lowest in the record: the GDDR7 board 1.5x at k = 0.5 and
1.06x at k = 1 (at parity with a laptop at a core as good as a GPU lane); the N2 SRAM die 2.5x / 1.5x; the custom
HBM4E base die 2.4x / 1.4x; the LPDDR6 controller chip 2.0x / 1.3x. The chips lane B priced at 13x to 17x against
the stock 5090 are 1.5x to 2.5x against the best honest joule with the shadow on.
3. The reference joule should be the best honest joule, stated as a rule, not a fifth layer: the layers change what a
chip can be built as; the denominator changes what the edge is called. The public text carries the edge over the
Apple tier (1.3x at k = 1 today on GDDR7, 1.8x on the SRAM die) and over the 16 GB Blackwell card at its knee (1.9x
and 2.7x), with the stock 5090 figure retired from the headline.
4. Per-tier scoring. (a) The shadow sizing (layer 1's program-length band): YES, and it already is: the 2.0 rule caps N
at the card that loses 5 percent first, which is the Apple tier (130,000 ops on the M5 Max against 210,000 on the
5090 at 431 W and about 150,000 at its knee). Sizing N to the Apple ceiling rather than the 5090's costs the 5090
tier: at N = 130,000 the 5090 at its knee pays 6.4 pJ x 131,170 = 0.84 microjoules of shadow instead of 0.65 (+0.19,
+8 percent of its electricity at 2.37 to 2.56), its GDDR7 edge at k = 1 moves from 2.13x to 1.95x and at k = 0.5
from 3.0x to 2.9x; the M5 Max pays +0.21 (1.43 to 1.64, +15 percent) for 1.3x to 1.25x at k = 1. The shadow's
extra length buys about 0.15x of edge on every tier for 8 to 15 percent of every honest miner's electricity: the
priced answer is to keep N at 100,000 and let the per-era draw move inside the band, not to size it up to the Apple
ceiling. (b) The acceptance floor (layer 4, the (c''') ratio and the F8 uniformity test): NO per-tier scoring. The
floor is a property of the program's address distribution against a chip's on-die SRAM (the 1.067x hot-set ceiling),
the same number whichever honest card runs it; scoring it per tier would change the figure for nobody and would
invite a per-card class menu, which section 6 of the research file shows can never beat the single best class.
5. The dataset stays inside 16 GB unified memory (8 GiB at the top of the schedule) so the honest tier keeps mining:
lane B's point stands and this file adds a number: a 16 GB Mac is out at the candidate 10 GiB step and pays the
measured -12 to -22 percent rate cost of a larger working set before any limit; the Apple LPDDR6 row above is a
36 GB or larger part.
## 5. The tiers statement for Ember (keyed by class v5)
The table the app reads: `app/igneum-app/tiers/class-v5-tiers.json`, 30 card classes, 5 measured (the 5090, 5080,
4070, 9070 XT, M5 Max), the rest estimated from the measured stock rows and the architecture's shape in section 3.
Each entry carries the three tiers as rows in the shape `src/ember.rs tier_from_json` reads back from a card's state
(`id`, `clock_mhz`, `power_pct`, `mem_mhz`, `limit_w`, `mhs`, `w`; `mhw` and `source` as `Tier::json` writes them) plus
`label` (measured or estimated), `uj`, `note` and `src`; the AMD rows carry `core_offset_mhz` and `power_offset_pct`
for the ADLX knob; a card with no lever carries the `max` tier only, source `stock`. The validator
(`class-v5-tiers.mjs`) refuses a class other than v5, a tier outside the three, a power rung outside 50 to 100, a
missing field, a `uj` that is not watts over rate, a tuned row dearer than stock, a max tier that is not stock, an AMD
row without its offsets, and a missing card class of the brief; the test (`class-v5-tiers.test.mjs`, 10 of 10 on
igneum-build-3 at 13:0x) runs the shipped file, the measured rows, the match rule (a 5070 Ti is not a 5070), the stale
rule and the known-failed cases.
| Tier | The rule (the ember-tiers-25 definition) | Blackwell | Ada | Ampere | AMD | Apple, Intel |
|---|---|---|---|---|---|---|
| Efficiency | the best MH per watt row of the card's search outright | the lock one rung past the knee at 100 percent power: 1,200 on the 5090 (measured), 1,100 on the 5080 (measured), 1,100 as the prior elsewhere | the lock at 1,860 with the 50 to 60 percent cap (the 4070 measured) | the 80 percent cap with the lock at 1,800 as a ceiling (no row under it) | -500 MHz core, -30 percent power (the 9070 XT measured) | stock (no lever) |
| Balanced (the default from install) | the best MH per watt row within 1 percent of the top rate | the knee: 1,300 on the 5090 (measured), 1,100 on the 5080 (the same row), 1,300 as the prior elsewhere | 2,400 at 80 percent (the Ada prior) | the 90 percent cap, no lock | -300 MHz, -15 percent (inside the flat band) | stock |
| Max | the stock row (unlocked, 100 percent) | stock | stock | stock | stock | stock |
The re-measure rule after a class flip, as the table carries it (`remeasure_rule`):
1. A set measured under one program class never applies as current under another (`tiers_stale`: both classes known
and different). The stored Efficiency and Balanced points are the provisional START of the re-measure, not its
result: the search begins at the stored point and walks one rung either way on the clock and the power ladder,
the fingerprint checked on every step; the Max tier is stock and is never stale.
2. The measured flip: class v4 to class v5 on the 5090 at the 1,300 MHz lock cost 0.0 percent of rate and +2.0
percent of watts; the knee did not move. The expected flip cost for any class whose shadow stays inside the
latency-bound band (the op count and the mix inside layer 1's draw band) is 0 to 1 rung of knee; a class whose shadow
leaves the band (doubling the op count: the 5090 at 431 W binds at 210,000 ops) re-measures from stock, not from
the stored point.
3. The set also re-measures weekly (`PERIOD_S`) and on a driver major change (the prior key carries driver major and
class), and a confirm check that beats its prior by over 1 percent on MH per watt asks for the full plan.
## 6. The denominator sweep (rented, 8 October 13:05 to 14:1x UK, the stock rows the record lacked)
Three drivers of the fleet lane's model sweep and then a direct ssh runner: `box-cardbench-v2.sh` (class v3, the v5
kit's fingerprint, the memprobe ceiling), `box-cardbench-v4watts.sh` (the class v4 shape with the paired class v3 run)
and, from 13:21 on the coordinator's full-spend order, `box-cardbench-v2m.sh` on 16 card classes in parallel (the
class v5 kit's bench run for 200 batches of 2^24 under the 1 Hz sampler, so the class v5 watts are a measured mean
over busy samples from 8 s in; then `-lmc` to the card's maximum and a second class v5 run when the host accepted it).
One one-shot pod per card class on RunPod or Vast under the consumer cap, destroyed at the end of each row; the rows
in `~/igneum-fleet/cardbench/rows.jsonl` under `sweep: 2026-10-08-denominator` and `-v5`; the lane's spend about USD 5
of its USD 100 (the pods ran 3 to 10 minutes each). No rented host allowed `-lgc`; the two that accepted `-lmc` (the
H100 and A100) left the memory clock where it was, so every row here is stock and the knees of section 2 stay
estimated where no founder machine holds the card.
Two faults found on the way, for the fleet lane: (1) the sweep driver's ssh wait read every Vast pod of the 13:21 wave
as "never answered ssh in 10 minutes" while a direct `ssh` to the same host and port answered at once (13 pods, all
live; the rows were then taken by a direct runner, `~/igneum-fleet/denom-direct.sh`, which keys on the provider's
own ssh host and port and nothing in the registry); (2) the registry lock `~/igneum-fleet/boxes.json.lock` was held
from 13:32 by three `dn3-q05.py` processes of another lane, so every `Registry.patch` from this lane blocked (a
re-rent sat 12 minutes on a live pod and then destroyed it); the lane's scripts now write the registry best-effort
under a 15 s alarm. The rented stock rows against the PC rows on the one card measured both ways (the 5080): class v5
71.35 MH/s at 248.0 W rented against class v4 71.41 at 253.1 W on PC 1, within 3 percent, so the 18 percent class v3
spread of the morning was that host and not the method.
| Card | Host | Class v3 (MH/s at W = microjoules) | Class v4 shape or class v5 (MH/s at W = microjoules; samples) | The knobs on the host | Cost |
|---|---|---|---|---|---|
| RTX 4090 24 GB | runpod m1tstl1h1b7r0o (595.91.07), limit 450.0 W | 70.094 at 222.6 W = 3.18 | class v5 70.253 MH/s (MATCH), watts not sampled on this row | -lgc refused | USD 0.032 |
| RTX 5060 8 GB | vast 54840005 (580.126.09), limit 145.0 W | | class v4 16.234 at 87.8 W = 5.41 (v4 over v3 20.4 percent on this host) | | USD 0.009 |
| RTX 5060 8 GB | vast 54840004 (580.126.09), limit 145.0 W | 24.774 at 80.7 W = 3.26 | class v5 31.312 MH/s (MATCH), watts not sampled on this row | -lgc refused | USD 0.011 |
| RTX 5080 16 GB | vast 54840017 (570.133.07), limit 300.0 W | | class v4 70.951 at 239.8 W = 3.38 (v4 over v3 41.1 percent on this host) | | USD 0.052 |
| RTX 3080 10 GB | vast 54840023 (580.159.03), limit 130.0 W | | class v4 24.007 at 129.2 W = 5.38 (v4 over v3 3.0 percent on this host) | | USD 0.025 |
| RTX 3060 12 GB | vast 54840846 (580.126.20), limit 170.0 W | | class v4 26.886 at 166.1 W = 6.18 (v4 over v3 44.6 percent on this host) | | USD 0.007 |
| RTX 4070 12 GB | vast 54840856 (580.173.02), limit 200.0 W | 30.829 at 107.1 W = 3.47 | class v5 30.878 MH/s (MATCH), watts not sampled on this row | -lgc refused | USD 0.023 |
| A100 80 GB | runpod miuoe6gkcb1rhz (580.126.16), limit 400.0 W | 138.062 at 294.9 W = 2.14 | class v5 133.548 MH/s (MATCH), watts not sampled on this row | -lgc refused | USD 0.075 |
| H100 80 GB | runpod zosqj1s802dk3x (580.126.09), limit 700.0 W | 252.959 at 382.4 W = 1.51 | class v5 241.342 MH/s (MATCH), watts not sampled on this row | -lgc refused | USD 0.216 |
| RTX 3090 24 GB | runpod sbrhhunqui25d0 (580.65.06), limit 310.0 W | 60.008 at 294.6 W = 4.91 | class v5 61.486 MH/s (MATCH), watts not sampled on this row | -lgc refused | USD 0.014 |
| RTX 3080 10 GB | vast 54841582 (580.159.03), limit 180.0 W | 49.832 at 177.8 W = 3.57 | class v5 44.308 MH/s (MATCH), watts not sampled on this row | -lgc refused | USD 0.024 |
| RTX 5080 16 GB | vast 54845199 (570.133.07), limit 300.0 W | 71.16 at 159.4 W = 2.24 | class v5 71.349 at 248.0 W = 3.476; 39 samples, SM 2769, memory 14801 | -lgc refused; -lmc refused | USD 0.014 |
| L40S 48 GB | vast 54845608 (595.71.05), limit 350.0 W | 56.354 at 221.5 W = 3.93 | class v5 56.493 at 298.7 W = 5.287; 46 samples, SM 2520, memory 9001 | -lgc refused; -lmc refused | USD 0.04 |
| RTX 4080 16 GB | vast 54845190 (595.84), limit 320.0 W | 40.694 at 141.5 W = 3.48 | class v5 40.8 at 200.7 W = 4.919; 72 samples, SM 2760, memory 10801 | -lgc refused; -lmc refused | USD 0.017 |
| RTX 3080 10 GB | vast 54845161 (580.178.04), limit 170.0 W | 50.708 at 169.2 W = 3.34 | class v5 33.37 at 169.9 W = 5.091; 90 samples, SM 689, memory 9251 | -lgc refused; -lmc refused | USD 0.008 |
| RTX 4090 24 GB | vast 54845886 (595.84), limit 250.0 W | 62.401 at 200.5 W = 3.21 | class v5 62.684 at 249.9 W = 3.987; 46 samples, SM 2579, memory 10251 | -lgc refused; -lmc refused | USD 0.02 |
| RTX 5060 8 GB | vast 54845177 (595.84), limit 140.0 W | 30.76 at 78.8 W = 2.56 | class v5 30.804 at 115.7 W = 3.756; 99 samples, SM 2715, memory 13801 | -lgc refused; -lmc refused | USD 0.011 |
| RTX 5060 Ti 16 GB | vast 54845162 (580.126.09), limit 180.0 W | 30.747 at 82.6 W = 2.69 | class v5 30.843 at 123.9 W = 4.017; 96 samples, SM 2835, memory 13801 | -lgc refused; -lmc refused | USD 0.013 |
| RTX 3060 12 GB | vast 54845154 (580.126.09), limit 170.0 W | 26.534 at 120.4 W = 4.54 | class v5 26.53 at 169.8 W = 6.4; 117 samples, SM 1806, memory 7301 | -lgc refused; -lmc refused | USD 0.008 |
| RTX 4070 12 GB | vast 54845860 (580.126.09), limit 210.0 W | 28.401 at 116.3 W = 4.09 | class v5 28.433 at 165.5 W = 5.821; 108 samples, SM 2820, memory 9801 | -lgc refused; -lmc refused | USD 0.011 |
| RTX 4060 Ti 16 GB | vast 54849184 (580.159.03), limit 100.0 W | 18.735 at 79.1 W = 4.22 | class v5 18.75 at 99.8 W = 5.323; 163 samples, SM 2668, memory 8751 | -lgc refused; -lmc refused | USD 0.016 |
Not reached by the class v5 sweep (stock, their class v4 rows of the morning stand within 2 percent): the 5070 Ti and
the 5070 (two Vast hosts each, 14:08 and 14:13 UK, never accepted the fleet key in 15 minutes); the 3070 (two hosts
closed the connection mid-bench). The sweep closed at 14:35 UK: 20 rows landed, no pod left on either provider
(audited 14:40), the lane's spend about USD 5 of its USD 100.
## 7. Consequences per tier
| Tier | What this file means | What is being done |
|---|---|---|
| Home miner, one 8 GB card (5060, 4060, 3070) | the Blackwell 8 GB card at its knee is 2.15 microjoules (estimated), inside 10 percent of the 5090's measured floor; the Ada and Ampere 8 GB cards 3.8 to 4.8. The lever is the Efficiency tier: on a 5060 about 40 W of 110 back for no rate (estimated); on a 3070 about 20 W of 196 | the tiers table ships the prior; the card's own search measures it; the 5060 and 4060 watts rows are the sweep's |
| One 12 GB card (5070, 4070, 3060) | the 5070 at its knee about 1.75 (the lowest NVIDIA row in the record, estimated); the 4070 measured 3.51 at its tune; the 3060 4.9 | the 4070's class v4 ladder below 1,860 MHz is owed to a PC 1 job (the hash lane's scripts, not this lane's hands) |
| One 16 GB card (5080, 5070 Ti, 5060 Ti, 4080, 4060 Ti, 9070 XT) | the 5080 measured 2.06 to 2.10 at 1,100 MHz, 42 percent of its stock draw back for 0.3 percent of rate; the 5070 Ti about 1.70 (estimated); the 9070 XT 8.1 measured on the grid, 24 percent of its draw back for nothing | the 5060 Ti ladder on PC 2 (the card-in job); the 9070 XT grid lands in the AMD tier rows |
| One 24 or 32 GB card (5090, 4090, 3090) | the 5090 at its knee 2.33 to 2.37, 33 percent of its electricity back for 1.5 percent of rate; the 4090 about 3.4, the 3090 about 6.4 (estimated: Ampere's cap is a small lever) | the Balanced tier is the default from install; the 4090 and 3090 stock rows are the sweep's |
| Apple (M-series) | the honest best per joule the project owns: 1.40 to 1.43 measured on the M5 Max, nothing to set; the M4 and M3 parts within 25 percent (estimated); five years out about 1.2 on LPDDR6 | the public edge is stated against this tier; the dataset stays inside 16 GB unified memory |
| A rig | per card as above; a 5090 rig at the Balanced tier draws 319 W per card instead of 476 on class v5; a 5080 rig 147 instead of 253 | the tiers table |
| A pool user | nothing changes in shares or payout from any row here | |
| A chip | the honest floor it must beat is 2.1 microjoules on a mass-market 16 GB Blackwell card at its knee (1.9x at k = 1 on GDDR7, 2.7x on the N2 SRAM die) and 1.43 on an Apple laptop (1.3x and 1.8x); five years out 1.2 on the Apple LPDDR6 part (1.06x and 1.5x) | the research lane's synthesis carries the number |
| The public claim | the honest sentence per joule: "a chip that stores the dataset keeps the card's whole-card energy over its memory energy: under 2x against a 16 GB Blackwell card at its knee and 1.3x against an Apple laptop for a core as good as a GPU lane; 2.7x and 1.8x against a 2 nm SRAM store" | to the Counter lane for the chip texts; nothing served moves from this file |
## 8. Unverified and owed
- Every Ada and Ampere knee is estimated: no rented host allows `-lgc`, and the founder's machines hold one Ada card
(the 4070, its class v4 ladder below 1,860 MHz owed to a PC 1 job through the hash lane's scripts) and no Ampere.
The estimated knees carry about plus or minus 10 percent, and the rented stock watts read 15 to 20 percent under a
PC's on the one card measured both ways (the 5080).
- The 5070 Ti and 5070 floors (1.7 to 2.1) are the strongest claims in this file and both are estimated from stock
rows; a 5070 Ti ladder on PC 1 or PC 2 (the card-in job's queue) would settle whether the honest NVIDIA floor is a 16
GB card.
- The AMD rows other than the 9070 XT are modelled on one card; the 9060 XT and 7600 XT in the card-in queue will
replace two of them.
- The Apple M4 Max, M4 Pro and M3 Max rows are modelled on the M5 Max's split; a Metal bench on any of them with the
IOReport meter would replace its row in an hour.
- Section 4's LPDDR6 rows are modelled on JESD209-6's public summary (the bank count and tFAW are behind the
paywall, lane B's note) and on the M5 Max's three-way split; the Strix, GB10 and Qualcomm rows rest on the vendor's
measured latency hiding on other parts and are approximate.
- The 4060's watts (three rented hosts, no power sensor), the B580's watts, the H100's lock, the A750 entirely.
- The class v5 stock rows of the 5070 Ti, the 5070 and the 3070 (section 6: the hosts never took the key or closed
the connection); their class v4 stock rows stand within 2 percent.
- Two fleet-tooling faults for the fleet lane (section 6): the sweep driver's ssh wait misreads live Vast pods, and a
registry flock held for an hour by another lane's processes blocks every `Registry.patch`; both cost this lane 40
minutes and five pods.
## 9. The reading for the 15:45 BST close (five sentences)
The honest joule under class v5 is 2.06 to 2.10 microjoules per hash on a 16 GB Blackwell card at its 1,100 MHz lock
(measured), 2.33 to 2.37 on the 5090 at its knee (measured), about 1.7 to 2.1 on the 12 and 16 GB Blackwell cards
(estimated from their measured stock rows), 1.40 to 1.43 on an Apple M5 Max with nothing to set (measured), and the
only software lever that moves it is the operating point: the core lock on Blackwell and Ada (worth 34 to 41 percent
of the class v5 stock draw measured today on the 5080 and the 4070), the cap on Ampere (10 to 15 percent, and a cap
under the shadow costs rate one for one: the 3080 at 170 W lost a third of its class v5 rate), the ADLX offsets on
AMD (24 percent), nothing on Apple and Intel; the occupancy knob is 1 to 2 percent and the memory clock is untouched.
Against those floors the stored-dataset chips read 1.9x to 2.1x on GDDR7, 2.2x to 2.4x on one HBM3 stack and 2.7x to
3.0x on a 2 nm SRAM die at a core as good as a GPU lane (6.4 pJ per forced op), 2.6x to 3.0x, 3.2x to 3.6x and 4.4x
to 5.0x at the record's 3.2 pJ, and 3.6x to 4.0x, 4.8x to 5.4x and 8.2x to 9.3x at the k lane's 1.1 pJ floor; against
the Apple laptop 1.3x, 1.5x and 1.8x at 6.4 pJ; the served 2.1x stands as the 5090 figure and the honest headline is
under 2x against a mass-market card at a core as good as a GPU lane. Five years out the honest tier is Apple's
unified-memory part on LPDDR6 at about 1.2 microjoules (modelled), against which the GDDR7 chip is at parity at 6.4 pJ
and the SRAM die 1.5x; the other LPDDR SoC vendors model 3 to 10 microjoules because their GPUs hide the latency
worse, so the reference joule is the Apple tier by name. The class should state resistance against the best honest
joule and keep sizing the shadow by the Apple tier's 5 percent point (N at 100,000, the band drawn per era), and
should not score the acceptance floor per tier; sizing N up to the Apple ceiling would cost every honest miner 8 to
15 percent of its electricity for about 0.15x of edge. The tiers table ships the measured points on the 5090, 5080,
4070, 9070 XT and M5 Max, the measured class v5 stock row on 14 classes and an architecture prior for the knee
everywhere else, with the rule that a class flip re-measures from the stored point (the measured v4 to v5 flip moved
the 5090's knee by nothing), and the rows still owed are the Ada and Ampere knees, which no rented host can give.

View file

@ -6,7 +6,7 @@
**The identity, as the record states it** (`docs/analysis/counter-asic-4-research.md` section 2): against the chip that stores the dataset, `edge = (E_card + F) / (E_mem + k F)`; at zero premium the edge is `E_card / E_mem` (3.6x on a 5090 at its 1,300 MHz knee against the GDDR7 board, measured card, modelled chip), and a shadow op with `k` under 1 never fully closes it. The one thing with `k = 1` by construction is the memory itself: the same devices on both sides. The record forced one DRAM operation per read (the activate and one 32-byte sector) and called every wider read "nothing to force: the chip already pays the sector". That is true up to 32 bytes; at 64 bytes the chip pays a second sector, and this lane's question was whether the honest card pays it at the DRAM's price or at its own.
**The candidate this lane found, measured today, and where it stands.** The dataset item is 64 bytes (16 words; spec 1.5). Reading the whole item (W = 16 words, the read-width branch's class `w64`, bit-exact on four runtimes, fingerprint `836e56e7d496e980`, the verifier +4 percent) forces a second 32-byte sector per read in the same open row: on the chip model's own inputs (909 pJ of activation plus 1,150 pJ of movement per sector, Micron's 4.5 pJ per bit, claimed) the GDDR7 chip's energy per hash rises from 0.466 to 0.62 microjoules (+33 percent, its rate unchanged), one HBM3 stack's from 0.321 to 0.40 (+24), and on floor lane 3's wire figure the N2 SRAM die's from 0.036 to 0.126 (66x to 19x). The design's "never 16 words" rested on one row, the 5090's 71.9 MH/s (-47 percent) in the exported kernel at full occupancy, while the same card's own 64-byte probe read -13 percent; so the lane rented cards and measured the card side at stock (section 3.1): **the rate question is settled per architecture, and the energy question kills the lever at stock.** A one-request form of the same kernel text (PTX `ld.global.L2::64B` on the first load of each item; bit-exact, the same fingerprint) holds the 4-byte rate on the RTX 4090 at full occupancy (63.65 against 64.73 MH/s, 98 percent, PASS) and on the RTX 5090 at a sparse shape (145.7 against 142.6 MH/s, sp170-w4, PASS); on the H100 the best form is -21 percent and the hint does nothing (FAIL); on the RTX 3090 the best form is -13 percent (FAIL). But the card pays the second sector at its own fabric's price, not the DRAM's 1.15 nJ: 8.6 nJ on the 4090 (+71 W at 8.3 G reads per second for no rate) and 4.7 nJ on the 5090 (+88 W at 18.6 G), so the energy per hash rises 34 percent on the 4090, 25 on the 5090, 33 on the H100's best form and 25 on the 3090, against the modelled chip's 33 (GDDR7) and 50 (HBM3). The sector's `k` is about 0.13 (4090) to 0.24 (5090) on GDDR7, under the ALU shadow's 0.3 to 0.8; the edge at zero shadow moves 0 on Ada, 7 percent on Blackwell (4.7x to 4.4x at stock) and 0.9x in the chip's favour on Hopper, and 0 with the shadow on (3.3x at `k` 0.5 either way). **KILL at stock on measured rows.** The one row that could revive it is the honest card's knee (a smaller fixed share and a lower fabric voltage; a rented pod refuses `-lgc`), owed as a single PC 1 row and not blocking anything: W = 16 stays out of class v6.
**The candidate this lane found, measured today, and where it stands.** The dataset item is 64 bytes (16 words; spec 1.5). Reading the whole item (W = 16 words, the read-width branch's class `w64`, bit-exact on four runtimes, fingerprint `836e56e7d496e980`, the verifier +4 percent) forces a second 32-byte sector per read in the same open row: on the chip model's own inputs (909 pJ of activation plus 1,150 pJ of movement per sector, Micron's 4.5 pJ per bit, claimed) the GDDR7 chip's energy per hash rises from 0.466 to 0.62 microjoules (+33 percent, its rate unchanged), one HBM3 stack's from 0.321 to 0.40 (+24), and on floor lane 3's wire figure the N2 SRAM die's from 0.036 to 0.126 (66x to 19x). The design's "never 16 words" rested on one row, the 5090's 71.9 MH/s (-47 percent) in the exported kernel at full occupancy, while the same card's own 64-byte probe read -13 percent; so the lane rented cards and measured the card side at stock (section 3.1): **the rate question is settled per architecture, and the energy question kills the lever at stock.** A one-request form of the same kernel text (PTX `ld.global.L2::64B` on the first load of each item; bit-exact, the same fingerprint) holds the 4-byte rate on the RTX 4090 at full occupancy (63.65 against 64.73 MH/s, 98 percent, PASS) and on the RTX 5090 at a sparse shape (145.7 against 142.6 MH/s, sp170-w4, PASS); on the H100 the best form is -21 percent and the hint does nothing (FAIL); on the RTX 3090 the best form is -13 percent (FAIL). But the card pays the second sector at its own fabric's price, not the DRAM's 1.15 nJ: 8.6 nJ on the 4090 (+71 W at 8.3 G reads per second for no rate) and 4.7 nJ on the 5090 (+88 W at 18.6 G), so the energy per hash rises 34 percent on the 4090, 25 on the 5090, 33 on the H100's best form and 25 on the 3090, against the modelled chip's 33 (GDDR7) and 50 (HBM3). The sector's `k` is about 0.13 (4090) to 0.24 (5090) on GDDR7, under the ALU shadow's 0.3 to 0.8; the edge at zero shadow moves 0 on Ada, 7 percent on Blackwell (4.7x to 4.4x at stock) and 0.9x in the chip's favour on Hopper, and 0 with the shadow on (3.3x at `k` 0.5 either way). **KILL at stock on measured rows.** The knee row, measured by the hash lane on PC 1 at 15:0x UK, closes it from the other side: at the 1,300 MHz lock the hinted form reads 37.6 against the 4-byte row's 100.6 MH/s at 2.3x its energy per hash (section 6). W = 16 is out of class v6 at stock and at the knee.
**Everything else on the brief is killed, with the number.** The tensor core: the record's `k` 0.03 to 0.3 is not defensible at its floor (the 0.04 pJ figure is INT4 at 0.46 V on a test chip with no memory system); shipping merchant silicon at nominal voltage reads 0.30 to 0.56 pJ per INT8 MAC (Meta MTIA v2 0.51, Qualcomm AI 100 Ultra 0.34, AMD MI355X 0.56, NVIDIA B200 0.44, Apple M4 ANE 0.30 measured; all claimed unless marked), and a Hopper tensor core under a pure MMA loop measured 0.34, so the honest band against the tile the class runs (1.5 pJ per MAC at the knee, measured) is `k` 0.2 to 0.4 and against the dense wide tile (0.83 at the knee) 0.4 to 0.7: equal to or under the ALU shadow's 0.3 to 0.8, never above it, and the Apple cost (-35 percent of rate at 1,024 tiles per hash, measured) kills it as content regardless. The RT core: traversal results are implementation-defined on every API (Vulkan "no ordering guarantee", DXR "no defined order", NVIDIA "could change depending on which driver, which GPU"), the acceleration structure is opaque, and a dedicated unit reads 4 to 33 nJ per ray against 290 to 750 nJ measured board-level on an RTX 2080 (`k` 0.01 to 0.2): dead on bit-exactness and on `k`. Memory-level parallelism per dollar: no asymmetry per channel, but a correction to the chip model: no 28 nm GDDR7 PHY exists (the shipped ones are N3 and FinFET; the oldest GDDR6 PHYs are 12 nm), so the record's cheapest chip (a USD 5 M project, a USD 17 M break-even cap) is not buildable; the floor is a 12 nm GDDR6 part at about USD 20 M to 30 M (cap USD 70 M to 100 M) or an N5-class GDDR7 part at USD 50 M to 75 M (cap 170 M to 250 M), modelled. Proof of latency: the chain checks values, never time; the block is 1 s and a DRAM round trip 0.1 to 0.4 microseconds; the farm's node is on its own LAN; a sequential per-block prefix favours the lower-latency side, which is the chip (about 4x). The time dimension on the address map: a bit permutation is firmware (a few hundred gates), no prefetch exists for a dependent chain, and the literature has no such scheme. The literature since 2023 holds nothing outside the identity; what it adds is a higher Ethash precedent (iPollo V2H, 0.14 J per MH, about 13x a 5090, vendor claim), the measured PAM3 I/O energies (SK hynix, ISSCC 2024) and the PHY-node fact above. Of this lane's own ideas, four more die on the identity (video decode, row-straddling, scratch in DRAM, independent chains per hash), and two items per read (W = 32) dies with W = 16.
@ -178,6 +178,18 @@ A per-block random challenge whose answer window is shorter than one DRAM round
Reading: nothing published since 2023 offers a lever outside the identity; every energy figure is a streaming pJ per bit, and no one has measured a per-random-read joule on GDDR6, GDDR7 or HBM3 at the controller, so the record's 2.0 and 1.2 nJ stand as the only model and are owed a measurement nobody can rent (the AWS F2 hour of chip-model 5.3 is still the one HBM2 instrument). The new rows change two precedents: the Ethash band's top is about 13x (claimed) not 6.8x, and the Monero chip story has a shipped-but-unverified successor to the withdrawn X9.
### 2.7 Three precedents, sourced for the 15:45 close (the research lane's ask of 14:0x UK; every figure read 8 October 2026)
A correction to the question as asked first: Monero did not go chip-free after November 2019; the Antminer X5 shipped in September 2023 at about parity to 1.5x per joule against the best measured CPU.
| Precedent (launch) | The designers' claim | The chip that shipped | Measured edge per joule against the best commodity part | Months to the first chip | Sources |
|---|---|---|---|---|---|
| Monero RandomX (fork 30 November 2019) | design.md, Introduction: a PoW "must achieve device binding by targeting specific features of existing general-purpose hardware"; section 3.4 SuperscalarHash: light-mode ASICs "will be bottlenecked by SuperscalarHash ... their efficiency will be destroyed by the high power usage"; no numeric bound anywhere in the document (claimed) | Bitmain Antminer X5, preorders 29 August 2023, delivered late September 2023: 212 kH/s at 1,350 W = 157 H/J (claimed); Antminer X9 announced 26 December 2025, 1,000 kH/s at 2,472 W = 405 H/J (claimed), USD 5,600, listed for July 2026, reported pulled on 31 July 2026 by a reseller with no Bitmain statement | Ryzen 9 9950X on xmrig 20.66 kH/s at 199 W = 104 H/J (hashrate.no, one verified submission, measured); Kryptex 27 kH/s at 170 W = 159 H/J (unlabelled); the X5 1.0x to 1.5x; the X9, if it exists, 3.9x | 46 | https://github.com/tevador/RandomX/blob/master/doc/design.md ; https://www.asicminervalue.com/miners/bitmain/antminer-x5 ; https://github.com/monero-project/monero/issues/10270 ; https://oneminers.com/blogs/news/antminer-x9-cancelled-what-bitmain-pulling-the-model-means-for-monero-mining ; https://www.hashrate.no/cpus/9950x/XMR ; https://pool.kryptex.com/device/cpu/AMD/ryzen-9-9950x |
| Ethereum Ethash (mainnet 30 July 2015; PoW ended 15 September 2022, ETC continues) | a memory-hard DAG to keep GPUs competitive; no numeric bound (claimed) | first: Antminer E3, announced 3 to 4 April 2018, 180 MH/s at 800 W = 0.23 MH/J, shipped July 2018 with most units slipping to Q4 (claimed); current: iPollo V2H, released November 2024, 3,400 MH/s at 475 W (both plus or minus 10 percent) = 7.2 MH/J (vendor page, claimed) | RTX 4090 on Etchash 127 MH/s at 249 W = 0.51 MH/J; RTX 5090 215.8 MH/s at 405 W = 0.53 (hashrate.no, community-measured); the E3 under a good 2018 GPU per joule; the V2H 14x the 4090, 13.5x the 5090 | 36 | https://cointelegraph.com/news/bitmain-releases-ethash-asic-miners ; https://www.tweaktown.com/news/61527/bitmain-pushes-back-ethereum-asic-miner-now-coming-july/index.html ; https://www.ipollo.com/products/ipollo-v2h ; https://asicminervalue.com/miners/ipollo/v2h ; https://www.hashrate.no/gpus/4090 ; https://www.hashrate.no/gpus/5090 |
| Kaspa kHeavyHash (mainnet 7 November 2021) | no resistance claimed: designed for optical PoW, described as ASIC-friendly by design (secondary sources) | IceRiver KS0, August to September 2023, 100 GH/s at 65 W = 1.54 GH/J; Antminer KS3, October 2023, 9.4 TH/s at 3,500 W = 2.7 GH/J; Antminer KS5 Pro, March 2024, 21 TH/s at 3,150 W = 6.67 GH/J (all claimed) | RTX 4090 2,080 MH/s at 226 W = 9.2 MH/J (Kryptex medium profile, GPU-reported watts); the KS0 167x, the KS5 Pro 725x | 21 to 22 | https://www.asicminervalue.com/miners/iceriver/ks0 ; https://www.asicminervalue.com/miners/bitmain/antminer-ks3 ; https://www.asicminervalue.com/miners/bitmain/antminer-ks5-pro ; https://www.kryptex.com/overclocking/nvidia-rtx-4090-micron-24gb-medium-overclock ; https://www.btc-echo.de/academy/bibliothek/kaspa-mining/ |
Reading: RandomX promised parity and got roughly it (1.0x to 1.5x after 46 months; the one chip claiming more never shipped); Ethash promised nothing numeric, bought 36 months before a chip worse than a GPU, and sits at about 14x today on a memory system without a GPU; Kaspa claimed nothing, got its chip in 21 months and went 167x to 725x in six. Every ASIC watt is nameplate and every CPU and GPU figure a community test table, so the edges carry about 20 percent either way.
## 3. This lane's own ideas
### 3.1 The second sector: W = 16 words, the whole 64-byte item (KILL at stock on measured rows; the knee row owed)
@ -206,7 +218,7 @@ Reading: nothing published since 2023 offers a lever outside the identity; every
The rows are the record: the 4090 and H100 pods were destroyed before their raw logs were copied home (the copy step failed quietly on a shell expansion), so their figures above are the extracted rows read off the pods in the session; the 3090's raw logs are at `~/igneum-fleet/fl5-results/3090-*` (result.log, result2.log, power.csv, power2.csv). Spend: about USD 6 of the USD 150 allowed.
**What the rows say, on the identity.** (1) The rate question: the exported form's -47 to -60 percent is a request-shape and occupancy effect, as the 5090's probe said; one PTX qualifier on the first load makes the 64-byte item one L2 request and holds the 4-byte rate on Ada at full occupancy (98 percent), while on Hopper the hint changes nothing (the H100's loss is elsewhere: its HBM3 pseudo-channel moves a 64-byte access as two bursts and its best shape is 79 percent) and on Ampere the best shape is 87 percent. (2) The energy question, which decides it: the card pays the second sector at the cost of a whole dependent read, not at the DRAM's movement term. On the 4090 the hinted form draws 71 W more at the same 64.7 MH/s: 71 W over 8.3 G reads per second is **8.6 nJ per second sector**; on the 5090 at sp170-w4, 88 W more at 145.7 MH/s: **4.7 nJ**; against the 1.15 nJ the DRAM device charges for it (the 4090's GDDR6X at 6 pJ per bit would be 1.5), so the other 7 nJ is the card's own L2, crossbar, L1 and the SMs' longer wait, the same anatomy as the record's 8.7 nJ whole-card marginal per dependent read (15.1a). In the identity's terms `F` is 128 x 8.6 nJ = 1.1 microjoules per hash on the 4090 (0.6 on the 5090) and the chip's cost for the same work is 128 x 1.15 = 0.15: **`k` about 0.13 on the 4090, 0.24 on the 5090**, under the ALU shadow's 0.3 to 0.8 and no better than the L2 hot table's. The energy per hash rises 34 percent on the 4090 and 33 percent on the H100's best form against the modelled chip's 33 (GDDR7) and 50 (HBM3): the edge at zero shadow moves 0 on Ada against the GDDR7 chip and 0.9x in the chip's favour against HBM3 on Hopper; against the SRAM die the chip's 66x to 19x becomes about 25x against the card's new energy, not 19x. (3) The one row that could change the sign is the knee: at the 1,300 MHz lock the 5090's fixed share is smaller and its fabric runs at a lower voltage, so the sector's 8.6 nJ would fall with the measured 10.9 to 8.7 nJ per read (15.1a) and the card's rise would be a larger fraction of a smaller base; the lever lives only if the card's energy per hash rises under about 20 percent there, and a rented pod cannot read it (`nvidia-smi -lgc` refused: "does not have permission to change clocks"). That row is one PC 1 run (the `w4` and `w64-l2` packs at `--block-warps 1`, 60 batches, at the lock) and is owed to the hash lane as a formality, not a gate.
**What the rows say, on the identity.** (1) The rate question: the exported form's -47 to -60 percent is a request-shape and occupancy effect, as the 5090's probe said; one PTX qualifier on the first load makes the 64-byte item one L2 request and holds the 4-byte rate on Ada at full occupancy (98 percent), while on Hopper the hint changes nothing (the H100's loss is elsewhere: its HBM3 pseudo-channel moves a 64-byte access as two bursts and its best shape is 79 percent) and on Ampere the best shape is 87 percent. (2) The energy question, which decides it: the card pays the second sector at the cost of a whole dependent read, not at the DRAM's movement term. On the 4090 the hinted form draws 71 W more at the same 64.7 MH/s: 71 W over 8.3 G reads per second is **8.6 nJ per second sector**; on the 5090 at sp170-w4, 88 W more at 145.7 MH/s: **4.7 nJ**; against the 1.15 nJ the DRAM device charges for it (the 4090's GDDR6X at 6 pJ per bit would be 1.5), so the other 7 nJ is the card's own L2, crossbar, L1 and the SMs' longer wait, the same anatomy as the record's 8.7 nJ whole-card marginal per dependent read (15.1a). In the identity's terms `F` is 128 x 8.6 nJ = 1.1 microjoules per hash on the 4090 (0.6 on the 5090) and the chip's cost for the same work is 128 x 1.15 = 0.15: **`k` about 0.13 on the 4090, 0.24 on the 5090**, under the ALU shadow's 0.3 to 0.8 and no better than the L2 hot table's. The energy per hash rises 34 percent on the 4090 and 33 percent on the H100's best form against the modelled chip's 33 (GDDR7) and 50 (HBM3): the edge at zero shadow moves 0 on Ada against the GDDR7 chip and 0.9x in the chip's favour against HBM3 on Hopper; against the SRAM die the chip's 66x to 19x becomes about 25x against the card's new energy, not 19x. (3) The knee, which could have changed the sign, did not (the hash lane's PC 1 row, section 6: the hinted form at the 1,300 lock reads 37.6 MH/s against 100.6 at 2.3x the energy per hash; the hint recovers nothing in the latency-bound regime on Blackwell). The reasoning that made it the one open row, for the record: at the 1,300 MHz lock the 5090's fixed share is smaller and its fabric runs at a lower voltage, so the sector's 8.6 nJ would fall with the measured 10.9 to 8.7 nJ per read (15.1a) and the card's rise would be a larger fraction of a smaller base; the lever lives only if the card's energy per hash rises under about 20 percent there, and a rented pod cannot read it (`nvidia-smi -lgc` refused: "does not have permission to change clocks"). That row ran on PC 1 at 15:0x UK and is in section 6.
**Verdict: KILL at stock on measured rows; W = 16 words stays out of class v6; the design's "never 16" stands, for the measured reason (the card's fabric price of a sector) rather than the plan's (the pins).** What is kept: the hinted one-request load as a kernel fact for Ada (a 64-byte dependent read at the 4-byte rate), which a future width decision can use; the measured 8.6 nJ per sector as the card-side figure the chip model's width rows lacked; and the per-architecture rate table above.
@ -256,7 +268,7 @@ Both sides are capex-dominated (the record's 16.1: 7x to 10x their electricity p
| Home miner, one 8 GB NVIDIA card (32-byte sectors) | nothing ships; had W = 16 shipped, this tier would have paid about a third more energy per hash for no rate (Ada) and an eighth of its rate too (Ampere) | nothing; the knee row on PC 1 is a formality |
| One 12 GB card (4070, 5070) | the same | the same |
| One 16 GB card (RX 9070 XT) | nothing (its 64-byte line is free at W = 16, measured 5 October); its row against the chip is unchanged at 22.7x on class v3 | the vendor-share metric |
| One 24 or 32 GB card (5090 class) | nothing ships; had W = 16 shipped, the 5090 would have held its rate at a sparse shape and paid +88 W (+25 percent per hash) at stock; the record's 3.6x at the knee and 2.1x at `k = 1` stand | the knee row on PC 1 (the hash lane, one row, a formality) |
| One 24 or 32 GB card (5090 class) | nothing ships; had W = 16 shipped, the 5090 would have held its rate at a sparse shape and paid +88 W (+25 percent per hash) at stock, and at its knee lost 63 percent of its rate at 2.3x the energy (measured, PC 1); the record's 3.6x at the knee and 2.1x at `k = 1` stand | nothing |
| Apple (M5 Max and the unified tiers) | nothing (free at 64 bytes, measured 5 October); the honest best per joule is unchanged | nothing |
| A rig | nothing ships; the two model corrections raise the chip's project floor (USD 20 M to 75 M), which is the rig's real wall, by 4x to 15x over the record's cheapest row | the chip model's rows corrected (the Counter lane) |
| A pool user | nothing changes | |
@ -266,12 +278,13 @@ Both sides are capex-dominated (the record's 16.1: 7x to 10x their electricity p
## 6. Unverified and owed
- The knee row (the 5090 at the 1,300 MHz lock, `w4` against `w64-l2`, 60 batches, watts): a rented pod refuses the lock; one PC 1 row with the hash lane; the lever lives only under a 20 percent energy rise there, which the stock rows make unlikely.
- The knee row: DONE by the hash lane on PC 1's 5090 (kit d, 14:51 to 15:0x UK, the v5 kit's CUDA worker, `--block-warps 1`, 250 batches of 2^24, nvidia-smi 1 Hz, fingerprint 836e56e7d496e980 PASS on every `w64` row). Unlocked: `w4` 119.95 MH/s at 308.2 W (2.57 microjoules); `w64` 63.35 at 332.9 W; `w64-l2` 92.35 at 369.1 W (4.00 microjoules): the hint recovers 46 percent of the plain form's loss at full occupancy and stays 23 percent under the 4-byte rate at 1.56x its energy per hash. At the 1,300 MHz lock: `w4` 100.55 at 190.5 W (1.89 microjoules); `w64` 37.35 at 177.8 W; `w64-l2` 37.59 at 164.1 W (4.37 microjoules): **at the knee the hint gives nothing and the card's energy per hash is 2.3x the 4-byte row's**, far over the 20 percent line. The lever is dead at the knee as at stock; the sparse shape (sp170-w4) was not in the kit's worker and was not asked for again, because at the lock the card's fixed share is smaller and the sector's share larger, so no shape can bring a 2.3x rise under 1.2x. This closes every row this lane owed on W = 16.
- The 4090's and H100's raw logs were not copied before their pods were destroyed; the rows in 3.1 are the figures read off the pods during the session. The 5090's and the 3090's raw logs are at `~/igneum-fleet/fl5-results/5090-*` and `3090-*` (result.log, result2.log, result3.log, power*.csv).
- The watts are `nvidia-smi` board power at 1 Hz, the upper half of each row's samples averaged; idle on the rented pods read 29 W (4090) and 70 W (H100); the 3090's idle row was taken straight after a run and is not a settled idle.
- The chip side of 3.1 is the model's own data-movement term applied twice (4.5 pJ per bit, Micron, claimed, streaming; O'Connor's 3.48 for HBM2) and lane 3's wire figure for the SRAM die; no one has measured a second-sector column read's energy on GDDR7 (section 2.6: the public record has no random-read joule on any current part).
- The tensor chip figures are vendor specifications at TDP (claimed), the M4 ANE and the H800 loop measured; the RT figures are claims and one measured RTX 2080 row; the PHY node facts are vendor IP pages read today.
- The project-cost corrections use the history's figures (a 7 nm-class startup project USD 50 M to 75 M, claimed; the 12 nm figure scaled, approximate) and the mission lane's cap model.
- The `w64` class's census under the sub-version 3 rule and its F8 row, which this lane owed before any cut, are DONE by the census lane (`docs/analysis/class-v6/census-w16-mix.md` on `class-v6-census` at d20eb04bd, 14:0x UK): 256 of 256 seeds accepted with and without an era (0.704 rejection per candidate against the control's 0.668; 0 exhaustions; 0 window-bit refusals for the instrument's reason; 189 stride-bit refusals of 1,524 candidates against the control's 218; (c''') 1.4 percent); the F8-form top-0.1-percent share 0.999 to 1.006 of the uniform control at 2^20 on 16 seeds; the verifier +0.6 percent inside a 4 percent drift on a loaded core (this file's +4 percent neither confirmed nor refuted; a quiet-box row owed). One structural row for 3.1: at 16 words the product's low bits are alignment, so the whole-item read removes the product's own bias from the address (the control carries it at bit 0 in 116 of 256 programs); the stride bit R stays until the index fold. The class is sound; it is dead on energy, not on soundness.
- Nothing ran on the Mac, on a Hetzner box or on a PC for this file; the measurements ran on four RunPod one-shot pods, all destroyed on their done (the 5090 pod when its rows are in).
## 7. Sources

View file

@ -0,0 +1,717 @@
# Class v6 floor lane 1: SM-sparse, the honest card's watts toward the DRAM's own (8 October 2026)
Branch `class-v6-floor-sm` off `counter-asic-4` (d8ba861e). The term this lane owns is `E_card` above `E_mem` in the
identity of `docs/analysis/counter-asic-4-research.md` section 2: at zero shadow the stored-dataset chip's edge is
`E_card / E_mem`, and the only honest-side lever is to take the card's watts toward the DRAM's own at the activate
ceiling. Section 20.3b of that file read five shapes on PC 1's RTX 5090 (one block of 32 warps per SM at 170, 85, 43,
21 and 11 SMs) and closed the candidate: the draw follows the work, not the SM count. This file starts from that row,
answers the question it left open (what the residual watts between idle-plus-memory and the card's draw ARE, and
whether any occupancy shape at full SM count moves them) on four rented RTX 5090s, an RTX 4090 and an H100 plus PC 1 at
the 1,300 MHz lock, measures the memory-clock knob where a host allows it, and ships the measurement as a worker option
with a self-tune.
Every number here is **measured** unless marked otherwise: the worker's `--bench` (250 dispatches of 2^24 nonces, the
pack's vector warps through the served kernel first, the 2^24 fingerprint on every row and equal across every shape of
a pack) with `nvidia-smi` at 1 Hz beside it (the mean from 8 s in; `power.draw`, `power.draw.instant` and
`power.draw.average` within 2 W on every row). The shapes: `base` is the shipped grid (one warp per block); `w4` and
`w8` the shipped grid at 4 and 8 warps per block; `sp<N>-w<W>` the persistent wrapper of N blocks of W warps (the
Counter ASIC 4.0 variant, bit-exact), and a `%smid` probe on every rented card confirmed that N blocks of 1,024 threads
land on N distinct SMs, one block each, for every N used. The chip rows are the model's (`chip-model-v3.md` 5.3 to 5.6
and 5.12; lane B's SRAM die): GDDR7 board 0.466 microjoules per hash, one HBM3 stack 0.321, the N2 SRAM die 0.14; the
M5 Max's 0.78 is measured (6 October). "Edge" is the card's microjoules over the chip's. Times are UTC in the logs and UK
(BST, UTC+1) in the text. Idle is the card alone after 12 s with nothing running.
## 0. The answer
1. **The SM count is not the lever.** On every card the draw over idle is flat across the SM count and the warps per
SM for as long as the rate holds, and falls only when the rate falls. RTX 5090 (four rented hosts, class v3 at
stock): 43 of 170 SMs holds 99.4 percent of the ceiling, 36 SMs 99.1, 28 SMs 98.4, 21 SMs 96.6, 16 SMs 91, 11 SMs
71; the best energy per hash on any host is 1.3 to 3.9 percent under its base (host c 2.053 against 2.079
microjoules at 43 SMs; host e 2.389 against 2.485). RTX 4090: 16 of 128 SMs holds 99.0 percent at 4 W under base;
the best shape 1.2 percent under. H100: per-SM throughput-bound (the rate falls one for one with the SM count,
1.93 MH/s per SM), so its sparse floor is 127 of 132 SMs at 1.4 percent under base.
2. **Fewer warps per SM at full SM count reads the same as fewer SMs.** 170 SMs at 8 warps (1,360 warps) and 43 SMs
at 32 warps (1,376 warps) give 2.063 and 2.053 microjoules on the same host: the warps in flight set the rate,
nothing in the occupancy sets the watts. One warp per SM (5,440 lanes) still holds 84 percent of the 5090's rate.
3. **Class v4's knee is 43 SMs by rate at stock and the full grid at the 1,300 MHz lock, and nothing is saved at
either.** Under 43 SMs the shadow is compute-bound at stock (PC 1: 36 SMs 88 percent, 28 SMs 69, 21 SMs 52, 16 SMs
39 of the rate); at 43 SMs the watts equal or exceed the base's. At the lock (PC 1, this file's job) the shadow
needs every SM: 134.2 MH/s at 302 W on the full grid, 125 at 85 SMs, 64 at 43 SMs (3.24 against 2.25 microjoules).
On the H100 the persistent shape itself loses 4 percent of the class v4 rate and the self-tune installs nothing.
PC 1's class v3 at stock agrees with the rented ladder at every rung (43 SMs 136.5 of 136.7 MH/s at 10 W under
base; 170 SMs x 8 warps 137.1 at 310.8 W, 3.5 percent under base, the best shape on that board).
4. **The residual is the core clock domain and the memory path on the GPU side, and the memory clock is the one
knob left after the core lock.** The decomposition probes (section 3) put the 5090's draw over idle at the hash
into: the resident SMs issuing nothing (the SM clock domain awake), the L2 and crossbar path per read, and the DRAM
path per read on top of the memory's own modelled 2.0 nJ; the memory-clock ladder on PC 1 at the 1,300 lock reads
the PHY's share directly. The honest floor per tier is the base row at stock within 2 percent, the core lock
(rank 1 of the research file) and the memory-clock lock behind it, and the fraction a chip cannot strip is the
memory side's own (section 4).
5. **What ships.** `--sm-sparse auto` on the worker (section 5): one NVRTC compile of the persistent shape, a ladder
from the SM count down, a bisection, the fewest blocks holding 99 percent of the ceiling installed, bit-exact or
nothing; the tuning file's `sm_sparse` and `sm_hold` per card. Measured: 15 s on the H100 (chose 127 of 132 SMs,
1.4 percent of watts), 24 s on the 4090 (chose 26 of 128, 1.3 percent), nothing installed on class v4 where the
shape loses rate. The design default is off; the tiers map to it (Efficiency on at 0.985, Balanced on at 0.995,
Maximum off) and Ember re-runs it on every pack flip because the tune is part of the pair's build.
## 1. The rows
Each rented card's table: one row per shape per pack, the sampler's watts, microjoules per hash and the edge against
the four chip rows. The 5090 hosts differ by board (power limit, idle, cooling), so the ladder is read as a percent of
each host's own base and the energy as a difference within the host; the across-host spread of the base row itself
(2.08 to 2.49 microjoules at 142 MH/s on class v3) is the rented-against-rented band the denominator lane also reads.
Class v4 on hosts c, d and f is power-capped (the board's limit at 450 or 475 W, the clock throttling to 2,770 to
2,810 MHz), so those class v4 rows are a cap reading, not a free-running one; PC 1 (452.8 W, no cap) and host e (533.6
W) are the free-running class v4 rows.
### RTX 5090, rented host c (Vast, Alberta; driver 610.57; the board's power limit 450 W of a 600 W default; idle 7 W)
knob pl=refused
knob lgc=refused
knob lmc=refused
card NVIDIAGeForceRTX5090 driver 610.57.04 power limit 450.00 W idle 7.1 W at 218.8 MHz SM, 478.6 MHz memory
**mx8-genesis** (mx8)
| Shape | Blocks x warps | MH/s | Watts | Watts over idle | Microjoules per hash | Edge: GDDR7 / HBM3 / SRAM / M5 Max | SM MHz | Temp | Check |
|---|---|---|---|---|---|---|---|---|---|
| base | 0 x 1 | 142.60 | 296.4 | 289.3 | 2.079 | 4.46x / 6.48x / 14.85x / 2.67x | 2880 | 52 | PASS |
| sp170-w32 | 170 x 32 | 142.14 (99.7%) | 296.9 | 289.8 | 2.089 | 4.48x / 6.51x / 14.92x / 2.68x | 2865 | 54 | PASS |
| sp170-w16 | 170 x 16 | 142.55 (100.0%) | 296.0 | 288.9 | 2.076 | 4.45x / 6.47x / 14.83x / 2.66x | 2865 | 57 | PASS |
| sp170-w8 | 170 x 8 | 142.41 (99.9%) | 293.8 | 286.7 | 2.063 | 4.43x / 6.43x / 14.74x / 2.64x | 2865 | 59 | PASS |
| sp170-w4 | 170 x 4 | 141.88 (99.5%) | 293.5 | 286.4 | 2.069 | 4.44x / 6.45x / 14.78x / 2.65x | 2865 | 59 | PASS |
| sp170-w2 | 170 x 2 | 139.31 (97.7%) | 288.7 | 281.6 | 2.072 | 4.45x / 6.45x / 14.80x / 2.66x | 2865 | 59 | PASS |
| sp170-w1 | 170 x 1 | 119.59 (83.9%) | 270.3 | 263.2 | 2.260 | 4.85x / 7.04x / 16.14x / 2.90x | 2865 | 59 | PASS |
| sp128-w32 | 128 x 32 | 142.60 (100.0%) | 303.4 | 296.3 | 2.128 | 4.57x / 6.63x / 15.20x / 2.73x | 2865 | 59 | PASS |
| sp96-w32 | 96 x 32 | 138.96 (97.4%) | 294.5 | 287.4 | 2.119 | 4.55x / 6.60x / 15.14x / 2.72x | 2865 | 59 | PASS |
| sp85-w32 | 85 x 32 | 142.42 (99.9%) | 296.0 | 288.9 | 2.078 | 4.46x / 6.47x / 14.84x / 2.66x | 2865 | 59 | PASS |
| sp64-w32 | 64 x 32 | 142.24 (99.7%) | 295.2 | 288.1 | 2.075 | 4.45x / 6.46x / 14.82x / 2.66x | 2865 | 59 | PASS |
| sp52-w32 | 52 x 32 | 136.01 (95.4%) | 288.8 | 281.7 | 2.123 | 4.56x / 6.61x / 15.16x / 2.72x | 2865 | 59 | PASS |
| sp43-w32 | 43 x 32 | 141.77 (99.4%) | 291.1 | 284.0 | 2.053 | 4.41x / 6.40x / 14.66x / 2.63x | 2865 | 59 | PASS |
| sp36-w32 | 36 x 32 | 141.38 (99.1%) | 290.2 | 283.1 | 2.053 | 4.41x / 6.40x / 14.66x / 2.63x | 2865 | 59 | PASS |
| sp28-w32 | 28 x 32 | 140.27 (98.4%) | 288.6 | 281.5 | 2.058 | 4.42x / 6.41x / 14.70x / 2.64x | 2865 | 59 | PASS |
| sp21-w32 | 21 x 32 | 137.81 (96.6%) | 288.1 | 281.0 | 2.091 | 4.49x / 6.51x / 14.94x / 2.68x | 2865 | 59 | PASS |
| sp16-w32 | 16 x 32 | 129.98 (91.2%) | 280.4 | 273.3 | 2.157 | 4.63x / 6.72x / 15.41x / 2.77x | 2865 | 58 | PASS |
| sp11-w32 | 11 x 32 | 100.88 (70.7%) | 255.5 | 248.4 | 2.533 | 5.44x / 7.89x / 18.09x / 3.25x | 2865 | 57 | PASS |
| sp43-w8 | 43 x 8 | 139.54 (97.9%) | 286.9 | 279.8 | 2.056 | 4.41x / 6.40x / 14.69x / 2.64x | 2865 | 58 | PASS |
| sp340-w16 | 340 x 16 | 142.57 (100.0%) | 303.7 | 296.6 | 2.130 | 4.57x / 6.64x / 15.21x / 2.73x | 2865 | 59 | PASS |
**mx8_sh256x27** (mx8+sh256x27)
| Shape | Blocks x warps | MH/s | Watts | Watts over idle | Microjoules per hash | Edge: GDDR7 / HBM3 / SRAM / M5 Max | SM MHz | Temp | Check |
|---|---|---|---|---|---|---|---|---|---|
| base | 0 x 1 | 142.55 | 450.0 | 442.9 | 3.157 | 6.77x / 9.83x / 22.55x / 4.05x | 2797 | 66 | PASS |
| sp170-w32 | 170 x 32 | 142.12 (99.7%) | 450.0 | 442.9 | 3.166 | 6.79x / 9.86x / 22.61x / 4.06x | 2810 | 64 | PASS |
| sp170-w16 | 170 x 16 | 142.36 (99.9%) | 450.0 | 442.9 | 3.161 | 6.78x / 9.85x / 22.58x / 4.05x | 2811 | 64 | PASS |
| sp170-w8 | 170 x 8 | 141.93 (99.6%) | 450.0 | 442.9 | 3.171 | 6.80x / 9.88x / 22.65x / 4.07x | 2796 | 64 | PASS |
| sp170-w4 | 170 x 4 | 139.72 (98.0%) | 450.0 | 442.9 | 3.221 | 6.91x / 10.03x / 23.01x / 4.13x | 2802 | 64 | PASS |
| sp170-w2 | 170 x 2 | 99.50 (69.8%) | 389.4 | 382.3 | 3.913 | 8.40x / 12.19x / 27.95x / 5.02x | 2865 | 62 | PASS |
| sp170-w1 | 170 x 1 | 55.28 (38.8%) | 287.7 | 280.6 | 5.204 | 11.17x / 16.21x / 37.17x / 6.67x | 2865 | 57 | PASS |
| sp128-w32 | 128 x 32 | 142.41 (99.9%) | 450.0 | 442.9 | 3.160 | 6.78x / 9.84x / 22.57x / 4.05x | 2823 | 62 | PASS |
| sp96-w32 | 96 x 32 | 139.18 (97.6%) | 450.0 | 442.9 | 3.233 | 6.94x / 10.07x / 23.09x / 4.14x | 2846 | 64 | PASS |
| sp85-w32 | 85 x 32 | 141.46 (99.2%) | 450.0 | 442.9 | 3.181 | 6.83x / 9.91x / 22.72x / 4.08x | 2833 | 64 | PASS |
| sp64-w32 | 64 x 32 | 136.58 (95.8%) | 450.4 | 443.3 | 3.298 | 7.08x / 10.27x / 23.56x / 4.23x | 2850 | 63 | PASS |
| sp52-w32 | 52 x 32 | 121.00 (84.9%) | 417.9 | 410.8 | 3.454 | 7.41x / 10.76x / 24.67x / 4.43x | 2873 | 62 | PASS |
| sp43-w32 | 43 x 32 | 124.16 (87.1%) | 422.7 | 415.6 | 3.404 | 7.30x / 10.60x / 24.31x / 4.36x | 2872 | 62 | PASS |
| sp36-w32 | 36 x 32 | 104.35 (73.2%) | 380.5 | 373.4 | 3.646 | 7.82x / 11.36x / 26.04x / 4.67x | 2877 | 61 | PASS |
| sp28-w32 | 28 x 32 | 81.35 (57.1%) | 334.2 | 327.1 | 4.108 | 8.82x / 12.80x / 29.34x / 5.27x | 2880 | 59 | PASS |
| sp21-w32 | 21 x 32 | 61.05 (42.8%) | 288.2 | 281.1 | 4.721 | 10.13x / 14.71x / 33.72x / 6.05x | 2878 | 57 | PASS |
| sp16-w32 | 16 x 32 | 46.51 (32.6%) | 252.1 | 245.0 | 5.420 | 11.63x / 16.88x / 38.71x / 6.95x | 2872 | 55 | PASS |
| sp11-w32 | 11 x 32 | 32.04 (22.5%) | 216.3 | 209.2 | 6.752 | 14.49x / 21.03x / 48.23x / 8.66x | 2880 | 54 | PASS |
| sp43-w8 | 43 x 8 | 87.18 (61.2%) | 345.2 | 338.1 | 3.960 | 8.50x / 12.34x / 28.29x / 5.08x | 2872 | 59 | PASS |
| sp340-w16 | 340 x 16 | 142.18 (99.7%) | 450.0 | 442.9 | 3.165 | 6.79x / 9.86x / 22.61x / 4.06x | 2800 | 65 | PASS |
The follow-up on host c (the memory-clock try, the first self-tune rows, the microbench) overlapped its own queue on the card (the launcher's wait keyed on a pid file written after it read it), so those rows are discarded; the self-tune was re-run alone on the idle card (idle 5.2 W, 1 MiB used) and these are its rows:
| Hold | Pack | Served shape | MH/s | Watts | Microjoules | Tune line |
|---|---|---|---|---|---|---|
| 0.99 | mx8-genesis | sp37-w32 | 141.272 | 286.5 | 2.028 | tune device NVIDIA_GeForce_RTX_5090 sms 170 installed base 142.575 ceiling 142.575 hold 0.990 rows 170=142.008 127=142.276 85=142.224 63=141.866 42=141.549 31=140.347 36=141.083 39=141.295 37=141.240 chosen sp37-w32 141.240 (99.1% of the ceiling, 37 of 170 SMs) 21816 ms |
| 0.99 | mx8_sh256x27 | sp82-w32 | 141.045 | 448.3 | 3.178 | tune device NVIDIA_GeForce_RTX_5090 sms 170 installed base 142.288 ceiling 142.288 hold 0.990 rows 170=141.986 127=141.787 85=141.302 63=135.712 74=140.204 79=140.561 82=141.046 80=140.855 chosen sp82-w32 141.046 (99.1% of the ceiling, 82 of 170 SMs) 19820 ms |
| 0.98 | mx8-genesis | sp27-w32 | 139.717 | 284.1 | 2.033 | tune device NVIDIA_GeForce_RTX_5090 sms 170 installed base 142.277 ceiling 142.277 hold 0.980 rows 170=141.940 127=142.336 85=142.125 63=142.024 42=141.710 31=140.447 21=137.555 26=139.300 28=139.939 27=139.557 chosen sp27-w32 139.557 (98.1% of the ceiling, 27 of 170 SMs) 24133 ms |
| 0.98 | mx8_sh256x27 | sp71-w32 | 140.082 | 446.1 | 3.185 | tune device NVIDIA_GeForce_RTX_5090 sms 170 installed base 142.534 ceiling 142.534 hold 0.980 rows 170=142.005 127=141.994 85=141.509 63=136.138 74=140.573 68=139.343 71=140.150 69=139.615 chosen sp71-w32 140.150 (98.3% of the ceiling, 71 of 170 SMs) 19850 ms |
### RTX 5090, rented host d (Vast, Quebec; driver 595.91; power limit 475 W)
knob pl=refused
knob lgc=refused
knob lmc=refused
card NVIDIAGeForceRTX5090 driver 595.91.07 power limit 475.00 W idle 27.4 W at 195.0 MHz SM, 405.0 MHz memory
**mx8-genesis** (mx8)
| Shape | Blocks x warps | MH/s | Watts | Watts over idle | Microjoules per hash | Edge: GDDR7 / HBM3 / SRAM / M5 Max | SM MHz | Temp | Check |
|---|---|---|---|---|---|---|---|---|---|
| base | 0 x 1 | 142.44 | 326.3 | 298.9 | 2.291 | 4.92x / 7.14x / 16.36x / 2.94x | 2887 | 50 | PASS |
| sp170-w32 | 170 x 32 | 141.88 (99.6%) | 327.5 | 300.1 | 2.308 | 4.95x / 7.19x / 16.49x / 2.96x | 2886 | 53 | PASS |
| sp128-w32 | 128 x 32 | 142.28 (99.9%) | 327.7 | 300.3 | 2.303 | 4.94x / 7.17x / 16.45x / 2.95x | 2872 | 55 | PASS |
| sp96-w32 | 96 x 32 | 138.83 (97.5%) | 323.4 | 296.0 | 2.330 | 5.00x / 7.26x / 16.64x / 2.99x | 2872 | 56 | PASS |
| sp85-w32 | 85 x 32 | 142.23 (99.9%) | 328.1 | 300.7 | 2.307 | 4.95x / 7.19x / 16.48x / 2.96x | 2872 | 57 | PASS |
| sp64-w32 | 64 x 32 | 142.03 (99.7%) | 329.0 | 301.6 | 2.316 | 4.97x / 7.21x / 16.54x / 2.97x | 2872 | 58 | PASS |
**mx8_sh256x27** (mx8+sh256x27)
| Shape | Blocks x warps | MH/s | Watts | Watts over idle | Microjoules per hash | Edge: GDDR7 / HBM3 / SRAM / M5 Max | SM MHz | Temp | Check |
|---|---|---|---|---|---|---|---|---|---|
| base | 0 x 1 | 142.36 | 475.0 | 447.6 | 3.337 | 7.16x / 10.40x / 23.84x / 4.28x | 2777 | 66 | PASS |
| sp170-w32 | 170 x 32 | 141.98 (99.7%) | 475.0 | 447.6 | 3.345 | 7.18x / 10.42x / 23.89x / 4.29x | 2767 | 68 | PASS |
| sp128-w32 | 128 x 32 | 142.22 (99.9%) | 475.0 | 447.6 | 3.340 | 7.17x / 10.40x / 23.86x / 4.28x | 2764 | 69 | PASS |
| sp96-w32 | 96 x 32 | 139.08 (97.7%) | 475.0 | 447.6 | 3.415 | 7.33x / 10.64x / 24.39x / 4.38x | 2787 | 69 | PASS |
| sp85-w32 | 85 x 32 | 141.27 (99.2%) | 475.0 | 447.6 | 3.362 | 7.21x / 10.47x / 24.01x / 4.31x | 2772 | 70 | PASS |
| sp64-w32 | 64 x 32 | 135.94 (95.5%) | 475.0 | 447.6 | 3.494 | 7.50x / 10.88x / 24.96x / 4.48x | 2803 | 70 | PASS |
### RTX 5090, rented host e (Vast, United Kingdom; driver 595.91)
knob pl=refused
knob lgc=refused
knob lmc=refused
card NVIDIAGeForceRTX5090 driver 595.91.07 power limit 575.00 W idle 11.7 W at 185.2 MHz SM, 445.5 MHz memory
**mx8-genesis** (mx8)
| Shape | Blocks x warps | MH/s | Watts | Watts over idle | Microjoules per hash | Edge: GDDR7 / HBM3 / SRAM / M5 Max | SM MHz | Temp | Check |
|---|---|---|---|---|---|---|---|---|---|
| base | 0 x 1 | 141.96 | 352.7 | 341.0 | 2.485 | 5.33x / 7.74x / 17.75x / 3.19x | 2917 | 56 | PASS |
| sp52-w32 | 52 x 32 | 135.85 (95.7%) | 332.0 | 320.3 | 2.444 | 5.24x / 7.61x / 17.46x / 3.13x | 2922 | 56 | PASS |
| sp43-w32 | 43 x 32 | 141.21 (99.5%) | 337.4 | 325.7 | 2.389 | 5.13x / 7.44x / 17.06x / 3.06x | 2917 | 57 | PASS |
| sp36-w32 | 36 x 32 | 140.88 (99.2%) | 336.9 | 325.2 | 2.391 | 5.13x / 7.45x / 17.08x / 3.07x | 2917 | 58 | PASS |
| sp28-w32 | 28 x 32 | 139.58 (98.3%) | 335.6 | 323.9 | 2.404 | 5.16x / 7.49x / 17.17x / 3.08x | 2917 | 58 | PASS |
| sp21-w32 | 21 x 32 | 137.23 (96.7%) | 334.9 | 323.2 | 2.440 | 5.24x / 7.60x / 17.43x / 3.13x | 2917 | 58 | PASS |
**mx8_sh256x27** (mx8+sh256x27)
| Shape | Blocks x warps | MH/s | Watts | Watts over idle | Microjoules per hash | Edge: GDDR7 / HBM3 / SRAM / M5 Max | SM MHz | Temp | Check |
|---|---|---|---|---|---|---|---|---|---|
| base | 0 x 1 | 141.90 | 533.6 | 521.9 | 3.760 | 8.07x / 11.71x / 26.86x / 4.82x | 2902 | 68 | PASS |
| sp52-w32 | 52 x 32 | 122.17 (86.1%) | 484.4 | 472.7 | 3.965 | 8.51x / 12.35x / 28.32x / 5.08x | 2903 | 68 | PASS |
| sp43-w32 | 43 x 32 | 125.11 (88.2%) | 491.8 | 480.1 | 3.931 | 8.44x / 12.25x / 28.08x / 5.04x | 2902 | 69 | PASS |
| sp36-w32 | 36 x 32 | 105.18 (74.1%) | 444.6 | 432.9 | 4.227 | 9.07x / 13.17x / 30.19x / 5.42x | 2902 | 68 | PASS |
| sp28-w32 | 28 x 32 | 81.73 (57.6%) | 389.2 | 377.5 | 4.762 | 10.22x / 14.83x / 34.01x / 6.11x | 2896 | 66 | PASS |
| sp21-w32 | 21 x 32 | 61.61 (43.4%) | 340.4 | 328.7 | 5.525 | 11.86x / 17.21x / 39.46x / 7.08x | 2902 | 63 | PASS |
### RTX 5090, rented host f (Vast, Beijing; driver 580.173; power limit 450 W)
knob pl=refused
knob lgc=refused
knob lmc=refused
card NVIDIAGeForceRTX5090 driver 580.173.02 power limit 450.00 W idle 29.8 W at 300.0 MHz SM, 405.0 MHz memory
**mx8-genesis** (mx8)
| Shape | Blocks x warps | MH/s | Watts | Watts over idle | Microjoules per hash | Edge: GDDR7 / HBM3 / SRAM / M5 Max | SM MHz | Temp | Check |
|---|---|---|---|---|---|---|---|---|---|
| base | 0 x 1 | 142.49 | 333.2 | 303.4 | 2.338 | 5.02x / 7.28x / 16.70x / 3.00x | 3028 | 47 | PASS |
| sp16-w32 | 16 x 32 | 130.53 (91.6%) | 309.8 | 280.0 | 2.373 | 5.09x / 7.39x / 16.95x / 3.04x | 3030 | 48 | PASS |
| sp11-w32 | 11 x 32 | 106.04 (74.4%) | 288.1 | 258.3 | 2.717 | 5.83x / 8.46x / 19.41x / 3.48x | 3030 | 48 | PASS |
| sp170-w8 | 170 x 8 | 142.32 (99.9%) | 322.8 | 293.0 | 2.268 | 4.87x / 7.07x / 16.20x / 2.91x | 3030 | 49 | PASS |
| sp170-w4 | 170 x 4 | 141.72 (99.5%) | 323.3 | 293.5 | 2.281 | 4.89x / 7.11x / 16.29x / 2.92x | 3030 | 50 | PASS |
| sp170-w2 | 170 x 2 | 139.28 (97.8%) | 320.6 | 290.8 | 2.302 | 4.94x / 7.17x / 16.44x / 2.95x | 3030 | 51 | PASS |
| sp43-w8 | 43 x 8 | 139.46 (97.9%) | 320.0 | 290.2 | 2.295 | 4.92x / 7.15x / 16.39x / 2.94x | 3030 | 52 | PASS |
**mx8_sh256x27** (mx8+sh256x27)
| Shape | Blocks x warps | MH/s | Watts | Watts over idle | Microjoules per hash | Edge: GDDR7 / HBM3 / SRAM / M5 Max | SM MHz | Temp | Check |
|---|---|---|---|---|---|---|---|---|---|
| base | 0 x 1 | 142.39 | 450.0 | 420.2 | 3.160 | 6.78x / 9.84x / 22.57x / 4.05x | 2882 | 58 | PASS |
| sp16-w32 | 16 x 32 | 48.94 (34.4%) | 298.0 | 268.2 | 6.090 | 13.07x / 18.97x / 43.50x / 7.81x | 3022 | 54 | PASS |
| sp11-w32 | 11 x 32 | 33.79 (23.7%) | 259.2 | 229.4 | 7.671 | 16.46x / 23.90x / 54.79x / 9.83x | 3037 | 52 | PASS |
| sp170-w8 | 170 x 8 | 141.83 (99.6%) | 450.0 | 420.2 | 3.173 | 6.81x / 9.88x / 22.66x / 4.07x | 2853 | 59 | PASS |
| sp170-w4 | 170 x 4 | 139.72 (98.1%) | 450.0 | 420.2 | 3.221 | 6.91x / 10.03x / 23.01x / 4.13x | 2854 | 60 | PASS |
| sp170-w2 | 170 x 2 | 102.45 (72.0%) | 443.5 | 413.7 | 4.329 | 9.29x / 13.49x / 30.92x / 5.55x | 3012 | 62 | PASS |
| sp43-w8 | 43 x 8 | 90.20 (63.3%) | 398.7 | 368.9 | 4.420 | 9.48x / 13.77x / 31.57x / 5.67x | 3022 | 60 | PASS |
### RTX 4090, rented (RunPod, 128 SMs, GDDR6X; driver 595.91; power limit 450 W)
knob pl=refused
knob lgc=refused
knob lmc=refused
card NVIDIAGeForceRTX4090 driver 595.91.07 power limit 450.00 W idle 34.7 W at 210.0 MHz SM, 405.0 MHz memory
**mx8-genesis** (mx8)
| Shape | Blocks x warps | MH/s | Watts | Watts over idle | Microjoules per hash | Edge: GDDR7 / HBM3 / SRAM / M5 Max | SM MHz | Temp | Check |
|---|---|---|---|---|---|---|---|---|---|
| base | 0 x 1 | 70.63 | 253.4 | 218.7 | 3.588 | 7.70x / 11.18x / 25.63x / 4.60x | 2732 | 39 | PASS |
| w4 | 0 x 4 | 70.62 (100.0%) | 254.9 | 220.2 | 3.609 | 7.74x / 11.24x / 25.78x / 4.63x | 2730 | 44 | PASS |
| w8 | 0 x 8 | 70.64 (100.0%) | 255.6 | 220.9 | 3.618 | 7.76x / 11.27x / 25.84x / 4.64x | 2721 | 47 | PASS |
| sp128-w32 | 128 x 32 | 70.64 (100.0%) | 255.6 | 220.9 | 3.618 | 7.76x / 11.27x / 25.84x / 4.64x | 2715 | 48 | PASS |
| sp256-w16 | 256 x 16 | 70.57 (99.9%) | 256.1 | 221.4 | 3.629 | 7.79x / 11.31x / 25.92x / 4.65x | 2715 | 48 | PASS |
| sp512-w8 | 512 x 8 | 70.60 (100.0%) | 256.0 | 221.3 | 3.626 | 7.78x / 11.30x / 25.90x / 4.65x | 2715 | 49 | PASS |
| sp128-w16 | 128 x 16 | 70.64 (100.0%) | 254.2 | 219.5 | 3.599 | 7.72x / 11.21x / 25.71x / 4.61x | 2715 | 49 | PASS |
| sp128-w8 | 128 x 8 | 70.58 (99.9%) | 252.0 | 217.3 | 3.570 | 7.66x / 11.12x / 25.50x / 4.58x | 2715 | 49 | PASS |
| sp128-w4 | 128 x 4 | 70.45 (99.7%) | 251.3 | 216.6 | 3.567 | 7.65x / 11.11x / 25.48x / 4.57x | 2715 | 48 | PASS |
| sp128-w2 | 128 x 2 | 70.17 (99.4%) | 250.6 | 215.9 | 3.571 | 7.66x / 11.12x / 25.51x / 4.58x | 2715 | 48 | PASS |
| sp128-w1 | 128 x 1 | 66.28 (93.8%) | 242.7 | 208.0 | 3.662 | 7.86x / 11.41x / 26.16x / 4.69x | 2715 | 47 | PASS |
| sp96-w32 | 96 x 32 | 70.61 (100.0%) | 253.7 | 219.0 | 3.593 | 7.71x / 11.19x / 25.66x / 4.61x | 2715 | 48 | PASS |
| sp64-w32 | 64 x 32 | 70.59 (100.0%) | 253.1 | 218.4 | 3.585 | 7.69x / 11.17x / 25.61x / 4.60x | 2715 | 48 | PASS |
| sp48-w32 | 48 x 32 | 70.50 (99.8%) | 252.2 | 217.5 | 3.578 | 7.68x / 11.15x / 25.56x / 4.59x | 2715 | 48 | PASS |
| sp32-w32 | 32 x 32 | 70.42 (99.7%) | 251.4 | 216.7 | 3.570 | 7.66x / 11.12x / 25.50x / 4.58x | 2715 | 48 | PASS |
| sp24-w32 | 24 x 32 | 67.15 (95.1%) | 247.1 | 212.4 | 3.680 | 7.90x / 11.46x / 26.29x / 4.72x | 2715 | 48 | PASS |
| sp16-w32 | 16 x 32 | 69.95 (99.0%) | 249.6 | 214.9 | 3.568 | 7.66x / 11.12x / 25.49x / 4.57x | 2715 | 47 | PASS |
| sp12-w32 | 12 x 32 | 68.69 (97.3%) | 246.5 | 211.8 | 3.589 | 7.70x / 11.18x / 25.64x / 4.60x | 2715 | 47 | PASS |
| sp8-w32 | 8 x 32 | 65.07 (92.1%) | 239.1 | 204.4 | 3.675 | 7.89x / 11.45x / 26.25x / 4.71x | 2715 | 46 | PASS |
| sp32-w8 | 32 x 8 | 70.19 (99.4%) | 248.9 | 214.2 | 3.546 | 7.61x / 11.05x / 25.33x / 4.55x | 2715 | 47 | PASS |
**mx8_sh256x27** (mx8+sh256x27)
| Shape | Blocks x warps | MH/s | Watts | Watts over idle | Microjoules per hash | Edge: GDDR7 / HBM3 / SRAM / M5 Max | SM MHz | Temp | Check |
|---|---|---|---|---|---|---|---|---|---|
| base | 0 x 1 | 70.63 | 353.5 | 318.8 | 5.005 | 10.74x / 15.59x / 35.75x / 6.42x | 2715 | 56 | PASS |
| w4 | 0 x 4 | 70.62 (100.0%) | 356.8 | 322.1 | 5.052 | 10.84x / 15.74x / 36.09x / 6.48x | 2715 | 58 | PASS |
| w8 | 0 x 8 | 70.63 (100.0%) | 357.6 | 322.9 | 5.063 | 10.86x / 15.77x / 36.16x / 6.49x | 2715 | 58 | PASS |
| sp128-w32 | 128 x 32 | 70.60 (100.0%) | 356.1 | 321.4 | 5.044 | 10.82x / 15.71x / 36.03x / 6.47x | 2715 | 59 | PASS |
| sp256-w16 | 256 x 16 | 70.58 (99.9%) | 356.9 | 322.2 | 5.057 | 10.85x / 15.75x / 36.12x / 6.48x | 2715 | 59 | PASS |
| sp512-w8 | 512 x 8 | 70.57 (99.9%) | 358.4 | 323.7 | 5.078 | 10.90x / 15.82x / 36.27x / 6.51x | 2715 | 59 | PASS |
| sp128-w16 | 128 x 16 | 70.54 (99.9%) | 355.6 | 320.9 | 5.041 | 10.82x / 15.70x / 36.01x / 6.46x | 2715 | 59 | PASS |
| sp128-w8 | 128 x 8 | 70.53 (99.9%) | 355.0 | 320.3 | 5.034 | 10.80x / 15.68x / 35.96x / 6.45x | 2715 | 59 | PASS |
| sp128-w4 | 128 x 4 | 70.30 (99.5%) | 354.4 | 319.7 | 5.041 | 10.82x / 15.70x / 36.01x / 6.46x | 2715 | 59 | PASS |
| sp128-w2 | 128 x 2 | 63.43 (89.8%) | 332.5 | 297.8 | 5.242 | 11.25x / 16.33x / 37.44x / 6.72x | 2715 | 57 | PASS |
| sp128-w1 | 128 x 1 | 40.51 (57.4%) | 267.5 | 232.8 | 6.603 | 14.17x / 20.57x / 47.16x / 8.47x | 2715 | 54 | PASS |
| sp96-w32 | 96 x 32 | 70.57 (99.9%) | 350.9 | 316.2 | 4.972 | 10.67x / 15.49x / 35.51x / 6.37x | 2715 | 58 | PASS |
| sp64-w32 | 64 x 32 | 70.57 (99.9%) | 349.7 | 315.0 | 4.955 | 10.63x / 15.44x / 35.39x / 6.35x | 2715 | 59 | PASS |
| sp48-w32 | 48 x 32 | 69.10 (97.8%) | 345.1 | 310.4 | 4.994 | 10.72x / 15.56x / 35.67x / 6.40x | 2715 | 59 | PASS |
| sp32-w32 | 32 x 32 | 68.22 (96.6%) | 341.4 | 306.7 | 5.004 | 10.74x / 15.59x / 35.74x / 6.42x | 2715 | 58 | PASS |
| sp24-w32 | 24 x 32 | 66.93 (94.8%) | 336.6 | 301.9 | 5.029 | 10.79x / 15.67x / 35.92x / 6.45x | 2715 | 58 | PASS |
| sp16-w32 | 16 x 32 | 44.84 (63.5%) | 276.4 | 241.7 | 6.163 | 13.23x / 19.20x / 44.02x / 7.90x | 2715 | 54 | PASS |
| sp12-w32 | 12 x 32 | 33.66 (47.7%) | 242.9 | 208.2 | 7.216 | 15.48x / 22.48x / 51.54x / 9.25x | 2715 | 51 | PASS |
| sp8-w32 | 8 x 32 | 22.46 (31.8%) | 208.0 | 173.3 | 9.261 | 19.87x / 28.85x / 66.15x / 11.87x | 2715 | 48 | PASS |
| sp32-w8 | 32 x 8 | 58.36 (82.6%) | 311.3 | 276.6 | 5.334 | 11.45x / 16.62x / 38.10x / 6.84x | 2715 | 54 | PASS |
**follow-up, 4090**
| Tag | Pack | Served shape | MH/s | Watts | Microjoules | SM MHz | Mem MHz | Check | Tune line |
|---|---|---|---|---|---|---|---|---|---|
RESULT memclocks label=4090 lmc=refused
| tune0.99 | mx8-genesis | sp26-w32 (26 x 32) | 70.15 | 250.2 | 3.567 | 2715 | 10501 | PASS | RESULT sparse tune device NVIDIA_GeForce_RTX_4090 sms 128 installed base 70.632 ceiling 70.632 hold 0.990 rows 128=70.609 96=70.616 64=70.590 48=70.524 32=70.476 24=67.148 28=70.377 26=70.143 25=69.726 chosen sp26-w32 70.143 (99.3% of the ceiling, 26 of 128 SMs) 24485 ms |
| tune0.99 | mx8_sh256x27 | sp61-w32 (61 x 32) | 70.42 | 346.9 | 4.926 | 2715 | 10501 | PASS | RESULT sparse tune device NVIDIA_GeForce_RTX_4090 sms 128 installed base 70.624 ceiling 70.627 hold 0.990 rows 128=70.627 96=70.574 64=70.573 48=69.092 56=67.021 60=69.890 62=70.459 61=70.423 chosen sp61-w32 70.423 (99.7% of the ceiling, 61 of 128 SMs) 21979 ms |
| tune0.98 | mx8-genesis | sp25-w32 (25 x 32) | 69.73 | 250.3 | 3.590 | 2715 | 10501 | PASS | RESULT sparse tune device NVIDIA_GeForce_RTX_4090 sms 128 installed base 70.636 ceiling 70.636 hold 0.980 rows 128=70.622 96=70.618 64=70.574 48=70.516 32=70.472 24=67.159 28=70.391 26=70.159 25=69.728 chosen sp25-w32 69.728 (98.7% of the ceiling, 25 of 128 SMs) 24483 ms |
| tune0.98 | mx8_sh256x27 | sp59-w32 (59 x 32) | 70.23 | 345.9 | 4.925 | 2715 | 10501 | PASS | RESULT sparse tune device NVIDIA_GeForce_RTX_4090 sms 128 installed base 70.619 ceiling 70.619 hold 0.980 rows 128=70.619 96=70.581 64=70.564 48=69.094 56=67.027 60=69.901 58=69.197 59=70.270 chosen sp59-w32 70.270 (99.5% of the ceiling, 59 of 128 SMs) 22034 ms |
| v5 | v5-genesis | ( x ) | 69.91 | 360.1 | 5.151 | 2715 | 10501 | PASS | |
| v5 | v4-genesis | ( x ) | 69.89 | 360.0 | 5.151 | 2715 | 10501 | PASS | |
| v5 | v4-genesis | base (0 x 1) | 69.91 | 360.6 | 5.158 | 2715 | 10501 | PASS | |
RESULT after-micro label=4090 watts=134.5 RESULT microbench probe=sleep status=ok unit="none (the SM-resident floor: full occupancy, __nanosleep, no issue)" ops_per_step=0 lanes=196608 regs=11 blocks_per_sm=6 steps=2000 launches=14056 launch_ms=2.1 seconds=30.0 start_utc=2026-10-08T12:32:09Z end_utc=2026-10-08T12:32:39Z G_steps_s=184.227 G_ops_s=0.000 checksum=f4a2875f29883636
RESULT after-micro label=4090 watts=447.1 RESULT microbench probe=int_arx status=ok unit="int32 add, xor or rotate (4 independent chains, 3 ops each per step)" ops_per_step=12 lanes=196608 regs=12 blocks_per_sm=6 steps=16384 launches=20066 launch_ms=1.5 seconds=30.0 start_utc=2026-10-08T12:32:39Z end_utc=2026-10-08T12:33:09Z G_steps_s=2154.515 G_ops_s=25854.179 checksum=e8e10dc19924d864
RESULT after-micro label=4090 watts=268.4 RESULT microbench probe=dram_chase_1g status=ok unit="dependent random 4-byte read in a 1 GiB table (the hash's own pattern, the control)" ops_per_step=1 lanes=196608 regs=16 blocks_per_sm=6 steps=512 launches=2795 launch_ms=10.7 seconds=30.0 start_utc=2026-10-08T12:33:09Z end_utc=2026-10-08T12:33:39Z G_steps_s=9.376 G_ops_s=9.376 checksum=7e9ab598fe7052e5
RESULT after-idle label=4090 watts=65.7 sm_mhz=536.7 mem_mhz=3659.4
### H100 80 GB HBM3, rented (RunPod, 132 SMs; driver 580.126; power limit 700 W)
knob pl=refused
knob lgc=refused
knob lmc=allowed
card NVIDIAH10080GBHBM3 driver 580.126.09 power limit 700.00 W idle 71.3 W at 345.0 MHz SM, 2619.0 MHz memory
**mx8-genesis** (mx8)
| Shape | Blocks x warps | MH/s | Watts | Watts over idle | Microjoules per hash | Edge: GDDR7 / HBM3 / SRAM / M5 Max | SM MHz | Temp | Check |
|---|---|---|---|---|---|---|---|---|---|
| base | 0 x 1 | 254.63 | 450.4 | 379.1 | 1.769 | 3.80x / 5.51x / 12.64x / 2.27x | 1980 | 44 | PASS |
| w4 | 0 x 4 | 254.35 (99.9%) | 454.2 | 382.9 | 1.786 | 3.83x / 5.56x / 12.76x / 2.29x | 1980 | 46 | PASS |
| w8 | 0 x 8 | 254.52 (100.0%) | 457.2 | 385.9 | 1.796 | 3.85x / 5.60x / 12.83x / 2.30x | 1980 | 50 | PASS |
| sp132-w32 | 132 x 32 | 253.98 (99.7%) | 453.4 | 382.1 | 1.785 | 3.83x / 5.56x / 12.75x / 2.29x | 1980 | 52 | PASS |
| sp264-w16 | 264 x 16 | 254.20 (99.8%) | 457.4 | 386.1 | 1.799 | 3.86x / 5.60x / 12.85x / 2.31x | 1980 | 54 | PASS |
| sp528-w8 | 528 x 8 | 254.20 (99.8%) | 461.5 | 390.2 | 1.816 | 3.90x / 5.66x / 12.97x / 2.33x | 1980 | 55 | PASS |
| sp132-w16 | 132 x 16 | 253.94 (99.7%) | 454.1 | 382.8 | 1.788 | 3.84x / 5.57x / 12.77x / 2.29x | 1980 | 56 | PASS |
| sp132-w8 | 132 x 8 | 252.53 (99.2%) | 454.7 | 383.4 | 1.801 | 3.86x / 5.61x / 12.86x / 2.31x | 1980 | 56 | PASS |
| sp132-w4 | 132 x 4 | 237.53 (93.3%) | 430.1 | 358.8 | 1.811 | 3.89x / 5.64x / 12.94x / 2.32x | 1980 | 56 | PASS |
| sp132-w2 | 132 x 2 | 178.50 (70.1%) | | | | | | | PASS |
| sp132-w1 | 132 x 1 | 105.25 (41.3%) | 277.6 | 206.3 | 2.637 | 5.66x / 8.21x / 18.84x / 3.38x | 1980 | 49 | PASS |
| sp99-w32 | 99 x 32 | 212.70 (83.5%) | 402.8 | 331.5 | 1.894 | 4.06x / 5.90x / 13.53x / 2.43x | 1980 | 50 | PASS |
| sp66-w32 | 66 x 32 | 189.20 (74.3%) | 372.9 | 301.6 | 1.971 | 4.23x / 6.14x / 14.08x / 2.53x | 1980 | 48 | PASS |
| sp44-w32 | 44 x 32 | 150.11 (58.9%) | 323.9 | 252.6 | 2.158 | 4.63x / 6.72x / 15.41x / 2.77x | 1980 | 46 | PASS |
| sp33-w32 | 33 x 32 | 123.41 (48.5%) | 291.0 | 219.7 | 2.358 | 5.06x / 7.35x / 16.84x / 3.02x | 1980 | 44 | PASS |
| sp24-w32 | 24 x 32 | 89.90 (35.3%) | 250.2 | 178.9 | 2.783 | 5.97x / 8.67x / 19.88x / 3.57x | 1980 | 42 | PASS |
| sp17-w32 | 17 x 32 | 63.66 (25.0%) | 219.1 | 147.8 | 3.442 | 7.39x / 10.72x / 24.59x / 4.41x | 1980 | 41 | PASS |
| sp12-w32 | 12 x 32 | 55.38 (21.7%) | 210.8 | 139.5 | 3.806 | 8.17x / 11.86x / 27.19x / 4.88x | 1980 | 40 | PASS |
| sp8-w32 | 8 x 32 | 36.93 (14.5%) | 189.3 | 118.0 | 5.126 | 11.00x / 15.97x / 36.61x / 6.57x | 1980 | 40 | PASS |
| sp33-w8 | 33 x 8 | 123.50 (48.5%) | 293.2 | 221.9 | 2.374 | 5.09x / 7.40x / 16.96x / 3.04x | 1980 | 47 | PASS |
**mx8_sh256x27** (mx8+sh256x27)
| Shape | Blocks x warps | MH/s | Watts | Watts over idle | Microjoules per hash | Edge: GDDR7 / HBM3 / SRAM / M5 Max | SM MHz | Temp | Check |
|---|---|---|---|---|---|---|---|---|---|
| base | 0 x 1 | 251.90 | 699.4 | 628.1 | 2.776 | 5.96x / 8.65x / 19.83x / 3.56x | 1830 | 66 | PASS |
| w4 | 0 x 4 | 250.56 (99.5%) | 698.5 | 627.2 | 2.788 | 5.98x / 8.69x / 19.91x / 3.57x | 1748 | 69 | PASS |
| w8 | 0 x 8 | 249.31 (99.0%) | 697.6 | 626.3 | 2.798 | 6.00x / 8.72x / 19.99x / 3.59x | 1734 | 70 | PASS |
| sp132-w32 | 132 x 32 | 242.15 (96.1%) | 696.7 | 625.4 | 2.877 | 6.17x / 8.96x / 20.55x / 3.69x | 1744 | 72 | PASS |
| sp264-w16 | 264 x 16 | 237.66 (94.3%) | 698.5 | 627.2 | 2.939 | 6.31x / 9.16x / 20.99x / 3.77x | 1795 | 71 | PASS |
| sp528-w8 | 528 x 8 | 231.67 (92.0%) | 695.7 | 624.4 | 3.003 | 6.44x / 9.36x / 21.45x / 3.85x | 1768 | 69 | PASS |
| sp132-w16 | 132 x 16 | 226.18 (89.8%) | 699.4 | 628.1 | 3.092 | 6.64x / 9.63x / 22.09x / 3.96x | 1857 | 69 | PASS |
| sp132-w8 | 132 x 8 | 173.30 (68.8%) | 630.0 | 558.7 | 3.635 | 7.80x / 11.32x / 25.96x / 4.66x | 1980 | 66 | PASS |
| sp132-w4 | 132 x 4 | 108.07 (42.9%) | 452.5 | 381.2 | 4.187 | 8.98x / 13.04x / 29.91x / 5.37x | 1980 | 57 | PASS |
| sp132-w2 | 132 x 2 | 54.90 (21.8%) | 301.3 | 230.0 | 5.488 | 11.78x / 17.10x / 39.20x / 7.04x | 1980 | 49 | PASS |
| sp132-w1 | 132 x 1 | 29.45 (11.7%) | 226.4 | 155.1 | 7.688 | 16.50x / 23.95x / 54.91x / 9.86x | 1980 | 44 | PASS |
| sp99-w32 | 99 x 32 | 206.11 (81.8%) | 697.2 | 625.9 | 3.383 | 7.26x / 10.54x / 24.16x / 4.34x | 1967 | 63 | PASS |
| sp66-w32 | 66 x 32 | 138.62 (55.0%) | 520.4 | 449.1 | 3.754 | 8.06x / 11.69x / 26.81x / 4.81x | 1980 | 57 | PASS |
| sp44-w32 | 44 x 32 | 92.59 (36.8%) | 392.6 | 321.3 | 4.240 | 9.10x / 13.21x / 30.29x / 5.44x | 1980 | 52 | PASS |
| sp33-w32 | 33 x 32 | 69.57 (27.6%) | 330.5 | 259.2 | 4.751 | 10.20x / 14.80x / 33.94x / 6.09x | 1980 | 49 | PASS |
| sp24-w32 | 24 x 32 | 50.64 (20.1%) | 279.1 | 207.8 | 5.511 | 11.83x / 17.17x / 39.36x / 7.07x | 1980 | 46 | PASS |
| sp17-w32 | 17 x 32 | 35.89 (14.2%) | 238.0 | 166.7 | 6.631 | 14.23x / 20.66x / 47.36x / 8.50x | 1980 | 43 | PASS |
| sp12-w32 | 12 x 32 | 25.34 (10.1%) | 207.5 | 136.2 | 8.190 | 17.58x / 25.51x / 58.50x / 10.50x | 1980 | 41 | PASS |
| sp8-w32 | 8 x 32 | 16.90 (6.7%) | 182.5 | 111.2 | 10.798 | 23.17x / 33.64x / 77.13x / 13.84x | 1980 | 39 | PASS |
| sp33-w8 | 33 x 8 | 45.06 (17.9%) | 262.6 | 191.3 | 5.827 | 12.50x / 18.15x / 41.62x / 7.47x | 1980 | 43 | PASS |
**follow-up, h100**
| Tag | Pack | Served shape | MH/s | Watts | Microjoules | SM MHz | Mem MHz | Check | Tune line |
|---|---|---|---|---|---|---|---|---|---|
RESULT memclocks label=h100 supported=[2619 1593 ]
| mem2619 | mx8-genesis | base (0 x 1) | 254.84 | 454.6 | 1.784 | 1980 | 2619 | PASS | |
| mem2619 | mx8_sh256x27 | base (0 x 1) | 253.00 | 699.4 | 2.764 | 1716 | 2619 | PASS | |
| mem1593 | mx8-genesis | base (0 x 1) | 254.57 | 458.8 | 1.802 | 1980 | 2619 | PASS | |
| mem1593 | mx8_sh256x27 | base (0 x 1) | 252.77 | 698.4 | 2.763 | 1694 | 2619 | PASS | |
| tune0.99 | mx8-genesis | sp127-w32 (127 x 32) | 253.19 | 441.6 | 1.744 | 1980 | 2619 | PASS | RESULT sparse tune device NVIDIA_H100_80GB_HBM3 sms 132 installed base 254.458 ceiling 254.458 hold 0.990 rows 132=254.076 99=212.879 115=230.328 123=244.690 127=253.179 125=248.878 chosen sp127-w32 253.179 (99.5% of the ceiling, 127 of 132 SMs) 15165 ms |
| tune0.99 | mx8_sh256x27 | base (0 x 1) | 252.67 | 692.7 | 2.742 | 1752 | 2619 | PASS | RESULT sparse tune device NVIDIA_H100_80GB_HBM3 sms 132 installed base 247.311 ceiling 247.311 hold 0.990 rows 132=242.003 99=205.751 chosen none (no sparse shape held; the installed kernel stays) 6557 ms |
| tune0.98 | mx8-genesis | sp127-w32 (127 x 32) | 253.35 | 451.1 | 1.781 | 1980 | 2619 | PASS | RESULT sparse tune device NVIDIA_H100_80GB_HBM3 sms 132 installed base 254.909 ceiling 254.909 hold 0.980 rows 132=254.394 99=212.934 115=230.633 123=244.933 127=252.939 125=249.108 chosen sp127-w32 252.939 (99.2% of the ceiling, 127 of 132 SMs) 15153 ms |
| tune0.98 | mx8_sh256x27 | base (0 x 1) | 252.17 | 687.3 | 2.726 | 1782 | 2619 | PASS | RESULT sparse tune device NVIDIA_H100_80GB_HBM3 sms 132 installed base 247.177 ceiling 247.177 hold 0.980 rows 132=241.720 99=204.596 chosen none (no sparse shape held; the installed kernel stays) 6572 ms |
| v5 | v5-genesis | ( x ) | 250.24 | 698.8 | 2.793 | 1674 | 2619 | PASS | |
| v5 | v4-genesis | ( x ) | 250.59 | 699.7 | 2.792 | 1732 | 2619 | PASS | |
| v5 | v4-genesis | base (0 x 1) | 250.58 | 699.6 | 2.792 | 1755 | 2619 | PASS | |
RESULT after-micro label=h100 watts=136.6 RESULT microbench probe=sleep status=ok unit="none (the SM-resident floor: full occupancy, __nanosleep, no issue)" ops_per_step=0 lanes=270336 regs=11 blocks_per_sm=8 steps=2000 launches=13740 launch_ms=2.1 seconds=30.0 start_utc=2026-10-08T12:16:17Z end_utc=2026-10-08T12:16:47Z G_steps_s=247.619 G_ops_s=0.000 checksum=8b671be935472947
RESULT after-micro label=h100 watts=437.9 RESULT microbench probe=int_arx status=ok unit="int32 add, xor or rotate (4 independent chains, 3 ops each per step)" ops_per_step=12 lanes=270336 regs=14 blocks_per_sm=8 steps=16384 launches=11899 launch_ms=2.4 seconds=30.0 start_utc=2026-10-08T12:16:47Z end_utc=2026-10-08T12:17:17Z G_steps_s=1756.760 G_ops_s=21081.115 checksum=fcb635c03d37ed2a
RESULT after-micro label=h100 watts=450.3 RESULT microbench probe=dram_chase_1g status=ok unit="dependent random 4-byte read in a 1 GiB table (the hash's own pattern, the control)" ops_per_step=1 lanes=270336 regs=19 blocks_per_sm=8 steps=512 launches=6982 launch_ms=4.2 seconds=30.0 start_utc=2026-10-08T12:17:17Z end_utc=2026-10-08T12:17:47Z G_steps_s=32.213 G_ops_s=32.213 checksum=7623c6b86570e4c
RESULT after-idle label=h100 watts=80.0 sm_mhz=350.6 mem_mhz=2619.0
### PC 1, the RTX 5090 alone, the hash lane's job `run-ca4-pc1-floorsm-5090-20261008` (the ca4sparse5 exe, unlocked and at the 1,300 MHz lock through the Power Helper)
The floorsm ladder
| Pack | State | Shape | MH/s | W | Microjoules | SM MHz | Mem MHz | Temp max | Check |
|---|---|---|---|---|---|---|---|---|---|
| v4-devnet-epoch0 | unlocked | base (0) | 137.164 | 452.8 | 3.301 | 2865 | 13801 | 62 | PASS |
| v4-devnet-epoch0 | unlocked | sp170-w32 (170) | 136.407 | 462.6 | 3.391 | 2842 | 13801 | 67 | PASS |
| v4-devnet-epoch0 | unlocked | sp170-w16 (170) | 137.12 | 480.3 | 3.503 | 2842 | 13801 | 72 | PASS |
| v4-devnet-epoch0 | unlocked | sp170-w8 (170) | 137.035 | 482.9 | 3.524 | 2827.6 | 13801 | 74 | PASS |
| v4-devnet-epoch0 | unlocked | sp170-w4 (170) | 134.941 | 483.9 | 3.586 | 2827 | 13801 | 75 | PASS |
| v4-devnet-epoch0 | unlocked | sp170-w2 (170) | 98.779 | 409.6 | 4.147 | 2835 | 13801 | 73 | PASS |
| v4-devnet-epoch0 | unlocked | sp128-w32 (128) | 136.422 | 476.2 | 3.491 | 2835 | 13801 | 74 | PASS |
| v4-devnet-epoch0 | unlocked | sp96-w32 (96) | 134.373 | 470.6 | 3.502 | 2835 | 13801 | 75 | PASS |
| v4-devnet-epoch0 | unlocked | sp85-w32 (85) | 136.278 | 474.8 | 3.484 | 2835 | 13801 | 76 | PASS |
| v4-devnet-epoch0 | unlocked | sp64-w32 (64) | 136.056 | 474.7 | 3.489 | 2835 | 13801 | 75 | PASS |
| v4-devnet-epoch0 | unlocked | sp52-w32 (52) | 128.568 | 459.9 | 3.577 | 2842 | 13801 | 75 | PASS |
| v4-devnet-epoch0 | unlocked | sp43-w32 (43) | 134.477 | 470 | 3.495 | 2842 | 13801 | 75 | PASS |
| v4-devnet-epoch0 | unlocked | sp36-w32 (36) | 120.347 | 440.9 | 3.664 | 2842 | 13801 | 74 | PASS |
| v4-devnet-epoch0 | unlocked | sp32-w32 (32) | 107.265 | 413.1 | 3.851 | 2850 | 13801 | 73 | PASS |
| v4-devnet-epoch0 | unlocked | sp28-w32 (28) | 94.364 | 384.2 | 4.071 | 2857 | 13801 | 71 | PASS |
| v4-devnet-epoch0 | unlocked | sp24-w32 (24) | 80.823 | 353.8 | 4.377 | 2850 | 13801 | 69 | PASS |
| v4-devnet-epoch0 | unlocked | sp21-w32 (21) | 70.735 | 327.2 | 4.626 | 2850 | 13801 | 66 | PASS |
| v4-devnet-epoch0 | unlocked | sp16-w32 (16) | 53.985 | 290.9 | 5.389 | 2858.3 | 13801 | 64 | PASS |
| v4-devnet-epoch0 | unlocked | sp11-w32 (11) | 37.34 | 250.9 | 6.719 | 2872 | 13801 | 60 | PASS |
| v4-devnet-epoch0 | unlocked | sp43-w8 (43) | 89.595 | 362.8 | 4.049 | 2855.9 | 13801 | 65 | PASS |
| mx8-devnet-epoch0 | unlocked | base (0) | 136.721 | 320.9 | 2.347 | 2850 | 13801 | 63 | PASS |
| mx8-devnet-epoch0 | unlocked | sp170-w32 (170) | 136.166 | 319.1 | 2.343 | 2850 | 13801 | 63 | PASS |
| mx8-devnet-epoch0 | unlocked | sp170-w16 (170) | 136.884 | 316.8 | 2.314 | 2850 | 13801 | 63 | PASS |
| mx8-devnet-epoch0 | unlocked | sp170-w8 (170) | 137.149 | 310.8 | 2.266 | 2850 | 13801 | 63 | PASS |
| mx8-devnet-epoch0 | unlocked | sp170-w4 (170) | 136.904 | 310.9 | 2.271 | 2865 | 13801 | 63 | PASS |
| mx8-devnet-epoch0 | unlocked | sp170-w2 (170) | 135.705 | 309.9 | 2.284 | 2865 | 13801 | 62 | PASS |
| mx8-devnet-epoch0 | unlocked | sp128-w32 (128) | 136.627 | 313.4 | 2.294 | 2865 | 13801 | 62 | PASS |
| mx8-devnet-epoch0 | unlocked | sp96-w32 (96) | 134.635 | 309.9 | 2.302 | 2865 | 13801 | 62 | PASS |
| mx8-devnet-epoch0 | unlocked | sp85-w32 (85) | 136.758 | 311.6 | 2.278 | 2865 | 13801 | 62 | PASS |
| mx8-devnet-epoch0 | unlocked | sp64-w32 (64) | 136.733 | 311.3 | 2.277 | 2865 | 13801 | 62 | PASS |
| mx8-devnet-epoch0 | unlocked | sp52-w32 (52) | 132.782 | 307.2 | 2.314 | 2865 | 13801 | 62 | PASS |
| mx8-devnet-epoch0 | unlocked | sp43-w32 (43) | 136.463 | 310.6 | 2.276 | 2865 | 13801 | 61 | PASS |
| mx8-devnet-epoch0 | unlocked | sp36-w32 (36) | 136.046 | 309.6 | 2.276 | 2865 | 13801 | 61 | PASS |
| mx8-devnet-epoch0 | unlocked | sp32-w32 (32) | 135.686 | 309.4 | 2.280 | 2865 | 13801 | 61 | PASS |
| mx8-devnet-epoch0 | unlocked | sp28-w32 (28) | 135.201 | 308.6 | 2.283 | 2865 | 13801 | 61 | PASS |
| mx8-devnet-epoch0 | unlocked | sp24-w32 (24) | 133.819 | 307 | 2.294 | 2865 | 13801 | 61 | PASS |
| mx8-devnet-epoch0 | unlocked | sp21-w32 (21) | 132.826 | 305.6 | 2.301 | 2865 | 13801 | 61 | PASS |
| mx8-devnet-epoch0 | unlocked | sp16-w32 (16) | 125.545 | 294.4 | 2.345 | 2865 | 13801 | 61 | PASS |
| mx8-devnet-epoch0 | unlocked | sp11-w32 (11) | 100.111 | 275.1 | 2.748 | 2865.2 | 13801 | 60 | PASS |
| mx8-devnet-epoch0 | unlocked | sp43-w8 (43) | 135.989 | 306.2 | 2.252 | 2865 | 13801 | 61 | PASS |
| v4-devnet-epoch0 | 1300 | base (0) | 134.234 | 302 | 2.250 | 1290 | 13801 | 55 | PASS |
| v4-devnet-epoch0 | 1300 | sp170-w32 (170) | 128.882 | 298.1 | 2.313 | 1290 | 13801 | 59 | PASS |
| v4-devnet-epoch0 | 1300 | sp170-w16 (170) | 130.496 | 302.4 | 2.317 | 1290 | 13801 | 61 | PASS |
| v4-devnet-epoch0 | 1300 | sp170-w8 (170) | 131.723 | 303.7 | 2.306 | 1290 | 13801 | 62 | PASS |
| v4-devnet-epoch0 | 1300 | sp170-w4 (170) | 101.305 | 267.2 | 2.638 | 1290 | 13801 | 60 | PASS |
| v4-devnet-epoch0 | 1300 | sp170-w2 (170) | 54.393 | 197.9 | 3.638 | 1290 | 13801 | 57 | PASS |
| v4-devnet-epoch0 | 1300 | sp128-w32 (128) | 130.252 | 299 | 2.296 | 1290 | 13801 | 59 | PASS |
| v4-devnet-epoch0 | 1300 | sp96-w32 (96) | 120.933 | 286.1 | 2.366 | 1290 | 13801 | 60 | PASS |
| v4-devnet-epoch0 | 1300 | sp85-w32 (85) | 125.221 | 292.8 | 2.338 | 1290 | 13801 | 61 | PASS |
| v4-devnet-epoch0 | 1300 | sp64-w32 (64) | 95.167 | 249.9 | 2.626 | 1290 | 13801 | 59 | PASS |
| v4-devnet-epoch0 | 1300 | sp52-w32 (52) | 77.801 | 228.9 | 2.942 | 1290 | 13801 | 57 | PASS |
| v4-devnet-epoch0 | 1300 | sp43-w32 (43) | 64.343 | 208.5 | 3.240 | 1290 | 13801 | 55 | PASS |
| v4-devnet-epoch0 | 1300 | sp36-w32 (36) | 53.964 | 185.3 | 3.434 | 1290 | 13801 | 53 | PASS |
| v4-devnet-epoch0 | 1300 | sp32-w32 (32) | 47.978 | 174.7 | 3.641 | 1290 | 13801 | 51 | PASS |
| v4-devnet-epoch0 | 1300 | sp28-w32 (28) | 41.985 | 170.9 | 4.071 | 1290 | 13801 | 50 | PASS |
| v4-devnet-epoch0 | 1300 | sp24-w32 (24) | 35.981 | 158.5 | 4.405 | 1290 | 13801 | 49 | PASS |
| v4-devnet-epoch0 | 1300 | sp21-w32 (21) | 31.455 | 155 | 4.928 | 1290 | 13801 | 48 | PASS |
| v4-devnet-epoch0 | 1300 | sp16-w32 (16) | 24.07 | 137.3 | 5.704 | 1290 | 13801 | 46 | PASS |
| v4-devnet-epoch0 | 1300 | sp11-w32 (11) | 16.551 | 115.1 | 6.954 | 1290 | 13801 | 44 | PASS |
| v4-devnet-epoch0 | 1300 | sp43-w8 (43) | 45.592 | 173.4 | 3.803 | 1290 | 13801 | 46 | PASS |
| mx8-devnet-epoch0 | 1300 | base (0) | 134.076 | 213 | 1.589 | 1290 | 13801 | 48 | PASS |
| mx8-devnet-epoch0 | 1300 | sp170-w32 (170) | 129.08 | 208.9 | 1.618 | 1290 | 13801 | 49 | PASS |
| mx8-devnet-epoch0 | 1300 | sp170-w16 (170) | 130.441 | 209.7 | 1.608 | 1290 | 13801 | 51 | PASS |
| mx8-devnet-epoch0 | 1300 | sp170-w8 (170) | 130.788 | 209.7 | 1.603 | 1290 | 13801 | 51 | PASS |
| mx8-devnet-epoch0 | 1300 | sp170-w4 (170) | 130.789 | 210.1 | 1.606 | 1290 | 13801 | 52 | PASS |
| mx8-devnet-epoch0 | 1300 | sp170-w2 (170) | 130.278 | 210.4 | 1.615 | 1290 | 13801 | 52 | PASS |
| mx8-devnet-epoch0 | 1300 | sp128-w32 (128) | 132.634 | 213.6 | 1.610 | 1290 | 13801 | 53 | PASS |
| mx8-devnet-epoch0 | 1300 | sp96-w32 (96) | 120.795 | 205.2 | 1.699 | 1290 | 13801 | 52 | PASS |
| mx8-devnet-epoch0 | 1300 | sp85-w32 (85) | 110.96 | 191.9 | 1.729 | 1290 | 13801 | 52 | PASS |
| mx8-devnet-epoch0 | 1300 | sp64-w32 (64) | 103.449 | 187.2 | 1.810 | 1290 | 13801 | 51 | PASS |
| mx8-devnet-epoch0 | 1300 | sp52-w32 (52) | 85.585 | 174.3 | 2.037 | 1290 | 13801 | 50 | PASS |
| mx8-devnet-epoch0 | 1300 | sp43-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | 1300 | sp36-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | 1300 | sp32-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | 1300 | sp28-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | 1300 | sp24-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | 1300 | sp21-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | 1300 | sp16-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | 1300 | sp11-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | 1300 | sp43-w8 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | base | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp170-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp170-w16 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp170-w8 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp170-w4 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp170-w2 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp128-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp96-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp85-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp64-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp52-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp43-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp36-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp32-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp28-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp24-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp21-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp16-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp11-w32 | | | | | | | error: budget |
| v4-devnet-epoch0 | unlocked-end | sp43-w8 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | base | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp170-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp170-w16 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp170-w8 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp170-w4 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp170-w2 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp128-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp96-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp85-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp64-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp52-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp43-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp36-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp32-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp28-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp24-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp21-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp16-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp11-w32 | | | | | | | error: budget |
| mx8-devnet-epoch0 | unlocked-end | sp43-w8 | | | | | | | error: budget |
### PC 1, the memory-clock ladder at the 1,300 MHz lock, job `run-ca4-pc1-memclk-5090-20261008`
The memory-clock ladder: not landed.
### The decomposition probes (the worker's --microbench: sleep = full residency and no issue; the L2 chase; the dependent DRAM chase; the ALU probe; 30 s each with the sampler's watts and both clocks)
| Card | Probe | Watts | SM MHz | Mem MHz | G ops or reads per s | Lanes | nJ or pJ per op over the sleep row |
|---|---|---|---|---|---|---|---|
| 4090 | idle | 33.9 | 210.0 | 405.0 | | | |
| 4090 | sleep | 133.1 | 2725.9 | 10501.0 | 0.000 | 196608 | |
| 4090 | int_arx | 448.0 | 2574.1 | 10501.0 | 26076.595 | 196608 | 12.1 pJ |
| 4090 | l2_chase_32m | 329.0 | 2715.0 | 10501.0 | 80.816 | 196608 | 2.42 nJ |
| 4090 | l2_indep4_32m | 328.2 | 2715.0 | 10501.0 | 82.301 | 196608 | 2370.6 pJ |
| 4090 | dram_chase_1g | 263.0 | 2715.0 | 10501.0 | 9.399 | 196608 | 13.82 nJ |
| 5090c | idle | 184.2 | 2044.5 | 11141.9 | | | |
| 5090c | sleep | 196.5 | 2865.0 | 13801.0 | 0.000 | 261120 | |
| 5090c | int_arx | 372.9 | 2853.9 | 13801.0 | 13064.448 | 261120 | 13.5 pJ |
| 5090c | l2_chase_32m | 382.2 | 2865.0 | 13801.0 | 53.964 | 261120 | 3.44 nJ |
| 5090c | l2_indep4_32m | 401.4 | 2851.3 | 13801.0 | 51.085 | 261120 | 4011.0 pJ |
| 5090c | dram_chase_1g | 372.9 | 2865.0 | 13801.0 | 8.019 | 261120 | 22.00 nJ |
| 5090e | idle | 8.7 | 180.0 | 405.0 | | | |
| 5090e | sleep | 139.0 | 2932.0 | 13801.0 | 0.000 | 261120 | |
| 5090e | int_arx | 535.6 | 2854.9 | 13801.0 | 29035.421 | 261120 | 13.7 pJ |
| 5090e | l2_chase_32m | 415.1 | 2902.0 | 13801.0 | 104.533 | 261120 | 2.64 nJ |
| 5090e | l2_indep4_32m | 434.9 | 2902.0 | 13801.0 | 112.864 | 261120 | 2621.7 pJ |
| 5090e | dram_chase_1g | 341.3 | 2904.0 | 13801.0 | 17.617 | 261120 | 11.48 nJ |
| h100 | idle | 71.8 | 345.0 | 2619.0 | | | |
| h100 | sleep | 130.3 | 1980.0 | 2619.0 | 0.000 | 270336 | |
| h100 | int_arx | 440.0 | 1980.0 | 2619.0 | 21499.215 | 270336 | 14.4 pJ |
| h100 | l2_chase_32m | 479.1 | 1980.0 | 2619.0 | 121.037 | 270336 | 2.88 nJ |
| h100 | l2_indep4_32m | 538.6 | 1980.0 | 2619.0 | 107.277 | 270336 | 3806.0 pJ |
| h100 | dram_chase_1g | 466.5 | 1980.0 | 2619.0 | 32.551 | 270336 | 10.33 nJ |
## 2. What the rows say, shape by shape
| Question | 5090 (host c; PC 1 for the lock) | 4090 | H100 | Label |
|---|---|---|---|---|
| Fewest SMs that hold 99 percent of class v3 | 43 of 170 (99.4); 28 holds 98.4 | 16 of 128 (99.0); the tune's 26 at 99.3 | 127 of 132 (the rate falls with the SM count below it) | measured |
| Watts at that point against base | 291.1 against 296.4 (-5 W); host e 337.4 against 352.7 (-15 W) | 249.6 against 253.4 (-4 W) | 441.6 against 450.4 (-9 W) | measured |
| Energy per hash at that point | 2.053 against 2.079 (-1.3 percent); host e -3.9 percent | 3.568 against 3.588 (-0.6); the tune's 3.567 | 1.744 against 1.769 (-1.4) | measured |
| Fewer warps per SM at full SM count | 8 warps per SM 2.063 (-0.8 percent); 2 warps 97.7 percent of rate at 2.072; 1 warp 84 percent | 8 warps 3.570; 1 warp 94 percent at 3.662 | 8 warps 99.2 percent at the same draw; 4 warps 93 percent; 1 warp 41 percent | measured |
| Matched warps, packed against spread (43 x 32 against 170 x 8) | 2.053 against 2.063: equal | 32 x 8 (3.546) against the ladder's 256 warps (3.568): equal | 33 x 8 against 33 x 32: 123.5 against 123.4 MH/s, equal | measured |
| Class v4 knee by rate | 43 SMs (PC 1: 98 percent; 36 SMs 88; 28 SMs 69) | the full grid (all shapes within 0.1 percent; the ladder below 128 not run on class v4) | the shipped grid; the persistent shape loses 4 percent | measured |
| Class v4 watts at its knee | PC 1 470 W against 452.8 base (heat drift 62 to 75 C across the pass); host c capped at 450 | 356 against 353.5 | capped at 700 | measured |
| At the 1,300 MHz lock (PC 1, this file's job) | class v4: the full grid 134.2 MH/s at 302 W = 2.25 microjoules; the persistent shape on every SM 128.9 at 298.1 (the wrapper costs 4 percent); 128 SMs 130.3 at 299; 96 SMs 120.9 at 286; 85 SMs 125.2 at 292.8; 64 SMs 95.2 at 249.9; 43 SMs 64.3 at 208.5 (3.24 microjoules): nothing under the full grid's energy at any point. Class v3: the full grid 134.1 at 213 W = 1.589; 128 SMs 132.6 at 213.6; 96 SMs 120.8 at 205.2; 85 SMs 111.0 at 191.9; 64 SMs 103.4 at 187.2; 52 SMs 85.6 at 174.3; the rows under 52 SMs were cut by the job's 66-minute budget | no lock on a rented host | no lock on a rented host | measured; the class v3 lock ladder is PARTIAL and disagrees with 20.3b (85 SMs 129.8 MH/s at 207.8 W there against 111.0 at 191.9 here, 43 SMs 126.3 there, not reached here): the pass ran across the founder's card swap on PC 1 (14:2x UK) and is re-run before it replaces 20.3b's lock points |
| Class v3 at stock on PC 1 (this file's job, the same board as 20.3b) | base 136.7 at 320.9 W = 2.347; 43 SMs 136.5 at 310.6 = 2.276 (3.0 percent under); 28 SMs 135.2 at 308.6; 21 SMs 132.8 at 305.6; 16 SMs 125.5 at 294.4; 11 SMs 100.1 at 275.1; 170 SMs x 8 warps 137.1 at 310.8 = 2.266 (3.5 percent under, the best shape on PC 1) | | | measured; agrees with the rented ladder within 1 percent at every rung |
| Class v5 against class v4 | not run on the rented 5090s (the v5-kits worker has no sparse shapes); PC 1's v5lock-b of 8 October: v5 at the knee = v4 rate, +2 percent watts | not run | 250.2 MH/s at 698.8 W against 251.9 at 699.4: equal under the cap | measured |
| The memory-clock knob on a rented host | refused (-lmc, -lgc, -pl all refused on Vast) | refused (RunPod) | -lmc accepted and the clock did not move (2,619 MHz on the row at both settings) | measured |
Two oddities the ladder shows and this file keeps: on host c the 96-SM and 52-SM shapes read 97.4 and 95.4 percent of
the rate where 85 and 43 read 99.9 and 99.4 (and host e's 52 reads 95.7, host d's 96 reads 97.5), so the dip is the
shape, not the host; the 5090's 170 SMs sit in 8 GPCs, and a block count that lands unevenly across them (96 and 52
against 85 and 43) leaves some GPCs' L2 ports hotter than others. The persistent wrapper's own cost is visible on the
H100 only (sp132-w32 at 96 percent of class v4's base against 99.7 on class v3: a compute-bound kernel pays the loop).
## 3. The decomposition: what the residual is
The microbench's probes run one kernel each at full residency for 30 s with the sampler beside it: `sleep` (every warp
resident, no instruction issued: the SM clock domain awake and nothing else), `l2_chase_32m` (a dependent 4-byte chain
inside the L2: the L2 and crossbar path, no DRAM), `dram_chase_1g` (the hash's own pattern over 1 GiB: the DRAM path
through the same L2 and crossbar), `int_arx` (the ALU path). The table in section 1 carries the rows; the reading per
card, watts over idle:
| Card | Idle | SM clock domain awake (sleep minus idle) | The L2 path per dependent read (l2 chase minus sleep, over reads per s) | The DRAM path per dependent read (dram chase minus sleep, over reads per s) | The hash's draw over idle at its read rate | Of which the memory path (hash minus sleep) | The memory's own, modelled (chip-model 5.3) | Label |
|---|---|---|---|---|---|---|---|---|
| RTX 5090, PC 1 (15.1a, 8 October, the microbench at stock) | 74.7 W | 45 W (120.2 at full residency) | 2.4 nJ (378.7 W at 107.6 G reads per s) | 10.9 nJ whole-card (318.4 W at 18.2 G); 8.5 nJ over the L2 path | 311 - 75 = 236 W at 17.6 G reads per s = 13.4 nJ per read (20.3's mx8 row) | 191 W = 10.9 nJ per read | 2.0 nJ per read plus 20 W static = 55 W, 3.1 nJ per read | measured; the memory's own modelled |
| RTX 5090, rented host e (this file's probes) | 8.7 W at 180 MHz | 130 W (139.0 W at 2,932 MHz) | 2.6 nJ (415.1 W at 104.5 G reads per s) | 11.5 nJ over the sleep row (341.3 W at 17.6 G); 18.9 nJ whole-card | 352.7 - 8.7 = 344 W at 18.2 G reads per s = 18.9 nJ per read | 214 W = 11.8 nJ per read | the same 55 W | measured; modelled |
| RTX 4090, rented | 33.9 W at 210 MHz | 99 W (133.1 W at 2,726 MHz with every warp resident and nothing issued) | 2.4 nJ (329.0 W at 80.8 G reads per s) | 13.8 nJ over the sleep row (263.0 W at 9.4 G); 24.4 nJ whole-card | 253.4 - 33.9 = 219 W at 9.04 G reads per s = 24.2 nJ per read | 120 W = 13.3 nJ per read | 2.0 nJ plus 15 W static = 33 W, 3.7 nJ per read (approximate for GDDR6X) | measured; modelled |
| H100 80 GB HBM3, rented | 71.8 to 80 W at 345 MHz | 50 to 58 W (130.3 to 136.6 W at 1,980 MHz) | 2.9 nJ (479.1 W at 121.0 G reads per s) | 10.3 nJ over the sleep row (466.5 W at 32.6 G); 12.1 nJ whole-card | 450.4 - 71.3 = 379 W at 32.6 G reads per s = 11.6 nJ per read | 320 W = 9.8 nJ per read | 1.2 nJ plus about 20 W static = 59 W, 1.8 nJ per read | measured; modelled |
The reading: at the hash, each card's draw splits into a fixed "awake" floor (the card with every warp resident and
nothing issuing: 120 to 139 W on the 5090 whatever its idle, 133 W on the 4090, 130 to 137 W on the H100; the SM clock
tree, the GPCs' shared logic and the memory clock domain at their boost clocks; the SM-sparse rows say the SMs' own
share of it is 4 to 15 W, because emptying three quarters of them saves that much) and a per-read term on the memory
path (10.9 to 11.8 nJ per dependent read on the 5090 on two boards, 13.3 on the 4090, 9.8 on the H100) of which the
memory devices themselves are 2.0 or 1.2 nJ modelled; the difference (8 to 11 nJ per read) is the L2 slices, the
crossbar, the memory controllers and the PHY, in that order of distance from the SM, and the L2 path alone is 2.4 to
2.9 nJ of it (the L2 chase). The ALU path is not in the hash's draw at all (512 ops per hash at 11 to 14 pJ is under
1 W). The two 5090 boards agree on the per-read term within 8 percent and differ by 60 W on the idle (7 to 9 W on the
rented Linux boards against 75 W on PC 1 with its display), which is where the across-host base spread comes from.
What the SM-sparse rows add to it: the SMs that go idle at the knee were worth 4 to 15 W on every card (the difference
between the sleeping SM clock domain at full residency and the same domain with three quarters of its SMs empty), so
the "SM clock domain awake" term is mostly the clock tree and the GPCs' shared logic, not the SMs' own schedulers and
register files. The rest of the draw over idle at the hash is the memory path on the GPU side: the L2 slices, the
crossbar, the memory controllers and the GDDR7 or HBM PHY, at the boost clock for the first three and at the memory
clock for the PHY. The core lock takes the first three down with the clock (the 5090's 311 to 213 W at the same 17.5 G
reads per second on PC 1, 20.3); the memory-clock lock is the only knob on the fourth, and no rented host allows it, so
its row is PC 1's (the memory-clock ladder table in section 1, the job `run-ca4-pc1-memclk-5090-20261008`).
## 4. The honest floor per tier, and the fraction a chip cannot strip
The chip of the record pays the memory's own energy per read, its static power and a controller and PHY of its own
(chip-model-v3 5.3 to 5.5: GDDR7 2.0 nJ per read plus 20 W static plus a 15 W controller at 166 MH/s = 0.466
microjoules per hash; one HBM3 stack 0.321). The honest card pays the same memory's energy (the devices are the same
silicon on both sides) plus everything its die spends around the read. So the fraction of the card's energy per hash a
chip cannot strip is the memory side's own share of it, and the floor's real number per tier is that share:
| Tier (class v3, stock unless named) | Card microjoules per hash | The memory side's own (modelled: the DRAM's 2.0 or 1.2 nJ x 128 reads, plus static over the rate) | Fraction a chip cannot strip | Edge at zero shadow: GDDR7 board / HBM3 stack / SRAM die | Label |
|---|---|---|---|---|---|
| RTX 5090, rented host c (the best board of four) | 2.079 | 0.256 + 0.140 = 0.40 | 19 percent | 4.5x / 6.5x / 14.9x | measured card; modelled memory |
| RTX 5090, rented host e (the worst of four) | 2.485 | 0.40 | 16 percent | 5.3x / 7.7x / 17.8x | the same |
| RTX 5090, PC 1 at the 1,300 MHz lock (20.3b, class v3 base) | 1.58 | 0.40 | 25 percent | 3.4x / 4.9x / 11.3x | measured |
| RTX 4090, rented (GDDR6X at 9.0 G reads per s) | 3.588 | 0.256 + 0.21 = 0.47 | 13 percent | 7.7x / 11.2x / 25.6x | measured card; modelled memory |
| H100 80 GB, rented (HBM3, 5 stacks) | 1.769 | 0.154 + 0.08 = 0.23 | 13 percent | 3.8x / 5.5x / 12.6x | the same |
| Apple M5 Max (6 October, GPU plus DRAM channels) | 0.78 | about 0.3 (approximate: LPDDR at 1.5 to 2.0 nJ) | about 40 percent | 1.7x / 2.4x / 5.6x | measured card; approximate memory |
The edge columns above are against the model's three chips; the 5090 host c row is the honest 5090 floor at stock
this lane measured (4.5x against the GDDR7 board, not the 5.2x of the 7 October PC 2 row: the rented board draws 296 W
at 142.6 MH/s where PC 2's drew 330 at 136.6, and PC 1's 311 at 137.5; the three are one card model on three boards and
drivers, and the honest denominator is a band, as the denominator lane's file says). The lock row (PC 1, 20.3b) stays
the honest 5090 floor: 3.4x on class v3 at zero shadow, 3.6x at the knee on the efficiency pass's 1.67; with class v4's
shadow and the record's k band it is section 20.4's 2.1x at k = 1.
Per tier, what it means and what is done: a home miner on one 5090, 4090 or any NVIDIA card gains 1 to 4 percent of
energy per hash from the occupancy at stock and never more, so nothing in the occupancy changes what the card earns;
the core lock stays the lever (the 5090: 1.67 against 2.26 microjoules, the Ember knob of 0.3.24), and the memory-clock
lock behind it is measured on PC 1 in this file; the self-tune ships as the safe default inside Ember's Efficiency tier
and costs nothing at Maximum. An H100 owner (a rented or data-centre tier) gets the 1.4 percent from the self-tune and
nothing from its memory clock (the knob is accepted and ignored on the rented host). A 4090 owner gets 1.3 percent. An
AMD or Apple owner gets nothing from this lane (the shapes are CUDA's; Metal and OpenCL workers run the shipped grid).
## 5. The patch: `--sm-sparse auto` and the self-tune
`proto-cuda/nvrtc/worker.cpp` on this branch:
- `--sm-sparse auto|off|N` and `--sm-hold <f>` (default 0.99); the tuning file's per-card `"sm_sparse": "auto" |
"off" | "<N>"` and `"sm_hold": 0.99` (the manifest's tuning object is written as is to `tuning.json`, so a fleet
default needs no app change; the flag wins over the file). A count pins `sp<N>-w32` through the existing pinned race
(the vector warps gate the install); `auto` runs `tuneSparse` at the end of `buildPair`, on the first pack and on
every prepared pack, so a pack flip re-measures.
- `tuneSparse`: the persistent shape is one compiled kernel for every block count (N is the launch's grid, not the
text), so one NVRTC compile serves the whole search; the installed kernel's rate is the ceiling's first reading, the
sparse shape on every SM its second (the vector warps through it first: bit-exact or nothing is installed); the ladder
(`sparseLadder`: the SM count by quarters and eighths down to 2) descends until a shape falls under the hold and a
bisection of at most four probes closes the bracket; `chooseSparseBlocks` installs the fewest blocks that held. One
line goes out with the race line (`sparse tune device ... rows N=mhs ... chosen sp<N>-w32 (x percent of the ceiling)`)
and the bench's RESULT line carries `variant=` and `sparse_blocks=`.
- Measured: H100 15.2 s, 6 probes, `chosen sp127-w32 253.179 (99.5% of the ceiling)`, the served row 253.2 MH/s at
441.6 W (1.744 against 1.769 microjoules); class v4 on the H100 `chosen none` in 6.6 s (the persistent shape at 97.8
percent of the ceiling, under the hold); RTX 4090 24.5 s, `chosen sp26-w32 (99.3%)`, 70.15 MH/s at 250.2 W (3.567
against 3.588); RTX 5090 host c, class v3 at the 0.99 hold `chosen sp37-w32`, 141.27 MH/s at 286.5 W = 2.028
against the base's 2.079 (2.5 percent), at 0.98 `sp27-w32` 2.033; class v4 at the 0.99 hold `sp82-w32` 3.178
against 3.157 (nothing, inside noise under the board's 450 W cap), at 0.98 `sp71-w32` 3.185. The 0.99 hold is the
default: on class v4 it costs 1 percent of rate for no watts, which is why Maximum turns it off and Balanced holds
0.995.
- Tests: `proto-cuda/nvrtc/emu/variant-test.cpp` case `sparse-tune` (the ladder from 170 SMs, the chooser on the 20.3b
rows at holds 0.99, 0.98, 0.5 and 1.0, the mode reader on nine strings, the tuning keys for two cards): PASS beside
the three earlier cases, built with the real headers on the H100 pod (`g++ -DIGNEUM_EMU`), 8 October 12:04 UTC. The
known-failed shape it guards: a hold of 1.0 or an empty row set must choose nothing (the 7 October fault was a shape
installed that was never measured).
- The tiers (the Ember tiers lane's `ember-tiers-25` carries the tier switch; this file names the mapping): Efficiency
writes `sm_sparse: auto, sm_hold: 0.985`; Balanced `auto, 0.995`; Maximum `off`. The tune runs inside the pair's build
(the prepare thread, ahead of the epoch), so a flip of tier or pack re-measures at the next prepare and the serve loop
never stalls; its cost is 7 to 25 s of the prepare lead (600 DAA).
- What it is not: a lever on the floor. It is a 1 to 4 percent per-watt line on NVIDIA at stock, worth shipping
because it is free and measured, and the frame (one compile, a ladder, a hold, bit-exact or nothing) is the shape any
later occupancy or clock self-tune takes.
## 6. Unverified and owed
- PC 1's 1,300 MHz lock ladder is in section 1 as the job left it: class v4 complete (every point under the full
grid's energy, the shadow compute-bound under 128 SMs at 1,290 MHz), class v3 cut at 52 SMs by the job's budget and
reading the sparse shapes lower than 20.3b did on the same board at the same lock (85 SMs 111.0 against 129.8 MH/s);
the pass ran across the founder's card swap on PC 1 (14:2x UK), so the class v3 lock row stays 20.3b's (43 SMs
126.3 MH/s at 205.4 W against the full grid's 134.0 at 211.4: 1.63 against 1.58 microjoules, nothing saved) and the
ladder is re-run on a quiet PC 1 before it replaces it. The memory-clock ladder is queued behind the hash lane's two
jobs (run-ca4-pc1-memclk-5090-20261008-b) and lands in section 1 when its upload does.
- The decomposition probes on the 4090 and the 5090 host c: in section 1 when their runs end (queued behind the
sweeps on the same cards so no row shares the card).
- The memory side's own share per tier is modelled (chip-model 5.3); the memory-clock ladder is the one measurement of
its PHY term, and only on PC 1.
- Class v5 on the rented 5090s was not run (the v5-kits worker carries the leaf upload and not the sparse shapes; the
two trees merge in 0.3.26); the H100 row and PC 1's v5lock-b stand in.
- The 4090's class v4 ladder below 128 SMs was not run (the slice pods ran class v3 and the full-grid class v4 rows).
- Every chip figure is the model's; no chip has been measured.
- Spend: six pods, USD 25 of the lane's 300 (h100 3.49 per hour, 4090 0.74, four 5090s 0.44 to 0.56; two 5090 hosts
destroyed unused: one shared with another tenant's 5.7 GB process at 485 W idle, one with a dead CUDA init; the
Korean host vanished mid-run).

View file

@ -0,0 +1,259 @@
# a-era class w64m8g+sh256x27 eras [0,1,2,3,4,5,6,7] seeds 32 era-widths 64 weights base bittest 1 bin d601098699840534 start 2026-10-08T12:53:59Z host igneum-build-3 threads 8
cand era seed candidates accepted attempt bit_z bit_site bit_bit reasons
a-era 0 7 8 1 7 3.2 12 8 a'=5;c,=2;
a-era 0 2 9 1 8 3.4 5 11 a'=7;a=1;
a-era 0 0 2 1 1 2.9 7 14 a'=1;
a-era 0 4 9 1 8 2.8 1 23 a'=4;c,=3;a=1;
a-era 0 1 6 1 5 3.1 3 7 a'=4;c,=1;
a-era 0 6 2 1 1 3.5 5 24 a'=1;
a-era 0 5 14 1 13 2.9 10 16 a'=12;a=1;
a-era 0 3 2 1 1 3.1 11 9 a'=1;
a-era 0 8 1 1 0 3.5 6 20
a-era 0 10 1 1 0 3.0 6 20
a-era 0 12 3 1 2 2.9 0 18 a'=2;
a-era 0 13 1 1 0 3.4 0 27
a-era 0 9 5 1 4 2.8 15 4 a'=3;c,=1;
a-era 0 14 13 1 12 2.5 8 9 a'=9;a=2;c,=1;
a-era 0 11 9 1 8 3.1 4 21 c,=5;a'=3;
a-era 0 15 6 1 5 3.4 1 9 a'=3;c,=1;a=1;
a-era 0 16 5 1 4 3.3 14 18 a'=4;
a-era 0 18 3 1 2 3.2 10 25 c,=2;
a-era 0 17 3 1 2 3.1 8 5 a'=2;
a-era 0 19 5 1 4 3.0 8 12 a'=3;a=1;
a-era 0 21 4 1 3 3.1 13 4 a'=3;
a-era 0 20 8 1 7 3.6 7 11 a'=5;c,=1;a=1;
a-era 0 22 6 1 5 2.6 8 11 a'=4;a=1;
a-era 0 23 4 1 3 2.9 5 8 c,=1;a'=1;a=1;
a-era 0 24 3 1 2 3.0 9 24 a'=2;
a-era 0 25 6 1 5 3.1 10 13 c,=2;a=2;a'=1;
a-era 0 30 8 1 7 3.1 3 19 a'=6;a=1;
a-era 0 28 15 1 14 2.9 2 10 a'=10;c,=2;a=2;
a-era 0 29 4 1 3 4.1 7 8 c,=2;a'=1;
a-era 0 27 7 1 6 3.3 10 12 a'=6;
a-era 0 26 2 1 1 4.0 13 15 a'=1;
a-era 0 31 12 1 11 5.9 0 21 a'=5;c,=3;a=2;b=1;
a-era 1 0 2 1 1 2.9 5 12 a'=1;
a-era 1 2 9 1 8 3.5 12 16 a'=7;a=1;
a-era 1 1 6 1 5 2.8 0 6 a'=4;c,=1;
a-era 1 3 2 1 1 3.0 14 13 a'=1;
a-era 1 4 12 1 11 2.6 14 17 a'=6;c,=4;a=1;
a-era 1 5 21 1 20 3.1 13 17 a'=15;c,=3;a=2;
a-era 1 6 2 1 1 3.0 0 11 a'=1;
a-era 1 7 8 1 7 3.4 6 8 a'=5;c,=2;
a-era 1 8 1 1 0 3.2 1 19
a-era 1 9 5 1 4 3.4 15 7 a'=3;c,=1;
a-era 1 10 1 1 0 3.4 3 20
a-era 1 11 9 1 8 2.8 14 24 c,=5;a'=3;
a-era 1 13 1 1 0 3.0 4 4
a-era 1 12 3 1 2 3.2 15 9 a'=2;
a-era 1 14 13 1 12 3.0 6 16 a'=9;a=2;c,=1;
a-era 1 15 6 1 5 3.4 13 23 a'=3;c,=1;a=1;
a-era 1 16 5 1 4 3.2 8 4 a'=4;
a-era 1 17 3 1 2 3.0 1 21 a'=2;
a-era 1 18 3 1 2 3.2 14 18 c,=2;
a-era 1 20 8 1 7 3.1 7 22 a'=5;c,=1;a=1;
a-era 1 19 5 1 4 2.8 5 12 a'=3;a=1;
a-era 1 21 4 1 3 3.1 11 8 a'=3;
a-era 1 22 6 1 5 3.2 8 5 a'=4;a=1;
a-era 1 24 3 1 2 2.9 11 19 a'=2;
a-era 1 23 4 1 3 2.5 8 14 c,=1;a'=1;a=1;
a-era 1 25 6 1 5 3.5 15 8 c,=2;a=2;a'=1;
a-era 1 26 2 1 1 2.5 0 20 a'=1;
a-era 1 28 15 1 14 3.2 12 6 a'=10;c,=2;a=2;
a-era 1 27 7 1 6 3.0 7 7 a'=6;
a-era 1 29 4 1 3 3.6 14 25 c,=2;a'=1;
a-era 1 30 41 1 40 2.7 6 5 a'=29;c,=8;a=2;b=1;
a-era 2 0 2 1 1 2.7 13 20 a'=1;
a-era 1 31 17 1 16 3.4 11 15 a'=7;c,=5;a=3;b=1;
a-era 2 1 4 1 3 2.6 2 9 a'=3;
a-era 2 2 9 1 8 3.1 8 11 a'=7;a=1;
a-era 2 3 2 1 1 3.3 10 16 a'=1;
a-era 2 4 2 1 1 3.3 6 6 a'=1;
a-era 2 5 14 1 13 3.1 2 6 a'=12;a=1;
a-era 2 6 2 1 1 3.1 12 21 a'=1;
a-era 2 7 4 1 3 3.1 13 16 a'=3;
a-era 2 8 1 1 0 2.8 10 9
a-era 2 9 3 1 2 3.2 7 15 a'=2;
a-era 2 10 1 1 0 2.3 7 7
a-era 2 11 2 1 1 3.5 10 16 a'=1;
a-era 2 12 3 1 2 2.7 1 6 a'=2;
a-era 2 13 1 1 0 4.3 15 25
a-era 2 14 5 1 4 2.9 1 13 a'=3;a=1;
a-era 2 15 3 1 2 2.8 8 5 a'=2;
a-era 2 16 5 1 4 3.2 5 9 a'=4;
a-era 2 17 3 1 2 2.7 10 19 a'=2;
a-era 2 18 1 1 0 4.0 6 9
a-era 2 19 5 1 4 4.0 12 23 a'=3;a=1;
a-era 2 20 7 1 6 3.6 8 10 a'=5;a=1;
a-era 2 21 4 1 3 3.0 4 21 a'=3;
a-era 2 22 6 1 5 2.8 13 15 a'=4;a=1;
a-era 2 23 2 1 1 2.8 14 17 a=1;
a-era 2 24 3 1 2 2.5 13 13 a'=2;
a-era 2 25 4 1 3 3.3 12 13 a=2;a'=1;
a-era 2 26 2 1 1 2.7 10 23 a'=1;
a-era 2 27 7 1 6 3.7 1 17 a'=6;
a-era 2 28 8 1 7 3.1 14 14 a'=5;a=2;
a-era 2 29 2 1 1 3.0 1 23 a'=1;
a-era 2 30 8 1 7 3.3 5 4 a'=6;a=1;
a-era 2 31 4 1 3 3.7 10 15 a'=2;b=1;
a-era 3 0 2 1 1 2.8 5 9 a'=1;
a-era 3 1 4 1 3 2.8 4 13 a'=3;
a-era 3 2 9 1 8 3.7 7 26 a'=7;a=1;
a-era 3 4 2 1 1 2.7 10 12 a'=1;
a-era 3 3 2 1 1 2.9 13 14 a'=1;
a-era 3 5 14 1 13 2.9 5 12 a'=12;a=1;
a-era 3 6 2 1 1 2.6 6 17 a'=1;
a-era 3 8 1 1 0 3.8 0 24
a-era 3 7 4 1 3 3.0 0 18 a'=3;
a-era 3 9 3 1 2 4.2 5 19 a'=2;
a-era 3 10 1 1 0 3.5 5 16
a-era 3 11 2 1 1 3.3 5 4 a'=1;
a-era 3 12 3 1 2 3.5 9 15 a'=2;
a-era 3 13 1 1 0 3.0 6 16
a-era 3 14 5 1 4 3.6 14 10 a'=3;a=1;
a-era 3 15 3 1 2 3.8 14 19 a'=2;
a-era 3 16 5 1 4 3.0 13 10 a'=4;
a-era 3 17 3 1 2 2.7 0 26 a'=2;
a-era 3 18 1 1 0 3.2 14 5
a-era 3 20 7 1 6 3.1 11 23 a'=5;a=1;
a-era 3 19 5 1 4 3.2 12 22 a'=3;a=1;
a-era 3 21 4 1 3 2.9 7 15 a'=3;
a-era 3 22 6 1 5 2.8 3 5 a'=4;a=1;
a-era 3 23 2 1 1 3.5 2 21 a=1;
a-era 3 24 3 1 2 4.1 3 24 a'=2;
a-era 3 25 4 1 3 3.5 4 6 a=2;a'=1;
a-era 3 26 2 1 1 2.8 0 15 a'=1;
a-era 3 28 8 1 7 3.1 7 24 a'=5;a=2;
a-era 3 27 7 1 6 3.8 6 11 a'=6;
a-era 3 29 2 1 1 3.5 3 11 a'=1;
a-era 3 30 8 1 7 3.0 14 9 a'=6;a=1;
a-era 3 31 6 1 5 3.1 1 10 a'=3;c,=1;b=1;
a-era 4 0 2 1 1 3.8 12 22 a'=1;
a-era 4 1 6 1 5 2.8 3 14 a'=4;c,=1;
a-era 4 2 9 1 8 3.5 15 8 a'=7;a=1;
a-era 4 3 2 1 1 2.8 14 19 a'=1;
a-era 4 4 9 1 8 3.5 1 14 a'=4;c,=3;a=1;
a-era 4 5 21 1 20 3.1 0 4 a'=15;c,=3;a=2;
a-era 4 6 2 1 1 3.0 12 12 a'=1;
a-era 4 8 1 1 0 3.0 4 8
a-era 4 7 8 1 7 4.0 3 21 a'=5;c,=2;
a-era 4 9 5 1 4 2.7 8 21 a'=3;c,=1;
a-era 4 10 1 1 0 3.8 3 22
a-era 4 11 9 1 8 3.0 4 4 c,=5;a'=3;
a-era 4 12 3 1 2 2.9 6 26 a'=2;
a-era 4 13 1 1 0 3.8 9 25
a-era 4 14 13 1 12 3.9 1 5 a'=9;a=2;c,=1;
a-era 4 16 5 1 4 3.3 0 19 a'=4;
a-era 4 15 6 1 5 2.5 0 11 a'=3;c,=1;a=1;
a-era 4 17 3 1 2 3.2 6 17 a'=2;
a-era 4 18 3 1 2 3.5 1 4 c,=2;
a-era 4 20 8 1 7 4.0 2 21 a'=5;c,=1;a=1;
a-era 4 19 5 1 4 3.3 12 19 a'=3;a=1;
a-era 4 21 4 1 3 3.2 2 4 a'=3;
a-era 4 22 6 1 5 3.3 7 22 a'=4;a=1;
a-era 4 24 3 1 2 3.0 12 26 a'=2;
a-era 4 23 36 1 35 2.5 3 24 a'=21;c,=9;a=4;c=1;
a-era 4 25 6 1 5 2.8 1 14 c,=2;a=2;a'=1;
a-era 4 26 2 1 1 3.2 14 6 a'=1;
a-era 4 27 7 1 6 2.7 14 16 a'=6;
a-era 4 28 15 1 14 3.9 12 11 a'=10;c,=2;a=2;
a-era 4 29 4 1 3 3.5 8 9 c,=2;a'=1;
a-era 4 30 41 1 40 3.1 7 13 a'=29;c,=8;a=2;b=1;
a-era 4 31 17 1 16 3.9 11 7 a'=7;c,=5;a=3;b=1;
a-era 5 0 2 1 1 3.8 10 17 a'=1;
a-era 5 1 6 1 5 3.1 13 4 a'=4;c,=1;
a-era 5 2 9 1 8 3.5 10 23 a'=7;a=1;
a-era 5 3 2 1 1 3.6 11 19 a'=1;
a-era 5 4 9 1 8 3.5 12 13 a'=4;c,=3;a=1;
a-era 5 5 21 1 20 2.8 9 15 a'=15;c,=3;a=2;
a-era 5 6 2 1 1 3.3 9 13 a'=1;
a-era 5 8 1 1 0 3.2 8 23
a-era 5 7 8 1 7 2.9 1 18 a'=5;c,=2;
a-era 5 9 5 1 4 3.3 5 25 a'=3;c,=1;
a-era 5 10 1 1 0 3.5 9 9
a-era 5 11 9 1 8 2.8 12 21 c,=5;a'=3;
a-era 5 12 3 1 2 3.1 14 17 a'=2;
a-era 5 13 1 1 0 3.3 2 19
a-era 5 14 13 1 12 2.7 9 15 a'=9;a=2;c,=1;
a-era 5 15 6 1 5 3.4 10 16 a'=3;c,=1;a=1;
a-era 5 16 5 1 4 3.2 6 11 a'=4;
a-era 5 17 3 1 2 3.4 4 13 a'=2;
a-era 5 18 3 1 2 2.9 0 5 c,=2;
a-era 5 19 5 1 4 2.6 9 16 a'=3;a=1;
a-era 5 20 8 1 7 3.5 10 10 a'=5;c,=1;a=1;
a-era 5 21 4 1 3 2.6 5 25 a'=3;
a-era 5 22 6 1 5 3.4 13 4 a'=4;a=1;
a-era 5 24 3 1 2 3.2 12 9 a'=2;
a-era 5 23 4 1 3 3.4 5 24 c,=1;a'=1;a=1;
a-era 5 25 6 1 5 3.0 5 10 c,=2;a=2;a'=1;
a-era 5 26 2 1 1 3.2 9 18 a'=1;
a-era 5 27 7 1 6 3.7 5 9 a'=6;
a-era 5 28 15 1 14 3.4 12 22 a'=10;c,=2;a=2;
a-era 5 29 4 1 3 3.6 2 18 c,=2;a'=1;
a-era 5 30 8 1 7 5.6 13 23 a'=6;a=1;
a-era 6 0 2 1 1 3.3 12 22 a'=1;
a-era 5 31 17 1 16 3.1 9 12 a'=7;c,=5;a=3;b=1;
a-era 6 1 6 1 5 2.4 9 20 a'=4;c,=1;
a-era 6 2 9 1 8 3.5 5 6 a'=7;a=1;
a-era 6 3 2 1 1 3.0 2 12 a'=1;
a-era 6 4 6 1 5 3.0 10 24 a'=4;c,=1;
a-era 6 5 19 1 18 3.5 14 17 a'=14;c,=2;a=2;
a-era 6 6 2 1 1 3.7 12 25 a'=1;
a-era 6 7 4 1 3 3.5 7 26 a'=3;
a-era 6 8 1 1 0 3.1 2 13
a-era 6 9 5 1 4 3.1 15 20 a'=3;c,=1;
a-era 6 10 1 1 0 2.8 6 12
a-era 6 11 2 1 1 3.5 11 4 a'=1;
a-era 6 12 3 1 2 2.9 7 24 a'=2;
a-era 6 13 1 1 0 3.3 9 19
a-era 6 15 3 1 2 5.7 12 4 a'=2;
a-era 6 14 13 1 12 3.1 15 10 a'=9;a=2;c,=1;
a-era 6 16 5 1 4 2.9 8 18 a'=4;
a-era 6 17 3 1 2 3.4 10 18 a'=2;
a-era 6 18 1 1 0 3.1 3 21
a-era 6 19 5 1 4 3.4 5 23 a'=3;a=1;
a-era 6 20 8 1 7 3.5 5 25 a'=5;c,=1;a=1;
a-era 6 21 4 1 3 2.8 1 23 a'=3;
a-era 6 24 3 1 2 2.8 7 16 a'=2;
a-era 6 22 6 1 5 3.8 1 14 a'=4;a=1;
a-era 6 23 36 1 35 3.0 13 11 a'=21;c,=9;a=4;c=1;
a-era 6 25 5 1 4 2.8 15 16 a=2;c,=1;a'=1;
a-era 6 26 2 1 1 3.0 3 20 a'=1;
a-era 6 27 7 1 6 2.7 1 7 a'=6;
a-era 6 28 15 1 14 5.0 12 4 a'=10;c,=2;a=2;
a-era 6 29 4 1 3 2.6 13 20 c,=2;a'=1;
a-era 6 31 14 1 13 3.4 15 4 a'=6;c,=4;a=2;b=1;
a-era 6 30 41 1 40 3.2 8 20 a'=29;c,=8;a=2;b=1;
a-era 7 0 2 1 1 2.8 14 26 a'=1;
a-era 7 1 4 1 3 2.7 5 11 a'=3;
a-era 7 2 9 1 8 3.0 8 14 a'=7;a=1;
a-era 7 3 2 1 1 2.9 5 6 a'=1;
a-era 7 4 2 1 1 3.4 8 24 a'=1;
a-era 7 5 14 1 13 3.1 7 23 a'=12;a=1;
a-era 7 6 2 1 1 2.9 13 16 a'=1;
a-era 7 8 1 1 0 3.1 7 10
a-era 7 7 6 1 5 2.8 1 7 a'=4;c,=1;
a-era 7 9 3 1 2 2.8 3 26 a'=2;
a-era 7 10 1 1 0 2.6 4 25
a-era 7 11 2 1 1 3.4 4 14 a'=1;
a-era 7 12 3 1 2 3.5 15 4 a'=2;
a-era 7 13 1 1 0 3.4 14 15
a-era 7 15 6 1 5 2.8 6 12 a'=3;c,=1;a=1;
a-era 7 14 5 1 4 3.3 2 12 a'=3;a=1;
a-era 7 16 5 1 4 2.9 8 13 a'=4;
a-era 7 17 3 1 2 3.8 14 20 a'=2;
a-era 7 18 3 1 2 3.0 2 15 c,=2;
a-era 7 19 5 1 4 2.5 11 17 a'=3;a=1;
a-era 7 20 8 1 7 3.1 7 27 a'=5;c,=1;a=1;
a-era 7 21 4 1 3 3.1 1 11 a'=3;
a-era 7 23 2 1 1 3.0 9 22 a=1;
a-era 7 24 3 1 2 3.4 5 17 a'=2;
a-era 7 22 6 1 5 3.1 11 4 a'=4;a=1;
a-era 7 25 4 1 3 3.5 10 16 a=2;a'=1;
a-era 7 26 2 1 1 3.1 15 8 a'=1;
a-era 7 27 7 1 6 2.6 6 11 a'=6;
a-era 7 28 14 1 13 3.8 7 12 a'=10;a=2;c,=1;
a-era 7 29 2 1 1 4.1 0 16 a'=1;
a-era 7 30 8 1 7 2.7 1 7 a'=6;a=1;
a-era 7 31 6 1 5 3.1 10 20 a'=3;c,=1;b=1;
# end 2026-10-08T12:58:29Z rows=257
Can't render this file because it has a wrong number of fields in line 2.

View file

@ -0,0 +1,259 @@
# a-none class w64m8g+sh256x27 eras [none] seeds 256 era-widths 64 weights base bittest off bin d601098699840534 start 2026-10-08T12:37:23Z host igneum-build-3 threads 8
cand era seed candidates accepted attempt bit_z bit_site bit_bit reasons
a-none none 2 5 1 4 2.8 8 24 a'=3;a=1;
a-none none 6 2 1 1 3.6 2 5 a'=1;
a-none none 7 1 1 0 5.2 11 5
a-none none 0 3 1 2 3.1 7 10 a'=2;
a-none none 4 2 1 1 2.9 12 17 a'=1;
a-none none 1 2 1 1 4.3 5 4 a'=1;
a-none none 5 2 1 1 3.2 1 12 a'=1;
a-none none 3 7 1 6 3.0 13 5 a'=3;a=2;c'''=1;
a-none none 9 7 1 6 2.5 6 11 a'=5;a=1;
a-none none 13 2 1 1 4.0 9 11 a'=1;
a-none none 10 7 1 6 3.4 2 16 a'=6;
a-none none 8 2 1 1 2.5 14 27 a'=1;
a-none none 12 1 1 0 3.2 1 4
a-none none 14 9 1 8 10.4 12 27 a'=7;a=1;
a-none none 11 1 1 0 2.9 2 24
a-none none 15 3 1 2 3.1 4 18 a'=2;
a-none none 16 10 1 9 3.4 2 17 a'=9;
a-none none 18 3 1 2 3.1 15 27 a'=2;
a-none none 19 3 1 2 2.9 12 26 a'=2;
a-none none 17 2 1 1 2.9 6 21 a'=1;
a-none none 20 3 1 2 3.2 6 23 a'=1;a=1;
a-none none 21 5 1 4 2.7 8 21 a'=4;
a-none none 22 1 1 0 2.7 4 15
a-none none 23 4 1 3 4.2 0 16 a'=3;
a-none none 25 13 1 12 3.2 12 19 a'=10;a=2;
a-none none 24 2 1 1 2.7 0 6 a'=1;
a-none none 27 3 1 2 3.0 5 27 b=1;a'=1;
a-none none 29 3 1 2 5.2 9 4 a'=2;
a-none none 28 2 1 1 8.2 4 4 a'=1;
a-none none 30 3 1 2 8.8 0 4 a'=1;a=1;
a-none none 26 7 1 6 3.9 2 4 a'=4;c''=1;a=1;
a-none none 32 4 1 3 2.9 13 14 a'=3;
a-none none 33 2 1 1 3.7 3 4 a=1;
a-none none 34 2 1 1 2.9 12 25 a=1;
a-none none 31 12 1 11 3.0 5 8 a'=7;a=2;c''=1;b=1;
a-none none 35 12 1 11 5.8 6 6 a'=9;a=2;
a-none none 36 1 1 0 3.3 11 18
a-none none 37 4 1 3 10.5 11 4 a'=3;
a-none none 39 1 1 0 3.4 5 20
a-none none 40 1 1 0 2.7 7 18
a-none none 38 4 1 3 2.8 3 4 c'''=1;b=1;a'=1;
a-none none 42 1 1 0 4.0 7 4
a-none none 43 2 1 1 3.1 6 4 a'=1;
a-none none 44 5 1 4 4.7 8 4 a'=4;
a-none none 45 9 1 8 3.6 2 8 a'=7;a=1;
a-none none 46 5 1 4 4.7 5 4 a'=4;
a-none none 47 1 1 0 3.0 3 10
a-none none 41 5 1 4 4.0 9 4 c''=2;a'=2;
a-none none 48 2 1 1 2.9 1 23 a'=1;
a-none none 49 2 1 1 3.8 7 9 a=1;
a-none none 51 2 1 1 3.2 9 6 a'=1;
a-none none 50 2 1 1 4.3 12 4 a'=1;
a-none none 52 1 1 0 8.1 4 10
a-none none 54 5 1 4 3.7 3 4 a'=3;a=1;
a-none none 56 4 1 3 3.0 15 9 a'=3;
a-none none 55 1 1 0 3.2 2 17
a-none none 57 1 1 0 2.9 15 9
a-none none 58 6 1 5 6.8 9 5 a'=5;
a-none none 59 4 1 3 2.9 13 11 a'=3;
a-none none 60 2 1 1 3.6 12 11 a'=1;
a-none none 53 2 1 1 3.7 1 4 c''=1;
a-none none 61 3 1 2 7.9 14 4 a'=2;
a-none none 64 4 1 3 3.2 4 25 a'=2;a=1;
a-none none 65 4 1 3 5.6 4 4 a'=2;b=1;
a-none none 66 6 1 5 4.3 10 4 a'=4;a=1;
a-none none 67 4 1 3 5.6 15 4 a'=2;a=1;
a-none none 68 2 1 1 5.3 6 27 a'=1;
a-none none 62 4 1 3 2.9 7 23 a'=2;c''=1;
a-none none 63 15 1 14 3.1 5 16 a'=13;c'''=1;
a-none none 69 4 1 3 41.9 0 15 a'=2;a=1;
a-none none 70 2 1 1 3.6 15 16 a'=1;
a-none none 71 3 1 2 3.2 6 14 c=1;a'=1;
a-none none 73 4 1 3 3.6 8 18 a'=3;
a-none none 74 1 1 0 3.2 3 14
a-none none 75 1 1 0 3.4 0 17
a-none none 76 4 1 3 3.6 0 15 a'=2;a=1;
a-none none 72 7 1 6 3.2 4 24 a'=5;c''=1;
a-none none 78 3 1 2 3.6 6 4 a'=2;
a-none none 79 1 1 0 2.8 5 21
a-none none 80 5 1 4 2.9 2 7 a'=4;
a-none none 81 3 1 2 3.3 11 12 a'=2;
a-none none 77 14 1 13 3.2 0 21 a'=9;b=2;c''=1;a=1;
a-none none 82 3 1 2 3.4 6 9 a'=2;
a-none none 83 1 1 0 3.2 5 5
a-none none 85 1 1 0 3.2 2 15
a-none none 86 2 1 1 2.9 0 10 a'=1;
a-none none 84 3 1 2 12.6 9 4 c'''=1;a'=1;
a-none none 87 1 1 0 32.2 9 10
a-none none 88 6 1 5 3.3 10 26 a'=4;b=1;
a-none none 89 4 1 3 3.6 0 4 a'=2;b=1;
a-none none 90 2 1 1 3.0 12 17 a'=1;
a-none none 91 1 1 0 2.5 9 24
a-none none 92 1 1 0 3.5 14 25
a-none none 93 1 1 0 3.5 10 6
a-none none 94 1 1 0 5.1 5 4
a-none none 95 2 1 1 2.8 11 27 a'=1;
a-none none 96 3 1 2 3.8 11 14 a'=2;
a-none none 97 1 1 0 3.2 11 15
a-none none 99 1 1 0 2.9 12 10
a-none none 98 3 1 2 3.5 0 4 c'''=1;a'=1;
a-none none 100 2 1 1 2.9 5 26 a'=1;
a-none none 101 1 1 0 4.1 13 27
a-none none 102 1 1 0 3.3 12 4
a-none none 103 1 1 0 3.9 8 4
a-none none 104 1 1 0 3.1 5 27
a-none none 106 4 1 3 5.0 10 18 a'=2;a=1;
a-none none 105 8 1 7 3.3 12 15 a'=6;c'''=1;
a-none none 107 3 1 2 9.6 0 27 a'=2;
a-none none 108 2 1 1 3.5 0 11 a'=1;
a-none none 110 2 1 1 2.6 13 22 a'=1;
a-none none 109 1 1 0 3.0 12 16
a-none none 111 1 1 0 3.3 2 25
a-none none 112 3 1 2 5.5 3 4 b=1;a'=1;
a-none none 113 1 1 0 4.3 12 4
a-none none 114 10 1 9 2.8 4 24 a'=8;a=1;
a-none none 115 1 1 0 3.0 11 4
a-none none 116 4 1 3 3.3 8 5 a'=3;
a-none none 117 4 1 3 3.6 5 10 a'=3;
a-none none 118 3 1 2 3.7 10 4 c=1;a=1;
a-none none 119 2 1 1 9.0 3 21 a'=1;
a-none none 121 1 1 0 2.8 13 9
a-none none 122 1 1 0 25.4 2 4
a-none none 120 5 1 4 3.3 5 4 a'=3;c''=1;
a-none none 124 1 1 0 3.3 5 12
a-none none 125 1 1 0 3.0 9 5
a-none none 126 2 1 1 2.8 15 26 a'=1;
a-none none 123 2 1 1 33.0 5 5 c'''=1;
a-none none 128 2 1 1 5.9 4 27 a'=1;
a-none none 127 7 1 6 2.8 2 16 a'=4;c'''=1;a=1;
a-none none 129 1 1 0 3.1 14 26
a-none none 130 7 1 6 3.0 14 13 a'=5;b=1;
a-none none 131 2 1 1 4.2 5 4 a'=1;
a-none none 132 1 1 0 3.1 9 16
a-none none 133 1 1 0 26.9 0 10
a-none none 134 2 1 1 2.8 7 19 a'=1;
a-none none 135 2 1 1 3.2 2 23 a'=1;
a-none none 136 1 1 0 25.4 6 4
a-none none 137 2 1 1 3.0 1 20 a'=1;
a-none none 138 9 1 8 3.8 15 10 a'=6;b=1;a=1;
a-none none 139 5 1 4 3.2 10 25 a'=4;
a-none none 140 4 1 3 10.9 14 11 b=1;a'=1;a=1;
a-none none 141 4 1 3 4.7 1 4 a'=2;c=1;
a-none none 142 2 1 1 2.6 8 8 a=1;
a-none none 144 3 1 2 3.4 14 27 a'=2;
a-none none 146 1 1 0 3.6 10 15
a-none none 145 1 1 0 3.5 3 10
a-none none 143 6 1 5 3.0 2 19 a'=2;a=2;c=1;
a-none none 147 2 1 1 3.6 2 22 a'=1;
a-none none 148 2 1 1 3.0 11 13 a=1;
a-none none 149 2 1 1 3.7 15 8 a'=1;
a-none none 150 1 1 0 28.4 3 9
a-none none 151 2 1 1 3.2 11 16 a'=1;
a-none none 152 2 1 1 11.6 13 19 a'=1;
a-none none 153 5 1 4 3.0 4 10 a'=4;
a-none none 154 3 1 2 3.1 11 15 a'=2;
a-none none 155 7 1 6 2.9 0 16 a'=3;a=3;
a-none none 156 2 1 1 5.6 13 4 a=1;
a-none none 157 2 1 1 2.6 12 14 a'=1;
a-none none 158 8 1 7 2.9 0 6 a'=6;a=1;
a-none none 159 1 1 0 3.4 12 24
a-none none 160 2 1 1 2.7 0 7 a'=1;
a-none none 161 6 1 5 6.3 4 4 a'=5;
a-none none 162 3 1 2 4.5 13 24 a'=2;
a-none none 163 5 1 4 3.1 5 22 a'=4;
a-none none 164 3 1 2 2.5 4 22 a'=1;a=1;
a-none none 165 4 1 3 3.6 7 19 a'=3;
a-none none 166 8 1 7 3.6 4 8 a'=7;
a-none none 168 1 1 0 4.1 1 4
a-none none 167 5 1 4 3.3 13 16 a'=3;a=1;
a-none none 169 1 1 0 3.5 5 5
a-none none 170 3 1 2 3.0 15 12 c=1;a'=1;
a-none none 171 1 1 0 2.5 5 14
a-none none 172 5 1 4 5.0 8 7 a'=3;a=1;
a-none none 173 4 1 3 2.9 11 24 a'=3;
a-none none 174 2 1 1 2.9 0 25 a=1;
a-none none 175 1 1 0 3.1 8 25
a-none none 176 6 1 5 3.7 14 19 a'=4;a=1;
a-none none 177 1 1 0 2.6 4 24
a-none none 179 1 1 0 2.7 0 7
a-none none 180 1 1 0 3.5 13 12
a-none none 181 3 1 2 2.9 6 11 a'=2;
a-none none 182 1 1 0 3.0 5 22
a-none none 178 4 1 3 2.8 3 8 a'=2;c''=1;
a-none none 184 6 1 5 2.7 6 24 a'=4;b=1;
a-none none 183 3 1 2 3.4 12 5 a'=2;
a-none none 185 2 1 1 3.3 5 4 a'=1;
a-none none 186 1 1 0 15.3 1 26
a-none none 187 6 1 5 2.7 14 17 a'=4;a=1;
a-none none 189 3 1 2 3.2 0 8 a'=2;
a-none none 191 2 1 1 2.8 6 14 a'=1;
a-none none 192 2 1 1 6.2 15 4 a'=1;
a-none none 193 1 1 0 3.6 12 17
a-none none 190 4 1 3 3.1 11 24 c'''=1;b=1;a'=1;
a-none none 194 17 1 16 3.2 2 11 a'=10;b=3;c=2;a=1;
a-none none 195 2 1 1 3.2 5 24 a'=1;
a-none none 188 8 1 7 4.3 15 25 a'=5;c'''=1;c''=1;
a-none none 196 3 1 2 4.3 15 4 a'=2;
a-none none 197 2 1 1 4.0 15 4 a'=1;
a-none none 198 7 1 6 3.5 6 4 a'=5;b=1;
a-none none 199 1 1 0 3.2 4 8
a-none none 200 10 1 9 3.1 4 8 a'=6;a=3;
a-none none 201 4 1 3 2.8 14 23 a'=3;
a-none none 202 3 1 2 4.8 0 12 a'=2;
a-none none 203 4 1 3 3.5 10 16 a'=3;
a-none none 204 2 1 1 2.8 7 6 a=1;
a-none none 205 1 1 0 2.8 11 10
a-none none 206 11 1 10 3.5 2 17 a'=9;a=1;
a-none none 207 2 1 1 3.3 1 27 a'=1;
a-none none 208 4 1 3 3.5 9 11 a'=2;a=1;
a-none none 210 3 1 2 4.1 11 4 a'=2;
a-none none 209 12 1 11 3.0 12 19 a'=9;c=1;a=1;
a-none none 211 3 1 2 3.2 3 15 a'=1;a=1;
a-none none 212 4 1 3 3.5 1 17 a'=3;
a-none none 213 3 1 2 8.7 2 20 a'=2;
a-none none 215 2 1 1 3.6 4 19 a'=1;
a-none none 214 6 1 5 12.0 2 4 a'=5;
a-none none 216 2 1 1 3.3 10 25 a'=1;
a-none none 217 1 1 0 3.1 1 15
a-none none 219 7 1 6 3.5 0 5 a'=6;
a-none none 220 1 1 0 2.9 6 13
a-none none 218 3 1 2 2.9 0 20 c=1;a'=1;
a-none none 221 3 1 2 3.4 2 5 a'=2;
a-none none 223 1 1 0 3.0 8 9
a-none none 224 3 1 2 3.0 9 27 a'=2;
a-none none 225 2 1 1 3.7 9 26 a'=1;
a-none none 226 1 1 0 30.2 14 16
a-none none 222 5 1 4 2.6 5 6 a'=3;c'''=1;
a-none none 227 5 1 4 3.6 2 19 a'=4;
a-none none 228 1 1 0 3.0 13 4
a-none none 229 1 1 0 2.9 12 24
a-none none 231 4 1 3 2.7 15 17 a'=3;
a-none none 232 3 1 2 3.0 5 5 a'=2;
a-none none 233 1 1 0 4.6 13 4
a-none none 234 1 1 0 2.9 10 17
a-none none 235 1 1 0 4.0 0 25
a-none none 230 9 1 8 5.6 3 5 a'=7;c''=1;
a-none none 236 1 1 0 2.8 4 24
a-none none 237 4 1 3 3.3 5 18 a'=3;
a-none none 238 7 1 6 4.8 12 5 a'=5;a=1;
a-none none 239 1 1 0 3.7 1 22
a-none none 240 1 1 0 5.0 6 4
a-none none 241 11 1 10 5.6 2 4 a'=10;
a-none none 242 6 1 5 3.5 1 21 a'=5;
a-none none 243 1 1 0 3.2 1 22
a-none none 244 3 1 2 3.2 8 5 a'=2;
a-none none 245 6 1 5 3.4 10 20 a'=5;
a-none none 247 2 1 1 4.3 6 4 a'=1;
a-none none 248 3 1 2 13.4 1 4 a'=2;
a-none none 249 1 1 0 4.1 2 27
a-none none 250 2 1 1 3.1 8 19 a'=1;
a-none none 251 3 1 2 3.4 9 11 b=1;a'=1;
a-none none 246 4 1 3 4.0 11 5 a'=2;c'''=1;
a-none none 252 4 1 3 2.7 2 27 a'=2;a=1;
a-none none 253 3 1 2 3.5 12 25 a'=2;
a-none none 254 5 1 4 2.8 0 10 a'=4;
a-none none 255 1 1 0 3.1 10 8
# end 2026-10-08T12:41:48Z rows=257
Can't render this file because it has a wrong number of fields in line 2.

View file

@ -0,0 +1,259 @@
# b-era class w16m8g+sh256x27 eras [0,1,2,3,4,5,6,7] seeds 32 era-widths 16 weights 13,11,6,10,8,8,7,2,6,4 bittest 1 bin d601098699840534 start 2026-10-08T12:58:31Z host igneum-build-3 threads 8
cand era seed candidates accepted attempt bit_z bit_site bit_bit reasons
b-era 0 1 2 1 1 2.6 11 10 c,=1;
b-era 0 5 3 1 2 5.3 11 19 a'=2;
b-era 0 6 2 1 1 3.0 6 7 a'=1;
b-era 0 2 2 1 1 3.2 7 23 c,=1;
b-era 0 3 2 1 1 3.0 14 21 c,=1;
b-era 0 7 3 1 2 3.4 1 11 c,=1;a'=1;
b-era 0 0 5 1 4 3.7 15 25 c,=2;a'=2;
b-era 0 4 9 1 8 2.9 12 25 a'=5;c,=2;a=1;
b-era 0 9 2 1 1 3.3 15 21 c,=1;
b-era 0 8 1 1 0 3.1 7 15
b-era 0 12 5 1 4 3.5 6 2 c,=2;a'=1;a=1;
b-era 0 11 9 1 8 3.2 6 22 c,=7;a'=1;
b-era 0 13 3 1 2 3.0 7 12 c,=1;a'=1;
b-era 0 14 6 1 5 3.2 10 26 a'=3;c,=2;
b-era 0 15 6 1 5 2.9 1 10 c,=3;a'=2;
b-era 0 10 10 1 9 2.9 7 19 c,=8;a=1;
b-era 0 16 1 1 0 3.9 7 22
b-era 0 17 3 1 2 3.6 6 17 c,=1;a'=1;
b-era 0 18 2 1 1 5.1 12 21 c,=1;
b-era 0 19 1 1 0 3.0 1 13
b-era 0 20 3 1 2 3.4 13 12 c,=1;a'=1;
b-era 0 21 4 1 3 3.5 9 15 a'=2;c,=1;
b-era 0 22 2 1 1 3.1 9 5 a'=1;
b-era 0 23 2 1 1 3.0 4 16 a=1;
b-era 0 24 1 1 0 3.0 1 15
b-era 0 25 6 1 5 3.0 2 25 c,=4;a=1;
b-era 0 27 2 1 1 3.0 4 19 a'=1;
b-era 0 28 9 1 8 3.4 12 7 a'=4;c,=3;a=1;
b-era 0 29 2 1 1 3.6 1 3 c,=1;
b-era 0 26 11 1 10 3.3 1 5 c,=6;a'=3;c=1;
b-era 0 30 5 1 4 2.9 5 19 a'=3;a=1;
b-era 0 31 1 1 0 3.0 8 21
b-era 1 0 5 1 4 3.2 14 24 c,=2;a'=2;
b-era 1 3 2 1 1 3.0 3 3 c,=1;
b-era 1 1 2 1 1 3.6 13 3 c,=1;
b-era 1 2 2 1 1 3.5 9 24 c,=1;
b-era 1 5 3 1 2 4.5 11 6 a'=2;
b-era 1 4 12 1 11 3.4 8 2 c,=5;a'=5;a=1;
b-era 1 6 2 1 1 3.1 2 12 a'=1;
b-era 1 7 3 1 2 3.1 6 16 c,=1;a'=1;
b-era 1 8 1 1 0 3.8 1 5
b-era 1 9 2 1 1 2.8 15 21 c,=1;
b-era 1 11 9 1 8 2.7 15 16 c,=7;a'=1;
b-era 1 12 5 1 4 3.2 9 7 c,=2;a'=1;a=1;
b-era 1 10 10 1 9 3.2 2 12 c,=8;a=1;
b-era 1 14 6 1 5 2.9 6 4 a'=3;c,=2;
b-era 1 13 3 1 2 2.7 1 18 c,=1;a'=1;
b-era 1 15 6 1 5 3.6 4 3 c,=3;a'=2;
b-era 1 16 1 1 0 2.9 8 27
b-era 1 17 3 1 2 2.6 12 2 c,=1;a'=1;
b-era 1 19 1 1 0 3.5 5 6
b-era 1 20 3 1 2 3.2 11 20 c,=1;a'=1;
b-era 1 21 4 1 3 3.3 10 25 a'=2;c,=1;
b-era 1 18 3 1 2 2.7 1 23 c,=2;
b-era 1 22 2 1 1 3.1 8 3 a'=1;
b-era 1 23 2 1 1 2.9 15 4 a=1;
b-era 1 24 1 1 0 3.0 2 12
b-era 1 27 2 1 1 3.9 2 19 a'=1;
b-era 1 25 6 1 5 2.9 4 13 c,=4;a=1;
b-era 1 28 9 1 8 2.7 12 8 a'=4;c,=3;a=1;
b-era 1 29 2 1 1 3.2 13 5 c,=1;
b-era 1 30 5 1 4 3.0 6 12 a'=3;a=1;
b-era 1 26 11 1 10 3.3 10 12 c,=6;a'=3;c=1;
b-era 1 31 1 1 0 3.7 0 17
b-era 2 0 2 1 1 3.2 6 17 a'=1;
b-era 2 1 1 1 0 4.0 5 10
b-era 2 3 2 1 1 3.7 0 18 c,=1;
b-era 2 2 1 1 0 3.1 2 23
b-era 2 4 1 1 0 3.2 7 5
b-era 2 6 2 1 1 3.5 5 11 a'=1;
b-era 2 5 3 1 2 3.5 5 19 a'=2;
b-era 2 7 1 1 0 2.9 11 18
b-era 2 8 1 1 0 3.0 10 19
b-era 2 9 1 1 0 3.3 1 18
b-era 2 11 1 1 0 2.8 11 3
b-era 2 10 1 1 0 3.4 0 16
b-era 2 12 2 1 1 3.6 1 25 a'=1;
b-era 2 13 1 1 0 3.4 4 20
b-era 2 14 1 1 0 3.3 3 9
b-era 2 15 2 1 1 3.1 12 9 a'=1;
b-era 2 16 1 1 0 2.5 6 19
b-era 2 18 1 1 0 3.1 1 15
b-era 2 17 2 1 1 4.0 10 19 a'=1;
b-era 2 20 1 1 0 4.9 5 3
b-era 2 19 1 1 0 2.9 2 20
b-era 2 21 3 1 2 2.5 7 15 a'=2;
b-era 2 22 2 1 1 2.9 3 14 a'=1;
b-era 2 23 2 1 1 3.0 7 22 a=1;
b-era 2 24 1 1 0 3.0 2 24
b-era 2 25 1 1 0 2.9 2 23
b-era 2 27 2 1 1 3.1 15 9 a'=1;
b-era 2 26 1 1 0 3.7 6 15
b-era 2 28 5 1 4 3.4 12 20 a'=3;a=1;
b-era 2 29 1 1 0 3.8 2 9
b-era 2 30 5 1 4 3.2 5 10 a'=3;a=1;
b-era 2 31 1 1 0 3.5 3 25
b-era 3 0 2 1 1 3.2 2 8 a'=1;
b-era 3 1 1 1 0 3.2 15 13
b-era 3 4 6 1 5 3.4 9 23 a'=4;c,=1;
b-era 3 3 2 1 1 4.1 11 4 c,=1;
b-era 3 2 1 1 0 2.9 8 5
b-era 3 5 3 1 2 5.0 11 3 a'=2;
b-era 3 6 2 1 1 3.3 3 22 a'=1;
b-era 3 7 1 1 0 3.1 2 18
b-era 3 9 1 1 0 2.9 1 4
b-era 3 8 1 1 0 3.0 10 16
b-era 3 11 1 1 0 3.6 2 15
b-era 3 12 2 1 1 3.2 14 14 a'=1;
b-era 3 10 1 1 0 3.0 4 12
b-era 3 13 1 1 0 3.3 10 8
b-era 3 14 1 1 0 2.8 0 16
b-era 3 15 2 1 1 4.5 14 2 a'=1;
b-era 3 16 1 1 0 3.0 1 21
b-era 3 17 2 1 1 3.1 14 2 a'=1;
b-era 3 18 1 1 0 3.2 10 20
b-era 3 19 1 1 0 2.7 14 25
b-era 3 20 3 1 2 3.1 12 24 c,=1;a'=1;
b-era 3 21 3 1 2 4.5 12 8 a'=2;
b-era 3 22 2 1 1 2.6 11 11 a'=1;
b-era 3 23 2 1 1 2.9 2 18 a=1;
b-era 3 24 1 1 0 3.4 13 16
b-era 3 25 1 1 0 3.9 2 7
b-era 3 26 1 1 0 2.7 0 23
b-era 3 28 5 1 4 3.4 2 25 a'=3;a=1;
b-era 3 27 2 1 1 2.9 13 2 a'=1;
b-era 3 29 1 1 0 3.3 11 17
b-era 3 30 5 1 4 3.7 0 19 a'=3;a=1;
b-era 3 31 1 1 0 2.8 10 21
b-era 4 0 5 1 4 3.0 15 8 c,=2;a'=2;
b-era 4 1 2 1 1 3.0 10 15 c,=1;
b-era 4 3 2 1 1 4.0 13 21 c,=1;
b-era 4 2 2 1 1 3.0 7 19 c,=1;
b-era 4 4 9 1 8 2.7 6 7 a'=5;c,=2;a=1;
b-era 4 5 3 1 2 4.3 11 10 a'=2;
b-era 4 6 2 1 1 3.1 3 11 a'=1;
b-era 4 7 3 1 2 4.1 7 9 c,=1;a'=1;
b-era 4 8 1 1 0 3.2 9 19
b-era 4 9 2 1 1 2.7 6 10 c,=1;
b-era 4 12 5 1 4 2.7 8 24 c,=2;a'=1;a=1;
b-era 4 11 9 1 8 4.0 9 19 c,=7;a'=1;
b-era 4 10 10 1 9 3.1 12 12 c,=8;a=1;
b-era 4 13 3 1 2 2.5 3 8 c,=1;a'=1;
b-era 4 14 6 1 5 2.7 13 23 a'=3;c,=2;
b-era 4 15 6 1 5 3.5 9 13 c,=3;a'=2;
b-era 4 16 1 1 0 3.6 0 6
b-era 4 17 3 1 2 3.7 6 6 c,=1;a'=1;
b-era 4 18 3 1 2 3.5 1 22 c,=2;
b-era 4 20 3 1 2 3.1 3 21 c,=1;a'=1;
b-era 4 19 1 1 0 3.4 12 13
b-era 4 21 4 1 3 3.2 6 17 a'=2;c,=1;
b-era 4 22 2 1 1 3.1 10 3 a'=1;
b-era 4 23 2 1 1 3.7 1 9 a=1;
b-era 4 24 1 1 0 2.8 6 6
b-era 4 25 6 1 5 2.8 12 21 c,=4;a=1;
b-era 4 27 2 1 1 3.3 0 12 a'=1;
b-era 4 28 9 1 8 3.9 6 20 a'=4;c,=3;a=1;
b-era 4 26 11 1 10 3.1 10 10 c,=6;a'=3;c=1;
b-era 4 29 2 1 1 2.9 10 20 c,=1;
b-era 4 30 5 1 4 3.5 14 23 a'=3;a=1;
b-era 4 31 1 1 0 2.6 10 11
b-era 5 0 5 1 4 3.4 4 19 c,=2;a'=2;
b-era 5 1 2 1 1 2.5 8 25 c,=1;
b-era 5 2 2 1 1 3.1 11 25 c,=1;
b-era 5 3 2 1 1 3.5 14 25 c,=1;
b-era 5 4 9 1 8 3.7 15 22 a'=5;c,=2;a=1;
b-era 5 5 3 1 2 5.2 11 23 a'=2;
b-era 5 6 2 1 1 3.1 6 22 a'=1;
b-era 5 7 3 1 2 3.0 8 11 c,=1;a'=1;
b-era 5 8 1 1 0 3.8 9 18
b-era 5 9 2 1 1 4.0 13 2 c,=1;
b-era 5 10 10 1 9 2.8 5 7 c,=8;a=1;
b-era 5 11 9 1 8 3.2 13 13 c,=7;a'=1;
b-era 5 12 5 1 4 3.3 3 25 c,=2;a'=1;a=1;
b-era 5 13 3 1 2 3.2 12 26 c,=1;a'=1;
b-era 5 14 6 1 5 3.3 10 22 a'=3;c,=2;
b-era 5 15 6 1 5 3.2 5 2 c,=3;a'=2;
b-era 5 16 1 1 0 3.1 4 26
b-era 5 17 3 1 2 3.3 7 27 c,=1;a'=1;
b-era 5 18 3 1 2 3.2 1 12 c,=2;
b-era 5 19 1 1 0 3.3 3 22
b-era 5 20 3 1 2 2.7 7 11 c,=1;a'=1;
b-era 5 21 4 1 3 3.7 3 15 a'=2;c,=1;
b-era 5 22 2 1 1 4.1 3 5 a'=1;
b-era 5 23 2 1 1 3.5 2 19 a=1;
b-era 5 24 1 1 0 2.7 5 8
b-era 5 27 2 1 1 3.0 1 6 a'=1;
b-era 5 25 6 1 5 3.0 4 23 c,=4;a=1;
b-era 5 26 11 1 10 2.5 8 24 c,=6;a'=3;c=1;
b-era 5 29 2 1 1 3.0 3 3 c,=1;
b-era 5 28 9 1 8 3.3 1 21 a'=4;c,=3;a=1;
b-era 5 30 5 1 4 3.2 10 8 a'=3;a=1;
b-era 5 31 1 1 0 3.6 10 4
b-era 6 0 5 1 4 2.4 10 11 c,=2;a'=2;
b-era 6 1 2 1 1 3.5 15 18 c,=1;
b-era 6 2 2 1 1 3.3 1 9 c,=1;
b-era 6 4 9 1 8 3.1 1 7 a'=5;c,=2;a=1;
b-era 6 3 2 1 1 3.0 12 18 c,=1;
b-era 6 5 3 1 2 4.1 11 5 a'=2;
b-era 6 6 2 1 1 3.2 1 20 a'=1;
b-era 6 7 3 1 2 2.8 3 22 c,=1;a'=1;
b-era 6 8 1 1 0 3.8 3 20
b-era 6 9 2 1 1 2.9 6 18 c,=1;
b-era 6 14 6 1 5 3.2 2 5 a'=3;c,=2;
b-era 6 13 3 1 2 3.8 5 10 c,=1;a'=1;
b-era 6 10 10 1 9 3.2 2 24 c,=8;a=1;
b-era 6 12 5 1 4 3.1 3 17 c,=2;a'=1;a=1;
b-era 6 11 9 1 8 3.2 8 11 c,=7;a'=1;
b-era 6 15 6 1 5 2.9 12 13 c,=3;a'=2;
b-era 6 16 1 1 0 3.5 8 3
b-era 6 17 3 1 2 3.8 15 5 c,=1;a'=1;
b-era 6 21 4 1 3 3.8 4 21 a'=2;c,=1;
b-era 6 20 3 1 2 2.9 15 10 c,=1;a'=1;
b-era 6 18 3 1 2 3.2 14 20 c,=2;
b-era 6 19 1 1 0 3.3 10 3
b-era 6 22 2 1 1 3.5 0 11 a'=1;
b-era 6 23 2 1 1 2.9 11 20 a=1;
b-era 6 24 1 1 0 3.2 0 16
b-era 6 25 6 1 5 3.0 14 24 c,=4;a=1;
b-era 6 29 2 1 1 3.0 14 5 c,=1;
b-era 6 27 2 1 1 4.2 0 2 a'=1;
b-era 6 26 11 1 10 3.5 12 6 c,=6;a'=3;c=1;
b-era 6 30 5 1 4 3.7 0 14 a'=3;a=1;
b-era 6 28 9 1 8 3.4 15 25 a'=4;c,=3;a=1;
b-era 6 31 1 1 0 3.1 2 20
b-era 7 0 2 1 1 2.9 13 20 a'=1;
b-era 7 1 1 1 0 3.4 12 23
b-era 7 3 2 1 1 3.0 13 18 c,=1;
b-era 7 2 2 1 1 2.9 4 9 c,=1;
b-era 7 4 1 1 0 5.1 0 3
b-era 7 6 2 1 1 3.2 10 3 a'=1;
b-era 7 5 3 1 2 3.1 1 9 a'=2;
b-era 7 7 1 1 0 3.0 4 8
b-era 7 8 1 1 0 3.4 15 20
b-era 7 9 2 1 1 3.8 10 23 c,=1;
b-era 7 11 1 1 0 3.2 7 23
b-era 7 10 1 1 0 3.2 10 26
b-era 7 12 2 1 1 3.4 6 13 a'=1;
b-era 7 13 3 1 2 3.0 4 4 c,=1;a'=1;
b-era 7 14 1 1 0 3.0 1 27
b-era 7 15 6 1 5 2.9 5 11 c,=3;a'=2;
b-era 7 16 1 1 0 2.9 0 23
b-era 7 17 2 1 1 3.2 11 14 a'=1;
b-era 7 18 2 1 1 3.4 5 24 c,=1;
b-era 7 20 1 1 0 3.1 6 14
b-era 7 19 1 1 0 2.6 8 10
b-era 7 21 4 1 3 3.2 2 19 a'=2;c,=1;
b-era 7 22 2 1 1 3.6 3 3 a'=1;
b-era 7 23 2 1 1 3.4 14 20 a=1;
b-era 7 24 1 1 0 2.6 10 15
b-era 7 25 1 1 0 2.7 2 12
b-era 7 26 7 1 6 3.0 2 3 c,=3;a'=2;c=1;
b-era 7 27 2 1 1 3.0 12 8 a'=1;
b-era 7 28 5 1 4 3.1 0 11 a'=3;a=1;
b-era 7 29 1 1 0 2.8 8 27
b-era 7 30 5 1 4 3.8 11 25 a'=3;a=1;
b-era 7 31 1 1 0 3.3 10 25
# end 2026-10-08T13:01:58Z rows=257
Can't render this file because it has a wrong number of fields in line 2.

View file

@ -0,0 +1,258 @@
# b-none class w16m8g+sh256x27 eras [none] seeds 256 era-widths 16 weights 13,11,6,10,8,8,7,2,6,4 bittest off bin d601098699840534 start 2026-10-08T12:45:53Z host igneum-build-4 threads 16
cand era seed candidates accepted attempt bit_z bit_site bit_bit reasons
b-none none 0 2 1 1 3.9 11 3 a'=1;
b-none none 2 5 1 4 3.4 15 18 a'=3;a=1;
b-none none 11 1 1 0 2.7 8 6
b-none none 12 1 1 0 3.4 13 11
b-none none 13 1 1 0 3.3 15 16
b-none none 14 1 1 0 16.0 11 2
b-none none 15 2 1 1 3.7 0 27 a'=1;
b-none none 1 1 1 0 3.3 14 3
b-none none 17 1 1 0 20.1 10 2
b-none none 16 4 1 3 3.6 10 23 a'=3;
b-none none 18 1 1 0 3.0 8 24
b-none none 10 1 1 0 2.9 8 10
b-none none 19 1 1 0 23.6 4 2
b-none none 6 2 1 1 16.2 2 2 c=1;
b-none none 4 2 1 1 3.2 13 26 a'=1;
b-none none 5 1 1 0 2.5 15 9
b-none none 8 2 1 1 5.0 2 17 a'=1;
b-none none 7 1 1 0 15.8 0 2
b-none none 9 4 1 3 57.7 2 10 a'=2;a=1;
b-none none 3 1 1 0 16.4 9 2
b-none none 22 1 1 0 31.0 5 23
b-none none 23 2 1 1 7.0 3 2 a'=1;
b-none none 28 1 1 0 2.8 2 20
b-none none 24 2 1 1 3.2 13 3 a'=1;
b-none none 30 3 1 2 9.8 0 4 a'=1;a=1;
b-none none 25 1 1 0 3.9 0 19
b-none none 20 1 1 0 19.1 10 2
b-none none 29 3 1 2 2.9 12 12 a'=2;
b-none none 21 4 1 3 3.2 15 12 a'=3;
b-none none 27 3 1 2 3.2 11 17 c=1;b=1;
b-none none 36 1 1 0 3.3 2 21
b-none none 40 1 1 0 3.5 12 3
b-none none 42 1 1 0 3.0 7 23
b-none none 31 4 1 3 2.9 15 11 a'=3;
b-none none 26 1 1 0 9.0 10 2
b-none none 34 2 1 1 3.0 14 11 a=1;
b-none none 32 1 1 0 2.8 4 2
b-none none 33 2 1 1 28.7 1 19 a=1;
b-none none 35 2 1 1 29.4 2 2 a'=1;
b-none none 37 2 1 1 3.5 4 13 a'=1;
b-none none 48 2 1 1 3.0 10 22 a'=1;
b-none none 39 1 1 0 2.9 7 10
b-none none 38 1 1 0 10.7 3 27
b-none none 43 2 1 1 3.0 1 18 a'=1;
b-none none 41 2 1 1 3.9 0 2 a'=1;
b-none none 44 1 1 0 3.0 10 12
b-none none 45 1 1 0 17.7 15 2
b-none none 46 2 1 1 71.0 2 23 a'=1;
b-none none 51 2 1 1 3.3 9 11 a'=1;
b-none none 47 2 1 1 11.8 13 2 a'=1;
b-none none 50 1 1 0 41.5 3 2
b-none none 56 1 1 0 3.3 15 3
b-none none 49 2 1 1 3.1 4 10 a'=1;
b-none none 55 1 1 0 16.4 3 2
b-none none 61 3 1 2 17.9 12 2 a'=2;
b-none none 52 1 1 0 17.6 8 2
b-none none 54 5 1 4 3.8 1 3 a'=2;c'''=1;a=1;
b-none none 63 2 1 1 17.3 6 2 a'=1;
b-none none 57 1 1 0 3.4 3 15
b-none none 59 1 1 0 2.8 15 21
b-none none 68 2 1 1 15.5 1 2 a'=1;
b-none none 67 1 1 0 9.5 3 2
b-none none 58 1 1 0 2.9 10 16
b-none none 70 1 1 0 4.2 12 2
b-none none 69 2 1 1 16.8 13 2 a=1;
b-none none 71 1 1 0 2.9 9 18
b-none none 74 1 1 0 6.5 12 2
b-none none 53 2 1 1 3.0 14 16 c''=1;
b-none none 62 1 1 0 15.5 11 2
b-none none 64 1 1 0 3.2 10 23
b-none none 60 2 1 1 3.7 12 18 a'=1;
b-none none 65 1 1 0 3.0 9 15
b-none none 72 3 1 2 3.8 5 21 c'''=1;a'=1;
b-none none 76 6 1 5 7.2 0 15 a'=4;a=1;
b-none none 66 2 1 1 39.1 10 2 a=1;
b-none none 81 2 1 1 64.0 6 25 a'=1;
b-none none 73 1 1 0 3.0 13 5
b-none none 82 1 1 0 2.6 5 8
b-none none 84 1 1 0 3.5 5 6
b-none none 75 1 1 0 3.7 5 18
b-none none 85 1 1 0 3.3 2 26
b-none none 83 1 1 0 3.1 15 26
b-none none 86 1 1 0 3.7 7 16
b-none none 87 1 1 0 32.3 9 10
b-none none 79 1 1 0 17.5 8 2
b-none none 80 1 1 0 3.0 8 6
b-none none 78 1 1 0 2.7 5 18
b-none none 92 1 1 0 8.6 7 2
b-none none 91 1 1 0 15.2 12 2
b-none none 90 2 1 1 3.0 7 18 c''=1;
b-none none 88 1 1 0 3.1 14 18
b-none none 89 2 1 1 3.6 5 3 a'=1;
b-none none 77 3 1 2 2.8 14 17 c''=1;a=1;
b-none none 97 1 1 0 2.8 4 22
b-none none 96 1 1 0 2.9 3 17
b-none none 99 2 1 1 2.8 4 21 c''=1;
b-none none 93 1 1 0 4.0 4 11
b-none none 103 1 1 0 16.4 8 2
b-none none 105 1 1 0 3.6 12 14
b-none none 111 1 1 0 2.8 7 3
b-none none 98 1 1 0 56.0 0 5
b-none none 94 1 1 0 16.4 5 2
b-none none 114 2 1 1 3.4 11 23 c=1;
b-none none 95 2 1 1 3.5 8 19 a'=1;
b-none none 113 1 1 0 13.4 12 2
b-none none 100 1 1 0 5.0 1 26
b-none none 107 3 1 2 3.2 10 17 a'=2;
b-none none 101 2 1 1 4.4 11 2 c''=1;
b-none none 104 1 1 0 3.2 15 19
b-none none 102 1 1 0 16.2 9 2
b-none none 106 1 1 0 4.7 3 2
b-none none 118 2 1 1 15.5 9 2 a=1;
b-none none 117 1 1 0 3.1 12 8
b-none none 121 1 1 0 7.1 5 19
b-none none 122 1 1 0 15.1 2 2
b-none none 112 2 1 1 13.2 7 2 a'=1;
b-none none 108 1 1 0 65.3 15 10
b-none none 110 2 1 1 3.0 3 22 a'=1;
b-none none 109 1 1 0 3.5 12 25
b-none none 124 1 1 0 3.1 12 19
b-none none 119 1 1 0 5.6 9 3
b-none none 123 1 1 0 18.2 13 17
b-none none 128 6 1 5 3.0 13 16 a'=3;c=1;a=1;
b-none none 130 1 1 0 14.7 10 2
b-none none 126 1 1 0 8.7 0 11
b-none none 115 1 1 0 3.6 10 4
b-none none 116 2 1 1 3.8 2 9 a'=1;
b-none none 120 2 1 1 17.0 13 2 a'=1;
b-none none 131 1 1 0 2.7 12 9
b-none none 132 1 1 0 3.3 5 19
b-none none 133 3 1 2 14.1 11 2 a'=2;
b-none none 139 3 1 2 36.4 4 2 a'=2;
b-none none 129 1 1 0 2.9 11 8
b-none none 125 1 1 0 3.1 7 7
b-none none 142 2 1 1 14.4 5 2 c=1;
b-none none 136 1 1 0 64.4 6 2
b-none none 144 1 1 0 3.5 4 18
b-none none 141 2 1 1 3.1 6 20 a'=1;
b-none none 135 2 1 1 2.8 8 6 a'=1;
b-none none 134 4 1 3 3.2 6 7 a'=3;
b-none none 150 1 1 0 27.8 3 9
b-none none 151 1 1 0 15.6 1 2
b-none none 137 2 1 1 3.1 10 18 a'=1;
b-none none 152 2 1 1 3.1 3 13 a'=1;
b-none none 127 4 1 3 15.5 14 2 a'=2;c'''=1;
b-none none 138 1 1 0 2.7 4 16
b-none none 146 1 1 0 6.2 8 2
b-none none 140 4 1 3 4.9 13 19 b=1;a'=1;a=1;
b-none none 155 1 1 0 14.5 0 2
b-none none 145 1 1 0 11.7 9 2
b-none none 149 2 1 1 8.5 11 2 a'=1;
b-none none 147 4 1 3 2.6 0 25 a'=3;
b-none none 159 1 1 0 5.8 3 2
b-none none 148 2 1 1 3.5 8 24 a=1;
b-none none 154 1 1 0 3.1 2 27
b-none none 161 4 1 3 3.3 13 19 a'=3;
b-none none 162 1 1 0 7.2 0 2
b-none none 143 3 1 2 19.4 1 6 c''=1;a=1;
b-none none 163 1 1 0 16.6 12 2
b-none none 164 1 1 0 16.5 14 2
b-none none 165 1 1 0 3.1 0 2
b-none none 166 4 1 3 2.9 13 3 a'=3;
b-none none 153 1 1 0 3.0 8 22
b-none none 167 2 1 1 2.8 11 26 a=1;
b-none none 160 2 1 1 2.7 2 24 a'=1;
b-none none 158 1 1 0 3.2 1 24
b-none none 172 1 1 0 17.1 2 2
b-none none 157 1 1 0 3.7 13 15
b-none none 176 3 1 2 2.8 2 16 a'=1;a=1;
b-none none 173 3 1 2 3.1 13 11 a'=2;
b-none none 156 2 1 1 3.1 8 19 a=1;
b-none none 171 1 1 0 3.2 9 9
b-none none 174 1 1 0 5.9 2 27
b-none none 168 1 1 0 7.2 1 2
b-none none 175 1 1 0 3.1 13 22
b-none none 170 1 1 0 18.0 9 2
b-none none 169 3 1 2 2.9 6 11 c''=1;a'=1;
b-none none 189 2 1 1 16.0 5 2 a'=1;
b-none none 187 1 1 0 63.9 13 15
b-none none 181 4 1 3 3.4 5 26 a'=3;
b-none none 183 1 1 0 17.5 5 2
b-none none 182 1 1 0 34.2 4 18
b-none none 179 1 1 0 3.2 0 9
b-none none 178 2 1 1 3.2 3 25 a'=1;
b-none none 177 1 1 0 3.1 14 15
b-none none 186 1 1 0 14.8 5 2
b-none none 180 2 1 1 3.4 0 18 a'=1;
b-none none 190 4 1 3 5.4 0 2 a'=2;c'''=1;
b-none none 184 3 1 2 7.8 8 2 a'=2;
b-none none 193 1 1 0 4.8 14 2
b-none none 194 2 1 1 16.8 12 2 c=1;
b-none none 196 2 1 1 3.0 6 23 a'=1;
b-none none 188 4 1 3 5.7 8 9 a'=2;c''=1;
b-none none 200 1 1 0 3.0 15 21
b-none none 195 1 1 0 2.9 2 6
b-none none 205 1 1 0 3.4 10 4
b-none none 185 2 1 1 12.7 5 2 c''=1;
b-none none 201 1 1 0 15.5 9 2
b-none none 191 2 1 1 3.3 8 4 a'=1;
b-none none 192 1 1 0 15.1 7 2
b-none none 204 2 1 1 4.4 9 18 c=1;
b-none none 198 1 1 0 2.7 11 22
b-none none 199 1 1 0 3.1 1 8
b-none none 197 4 1 3 3.2 5 12 a'=3;
b-none none 202 1 1 0 3.0 13 27
b-none none 208 1 1 0 3.9 0 26
b-none none 210 1 1 0 5.6 9 2
b-none none 215 2 1 1 3.1 8 16 a'=1;
b-none none 206 6 1 5 10.1 5 13 a'=4;a=1;
b-none none 214 2 1 1 3.0 1 15 b=1;
b-none none 203 4 1 3 5.3 9 16 a'=3;
b-none none 207 1 1 0 2.9 6 10
b-none none 217 1 1 0 3.8 15 27
b-none none 216 2 1 1 3.4 13 16 c'''=1;
b-none none 221 2 1 1 15.7 8 2 a'=1;
b-none none 212 2 1 1 3.3 2 19 a'=1;
b-none none 213 1 1 0 9.4 2 2
b-none none 220 1 1 0 12.0 13 2
b-none none 222 1 1 0 11.9 6 19
b-none none 219 1 1 0 4.4 9 5
b-none none 209 3 1 2 2.8 5 4 c''=1;c=1;
b-none none 224 3 1 2 3.2 7 23 a'=2;
b-none none 226 1 1 0 31.0 14 16
b-none none 211 3 1 2 3.4 8 7 c''=1;a=1;
b-none none 228 1 1 0 2.8 3 11
b-none none 218 3 1 2 2.8 1 15 c=1;a'=1;
b-none none 227 1 1 0 7.1 15 2
b-none none 223 1 1 0 2.9 1 2
b-none none 231 1 1 0 5.2 3 20
b-none none 225 1 1 0 3.0 5 11
b-none none 230 1 1 0 3.0 11 18
b-none none 233 1 1 0 16.0 13 2
b-none none 234 3 1 2 28.7 2 2 a'=2;
b-none none 232 1 1 0 16.1 7 2
b-none none 235 1 1 0 11.3 3 2
b-none none 236 1 1 0 9.2 13 2
b-none none 238 1 1 0 3.1 8 11
b-none none 229 1 1 0 3.3 12 19
b-none none 242 1 1 0 3.0 0 13
b-none none 239 1 1 0 3.0 2 27
b-none none 240 1 1 0 15.4 6 2
b-none none 241 1 1 0 15.4 4 2
b-none none 245 2 1 1 3.0 3 13 a'=1;
b-none none 243 1 1 0 5.8 0 3
b-none none 237 1 1 0 17.1 5 2
b-none none 247 1 1 0 3.0 15 22
b-none none 244 1 1 0 10.5 10 2
b-none none 249 1 1 0 7.1 0 2
b-none none 250 1 1 0 3.0 6 5
b-none none 248 1 1 0 3.2 1 15
b-none none 252 4 1 3 3.0 13 26 a'=2;a=1;
b-none none 253 1 1 0 3.1 0 12
b-none none 251 5 1 4 6.3 0 2 a'=2;c''=1;b=1;
b-none none 254 1 1 0 10.5 4 16
b-none none 255 1 1 0 3.1 6 16
b-none none 246 4 1 3 11.3 11 2 c''=2;a'=1;
Can't render this file because it has a wrong number of fields in line 2.

View file

@ -0,0 +1,95 @@
lease: 0 of 1 pool cores free (88 leased); waiting
lease: holding 1 pool cores (18, waited 804 s, class measure): class v6 census: verifier bench per candidate, one core
# bench start 2026-10-08T12:55:00Z host igneum-build-4 cores 18 bin d601098699840534
== ctrl rep 1 class mx8+sh256x27 weights base
warp base 0: single cold run 9.956 ms, 4096 items derived, lane0 2fc898410932f9e3 lane31 46d6a126c7aa1def
warp base 4096: single cold run 9.650 ms, 4096 items derived, lane0 7a977c3ed95fd05a lane31 2845370fe23e9cbc
warp base 1000000: single cold run 9.576 ms, 4096 items derived, lane0 7ec39eb3571dd232 lane31 a96c22d96855eaaf
CPU verify: 9.550 ms per 32-lane warp, avg of 20 (checksum 0e89d7e40db622e9)
== ctrl rep 2 class mx8+sh256x27 weights base
warp base 0: single cold run 9.835 ms, 4096 items derived, lane0 2fc898410932f9e3 lane31 46d6a126c7aa1def
warp base 4096: single cold run 9.602 ms, 4096 items derived, lane0 7a977c3ed95fd05a lane31 2845370fe23e9cbc
warp base 1000000: single cold run 9.590 ms, 4096 items derived, lane0 7ec39eb3571dd232 lane31 a96c22d96855eaaf
CPU verify: 9.543 ms per 32-lane warp, avg of 20 (checksum 0e89d7e40db622e9)
== ctrl rep 3 class mx8+sh256x27 weights base
warp base 0: single cold run 9.959 ms, 4096 items derived, lane0 2fc898410932f9e3 lane31 46d6a126c7aa1def
warp base 4096: single cold run 9.649 ms, 4096 items derived, lane0 7a977c3ed95fd05a lane31 2845370fe23e9cbc
warp base 1000000: single cold run 9.607 ms, 4096 items derived, lane0 7ec39eb3571dd232 lane31 a96c22d96855eaaf
CPU verify: 9.677 ms per 32-lane warp, avg of 20 (checksum 0e89d7e40db622e9)
== w16 rep 1 class w16m8g+sh256x27 weights base
warp base 0: single cold run 9.520 ms, 4096 items derived, lane0 86246a72110d1bdb lane31 9624ff67d32d0143
warp base 4096: single cold run 9.607 ms, 4096 items derived, lane0 58a778388ac864f7 lane31 3971533d5d207c9a
warp base 1000000: single cold run 9.587 ms, 4096 items derived, lane0 25a14bccb7b1307b lane31 939807ae42c54b17
CPU verify: 9.648 ms per 32-lane warp, avg of 20 (checksum 042c4aa1de6d950e)
== w16 rep 2 class w16m8g+sh256x27 weights base
warp base 0: single cold run 10.004 ms, 4096 items derived, lane0 86246a72110d1bdb lane31 9624ff67d32d0143
warp base 4096: single cold run 9.839 ms, 4096 items derived, lane0 58a778388ac864f7 lane31 3971533d5d207c9a
warp base 1000000: single cold run 9.746 ms, 4096 items derived, lane0 25a14bccb7b1307b lane31 939807ae42c54b17
CPU verify: 9.421 ms per 32-lane warp, avg of 20 (checksum 042c4aa1de6d950e)
== w16 rep 3 class w16m8g+sh256x27 weights base
warp base 0: single cold run 9.722 ms, 4096 items derived, lane0 86246a72110d1bdb lane31 9624ff67d32d0143
warp base 4096: single cold run 9.468 ms, 4096 items derived, lane0 58a778388ac864f7 lane31 3971533d5d207c9a
warp base 1000000: single cold run 9.469 ms, 4096 items derived, lane0 25a14bccb7b1307b lane31 939807ae42c54b17
CPU verify: 9.450 ms per 32-lane warp, avg of 20 (checksum 042c4aa1de6d950e)
== a rep 1 class w64m8g+sh256x27 weights base
warp base 0: single cold run 9.697 ms, 4096 items derived, lane0 256f099baec10276 lane31 bf2cf1eaa6860226
warp base 4096: single cold run 9.469 ms, 4096 items derived, lane0 0566cfce49f016a7 lane31 29c0d372bb080cb4
warp base 1000000: single cold run 9.444 ms, 4096 items derived, lane0 e2e4a79baa3d476b lane31 8d41a0d34c9a9988
CPU verify: 9.477 ms per 32-lane warp, avg of 20 (checksum abd5e098a8b332df)
== a rep 2 class w64m8g+sh256x27 weights base
warp base 0: single cold run 10.134 ms, 4096 items derived, lane0 256f099baec10276 lane31 bf2cf1eaa6860226
warp base 4096: single cold run 9.666 ms, 4096 items derived, lane0 0566cfce49f016a7 lane31 29c0d372bb080cb4
warp base 1000000: single cold run 9.831 ms, 4096 items derived, lane0 e2e4a79baa3d476b lane31 8d41a0d34c9a9988
CPU verify: 9.751 ms per 32-lane warp, avg of 20 (checksum abd5e098a8b332df)
== a rep 3 class w64m8g+sh256x27 weights base
warp base 0: single cold run 9.949 ms, 4096 items derived, lane0 256f099baec10276 lane31 bf2cf1eaa6860226
warp base 4096: single cold run 9.665 ms, 4096 items derived, lane0 0566cfce49f016a7 lane31 29c0d372bb080cb4
warp base 1000000: single cold run 9.731 ms, 4096 items derived, lane0 e2e4a79baa3d476b lane31 8d41a0d34c9a9988
CPU verify: 9.703 ms per 32-lane warp, avg of 20 (checksum abd5e098a8b332df)
== b rep 1 class w16m8g+sh256x27 weights 13,11,6,10,8,8,7,2,6,4
warp base 0: single cold run 9.843 ms, 4096 items derived, lane0 7f0a9d0730f4f729 lane31 c01afb20069e0408
warp base 4096: single cold run 9.607 ms, 4096 items derived, lane0 09d0e2b984e04fad lane31 2e59642314e381b7
warp base 1000000: single cold run 9.650 ms, 4096 items derived, lane0 a4697a4c254a61a7 lane31 3cc24e96c299c61d
CPU verify: 9.616 ms per 32-lane warp, avg of 20 (checksum 7e659be3d18245a4)
== b rep 2 class w16m8g+sh256x27 weights 13,11,6,10,8,8,7,2,6,4
warp base 0: single cold run 9.277 ms, 4096 items derived, lane0 7f0a9d0730f4f729 lane31 c01afb20069e0408
warp base 4096: single cold run 8.567 ms, 4096 items derived, lane0 09d0e2b984e04fad lane31 2e59642314e381b7
warp base 1000000: single cold run 8.582 ms, 4096 items derived, lane0 a4697a4c254a61a7 lane31 3cc24e96c299c61d
CPU verify: 8.598 ms per 32-lane warp, avg of 20 (checksum 7e659be3d18245a4)
== b rep 3 class w16m8g+sh256x27 weights 13,11,6,10,8,8,7,2,6,4
warp base 0: single cold run 8.619 ms, 4096 items derived, lane0 7f0a9d0730f4f729 lane31 c01afb20069e0408
warp base 4096: single cold run 8.234 ms, 4096 items derived, lane0 09d0e2b984e04fad lane31 2e59642314e381b7
warp base 1000000: single cold run 7.971 ms, 4096 items derived, lane0 a4697a4c254a61a7 lane31 3cc24e96c299c61d
CPU verify: 8.249 ms per 32-lane warp, avg of 20 (checksum 7e659be3d18245a4)
== c rep 1 class w64m8g+sh256x27 weights 13,11,6,10,8,8,7,2,6,4
warp base 0: single cold run 8.851 ms, 4096 items derived, lane0 10e24635c2a2eb4f lane31 050b69a708943300
warp base 4096: single cold run 8.922 ms, 4096 items derived, lane0 f7b8d920396a4441 lane31 784c075f03b92f28
warp base 1000000: single cold run 8.880 ms, 4096 items derived, lane0 07f320e47aa8c175 lane31 622c9b4638d07f65
CPU verify: 9.148 ms per 32-lane warp, avg of 20 (checksum 8551e68dd6a59dae)
== c rep 2 class w64m8g+sh256x27 weights 13,11,6,10,8,8,7,2,6,4
warp base 0: single cold run 9.579 ms, 4096 items derived, lane0 10e24635c2a2eb4f lane31 050b69a708943300
warp base 4096: single cold run 8.808 ms, 4096 items derived, lane0 f7b8d920396a4441 lane31 784c075f03b92f28
warp base 1000000: single cold run 8.869 ms, 4096 items derived, lane0 07f320e47aa8c175 lane31 622c9b4638d07f65
CPU verify: 9.214 ms per 32-lane warp, avg of 20 (checksum 8551e68dd6a59dae)
== c rep 3 class w64m8g+sh256x27 weights 13,11,6,10,8,8,7,2,6,4
warp base 0: single cold run 9.415 ms, 4096 items derived, lane0 10e24635c2a2eb4f lane31 050b69a708943300
warp base 4096: single cold run 9.177 ms, 4096 items derived, lane0 f7b8d920396a4441 lane31 784c075f03b92f28
warp base 1000000: single cold run 9.243 ms, 4096 items derived, lane0 07f320e47aa8c175 lane31 622c9b4638d07f65
CPU verify: 9.254 ms per 32-lane warp, avg of 20 (checksum 8551e68dd6a59dae)
== ctrl-again rep 1 class mx8+sh256x27 weights base
warp base 0: single cold run 9.541 ms, 4096 items derived, lane0 2fc898410932f9e3 lane31 46d6a126c7aa1def
warp base 4096: single cold run 9.261 ms, 4096 items derived, lane0 7a977c3ed95fd05a lane31 2845370fe23e9cbc
warp base 1000000: single cold run 9.239 ms, 4096 items derived, lane0 7ec39eb3571dd232 lane31 a96c22d96855eaaf
CPU verify: 9.493 ms per 32-lane warp, avg of 20 (checksum 0e89d7e40db622e9)
== ctrl-again rep 2 class mx8+sh256x27 weights base
warp base 0: single cold run 9.285 ms, 4096 items derived, lane0 2fc898410932f9e3 lane31 46d6a126c7aa1def
warp base 4096: single cold run 8.907 ms, 4096 items derived, lane0 7a977c3ed95fd05a lane31 2845370fe23e9cbc
warp base 1000000: single cold run 8.967 ms, 4096 items derived, lane0 7ec39eb3571dd232 lane31 a96c22d96855eaaf
CPU verify: 9.125 ms per 32-lane warp, avg of 20 (checksum 0e89d7e40db622e9)
== ctrl-again rep 3 class mx8+sh256x27 weights base
warp base 0: single cold run 9.423 ms, 4096 items derived, lane0 2fc898410932f9e3 lane31 46d6a126c7aa1def
warp base 4096: single cold run 9.181 ms, 4096 items derived, lane0 7a977c3ed95fd05a lane31 2845370fe23e9cbc
warp base 1000000: single cold run 9.123 ms, 4096 items derived, lane0 7ec39eb3571dd232 lane31 a96c22d96855eaaf
CPU verify: 9.191 ms per 32-lane warp, avg of 20 (checksum 0e89d7e40db622e9)
# bench end 2026-10-08T12:56:53Z
lease: released 1 pool cores after 918 s, exit 0

View file

@ -0,0 +1,259 @@
# c-era class w64m8g+sh256x27 eras [0,1,2,3,4,5,6,7] seeds 32 era-widths 64 weights 13,11,6,10,8,8,7,2,6,4 bittest 1 bin d601098699840534 start 2026-10-08T12:55:03Z host igneum-build-4 threads 15
cand era seed candidates accepted attempt bit_z bit_site bit_bit reasons
c-era 0 12 5 1 4 3.0 15 16 c,=2;a'=1;a=1;
c-era 0 1 2 1 1 2.8 9 15 c,=1;
c-era 0 3 2 1 1 3.1 7 24 c,=1;
c-era 0 9 2 1 1 4.3 15 20 c,=1;
c-era 0 11 9 1 8 3.3 10 8 c,=7;a'=1;
c-era 0 10 10 1 9 2.8 4 10 c,=8;a=1;
c-era 0 4 9 1 8 3.5 10 7 a'=5;c,=2;a=1;
c-era 0 8 1 1 0 2.9 12 5
c-era 0 6 2 1 1 2.8 14 16 a'=1;
c-era 0 14 6 1 5 3.0 11 25 a'=3;c,=2;
c-era 0 13 3 1 2 3.2 15 8 c,=1;a'=1;
c-era 0 5 3 1 2 3.7 11 19 a'=2;
c-era 0 0 5 1 4 3.5 3 19 c,=2;a'=2;
c-era 0 2 2 1 1 2.7 3 9 c,=1;
c-era 0 7 3 1 2 2.7 11 26 c,=1;a'=1;
c-era 0 16 1 1 0 3.5 8 13
c-era 0 17 3 1 2 3.2 3 11 c,=1;a'=1;
c-era 0 19 1 1 0 3.1 1 11
c-era 0 18 2 1 1 4.9 12 21 c,=1;
c-era 0 20 3 1 2 3.1 12 17 c,=1;a'=1;
c-era 0 21 4 1 3 3.4 2 11 a'=2;c,=1;
c-era 0 23 2 1 1 2.7 4 12 a=1;
c-era 0 27 2 1 1 2.8 6 20 a'=1;
c-era 0 15 6 1 5 3.0 15 11 c,=3;a'=2;
c-era 0 25 6 1 5 3.0 13 18 c,=4;a=1;
c-era 0 24 1 1 0 3.5 3 18
c-era 0 29 2 1 1 2.8 7 5 c,=1;
c-era 0 22 2 1 1 2.8 2 15 a'=1;
c-era 0 26 11 1 10 3.2 2 25 c,=6;a'=3;c=1;
c-era 0 28 9 1 8 3.0 10 15 a'=4;c,=3;a=1;
c-era 0 31 1 1 0 3.2 8 21
c-era 0 30 5 1 4 3.1 12 5 a'=3;a=1;
c-era 1 0 5 1 4 3.1 10 15 c,=2;a'=2;
c-era 1 3 2 1 1 3.7 11 17 c,=1;
c-era 1 1 2 1 1 3.1 15 19 c,=1;
c-era 1 5 3 1 2 4.7 11 7 a'=2;
c-era 1 6 2 1 1 3.0 5 6 a'=1;
c-era 1 2 2 1 1 3.2 10 23 c,=1;
c-era 1 7 3 1 2 3.7 7 26 c,=1;a'=1;
c-era 1 10 10 1 9 3.0 0 19 c,=8;a=1;
c-era 1 4 12 1 11 2.5 6 7 c,=5;a'=5;a=1;
c-era 1 9 2 1 1 2.7 5 20 c,=1;
c-era 1 8 1 1 0 3.2 1 18
c-era 1 11 9 1 8 2.7 2 15 c,=7;a'=1;
c-era 1 14 6 1 5 4.0 12 17 a'=3;c,=2;
c-era 1 12 5 1 4 2.7 14 22 c,=2;a'=1;a=1;
c-era 1 16 1 1 0 3.1 13 5
c-era 1 21 4 1 3 3.8 7 13 a'=2;c,=1;
c-era 1 20 3 1 2 3.0 6 24 c,=1;a'=1;
c-era 1 13 3 1 2 3.8 10 19 c,=1;a'=1;
c-era 1 17 3 1 2 3.1 1 6 c,=1;a'=1;
c-era 1 15 6 1 5 2.6 10 17 c,=3;a'=2;
c-era 1 25 6 1 5 2.8 0 6 c,=4;a=1;
c-era 1 18 3 1 2 3.1 2 20 c,=2;
c-era 1 22 2 1 1 3.2 14 25 a'=1;
c-era 1 28 9 1 8 3.6 5 20 a'=4;c,=3;a=1;
c-era 1 27 2 1 1 3.3 8 23 a'=1;
c-era 1 19 1 1 0 3.0 7 17
c-era 1 26 11 1 10 3.5 12 21 c,=6;a'=3;c=1;
c-era 1 23 2 1 1 3.1 3 24 a=1;
c-era 1 30 5 1 4 3.0 12 21 a'=3;a=1;
c-era 1 31 1 1 0 3.2 7 7
c-era 1 24 1 1 0 3.5 4 12
c-era 2 0 2 1 1 3.0 5 5 a'=1;
c-era 2 2 1 1 0 3.3 9 14
c-era 2 6 2 1 1 3.2 13 27 a'=1;
c-era 1 29 2 1 1 3.3 3 6 c,=1;
c-era 2 9 1 1 0 3.2 6 5
c-era 2 8 1 1 0 3.0 8 17
c-era 2 1 1 1 0 2.7 2 15
c-era 2 10 1 1 0 2.5 12 19
c-era 2 3 2 1 1 2.9 0 4 c,=1;
c-era 2 5 3 1 2 3.0 7 18 a'=2;
c-era 2 11 1 1 0 3.5 12 21
c-era 2 12 2 1 1 3.6 8 22 a'=1;
c-era 2 4 1 1 0 3.0 4 20
c-era 2 7 1 1 0 3.0 7 25
c-era 2 13 1 1 0 2.8 14 11
c-era 2 14 1 1 0 2.8 15 7
c-era 2 16 1 1 0 3.0 10 22
c-era 2 15 2 1 1 3.1 0 14 a'=1;
c-era 2 18 1 1 0 3.7 12 5
c-era 2 20 1 1 0 2.9 4 5
c-era 2 19 1 1 0 3.5 15 4
c-era 2 21 3 1 2 3.0 6 10 a'=2;
c-era 2 22 2 1 1 2.9 5 4 a'=1;
c-era 2 17 2 1 1 2.6 0 19 a'=1;
c-era 2 25 1 1 0 3.4 11 14
c-era 2 23 2 1 1 2.9 6 15 a=1;
c-era 2 27 2 1 1 4.0 10 23 a'=1;
c-era 2 24 1 1 0 2.7 0 23
c-era 2 26 1 1 0 2.8 13 14
c-era 2 28 5 1 4 3.0 8 10 a'=3;a=1;
c-era 2 31 1 1 0 3.5 13 18
c-era 2 29 1 1 0 2.5 5 18
c-era 3 2 1 1 0 3.3 3 7
c-era 3 4 6 1 5 3.5 6 12 a'=4;c,=1;
c-era 2 30 5 1 4 2.9 9 26 a'=3;a=1;
c-era 3 0 2 1 1 2.8 4 23 a'=1;
c-era 3 5 3 1 2 4.6 11 4 a'=2;
c-era 3 8 1 1 0 3.2 14 10
c-era 3 7 1 1 0 3.0 6 7
c-era 3 6 2 1 1 3.2 7 10 a'=1;
c-era 3 3 2 1 1 2.8 3 20 c,=1;
c-era 3 9 1 1 0 3.0 14 26
c-era 3 10 1 1 0 2.8 0 12
c-era 3 1 1 1 0 3.8 7 4
c-era 3 11 1 1 0 3.6 13 15
c-era 3 12 2 1 1 2.6 8 25 a'=1;
c-era 3 13 1 1 0 3.0 8 19
c-era 3 14 1 1 0 3.1 6 17
c-era 3 16 1 1 0 3.5 3 8
c-era 3 15 2 1 1 3.5 10 26 a'=1;
c-era 3 19 1 1 0 3.0 13 7
c-era 3 17 2 1 1 3.6 7 26 a'=1;
c-era 3 18 1 1 0 3.0 11 20
c-era 3 20 3 1 2 2.9 14 9 c,=1;a'=1;
c-era 3 24 1 1 0 2.6 14 17
c-era 3 21 3 1 2 3.6 2 4 a'=2;
c-era 3 23 2 1 1 3.1 9 15 a=1;
c-era 3 25 1 1 0 3.1 15 21
c-era 3 28 5 1 4 3.0 7 17 a'=3;a=1;
c-era 3 26 1 1 0 2.7 4 4
c-era 4 0 5 1 4 3.2 13 22 c,=2;a'=2;
c-era 3 29 1 1 0 3.1 0 24
c-era 3 22 2 1 1 3.2 1 24 a'=1;
c-era 3 31 1 1 0 3.0 1 4
c-era 3 30 5 1 4 2.9 3 10 a'=3;a=1;
c-era 3 27 2 1 1 3.1 3 7 a'=1;
c-era 4 4 9 1 8 4.9 1 14 a'=5;c,=2;a=1;
c-era 4 2 2 1 1 3.1 10 5 c,=1;
c-era 4 1 2 1 1 3.1 3 26 c,=1;
c-era 4 3 2 1 1 3.4 3 18 c,=1;
c-era 4 5 3 1 2 4.3 11 11 a'=2;
c-era 4 10 10 1 9 3.1 13 7 c,=8;a=1;
c-era 4 6 2 1 1 2.5 1 7 a'=1;
c-era 4 11 9 1 8 2.8 10 23 c,=7;a'=1;
c-era 4 8 1 1 0 2.7 3 4
c-era 4 13 3 1 2 3.3 7 9 c,=1;a'=1;
c-era 4 7 3 1 2 3.4 8 12 c,=1;a'=1;
c-era 4 18 3 1 2 2.9 14 7 c,=2;
c-era 4 12 3 1 2 5.4 0 10 c,=1;a'=1;
c-era 4 9 2 1 1 3.3 15 23 c,=1;
c-era 4 16 1 1 0 3.0 2 11
c-era 4 14 6 1 5 2.8 9 13 a'=3;c,=2;
c-era 4 21 4 1 3 3.3 9 19 a'=2;c,=1;
c-era 4 17 3 1 2 3.3 15 23 c,=1;a'=1;
c-era 4 15 6 1 5 3.3 9 8 c,=3;a'=2;
c-era 4 19 1 1 0 3.2 4 18
c-era 4 20 3 1 2 3.2 0 18 c,=1;a'=1;
c-era 4 22 2 1 1 3.9 12 25 a'=1;
c-era 4 25 6 1 5 3.3 4 16 c,=4;a=1;
c-era 4 23 2 1 1 3.5 9 7 a=1;
c-era 4 27 2 1 1 2.9 14 7 a'=1;
c-era 4 24 1 1 0 3.0 3 15
c-era 5 1 2 1 1 3.5 12 24 c,=1;
c-era 5 6 2 1 1 3.3 8 18 a'=1;
c-era 5 0 5 1 4 4.0 2 17 c,=2;a'=2;
c-era 4 31 1 1 0 3.0 2 13
c-era 5 9 2 1 1 3.3 7 21 c,=1;
c-era 5 8 1 1 0 3.2 15 22
c-era 4 28 9 1 8 3.3 9 18 a'=4;c,=3;a=1;
c-era 4 30 5 1 4 3.3 8 19 a'=3;a=1;
c-era 4 29 2 1 1 3.9 13 10 c,=1;
c-era 4 26 11 1 10 3.4 11 4 c,=6;a'=3;c=1;
c-era 5 10 10 1 9 3.0 4 24 c,=8;a=1;
c-era 5 13 3 1 2 3.3 4 21 c,=1;a'=1;
c-era 5 17 3 1 2 3.4 5 4 c,=1;a'=1;
c-era 5 5 3 1 2 5.1 11 22 a'=2;
c-era 5 14 6 1 5 2.9 0 14 a'=3;c,=2;
c-era 5 7 3 1 2 3.4 9 8 c,=1;a'=1;
c-era 5 19 1 1 0 2.7 11 11
c-era 5 15 6 1 5 3.4 6 23 c,=3;a'=2;
c-era 5 3 2 1 1 2.7 4 23 c,=1;
c-era 5 4 9 1 8 3.0 8 13 a'=5;c,=2;a=1;
c-era 5 2 2 1 1 3.2 10 4 c,=1;
c-era 5 18 3 1 2 3.4 13 11 c,=2;
c-era 5 20 3 1 2 4.0 15 13 c,=1;a'=1;
c-era 5 11 9 1 8 2.7 8 18 c,=7;a'=1;
c-era 5 16 1 1 0 3.5 1 23
c-era 5 12 5 1 4 3.5 11 15 c,=2;a'=1;a=1;
c-era 5 21 4 1 3 2.9 13 14 a'=2;c,=1;
c-era 5 22 2 1 1 2.6 11 10 a'=1;
c-era 5 24 1 1 0 2.9 0 12
c-era 5 28 9 1 8 2.9 8 10 a'=4;c,=3;a=1;
c-era 5 25 6 1 5 3.5 3 9 c,=4;a=1;
c-era 5 29 2 1 1 2.8 6 25 c,=1;
c-era 5 30 5 1 4 4.5 10 22 a'=3;a=1;
c-era 5 26 11 1 10 3.1 14 19 c,=6;a'=3;c=1;
c-era 5 27 2 1 1 3.1 11 4 a'=1;
c-era 5 23 2 1 1 2.7 2 20 a=1;
c-era 5 31 1 1 0 3.7 11 11
c-era 6 4 6 1 5 3.0 7 7 a'=4;c,=1;
c-era 6 0 2 1 1 3.0 8 10 a'=1;
c-era 6 5 3 1 2 4.1 11 6 a'=2;
c-era 6 2 2 1 1 3.5 7 8 c,=1;
c-era 6 6 2 1 1 3.0 9 21 a'=1;
c-era 6 1 2 1 1 2.6 2 26 c,=1;
c-era 6 9 1 1 0 3.1 5 9
c-era 6 3 2 1 1 2.9 13 24 c,=1;
c-era 6 11 5 1 4 3.1 0 7 c,=4;
c-era 6 13 1 1 0 3.1 0 4
c-era 6 12 2 1 1 3.4 12 13 a'=1;
c-era 6 10 7 1 6 2.9 12 13 c,=5;a=1;
c-era 6 14 1 1 0 3.2 14 23
c-era 6 7 1 1 0 3.2 4 12
c-era 6 8 1 1 0 2.8 13 8
c-era 6 15 6 1 5 3.3 3 11 c,=3;a'=2;
c-era 6 17 3 1 2 3.5 8 5 c,=1;a'=1;
c-era 6 19 1 1 0 3.3 9 21
c-era 6 18 1 1 0 2.9 7 14
c-era 6 16 1 1 0 2.8 9 13
c-era 6 20 3 1 2 2.9 13 6 c,=1;a'=1;
c-era 6 22 2 1 1 3.1 14 6 a'=1;
c-era 6 21 3 1 2 3.9 14 7 a'=2;
c-era 6 27 2 1 1 2.9 3 20 a'=1;
c-era 6 24 1 1 0 3.7 9 7
c-era 6 23 2 1 1 3.0 3 24 a=1;
c-era 6 25 1 1 0 3.0 12 7
c-era 6 26 7 1 6 5.5 5 5 c,=3;a'=2;c=1;
c-era 6 29 1 1 0 2.7 13 5
c-era 6 28 9 1 8 2.9 12 21 a'=4;c,=3;a=1;
c-era 6 31 1 1 0 3.5 1 23
c-era 7 0 2 1 1 2.7 12 23 a'=1;
c-era 6 30 5 1 4 3.4 9 4 a'=3;a=1;
c-era 7 2 2 1 1 3.1 2 17 c,=1;
c-era 7 1 1 1 0 2.6 3 5
c-era 7 3 2 1 1 3.0 12 6 c,=1;
c-era 7 7 1 1 0 3.2 0 8
c-era 7 4 9 1 8 3.3 7 5 a'=5;c,=2;a=1;
c-era 7 8 1 1 0 2.7 6 23
c-era 7 5 3 1 2 2.8 11 25 a'=2;
c-era 7 11 1 1 0 2.8 11 7
c-era 7 9 2 1 1 2.7 8 13 c,=1;
c-era 7 14 1 1 0 2.7 14 7
c-era 7 6 2 1 1 2.8 1 24 a'=1;
c-era 7 10 1 1 0 3.5 10 21
c-era 7 17 2 1 1 3.4 5 21 a'=1;
c-era 7 12 2 1 1 3.3 1 10 a'=1;
c-era 7 13 3 1 2 3.1 7 15 c,=1;a'=1;
c-era 7 20 1 1 0 3.8 15 17
c-era 7 15 6 1 5 2.8 13 24 c,=3;a'=2;
c-era 7 22 2 1 1 3.0 0 9 a'=1;
c-era 7 18 2 1 1 2.9 8 16 c,=1;
c-era 7 21 4 1 3 3.3 0 20 a'=2;c,=1;
c-era 7 23 2 1 1 2.9 8 13 a=1;
c-era 7 16 1 1 0 2.9 11 7
c-era 7 24 1 1 0 3.1 8 12
c-era 7 19 1 1 0 3.5 6 25
c-era 7 25 1 1 0 3.3 2 16
c-era 7 26 7 1 6 3.5 3 19 c,=3;a'=2;c=1;
c-era 7 28 5 1 4 3.0 13 14 a'=3;a=1;
c-era 7 29 1 1 0 3.2 13 19
c-era 7 30 5 1 4 2.7 8 17 a'=3;a=1;
c-era 7 31 1 1 0 3.2 7 20
c-era 7 27 2 1 1 2.9 2 4 a'=1;
# end 2026-10-08T12:59:21Z rows=257
Can't render this file because it has a wrong number of fields in line 2.

View file

@ -0,0 +1,258 @@
# c-none class w64m8g+sh256x27 eras [none] seeds 256 era-widths 64 weights 13,11,6,10,8,8,7,2,6,4 bittest off bin d601098699840534 start 2026-10-08T12:45:54Z host igneum-build-4 threads 16
cand era seed candidates accepted attempt bit_z bit_site bit_bit reasons
c-none none 1 1 1 0 3.1 2 9
c-none none 15 2 1 1 4.1 10 10 a'=1;
c-none none 2 5 1 4 3.3 3 26 a'=3;a=1;
c-none none 6 2 1 1 3.9 2 4 c=1;
c-none none 3 1 1 0 6.7 9 4
c-none none 4 2 1 1 3.0 14 15 a'=1;
c-none none 8 2 1 1 4.8 2 16 a'=1;
c-none none 5 1 1 0 2.9 1 8
c-none none 18 1 1 0 3.1 3 10
c-none none 19 1 1 0 7.2 4 5
c-none none 21 4 1 3 3.2 3 5 a'=3;
c-none none 22 1 1 0 30.9 5 23
c-none none 17 1 1 0 11.9 10 4
c-none none 20 1 1 0 13.6 10 4
c-none none 14 1 1 0 4.0 11 4
c-none none 10 1 1 0 3.0 14 7
c-none none 13 1 1 0 3.3 15 22
c-none none 24 2 1 1 3.2 9 4 a'=1;
c-none none 23 2 1 1 2.9 1 4 a'=1;
c-none none 25 1 1 0 2.5 8 5
c-none none 11 1 1 0 3.1 3 13
c-none none 7 1 1 0 4.0 0 4
c-none none 12 1 1 0 3.2 1 12
c-none none 29 3 1 2 4.0 12 19 a'=2;
c-none none 0 2 1 1 2.9 3 18 a'=1;
c-none none 27 3 1 2 2.8 5 14 c=1;b=1;
c-none none 16 4 1 3 3.4 11 21 a'=3;
c-none none 30 3 1 2 9.8 0 4 a'=1;a=1;
c-none none 28 1 1 0 3.0 0 7
c-none none 26 1 1 0 3.5 10 26
c-none none 41 2 1 1 3.3 8 5 a'=1;
c-none none 34 2 1 1 2.9 15 19 a=1;
c-none none 33 2 1 1 32.4 1 19 a=1;
c-none none 32 1 1 0 3.4 13 19
c-none none 38 1 1 0 10.8 3 27
c-none none 9 7 1 6 3.8 3 13 a'=3;c'''=1;c''=1;a=1;
c-none none 31 4 1 3 3.7 14 11 a'=3;
c-none none 35 2 1 1 9.9 2 4 a'=1;
c-none none 37 2 1 1 3.1 8 7 a'=1;
c-none none 36 1 1 0 3.0 1 21
c-none none 39 1 1 0 2.8 8 22
c-none none 42 1 1 0 3.0 6 12
c-none none 40 1 1 0 2.8 1 13
c-none none 48 2 1 1 3.0 3 10 a'=1;
c-none none 49 2 1 1 3.8 8 11 a'=1;
c-none none 56 1 1 0 3.3 3 20
c-none none 50 1 1 0 13.6 3 4
c-none none 57 1 1 0 3.5 15 9
c-none none 55 1 1 0 5.7 1 21
c-none none 52 1 1 0 7.4 4 10
c-none none 44 1 1 0 3.0 2 10
c-none none 43 2 1 1 3.2 5 22 a'=1;
c-none none 54 5 1 4 3.0 10 6 a'=2;c'''=1;a=1;
c-none none 53 2 1 1 3.6 8 12 c''=1;
c-none none 45 1 1 0 5.5 15 4
c-none none 51 2 1 1 3.1 6 15 a'=1;
c-none none 59 1 1 0 3.3 10 25
c-none none 47 2 1 1 3.0 12 8 a'=1;
c-none none 58 1 1 0 3.5 14 14
c-none none 60 2 1 1 3.1 1 16 a'=1;
c-none none 61 3 1 2 8.1 12 4 a'=2;
c-none none 63 2 1 1 6.0 6 4 a'=1;
c-none none 64 1 1 0 3.0 12 21
c-none none 46 4 1 3 3.6 14 23 a'=2;c'''=1;
c-none none 62 1 1 0 5.2 11 4
c-none none 65 1 1 0 2.9 6 12
c-none none 66 2 1 1 12.1 10 4 a=1;
c-none none 67 1 1 0 2.6 3 11
c-none none 68 2 1 1 9.1 2 4 a'=1;
c-none none 70 1 1 0 3.1 4 10
c-none none 69 2 1 1 4.2 13 4 a=1;
c-none none 76 6 1 5 8.7 0 15 a'=4;a=1;
c-none none 71 1 1 0 3.2 0 16
c-none none 73 1 1 0 3.1 3 13
c-none none 75 1 1 0 3.0 0 9
c-none none 80 1 1 0 3.0 12 19
c-none none 79 1 1 0 3.2 8 4
c-none none 82 1 1 0 3.6 12 22
c-none none 74 1 1 0 3.1 13 9
c-none none 77 3 1 2 3.8 6 9 c''=1;a=1;
c-none none 84 1 1 0 3.0 2 5
c-none none 81 3 1 2 3.3 0 5 c'''=1;a'=1;
c-none none 83 1 1 0 2.9 7 25
c-none none 78 1 1 0 3.1 9 9
c-none none 88 1 1 0 3.3 9 25
c-none none 72 3 1 2 3.3 12 11 c''=1;a'=1;
c-none none 95 2 1 1 2.5 15 19 a'=1;
c-none none 93 1 1 0 3.6 14 17
c-none none 90 2 1 1 2.9 1 19 c''=1;
c-none none 98 2 1 1 2.8 10 5 c'''=1;
c-none none 91 1 1 0 5.1 12 4
c-none none 85 1 1 0 3.4 14 20
c-none none 100 1 1 0 3.1 13 25
c-none none 87 1 1 0 31.4 9 10
c-none none 86 1 1 0 3.0 8 10
c-none none 102 1 1 0 3.4 9 4
c-none none 99 2 1 1 2.9 9 6 c''=1;
c-none none 89 2 1 1 2.8 6 5 a'=1;
c-none none 92 1 1 0 2.8 9 12
c-none none 97 1 1 0 2.6 7 12
c-none none 96 1 1 0 2.7 3 8
c-none none 94 1 1 0 3.5 5 4
c-none none 101 2 1 1 3.2 3 19 c''=1;
c-none none 106 1 1 0 2.8 6 9
c-none none 107 3 1 2 3.0 1 8 a'=2;
c-none none 103 1 1 0 4.4 8 4
c-none none 110 2 1 1 2.7 11 19 a'=1;
c-none none 104 1 1 0 3.5 6 9
c-none none 111 1 1 0 3.2 3 9
c-none none 109 1 1 0 3.3 2 11
c-none none 112 2 1 1 3.6 7 4 a'=1;
c-none none 113 1 1 0 3.5 5 13
c-none none 108 2 1 1 5.1 10 4 c'''=1;
c-none none 115 1 1 0 3.2 14 14
c-none none 105 1 1 0 2.7 13 10
c-none none 114 2 1 1 3.4 7 6 c=1;
c-none none 118 2 1 1 2.6 9 4 a=1;
c-none none 116 2 1 1 3.0 14 8 a'=1;
c-none none 120 2 1 1 3.1 12 12 a'=1;
c-none none 119 1 1 0 3.1 8 18
c-none none 124 1 1 0 3.3 9 18
c-none none 122 1 1 0 4.6 2 4
c-none none 123 2 1 1 32.4 5 5 c'''=1;
c-none none 129 1 1 0 3.2 7 4
c-none none 121 1 1 0 7.8 5 19
c-none none 117 1 1 0 3.3 7 9
c-none none 132 1 1 0 3.2 6 11
c-none none 125 1 1 0 2.8 5 6
c-none none 126 1 1 0 9.0 0 11
c-none none 133 3 1 2 5.4 11 4 a'=2;
c-none none 130 1 1 0 5.2 10 4
c-none none 128 6 1 5 4.0 0 5 a'=3;c=1;a=1;
c-none none 131 1 1 0 3.5 0 4
c-none none 134 4 1 3 2.8 11 19 a'=3;
c-none none 138 1 1 0 3.2 10 23
c-none none 137 2 1 1 3.1 1 17 a'=1;
c-none none 127 4 1 3 4.3 14 4 a'=2;c'''=1;
c-none none 141 2 1 1 2.7 11 26 a'=1;
c-none none 142 2 1 1 5.8 5 4 c=1;
c-none none 135 2 1 1 3.1 6 17 a'=1;
c-none none 140 4 1 3 7.1 13 14 b=1;a'=1;a=1;
c-none none 136 1 1 0 12.6 6 4
c-none none 144 1 1 0 3.3 8 7
c-none none 145 1 1 0 3.3 9 4
c-none none 151 1 1 0 2.9 14 8
c-none none 139 3 1 2 10.5 4 4 a'=2;
c-none none 148 2 1 1 2.7 2 15 a=1;
c-none none 150 1 1 0 28.8 3 9
c-none none 147 4 1 3 3.5 7 24 a'=3;
c-none none 155 1 1 0 3.2 0 4
c-none none 156 2 1 1 3.3 10 13 a=1;
c-none none 154 1 1 0 3.2 7 16
c-none none 153 1 1 0 3.6 1 6
c-none none 149 2 1 1 3.2 14 5 a'=1;
c-none none 152 2 1 1 3.2 1 21 a'=1;
c-none none 146 1 1 0 3.7 2 5
c-none none 159 1 1 0 3.4 9 5
c-none none 143 5 1 4 5.0 2 4 c'''=1;c''=1;a'=1;a=1;
c-none none 157 1 1 0 4.0 10 10
c-none none 160 2 1 1 2.8 11 9 a'=1;
c-none none 168 1 1 0 2.7 5 27
c-none none 158 1 1 0 3.0 2 19
c-none none 163 1 1 0 3.3 6 16
c-none none 175 1 1 0 3.0 9 6
c-none none 165 1 1 0 2.7 3 11
c-none none 161 4 1 3 3.0 10 8 a'=3;
c-none none 171 1 1 0 4.3 3 13
c-none none 167 2 1 1 3.2 2 11 a=1;
c-none none 164 1 1 0 3.7 14 4
c-none none 162 1 1 0 2.8 14 14
c-none none 179 1 1 0 3.2 0 12
c-none none 166 4 1 3 3.4 0 22 a'=3;
c-none none 172 1 1 0 4.2 2 4
c-none none 170 1 1 0 4.3 10 4
c-none none 173 3 1 2 2.5 5 5 a'=2;
c-none none 183 1 1 0 3.5 10 13
c-none none 176 3 1 2 3.5 5 13 a'=1;a=1;
c-none none 177 1 1 0 2.4 1 23
c-none none 174 1 1 0 6.7 2 27
c-none none 178 2 1 1 2.7 5 9 a'=1;
c-none none 169 3 1 2 3.0 10 22 c''=1;a'=1;
c-none none 182 1 1 0 34.1 4 18
c-none none 184 3 1 2 5.0 7 10 a'=2;
c-none none 180 2 1 1 3.0 0 23 a'=1;
c-none none 181 4 1 3 3.5 5 5 a'=3;
c-none none 189 2 1 1 5.8 5 4 a'=1;
c-none none 185 2 1 1 3.4 5 4 c''=1;
c-none none 190 4 1 3 2.7 10 16 a'=2;c'''=1;
c-none none 186 1 1 0 14.8 1 26
c-none none 188 4 1 3 5.8 8 27 a'=2;c''=1;
c-none none 198 1 1 0 2.9 7 24
c-none none 191 2 1 1 3.6 13 26 a'=1;
c-none none 193 1 1 0 4.1 6 6
c-none none 195 1 1 0 3.2 13 18
c-none none 192 1 1 0 3.3 7 4
c-none none 199 1 1 0 2.5 4 27
c-none none 200 1 1 0 3.2 1 15
c-none none 197 4 1 3 3.1 0 17 a'=3;
c-none none 196 2 1 1 3.1 6 24 a'=1;
c-none none 201 1 1 0 5.0 9 4
c-none none 187 2 1 1 4.5 3 4 c'''=1;
c-none none 202 1 1 0 3.0 2 13
c-none none 203 4 1 3 5.2 9 11 a'=3;
c-none none 194 2 1 1 4.4 12 4 c=1;
c-none none 207 1 1 0 3.1 13 23
c-none none 205 1 1 0 2.8 14 4
c-none none 204 2 1 1 2.9 4 10 c=1;
c-none none 210 1 1 0 3.2 13 27
c-none none 213 1 1 0 3.7 12 15
c-none none 208 1 1 0 2.5 10 4
c-none none 212 2 1 1 4.0 1 14 a'=1;
c-none none 215 2 1 1 2.8 13 17 a'=1;
c-none none 214 2 1 1 2.8 15 8 b=1;
c-none none 217 1 1 0 2.7 13 6
c-none none 209 3 1 2 2.9 2 21 c'''=1;c=1;
c-none none 216 2 1 1 2.8 6 22 c'''=1;
c-none none 206 6 1 5 7.0 5 13 a'=4;a=1;
c-none none 211 3 1 2 3.4 2 5 c''=1;a=1;
c-none none 219 1 1 0 2.8 4 10
c-none none 221 2 1 1 4.0 8 4 a'=1;
c-none none 226 1 1 0 31.5 14 16
c-none none 228 1 1 0 3.1 15 4
c-none none 227 1 1 0 3.0 2 15
c-none none 230 1 1 0 3.6 1 20
c-none none 223 1 1 0 2.6 10 15
c-none none 231 1 1 0 7.0 3 20
c-none none 232 1 1 0 4.4 10 4
c-none none 229 1 1 0 3.6 0 12
c-none none 233 1 1 0 4.0 13 4
c-none none 222 3 1 2 3.1 11 15 c'''=1;a'=1;
c-none none 235 1 1 0 9.0 12 4
c-none none 225 1 1 0 3.4 6 27
c-none none 236 1 1 0 3.6 12 12
c-none none 224 3 1 2 3.6 10 19 a'=2;
c-none none 220 1 1 0 3.7 13 4
c-none none 234 3 1 2 9.6 2 4 a'=2;
c-none none 245 2 1 1 3.4 8 11 a'=1;
c-none none 243 1 1 0 3.1 2 16
c-none none 242 1 1 0 3.4 12 9
c-none none 244 1 1 0 3.0 13 12
c-none none 241 1 1 0 5.0 4 4
c-none none 238 1 1 0 3.3 12 19
c-none none 237 1 1 0 4.4 5 4
c-none none 239 1 1 0 3.0 2 17
c-none none 218 3 1 2 3.2 3 11 c=1;a'=1;
c-none none 240 1 1 0 4.1 6 4
c-none none 250 1 1 0 2.9 1 7
c-none none 249 1 1 0 4.8 2 27
c-none none 254 1 1 0 9.7 4 18
c-none none 255 1 1 0 3.9 11 9
c-none none 253 1 1 0 4.4 0 21
c-none none 252 4 1 3 2.7 2 14 a'=2;a=1;
c-none none 246 4 1 3 3.3 10 14 c'''=1;c''=1;a'=1;
c-none none 247 1 1 0 2.6 10 7
c-none none 248 1 1 0 3.7 0 16
c-none none 251 5 1 4 3.0 4 7 a'=2;c''=1;b=1;
Can't render this file because it has a wrong number of fields in line 2.

View file

@ -0,0 +1,259 @@
# ctrl-era class mx8+sh256x27 eras [0,1,2,3,4,5,6,7] seeds 32 era-widths 4 weights base bittest 1 bin d601098699840534 start 2026-10-08T12:59:30Z host igneum-build-4 threads 16
cand era seed candidates accepted attempt bit_z bit_site bit_bit reasons
ctrl-era 0 0 1 1 0 3.2 2 4
ctrl-era 0 2 6 1 5 3.2 15 17 a'=4;c,=1;
ctrl-era 0 10 18 1 17 3.4 12 4 a'=8;c,=6;a=2;c=1;
ctrl-era 0 13 2 1 1 3.3 10 12 a=1;
ctrl-era 0 4 1 1 0 2.8 3 15
ctrl-era 0 9 7 1 6 3.6 15 3 a'=5;a=1;
ctrl-era 0 5 4 1 3 3.1 10 17 a'=2;c,=1;
ctrl-era 0 3 17 1 16 2.9 5 21 a'=11;c,=3;a=2;
ctrl-era 0 6 9 1 8 3.3 7 17 a'=7;a=1;
ctrl-era 0 15 4 1 3 3.2 6 7 c,=1;b=1;a'=1;
ctrl-era 0 17 1 1 0 3.7 8 24
ctrl-era 0 14 6 1 5 3.4 5 21 c,=2;a'=2;a=1;
ctrl-era 0 1 10 1 9 3.1 7 27 a'=7;c,=2;
ctrl-era 0 8 3 1 2 3.1 0 19 a'=2;
ctrl-era 0 18 9 1 8 3.3 15 5 a'=5;c,=2;a=1;
ctrl-era 0 16 14 1 13 3.2 1 23 a'=9;a=2;c,=1;b=1;
ctrl-era 0 7 3 1 2 3.1 10 1 c,=1;a'=1;
ctrl-era 0 12 5 1 4 3.0 0 10 a'=3;c,=1;
ctrl-era 0 20 8 1 7 3.2 8 11 a'=5;a=2;
ctrl-era 0 11 23 1 22 3.0 4 16 a'=15;c,=5;b=1;a=1;
ctrl-era 0 19 14 1 13 3.5 1 3 a'=7;a=3;c,=2;b=1;
ctrl-era 0 23 3 1 2 2.9 12 10 a'=2;
ctrl-era 0 22 18 1 17 3.3 15 12 a'=10;c,=4;a=3;
ctrl-era 0 26 2 1 1 2.8 2 0 a'=1;
ctrl-era 0 27 9 1 8 5.9 12 21 a'=7;a=1;
ctrl-era 0 21 1 1 0 3.0 2 6
ctrl-era 0 24 12 1 11 2.7 11 10 a'=9;c,=2;
ctrl-era 0 30 3 1 2 3.4 12 21 a'=2;
ctrl-era 0 31 2 1 1 3.0 13 7 c,=1;
ctrl-era 1 1 10 1 9 3.2 6 19 a'=7;c,=2;
ctrl-era 1 2 6 1 5 2.9 7 3 a'=4;c,=1;
ctrl-era 0 29 3 1 2 2.8 14 24 c,=1;a'=1;
ctrl-era 0 25 4 1 3 2.9 12 5 c,=1;b=1;a'=1;
ctrl-era 1 6 9 1 8 2.9 2 2 a'=7;a=1;
ctrl-era 1 3 17 1 16 3.0 8 13 a'=11;c,=3;a=2;
ctrl-era 1 9 7 1 6 3.4 0 19 a'=5;a=1;
ctrl-era 0 28 3 1 2 3.3 9 19 c,=1;a'=1;
ctrl-era 1 0 1 1 0 2.8 8 22
ctrl-era 1 5 4 1 3 2.9 12 14 a'=2;c,=1;
ctrl-era 1 7 3 1 2 3.3 15 8 c,=1;a'=1;
ctrl-era 1 8 3 1 2 3.4 1 9 a'=2;
ctrl-era 1 11 2 1 1 4.0 11 1 a'=1;
ctrl-era 1 4 1 1 0 3.0 7 23
ctrl-era 1 10 18 1 17 3.4 10 17 a'=8;c,=6;a=2;c=1;
ctrl-era 1 14 6 1 5 2.8 7 21 c,=2;a'=2;a=1;
ctrl-era 1 12 5 1 4 2.7 1 14 a'=3;c,=1;
ctrl-era 1 19 14 1 13 3.0 13 5 a'=7;a=3;c,=2;b=1;
ctrl-era 1 13 2 1 1 3.7 12 20 a=1;
ctrl-era 1 15 4 1 3 3.4 12 7 c,=1;b=1;a'=1;
ctrl-era 1 18 9 1 8 3.3 8 12 a'=5;c,=2;a=1;
ctrl-era 1 22 9 1 8 2.8 9 4 a'=5;a=2;c,=1;
ctrl-era 1 23 3 1 2 3.5 3 26 a'=2;
ctrl-era 1 17 1 1 0 3.2 4 24
ctrl-era 1 21 1 1 0 3.1 5 5
ctrl-era 1 24 12 1 11 3.6 11 10 a'=9;c,=2;
ctrl-era 1 20 8 1 7 3.7 0 6 a'=5;a=2;
ctrl-era 1 16 14 1 13 3.7 5 17 a'=9;a=2;c,=1;b=1;
ctrl-era 1 25 4 1 3 2.9 14 27 c,=1;b=1;a'=1;
ctrl-era 1 29 3 1 2 3.4 8 18 c,=1;a'=1;
ctrl-era 2 0 1 1 0 3.0 10 22
ctrl-era 1 27 16 1 15 3.1 13 2 a'=11;c,=3;a=1;
ctrl-era 2 1 3 1 2 3.5 15 5 a'=2;
ctrl-era 1 30 3 1 2 3.1 0 25 a'=2;
ctrl-era 1 28 3 1 2 3.2 3 3 c,=1;a'=1;
ctrl-era 1 26 2 1 1 2.8 1 2 a'=1;
ctrl-era 2 3 1 1 0 3.0 4 5
ctrl-era 1 31 2 1 1 3.0 11 11 c,=1;
ctrl-era 2 2 4 1 3 3.1 7 2 a'=3;
ctrl-era 2 6 9 1 8 2.8 8 16 a'=7;a=1;
ctrl-era 2 13 2 1 1 2.8 14 23 a=1;
ctrl-era 2 11 2 1 1 4.0 0 0 a'=1;
ctrl-era 2 7 1 1 0 4.3 13 0
ctrl-era 2 5 3 1 2 2.8 8 24 a'=2;
ctrl-era 2 4 1 1 0 3.3 0 3
ctrl-era 2 16 9 1 8 3.4 6 16 a'=5;a=2;b=1;
ctrl-era 2 8 3 1 2 3.4 6 8 a'=2;
ctrl-era 2 12 1 1 0 3.7 3 0
ctrl-era 2 18 5 1 4 3.4 13 19 a'=3;a=1;
ctrl-era 2 15 2 1 1 3.1 6 0 b=1;
ctrl-era 2 10 2 1 1 3.0 9 3 c,=1;
ctrl-era 2 9 7 1 6 3.2 14 6 a'=5;a=1;
ctrl-era 2 14 6 1 5 2.7 9 22 c,=2;a'=2;a=1;
ctrl-era 2 17 1 1 0 3.5 3 11
ctrl-era 2 20 8 1 7 3.1 3 17 a'=5;a=2;
ctrl-era 2 22 9 1 8 3.4 1 1 a'=5;a=2;c,=1;
ctrl-era 2 19 10 1 9 3.4 0 12 a'=5;a=2;c,=1;b=1;
ctrl-era 3 0 1 1 0 2.9 1 11
ctrl-era 2 24 8 1 7 3.8 13 22 a'=7;
ctrl-era 2 21 1 1 0 2.9 7 25
ctrl-era 2 27 9 1 8 3.1 7 14 a'=7;a=1;
ctrl-era 2 23 3 1 2 3.8 1 18 a'=2;
ctrl-era 2 30 3 1 2 3.3 1 21 a'=2;
ctrl-era 2 29 1 1 0 2.8 6 16
ctrl-era 2 26 2 1 1 3.3 3 7 a'=1;
ctrl-era 2 25 1 1 0 3.2 7 17
ctrl-era 2 31 1 1 0 5.9 2 0
ctrl-era 3 2 4 1 3 2.8 14 21 a'=3;
ctrl-era 2 28 2 1 1 3.1 0 0 a'=1;
ctrl-era 3 1 10 1 9 3.1 4 1 a'=7;c,=2;
ctrl-era 3 3 1 1 0 3.2 4 26
ctrl-era 3 5 4 1 3 3.2 13 12 a'=2;c,=1;
ctrl-era 3 6 9 1 8 3.1 9 17 a'=7;a=1;
ctrl-era 3 4 1 1 0 3.7 4 16
ctrl-era 3 7 3 1 2 3.3 10 11 c,=1;a'=1;
ctrl-era 3 8 3 1 2 3.4 10 8 a'=2;
ctrl-era 3 9 7 1 6 3.2 5 1 a'=5;a=1;
ctrl-era 3 14 6 1 5 2.8 12 4 c,=2;a'=2;a=1;
ctrl-era 3 11 22 1 21 5.0 5 0 a'=15;c,=4;b=1;a=1;
ctrl-era 3 10 18 1 17 3.4 11 25 a'=8;c,=6;a=2;c=1;
ctrl-era 3 16 14 1 13 3.5 7 24 a'=9;a=2;c,=1;b=1;
ctrl-era 3 15 4 1 3 2.7 9 3 c,=1;b=1;a'=1;
ctrl-era 3 13 2 1 1 4.1 4 1 a=1;
ctrl-era 3 12 5 1 4 3.2 1 11 a'=3;c,=1;
ctrl-era 3 17 1 1 0 3.0 0 7
ctrl-era 3 18 5 1 4 3.7 1 2 a'=3;a=1;
ctrl-era 3 20 8 1 7 3.0 6 6 a'=5;a=2;
ctrl-era 3 19 10 1 9 3.2 6 13 a'=5;a=2;c,=1;b=1;
ctrl-era 3 21 1 1 0 2.8 6 3
ctrl-era 3 22 9 1 8 3.5 9 11 a'=5;a=2;c,=1;
ctrl-era 3 26 2 1 1 3.0 6 18 a'=1;
ctrl-era 3 24 8 1 7 3.1 5 1 a'=7;
ctrl-era 3 23 3 1 2 2.8 2 22 a'=2;
ctrl-era 3 29 1 1 0 3.0 4 8
ctrl-era 3 25 4 1 3 2.7 7 6 c,=1;b=1;a'=1;
ctrl-era 3 27 12 1 11 5.5 5 0 a'=9;c,=1;a=1;
ctrl-era 3 28 3 1 2 3.0 5 1 c,=1;a'=1;
ctrl-era 3 30 3 1 2 3.1 6 4 a'=2;
ctrl-era 3 31 2 1 1 3.5 11 3 c,=1;
ctrl-era 4 1 10 1 9 3.4 9 3 a'=7;c,=2;
ctrl-era 4 0 1 1 0 3.0 15 20
ctrl-era 4 2 6 1 5 3.0 11 3 a'=4;c,=1;
ctrl-era 4 4 1 1 0 3.2 5 19
ctrl-era 4 3 17 1 16 3.4 10 14 a'=11;c,=3;a=2;
ctrl-era 4 5 4 1 3 3.2 10 25 a'=2;c,=1;
ctrl-era 4 7 3 1 2 3.1 3 10 c,=1;a'=1;
ctrl-era 4 6 9 1 8 3.4 12 2 a'=7;a=1;
ctrl-era 4 8 3 1 2 3.4 7 3 a'=2;
ctrl-era 4 10 18 1 17 2.9 0 26 a'=8;c,=6;a=2;c=1;
ctrl-era 4 9 7 1 6 3.0 4 9 a'=5;a=1;
ctrl-era 4 11 2 1 1 3.5 9 8 a'=1;
ctrl-era 4 13 2 1 1 3.5 10 1 a=1;
ctrl-era 4 14 6 1 5 3.9 15 1 c,=2;a'=2;a=1;
ctrl-era 4 12 5 1 4 3.3 7 15 a'=3;c,=1;
ctrl-era 4 16 14 1 13 3.7 13 7 a'=9;a=2;c,=1;b=1;
ctrl-era 4 15 4 1 3 3.2 1 25 c,=1;b=1;a'=1;
ctrl-era 4 17 1 1 0 3.7 10 25
ctrl-era 4 18 9 1 8 2.9 9 24 a'=5;c,=2;a=1;
ctrl-era 4 19 14 1 13 3.4 0 11 a'=7;a=3;c,=2;b=1;
ctrl-era 4 22 9 1 8 3.4 14 7 a'=5;a=2;c,=1;
ctrl-era 4 26 2 1 1 3.5 15 22 a'=1;
ctrl-era 4 20 8 1 7 3.6 0 10 a'=5;a=2;
ctrl-era 4 21 1 1 0 3.1 11 20
ctrl-era 4 25 4 1 3 3.2 13 20 c,=1;b=1;a'=1;
ctrl-era 4 23 3 1 2 3.3 5 8 a'=2;
ctrl-era 4 24 12 1 11 2.8 2 25 a'=9;c,=2;
ctrl-era 4 27 16 1 15 2.9 6 4 a'=11;c,=3;a=1;
ctrl-era 4 29 3 1 2 3.2 7 12 c,=1;a'=1;
ctrl-era 4 28 3 1 2 3.2 6 10 c,=1;a'=1;
ctrl-era 4 30 3 1 2 2.9 2 11 a'=2;
ctrl-era 4 31 2 1 1 3.4 15 22 c,=1;
ctrl-era 5 1 10 1 9 3.2 3 6 a'=7;c,=2;
ctrl-era 5 0 1 1 0 3.1 4 25
ctrl-era 5 2 6 1 5 3.2 5 2 a'=4;c,=1;
ctrl-era 5 3 17 1 16 3.9 14 12 a'=11;c,=3;a=2;
ctrl-era 5 5 4 1 3 3.3 5 24 a'=2;c,=1;
ctrl-era 5 8 3 1 2 3.3 13 15 a'=2;
ctrl-era 5 4 1 1 0 3.2 15 16
ctrl-era 5 6 9 1 8 2.6 4 2 a'=7;a=1;
ctrl-era 5 7 3 1 2 2.8 4 17 c,=1;a'=1;
ctrl-era 5 9 7 1 6 3.2 1 2 a'=5;a=1;
ctrl-era 5 11 2 1 1 3.1 9 22 a'=1;
ctrl-era 5 10 18 1 17 2.8 6 4 a'=8;c,=6;a=2;c=1;
ctrl-era 5 14 6 1 5 3.5 5 21 c,=2;a'=2;a=1;
ctrl-era 5 13 2 1 1 3.2 15 4 a=1;
ctrl-era 5 12 5 1 4 3.2 9 7 a'=3;c,=1;
ctrl-era 5 15 4 1 3 2.8 11 9 c,=1;b=1;a'=1;
ctrl-era 5 16 14 1 13 3.5 4 10 a'=9;a=2;c,=1;b=1;
ctrl-era 5 17 1 1 0 3.3 12 7
ctrl-era 5 18 9 1 8 3.0 10 14 a'=5;c,=2;a=1;
ctrl-era 5 20 8 1 7 3.5 4 7 a'=5;a=2;
ctrl-era 5 21 1 1 0 2.8 11 5
ctrl-era 5 22 9 1 8 3.1 13 10 a'=5;a=2;c,=1;
ctrl-era 5 19 14 1 13 3.2 8 0 a'=7;a=3;c,=2;b=1;
ctrl-era 5 23 3 1 2 2.9 9 5 a'=2;
ctrl-era 5 24 12 1 11 2.8 9 8 a'=9;c,=2;
ctrl-era 5 25 4 1 3 3.1 13 16 c,=1;b=1;a'=1;
ctrl-era 5 27 16 1 15 3.2 11 23 a'=11;c,=3;a=1;
ctrl-era 5 26 2 1 1 3.2 13 26 a'=1;
ctrl-era 5 29 3 1 2 3.3 0 24 c,=1;a'=1;
ctrl-era 5 28 3 1 2 3.3 12 17 c,=1;a'=1;
ctrl-era 5 30 3 1 2 2.8 9 14 a'=2;
ctrl-era 6 1 10 1 9 3.0 15 17 a'=7;c,=2;
ctrl-era 5 31 2 1 1 3.4 5 23 c,=1;
ctrl-era 6 0 1 1 0 3.0 12 1
ctrl-era 6 2 6 1 5 3.1 15 3 a'=4;c,=1;
ctrl-era 6 3 17 1 16 3.5 11 0 a'=11;c,=3;a=2;
ctrl-era 6 4 1 1 0 3.4 2 15
ctrl-era 6 5 4 1 3 4.4 2 13 a'=2;c,=1;
ctrl-era 6 6 9 1 8 3.6 7 19 a'=7;a=1;
ctrl-era 6 8 3 1 2 3.3 9 13 a'=2;
ctrl-era 6 7 3 1 2 2.8 9 25 c,=1;a'=1;
ctrl-era 6 9 7 1 6 3.2 1 6 a'=5;a=1;
ctrl-era 6 11 23 1 22 2.8 0 24 a'=15;c,=5;b=1;a=1;
ctrl-era 6 10 18 1 17 3.7 5 2 a'=8;c,=6;a=2;c=1;
ctrl-era 6 13 2 1 1 3.3 2 18 a=1;
ctrl-era 6 14 6 1 5 2.9 5 27 c,=2;a'=2;a=1;
ctrl-era 6 12 5 1 4 3.1 7 25 a'=3;c,=1;
ctrl-era 6 16 14 1 13 3.1 11 20 a'=9;a=2;c,=1;b=1;
ctrl-era 6 15 4 1 3 2.8 5 13 c,=1;b=1;a'=1;
ctrl-era 6 17 1 1 0 2.8 4 24
ctrl-era 6 18 9 1 8 3.5 3 25 a'=5;c,=2;a=1;
ctrl-era 6 19 14 1 13 3.3 13 12 a'=7;a=3;c,=2;b=1;
ctrl-era 6 21 1 1 0 3.4 11 1
ctrl-era 6 20 8 1 7 4.9 0 3 a'=5;a=2;
ctrl-era 6 22 9 1 8 2.8 5 18 a'=5;a=2;c,=1;
ctrl-era 6 23 3 1 2 2.8 8 7 a'=2;
ctrl-era 6 24 12 1 11 3.6 12 6 a'=9;c,=2;
ctrl-era 6 25 4 1 3 2.8 12 7 c,=1;b=1;a'=1;
ctrl-era 6 27 16 1 15 2.9 2 15 a'=11;c,=3;a=1;
ctrl-era 6 26 2 1 1 3.3 0 0 a'=1;
ctrl-era 6 29 3 1 2 2.7 8 13 c,=1;a'=1;
ctrl-era 6 30 3 1 2 3.5 9 22 a'=2;
ctrl-era 6 28 3 1 2 3.5 3 23 c,=1;a'=1;
ctrl-era 6 31 2 1 1 3.0 8 16 c,=1;
ctrl-era 7 0 1 1 0 3.1 9 1
ctrl-era 7 1 3 1 2 2.9 15 1 a'=2;
ctrl-era 7 2 4 1 3 3.1 14 23 a'=3;
ctrl-era 7 5 3 1 2 2.8 13 0 a'=2;
ctrl-era 7 3 5 1 4 3.5 4 3 a'=2;c,=1;a=1;
ctrl-era 7 6 9 1 8 2.9 5 6 a'=7;a=1;
ctrl-era 7 4 1 1 0 3.5 2 0
ctrl-era 7 7 1 1 0 2.7 15 2
ctrl-era 7 8 3 1 2 2.8 9 21 a'=2;
ctrl-era 7 9 7 1 6 3.0 13 21 a'=5;a=1;
ctrl-era 7 11 2 1 1 3.2 7 16 a'=1;
ctrl-era 7 10 2 1 1 3.2 13 12 c,=1;
ctrl-era 7 14 6 1 5 3.6 9 20 c,=2;a'=2;a=1;
ctrl-era 7 12 1 1 0 2.9 3 0
ctrl-era 7 13 2 1 1 3.8 13 25 a=1;
ctrl-era 7 15 4 1 3 4.1 0 3 c,=1;b=1;a'=1;
ctrl-era 7 16 9 1 8 2.8 4 15 a'=5;a=2;b=1;
ctrl-era 7 17 1 1 0 3.2 4 7
ctrl-era 7 18 9 1 8 3.3 10 17 a'=5;c,=2;a=1;
ctrl-era 7 19 14 1 13 2.5 15 0 a'=7;a=3;c,=2;b=1;
ctrl-era 7 21 1 1 0 3.5 8 10
ctrl-era 7 20 8 1 7 3.7 15 16 a'=5;a=2;
ctrl-era 7 22 9 1 8 3.5 9 18 a'=5;a=2;c,=1;
ctrl-era 7 23 3 1 2 2.9 13 8 a'=2;
ctrl-era 7 24 8 1 7 2.7 11 11 a'=7;
ctrl-era 7 27 9 1 8 3.5 0 2 a'=7;a=1;
ctrl-era 7 26 2 1 1 3.2 13 17 a'=1;
ctrl-era 7 29 3 1 2 3.3 11 21 c,=1;a'=1;
ctrl-era 7 25 4 1 3 3.2 3 21 c,=1;b=1;a'=1;
ctrl-era 7 30 3 1 2 3.6 12 14 a'=2;
ctrl-era 7 28 3 1 2 3.4 0 20 c,=1;a'=1;
ctrl-era 7 31 1 1 0 3.5 10 16
# end 2026-10-08T13:02:25Z rows=257
Can't render this file because it has a wrong number of fields in line 2.

View file

@ -0,0 +1,258 @@
# ctrl-none class mx8+sh256x27 eras [none] seeds 256 era-widths 4 weights base bittest off bin d601098699840534 start 2026-10-08T12:45:46Z host igneum-build-3 threads 8
cand era seed candidates accepted attempt bit_z bit_site bit_bit reasons
ctrl-none none 1 3 1 2 26.4 10 0 a'=2;
ctrl-none none 4 1 1 0 91.3 2 0
ctrl-none none 0 1 1 0 41.3 0 0
ctrl-none none 3 1 1 0 28.7 1 0
ctrl-none none 5 1 1 0 3.0 10 19
ctrl-none none 6 3 1 2 67.3 6 0 a'=2;
ctrl-none none 7 4 1 3 31.5 3 0 a'=3;
ctrl-none none 2 3 1 2 3.2 13 8 a'=2;
ctrl-none none 8 1 1 0 64.8 1 0
ctrl-none none 12 1 1 0 77.0 0 0
ctrl-none none 9 11 1 10 5.5 3 4 a'=10;
ctrl-none none 15 1 1 0 63.1 14 0
ctrl-none none 14 1 1 0 3.2 3 23
ctrl-none none 13 4 1 3 44.2 4 0 a'=3;
ctrl-none none 11 3 1 2 51.1 14 0 a'=1;a=1;
ctrl-none none 10 3 1 2 8.3 0 0 c'''=1;a'=1;
ctrl-none none 16 2 1 1 4.0 3 18 a'=1;
ctrl-none none 20 5 1 4 30.9 11 0 a'=3;a=1;
ctrl-none none 22 3 1 2 63.9 9 0 a'=2;
ctrl-none none 21 2 1 1 32.5 3 0 a'=1;
ctrl-none none 19 4 1 3 3.0 13 23 a'=2;a=1;
ctrl-none none 17 1 1 0 2.9 4 25
ctrl-none none 18 8 1 7 3.6 7 10 a'=6;c''=1;
ctrl-none none 23 2 1 1 3.4 5 15 a'=1;
ctrl-none none 24 1 1 0 32.3 7 0
ctrl-none none 25 1 1 0 3.3 1 2
ctrl-none none 27 1 1 0 3.0 8 25
ctrl-none none 26 1 1 0 2.9 9 13
ctrl-none none 29 3 1 2 36.8 1 0 b=1;a'=1;
ctrl-none none 28 1 1 0 2.8 13 0
ctrl-none none 31 1 1 0 2.8 4 5
ctrl-none none 30 2 1 1 64.2 6 0 a'=1;
ctrl-none none 32 1 1 0 3.0 8 17
ctrl-none none 33 1 1 0 5.3 7 0
ctrl-none none 34 3 1 2 64.5 8 0 a'=2;
ctrl-none none 35 2 1 1 63.9 14 0 a=1;
ctrl-none none 36 2 1 1 63.6 7 0 a'=1;
ctrl-none none 37 3 1 2 6.4 1 1 a'=2;
ctrl-none none 39 3 1 2 64.7 11 0 a'=1;a=1;
ctrl-none none 38 8 1 7 3.8 2 4 a'=7;
ctrl-none none 40 1 1 0 9.2 8 0
ctrl-none none 41 1 1 0 33.0 6 0
ctrl-none none 42 2 1 1 2.8 3 4 a'=1;
ctrl-none none 43 2 1 1 24.2 5 0 a'=1;
ctrl-none none 44 1 1 0 30.9 8 0
ctrl-none none 45 2 1 1 33.0 13 0 a'=1;
ctrl-none none 47 11 1 10 2.9 13 19 a'=10;
ctrl-none none 46 1 1 0 3.3 12 20
ctrl-none none 48 2 1 1 14.3 0 0 a'=1;
ctrl-none none 49 6 1 5 3.4 12 3 a'=4;b=1;
ctrl-none none 50 7 1 6 30.6 7 0 a'=4;b=1;a=1;
ctrl-none none 52 1 1 0 2.8 10 27
ctrl-none none 53 6 1 5 46.0 6 1 a'=4;b=1;
ctrl-none none 51 5 1 4 37.0 0 0 a'=2;c''=1;a=1;
ctrl-none none 54 3 1 2 64.0 11 0 a'=1;a=1;
ctrl-none none 55 7 1 6 14.9 0 0 a'=6;
ctrl-none none 56 5 1 4 31.2 5 0 a'=4;
ctrl-none none 58 1 1 0 3.0 3 19
ctrl-none none 57 2 1 1 15.3 15 1 a'=1;
ctrl-none none 59 3 1 2 63.9 3 0 a'=2;
ctrl-none none 60 5 1 4 3.2 7 11 a'=2;b=1;a=1;
ctrl-none none 61 3 1 2 3.0 4 1 a'=2;
ctrl-none none 63 1 1 0 97.1 3 0
ctrl-none none 62 4 1 3 63.9 14 0 a'=2;a=1;
ctrl-none none 64 1 1 0 28.7 6 1
ctrl-none none 66 2 1 1 55.7 1 0 a'=1;
ctrl-none none 65 1 1 0 21.1 0 0
ctrl-none none 67 1 1 0 61.6 3 0
ctrl-none none 68 3 1 2 3.4 15 14 a'=1;a=1;
ctrl-none none 71 5 1 4 3.2 9 1 a'=4;
ctrl-none none 69 2 1 1 3.5 1 19 a'=1;
ctrl-none none 70 4 1 3 64.2 15 0 a'=2;a=1;
ctrl-none none 72 1 1 0 63.9 7 0
ctrl-none none 74 2 1 1 68.5 11 0 a'=1;
ctrl-none none 73 4 1 3 2.9 6 14 a'=3;
ctrl-none none 75 1 1 0 32.4 4 0
ctrl-none none 76 2 1 1 31.7 5 0 b=1;
ctrl-none none 78 4 1 3 55.8 0 0 a'=3;
ctrl-none none 79 3 1 2 64.0 9 0 b=1;a'=1;
ctrl-none none 77 5 1 4 3.0 14 21 a'=4;
ctrl-none none 80 3 1 2 30.9 14 0 a'=2;
ctrl-none none 81 2 1 1 3.5 1 14 a'=1;
ctrl-none none 82 4 1 3 63.4 0 0 a'=2;a=1;
ctrl-none none 83 5 1 4 2.8 10 1 a'=4;
ctrl-none none 84 1 1 0 2.8 11 22
ctrl-none none 85 1 1 0 3.3 8 6
ctrl-none none 86 1 1 0 31.3 7 4
ctrl-none none 87 1 1 0 62.1 4 0
ctrl-none none 88 2 1 1 65.8 10 0 a'=1;
ctrl-none none 90 2 1 1 64.0 6 0 a'=1;
ctrl-none none 91 2 1 1 64.1 10 0 a=1;
ctrl-none none 92 7 1 6 63.0 1 0 a'=3;a=2;c=1;
ctrl-none none 89 19 1 18 2.9 5 8 a'=14;a=2;c''=1;b=1;
ctrl-none none 94 4 1 3 3.8 3 0 a'=3;
ctrl-none none 95 2 1 1 8.0 3 0 a'=1;
ctrl-none none 96 2 1 1 39.7 9 0 a'=1;
ctrl-none none 93 4 1 3 3.0 5 11 a'=2;c''=1;
ctrl-none none 97 4 1 3 3.2 14 16 a'=3;
ctrl-none none 99 1 1 0 3.4 0 26
ctrl-none none 98 2 1 1 3.1 8 0 a'=1;
ctrl-none none 100 3 1 2 3.1 4 6 a'=1;a=1;
ctrl-none none 102 2 1 1 31.9 14 0 a'=1;
ctrl-none none 101 2 1 1 8.4 14 0 a'=1;
ctrl-none none 103 4 1 3 2.8 15 6 a'=3;
ctrl-none none 104 4 1 3 2.9 4 8 a'=3;
ctrl-none none 105 3 1 2 5.0 10 27 a'=2;
ctrl-none none 106 1 1 0 3.2 5 15
ctrl-none none 107 7 1 6 63.8 5 0 a'=5;a=1;
ctrl-none none 108 2 1 1 2.9 7 11 a'=1;
ctrl-none none 109 1 1 0 2.8 1 4
ctrl-none none 110 3 1 2 3.6 0 7 a'=2;
ctrl-none none 112 1 1 0 2.8 9 27
ctrl-none none 111 4 1 3 64.1 15 0 a'=3;
ctrl-none none 113 1 1 0 27.4 0 0
ctrl-none none 114 3 1 2 4.6 2 1 b=1;a'=1;
ctrl-none none 115 5 1 4 70.0 4 0 a'=3;a=1;
ctrl-none none 116 2 1 1 15.3 15 1 c=1;
ctrl-none none 117 1 1 0 3.2 6 17
ctrl-none none 118 1 1 0 2.6 9 0
ctrl-none none 120 5 1 4 78.0 4 0 a'=4;
ctrl-none none 119 6 1 5 3.1 8 22 a'=5;
ctrl-none none 121 3 1 2 63.0 0 0 a'=1;a=1;
ctrl-none none 122 1 1 0 3.3 10 20
ctrl-none none 123 4 1 3 2.8 9 1 a'=3;
ctrl-none none 124 2 1 1 2.5 6 20 a'=1;
ctrl-none none 125 8 1 7 3.0 6 18 a'=7;
ctrl-none none 126 3 1 2 3.5 9 16 a'=2;
ctrl-none none 128 2 1 1 15.8 14 26 a'=1;
ctrl-none none 127 4 1 3 3.0 7 24 a'=3;
ctrl-none none 129 2 1 1 64.4 7 0 a=1;
ctrl-none none 130 1 1 0 3.4 8 25
ctrl-none none 131 1 1 0 32.4 14 0
ctrl-none none 132 2 1 1 3.5 11 7 a'=1;
ctrl-none none 133 6 1 5 63.6 11 0 a'=5;
ctrl-none none 134 1 1 0 3.4 15 26
ctrl-none none 135 3 1 2 31.0 9 0 a'=2;
ctrl-none none 136 2 1 1 41.0 3 0 a=1;
ctrl-none none 137 1 1 0 63.8 14 0
ctrl-none none 139 1 1 0 3.2 7 1
ctrl-none none 140 2 1 1 32.8 11 0 a'=1;
ctrl-none none 141 2 1 1 31.9 2 0 a'=1;
ctrl-none none 142 4 1 3 95.5 11 0 a'=3;
ctrl-none none 138 6 1 5 2.6 10 16 a'=3;c''=1;a=1;
ctrl-none none 143 3 1 2 64.5 12 0 a=2;
ctrl-none none 144 2 1 1 3.5 4 14 a'=1;
ctrl-none none 145 2 1 1 27.6 0 0 a'=1;
ctrl-none none 146 2 1 1 31.4 0 0 a'=1;
ctrl-none none 149 4 1 3 3.1 8 18 a'=3;
ctrl-none none 147 1 1 0 2.9 11 25
ctrl-none none 148 5 1 4 63.2 12 0 a'=3;a=1;
ctrl-none none 150 5 1 4 9.1 3 1 a'=3;a=1;
ctrl-none none 152 2 1 1 2.8 4 23 a'=1;
ctrl-none none 151 3 1 2 32.5 9 0 a'=2;
ctrl-none none 153 2 1 1 3.0 15 2 a'=1;
ctrl-none none 154 1 1 0 14.2 4 0
ctrl-none none 155 9 1 8 43.8 3 0 a'=5;b=2;a=1;
ctrl-none none 156 14 1 13 4.0 0 18 a'=10;a=3;
ctrl-none none 157 4 1 3 3.2 4 19 a'=3;
ctrl-none none 158 6 1 5 2.9 12 21 a'=3;a=2;
ctrl-none none 159 8 1 7 2.9 2 5 a'=7;
ctrl-none none 160 1 1 0 3.1 12 23
ctrl-none none 161 2 1 1 64.2 7 0 a'=1;
ctrl-none none 162 1 1 0 32.6 8 1
ctrl-none none 163 1 1 0 57.2 4 1
ctrl-none none 165 2 1 1 64.3 4 0 b=1;
ctrl-none none 164 4 1 3 3.5 6 3 a'=2;b=1;
ctrl-none none 166 1 1 0 63.7 6 15
ctrl-none none 168 3 1 2 63.7 13 0 a'=2;
ctrl-none none 167 3 1 2 3.0 1 3 a'=2;
ctrl-none none 170 5 1 4 3.1 11 10 a'=4;
ctrl-none none 171 4 1 3 3.2 14 23 a'=3;
ctrl-none none 172 6 1 5 2.8 13 6 a'=5;
ctrl-none none 169 5 1 4 8.2 0 0 a'=3;c''=1;
ctrl-none none 174 3 1 2 63.3 10 1 a'=1;a=1;
ctrl-none none 176 2 1 1 65.0 10 0 a'=1;
ctrl-none none 175 1 1 0 50.3 1 0
ctrl-none none 173 4 1 3 64.6 10 0 c''=1;a'=1;a=1;
ctrl-none none 177 1 1 0 31.9 8 23
ctrl-none none 178 6 1 5 2.8 14 6 a'=4;a=1;
ctrl-none none 179 3 1 2 2.7 6 20 a'=2;
ctrl-none none 180 1 1 0 3.4 5 7
ctrl-none none 181 8 1 7 5.8 0 1 a'=6;a=1;
ctrl-none none 183 4 1 3 72.1 10 0 a'=3;
ctrl-none none 182 1 1 0 4.0 7 22
ctrl-none none 184 2 1 1 3.9 10 20 a'=1;
ctrl-none none 185 1 1 0 3.1 6 19
ctrl-none none 186 1 1 0 29.9 7 1
ctrl-none none 187 2 1 1 3.6 12 18 a'=1;
ctrl-none none 188 1 1 0 19.2 0 3
ctrl-none none 189 4 1 3 62.8 15 0 b=1;a'=1;a=1;
ctrl-none none 191 3 1 2 55.0 9 26 a'=2;
ctrl-none none 190 1 1 0 27.1 0 0
ctrl-none none 192 3 1 2 3.6 15 23 b=1;a'=1;
ctrl-none none 193 6 1 5 18.4 0 0 a'=4;a=1;
ctrl-none none 194 1 1 0 16.2 13 0
ctrl-none none 195 2 1 1 3.2 13 27 a'=1;
ctrl-none none 196 3 1 2 5.4 15 0 a'=2;
ctrl-none none 197 3 1 2 33.6 15 1 a'=2;
ctrl-none none 198 1 1 0 3.3 0 18
ctrl-none none 199 3 1 2 64.5 11 0 a'=2;
ctrl-none none 200 1 1 0 28.3 9 1
ctrl-none none 201 2 1 1 3.6 14 7 a'=1;
ctrl-none none 202 2 1 1 25.3 6 0 a'=1;
ctrl-none none 203 7 1 6 8.3 0 0 a'=5;b=1;
ctrl-none none 204 1 1 0 3.7 6 21
ctrl-none none 205 1 1 0 4.0 2 9
ctrl-none none 206 3 1 2 63.1 12 0 c=1;a'=1;
ctrl-none none 207 9 1 8 2.8 5 8 a'=8;
ctrl-none none 208 1 1 0 3.6 11 9
ctrl-none none 209 2 1 1 21.5 13 3 a=1;
ctrl-none none 210 2 1 1 3.3 8 12 a'=1;
ctrl-none none 211 2 1 1 18.3 15 12 a'=1;
ctrl-none none 212 10 1 9 3.8 0 24 a'=7;a=2;
ctrl-none none 213 3 1 2 64.9 1 0 a'=2;
ctrl-none none 214 2 1 1 2.9 11 15 a'=1;
ctrl-none none 215 2 1 1 19.1 3 0 a'=1;
ctrl-none none 216 1 1 0 4.5 7 25
ctrl-none none 217 5 1 4 14.2 8 0 a'=4;
ctrl-none none 219 2 1 1 3.3 10 15 a'=1;
ctrl-none none 218 1 1 0 16.7 1 0
ctrl-none none 220 1 1 0 32.6 7 0
ctrl-none none 221 8 1 7 31.9 8 0 a'=6;a=1;
ctrl-none none 222 1 1 0 32.2 4 1
ctrl-none none 223 3 1 2 31.7 7 0 a=2;
ctrl-none none 224 2 1 1 51.2 0 0 a'=1;
ctrl-none none 227 1 1 0 3.3 5 13
ctrl-none none 226 4 1 3 31.2 11 0 a'=2;a=1;
ctrl-none none 228 2 1 1 4.5 12 0 a'=1;
ctrl-none none 229 1 1 0 30.8 7 0
ctrl-none none 225 5 1 4 13.0 1 0 a'=3;c''=1;
ctrl-none none 230 6 1 5 19.1 0 2 a'=4;c=1;
ctrl-none none 231 1 1 0 3.2 6 2
ctrl-none none 232 4 1 3 3.2 9 9 a'=2;a=1;
ctrl-none none 233 2 1 1 34.4 3 2 a'=1;
ctrl-none none 234 5 1 4 2.8 9 11 a'=4;
ctrl-none none 236 7 1 6 3.5 4 11 a'=6;
ctrl-none none 235 2 1 1 65.6 3 0 a'=1;
ctrl-none none 237 1 1 0 64.5 3 0
ctrl-none none 238 5 1 4 41.3 3 3 a'=3;b=1;
ctrl-none none 239 5 1 4 28.0 0 0 a'=4;
ctrl-none none 240 1 1 0 31.5 11 0
ctrl-none none 241 1 1 0 3.9 9 27
ctrl-none none 242 4 1 3 3.5 4 20 a'=2;a=1;
ctrl-none none 244 1 1 0 12.6 0 25
ctrl-none none 243 3 1 2 3.3 15 10 a'=2;
ctrl-none none 245 5 1 4 15.6 2 1 a'=4;
ctrl-none none 246 7 1 6 3.7 12 17 a'=6;
ctrl-none none 247 1 1 0 63.4 10 0
ctrl-none none 248 1 1 0 3.4 6 20
ctrl-none none 249 1 1 0 50.8 0 0
ctrl-none none 250 2 1 1 63.9 3 0 a'=1;
ctrl-none none 251 2 1 1 64.3 2 0 a'=1;
ctrl-none none 253 2 1 1 4.1 6 2 a'=1;
ctrl-none none 252 8 1 7 23.6 11 0 a'=5;a=2;
ctrl-none none 254 6 1 5 33.0 7 4 a'=4;b=1;
ctrl-none none 255 1 1 0 27.9 0 0
Can't render this file because it has a wrong number of fields in line 2.

View file

@ -0,0 +1,17 @@
class era seed attempt program_id min_site_ratio min_site top0.1_share control_share ratio_to_control max_item_reads control_max reads
w64m8g+sh256x27 none 4 1 f4487c87cfff1e7a 1.04905 3 0.002380 0.002377 1.0010 26 29 134217728
w64m8g+sh256x27 none 1 1 29d2bcaba2d8edf5 1.04882 5 0.002382 0.002381 1.0001 27 27 134217728
w64m8g+sh256x27 none 2 4 5fb46883e180b9f5 1.04885 4 0.002379 0.002380 0.9999 27 29 134217728
w64m8g+sh256x27 none 0 2 73d1382989a69a8d 1.04894 1 0.002383 0.002382 1.0002 30 27 134217728
w64m8g+sh256x27 none 6 1 311d1351271e9ea5 1.04885 2 0.002384 0.002380 1.0019 27 28 134217728
w64m8g+sh256x27 none 5 1 520307099e14103b 1.04903 6 0.002381 0.002379 1.0007 27 28 134217728
w64m8g+sh256x27 none 7 0 3dc79646fedce4b4 1.04390 11 0.002379 0.002379 1.0000 27 27 134217728
w64m8g+sh256x27 none 3 6 c10bff8bcd67ceed 1.04888 14 0.002380 0.002380 1.0001 27 28 134217728
w64m8g+sh256x27 none 11 0 9d64aefadd7069ac 1.04904 0 0.002381 0.002382 0.9996 27 27 134217728
w64m8g+sh256x27 none 8 1 f98d219ab657820c 1.04906 2 0.002379 0.002379 1.0001 28 27 134217728
w64m8g+sh256x27 none 9 6 18c383d344cb8948 1.04903 1 0.002381 0.002380 1.0007 28 28 134217728
w64m8g+sh256x27 none 14 8 0996f04d4debf93a 1.04706 12 0.002396 0.002382 1.0061 27 27 134217728
w64m8g+sh256x27 none 10 6 d3683b954033a6f5 1.04879 0 0.002381 0.002381 0.9999 27 27 134217728
w64m8g+sh256x27 none 12 0 bd25136fa86cfdbb 1.04890 4 0.002380 0.002381 0.9993 26 27 134217728
w64m8g+sh256x27 none 13 1 6fe6ecb094a5a1f6 1.04892 4 0.002379 0.002383 0.9986 27 27 134217728
w64m8g+sh256x27 none 15 2 a2a33a99967a47a1 1.04894 1 0.002382 0.002380 1.0010 28 27 134217728
1 class era seed attempt program_id min_site_ratio min_site top0.1_share control_share ratio_to_control max_item_reads control_max reads
2 w64m8g+sh256x27 none 4 1 f4487c87cfff1e7a 1.04905 3 0.002380 0.002377 1.0010 26 29 134217728
3 w64m8g+sh256x27 none 1 1 29d2bcaba2d8edf5 1.04882 5 0.002382 0.002381 1.0001 27 27 134217728
4 w64m8g+sh256x27 none 2 4 5fb46883e180b9f5 1.04885 4 0.002379 0.002380 0.9999 27 29 134217728
5 w64m8g+sh256x27 none 0 2 73d1382989a69a8d 1.04894 1 0.002383 0.002382 1.0002 30 27 134217728
6 w64m8g+sh256x27 none 6 1 311d1351271e9ea5 1.04885 2 0.002384 0.002380 1.0019 27 28 134217728
7 w64m8g+sh256x27 none 5 1 520307099e14103b 1.04903 6 0.002381 0.002379 1.0007 27 28 134217728
8 w64m8g+sh256x27 none 7 0 3dc79646fedce4b4 1.04390 11 0.002379 0.002379 1.0000 27 27 134217728
9 w64m8g+sh256x27 none 3 6 c10bff8bcd67ceed 1.04888 14 0.002380 0.002380 1.0001 27 28 134217728
10 w64m8g+sh256x27 none 11 0 9d64aefadd7069ac 1.04904 0 0.002381 0.002382 0.9996 27 27 134217728
11 w64m8g+sh256x27 none 8 1 f98d219ab657820c 1.04906 2 0.002379 0.002379 1.0001 28 27 134217728
12 w64m8g+sh256x27 none 9 6 18c383d344cb8948 1.04903 1 0.002381 0.002380 1.0007 28 28 134217728
13 w64m8g+sh256x27 none 14 8 0996f04d4debf93a 1.04706 12 0.002396 0.002382 1.0061 27 27 134217728
14 w64m8g+sh256x27 none 10 6 d3683b954033a6f5 1.04879 0 0.002381 0.002381 0.9999 27 27 134217728
15 w64m8g+sh256x27 none 12 0 bd25136fa86cfdbb 1.04890 4 0.002380 0.002381 0.9993 26 27 134217728
16 w64m8g+sh256x27 none 13 1 6fe6ecb094a5a1f6 1.04892 4 0.002379 0.002383 0.9986 27 27 134217728
17 w64m8g+sh256x27 none 15 2 a2a33a99967a47a1 1.04894 1 0.002382 0.002380 1.0010 28 27 134217728

View file

@ -0,0 +1,17 @@
class era seed attempt program_id min_site_ratio min_site top0.1_share control_share ratio_to_control max_item_reads control_max reads
w16m8g+sh256x27 none 4 1 f555de19a14e4b82 1.00253 1 0.002380 0.002377 1.0011 29 29 134217728
w16m8g+sh256x27 none 1 0 a3c5c857b3d36618 1.00256 0 0.002383 0.002381 1.0008 28 27 134217728
w16m8g+sh256x27 none 6 1 3acc6704472bbd7d 1.00103 2 0.002381 0.002380 1.0005 28 28 134217728
w16m8g+sh256x27 none 3 0 db87b6c4aeb9f99f 1.00098 9 0.002383 0.002380 1.0011 26 28 134217728
w16m8g+sh256x27 none 5 0 e10be8f927a334d8 1.00242 12 0.002382 0.002379 1.0014 30 28 134217728
w16m8g+sh256x27 none 0 1 48a93d5e5b931cd7 1.00257 14 0.002380 0.002382 0.9989 27 27 134217728
w16m8g+sh256x27 none 7 0 e2e1dec77412f084 1.00109 0 0.002382 0.002379 1.0011 27 27 134217728
w16m8g+sh256x27 none 2 4 41a382862fa1488d 1.00260 5 0.002379 0.002380 0.9999 27 29 134217728
w16m8g+sh256x27 none 8 1 2ff06eec9e814c1c 1.00162 7 0.002385 0.002379 1.0024 27 27 134217728
w16m8g+sh256x27 none 13 0 59f08545a01b9029 1.00256 7 0.002381 0.002383 0.9995 27 27 134217728
w16m8g+sh256x27 none 9 3 6aebe5693cda1de5 0.98146 2 0.002398 0.002380 1.0077 28 28 134217728
w16m8g+sh256x27 none 14 0 c6e829543c08c96c 1.00087 11 0.002379 0.002382 0.9990 26 27 134217728
w16m8g+sh256x27 none 12 0 e3dee32001ff9ac3 1.00253 15 0.002380 0.002381 0.9996 27 27 134217728
w16m8g+sh256x27 none 15 1 15cba5607ee486c4 1.00249 0 0.002381 0.002380 1.0005 26 27 134217728
w16m8g+sh256x27 none 11 0 3f0276dd1258a6bc 1.00254 0 0.002384 0.002382 1.0007 28 27 134217728
w16m8g+sh256x27 none 10 0 d7fa72b4b388d8e6 1.00257 13 0.002387 0.002381 1.0023 26 27 134217728
1 class era seed attempt program_id min_site_ratio min_site top0.1_share control_share ratio_to_control max_item_reads control_max reads
2 w16m8g+sh256x27 none 4 1 f555de19a14e4b82 1.00253 1 0.002380 0.002377 1.0011 29 29 134217728
3 w16m8g+sh256x27 none 1 0 a3c5c857b3d36618 1.00256 0 0.002383 0.002381 1.0008 28 27 134217728
4 w16m8g+sh256x27 none 6 1 3acc6704472bbd7d 1.00103 2 0.002381 0.002380 1.0005 28 28 134217728
5 w16m8g+sh256x27 none 3 0 db87b6c4aeb9f99f 1.00098 9 0.002383 0.002380 1.0011 26 28 134217728
6 w16m8g+sh256x27 none 5 0 e10be8f927a334d8 1.00242 12 0.002382 0.002379 1.0014 30 28 134217728
7 w16m8g+sh256x27 none 0 1 48a93d5e5b931cd7 1.00257 14 0.002380 0.002382 0.9989 27 27 134217728
8 w16m8g+sh256x27 none 7 0 e2e1dec77412f084 1.00109 0 0.002382 0.002379 1.0011 27 27 134217728
9 w16m8g+sh256x27 none 2 4 41a382862fa1488d 1.00260 5 0.002379 0.002380 0.9999 27 29 134217728
10 w16m8g+sh256x27 none 8 1 2ff06eec9e814c1c 1.00162 7 0.002385 0.002379 1.0024 27 27 134217728
11 w16m8g+sh256x27 none 13 0 59f08545a01b9029 1.00256 7 0.002381 0.002383 0.9995 27 27 134217728
12 w16m8g+sh256x27 none 9 3 6aebe5693cda1de5 0.98146 2 0.002398 0.002380 1.0077 28 28 134217728
13 w16m8g+sh256x27 none 14 0 c6e829543c08c96c 1.00087 11 0.002379 0.002382 0.9990 26 27 134217728
14 w16m8g+sh256x27 none 12 0 e3dee32001ff9ac3 1.00253 15 0.002380 0.002381 0.9996 27 27 134217728
15 w16m8g+sh256x27 none 15 1 15cba5607ee486c4 1.00249 0 0.002381 0.002380 1.0005 26 27 134217728
16 w16m8g+sh256x27 none 11 0 3f0276dd1258a6bc 1.00254 0 0.002384 0.002382 1.0007 28 27 134217728
17 w16m8g+sh256x27 none 10 0 d7fa72b4b388d8e6 1.00257 13 0.002387 0.002381 1.0023 26 27 134217728

View file

@ -0,0 +1,17 @@
class era seed attempt program_id min_site_ratio min_site top0.1_share control_share ratio_to_control max_item_reads control_max reads
w64m8g+sh256x27 none 4 1 f4487c87cfff1e7a 1.04901 11 0.002380 0.002377 1.0014 29 29 134217728
w64m8g+sh256x27 none 3 0 8062f9568d273707 1.04899 9 0.002382 0.002380 1.0009 27 28 134217728
w64m8g+sh256x27 none 2 4 5fb46883e180b9f5 1.04904 7 0.002382 0.002380 1.0010 27 29 134217728
w64m8g+sh256x27 none 6 1 311d1351271e9ea5 1.04875 2 0.002379 0.002380 0.9998 27 28 134217728
w64m8g+sh256x27 none 0 1 666d8cc2e6eff09f 1.04884 10 0.002380 0.002382 0.9989 26 27 134217728
w64m8g+sh256x27 none 1 0 1f41501380e84428 1.04885 0 0.002383 0.002381 1.0005 27 27 134217728
w64m8g+sh256x27 none 7 0 3dc79646fedce4b4 1.04899 13 0.002381 0.002379 1.0011 27 27 134217728
w64m8g+sh256x27 none 5 0 0a30b71cd5a3dbe8 1.04894 9 0.002380 0.002379 1.0003 26 28 134217728
w64m8g+sh256x27 none 8 1 f98d219ab657820c 1.04650 7 0.002382 0.002379 1.0013 27 27 134217728
w64m8g+sh256x27 none 13 0 902c487ec9750b41 1.04906 4 0.002381 0.002383 0.9993 28 27 134217728
w64m8g+sh256x27 none 11 0 9d64aefadd7069ac 1.04901 8 0.002380 0.002382 0.9990 26 27 134217728
w64m8g+sh256x27 none 10 0 55078f515da6288e 1.04896 5 0.002380 0.002381 0.9996 29 27 134217728
w64m8g+sh256x27 none 12 0 bd25136fa86cfdbb 1.04893 7 0.002382 0.002381 1.0002 30 27 134217728
w64m8g+sh256x27 none 14 0 cb0d96f15e24881c 1.04881 11 0.002379 0.002382 0.9987 27 27 134217728
w64m8g+sh256x27 none 15 1 e0536568562886f4 1.04813 0 0.002384 0.002380 1.0016 27 27 134217728
w64m8g+sh256x27 none 9 6 18c383d344cb8948 1.04892 1 0.002381 0.002380 1.0008 27 28 134217728
1 class era seed attempt program_id min_site_ratio min_site top0.1_share control_share ratio_to_control max_item_reads control_max reads
2 w64m8g+sh256x27 none 4 1 f4487c87cfff1e7a 1.04901 11 0.002380 0.002377 1.0014 29 29 134217728
3 w64m8g+sh256x27 none 3 0 8062f9568d273707 1.04899 9 0.002382 0.002380 1.0009 27 28 134217728
4 w64m8g+sh256x27 none 2 4 5fb46883e180b9f5 1.04904 7 0.002382 0.002380 1.0010 27 29 134217728
5 w64m8g+sh256x27 none 6 1 311d1351271e9ea5 1.04875 2 0.002379 0.002380 0.9998 27 28 134217728
6 w64m8g+sh256x27 none 0 1 666d8cc2e6eff09f 1.04884 10 0.002380 0.002382 0.9989 26 27 134217728
7 w64m8g+sh256x27 none 1 0 1f41501380e84428 1.04885 0 0.002383 0.002381 1.0005 27 27 134217728
8 w64m8g+sh256x27 none 7 0 3dc79646fedce4b4 1.04899 13 0.002381 0.002379 1.0011 27 27 134217728
9 w64m8g+sh256x27 none 5 0 0a30b71cd5a3dbe8 1.04894 9 0.002380 0.002379 1.0003 26 28 134217728
10 w64m8g+sh256x27 none 8 1 f98d219ab657820c 1.04650 7 0.002382 0.002379 1.0013 27 27 134217728
11 w64m8g+sh256x27 none 13 0 902c487ec9750b41 1.04906 4 0.002381 0.002383 0.9993 28 27 134217728
12 w64m8g+sh256x27 none 11 0 9d64aefadd7069ac 1.04901 8 0.002380 0.002382 0.9990 26 27 134217728
13 w64m8g+sh256x27 none 10 0 55078f515da6288e 1.04896 5 0.002380 0.002381 0.9996 29 27 134217728
14 w64m8g+sh256x27 none 12 0 bd25136fa86cfdbb 1.04893 7 0.002382 0.002381 1.0002 30 27 134217728
15 w64m8g+sh256x27 none 14 0 cb0d96f15e24881c 1.04881 11 0.002379 0.002382 0.9987 27 27 134217728
16 w64m8g+sh256x27 none 15 1 e0536568562886f4 1.04813 0 0.002384 0.002380 1.0016 27 27 134217728
17 w64m8g+sh256x27 none 9 6 18c383d344cb8948 1.04892 1 0.002381 0.002380 1.0008 27 28 134217728

View file

@ -0,0 +1,17 @@
class era seed attempt program_id min_site_ratio min_site top0.1_share control_share ratio_to_control max_item_reads control_max reads
mx8+sh256x27 none 0 0 d11a312a6f1860d2 0.99743 0 0.002383 0.002382 1.0002 27 27 134217728
mx8+sh256x27 none 7 3 545f5f5cdca1adaf 0.99872 3 0.002383 0.002379 1.0016 27 27 134217728
mx8+sh256x27 none 3 0 63be26aa9e0323a7 0.99904 1 0.002382 0.002380 1.0010 27 28 134217728
mx8+sh256x27 none 2 2 3a68098aed6c7f40 1.00011 2 0.002381 0.002380 1.0004 27 29 134217728
mx8+sh256x27 none 1 2 6826db4d7d33105a 0.99794 4 0.002380 0.002381 0.9993 27 27 134217728
mx8+sh256x27 none 5 0 bf6bf3b3bd2da848 1.00011 14 0.002381 0.002379 1.0008 27 28 134217728
mx8+sh256x27 none 4 0 858b8d2dc6543f25 0.97224 2 0.002382 0.002377 1.0020 27 29 134217728
mx8+sh256x27 none 6 2 46b2809292569495 0.99192 6 0.002380 0.002380 1.0000 28 28 134217728
mx8+sh256x27 none 8 0 6c27b57978ee3352 0.99266 1 0.002381 0.002379 1.0010 27 27 134217728
mx8+sh256x27 none 9 10 7eae27998eb8665a 1.00002 11 0.002380 0.002380 1.0001 27 28 134217728
mx8+sh256x27 none 13 3 3d8b2bc39168cb7f 0.99793 4 0.002381 0.002383 0.9994 27 27 134217728
mx8+sh256x27 none 11 2 ae67b4dd5251fb6a 0.99692 14 0.002380 0.002382 0.9992 27 27 134217728
mx8+sh256x27 none 15 0 7164644d33b0a84e 0.99244 6 0.002402 0.002380 1.0094 28 27 134217728
mx8+sh256x27 none 14 0 243233af6588fdfc 1.00008 10 0.002381 0.002382 0.9996 26 27 134217728
mx8+sh256x27 none 12 0 54e35300fdd79c5b 0.99465 0 0.002381 0.002381 0.9999 27 27 134217728
mx8+sh256x27 none 10 2 5236758d791df4cd 1.00006 1 0.002420 0.002381 1.0163 29 27 134217728
1 class era seed attempt program_id min_site_ratio min_site top0.1_share control_share ratio_to_control max_item_reads control_max reads
2 mx8+sh256x27 none 0 0 d11a312a6f1860d2 0.99743 0 0.002383 0.002382 1.0002 27 27 134217728
3 mx8+sh256x27 none 7 3 545f5f5cdca1adaf 0.99872 3 0.002383 0.002379 1.0016 27 27 134217728
4 mx8+sh256x27 none 3 0 63be26aa9e0323a7 0.99904 1 0.002382 0.002380 1.0010 27 28 134217728
5 mx8+sh256x27 none 2 2 3a68098aed6c7f40 1.00011 2 0.002381 0.002380 1.0004 27 29 134217728
6 mx8+sh256x27 none 1 2 6826db4d7d33105a 0.99794 4 0.002380 0.002381 0.9993 27 27 134217728
7 mx8+sh256x27 none 5 0 bf6bf3b3bd2da848 1.00011 14 0.002381 0.002379 1.0008 27 28 134217728
8 mx8+sh256x27 none 4 0 858b8d2dc6543f25 0.97224 2 0.002382 0.002377 1.0020 27 29 134217728
9 mx8+sh256x27 none 6 2 46b2809292569495 0.99192 6 0.002380 0.002380 1.0000 28 28 134217728
10 mx8+sh256x27 none 8 0 6c27b57978ee3352 0.99266 1 0.002381 0.002379 1.0010 27 27 134217728
11 mx8+sh256x27 none 9 10 7eae27998eb8665a 1.00002 11 0.002380 0.002380 1.0001 27 28 134217728
12 mx8+sh256x27 none 13 3 3d8b2bc39168cb7f 0.99793 4 0.002381 0.002383 0.9994 27 27 134217728
13 mx8+sh256x27 none 11 2 ae67b4dd5251fb6a 0.99692 14 0.002380 0.002382 0.9992 27 27 134217728
14 mx8+sh256x27 none 15 0 7164644d33b0a84e 0.99244 6 0.002402 0.002380 1.0094 28 27 134217728
15 mx8+sh256x27 none 14 0 243233af6588fdfc 1.00008 10 0.002381 0.002382 0.9996 26 27 134217728
16 mx8+sh256x27 none 12 0 54e35300fdd79c5b 0.99465 0 0.002381 0.002381 0.9999 27 27 134217728
17 mx8+sh256x27 none 10 2 5236758d791df4cd 1.00006 1 0.002420 0.002381 1.0163 29 27 134217728

View file

@ -0,0 +1,17 @@
class era seed attempt program_id min_site_ratio min_site top0.1_share control_share ratio_to_control max_item_reads control_max reads
w16m8g+sh256x27 none 5 1 78bcd6b9f7a6ad43 1.00262 10 0.002382 0.002379 1.0013 27 28 134217728
w16m8g+sh256x27 none 1 1 0bc1d6adf0f97c8d 1.00095 5 0.002383 0.002381 1.0005 30 27 134217728
w16m8g+sh256x27 none 2 4 41a382862fa1488d 1.00110 2 0.002383 0.002380 1.0014 27 29 134217728
w16m8g+sh256x27 none 6 1 3acc6704472bbd7d 1.00096 2 0.002384 0.002380 1.0016 27 28 134217728
w16m8g+sh256x27 none 4 1 f555de19a14e4b82 1.00251 11 0.002380 0.002377 1.0011 27 29 134217728
w16m8g+sh256x27 none 0 2 54596ced0a2b0f05 1.00250 1 0.002386 0.002382 1.0014 28 27 134217728
w16m8g+sh256x27 none 7 0 e2e1dec77412f084 0.99668 11 0.002381 0.002379 1.0009 27 27 134217728
w16m8g+sh256x27 none 3 6 7fed1428f93b1a65 1.00255 7 0.002380 0.002380 0.9998 27 28 134217728
w16m8g+sh256x27 none 8 1 2ff06eec9e814c1c 1.00249 11 0.002380 0.002379 1.0005 29 27 134217728
w16m8g+sh256x27 none 11 0 3f0276dd1258a6bc 1.00244 3 0.002382 0.002382 1.0000 26 27 134217728
w16m8g+sh256x27 none 10 6 b55755978e54358d 1.00258 14 0.002381 0.002381 1.0000 26 27 134217728
w16m8g+sh256x27 none 12 0 e3dee32001ff9ac3 1.00251 13 0.002382 0.002381 1.0001 27 27 134217728
w16m8g+sh256x27 none 14 8 9342c807b4b01b42 1.00198 12 0.002394 0.002382 1.0053 27 27 134217728
w16m8g+sh256x27 none 13 1 2e19dbf83daa8bae 1.00258 14 0.002381 0.002383 0.9993 28 27 134217728
w16m8g+sh256x27 none 9 6 36de958c90f91238 1.00249 14 0.002378 0.002380 0.9994 27 28 134217728
w16m8g+sh256x27 none 15 2 87d31ccbad786389 1.00245 7 0.002380 0.002380 0.9999 28 27 134217728
1 class era seed attempt program_id min_site_ratio min_site top0.1_share control_share ratio_to_control max_item_reads control_max reads
2 w16m8g+sh256x27 none 5 1 78bcd6b9f7a6ad43 1.00262 10 0.002382 0.002379 1.0013 27 28 134217728
3 w16m8g+sh256x27 none 1 1 0bc1d6adf0f97c8d 1.00095 5 0.002383 0.002381 1.0005 30 27 134217728
4 w16m8g+sh256x27 none 2 4 41a382862fa1488d 1.00110 2 0.002383 0.002380 1.0014 27 29 134217728
5 w16m8g+sh256x27 none 6 1 3acc6704472bbd7d 1.00096 2 0.002384 0.002380 1.0016 27 28 134217728
6 w16m8g+sh256x27 none 4 1 f555de19a14e4b82 1.00251 11 0.002380 0.002377 1.0011 27 29 134217728
7 w16m8g+sh256x27 none 0 2 54596ced0a2b0f05 1.00250 1 0.002386 0.002382 1.0014 28 27 134217728
8 w16m8g+sh256x27 none 7 0 e2e1dec77412f084 0.99668 11 0.002381 0.002379 1.0009 27 27 134217728
9 w16m8g+sh256x27 none 3 6 7fed1428f93b1a65 1.00255 7 0.002380 0.002380 0.9998 27 28 134217728
10 w16m8g+sh256x27 none 8 1 2ff06eec9e814c1c 1.00249 11 0.002380 0.002379 1.0005 29 27 134217728
11 w16m8g+sh256x27 none 11 0 3f0276dd1258a6bc 1.00244 3 0.002382 0.002382 1.0000 26 27 134217728
12 w16m8g+sh256x27 none 10 6 b55755978e54358d 1.00258 14 0.002381 0.002381 1.0000 26 27 134217728
13 w16m8g+sh256x27 none 12 0 e3dee32001ff9ac3 1.00251 13 0.002382 0.002381 1.0001 27 27 134217728
14 w16m8g+sh256x27 none 14 8 9342c807b4b01b42 1.00198 12 0.002394 0.002382 1.0053 27 27 134217728
15 w16m8g+sh256x27 none 13 1 2e19dbf83daa8bae 1.00258 14 0.002381 0.002383 0.9993 28 27 134217728
16 w16m8g+sh256x27 none 9 6 36de958c90f91238 1.00249 14 0.002378 0.002380 0.9994 27 28 134217728
17 w16m8g+sh256x27 none 15 2 87d31ccbad786389 1.00245 7 0.002380 0.002380 0.9999 28 27 134217728

View file

@ -0,0 +1,259 @@
# w16-era class w16m8g+sh256x27 eras [0,1,2,3,4,5,6,7] seeds 32 era-widths 16 weights base bittest 1 bin d601098699840534 start 2026-10-08T13:02:33Z host igneum-build-4 threads 16
cand era seed candidates accepted attempt bit_z bit_site bit_bit reasons
w16-era 0 9 5 1 4 2.9 6 22 a'=3;c,=1;
w16-era 0 8 1 1 0 2.8 0 4
w16-era 0 10 1 1 0 3.3 11 5
w16-era 0 12 3 1 2 2.9 15 11 a'=2;
w16-era 0 14 13 1 12 3.1 6 24 a'=9;a=2;c,=1;
w16-era 0 0 2 1 1 3.2 2 11 a'=1;
w16-era 0 7 8 1 7 2.9 11 27 a'=5;c,=2;
w16-era 0 15 6 1 5 3.1 1 5 a'=3;c,=1;a=1;
w16-era 0 6 2 1 1 2.9 9 18 a'=1;
w16-era 0 11 9 1 8 2.8 0 7 c,=5;a'=3;
w16-era 0 3 2 1 1 3.1 13 9 a'=1;
w16-era 0 2 9 1 8 3.7 9 13 a'=7;a=1;
w16-era 0 4 9 1 8 3.0 10 7 a'=4;c,=3;a=1;
w16-era 0 13 1 1 0 2.7 8 17
w16-era 0 5 14 1 13 3.1 3 13 a'=12;a=1;
w16-era 0 1 6 1 5 3.3 13 21 a'=4;c,=1;
w16-era 0 16 5 1 4 3.0 0 5 a'=4;
w16-era 0 17 3 1 2 3.5 15 12 a'=2;
w16-era 0 21 4 1 3 3.0 1 15 a'=3;
w16-era 0 20 8 1 7 2.6 13 27 a'=5;c,=1;a=1;
w16-era 0 25 6 1 5 3.0 12 2 c,=2;a=2;a'=1;
w16-era 0 23 7 1 6 3.7 1 22 a'=2;a=2;c,=1;c=1;
w16-era 0 19 5 1 4 3.1 3 2 a'=3;a=1;
w16-era 0 18 3 1 2 4.0 2 7 c,=2;
w16-era 0 22 6 1 5 3.0 9 4 a'=4;a=1;
w16-era 0 24 3 1 2 3.3 8 8 a'=2;
w16-era 0 28 15 1 14 3.5 13 25 a'=10;c,=2;a=2;
w16-era 0 26 2 1 1 3.1 11 12 a'=1;
w16-era 0 27 7 1 6 2.9 15 17 a'=6;
w16-era 0 29 4 1 3 2.6 15 10 c,=2;a'=1;
w16-era 0 30 8 1 7 3.5 13 18 a'=6;a=1;
w16-era 0 31 17 1 16 2.8 12 13 a'=7;c,=5;a=3;b=1;
w16-era 1 2 9 1 8 3.5 5 6 a'=7;a=1;
w16-era 1 0 2 1 1 4.0 14 13 a'=1;
w16-era 1 3 2 1 1 3.1 1 4 a'=1;
w16-era 1 1 6 1 5 2.9 15 5 a'=4;c,=1;
w16-era 1 5 14 1 13 5.5 2 7 a'=12;a=1;
w16-era 1 8 1 1 0 3.3 10 8
w16-era 1 7 8 1 7 2.9 2 3 a'=5;c,=2;
w16-era 1 6 2 1 1 3.1 3 21 a'=1;
w16-era 1 4 12 1 11 3.4 3 22 a'=6;c,=4;a=1;
w16-era 1 9 5 1 4 2.8 5 15 a'=3;c,=1;
w16-era 1 10 1 1 0 3.2 12 16
w16-era 1 12 3 1 2 3.0 7 20 a'=2;
w16-era 1 11 9 1 8 3.0 0 14 c,=5;a'=3;
w16-era 1 13 1 1 0 3.0 14 7
w16-era 1 14 13 1 12 3.0 2 5 a'=9;a=2;c,=1;
w16-era 1 15 6 1 5 3.7 6 8 a'=3;c,=1;a=1;
w16-era 1 16 5 1 4 3.1 9 22 a'=4;
w16-era 1 17 3 1 2 2.9 14 6 a'=2;
w16-era 1 19 5 1 4 3.6 3 27 a'=3;a=1;
w16-era 1 18 3 1 2 2.8 8 11 c,=2;
w16-era 1 20 8 1 7 2.9 6 21 a'=5;c,=1;a=1;
w16-era 1 21 4 1 3 3.3 10 4 a'=3;
w16-era 1 24 3 1 2 2.8 13 21 a'=2;
w16-era 1 22 6 1 5 3.3 7 5 a'=4;a=1;
w16-era 1 23 4 1 3 3.6 0 8 c,=1;a'=1;a=1;
w16-era 1 25 6 1 5 3.1 4 8 c,=2;a=2;a'=1;
w16-era 1 27 7 1 6 2.7 10 7 a'=6;
w16-era 1 26 2 1 1 3.3 12 22 a'=1;
w16-era 1 28 15 1 14 3.0 12 6 a'=10;c,=2;a=2;
w16-era 1 29 4 1 3 3.2 2 11 c,=2;a'=1;
w16-era 1 30 41 1 40 3.3 0 6 a'=29;c,=8;a=2;b=1;
w16-era 1 31 17 1 16 3.2 10 3 a'=7;c,=5;a=3;b=1;
w16-era 2 0 2 1 1 3.5 6 26 a'=1;
w16-era 2 1 4 1 3 4.1 3 18 a'=3;
w16-era 2 2 9 1 8 3.7 8 10 a'=7;a=1;
w16-era 2 4 2 1 1 3.2 8 22 a'=1;
w16-era 2 3 2 1 1 2.9 0 18 a'=1;
w16-era 2 5 14 1 13 3.1 7 10 a'=12;a=1;
w16-era 2 8 1 1 0 3.8 5 19
w16-era 2 6 2 1 1 3.0 12 6 a'=1;
w16-era 2 7 4 1 3 2.9 13 4 a'=3;
w16-era 2 9 3 1 2 3.8 12 2 a'=2;
w16-era 2 10 1 1 0 2.8 3 19
w16-era 2 11 2 1 1 3.2 8 9 a'=1;
w16-era 2 12 3 1 2 3.7 7 17 a'=2;
w16-era 2 13 1 1 0 3.1 1 19
w16-era 2 14 5 1 4 4.4 15 2 a'=3;a=1;
w16-era 2 15 3 1 2 3.3 0 25 a'=2;
w16-era 2 16 5 1 4 2.9 13 26 a'=4;
w16-era 2 18 1 1 0 2.9 3 26
w16-era 2 17 3 1 2 3.0 9 20 a'=2;
w16-era 2 20 7 1 6 3.0 12 2 a'=5;a=1;
w16-era 2 19 5 1 4 3.1 12 17 a'=3;a=1;
w16-era 2 21 4 1 3 3.2 11 17 a'=3;
w16-era 2 23 2 1 1 3.0 12 12 a=1;
w16-era 2 24 3 1 2 3.1 10 7 a'=2;
w16-era 2 22 6 1 5 2.8 0 4 a'=4;a=1;
w16-era 2 25 4 1 3 3.4 12 16 a=2;a'=1;
w16-era 2 26 2 1 1 3.2 14 22 a'=1;
w16-era 2 28 8 1 7 3.2 9 19 a'=5;a=2;
w16-era 2 27 7 1 6 3.1 5 11 a'=6;
w16-era 2 29 2 1 1 3.3 4 19 a'=1;
w16-era 2 30 8 1 7 3.3 8 7 a'=6;a=1;
w16-era 2 31 4 1 3 2.9 11 22 a'=2;b=1;
w16-era 3 0 2 1 1 3.5 9 11 a'=1;
w16-era 3 2 9 1 8 3.2 0 23 a'=7;a=1;
w16-era 3 1 4 1 3 2.6 10 26 a'=3;
w16-era 3 4 2 1 1 3.2 10 20 a'=1;
w16-era 3 3 2 1 1 3.9 4 4 a'=1;
w16-era 3 5 14 1 13 3.2 3 21 a'=12;a=1;
w16-era 3 6 2 1 1 3.2 6 19 a'=1;
w16-era 3 8 1 1 0 3.1 7 16
w16-era 3 7 4 1 3 2.8 9 26 a'=3;
w16-era 3 9 3 1 2 3.2 3 11 a'=2;
w16-era 3 10 1 1 0 3.2 0 23
w16-era 3 12 3 1 2 3.3 8 8 a'=2;
w16-era 3 11 2 1 1 3.2 13 22 a'=1;
w16-era 3 13 1 1 0 3.4 0 4
w16-era 3 14 5 1 4 5.5 15 3 a'=3;a=1;
w16-era 3 15 3 1 2 3.5 11 17 a'=2;
w16-era 3 16 5 1 4 3.2 6 4 a'=4;
w16-era 3 17 3 1 2 3.1 3 14 a'=2;
w16-era 3 20 7 1 6 3.7 8 3 a'=5;a=1;
w16-era 3 18 1 1 0 3.0 11 7
w16-era 3 19 5 1 4 3.1 10 11 a'=3;a=1;
w16-era 3 21 4 1 3 3.0 15 5 a'=3;
w16-era 3 23 2 1 1 3.0 11 8 a=1;
w16-era 3 24 3 1 2 3.7 0 19 a'=2;
w16-era 3 22 6 1 5 3.8 5 13 a'=4;a=1;
w16-era 3 28 8 1 7 4.9 9 2 a'=5;a=2;
w16-era 3 25 4 1 3 3.9 0 2 a=2;a'=1;
w16-era 3 27 7 1 6 3.2 6 5 a'=6;
w16-era 3 26 2 1 1 3.2 3 6 a'=1;
w16-era 3 29 2 1 1 3.1 7 2 a'=1;
w16-era 3 30 8 1 7 2.7 2 5 a'=6;a=1;
w16-era 3 31 10 1 9 5.0 10 2 a'=4;c,=2;a=2;b=1;
w16-era 4 0 2 1 1 3.0 6 11 a'=1;
w16-era 4 2 9 1 8 3.8 5 10 a'=7;a=1;
w16-era 4 1 6 1 5 3.6 0 10 a'=4;c,=1;
w16-era 4 3 2 1 1 3.1 10 15 a'=1;
w16-era 4 4 9 1 8 4.0 1 14 a'=4;c,=3;a=1;
w16-era 4 5 21 1 20 2.8 5 13 a'=15;c,=3;a=2;
w16-era 4 6 2 1 1 3.4 3 16 a'=1;
w16-era 4 8 1 1 0 3.4 1 5
w16-era 4 11 9 1 8 3.8 8 23 c,=5;a'=3;
w16-era 4 7 8 1 7 2.7 7 16 a'=5;c,=2;
w16-era 4 9 5 1 4 3.0 2 3 a'=3;c,=1;
w16-era 4 10 1 1 0 3.6 0 15
w16-era 4 12 3 1 2 2.8 11 14 a'=2;
w16-era 4 13 1 1 0 3.2 12 3
w16-era 4 14 13 1 12 3.2 15 13 a'=9;a=2;c,=1;
w16-era 4 15 6 1 5 2.9 15 12 a'=3;c,=1;a=1;
w16-era 4 21 4 1 3 3.5 8 12 a'=3;
w16-era 4 24 3 1 2 2.9 2 17 a'=2;
w16-era 4 16 5 1 4 2.9 14 4 a'=4;
w16-era 4 27 7 1 6 2.9 2 13 a'=6;
w16-era 4 17 3 1 2 3.0 13 7 a'=2;
w16-era 4 29 4 1 3 2.7 5 18 c,=2;a'=1;
w16-era 4 22 6 1 5 3.2 2 18 a'=4;a=1;
w16-era 4 20 8 1 7 3.0 13 8 a'=5;c,=1;a=1;
w16-era 4 19 5 1 4 3.0 14 12 a'=3;a=1;
w16-era 4 18 3 1 2 3.0 8 13 c,=2;
w16-era 4 26 2 1 1 3.4 4 14 a'=1;
w16-era 4 28 15 1 14 3.5 12 10 a'=10;c,=2;a=2;
w16-era 4 25 6 1 5 3.2 12 20 c,=2;a=2;a'=1;
w16-era 4 23 36 1 35 3.9 1 2 a'=21;c,=9;a=4;c=1;
w16-era 4 30 41 1 40 3.4 8 12 a'=29;c,=8;a=2;b=1;
w16-era 4 31 17 1 16 2.8 15 4 a'=7;c,=5;a=3;b=1;
w16-era 5 1 6 1 5 3.6 11 15 a'=4;c,=1;
w16-era 5 7 8 1 7 2.5 15 25 a'=5;c,=2;
w16-era 5 5 21 1 20 5.2 9 18 a'=15;c,=3;a=2;
w16-era 5 2 9 1 8 3.0 5 22 a'=7;a=1;
w16-era 5 8 1 1 0 3.6 6 22
w16-era 5 9 5 1 4 3.6 6 9 a'=3;c,=1;
w16-era 5 0 2 1 1 3.0 1 20 a'=1;
w16-era 5 4 9 1 8 3.2 0 11 a'=4;c,=3;a=1;
w16-era 5 10 1 1 0 3.2 1 4
w16-era 5 3 2 1 1 2.7 14 13 a'=1;
w16-era 5 6 2 1 1 3.2 0 8 a'=1;
w16-era 5 15 6 1 5 3.1 0 18 a'=3;c,=1;a=1;
w16-era 5 12 3 1 2 3.3 10 23 a'=2;
w16-era 5 17 3 1 2 2.8 7 23 a'=2;
w16-era 5 11 9 1 8 3.1 13 25 c,=5;a'=3;
w16-era 5 13 1 1 0 3.0 4 23
w16-era 5 16 5 1 4 3.3 15 12 a'=4;
w16-era 5 19 5 1 4 3.2 6 25 a'=3;a=1;
w16-era 5 14 13 1 12 3.3 6 23 a'=9;a=2;c,=1;
w16-era 5 24 3 1 2 2.7 8 2 a'=2;
w16-era 5 22 6 1 5 3.0 1 8 a'=4;a=1;
w16-era 5 21 4 1 3 3.1 13 9 a'=3;
w16-era 5 18 3 1 2 3.0 13 4 c,=2;
w16-era 5 26 2 1 1 3.1 3 20 a'=1;
w16-era 5 27 7 1 6 3.4 13 26 a'=6;
w16-era 5 20 8 1 7 3.2 1 4 a'=5;c,=1;a=1;
w16-era 5 28 15 1 14 4.3 12 22 a'=10;c,=2;a=2;
w16-era 5 29 4 1 3 3.4 3 23 c,=2;a'=1;
w16-era 5 23 4 1 3 3.4 7 27 c,=1;a'=1;a=1;
w16-era 5 25 6 1 5 3.4 9 24 c,=2;a=2;a'=1;
w16-era 6 1 6 1 5 3.8 0 3 a'=4;c,=1;
w16-era 6 0 2 1 1 3.5 10 6 a'=1;
w16-era 5 30 41 1 40 2.9 15 18 a'=29;c,=8;a=2;b=1;
w16-era 6 4 9 1 8 2.8 5 20 a'=4;c,=3;a=1;
w16-era 6 3 2 1 1 3.0 9 2 a'=1;
w16-era 6 8 1 1 0 3.2 14 18
w16-era 5 31 17 1 16 3.5 2 5 a'=7;c,=5;a=3;b=1;
w16-era 6 6 2 1 1 3.8 11 11 a'=1;
w16-era 6 7 8 1 7 2.9 6 19 a'=5;c,=2;
w16-era 6 2 9 1 8 3.2 5 5 a'=7;a=1;
w16-era 6 5 21 1 20 3.0 2 23 a'=15;c,=3;a=2;
w16-era 6 9 5 1 4 3.1 12 10 a'=3;c,=1;
w16-era 6 14 13 1 12 3.5 6 5 a'=9;a=2;c,=1;
w16-era 6 13 1 1 0 3.0 12 12
w16-era 6 16 5 1 4 3.2 1 9 a'=4;
w16-era 6 10 1 1 0 2.8 7 22
w16-era 6 11 9 1 8 2.5 6 24 c,=5;a'=3;
w16-era 6 12 3 1 2 3.0 7 5 a'=2;
w16-era 6 19 5 1 4 3.1 9 3 a'=3;a=1;
w16-era 6 22 6 1 5 3.7 3 25 a'=4;a=1;
w16-era 6 21 4 1 3 3.0 15 4 a'=3;
w16-era 6 24 3 1 2 3.5 15 14 a'=2;
w16-era 6 15 6 1 5 2.9 11 13 a'=3;c,=1;a=1;
w16-era 6 20 8 1 7 3.1 10 13 a'=5;c,=1;a=1;
w16-era 6 27 7 1 6 3.1 2 18 a'=6;
w16-era 6 18 3 1 2 3.1 4 11 c,=2;
w16-era 6 17 3 1 2 2.7 4 7 a'=2;
w16-era 6 28 15 1 14 3.6 12 6 a'=10;c,=2;a=2;
w16-era 6 23 4 1 3 3.0 6 12 c,=1;a'=1;a=1;
w16-era 6 30 41 1 40 2.9 4 7 a'=29;c,=8;a=2;b=1;
w16-era 6 26 2 1 1 2.9 8 26 a'=1;
w16-era 7 1 4 1 3 3.8 3 20 a'=3;
w16-era 6 29 4 1 3 3.4 1 6 c,=2;a'=1;
w16-era 7 3 2 1 1 3.1 13 5 a'=1;
w16-era 7 6 2 1 1 3.0 6 17 a'=1;
w16-era 7 2 9 1 8 4.5 7 9 a'=7;a=1;
w16-era 6 25 7 1 6 3.3 10 17 c,=2;a=2;c'''=1;a'=1;
w16-era 7 0 2 1 1 3.5 3 21 a'=1;
w16-era 7 5 14 1 13 3.2 7 7 a'=12;a=1;
w16-era 6 31 17 1 16 3.1 14 24 a'=7;c,=5;a=3;b=1;
w16-era 7 9 3 1 2 2.8 13 23 a'=2;
w16-era 7 4 2 1 1 3.0 6 22 a'=1;
w16-era 7 11 2 1 1 3.2 14 5 a'=1;
w16-era 7 7 6 1 5 3.0 12 4 a'=4;c,=1;
w16-era 7 8 1 1 0 3.2 14 24
w16-era 7 13 1 1 0 3.2 13 18
w16-era 7 10 1 1 0 3.2 8 4
w16-era 7 15 6 1 5 3.4 12 9 a'=3;c,=1;a=1;
w16-era 7 16 5 1 4 2.9 14 11 a'=4;
w16-era 7 14 5 1 4 3.0 4 11 a'=3;a=1;
w16-era 7 12 3 1 2 3.4 15 5 a'=2;
w16-era 7 22 6 1 5 3.5 7 13 a'=4;a=1;
w16-era 7 23 2 1 1 2.9 14 27 a=1;
w16-era 7 24 3 1 2 3.0 14 19 a'=2;
w16-era 7 17 3 1 2 3.5 11 19 a'=2;
w16-era 7 18 3 1 2 3.2 2 5 c,=2;
w16-era 7 19 5 1 4 3.3 9 11 a'=3;a=1;
w16-era 7 20 8 1 7 3.0 12 19 a'=5;c,=1;a=1;
w16-era 7 21 4 1 3 3.1 2 3 a'=3;
w16-era 7 28 14 1 13 3.4 5 6 a'=10;a=2;c,=1;
w16-era 7 30 8 1 7 3.1 1 7 a'=6;a=1;
w16-era 7 29 2 1 1 3.0 10 16 a'=1;
w16-era 7 31 6 1 5 3.2 10 5 a'=3;c,=1;b=1;
w16-era 7 25 4 1 3 3.1 1 20 a=2;a'=1;
w16-era 7 26 2 1 1 2.8 2 2 a'=1;
w16-era 7 27 7 1 6 2.9 0 9 a'=6;
# end 2026-10-08T13:04:55Z rows=257
Can't render this file because it has a wrong number of fields in line 2.

View file

@ -0,0 +1,259 @@
# w16-none class w16m8g+sh256x27 eras [none] seeds 256 era-widths 16 weights base bittest off bin d601098699840534 start 2026-10-08T12:51:04Z host igneum-build-4 threads 16
cand era seed candidates accepted attempt bit_z bit_site bit_bit reasons
w16-none none 14 9 1 8 10.4 12 27 a'=7;a=1;
w16-none none 12 1 1 0 3.2 1 21
w16-none none 13 2 1 1 3.2 3 14 a'=1;
w16-none none 9 7 1 6 3.0 3 14 a'=5;a=1;
w16-none none 7 1 1 0 9.0 11 3
w16-none none 8 2 1 1 3.7 8 2 a'=1;
w16-none none 10 7 1 6 3.4 0 21 a'=6;
w16-none none 1 2 1 1 14.8 5 2 a'=1;
w16-none none 5 2 1 1 3.5 1 14 a'=1;
w16-none none 15 3 1 2 3.3 8 5 a'=2;
w16-none none 16 10 1 9 2.8 3 15 a'=9;
w16-none none 11 1 1 0 3.0 15 7
w16-none none 20 3 1 2 3.0 5 6 a'=1;a=1;
w16-none none 6 2 1 1 16.2 2 2 a'=1;
w16-none none 19 3 1 2 3.9 10 20 a'=2;
w16-none none 4 2 1 1 3.8 13 10 a'=1;
w16-none none 21 5 1 4 2.7 14 10 a'=4;
w16-none none 0 3 1 2 3.3 12 7 a'=2;
w16-none none 2 5 1 4 13.9 2 2 a'=3;a=1;
w16-none none 18 3 1 2 3.0 10 2 a'=2;
w16-none none 22 1 1 0 3.2 12 14
w16-none none 24 2 1 1 7.1 10 2 a'=1;
w16-none none 33 2 1 1 3.9 3 26 a=1;
w16-none none 17 2 1 1 3.0 10 22 a'=1;
w16-none none 27 3 1 2 3.3 8 13 b=1;a'=1;
w16-none none 29 3 1 2 15.0 9 2 a'=2;
w16-none none 30 3 1 2 9.9 0 6 a'=1;a=1;
w16-none none 3 7 1 6 2.9 0 23 a'=3;a=2;c'''=1;
w16-none none 28 2 1 1 32.3 4 2 a'=1;
w16-none none 32 4 1 3 3.0 2 4 a'=3;
w16-none none 25 13 1 12 7.2 6 2 a'=10;a=2;
w16-none none 23 4 1 3 4.1 0 16 a'=3;
w16-none none 34 2 1 1 3.1 0 25 a=1;
w16-none none 31 12 1 11 3.6 13 25 a'=7;a=2;c''=1;b=1;
w16-none none 37 4 1 3 29.2 11 2 a'=3;
w16-none none 35 12 1 11 38.7 6 2 a'=9;a=2;
w16-none none 40 1 1 0 3.0 11 2
w16-none none 39 1 1 0 3.4 0 14
w16-none none 42 1 1 0 14.7 7 2
w16-none none 46 5 1 4 16.8 5 2 a'=4;
w16-none none 36 1 1 0 3.5 10 23
w16-none none 26 7 1 6 17.4 2 2 a'=4;c''=1;a=1;
w16-none none 48 2 1 1 3.0 6 5 a'=1;
w16-none none 38 4 1 3 3.5 3 18 c'''=1;b=1;a'=1;
w16-none none 43 2 1 1 3.3 10 15 a'=1;
w16-none none 44 5 1 4 15.9 8 2 a'=4;
w16-none none 45 9 1 8 2.8 15 13 a'=7;a=1;
w16-none none 47 1 1 0 3.4 7 7
w16-none none 49 2 1 1 3.4 0 15 a=1;
w16-none none 50 2 1 1 16.2 12 2 a'=1;
w16-none none 52 1 1 0 16.8 8 2
w16-none none 54 5 1 4 18.7 3 2 a'=3;a=1;
w16-none none 41 5 1 4 16.4 9 2 c''=2;a'=2;
w16-none none 56 4 1 3 3.7 8 6 a'=3;
w16-none none 58 6 1 5 7.3 9 3 a'=5;
w16-none none 60 2 1 1 2.8 13 16 a'=1;
w16-none none 55 1 1 0 3.4 1 4
w16-none none 51 2 1 1 3.0 5 14 a'=1;
w16-none none 53 2 1 1 15.5 1 2 c''=1;
w16-none none 59 4 1 3 2.9 10 27 a'=3;
w16-none none 57 1 1 0 3.0 3 15
w16-none none 64 4 1 3 3.3 1 19 a'=2;a=1;
w16-none none 61 3 1 2 17.4 14 2 a'=2;
w16-none none 67 4 1 3 15.8 15 2 a'=2;a=1;
w16-none none 63 15 1 14 2.5 3 17 a'=13;c'''=1;
w16-none none 65 4 1 3 16.7 4 2 a'=2;b=1;
w16-none none 62 4 1 3 14.4 8 2 a'=2;c''=1;
w16-none none 75 1 1 0 3.1 11 8
w16-none none 76 4 1 3 3.4 6 22 a'=2;a=1;
w16-none none 66 6 1 5 15.9 10 2 a'=4;a=1;
w16-none none 68 2 1 1 16.5 1 2 a'=1;
w16-none none 71 3 1 2 3.4 10 23 c=1;a'=1;
w16-none none 69 4 1 3 43.3 0 15 a'=2;a=1;
w16-none none 70 2 1 1 2.8 2 2 a'=1;
w16-none none 72 7 1 6 2.8 2 11 a'=5;c'''=1;
w16-none none 73 4 1 3 7.2 0 2 a'=3;
w16-none none 74 1 1 0 5.2 12 2
w16-none none 77 14 1 13 3.1 7 24 a'=9;b=2;c''=1;a=1;
w16-none none 78 3 1 2 3.4 10 4 a'=2;
w16-none none 80 5 1 4 3.3 11 18 a'=4;
w16-none none 79 1 1 0 3.3 9 18
w16-none none 82 3 1 2 3.1 10 10 a'=2;
w16-none none 81 3 1 2 3.1 5 19 a'=2;
w16-none none 87 1 1 0 32.4 9 10
w16-none none 86 2 1 1 3.4 2 2 a'=1;
w16-none none 83 1 1 0 3.5 6 24
w16-none none 89 4 1 3 8.6 0 2 a'=2;b=1;
w16-none none 90 2 1 1 3.6 6 8 a'=1;
w16-none none 93 1 1 0 3.1 7 27
w16-none none 94 1 1 0 14.4 5 2
w16-none none 85 1 1 0 3.0 1 11
w16-none none 88 6 1 5 3.0 13 19 a'=4;b=1;
w16-none none 92 1 1 0 4.2 2 21
w16-none none 84 1 1 0 56.3 2 10
w16-none none 96 3 1 2 3.1 4 17 a'=2;
w16-none none 95 2 1 1 3.3 4 2 a'=1;
w16-none none 91 1 1 0 2.9 15 16
w16-none none 97 1 1 0 2.8 1 10
w16-none none 100 2 1 1 2.8 13 3 a'=1;
w16-none none 98 1 1 0 55.7 1 5
w16-none none 101 1 1 0 4.1 5 17
w16-none none 99 1 1 0 3.3 8 27
w16-none none 106 4 1 3 4.9 2 15 a'=2;a=1;
w16-none none 102 1 1 0 2.8 11 12
w16-none none 105 3 1 2 21.5 4 6 a'=2;
w16-none none 103 1 1 0 15.8 8 2
w16-none none 108 2 1 1 17.2 10 2 a'=1;
w16-none none 107 3 1 2 10.7 0 27 a'=2;
w16-none none 109 1 1 0 3.1 3 3
w16-none none 110 2 1 1 2.8 11 5 a'=1;
w16-none none 111 1 1 0 8.7 8 2
w16-none none 104 1 1 0 2.9 1 26
w16-none none 112 3 1 2 16.1 3 2 b=1;a'=1;
w16-none none 115 1 1 0 15.9 10 2
w16-none none 114 10 1 9 3.6 0 5 a'=8;a=1;
w16-none none 113 1 1 0 17.3 12 2
w16-none none 116 4 1 3 2.8 9 27 a'=3;
w16-none none 117 4 1 3 7.2 1 2 a'=3;
w16-none none 123 1 1 0 17.3 13 17
w16-none none 125 1 1 0 2.5 10 2
w16-none none 121 1 1 0 3.1 15 16
w16-none none 124 1 1 0 3.0 1 19
w16-none none 119 2 1 1 8.2 3 21 a'=1;
w16-none none 120 5 1 4 15.4 5 2 a'=3;c''=1;
w16-none none 118 3 1 2 15.2 10 2 c=1;a=1;
w16-none none 126 2 1 1 2.9 2 21 a'=1;
w16-none none 122 4 1 3 3.0 4 2 c'''=1;a'=1;a=1;
w16-none none 129 1 1 0 3.9 13 25
w16-none none 131 2 1 1 16.4 5 2 a'=1;
w16-none none 133 1 1 0 28.1 0 10
w16-none none 130 7 1 6 3.2 15 25 a'=5;b=1;
w16-none none 135 2 1 1 2.8 13 18 a'=1;
w16-none none 132 1 1 0 3.1 13 27
w16-none none 134 2 1 1 7.9 15 2 a'=1;
w16-none none 128 2 1 1 15.8 2 2 a'=1;
w16-none none 138 9 1 8 3.3 1 17 a'=6;b=1;a=1;
w16-none none 137 2 1 1 3.0 3 4 a'=1;
w16-none none 127 7 1 6 3.4 7 18 a'=4;c'''=1;a=1;
w16-none none 141 4 1 3 13.2 1 2 a'=2;c=1;
w16-none none 139 5 1 4 2.4 0 21 a'=4;
w16-none none 142 2 1 1 11.6 3 2 a=1;
w16-none none 140 4 1 3 9.9 14 11 b=1;a'=1;a=1;
w16-none none 144 3 1 2 3.0 7 7 a'=2;
w16-none none 145 1 1 0 2.7 5 26
w16-none none 147 2 1 1 3.0 2 5 a'=1;
w16-none none 149 2 1 1 8.8 11 2 a'=1;
w16-none none 148 2 1 1 3.2 14 2 a=1;
w16-none none 153 5 1 4 3.5 2 11 a'=4;
w16-none none 151 2 1 1 2.8 4 13 a'=1;
w16-none none 146 1 1 0 8.2 8 2
w16-none none 136 5 1 4 2.9 8 25 a'=2;c'''=1;b=1;
w16-none none 152 2 1 1 13.2 13 25 a'=1;
w16-none none 155 7 1 6 3.6 4 6 a'=3;a=3;
w16-none none 143 6 1 5 2.8 2 16 a'=2;a=2;c=1;
w16-none none 150 1 1 0 28.9 3 9
w16-none none 154 3 1 2 3.1 9 27 a'=2;
w16-none none 156 2 1 1 16.2 13 2 a=1;
w16-none none 157 2 1 1 3.1 8 25 a'=1;
w16-none none 158 8 1 7 3.0 9 20 a'=6;a=1;
w16-none none 159 1 1 0 3.4 12 9
w16-none none 160 2 1 1 2.8 2 25 a'=1;
w16-none none 170 3 1 2 7.1 12 2 c=1;a'=1;
w16-none none 162 3 1 2 9.0 11 2 a'=2;
w16-none none 163 5 1 4 3.2 11 16 a'=4;
w16-none none 164 3 1 2 3.0 8 2 a'=1;a=1;
w16-none none 165 4 1 3 3.6 10 12 a'=3;
w16-none none 168 1 1 0 5.7 1 2
w16-none none 169 1 1 0 8.0 5 3
w16-none none 166 8 1 7 2.8 0 19 a'=7;
w16-none none 173 4 1 3 3.6 0 20 a'=3;
w16-none none 161 6 1 5 18.7 4 2 a'=5;
w16-none none 167 5 1 4 7.8 14 2 a'=3;a=1;
w16-none none 172 5 1 4 4.1 8 8 a'=3;a=1;
w16-none none 183 3 1 2 3.3 5 2 a'=2;
w16-none none 177 1 1 0 3.3 15 10
w16-none none 181 3 1 2 7.5 6 2 a'=2;
w16-none none 171 1 1 0 3.2 10 14
w16-none none 174 2 1 1 3.1 3 26 a=1;
w16-none none 185 2 1 1 10.5 5 2 a'=1;
w16-none none 184 6 1 5 2.9 13 18 a'=4;b=1;
w16-none none 186 1 1 0 15.3 5 2
w16-none none 178 4 1 3 3.5 14 2 a'=2;c''=1;
w16-none none 187 6 1 5 3.2 7 20 a'=4;a=1;
w16-none none 176 6 1 5 6.0 14 2 a'=4;a=1;
w16-none none 175 1 1 0 2.8 0 8
w16-none none 182 1 1 0 3.5 8 15
w16-none none 193 1 1 0 5.0 15 2
w16-none none 192 2 1 1 15.7 15 2 a'=1;
w16-none none 180 1 1 0 3.0 15 14
w16-none none 179 1 1 0 3.0 15 4
w16-none none 188 4 1 3 55.6 1 18 a'=2;c''=1;
w16-none none 198 7 1 6 15.0 6 2 a'=5;b=1;
w16-none none 190 4 1 3 3.0 2 11 c'''=1;b=1;a'=1;
w16-none none 200 10 1 9 3.9 3 19 a'=6;a=3;
w16-none none 191 2 1 1 6.8 15 2 a'=1;
w16-none none 189 3 1 2 2.9 14 19 a'=2;
w16-none none 196 3 1 2 15.2 10 2 a'=2;
w16-none none 202 3 1 2 3.9 0 22 a'=2;
w16-none none 197 2 1 1 16.5 15 2 a'=1;
w16-none none 203 4 1 3 4.4 10 16 a'=3;
w16-none none 205 1 1 0 3.1 14 21
w16-none none 194 17 1 16 3.5 11 10 a'=10;b=3;c=2;a=1;
w16-none none 195 2 1 1 2.7 15 19 a'=1;
w16-none none 204 2 1 1 3.1 11 14 a=1;
w16-none none 199 1 1 0 3.5 14 14
w16-none none 206 11 1 10 7.8 0 2 a'=9;a=1;
w16-none none 201 4 1 3 3.2 14 26 a'=3;
w16-none none 210 3 1 2 16.4 11 2 a'=2;
w16-none none 207 2 1 1 2.9 1 8 a'=1;
w16-none none 208 4 1 3 6.3 9 2 a'=2;a=1;
w16-none none 211 3 1 2 3.0 3 23 a'=1;a=1;
w16-none none 215 2 1 1 6.3 8 2 a'=1;
w16-none none 209 12 1 11 3.5 12 25 a'=9;c=1;a=1;
w16-none none 212 4 1 3 3.3 14 10 a'=3;
w16-none none 213 3 1 2 9.0 2 20 a'=2;
w16-none none 214 6 1 5 36.2 2 2 a'=5;
w16-none none 216 2 1 1 3.1 0 4 a'=1;
w16-none none 221 3 1 2 3.0 6 17 a'=2;
w16-none none 222 1 1 0 10.7 6 20
w16-none none 223 1 1 0 3.1 5 20
w16-none none 225 2 1 1 3.2 13 3 a'=1;
w16-none none 220 1 1 0 3.7 2 13
w16-none none 227 5 1 4 19.7 3 2 a'=4;
w16-none none 219 7 1 6 2.6 11 23 a'=6;
w16-none none 217 1 1 0 2.9 0 12
w16-none none 231 4 1 3 2.6 15 9 a'=3;
w16-none none 218 3 1 2 2.9 11 23 c=1;a'=1;
w16-none none 229 1 1 0 3.2 0 19
w16-none none 224 3 1 2 3.1 5 8 a'=2;
w16-none none 228 1 1 0 9.4 11 2
w16-none none 226 1 1 0 30.3 14 16
w16-none none 232 3 1 2 2.8 0 11 a'=2;
w16-none none 237 4 1 3 3.7 13 7 a'=3;
w16-none none 240 1 1 0 14.9 6 2
w16-none none 238 7 1 6 7.2 12 3 a'=5;a=1;
w16-none none 233 1 1 0 17.0 13 2
w16-none none 243 1 1 0 6.3 0 2
w16-none none 241 11 1 10 12.8 2 2 a'=10;
w16-none none 244 3 1 2 3.6 13 10 a'=2;
w16-none none 235 1 1 0 5.2 5 2
w16-none none 242 6 1 5 2.7 2 4 a'=5;
w16-none none 234 1 1 0 7.6 1 2
w16-none none 230 9 1 8 15.8 3 2 a'=7;c'''=1;
w16-none none 239 1 1 0 3.1 13 9
w16-none none 245 6 1 5 3.6 1 10 a'=5;
w16-none none 236 1 1 0 3.6 7 15
w16-none none 247 2 1 1 15.4 6 2 a'=1;
w16-none none 249 1 1 0 6.6 2 16
w16-none none 250 2 1 1 2.8 5 5 a'=1;
w16-none none 252 4 1 3 2.9 7 4 a'=2;a=1;
w16-none none 246 4 1 3 16.3 11 2 a'=2;c''=1;
w16-none none 255 1 1 0 3.0 6 7
w16-none none 248 3 1 2 38.0 1 2 a'=2;
w16-none none 251 3 1 2 3.6 9 10 b=1;a'=1;
w16-none none 253 3 1 2 6.2 0 2 a'=2;
w16-none none 254 5 1 4 7.4 2 2 a'=4;
# end 2026-10-08T12:54:55Z rows=257
Can't render this file because it has a wrong number of fields in line 2.

View file

@ -0,0 +1,348 @@
# Igneum Miner: the window audit, 8 October 2026
The order (14:5x BST, the founder): a full audit of the miner window. Things repeat (the tuning on more than one
page), the Earnings page is a mess; think Apple, minimal, informative but simple; handled on the next release.
Read against the 0.3.25 line (release-0.3.25 b5be4edf) plus the UI lane's tiers-table-26 e34dc5d8, which is the
same window plus the table words. Every screen was captured from the mock on igneum-build-2 (`tools/ui-mock/capture.sh`,
1280 wide, dark and light); the captures are in `~/Desktop/igneum-previews-2026-10-08/audit/` (13 files, 01 to 13).
Nothing here is a Mac build.
Sections: 1 the window as it stands, 2 the register of repeats, 3 the readouts that mislead or sprawl, 4 the target
layout with every row and its words, 5 the build plan for the UI lane on release-0.3.26, 6 what is held for the founder.
Verdict words used below: **keep**, **merge into <page>**, **remove**.
## 1. The window as it stands
Five pages behind a rail (Overview, Cards, Earnings, Prove, Settings), a four-step setup before them, a log drawer, a
top bar with a status pill, and a rail foot (machine name, "pays 0x…", uptime, Logs, Quit, version).
### 1.1 Setup (fresh install; captures from the mock's `fresh` scenario were not re-taken, the screens are unchanged since 0.3.23)
| Screen | What it shows | Verdict |
|---|---|---|
| Welcome | mark, "devnet v4 · nothing is bought or sold", three tiles (background, graphics card, pays an address), Get started | keep |
| Step 1 Your graphics card | every card a row with a switch; notes on NVIDIA 80% cap and the built-in GPU | keep; drop the sentence "The card row has a slider." (the slider is on Tune now, section 4.2) |
| Step 2 Your electricity | region, currency, price per kWh, Skip | keep |
| Step 3 Which network | two network cards | keep |
| Step 4 Where should rewards go | make me an address / use my own | keep |
| Key sheet | the private key once, the acknowledgement | keep; the sentence "Earnings can show it again" becomes "Settings can show it again" |
### 1.2 Overview (capture 01, 02, 09, 10, 11)
| Row | What it shows | Verdict |
|---|---|---|
| Top bar pill | "Mining · 203 MH/s" | keep the state word; the rate is the hero's (R8) |
| Hero numbers | 203 MH/s "2 of 2 cards mining"; 622 W "0.33 MH/W"; £4.18 "a day, electricity at 28p/kWh"; 6,785 blocks "this run · 8,055 lifetime" | merge into Mine as four numbers: MH/s, W, MH/W, IGN last 24 h (R8, R9, R18, A5) |
| Start/Stop mining | the big toggle, sub "mining on 2 of 2 cards" | keep the toggle; remove the sub (R8) |
| Clock card | shown only on skew | keep |
| First-block wait card, block card | the Poisson count-up, then the card once | keep |
| Ladder strip | seven rung chips, the current rung's sentence, "The ladder" | remove from Mine (R10) |
| The chain, live | the compact scene, Inspect, Pause, the legend; the full scene with the block inspector behind Inspect | keep |
| Node card | one line plus a disclosure with 13 key/value rows, the rules fingerprint, the next rule change | keep the one line on Mine; merge the disclosure into Settings > Node (R14, A14) |
| Activity | "42 blocks in 10 min · 253 in the last hour · N to the dev fee", "Open the log", eight events | keep the events (five); remove the stats line and the button (R12, R13, A15) |
### 1.3 Cards (capture 03, 04)
| Row | What it shows | Verdict |
|---|---|---|
| Ember Tune strip | three tier buttons with fleet numbers and savings; "Ember saves 188 W, £1.26 a day across 2 tuned cards"; Tune all; the sentence; "Electricity £0.28 per kWh, set in Settings · 2 of 2 cards measured"; the knee rule; the heat line; a Power control switch when NVIDIA is measure-only | merge into Tune as the strip: buttons, Tune all, one sentence (R1, R2, R4, R5, R7, R20) |
| Card row | mark, name, kind tag, series, "mining · 32 GB · 102 blocks"; 127 MH/s; 69,898 IGN a day; "450 → 372 W, 0.34 MH/W" with a sparkline; £2.50 a day; 59 °C; Retune; switch; chevron | split: the row on Mine carries name, state, MH/s, W, °C and the switch; everything else is Tune's (R6, R16, R18, R19, A6) |
| Tune line under the row | "Tuned 2 h ago 1950 MHz at 90% · the lock: 33 W less for 1.0% of rate, knee at 1100 MHz · next check 15 Oct" and "saves 78 W, 1.25% of rate" | merge into Tune as one line per card (A9, A10) |
| Details: Power cap | slider "90% · 405 W", two-sentence help, "Cap in force: 405 W, Ember's choice" | merge into Tune details, one sentence (A11) |
| Details: telemetry | "memory 68 °C · core clock 1950 MHz (cap 1950)" | merge into Tune details |
| Details: Tier | the card's three tier buttons, Retune, "Locked at 1950 MHz, 372 W; stock 450 W. A tap applies that row at once, no new search. Ember never locks below the knee by itself. Going lower is your choice." | merge into Tune, the buttons and one lock line (R1, R5) |
| Details: Tuned line | "Tuned: 126.8 MH/s at 372 W (0.341 MH/W) 1950 MHz at 90%, full tune, 2 h ago saves 78 W, 1.25% of rate" | remove (R6) |
| Details: Locked line | "Locked at 1950 MHz: 126.8 MH/s at 372 W (0.341 MH/W) unlocked at the same cap: 128.1 MH/s at 405 W", "the knee at 1100 MHz, where the rate fell 5.8% 33 W less for 1.0% of rate", then the 40-word lock rule | remove; the one lock line carries the lock and the knee (R5, R6, A10) |
| Details: the curve | the tune's curve with a 60-word caption | keep in Tune details with a two-sentence caption (A12) |
| Details: Miners on this card | the identities stepper with a 30-word help | keep in Tune details, one sentence (A13) |
| Details: facts | "runs on CUDA · 21760 cores · CUDA device 0" | keep in Tune details |
| Your cards eyebrow | "2 of 2 on" | keep on Mine |
### 1.4 Earnings (capture 05, 06, 12)
| Row | What it shows | Verdict |
|---|---|---|
| Headline | "29,517 IGN a day" "at your last hour's rate: 252 blocks at 4.88 IGN each · about 9,377 IGN expected at 17.0 MH/s" | remove; replaced by the measured windows (A1) |
| Run line | "6,784 blocks this run 33,109 IGN at today's reward · 1 shard, 1.15 IGN · 4 h 10 min" | remove (A2, R9) |
| Weight cell | "rank 3 of 4 keys 61 blocks in 2 hours · 2 of 2 hours · 2.22% of the network" | merge into one Standing row (A3, R10) |
| Electricity cell | "no draw / no card reports its draw" or "£4.18 a day at 28p/kWh for 622 W · 51 IGN per kWh" | keep as one row (A4) |
| Lifetime cell | "8,054 blocks 39,307 IGN at today's reward" | merge into the All time column (R9) |
| Dev fee switch | "Dev fee off. Every block pays your address." | merge into Settings, last section (R12) |
| The ladder | a 40-word intro and seven rungs, each a heading, a line and a sub | merge into the Standing disclosure, rungs only (R10, A17) |
| Your first hour | a six-step timeline behind a disclosure | remove (A18) |
| Rewards address | the address, Copy, Change address, Show my key, Open the wallet, "Your balance is in the wallet." | merge into Settings > Wallet; Earnings keeps one Payouts line (R11) |
### 1.5 Prove (capture 07)
| Row | What it shows | Verdict |
|---|---|---|
| Shard card | "Your card proved shard 3 of block 160,390." plus two lines | remove; the shard count is an Earnings column (R15) |
| Prove on this machine | the switch, a two-sentence help, the per-card tier list, the line, the note, Set up, Details (verifier, segments, program id, aggregator id) | merge into Settings > Proving (R15) |
| Prove instead of mining | the second switch for cards under 12 GB | merge into Settings > Proving |
The page is one switch and one card. It does not earn a rail entry.
### 1.6 Settings (capture 08, 13)
| Row | What it shows | Verdict |
|---|---|---|
| Tuning card | the three tier buttons again, "2 of 2 cards measured · £0.28 per kWh, set in Settings", the Ember Tune switch, the Power control switch, Fine tuning, the sentence again | remove the card; Power control stays as its own section; the Ember Tune switch and Fine tuning go to Tune (R1, R2, R3, R4) |
| Electricity | region, currency, price per kWh, the typical-price note | keep |
| Heat mode | the switch with a 45-word label, hold, schedule, room now, two long helps | keep; trim the words (A20) |
| Network | the line, two network cards | merge into Settings > Node |
| This machine | start at login, make my page public, remote jobs (note, Check, History), name, appearance | keep |
| Interface | "Interface 1.0.0, built in", a 35-word help, the built-in switch | merge into Updates as one row (A19) |
| Igneum Miner 0.3.3 | the version line, Check for an update, Install updates by itself | keep as Updates |
| Logs | Copy the log, Show the log, the two paths | keep (R13) |
| Advanced (devnet) | vote on checkpoints, trust proofs, the live page, machine id | keep, before the dev fee |
### 1.7 The rail, the foot, the drawer
| Element | What it shows | Verdict |
|---|---|---|
| Rail | Overview, Cards, Earnings, Prove, Settings | four entries: Mine, Tune, Earnings, Settings |
| Rail foot | machine name, "pays 0xdd44…86E8", "up 4 h 10 min", Logs, Quit, "v0.3.3 · devnet v4" | remove the "pays" line (R11); the rest keeps |
| Page sub-titles | "your rate, what it costs, the chain as it grows" and so on | keep, rewritten in 4.5 |
| Log drawer | chips, search, jump to time, last error, last swap, wrap, copy, follow | keep |
| Update card, quit question, notices strip | | keep |
## 2. The register of repeats
Each repeat, where it sits today, and the one place it keeps. The test that proves it is in section 5.4 under the same id.
| Id | Element | Where it appears today | Keeps | Verdict |
|---|---|---|---|---|
| R1 | the three tier buttons (Efficiency, Balanced, Maximum) | Cards strip `#tier-seg`; every card's details `[data-card-tier]`; Settings `#tier-seg-2` | Tune: the strip (fleet) and one row per card | remove from Settings |
| R2 | the Ember Tune sentence (what it is doing, did, will do) | Cards `#tune-schedule`; Settings `#s-tune-schedule` | Tune strip | remove from Settings |
| R3 | the Power control switch | Cards strip `#m-power-control` (when NVIDIA is measure-only); Settings `#s-power-control` | Settings > Power control | Tune shows one sentence with a link when it matters |
| R4 | the electricity price as a figure | Overview "electricity at 28p/kWh"; Cards "Electricity £0.28 per kWh, set in Settings"; Settings Tuning "£0.28 per kWh, set in Settings"; Settings Electricity | Settings > Electricity | remove the three figure lines |
| R5 | "Ember never locks below the knee by itself. Going lower is your choice." | Cards strip `#tier-rule`; each card's tier help; each card's lock help (`LOCK_RULE`); with two cards, five times on one page | Tune, once, at the foot | remove the other four |
| R6 | a card's measured point (126.8 MH/s, 372 W, 0.341 MH/W) | the row; the Balanced button; the "Tuned:" line; the "Locked at" line; the tune line's "saves 78 W"; six readings of one number | the row (live) and the tier button (measured) | remove the Tuned and Locked lines |
| R7 | the fleet saving | the strip's "Ember saves 188 W, £1.26 a day across 2 tuned cards"; the Balanced button's "saves 188 W, £1.26 a day" | the button | remove `#fleet-saving` |
| R8 | the hash total and the card count | the pill "Mining · 203 MH/s"; the hero "203 MH/s"; the hero sub "2 of 2 cards mining"; the toggle sub "mining on 2 of 2 cards" | the hero and its sub | the pill keeps the state word; remove the toggle sub |
| R9 | blocks this run and lifetime | Overview hero "6,785 blocks this run · 8,055 lifetime"; Earnings "6,784 blocks this run"; Earnings "Lifetime 8,054 blocks"; each row's "102 blocks" | Earnings, the windows table | remove from the hero; the row's count stays (it is per card) |
| R10 | rank, weight, the ladder | the Overview strip; the Earnings Weight cell; the Earnings ladder rung "Rank by weight"; the block card's rank line | Earnings, one Standing row with the rungs behind a disclosure | remove the strip and the cell |
| R11 | the rewards address | the rail foot "pays 0x…"; Earnings Rewards address card; the key sheet | Settings > Wallet; one Payouts line on Earnings | remove the foot line and the Earnings card |
| R12 | the dev fee | Earnings switch; Overview activity "N to the dev fee" | Settings, the last section, no control (earnings-26) | remove the switch and the activity mention |
| R13 | open the log | the rail foot Logs; Activity "Open the log"; Settings Logs "Show the log" | the rail foot and Settings Logs | remove the Activity button |
| R14 | the node facts | Overview node card, 13 rows plus fingerprint plus rule change | Settings > Node | Mine keeps one line |
| R15 | proving | the Prove page; the Earnings ladder rung "Your card proved a shard"; the Overview strip chip | Settings > Proving (the switches) and Earnings (the shard counts) | remove the page |
| R16 | Tune and Retune buttons | the row's Retune; the details' Retune; the strip's Tune all | Tune: one per card, Tune all on the strip | remove the row button |
| R17 | hashes per watt | the hero's "0.33 MH/W" as a sub-label; each row's "0.34 MH/W" with a sparkline; each tier button; the Tuned and Locked lines | the hero (as a number), the row, the tier button | the sparkline goes with the curve to Tune details |
| R18 | money a day | hero "£4.18 a day"; each row "£2.50 a day"; Earnings Electricity cell; each tier button's "£2.41 a day" | Earnings Electricity row; the tier button keeps the saving in watts only | remove from the hero and the rows |
| R19 | IGN a day | each row "69,898 IGN a day"; Earnings headline; Earnings "about 9,377 IGN expected" | Earnings, one quiet projection line | remove from the rows |
| R20 | the heat line | Cards strip `#heat-line`; Settings Heat mode `#s-heat-line` | Settings; Tune shows the line only while heat mode is on | |
| R21 | Interface and Updates as two cards | Settings | one Updates section | merge |
## 3. Readouts that mislead or sprawl
| Id | Readout | Why it misleads | Verdict |
|---|---|---|---|
| A1 | "29,517 IGN a day … about 9,377 IGN expected at 17.0 MH/s" | two figures three times apart on one line: one hour multiplied by 24 and called a day, beside a share projection; neither is measured | remove; the windows are measured sums (section 4.3); the projection is one quiet line that hides when a job holds a card, the network is paused, or no card mines |
| A2 | "6,784 blocks this run · 33,109 IGN at today's reward · 4 h 10 min" | "this run" is not a window a person thinks in; "at today's reward" recomputes the past | remove; last 24 h, 7 days, all time |
| A3 | "rank 3 of 4 keys · 61 blocks in 2 hours · 2 of 2 hours · 2.22% of the network" | four facts in three units in one cell | one row: "Rank 3 of 4 keys" with the window in the sub |
| A4 | "no draw / no card reports its draw" on Earnings while the Overview hides the watts cell | the same absence told two ways | one sentence, once: "No power reading on Apple silicon." |
| A5 | the hero's MH/W as a sub-label under W | the founder's first-class number rides as small print | its own number tile |
| A6 | "450 → 372 W" on a row | an arrow with no words; a before and an after that are not both now | the row shows the live watts; the tier button on Tune shows "78 W under stock" |
| A7 | tier button "saves 358 W, £2.41 a day" | a saving against stock that reads as a saving against now | "358 W under stock" |
| A8 | "MH/S", "A DAY", "BLOCKS" | the CSS uppercase on unit labels breaks the units | no text-transform on a unit |
| A9 | "Balanced on 2 cards, tuned 1 h ago · next check 15 Oct." and "2 of 2 cards measured" and "Tuned 2 h ago" | three stamps for one event, and the capture shows 1 h against 2 h | one sentence on the strip; one per card |
| A10 | "the lock: 33 W less for 1.0% of rate" and "saves 78 W, 1.25% of rate" | two savings with two baselines (the unlocked cap, stock) | one baseline, stock, once per card |
| A11 | slider "90% · 405 W", "Cap in force: 405 W", tier "372 W" | three watt figures that look like a contradiction (the cap and the draw) | one sentence: "Cap 405 W (90%). The card draws 372 W at the lock." |
| A12 | the curve caption, 60 words | nobody reads a caption that long | two sentences; the legend in the drawing |
| A13 | "Miners on this card", 30-word help | the help explains three cases | one sentence |
| A14 | "Node synced · 4 peers · 39,587 blocks" beside "This node has every block the network has made. Read 6 s ago." | the same fact twice on one line | "Node synced · 4 peers" |
| A15 | "42 blocks in 10 min · 253 in the last hour" over the activity feed | a third set of block counts on the glance page | remove; Earnings has the windows |
| A16 | Earnings sub-title "what you made, where it goes" | "where it goes" is the address, which is settings | "what this machine earned" |
| A17 | the ladder: seven rungs with headings, lines and subs, a 40-word intro | gamification on a money page | one Standing row; the rungs behind a disclosure, no intro |
| A18 | "Your first hour" timeline | the wait card and the block card already mark the first hour | remove |
| A19 | the Interface card | a 35-word explanation of over-the-air bundles beside the Updates card | one row under Updates: "Interface 1.0.0, built in" |
| A20 | Heat mode's 45-word switch label | the switch label is a paragraph | the label is five words; the paragraph is the help |
| A21 | the Prove page's "20 points of every block pay the provers, split by shard. A paid record is a chain fact: anyone can read it." | fine words in the wrong place | the Proving section's help |
## 4. The target layout
Four pages, one job each. Mine: what is happening now. Tune: how each card is driven. Earnings: what this machine
earned, measured. Settings: everything you set once.
Every page under the copy law: no em dashes, no two-beat antithesis, no aphorisms, sentence case, one to three points
per block, `text-wrap: balance` on headings and `text-wrap: pretty` on body, the last two words of every sentence
block glued. Unit labels are never uppercased. Every number names its source on hover (`title`), as today.
### 4.1 Mine
Sub-title: "what this machine is doing now".
1. The toggle: **Start mining** / **Stop mining**. No sub-line. Disabled with "waiting for the engine" as the label while the engine starts.
2. Four numbers in one row, big, each with a unit and one sub-line:
- **203** MH/s, sub "2 of 2 cards mining" (paused: "paused"; waiting: "waiting for the node"; heat rest: "resting, heat mode").
- **622** W, sub "drawn now". Hidden when no card reports power.
- **0.33** MH/W, sub "hashes per watt". Hidden with the watts.
- **1,234** IGN, sub "last 24 hours" (measured: the blocks and shards of the last 24 hours at the reward each paid). "0 IGN" with sub "no block yet" before the first.
3. The clock card, only on skew (as today).
4. The first-block wait card, then the block card, once (as today).
5. **Your cards**: one row per card. Mark, name, the kind tag, the state word ("mining", "starting", "off", "fault: <reason>, retrying"), then **127** MH/s · **372** W · **59** °C, then the switch. No chevron, no buttons, no money, no IGN a day, no arrow. The eyebrow "2 of 2 on". A fault's reason reads on the row (the plug, tune, play rule).
6. **The chain, live**: the compact scene with Inspect and Pause, the legend; the full scene behind Inspect, unchanged.
7. The node line: a dot and "Node synced · 4 peers" (syncing: "Node syncing · 41,000 of 52,000 blocks · about 12 min left"; failed: "Node restarting · <reason>"). A click opens Settings > Node. No disclosure here.
8. **Activity**: the last five events in a person's words, each with its time. No stats line, no button.
What leaves this page: the ladder strip, the money tile, the blocks tile, the node details, the stats line, the log button, the toggle sub-line, every per-card tuning word.
### 4.2 Tune
Sub-title: "how Ember drives each card".
1. The strip, one card: the three tier buttons for the fleet, each: **Efficiency** "193 MH/s · 452 W" "358 W under stock"; **Balanced** "203 MH/s · 622 W" "188 W under stock"; **Maximum** "206 MH/s · 810 W" "stock". The one in force is marked. Then **Tune all**. Then one sentence, the only sentence:
- before the first tune: "Balanced is on. The first measurement runs 2 min into steady mining."
- from the table: "Balanced is on, from the team's table for this card class. Ember measures this card 2 min into steady mining."
- measuring: "Measuring RTX 5090: step 3 of 9, mining again in 4 min."
- measured: "Balanced on 2 cards. Measured 1 h ago, next check 15 Oct."
- off: "Ember Tune is off. The tiers still apply when you tap them."
- paused by the manifest: the manifest's note.
- class flip: "Class v5 arrived: re-measuring 2 cards, started 14:12. The class v4 points are out of date until then."
Then the switch **Measure cards by itself** with the help "Once, 2 min into steady mining, then every 7 days and after a driver or program change." (this is today's `s-sweep`). Under it, when heat mode is on, the heat line; when NVIDIA is measure-only: "Power control is off, so NVIDIA cards are measured and never set. Turn it on in Settings."
2. One card per graphics card:
- head: mark, name, the live "127 MH/s · 372 W · 0.34 MH/W", and **Tune** (or **Stop** while measuring; **Retune** once measured).
- the card's three tier buttons, the same shape as the strip, the one in force marked. A tap applies the row at once.
- one line: "Locked at 1,950 MHz, cap 405 W. Knee at 1,100 MHz." Variants: "Clock unlocked, cap 405 W." / "Measuring: step 3 of 9, 4 min left." / "No lever on Apple silicon: the system sets the clocks. Ember measures and reports." / "Re-measuring for class v5, started 14:12." / "From the team's table, measured on this card class." (or "estimated for").
- **Details** (a disclosure, closed): the curve with the caption "Hash rate against power for every step of the last measurement. The ringed point is the one Ember kept; a hollow point was rejected; the dashed point is the knee." Then the cap row: the slider and "Cap 405 W (90%). The card draws 372 W at the lock. Lower is cooler and quieter." with **Back to Ember's choice** when pinned. Then **Miners on this card** with the stepper and "Each one votes and is paid on its own. 8 for a big card, 2 for a small one, 1 for a built-in GPU." Then the telemetry line "memory 68 °C · core 1,950 MHz · memory clock 13,801 MHz · fan 62%". Then **Fine tuning** (today's `s-climb`, only when the engine offers it) with "Searches around the best point instead of stepping down a ladder." Then the facts line "runs on CUDA · 21,760 cores · driver 617.42".
- a driver offer, when there is one, as today (Install, Restart now), on this card.
3. The foot, once: "Ember never locks below the knee by itself. Going lower is your choice."
Nothing about tuning anywhere else: no tier buttons, no Ember sentence, no price figure, no saving line on Mine, Earnings or Settings.
### 4.3 Earnings
Sub-title: "what this machine earned".
1. The headline: **1,234 IGN** with the eyebrow "last 24 hours" and the sub "251 blocks · 3 shards".
2. The windows, one row of two columns, each the same shape (amended 15:2x BST after item 5's capture: the headline is the 24-hour figure, so a 24-hour column beside it was a repeat of this page's own making):
- **7 days**: 8,920 IGN · 1,830 blocks · 19 shards
- **All time**: 39,307 IGN · 8,054 blocks · 61 shards
Every figure is the sum of what the chain paid at the time, never today's reward applied to old blocks. "0 IGN" with "no block yet" before the first. The engine carries the windows (section 5.1, item 2); until it does, a window shows its block count only and the IGN reads "reading", and the 24-hour count falls back to `ladder.blocks_24h`, then to the block list, never to zero.
3. **Electricity**: "£4.18 a day at 28p/kWh for 622 W". Without a price: "622 W. Set a price in Settings for the cost." Without a reading: "No power reading on Apple silicon."
4. **Payouts**: "Pays 0xdd44…86E8" with **Copy** and **Open the wallet**; the sub "Your balance is in the wallet. Change the address in Settings."
5. **Standing**: "Rank 3 of 4 keys · signing 8 of 80 points" with the sub "weight is your blocks over the last 2 hours, 2 of 2 hours mined". Behind **Details**: the rungs as today, without the intro, each one line and one sub. (Held for the founder: section 6, D2.)
6. The projection, one quiet line at the foot, dim: "About 9,400 IGN a day at 17.0 MH/s, 2.2% of the network." It is not shown when a remote job holds a card, when the network or mining is paused, when no card mines, or when the network rate is not read. It never sits beside a measured figure.
What leaves this page: the dev fee, the address card, the key, the run line, the lifetime cell, the first-hour timeline, the IGN a day headline.
### 4.4 Settings
Sub-title: "set once, left alone". Sections in this order, each a card:
1. **Wallet**: the address with **Copy**; **Change address** (the input, Change, the confirm); **Show my key** (the question, Show, Copy, Hide, the file path); **Open the wallet**. The help "Every block this machine finds pays this address."
2. **Node**: the network cards (Devnet 3 running now, Testnet 1 not yet open) and the switch question; one line "Node synced · 4 peers · 39,587 blocks"; **Details** (a disclosure): the 13 rows as today, the rules fingerprint with Copy, the next rule change. Help: "Every node on the network shows the same fingerprint of the rules. A peer with another one is refused."
3. **Updates**: "Igneum Miner 0.3.26" with the update note and **Check for an update** / **Install now**; the switch **Install updates by itself** "Downloads in the background and installs at a quiet moment, never mid-program."; the row "Interface 1.0.0, built in" with the switch **Use the built-in interface** and the one-line help "Small changes to this window arrive over the air, signed by Igneum."
4. **Power control**: the switch, "Lets the app set NVIDIA power and clock limits. Windows asks for administrator rights once at install. Off, NVIDIA cards are measured and never set." and the engine's note when there is one.
5. **Electricity**: region, currency, price per kWh, the typical-price note. Unchanged.
6. **Heat mode**: the switch **Hold a room temperature**, help "The cards heat for a share of every 10 minutes and rest for the rest. Your card is an electric heater that also earns." Then hold, schedule, room now, each with one sentence of help.
7. **Proving**: the switch **Prove on this machine**, help "Every block is turned into a short proof, in pieces called shards. Your cards prove shards and earn IGN for each one. 20 points of every block pay the provers." Then **Prove instead of mining** when a card is under 12 GB, the per-card tier list, the line, **Set up** when needed, **Details** (verifier, segments, the two program ids).
8. **This machine**: start at login, make my page public, allow remote jobs (note, Check for jobs, History), name, appearance. Unchanged.
9. **Logs**: Copy the log, Show the log, the two paths. Unchanged.
10. **Advanced** (devnet): vote on checkpoints, trust proofs, the live page, the machine id. Unchanged.
11. **The dev fee**, last, no control (the founder's order through the coordinator, 8 October 2026; earnings-26 321041dc): "1 block in 100 pays the people who make this app." and one line on what it funds, the site's wording from site/miner.html. The command-line arm (`--dev-fee 0`) stays; an off state reads "The dev fee is off on this machine."
### 4.5 The rail, the pill, the titles
- Rail: **Mine**, **Tune**, **Earnings**, **Settings**; the foot keeps the machine name, "up 4 h 10 min", Logs, Quit, the version. The "pays 0x…" line goes.
- The pill: the state word only: "Mining", "Paused", "Syncing", "Waiting", "Job running", "Node down". The rate lives on Mine.
- Page ids: `mine`, `tune`, `earnings`, `settings`. `View.PAGES` in that order; `page('nonsense')` falls to `mine`.
## 5. The build plan for release-0.3.26
For the UI lane (a414b6bdc81d348d8), on top of tiers-table-26 e34dc5d8 and its two held items (the earnings-tab
fix, the dev fee to the bottom of Settings; both are absorbed below). Ordered by what the person at the window sees
first. Hours are lane hours; the whole plan is about 27 hours of lane time plus 4 of engine time, so two lanes land it
in one working day. Every item ships with its test (5.4) and its captures.
### 5.1 Items
| # | Item | What changes | Hours | Tests |
|---|---|---|---|---|
| 1 | The four pages | `View.PAGES` to mine, tune, earnings, settings; the rail; the page titles and subs (4.5); Prove's markup moves under Settings; `renderProve` becomes `renderProvingSection`; the pill reads a state word (`View.pill`) | 2 | T-R15, T-R8 |
| 2 | Earned windows in the engine | `ladder.rs` keeps every block and shard with its time and the wei it paid; `state.ladder.earned = {h24, d7, all}` each `{wei, blocks, shards}`; summed at state time from the kept records; a 0.3.25 record with no wei rows reads the chain facts' reward at the block's time for the back-fill, once | 4 (engine lane) | `ladder.rs` unit: three windows over a fixed record; a block at the 24 h edge counts once |
| 3 | Mine | the hero's four tiles (MH/W as a tile, IGN last 24 h from item 2); the toggle without its sub; the ladder strip removed; the node card to one line that opens Settings > Node; Activity to five events, no stats line, no button; the card rows to name, state, MH/s, W, °C, switch | 4 | T-R8, T-R9, T-R10, T-R13, T-R14, T-R18, T-R19, T-A5, T-A14 |
| 4 | Tune | the page from the Cards strip and the card details: the strip (buttons, Tune all, one sentence, the measure switch, the conditional heat and power lines); per card the head, the buttons, the one lock line, Details (curve with the short caption, cap sentence, miners stepper, telemetry, fine tuning, facts); the foot rule once; the Tuned and Locked lines removed; `fleetSaving`, `priceFigure` and `tier-price` removed | 6 | T-R1, T-R2, T-R3, T-R5, T-R6, T-R7, T-R16, T-R17, T-R20, T-A7, T-A9, T-A10, T-A11 |
| 5 | Earnings | the headline and the windows (item 2), the Electricity row, the Payouts line, the Standing row with the rungs behind Details, the projection line and its hide rule; the dev fee, the address card, the run line, the lifetime cell and the timeline removed | 4 | T-A1, T-A2, T-A3, T-R9, T-R11, T-R12 |
| 6 | Settings | the sections in 4.4's order: Wallet (from Earnings), Node (the network cards plus the Overview disclosure), Updates (with the Interface row), Power control alone, Electricity, Heat mode (short label), Proving (from Prove), This machine, Logs, Advanced, Dev fee last; the Tuning card removed | 4 | T-R1, T-R2, T-R3, T-R4, T-R11, T-R12, T-R14, T-R15, T-R21, T-A19, T-A20 |
| 7 | Copy and units | no `text-transform` on unit labels; the setup's slider sentence; the key sheet's "Settings can show it again"; the widow guard on every new block; a pass over every new sentence against the copy law | 1.5 | T-A8, the copy-law grep (no em dash in `index.html` or `app.js` strings) |
| 8 | Mock, captures, screens | the mock's scenarios keep working (`?page=mine|tune|earnings|settings`); a `audit-26` shot list in `tools/ui-mock/`; captures into `docs/design/app-screens/0.3.26/` (four pages, dark and light, the first-minute and the measured states) on build-2 | 1.5 | the capture run itself |
Item 1 lands first so items 3 to 6 do not collide on the page markup; items 3 to 6 are one page each and can run in
parallel on one branch (`app-ia-26` off tiers-table-26) with a commit per page. Item 2 is the engine lane's and gates
only the IGN tile and the windows; until it lands the tile reads "reading" and the windows show blocks only.
### 5.2 What the UI lane's two held items become
- The earnings-tab fix: absorbed by item 5; the old headline, run line and cells are not fixed, they are replaced.
- The dev fee to the bottom of Settings: item 6, section 11, the last card; the words in 4.4.
### 5.3 Order of landing
1. `app-ia-26`: items 1, 3, 4, 5, 6, 7 (one lane, commits per item, the gate green on each).
2. `earned-windows-26`: item 2 (the engine lane), merged under `app-ia-26` before item 5's windows read live.
3. Item 8 on the merged tree; the captures go with the plan commit.
4. The lane reports its sha to main by 18:30 BST; main merges into release-0.3.26 after the gate.
### 5.4 The tests: nothing twice
All in `app/igneum-app/ui/view.test.mjs` (the View block runs under node with no DOM) plus a new
`app/igneum-app/ui/once.test.mjs` that reads `index.html` as text and counts. Each repeated element in section 2 has
one assertion. `once(html, needle)` counts occurrences of a string in the static markup; `inPage(html, pageId, needle)`
counts inside one `<section class="page" id="page-…">`.
| Test | Asserts |
|---|---|
| T-R1 | `once(html, 'aria-label="Tuning tier"') === 1` and it sits in `#page-tune`; `inPage(html, 'settings', 'tier-seg') === 0`; `View.tierSet` is the only producer of per-card tiers and `tierButtonsHtml` is called from the Tune renderer only (a grep over `app.js`: the string `tier-seg-2` is absent) |
| T-R2 | `once(html, 'id="tune-schedule"') === 1`; `once(html, 's-tune-schedule') === 0` |
| T-R3 | `once(html, 'id="s-power-control"') === 1`; `once(html, 'm-power-control') === 0`; `View.powerNote(state)` returns the one sentence only when an NVIDIA card is present and power control is off |
| T-R4 | the string `per kWh` appears in `index.html` only inside the Electricity section (count 2: the setup step and Settings); `View.priceFigure` is not exported |
| T-R5 | `once(html, 'Ember never locks below the knee') === 1`; `View.TIER_RULE` is read by the Tune foot only (`app.js` grep: one reference outside the View block) |
| T-R6 | for a measured card, `View.tuneLines(card, state)` returns exactly one line and it contains neither "Tuned:" nor "Locked at … MH/s" (the lock line carries MHz and W only); `View.lockWords` is folded into it |
| T-R7 | `View.fleetSaving` is not exported; `once(html, 'fleet-saving') === 0` |
| T-R8 | `View.pill(state).text` for a mining state equals "Mining" (no "MH/s"); `once(html, 'btn-toggle-sub') === 0` |
| T-R9 | `inPage(html, 'mine', 't-blocks') === 0`; `once(html, 'e-run') === 0`; `View.earningsLines(state).all.blocks` is the only lifetime count |
| T-R10 | `once(html, 'ladder-strip') === 0`; `once(html, 'id="rungs"') === 1` and it sits in `#page-earnings` behind `#standing-details` |
| T-R11 | `once(html, 'id="r-address"') === 1` and it sits in `#page-settings`; `View.railFoot(state)` has no "pays" line; `inPage(html, 'earnings', 's-address-input') === 0` |
| T-R12 | `once(html, 'id="s-fee-card"') === 1`, it is the last `.card` of `#page-settings` and holds no `<input>`; `once(html, 's-devfee') === 0`; `#page-earnings` has no "fee" word; `View.activityStats` is not exported and `d-stats` is absent |
| T-R13 | `once(html, 'btn-open-log') === 0`; `once(html, 'id="btn-logs"') === 1`; `once(html, 'id="s-log-open"') === 1` |
| T-R14 | `once(html, 'id="node-details"') === 1` and it sits in `#page-settings`; `inPage(html, 'mine', 'n-digest') === 0` |
| T-R15 | `View.PAGES.map(p => p.id)` deep-equals `['mine', 'tune', 'earnings', 'settings']`; `once(html, 'id="page-prove"') === 0`; `once(html, 'id="s-prove"') === 1` and it sits in `#page-settings` |
| T-R16 | the Mine row renderer output for a tunable card contains no `data-tune` and no `data-stop`; the Tune card contains exactly one of them |
| T-R17 | `View.cells(card)` has `eff` once; the Mine row output contains `MH/W` zero times (the hero tile carries it); the Tune head contains it once |
| T-R18 | `inPage(html, 'mine', 't-money') === 0`; the Mine row output contains no currency symbol; `View.earningsLines(state).cost` is the one money line |
| T-R19 | `View.cardIgnDay` is not exported; `View.earningsLines(state).projection` is the one IGN a day figure and is `null` when `jobs.active`, `mining.paused`, `mining.state !== 'mining'` or `chain.hps` is unread |
| T-R20 | `once(html, 'id="heat-line"') === 1` in `#page-tune`; `View.heatLine(heat).text` is empty when heat mode is off |
| T-R21 | `once(html, 's-interface-card') === 0`; `once(html, 'id="s-ui-line"') === 1` inside the Updates card |
| T-A1 | `View.earningsLines(state)` returns `h24`, `d7`, `all`, each `{ign, blocks, shards}` summed from `state.ladder.earned`; no field named `day` |
| T-A2 | no "this run" in any `earningsLines` text |
| T-A3 | `View.standing(state).text` equals "Rank 3 of 4 keys · signing 8 of 80 points" for the ladder fixture |
| T-A5 | the Mine hero markup has four `.tot` tiles with the unit labels `MH/s`, `W`, `MH/W`, `IGN` in that order |
| T-A7 | a tier button's sub reads "358 W under stock" for the fixture; no "saves" and no currency |
| T-A8 | `app.css` has no `text-transform: uppercase` rule that applies to `.tot .k`, `.num .unit` or `.tier-b .l` |
| T-A9 | `View.tierSentence(cards, state, now)` for two measured cards returns one sentence containing exactly one time word |
| T-A10 | the Tune card's lock line for the fixture contains "under stock" at most once and no "for … of rate" |
| T-A11 | `View.capSentence(card)` equals "Cap 405 W (90%). The card draws 372 W at the lock." for the fixture |
| T-A14 | `View.nodeLine(node).text` for a synced node equals "Node synced · 4 peers" |
| T-A19 | `View.interfaceWords(ui).line` equals "Interface 1.0.0, built in" and the help is one sentence |
| T-A20 | the Heat mode switch label text in `index.html` is under 30 characters |
The copy-law grep joins `tools/ci/checks.txt` for `app/igneum-app/ui`: no em dash (U+2014) in `index.html` or in a
string literal of `app.js`; it is already the rule for served text and the window is served text.
## 6. Held for the founder
Defaults stand unless a word comes by the time given.
| Id | Question | Default | By |
|---|---|---|---|
| D1 | Prove loses its rail entry: the switches go to Settings > Proving, the shard counts to Earnings | fold it | 17:00 BST |
| D2 | The ladder: one Standing row on Earnings with the rungs behind Details, or gone from the window (it stays on igneum.network) | one row, rungs behind Details | 17:00 BST |
| D3 | Electricity as one row on Earnings (it is measured: watts now at the typed price) | keep the row | 17:00 BST |
| D4 | The card rows (name, state, rate, watts, switch) live on Mine; every tuning control on Tune | Mine | 17:00 BST |
| D5 | The chain scene stays on Mine as the live graph; the block inspector stays behind Inspect | stays | 17:00 BST |
Captures: `~/Desktop/igneum-previews-2026-10-08/audit/01-overview-live-dark.png` to `13-settings-light.png`.

View file

@ -2499,6 +2499,8 @@ F8's 64-seed gate on 017e7037 (the attack-pass lane, box 2, last seed 16:00:20 U
The tail read (8 October 2026, 09:40 to 09:46 UK, the hash lane, the M5 Max under the measure lock, one seed at a time; attack-f8 census at 2^24 nonces, window-model control, by-site attribution; tree b38b4af6 with igneum-pow at the frozen 017e7037): the four gate ratios reproduce to four places (p4 1.2169x, p8 1.3774x, p10 1.5036x, p34 1.2501x), the hot-set verdict on the windowed control is clear on all four, and every tail is attributed to one load site reading a narrow window, the site's 256-item bucket concentration carrying the excess with no saturated and no lossy source. p4: site 1 (instr 8, source r2, window 2^22 items, offset 1, last base writer mad at 4) puts 1.448 percent of its reads into the top 0.1 percent of items against 0.107 flat, index entropy 13.74 of 14 bits, largest 256-item bucket 4.5x its window expectation; hottest item 0x4000e7 at 355 reads, predicted source none. p8: site 14 (instr 51, r7, window 2^22, offset 2, writer xor at 44) 1.423 percent, entropy 13.72 of 14, bucket 3.1x, and site 6 (instr 33, r3, window 2^23, offset 1, writer mad at 30) 0.834 percent, entropy 14.71 of 15, bucket 3.5x; hottest 0x837de4 at 420 reads, source none. p10: site 8 (instr 28, r0, window 2^22, offset 1, writer mad at 20) 2.040 percent, entropy 13.71 of 14, bucket 5.6x; hottest 0x4004da at 362 reads, source none. p34: site 1 (instr 13, r3, window 2^23, offset 1, writer sub at 5) 1.352 percent, entropy 14.96 of 15, bucket 3.5x; hottest 0x800010 at 541 reads, predicted source a one-bit value from the sub at 5, saturated source 0.0001 percent. Every other site in all four seeds reads at its flat share. Reading: the residue is a per-site bucket concentration of about a quarter bit (0.26 to 0.29 bits short of uniform on a 2^22 window; 0.04 on p34) at one narrow-window site whose last writer is a mad, an xor or a sub, and the ratio tracks the bucket excess (5.6x gives 1.50x; 3.1x to 4.5x give 1.22x to 1.38x). Sub-version 3's distinct-index ratio (c'') passes these sites at 0.9927 to 0.9963 because distinctness does not see a bucket. The check that would refuse all four is a per-site bound on the largest 256-item bucket, about 2x its window expectation, at the 2^20 units (c'') already draws; it is a generator change, so it is not for the frozen 017e7037, and its cost on clean seeds is unmeasured (a morning item). Chip consequence of the residue: none beyond the window model's (a quarter bit at one site of sixteen is under 1.002x on the item set a chip would hold). The row's tail is attributed; nothing in the stream, the id or the fingerprints changes.
The F8-256 attributions (8 October 2026, 14:0x UK; the attack-pass lane's 256-seed gate on the class v5 freeze 1c420786, section (e) of its record, and the hash lane's by-site reads): the two seeds the gate flagged with a predicted one-one-bit source were read by site. p212 (1.1917x over the window model, the attack-pass lane on the gate's own line, build-4): the excess sits at site 9 (instr 35, r6, window 2^22, offset 0) at 16.4x its flat share, index entropy 13.981 of 14 bits, the largest 256-item bucket 1.75x its window expectation, the hottest items read from that site in all eight iterations near the window's base; the predicted site (instr 7, r5, a load at 2) reads the ordinary narrow-window share. p225 (1.2452x, the hash lane on the 1c420786 crate, build-3): site 4 (instr 23, r7, window 2^23, offset 1, last base writer mad at 21) at 12.6x with full entropy and the bucket at expectation, the predicted site (instr 37, r5, a load at 36) second at 3.7x. Reading: p212 is this row's tail class (a quarter-bit bucket concentration at one narrow-window site) and p225 a value-level concentration on specific items from a mad-written index; in both the predicted-source line names a site that is not the excess, so that prediction is a hint and the by-site histogram is the attribution. Consequence for the next class's acceptance: a per-site bucket bound near 2x refuses this morning's four (3.1x to 5.6x) and neither of these (1.75x; none); the value-level test (adv-cache-2's) is what sees p225, and a bucket bound near 1.5x would take p212 at a clean-seed cost estimated at 3 to 6 percent. Nothing in the stream, the id or the fingerprints changes.
Two in-house pass findings against sub-version 3 (adv-accept-3, 7 October 2026, evening), neither a chain consequence. (1) Documentation: program.json's `program_id_derivation` and spec 01 section 1.4.6 stated the plain form while generator 4 appends `'sub/' || sub_version_le16`, so a client written from the text derives another id (the devnet v4 pack: 8aa9f185d63f269e from the text against a785001687d8688a; Devnet 3's epoch 0: 30956569d8f3d8d7 against fce15bf61030be57). Fixed at 15008aca and 0f45c8be: one byte recipe (`generator::IdRecipe`) builds the id and the text, the emitter prints that text, the spec states the suffix, the class v5 form (generator 5, no suffix) and the rung form, `tests/derivation.rs` re-derives every pinned pack's id from its own text with the pack's fields only (the plain text as the known-failed case), 38 packs' program.json corrected one line each with every other file and every id and fingerprint byte-identical on re-export; the twelve readwidth mix packs of 5 October keep their text (a class name the parser no longer accepts). (2) Correctness, unreachable: the last-resort program after 256 failed attempts (`last_resort_v4`, the xor rewrite) fails the acceptance rule in 223 of 2,500 seeds (209 by part (a)) and is handed to the chain unchecked; at r = 0.67 to 0.68 the path is reached with probability about 4.6e-44 per epoch, so no chain reaches it and sub-version 3 is not reopened for it. Sub-version 3's last resort is therefore UNREACHABLE AND UNVERIFIED against the rule; class v5's generator (the v5 lane) carries the verified construction with the known-failed test on one of the 223 seeds, and its entry states it. From the same pass: the three lowest-ratio steering seeds of 4,975 at a 256-unit sample read 1.0002x worst live, so the 256-unit ratio is noise as a selector and the selector works only at the 2^20-unit read, which is what rule (c'') uses.
Owed (recorded, not run, by the founder's word): G2 (the CPU verifier on 1,024 hashes per card) on the amended stream; G3 (the Metal fuzz, edge, stats and determinism runs) on the amended stream; the hash-rate ladder re-measure on the M5 Max and the RTX 5090 (the amendment changes the base program's source draws, not the op mix or the load count, so the latency-bound rows of `docs/analysis/latency-shadow-2026-10-06.md` are expected to hold within their spread; unmeasured); AMD (the RX 9070 XT, PC 1); the 2019-class verifier core (O-1.14); F8's phase E (the 64-seed dynamic census) on the amended stream, which is the attack-pass lane's and the test of the per-op table. The row reads FIXED-AND-PASSED only after phase E passes against the amended class.

File diff suppressed because one or more lines are too long

View file

@ -244,11 +244,11 @@
<div class="feecard">
<div class="card">
<p>The <span data-product="name">Ember</span> software takes a visible, switchable 1% dev fee, the norm for GPU miners. One block template in 100 is requested with the dev payout address instead of yours. The fee goes to Igneum Labs LTD, the company that ships the software.</p>
<p>The <span data-product="name">Ember</span> software takes a 1% dev fee, the norm for GPU miners. One block template in 100 is requested with the dev payout address instead of yours. The fee goes to Igneum Labs LTD, the company that ships the software.</p>
<div class="tbl"><table style="min-width:0">
<thead><tr><th>Where</th><th>Off with</th></tr></thead>
<tbody>
<tr><td>The app, Earnings</td><td>the Dev fee switch under the money rows</td></tr>
<tr><td>The app</td><td>no switch: the fee is fixed at 1% and Settings shows it, last on the page</td></tr>
<tr><td>The command line</td><td class="mono">--dev-fee 0</td></tr>
<tr><td>HiveOS, extra config</td><td class="mono">DEV_FEE=0</td></tr>
<tr><td>Mining to a pool</td><td>nothing to turn off: the pool issues the templates, so the 1-in-100 mechanism does not exist, and the pool's own fee is the only one</td></tr>
@ -257,9 +257,10 @@
<p class="note">Measured on a test network, 4 Oct 2026: 9 fee blocks in the 785 blocks of two fee-paying miners (1.146%); the control miner at <span class="mono">--dev-fee 0</span> paid none; the miners’ counters and both nodes agree. <a href="/bench">The log</a>.</p>
</div>
<div class="card">
<div class="eyebrow">Earnings, as the app shows it</div>
<div class="switch"><span class="track"></span><span>Dev fee: 1 block in 100 pays the people who make this app</span></div>
<p class="note">The network itself takes nothing. This is the app’s fee, the same way every mining app takes one. This switch turns it off.</p>
<div class="eyebrow">Settings, as the app shows it</div>
<p><b>The dev fee</b> <span class="mono" style="opacity:.7">1%</span></p>
<p class="note">The <span data-product="name">Ember</span> software takes a 1% dev fee. One block template in 100 is requested with the dev payout address instead of yours. The fee goes to Igneum Labs LTD, the company that ships the software.</p>
<p class="note">The network itself takes nothing. This is the app’s fee, the same way every mining app takes one.</p>
<div class="eyebrow" style="margin-top:var(--s-5)">What the miner prints at start</div>
<pre>dev fee 1% (1 block in 100) to 0x&lt;address&gt;; --dev-fee 0 turns it off</pre>
</div>

View file

@ -4,13 +4,13 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Igneum Ember, the one-click GPU miner</title>
<meta name="description" content="One click installs the node, the miner and the prover and makes your wallet. Every card mines: NVIDIA, AMD and Apple silicon. Windows, macOS, Linux and HiveOS, with the measured rate per card and a visible, switchable 1% dev fee.">
<meta name="description" content="One click installs the node, the miner and the prover and makes your wallet. Every card mines: NVIDIA, AMD and Apple silicon. Windows, macOS, Linux and HiveOS, with the measured rate per card and a visible 1% dev fee.">
<link rel="canonical" href="https://igneum.network/miner">
<meta name="theme-color" content="#0C0C0E">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Igneum">
<meta property="og:title" content="Igneum Ember, the one-click GPU miner">
<meta property="og:description" content="One click installs the node, the miner and the prover and makes your wallet. Every card mines: NVIDIA, AMD and Apple silicon. Windows, macOS, Linux and HiveOS, with the measured rate per card and a visible, switchable 1% dev fee.">
<meta property="og:description" content="One click installs the node, the miner and the prover and makes your wallet. Every card mines: NVIDIA, AMD and Apple silicon. Windows, macOS, Linux and HiveOS, with the measured rate per card and a visible 1% dev fee.">
<meta property="og:url" content="https://igneum.network/miner">
<meta property="og:image" content="https://igneum.network/og.png?v=3">
<meta property="og:image:width" content="1200">
@ -18,7 +18,7 @@
<meta property="og:image:alt" content="Igneum. Mined by GPUs. Proven by fire.">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Igneum Ember, the one-click GPU miner">
<meta name="twitter:description" content="One click installs the node, the miner and the prover and makes your wallet. Every card mines: NVIDIA, AMD and Apple silicon. Windows, macOS, Linux and HiveOS, with the measured rate per card and a visible, switchable 1% dev fee.">
<meta name="twitter:description" content="One click installs the node, the miner and the prover and makes your wallet. Every card mines: NVIDIA, AMD and Apple silicon. Windows, macOS, Linux and HiveOS, with the measured rate per card and a visible 1% dev fee.">
<meta name="twitter:image" content="https://igneum.network/og.png?v=3">
<meta name="twitter:image:alt" content="Igneum. Mined by GPUs. Proven by fire.">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Crect width='1024' height='1024' fill='%230C0C0E'/%3E%3Cg transform='translate(166.95 166.95) scale(6.901)'%3E%3Cpolygon points='50,4 74,34 67,58 80,54 61,96 39,96 20,54 33,58 26,34' fill='%23F2541B'/%3E%3Cpolygon points='50,42 59,58 50,82 41,58' fill='%230C0C0E'/%3E%3C/g%3E%3C/svg%3E" type="image/svg+xml">
@ -374,11 +374,11 @@ pre b{color:var(--molten-text);font-weight:500}
</div>
<div class="feecard">
<div class="card">
<p>The <span data-product="name">Ember</span> software takes a visible, switchable 1% dev fee, the norm for GPU miners. One block template in 100 is requested with the dev payout address instead of yours. The fee goes to Igneum Labs LTD, the company that ships the software.</p>
<p>The <span data-product="name">Ember</span> software takes a 1% dev fee, the norm for GPU miners. One block template in 100 is requested with the dev payout address instead of yours. The fee goes to Igneum Labs LTD, the company that ships the software.</p>
<div class="tbl"><table style="min-width:0">
<thead><tr><th>Where</th><th>Off with</th></tr></thead>
<tbody>
<tr><td>The app, Earnings</td><td>the Dev fee switch under the money rows</td></tr>
<tr><td>The app</td><td>no switch: the fee is fixed at 1% and Settings shows it, last on the page</td></tr>
<tr><td>The command line</td><td class="mono">--dev-fee 0</td></tr>
<tr><td>HiveOS, extra config</td><td class="mono">DEV_FEE=0</td></tr>
<tr><td>Mining to a pool</td><td>nothing to turn off: the pool issues the templates, so the 1-in-100 mechanism does not exist, and the pool's own fee is the only one</td></tr>
@ -387,9 +387,10 @@ pre b{color:var(--molten-text);font-weight:500}
<p class="note">Measured on a test network, 4 Oct 2026: 9 fee blocks in the 785 blocks of two fee-paying miners (1.146%); the control miner at <span class="mono">--dev-fee 0</span> paid none; the miners’ counters and both nodes agree. <a href="/bench">The log</a>.</p>
</div>
<div class="card">
<div class="eyebrow">Earnings, as the app shows it</div>
<div class="switch"><span class="track"></span><span>Dev fee: 1 block in 100 pays the people who make this app</span></div>
<p class="note">The network itself takes nothing. This is the app’s fee, the same way every mining app takes one. This switch turns it off.</p>
<div class="eyebrow">Settings, as the app shows it</div>
<p><b>The dev fee</b> <span class="mono" style="opacity:.7">1%</span></p>
<p class="note">The <span data-product="name">Ember</span> software takes a 1% dev fee. One block template in 100 is requested with the dev payout address instead of yours. The fee goes to Igneum Labs LTD, the company that ships the software.</p>
<p class="note">The network itself takes nothing. This is the app’s fee, the same way every mining app takes one.</p>
<div class="eyebrow" style="margin-top:var(--s-5)">What the miner prints at start</div>
<pre>dev fee 1% (1 block in 100) to 0x&lt;address&gt;; --dev-fee 0 turns it off</pre>
</div>

View file

@ -70,9 +70,10 @@ input[readonly]{color:var(--ash)}
.status[data-state="bad"]{color:var(--bad)}
.status code,td code,dd code{font-family:var(--f-mono);font-size:13px;background:var(--obsidian);padding:1px 6px;border-radius:6px}
p.small,.small{font-size:14px;color:var(--ash);line-height:1.55}
table.swaps,table.pools{width:100%;border-collapse:collapse;font-size:14px;margin-top:8px}
table.swaps,table.pools{width:100%;table-layout:fixed;border-collapse:collapse;font-size:14px;margin-top:8px}
table.swaps td,table.pools td,table.swaps th,table.pools th{white-space:normal;overflow-wrap:anywhere;word-break:break-word}
table.swaps th,table.pools th{text-align:left;color:var(--ash);font-weight:500;padding:8px 6px;border-bottom:1px solid var(--line)}
table.swaps td,table.pools td{padding:10px 6px;border-bottom:1px solid var(--line);vertical-align:top;overflow-wrap:anywhere}
table.swaps td,table.pools td{padding:10px 6px;border-bottom:1px solid var(--line);vertical-align:top;white-space:normal;overflow-wrap:anywhere}
table.swaps td[data-state="bad"]{color:var(--bad)}
table.swaps tr.empty td{color:var(--ash)}
p.notice{margin-top:14px;padding:12px 14px;border-radius:10px;border:1px solid var(--line-2);font-size:13px;color:var(--molten);display:block}
@ -284,6 +285,7 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
<thead><tr><th>Pool</th><th>Reserves</th></tr></thead>
<tbody id="pools-body"><tr><td colspan="2">Reading the chain…</td></tr></tbody>
</table>
<p class="small" id="pools-note" role="status" aria-live="polite"></p>
<div class="faucet-row">
<button class="btn ghost" id="drip-tta" type="button" disabled>Get 1,000 TTA</button>
<button class="btn ghost" id="drip-ttb" type="button" disabled>Get 1,000 TTB</button>
@ -512,9 +514,10 @@ dt{color:var(--ash)}dd{margin:0;font-family:var(--f-mono);font-size:13px;overflo
function refreshPools(){
rpc('eth_blockNumber',[]).then(function(n){
var h=parseInt(n,16);rpcBehind=h<DEPLOY_BLOCK;
if(rpcBehind){$('pools-body').innerHTML='<tr><td colspan="2">The public RPC is still syncing: block '+h.toLocaleString('en-GB')+' of at least '+DEPLOY_BLOCK.toLocaleString('en-GB')+'. Reserves, quotes and swaps appear when it reaches the pools.</td></tr>';return;}
if(rpcBehind){$('pools-body').innerHTML='<tr><td colspan="2">RPC syncing</td></tr>';say($('pools-note'),'The public RPC is syncing: block '+h.toLocaleString('en-GB')+' of at least '+DEPLOY_BLOCK.toLocaleString('en-GB')+'. Reserves, quotes and swaps appear when it reaches the pools.','bad');return;}
say($('pools-note'),'','');
return readPools();
}).catch(function(){$('pools-body').innerHTML='<tr><td colspan="2">The public RPC did not answer. Try again in a minute.</td></tr>';});
}).catch(function(){$('pools-body').innerHTML='<tr><td colspan="2">no answer</td></tr>';say($('pools-note'),'The public RPC did not answer. Try again in a minute.','bad');});
}
function readPools(){
Promise.all(POOLS.map(function(p){return call(A.router,enc(S.getReserves,['address','address'],[p.a,p.b])).then(function(r){var w=words(r);return fmt(w[0],2)+' '+p.sa+' / '+fmt(w[1],2)+' '+p.sb;}).catch(function(){return 'unreadable';});})).then(function(rows){

View file

@ -0,0 +1,15 @@
#!/usr/bin/env bash
# class v6 census lane: the CPU verifier per warp for each candidate's accepted program (seed igneum-v6c/0), one leased core,
# three repeats of 20 warps each, the record's class first and last (drift check). Output: $ROOT/bench.log
set -u
ROOT=/srv/builds/v6-census; B=$ROOT/bin/14c550e3/igneum-pow; REW=13,11,6,10,8,8,7,2,6,4
export IGNEUM_FAMILY_GATE=1
echo "# bench start $(date -u +%FT%TZ) host $(hostname) cores ${LEASE_CPUSET:-?} bin $(sha256sum $B | cut -c1-16)"
run() { tag=$1; cls=$2; w=$3; for rep in 1 2 3; do echo "== $tag rep $rep class $cls weights ${w:-base}"; if [ -n "$w" ]; then IGNEUM_FG_WEIGHTS=$w $B bench --seed igneum-v6c/0 --class "$cls" --warps 20 2>&1 | grep -iE "warp|ms|verif" | tail -4; else $B bench --seed igneum-v6c/0 --class "$cls" --warps 20 2>&1 | grep -iE "warp|ms|verif" | tail -4; fi; done; }
run ctrl mx8+sh256x27 ""
run w16 w16m8g+sh256x27 ""
run a w64m8g+sh256x27 ""
run b w16m8g+sh256x27 "$REW"
run c w64m8g+sh256x27 "$REW"
run ctrl-again mx8+sh256x27 ""
echo "# bench end $(date -u +%FT%TZ)"

View file

@ -0,0 +1,29 @@
#!/usr/bin/env bash
# class v6 census lane: queue the census jobs on this box under the lease pool (measure class, nice 19, pid files under
# /srv/builds/v6-census/pids). usage: launch.sh <commit> <job>... jobs: ctrl-none a-none b-none c-none w16-none ctrl-era a-era b-era c-era w16-era
set -u
C="$1"; shift
ROOT=/srv/builds/v6-census; BIN="$ROOT/bin/$C/igneum-pow"; SCRIPT="$ROOT/v6census.sh"
REW=13,11,6,10,8,8,7,2,6,4
for job in "$@"; do
cand=${job%-*}; mode=${job#*-}
case $cand in
ctrl) CLASS="mx8+sh256x27"; ERAW=4; W="";;
a) CLASS="w64m8g+sh256x27"; ERAW=64; W="";;
b) CLASS="w16m8g+sh256x27"; ERAW=16; W="$REW";;
c) CLASS="w64m8g+sh256x27"; ERAW=64; W="$REW";;
w16) CLASS="w16m8g+sh256x27"; ERAW=16; W="";;
*) echo "unknown $job"; continue;;
esac
if [ "$mode" = none ]; then ERAS=none; SEEDS=256; BT=""; else ERAS="0,1,2,3,4,5,6,7"; SEEDS=32; BT=1; fi
# under an era the candidate's own class carries the width (a single allowed width leaves the base mix as drawn: the
# smoke of 13:4x UK read 512 bytes per hash on mx8 at --era-widths 64), and --era-widths pins the era's set to it
ENVS="THREADS={cores} BIN=$BIN OUT=$ROOT TAG=$job CLASS=$CLASS ERAS=$ERAS SEEDS=$SEEDS ERAW=$ERAW"
[ -n "$W" ] && ENVS="$ENVS IGNEUM_FG_WEIGHTS=$W"
[ -n "$BT" ] && ENVS="$ENVS IGNEUM_FG_BITTEST=1"
# shellcheck disable=SC2086
nohup /srv/builds/_bin/lease pool 16 --min 4 --nice 19 --class measure --label "class v6 census: $job ($CLASS, era widths $ERAW, weights ${W:-base}) on $C" --owner class-v6-census -- env $ENVS "$SCRIPT" > "$ROOT/run-$job.log" 2>&1 &
echo "$!" > "$ROOT/pids/$job.lease.pid"
echo "queued $job pid $! class $CLASS eraw $ERAW weights ${W:-base} bittest ${BT:-off}"
sleep 1
done

View file

@ -0,0 +1,41 @@
#!/usr/bin/env python3
"""class v6 census lane: per-candidate summary of v6census.sh TSVs (one row per seed)."""
import sys, collections, statistics
def load(path):
rows=[]; head=None; tail=None
for line in open(path):
line=line.rstrip('\n')
if line.startswith('#'):
if head is None: head=line
else: tail=line
continue
if line.startswith('cand\t'): continue
f=line.split('\t')
if len(f)<10: continue
rows.append(dict(cand=f[0],era=f[1],seed=int(f[2]),n=int(f[3]),acc=int(f[4]),att=int(f[5]),bz=(float(f[6]) if f[6]!='nan' else float('nan')),site=f[7],bit=f[8],reasons=f[9]))
return head,tail,rows
for path in sys.argv[1:]:
head,tail,rows=load(path)
print(head);
if tail: print(tail)
by=collections.defaultdict(list)
for r in rows: by[r['era']].append(r)
print("era\tseeds\taccepted\texhausted\tcandidates\tr_per_candidate\tmean_att\tmax_att\tbitz_max\tbitz_over6\tbit_refusals\treasons")
allrows=[]
for era in sorted(by, key=lambda e: (e!='none', int(e) if e!='none' else -1)):
rs=by[era]; allrows+=rs
n=len(rs); acc=sum(r['acc'] for r in rs); cands=sum(r['n'] for r in rs); rej=cands-acc
atts=[r['att'] for r in rs if r['acc']]
reasons=collections.Counter()
for r in rs:
for kv in r['reasons'].split(';'):
if '=' in kv:
k,v=kv.rsplit('=',1); reasons[k]+=int(v)
bz=[r['bz'] for r in rs if r['acc'] and r['bz']==r['bz']]
bref=reasons.get('c,',0)+reasons.get('c, per-load shadow',0)
print(f"{era}\t{n}\t{acc}\t{n-acc}\t{cands}\t{rej/cands if cands else float('nan'):.3f}\t{statistics.mean(atts) if atts else float('nan'):.2f}\t{max(atts) if atts else -1}\t{max(bz) if bz else float('nan'):.1f}\t{sum(1 for z in bz if z>6)}\t{bref}\t{' '.join(f'{k}={v}' for k,v in reasons.most_common())}")
if len(by)>1:
rs=allrows; n=len(rs); acc=sum(r['acc'] for r in rs); cands=sum(r['n'] for r in rs); rej=cands-acc; atts=[r['att'] for r in rs if r['acc']]
bz=[r['bz'] for r in rs if r['acc'] and r['bz']==r['bz']]
print(f"ALL\t{n}\t{acc}\t{n-acc}\t{cands}\t{rej/cands:.3f}\t{statistics.mean(atts):.2f}\t{max(atts)}\t{max(bz):.1f}\t{sum(1 for z in bz if z>6)}")
print()

View file

@ -0,0 +1,21 @@
#!/usr/bin/env bash
# class v6 census lane: the F8-form uniformity read (v6census-uniform) per candidate, no era, 16 seeds at 2^20 nonces, under the lease pool.
set -u
ROOT=/srv/builds/v6-census; U=$ROOT/bin/14c550e3/v6census-uniform
REW=13,11,6,10,8,8,7,2,6,4
SEEDS=${SEEDS:-16}; NONCES=${NONCES:-1048576}; ERA=${ERA:-none}; ERAW=${ERAW:-4}
for job in "$@"; do
case $job in
ctrl) CLASS="mx8+sh256x27"; W=""; EW=4;;
a) CLASS="w64m8g+sh256x27"; W=""; EW=64;;
b) CLASS="w16m8g+sh256x27"; W="$REW"; EW=16;;
c) CLASS="w64m8g+sh256x27"; W="$REW"; EW=64;;
w16) CLASS="w16m8g+sh256x27"; W=""; EW=16;;
*) echo "unknown $job"; continue;;
esac
TAG="uniform-$job-$ERA"
ENVS="IGNEUM_FAMILY_GATE=1"; [ -n "$W" ] && ENVS="$ENVS IGNEUM_FG_WEIGHTS=$W"
# shellcheck disable=SC2086
nohup /srv/builds/_bin/lease pool 16 --min 4 --nice 19 --class measure --label "class v6 census: F8-form uniform $job era $ERA ($CLASS, weights ${W:-base}), $SEEDS seeds x 2^20" --owner class-v6-census -- env $ENVS "$U" --class "$CLASS" --seeds "$SEEDS" --nonces "$NONCES" --threads "{cores}" --era "$ERA" --era-widths "$EW" > "$ROOT/$TAG.tsv" 2> "$ROOT/run-$TAG.log" &
echo "$!" > "$ROOT/pids/$TAG.lease.pid"; echo "queued $TAG pid $!"; sleep 1
done

View file

@ -0,0 +1,14 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "igneum-pow"
version = "0.2.0"
[[package]]
name = "v6census-uniform"
version = "0.1.0"
dependencies = [
"igneum-pow",
]

View file

@ -0,0 +1,15 @@
[package]
name = "v6census-uniform"
version = "0.1.0"
edition = "2021"
publish = false
[[bin]]
name = "v6census-uniform"
path = "src/main.rs"
[dependencies]
igneum-pow = { path = "../../../../igneum-pow" }
[profile.release]
opt-level = 3

View file

@ -0,0 +1,117 @@
//! v6census-uniform (class v6 census lane, 8 October 2026): the F8-form uniformity read of the invention lane's tool
//! (`tools/attack/v6-invention/uniform`) with the era draw added, for the read-width and op-mix candidates. Per seed:
//! the first accepted candidate of the class under the harness (`IGNEUM_FAMILY_GATE`, the class's own attempt cap),
//! then over `nonces` nonces every load's word index through the library's own `trace_load_indices`; per site the
//! distinct-index ratio `d_s / E_s` with `E_s = N - N^2 / (2 W_s)` at the site's window over the width (the (c'')
//! form), and the cross-hash ITEM histogram's top 0.1 percent share against a uniform SplitMix64 control of the same
//! size (the F8 harness's null; under an era the narrow-window sites raise the share by design, so the line to read
//! is the candidate against the control class at the same era, not the no-era 1.2x alone). One TSV row per seed.
//!
//! v6census-uniform --class w64m8g+sh256x27 --seeds 16 --nonces 1048576 --threads 16 [--era igneum-era-test/3 --era-widths 64]
use igneum_pow::generator::{attempts_class_to, max_attempts_for, EraParams, LoadClass, ITERATIONS};
use igneum_pow::seed::{seed_words_from_bytes, SplitMix64};
use igneum_pow::verify::{trace_load_indices, window, DatasetMode, DatasetSource};
use std::collections::HashSet;
use std::io::Write;
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Mutex;
fn arg(args: &[String], k: &str, d: &str) -> String {
args.iter().position(|a| a == k).and_then(|i| args.get(i + 1).cloned()).unwrap_or_else(|| d.to_string())
}
fn top_share(counts: &mut Vec<u32>, frac: f64) -> (f64, u32) {
let total: u64 = counts.iter().map(|&c| c as u64).sum();
counts.sort_unstable_by(|a, b| b.cmp(a));
let k = ((counts.len() as f64) * frac) as usize;
let top: u64 = counts[..k].iter().map(|&c| c as u64).sum();
(top as f64 / total as f64, counts[0])
}
fn parse_widths(s: &str) -> Vec<u8> {
let mut v: Vec<u8> = s.split(',').map(|x| match x.trim() { "4" => 1u8, "16" => 4, "64" => 16, _ => panic!("width") }).collect();
v.sort_unstable();
v
}
fn main() {
let args: Vec<String> = std::env::args().collect();
let class_name = arg(&args, "--class", "mx8+sh256x27");
let seeds: u32 = arg(&args, "--seeds", "16").parse().unwrap();
let nonces: u32 = arg(&args, "--nonces", "1048576").parse().unwrap();
let threads: usize = arg(&args, "--threads", "16").parse().unwrap();
let log2: u32 = arg(&args, "--log2", "28").parse().unwrap();
let day = arg(&args, "--day", "2026-10-03");
let prefix = arg(&args, "--prefix", "igneum-v6c");
let era = arg(&args, "--era", "none");
let widths = parse_widths(&arg(&args, "--era-widths", "4"));
let mut class = LoadClass::parse(&class_name).expect("class");
if era != "none" {
assert!(era.starts_with("igneum-era-test/"), "era: igneum-era-test/<n>");
class = LoadClass::era(class, &EraParams::test_era_bytes(&era), &widths);
}
let cap = max_attempts_for(&class);
let ds = DatasetSource::new(&day, DatasetMode::ClosedForm, log2);
let items = 1usize << (log2 - 4);
let mask = (1u32 << log2) - 1;
let n = (nonces as f64) * (ITERATIONS as f64); // evaluations per site
let next = AtomicUsize::new(0);
let out = Mutex::new(std::io::stdout());
println!("class\tera\tseed\tattempt\tprogram_id\tmin_site_ratio\tmin_site\ttop0.1_share\tcontrol_share\tratio_to_control\tmax_item_reads\tcontrol_max\treads");
std::thread::scope(|s| {
for _ in 0..threads {
s.spawn(|| loop {
let i = next.fetch_add(1, Ordering::Relaxed) as u32;
if i >= seeds {
break;
}
let label = format!("{prefix}/{i}");
let tries = attempts_class_to(&label, label.as_bytes(), class, cap);
let Some((p, _)) = tries.into_iter().find(|(_, r)| r.is_ok()) else {
let mut o = out.lock().unwrap();
writeln!(o, "{class_name}\t{era}\t{i}\texhausted").unwrap();
continue;
};
let seed = seed_words_from_bytes(label.as_bytes());
let loads: Vec<_> = p.instrs.iter().filter(|x| x.op.is_load()).cloned().collect();
let sites = loads.len();
let mut distinct: Vec<HashSet<u32>> = (0..sites).map(|_| HashSet::with_capacity(nonces as usize)).collect();
let mut counts = vec![0u32; items];
let mut reads: u64 = 0;
let mut base = 0u32;
while base < nonces {
let rows = trace_load_indices(&p, &seed, base, &ds);
for (k, row) in rows.iter().enumerate() {
let site = k % sites;
for &idx in row.iter() {
distinct[site].insert(idx);
counts[(idx >> 4) as usize] += 1;
reads += 1;
}
}
base += 32;
}
let (min_ratio, min_site) = distinct
.iter()
.enumerate()
.map(|(s, d)| {
let ins = &loads[s];
let w = if p.class.era.is_some() { (window(ins, mask, log2).0 as u64 + 1) as f64 } else { (1u64 << log2) as f64 } / (ins.width.max(1) as f64);
let e_s = n - n * n / (2.0 * w);
(d.len() as f64 / e_s, s)
})
.fold((f64::MAX, 0usize), |a, b| if b.0 < a.0 { b } else { a });
let (share, max_reads) = top_share(&mut counts, 0.001);
let mut ctrl = vec![0u32; items];
let mut rng = SplitMix64::new(0x9e37_79b9_7f4a_7c15 ^ i as u64);
for _ in 0..reads {
let x = rng.next() as usize & (items - 1);
ctrl[x] += 1;
}
let (cshare, cmax) = top_share(&mut ctrl, 0.001);
let mut o = out.lock().unwrap();
writeln!(o, "{class_name}\t{era}\t{i}\t{}\t{:016x}\t{min_ratio:.5}\t{min_site}\t{share:.6}\t{cshare:.6}\t{:.4}\t{max_reads}\t{cmax}\t{reads}", p.attempt, p.program_id(), share / cshare).unwrap();
});
}
});
}

View file

@ -0,0 +1,41 @@
#!/usr/bin/env bash
# Class v6 census lane (8 October 2026, docs/analysis/class-v6/census-w16-mix.md): the sub-version 3 census of one
# candidate class through `igneum-pow accept` of the class-v6-census crate (the harness: IGNEUM_FAMILY_GATE widens the
# class v4 rules to any read width, adds the (c''') floor at 0.995, reads the value-level index-bit bias on every class
# and refuses it under IGNEUM_FG_BITTEST; IGNEUM_FG_WEIGHTS re-weights the ten non-load families). One TSV row per
# (candidate, era, seed): candidates walked (the class's own cap, 256), accepted, the accepting attempt, the worst
# index-bit bias in sigma of the accepted program, the first failing part per rejection as a histogram.
# env: BIN (the igneum-pow binary), OUT (dir), TAG (candidate label), CLASS (the --class), THREADS,
# ERAS ("none" or a comma list of igneum-era-test indices "0,1,2,3,4,5,6,7"), SEEDS (per era), ERAW (--era-widths bytes),
# IGNEUM_FG_WEIGHTS (optional), IGNEUM_FG_BITTEST (optional), SEEDTAG (seed label prefix)
set -u
BIN=${BIN:?}; OUT=${OUT:?}; TAG=${TAG:?}; CLASS=${CLASS:?}
THREADS=${THREADS:-16}; ERAS=${ERAS:-none}; SEEDS=${SEEDS:-256}; ERAW=${ERAW:-4}; SEEDTAG=${SEEDTAG:-igneum-v6c}
export IGNEUM_FAMILY_GATE=1
mkdir -p "$OUT/logs/$TAG" "$OUT/pids"
echo "$$" > "$OUT/pids/$TAG.pid"
TSV="$OUT/$TAG.tsv"
{
echo "# $TAG class $CLASS eras [$ERAS] seeds $SEEDS era-widths $ERAW weights ${IGNEUM_FG_WEIGHTS:-base} bittest ${IGNEUM_FG_BITTEST:-off} bin $(sha256sum "$BIN" | cut -c1-16) start $(date -u +%FT%TZ) host $(hostname) threads $THREADS"
printf 'cand\tera\tseed\tcandidates\taccepted\tattempt\tbit_z\tbit_site\tbit_bit\treasons\n'
} > "$TSV"
one() {
era=$1; i=$2
log="$OUT/logs/$TAG/$era-$i.log"
if [ "$era" = none ]; then
"$BIN" accept --seed "$SEEDTAG/$i" --class "$CLASS" > "$log" 2>&1
else
"$BIN" accept --seed "$SEEDTAG/$i" --class "$CLASS" --era "igneum-era-test/$era" --era-widths "$ERAW" > "$log" 2>&1
fi
n=$(grep -c '^attempt' "$log")
acc=$(grep -c 'ACCEPTED' "$log")
first=$(grep -m1 'ACCEPTED' "$log" | sed 's/^attempt \([0-9]*\):.*/\1/')
bz=$(grep -m1 'ACCEPTED' "$log" | sed -n 's/.*bit z max \([0-9.]*\) at site \([0-9]*\) bit \([0-9]*\).*/\1\t\2\t\3/p')
reasons=$(grep 'rejected' "$log" | sed 's/.*rejected, //' | sed "s/^(\([^)]*\)).*/\1/" | sort | uniq -c | sort -rn | awk '{printf "%s=%s;", $2, $1}')
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' "$TAG" "$era" "$i" "$n" "$acc" "${first:--1}" "${bz:-nan - -}" "$reasons"
}
export -f one; export BIN OUT TAG CLASS ERAW SEEDTAG
for era in ${ERAS//,/ }; do
for i in $(seq 0 $((SEEDS - 1))); do echo "$era $i"; done
done | xargs -P "$THREADS" -n 2 bash -c 'one "$0" "$1"' >> "$TSV"
echo "# end $(date -u +%FT%TZ) rows=$(grep -vc '^#' "$TSV")" >> "$TSV"

View file

@ -0,0 +1,322 @@
# card-in (8 October 2026, the hash lane, the coordinator's ask at 09:5x UK): one job for the eGPU housings on PC 1 and PC 2. It
# reads the installed app's card list (api/state mining.cards: key, name, vendor, vram), compares it with the last read in a
# state file on the PC, and runs the full pass on the ONE card that was not there last time, with no hand on the PC:
# 1. class v4 and class v5 fingerprints against the kits (CUDA worker on an NVIDIA card with the sub-version 3 kit's
# v4-devnet-epoch0, expected e370fb2080b7dbb1; the v5 kit's OpenCL worker on every vendor with v5-dn3-epoch0, expected
# 82b19cbde8557ea5, and v4-genesis, expected 892b6d55a7ddcfcb, the 9070 XT's PASS reading of 8 October 00:16Z);
# 2. rate and watts (NVIDIA: the nvidia-smi sampler at 1 Hz, power.draw, power.draw.instant and power.draw.average, around
# a 60 s CUDA bench; AMD and Intel: measure-only, the app's own hash_now and power_w for the card, the median of 30 s
# after a 75 s settle, with the card mining in the app);
# 3. the clock-lock knee grid where the lever exists (NVIDIA through the Power Helper's cleared sequence, 300 MHz steps from
# the card's maximum down, 60 s each, stop when the rate falls 3 percent under the unlocked rate; AMD measure-only until
# the ADLX tool is on the PC, Intel measure-only; the row says which);
# 4. VRAM and the dataset fit (1 GiB dataset plus the cache; a card under 2 GiB does not fit);
# 5. a bench-log row and a miner-bench.json row (RESULT ROW lines) for the audit lane;
# 6. the restore (-rgc through the helper, the card's app choices put back exactly), the state file updated, and "next".
# Known-failed first: no new card reads "RESULT card-in no new card" and does nothing else (exit 0, status no_new_card); the
# first run on a PC writes the baseline and does nothing else (status baseline). Never two cards: more than one new key
# stops the job (status ambiguous) with the keys named. Nothing escalates, nothing is installed, settings.json is never
# written (the runner's --cards-off switches the card off for the quiet rows and back on after; a script never switches cards).
$ErrorActionPreference = 'Continue'
$jobName = 'pc-card-in'
$started = Get-Date
$capMinutes = 50
$deadline = $started.AddMinutes($capMinutes)
function Stamp { (Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ') }
function Summary([string] $status, [hashtable] $extra) {
$o = [ordered]@{ job = $jobName; status = $status; duration_s = [int]((Get-Date) - $started).TotalSeconds; finished_at = (Stamp) }
foreach ($k in $extra.Keys) { $o[$k] = $extra[$k] }
'SUMMARY ' + ($o | ConvertTo-Json -Compress -Depth 6)
}
function Say([string] $s) { Write-Output ('[' + (Get-Date -Format 'HH:mm:ss') + '] ' + $s) }
function Median($vals) { $v = @($vals | ForEach-Object { [double]$_ } | Sort-Object); if ($v.Count -eq 0) { return $null }; return [math]::Round($v[[int][math]::Floor(($v.Count - 1) / 2)], 1) }
function Mean($vals) { $v = @($vals | ForEach-Object { [double]$_ }); if ($v.Count -eq 0) { return $null }; return [math]::Round((($v | Measure-Object -Sum).Sum / $v.Count), 1) }
"RESULT start $(Stamp) job=$jobName machine=$env:COMPUTERNAME app_version=$env:IGNEUM_APP_VERSION"
$appDir = Join-Path $env:LOCALAPPDATA 'igneum\app'
$u = Join-Path $appDir 'app.url'
if (-not (Test-Path -LiteralPath $u)) { 'RESULT error no app.url (the installed app is not running)'; Summary 'failed' @{ error = 'no app url' }; exit 2 }
$base = (Get-Content -LiteralPath $u -Raw).Trim()
function State() { try { return ((Invoke-WebRequest -Uri ($base + 'api/state') -UseBasicParsing -TimeoutSec 5).Content | ConvertFrom-Json) } catch { return $null } }
function Post([string] $path, [string] $json) { try { Invoke-WebRequest -Uri ($base + $path) -Method POST -Body $json -ContentType 'application/json' -UseBasicParsing -TimeoutSec 5 | Out-Null; return $true } catch { Say ($path + ': ' + $_.Exception.Message); return $false } }
$s = State
if (-not $s) { 'RESULT error api/state unreachable'; Summary 'failed' @{ error = 'no state' }; exit 2 }
$cards = @($s.mining.cards)
$keys = @($cards | ForEach-Object { $_.key })
"RESULT cards now $(Stamp) $(($cards | ForEach-Object { $_.key + '=' + $_.name + ' [' + $_.vendor + ', ' + $_.kind + ', ' + $_.vram_mb + ' MB, ' + $(if ($_.enabled) { 'on' } else { 'off' }) + ']' }) -join ' | ')"
# ---- the last read ----
$stateDir = Join-Path $appDir 'jobs\card-in'
if (-not (Test-Path $stateDir)) { New-Item -ItemType Directory -Path $stateDir -Force | Out-Null }
$lastFile = Join-Path $stateDir 'last.json'
$last = @()
if (Test-Path -LiteralPath $lastFile) { try { $last = @((Get-Content -LiteralPath $lastFile -Raw | ConvertFrom-Json).keys) } catch { $last = @() } }
function WriteLast() { ([ordered]@{ keys = $keys; at = (Stamp); machine = $env:COMPUTERNAME } | ConvertTo-Json -Compress) | Set-Content -LiteralPath $lastFile -Encoding ascii }
if (-not (Test-Path -LiteralPath $lastFile)) {
WriteLast
"RESULT card-in baseline written: $($keys.Count) cards ($($keys -join ', ')); nothing measured (the first run on this PC records what is here; plug the card and say in)"
Summary 'baseline' @{ keys = $keys }
exit 0
}
$new = @($keys | Where-Object { $last -notcontains $_ })
$gone = @($last | Where-Object { $keys -notcontains $_ })
if ($gone.Count -gt 0) { "RESULT card-in gone since the last read: $($gone -join ', ')" }
if ($new.Count -eq 0) {
WriteLast
"RESULT card-in no new card (last read $($last.Count) keys, now $($keys.Count); nothing done)"
Summary 'no_new_card' @{ keys = $keys }
exit 0
}
if ($new.Count -gt 1) {
"RESULT card-in STOP: $($new.Count) new keys ($($new -join ', ')); one card at a time; nothing done, the last read unchanged"
Summary 'ambiguous' @{ new = $new }
exit 3
}
$key = $new[0]
$card = $cards | Where-Object { $_.key -eq $key } | Select-Object -First 1
$name = $card.name; $vendor = "$($card.vendor)"; $vram = [int64]$card.vram_mb
$fits = ($vram -ge 2048)
"RESULT card-in NEW key=$key name=`"$name`" vendor=$vendor kind=$($card.kind) vram_mb=$vram dataset_fit=$(if ($fits) { 'yes (1 GiB dataset plus the cache)' } else { 'NO (under 2 GiB)' }) enabled=$($card.enabled) identities=$($card.identities) power_pct=$($card.power_pct)"
# ---- the kits ----
$jobs = Split-Path $env:IGNEUM_JOB_DIR
$v5kit = Join-Path $jobs 'fetch-ca3-v5-kit-20261007'
$v4kit = $null
foreach ($id in @('fetch-ca3-v4-sub3-pc1-20261007', 'fetch-ca3-v4-sub3-pc2-20261007')) { $d = Join-Path $jobs $id; if (Test-Path (Join-Path $d 'packs\v4-devnet-epoch0\kernel_bound.cu')) { $v4kit = $d; break } }
if (-not (Test-Path $v5kit)) { 'RESULT kits v5 MISSING (the fetch job fetch-ca3-v5-kit-20261007 runs first; republish it after any app update)' }
$clExe = Join-Path $v5kit 'bin\windows\igneum-worker-opencl.exe'
$haveV5 = (Test-Path $clExe) -and (Test-Path (Join-Path $v5kit 'packs\v5-dn3-epoch0\leaves.bin'))
"RESULT kits v5=$(if ($haveV5) { $v5kit + ' (worker sha256 ' + (Get-FileHash -Algorithm SHA256 $clExe).Hash.ToLower().Substring(0, 16) + ')' } else { 'MISSING (the fetch job fetch-ca3-v5-kit-20261007 runs first)' }) v4=$(if ($v4kit) { $v4kit } else { 'none (no CUDA pack on this PC; the NVIDIA v4 row runs through the OpenCL kit)' })"
$inst = @("$env:LOCALAPPDATA\Programs\Igneum Miner", "$env:ProgramFiles\Igneum Miner") | Where-Object { Test-Path (Join-Path $_ 'igneum-app.exe') } | Select-Object -First 1
$cudaExe = if ($inst) { Join-Path $inst 'igneum-worker-cuda.exe' } else { $null }
$expected = @{ 'v4-devnet-epoch0' = 'e370fb2080b7dbb1'; 'v5-dn3-epoch0' = '82b19cbde8557ea5'; 'v4-genesis' = '892b6d55a7ddcfcb' }
# ---- the card's device on each path ----
$isNv = ($vendor -eq 'nvidia')
$smi = $null; $idx = $null; $uuid = $null; $bus = $null; $maxSm = $null; $driver = ''
if ($isNv) {
$c = Get-Command nvidia-smi -ErrorAction SilentlyContinue; if ($c) { $smi = $c.Source }
if (-not $smi) { foreach ($p in @((Join-Path $env:ProgramFiles 'NVIDIA Corporation\NVSMI\nvidia-smi.exe'), (Join-Path $env:SystemRoot 'System32\nvidia-smi.exe'))) { if (Test-Path $p) { $smi = $p; break } } }
if ($smi) {
$gpus = @(& $smi --query-gpu=index,name,uuid,pci.bus_id,power.limit,power.max_limit,clocks.max.sm,driver_version,memory.total --format=csv,noheader 2>&1 | ForEach-Object { "$_" })
$gpus | ForEach-Object { "RESULT gpu $_" }
# the app's name is the driver's name; a second identical card carries "#2" in its key and sits at the higher index
$rows = @($gpus | Where-Object { $_ -match [regex]::Escape($name) })
$pick = 0; if ($key -match '#(\d+)$') { $pick = [int]$Matches[1] - 1 }
if ($rows.Count -gt $pick) { $fld = $rows[$pick] -split ',\s*'; $idx = $fld[0].Trim(); $uuid = $fld[2].Trim(); $bus = $fld[3].Trim(); $maxSm = $fld[6].Trim(); $driver = $fld[7].Trim() }
if ($null -ne $idx) { "RESULT card nvidia index=$idx uuid=$uuid bus=$bus max_sm_mhz=$maxSm driver=$driver" } else { "RESULT card nvidia: '$name' not in nvidia-smi's list; the NVIDIA rows run through the OpenCL kit without watts" }
} else { 'RESULT card nvidia: nvidia-smi not found; the NVIDIA rows run through the OpenCL kit without watts' }
}
$clDev = $null; $clLine = ''
if ($haveV5) {
$listExe = $clExe; if ($inst -and (Test-Path (Join-Path $inst 'igneum-worker-opencl.exe'))) { $listExe = Join-Path $inst 'igneum-worker-opencl.exe' }
$list = @(& $listExe --list 2>&1 | ForEach-Object { "$_" })
$list | ForEach-Object { "RESULT list $_" }
$want = $name -replace '^(NVIDIA|AMD|Intel\(R\))\s+', ''
$short = ($want -replace '\(R\)|\(TM\)|Graphics|GeForce|Radeon', '' -replace '\s+', ' ').Trim()
$cands = @()
foreach ($l in $list) { if ($l -match '^\s*\[(\d+)\]\s+(.*?)\s+\|' -and $l -notmatch 'dup') { $n = [int]$Matches[1]; $t = $Matches[2]; $ts = ($t -replace '\(R\)|\(TM\)|Graphics|GeForce|Radeon', '' -replace '\s+', ' ').Trim(); if ($ts -match [regex]::Escape($short) -or $short -match [regex]::Escape($ts) -or ($card.code -and $t -match [regex]::Escape("$($card.code)"))) { $cands += ,@($n, $l) } } }
$pick = 0; if ($key -match '#(\d+)$') { $pick = [int]$Matches[1] - 1 }
if ($cands.Count -gt $pick) { $clDev = $cands[$pick][0]; $clLine = $cands[$pick][1] }
if ($null -ne $clDev) { "RESULT card opencl device=$clDev line=$($clLine.Trim())" } else { "RESULT card opencl: no --list device matches '$name' (code $($card.code)); the OpenCL rows are skipped" }
}
# ---- the card's quiet state is the RUNNER's: a script never switches cards (the playbook-quit rule). The detect run reads the
# new card with the app mining on it; the measured pass is published again with --cards-off <the new key> and finds it off here.
$choices = @($cards | ForEach-Object { [ordered]@{ key = $_.key; enabled = [bool]$_.enabled; identities = [int]$_.identities; power_pct = [int]$_.power_pct } })
$restored = $true
function Workers { @(Get-CimInstance Win32_Process -Filter "Name = 'igneum-worker-opencl.exe' OR Name = 'igneum-worker-cuda.exe' OR Name = 'igneum-worker-metal.exe'" -ErrorAction SilentlyContinue | ForEach-Object { "$($_.Name):$($_.ProcessId):[$($_.CommandLine -replace '\s+', ' ')]" }) }
"RESULT workers_before $(Stamp) $((@(Workers)) -join ' ')"
$quiet = -not $card.enabled
"RESULT card $(Stamp) $(if ($quiet) { 'quiet: the runner switched it off (--cards-off) before this script' } else { 'LOADED: the card mines in the app (a detect run, or a pass published without --cards-off); the rows below are LOADED-card figures' })"
if (-not $quiet -and $env:IGNEUM_CARDIN_DETECT_ONLY -eq '1') { WriteLast; "RESULT next: detect only; publish the pass with --cards-off $key"; Summary 'detected' @{ key = $key; name = $name; vendor = $vendor; vram_mb = $vram; fits = $fits }; exit 0 }
$rowsOut = [ordered]@{}
$samples = Join-Path $stateDir 'nv-samples.csv'
$sampler = $null
function ReadWindow([datetime] $t0, [datetime] $t1) {
$sel = @()
if (Test-Path $samples) {
foreach ($l in (Get-Content -LiteralPath $samples -ErrorAction SilentlyContinue)) {
$p = $l -split ',\s*'
if ($p.Count -lt 5) { continue }
$ts = $null
try { $ts = [datetime]::ParseExact($p[0].Trim(), 'yyyy/MM/dd HH:mm:ss.fff', [cultureinfo]::InvariantCulture) } catch { continue }
if ($ts -ge $t0 -and $ts -le $t1) { $sel += ,$p }
}
}
return ,$sel
}
function Watts([datetime] $t0, [datetime] $t1) {
$w = ReadWindow $t0.AddSeconds(8) $t1
return [ordered]@{ draw = (Mean ($w | ForEach-Object { $_[1] })); instant = (Mean ($w | Where-Object { $_.Count -ge 8 -and $_[6] -match '^\s*[\d.]+\s*$' } | ForEach-Object { $_[6] })); average = (Mean ($w | Where-Object { $_.Count -ge 8 -and $_[7] -match '^\s*[\d.]+\s*$' } | ForEach-Object { $_[7] })); sm = (Mean ($w | ForEach-Object { $_[2] })); mem = (Mean ($w | ForEach-Object { $_[3] })); tmax = (($w | ForEach-Object { [int]$_[4] } | Measure-Object -Maximum).Maximum); n = $w.Count }
}
# ---- the Power Helper (NVIDIA lock path, the cleared sequence) ----
$helperDir = Join-Path $env:LOCALAPPDATA 'igneum\app\sweep'
$cmdFile = Join-Path $helperDir 'cmd.txt'
$helperLog = Join-Path $helperDir 'helper.log'
function HelperAliveAge() { $a = Join-Path $helperDir 'helper.alive'; if (-not (Test-Path -LiteralPath $a)) { return 9999 }; try { $v = [int64]((Get-Content -LiteralPath $a -Raw).Trim()); return ([int64][double]::Parse((Get-Date -UFormat %s)) - $v) } catch { return 9999 } }
function HelperSeqBase() {
$m = 0
foreach ($f in @($cmdFile, $helperLog)) { if (Test-Path $f) { foreach ($l in (Get-Content -LiteralPath $f -ErrorAction SilentlyContinue)) { if ($l -match '(?:^|\s)(\d{1,6}) (?:dev|pl|lgc|rgc|lmc|rmc|nvidia-smi|reregister)\b') { $v = [int]$Matches[1]; if ($v -gt $m) { $m = $v } } } } }
return $m + 100
}
function HelperReset() {
Set-Content -LiteralPath $cmdFile -Value '' -NoNewline -Encoding ascii
try { Stop-ScheduledTask -TaskName 'Igneum Power Helper' -ErrorAction SilentlyContinue } catch { }
Start-Sleep -Seconds 2
try { Start-ScheduledTask -TaskName 'Igneum Power Helper' -ErrorAction Stop } catch { $t = "$_" -replace '\s+', ' '; "RESULT helper start refused: $t"; return $false }
$t = 0
while ($t -lt 20) { Start-Sleep -Seconds 1; $t++; if ((HelperAliveAge) -le 4) { "RESULT helper fresh after $t s"; return $true } }
$s0 = HelperSeqBase
$mark = 0; if (Test-Path $helperLog) { $mark = @(Get-Content -LiteralPath $helperLog -ErrorAction SilentlyContinue).Count }
Set-Content -LiteralPath $cmdFile -Value "$s0 dev $idx`n" -NoNewline -Encoding ascii
$t2 = 0
while ($t2 -lt 20) { Start-Sleep -Seconds 1; $t2++; $new = @(Get-Content -LiteralPath $helperLog -ErrorAction SilentlyContinue); if ($new.Count -gt $mark -and ($new[$mark..($new.Count - 1)] | Where-Object { $_ -match "\b$s0 dev " })) { "RESULT helper up after $($t + $t2) s (probe dev line answered)"; return $true } }
'RESULT helper STOP: no heartbeat and no answer to a probe dev line; nothing escalates; the lock rows are skipped'
return $false
}
$viaHelper = $false
$seq = 0
function HelperSend([string] $verb) {
$script:seq += 2
$s0 = $script:seq; $s1 = $script:seq + 1; $script:seq = $s1
$mark = 0; if (Test-Path $helperLog) { $mark = @(Get-Content -LiteralPath $helperLog -ErrorAction SilentlyContinue).Count }
if ((HelperAliveAge) -gt 10) { if (-not (HelperReset)) { return 'no helper (the reset failed)' } }
Set-Content -LiteralPath $cmdFile -Value "$s0 dev $idx`n$s1 $verb`n" -NoNewline -Encoding ascii
$t = 0
while ($t -lt 30) {
Start-Sleep -Seconds 1; $t++
$new = @(Get-Content -LiteralPath $helperLog -ErrorAction SilentlyContinue)
if ($new.Count -gt $mark) { $hit = $new[$mark..($new.Count - 1)] | Where-Object { $_ -match "\b$s1 nvidia-smi " } | Select-Object -First 1; if ($hit) { return ($hit -replace '^\d+\s+', '') } }
}
$b = HelperSeqBase
if ($b -gt $script:seq) { "RESULT helper seq re-based from $script:seq to $b"; $script:seq = $b; return (HelperSend $verb) }
return "no helper.log line for seq $s1 within 30 s"
}
function SetLock([int] $mhz) { if (-not $viaHelper) { return 'refused: no helper' }; $o = HelperSend "lgc $mhz"; if ($o -match 'not have permission|No permission|Insufficient|not supported|Unable|ERROR|no helper') { return "refused: $o" }; return "ok (helper, -lgc 0,$mhz): $o" }
function ResetClocks() { if (-not $viaHelper) { return 'not attempted (no helper)' }; $o = HelperSend 'rgc'; if ($o -match 'no helper.log') { if (HelperReset) { $o = "after a task restart: $(HelperSend 'rgc')" } }; return $o }
# ---- the benches ----
function ClBench([string] $pk, [int] $batches) {
$d = Join-Path $v5kit "packs\$pk"
$t0 = Get-Date
$out = @(& $clExe --bench-pack --pack $d --device $clDev --batch-log2 24 --batches $batches 2>&1 | ForEach-Object { "$_" })
$code = $LASTEXITCODE; $t1 = Get-Date
$res = $out | Where-Object { $_ -match '^RESULT ' } | Select-Object -Last 1
$fp = ''; $mhs = $null; $check = ''
if ($res -match 'fingerprint=([0-9a-f]{16})') { $fp = $Matches[1] }
if ($res -match 'mhs=([0-9.]+)') { $mhs = [double]$Matches[1] }
if ($res -match 'check=(\w+)') { $check = $Matches[1] }
$err = ''; if (-not $res -or $code -ne 0) { $e = ($out | Where-Object { $_ -match 'FAIL|error|MISMATCH' } | Select-Object -First 1); $err = if ($e) { ($e -replace '\s+', ' ') } else { "exit $code, no RESULT line" } }
return [pscustomobject]@{ pack = $pk; t0 = $t0; t1 = $t1; rc = $code; fp = $fp; mhs = $mhs; check = $check; err = $err; path = 'opencl-kit' }
}
function CudaBench([string] $pk, [int] $batches) {
$d = Join-Path $v4kit "packs\$pk"
$env:CUDA_VISIBLE_DEVICES = $uuid
$t0 = Get-Date
$out = @(& $cudaExe --bench --pack $d --batches $batches --batch-log2 24 --block-warps 1 --device 0 2>&1 | ForEach-Object { "$_" })
$code = $LASTEXITCODE; $t1 = Get-Date
$res = $out | Where-Object { $_ -match '^RESULT pack=' } | Select-Object -First 1
$fp = ''; $mhs = $null; $check = ''
if ($res -and $res -match 'fingerprint=([0-9a-f]{16})') { $fp = $Matches[1] }
if ($res -and $res -match 'mhs=([\d.]+)') { $mhs = [double]$Matches[1] }
if ($res -and $res -match 'check=(\S+)') { $check = $Matches[1] }
$err = ''; if (-not $res -or $code -ne 0) { $e = ($out | Where-Object { $_ -match 'FAIL|error|MISMATCH' } | Select-Object -First 1); $err = if ($e) { ($e -replace '\s+', ' ') } else { "exit $code, no RESULT line" } }
return [pscustomobject]@{ pack = $pk; t0 = $t0; t1 = $t1; rc = $code; fp = $fp; mhs = $mhs; check = $check; err = $err; path = 'cuda-installed' }
}
function Report($b, [string] $label, $w) {
$want = $expected[$b.pack]; $match = if ($want -and $b.fp -eq $want) { 'yes' } elseif ($want) { 'no' } else { 'unknown' }
$eff = if ($w -and $w.draw -and $w.draw -gt 0 -and $b.mhs) { [math]::Round($b.mhs / $w.draw, 4) } else { '' }
$wt = if ($w) { "watts=$($w.draw) watts_instant=$($w.instant) watts_average=$($w.average) sm_mhz=$($w.sm) mem_mhz=$($w.mem) temp_max=$($w.tmax) samples=$($w.n)" } else { 'watts= (no sampler on this path)' }
"RESULT $label card=`"$name`" key=$key pack=$($b.pack) path=$($b.path) fingerprint=$($b.fp) expected=$want match=$match check=$($b.check) mhs=$($b.mhs) $wt mh_per_w=$eff wall_s=$([int]($b.t1 - $b.t0).TotalSeconds) exit=$($b.rc) error=$($b.err)"
return $match
}
$lockRows = @()
$fpV4 = ''; $fpV5 = ''; $unlocked = $null; $bestEff = $null; $knee = ''
try {
if ($isNv -and $smi -and $null -ne $idx) {
if (Test-Path $samples) { Remove-Item -LiteralPath $samples -Force }
$sampler = Start-Process -FilePath $smi -ArgumentList @('-i', $idx, '--query-gpu=timestamp,power.draw,clocks.sm,clocks.mem,temperature.gpu,clocks_throttle_reasons.active,power.draw.instant,power.draw.average', '--format=csv,noheader,nounits', '-lms', '1000') -RedirectStandardOutput $samples -WindowStyle Hidden -PassThru
Start-Sleep -Seconds 6
"RESULT sampler pid=$($sampler.Id) first=[$((@(Get-Content -LiteralPath $samples -ErrorAction SilentlyContinue | Select-Object -First 1)) -join '')]"
}
# 1. fingerprints: the OpenCL kit on every vendor (v5 then the v4 control), 5 batches each
if ($haveV5 -and $null -ne $clDev) {
$b5 = ClBench 'v5-dn3-epoch0' 5; $fpV5 = Report $b5 'FP' $(if ($sampler) { Watts $b5.t0 $b5.t1 } else { $null }); $rowsOut['v5'] = $b5.fp
$b4 = ClBench 'v4-genesis' 5; $fpV4 = Report $b4 'FP' $(if ($sampler) { Watts $b4.t0 $b4.t1 } else { $null }); $rowsOut['v4_genesis'] = $b4.fp
} else { 'RESULT FP skipped: no OpenCL kit or no matching device' }
# 2. the rate row: CUDA on NVIDIA with the sub-version 3 pack (60 s), else the OpenCL kit's v4 control for 60 s
$probe = $null
if ($isNv -and $v4kit -and $cudaExe -and (Test-Path $cudaExe) -and $uuid) { $probe = CudaBench 'v4-devnet-epoch0' 5 }
elseif ($haveV5 -and $null -ne $clDev) { $probe = ClBench 'v4-genesis' 5 }
if ($probe -and -not $probe.err -and $probe.mhs) {
$n = [math]::Max(20, [math]::Min(2000, [int][math]::Ceiling(60 * $probe.mhs * 1e6 / 16777216.0)))
$r0 = ResetClocks
$u = if ($probe.path -eq 'cuda-installed') { CudaBench 'v4-devnet-epoch0' $n } else { ClBench 'v4-genesis' $n }
$w = if ($sampler) { Watts $u.t0 $u.t1 } else { $null }
$m = Report $u 'RATE unlocked' $w
if ($u.path -eq 'cuda-installed') { $rowsOut['v4_devnet'] = $u.fp }
$unlocked = [ordered]@{ mhs = $u.mhs; watts = $(if ($w) { $w.draw } else { $null }); eff = $(if ($w -and $w.draw) { [math]::Round($u.mhs / $w.draw, 4) } else { $null }); sm = $(if ($w) { $w.sm } else { $null }); path = $u.path; match = $m }
# 3. the knee grid (NVIDIA through the helper): 300 MHz steps from the card's maximum down, 60 s each, stop at a 3 percent fall
if ($isNv -and $null -ne $idx -and -not $probe.err) {
$task = Get-ScheduledTask -TaskName 'Igneum Power Helper' -ErrorAction SilentlyContinue
if ($task) { $seq = HelperSeqBase; if (HelperReset) { $viaHelper = $true; "RESULT helper task started; commands from seq $seq" } }
else { 'RESULT helper task NOT REGISTERED (Power control off in the app): no lock path; measure-only' }
if ($viaHelper) {
$top = 0; if ($maxSm -match '^\d+$') { $top = [int]$maxSm }
$start = [int]([math]::Floor(($top - 1) / 300) * 300); if ($start -le 0) { $start = 2400 }
$bestEff = $unlocked.eff; $bestAt = 'unlocked'
for ($mhz = $start; $mhz -ge 600; $mhz -= 300) {
if ((Get-Date) -gt $deadline.AddMinutes(-6)) { "RESULT LOCK mhz=$mhz skipped: budget spent (six minutes kept for the restore and the app row)"; break }
$lk = SetLock $mhz
if ($lk -match '^refused') { "RESULT LOCK mhz=$mhz $lk"; break }
Start-Sleep -Seconds 3
$b = if ($u.path -eq 'cuda-installed') { CudaBench 'v4-devnet-epoch0' $n } else { ClBench 'v4-genesis' $n }
$w = if ($sampler) { Watts $b.t0 $b.t1 } else { $null }
$m = Report $b "LOCK mhz=$mhz" $w
if ($b.err -or -not $b.mhs) { break }
$eff = if ($w -and $w.draw) { [math]::Round($b.mhs / $w.draw, 4) } else { $null }
$lockRows += [ordered]@{ mhz = $mhz; sm = $(if ($w) { $w.sm } else { $null }); mhs = $b.mhs; watts = $(if ($w) { $w.draw } else { $null }); eff = $eff; match = $m }
if ($eff -and $eff -gt $bestEff) { $bestEff = $eff; $bestAt = "$mhz MHz" }
if ($m -eq 'no') { "RESULT LOCK mhz=$mhz fingerprint mismatch: the grid stops, clocks reset"; break }
if ($unlocked.mhs -and $b.mhs -lt 0.97 * $unlocked.mhs) { $knee = "$mhz MHz (rate $([math]::Round(100 * (1 - $b.mhs / $unlocked.mhs), 1)) percent under unlocked)"; "RESULT KNEE $knee best=$bestAt eff=$bestEff"; break }
}
if (-not $knee) { $knee = "not reached by $([math]::Max(600, $mhz + 300)) MHz"; "RESULT KNEE $knee best=$bestAt eff=$bestEff" }
}
} elseif (-not $isNv) { "RESULT LOCK measure-only: $vendor has no lock path in this job ($(if ($vendor -eq 'amd') { 'the ADLX tool once it is on the PC' } else { 'Intel: none' }))" }
} else { "RESULT RATE skipped: $(if ($probe) { $probe.err } else { 'no bench path for this card' })" }
} finally {
if ($viaHelper) { "RESULT restore rgc: $(ResetClocks)" }
if ($sampler) { try { Stop-Process -Id $sampler.Id -Force -ErrorAction SilentlyContinue } catch { }; 'RESULT restore sampler stopped' }
'RESULT restore cards: the runner puts the card back with its own choices on exit (nothing switched here)'
}
# 4. the app row (every vendor): the card mining in the app, 75 s settle, the median of 30 s of hash_now and power_w
$appMhs = $null; $appW = $null
if ($card.enabled) {
Start-Sleep -Seconds 75
$hs = @(); $ws = @()
for ($i = 0; $i -lt 6; $i++) { $st = State; if ($st) { $cc = $st.mining.cards | Where-Object { $_.key -eq $key } | Select-Object -First 1; if ($cc -and $cc.hash_now -gt 0) { $hs += [double]$cc.hash_now; $ws += [double]$cc.power_w } }; Start-Sleep -Seconds 5 }
$appMhs = Median $hs; $appW = Median $ws
"RESULT APP card=`"$name`" key=$key mhs=$appMhs power_w=$appW mh_per_w=$(if ($appMhs -and $appW -and $appW -gt 0) { [math]::Round($appMhs / $appW, 4) } else { '' }) samples=$($hs.Count) (the installed app's own reading, the card mining)"
} else { 'RESULT APP skipped (the card was off in the app before this job, or the restore was refused)' }
# 5. the rows
$date = (Get-Date).ToUniversalTime().ToString('yyyy-MM-dd')
$mhs = if ($unlocked -and $unlocked.mhs) { $unlocked.mhs } else { $appMhs }
$watts = if ($unlocked -and $unlocked.watts) { $unlocked.watts } else { $appW }
$eff = if ($mhs -and $watts -and $watts -gt 0) { [math]::Round($mhs / $watts, 3) } else { $null }
$best = $lockRows | Where-Object { $_.eff } | Sort-Object { $_.eff } -Descending | Select-Object -First 1
$tuned = if ($best) { "lock $($best.mhz) MHz: $($best.mhs) MH/s at $($best.watts) W ($($best.eff) MH/W)" } elseif ($isNv) { 'stock (no lock path on this run)' } else { "stock (measure-only on $vendor)" }
$fpNote = "v5 $(if ($fpV5 -eq 'yes') { 'match' } elseif ($fpV5 -eq 'no') { 'MISMATCH' } else { 'not read' }), v4 $(if ($fpV4 -eq 'yes' -or ($unlocked -and $unlocked.match -eq 'yes')) { 'match' } elseif ($fpV4 -eq 'no' -or ($unlocked -and $unlocked.match -eq 'no')) { 'MISMATCH' } else { 'not read' })"
"RESULT ROW bench-log | $name ($vram MB) | $env:COMPUTERNAME | $date | $mhs MH/s | $watts W | $eff MH/W | $fpNote | $tuned | knee $(if ($knee) { $knee } else { 'n/a' }) | app $appMhs MH/s at $appW W |"
$mb = [ordered]@{ card = "$name ($([math]::Round($vram / 1024)) GB)"; generator = 'v4'; mh_s = $mhs; watts = $watts; mh_per_w = $eff; miner = "installed app $env:IGNEUM_APP_VERSION, class v4 program ($(if ($unlocked) { $unlocked.path } else { 'app row' }))"; date = $date; source = "card-in job on $env:COMPUTERNAME, $date"; by = 'measured by the hash lane (card-in)'; note = "fingerprints: $fpNote; vram $vram MB, dataset fit $(if ($fits) { 'yes' } else { 'no' }); app row $appMhs MH/s at $appW W"; v4_cost = 'class v4 program only'; tuned = $tuned; driver_os = "$(if ($driver) { 'NVIDIA driver ' + $driver + ', ' } else { '' })Windows 11"; hive = [ordered]@{ core_mhz = $(if ($best) { $best.mhz } else { $null }); mem_mhz = $null; pl_w = $null; label = $(if ($best) { "lock $($best.mhz) MHz, $($best.eff) MH/W" } else { 'stock' }) }; group = 'egpu' }
"RESULT ROW miner-bench $($mb | ConvertTo-Json -Compress -Depth 4)"
$rowsOut['locks'] = $lockRows
WriteLast
"RESULT next: $name done on $env:COMPUTERNAME at $(Stamp); the last read now carries it; unplug or plug the next card and say in"
Summary 'done' @{ key = $key; name = $name; vendor = $vendor; vram_mb = $vram; fits = $fits; fp_v5 = $fpV5; fp_v4 = $fpV4; unlocked = $unlocked; locks = $lockRows; knee = $knee; app_mhs = $appMhs; app_w = $appW; restored = $restored }
exit 0

View file

@ -0,0 +1,87 @@
# Class v5 kit bench on PC 1's RX 9070 XT (7 October 2026, docs/design/class-v5-stored-state.md section 13, "the kit:
# OpenCL (AMD)"): the kit's igneum-worker-opencl.exe (THIS tree's proto-opencl/host.c with the class v5 leaf upload:
# igneum_build(ds, cache, leaves, nLeaves, nItems), the leaves of leaves.bin checked against the pack's FNV-1a 64 first)
# runs --bench-pack on the first class v5 pack, proto-cuda/packs-ca3-v5/v5-dn3-epoch0 (program id e5a4ac5978462156, 11
# leaves under state root 7e37a9fb..., cache FNV 7334fa46e5d972eb), on the gfx1201 device. Expected: the self-test
# PASS line (cache head, last line and FNV; dataset head, word [268435455] and 64 samples; 96 of 96 vector lanes) and the
# fingerprint of the 2^24 outputs at base nonce 0 equal to the Metal reading, 82b19cbde8557ea5 (the M5 Max, 7 October
# 2026, 18:07:09Z). The v4-genesis control pack runs after it so the run has a known class v4 row beside the v5 row.
# Beside the miners (a correctness and fingerprint gate; the rate row is labelled loaded when the card mines): no card is
# switched, nothing is posted to the installed app, nothing is built on the PC. Published by the Counter ASIC coordinator
# only (the PC 1 queue is its); the kit is fetch job $kitId. Every result line starts with RESULT; SUMMARY {json} ends it.
$ErrorActionPreference = 'Continue'
$jobName = 'pc1-amd-cardin-bench'
$cardMatch = $env:IGNEUM_AMD_CARD; if (-not $cardMatch) { $cardMatch = '7600' }
$sizesId = 'fetch-ca3-amd-sizes-20261008'
$kitId = $env:IGNEUM_V5_KIT_ID; if (-not $kitId) { $kitId = 'fetch-ca3-v5-kit-20261008-pc1' }
$expected = '82b19cbde8557ea5'
$started = Get-Date
function Stamp { (Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ') }
function Summary([string] $status, [hashtable] $extra) {
$o = [ordered]@{ job = $jobName; status = $status; duration_s = [int]((Get-Date) - $started).TotalSeconds; finished_at = (Stamp) }
foreach ($k in $extra.Keys) { $o[$k] = $extra[$k] }
'SUMMARY ' + ($o | ConvertTo-Json -Compress -Depth 4)
}
"RESULT start $(Stamp) job=$jobName machine=$env:COMPUTERNAME app_version=$env:IGNEUM_APP_VERSION expected_fingerprint=$expected"
$jobs = Split-Path $env:IGNEUM_JOB_DIR
$kit = Join-Path $jobs $kitId
if (-not (Test-Path $kit)) { "RESULT error kit missing at $kit (the fetch job $kitId runs first; republish it after any app update)"; Summary 'failed' @{ error = 'kit missing' }; exit 2 }
$exe = Join-Path $kit 'bin\windows\igneum-worker-opencl.exe'
$packs = Join-Path $kit 'packs'
if (-not (Test-Path $exe)) { "RESULT error worker missing at $exe"; Summary 'failed' @{ error = 'worker missing' }; exit 2 }
"RESULT worker kit $exe sha256 $((Get-FileHash -Algorithm SHA256 $exe).Hash.ToLower()) bytes $((Get-Item $exe).Length)"
$sizes = Join-Path (Join-Path $jobs $sizesId) 'packs'
if (-not (Test-Path $sizes)) { "RESULT error sizes kit missing at $sizes (the fetch job $sizesId runs first)"; Summary 'failed' @{ error = 'sizes kit missing' }; exit 2 }
foreach ($pk in @('v5-dn3-epoch0', 'v4-genesis', 'v3-1g', 'v3-ds29', 'v3-ds30')) {
$d = if ($pk -like 'v3-*') { Join-Path $sizes $pk } else { Join-Path $packs $pk }
if (-not (Test-Path (Join-Path $d 'kernel_bound.cl'))) { "RESULT error pack $pk missing at $d"; Summary 'failed' @{ error = "pack $pk missing" }; exit 2 }
"RESULT pack $pk kernel_bound.cl sha256 $((Get-FileHash -Algorithm SHA256 (Join-Path $d 'kernel_bound.cl')).Hash.ToLower()) program.h sha256 $((Get-FileHash -Algorithm SHA256 (Join-Path $d 'program.h')).Hash.ToLower())"
}
$leaves = Join-Path $packs 'v5-dn3-epoch0\leaves.bin'
if (-not (Test-Path $leaves)) { "RESULT error leaves.bin missing at $leaves (a class v5 pack without its leaves builds nothing)"; Summary 'failed' @{ error = 'leaves missing' }; exit 2 }
"RESULT leaves $leaves bytes $((Get-Item $leaves).Length) sha256 $((Get-FileHash -Algorithm SHA256 $leaves).Hash.ToLower())"
# the OpenCL device index of the 9070 XT (the installed worker's list when present: the app's own indices)
$inst = @("$env:LOCALAPPDATA\Programs\Igneum Miner", "$env:ProgramFiles\Igneum Miner") | Where-Object { Test-Path (Join-Path $_ 'igneum-app.exe') } | Select-Object -First 1
$listExe = $exe
if ($inst -and (Test-Path (Join-Path $inst 'igneum-worker-opencl.exe'))) { $listExe = Join-Path $inst 'igneum-worker-opencl.exe' }
$list = @(& $listExe --list 2>&1 | ForEach-Object { "$_" })
$list | ForEach-Object { "RESULT list $_" }
$dev = $null
foreach ($l in $list) { if ($l -match ('^\s*\[(\d+)\].*' + [regex]::Escape($cardMatch)) -and $l -notmatch 'dup') { $dev = [int]$Matches[1]; break } }
if ($null -eq $dev) { foreach ($l in $list) { if ($l -match '^\s*\[(\d+)\].*gfx1200' -and $l -notmatch 'dup') { $dev = [int]$Matches[1]; break } } }
if ($null -eq $dev) { "RESULT error no device matching $cardMatch (or gfx1200) in --list: is the card in its housing and on the bus?"; Summary 'failed' @{ error = 'no card' }; exit 2 }
"RESULT device $dev match=$cardMatch (list from $listExe)"
function Workers { @(Get-CimInstance Win32_Process -Filter "Name = 'igneum-worker-opencl.exe' OR Name = 'igneum-worker-cuda.exe'" -ErrorAction SilentlyContinue | ForEach-Object { "$($_.Name):$($_.ProcessId):[$($_.CommandLine -replace '\s+', ' ')]" }) }
$w = @(Workers)
$loaded = ($w | Where-Object { $_ -match "igneum-worker-opencl.*--device\s+$dev(\s|$)" }).Count -gt 0
"RESULT workers_before $(Stamp) $($w -join ' ')"
$state = if ($loaded) { 'loaded' } else { 'quiet' }
"RESULT context card_state=$state (a fingerprint gate: the load changes the rate row, never the bytes)"
$rows = @{}
$fpOk = $false
foreach ($pk in @('v5-dn3-epoch0', 'v4-genesis')) {
$d = Join-Path $packs $pk
$t0 = Get-Date
"RESULT bench $pk start $(Stamp) cmd=igneum-worker-opencl.exe --bench-pack --pack $d --device $dev --batch-log2 24 --batches $(if ($pk -like 'v3-*') { 30 } else { 5 })"
$out = @(& $exe --bench-pack --pack $d --device $dev --batch-log2 24 --batches $(if ($pk -like 'v3-*') { 30 } else { 5 }) 2>&1 | ForEach-Object { "$_" })
$code = $LASTEXITCODE
$secs = [int]((Get-Date) - $t0).TotalSeconds
foreach ($l in $out) { if ($l -match '^(pack |class v5|RESULT |FAIL|error|warm-up)') { "RESULT bench $pk out $l" } }
$res = $out | Where-Object { $_ -match '^RESULT ' } | Select-Object -Last 1
$fp = ''; $mhs = ''; $check = ''
if ($res -match 'fingerprint=([0-9a-f]{16})') { $fp = $Matches[1] }
if ($res -match 'mhs=([0-9.]+)') { $mhs = $Matches[1] }
if ($res -match 'check=(\w+)') { $check = $Matches[1] }
$rows[$pk] = [ordered]@{ exit = $code; seconds = $secs; fingerprint = $fp; mhs = $mhs; check = $check; card_state = $state }
if ($pk -eq 'v5-dn3-epoch0') {
$fpOk = ($fp -eq $expected -and $check -eq 'PASS')
"RESULT v5 fingerprint=$fp expected=$expected match=$fpOk check=$check mhs=$mhs card_state=$state exit=$code seconds=$secs $(Stamp)"
} elseif ($pk -eq 'v4-genesis') {
"RESULT v4-control fingerprint=$fp check=$check mhs=$mhs card_state=$state exit=$code seconds=$secs $(Stamp)"
} else {
"RESULT size pack=$pk fingerprint=$fp check=$check mhs=$mhs card_state=$state exit=$code seconds=$secs $(Stamp)"
}
}
"RESULT workers_after $(Stamp) $((@(Workers)) -join ' ')"
Summary $(if ($fpOk) { 'done' } else { 'failed' }) @{ expected = $expected; v5 = $rows['v5-dn3-epoch0']; v4_control = $rows['v4-genesis']; device = $dev; kit = $kitId }
exit $(if ($fpOk) { 0 } else { 1 })

View file

@ -17,19 +17,39 @@ function Summary([string] $status, [hashtable] $extra) { $o = [ordered]@{ job =
$jobDir = $env:IGNEUM_JOB_DIR; if (-not $jobDir) { $jobDir = Join-Path $env:TEMP 'igneum-ca4-mb' }
New-Item -ItemType Directory -Force -Path $jobDir | Out-Null
$jobs = Split-Path $jobDir
$packs = Join-Path (Join-Path $jobs 'fetch-ca4-packs-20261007') 'packs'
if (-not (Test-Path $packs)) { "RESULT error packs missing at $packs (the fetch job fetch-ca4-packs-20261007 runs first)"; Summary 'failed' @{ error = 'packs missing' }; exit 2 }
# the class v6 design rows (8 October 2026, an id carrying "v6"): the ca4-v6 kit (today's class v3 x8 and x16, the two re-weighted shadow
# packs, the invention lane's two per-load packs, the controls mx8-genesis and mx8_sh256x27), same shape, label ca4-v6
$v6 = (Split-Path -Leaf $env:IGNEUM_JOB_DIR) -match 'v6'
$v6b = (Split-Path -Leaf $env:IGNEUM_JOB_DIR) -match 'v6b'
$v6c = (Split-Path -Leaf $env:IGNEUM_JOB_DIR) -match 'v6c'
$rw = (Split-Path -Leaf $env:IGNEUM_JOB_DIR) -match 'readwidth'
$v6d = (Split-Path -Leaf $env:IGNEUM_JOB_DIR) -match 'v6d'
$kitId = if ($v6d) { 'fetch-ca4-v6d-packs-20261008' } elseif ($rw) { 'fetch-ca3-readwidth-20261008' } elseif ($v6c) { 'fetch-ca4-v6c-packs-20261008' } elseif ($v6b) { 'fetch-ca4-v6b-packs-20261008' } elseif ($v6) { 'fetch-ca4-v6-packs-20261008' } else { 'fetch-ca4-packs-20261007' }
$packs = Join-Path (Join-Path $jobs $kitId) 'packs'
if (-not (Test-Path $packs)) { "RESULT error packs missing at $packs (the fetch job $kitId runs first)"; Summary 'failed' @{ error = 'packs missing' }; exit 2 }
$inst = @("$env:LOCALAPPDATA\Programs\Igneum Miner", "$env:ProgramFiles\Igneum Miner") | Where-Object { Test-Path (Join-Path $_ 'igneum-worker-cuda.exe') } | Select-Object -First 1
if (-not $inst) { 'RESULT error no installed igneum-worker-cuda.exe'; Summary 'failed' @{ error = 'no worker' }; exit 2 }
$exe = Join-Path $inst 'igneum-worker-cuda.exe'
if ($rw -or $v6d) { $kexe = Join-Path (Join-Path $jobs 'fetch-ca3-v5-kit-20261008-pc1') 'bin\windows\igneum-worker-cuda.exe'; if (Test-Path $kexe) { foreach ($dll in (Get-ChildItem (Join-Path $inst '*.dll') -ErrorAction SilentlyContinue)) { if (-not (Test-Path (Join-Path (Split-Path $kexe) $dll.Name))) { Copy-Item $dll.FullName (Split-Path $kexe) -ErrorAction SilentlyContinue } }; $exe = $kexe; "RESULT worker readwidth: the v5 kit's CUDA worker $kexe" } else { 'RESULT error the v5 kit worker is missing on this PC (fetch-ca3-v5-kit-20261008-pc1)'; Summary 'failed' @{ error = 'no v5 worker' }; exit 2 } }
# mx8_shl256x27 is the research lane's first per-load export (id 854050a4293f0615, the known-failed record: 11 percent duplicate reads from a lossy
# base writer under the sub-blocks) and mx8_shl256x27_v2 its fix (counter-asic-4 2f718001, attempt 3, id bd64b207a30413fb); both run and every row
# names its pack directory and the program id read from its program.json. 22:44 UTC: the research lane's acceptance rule, judging the per-load
# class in execution order, refuses the 16 x 27 construction on every attempt, so neither per-load export is a candidate class; both rows
# still run as the energy reading of the placement and carry construction=unsound-energy-reading-only
$packOrder = @('mx8-genesis', 'mx8_sh256x27', 'mx8_shl256x27', 'mx8_shl256x27_v2', 'mx8_mm128', 'mx8_mm512', 'mx8_mm1430')
if ($v6) { $packOrder = @('mx8-genesis', 'mx8_sh256x27', 'v3-x8-today', 'v3-x16-today', 'mix-mulheavy', 'mix-shflheavy', 'mx8_shl4096x1', 'mx8_shl2304x3', 'v3-ds29', 'v3-ds30', 'v3-ds31') }
if ($v6b) { $packOrder = @('mix-shflheavy', 'v3-ds29', 'v3-ds30', 'v3-ds31', 'v3-x16-g2', 'v3-x8-g2') }
if ($v6c) { $packOrder = @('mix-mulheavy') }
# the read-width rows (the floor programme, 8 October 2026): W = 4, 8 and 16 words under the class v5 state term (each its own draw), the
# pinned v5-genesis pack as the reference; the w64 pack also at 2, 4 and 8 warps per block in the unlocked state (the best lane count)
if ($rw) { $packOrder = @('v5-genesis', 'rw-w4', 'rw-w32', 'rw-w64', 'rw5-w4', 'rw5-w64') }
# kit d (8 October 2026, the class v6 close): the two weight tables inside the shadow block, and floor lane 5's read-width rows (the 5 October
# w4 control, the w64 pack, the hinted w64-l2 pack: the first uint4 load of each item as ld.global.L2::64B, fingerprint 836e56e7)
if ($v6d) { $packOrder = @('mix-mulheavy-sh', 'mix-shflheavy-sh', 'rw5-w4', 'rw5-w64', 'rw5-w64-l2') }
# the two w64 packs (the v5-state one and the 5 October class v2 one, fingerprint 836e56e7) at 1, 2, 4 and 8 warps per block unlocked and at 1 and 4 at the lock
function WarpsFor([string] $pk, [string] $state) { if ($rw -and $pk -like '*w64*') { if ($state -eq 'unlocked') { @(1, 2, 4, 8) } else { @(1, 4) } } else { @(1) } }
foreach ($pk in $packOrder) { $d = Join-Path $packs $pk; if (-not (Test-Path $d)) { "RESULT error pack missing at $d"; Summary 'failed' @{ error = "pack $pk missing" }; exit 2 }; foreach ($f in (Get-ChildItem $d -File | Sort-Object Name)) { "RESULT kitfile $pk/$($f.Name) sha256 $((Get-FileHash -Algorithm SHA256 $f.FullName).Hash.ToLower())" } }
"RESULT start $(Stamp) job=$jobName exe=$exe sha256=$((Get-FileHash -Algorithm SHA256 $exe).Hash.ToLower()) label=ca4-research"
"RESULT start $(Stamp) job=$jobName exe=$exe sha256=$((Get-FileHash -Algorithm SHA256 $exe).Hash.ToLower()) label=$(if ($v6) { 'ca4-v6' } else { 'ca4-research' })"
$smi = (Get-Command nvidia-smi -ErrorAction SilentlyContinue).Source
if (-not $smi) { foreach ($p in @((Join-Path $env:ProgramFiles 'NVIDIA Corporation\NVSMI\nvidia-smi.exe'), (Join-Path $env:SystemRoot 'System32\nvidia-smi.exe'))) { if (Test-Path $p) { $smi = $p; break } } }
$row = @(& $smi --query-gpu=index,name,uuid,pci.bus_id --format=csv,noheader 2>&1 | ForEach-Object { "$_" }) | Where-Object { $_ -match 'RTX 5090' } | Select-Object -First 1
@ -84,11 +104,11 @@ function ParseUtc([string] $s) { try { return [datetime]::Parse($s, [cultureinfo
function RunState([string] $state) {
$env:CUDA_VISIBLE_DEVICES = $uuid
"RESULT packs-state $state start $(Stamp) $((& $smi -i $idx --query-gpu=clocks.sm,clocks.applications.graphics,power.draw --format=csv,noheader 2>&1 | Out-String).Trim())"
foreach ($pk in $packOrder) {
foreach ($pk in $packOrder) { foreach ($bw in (WarpsFor $pk $state)) {
$d = Join-Path $packs $pk
$cls = ''; $progId = ''; try { $pj = Get-Content -LiteralPath (Join-Path $d 'program.json') -Raw | ConvertFrom-Json; $cls = [string] $pj.load_class; $progId = [string] $pj.program_id } catch { }
$t0 = Get-Date
$lines = @(& $exe --bench --pack $d --batches 250 --batch-log2 24 --block-warps 1 --device 0 2>&1 | ForEach-Object { "$_" })
$lines = @(& $exe --bench --pack $d --batches 250 --batch-log2 24 --block-warps $bw --device 0 2>&1 | ForEach-Object { "$_" })
$rc = $LASTEXITCODE
$t1 = Get-Date
$res = $lines | Where-Object { $_ -match '^RESULT pack=' } | Select-Object -First 1
@ -101,9 +121,9 @@ function RunState([string] $state) {
$eff = if ($watts -and $mhs) { [math]::Round([double]$mhs / $watts, 4) } else { '' }
$err = ''; if (-not $res -or $rc -ne 0) { $e = ($lines | Where-Object { $_ -match 'FAIL|error|MISMATCH|compile' } | Select-Object -First 1); $err = if ($e) { ($e -replace '\s+', ' ') } else { "exit $rc, no RESULT line" } }
$tag = if ($pk -like 'mx8_shl256x27*') { ' construction=unsound-energy-reading-only' } else { '' }
"RESULT ca4-research pack=$pk dir=$d program_id=$progId class=$cls$tag state=$state mhs=$mhs watts=$watts watts_instant=$wi watts_average=$wa mh_per_w=$eff sm_mhz=$sm mem_mhz=$mem util=$util fingerprint=$fp check=$check exit=$rc wall_s=$([int]($t1 - $t0).TotalSeconds) samples=$($w.Count) error=$err"
"RESULT ca4-research pack=$pk dir=$d program_id=$progId class=$cls$tag state=$state warps=$bw mhs=$mhs watts=$watts watts_instant=$wi watts_average=$wa mh_per_w=$eff sm_mhz=$sm mem_mhz=$mem util=$util fingerprint=$fp check=$check exit=$rc wall_s=$([int]($t1 - $t0).TotalSeconds) samples=$($w.Count) error=$err"
Start-Sleep -Seconds 3
}
} }
"RESULT packs-state $state end $(Stamp)"
}
$locked = $false

View file

@ -44,6 +44,26 @@ case "$STEP" in
family) $P add --kind run --target ae432dc7 --id run-ca3-pc1-amd-family-20261007-e --cards-off amd:gfx1201 --script tools/ca3-v4-amend/pc1-amd-family-20261007.ps1 --timeout-minutes 20 --title "CA3 PC 1: item 6 family step costs on the 9070 XT (run e, the card alone)" --expires-hours 36 $DEPLOY ;;
tune-5080) $P add --kind run --target ae432dc7 --id run-ca3-pc1-ember-5080-20261007 --script tools/ca3-v4-amend/pc1-ember-card.ps1 --timeout-minutes 35 --title "CA3 PC 1: Ember Tune on the RTX 5080 (the installed app tunes the one card)" --expires-hours 36 $DEPLOY ;;
tune-9070) $P add --kind run --target ae432dc7 --id run-ca3-pc1-ember-9070-20261007 --script tools/ca3-v4-amend/pc1-ember-card.ps1 --timeout-minutes 35 --title "CA3 PC 1: Ember Tune pass on the RX 9070 XT (set or measure-only by the probe)" --expires-hours 36 $DEPLOY ;;
card-in-pc1) $P add --kind run --target ae432dc7 --id "run-card-in-pc1-$(date -u +%Y%m%dT%H%M)" --script tools/ca3-v4-amend/pc-card-in.ps1 --timeout-minutes 55 --title "card-in: the newly plugged eGPU card on PC 1, the full pass (fingerprints, rate and watts, the lock grid where the lever exists, the rows); no new card = nothing done" --expires-hours 12 $DEPLOY ;;
card-in-pc2) $P add --kind run --target 1ccfe586 --id "run-card-in-pc2-$(date -u +%Y%m%dT%H%M)" --script tools/ca3-v4-amend/pc-card-in.ps1 --timeout-minutes 55 --title "card-in: the newly plugged eGPU card on PC 2, the full pass (fingerprints, rate and watts, the lock grid where the lever exists, the rows); no new card = nothing done" --expires-hours 12 $DEPLOY ;;
kit-pc2) $P add --kind fetch --target 1ccfe586 --id fetch-ca3-v4-sub3-pc2-20261007 --file "$KITS/igneum-ca3-v4-sub3-pc1-kit.zip" --dir jobs --extract --title "CA3 PC 2: the sub-version 3 kit (worker, 13 packs) for the card-in CUDA rows" --expires-hours 36 $DEPLOY ;;
arc-kit) $P add --kind fetch --target 1ccfe586 --id fetch-ca3-v5-kit-20261008 --file "$KITS/igneum-ca3-v5-kit-20261008.zip" --dir jobs --extract --title "Class v5 kit rebuilt with the Intel rotate-fold fix (tree 8f481459; worker 55722527...)" --expires-hours 36 $DEPLOY ;;
arc-v5) $P add --kind run --target 1ccfe586 --id run-ca3-pc2-v5-intel-bench-20261008 --script "$KITS/arc-v5-bench-c0d398a1.ps1" --timeout-minutes 15 --title "Class v5 kit fingerprint on PC 2 Arc B580, the rotate-fold kit (the v5 lane's script c0d398a1, whole stdout kept; lock-free, quiet, nothing installed)" --expires-hours 12 $DEPLOY ;;
v5kit-pc1) $P add --kind fetch --target ae432dc7 --id fetch-ca3-v5-kit-20261008-pc1 --file "$KITS/igneum-ca3-v5-kit-20261008.zip" --dir jobs --extract --title "Class v5 kit (rotate-fold build, tree 8f481459) on PC 1 for the v5 against v4 lock rows" --expires-hours 36 $DEPLOY ;;
v5lock-5090) $P add --kind run --target ae432dc7 --id run-ca3-pc1-v5lock-5090-20261008-b --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-v4-efficiency.ps1 --timeout-minutes 30 --title "Class v5 against class v4 on the RTX 5090 at unlocked, 1,300 and 1,200 MHz (the v5 kit's CUDA packs, 60 s rows, the helper's cleared sequence, the card alone)" --expires-hours 12 $DEPLOY ;;
v5lock-5080) $P add --kind run --target ae432dc7 --id run-ca3-pc1-v5lock-5080-20261008 --cards-off "nvidia:NVIDIA GeForce RTX 5080" --script tools/ca3-v4-amend/pc1-v4-efficiency.ps1 --timeout-minutes 30 --title "Class v5 against class v4 on the RTX 5080 at unlocked, 1,100 and 1,000 MHz (the v5 kit's CUDA packs, 60 s rows, the helper's cleared sequence, the card alone)" --expires-hours 12 $DEPLOY ;;
v6-kit) $P add --kind fetch --target ae432dc7 --id fetch-ca4-v6-packs-20261008 --file "$KITS/igneum-ca4-v6-packs-20261008.zip" --dir jobs --extract --title "Class v6 design rows: today's class v3 x8 and x16, two re-weighted shadow packs, the invention lane's two per-load packs, the two controls" --expires-hours 36 $DEPLOY ;;
v6-packs) $P add --kind run --target ae432dc7 --id run-ca4-pc1-v6-packs-5090-20261008 --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-ca4-packs.ps1 --timeout-minutes 60 --title "Class v6 design rows on the RTX 5090 alone: eleven packs (the class v3 pack at 2, 4 and 8 GiB datasets among them) at unlocked and the 1,300 MHz lock (self-test, 2^24 fingerprint, MH/s, W), label ca4-v6" --expires-hours 12 $DEPLOY ;;
v6b-kit) $P add --kind fetch --target ae432dc7 --id fetch-ca4-v6b-packs-20261008 --file "$KITS/igneum-ca4-v6b-packs-20261008.zip" --dir jobs --extract --title "Class v6 design rows, kit b: the byte-seed re-exports (x8 and x16 on generator 2 with the era, the re-weighted tables, the pinned class v3 program at 2, 4 and 8 GiB)" --expires-hours 36 $DEPLOY ;;
v6b-packs) $P add --kind run --target ae432dc7 --id run-ca4-pc1-v6b-packs-5090-20261008 --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-ca4-packs.ps1 --timeout-minutes 45 --title "Class v6 design rows, kit b, on the RTX 5090 alone at unlocked and the 1,300 MHz lock, label ca4-v6" --expires-hours 12 $DEPLOY ;;
v6c-kit) $P add --kind fetch --target ae432dc7 --id fetch-ca4-v6c-packs-20261008 --file "$KITS/igneum-ca4-v6c-packs-20261008.zip" --dir jobs --extract --title "Class v6 design rows, kit c: the multiply-heavy weight table (byte-seed form)" --expires-hours 36 $DEPLOY ;;
v6c-packs) $P add --kind run --target ae432dc7 --id run-ca4-pc1-v6c-packs-5090-20261008 --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-ca4-packs.ps1 --timeout-minutes 20 --title "Class v6 design rows, kit c (the multiply-heavy table) on the RTX 5090 alone at unlocked and the 1,300 MHz lock, label ca4-v6" --expires-hours 12 $DEPLOY ;;
rw-kit) $P add --kind fetch --target ae432dc7 --id fetch-ca3-readwidth-20261008 --file "$KITS/igneum-ca3-readwidth-20261008.zip" --dir jobs --extract --title "The floor programme's read-width packs: W = 4, 8 and 16 words under the class v5 state term, the v5-genesis reference" --expires-hours 36 $DEPLOY ;;
rw-packs) $P add --kind run --target ae432dc7 --id run-ca3-pc1-readwidth-5090-20261008 --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-ca4-packs.ps1 --timeout-minutes 45 --title "Read width on the RTX 5090 alone: W = 4, 8, 16 words (the v5 state term), the w64 pack at 1, 2, 4, 8 warps per block, unlocked and at the 1,300 MHz lock; label ca4-v6" --expires-hours 12 $DEPLOY ;;
v6d-kit) $P add --kind fetch --target ae432dc7 --id fetch-ca4-v6d-packs-20261008 --file "$KITS/igneum-ca4-v6d-packs-20261008.zip" --dir jobs --extract --title "Class v6 close, kit d: the two weight tables inside the shadow block; floor lane 5's w4, w64 and hinted w64-l2 packs" --expires-hours 36 $DEPLOY ;;
v6d-packs) $P add --kind run --target ae432dc7 --id run-ca4-pc1-v6d-packs-5090-20261008 --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-ca4-packs.ps1 --timeout-minutes 40 --title "Class v6 close, kit d, on the RTX 5090 alone: the shadow-block weight tables, and w4 against w64 and the hinted w64-l2 at 1, 2, 4, 8 warps unlocked and 1, 4 at the 1,300 MHz lock; label ca4-v6" --expires-hours 12 $DEPLOY ;;
amd-sizes-kit) $P add --kind fetch --target ae432dc7 --id fetch-ca3-amd-sizes-20261008 --file "$KITS/igneum-ca3-amd-sizes-20261008.zip" --dir jobs --extract --title "The 8 GB tier's dataset rows: the pinned class v3 program at 1, 2 and 4 GiB (OpenCL)" --expires-hours 36 $DEPLOY ;;
amd-cardin) $P add --kind run --target ae432dc7 --id "run-ca3-pc1-amd-cardin-$(date -u +%Y%m%dT%H%M)" --script tools/ca3-v4-amend/pc1-amd-cardin-bench.ps1 --timeout-minutes 30 --title "RX 7600 card-in: the class v5 and v4 fingerprints and the dataset rows at 1, 2 and 4 GiB on the OpenCL kit worker, beside the miners" --expires-hours 12 $DEPLOY ;;
read) node tools/jobs.mjs "$1" --all ;;
*) sed -n 2,12p "$0"; exit 2 ;;
esac

View file

@ -25,6 +25,10 @@
$ErrorActionPreference = 'Continue'
$jobName = 'pc1-v4-efficiency'
$kitId = 'fetch-ca3-v4-sub3-pc1-20261007'
# the class v5 against class v4 mode (8 October 2026, main's order at 10:4x UK, an id carrying "v5lock"): the v5 kit's CUDA packs (v4-genesis,
# v5-genesis, v5-dn3-epoch0, the same epoch seed for the first two) at unlocked, 1,300 and 1,200 MHz, 60 s rows; the 5080 at 1,100 and 1,000
$v5lock = (Split-Path -Leaf $env:IGNEUM_JOB_DIR) -match 'v5lock'
if ($v5lock) { $kitId = 'fetch-ca3-v5-kit-20261008-pc1' }
$started = Get-Date
$deadline = $started.AddMinutes(66)
function Stamp { (Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ') }
@ -39,6 +43,7 @@ $jobId = Split-Path -Leaf $jobDir
$cardName = if ($jobId -match '5080') { 'NVIDIA GeForce RTX 5080' } else { 'NVIDIA GeForce RTX 5090' }
$expected = @{ 'mx8-devnet-epoch0' = '90f794dd556f7a3b'; 'v4-devnet-epoch0' = 'e370fb2080b7dbb1' }
$packOrder = @('v4-devnet-epoch0', 'mx8-devnet-epoch0')
if ($v5lock) { $expected = @{ 'v4-genesis' = '892b6d55a7ddcfcb'; 'v5-dn3-epoch0' = '82b19cbde8557ea5'; 'v5-genesis' = '' }; $packOrder = @('v4-genesis', 'v5-genesis', 'v5-dn3-epoch0') }
# the grid by the job id: an id carrying "floor" runs the second pass, 1,400 MHz down to the driver's floor in 100 MHz steps (the
# first pass found the best MH/W at its lowest lock, 1,400, so the knee sits below it); a lock the driver clamps shows in sm_mhz
# the counter-asic-4 research mode (an id carrying "ca4sparse"): the research lane's SM-sparse worker variants (proto-cuda/nvrtc/worker.cpp on
@ -48,7 +53,7 @@ $packOrder = @('v4-devnet-epoch0', 'mx8-devnet-epoch0')
# label=ca4-research and the worker's race line verbatim; nothing in any pack changes, the fingerprint is checked on every row
$ca4 = $jobId -match 'ca4sparse'
$variants = if ($ca4) { @('base', 'sp170-w32', 'sp85-w32', 'sp43-w32', 'sp21-w32', 'sp11-w32') } else { @('base') }
$locks = if ($ca4) { @(1300) } elseif ($jobId -match '5080') { @(2850, 2781, 2700, 2550, 2472, 2400, 2250, 2163, 2100, 1950, 1854, 1800, 1650, 1500, 1400, 1300, 1200, 1100, 1000, 900, 800, 700, 600, 500, 400, 300) } elseif ($jobId -match 'floor2') { @(1100, 1000, 900, 800, 700, 600, 500, 400, 300) } elseif ($jobId -match 'floor') { @(1400, 1300, 1200, 1100, 1000, 900, 800, 700, 600, 500, 400, 300) } else { @(2850, 2781, 2700, 2550, 2472, 2400, 2250, 2163, 2100, 1950, 1854, 1800, 1650, 1500, 1400) }
$locks = if ($v5lock -and $jobId -match '5080') { @(1100, 1000) } elseif ($v5lock) { @(1300, 1200) } elseif ($ca4) { @(1300) } elseif ($jobId -match '5080') { @(2850, 2781, 2700, 2550, 2472, 2400, 2250, 2163, 2100, 1950, 1854, 1800, 1650, 1500, 1400, 1300, 1200, 1100, 1000, 900, 800, 700, 600, 500, 400, 300) } elseif ($jobId -match 'floor2') { @(1100, 1000, 900, 800, 700, 600, 500, 400, 300) } elseif ($jobId -match 'floor') { @(1400, 1300, 1200, 1100, 1000, 900, 800, 700, 600, 500, 400, 300) } else { @(2850, 2781, 2700, 2550, 2472, 2400, 2250, 2163, 2100, 1950, 1854, 1800, 1650, 1500, 1400) }
$stepSeconds = 60
"RESULT start $(Stamp) job=$jobName job_id=$jobId card=$cardName grid=[$($locks -join ' ')] machine=$env:COMPUTERNAME app_version=$env:IGNEUM_APP_VERSION"
'RESULT lever voltage: nvidia-smi exposes no voltage offset (NVAPI only); the clock lock (-lgc) moves the card along the driver V/F curve, so the voltage falls with the lock; the power cap (-pl) is the other driver lever and is not moved here'
@ -67,6 +72,9 @@ foreach ($pk in $packOrder) { $d = Join-Path $packs $pk; if (-not (Test-Path $d)
$inst = @("$env:LOCALAPPDATA\Programs\Igneum Miner", "$env:ProgramFiles\Igneum Miner") | Where-Object { Test-Path (Join-Path $_ 'igneum-worker-cuda.exe') } | Select-Object -First 1
if (-not $inst) { 'RESULT error no installed igneum-worker-cuda.exe'; Summary 'failed' @{ error = 'no worker' }; exit 2 }
$exe = Join-Path $inst 'igneum-worker-cuda.exe'
# the v5lock mode runs the v5 kit's own CUDA worker (generator 5 packs: the installed 0.3.20 worker answers "generator 5 is not a generator
# version this worker runs (2, 3 or 4)", the first run of 10:55 UK); its DLLs are the installed app's, copied beside it
if ($v5lock) { $kexe = Join-Path $kit 'bin\windows\igneum-worker-cuda.exe'; if (Test-Path $kexe) { foreach ($dll in (Get-ChildItem (Join-Path $inst '*.dll') -ErrorAction SilentlyContinue)) { if (-not (Test-Path (Join-Path (Split-Path $kexe) $dll.Name))) { Copy-Item $dll.FullName (Split-Path $kexe) -ErrorAction SilentlyContinue } }; $exe = $kexe; "RESULT worker v5lock: the kit's CUDA worker $kexe sha256 $((Get-FileHash -Algorithm SHA256 $kexe).Hash.ToLower())" } else { 'RESULT error the v5 kit has no windows CUDA worker'; Summary 'failed' @{ error = 'no v5 cuda worker' }; exit 2 } }
if ($ca4) {
# the research lane's exe with the race fix (counter-asic-4 after 2d0013d1, 00:46 UTC; the first exe parsed --variant and never applied it:
# every row of the 00:22Z run read "variant base"); the rows carry its variant= and sparse_blocks= fields and any variant_not_installed line

View file

@ -10,6 +10,7 @@
| the red watcher fires on cancelled and timed-out runs too (`ci-red.yml`, `red-watch.mjs`) | The watcher's `if` missing any of failure, cancelled, timed_out, or the conclusion not handed to the record step (the self-test reads the workflow file); the line names the kind: CI red, CI cancelled, CI timed out. | 7 October 2026 |
| gh's active account is the stored Igneum entry (`gh-account-check.sh`, in Igneum's own gh directory `~/.config/gh-igneum` through `gh-env.sh`, never the founder's) | A push or a landing from this Mac while Igneum's gh directory names any other account as active, or none (the refusal names the one step: the founder or main stores the Igneum token there with `GH_CONFIG_DIR=~/.config/gh-igneum gh auth login --with-token`; no lane does); skipped with a line while `github-suspended` stands. RULE: no lane switches gh accounts on this Mac, ever; the second owner's login belongs to other projects and must never touch Igneum; the stored entry's name is in ~/.config/igneum/gh-user, never in the repository. | 7 October 2026, 21:41 UK: a lane switched gh to the other login during the suspension; nobody could say which |
| no landing on the public host while the marker stands (`pre-push.sh` `forgejo_master_frozen`, `merge-to-master.sh` `forgejo_master_refusal`); the hook binds every remote rule to the remote's URL | A push of master to git.igneum.network, or a `--remote` naming it, while `tools/ci/github-suspended` stands: its master is a rewritten copy replaced at cut-over, so the landing would be lost (a branch pushed there for safekeeping passes). Before the fix the hook matched the remote NAME, so `git push origin master` bound neither the GitHub refusal nor the CI rule; the self-test now drives the hook by name through a fixture repo. Also: `gate-manifest-check.sh` and four other pipefail checks no longer pipe a file-sized producer into `grep -q` (GNU sed took SIGPIPE on an early match and the check read it as a missing run line on the Linux runners and boxes); `mirror_master` fast-forwards every box with a build-server file after a landing on ANY remote (before, only a GitHub landing fanned out, so a box landing left build-3 and build-4 at a tip 23 hours old), as a `--no-verify` copy of the master the gate already passed (a stale mirror had re-run the full gate for six minutes per box) | 8 Oct 2026 |
| kill by exact command or pid file (owed as a check) | 6 October 2026, 21:09Z: a Mac-side `pkill -f <log file name>` matched nothing (the log name was a redirect, not part of the command line), the roll-everything script lived on and wiped a box it had been told to hold. Rule: a job is stopped by its pid file (`tools/fleet/fleet-bg.sh start|stop <name>`) or by a pattern anchored on its exact command line (`^python3 -u /root/fleet/in/box-prover.py`), never by a word that may or may not appear in it. The check that flags a `pkill -f`/`pgrep -f` whose literal is a path or a name that never starts a command line is owed to the CI lane |

View file

@ -26,3 +26,5 @@ docs/plans/cryptanalysis
# 8 October 2026: the class v6 research lanes (the hardware future, the rotating-family research): internal research written
# for the founder on the chip model, quoting the operations record; the public text is whatever main lands from the synthesis.
docs/analysis/class-v6
# 8 October 2026: the miner window audit (an internal design record: the founder's order, lane ids, the build plan)
docs/design/app-audit-2026-10-08.md

View file

@ -14,9 +14,13 @@ set -euo pipefail
HERE="$(cd "$(dirname "$0")" && pwd)"
names_in() { grep -E '^[[:space:]]+run "' "$1" | sed -E 's/^[[:space:]]+run "([^"]+)".*/\1/'; }
compare() { # <gate script> <manifest> -> exit 1 with the lines
local gate="$1" manifest="$2" rc=0 n
while IFS= read -r n; do [ -n "$n" ] || continue; names_in "$gate" | grep -qxF -- "$n" || { echo "gate-manifest: listed check has no run line in $(basename "$gate"): $n" >&2; rc=1; }; done < <(grep -vE '^\s*(#|$)' "$manifest")
while IFS= read -r n; do [ -n "$n" ] || continue; grep -qxF -- "$n" "$manifest" || { echo "gate-manifest: run line not in $(basename "$manifest"): $n" >&2; rc=1; }; done < <(names_in "$gate")
local gate="$1" manifest="$2" rc=0 n names
# the names once, matched through a here-string: `names_in | grep -q` under pipefail reads a SIGPIPE on sed (grep -q closing
# the pipe on an early match before sed has written the rest) as "no run line"; GNU sed on the runners and the boxes hit it on
# the first forty names, BSD sed on the Mac never did (8 October 2026, 13:5x UK, a research lane's gate on build-3)
names=$(names_in "$gate")
while IFS= read -r n; do [ -n "$n" ] || continue; grep -qxF -- "$n" <<<"$names" || { echo "gate-manifest: listed check has no run line in $(basename "$gate"): $n" >&2; rc=1; }; done < <(grep -vE '^\s*(#|$)' "$manifest")
while IFS= read -r n; do [ -n "$n" ] || continue; grep -qxF -- "$n" "$manifest" || { echo "gate-manifest: run line not in $(basename "$manifest"): $n" >&2; rc=1; }; done <<<"$names"
return $rc
}
case "${1:-}" in

View file

@ -42,6 +42,14 @@ github_suspended_refusal() { # <remote>: prints the refusal and returns 0 when
echo "merge-to-master: REFUSED. GitHub is unreachable ($(grep -E '^suspended-since' "$SUSPENDED_FILE" | head -1); tools/ci/github-suspended stands): nothing is pushed, fetched or polled there. Land on the box mirror: tools/ci/merge-to-master.sh --remote box (or MERGE_REMOTE=box). Main removes the marker at the cut-over." >&2
return 0
}
forgejo_master_refusal() { # <remote>: prints the refusal and returns 0 when the remote is the public Forgejo host and the marker stands
# (its master is a rewritten copy replaced at cut-over by the rewrite of the box mirror's final tip; main's word, 8 October 2026, 13:34 UK)
local host="${IGNEUM_PUBLIC_GIT_HOST:-git.igneum.network}"
[ -f "$SUSPENDED_FILE" ] || return 1
case "$(git remote get-url "$1" 2>/dev/null)" in *"$host"*) ;; *) return 1 ;; esac
echo "merge-to-master: REFUSED. $host holds a rewritten copy; its master is replaced at cut-over by the rewrite of the box mirror's final tip, so a landing there is lost. Land on the box mirror: tools/ci/merge-to-master.sh --remote box" >&2
return 0
}
CI_STATE="${CI_STATE_CMD:-node tools/ci/ci-state.mjs}" # the self-test swaps in a fake
clock() { TZ=Europe/London date '+%H:%M %Z'; }
@ -81,11 +89,17 @@ master_gate() {
# a4bca198 while GitHub's carried cf7d6ccb, and three branches were cut from the stale tip; the mirrors only ever received what a
# build happened to push). One push per mirror in IGNEUM_MIRRORS (default: both box files), fast-forward only, best effort: a mirror
# that is down prints a line and never fails the landing.
mirror_master() { # <sha>
local sha="$1" m host key="${BS_KEY:-$HOME/.ssh/igneum_ed25519}" list="${IGNEUM_MIRRORS:-}"
if [ -z "$list" ]; then for f in "$HOME/.config/igneum/build-server" "$HOME/.config/igneum/build-server-2"; do [ -s "$f" ] && list="$list $(head -1 "$f" | tr -d '[:space:]'):/srv/igneum.git"; done; fi
mirror_master() { # <sha> [landed-remote-url]: the landed master to every other mirror
local sha="$1" landed="${2:-}" m host key="${BS_KEY:-$HOME/.ssh/igneum_ed25519}" list="${IGNEUM_MIRRORS:-}"
# every box with a build-server file (8 October 2026, 13:5x UK: build-3 and build-4's mirrors sat at 7 October 15:27 with only the first two listed)
if [ -z "$list" ]; then for f in "$HOME/.config/igneum/build-server" "$HOME"/.config/igneum/build-server-[0-9]*; do [ -s "$f" ] && list="$list $(head -1 "$f" | tr -d '[:space:]'):/srv/igneum.git"; done; fi
for m in $list; do
if GIT_SSH_COMMAND="ssh -i $key -o BatchMode=yes -o ConnectTimeout=10" git push -q "$m" "$sha:refs/heads/master" 2>/dev/null; then echo "merge-to-master: mirror $m master -> ${sha:0:8}"
host="${m#*@}"; host="${host%%:*}"; host="${host%%/*}" # build@<ip>:/srv/igneum.git -> <ip>; the landed URL may be ssh://build@<ip>/srv/igneum.git
key="$host"; [ -n "$key" ] || key="${m#file://}" # a bare-path mirror (the self-test) is known by its path
if [ -n "$landed" ]; then case "$landed" in *"$key"*) continue ;; esac; fi # the mirror that took the landing itself (8 October 2026, 14:19 UK: the host:/path form never matched the ssh:// URL)
# --no-verify: this is a copy of a master the gate already passed on landing (the sha is the landed remote's master, read back),
# not a landing; with the hook on, a stale mirror re-ran the full gate for six minutes per box (8 October 2026, 14:0x UK)
if GIT_SSH_COMMAND="ssh -i $key -o BatchMode=yes -o ConnectTimeout=10" git push -q --no-verify "$m" "$sha:refs/heads/master" 2>/dev/null; then echo "merge-to-master: mirror $m master -> ${sha:0:8}"
else echo "merge-to-master: mirror $m did not take master ${sha:0:8} (down, or not a fast-forward); the next landing tries again"; fi
done
}
@ -99,6 +113,11 @@ if [ "$SELF_TEST" = 1 ]; then
case "$out" in *"REFUSED. GitHub is unreachable"*"--remote box"*) ;; *) echo "self-test failed: the refusal did not name the switch: $out"; fails=1 ;; esac
( SUSPENDED_FILE="$d/marker"; github_suspended_refusal box >/dev/null 2>&1 ) && { echo "self-test failed: the box mirror remote was refused under the marker"; fails=1; }
( SUSPENDED_FILE="$d/no-marker"; github_suspended_refusal origin >/dev/null 2>&1 ) && { echo "self-test failed: a GitHub remote was refused without the marker"; fails=1; }
# the public Forgejo host takes no landing while the marker stands; the box mirror does (a fixture repo with both remotes)
mkdir -p "$d/pub" && git -C "$d/pub" init -q && git -C "$d/pub" remote add pub ssh://git@git.igneum.network:2222/igneum-network/igneum.git && git -C "$d/pub" remote add box ssh://build@188.40.146.49/srv/igneum.git
( cd "$d/pub" && SUSPENDED_FILE="$d/marker" forgejo_master_refusal pub >/dev/null 2>&1 ) || { echo "self-test failed: the public host was not refused as a landing target under the marker"; fails=1; }
( cd "$d/pub" && SUSPENDED_FILE="$d/no-marker" forgejo_master_refusal pub >/dev/null 2>&1 ) && { echo "self-test failed: the public host was refused without the marker"; fails=1; }
( cd "$d/pub" && SUSPENDED_FILE="$d/marker" forgejo_master_refusal box >/dev/null 2>&1 ) && { echo "self-test failed: the box mirror was refused as the public host"; fails=1; }
# the fake answers from $d/answer-<sha> (one line per call, consumed top to bottom; the last line repeats) and $d/answer-master
cat > "$fake" <<'FAKE'
#!/usr/bin/env bash
@ -149,6 +168,9 @@ success 4 u push run
git clone -q --bare "$d/src" "$d/mirror.git" && ( cd "$d/mirror.git" && git update-ref refs/heads/master "$(git rev-parse master~1)" )
tip=$(git -C "$d/src" rev-parse master)
out=$( cd "$d/src" && IGNEUM_MIRRORS="$d/mirror.git" mirror_master "$tip" )
grep -qE '^ mirror_master "\$\(git rev-parse "\$REMOTE/master"\)"' "$0" || { echo "self-test failed: the landing path does not fan master out to the mirrors for every remote"; fails=1; }
out2=$( cd "$d/src" && IGNEUM_MIRRORS="$d/mirror.git" mirror_master "$tip" "file://$d/mirror.git" ); case "$out2" in *"mirror"*) echo "self-test failed: the mirror that took the landing was pushed to again: $out2"; fails=1 ;; esac
out3=$( cd "$d/src" && IGNEUM_MIRRORS="build@203.0.113.9:/srv/igneum.git" mirror_master "$tip" "ssh://build@203.0.113.9/srv/igneum.git" ); case "$out3" in *"mirror"*) echo "self-test failed: the landed box in ssh:// form was pushed to again from its host:/path mirror entry: $out3"; fails=1 ;; esac
[ "$(git -C "$d/mirror.git" rev-parse master)" = "$tip" ] || { echo "self-test failed: the mirror was not fast-forwarded to the landed master: $out"; fails=1; }
( cd "$d/src" && git checkout -q -b other master~1 && git -c user.name=t -c user.email=t@t commit -q --allow-empty -m fork ); fork=$(git -C "$d/src" rev-parse other)
out=$( cd "$d/src" && IGNEUM_MIRRORS="$d/mirror.git" mirror_master "$fork" )
@ -161,7 +183,8 @@ success 4 u push run
[ "$fails" = 0 ] && echo "self-test passed: a GitHub remote is refused with exit 2 while the suspension marker stands and a mirror remote is not; the CI rule binds a GitHub remote only; a landed master is fast-forwarded to every mirror and a refused mirror push is a line, not a failure; a green branch run merges; a red one is refused; an unknown read is waited through and refused only at the deadline; a queued run is waited for with the clock; an unrun branch is pushed once and then waited for; a red master refuses every merge but the declared fix"
exit $fails
fi
if [ "$SELF_TEST" != 1 ] && github_suspended_refusal "$REMOTE"; then exit 2; fi # before any gh or git call (the self-test exercises the function itself)
if [ "$SELF_TEST" != 1 ] && github_suspended_refusal "$REMOTE"; then exit 2; fi
if [ "$SELF_TEST" != 1 ] && forgejo_master_refusal "$REMOTE"; then exit 2; fi # the public host takes no landing while the marker stands # before any gh or git call (the self-test exercises the function itself)
[ -z "$(git status --porcelain --untracked-files=no)" ] || { echo "merge-to-master: the tree has uncommitted tracked changes; commit first" >&2; exit 1; }
bash tools/ci/gh-account-check.sh || exit 1 # gh's active account on this Mac is the stored Igneum entry (main's rule, 7 October 2026, 21:5x UK)
SHA=$(git rev-parse "$BRANCH"); G=$(cd "$(git rev-parse --git-common-dir)" && pwd -P)
@ -189,7 +212,9 @@ for i in $(seq 1 "$TRIES"); do
if ( cd "$W" && git push -q "$REMOTE" HEAD:master ); then # on a GitHub remote the hook asks ci-state about ${SHA:0:8} once more
git worktree remove --force "$W"; git fetch -q "$REMOTE" master
echo "merge-to-master: pushed on try $i: $REMOTE/master $(git log -1 --format='%h %ci' "$REMOTE/master") $(TZ=Europe/London date '+%H:%M %Z')"
remote_is_github && mirror_master "$(git rev-parse "$REMOTE/master")"; exit 0
# the landed master to every other mirror, whichever remote took the landing (8 October 2026, 14:0x UK: a box landing never fanned
# out, so build-3 and build-4 cut branches from a tip 23 hours old)
mirror_master "$(git rev-parse "$REMOTE/master")" "$(git remote get-url "$REMOTE" 2>/dev/null)"; exit 0
fi
echo "merge-to-master: try $i: the push was rejected (master moved or the hook was red); again"
else

View file

@ -44,6 +44,6 @@ n=$(grep -c 'deadline.AddMinutes(-4)' "$f" || true)
[ "$n" -ge 2 ] || { echo "pc1-step-budget: $f guards fewer than two places with the four-minute reserve (\$deadline.AddMinutes(-4): the step loop and the lock loop)"; bad=1; }
grep -q 'lastMhs\[\$pk\] \* 1e6' "$f" || { echo "pc1-step-budget: $f does not size the batch count from the last rate read (\$lastMhs)"; bad=1; }
grep -q 'script:lastMhs\[\$pk\] = \$b.mhs' "$f" || { echo "pc1-step-budget: $f never records the last rate per pack"; bad=1; }
if grep -vE '^\s*#' "$f" | grep -qE 'if \(\(Get-Date\) -gt \$deadline\)'; then echo "pc1-step-budget: $f still guards a step with the bare deadline (no reserve for the restore)"; bad=1; fi
if grep -qE 'if \(\(Get-Date\) -gt \$deadline\)' <<<"$(grep -vE '^\s*#' "$f")"; then echo "pc1-step-budget: $f still guards a step with the bare deadline (no reserve for the restore)"; bad=1; fi
[ $bad = 0 ] && echo "pc1-step-budget: the efficiency pass keeps four minutes for its restore and sizes each step from the last rate"
exit $bad

View file

@ -19,7 +19,7 @@ cd "$(dirname "$0")/../.."
check_file() {
local f="$1" bad=0
# rule 2: any request to api/cards outside a comment (Invoke-RestMethod, Invoke-WebRequest, curl, fetch: the shape is the URL)
if grep -vE '^\s*#' "$f" | grep -qE "api/cards"; then
if grep -qE "api/cards" <<<"$(grep -vE '^\s*#' "$f")"; then
echo "playbook-quit: $f sends a request to the installed app's api/cards (a script never switches cards; ask the runner: publish-jobs.sh add --kind run --cards-off <key,key>)"; bad=1
fi
# rule 3 (STANDING RULE, the founder through main, 7 October 2026, 18:5x UTC): no PC job raises a UAC prompt or needs a click, ever.
@ -27,11 +27,11 @@ check_file() {
# Power Helper task (Start-ScheduledTask by the owning user, commands through its cmd.txt: app/igneum-app/src/powertask.rs).
# publish-jobs.sh refuses --elevated for the same reason (the 18:27Z job run-ca3-pc1-v4-eff-5090-20261007: exit 251 after
# two minutes waiting for a click).
if grep -vE '^\s*#' "$f" | grep -qiE -e "(-Verb +['\"]?RunAs)|(\brunas(\.exe)? +/user)"; then
if grep -qiE -e "(-Verb +['\"]?RunAs)|(\brunas(\.exe)? +/user)" <<<"$(grep -vE '^\s*#' "$f")"; then
echo "playbook-quit: $f raises an administrator prompt (-Verb RunAs or runas): no PC job prompts; use the Igneum Power Helper task (app/igneum-app/src/powertask.rs)"; bad=1
fi
grep -qE "api/(quit|pause|resume)" "$f" || return $bad
if grep -vE '^\s*#' "$f" | grep -qE "igneum\\\\app\\\\app\.url|igneum/app/app\.url|Application Support/Igneum/app/app\.url|IGNEUM_APP_DIR[^\n]*app\.url|\\\$appDir[^\n]*'app\.url'"; then
if grep -qE "igneum\\\\app\\\\app\.url|igneum/app/app\.url|Application Support/Igneum/app/app\.url|IGNEUM_APP_DIR[^\n]*app\.url|\\\$appDir[^\n]*'app\.url'" <<<"$(grep -vE '^\s*#' "$f")"; then
echo "playbook-quit: $f reads the installed app's URL file and sends quit, pause or resume to it (a job may only quit an engine it started: its own scratch URL file)"; bad=1
fi
return $bad

View file

@ -26,7 +26,9 @@ cd "$(git rev-parse --show-toplevel)" || exit 1
# and fire this hook again inside the fixture: the first master push through the gate died that way (6 October 2026).
unset GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE GIT_PREFIX GIT_COMMON_DIR GIT_OBJECT_DIRECTORY GIT_ALTERNATE_OBJECT_DIRECTORIES GIT_QUARANTINE_PATH GIT_PUSH_OPTION_COUNT
MODE="${1:-local}"; MODE="${MODE#--}"
GATE_ROOT="$(pwd -P)"
GATE_ROOT="$(cd "$(dirname "$0")/../.." && pwd -P)" # the repository this gate belongs to: its helpers (tools/ci/*.sh) are read from here even when the hook
# is driven from another directory (the self-test's fixture repositories, 8 October 2026); the tree under
# test stays the working directory
# Kill-proof by rule (8 October 2026, 12:4x UK: twice in a day a gate died to signal 15 from another lane's kill pattern): every gate run
# carries a unique process title (igneum-gate:<pid>-<start>, set by re-exec through `exec -a`) and writes its pid, start and mode to
# .git/igneum-gate.pid under the worktree (removed at exit); a gate is stopped by that file only (`kill "$(cut -d' ' -f1 <file>)"`), and
@ -227,6 +229,20 @@ github_suspended() { # <remote url>: 0 with a printed refusal when the marker
echo "pre-push gate: REFUSED. GitHub is unreachable ($(grep -E '^suspended-since' "$f" | head -1); tools/ci/github-suspended stands): no push, fetch or poll there. Push to the box mirror (git push box ...; landings: tools/ci/merge-to-master.sh --remote box). Main removes the marker at the cut-over." >&2
return 0
}
forgejo_master_frozen() { # <remote url> <hook ref lines>: 0 with a printed refusal when the marker stands, the remote is the public
# Forgejo host and a ref line lands master there. Forgejo's master is a rewritten copy that the cut-over replaces with the rewrite
# of the box mirror's final tip (main's word through the coordinator, 8 October 2026, 13:34 UK): a branch pushed there for
# safekeeping is fine, a landing on its master is lost at cut-over. The marker goes at cut-over, and the refusal with it.
local f="${IGNEUM_GITHUB_SUSPENDED_FILE:-$GATE_ROOT/tools/ci/github-suspended}" host="${IGNEUM_PUBLIC_GIT_HOST:-git.igneum.network}" lref lsha rref rsha
[ -f "$f" ] || return 1
case "${1:-}" in *"$host"*) ;; *) return 1 ;; esac
while read -r lref lsha rref rsha; do
[ "$rref" = refs/heads/master ] && [ -n "$lsha" ] && [ "$lsha" != 0000000000000000000000000000000000000000 ] || continue
echo "pre-push gate: REFUSED. $host holds a rewritten copy; its master is replaced at cut-over by the rewrite of the box mirror's final tip, so a landing there is lost. Land on the box mirror (tools/ci/merge-to-master.sh --remote box); a branch may go to $host for safekeeping." >&2
return 0
done <<<"${2:-}"
return 1
}
master_rule_binds() { # <remote url>: 0 when the CI rule applies to this push (a GitHub remote, no declared exception), 1 with a printed line otherwise
local url="${1:-}"
if [ -n "${IGNEUM_MASTER_EXCEPTION:-}" ]; then echo " EXCEPTION to the CI rule for this push, declared by main: $IGNEUM_MASTER_EXCEPTION (the local gate is the verdict)"; return 1; fi
@ -323,8 +339,29 @@ FAKEGH
case "$out" in *"REFUSED. GitHub is unreachable"*"--remote box"*) ;; *) echo "self-test failed: the refusal did not name the switch: $out"; fails=1 ;; esac
( IGNEUM_GITHUB_SUSPENDED_FILE="$mk" github_suspended ssh://build@188.40.146.49/srv/igneum.git >/dev/null 2>&1 ) && { echo "self-test failed: a mirror remote was refused under the marker"; fails=1; }
( IGNEUM_GITHUB_SUSPENDED_FILE="$mk.none" github_suspended https://github.com/x/y.git >/dev/null 2>&1 ) && { echo "self-test failed: a GitHub remote was refused without the marker"; fails=1; }
grep -qE 'github_suspended "\$URL" && exit 1' "$0" || { echo "self-test failed: the hook does not refuse a GitHub push under the marker"; fails=1; }
grep -qE 'master_rule_binds "\$URL"' "$0" || { echo "self-test failed: the hook does not bind the CI rule by the remote URL"; fails=1; }
fl=$(printf 'refs/heads/master %s refs/heads/master %s\n' 1111111111111111111111111111111111111111 2222222222222222222222222222222222222222)
bl=$(printf 'refs/heads/x %s refs/heads/x %s\n' 1111111111111111111111111111111111111111 2222222222222222222222222222222222222222)
out=$(IGNEUM_GITHUB_SUSPENDED_FILE="$mk" forgejo_master_frozen ssh://git@git.igneum.network:2222/igneum-network/igneum.git "$fl" 2>&1) || { echo "self-test failed: a landing on the public host's master was not refused under the marker"; fails=1; }
case "$out" in *"REFUSED"*"--remote box"*) ;; *) echo "self-test failed: the public-host refusal did not name the box route: $out"; fails=1 ;; esac
( IGNEUM_GITHUB_SUSPENDED_FILE="$mk" forgejo_master_frozen ssh://git@git.igneum.network:2222/igneum-network/igneum.git "$bl" >/dev/null 2>&1 ) && { echo "self-test failed: a branch pushed to the public host for safekeeping was refused"; fails=1; }
( IGNEUM_GITHUB_SUSPENDED_FILE="$mk.none" forgejo_master_frozen ssh://git@git.igneum.network:2222/igneum-network/igneum.git "$fl" >/dev/null 2>&1 ) && { echo "self-test failed: the public host's master was refused without the marker"; fails=1; }
( IGNEUM_GITHUB_SUSPENDED_FILE="$mk" forgejo_master_frozen ssh://build@188.40.146.49/srv/igneum.git "$fl" >/dev/null 2>&1 ) && { echo "self-test failed: a landing on the box mirror's master was refused as the public host"; fails=1; }
grep -qE 'forgejo_master_frozen "\$URL" "\$REFS" && exit 1' "$0" || { echo "self-test failed: the hook does not refuse a landing on the public host's master under the marker"; fails=1; }
# the hook itself, driven by remote NAME as git drives it, in a fixture repo: a GitHub name and the public host's name are refused
# before any check runs; the box mirror's name is not (it reaches the gate, which is cut short by an empty ref list)
hx=$(mktemp -d); git -C "$hx" init -q && git -C "$hx" -c user.name=t -c user.email=t@t commit -q --allow-empty -m one
git -C "$hx" remote add origin https://github.com/igneum-network/igneum.git; git -C "$hx" remote add pub ssh://git@git.igneum.network:2222/igneum-network/igneum.git; git -C "$hx" remote add box ssh://build@188.40.146.49/srv/igneum.git
hsha=$(git -C "$hx" rev-parse HEAD)
out=$(cd "$hx" && printf 'refs/heads/master %s refs/heads/master %s\n' "$hsha" "$hsha" | IGNEUM_GITHUB_SUSPENDED_FILE="$mk" IGNEUM_GATE_NO_TITLE=1 bash "$GATE_ROOT/tools/ci/pre-push.sh" --hook origin 2>&1); rc=$?
{ [ "$rc" != 0 ] && case "$out" in *"REFUSED. GitHub is unreachable"*) true ;; *) false ;; esac; } || { echo "self-test failed: the hook let a push to the GitHub remote by NAME through under the marker (rc=$rc): $(printf '%s' "$out" | tail -2)"; fails=1; }
out=$(cd "$hx" && printf 'refs/heads/master %s refs/heads/master %s\n' "$hsha" "$hsha" | IGNEUM_GITHUB_SUSPENDED_FILE="$mk" IGNEUM_GATE_NO_TITLE=1 bash "$GATE_ROOT/tools/ci/pre-push.sh" --hook pub ssh://git@git.igneum.network:2222/igneum-network/igneum.git 2>&1); rc=$?
{ [ "$rc" != 0 ] && case "$out" in *"REFUSED. git.igneum.network"*) true ;; *) false ;; esac; } || { echo "self-test failed: the hook let a landing on the public host's master through under the marker (rc=$rc): $(printf '%s' "$out" | tail -2)"; fails=1; }
out=$(cd "$hx" && printf 'refs/heads/x %s refs/heads/x %s\n' "$hsha" "$hsha" | IGNEUM_GITHUB_SUSPENDED_FILE="$mk" IGNEUM_GATE_NO_TITLE=1 bash "$GATE_ROOT/tools/ci/pre-push.sh" --hook pub 2>&1); rc=$?
case "$out" in *"REFUSED"*) echo "self-test failed: a branch pushed to the public host by name for safekeeping was refused: $(printf '%s' "$out" | head -3)"; fails=1 ;; esac
rm -rf "$hx"
rm -f "$mk"
grep -qE 'github_suspended "\$\{2:-\}" && exit 1' "$0" || { echo "self-test failed: the hook does not refuse a GitHub push under the marker"; fails=1; }
master_rule_binds build@188.40.146.49:/srv/igneum.git >/dev/null && { echo "self-test failed: the CI rule bound a box mirror remote"; fails=1; }
( IGNEUM_MASTER_EXCEPTION="main, 7 Oct 2026 19:5x UK: GitHub suspended" master_rule_binds https://github.com/x/y.git >/dev/null ) && { echo "self-test failed: a declared exception did not lift the CI rule"; fails=1; }
out=$(IGNEUM_MASTER_EXCEPTION="ruling text" master_rule_binds https://github.com/x/y.git); case "$out" in *"EXCEPTION"*"ruling text"*) ;; *) echo "self-test failed: the exception was not printed with its ruling: $out"; fails=1 ;; esac
@ -335,8 +372,13 @@ FAKEGH
hook)
# gh's active account on this Mac is the stored Igneum entry, before any push (main's rule, 7 October 2026, 21:5x UK; tools/ci/gh-account-check.sh)
bash "$GATE_ROOT/tools/ci/gh-account-check.sh" || exit 1
github_suspended "${2:-}" && exit 1 # the suspension marker: no push to GitHub at all (8 October 2026, 03:39 UK: 21 polls of a 403 before a kill by pid)
# git hands the hook "<remote name> <url>"; the remote checks below read the URL, never the name (8 October 2026, 13:5x UK: with
# the name, "origin" matched no *github.com* and the GitHub refusal and the CI rule never bound a named push). A push to a bare
# URL arrives with the URL in both places; a name alone resolves through git remote get-url.
URL="${3:-}"; [ -n "$URL" ] || URL="$(git remote get-url "${2:-}" 2>/dev/null || printf '%s' "${2:-}")"
github_suspended "$URL" && exit 1 # the suspension marker: no push to GitHub at all (8 October 2026, 03:39 UK: 21 polls of a 403 before a kill by pid)
REFS="$(cat)"; which="$(printf '%s\n' "$REFS" | gated_refs)"
forgejo_master_frozen "$URL" "$REFS" && exit 1 # the public host's master takes no landing while the marker stands (8 October 2026, 13:34 UK)
if [ "$which" = full ]; then
# a merge of a green-stamped branch onto the exact remote tip goes through on the light gate (CI runs the full one)
verdict=""; while read -r lref lsha rref rsha; do case "$rref" in refs/heads/master|refs/heads/release-*) verdict=$(deferred_merge "$lsha" "$rsha"); break ;; esac; done <<<"$REFS"
@ -345,7 +387,7 @@ FAKEGH
# takes the local gate as before. IGNEUM_MASTER_EXCEPTION="<main's ruling>" lifts the CI rule for one push and is printed with
# the push (7 October 2026, 19:5x UK: the GitHub account suspended, lanes landing on the box mirror's master by main's ruling,
# the box gate stamp as the verdict; GitHub gets the fast-forward when it answers again).
if master_rule_binds "${2:-}"; then
if master_rule_binds "$URL"; then
while read -r lref lsha rref rsha; do
if [ "$rref" = refs/heads/master ] && [ "$lsha" != 0000000000000000000000000000000000000000 ]; then master_ci_ok "$lsha" "$rsha" || exit 1; fi
done <<<"$REFS"

View file

@ -20,10 +20,10 @@ while IFS= read -r f; do
if ! grep -qE 'taskkill /T /F' "$f"; then
echo "second-engine: $f starts an engine without ending its process tree (taskkill /T /F) at the end"; fail=1
fi
if grep -qE 'settings\.json|\.json' "$f" && grep -vE '^\s*#' "$f" | grep -qE 'Set-Content[^\n]*-Encoding +utf8'; then
if grep -qE 'settings\.json|\.json' "$f" && grep -qE 'Set-Content[^\n]*-Encoding +utf8' <<<"$(grep -vE '^\s*#' "$f")"; then
echo "second-engine: $f writes JSON with Set-Content -Encoding utf8 (a BOM the engine refuses: the copy read as defaults, no payout address, nothing mined); use [IO.File]::WriteAllText with UTF8Encoding(\$false)"; fail=1
fi
if grep -vE '^\s*#' "$f" | grep -E 'ConvertTo-Json' | grep -qE 'settings\.json|Set-Content|WriteAllText|Out-File'; then
if grep -qE 'settings\.json|Set-Content|WriteAllText|Out-File' <<<"$(grep -vE '^\s*#' "$f" | grep -E 'ConvertTo-Json' || true)"; then
echo "second-engine: $f rewrites settings.json through ConvertTo-Json (a lossy round trip: big integers become doubles and the engine reads the whole file as defaults; run 4, 6 October 2026); copy the file verbatim, the engine applies Settings::for_measurement under --sweep"; fail=1
fi
if ! grep -qE "IGNEUM_APP_NO_OTA *= *'1'" "$f"; then