T-saur

Logo

T-saur (.tsr): a content-addressed, deterministic archive format built for AI agents. Rust, Apache-2.0 OR MIT.

View the Project on GitHub iulianbondari/t-saur

Review package: the v1.0 release candidate

This describes the material for an independent review by another evaluator. The checks the producer ran (tests, clippy, rustfmt, the robustness campaign, the measurements in benchmarks/, all listed in RC1-VERIFICATION-REPORT.md) are the producer’s own verification; they are listed so the reviewer knows what was and was not looked at, not as a substitute for the review.

1. What to review, identified by commit

2. Scope of this round

In scope (all in tsaur/crates/):

Area Files What it claims
offline volume sets tsaur-core/src/volumes.rs, tsaur-core/tests/volumes.rs any N of N+M .tsrv volumes rebuild the archive bit-exact; damaged headers, trailers and pieces tolerated within parity; repair byte-identical; adaptive piece size
direct exchange tsaur-core/src/transfer.rs, tsaur-core/tests/transfer*.rs descriptor and pieces verified against user-supplied identities before anything is written; resume re-verified from disk; explicit limits (sizes, counts, connections, request rate, time budgets); network data never selects a local path
pinned TLS tsaur-core/src/tls.rs, tsaur-core/tests/transfer_tls.rs TLS 1.3 (rustls, ring) with self-signed certificates pinned by SHA-256 fingerprint on both sides; no CA, account or service
CLI surface tsaur-cli/src/main.rs (volumes subcommands), tsaur-cli/tests/cli.rs loopback by default; network exposure needs --expose-lan and an explicit --allow/--allow-anyone; access printed and anonymous access warned about
documents docs/design/VOLUME-SETS.md, docs/design/VOLUME-TRUST.md, SECURITY.md the design, the limits table and the trust contract the code is supposed to implement
archive reader and extraction tsaur-core/src/read.rs, paths.rs, manifest.rs, format.rs; tests/roundtrip.rs, tests/robustness.rs, tests/golden.rs every byte verified before use; ceilings enforced before allocation; paths never leave the destination; existing files replaced only on request; format v1 accepted exactly
containers and views tsaur-core/src/container.rs, canonical.rs bit-exact rebuild of ZIP/OPC, PDF streams and JPEGs; converter failures contained
archive encryption tsaur-core/src/crypto.rs XChaCha20-Poly1305 per blob, Argon2id and hybrid X25519 + ML-KEM-768 stanzas, Ed25519 signatures

Out of scope for this round: the codecs’ compression efficiency (codec.rs, pack.rs heuristics), the MCP server’s protocol details, the benchmark numbers.

3. What the producer checked (not an independent review)

4. Known limits the reviewer should not need to rediscover

5. Suggested focus for the reviewer

  1. The trust boundary on resume: can any content of .partial / .partial.map make fetch accept bytes that were not hash-verified, or write outside --out?
  2. VolumeSet::validate and the descriptor path: are all size, count and name limits enforced before allocation, in every entry point (inspect, join, repair, fetch, serve)?
  3. The pinning verifiers in tls.rs: does anything other than the fingerprint influence acceptance; are TLS 1.2 and renegotiation really unreachable; what does a wrong --peer-id leak?
  4. The gate in transfer.rs: counting, token buckets and the connection time budget under concurrent connections, including the TLS-mode silent close and the client’s back-off.
  5. Error handling around partial writes and renames in fetch, join and repair: what state is left after an interruption at every step, and does the next run recover from it?
  6. Anything in the documents that the code does not actually do.

6. Reporting

Findings that could be exploited go through SECURITY.md (private vulnerability reporting, or the contact address); everything else as an issue or a pull request against docs/review/. Please cite the commit and file paths, and separate what was demonstrated from what was suspected.