igneum/sim
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
..
difficulty Capacity layer: idle-core background workload on igneum-build-1 that yields to builds 2026-10-06 20:58:42 +00:00
economy FUD ledger sweep, round 1: 63 entries reconciled with the day's evidence, the security-budget grid and the launch-month arithmetic 2026-10-04 22:39:54 +00:00
horizon 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 2026-10-07 18:39:50 +00:00
peer-directory Mission item 12: the peer-directory fast-time harness (ten listing nodes announcing their loopback p2p address, every node advertising an unroutable external ip so gossip is dead and the directory is the one live source, a fresh node with one genesis peer watched for 8 outbound), the eclipse simulation (the draw as implemented, without replacement, 34 percent attacker over m keys), and peer_directory_activation_daa in the 60x file 2026-10-07 13:14:00 +00:00
finality_sim.py Igneum: design docs, Metal lottery-hash prototype, CUDA test pack, finality simulation 2026-10-03 15:06:01 +00:00
finality_v2.py Finality rule v3 (ledger F21, F22): simulator scenario M, spec 03 Q4/Q5, cloud vote-timing analysis, v3 harness runner, fast-time profile, bench-log entry, devnet rollout plan 2026-10-04 20:04:12 +00:00
README.md Finality rule V2 simulation: latency, partitions, eclipses; active denominator fails the partition test, floor 0.85 hybrid recommended 2026-10-03 16:10:16 +00:00
results.md Igneum: design docs, Metal lottery-hash prototype, CUDA test pack, finality simulation 2026-10-03 15:06:01 +00:00
results_v2.md 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 2026-10-07 18:39:50 +00:00

sim

Simulations of Igneum consensus rules. One script per rule, results next to it.

finality_sim.py

Simulates the sustained-mining finality vote-weight rule: each key's weight is the sum over the trailing 30 days of its counted blocks, where a day's counted blocks are capped at 2x the previous day's counted blocks plus a floor f. A checkpoint locks at two thirds of total weight. Scenarios A to F (steady state, rental burst, key splitting, honest growth shock, churn, patient owner) are described in results.md together with the model's assumptions and the measured numbers.

Requirements: Python 3, numpy (checked present: 3.10.10, numpy 2.2.6 on 3 October 2026).

Run everything (about one second):

python3 finality_sim.py > out.md

Options:

--seed N          random seed, default 7 (seed 11 gives the same crossing days)
--scenarios A,B   subset of A,B,C,D,E,F
--floors 1,10     floor values in blocks per key per day, default 1,10,100,1000
--growth 2.0      daily cap multiplier (1e9 removes the cap)
--window 30       trailing window in days
--committee 100   committee size, used only for the active-24-hour total in E
--presence 0      proposed presence gate, 0 = off (tested and rejected in results.md)

The runs behind results.md:

python3 finality_sim.py
python3 finality_sim.py --growth 1e9 --scenarios B --floors 1
python3 finality_sim.py --presence 20 --scenarios C,D
python3 finality_sim.py --seed 11 --scenarios A,B --floors 1,1000

Output is markdown tables on stdout. Days in B to E are counted from the event, so "+1" is the first full day after the burst, the doubling or the churn.

Model limits are listed at the end of results.md: no latency, no DAG, no VRF sampling noise, instant difficulty retarget, free keys.

finality_v2.py

Simulates FINALITY RULE V2 (CLAUDE.md, review round 2): flat 30-day weight window, no damping, dust threshold 100 blocks, a checkpoint every 30 blocks, every voter signs every checkpoint, lock at 2/3 of the ACTIVE denominator (weight x participation over a 240-checkpoint presence window) compared against the TOTAL denominator. Unlike finality_sim.py it steps one 30-s slot at a time and models regions with message delay, uptime, partitions (each side forms its own checkpoints and certificates, merged at the heal with conflicting locks counted), an eclipsed pool, and equivocation stripping. The DAG stays abstract: every block is blue, a side's checkpoint block at index i is the block at blue score 30i in that side's view.

Three readings of "participation" are selectable with --pmode inside the script (the scenarios run all three where it matters): cert (the brief, an uncertified index credits nobody), seen (an uncertified index credits the keys whose votes were observed), frozen (the window is over certified indices only). Scenarios A to G and every assumption are in results_v2.md.

Requirements: Python 3, numpy (3.10.10, numpy 2.2.6 on 3 October 2026).

Run everything (about five minutes):

python3 finality_v2.py > out_v2.md

Options:

--seed N            random seed, default 7
--scenarios A,E     subset of A,B,C,D,E,F,G
--delay 2.0         one-way inter-region delay in seconds for the main runs (A also sweeps 0.5, 2, 5)
--grace 15          seconds after a checkpoint during which late votes still enter the certificate
--quick             shortened runs for development

The runs behind results_v2.md:

python3 finality_v2.py
python3 finality_v2.py --seed 11 --scenarios B,E

Timing output goes to stderr, tables to stdout. Minutes in C to F are wall minutes after the event.