Commit 074f0cd
claude: add generic launch-devnet skill (#21024)
## Summary
Replaces the devnet-specific `launch-bal-devnet-3` Claude skill with two
reusable skills:
- **`launch-devnet`** — generic launcher for any ethpandaops devnet.
Takes only a landing-page URL (e.g.
`https://bal-devnet-3.ethpandaops.io`) and discovers everything else at
runtime: chain id and fork schedule from `el/genesis.json`, CL fork
epochs from `cl/config.yaml`, EL/CL bootnodes and client image tags from
the inventory API, public RPC/beacon/checkpoint URLs from the host
convention. Auto-detects port conflicts and bumps the offset, generates
`start-erigon.sh` / `start-cl.sh` / `stop.sh` / `clean.sh`, starts
erigon → waits for `jwt.hex` → starts the CL, then monitors EL head vs
network head, peer counts, and CL sync status.
- **`bal-devnet-ab-test`** — slim wrapper that reuses `launch-devnet`
for the primary instance and adds a second instance with
`IGNORE_BAL=true` on a `+400` port offset for head-to-head throughput
comparison (`gas/s`, `repeat%`, `abort`, `invalid`).
The old `launch-bal-devnet-3` skill is deleted; nothing else in the repo
referenced it.
### Key design point: failure investigation
`launch-devnet` includes an explicit "finding the absolute truth"
section. The default assumption is **not** that erigon is wrong — on a
multi-client devnet, erigon may be spec-correct while another client is
buggy, the spec itself may be ambiguous (clients split into factions),
or the network/genesis may be broken. The skill instructs the agent to:
1. Cross-check any divergence against ≥2 non-erigon ELs from the
inventory.
2. Drill down to a specific block/slot/account/storage diff.
3. Treat the EIP text as authoritative over what other clients do.
4. Surface findings to the user with concrete data (specific block,
account, EIP quote) rather than "please advise" — only after the diff is
reproducible across a restart and at least one independent client
supports the alternative result.
A "common false-positive signals" list (optimistic head,
first-newPayload timeouts, transient `peers: 0`) keeps the agent from
escalating noise.
## Files
```
+ .claude/skills/launch-devnet/SKILL.md # new — generic launcher
+ .claude/skills/bal-devnet-ab-test/SKILL.md # new — BAL A/B testing wrapper
- .claude/skills/launch-bal-devnet-3/SKILL.md # removed — superseded
```
## Test plan
- [ ] Invoke `/launch-devnet https://bal-devnet-3.ethpandaops.io` and
confirm it discovers chain id `7098917910`, the Amsterdam fork
timestamp, and ≥10 EL/CL bootnodes from the inventory.
- [ ] Confirm port-conflict detection bumps the offset when `+100` ports
are already bound.
- [ ] Confirm erigon syncs past genesis on bal-devnet-3 with the
generated scripts (no hardcoded values).
- [ ] Invoke `/launch-devnet` against a different devnet (e.g.
`fusaka-devnet-N`) and confirm the same flow works without code changes.
- [ ] Invoke `/bal-devnet-ab-test` after a successful `/launch-devnet`
run and confirm Instance B starts on `+400` ports with `IGNORE_BAL=true`
exported.
- [ ] Trigger a synthetic state-root divergence and confirm the skill
cross-checks against ≥2 non-erigon ELs before reporting a root cause.
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>1 parent af78f19 commit 074f0cd
3 files changed
Lines changed: 503 additions & 283 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
0 commit comments