Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
340 commits
Select commit Hold shift + click to select a range
bb818d6
Freeze money-path vectors from 2.x.x and record the D2 payout differe…
kiwidream Sep 11, 2026
41a2afd
Add a native SQL oracle for the payout-window read (#306)
kiwidream Sep 11, 2026
f3fb340
Retry CI apt installs through Ubuntu mirror blips (#311) (#312)
kiwidream Sep 11, 2026
91f4b6a
Record the approved D2 payout decision in the migration guide (#310)
kiwidream Sep 11, 2026
5355b69
3.x.x: native metrics registry with the cutover-minimum series (#308)
djh58 Sep 11, 2026
a0b646a
Survive Ubuntu mirror outages in CI package installs (#311) (#314)
kiwidream Sep 11, 2026
5c94a06
3.x.x: ratchet the payout window against the PostgreSQL JSONB ceiling…
kiwidream Sep 11, 2026
aa18472
3.x.x: Set one 3.0.0 release identity across VERSION and every crate …
Anatolie Sep 11, 2026
8dccc74
3.x.x: assert the server-side D2 payout rules (#316)
kiwidream Sep 11, 2026
c9d41e9
3.x.x: Make gated tests fail loudly, prove CI execution, add Rust hyg…
Anatolie Sep 11, 2026
0af13ec
3.x.x: Assert stale-grace anchoring, retained-job and hot-path submit…
djh58 Sep 11, 2026
82a543d
docs: design record for WindowRef and Ledger::read_window (#297)
kiwidream Sep 11, 2026
d39cf62
3.x.x: make Prism session sequence wrap-safe (#319)
djh58 Sep 11, 2026
22bd1a2
3.x.x: Generate native metric inventory and migrate deployed alerts (…
djh58 Sep 11, 2026
0ecc7d2
3.x.x: finish native health contract evidence (#329)
djh58 Sep 11, 2026
096e9b6
v3.0.0 feat: add prepared-window reference foundation (#327)
djh58 Sep 11, 2026
9f78a95
3.x.x: store imported legacy audits as canonical bytes and decode the…
kiwidream Sep 14, 2026
2914a62
3.x.x: add deterministic HA readiness probe harness (#331)
djh58 Sep 14, 2026
e13051c
3.x.x: reconcile share-commit deadlines instead of dropping the appen…
kiwidream Sep 14, 2026
037b04e
perf(metrics): remove allocations from closed-label event recording (…
djh58 Sep 14, 2026
a6fe3fd
3.x.x: add bounded PostgreSQL WAL qualification helper (#330)
djh58 Sep 14, 2026
b873b4e
3.x.x: Measure the share-append throughput floor against PostgreSQL (…
kiwidream Sep 14, 2026
0debac8
3.x.x: list the new reject reason in the metric exposition fixture (#…
kiwidream Sep 14, 2026
b8b72f8
v3.0.0 fix: record cancelled collector pool acquisitions (#345)
djh58 Sep 14, 2026
54b8884
build: update rustls to 0.23.45 for RUSTSEC-2026-0285 (#354)
kiwidream Sep 14, 2026
4b98713
3.x.x: Normalize stored audit bodies so they stop growing with the wi…
kiwidream Sep 14, 2026
5722b7d
3.x.x: Record advisory-lock and pool-acquire waits in the ledger (#334)
kiwidream Sep 14, 2026
b7b230d
v3.0.0 docs: correct pool-acquire alert measurement boundaries (#343)
djh58 Sep 14, 2026
651193e
v3.0.0 test: cover native ledger deadlines and execution safety (#355)
kiwidream Sep 14, 2026
923f927
v3.0.0 fix: preserve pool-wait alert during collector failure (#351)
djh58 Sep 14, 2026
7c68a98
v3.0.0 feat: add audited fatal-state recovery (#360)
Anatolie Sep 14, 2026
3c0c820
Unify heartbeat status writers and self-check reader (#362)
Anatolie Sep 14, 2026
f2cc6ee
v3.0.0 fix: harden native PRISM configuration and containers (#361)
Anatolie Sep 14, 2026
c3e64ed
3.x.x: Pin the migration source schema, refuse unknown storage versio…
Anatolie Sep 14, 2026
b6de6cc
docs: reference authoritative gated test count (#364)
djh58 Sep 14, 2026
12fda81
3.x.x: Reference the window from candidates and move the found-block …
kiwidream Sep 14, 2026
ba52d4b
ci: shard Rust PRISM integration tests (#371)
kiwidream Sep 14, 2026
d05f69d
v3.0.0 feat: prepare compact coordinator input adapters (#363)
djh58 Sep 14, 2026
804f242
3.x.x: Prepare compact work qualification inputs and guards (#367)
djh58 Sep 14, 2026
d733ef9
v3.0.0 feat: time selected direct ledger pool acquisitions (#368)
djh58 Sep 14, 2026
387064c
v3.0.0 refactor: share pool acquisition observation (#376)
djh58 Sep 15, 2026
3dcc80b
v3.0.0 ci: make pinned tool downloads resilient to release outages (#…
kiwidream Sep 15, 2026
03b1a0d
v3.0.0 fix: persist settlement inputs before resuming stored jobs (#372)
djh58 Sep 15, 2026
8bea677
v3.0.0 fix: retain window read admission through blocking cleanup (#373)
djh58 Sep 15, 2026
15a0239
3.x.x: re-anchor the capacity-readiness runbook to native telemetry a…
Anatolie Sep 15, 2026
d88b1b5
v3.0.0 ci: test the pinned-tool installer's outage and integrity guar…
Anatolie Sep 15, 2026
c73ac6c
v3.0.0 fix: independently verify durable payout window boundaries (#379)
djh58 Sep 15, 2026
92f381b
v3.0.0 fix: bound prepared template and balance blob cleanup (#378)
djh58 Sep 15, 2026
1ed1dee
v3.0.0: Enforce audit import and rehearse one-way recovery (#366)
Anatolie Sep 15, 2026
553fa35
v3.0.0 fix: observe audit and migration pool checkouts (#390)
djh58 Sep 15, 2026
c70caef
v3.0.0 feat: attribute Stratum admission refusals and stale-job cause…
kiwidream Sep 15, 2026
2158bcc
3.x.x: Record the #271 share-append throughput measurements (#396)
kiwidream Sep 15, 2026
cff94df
fix: fence compact publication and replacement lease authority (#377)
djh58 Sep 15, 2026
049bbf7
v3.0.0 feat: offer found blocks before audit landing (#391)
kiwidream Sep 15, 2026
7ec7d3a
v3.0.0 fix: observe ledger job pool checkouts (#394)
djh58 Sep 15, 2026
16c37eb
v3.0.0 fix: park invalid claimed candidates with durable reasons
kiwidream Sep 15, 2026
5af6519
3.x.x: Trim the share ledger indexes online (migration 011) (#369)
Anatolie Sep 15, 2026
a5717a1
v3.0.0 fix: resolve share ACK deadlines and unknown rejection labels …
djh58 Sep 15, 2026
ceb6cab
v3.0.0 feat: add offline fee-policy transitions (#401)
Anatolie Sep 15, 2026
4bfa5f4
3.x.x: Add the qbit-prism-load Stratum-to-PostgreSQL load harness and…
kiwidream Sep 16, 2026
3b654b5
v3.0.0 fix: isolate public-reader PostgreSQL credentials (#399)
djh58 Sep 16, 2026
9a4b4af
3.x.x: Keep one-shot operator commands out of frontend heartbeat regi…
Anatolie Sep 16, 2026
3cbee3e
3.x.x: time online migration pool checkout before detach (#403)
djh58 Sep 16, 2026
a21af70
3.x.x: Preserve bounded live-regtest diagnostics when fixture startup…
kiwidream Sep 16, 2026
54c0f88
3.x.x: Give each integration fixture its own database (#410)
kiwidream Sep 16, 2026
758f46d
3.x.x: Run the seven ignored dependency contracts and fix the heartbe…
kiwidream Sep 16, 2026
a70551c
v3.0.0 fix: redact public readiness database errors (#416)
djh58 Sep 16, 2026
e5962e5
3.x.x: time durable audit boundary pool checkouts (#417)
djh58 Sep 16, 2026
0cb9c23
v3.0.0 feat: activate compact prepared-work runtime (#397)
djh58 Sep 16, 2026
58bed5c
3.x.x: Fence the mid-flight kill census and recognize quorum replicat…
kiwidream Sep 16, 2026
d5d14ce
v3.0.0 test: measure job persistence through public Stratum (#402)
djh58 Sep 16, 2026
a828c21
3.x.x: Keep the pg_restore session out of the fixture pool (#422)
kiwidream Sep 16, 2026
249a5ba
3.x.x: Align public-reader authentication validation (#426)
djh58 Sep 16, 2026
96d1edb
docs: record release-profile public Stratum measurements (#431)
djh58 Sep 16, 2026
32b3a31
3.x.x: pin the lost tip race and settle proven orphans terminally (#4…
djh58 Sep 16, 2026
02d51ca
3.x.x: Reuse payout windows during template refresh (#428)
djh58 Sep 16, 2026
1865dd7
Cover native refresh liveness and yield CTV to newer tips (#433)
Anatolie Sep 16, 2026
23d12f1
3.x.x: Follow revision-fenced equal-work tip replacements (#429)
djh58 Sep 17, 2026
b3832e9
v3.0.0 test: cover native candidate storms, recovery, and offer prove…
kiwidream Sep 17, 2026
30f4215
3.x.x: Coalesce refresh economics and accepted-cutoff probes (#437)
djh58 Sep 17, 2026
58b004f
3.x.x: Measure session reservation cleanup pool checkout waits (#436)
djh58 Sep 17, 2026
3bb2a2d
3.x.x: Batch compact issued-job persistence (#435)
djh58 Sep 17, 2026
fbcb299
3.x.x: Qualify ledger proxy client-close ordering (#441)
djh58 Sep 17, 2026
32e0db4
3.x.x: Native candidate recover --apply for already-accepted pending …
Anatolie Sep 17, 2026
b51e8e8
v3.0.0 fix: time ledger audit reconstruction checkouts (#442)
djh58 Sep 17, 2026
51a31d7
3.x.x: Bound candidate dispatch probes to unfinished rows (#443)
djh58 Sep 17, 2026
9573bd0
test: let acknowledgement barrier hand off its Tokio worker (#445)
djh58 Sep 17, 2026
31d20f4
3.x.x: Record post-batch large-window delivery misses (#444)
djh58 Sep 17, 2026
de60e15
3.x.x: Partition qbit_share_ledger and add the detach-and-archive ret…
Anatolie Sep 17, 2026
a193705
docs: reconcile B281 HA architecture with approved async D3 (#449)
djh58 Sep 17, 2026
0493c13
fix: time coordinator-owned database checkouts (#446)
djh58 Sep 17, 2026
d84cdc8
test: qualify metrics cardinality and identifier privacy (#450)
djh58 Sep 17, 2026
7355ddd
Bound public readiness warnings and report recovery (#451)
djh58 Sep 17, 2026
4cb8732
fix: time rollup database checkouts (#453)
djh58 Sep 18, 2026
cb2aa8b
3.x.x: prepare bounded HA functional qualification (#452)
djh58 Sep 18, 2026
587aef5
fix(prism): time landed audit pool checkouts (#454)
djh58 Sep 18, 2026
2b86ae3
Finish the #270 candidate-storm remainder: pre-offer kill, relaunched…
kiwidream Sep 18, 2026
252947c
fix(prism): isolate compact persistence from settlement locking (#456)
djh58 Sep 18, 2026
d78659d
3.x.x: complete pool checkout timing and guard its coverage (#457)
djh58 Sep 18, 2026
e55c6f1
3.x.x: bound refresh snapshot payload reads (#466)
djh58 Sep 21, 2026
0f4d034
3.x.x: overlap independent refresh computation (#476)
djh58 Sep 21, 2026
2e81ca3
3.x.x: Reconcile the deleted-test map with closed issues and add a ch…
Anatolie Sep 21, 2026
7089a17
3.x.x: measure accepted-block revision work delivery (#475)
djh58 Sep 21, 2026
8a69e5d
3.x.x: Classify proven stale commit-gate refusals (#488)
djh58 Sep 21, 2026
9b6caed
3.x.x: pipeline canonical audit hashing during refresh (#490)
djh58 Sep 22, 2026
0d3f3a0
3.x.x: report unknown harness measurements as null, never zero (#483)…
djh58 Sep 22, 2026
93bab69
3.x.x: retire the #458 cross-restart remainder in the deleted-test ma…
djh58 Sep 22, 2026
af3f4b9
3.x.x: bound share-append admission before pool checkout (#491)
djh58 Sep 22, 2026
2e9bf19
3.x.x: signing-transition command and migration 019 for signing-key r…
kiwidream Sep 22, 2026
f999308
3.x.x: check unread PRISM settings on the serve path (#461 S-A) (#462)
kiwidream Sep 22, 2026
8864996
3.x.x: alert on order and settlement advisory-lock waits (#461 S-C) (…
kiwidream Sep 22, 2026
629cbfb
3.x.x: Bound the public artifact route: dedicated rebuild limit, in-f…
kiwidream Sep 22, 2026
442c62d
3.x.x: Stratum per-IP connection cap and per-session request and malf…
kiwidream Sep 22, 2026
a42f519
3.x.x: launch load-harness frontends at the production initial-job ad…
djh58 Sep 22, 2026
7b78ea6
3.x.x: gate the accepted-revision-work paging rule like the other cri…
djh58 Sep 22, 2026
dcd7647
3.x.x: make the candidate_storm drain-cost and offer_lifecycle claim …
djh58 Sep 23, 2026
b61747e
3.x.x: cut the per-session checkouts on the new-tip fan-out (#275) (#…
djh58 Sep 23, 2026
03f6347
3.x.x: keep the refresh delta path across retargets and multi-page de…
djh58 Sep 23, 2026
8fc94fa
3.x.x: attribute build deadlines to known revision-work waits only (#…
djh58 Sep 23, 2026
d95cb8e
3.x.x: Close the four needs-triage rows of the deleted-test map with …
kiwidream Sep 24, 2026
e1457e3
3.x.x: capture own blocks found on same-parent superseded payout work…
djh58 Sep 24, 2026
7621f7a
3.x.x: single-pass tee, chunk-parallel counted-share JSON and lean ti…
djh58 Sep 24, 2026
623aa86
3.x.x: make the probe-window dead-connection test deterministic (#507)
djh58 Sep 24, 2026
6575f59
3.x.x: keep a lost race out of the revision-work paging age and dwell…
djh58 Sep 24, 2026
2255a86
3.x.x: Export node peers, initial block download, observation age and…
kiwidream Sep 24, 2026
67b47cf
3.x.x: keep a ledger future cancelled inside BEGIN from leaving its t…
kiwidream Sep 24, 2026
8c3e0ac
3.x.x: refuse an unmeasurable memory floor, find pg_stat_statements a…
kiwidream Sep 24, 2026
3f5fd4c
3.x.x: attribute the current server's stale-job and unknown-job rejec…
kiwidream Sep 24, 2026
14f9b06
3.x.x: #502 follow-ups: pool drain state in an Arc, prefix-only rebui…
djh58 Sep 24, 2026
4983573
3.x.x: keep the share append's ORDER_LOCK hold free of partition re-p…
djh58 Sep 25, 2026
92965fb
3.x.x: show the live positive float on the payout_divergence report l…
djh58 Sep 28, 2026
f2a945e
3.x.x: report a won block whose landing hangs in offered through the …
djh58 Sep 28, 2026
f15dbbb
3.x.x: live regtest: a qbitd stop or crash around submitblock offers …
djh58 Sep 28, 2026
d83f613
3.x.x: follow weighted multi-address shares to spent outputs on a liv…
djh58 Sep 28, 2026
cd30a1d
3.x.x: offer again a won block whose submitblock never connected, ins…
djh58 Sep 28, 2026
3403c9d
3.x.x: live two-node regtest scenarios for a lost same-height race an…
djh58 Sep 28, 2026
34a4fd0
3.x.x: live PostgreSQL primary failover with a found block mid-landin…
djh58 Sep 28, 2026
4f08ed0
3.x.x: make the landing_metrics lost-commit deadline and api_database…
djh58 Sep 28, 2026
0c8842e
3.x.x: load-harness realism, checked-in presets, a nightly workflow a…
djh58 Sep 28, 2026
4780552
3.x.x: refuse CTV settlement without a pool fee and page when no work…
djh58 Sep 28, 2026
c99abdd
3.x.x: model rental churn in the load harness: bursts, abrupt departu…
djh58 Sep 28, 2026
273f5c0
3.x.x: live regtest: a dense-cadence soak lands every found block, re…
djh58 Sep 28, 2026
14075db
3.x.x: legible load-harness preset names, a build-once nightly matrix…
djh58 Sep 28, 2026
1fb74b7
3.x.x: offer again a won block whose submitblock qbitd answered from …
djh58 Sep 28, 2026
03a7562
3.x.x: make the live_regtest port-reservation, failover share-count a…
djh58 Sep 29, 2026
65c9751
3.x.x: require a pool fee in every settlement mode and default a fres…
djh58 Sep 29, 2026
c2d47ff
3.x.x: release a CTV fanout claim whose completion is refused after a…
djh58 Sep 29, 2026
218487f
3.x.x: bound the failover test's share and subscribe waits by the ser…
djh58 Sep 29, 2026
b6df571
3.x.x: wait, within a bound, for the failover standby to flush a foun…
djh58 Sep 29, 2026
833a7ce
3.x.x: hand fanout and candidate claims back at shutdown, keep a lost…
djh58 Sep 29, 2026
b4cb6e3
3.x.x: cap a block proof's acknowledgement wait at the share commit t…
djh58 Sep 29, 2026
01501e8
3.x.x: checked-in e2e scenario manifest and its CI check (#543) (#560)
Anatolie Sep 29, 2026
2f90744
3.x.x: run the 2.x.x migration lifecycle weekly on a real node: migra…
Anatolie Sep 29, 2026
e961113
3.x.x: a dispatch-only Blacksmith runner probe for the load harness (…
Anatolie Sep 29, 2026
9296ac3
3.x.x: name #570's standby drill and #566's warmup drill in the e2e s…
djh58 Sep 29, 2026
b536cbc
3.x.x: name #541's runner-probe preset in the e2e scenario manifest (…
djh58 Sep 29, 2026
1bf77e9
3.x.x: retry a failed candidate attempt's claim release until the dat…
djh58 Sep 29, 2026
b953463
3.x.x: nightly e2e for PostgreSQL disk exhaustion and wall-clock jump…
djh58 Sep 29, 2026
a46040f
3.x.x: rehearse the 2.x.x cutover on a mainnet-shaped ledger and on a…
djh58 Sep 29, 2026
1d1ffbb
3.x.x: run the weekly cutover rehearsal at 1/32 of mainnet's share ro…
djh58 Sep 29, 2026
f4d1d79
3.x.x: fuzz the Stratum line codec, session state machine and codec p…
djh58 Sep 29, 2026
bcb7749
3.x.x: run the Stratum fuzz targets nightly for 20 minutes (#575) (#594)
djh58 Sep 29, 2026
a3f1b1c
3.x.x: drive a real regtest qbitd from qbit-prism-load, ramped to the…
djh58 Sep 29, 2026
5c72621
3.x.x: run the load nightly on a run-load label, skip unchanged night…
Anatolie Sep 30, 2026
72efbcb
3.x.x: long soak automation: a one-lifetime soak plan for the load ha…
djh58 Sep 30, 2026
1932cb3
3.x.x: run the shipped images under the Compose prism profile with th…
Anatolie Sep 30, 2026
3d5e24c
3.x.x: Record the D1 production-window load matrix (200k/400k/500k) t…
Anatolie Sep 30, 2026
9ec965b
3.x.x: report the weekly soak's resident-memory failure as expected o…
djh58 Sep 30, 2026
6572613
3.x.x: deliver a job build that a same-tip republication overtakes, s…
djh58 Sep 30, 2026
59b9f72
3.x.x: remove Config::block_only_ack_timeout, share the mature-CTV-fa…
djh58 Sep 30, 2026
eb3acb1
3.x.x: measure ORDER_LOCK holds by holder and landing-window share ac…
djh58 Sep 30, 2026
ae3d9ba
3.x.x: document the end-to-end and load CI lanes, what each proves an…
Anatolie Sep 30, 2026
aeddde1
3.x.x: #474 A: direct-settlement recipients, signed audit bundle chec…
Anatolie Sep 30, 2026
97534f4
3.x.x: repeat runner-probe runs per class and summarise their varianc…
Anatolie Sep 30, 2026
35f5181
3.x.x: run the short plan on the fake and the real node on one runner…
Anatolie Sep 30, 2026
b7bbbbe
3.x.x: inject faults under load in a load-harness fault phase, per PR…
djh58 Sep 30, 2026
1bcc8f6
3.x.x: run #521's chain-event scenarios under 2,000 Stratum sessions,…
djh58 Sep 30, 2026
e76e449
3.x.x: seed the 1,001-recipient case at the template's parent height,…
Anatolie Sep 30, 2026
54fe64c
3.x.x: test that vardiff settles each session into its share-interval…
Anatolie Sep 30, 2026
3c6d911
3.x.x: record the load lanes' trend rows on ci-evidence, promote flag…
Anatolie Sep 30, 2026
4f4b218
3.x.x: lost node replies: kill the owning frontend after qbitd accept…
Anatolie Oct 1, 2026
fd96c15
3.x.x: return a landing's freed heap to the kernel with malloc_trim a…
djh58 Oct 1, 2026
62cc625
3.x.x: fail the database over, fill its WAL volume and restart over a…
djh58 Oct 1, 2026
f1a1c5f
3.x.x: give first jobs their own admission, so a session opening duri…
djh58 Oct 1, 2026
8dbdb57
3.x.x: answer a session's submits while its own job rebuild is built …
kiwidream Oct 1, 2026
3f1fba6
3.x.x: settle load runs through CTV fanout with --ctv-settlement, and…
kiwidream Oct 1, 2026
7dee205
3.x.x: pause the session load's shares around scenario 2's own blocks…
djh58 Oct 1, 2026
2e22347
3.x.x: give the PRISM PostgreSQL CI shards 45 minutes and balance the…
kiwidream Oct 1, 2026
90327e8
3.x.x: refuse a block on work from a lost replication gap before its …
kiwidream Oct 1, 2026
d7812be
3.x.x: renew readiness from a guarded tip poll so a slow rebuild no l…
kiwidream Oct 1, 2026
eedf331
3.x.x: give each rollups test fixture its own database so sibling mig…
kiwidream Oct 1, 2026
d21aaa4
3.x.x: wait for L6's wallet when createwallet outlasts its RPC timeou…
kiwidream Oct 2, 2026
c34ee25
3.x.x: hold the cutover rehearsal's frontend ports until the frontend…
kiwidream Oct 2, 2026
da1274e
3.x.x: time candidate claim leases on the taker's monotonic clock, la…
kiwidream Oct 2, 2026
fdcf43b
3.x.x: stop SharedLog losing events whose callsite another test reach…
kiwidream Oct 2, 2026
b8aeb29
3.x.x: order the tips plan's scheduled block against its warm-up tips…
kiwidream Oct 2, 2026
6280bc0
3.x.x: take an abandoned soak candidate's height from the parent its …
RobertClarke Oct 5, 2026
fa10d2a
3.x.x: mine each clock-jump phase on settled work, so a held block's …
RobertClarke Oct 5, 2026
bd1ddeb
3.x.x: map 002's legacy share hashes after the migration transaction,…
RobertClarke Oct 5, 2026
ec29d74
3.x.x: add a block submission and broadcast kill switch for rehearsal…
RobertClarke Oct 5, 2026
07da6a7
3.x.x: time CTV fanout claim leases on the taker's monotonic clock, a…
RobertClarke Oct 5, 2026
3436a9f
3.x.x: page when a frontend holds block submission, not only once it …
RobertClarke Oct 5, 2026
a77b5c4
3.x.x: capture a found block whose payout revision moves before its s…
RobertClarke Oct 5, 2026
35e5c7c
3.x.x: attribute 016's block solvers in statements of at most 128 blo…
RobertClarke Oct 5, 2026
0f132bf
3.x.x: hold block submission for the whole cluster from the ledger, w…
RobertClarke Oct 5, 2026
7c80c55
3.x.x: keep the PostgreSQL CI shards' database on a tmpfs, give their…
RobertClarke Oct 5, 2026
0411f3b
3.x.x: read only the due fanouts in the CTV claim lane, through a par…
RobertClarke Oct 5, 2026
a5b0aad
3.x.x: drive frontends the harness did not launch, through their load…
RobertClarke Oct 5, 2026
186903d
3.x.x: fence earlier builds off a pending share-hash backfill with th…
RobertClarke Oct 6, 2026
c95febb
3.x.x: settle the SIGTERM drain's block before the next fault, so a s…
RobertClarke Oct 6, 2026
94d55c2
3.x.x: document the post-offer payout-revision race's ALERT lines as …
RobertClarke Oct 6, 2026
2660940
3.x.x: async promotion with live miners: account for every offered, A…
Anatolie Oct 6, 2026
3172623
3.x.x: measure a throughput level that falls below the floor once mor…
RobertClarke Oct 6, 2026
8d6087a
3.x.x: reusable release benchmark: A/B driver, D1 comparison summariz…
Anatolie Oct 6, 2026
edaf90f
3.x.x: answer a share refused by the payout-revision fence stale-job,…
RobertClarke Oct 6, 2026
42d60a6
3.x.x: production-window matrix (L3) on the version bump, release-can…
Anatolie Oct 6, 2026
b0627b4
3.x.x: take the settlement-lock fault's lock only on current work and…
RobertClarke Oct 6, 2026
67b73e8
3.x.x: version 3.0.0-rc.1 and its release notes (#557) (#703)
RobertClarke Oct 6, 2026
f9aea27
3.x.x: let the read tier's scrapes in flight finish before it stops p…
RobertClarke Oct 6, 2026
fc2c822
3.x.x: #555's session points and #521's mainnet shapes in the weekly …
Anatolie Oct 6, 2026
5cfb0a3
3.x.x: stream the recovery-evidence export with FETCH_COUNT in the sc…
RobertClarke Oct 6, 2026
bac4432
3.x.x: check legacy carry-forward chains per payout program, as 2.x k…
RobertClarke Oct 6, 2026
dd8f765
3.x.x: gate the weekly soak's resident memory for real, now that #627…
RobertClarke Oct 6, 2026
f17f0bb
3.x.x: add a sidecar tool that proves legacy audit bodies whose segme…
RobertClarke Oct 6, 2026
caa4e84
3.x.x: answer a share whose commit gate closed for unavailable author…
RobertClarke Oct 6, 2026
bc8ae8d
3.x.x: version 3.0.0-rc.2 and its release notes (#557) (#717)
RobertClarke Oct 6, 2026
d41a414
3.x.x: cut the share append's ORDER_LOCK hold from nine client round …
RobertClarke Oct 6, 2026
828259e
3.x.x: export the recovery evidence in parallel from one exported sna…
RobertClarke Oct 6, 2026
61b81a4
3.x.x: version 3.0.0-rc.3 and its release notes (#557) (#722)
RobertClarke Oct 6, 2026
cdec405
3.x.x: listen with a 4096 backlog (PRISM_STRATUM_LISTEN_BACKLOG) inst…
RobertClarke Oct 6, 2026
f687005
3.x.x: version 3.0.0-rc.4 and its release notes (#557) (#725)
RobertClarke Oct 6, 2026
811a22f
3.x.x: summarize the recovery evidence in parallel, byte-identical to…
RobertClarke Oct 6, 2026
a5c0afc
3.x.x: list the legacy audit rows import-audits refuses for 2.x's win…
RobertClarke Oct 6, 2026
25eac8d
3.x.x: a go-live gate that checks every self-check fact but legacy au…
RobertClarke Oct 6, 2026
5d677a3
3.x.x: let the import admission gate run its integrity report on a ho…
RobertClarke Oct 7, 2026
1a4e353
3.x.x: compute the carry-forward integrity report's mismatches and dr…
RobertClarke Oct 7, 2026
d838cfd
3.x.x: let migrate --defer-share-hashes serve with 002's share-hash b…
RobertClarke Oct 7, 2026
539d6c9
3.x.x: let fatal-state clear accept a tip that only extended during i…
RobertClarke Oct 7, 2026
2d103c3
3.x.x: let migrate --offline-indexes build 013's and 024's indexes wi…
RobertClarke Oct 8, 2026
c62ac57
3.x.x: open the async-promotion drill's gap session on published work…
RobertClarke Oct 8, 2026
1ede828
3.x.x: finish a deferred share-hash backfill while frontends serve, i…
RobertClarke Oct 8, 2026
0686a60
3.x.x: version 3.0.0-rc.5 and its release notes (#557) (#749)
RobertClarke Oct 8, 2026
97bcd7e
3.x.x: re-check a failed record-2 attempt on a fresh connection when …
RobertClarke Oct 8, 2026
c8efdae
3.x.x: let the async-promotion drill's new-tip shares wait for work a…
RobertClarke Oct 8, 2026
da02b1c
3.x.x: bound the pool hashrate series' ledger reads at both ends, so …
RobertClarke Oct 8, 2026
81c592c
3.x.x: version 3.0.0-rc.6 and its release notes (#557) (#756)
RobertClarke Oct 8, 2026
12f1ae8
DO NOT MERGE without coordinator GO: 3.x.x: drop an idle node connect…
RobertClarke Oct 9, 2026
4c13491
3.x.x: write each legacy audit before SETTLEMENT_LOCK and bound impor…
RobertClarke Oct 10, 2026
aabe470
3.0.x: version 3.0.0 and its release notes (#557) (#776)
kiwidream Oct 22, 2026
75116cd
v3.0.0 chore: consolidate release for main
kiwidream Oct 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
504 changes: 151 additions & 353 deletions .env.example

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions .github/actionlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# actionlint configuration: the workflow runs on Blacksmith runners, whose
# labels actionlint does not know.
self-hosted-runner:
labels:
- blacksmith-2vcpu-ubuntu-2404
# The nightly load harness (prism-load-nightly.yml) runs its presets on
# the runner each preset names.
- blacksmith-8vcpu-ubuntu-2404
- blacksmith-16vcpu-ubuntu-2404
# The runner probe (prism-load-runner-probe.yml, #541) also measures the
# 32 vCPU class.
- blacksmith-32vcpu-ubuntu-2404
56 changes: 56 additions & 0 deletions .github/actions/apt-install/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Install Ubuntu packages
description: >-
Install Ubuntu packages with .github/scripts/apt-install.sh, which retries,
falls back to the mirrors in .github/apt/ubuntu-mirrors.txt, and keeps the
downloaded packages in a cache (saved with actions/cache) so an install can
still succeed while the Ubuntu mirrors are unreachable.

inputs:
packages:
description: Space-separated Ubuntu package names.
required: true

runs:
using: composite
steps:
- name: Compute the package cache key
id: key
shell: bash
env:
PACKAGES: ${{ inputs.packages }}
run: |
set -euo pipefail
read -r -d '' -a packages <<< "${PACKAGES}" || true
digest="$(printf '%s\n' "${packages[@]}" | sort -u | sha256sum | cut -c1-16)"
# One cache per package set and month: a new month saves a fresh set,
# and restores from the previous month until then.
prefix="apt-install-v1-${RUNNER_OS}-${RUNNER_ARCH}-${digest}-"
{
printf 'prefix=%s\n' "${prefix}"
printf 'key=%s%s\n' "${prefix}" "$(date -u +%Y-%m)"
} >> "${GITHUB_OUTPUT}"

- name: Restore the package cache
id: restore
uses: actions/cache/restore@v6
with:
path: ~/.cache/apt-install
key: ${{ steps.key.outputs.key }}
restore-keys: ${{ steps.key.outputs.prefix }}

- name: Install the packages
shell: bash
env:
PACKAGES: ${{ inputs.packages }}
run: |
set -euo pipefail
read -r -d '' -a packages <<< "${PACKAGES}" || true
APT_INSTALL_CACHE_DIR="${HOME}/.cache/apt-install" \
bash "${GITHUB_ACTION_PATH}/../../scripts/apt-install.sh" "${packages[@]}"

- name: Save the package cache
if: steps.restore.outputs.cache-hit != 'true'
uses: actions/cache/save@v6
with:
path: ~/.cache/apt-install
key: ${{ steps.key.outputs.key }}
237 changes: 237 additions & 0 deletions .github/actions/prism-load-evidence/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,237 @@
name: Record PRISM load evidence
description: >-
#551 (S6 of #487): read the ci-evidence trend, apply the report-only
regression rule to this run's trend rows, and, when `write` is true,
promote the selected bundles to a release, append the rows to ci-evidence
and open or update the one regression tracking issue. With `write` false
(pull requests and dispatches) it only reads and reports: nothing is
recorded, promoted or filed. Expects this repository checked out at the
workspace root (the scripts and the regression config are read from it)
and the rows as scripts/prism_load_trend.py `row` wrote them, one *.json
per preset run. A writing job needs `contents: write` (rows, releases),
`issues: write` and `actions: read` (to download the bundles it promotes);
it must be a scheduled run or a `v*` tag push, and the first step refuses
anything else, as `append` refuses any push row whose `ref` is not
refs/tags/v*. For #550's tag job: rows built with `--lane L3 --ref
"$GITHUB_REF"`, `rows-dir` holding them,
`promote: all`, `release: <the tag>` (the release must already exist),
and `regression-config: ''` unless L3 joins the rule's lanes.

inputs:
rows-dir:
description: Directory of this run's trend rows (*.json).
required: true
write:
description: >-
`true` to promote, append and file the issue; only on a schedule or a
`v*` tag push.
required: false
default: "false"
promote:
description: >-
Which rows' bundles to promote: `policy` (L3, L5 and the weekly soak always, L2 when
flagged), `all`, `flagged` or `none`.
required: false
default: policy
release:
description: >-
`monthly` for the rolling ci-evidence/YYYY-MM pre-release (created when
missing), or an existing release's tag (the full suite's).
required: false
default: monthly
regression-config:
description: The rule's thresholds; empty skips the rule.
required: false
default: test/prism-load-regression.toml
variance:
description: >-
#542's variance document (scripts/prism_load_probe.py variance --out).
Empty uses test/prism-load-variance.json when it is checked in, and the
provisional spread otherwise.
required: false
default: ""
issue-label:
description: The label of the one regression tracking issue.
required: false
default: prism-load-regression
artifact-name:
description: Name of the artifact the verdict is uploaded as.
required: false
default: prism-load-regression-verdict
github-token:
description: The job's token.
required: true

outputs:
regressions:
description: Numbers the rule flagged; `unknown` when it could not run, empty when skipped.
value: ${{ steps.regress.outputs.regressions }}

runs:
using: composite
steps:
- name: Refuse a write from an event that may not write
if: ${{ inputs.write == 'true' }}
shell: bash
env:
EVENT: ${{ github.event_name }}
REF: ${{ github.ref }}
run: |
set -euo pipefail
if [[ "${EVENT}" == schedule || ( "${EVENT}" == push && "${REF}" == refs/tags/v* ) ]]; then
exit 0
fi
echo "::error::${EVENT} on ${REF} may not write evidence; pull request and dispatch runs produce artifacts only (#551)"
exit 1

- name: Read the trend from ci-evidence
id: history
shell: bash
run: |
set -uo pipefail
dir="${RUNNER_TEMP}/prism-load-history"
rm -rf "${dir}"
if python3 scripts/prism_load_trend.py fetch --out "${dir}"; then
printf 'ok=true\ndir=%s\n' "${dir}" >> "${GITHUB_OUTPUT}"
else
echo "::warning::could not read ci-evidence; the regression rule has no history this run"
printf 'ok=false\n' >> "${GITHUB_OUTPUT}"
fi

- name: Apply the regression rule (report-only)
id: regress
if: ${{ inputs.regression-config != '' }}
shell: bash
env:
ROWS: ${{ inputs.rows-dir }}
CONFIG: ${{ inputs.regression-config }}
VARIANCE: ${{ inputs.variance }}
HISTORY_OK: ${{ steps.history.outputs.ok }}
HISTORY: ${{ steps.history.outputs.dir }}
run: |
set -uo pipefail
verdict="${RUNNER_TEMP}/prism-load-verdict"
mkdir -p "${verdict}"
if [[ "${HISTORY_OK}" != true ]]; then
# Unknown, not "nothing regressed" (EP-OBSERVABILITY).
printf 'regressions=unknown\n' >> "${GITHUB_OUTPUT}"
printf '### Load regression rule (#551)\n\nNo verdict: ci-evidence could not be read.\n' >> "${GITHUB_STEP_SUMMARY}"
exit 0
fi
args=(--history "${HISTORY}" --rows "${ROWS}" --config "${CONFIG}"
--json "${verdict}/verdict.json" --markdown "${verdict}/verdict.md"
--github-output "${GITHUB_OUTPUT}"
--repository "${GITHUB_REPOSITORY}" --server-url "${GITHUB_SERVER_URL}")
if [[ -z "${VARIANCE}" && -f test/prism-load-variance.json ]]; then
VARIANCE=test/prism-load-variance.json
fi
if [[ -n "${VARIANCE}" ]]; then
args+=(--variance "${VARIANCE}")
fi
if python3 scripts/prism_load_regress.py "${args[@]}" > /dev/null; then
cat "${verdict}/verdict.md" >> "${GITHUB_STEP_SUMMARY}"
printf 'verdict=%s\n' "${verdict}/verdict.json" >> "${GITHUB_OUTPUT}"
else
printf 'regressions=unknown\n' >> "${GITHUB_OUTPUT}"
printf '### Load regression rule (#551)\n\nNo verdict: the rule could not read its inputs (see the log).\n' >> "${GITHUB_STEP_SUMMARY}"
fi

- name: Upload the verdict
if: ${{ steps.regress.outputs.verdict != '' }}
uses: actions/upload-artifact@v7
with:
name: ${{ inputs.artifact-name }}
overwrite: true
retention-days: 90
path: ${{ runner.temp }}/prism-load-verdict
if-no-files-found: error

- name: Promote the selected bundles
id: promote
if: ${{ inputs.write == 'true' && inputs.promote != 'none' }}
shell: bash
env:
GH_TOKEN: ${{ inputs.github-token }}
ROWS: ${{ inputs.rows-dir }}
SELECT: ${{ inputs.promote }}
RELEASE: ${{ inputs.release }}
VERDICT: ${{ steps.regress.outputs.verdict }}
run: |
set -uo pipefail
args=(--rows "${ROWS}" --select "${SELECT}" --release "${RELEASE}" --repository "${GITHUB_REPOSITORY}")
if [[ -n "${VERDICT}" ]]; then
args+=(--verdict "${VERDICT}")
fi
# A failed promotion is written into its row as failed and the rows
# are still recorded; the last step fails the job.
if python3 scripts/prism_load_trend.py promote "${args[@]}"; then
printf 'ok=true\n' >> "${GITHUB_OUTPUT}"
else
printf 'ok=false\n' >> "${GITHUB_OUTPUT}"
fi

- name: Append the rows to ci-evidence
id: append
if: ${{ inputs.write == 'true' }}
shell: bash
env:
ROWS: ${{ inputs.rows-dir }}
run: |
set -uo pipefail
if python3 scripts/prism_load_trend.py append --rows "${ROWS}"; then
printf 'ok=true\n' >> "${GITHUB_OUTPUT}"
else
printf 'ok=false\n' >> "${GITHUB_OUTPUT}"
fi

- name: Open or update the regression tracking issue
if: >-
${{ inputs.write == 'true' && steps.regress.outputs.regressions != ''
&& steps.regress.outputs.regressions != '0' && steps.regress.outputs.regressions != 'unknown' }}
shell: bash
env:
GH_TOKEN: ${{ inputs.github-token }}
LABEL: ${{ inputs.issue-label }}
COUNT: ${{ steps.regress.outputs.regressions }}
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
run: |
set -euo pipefail
repo="${GITHUB_REPOSITORY}"
gh label create "${LABEL}" --repo "${repo}" --color D93F0B \
--description "The load regression rule flagged a number (#551); report-only" 2>/dev/null || true
# An issue body holds 65,536 characters.
body="$(head -c 60000 "${RUNNER_TEMP}/prism-load-verdict/verdict.md")

Kept by the prism-load-evidence action (#551) from ${RUN_URL}. Report-only: it does not page and does not block a merge. The body always shows the latest flagged run; each flagged run also comments. Close it once the cause is fixed or the change is accepted."
issue="$(gh issue list --repo "${repo}" --label "${LABEL}" --state open --limit 1 --json number --jq '.[0].number // empty')"
if [[ -n "${issue}" ]]; then
gh issue edit "${issue}" --repo "${repo}" --body "${body}"
gh issue comment "${issue}" --repo "${repo}" \
--body "${RUN_URL} flagged ${COUNT} number(s); the body now shows that run."
else
gh issue create --repo "${repo}" --label "${LABEL}" \
--title "PRISM load: the regression rule flagged a number (report-only)" --body "${body}"
fi

- name: Fail if evidence was not recorded
if: ${{ always() }}
shell: bash
env:
WRITE: ${{ inputs.write }}
HISTORY: ${{ steps.history.outputs.ok }}
REGRESSIONS: ${{ steps.regress.outputs.regressions }}
PROMOTED: ${{ steps.promote.outputs.ok }}
APPENDED: ${{ steps.append.outputs.ok }}
run: |
set -euo pipefail
failed=()
[[ "${HISTORY}" == false ]] && failed+=("reading ci-evidence")
[[ "${REGRESSIONS}" == unknown ]] && failed+=("the regression rule")
[[ "${PROMOTED}" == false ]] && failed+=("a promotion (see the rows' promotion field)")
if [[ "${WRITE}" == true && "${APPENDED}" != true ]]; then
failed+=("appending the rows to ci-evidence")
fi
if (( ${#failed[@]} )); then
printf '::error::not done: %s\n' "${failed[@]}"
exit 1
fi
22 changes: 22 additions & 0 deletions .github/actions/rust-toolchain/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Set up the pinned Rust toolchain
description: >-
Install the toolchain that rust-toolchain.toml pins and assert that the
active rustc and cargo report exactly that version. The file is the one
source of the pin; scripts/check_toolchain_pin.py holds Cargo.toml's
rust-version and the lab/prism/Dockerfile builder image to it.

runs:
using: composite
steps:
- name: Install the toolchain named in rust-toolchain.toml
shell: bash
run: |
set -euo pipefail
# rustup 1.28 and later read rust-toolchain.toml when no toolchain is
# named, installing the pinned channel with its profile and components.
rustup toolchain install --no-self-update
rustup show active-toolchain

- name: Assert the active toolchain is the pin
shell: bash
run: python3 scripts/check_toolchain_pin.py --installed
15 changes: 15 additions & 0 deletions .github/apt/ubuntu-mirrors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Fallback Ubuntu mirrors for CI package installs (.github/scripts/apt-install.sh).
#
# The runner's own Ubuntu sources are tried first. If an install fails there,
# the helper points apt at this list instead, and apt tries these mirrors in
# priority order (without a priority, apt picks mirrors at random). Metadata
# must be separated from the URI by a tab. Azure's cloud mirror, the kernel.org mirror and Princeton's mirror
# run on infrastructure separate from Canonical's archive, which comes last.
#
# Every mirror here must carry the release, -updates, -backports and
# -security suites for amd64. apt checks everything against the Ubuntu
# archive signing key, so a mirror cannot change what gets installed.
http://azure.archive.ubuntu.com/ubuntu/ priority:1
https://mirrors.edge.kernel.org/ubuntu/ priority:2
https://mirror.math.princeton.edu/pub/ubuntu/ priority:3
http://archive.ubuntu.com/ubuntu/ priority:4
Loading
Loading