# chappi-syntax
`chappi-syntax` provides Chappi v1's span-carrying generic S-expression parser,
deterministic canonical serializer, and canonical SHA-256 hashing.
The parser accepts at most 256 nested lists and reports structured diagnostics
for invalid input. Canonical output is UTF-8, NFC-normalized, LF-only, ordered,
and, for a non-empty `Document`, terminated by exactly one newline. An empty
`Document` canonicalizes to empty bytes. Valid snapshots contain a header, so
their canonical output is always non-empty and newline-terminated.
The public API includes `parse_document`, `canonicalize`, `canonical_hash`,
`Document`, `Form`, `Atom`, `Span`, and `Diagnostic`. API documentation is
available on [docs.rs](https://docs.rs/chappi-syntax/0.1.0/).
Chappi stores explicit resumable semantic state; it is not a format for hidden
chain-of-thought.