JSON Lines sources
==================

JSON Lines capture is available in the development source. The published
``0.1.0.dev0`` package predates this functionality.

The first reader supports one flat JSON object per UTF-8 line. It accepts LF and
CRLF and does not require a final line terminator. It rejects blank lines, a byte
order mark, duplicate or unknown keys, nested values and other top-level JSON
values. This is a subset of the JSON Lines format, not a claim to support every
valid JSON Lines document.

Configure the source, schema and explicit limits as shown in
:doc:`../development/format-sources`. Supported fields are text, boolean, signed
or unsigned 64-bit integers, and finite decimals. Each field has a stable ID,
type, presence policy and null policy. A missing optional field stays missing;
a present JSON ``null`` remains a distinct value and is accepted only if the
field is nullable. Values are never silently coerced into another declared type.

Pass the lowercase SHA-256 digest of the exact file bytes as the source version.
The file is verified before and after reading. A completed snapshot can be
reopened and compared without the original file. Source changes, malformed
records and limit failures produce an unavailable observation and discard any
provisional records. Complete counts describe rows observed during the verified
read; they are not independently supplied producer counts.

Strict typed representation is the default. Select ``--profile logical-v1`` to
compare logical equivalents. Whitespace, JSON escape spelling and object-key
order are syntax and are not preserved as raw-byte identity. Source lineage is
unknown without supporting evidence. Remote object storage is separate work.
