Core-N0 Interpreter Semantics Identity v1
Status: implemented and validated
Architecture decision:
ADR-0018
Digest: SHA-256
1. Purpose
semantic_hash(program) identifies one Core artifact.
interpreter_semantics_hash(profile) separately identifies the versioned
canonical semantics used to verify and evaluate artifacts in that profile.
The latter is required by the P1 structural certificate.
2. Domain and framing
domain = "NAUX:core-n0:interpreter-semantics:v1\0"
Fields occur in this order:
domain bytes
schema name as U32-length-prefixed UTF-8
schema major: U16
schema minor: U16
schema patch: U16
identity major: U16
identity minor: U16
identity patch: U16
profile tag: U8
capability count: U32
capability IDs as U32-length-prefixed UTF-8
All integers are unsigned big-endian. Profile tags equal Semantic Encoding v1.
Identity format version:
1.0.0
3. Ordered capability IDs
P1V0 includes:
verified-artifact-only-v1
call-by-value-left-to-right-anf-v1
strict-i64-explicit-modes-v1
strict-f64-binary64-v1
typed-overflow-bounds-v1
deterministic-step-call-budget-v1
p1v0-values-calls-case-array-v1
Each later profile appends exactly one cumulative capability:
P1V1: p1v1-lexical-logical-store-shared-v1
P1V2: p1v2-existential-closure-environment-v1
P1V3: p1v3-linear-lexical-handler-v1
P1V4: p1v4-affine-direct-unique-v1
P1V5: p1v5-anchored-ownership-return-v1
The strings are semantic revision identifiers whose definitions live in the Typed Core and profile contracts. They are not Rust symbol names.
4. Stability rule
- Existing profile bytes and hashes never change for an append-only profile.
- A changed existing semantic meaning requires a new capability revision or identity domain/version.
- Such a change requires an ADR, migration policy, implementation update, complete vector replacement, and parity regressions.
- Rust source layout, comments, compiler version, pointer width, and host endianness are absent.
5. Locked vectors
For Core schema core-n0 version 0.1.0 and identity format 1.0.0:
| Profile | interpreter_semantics_hash |
|---|---|
| P1V0 | d9911cf60e5afa54e271cdff274cde41b522a4a0c9855ccd6efbcd4e981909cc |
| P1V1 | b2390469cf843ac941ae66b8c10d118adb4395075567e9f7e297c1f59428733a |
| P1V2 | f42c66951eadbdc4112f94ae79c4a6bd62bdeadf898ab174a8d034b24179e025 |
| P1V3 | 2e0cab2ae5f57ee90a6a90475b5f4948db0ce768ce54777748ea11fed6d0d30f |
| P1V4 | 9553993aab31235ac0998b48e0ffbe46342c5110df939605ad8579710db0d38b |
| P1V5 | 29559c4cfe514c4f22ef01e66feaff5cfad6b2728944dfc1f72da12382b4c1cc |
The Rust seed API is core::interpreter_semantics_bytes and
core::interpreter_semantics_hash. The vectors are locked by
naux-lang/tests/core_semantics_identity.rs.
6. Evidence
- deterministic bytes and hashes;
- distinct identities for distinct profiles;
- append-only stability vectors for all implemented profiles;
- independence from Core program contents;
- no filesystem, Surface, runtime, VM, JIT, or
eggdependency; - full workspace, strict lint, formatting, governance, shell, and link gates.
The bounded Stage 1 evidence matrix is
stage1_exit_audit.md.
7. Non-claims
The identity is not a formal proof, implementation source hash, artifact hash, specializer hash, policy hash, residual hash, P1/P2, or Nauxogenesis.