Do not add a release dependency yet
The Flyology Alire index does not yet provide a reviewed, no-pin release. Downstream crates must wait for the indexed milestone. The API may still change during final review.
The repository manifest declares GCC-based GNAT 13 through 16 as its intended compiler range. The executed matrix below is the compatibility evidence.
Use the implemented trusted surface
| Public unit | Current capability |
|---|---|
Flyology_JSON.Parsing |
Incremental Step and batched
Drain, provisional events, exact source
coordinates, exact number fragments, explicit capacities, and static duplicate handling. |
Flyology_JSON.Tokens |
Bounded collection of selected decoded strings, decoded names, or exact number lexemes into caller storage. |
Signed_Integers and
Unsigned_Integers |
Checked conversion of complete strict integer lexemes and deterministic base-ten integer rendering. |
Flyology_JSON.Writing |
Allocation-free writer core with semantic streaming calls. The caller-defined destination owns whole-document staging and can choose its own allocation behavior. |
Flyology_JSON.Profiles and
Flyology_JSON.Errors |
Explicit versioned profile records and nonraising diagnostics with zero-based coordinates. |
The parser and writer accept arbitrary-bound Stream_Element_Array values. Physical capacities
and profiles are always application choices; the library provides no default capacity or profile.
Separate the build matrix from benchmark tooling
| Evidence lane | Operating systems | Toolchain |
|---|---|---|
| Repository test action | macOS 15 and Ubuntu 24.04 | GNAT 13.2.2, 14.2.1, 15.3.1, and 16.1.0; GPRbuild 26.0.1 |
| Benchmark adapters | macOS 15 and Ubuntu 24.04 | GNAT 16.1.0, GPRbuild 26.0.1, Rust 1.97.1, Node 24.19.0, and npm 11.17.0 |
The benchmark jobs have portable and native tracks. The benchmark jobs build maintained adapters for independent implementations. Their different parser and writer contracts make the results optimization evidence, not a claim of semantic equivalence.
Exercise lifecycle and bounded failure
The maintained test action builds and runs:
- parser, UTF-8, number grammar, duplicate-index, and Unicode escape tests;
- public foundation and parser tests;
- private and public writer tests; and
- an external public-unit consumer compilation.
Focused cases cover:
- arbitrary Ada bounds, empty input, and chunk or fragment schedules;
- exact depth and storage limits, reset, and abort;
- destination exhaustion, commit or abort failure, and task interruption; and
- exact offsets and transactional nonpublication.
Public-surface assembly gates require parser accessors and the batched path to inline without an indirect hot call. A separate gate requires the writer string-fragment path to inline. It rejects finalization, tasking, and allocation runtime calls in that probe. Installed no-pin consumer assembly evidence remains a release gate.
Treat corpora as evidence, not authority
The parser lane pins 314 selected JSONTestSuite fixtures and 80 selected JSON Schema Test Suite JSON files. The repository verifies exact fixture sets, licenses, byte digests, and aggregate manifests before execution.
All 394 fixtures run as one chunk, as one-byte chunks, and with deterministic randomized schedules. Malformed inputs must retain the monolithic error code and byte offset. The expensive every-single-split campaign has an explicit caller-supplied work ceiling and is not part of routine continuous integration.
The writer lane uses four project-owned event tapes and exact hexadecimal golden output. Each token runs whole, one octet at a time, at every single split, and through four deterministic randomized schedules. The public parser reparses the output under varied chunks. Node's built-in JSON parser provides an additional independent acceptance check.
Corpus labels and oracle agreement never replace the selected JSON profile or the JSON specification.
Keep future work out of current claims
- The API remains experimental until the reviewed 0.1.0-dev index release.
- Fresh downstream resolution without a Git or path pin remains a release gate.
- The trusted package has no accounting or budget surface for untrusted consumer integration.
- Binary64, decimal, and application-specific number conversions are not current public units.
- Canonical JSON, a DOM, allocating conveniences, and Type IR, Wire, or OCI adapters are not current library features.
Ordinary_Compactis deterministic for the same calls, but it is not canonical JSON.