AEON Core v1 Compliance Specification
Status: official v1 compliance draft Scope: normative conformance requirements for AEON core implementations. AEOS-specific compliance is tracked separately.
1. Normative Language
The terms MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, and MAY are to be interpreted as normative requirements.
2. Conformance Target
An implementation claiming AEON v1 core conformance SHALL satisfy:
- language requirements in
AEON-spec-v1.md - requirements in this compliance document
cts.protocol.v1runner and lane requirements incts/protocol/v1- all REQUIRED CTS suites in the published v1 lane manifests relevant to the claimed surface:
cts/core/v1/core-cts.v1.jsoncts/aes/v1/aes-cts.v1.jsoncts/canonical/v1/canonical-cts.v1.jsonwhen canonical formatting is claimedcts/annotations/v1/annotation-stream-cts.v1.jsonwhen annotation-stream behavior is claimedcts/aeos/v1/aeos-validator-cts.v1.jsonwhen AEOS validator conformance is claimed
CTS is the public conformance authority for AEON v1. Stress, smoke, timing, fuzzing, and hardening workflows MAY be used for implementation quality and security review, but they are not separate conformance authorities unless their cases are explicitly promoted into the published CTS manifests.
Core conformance SHALL be evaluated against backbone behavior families, not only by isolated test-file success.
The current backbone families are:
- canonical rendering and node normalization
- fail-closed parsing and deterministic rejection behavior
- addressing and canonical path semantics
- quoted-key and traversal disambiguation
- attribute traversal and attribute-depth semantics
- annotation attachment and slash-channel binding
- strict literal acceptance and rejection boundaries
- separator/path literal handling
- datatype-to-literal validation behavior
The current anti-drift coverage accounting for those families is tracked in aeonite-cts/CONFORMANCE-COVERAGE.md.
3. Syntax and Key Requirements
Implementations MUST:
- accept bare, single-quoted, and double-quoted keys in all key positions;
- reject backtick-quoted keys as keys;
- reject empty quoted keys;
- reject malformed quoted-key escape sequences;
- preserve key/path disambiguation between dotted traversal (
a.b) and quoted single-key (["a.b"]); - recognize the document header only at the start of the document;
- reject a structured header (
aeon:header = { ... }) that appears after any body binding.
4. Addressing and Reference Requirements
Implementations MUST:
- support canonical path identity segments for member and index;
- support quoted member segments and quoted attribute selectors in addressing expressions;
- support attribute reference forms (for example
~a@b); - support mixed member traversal with quoted bracket member segments after
.(for example~a.[\"b.c\"],~a@meta.[\"x.y\"],~a@[\"x.y\"].z); - reject empty quoted path or attribute segments deterministically;
- reject malformed or incomplete addressing forms deterministically, including examples such as
~a@,~$.a@[, and~.[\"a\"]; - reject missing reference targets deterministically;
- reject forward references deterministically;
- reject self-references deterministically.
Implementations MUST also:
- treat attributes as binding-attached metadata, not canonical path identity segments;
- allow binding-attached attributes on bindings that resolve to container values;
- allow attribute addressing for nested bindings inside containers when the nested binding is itself addressable;
- reject postfix literal-attribute forms such as
a = [0]@{b=2}deterministically; - support nested attribute heads within configured
max_attribute_depth.
5. Depth Policy Requirements
Implementations MUST:
- expose
max_attribute_depth,max_separator_depth, andmax_generic_depthcontrols; - provide capability floor of at least
8for all three controls; - default all three controls to lock value
1; - fail closed when configured limits are exceeded;
- emit deterministic diagnostics for depth-policy violations.
6. Comment and Annotation Requirements
Implementations MUST:
- treat
/* ... */as plain comments; - support slash-channel structured block forms (
/# #/,/@ @/,/? ?/,/{ }/,/[ ]/,/( )/); - before Phase 1 parsing, ignore at most one leading UTF BOM before any comment or preamble inspection;
- accept
#!...as a plain comment only at line 1, column 1 after any ignored leading BOM; - recognize
//!as a host/file-header directive only at line 1, column 1, or line 2, column 1 when line 1 is a shebang, after any ignored leading BOM; - treat
//! format:<id>as processor-discovery-only metadata in that file-header slot; - keep file-header host directives out of AES, annotation-stream output, and canonical output;
- not activate
require,feature,profile, orcomment.*directive semantics from//!comments in v1; - preserve deterministic binding behavior for annotation channels where emitted.
7. Typed-Mode Requirements
In typed modes (strict and custom) implementations MUST:
- enforce
toggledatatype lock for toggle literals; - in
strict, reject custom datatype aliases for toggle literals even when general custom datatypes are otherwise enabled; - in
custom, allow custom datatype aliases for toggle literals under the ordinary custom-datatype policy; - enforce canonical attribute+datatype ordering:
key@{...}:type = value; - reject reversed ordering (
key:type@{...}).
7.1 Explicit Datatype Compatibility
Implementations MUST:
- validate explicit datatype/literal compatibility independent of mode;
- allow untyped bindings in transport mode;
- require datatype presence in typed modes (
strictandcustom); - emit deterministic mismatch diagnostics when an explicit reserved datatype does not match the bound literal kind.
7.2 Mode-Driven Datatype Acceptance
Implementations MUST:
- allow custom datatype labels in transport mode;
- reject custom datatype labels by default in strict mode;
- allow custom datatype labels in custom mode.
Implementations MAY expose an explicit datatype-policy override as a tooling or runtime option, but the default Core behavior MUST follow the declared document mode.
7.3 Canonical Rendering Requirements
Canonical emitters MUST:
- preserve canonical binding ordering
key@{...}:type = value; - preserve canonical node-head ordering
tag@{...}:datatype; - elide redundant explicit root prefixes in rendered references (
~$.a->~a,~>$.a->~>a); - collapse quoted reference selectors to bare identifier form when the decoded segment is already a canonical bare identifier;
- preserve multiline trimticks only in multiline canonical layouts and render inline trimtick-normalized values as ordinary escaped strings when required by inline layout.
- render nested object values as multiline canonical blocks when the enclosing canonical object or list layout is multiline, while still sorting keys lexicographically at every level.
8. Radix and Encoding Literal Requirements
Implementations MUST:
- distinguish radix-literal lexical rules from encoding/base64 lexical rules;
- accept radix payload digits only from
0-9,A-Z,a-z,&, and!; - accept optional radix leading sign
+or-only at the start of the payload; - accept at most one radix decimal point
.and only between non-empty digit runs; - treat
_in radix literals as visual spacing valid only between radix digits; - reject radix payload characters
/and=; - accept
encoding-family payloads (encoding,base64,embed,inline) in both standard base64 (+and/) and URL-safe base64 (-and_) forms; - canonicalize
encoding-family payloads to the URL-safe alphabet by rewriting+as-and/as_, and strip trailing=padding; - continue to treat lexical acceptance as distinct from downstream base-specific radix or base64 semantic validity.
9. Separator-Literal Requirements
Implementations MUST:
- support repeatable separator specs (
[...])+; - enforce separator character constraints using only
A-Za-z0-9!#$%&*+-.:;=?@^_|~<>; - allow horizontal whitespace and newlines around the separator character inside brackets, while still rejecting any form that makes the payload non-contiguous or longer than one character;
- preserve repeated separator specs structurally, including duplicate chars;
- tokenize separator payloads as one or more contiguous raw or quoted segments immediately after
^; - accept raw separator payload characters only from
A-Za-z0-9!#$%&*+-.:;=?@^_|~<>; - accept ordinary single-quoted and double-quoted string segments inside separator payloads, using normal AEON quoted-string lexical rules;
- reject backtick segments and all raw separator escape syntax;
- resume ordinary comment and grammar-boundary handling once a separator payload ends outside quoted segments;
- reject unterminated quoted segments and any raw payload that requires disallowed characters outside quotes;
- accept unparameterized
sepandsetdatatypes when the bound value is a separator literal.
10. Temporal Literal Requirements
Implementations MUST:
- treat temporal range validity as part of literal recognition rather than a later semantic-only phase;
- reject
dateliterals with invalid month/day combinations; - support leap-year date validity for February 29;
- reject
timeliterals whose hour is outside00-23; - reject
timeliterals whose minute or second is outside00-59; - apply the same bounded calendar/clock rules when recognizing
datetimeliterals; - continue to accept the Core v1 partial forms already admitted by grammar shape, including hour-precision
time(09:) anddatetime(2025-01-01T09); - allow UTC/offset suffixes on valid reduced-precision time forms, including
09:30Z,09:+02:00, and09:30+02:00; - allow UTC/offset suffixes on valid reduced-precision
datetimeforms, including2025-01-01T09Z,2025-01-01T09+02:00, and2025-01-01T09:30Z; - allow named-zone ZRUT suffixes on valid reduced-precision datetime bases, including
2025-01-01T09&Europe/Belgium/Brussels,2025-01-01T09Z&Europe/Belgium/Brussels,2025-01-01T09:30Z&Local,2025-01-01T09Z&America/Port-au-Prince, and2025-01-01T09Z&Etc/GMT+1, and classify them aszrutliterals; - treat uppercase
Zas the UTC marker form and reject lowercasezas a temporal literal marker.
The datatype label zdt is reserved for a possible future zoned datetime type. AEON Core v1 implementations MUST NOT treat zdt as an operational Core v1 datatype or recognize bracketed zoned-datetime syntax as Core v1 temporal syntax.
Examples:
- valid:
2024-02-29,09:,09:30,09:30Z,09:+02:00,2025-01-01T09Z,2025-01-01T09+02:00,2025-01-01T09&Europe/Belgium/Brussels,2025-01-01T09:30Z&Local,23:59:59,2024-02-29T09:30:00 - invalid:
2025-02-29,2025-13-40,24:00,99:99,23:59:60,09:30z,2025-01-01T09:30Z&/
11. Node Requirements
Implementations MUST:
- accept node forms
<tag(...)>and empty-node shorthand<tag>; - require the closing
>for child-bearing node forms and reject<tag(...)deterministically; - in strict mode, reject inline node-head datatypes other than
:node; - in transport/custom modes, continue to accept non-
nodeinline node-head datatypes as syntax, for example<tag:pair("x", "y")>; - reject other node-like forms deterministically.
Implementations MUST also:
- support anonymous child heads inside ordered containers, including:
:type = value@{...} = value@{...}:type = value
- allow those anonymous child-head forms only in:
- list elements
- tuple elements
- node children
- reject those forms at the root and inside objects without keys;
- reject nested anonymous-head recursion such as
:n = :n = 3; - preserve canonical ordering of anonymous heads as
@{...}:type = valuewhen both are present; - allow at most one attribute block in a binding head, node head, or anonymous child head;
- reject repeated head attribute blocks deterministically, including forms such as:
a@{x=1}@{y=2}:n = 3a:list = [@{x=1}@{y=2}:n = 3]page:node = <page(@{x=1}@{y=2}:n = 3)>
- reject reserved attribute keys that collide with shipped metadata/projection namespaces, including:
@@items__proto__constructorprototype
12. Duration Boundary
Implementations MUST NOT treat bare duration tokens as AEON core v1 literals.
Duration semantics, when needed, are schema/profile/consumer-layer concerns and are outside AEON core conformance scope.
13. CTS Protocol Requirements
Conformance execution MUST use cts.protocol.v1:
cts/protocol/v1/runner-contract.mdcts/protocol/v1/lane-core.mdcts/protocol/v1/lane-aes.mdcts/protocol/v1/lane-annotations.mdcts/protocol/v1/lane-canonical.md
Published AEON v1 CTS coverage currently includes:
- canonical formatting baseline and node canonicalization in
cts/canonical/v1 - core baseline, addressing/reference, fail-closed, transport-acceptance, and syntax-invalid suites in
cts/core/v1 - AES baseline, addressing/reference, strict failure envelope, and transport emission suites in
cts/aes/v1 - annotation-stream conformance in
cts/annotations/v1 - AEOS validator conformance in
cts/aeos/v1
14. Numeric Lexical Requirements
Implementations MUST enforce numeric underscore placement rules:
_MAY appear only between digits;- leading
_is invalid; - trailing
_is invalid; - consecutive underscores are invalid;
- underscore adjacent to non-digit numeric separators is invalid.
Examples:
- valid:
100_000 - invalid:
_100_000,100__000,100_
14.1 Hex Lexical Requirements
Implementations MUST enforce hex underscore placement rules:
_MAY appear only between hex digits;- leading
_is invalid; - trailing
_is invalid; - consecutive underscores are invalid.
Examples:
- valid:
#ff00aa,#Ff_00_Aa - invalid:
#_ff,#ff_,#F__f
15. Minimum Conformance Floors
Implementations claiming AEON v1 conformance MUST support at least:
- string literal length:
1,048,576Unicode code points; - key segment length:
1,024Unicode code points; - numeric literal lexical length:
1,024characters; - container nesting depth (object/list/tuple/node):
64; - list/tuple element count per container:
65,536; - canonical/reference path string length:
8,192characters; - structured comment payload length:
1,048,576characters; max_attribute_depth,max_separator_depth, andmax_generic_depthcapability floor of at least8.
These floors are minimum interoperability guarantees. Implementations MAY support larger limits.
The container nesting floor in item 4 is a required supported processing floor whether or not an implementation surfaces max_nesting_depth as a public runtime or CLI control. When an implementation does expose configurable container nesting limits, it MUST accept configured values of at least 64.
16. Section-to-CTS Matrix
Canonical matrix:
17. Non-Conformance
An implementation MUST NOT claim AEON v1 conformance if any REQUIRED item in this document is not satisfied.
Passing a narrow representative subset is not sufficient if implementation behavior drifts on a backbone family required by this document or by the published CTS lanes.