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:

Profileinterpreter_semantics_hash
P1V0d9911cf60e5afa54e271cdff274cde41b522a4a0c9855ccd6efbcd4e981909cc
P1V1b2390469cf843ac941ae66b8c10d118adb4395075567e9f7e297c1f59428733a
P1V2f42c66951eadbdc4112f94ae79c4a6bd62bdeadf898ab174a8d034b24179e025
P1V32e0cab2ae5f57ee90a6a90475b5f4948db0ce768ce54777748ea11fed6d0d30f
P1V49553993aab31235ac0998b48e0ffbe46342c5110df939605ad8579710db0d38b
P1V529559c4cfe514c4f22ef01e66feaff5cfad6b2728944dfc1f72da12382b4c1cc

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 egg dependency;
  • 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.