Skip to content

policy: implement Idris2 ABI, Zig FFI, and Hexadeca conformance #103

Description

@hyperpolymath

Policy outcome required

Bring IDApTIK's external interface boundary into estate policy:

  • ABI contracts and proofs are Idris2.
  • FFI implementation/adaptation is Zig.
  • Public APIs conform to the canonical Zig unified Hexadeca API.
  • Any eligible BEAM native work uses SNIF rather than an application-owned NIF.

This issue is separate from #102, which tracks the priority tests and benchmarks derived from Proven-Tests doctrine.

Verified current state (2026-08-29)

Observation horizon: the complete tracked working tree excluding target/ and the vendored Burble source under vendor/.

  • There are zero Idris2 source/package files in IDApTIK.
  • There are zero Zig source files in IDApTIK.
  • crates/idaptik-ffi implements the exported C ABI directly in Rust and generates include/idaptik.h with cbindgen.
  • Its Rust tests provide valuable in-process-vs-ABI parity for the Ghost Lobby run and snapshot, but this is not an Idris proof or Zig adapter conformance test.
  • README, ADR-0001, META/STATE/ECOSYSTEM metadata, and Rust module documentation describe Zig and Idris2 as if implemented; those are currently design intent, not repository reality.
  • No IDApTIK-owned BEAM NIF loader was found. SNIF conversion is therefore not presently applicable inside this repository. The external Burble relay has its own SNIF/native-dependency ledger in policy: complete Idris2/Zig/SNIF boundary and native-dependency migration burble#207.
  • The project assurance profile already records DIRECT_FFI_NO_HEXADECA and UNVERIFIED_RUST; that warning is correct.

Required implementation

Idris2 ABI

  • Model every exported handle/function in crates/idaptik-ffi/include/idaptik.h.
  • Prove ownership/lifetime transitions: allocated handle is freed once; freed/null handles cannot be treated as live.
  • Prove string ownership and idap_string_free pairing.
  • Model JSON success/error shape distinction and valid UTF-8/NUL constraints.
  • Model deterministic one-tick transition and snapshot format/version invariants.
  • Add a package build and CI gate; scan for postulate, believe_me, assert_total, and partial with reviewed exceptions only.

Zig FFI/API adapter

  • Add the actual Zig adapter over the core boundary; declarations and tests must correspond one-for-one with the Idris model.
  • Add clean/firing conformance fixtures comparing Rust in-process truth, the C export, the Zig adapter, and Idris-derived vectors.
  • Generate or validate headers through an authoritative pipeline; fail on drift.
  • Keep unsafe pointer ownership in the smallest auditable boundary and fuzz null, invalid UTF-8, malformed JSON, double-free prevention strategy, panic containment, and snapshot round trips.

Hexadeca conformance blocker

A complete hyperpolymath repository-name enumeration (limit 1000) and bounded local searches found conflicting historical names but did not locate a canonical Zig unified Hexadeca API repository/specification. Conformance cannot honestly be implemented or asserted until that authority is located or published.

  • Locate/publish the canonical authority, pin its version/digest, then add adapter conformance tests.
  • Do not substitute an invented local approximation and call it canonical.

Documentation and metadata gate

  • Until implementation lands, change all current-state claims to explicit design intent / gap language.
  • Once implemented, derive machine-readable status from passing gates so it cannot claim ffi-language=zig and abi-model-language=idris2 merely from policy intent.

Definition of done

The Idris2 package compiles without unreviewed proof escapes; every external ABI operation is represented; the executable Zig adapter agrees with Rust truth and Idris-derived fixtures including a planted failing fixture; the API conforms to a located and pinned Hexadeca authority; and CI rejects boundary drift.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bindingsABI, FFI, WASM, and cross-language interop surfaceschoreRoutine maintenance with no behaviour changegovernancePolicy, rulesets, standards, compliance, and their enforcement

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions