Skip to content

Commit 98f7905

Browse files
chore(abi-drift): expand allowlist from 2 → 16 (full-tree survey) (#110)
## Summary Full-tree survey of the 80 cartridges carrying paired `Safe*.idr` + `*_ffi.zig` (standards#92 Phase 2 allowlist expansion, per epic standards#89). Adds 14 newly-audited-clean cartridges to the ABI Drift Gate allowlist (`007-mcp`, `agent-mcp`, `dns-shield-mcp`, `feedback-mcp`, `fleet-mcp`, `iac-mcp`, `k8s-mcp`, `local-coord-mcp`, `nesy-mcp`, `observe-mcp`, `opsm-mcp`, `pmpl-mcp`, `proof-mcp`, `secrets-mcp`), bringing the gate from 2 → 16 cartridges. The remaining 64 cartridges are either drift-bearing or hit a verifier limit — see the standards#92 comment for the full taxonomy. ## Method For each of the 80 cartridges: ```bash iseriser abi-emit-manifest --idris $(ls cartridges/$cart/abi/*/Safe*.idr | head -n1) \ --cartridge $cart \ --source-path $(ls cartridges/$cart/abi/*/Safe*.idr | head -n1) \ --out /tmp/$cart.json iseriser abi-verify --manifest /tmp/$cart.json --zig-ffi $(ls cartridges/$cart/ffi/*_ffi.zig | head -n1) ``` — exit 0 = allowlisted, exit 2 = drift, parse error = verifier limit. ## Test plan - [x] All 16 allowlisted cartridges return exit 0 from `iseriser abi-verify` against the Phase-1b emitter manifest of their own `Safe*.idr`. - [ ] CI green on the new allowlist. ## Drift breakdown (for context — not in this PR) | Class | Count | Description | Action | |---|---|---|---| | A | ~50 | `Error → error → err`: manifest emitter does NOT apply the iseriser#15 Zig reserved-word conversion that the FFI side does | one-fix-many — file on iseriser | | B | ~8 | Name-normalisation mismatches (`GitHub→git_hub` vs Zig variant, `RabbitMQ→rabbit_mq` vs `rabbitmq`, similar for `DynamoDB`/`UmsProject`) | converter rule (file on iseriser) | | C | ~6 | Genuine missing-enum-in-Zig (`cloud-mcp`/`comms-mcp`/`ml-mcp`/`research-mcp`/`gitlab-api-mcp`/`mongodb-mcp` — Idris2 declares enums Zig doesn't have) | per-cartridge ABI gap | | P | 5 | `bsp-mcp`/`container-mcp`/`dap-mcp`/`lsp-mcp`/`vault-mcp` — verifier's Zig parser doesn't handle their switch arm form | file on iseriser | | E | 1 | `vordr-mcp` — Safe*.idr "data declaration has no `=`" | per-cartridge Idris2 source fix | Refs hyperpolymath/standards#92 (Phase 2 allowlist expansion). Refs hyperpolymath/standards#89 (epic — sub-issue 3). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent d307b6c commit 98f7905

1 file changed

Lines changed: 21 additions & 8 deletions

File tree

.github/workflows/abi-drift.yml

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,19 +71,32 @@ jobs:
7171
- name: Resolve cartridge allowlist
7272
id: discover
7373
# 80 cartridges in the tree carry a paired Safe*.idr + *_ffi.zig.
74-
# The gate starts narrow: only cartridges audited and known clean
75-
# against the Phase 1b emitter + Phase 1 verifier are enforced.
76-
# Expand this list as cartridges are individually verified — the
77-
# broader spot-check (PR body) found real drift (e.g. 007-mcp's
78-
# `ToolRisk` enum) plus Zig-reserved-word false positives (e.g.
79-
# `Error → err` in airtable-mcp / postgresql-mcp) that need the
80-
# converter taught about Zig reserved words first.
74+
# 16 cartridges are audited green against the Phase 1b emitter +
75+
# Phase 1 verifier (full-tree survey, 2026-05-20). 63 carry real
76+
# drift, 5 hit a verifier parser limit (non-canonical Zig switch
77+
# arms — separately tracked), 1 has a malformed Idris2 source.
78+
# See standards#92 for the survey + drift taxonomy. Expand this
79+
# list as drift classes get resolved upstream.
8180
run: |
8281
set -euo pipefail
8382
{
8483
echo 'carts<<EOF'
85-
echo 'ssg-mcp'
84+
echo '007-mcp'
85+
echo 'agent-mcp'
86+
echo 'dns-shield-mcp'
87+
echo 'feedback-mcp'
88+
echo 'fleet-mcp'
89+
echo 'iac-mcp'
90+
echo 'k8s-mcp'
8691
echo 'k9iser-mcp'
92+
echo 'local-coord-mcp'
93+
echo 'nesy-mcp'
94+
echo 'observe-mcp'
95+
echo 'opsm-mcp'
96+
echo 'pmpl-mcp'
97+
echo 'proof-mcp'
98+
echo 'secrets-mcp'
99+
echo 'ssg-mcp'
87100
echo 'EOF'
88101
} >> "$GITHUB_OUTPUT"
89102

0 commit comments

Comments
 (0)