Repository navigation
System Not Format
Most data formats present a false binary:
Option A: Strict Purity
- Define clear rules
- Admit no exceptions
- Fail on ambiguity
- Problem: the real world doesn't fit
Option B: Permissive Flexibility
- Accept anything that's close enough
- Coerce and infer implicitly
- Fail late (or silently)
- Problem: no guarantees, no auditability
Traditional formats pick one and accept the consequences:
- JSON picks purity but everyone layers their own implicit semantics on top
- YAML picks flexibility and creates silent failures
- XML lets you define strictness or not, depending on the schema
They're all formats. They all define syntax. And they all leave the real world's messiness to be handled outside the system, which means it becomes invisible and unverifiable.
AEON asks a different question:
Where will the real world bend this system, and how do we accommodate it cleanly?
This is a systems question, not a format question.
It acknowledges:
- The real world is messy
- People will try to do things the "pure" way forbids
- If you block them without offering an avenue, they'll find a workaround (hidden, unverifiable, and worse)
- The solution is not to forbid or permit, but to systematize and make visible
Before accommodating reality, AEON establishes what purity looks like:
A number is a number. Not a string that looks like one. Not an object with coercion rules. Not floating-point with NaN ambiguity.
price:number = 42.99 // pure: a number
price:number = "42.99" // not pure: a string
The pure version has guarantees:
- Every
numbercan be used in numeric operations - Every
numbermeans the same thing across systems - There are no hidden coercion rules to discover later
A boolean is a boolean. True or false. Not yes/no, not 1/0, not strings with implicit meaning.
isActive:boolean = true // pure: a boolean
isActive:boolean = "yes" // not pure: requires inference
Pure boolean logic is predictable:
- Boolean operations have consistent semantics
- No surprise coercions in conditionals
- Validation is straightforward
Data doesn't execute. AEON documents are passive representations, not processes.
/(process this through tax-calculator.py)/
taxAmount:number = 30
// The comment is data about the data, not an instruction to execute
// Processing happens outside, explicitly, in a separate layer
Pure structure means:
- The AES (what the parser produces) is deterministic
- Hashing is reliable
- Behavior is auditable
- Different systems interpret the same document predictably
These baselines matter. They're the guarantees the system makes.
But the real world has needs that pure versions don't accommodate:
Some contexts need NaN. Floating-point computations fail. Sensors return invalid readings. Sometimes you need "no value."
The pure response: "Don't use it. Use nullable types or special cases."
AEON's response: "That's right, the pure way is better. But if you genuinely need NaN, make it explicit."
temperature:number = 23.5 // pure number
error:nan = NaN // explicit: this field holds NaN
// Now:
// - code expecting pure numbers is safe
// - code using error:nan knows what it's getting
// - validators can treat these differently
// - auditors can see where exceptions happen
Some contexts need yes/no for humans. Toggles, feature flags, user preferences. Pure booleans are right for logic, but they're not right for configuration that humans interact with directly.
The pure response: "Use booleans. Logic is in the code."
AEON's response: "Right, booleans are correct for logic. But create a first-class type for configuration that needs human-friendly input."
debugMode:boolean = true // pure: for logic
featureFlags:toggleGrouping = off // explicit: humans read/write this
userConsent:toggle = yes // explicit: yes|no|on|off|enabled|disabled
Now:
- Boolean code stays predictable
- Human-facing configuration is ergonomic
- Both are auditable
- No hidden coercion between them
Some contexts need processing hints. People want to express computation, validation logic, type constraints alongside data.
The pure response: "No execution. Keep data passive."
AEON's response: "Right, data shouldn't execute. But create separate layers that can consume processing hints explicitly."
// AES: pure data, doesn't execute
invoice = {
lineItems: [...]
taxRate:number = 0.10
total:number = 850
}
// Semantic comments: separate annotation stream, linked via path
$.invoice.taxRate: //? must be between 0 and 1, consult jurisdiction rules
// Tonics: deterministic processors that can apply logic based on profiles
// They read the data + annotations and produce transformed output
// But this processing is explicit and auditable
Now:
- Data layer stays pure and portable
- Processing hints are available but don't execute automatically
- Different systems can apply different profiles
- Everything remains verifiable
These accommodations work only if the system prevents them from becoming implicit.
This is where the parser becomes crucial:
The parser is the gatekeeper. Its job is:
- Accept only pure forms in the initial parse
- Reject ambiguity rather than guess
- Force explicit choices for anything that deviates
Input: a:number = "123"
Parser: type mismatch
Result: rejected
Input: a:number = 123
Parser: valid
Result: accepted as pure
Input: a:stringNumber = "123"
Parser: valid (explicit type for string-like numbers)
Result: accepted as intentional
Without this discipline:
- Someone writes config with
"yes"where a boolean is expected - Parser silently converts it
- It works in testing (because test data is clean)
- It fails in production (because real data is messy)
- Nobody can tell where the failure came from
With this discipline:
- Parser rejects the
"yes" - Configuration author must decide: use boolean or use toggle type
- Decision is explicit
- Validators can audit it
- Systems downstream know what contract they're working with
Because the parser enforces purity at the baseline, the layers above can make specific accommodations safely:
| Layer | Responsibility | Can Assume |
|---|---|---|
| Parser | Produce unambiguous AES | Input was explicit or rejected |
| Validator | Check against schema | Baseline form is pure |
| Processor | Transform or validate | All decisions are visible |
| Tonic | Apply profiles/transformations | Can rely on deterministic semantics |
Each layer builds on guarantees from the layer below. That's only possible because the parser enforces those guarantees.
This is the actual insight: AEON's architecture is systems-design philosophy, not format design.
The format (syntax, structure) is almost incidental. The real AEON is the specification of what each layer does and doesn't do:
- AEON says: "Preserve structure, don't execute, make decisions visible"
- Parser says: "Enforce purity at baseline, reject ambiguity, produce deterministic output"
- AES says: "This is what was parsed, deterministically and verifiably"
- Schema/Validator says: "This checked against my contract; these guarantees hold"
- Processor says: "This is what I computed; here's proof"
- Tonic says: "Applied profile X to produce this transformation"
None of this depends on specific AEON syntax. Different syntaxes could theoretically produce the same semantics. The value is in the layer separation and the guarantees each layer makes.
Philosophy: If something is hard to represent purely, that's a feature, not a bug. Force the real world to adapt.
Result: Incredibly safe and predictable systems. Also incredibly difficult to use in messy contexts.
AEON's approach: Use pure types as the baseline. But acknowledge that real systems need to interface with untidy reality. Create explicit pathways for that (special types, annotation streams, processor layers).
Trade-off: AEON is less safe than pure systems but more verifiable than permissive ones.
Philosophy: Accept anything that's close enough. Convert implicitly. Fail late if at all.
Result: Easy to use initially. Quietly breaks in production when edge cases arise.
AEON's approach: Purity as baseline. Explicit pathways for the real world. Fail fast and clearly.
Trade-off: AEON requires more upfront decisions but provides guarantees.
Philosophy: Allow flexibility by default. Add validation as an option.
Result: Most code ignores validation. YAML's implicit semantics cause silent failures even with schema.
AEON's approach: Purity and visibility are built in from the parser level. You can't accidentally create ambiguity that stays hidden.
Trade-off: AEON is less backwards-compatible but more verifiable.
The Problem: IEEE 754 floating-point has NaN, Infinity, and signed zero. Real systems have to deal with them.
Permissive Language (e.g., JSON with JavaScript):
{ "value": NaN } // silently becomes null or undefined, depending on implementationResult: Silent failure, inconsistent behavior.
Pure Language (e.g., strict schema):
error: "NaN not allowed in number type"
Result: Forces pure numbers, but now code that needs NaN must work around it (smuggling through strings, special object encoding, etc.).
AEON:
value:number = 3.14 // pure
error:nan = NaN // explicit
infinity:infinity = Infinity // explicit
Result: Pure numbers are safe. Special cases are explicit. Code can validate differently for each. No surprises.
The Problem: Configuration starts as data. Over time, people want it to be a language (conditionals, loops, expressions).
Permissive Language (e.g., YAML):
- if: env == "prod"
then: useCache: true
else: useCache: falseResult: Hidden language. Nobody documents it. Different implementations interpret it differently.
Pure Language (e.g., strict JSON):
{
"prod": { "useCache": true },
"dev": { "useCache": false }
}Result: No language. If people need conditionals, they implement it outside (in code, in a template engine, etc.), and it becomes even more hidden.
AEON:
// AES: pure data
config = {
prod: { useCache:boolean = true }
dev: { useCache:boolean = false }
}
// Annotations: processing hints, explicit
$.config.prod: //? apply when environment == "prod"
$.config.dev: //? apply when environment == "dev"
// Tonics: apply profiles to select configurations
// Processing is explicit, auditable, and reproducible
Result: Data stays pure and portable. Processing hints are visible. No hidden language. Everything is verifiable.
The Problem: Users want to say "yes", "no", "on", "off". Pure booleans feel artificial.
Permissive Language:
isEnabled: yes # silently coerced to booleanResult: Works in YAML libraries. Breaks in JSON if you serialize/deserialize. Hidden assumption.
Pure Language:
{ "isEnabled": true }Result: Pure but feels artificial for human input. People complain about ergonomics.
AEON:
// Separate types
debugMode:boolean = true // for code logic
userChoice:toggle = yes // for human input (yes|no|on|off)
// Now:
// - Code that uses debugMode:boolean knows it's pure
// - User interfaces can accept/display userChoice:toggle naturally
// - Validators know the difference
// - No hidden coercion between them
Result: Purity where it matters. Ergonomics where it's needed. Both are explicit.
All of this only works if the parser enforces these boundaries.
Without it:
// If parser accepts this:
isEnabled:boolean = "yes"
// Then validators might check or might not
// Processors might coerce or might reject
// Systems downstream make different assumptions
// Result: subtle bugs, different behavior in different contexts
With the parser enforcing baseline purity:
// If parser rejects this:
isEnabled:boolean = "yes"
// Error: type mismatch
// Then authors must choose:
isEnabled:boolean = true // pure
isEnabled:toggle = "yes" // explicit
// Now every system downstream knows exactly what to expect
// No assumptions, no surprises, no hidden coercions
The parser is where philosophy becomes discipline.
Format design asks: "What syntax should I support?"
AEON asks: "What guarantees do I want to make? How do I enforce them?"
Then the syntax follows from the guarantees, not the other way around.
This is why AEON could theoretically exist with different textual forms. What matters is:
- Parser produces deterministic AES — no ambiguity, no implicit meaning
- Baseline is pure — types mean what they say
- Deviations are explicit — special cases require opt-in types or layers
- Each layer has clear boundaries — validation ≠ execution ≠ processing
- Everything is verifiable — decisions are visible, proofs are cryptographic
These are systems properties. The format is the implementation vehicle.
This design philosophy connects to everything AEON does:
Parser Focus Article: Shows why parser decisions matter. This article explains how the parser enforces purity and visibility.
Security Mode Article: Shows how layers isolate trust. This article explains that layer separation is how you enforce baseline guarantees.
Semantic Comments Article: Shows how meaning can travel with data. This article explains how that works without corrupting baseline purity.
AI Demo Article: Shows how verification requires explicit boundaries. This article explains how the parser creates those boundaries.
All of these rely on the same principle:
Don't forbid the real world or pretend it doesn't exist. Systematize where it enters, make it explicit, enforce it through the parser, and verify it through the layers.
AEON is not a format. It's a processing system organized around these principles:
- Start pure — define what correct looks like
- Acknowledge reality — the world will bend this system
- Systematize that bending — create explicit pathways for it
- Enforce through the parser — make choices visible, not hidden
- Verify through the layers — each component can be audited
Other formats optimize for syntax or flexibility or minimalism.
AEON optimizes for verifiability and honesty about complexity.
It says: "The real world is messy. We're not going to pretend otherwise. But we're going to make every decision visible and auditable so you know exactly what you're getting."
That's not a format decision. That's an architecture decision.
And the parser is the component that enforces it.
This wiki is the approachable AEON guide. Implementation information lives at aeon.altopelago.com. Specification publication lives at aeonite.org. Normative language behavior lives in aeonite-org/aeonite-specs, and conformance behavior lives in aeonite-org/aeonite-cts.