Commit graph

1482 commits

Author SHA1 Message Date
igneum-josh
8ffe26083c CLAUDE.md: shared-scratchpad ownership, own-marker waits, presence checks, and the lock rule (standing rules from the night of 6 to 7 October)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:07:00 +01:00
igneum-josh
808e4c81d1 Hands mover: on 0.3.18 trees the restart read-back takes powEngine and the blockrate object from igneum_getNodeInfo; a stub answer stops the sequence
The shipper's read-back for 0.3.18 (7 October 2026): igneum_getNodeInfo exists again and must answer powEngine igneum-pow (a stub
is a FAIL) with a blockrate object, which the mover prints; a tree before 0.3.18 answers -32601 and the engine is still read from
the binary's igneum-pow source paths. The parser is checked against the three answer shapes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 07:25:12 +01:00
igneum-josh
4a51bd48bd Hands plan: the 0.3.17 hotfix run log (hands and seed on 5899f603, read-backs, times, the pairs held for 0.3.18)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 06:33:45 +01:00
igneum-josh
607a7433c3 lib.sh: bs_pin gives an empty pin for a tree without rust-toolchain.toml (a failed sed under pipefail ended the caller silently)
The b3c228fa builds under the 0.3.16 app tree 5d118f58 (no rust-toolchain.toml yet) died right after the pairing line with no
message: sed on the missing file failed, pipefail carried its status into the assignment, set -e ended the script. A guard and a
tolerant pipeline; checked alive against a tree without the file.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 04:44:26 +01:00
igneum-josh
8820beadbc Build tools: whole-body blocks (the edited-while-running class, with its check), the igneum-pow pairing line, move-hand.sh restart with its readbacks
Three classes from the 0.3.17 night. (1) bash reads a script incrementally: tools/build-remote.sh was edited while a four-minute remote
build ran, the running copy continued at shifted bytes and died with a syntax error after the build had succeeded on the box; the
four long-running tools (build-remote, cross-remote, workers-remote, move-hand) now keep their body in one brace block ending in exit,
parsed whole before a line runs; tools/ci/whole-body-check.sh (in the gate, self-test with a block-less copy) holds the shape.
(2) A fork build pairs with the igneum-pow of the igneum worktree it sits in: a fork at 12153428 under a master worktree failed in
kaspa-pow four minutes in (no chain_program_shadow; master's igneum-pow predates release-0.3.17's); build-remote.sh says the
pairing on its first line ('pairs with igneum 6f8d7a7e (detached): igneum-pow 0.2.0') and the JSONL line carries pairs_with.
The first version of that line used '[ -n ... ] && echo' inside an assignment's $( ) and set -e ended the script on the false
status; fixed. (3) move-hand.sh restart <hand> [--digest <hex>] [--go]: after binary installed a release, restart ONE unit and read
it back (first exec line, commit string in the running binary, digest against the wanted one, igneum_getNodeInfo powEngine over the
node's loopback EVM RPC); the digest readers tolerate a missing line.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 04:12:51 +01:00
igneum-josh
5c405946ae glibc ceilings per artefact class: hive and rig 2.31, seed and linux 2.35, native unchecked; proven in ubuntu:20.04 and 22.04 on the box
Main's order of 7 October 2026 after RunPod's Ubuntu 22.04 canaries (glibc 2.35) refused the box's GLIBC_2.38 binaries and HiveOS
turned out Ubuntu 20.04 based (2.31). The table lives once, in tools/ci/glibc-ceiling-check.sh (--class, --ceiling-of; self-test
covers the table, an unknown class and a 2.34 need against hive); tools/build-remote.sh --ship hive|rig|seed|linux (default seed)
and tools/workers-remote.sh --class (default rig) build with zig at the class's glibc and check against it. provision.sh installs
docker.io (user build in the docker group) for the proof. Proof: fork 3bfe346f at class hive, igneumd and igneum-miner need
GLIBC_2.30; the workers at class rig need GLIBC_2.17; all four run in ubuntu:20.04 (ldd 2.31) and ubuntu:22.04 (ldd 2.35) and
print their version or usage lines (the OpenCL worker its own no-libOpenCL message, the binary running in a GPU-less container).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 01:35:18 +01:00
igneum-josh
580324f0e1 Deploy key: the plan's section 5c (Josh's four steps and the public half) that d468ac74 named but did not carry; observer-sync.sh runs git as build
The previous commit's plan edit aborted on a changed anchor, so section 5c was missing; written now with the public half
(ssh-ed25519 ... igneum-build-1 observer read-only) and the CI-runner row closed. observer-sync.sh ran git rev-parse as root
against the build-owned clone (safe.directory refused it, 'up to date at' with no commit); every git call runs as build now.
Verified on the box: one sync pass prints 'source: mirror (the deploy key is not accepted by GitHub yet ...)' and the commit.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:49:20 +01:00
igneum-josh
d468ac74f4 Observer clone: a read-only deploy key made on the box, GitHub preferred over the mirror once accepted; Josh's steps in the plan
Main's order of 7 October 2026. install-hands.sh creates /srv/observer/.ssh/deploy_igneum (ed25519, user build, mode 600; the private
half never leaves the box and nothing prints it) and the ssh alias github-igneum-observer; observer-sync.sh tests the key with
ssh -T on every pass, pulls from GitHub when it is accepted and from the mirror otherwise, saying which. docs/plans/build-server.md
5c: the four steps for Josh (print the public half, Settings > Deploy keys > Add, read-only, start one sync pass) and the public
half itself. Verified on the box: key created, alias written, one sync pass reads 'source: mirror (the deploy key is not accepted by
GitHub yet)'. The CI-runner row is closed (the box-work agent's runner service).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:47:10 +01:00
igneum-josh
e8cfbead82 rust-toolchain.toml: one pin for every side (1.99.0, the two cross targets); the mismatch refusal reads it
Main's order of 7 October 2026. The repo root carries rust-toolchain.toml (channel 1.99.0, targets x86_64-pc-windows-gnu and
x86_64-unknown-linux-gnu); rustup resolves the nearest file walking up from the crate, so the fork worktrees under vendor/ are
covered, and the fork's master carries its own copy (vendor/igneum-node 37f1206b). lib.sh bs_toolchain_check reads the pin
and refuses a build when the pin, the Mac's rustc as resolved in the crate dir, or the box's rustc differ (the message says
the three commands that align them); run-from-mac.sh passes the pin to provision.sh as RUST_TOOLCHAIN. The 1.99.0 toolchain
with both targets is installed on the Mac so no agent's build stalls on rustup's auto-install. Verified: the Mac resolves
1.99.0 in a fork worktree, the box runs 1.99.0, the check prints 'pinned 1.99.0 by rust-toolchain.toml'.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:44:20 +01:00
igneum-josh
07172f5292 workers-remote.sh: the host's /usr/include stays out of the zig build (the OpenCL headers through a CL-only symlink dir); both workers proven at glibc 2.36
The previous commit's 'the workers at 2.36' was not yet true: the first zig build died on __isoc23_strtol because -I /usr/include
for CL/cl.h put Ubuntu's glibc 2.39 stdlib.h in front of zig's bundled 2.36 headers. Fixed; proof on the box (6 s):
igneum-worker-cuda 6,759,272 B sha256 690c8e91..., igneum-worker-opencl 307,264 B sha256 329fb6a9..., each needing GLIBC_2.34
and libc only, the ceiling check passing. The two static flags zig ignores are dropped on the zig path (zig links its libc++ in).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:40:14 +01:00
igneum-josh
52ec923cdb Build server: zig and cargo-zigbuild on the box; build-remote.sh --ship builds glibc 2.36 Linux artefacts for seeds and HiveOS; the glibc ceiling check
Main's order of 7 October 2026 after a seed took 14 restarts and three minutes down on a glibc 2.39 binary. provision.sh:
step_zig (zig 0.17.0 from ziglang.org, sha256 from the official download index) and cargo-zigbuild 0.23.4 in the cargo tools.
tools/build-remote.sh --ship [--glibc 2.36]: cargo zigbuild --target x86_64-unknown-linux-gnu.2.36 with zig as the C/C++
toolchain (the Mac's infra/cross/build-linux.sh recipe), artefacts from the target-triple dir, each checked by
tools/ci/glibc-ceiling-check.sh (need at most the ceiling; self-test fires on 2.38 against 2.36, passes 2.34 and 2.36;
--symbols reads a saved objdump -T text so CI needs no ELF tools). tools/workers-remote.sh builds the two GPU workers with
zig at 2.36 by default (GLIBC=native for clang). Proof on the box: fork 3bfe346f igneumd needs GLIBC_2.34 (47,023,120 B,
sha256 345dfb95...), igneum-miner GLIBC_2.34 (9,248,808 B, d09dc27b...), 3 min 17 s cold through zig; the workers at 2.36.
Rule: anything that ships to a seed or a HiveOS rig is built with --ship; a plain build (glibc 2.39) is for the box and
Ubuntu 24.04 hosts only.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:37:33 +01:00
igneum-josh
64de02d80b Merge remote-tracking branch 'origin/master' into HEAD 2026-10-07 00:35:37 +01:00
igneum-josh
597e74ea9f Merge branch 'gpu-fleet' into HEAD 2026-10-07 00:33:54 +01:00
igneum-josh
835cd9b41d Fleet: the last two process patterns (a top-level alternation; the canary's node path by its basename)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:33:54 +01:00
igneum-josh
c08c9e34c2 Merge branch 'gpu-fleet' into HEAD
# Conflicts:
#	.github/workflows/ci.yml
2026-10-07 00:33:28 +01:00
igneum-josh
a822504c2e Fleet: the last process patterns in the bracket-first form; the fleet's own pgrep check withdrawn (master's kill-by-name check covers the class)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:31:55 +01:00
igneum-josh
76511d2931 Merge branch 'gpu-fleet' into HEAD 2026-10-07 00:29:39 +01:00
igneum-josh
9e4f0960ee Fleet scripts: no path into another worktree (sys.path from the file, the ship tree from the environment)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:29:39 +01:00
igneum-josh
e7492a45d8 Merge branch 'gpu-fleet' into HEAD 2026-10-07 00:28:55 +01:00
igneum-josh
5d517b3785 Fleet scripts find their helpers inside their own tree (the CI checks, the Discord hook, the publish script), env-overridable; the library's node patterns inline
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:28:55 +01:00
igneum-josh
5faf6bf0e1 Merge branch 'gpu-fleet' into HEAD 2026-10-07 00:25:53 +01:00
igneum-josh
9767f78747 Fleet: the last three process patterns in the bracket-first form
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:25:53 +01:00
igneum-josh
43d6cf8877 Hands moved to igneum-build-1 (run log); the overlay carries directories a crate reaches by include_bytes!; two mover fixes
docs/plans/hands-on-build-1.md section 6: the move of 6 October 2026 23:06 to 23:22 UTC, observer node, observer, node 1, unload,
each hand's first executing line, digest eada4bda MATCH, IBD and acceptance, the open readback (the Mac's Miner app has not
started its own node since 26610/26611 were freed). lib.sh: the shipper's class from the 0.3.17 tree, the fork's igneum-exec
embeds proving/igneum-prove/elf/*.vk by include_bytes! five levels up, which is no path dependency; every .rs in the trees that
travel is scanned for include_bytes!/include_str! paths leaving the crate's repository and their directories join the overlay;
proving/igneum-prove/elf is the fixed fallback for a fork build. move-hand.sh: igneumd --version exits 1 (tolerated; it ended
the binary step before the override was written), and the launchd pid lookup used \s in macOS awk (printed 'pid none').

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:25:36 +01:00
igneum-josh
d78094eeac Merge branch 'gpu-fleet' into HEAD 2026-10-07 00:25:10 +01:00
igneum-josh
27da32d934 Fleet scripts: process patterns in master's bracket-first form (the kill-by-name check), anchors dropped
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:25:10 +01:00
igneum-josh
a4a27fae09 Merge branch 'gpu-fleet' into HEAD 2026-10-07 00:23:46 +01:00
igneum-josh
cbbbaa28ed Merge gpu-fleet: the rented fleet's tooling (box library, standing supervisor and library, the 10 percent and 75 percent gates, the deploy gate, publish and canary scripts, Devnet 2 scripts and gate reader, the wind-down) and the night's analyses (prover tiers, block rate, the fleet night rows 1 to 18, the bench-log entries)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:23:46 +01:00
igneum-josh
a18bc2e567 lib/box.py: the node path pattern in the bracket form; the pgrep check allows the variable it is read through
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:17:48 +01:00
igneum-josh
17111bf173 Fleet scripts: every pgrep/pkill -f literal in master's bracket form (the kill-by-name check); the rehearsal chain's end script
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:14:41 +01:00
igneum-josh
f0dbeba369 Fleet: the deploy gate (syntax + master's defaults-line check + the comment-with-code class) in lib.box.put; the 75 percent table gate (standing.table_gate, the wind-down holds under it)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:04:29 +01:00
igneum-josh
fd507a374f box-dn2.sh: the UNSYNCED comment moved above its line (it had swallowed the port variables; three Devnet 2 nodes failed to start under set -u)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:02:49 +01:00
igneum-josh
95f2f3ebc5 Merge site-ui-3: chip headline range (X35) and the latency ladder on the site (M34)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:02:46 +01:00
igneum-josh
83003614fd site: the class v4 chip headline is a range, 2.1x to 3.9x with k stated (ledger X35); the latency ladder described (M34)
The X9 made the k = 0.33 column of the chip model a product class, so
every public sentence that stated 2.1x alone now states 2.1x (k = 1) to
3.9x (k about 0.33), with the ladder's second rung taking the X9 bracket
to about 2.8x. The ladder lane's litepaper paragraph 'The work that waits
can grow' and ledger row M34 are taken from branch ladder (7003f9f, those
two hunks only) so the ladder is on the site before the code ships.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 00:02:43 +01:00
igneum-josh
316ecaff9d dn2-check: the reorg read ignores the exec follower's replay of old history after a restart (lines far below the exec tip)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:52:30 +01:00
igneum-josh
3a0c12a264 box-dn2.sh: unsynced mining is opt-in (a fresh genesis only); the standing Devnet 2 nodes restart synced-first
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:51:54 +01:00
igneum-josh
9c291f623a Hands mover: the node tree defaults to the Mac agent's own build, a digest readback per hand against the Mac hand, a 16-field guard on the override
Main's hold of 6 October 2026 (23:xx UK): the hands move only on the shipper's 'publish 2 live: digest <x>' line, each hand read back by
commit string and consensus digest. move-hand.sh binary now derives --node from the fork tree behind the Mac's node1 launchd agent
(igneum-wt-ship0315/vendor/igneum-node-0315 at f1ea7a38 tonight; the box's igneumd rebuilt from it is sha256 7f0bde70...), warns when the
Mac's override still has 13 fields (publish 2 writes the sixteen-field object when it restarts the hands), and after each hand's first
executing line prints the box binary's commit string and the hand's digest against the Mac hand's last digest (MATCH or DIFFER, DIFFER
stops the sequence). Dry run clean against the live Mac.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:51:06 +01:00
igneum-josh
dfa2791b97 Fleet: the publish-2 object move for the standing boxes (file swap, node restart by the supervisor, digest table)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:50:03 +01:00
igneum-josh
2663702989 gpu-fleet.md clock: publish 1, the forced confirmation, publish 2 on the standing boxes
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:50:03 +01:00
igneum-josh
56b48f46e1 Stale-overlay class closes with its check: tools/ci/mirror-reset-check.sh in the pre-push gate
The reset itself has been master's behaviour since 3e6a488 (remote-run.sh checkout_tree: git checkout -- . and git clean of the
overlay files, target dirs and stamps kept, before the branch checkout); the UI lane met the class again from worktrees whose
tools predate it (remote-run.sh is piped to the box from each worktree per build). The check reads checkout_tree() and fails
when the reset and the clean do not both come before the branch checkout; self-test: the real script passes, a copy without the
reset fails, the same lines moved after the checkout fail. cargo-audit: already owned by provision.sh step_cargo_tools
(1eec354), confirmed ok (0.22.2) on the box; nothing added. Gate GREEN, 33 checks.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:47:16 +01:00
igneum-josh
2eee3b483c docs: live light-theme captures of the showcase
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:43:17 +01:00
igneum-josh
8de7afdd5c Merge site-ui-3: light-theme showcase renders
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:41:53 +01:00
igneum-josh
ea842d298c site: light-theme showcase renders from the RTX 5090 Windows rig's live state
The light variants of the Overview and Cards cards are the 0.3.16 UI
rendered from the rig's own api/state and api/live at 23:33 UK, captioned
as renders so nothing is passed off as a screen capture; the job strip is
cropped out and the machine's hostname painted over before serving. The
shipped Mine page shows its one real mining capture in both themes; the
idle light shot is no longer used here.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:41:51 +01:00
igneum-josh
d37bf843cc Standing supervisor: the miner runs only on a synced node past block 1,000 and is stopped while the node syncs (a box never mines from a genesis-only view)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:39:29 +01:00
igneum-josh
4747e12d89 dn2-check: the since stamp follows each log's own UTC offset (the build-server seed logs +02:00)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:29:23 +01:00
igneum-josh
973cff999e Standing check: every box's handshake digest against the live object (~/Desktop/fleet/expected-digest) every five minutes, one #incidents line per box per hour on a mismatch
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:19:23 +01:00
igneum-josh
3a0843397e Merge horizon-close d25db6a: the Decisions ready section (tail emission and vote-or-burn verdicts quoted for Josh)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:18:16 +01:00
igneum-josh
42f4123e0c Discord: the first #announcements post, posted 7 October 2026 00:16 UK with the 0.3.15/0.3.16 release
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:17:05 +01:00
igneum-josh
d25db6a966 Horizon: "Decisions ready for Josh" section with the two one-page verdicts quoted verbatim (tail emission e1e28d2, ledger E22; vote or burn e816f28), each Josh's decision owed, and the two open questions being implemented (the N ladder list, 18 decimals)
The two files stay on their branches (tail-emission, vote-weigh) and are not merged here; the section names the branch and commit for each.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:16:30 +01:00
igneum-josh
9dd106c55e box-dn2.sh: the program-ids comment moved off the node line (it had swallowed the flags and the backgrounding, the same class as 17:18Z)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:15:29 +01:00
igneum-josh
55018bf2d5 Standing supervisor: a crash loop on a corrupt datadir moves it aside and rejoins fresh (p2-4090-1b, 24 restarts on a missing sst)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 23:13:09 +01:00