igneum/docs/plans/shard-test-pc2.md
igneum-labs 7eed16a29a Pre-public scrub, the text pass (7 October 2026, 19:5x UK): no founder name, personal login, earlier business or personal address in any tracked text file, and a gate check that keeps it so
The sweep (main's item 1): 199 tracked text files, 783 lines. The founder's full name, first name and possessive become "the founder" (sentence starts capitalised); the lowercase operating-system user name in WSL paths and commands becomes <user>; the second owner login becomes "the second owner login"; the three earlier businesses and the two other brands become "the other business", "the earlier entity", "the earlier business" and "another brand"; the Chrome profile rule names the igneum.network profile, not the profile's label. The standing commit login igneum-labs is not a founder term here: the fresh-repository step renames it in the history (docs/plans/history-rewrite.md, tools/repo/fresh-repo.sh).

The patterns never appear in plain text in the tree (a plaintext list would be the hit): tools/ci/founder-strings.b64 (perl regex, tab, a sample per row) is read by tools/ci/founder-strings-check.sh (every tracked text file, perl, known-failed first: the self-test plants each row's sample in a fixture and the hit must name the file), by tools/community/discord-hooks.mjs (the guard's founder and business rows; the test takes its fixtures from the samples) and by tools/repo/fresh-repo.sh (the business names of the rewrite rules). site/forbidden-strings.txt carries the same patterns as b64: lines, decoded case-insensitive by site/scrub.mjs and tools/ci/launch-gates-check.mjs (whose fixture now plants an encoded made-up name). The check runs in the gate's tree checks on every merge.

Not in this commit, by main's word: the 105 commit messages and 40 personal-identity commits that need the history rewrite (listed, not run), and the secrets found by gitleaks over the history (reported with owners).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:39:50 +00:00

73 lines
6.8 KiB
Markdown

# Shards ready to test on PC 2: the signed job channel
4 October 2026. The founder's ask: shards ready to test on PC 2 (RTX 5090, WSL2 Ubuntu 24.04, the prover toolchain installed
this morning, the Igneum Miner app running as machine `1ccfe586`) while he is away, and from then on "one app on both
PCs that you can send over the line commands to and files so we can continually test everything and build without
input". PC 2 has no Claude session and nobody at the keyboard, so the line is the app itself: a signed job channel
next to the over-the-air manifest. The relay (`relay/`) stays for the Mac and for humans; its PC agent is replaced.
## What is built (this commit)
| Piece | Where | State |
|---|---|---|
| Job model: parse, Ed25519 verify (OTA key), targeting (machine id 8 or 16 hex or all, platform, requirements), expiry, once-per-id ledger, helpers | `app/igneum-app/src/jobs.rs` | 7 unit tests pass on the Mac |
| Runner: 10-minute poll, requirement probes (`wsl`, `wsl-prover`, `nvidia`), the kinds `run`, `fetch`, `collect`, `restart`, `update-now`, `shard-benchmark`, reports to the log intake as `job-<id>-<machine id8>` with a `SUMMARY {json}` first line, 5-minute progress reports, time caps, abort on quit | `app/igneum-app/src/jobrun.rs` | compiles for macOS and `x86_64-pc-windows-gnu`; not yet run on a PC |
| Engine hooks: `Cmd::Job`, miners stopped and held for a job, node restart, app relaunch, updater on demand; no OTA apply under a running job | `app/igneum-app/src/engine.rs` | |
| Dashboard: the job strip (running: "Job: shard benchmark running, N min" plus the RESULT lines as they arrive; afterwards the outcome for 30 minutes), Settings: "Allow remote jobs from Igneum (signed)" ON by default with the key fingerprint, Check now, the history table (id, kind, started, exit, report) | `app/igneum-app/ui/` | |
| Signer: `sign-jobs`, `verify-jobs` (refuses a file with a bad job) | `app/igneum-app/src/bin/ota-sign.rs` | run with the real key: signs, verifies, refuses a tampered file and a bad job |
| Publisher: `publish-jobs.sh add|list|remove|sign [--deploy]` | `packaging/ota/publish-jobs.sh` | run against a scratch folder: add of all kinds, list, remove, duplicate id refused |
| Reader: the published file (signature checked), status per machine, a job's result, watch | `tools/jobs.mjs` | reads the live intake (no job reports yet) |
| Relay playbook, the same run in its relay form (reference, and the model for a `run` job) | `relay/playbooks/shard-test.ps1` | parse-checked by `windows.yml` (folder added to the check) |
The prove package: `~/Desktop/igneum-prove-wsl2.zip` (286,438 bytes, sha256 `5e7b56f5...950373`) is byte-identical to
the hosted `dl/<token>/igneum-prove-wsl2.zip`, and its contents match `proving/windows-wsl2/`, `proving/igneum-prove/`
(sources and Cargo.lock) and `proving/fixtures/` (338, 341, 344 and the three test fixtures); the only difference is
the thiserror pin `make-package.sh` writes into evm-types. No rebuild was needed.
## The first job (after 0.3.2 is on PC 2)
The app on PC 2 is 0.3.1 today. The job channel is in the build after it: the founder cuts 0.3.2 with the miner fix, the
OTA installs it, then:
packaging/ota/publish-jobs.sh add --kind shard-benchmark --target 1ccfe586 --title "Shard proof run on the 5090" --deploy
This hosts the zip (already there), signs the file, deploys the downloads folder and verifies the live file. Within
10 minutes (or at once from Settings > remote jobs > Check now) PC 2's app: stops its miners (the node keeps
running), waits for the GPU under 5%, downloads the zip into `%LOCALAPPDATA%\igneum\prove`, extracts it fresh, runs
`wsl -d Ubuntu-24.04 -- bash /mnt/c/.../prove-shard.sh block-338-shard1 "block-341-shards2 block-344-shards4"`
under a 90-minute cap, uploads every RESULT and STAGE line, the `results/*.json` and the prove log, and restarts the
miners. Options: `--fixtures "..."`, `--cap-minutes`, `--wsl-user <user>` (when <user> is not the distro's default
user), `--distro`.
Watching from the Mac:
node tools/jobs.mjs the published file, signature checked
node tools/jobs.mjs status the latest job per machine with its SUMMARY line
node tools/jobs.mjs watch <job id> every 30 s until final; the result files land as labels result-<name>
node tools/logs.mjs the app's own uploads (the engine log shows the job's events too)
The RESULT lines fill the empty GPU column of the bench-log skeleton ("shard proving on the RTX 5090"). The first
`S_p` point comes from the shard stage times (`docs/plans/proving-v0.md`).
## Everything else over the same line
publish-jobs.sh add --kind run --target 1ccfe586 --script x.ps1 [--elevated] [--stop-miners] [--timeout-minutes 60]
publish-jobs.sh add --kind fetch --target all --file ~/Desktop/thing.zip --dir prove --extract --fresh --extract-dir thing
publish-jobs.sh add --kind collect --target all --glob "logs/app-*.log" --glob "prove/igneum-prove-wsl2/results/*.json" --command "nvidia-smi"
publish-jobs.sh add --kind restart --target ae432dc7 --what miners|node|app
publish-jobs.sh add --kind update-now --target all
A machine runs an id once; the same thing again is a new add. Jobs expire (48 hours by default) and are dropped
from the file on the next write. Everything a job writes stays under the app data folder except what a `run`
script does, which is the operator's responsibility. `elevated` on an unattended PC fails after the UAC prompt
times out: that needs someone to click, or UAC set to elevate without prompting.
## Not verified from the Mac
| What | Why | How it gets checked |
|---|---|---|
| The runner on Windows: wsl.exe output through the sink, `taskkill /T` on the cap, the elevated wrapper | no PC reachable from this session | the first `shard-benchmark` and a `run` job on PC 2 after 0.3.2; the engine log (`app-*.log`) carries every step |
| That `<user>` is the distro's default user (the probe and prove-shard.sh run as the default user unless `wsl_user` is set) | not visible from here | if the probe fails with cargo missing, re-add the job with `--wsl-user <user>` |
| The dashboard strip and the Settings block in a real window | the dashboard needs the engine's API; only the JS parse and the state shape were checked | the first job on either PC |
| The 90-minute cap against a cold build (first run compiles 10 to 30 minutes, approximate) | the toolchain was pre-built this morning in `~/igneum-prove`, and prove-shard.sh rsyncs the same sources over it, so the build should be incremental | the STAGE timestamps in the report |
| The relay: PC 2 is not registered (both PCs report the hostname DESKTOP-KMCV30N; the relay's PC1 is whichever started `igneum-agent.bat`), so no relay task was queued | by the founder's change of plan the relay agent is not the channel for the PCs | the playbook stays as the relay form |