Commit graph

1599 commits

Author SHA1 Message Date
igneum-labs
c686d8fc2e Pool daemon: the confirmation walk on its own gRPC connection, never restarted from the pruning point, bounded per tick
7 October 2026, 06:01Z and 06:12:55Z on pool-1: confirm_loop restarted its chain walk from the pruning point on any
failed getVirtualChainFromBlock and then fetched every chain block since (about 120,000) over the one connection the
templates used; one timed-out request under four parallel template fetches started it, every template request after it
timed out, no job was issued, 105 blocks on stale templates were orphans. Now: a second GrpcClient (pool.walker) for the
walk and the network numbers; a failed chain call keeps its cursor (the sink only when the node no longer knows it;
cursor_after_failure, node::walk_tests); at most 600 chain blocks per tick with a line saying so; a start with pending
blocks walks from the sink and says that older ones resolve by the orphan rule. docs/plans/pool.md section 9.2: the
re-run's record (the class question closed on pm-1 and pm-2, 71,240 shares, 0 mismatches), the cause, what stays open.
Suite 24 of 24 on igneum-build-1. Protocol and API unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 11:42:50 +00:00
igneum-labs
d1f146af12 Pool daemon: --template-timeout-s (default 20, was a fixed 5 s): pool-1's node builds a template in 1.6 to 1.8 s under load, four parallel member fetches overran 5 s and no job was issued for 7 minutes (7 October 2026, 06:08Z)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 11:42:50 +00:00
igneum-labs
9473e01320 Pool daemon: refuses to start half-alive (listeners bound first, exit 2; a node that answers no template, exit 3; a STATUS line every 30 s)
The fleet agent's row from the 6 October night: the daemon ran 20 minutes as a process serving nothing while its node
answered no template and its member port had been held. Now main binds the member and API listeners before anything
else (server::bind_listener; a failure is "POOL NOT STARTED: cannot bind the members listener on <addr>: <os error>",
exit 2), probes the node for a template with pow_epoch, retried for --node-wait-secs (default 60) with a line per
attempt, else exit 3, and prints a STATUS line every 30 s (members, jobs issued, shares, blocks, template failures, the
node's state: ok, NODE NOT ANSWERING, NO TEMPLATE YET). fetch_job counts template failures and the last success.
Test server::bind_tests: a held port is refused with the address in the message, the freed port binds. Suite 23 of 23
on igneum-build-1. Protocol and API unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 11:42:50 +00:00
igneum-labs
dfa404b304 release-0.3.20 plan: cards_leave_off in (918cd15a), the third app gate, the reliability lane's hashes named
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 11:32:39 +00:00
igneum-labs
918cd15a1d Remote jobs: cards_leave_off, a run job's --cards-off cards restored as OFF on any exit (persisted by the app's own card path)
The way to hold a card out of mining past a job without a script on api/cards (the 6 October rule): the runner's hold
is built with enabled=false (identities and cap kept), the report line says LEFT OFF, publish-jobs.sh carries
--cards-leave-off. For the Arc B580 on PC 1 while its worker fix rides to the shipped app. Test:
cards_leave_off_restores_the_card_as_off_with_its_settings_kept (igneum-app 157 of 157 on the box).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 9e794503d2e9689ae3a0996e703cb97ea6d95cef)
2026-10-07 11:31:55 +00:00
igneum-labs
6054cf7a5c release-0.3.20 plan: main's hold for the isSynced fix (16:00 UK checkpoint)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 11:29:39 +00:00
igneum-labs
85729b4f2c release-0.3.20 plan: the app gate green twice on the box, the push
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 11:28:48 +00:00
igneum-labs
509b838631 release-0.3.20 plan: the Arc rotr fix and the Intel app files are in (bench d numbers, the two hashes, the box tests)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 11:25:31 +00:00
igneum-labs
99a1268b83 Intel Arc in the app (0.3.20): vendor intel from the OpenCL vendor string and the Windows name, the INTEL badge and its token, the no-cap row naming IGCL, the measure-only tune words, the view test and the ui-mock scenario (the six app files of intel-arc 18453bb1, applied as its own diff; the test's prove sentence in this tree's wording)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 11:25:05 +00:00
igneum-labs
6f011e2aa3 OpenCL worker: on an Intel platform rotr_var is rewritten to the shift form before the build (the Intel rotate fold, the Arc B580 bisect of 7 October 2026)
Intel's compiler turns rotate(x, (0u - n) & 31u) into a rotate LEFT by n: lane 0's register trace on the B580 diverged
at instruction 6 of iteration 0 (rotr) and nowhere before, in both exchange modes, with every other family and the
dataset kernels bit-exact. proto-opencl/intel_rotr.h rewrites the one helper line when the device's vendor or
platform string holds Intel (host.c's buildProgram and the prepare path), no other vendor sees a change, no pack or
consensus text moves. proto-opencl/test_intel_rotr.c (the pre-push gate runs it) feeds the line through the rewrite
under Intel, AMD and NVIDIA strings and asserts the outputs.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 26e135a362718a68a842da59080b43e93afd9dc2)
2026-10-07 11:23:55 +00:00
igneum-labs
9847bac5d9 release-0.3.20 plan: the app side assembled (the picks, the five unions, the rebuilt signer, the box UI tests), the isSynced hold, main's Arc rotr_var order, the fleet's case timing
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 11:19:45 +00:00
igneum-labs
1e933dccdb ember-heat: the gate reader, the PC 1 four-hour runbook, the plan and the light and dark captures
tools/heat-gate.mjs reads the HEAT lines of an app log and passes a hold within 1 degree for 4 hours with the hash
following the slice; its self-test fires on a known hold, a drift, a hash through the rest, a short log, an empty log
and a log without readings, and sits on the one gate beside heat-region.test.mjs. docs/plans/ember-heat.md carries
the words, the loop, the sources, the per-tier table and the runbook for the project lead's desk (this lane never touches PC 1).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 0d5fc6d258dee4774ebe7ea760736c9f05026d06)
2026-10-07 10:50:23 +00:00
igneum-labs
2bd069eb53 ember-heat (0.3.19): the region and price prompt, the heat cards and lines, the cost-against-rent row
First run gains step 2 of 3 (the region list, the price per kWh prefilled from the public table and typed, never
fetched, the restricted line for Russia's regions and China from future.md 4.4 and 8.3 with the standing sentence);
Settings gains Electricity and Heat mode; the Cards strip and every row's Ember line show the duty and the heat in
watts; a resting card, the pill and the big button say heat mode; Earnings gains the miner's cost per MH/s-hour at
their price beside the bench log's measured rental rate with the verdict. The money symbol follows the region.
heat-region.test.mjs checks the Russian entry, the bench-log rate and the words; the mock gains heat and heat-rest.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit e529b93249)
2026-10-07 10:50:05 +00:00
igneum-labs
ac5863d49b ember-heat (0.3.19): heat mode in the engine, the loop, the rest and the release (mission item 7)
Ember holds a room temperature or a schedule and the hash follows the duty cycle: the miners run for a share of
every 10-minute period and stop for the rest (src/heat.rs, the PI loop decided once per period; engine.rs tick_heat,
heat_rest and heat_release the way a remote job holds the cards). The temperature source is a typed reading (fresh
two hours) or the coolest card's sensor after 3 minutes of rest with the cooling tail taken off by its slope; no
hardware the app does not have. Settings carry the region, the switch, the set point, the schedule with the window's
clock offset, the typed reading and the learned idle offset; state.heat carries the phase, the duty, the watts and
the one line; POST /api/heat and /api/region. One HEAT line in the log every 30 s for the gate reader. 8 tests with
a model room: a typed reading and the card sensor alone each hold within a degree for four hours.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 345ab910d0)
2026-10-07 10:49:50 +00:00
igneum-labs
503cc1004a ui-ota: the publish order rule in the plan (1.0.1 with min_engine 0.3.20 only after 0.3.20 is on the manifest)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit ee09ae8b633206c8a7ab438eb4b0ee57362de000)
2026-10-07 10:44:51 +00:00
igneum-labs
f80359635b ui-ota: the publisher (tools/ui-ota/publish.mjs), publish-manifest.sh --ui and --no-ui, the plan with the security notes
publish.mjs packs the fifteen served files with one fixed mtime (reproducible; the self-test checks it), hashes, signs
the entry through igneum-ota-sign sign-ui with the key in ~/.config/igneum (never read or printed here), copies the
bundle into the folder's ui/ and hands ui.json to publish-manifest.sh --ui, the one writer of the signed manifest,
which verifies the entry and the bundle's hash before signing; --dry-run writes nothing, --verify reads the live
manifest back against dl/<token>/ui and dl/public/ui; --no-ui withdraws the channel. Both self-tests sit on the one
gate. docs/plans/ui-ota.md: the shape, the engine, the security notes, the operator recipe, the tests, per tier.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit a1d6eecb33)
2026-10-07 10:44:51 +00:00
igneum-labs
f44698ced8 ui-ota (0.3.20): Settings > Interface, the health ping, the first-paint error and the gentle reload
"Interface <version>, over the air, <date>" or "built in", with the help line for pending, refused, held back and
skipped; the "Use the built-in interface" switch (POST /api/ui/builtin). The page posts /api/ui/health once after its
first paint, or the first script error it catches before that; when the served interface changes under it, the page
reloads itself only when idle (no input focused, no sheet or update card open, on the dashboard). ui-ota.test.mjs
covers the words, the reload rule, the ping and that the page loads no remote script.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 36306fe901)
2026-10-07 10:43:52 +00:00
igneum-labs
35342ad654 ui-ota (0.3.20): the manifest's interface channel and the engine that swaps a signed dashboard bundle in
The signed manifest gains a "ui" object {version, sha256, size, url, min_engine, signature}; the entry's own Ed25519
signature (the release key, manifest::ui_sign_bytes) and the manifest's cover it. src/uiota.rs: the hourly check hands
the entry over; a bundle for this engine is downloaded, checked (size, sha256, signature), unpacked next to the current
one and swapped by an atomic pointer; the server serves the bundle's fixed file names in place of the embedded ones;
the first page load starts a 10 s wait for the page's health ping, and silence, a first-paint error, a missing
index.html or a renamed bundle rolls back to the embedded interface and marks the version bad for good. No "ui"
object retires the bundle (the kill switch). settings.ui_builtin and state.ui carry Settings > Interface.
igneum-ota-sign gains sign-ui and verify-ui. Tests: a good bundle applies, a bad signature is refused, a too-new
min_engine is ignored, a broken bundle rolls back, every bad manifest field fails.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit fb029bcb64)
2026-10-07 10:43:51 +00:00
igneum-labs
dc7d24f448 miner-ui-5: u15 and u16, the chain card at 390 on live-dag.js 2.0.2 (narrow), dark and light
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit a2292f8c99)
2026-10-07 10:43:51 +00:00
igneum-labs
757d4693d5 miner-ui-5: live-dag.js 2.0.2 (master 86113b40, byte-identical), fps 60 and narrow on the phone-width card, four captures reshot
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 6ba028f725)
2026-10-07 10:43:51 +00:00
igneum-labs
08ec90d96d release 0.3.20 plan: the one-off cards exception on PC 1; the signed cards job kind for 0.3.20
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 10:42:43 +00:00
igneum-labs
348aeac3fc release 0.3.20 plan: PC 1's template path, the two app faults, the identity finding withdrawn, the weight-table cache
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 10:42:30 +00:00
igneum-labs
5c3499d395 release 0.3.20 plan: main's call on miner-reliability
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 10:37:27 +00:00
igneum-labs
86ec04d5b2 release 0.3.20 plan: the canary synced with the IBD-end line; ui-ota and ember-heat taken; the prover identity rule
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 10:36:19 +00:00
igneum-labs
0919e40aca release 0.3.20 plan: the listener watchdog, igneum-pow 8c728ca3, the observer methods
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 10:18:43 +00:00
igneum-labs
2e46c737de release 0.3.20 plan: the tree as of 10:2xZ (node side to come, ember-heat and ui-ota, N10, the Mac rule)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 10:17:12 +00:00
igneum-labs
161a68a748 ledger N7: the second caller (the prover loop, rpc.rs:808) and the whole-class gate; the macOS listener shape
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 10:16:16 +00:00
igneum-labs
43aa5fa651 0.3.20: this feature tree renumbered (0.3.19 is the app-only miner-ui-5 cut); plan moved to release-0.3.20.md
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 09:35:42 +00:00
igneum-labs
39d9edd67c prover loop: no records-indexing poll until the node's exec follower holds a record (ledger N7, PC 1 on 0.3.18)
The 0.3.18 clock-sample gate stopped one caller; the prover's first igneum_getAssignedShards after the node reads synced killed PC 1's 0.3.17 node the same way (rpc.rs:808, records[1..=0] on an empty vector) because its follower loads after the sync flag. The loop now waits on igneum_getExecStatus's executedTipHash, the same gate.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 09:34:08 +00:00
igneum-labs
3d43618098 release 0.3.19 plan: miner-ui-5 is the app (gate green); the prover pair handed over and verified, the CI check
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 09:26:56 +00:00
igneum-labs
046be60406 release 0.3.19 plan: the M20 witness test red under the igneum-pow feature (coverage note)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 09:12:49 +00:00
igneum-labs
257922f5de miner-ui-5: u04 and u14 reshot on live-dag.js 2.0.1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 768694d22c)
2026-10-07 09:12:43 +00:00
igneum-labs
d450629b51 miner-ui-5: live-dag.js 2.0.1 (the site lane's real-data options, byte-identical), window 60 on both scenes
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 99e474ea27)
2026-10-07 09:12:43 +00:00
igneum-labs
2e3575f0d1 miner-ui-5: the plan, the captures, the first-share runbook for the shipper, the Discord rung shapes (not posted)
docs/plans/miner-ui-5.md (what is built, gate results, owed, the RPC fields the node does not expose yet, what the
site lane takes); docs/plans/miner-ui-5-shots/ (light and dark at 1440 and 390, the saved block card PNG);
docs/plans/miner-ui-5-first-share-runbook.md; docs/community/discord/ladder.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit edb5b440d7)
2026-10-07 09:12:43 +00:00
igneum-labs
4c20047632 miner-ui-5 (0.3.19): the ladder on every page, the count-up, the block card, Earnings in IGN first, EMBER 02 scene
View: poisson, ignPerDay, ladderRungs (every threshold from the node's params: dust, weightWindow, presenceWindow),
blockCard, earningsLines (IGN first, the typed price never fetched, the share and rank, IGN per kWh), cardIgnDay,
timeline, profileWords; FIELDS names every number's RPC field for the title on hover. Overview: the Poisson
count-up until the first block, the block card in place with Save the card (a canvas PNG, no network call), Copy the
link and the explorer, the ladder strip. Earnings: the six lines, the ladder card, Your first hour. Prove: the shard
card. Cards: IGN a day per card. Settings: Make my page public. The chain scene is the site lane's EMBER 02 pack
(live-dag.js and proof-core.js byte-identical): the compact card fed by the page's own api/live read, Inspect opens
the full scene with the block inspector in the site's words. ui-mock: scenarios firstwait, firstblock, ladder,
api/ladder, api/card. view.test.mjs: a Devnet 2 key walks every rung; 47 UI tests.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 552c35ed66)
2026-10-07 09:12:43 +00:00
igneum-labs
7af60bb8ee miner-ui-5 (0.3.19): the ladder's engine half: ladder.json, api/ladder chain facts, the block card's PNG
src/ladder.rs: this machine's record (first block by card, hash joined to the miner's ACCEPTED line by nonce from the
node's PoW accepted line, blocks per UTC day, VOTE and LOCK lines as the signing record and streak, paid shards, the
milestone at 1, 100, 1,000, every 10,000th and the first block of a new card, the first-hour marks); persisted, in
api/state.ladder. src/chainfacts.rs: GET /api/ladder, getFinalityWeights through the node's EVM port when it answers
igneum_getFinalityWeights (owed), else the observer's relay plus /api/stats; this machine's keys ranked; the source
named. src/card.rs and POST /api/card: the page's 1200x630 PNG written under <data root>/cards/ and revealed.
settings.profile_public behind api/settings. Hooks in engine.rs (block, node line, vote, lock, synced, mining) and
prover.rs (paid shard). Box: 190 + 27 + 8 tests.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit aed171cdd1)
2026-10-07 09:12:43 +00:00
igneum-labs
b94dc0833b CI: the prover pair is built from the pinned node's exec types (prover-pair-check, in pre-push)
The fleet's 14 standing provers cut a different state root from the 0.3.17 node on every segment because their pair came from another tree (7 October 2026). The prover depends on vendor/igneum-node-exec's evm-types; this check compares that tree with the evm-types tree of the commit in packaging/windows/node-source.pin.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 09:10:31 +00:00
igneum-labs
2095164df9 release 0.3.19 plan: aea0ca5c (the proof archive) past the pin; the pin stays at dc141409
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 09:05:17 +00:00
igneum-labs
2f7ae702fb release 0.3.19 plan: the signing step's names
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:57:32 +00:00
igneum-labs
bc719076f4 release 0.3.19 plan: owed to 0.4.0 (the signing step, income tiers)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:57:10 +00:00
igneum-labs
e86fd6e00a release 0.3.19 plan: the canary on dc141409 started, its clock
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:52:23 +00:00
igneum-labs
ea3d1004f3 release 0.3.19 plan: the native build on dc141409, canary GO
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:51:37 +00:00
igneum-labs
a16bab2ad8 release 0.3.19 plan: the dc141409 pairs held
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:50:51 +00:00
igneum-labs
4a92e3350e release 0.3.19 plan: the pin dc141409 (the oracle switch), chains restarted
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:38:00 +00:00
igneum-labs
3f18dcfc68 release 0.3.19 plan: the exec lane's agreement on the oracle switch
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:37:21 +00:00
igneum-labs
93d1de3801 release 0.3.19 plan: miner-ui-4 733f5124 taken (the N7 gate carried)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:35:40 +00:00
igneum-labs
e8ea778df4 miner-ui-4: carry the clock sample's exec-record gate (d3453190, ledger N7); version words follow the 0.3.19 renumbering
Only update.rs from d3453190; its version bumps stay with the shipper's cut.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 733f51241b)
2026-10-07 08:33:27 +00:00
igneum-labs
d3b4a2d843 miner-ui-4: light 390 px Overview and Cards rendered from PC 2's live state for the site
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 823b60ba5b)
2026-10-07 08:33:27 +00:00
igneum-labs
b92c3e3b7e release 0.3.19 plan: the block-stage hold and the oracle-switch fix; ledger N8 for the devnet height
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:32:13 +00:00
igneum-labs
8d6a33f293 0.3.19: this tree renumbered again (0.3.18 is the app-only N7 cut); plan moved to release-0.3.19.md
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:28:05 +00:00