This document defines the first buildable slice of the Axiom family.
The goal of v0 is not to complete the whole architecture. The goal is to build the cornerstone well enough that the rest of the system can stand on it.
That cornerstone is SDA.
V0 is:
- a serious
SDAlibrary - a serious
sdaCLI - a testable implementation of the current SDA specification
The point of v0 is to make SDA immediately useful on its own and make it strong enough to serve as the workhorse for everything that comes later.
That means users should be able to:
- ingest JSON
- transform it with SDA
- validate shapes and assumptions
- normalize ambiguous structures
- emit useful structured output
In practical terms, sda should be useful as a shell tool in the same problem space as jq, but with stronger semantics around absence, duplicates, carriers, and failures.
SDA is the right v0 for four reasons:
- it is the best-specified part of the project
- it is the semantic cornerstone of everything else
- it is useful even if the rest of the system does not exist yet
- every later tool depends on it as the transformation engine
Axiom, Enrichment, and Shaping are important, but they are downstream of SDA.
V0 should include only the minimum pieces needed to make SDA a real product.
Required:
- parser
- AST
- evaluator
- JSON input/output bridge
- stable failures
- conformance-oriented tests
The library is the core asset. The CLI is one delivery surface over it.
Required:
sda evalsda check- JSON in
- JSON out
- stdin/stdout-first behavior
- stable exit/failure behavior
The sda CLI should be useful immediately in shell, ETL, and fixture-driven test workflows.
V0 should aim for the current SDA core, not a tiny demo subset.
At minimum this means strong support for:
Null,Bool,Num,StrSeq,Set,Bag,Map,Prod,BagKV- selectors and eliminators
OptandReslet- function calls
- comprehensions needed by the spec
- normalization operations
- stable error codes and messages
If v0 cheats too much here, the rest of the architecture will stand on sand.
V0 should prove that sda works well as a standalone Unix-style tool.
Example use cases:
- JSON cleanup and normalization
- fixture transformation in tests
- ETL extraction stages
- contract validation
- duplicate-aware and absence-aware data reshaping
V0 must include replayable tests and examples.
This should include:
- simple unit-style semantic tests
- conformance-style tests derived from the spec
- at least one realistic JSON transformation example
V0 does not ship the rest of the architecture as full products.
axiomworkflow runtime- standalone
enrCLI - standalone
shapeCLI
Those are v1+ concerns built on top of the SDA workhorse.
These items are valuable, but they should not block v0.
- full
Enrichmentlanguage grammar - full
Shapinglanguage grammar - rich Axiom workflow syntax
- macros or metaprogramming
- user-defined functions beyond what is necessary
- non-essential surface extensions
- HTTP CRUD runtime
- file orchestration runtime
- retries and caching policy
- concurrency and fan-out
- streaming
- binary codecs and PIC support
- multiple serialization formats beyond JSON
- formatter beyond what
sdaneeds - package manager
- manifest system
- editor plugins
- debugger UI
- explain plans beyond what
sdaneeds
The intended v0 command surface is:
sda eval -f extract.sda < event.json
sda check -f extract.sda
sda fmt -f extract.sdaOptional if it helps testing:
sda explainsda trace
The intended v0 user experience is:
JSON input
-> SDA program
-> JSON output
With semantics strong enough to outperform ad hoc JSON tooling in correctness-sensitive cases.
sda should be usable immediately for work such as:
- extracting stable records from messy event payloads
- distinguishing missing fields from explicit
null - handling duplicate keys honestly with
BagKV - normalizing data before tests or ETL
- acting as a better-specified alternative to
jqfor structured-data transformation
V0 is not trying to prove:
- that all four languages need full syntax immediately
- that Axiom must replace shell scripts on day one
- that the whole architecture must be implemented at once
- that binary data support is ready
- that enrichment and shaping are fully separate products yet
V0 is trying to prove one thing:
A well-specified structured-data algebra can stand on its own as a useful library and tool, and can support the rest of the architecture later.
V0 is successful if all of the following are true:
- a user can transform real JSON data with
sdafrom the shell - the SDA library is solid enough to embed from another host
- failures are stable enough to write tests against
- the semantics match the current SDA spec closely enough for conformance-style testing
- users can already get value from SDA before Axiom exists
If those are true, v1 can safely decide:
- how Axiom should orchestrate effects around SDA
- whether
enrdeserves its own language - whether
shapedeserves its own language - how small or large the Axiom glue syntax should be
The implementation order for v0 should be:
- align the SDA spec and conformance expectations
- implement the SDA parser, AST, and evaluator
- implement JSON input/output bridging
- implement
sda evalandsda check - add fixture-driven and conformance-style tests
- refine the CLI for shell and ETL usability
That order keeps the project grounded in the strongest and most reusable part of the system.