open-standards/map/map-rs
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science a800ebe3de
All checks were successful
standards workspaces build + test / eoc-rs (push) Successful in 1m54s
standards workspaces build + test / jcp-rs (push) Successful in 1m19s
standards workspaces build + test / proof-rs (push) Successful in 1m12s
standards workspaces build + test / jouleclaw-rs (push) Successful in 6m1s
standards workspaces build + test / sandbox-rs (push) Successful in 2m10s
standards workspaces build + test / aac-rs (push) Successful in 1m14s
standards workspaces build + test / smart-byte-rs (push) Successful in 2m34s
standards workspaces build + test / joule-code-rs (push) Successful in 4m20s
standards workspaces build + test / joulecontract-rs (push) Successful in 1m43s
standards workspaces build + test / map-rs (push) Successful in 1m38s
standards workspaces build + test / mesh-rs (push) Successful in 53s
standards workspaces build + test / openpay (push) Successful in 4m35s
standards workspaces build + test / arl-rs (push) Successful in 47m49s
standards workspaces build + test / joule-ui-rs (push) Successful in 56m18s
standards workspaces build + test / jouledesk-rs (push) Successful in 1h3m7s
standards workspaces build + test / joulehook-rs (push) Successful in 12m29s
standards workspaces build + test / sense-rs (push) Successful in 2m27s
map: read the published conformance pack, and pin a JSON round-trip defect
CI now runs map's main() harness (#93), but that harness computes both sides of
every comparison in process. Nothing reads map/conformance/v1/*.json — the files a
third-party implementation is told to certify against.

The gap is measured, not assumed. Changing the Merkle domain separator in
map-schema from "map:node" to "map:nodeX" -- a wire-format change, since a
third-party implementation would then compute different roots for the same
tileset -- leaves the harness reporting 15 passed, 0 failed. The new drift test is
the only thing that notices.

tests/pack.rs takes inputs from the pack and recomputes recorded outputs rather
than re-reading them: every published cell key is rebuilt from its scalar fields
and re-addressed to its recorded canonical CBOR and content id; the tileset is
rebuilt as gen-vectors builds it and compared to the published directory, manifest
and revision, with the Merkle root recomputed, both signatures verified, and the
revision chaining onto the manifest root; and the sealed JCR-1 receipt is
re-derived and compared byte for byte.

That receipt check was written expecting a third stale vector -- joulehook's and
jouledesk's published JCR-1 envelopes both fell behind when the receipt payload
gained a field. map's is current. The prediction was wrong, which is worth
recording as much as a hit would have been.

Two things the tests document rather than assert blindly:

  - Directory::root() commits to the sorted (key, content_id) leaves, so editing
    an entry's offset or len leaves it unchanged. That is by design and sound --
    the content_id authenticates whatever bytes a range fetch returns, so a moved
    range fails at the content check. An earlier draft of this test asserted the
    opposite and was wrong. The tamper case edits a content_id instead.

  - The published manifest does NOT survive a JSON round trip.
    AltSchedule::default() -- the schedule a 2.5D surface-only tileset uses, so
    the common case -- sets width_m to f64::INFINITY. JSON has no infinity, so
    serde_json writes null and f64 refuses null coming back. A third party
    deserializing tileset_vectors.json with the reference types fails on the first
    step. Signatures and content ids are unaffected: the canonical form is CBOR,
    which represents infinity. Fixing the JSON presentation is a normative change
    to a published artifact, so it is left to a maintainer; the test pins the
    defect so it is visible, and fails when it is fixed.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-18 11:40:48 -04:00
..
crates map: read the published conformance pack, and pin a JSON round-trip defect 2026-09-18 11:40:48 -04:00
Cargo.lock chore(deps): cargo update across the workspace; eoc toolchain → 1.98.0 2026-08-26 07:39:26 -04:00
Cargo.toml msrv: raise the rust-version floor to 1.97 across the workspaces 2026-07-23 00:17:08 -04:00