Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
e88692f
fix(helix): track latest helix-relay:main config schema + add setup
JasonVranek Jul 30, 2026
a0c8be4
feat(sim): P1 harness — preflight gate + triage (observability-first)
JasonVranek Jul 31, 2026
f21026c
style(clippy): clear pre-existing warnings so CI can enforce -D warnings
JasonVranek Jul 31, 2026
737d74a
docs(plan): P2 pivots from typed mirrors to Rust consolidation (post-…
JasonVranek Jul 31, 2026
097a0b7
test(sim): hermetic golden config fixtures + byte-diff harness (P2 Ta…
JasonVranek Jul 31, 2026
70e4081
feat(sim): sim generate — port config generation into Rust (P2 Task 1)
JasonVranek Jul 31, 2026
05a450f
refactor(sim): retire the Python config generator; sim generate is th…
JasonVranek Jul 31, 2026
e6ea1a0
docs(sim): mark P2 landed (consolidation) + flag Law 1 tension for J
JasonVranek Jul 31, 2026
f001fb4
docs(sim): record CB-preflight probe — partial coverage, defer trust …
JasonVranek Jul 31, 2026
a610386
test(sim): guard the tracked cb-basic.yml against drifting from sim g…
JasonVranek Jul 31, 2026
b0947b4
test(checks): Law 4 guard-branch tests for chain_health + payload_mat…
JasonVranek Jul 31, 2026
ef3ca07
docs(plan): P3 check-trustworthiness — 3 confirmed false-greens + fix…
JasonVranek Jul 31, 2026
d55182c
feat(sim): sim generate --check — CI/agent drift gate for the configs
JasonVranek Jul 31, 2026
dc8e254
fix(ci): repoint integration nightly off the deleted example config
JasonVranek Jul 31, 2026
ae15318
style: cargo fmt the tree (CI fmt-check was red)
JasonVranek Jul 31, 2026
e706533
docs(plan): ratify J's P3 verdict-fix decisions + implementation find…
JasonVranek Jul 31, 2026
2868e8e
fix(checks): mux.routing WARNs when no routing decision is verifiable…
JasonVranek Jul 31, 2026
cad323a
fix(checks): payload_hash_match detects cross-relay conflicts (P3)
JasonVranek Jul 31, 2026
effc560
feat(checks): relay.best_bid — verify aggregated bidding by comparing…
JasonVranek Jul 31, 2026
37ebd75
fix(checks): payload conflict message no longer over-claims 'cross-re…
JasonVranek Jul 31, 2026
4b873af
revert: back out relay.best_bid — unsound data source (P3 review)
JasonVranek Jul 31, 2026
6ec6a77
docs(plan): P3 status — mux+payload landed, best-bid backed out pendi…
JasonVranek Jul 31, 2026
145d7e1
feat(checks): relay.best_bid v2 — bids from CB getHeader logs (P3 rev…
JasonVranek Jul 31, 2026
423e9bd
fix(checks): best_bid — verify only slots with delivered data; drop g…
JasonVranek Jul 31, 2026
a50aeb6
feat(just): human UX — build-cb-image, pull-images, one-command e2e
JasonVranek Jul 31, 2026
5762d69
perf(run): pre-build cb-verify before launch + host-memory advisory
JasonVranek Jul 31, 2026
df69c90
feat(sim): drop the flashbots relay — multi-relay = two helix instances
JasonVranek Jul 31, 2026
389c7a1
docs: sweep synthesis + new ARCH/CHECKS/fork-delta + fix flashbots-er…
JasonVranek Aug 1, 2026
9aac7b4
fix(orchestrator): cb-verify flag is --config, not --cb-config
JasonVranek Aug 1, 2026
72e39ba
fix(checks): C1 relay-death false-green + H3 mev-rate first-relay und…
JasonVranek Aug 2, 2026
1335abe
fix(checks): H2 warmup-5xx false-red — rate-based tolerance, not any-…
JasonVranek Aug 2, 2026
334e44b
fix(checks): M4 finality gate + extract chain_health classifier seams
JasonVranek Aug 2, 2026
e7360cb
fix(relay): M6 pagination robust to helix ordering/cursor (not flashb…
JasonVranek Aug 2, 2026
b3f9d68
fix(ci): nightly integration — enclave-name bug, matrix, reproducibil…
JasonVranek Aug 2, 2026
11ebcb7
fix(main): M5 drop the dead flashbots-Postgres post-mortem salvage
JasonVranek Aug 2, 2026
f430dd4
refactor: delete duplicate diagnostic bins + confirmed-dead code
JasonVranek Aug 2, 2026
eaafbce
docs: DEVELOPING.md (how to add checks/scenarios + dev loop) + README…
JasonVranek Aug 2, 2026
88ea1e0
perf: thin-LTO + parallelize serial beacon loops + parsed-port preced…
JasonVranek Aug 2, 2026
c9d18e4
feat(report): provenance block + extract report::tier1_failed with ex…
JasonVranek Aug 2, 2026
564a981
refactor(checks): CheckStatus worst-status Ord + classify seams for r…
JasonVranek Aug 2, 2026
e6185c6
feat(sim): `sim checks --list [--json]` catalog + `sim doctor` host p…
JasonVranek Aug 2, 2026
9ecafd6
feat(sim): `sim diff` — verdict/provenance regression gate between tw…
JasonVranek Aug 2, 2026
d1442be
feat(checks): Law-3 feature-fired assertions for the toggle scenarios
JasonVranek Aug 2, 2026
929c988
docs: record Law-3 feature-fired checks + sim diff in CHECKS.md and b…
JasonVranek Aug 2, 2026
859e3a1
docs: live-validation findings from the cb-timing-games devnet run
JasonVranek Aug 3, 2026
7a55ada
docs: confirm timing-games get_header FAIL is scenario-specific (run …
JasonVranek Aug 3, 2026
6194825
fix(cb_metrics): stop counting CB's synthetic timeout code 555 as rel…
JasonVranek Aug 3, 2026
aa3739f
docs: live-confirm the 555 timeout fix — timing-games now overall PAS…
JasonVranek Aug 3, 2026
9c93643
feat(scenarios): divergent-bid 2-helix — cb-multiple-relays gets per-…
JasonVranek Aug 3, 2026
ac2c86f
docs: live-validate divergent-bid 2-helix — 65/65 slots divergent, 0 …
JasonVranek Aug 3, 2026
857334c
feat(cb_metrics): handle CB's WS transport code 556 + pin WS log-vari…
JasonVranek Aug 3, 2026
daa717c
feat(scenarios): cb-sigverify-diff — a REAL skip_sigverify ON/OFF dif…
JasonVranek Aug 4, 2026
f6db66c
feat(scenarios): Law 7 — parametrize on EL/CL client pairs
JasonVranek Aug 4, 2026
29c90be
fix(sim diff): Skip transitions are coverage changes, not severity re…
JasonVranek Aug 4, 2026
990bf23
docs: record the skip_sigverify differential result, the sim diff cov…
JasonVranek Aug 4, 2026
2ab8b47
fix(cb_metrics): distinguish "relay rejected the blinded blocks" from…
JasonVranek Aug 4, 2026
3d565f0
docs: Law 7's first dividend — nethermind+prysm blinded blocks reject…
JasonVranek Aug 4, 2026
1abe039
fix(helix): enable the GetPayloadV2 route — prysm's MEV path was bloc…
JasonVranek Aug 4, 2026
a003492
docs: add CLAUDE.md (agent orientation) + sync the catalog drift it c…
JasonVranek Aug 4, 2026
8768f4e
test(relay_pipeline): extract the 3 cross-relay aggregations as pure …
JasonVranek Aug 4, 2026
81cfc2b
docs(plan): bank the researched signer-on-Kurtosis runtime contract
JasonVranek Aug 4, 2026
f299158
test(beacon): pin block-hash extraction against a REAL prysm response
JasonVranek Aug 4, 2026
defc2f1
fix(discovery): a relay's POSTGRES container was classified as a rela…
JasonVranek Aug 4, 2026
ac74817
test(report): pin the save->read interchange contract + render smoke
JasonVranek Aug 4, 2026
6592bcb
docs: Law 7 alt-pair layer 2 — GetPayloadV2 fix confirmed, block now …
JasonVranek Aug 4, 2026
958f1e7
test(health,metrics): cover the two 0%-coverage modules
JasonVranek Aug 4, 2026
a0735b3
fix(test): health probe_all test used the wrong return type
JasonVranek Aug 4, 2026
0c170e8
docs(CLAUDE.md): add the silence-is-not-success gate trap
JasonVranek Aug 4, 2026
f0f850e
fix(cb_metrics): two checks read metric names that cannot exist — one…
JasonVranek Aug 4, 2026
2004c79
docs(plan): signer grill verdict — build modified, two choices killed
JasonVranek Aug 4, 2026
9c9d214
feat(scenarios): cb-min-bid — prove the min_bid_eth floor drops bids …
JasonVranek Aug 4, 2026
fe1ed2a
docs(plan): empirically confirm the signer keystore permissions KILL
JasonVranek Aug 4, 2026
7ee8b6d
docs: un-retract the GetPayloadV2 claim with delivery-counter evidence
JasonVranek Aug 4, 2026
cddb076
docs: sharpen the prysm question — same v2 route, opposite outcome pe…
JasonVranek Aug 4, 2026
cd121d7
feat(signer): config-gen half of the signer-on-Kurtosis North Star
JasonVranek Aug 4, 2026
a8d5d79
feat(scenarios): cb-signer emits commit_boost_signer + the [signer] c…
JasonVranek Aug 4, 2026
93ea430
feat(checks): signer assertions — JWT-authed get_pubkeys with a key C…
JasonVranek Aug 4, 2026
0c098f9
feat(signer): wire the signer check into the run pipeline
JasonVranek Aug 4, 2026
0ba57fb
docs: mark the signer BUILT-not-validated + add the uid-10001 keystor…
JasonVranek Aug 4, 2026
2aed92f
docs: record the two-sweep overnight plan + cb-basic/cb-mux PASS
JasonVranek Aug 4, 2026
2460476
test(cb_metrics): pin CB's exposed metric names after the dead-check …
JasonVranek Aug 4, 2026
ac45b3e
fix(cb_metrics): judge submit_blinded_block on the BEACON side — a fa…
JasonVranek Aug 4, 2026
407ede3
docs: record the submit_blinded_block wrong-side finding + the recurr…
JasonVranek Aug 4, 2026
55c168a
docs: overnight sweep results — 7 PASS, 2 expected-FAIL, 1 signer lau…
JasonVranek Aug 4, 2026
ba7ebc6
docs: NORTH STAR REACHED — CB signer runs on Kurtosis, 128 keys loade…
JasonVranek Aug 4, 2026
e33f143
feat(checks): make an armed-but-unmeasured Law 3 check able to fail t…
JasonVranek Aug 5, 2026
4ec1833
docs: the do-first list was 100% stale and sent a session at fixed bugs
JasonVranek Aug 5, 2026
b14dbd4
feat(checks): WS header-stream criteria - the marker is the only disc…
JasonVranek Aug 11, 2026
b0a7ce5
chore: ethereum-package submodule now lives in the Commit-Boost org
JasonVranek Aug 11, 2026
699a6aa
docs: rename CLAUDE.md -> AGENTS.md (tool-agnostic front-door) + stub
JasonVranek Aug 11, 2026
83a00e1
docs: move internal working material to .agent/ back-room
JasonVranek Aug 11, 2026
630efee
docs: split NORTH-STAR into public DESIGN.md + internal .agent/NORTH-…
JasonVranek Aug 11, 2026
aedd0d3
docs: repoint moved-file citations + scrub public docs
JasonVranek Aug 11, 2026
e7f960e
docs: genericize machine paths and repoint stale plan links for publi…
JasonVranek Aug 11, 2026
c1dd4ac
chore: make .agent/ a local-only (gitignored) working area
JasonVranek Aug 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,19 @@
# cb-testing Docker image overrides
# ---------------------------------------------------------------------------
# Copy this file to .env and customize for your local images.
# All values have defaults in generate_kurtosis_configs.py, so this file
# is entirely optional — only needed when using custom Docker images.
# All values have baked defaults in `sim generate` (Images::default), so this
# file is entirely optional — only needed when using custom Docker images.
# ---------------------------------------------------------------------------

# Helix relay image (your custom relay build)
# Default: helix-relay:kurtosis
# HELIX_RELAY_IMAGE=helix-relay:kurtosis
# Helix relay image
# Default: ghcr.io/gattaca-com/helix-relay:main
# HELIX_RELAY_IMAGE=ghcr.io/gattaca-com/helix-relay:main

# mev-boost relay image (used in multi-relay scenarios)
# flashbots mev-boost-relay image — NO LONGER USED as a relay (multi-relay now runs
# two helix instances; see docs/fork-delta.md). Still emitted into configs but inert.
# Default: ethpandaops/mev-boost-relay:main
# MEV_RELAY_IMAGE=ethpandaops/mev-boost-relay:main

# Commit-Boost PBS image (sub latest for your local build)
# Default: commit-boost/commit-boost:latest
# MEV_BOOST_IMAGE=commit-boost/commit-boost:latest
# Commit-Boost sidecar image (sub your local `just build-all <tag>` build)
# Default: commit-boost/commit-boost:kurtosis
# MEV_BOOST_IMAGE=commit-boost/commit-boost:kurtosis
55 changes: 48 additions & 7 deletions .github/workflows/integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,34 @@ on:
description: 'Observation window in epochs'
required: false
default: '1'

env:
ENCLAVE: cb-ci-${{ github.run_id }}
cb_image:
description: 'Commit-Boost PBS image (MEV_BOOST_IMAGE). Override to pin a specific tag/digest.'
required: false
default: 'ghcr.io/commit-boost/pbs:latest'

jobs:
verify:
name: devnet + verify
name: devnet + verify (${{ matrix.scenario }})
# RUNNER MEMORY: a full devnet (geth+lighthouse + helix relay(s) + reth-rbuilder
# + commit-boost + dora/spamoor/prometheus) needs ~15-20GB; cb-mux runs TWO
# helix instances (8GB cap each) → ~25GB+. A GitHub-hosted ubuntu-latest has
# only ~7GB RAM, so this nightly requires a LARGE or SELF-HOSTED runner. Change
# runs-on accordingly before relying on it (cb-mux will OOM on the hosted runner).
runs-on: ubuntu-latest
timeout-minutes: 90

strategy:
# Don't cancel cb-mux just because cb-basic failed (or vice versa); we
# want independent e2e signal from each scenario every night.
fail-fast: false
matrix:
scenario: [cb-basic, cb-mux]

env:
# One enclave per (run, scenario) so matrix legs never collide and each
# leg's Teardown removes exactly the enclave it launched.
ENCLAVE: cb-ci-${{ github.run_id }}-${{ matrix.scenario }}

steps:
- name: Checkout
uses: actions/checkout@v6
Expand Down Expand Up @@ -56,21 +74,44 @@ jobs:
kurtosis analytics disable
echo "$(dirname $(which kurtosis))" >> $GITHUB_PATH

- name: Generate ${{ matrix.scenario }} config
# The Python generator + its checked-in example config were retired (P2);
# `sim generate` is now the source. The nightly builds no commit-boost
# image, so it pins the public CB image via .env (MEV_BOOST_IMAGE).
#
# REPRODUCIBILITY GAP: the default below is a moving `:latest` tag, so a
# replay can silently pick up a different PBS binary. commit-boost-client
# is NOT checked out here (only ethereum-package is a submodule), so we
# can't build the image from `main` in-workflow without adding that repo.
# For a reproducible run, override the `cb_image` workflow_dispatch input
# with a pinned tag/digest, e.g.
# ghcr.io/commit-boost/pbs@sha256:<digest>
# TODO: promote a pinned digest to the default here once the SSZ-current
# PBS image is confirmed (see the review NOTE this replaced), so the
# scheduled nightly is reproducible too, not just manual dispatches.
env:
# On schedule there are no inputs, so fall back to the pinned default.
CB_IMAGE: ${{ github.event.inputs.cb_image || 'ghcr.io/commit-boost/pbs:latest' }}
run: |
echo "MEV_BOOST_IMAGE=${CB_IMAGE}" > .env
cargo run --bin sim -- generate ${{ matrix.scenario }}

- name: Launch devnet + verify
timeout-minutes: 60
run: |
./scripts/run-and-verify.sh \
--config configs/example-kurtosis-config.yml \
--enclave "$ENCLAVE" \
--config configs/generated/${{ matrix.scenario }}.yml \
--json \
--live-metrics \
--min-epochs "${{ github.event.inputs.min_epochs }}" \
--target-epoch "${{ github.event.inputs.target_epoch }}" \
--target-epoch "${{ github.event.inputs.target_epoch }}"

- name: Upload artifacts
if: always()
uses: actions/upload-artifact@v5
with:
name: verify-${{ github.run_id }}
name: verify-${{ matrix.scenario }}-${{ github.run_id }}
path: |
verify-report.json
kurtosis-run.log
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@ kurtosis-configs/
scripts/kurtosis-configs/
.env
*/__pycache__

CB-Testnet.json
.agent/
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "ethereum-package"]
path = ethereum-package
url = https://github.com/JasonVranek/ethereum-package.git
url = https://github.com/Commit-Boost/ethereum-package.git
Loading
Loading