Skip to content

feat(abi): add Tier-2 Idris bindings + retire legacy Foreign + close L10 transitive cycle#47

Closed
hyperpolymath wants to merge 1 commit into
mainfrom
claude/abi-tier2-and-l10-trans-cycle
Closed

feat(abi): add Tier-2 Idris bindings + retire legacy Foreign + close L10 transitive cycle#47
hyperpolymath wants to merge 1 commit into
mainfrom
claude/abi-tier2-and-l10-trans-cycle

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Summary

Three closures from the standards#124 Phase-5 follow-up:

  • A. Foreign retired. VclTotal.ABI.ForeignVclTotal.Legacy.Foreign at src/interface/legacy/Foreign.idr with a deprecation banner pointing at Tier-1 (recompute-PCC) and Tier-2 (signed attestation). Stale corpus symlink corpus/VclTotal/ABI/Foreign.idr removed (Foreign was never in the proof corpus).
  • B. Tier-2 bindings added. New VclTotal.ABI.Tier2 at src/interface/abi/Tier2.idr binds the honest C ABI vclut_verify_wire (Zig shim → Rust attest crate). Public surface: verifyWire : List Bits8 → List Bits8 → List Bits8 → IO Tier2Verdict with a typed Verified SafetyLevel (List Bits8) | Rejected String sum and fail-closed contracts at every layer.
  • C. L10 transitive cycle. src/core/Decide.idr adds hasTransitiveCycle (finite-fuel transitive closure of ENTAILS edges, total) supplementing the direct hasCircularEntails check. epiNoCycle now uses the transitive form.

Verification

  • idris2 --build verification/proofs/vclut-core.ipkg12/12 modules build clean from a fresh build/. Only pre-existing benign n-shadowing warnings in Layout.idr.
  • VclTotal.ABI.Tier2 typechecks cleanly via the corpus tree (intentionally NOT added to the manifest — same policy as legacy Foreign: FFI plumbing, not a proof).
  • No new axioms; no proof-escape symbols in any corpus module.

Trust model

Tier Path Trust
Tier-1 (strongest) src/interface/recompute-wasm (vcl_recompute) None of certifier honesty / decider correctness — consumer re-runs the decision
Tier-2 (this PR — Idris side) src/interface/abi/Tier2.idrvclut_verify_wiresrc/interface/attest::vclut_rs_verify Certifier holds Ed25519 key + ran pinned decider + Ed25519-dalek/sha2
Legacy (deprecated) src/interface/legacy/Foreign.idr Zig pipeline asserts achieved_level; no Idris certificate

Documentation

  • verification/proofs/VERIFICATION-STANCE.adoc updated: L10 closure recorded under Phase 4b/5; Foreign retirement noted (no longer an OWED); Tier2 introduced as the consumer-facing replacement.
  • docs/developer/ABI-FFI-README.adoc directory diagrams updated for the new abi/Tier2.idr + legacy/Foreign.idr layout.

Test plan

  • idris2 --build verification/proofs/vclut-core.ipkg green (12/12)
  • VclTotal.ABI.Tier2 typechecks against real VclTotal.ABI.Types via corpus tree
  • No new axioms (only pre-existing whitelist)
  • No proof-escape symbols (no believe_me/postulate/assert_*/sorry/idris_crash) in corpus
  • CI to confirm full corpus build + governance gates

Refs hyperpolymath/standards#124 (Phase 5 follow-up).

🤖 Generated with Claude Code

…L10 transitive cycle

Three closures from the standards#124 Phase-5 follow-up:

A. **VclTotal.ABI.Foreign → VclTotal.Legacy.Foreign.** The legacy
   `libvqlut` pipeline binding (Zig-side `achieved_level` assertion,
   no Idris certificate) is moved to `src/interface/legacy/` with a
   deprecation banner pointing at Tier-1 (recompute-PCC over wasm32)
   and Tier-2 (Ed25519 signed attestation). The stale corpus symlink
   `corpus/VclTotal/ABI/Foreign.idr` is removed (Foreign was never in
   the proof corpus). New consumers should target the honest paths.

B. **NEW `VclTotal.ABI.Tier2` at `src/interface/abi/Tier2.idr`.**
   Idris bindings to the honest C ABI `vclut_verify_wire`
   (`ffi/zig/src/lib.zig` → `src/interface/attest::vclut_rs_verify`).
   Exposes `verifyWire : List Bits8 → List Bits8 → List Bits8 → IO
   Tier2Verdict` with a `Verified SafetyLevel (List Bits8) | Rejected
   String` typed sum and fail-closed contract at every layer (seed
   width check, alloc failure → Rejected, negative `c_int` →
   Rejected, out-of-range level → defensive Rejected). The 65-byte
   attestation `[level:1][sig:64]` is returned on success.

C. **L10 transitive ENTAILS cycle decider** (`src/core/Decide.idr`).
   `hasCircularEntails` (direct A⊨B ∧ B⊨A only) is supplemented by
   `hasTransitiveCycle`, which computes the transitive closure of
   the ENTAILS edge list to a `length pairs` fuel bound (finite,
   total) and reports any (x,x). `epiNoCycle` now uses the
   transitive form. Closes the L10 hole that the direct check
   missed.

Verification:
- `idris2 --build verification/proofs/vclut-core.ipkg` -> 12/12
  modules build clean from a fresh `build/`. Only pre-existing
  benign `n`-shadowing warnings in `Layout.idr`.
- `VclTotal.ABI.Tier2` typechecks cleanly when wired through the
  corpus tree (not added to the manifest because it is FFI plumbing,
  not a proof; same policy as `ABI.Foreign` was).
- VERIFICATION-STANCE.adoc updated to record L10 closure
  (Phase 4b/5), Foreign retirement (no longer an OWED), and Tier2
  as the consumer-facing replacement.
- ABI-FFI-README.adoc directory diagrams updated.

Trust model deltas:
- Tier-1 (recompute) remains the strongest tier; Tier-2 is the
  honest C-ABI fallback; legacy is documented as deprecated.
- No new axioms; no proof-escape symbols
  (no believe_me/postulate/assert_/sorry/idris_crash) in any
  proof-corpus module.

Refs hyperpolymath/standards#124 (Phase 5 follow-up).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath

Copy link
Copy Markdown
Owner Author

Closing: contained inadvertent SPDX licence-header swaps (Decide.idr AGPL→MPL downgrade + unsolicited MPL stamps on two docs) that I propagated from a separate mass-licence-sweep WIP branch. Owner is redoing from scratch under tighter constraints. The substantive content (L10 transitive ENTAILS cycle, VclTotal.ABI.Tier2 bindings, VclTotal.ABI.Foreign → VclTotal.Legacy.Foreign retirement, Phase-5 stance updates) is independently valid and builds clean; future work will land it without the licence touches.

@hyperpolymath
hyperpolymath deleted the claude/abi-tier2-and-l10-trans-cycle branch June 5, 2026 14:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant