|
72 | 72 | - name: cargo test |
73 | 73 | run: cargo test |
74 | 74 |
|
| 75 | + # The P-037 formal kernel (formal/p037-kernel, docs/notes/p037-formal-kernel.md): |
| 76 | + # its own workspace root, a member of nothing, wired to nothing — the pure |
| 77 | + # guarded-transfer algebra checked twice over the same functions, by plain |
| 78 | + # test twins and by Kani proof harnesses. The PR gate is fmt + clippy + the |
| 79 | + # twins + the FAST harnesses (value-level laws, the G-A2 floor, the one-step |
| 80 | + # lemmas; well under a minute of CBMC in total). The whole-solver harnesses |
| 81 | + # take minutes each and run in formal-p037-gate.yml on a schedule / on |
| 82 | + # demand — the owner's split after the A0 spike, so the inner loop never |
| 83 | + # pays for a proof it does not need on every push. |
| 84 | + # |
| 85 | + # `toolchain: stable` here is deliberate and matches `rust-core` directly |
| 86 | + # above. The pinned rustc that #262 Stage 3 requires is a property of |
| 87 | + # action.yml — the CONSUMER-facing distribution surface, where a moving |
| 88 | + # toolchain would move what users get — not of this repository's own CI, |
| 89 | + # which is where a moving toolchain is supposed to break us first. |
| 90 | + formal-p037: |
| 91 | + name: formal kernel (fmt + clippy + twins + fast Kani) |
| 92 | + runs-on: ubuntu-latest |
| 93 | + defaults: |
| 94 | + run: |
| 95 | + working-directory: formal/p037-kernel |
| 96 | + steps: |
| 97 | + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 |
| 98 | + - uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 # master, 2026-07-10 |
| 99 | + with: |
| 100 | + toolchain: stable |
| 101 | + components: rustfmt, clippy |
| 102 | + - name: cargo fmt --check |
| 103 | + run: cargo fmt --check |
| 104 | + - name: cargo clippy (the rust/ workspace lints, copied verbatim) |
| 105 | + run: cargo clippy --all-targets |
| 106 | + - name: cargo test (the exhaustive / randomized twins) |
| 107 | + run: cargo test |
| 108 | + - name: install Kani (pinned) and its toolchain bundle |
| 109 | + run: | |
| 110 | + cargo install --locked kani-verifier --version 0.68.0 |
| 111 | + cargo kani setup |
| 112 | + - name: fast Kani harnesses (value-level laws, floor, one-step lemmas) |
| 113 | + run: | |
| 114 | + set -e |
| 115 | + for h in \ |
| 116 | + k1_transfer_join_laws k1_transfer_order_is_a_partial_order k1_cells_join_laws \ |
| 117 | + k2_election_join_laws \ |
| 118 | + k3_reads_and_contributions_are_monotone \ |
| 119 | + k4_import_is_monotone_and_conflict_propagates \ |
| 120 | + k5_collapse_monotone_and_join_morphism \ |
| 121 | + k6_consume_only_through_a_selected_or_unanimous_must \ |
| 122 | + k7_no_fabricated_consume \ |
| 123 | + k8_involutions \ |
| 124 | + k9_residual_bottom_lemma_all_three_groundings \ |
| 125 | + k10a_step_is_monotone_in_the_state \ |
| 126 | + k10e_election_step_is_monotone_in_the_state \ |
| 127 | + k11_one_step_lax_simulation \ |
| 128 | + k12a_step_keeps_uncond_coordinates_diagonal; do |
| 129 | + echo "== $h" |
| 130 | + cargo kani --harness "$h" |
| 131 | + done |
| 132 | +
|
75 | 133 | # P-022 step 7b (#261) — the production OwnIR executable's parity replay, on |
76 | 134 | # BOTH platforms. The Python half of this contract is gated by the `tests` |
77 | 135 | # matrix above (`tests/test_cli_ownir_fixtures.py` is auto-discovered like |
|
0 commit comments