Estate-policy gap
idris2/src/Main.idr uses module-wide %default partial. That is a real totality waiver across the affine front-end executable, not a comment or scanner false positive. The affected boundary includes argument parsing, file I/O orchestration, parser invocation, type checking, and IR emission.
Because Idris2 is the estate ABI language, a global waiver is too broad to serve as the final trust boundary.
Required outcome
- Audit every definition in
idris2/src/Main.idr under %default total.
- Make pure parsing, option transformation, and orchestration helpers total where their signatures permit it.
- Represent recoverable failures in result types rather than relying on partial evaluation.
- If an I/O primitive is inherently partial in the available Idris2 library, attach
partial only to the smallest boundary and document the exact precondition/failure semantics.
- Publish which functions are total, which boundary remains partial, and why.
- Add a CI totality check.
Acceptance controls
- The module builds total-by-default.
- Every remaining local
partial is individually documented and gate-visible.
- A deliberately non-total pure fixture is rejected, proving that the CI gate detects the failure class.
- Existing affine-front-end behaviour and Rust bridge integration tests continue to pass.
Adding a local annotation or a workflow scaffold is not proof of totality. Keep configured, checked, and proved distinct.
Estate-policy gap
idris2/src/Main.idruses module-wide%default partial. That is a real totality waiver across the affine front-end executable, not a comment or scanner false positive. The affected boundary includes argument parsing, file I/O orchestration, parser invocation, type checking, and IR emission.Because Idris2 is the estate ABI language, a global waiver is too broad to serve as the final trust boundary.
Required outcome
idris2/src/Main.idrunder%default total.partialonly to the smallest boundary and document the exact precondition/failure semantics.Acceptance controls
partialis individually documented and gate-visible.Adding a local annotation or a workflow scaffold is not proof of totality. Keep
configured,checked, andproveddistinct.