Skip to content

Commit 66cf3ca

Browse files
ci: wire taiko/ into atlas-all (clean + planted legs, foundry pinned v1.7.1)
1 parent f678d69 commit 66cf3ca

3 files changed

Lines changed: 104 additions & 0 deletions

File tree

.github/workflows/atlas-all.yml

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,96 @@ jobs:
355355
name: forge-out-v4-hooks-${{ matrix.leg }}
356356
path: ci-out/v4-hooks-${{ matrix.leg }}.out
357357

358+
taiko-cases:
359+
# Taiko Type-1 Ethereum-equivalence twins. Same paired-leg pattern
360+
# as evm-cases / v4-hooks-cases above (clean: rc==0 AND zero markers;
361+
# planted: rc!=0 AND markers>=1). The taiko planted suite has 1 test
362+
# that passes (warm-SLOAD — only the cold-SLOAD constant was mutated,
363+
# demonstrating single-localized-hunk discipline) alongside 5 that
364+
# fail with the INVARIANT VIOLATED marker, so the suite-level rule
365+
# still holds. Lives outside the cases/ matrix because taiko/ is a
366+
# subdir-scoped lane (Taiko Labs grant track), not a numbered Atlas
367+
# case.
368+
#
369+
# Foundry pinned to v1.7.1 here — same pin as v4-hooks-cases. The
370+
# §4b code-quality review (2026-06-28) was captured on this toolchain
371+
# (6/6 clean, 1/5 planted with markers); the pin keeps the live badge
372+
# a faithful re-verification of the §4b receipt rather than a
373+
# moving-target stable-channel claim. Shared setup-foundry composite
374+
# for cases 06+ stays on `stable`.
375+
name: Atlas taiko — ${{ matrix.leg }}
376+
runs-on: ubuntu-latest
377+
timeout-minutes: 25
378+
strategy:
379+
fail-fast: false
380+
matrix:
381+
leg:
382+
- clean
383+
- planted
384+
steps:
385+
- uses: actions/checkout@v4
386+
- name: Install Foundry (v1.7.1, scorecard pin)
387+
uses: foundry-rs/foundry-toolchain@v1
388+
with:
389+
version: v1.7.1
390+
391+
- name: Verify forge on PATH
392+
run: |
393+
forge --version
394+
cast --version
395+
396+
- name: Install forge-std (${{ env.FORGE_STD_VERSION }})
397+
working-directory: taiko/${{ matrix.leg }}
398+
run: |
399+
# Same `--no-git` install convention as the cases/ EVM jobs;
400+
# the leg dir is not its own git root.
401+
forge install foundry-rs/forge-std@${{ env.FORGE_STD_VERSION }} --no-git
402+
403+
- name: forge build (taiko / ${{ matrix.leg }})
404+
working-directory: taiko/${{ matrix.leg }}
405+
run: |
406+
forge build
407+
ls -l out/
408+
409+
- name: forge test (taiko / ${{ matrix.leg }})
410+
working-directory: taiko/${{ matrix.leg }}
411+
run: |
412+
set +e
413+
mkdir -p "$GITHUB_WORKSPACE/ci-out"
414+
OUT="$GITHUB_WORKSPACE/ci-out/taiko-${{ matrix.leg }}.out"
415+
forge test -vv 2>&1 | tee "$OUT"
416+
rc=${PIPESTATUS[0]}
417+
set -e
418+
MARKER_COUNT=$(grep -c -E 'INVARIANT VIOLATED' "$OUT" || true)
419+
if [ "${{ matrix.leg }}" = "planted" ]; then
420+
# Planted: rc != 0 AND marker present. §4b receipt says 5/6
421+
# tests fail and each failure carries the marker; the warm-
422+
# SLOAD test passes alongside them (single-hunk discipline —
423+
# only cold SLOAD was mutated) but the suite-level rc is
424+
# still non-zero, which is what we check here.
425+
if [ "$MARKER_COUNT" -ge 1 ] && [ "$rc" -ne 0 ]; then
426+
echo "::notice::taiko planted leg fired as expected (rc=${rc}, markers=${MARKER_COUNT})."
427+
exit 0
428+
fi
429+
echo "::error::taiko planted leg regressed (rc=${rc}, markers=${MARKER_COUNT}); expected rc!=0 AND markers>=1."
430+
exit 1
431+
else
432+
# Clean: rc == 0 AND zero markers.
433+
if [ "$MARKER_COUNT" -eq 0 ] && [ "$rc" -eq 0 ]; then
434+
echo "::notice::taiko clean leg holds (rc=0, 0 markers)."
435+
exit 0
436+
fi
437+
echo "::error::taiko clean leg failed (rc=${rc}, markers=${MARKER_COUNT}); expected rc==0 AND markers==0."
438+
exit 1
439+
fi
440+
441+
- name: Upload forge raw output
442+
if: always()
443+
uses: actions/upload-artifact@v4
444+
with:
445+
name: forge-out-taiko-${{ matrix.leg }}
446+
path: ci-out/taiko-${{ matrix.leg }}.out
447+
358448
solana-cases:
359449
name: Atlas case (Solana) — ${{ matrix.case }} / ${{ matrix.leg }}
360450
runs-on: ubuntu-latest

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ have* caught the bug class on the pre-exploit code under CI run.
1010
EVM, each with both CI legs asserted (clean passes / planted fires). The
1111
[`v4-hooks/`](v4-hooks/) subdir (Uniswap Foundation Security grant lane, three
1212
hook-class invariants H1/H2/H3) is also in the matrix as `v4-hooks-cases`.
13+
The [`taiko/`](taiko/) subdir (Taiko Labs grant lane, three Type-1
14+
Ethereum-equivalence twins — PrecompileMirror / GasSchedule / BasedSequencer)
15+
is also in the matrix as `taiko-cases`.
1316

1417
---
1518

taiko/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Taiko Equivalence Subdir - Planted-Twin Atlas
22

3+
[![atlas-all](https://github.com/caliperforge/invariant-atlas/actions/workflows/atlas-all.yml/badge.svg?branch=main)](https://github.com/caliperforge/invariant-atlas/actions/workflows/atlas-all.yml?query=branch%3Amain)
4+
35
Planted-twin invariant cases for **Taiko's Type-1 Ethereum-equivalence**
46
priority, plus a **differential Foundry harness** that runs the same input
57
against a canonical L1 reference fixture and the Taiko execution-layer
@@ -8,6 +10,15 @@ mirror under test, then asserts byte-equivalence.
810
Three illustrative cases ship in v0.1. The atlas scales post-grant; the
911
cases here are the existence proof, not the exhaustive catalogue.
1012

13+
**Live CI:** the badge above tracks the atlas-all workflow on `main`,
14+
which runs the taiko/ clean leg (asserts `rc==0` AND zero `INVARIANT
15+
VIOLATED` markers) and the planted leg (asserts `rc!=0` AND
16+
markers `>=1`) on every push and weekly on Monday at 06:21 UTC. The
17+
toolchain pin (Foundry v1.7.1 + forge-std v1.9.4) matches the §4b
18+
code-quality review capture: clean 6/6 pass, planted 1/5 with the
19+
warm-SLOAD test correctly staying green (single-localized-hunk
20+
discipline — only cold SLOAD was mutated).
21+
1122
## Why these cases
1223

1324
Taiko's grant program lists three named priorities: **Ethereum-equivalence,

0 commit comments

Comments
 (0)