In-place append
Your compressed archive is now also an appendable log. Add rows without re-encodingwhat is already there: the new rows become a new independent frame, the original frames' bytes are copied verbatim (append-only, never re-compressed), and only the SHA-256 integrity trailer is recomputed. This closes the previously-missing appendable archive gap.
Append rows
at1 append trades.at1 newrows.csv --output trades2.at1 # new rows -> a new INDEPENDENT frame # original frames' bytes -> copied VERBATIM (append-only, never re-compressed) # only the SHA-256 integrity trailer is recomputed at1 append trades.at1 newrows.ndjson --output trades2.at1 # CSV or NDJSON
Lossless + verified
Append is exact by construction: decode(append(archive, rows)) equals decode(archive) + rows byte-for-byte, and the re-stamped integrity trailer re-verifies. The original bytes are never rehydrated — they are simply carried across.
# lossless + verified, by construction: # decode(append(archive, rows)) == decode(archive) + rows (byte-for-byte) at1 integrity trades2.at1 # the re-stamped trailer re-verifies at1 decode trades2.at1 - # == original decode, then the appended rows
Chain it — every prior frame stays byte-identical
Append again and again. Each step adds one new frame; every frame written before it is left byte-identical, so the archive grows as an append-only, tamper-evident record.
# chained appends keep every PRIOR frame byte-identical at1 append trades.at1 day2.csv --output trades.d2.at1 at1 append trades.d2.at1 day3.csv --output trades.d3.at1 # frame 0 (the original) is the same bytes in all three archives
Still queryable & aggregatable
An appended archive stays a queryable analytical store: query and aggregate merge their results across all frames, so a SUM or a predicate spans the whole grown archive while every frame stays byte-exact.
# the appended archive stays QUERYABLE and AGGREGATABLE across frames — # query/agg merge results across every frame at1 query trades2.at1 --where price:44000:44100 at1 agg trades2.at1 price --op sum
From an AI agent (MCP)
The MCP server exposes append as a typed tool (mirrored by an SDK helper), so an agent can grow an archive in place:
at1_append(at1_path="trades.at1",
rows_path="newrows.csv",
output_path="trades2.at1")
# -> new frame appended; original frames untouched; trailer re-verifiedDecoding and verifying are always free and never need an account; the append path is metered against the account whose API key the host process supplies — same as the rest of AT-1's encode path.