From 18:23Z both Windows workers (CUDA on PC 1 and PC 2, OpenCL on PC 1 after the 18:34Z node restart) refused every pack for epoch 34 with "the epoch seed bytes do not give the pack's IGNEUM_SEEDW_INIT", and the miner and the app restarted them every 5 to 60 s until 18:44Z and beyond. The packs were correct. The generator retries a rejected candidate with seed || k_le32 (attempt_words); epoch 34's attempt 0 was rejected (246 of 16384 final register values saturated, limit 163) and attempt 1 accepted, so the pack carried attempt 1's words while pf_load (proto-cuda/nvrtc/packfile.h) derived the expected words from the bare seed. Both workers also matched jobs to pairs by those bare-seed words, so even a loaded pack of a retried program would have answered "epoch seed mismatch" on every job. The rule, in one place per language: - packfile.h: pf_program_words(bytes, attempt); pf_load reads IGNEUM_PROGRAM_ATTEMPT and checks the attempt's words; the refusal says "program pack and its seeds disagree: IGNEUM_SEEDW_INIT is not attempt N of the epoch seed ..." in plain words. - worker.cpp and proto-opencl/host.c: a job belongs to a pair when the seed hex the node sent is the pair's (pairIs); the compiled-in placeholder pack keeps the word comparison. - igneum-pow/src/packcheck.rs: verify_pack_texts / verify_pack_dir, the same rule in Rust; the miner checks every pack it writes with it before a worker sees it (vendor/igneum-node pack-loop branch). Tests pin the attempt vectors of epoch 34 on both sides (one vector, two implementations), that epoch 34 is attempt 1 and epoch 33 attempt 0, a known-good pack of a later attempt, a known-mismatched (out of date) pack, and self-contradicting packs. - proto-cuda/nvrtc/emu/packfile-test.c (+ .sh, in CI): pf_load on a known-good attempt-1 pack, the checked-in attempt-0 pack, and the known-mismatched bare-words pack. The app (app/igneum-app): - watchdog.rs: PACK_OUT_OF_DATE_CODE 44, PackRebuilds (at most 3 pack exports per epoch, then the card shows the reason), pack_refusal (the worker's "error 0 pack" line and the miner's "PACK OUT OF DATE" line), pack_epoch_of; tests on the incident lines, known-good and known-mismatched. - engine.rs: exit 44 exports the pack again before the restart instead of a blind restart, the strip says "program pack out of date, rebuilding", the card and the log name the condition; at the cap the card is marked failed with the reason and tries again in 10 minutes. The relay (relay/lib/parse.mjs): PACK_MISMATCH; the card reads "pack mismatch, rebuilding (N refusals in the tail, M restarts)" in `node tools/console.mjs machines` instead of a bare restart count; tests on the PC 2 tail of 18:27Z and a healthy tail. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
83 lines
4 KiB
YAML
83 lines
4 KiB
YAML
# CI on every push and pull request (private repository, free runner minutes).
|
|
#
|
|
# What runs: the lottery-hash crate's tests (igneum-pow, release profile), the census tool's build, the two Python
|
|
# simulators' --quick modes (each under two minutes), the site build with an internal link check, the gh-free
|
|
# identity grep of the public export list (tools/ci/forbidden-strings.txt), and the no-secrets check of the tree
|
|
# (tools/ci/no-secrets-check.sh: no file named like a key of ~/.config/igneum, no 64-hex value assigned to a
|
|
# token/key/secret name outside tests and the allowlist; docs/security/keys.md).
|
|
#
|
|
# What does not run, on purpose: the node fork (vendor/igneum-node*, a rusty-kaspa fork of about 500 crates with
|
|
# rocksdb, blst and the execution layer) is gitignored here and too big for the free runners today (a cold build is
|
|
# 20 to 55 minutes on 2 to 8 vCPU, docs/bench-log.md). The workflow builds igneum-pow only; the fork's own tests run
|
|
# on the Mac and the seed node (infra/seed-nodes, infra/fast-time).
|
|
name: ci
|
|
on:
|
|
push:
|
|
pull_request:
|
|
jobs:
|
|
pow:
|
|
name: igneum-pow tests, igneum-census build
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: toolchain
|
|
run: rustc --version && cargo --version
|
|
- name: igneum-pow tests (release)
|
|
working-directory: igneum-pow
|
|
run: cargo test --release
|
|
- name: pack loader seed rule (packfile.h on a known-good and a known-mismatched pack)
|
|
run: bash proto-cuda/nvrtc/emu/packfile-test.sh
|
|
- name: igneum-census build (release)
|
|
working-directory: igneum-census
|
|
run: cargo build --release
|
|
sims:
|
|
name: simulators, quick modes
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.12'
|
|
- run: python3 -m pip install --quiet numpy
|
|
- name: finality_v2.py --quick (under two minutes)
|
|
working-directory: sim
|
|
run: time timeout 120 python3 finality_v2.py --quick > finality_quick.md
|
|
- name: difficulty/sim.py --quick (under two minutes)
|
|
working-directory: sim/difficulty
|
|
run: time timeout 120 python3 sim.py --quick > difficulty_quick.md
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: sim-quick-output
|
|
path: |
|
|
sim/finality_quick.md
|
|
sim/difficulty/difficulty_quick.md
|
|
site:
|
|
name: site build, link check, identity grep
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '22'
|
|
- name: site build
|
|
run: node site/build.mjs
|
|
- name: internal link check of site/*.html
|
|
run: node tools/ci/link-check.mjs
|
|
- name: identity grep of the public export list
|
|
run: bash tools/ci/identity-check.sh
|
|
- name: no conflict markers in tracked files
|
|
run: bash tools/ci/no-conflict-markers.sh
|
|
- name: copied sources are re-stamped before a build
|
|
run: bash tools/ci/copied-sources-check.sh
|
|
- name: pinned guest programs match their manifest and are built only by pin-guests.sh
|
|
run: bash tools/ci/pinned-guests-check.sh
|
|
- name: no secret file names and no 64-hex secrets in the tree (self-test first, then the tree)
|
|
run: bash tools/ci/no-secrets-check.sh --self-test && bash tools/ci/no-secrets-check.sh
|
|
- name: faucet unit tests (validation, the daily limits, the signed transaction; keccak, RLP and secp256k1 vectors)
|
|
run: node --test site/api/faucet.test.mjs
|
|
- name: ship tool self-test (version bump, the dl-both and public manifest helpers)
|
|
run: node tools/ship-app.mjs --self-test
|
|
- name: relay unit tests (parsers, secret compare, the wake endpoint)
|
|
run: node --test relay/test/parse.test.mjs relay/test/auth.test.mjs relay/test/wake.test.mjs
|
|
- name: miner app notice strip and update card (ordering, keys, wording, timers, when the card shows)
|
|
run: node --test app/igneum-app/ui/notices.test.mjs app/igneum-app/ui/update-card.test.mjs
|