From 3831b52a2bbb7186c60162b81ef7ce19a2a87bf3 Mon Sep 17 00:00:00 2001 From: Alex Maldonado Date: Thu, 15 Oct 2026 04:39:12 -0400 Subject: [PATCH] feat: ML-DSA-65, did:key, named hash algorithm, model provenance, log tiles and witnesses - hashing.algorithm names the hash function in every document; a consumer refuses one it does not implement (doc.hash.algorithm) - ML-DSA-65 (FIPS 204) is an implemented signature scheme: pure-Python reference in tools/oracle/mldsa.py checked against NIST ACVP vectors, a receipt signed by the new roster key dana, and signature vectors for key generation and a deterministic signature - roster keys may carry a did:key, which the validator checks against the public key (doc.roster.did), and a witness purpose for parties that cosign log checkpoints - model provenance: a correction's author and an annotation's generator name the model with provider, version and the hashes of its weights, prompt and parameters, and where it ran - the transparency log gains the tlog-tiles static layout (fixtures/records/log/), a project settings.log with origin, witnesses and threshold, and an acceptance rule; the fixture checkpoint is cosigned by a witness - store.sql: roster_keys accepts cose and ml-dsa-65 and gains a did column - spec chapters 01, 08, 11, 18, 20 and 23, the rationale, glossary, fixture, vector and tool guides updated; stress harness covers ML-DSA Co-Authored-By: Claude Fable 5.1 --- CHANGELOG.md | 2 +- docs/glossary.md | 17 + docs/rationale.md | 14 +- fixtures/README.md | 6 +- .../alias-dangling/package/MANIFEST.json | 2 +- .../alias-dangling/package/document.json | 2 +- .../alias-dangling/package/roster.json | 2 +- fixtures/invalid/bad-id/package/MANIFEST.json | 2 +- fixtures/invalid/bad-id/package/document.json | 2 +- fixtures/invalid/bad-id/package/roster.json | 2 +- .../checks-only-plain/package/MANIFEST.json | 2 +- .../checks-only-plain/package/document.json | 2 +- .../checks-only-plain/package/roster.json | 2 +- .../cite-not-reference/package/MANIFEST.json | 2 +- .../cite-not-reference/package/document.json | 2 +- .../cite-not-reference/package/roster.json | 2 +- .../counts-wrong/package/MANIFEST.json | 2 +- .../counts-wrong/package/document.json | 2 +- .../invalid/counts-wrong/package/roster.json | 2 +- fixtures/invalid/crlf/package/MANIFEST.json | 2 +- fixtures/invalid/crlf/package/document.json | 2 +- fixtures/invalid/crlf/package/roster.json | 2 +- .../empty-optional-file/package/MANIFEST.json | 2 +- .../empty-optional-file/package/document.json | 2 +- .../empty-optional-file/package/roster.json | 2 +- .../hash-mismatch/package/MANIFEST.json | 2 +- .../hash-mismatch/package/document.json | 2 +- .../invalid/hash-mismatch/package/roster.json | 2 +- .../heading-not-first/package/MANIFEST.json | 2 +- .../heading-not-first/package/document.json | 2 +- .../heading-not-first/package/roster.json | 2 +- .../history-wrong/package/MANIFEST.json | 2 +- .../history-wrong/package/document.json | 2 +- .../invalid/history-wrong/package/roster.json | 2 +- .../invalid/key-suffix/package/MANIFEST.json | 2 +- .../invalid/key-suffix/package/document.json | 2 +- .../invalid/key-suffix/package/roster.json | 2 +- .../invalid/key-work/package/MANIFEST.json | 2 +- .../invalid/key-work/package/document.json | 2 +- fixtures/invalid/key-work/package/roster.json | 2 +- .../package/MANIFEST.json | 2 +- .../package/document.json | 2 +- .../location-unknown-page/package/roster.json | 2 +- .../manifest-hash/package/MANIFEST.json | 2 +- .../manifest-hash/package/document.json | 2 +- .../invalid/manifest-hash/package/roster.json | 2 +- .../manifest-key/package/MANIFEST.json | 2 +- .../manifest-key/package/document.json | 2 +- .../invalid/manifest-key/package/roster.json | 2 +- .../package/MANIFEST.json | 2 +- .../package/document.json | 2 +- .../missing-required-file/package/roster.json | 2 +- .../not-canonical/package/MANIFEST.json | 2 +- .../not-canonical/package/document.json | 2 +- .../invalid/not-canonical/package/roster.json | 2 +- .../receipt-root/package/MANIFEST.json | 2 +- .../receipt-root/package/document.json | 2 +- .../invalid/receipt-root/package/roster.json | 2 +- .../receipt-signature/package/MANIFEST.json | 2 +- .../receipt-signature/package/document.json | 2 +- .../receipt-signature/package/roster.json | 2 +- .../package/MANIFEST.json | 2 +- .../package/document.json | 2 +- .../package/roster.json | 2 +- .../retired-live/package/MANIFEST.json | 2 +- .../retired-live/package/document.json | 2 +- .../invalid/retired-live/package/roster.json | 2 +- .../package/MANIFEST.json | 2 +- .../package/document.json | 2 +- .../package/roster.json | 2 +- .../root-mismatch/package/MANIFEST.json | 2 +- .../root-mismatch/package/document.json | 2 +- .../invalid/root-mismatch/package/roster.json | 2 +- .../signer-mismatch/package/MANIFEST.json | 2 +- .../signer-mismatch/package/document.json | 2 +- .../signer-mismatch/package/roster.json | 2 +- .../style-sup-sub/package/MANIFEST.json | 2 +- .../style-sup-sub/package/document.json | 2 +- .../invalid/style-sup-sub/package/roster.json | 2 +- .../invalid/text-edited/package/MANIFEST.json | 2 +- .../invalid/text-edited/package/document.json | 2 +- .../invalid/text-edited/package/roster.json | 2 +- .../unknown-kind/package/MANIFEST.json | 2 +- .../unknown-kind/package/document.json | 2 +- .../invalid/unknown-kind/package/roster.json | 2 +- .../unlisted-file/package/MANIFEST.json | 2 +- .../unlisted-file/package/document.json | 2 +- .../invalid/unlisted-file/package/roster.json | 2 +- .../invalid/unsafe-path/package/MANIFEST.json | 2 +- .../invalid/unsafe-path/package/document.json | 2 +- .../invalid/unsafe-path/package/roster.json | 2 +- fixtures/invalid/zip-symlink/package.sct.zip | Bin 18340 -> 24380 bytes .../invalid/zip-traversal/package.sct.zip | Bin 18339 -> 24379 bytes fixtures/keys/dana.ed25519.hex | 1 + fixtures/keys/wit.ed25519.hex | 1 + fixtures/records/anchor-keyed.json | 2 +- fixtures/records/checkpoint.json | 2 +- fixtures/records/layer/annotations.jsonl | 2 +- fixtures/records/project.json | 2 +- fixtures/records/receipt-ml-dsa.json | 1 + fixtures/records/roster.json | 2 +- registry/rules.json | 10 + schemas/annotation.schema.json | 3 +- schemas/common.schema.json | 52 +- schemas/project.schema.json | 28 ++ schemas/roster.schema.json | 8 +- spec/01-conventions.md | 2 + spec/08-fidelity.md | 5 +- spec/11-corrections.md | 2 +- spec/18-layers.md | 2 +- spec/20-projects.md | 2 +- spec/23-log.md | 17 +- sql/store.sql | 3 +- tools/README.md | 1 + tools/build.py | 70 ++- tools/check.py | 54 ++- tools/oracle/crypto.py | 32 ++ tools/oracle/jcs.py | 9 + tools/oracle/log.py | 98 ++++ tools/oracle/mldsa.py | 446 ++++++++++++++++++ tools/oracle/package.py | 7 + tools/oracle/receipts.py | 28 +- tools/stress.py | 21 +- vectors/README.md | 4 +- vectors/checkpoint.jsonl | 2 +- vectors/corrections.jsonl | 1 + vectors/signatures.jsonl | 4 + 127 files changed, 996 insertions(+), 141 deletions(-) create mode 100644 fixtures/keys/dana.ed25519.hex create mode 100644 fixtures/keys/wit.ed25519.hex create mode 100644 fixtures/records/receipt-ml-dsa.json create mode 100644 tools/oracle/mldsa.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ce3839..d872cd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ The first release. - Work keys minted from a Scholar-style citation key and a hash of the work's identity, with document keys for versions; `tag:` URIs for layers, annotations and documents. - Spot-check seeds as VRF proofs (RFC 9381), RFC 9162 inclusion and consistency proofs, a history root over every document's corrections, and a provisional transparency log with signed checkpoints. - Signed QA reports, a conformance checklist covered by a receipt, and a `description` annotation for the figure descriptions an accessible export needs. -- Reserved signature schemes for COSE and ML-DSA-65, and the character data pinned to Unicode 16.0. +- ML-DSA-65 (FIPS 204) as a signature scheme, with a reference implementation checked against NIST's vectors; `cose` reserved; `did:key` identifiers for roster keys; the hash algorithm named in every document; model provenance by weights, prompt and parameters; witnesses and a static tile layout for the log; and the character data pinned to Unicode 16.0. - Guides for newcomers: an overview, the concepts, a walkthrough of the example paper, runnable examples, the rationale, a FAQ and a glossary. - Tools that build and check everything, validate packages and zipped packages and run proposed corrections through the gate, load packages into SQLite or a bundle, and stress the reference implementation with random inputs. - A pixi workspace pinned to Python 3.14, with tasks for checking, building, linting, validating and loading. diff --git a/docs/glossary.md b/docs/glossary.md index 5e6a90a..3a8d7c1 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -38,6 +38,7 @@ Format `scienting-checklist/1`, `provisional`. ([8.11](../spec/08-fidelity.md#81 Checkpoint : A signed note that states a transparency log's size and root hash, which a verifier checks against the last checkpoint it saw. +Independent parties, the log's witnesses, cosign it, and a project says how many must. Format `scienting-checkpoint/1`, `provisional`. ([23.2](../spec/23-log.md#232-checkpoints)) Correction @@ -46,6 +47,11 @@ Correction Description : An annotation that describes a figure, panel or table for readers who cannot see it, as a short text equivalent (`alt`) or a full description (`long`); an accessible export uses confirmed descriptions only. ([18.4](../spec/18-layers.md#184-bodies)) +DID +: Outside term. +A decentralized identifier (W3C). +A roster key may carry its `did:key`, which the public key alone determines, so a signer has one name inside and outside the store. ([8.7](../spec/08-fidelity.md#87-revocations-and-the-roster)) + Document : The text established for one version of one work, from one or more witnesses, as a tree of nodes. ([2.1](../spec/02-model.md#21-four-objects), [3](../spec/03-nodes.md)) @@ -90,6 +96,14 @@ Match hash Two readings agree only when their match hashes are equal and their complex-notation keys are equal. A complex-notation key is `notation:source` for a piece of math too complex for the formats to normalize, with the source's whitespace removed ([5.3](../spec/05-hashes.md#53-the-strict-projection)). ([5.1](../spec/05-hashes.md#51-the-five-values), [5.3](../spec/05-hashes.md#53-the-strict-projection)) +ML-DSA-65 +: Outside term. +The lattice-based signature scheme of FIPS 204, believed to resist quantum computers. +A receipt may be signed with it today, beside Ed25519. ([8.4](../spec/08-fidelity.md#84-record-hashes-and-signatures)) + +Model +: The record of a machine-learning model that proposed a correction or wrote an annotation: its name, provider and version, and the hashes of its weights, instructions and parameters. ([11.2](../spec/11-corrections.md#112-every-correction-records)) + Node : An addressable part of a document: a section, paragraph, sentence, figure, panel, caption, table, row, cell, equation, footnote, reference and the rest. Each node has a permanent ID and five content values; table columns and figure-text items have IDs and are not nodes. ([3](../spec/03-nodes.md), [4.2](../spec/04-identity.md#42-minting-node-ids)) @@ -164,6 +178,9 @@ Text leaf Text policy : Whether a package carries its text (`full`) or withholds it (`checks-only`). ([12.5](../spec/12-package.md#125-text-policies)) +Tile +: One file of a transparency log served statically: 256 hashes of one level of the tree, or 256 entries, so a client fetches only the subtrees it needs. ([23.4](../spec/23-log.md#234-serving-a-log)) + Verdict : A judgment of whether a cited passage supports a citing sentence: supports, partly, does not, or cannot tell. ([19.2](../spec/19-exercises.md#192-verdicts)) diff --git a/docs/rationale.md b/docs/rationale.md index a2bf08c..b2b037d 100644 --- a/docs/rationale.md +++ b/docs/rationale.md @@ -302,13 +302,13 @@ These are settled for now, and a future version may revisit them. Choices made so that the formats still serve in the 2030s, and the ones deliberately left open. -- Signature schemes `cose` and `ml-dsa-65` are reserved: COSE so that the IETF's SCITT transparency services can verify receipts, ML-DSA (FIPS 204) for the time Ed25519 is no longer considered safe. - A consumer treats an unimplemented scheme as invalid, so adopting either is a minor version ([spec/08 §8.4](../spec/08-fidelity.md#84-record-hashes-and-signatures)). -- Every hash is SHA-256, and the hashing scheme names only how a value is keyed, not the function. - A hash function change would be a new major version of every format; the formats accept that rather than carrying agility they cannot test. -- Roster keys are named by short keys, not by decentralized identifiers; a `did:key` form could be added as a key property without a new version. -- A correction's author may be a model and its run; a fuller provenance for model output (the model's identity, weights and prompt by hash) is left to the project that first needs it. -- A transparency log is specified but no deployment exists yet; its tile layout is left to the first one ([spec/23](../spec/23-log.md)). +- `ml-dsa-65` (FIPS 204) is a signature scheme a receipt may carry today, with a pure-Python reference implementation that reproduces NIST's test vectors, so a team can sign with a post-quantum key before Ed25519 is deprecated and verify such receipts decades on. + `cose` is reserved for the IETF's SCITT transparency services; a consumer treats an unimplemented scheme as invalid, so adopting it is a minor version ([spec/08 §8.4](../spec/08-fidelity.md#84-record-hashes-and-signatures)). +- Every hash is SHA-256, and `document.json` names the function, so a later algorithm is a new major version that can share a store with this one rather than a silent reinterpretation ([spec/01 §1.3](../spec/01-conventions.md#13-hashes)). +- A roster key may carry its `did:key`, which the public key determines, so a signer has one name inside and outside the store ([spec/08 §8.7](../spec/08-fidelity.md#87-revocations-and-the-roster)). +- A model that proposes a correction or an annotation is named by its weights, instructions and parameters by hash, and by where it ran ([spec/11 §11.2](../spec/11-corrections.md#112-every-correction-records)). +- The transparency log has a static tile layout, witnesses in the roster, and an acceptance rule in the project's settings; what remains is to run one ([spec/23](../spec/23-log.md)). +- The VRF reference implementation proves in about 5 ms and verifies in about 4 ms in plain Python, which is fine for fixtures and small logs; a production verifier can use any RFC 9381 library, since the proofs are the standard's bytes. ## Known limits diff --git a/fixtures/README.md b/fixtures/README.md index ebf8a3c..d3ebf5b 100644 --- a/fixtures/README.md +++ b/fixtures/README.md @@ -53,7 +53,9 @@ Each record is a single file, or a folder where a format needs several files. | `qa-report.json` | Reviewer error bounds for a delivery that covers two of the main example's receipts, signed by the team's owner key. | | `checklist/` | A conformance checklist (`checklist.json`) for an accessible HTML export of the main example, checked against WCAG 2.1 AA criterion by criterion, and the receipt that covers it at its hash (`receipt.json`). The format is `provisional`. | | `proof-inclusion.json`, `proof-consistency.json` | Two RFC 9162 proofs: that one node was covered by the main example's first receipt without showing the rest, and that revision 12 of its correction history extends revision 8 rather than rewriting it. | -| `checkpoint.json` | A signed checkpoint of the team's transparency log over the main example's receipts, revocations and roster, as the parsed form of its signed note. The format is `provisional`. | +| `checkpoint.json` | A signed checkpoint of the team's transparency log over the main example's receipts, revocations and roster, as the parsed form of its signed note, cosigned by a witness. The format is `provisional`. | +| `log/` | The same log as the static files a server would publish: `checkpoint` and the hash and entries tiles ([spec/23 §23.4](../spec/23-log.md#234-serving-a-log)). | +| `receipt-ml-dsa.json` | A receipt signed with ML-DSA-65 (FIPS 204) by `dana`, whose roster key is post-quantum. | | `project.json`, `digitization.json`, `digitization-confirmation.json`, `datasets/`, `view.vl.json`, `snapshot.json`, `draft-ids.jsonl` | A team project; values read off the main example's figure by hand, the receipt that confirms them, and the dataset they yield; a Vega-Lite chart pinned to that dataset; what the draft cites, pinned; and the sentence IDs of the draft's Typst project. These formats are `provisional`. | ## Broken packages @@ -98,7 +100,7 @@ A conforming implementation refuses every one of them and should report that rul ## Keys -`keys/` holds the Ed25519 secret keys (`ana`, `ben`, `cara`, and `ben-spot`, whose signature picks the nodes of a spot-check) that signed the fixtures' receipts, and the team secret of the checks-only package. +`keys/` holds the Ed25519 secret keys (`ana`, `ben`, `cara`, `wit`, the witness, and `ben-spot`, whose VRF proof picks the nodes of a spot-check), the seed of `dana`'s ML-DSA-65 key, which signed the fixtures' receipts, and the team secret of the checks-only package. Ed25519 is a signature scheme: the secret key makes a signature, and the public key in a roster verifies it. These are published test keys. Anyone can reproduce the signatures, so a signature made with these keys proves nothing about who made it. diff --git a/fixtures/invalid/alias-dangling/package/MANIFEST.json b/fixtures/invalid/alias-dangling/package/MANIFEST.json index 45f8bbd..8562071 100644 --- a/fixtures/invalid/alias-dangling/package/MANIFEST.json +++ b/fixtures/invalid/alias-dangling/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"ids.jsonl","sha256":"1eb53589cd394214dd4ee15be98a3dfbacec5e585a1e655fe2dfeff71a07e19e","size":61},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"ids.jsonl","sha256":"1eb53589cd394214dd4ee15be98a3dfbacec5e585a1e655fe2dfeff71a07e19e","size":61},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/alias-dangling/package/document.json b/fixtures/invalid/alias-dangling/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/alias-dangling/package/document.json +++ b/fixtures/invalid/alias-dangling/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/alias-dangling/package/roster.json b/fixtures/invalid/alias-dangling/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/alias-dangling/package/roster.json +++ b/fixtures/invalid/alias-dangling/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/bad-id/package/MANIFEST.json b/fixtures/invalid/bad-id/package/MANIFEST.json index caf2144..093d72a 100644 --- a/fixtures/invalid/bad-id/package/MANIFEST.json +++ b/fixtures/invalid/bad-id/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"fd0cf6999bcce9c09cd7fb3aa0e1183bbbccf4c1ca0236e62c63a164e8dbc7f1","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"fd0cf6999bcce9c09cd7fb3aa0e1183bbbccf4c1ca0236e62c63a164e8dbc7f1","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/bad-id/package/document.json b/fixtures/invalid/bad-id/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/bad-id/package/document.json +++ b/fixtures/invalid/bad-id/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/bad-id/package/roster.json b/fixtures/invalid/bad-id/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/bad-id/package/roster.json +++ b/fixtures/invalid/bad-id/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/checks-only-plain/package/MANIFEST.json b/fixtures/invalid/checks-only-plain/package/MANIFEST.json index 3c00417..0932a9a 100644 --- a/fixtures/invalid/checks-only-plain/package/MANIFEST.json +++ b/fixtures/invalid/checks-only-plain/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"eb781b9fa773a5f38b255757265df4b889e830a59c05ac184d232b1951fd84c0","size":749},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"a7e83339ea04205a7b1f425299450bca661586a93ac7d959ceb60fb3c68207dd","size":771},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/checks-only-plain/package/document.json b/fixtures/invalid/checks-only-plain/package/document.json index 6d367df..15f7ccd 100644 --- a/fixtures/invalid/checks-only-plain/package/document.json +++ b/fixtures/invalid/checks-only-plain/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"checks-only","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"checks-only","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/checks-only-plain/package/roster.json b/fixtures/invalid/checks-only-plain/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/checks-only-plain/package/roster.json +++ b/fixtures/invalid/checks-only-plain/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/cite-not-reference/package/MANIFEST.json b/fixtures/invalid/cite-not-reference/package/MANIFEST.json index 16c9fcb..f552500 100644 --- a/fixtures/invalid/cite-not-reference/package/MANIFEST.json +++ b/fixtures/invalid/cite-not-reference/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"d31b7bda29230dee3a57a1965419ca2133ad6035ca6eb7c94968c652d4c660c3","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"d31b7bda29230dee3a57a1965419ca2133ad6035ca6eb7c94968c652d4c660c3","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/cite-not-reference/package/document.json b/fixtures/invalid/cite-not-reference/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/cite-not-reference/package/document.json +++ b/fixtures/invalid/cite-not-reference/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/cite-not-reference/package/roster.json b/fixtures/invalid/cite-not-reference/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/cite-not-reference/package/roster.json +++ b/fixtures/invalid/cite-not-reference/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/counts-wrong/package/MANIFEST.json b/fixtures/invalid/counts-wrong/package/MANIFEST.json index 5a5ac1f..4b4e810 100644 --- a/fixtures/invalid/counts-wrong/package/MANIFEST.json +++ b/fixtures/invalid/counts-wrong/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"ef4bb914bd8cfefe270278a66238175e678096bdd50114b751c35ddde19bb4f5","size":740},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"4dda6a318c14ce1817ca3837950777100570c1fb0088a5d000d068d1912a0fdb","size":762},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/counts-wrong/package/document.json b/fixtures/invalid/counts-wrong/package/document.json index 2100e6a..6bec509 100644 --- a/fixtures/invalid/counts-wrong/package/document.json +++ b/fixtures/invalid/counts-wrong/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":1,"nodes":1},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":1,"nodes":1},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/counts-wrong/package/roster.json b/fixtures/invalid/counts-wrong/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/counts-wrong/package/roster.json +++ b/fixtures/invalid/counts-wrong/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/crlf/package/MANIFEST.json b/fixtures/invalid/crlf/package/MANIFEST.json index e77274d..3812ba9 100644 --- a/fixtures/invalid/crlf/package/MANIFEST.json +++ b/fixtures/invalid/crlf/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"fcbae067529e8476e0fbace4ed94cbb174c31b943fb4f26dc63b316f5dc46b9c","size":227},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"fcbae067529e8476e0fbace4ed94cbb174c31b943fb4f26dc63b316f5dc46b9c","size":227},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/crlf/package/document.json b/fixtures/invalid/crlf/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/crlf/package/document.json +++ b/fixtures/invalid/crlf/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/crlf/package/roster.json b/fixtures/invalid/crlf/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/crlf/package/roster.json +++ b/fixtures/invalid/crlf/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/empty-optional-file/package/MANIFEST.json b/fixtures/invalid/empty-optional-file/package/MANIFEST.json index e0a21d4..a7b5e74 100644 --- a/fixtures/invalid/empty-optional-file/package/MANIFEST.json +++ b/fixtures/invalid/empty-optional-file/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"suspects.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","size":0},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"suspects.jsonl","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","size":0},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/empty-optional-file/package/document.json b/fixtures/invalid/empty-optional-file/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/empty-optional-file/package/document.json +++ b/fixtures/invalid/empty-optional-file/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/empty-optional-file/package/roster.json b/fixtures/invalid/empty-optional-file/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/empty-optional-file/package/roster.json +++ b/fixtures/invalid/empty-optional-file/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/hash-mismatch/package/MANIFEST.json b/fixtures/invalid/hash-mismatch/package/MANIFEST.json index d1df772..f4aa34a 100644 --- a/fixtures/invalid/hash-mismatch/package/MANIFEST.json +++ b/fixtures/invalid/hash-mismatch/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"11e236bf3394043f2b42090a9149fa598fa1e3c5e947df063b38f569b2d27fa2","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"11e236bf3394043f2b42090a9149fa598fa1e3c5e947df063b38f569b2d27fa2","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/hash-mismatch/package/document.json b/fixtures/invalid/hash-mismatch/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/hash-mismatch/package/document.json +++ b/fixtures/invalid/hash-mismatch/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/hash-mismatch/package/roster.json b/fixtures/invalid/hash-mismatch/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/hash-mismatch/package/roster.json +++ b/fixtures/invalid/hash-mismatch/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key:z4xcFfnTC6XJy4gzg9whfyMzcnxV7yM2XafMFynKXhAEvMgjfQCxSnjZaa53arz2iNo8v35ZN5SdAUcbFkbuvftcMczRT2CPhYsXkNYZhDzXWQVS5KZZkhnMDmwChWfgRHu4Bs6KHyEmvzwesTioW5yS3YtfR7mUPJAwWSRq9f23HRxzenGpVVBcVjpd8YDZ4Y1ZamcUfesnB6pGLrPtLDvGM7Te1cJWoRG4m3TetEF3i9V3W4CH43nouCwUPbjy7dpTNEWiCqaTPiPhV8UEWBD8b9e1729PwoUFyAFreuq6wvhphLKGHhFCFujrUtqDZPs6FFF1Q7Lpt9eFcjbxrZSAYsh9VTfxaUeQ4HmFqzrg28EEjJzxxADZyjTXDsfwskRbibHSms9bbN2xK6GQcUxE2mrA2ULfYwsk5RQsVULUTj3pMMXpxRqP4zerzui2ZRZ3SqeNUwqnhmF861pEtcemZPY6ivcX41QK3ekCtpc1HndtY9xua1Lrhs4jd6qEbxHWzBPHok6qTpyxnn7ubZssBqSMz3uNrou1ayZGDn1ayAXtzCJPjAcxdNX1dpm5vyDB8GYtNKsQHuiX5xUd2EMAVfq4cFrZ6ncY1zrG5exH6mhJYbZfW7BgXxq7GsnzAAGkzgHCRADe5EEm1Hj1YdmVBTiaGsPGYkF4Mcrw3T2j3AcPJCzPLRNjKBKXyHAcf3VPUmreaHd1GoA5zqvtANSPmppY2AhCAj8u6n92fiyBgrvJTh4hyvtMFcwaa9vKnY9rBS4n5XGpdwKQe11Tk5sah8VZc2PyH2WPBU3DmhZSwUkKHRQQQQMXjrLjuMtygzxWBgrJAcWRPzxmzHZEj5x9GgFZb4dPDwqVXsgR25KrpuyQKcxfbxzQoRprnhu1ec8SfX5zeUo282Si9dBZ3JVdxzYHzP6xSiuBeHHFMvMwb1MKUq2dMi9vWdg2eCDo5wTvSaTVcdYGtZsT7HMswWtxx9GLw1RafYRcNqMhBhCbRdJszUKjQKwNNZbaryRs4kTYicuE24PWbqfxdJnrzrLbXnVBDMNHjX8ESXSKTMnAoE1AiLgjdj3zbBrY39Pxc72EikA7GvP2qxKZBkJ6G2RRWCw9d3nZKmTmQqP5PP9HgdtSTnZhNTJqBkwL3iqfoWxtbkLjLLSQc3dbFpmhe4kAh7VUUDcLzjb4nGzCbr5U1YoqAoLnSC9BPijnfMHxBP6i8cR762ryxPwe7HdGk62DVYoqxbwz8ygrDPjdPi3t11PpHp51GxuhMkoR3GFxAdMEv8j4tVpJ6qjefULEFTtRPzZ5kTE57RTxC4wg62qcYwupWx4dvvB2BR9ZGnNwCojpBYByeeYETrgm4HJjjS3SH64sbpyqz7336YMAcWyQFc9BeqjQHHUHS8CJ82N88apbPPE8N9X76DQ8PgwACtR4D5ofE9o14kpdVZFV2YMtmnKCybNLn3atspK6T1ZPYB3vQ1c4DbzZFgCpm6izEzxsY17in79ieo3cY965Cr5mkxca29VxcTaEtovdu9sKAL4VgCZzWkps5nnimX5JBEdVKYxTtMb6CcTkdWGFtXBTBuAMTpRNLXG5nG4bq9XXLkFS4oXpVS7KayqAMtrrqttpgwdAPNuzd6E4JskxdenwMq6qzMTDKoMqGDVEKkwCxCcbUtNpHGMLWMMk9MDrsPvcU8u2C89UmJmsfS5gQqswkz6TfXvthM3wPcuKaX7TUJJRzYstWsXRKUaPqqT3ppftCbXPFgia3mXkA5bk9Y3GWcTADGTnzKkTzbnL6hsgQW1FyvsFwUiWUJd5weeHkfaHt8iV3PKy99S6d831iLCfFWM6bYZgEBvyx5seHSpiaXRfSv4A2yDsf4Tb4EVsyDUJPUmZLnbFkJmw46A6PoQHdwfBbXWV47DFM6w5mKXCPmKzuAG1Vmw7D36n4oHd91r1VzTynVnhD1EA5UVh4qhiw2CnWgo2uAPxEpLYnvrCLiVprnzdPzvZZqMUxXRFWHwfshJDARRLvP933693aWxa5PeDNgMjZYgKJBV5e66Z1Mk5rYegEuSq7uyz8Mw3iuidtJeqBugbNCYeNdmeBPgKux8HcuFNqQaVwhP9vW8vyaU7DvuKEeXs1uyAgtk9RCua2Mx8rQqUwQigWNjXaJoSYqMT9SVEGUSYAGQiLnMFENqG1r87uhxV58hTwR8QED9cQkStFXeuZAMY6FWTZCsD5juC48KdqoUQYr77iBy7fW2quQNdPvwEUdhh1mzSTX2PPubCbm9rcdBxBQ2CBZizn1EsbPMic1X39t17scRE5F4Yank18EF4aUmJwwNHx5m1WKDQMZ1kJQRyhtRvAHTPqBdJCw5SHaEqBVpEQHUZwBKsQoTRj4Gk1opv6XfczoK3MLuprTMSx2maw5Gv6LhF2SWUvEXMMqoeqVzyP9g11dumkKQLMiAQa2VGaa7EF7Foj2ZDUhPM6PPiffHMhDMwWhRBywg3SC6aP9zz2TdMXweHv8rags9chFZ217aAP3bcCf5i1VZqPT9b8Ea7ykjjUy6PNwiSforRXN46suuRFREuhx6DuWDojythjH73wMAeKKx23rF4QfdUxzkC2mmmS4dq8Xx7Bda4e31EGab4t81Jk4dAVGjSrZC9wx89CAjovhoejgDTKNsN3ri4GjW9UD","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/heading-not-first/package/MANIFEST.json b/fixtures/invalid/heading-not-first/package/MANIFEST.json index c7a32a1..7c7f7b2 100644 --- a/fixtures/invalid/heading-not-first/package/MANIFEST.json +++ b/fixtures/invalid/heading-not-first/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"aae6d3db59616ae07b7521936e0e92fef6555bfc157eaeff231ebbd6d1621a81","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"aae6d3db59616ae07b7521936e0e92fef6555bfc157eaeff231ebbd6d1621a81","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/heading-not-first/package/document.json b/fixtures/invalid/heading-not-first/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/heading-not-first/package/document.json +++ b/fixtures/invalid/heading-not-first/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/heading-not-first/package/roster.json b/fixtures/invalid/heading-not-first/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/heading-not-first/package/roster.json +++ b/fixtures/invalid/heading-not-first/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/history-wrong/package/MANIFEST.json b/fixtures/invalid/history-wrong/package/MANIFEST.json index ab229ec..bef6fd7 100644 --- a/fixtures/invalid/history-wrong/package/MANIFEST.json +++ b/fixtures/invalid/history-wrong/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"b8052f6381e4fdc594325fa868929891c8e4e17363896c77fb5c53376d454361","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"8531f4c3fd2b551358b320a9da2889c7e21c89db51fdb136d5927e49c707136b","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/history-wrong/package/document.json b/fixtures/invalid/history-wrong/package/document.json index d9330f5..b5a6727 100644 --- a/fixtures/invalid/history-wrong/package/document.json +++ b/fixtures/invalid/history-wrong/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"4444444444444444444444444444444444444444444444444444444444444444","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"4444444444444444444444444444444444444444444444444444444444444444","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/history-wrong/package/roster.json b/fixtures/invalid/history-wrong/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/history-wrong/package/roster.json +++ b/fixtures/invalid/history-wrong/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/key-suffix/package/MANIFEST.json b/fixtures/invalid/key-suffix/package/MANIFEST.json index e7b5cb0..f35a1d9 100644 --- a/fixtures/invalid/key-suffix/package/MANIFEST.json +++ b/fixtures/invalid/key-suffix/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"14c418e1df391cf3605b0b8a4d8fc7686a626e89ca690fa1d5483b18f19f9627","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-zzzz"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"50d2b2546a62f007512304d578b6fa65adc0f3b643d91a03940b5d6c9b652b7d","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-zzzz"} diff --git a/fixtures/invalid/key-suffix/package/document.json b/fixtures/invalid/key-suffix/package/document.json index df62a74..e825e0e 100644 --- a/fixtures/invalid/key-suffix/package/document.json +++ b/fixtures/invalid/key-suffix/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-zzzz","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-zzzz","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-zzzz","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-zzzz","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/key-suffix/package/roster.json b/fixtures/invalid/key-suffix/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/key-suffix/package/roster.json +++ b/fixtures/invalid/key-suffix/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/key-work/package/MANIFEST.json b/fixtures/invalid/key-work/package/MANIFEST.json index 265daa0..6cb4223 100644 --- a/fixtures/invalid/key-work/package/MANIFEST.json +++ b/fixtures/invalid/key-work/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"b5a27c359817ec0eab2ec8eec95b8489e5f94843f3d04a6b31bbfed703968ab7","size":745},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm.si"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"f457aad130c7c493be70df8dfbd85f9de3eb41d30ed2ce1504aaad1d1ccb291d","size":767},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm.si"} diff --git a/fixtures/invalid/key-work/package/document.json b/fixtures/invalid/key-work/package/document.json index b0ed9f1..2ed48a7 100644 --- a/fixtures/invalid/key-work/package/document.json +++ b/fixtures/invalid/key-work/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm.si","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm.si","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/key-work/package/roster.json b/fixtures/invalid/key-work/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/key-work/package/roster.json +++ b/fixtures/invalid/key-work/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/location-unknown-page/package/MANIFEST.json b/fixtures/invalid/location-unknown-page/package/MANIFEST.json index c2b1856..25b50a6 100644 --- a/fixtures/invalid/location-unknown-page/package/MANIFEST.json +++ b/fixtures/invalid/location-unknown-page/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"locations.jsonl","sha256":"f9b30f0b834ea3846e1a01032495fcca1857cfe341a91b2e9bea4a7bdc7fdf5f","size":130},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"locations.jsonl","sha256":"f9b30f0b834ea3846e1a01032495fcca1857cfe341a91b2e9bea4a7bdc7fdf5f","size":130},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/location-unknown-page/package/document.json b/fixtures/invalid/location-unknown-page/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/location-unknown-page/package/document.json +++ b/fixtures/invalid/location-unknown-page/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/location-unknown-page/package/roster.json b/fixtures/invalid/location-unknown-page/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/location-unknown-page/package/roster.json +++ b/fixtures/invalid/location-unknown-page/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/manifest-hash/package/MANIFEST.json b/fixtures/invalid/manifest-hash/package/MANIFEST.json index 7c5f069..6be6656 100644 --- a/fixtures/invalid/manifest-hash/package/MANIFEST.json +++ b/fixtures/invalid/manifest-hash/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/manifest-hash/package/document.json b/fixtures/invalid/manifest-hash/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/manifest-hash/package/document.json +++ b/fixtures/invalid/manifest-hash/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/manifest-hash/package/roster.json b/fixtures/invalid/manifest-hash/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/manifest-hash/package/roster.json +++ b/fixtures/invalid/manifest-hash/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"lQ6M2DulKY4RkQLGTPGZD+CHlOOib4kBkwlccVNWRDPco1k5kHtelT/yUP4+CoAQnHnLu96vpeWztaee/9RmjR3bstGj+P5tOSrwFlPuyNUPOWPNjwCQLrVEyeUGBaA4+HRvFwK7C4OHB8EJWYtC0OuH+tRPlCdLpxlVcZZcM7dsZYe2BDNenbWfp4TeX2Oa+dThlceDY0m9MewwqUrd5xdo9tc8PS9R9o0ZUWf0vDw7Fc5AcsWwbf76lDLvIbyd0aCaHJ7eaK6DFsBuZFKVdlZlH0inJciAMF8dPoRuE+A0VlZTEOsOivNWprM5iLHzXse3zSoHLldWr0t4hWxHH3MBQ57Ucee8RTU6hFRfqfFRl6zJQyRZOFZZoYD9QwXkR3NmUzV/FcsOMHpbgTcY7O0TAajPnfpSTp+XdyPVBR7TlTsturUCpryP0ZX1S3VJk2IaneB123thtcOtWsbqdT3Bb846H7yudI95WVTixIS/KIwoCbekSf8Y9+iW/xRVSWLRVc1gpigDxXfieSA7bI+qiUBjiKR7QU1KFYZA58VcOQhzeMLY6an34rsW4WHAwzzSv8Q6vrwpn8Ct9fTsIeiZsWZLueNkIUfjR0G1bHHoT2RHKton0AMRjOUGSKUUB4DNZ5xzXvC0jvUMWlgHB9z2wBCsIkIDVWqSA2DD0xeIY2wSUVPwPc1MnBAf/Fx3poweUlcPWglR2VaO9ematC4hfLxxkGldGQt3C6ZLPsm96S7o6j88rwOqkDNIR1pNJOepgciJH/w4Xwtg9gJ52CpdlCeSllRQD74l95ysmZ2D/gLweNoUt61P0RYQQelio8VnPUNB1e2uK7zW9joG1k59CjJGQNvuZr6JkQ9+Hxo5xKEOy9KcpT6t48wTzbz3YMFDxTNl0/DzL8qdTU2UrSW6/TFgPLokbAQN00yhw0lg8cR/e1m+ujFyBeesL3luwE6HNcIyK5Y/+To04vR3OD7Uz8cnABxWyOeSBm2R2bu2fxeN0Hlv+qhoOYtbZ1DKx/aES4z51jATynEIdMIMSNhmVDoDiGODh9ocenzg/DUarjIzWltPFRyQj+tnFGTXp7C87s3yAf248ZB0HHhK1GCppxB4hsv89nNtWH1JdWjsc243s3f0WOZtJ1f+9yeybViJCW47ez7HkwtTq2AVeg+lHrb4TPCL5pBKwUOj5GVe2DzMFBtjilcl/ED4gev7DK383iyB4tGVZa1ALPKUyiyKV3sCRV/mN5DSGeASafI6OOjjUKifYCJaxOHFQGr6zvfhVj9L2Cl/hthxplTWoLpo4I7+oLPQJIrOMPf8FHLtRLAYthsxT3K02mVtUMhrviaVh5/kJKMMd4iRc8YXloC0r8roivoEPr5SzDprSffh8a2N2KRAHd3yrp4z7RxlpWKPWr5whD56q279S70A9r/r5r0bVzwabhKkTSJxc2LN72QondANsGFDYPD3Rm+FwSO2JwwgIG8GQxBbMWPOEqD0qDmaebNfP/EpbeF8mvA8v4e58CIv1LaHZuEky6vc16woEYHm11UuH6ChHbWxCoDXJsVM/jPme1vPlic38i9XYsE2c199gP1ikBGQANlryeIWH8wXtPUXNflNecMqIQkWAWSK/8jujgtylBQ/CklRyeW0+vyxV5eo8S8TfnonyG2eiHN1VS3HGLSidcYRi54IsOMtuR773QoLPZeRXlsNWO5kc3xcHU7K6olsMNtQhaFnkf3GATh9H80GUvEMK9u5yMUrCoYWuUy7JQhjsl+B1QbAFftdDu8ESgTOIKmFOLg+F9CH4lJrCqnwUdCs93zbJem2++Y64HRFLSUXwlhEUuQVugX7BejmcMYWMjYXROlatnznqYXcWW2uxx6ZNxQv0eB/CN1i4q1G8y9XUh4wz/caY8ly+eaTU5J4wGHfnUDpssu+TUvE5PGUs1gW6FswHlf1IXEnvKDIXKajbJgYnjEekVG8FxcSUc/10Mw/vqk/GQqdMOguf3mShlUIbtX2JVrA5ClZ9qza4HEXC7RkmxJLyc5dDyX/CuFdoDzrVu+1+JqRsFHGeLCo9rNvIQjvG09GQX6uDUavi25hCcOgug2DI0PuVLjcESFDyaYNdKo9GsiCEBpLPglp9viA2vX2kG6P2pidgsGfcBgdGuYGQbd23Qu9QpOd8AAuyWsm0dX6hKO2ChoAPVQxDNcj9N6UjumggVQ6zOuC0+gOcao/aPs/eH9agchdtnWKuL1clo4FduP4sdDtTvnJLFYnXONM//LSnjqSyBc7rzjJ2cxzPWQtLFawErzHXukl2eeP/xpDvLU0G6JroeJqBitHIoK00FGdxTUnrJBgy1DnBoIgUhxOvb1wtnx/O4DDS5tJZBDbl9XVbRmSfcljfQ5mB38hQ51CuYodHE9q12Bk1FtSwbVKvPHGb+9EdkbktJKRgdJubAQ+ajOCyMjEDCp9xLeKnlFL+WesI0Ro+rnmQL0qXVzkhZj8LP4a8yFYieIXCApLveflfv2yRJf3a/EML7yIgoEuzejddFrcbupWxDRqwS1YcLDkvGBEzjp8zuVnr72GfaFW/nvU9V9P/Z0fFS5hZhG5MnEp0Qzjsy/eKRI=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/manifest-key/package/MANIFEST.json b/fixtures/invalid/manifest-key/package/MANIFEST.json index c3fd989..c946d80 100644 --- a/fixtures/invalid/manifest-key/package/MANIFEST.json +++ b/fixtures/invalid/manifest-key/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"other2026example-0000"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"other2026example-0000"} diff --git a/fixtures/invalid/manifest-key/package/document.json b/fixtures/invalid/manifest-key/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/manifest-key/package/document.json +++ b/fixtures/invalid/manifest-key/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/manifest-key/package/roster.json b/fixtures/invalid/manifest-key/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/manifest-key/package/roster.json +++ b/fixtures/invalid/manifest-key/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/missing-required-file/package/MANIFEST.json b/fixtures/invalid/missing-required-file/package/MANIFEST.json index fb53aa4..6ec09fd 100644 --- a/fixtures/invalid/missing-required-file/package/MANIFEST.json +++ b/fixtures/invalid/missing-required-file/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/missing-required-file/package/document.json b/fixtures/invalid/missing-required-file/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/missing-required-file/package/document.json +++ b/fixtures/invalid/missing-required-file/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/missing-required-file/package/roster.json b/fixtures/invalid/missing-required-file/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/missing-required-file/package/roster.json +++ b/fixtures/invalid/missing-required-file/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/not-canonical/package/MANIFEST.json b/fixtures/invalid/not-canonical/package/MANIFEST.json index 2391ce0..ff84d14 100644 --- a/fixtures/invalid/not-canonical/package/MANIFEST.json +++ b/fixtures/invalid/not-canonical/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"982fbecd0724047eaf9a9330e10b1c0ae77189ca9c262e04f4266eabef080412","size":11312},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"982fbecd0724047eaf9a9330e10b1c0ae77189ca9c262e04f4266eabef080412","size":11312},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/not-canonical/package/document.json b/fixtures/invalid/not-canonical/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/not-canonical/package/document.json +++ b/fixtures/invalid/not-canonical/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/not-canonical/package/roster.json b/fixtures/invalid/not-canonical/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/not-canonical/package/roster.json +++ b/fixtures/invalid/not-canonical/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/receipt-root/package/MANIFEST.json b/fixtures/invalid/receipt-root/package/MANIFEST.json index 49ea980..ed10e69 100644 --- a/fixtures/invalid/receipt-root/package/MANIFEST.json +++ b/fixtures/invalid/receipt-root/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"8528fc565e19f96b145c49875edbd433f57bcf896e2d7ccbc9c45cd27ca51b3a","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"8528fc565e19f96b145c49875edbd433f57bcf896e2d7ccbc9c45cd27ca51b3a","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/receipt-root/package/document.json b/fixtures/invalid/receipt-root/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/receipt-root/package/document.json +++ b/fixtures/invalid/receipt-root/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/receipt-root/package/roster.json b/fixtures/invalid/receipt-root/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/receipt-root/package/roster.json +++ b/fixtures/invalid/receipt-root/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/receipt-signature/package/MANIFEST.json b/fixtures/invalid/receipt-signature/package/MANIFEST.json index 5469b27..b7263fb 100644 --- a/fixtures/invalid/receipt-signature/package/MANIFEST.json +++ b/fixtures/invalid/receipt-signature/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"bbf1f8303fa2a9562071f61ec399e003a3dd0df9038fe06c01e48ff93330228b","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"bbf1f8303fa2a9562071f61ec399e003a3dd0df9038fe06c01e48ff93330228b","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/receipt-signature/package/document.json b/fixtures/invalid/receipt-signature/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/receipt-signature/package/document.json +++ b/fixtures/invalid/receipt-signature/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/receipt-signature/package/roster.json b/fixtures/invalid/receipt-signature/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/receipt-signature/package/roster.json +++ b/fixtures/invalid/receipt-signature/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/receipt-unsorted-nodes/package/MANIFEST.json b/fixtures/invalid/receipt-unsorted-nodes/package/MANIFEST.json index 42aad5a..2e9f7ec 100644 --- a/fixtures/invalid/receipt-unsorted-nodes/package/MANIFEST.json +++ b/fixtures/invalid/receipt-unsorted-nodes/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"0941ebc17ef445bcdc9a01d80f6ac35a017f4f2632d16b752ac77ca4cbd454c6","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"0941ebc17ef445bcdc9a01d80f6ac35a017f4f2632d16b752ac77ca4cbd454c6","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/receipt-unsorted-nodes/package/document.json b/fixtures/invalid/receipt-unsorted-nodes/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/receipt-unsorted-nodes/package/document.json +++ b/fixtures/invalid/receipt-unsorted-nodes/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/receipt-unsorted-nodes/package/roster.json b/fixtures/invalid/receipt-unsorted-nodes/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/receipt-unsorted-nodes/package/roster.json +++ b/fixtures/invalid/receipt-unsorted-nodes/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/retired-live/package/MANIFEST.json b/fixtures/invalid/retired-live/package/MANIFEST.json index 03efd3d..aa2b9b9 100644 --- a/fixtures/invalid/retired-live/package/MANIFEST.json +++ b/fixtures/invalid/retired-live/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"ids.jsonl","sha256":"278fb71fde86a5cb3dfc34df75838695e9f1846d33b6ae8867967f02e6ebb1be","size":82},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"ids.jsonl","sha256":"278fb71fde86a5cb3dfc34df75838695e9f1846d33b6ae8867967f02e6ebb1be","size":82},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/retired-live/package/document.json b/fixtures/invalid/retired-live/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/retired-live/package/document.json +++ b/fixtures/invalid/retired-live/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/retired-live/package/roster.json b/fixtures/invalid/retired-live/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/retired-live/package/roster.json +++ b/fixtures/invalid/retired-live/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/rev-without-corrections/package/MANIFEST.json b/fixtures/invalid/rev-without-corrections/package/MANIFEST.json index f64917d..2643d89 100644 --- a/fixtures/invalid/rev-without-corrections/package/MANIFEST.json +++ b/fixtures/invalid/rev-without-corrections/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"ac2ad8a14be0440f2bc104425f9c4958a4f83a8a5b882c9c7ecb4e7d5d207a40","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"f52c8dc6afac0cd89fb325e7049e40ebb19d4f239500f2a0145aa3d6b9cdffa1","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/rev-without-corrections/package/document.json b/fixtures/invalid/rev-without-corrections/package/document.json index d101a2a..7e502a0 100644 --- a/fixtures/invalid/rev-without-corrections/package/document.json +++ b/fixtures/invalid/rev-without-corrections/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":3,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":3,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/rev-without-corrections/package/roster.json b/fixtures/invalid/rev-without-corrections/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/rev-without-corrections/package/roster.json +++ b/fixtures/invalid/rev-without-corrections/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/root-mismatch/package/MANIFEST.json b/fixtures/invalid/root-mismatch/package/MANIFEST.json index 0d6837f..e0a3bfa 100644 --- a/fixtures/invalid/root-mismatch/package/MANIFEST.json +++ b/fixtures/invalid/root-mismatch/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"ae64233d848434b0c34320f94adcb01e4ca490d26030536d585e70e1732a9f1c","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"4dd2ee838c6f97c4702656c90044aa5afc7e4dfcdf565b5d2b4a9b1705bb65b3","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/root-mismatch/package/document.json b/fixtures/invalid/root-mismatch/package/document.json index cabcee4..bd60397 100644 --- a/fixtures/invalid/root-mismatch/package/document.json +++ b/fixtures/invalid/root-mismatch/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"1111111111111111111111111111111111111111111111111111111111111111","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"1111111111111111111111111111111111111111111111111111111111111111","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/root-mismatch/package/roster.json b/fixtures/invalid/root-mismatch/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/root-mismatch/package/roster.json +++ b/fixtures/invalid/root-mismatch/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/signer-mismatch/package/MANIFEST.json b/fixtures/invalid/signer-mismatch/package/MANIFEST.json index 0759aa2..1c1c047 100644 --- a/fixtures/invalid/signer-mismatch/package/MANIFEST.json +++ b/fixtures/invalid/signer-mismatch/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"c2f0b12ef0543bff761960e4855d5eca95d97d70a992a3b2cb5f28a43f6133f6","size":2183},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"c2f0b12ef0543bff761960e4855d5eca95d97d70a992a3b2cb5f28a43f6133f6","size":2183},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/signer-mismatch/package/document.json b/fixtures/invalid/signer-mismatch/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/signer-mismatch/package/document.json +++ b/fixtures/invalid/signer-mismatch/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/signer-mismatch/package/roster.json b/fixtures/invalid/signer-mismatch/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/signer-mismatch/package/roster.json +++ b/fixtures/invalid/signer-mismatch/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/style-sup-sub/package/MANIFEST.json b/fixtures/invalid/style-sup-sub/package/MANIFEST.json index 2f315ad..2ad5fde 100644 --- a/fixtures/invalid/style-sup-sub/package/MANIFEST.json +++ b/fixtures/invalid/style-sup-sub/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"0ddbad4bd01118676ced244f3d8296377b7d026bd07209b244bb750026511160","size":11317},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"0ddbad4bd01118676ced244f3d8296377b7d026bd07209b244bb750026511160","size":11317},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/style-sup-sub/package/document.json b/fixtures/invalid/style-sup-sub/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/style-sup-sub/package/document.json +++ b/fixtures/invalid/style-sup-sub/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/style-sup-sub/package/roster.json b/fixtures/invalid/style-sup-sub/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/style-sup-sub/package/roster.json +++ b/fixtures/invalid/style-sup-sub/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/text-edited/package/MANIFEST.json b/fixtures/invalid/text-edited/package/MANIFEST.json index 29a705f..a82f48f 100644 --- a/fixtures/invalid/text-edited/package/MANIFEST.json +++ b/fixtures/invalid/text-edited/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"37b46719e48b84b0271e54cb85b1831852cebd8400b758f87bf1c261d1da3d36","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"37b46719e48b84b0271e54cb85b1831852cebd8400b758f87bf1c261d1da3d36","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/text-edited/package/document.json b/fixtures/invalid/text-edited/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/text-edited/package/document.json +++ b/fixtures/invalid/text-edited/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/text-edited/package/roster.json b/fixtures/invalid/text-edited/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/text-edited/package/roster.json +++ b/fixtures/invalid/text-edited/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/unknown-kind/package/MANIFEST.json b/fixtures/invalid/unknown-kind/package/MANIFEST.json index d768bee..6a97bb9 100644 --- a/fixtures/invalid/unknown-kind/package/MANIFEST.json +++ b/fixtures/invalid/unknown-kind/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"75934bbf6f3baed92a8d6aa62c67f401b05d11c1c5dbfcf350da995a5ae6a5fa","size":11291},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"75934bbf6f3baed92a8d6aa62c67f401b05d11c1c5dbfcf350da995a5ae6a5fa","size":11291},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/unknown-kind/package/document.json b/fixtures/invalid/unknown-kind/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/unknown-kind/package/document.json +++ b/fixtures/invalid/unknown-kind/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/unknown-kind/package/roster.json b/fixtures/invalid/unknown-kind/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/unknown-kind/package/roster.json +++ b/fixtures/invalid/unknown-kind/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/unlisted-file/package/MANIFEST.json b/fixtures/invalid/unlisted-file/package/MANIFEST.json index 7c5f069..6be6656 100644 --- a/fixtures/invalid/unlisted-file/package/MANIFEST.json +++ b/fixtures/invalid/unlisted-file/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/unlisted-file/package/document.json b/fixtures/invalid/unlisted-file/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/unlisted-file/package/document.json +++ b/fixtures/invalid/unlisted-file/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/unlisted-file/package/roster.json b/fixtures/invalid/unlisted-file/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/unlisted-file/package/roster.json +++ b/fixtures/invalid/unlisted-file/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/unsafe-path/package/MANIFEST.json b/fixtures/invalid/unsafe-path/package/MANIFEST.json index b9ca42c..144138c 100644 --- a/fixtures/invalid/unsafe-path/package/MANIFEST.json +++ b/fixtures/invalid/unsafe-path/package/MANIFEST.json @@ -1 +1 @@ -{"doc":"scienting-doc/1","files":[{"path":"../escape.txt","sha256":"0000000000000000000000000000000000000000000000000000000000000000","size":1},{"path":"document.json","sha256":"20b269257831ddd1d064586fcee2c4b21c96c0c660bd3b4d0996197724e4b4e7","size":742},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"4a6d29e8968143a4e19f485741c513245df1de77eec4ef9b3047c71db45cda22","size":924},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} +{"doc":"scienting-doc/1","files":[{"path":"../escape.txt","sha256":"0000000000000000000000000000000000000000000000000000000000000000","size":1},{"path":"document.json","sha256":"e10c4aaab285d02d859ed2cf590fa9add9b77b0fab7a2b71b8c82f61b310a031","size":764},{"path":"nodes.jsonl","sha256":"6ce54e0d837dceb4a2a39c1b2618cc66e16684b93f71b93ab4e6e709a90b0e52","size":11295},{"path":"provenance.json","sha256":"4bc7649bf6d3113f6c72b4016713654f57c8f03069632eabd1e6025c05cb9dac","size":226},{"path":"receipts.jsonl","sha256":"f745067d43480bbd467c5d8f11ff13eec198fac821664894ad8bd90b8b7cf0b3","size":2182},{"path":"references.jsonl","sha256":"59908a8aff6a2d5800747a1f45c6c2943ea1e31e7e1f10b6348967d30f16b87e","size":60},{"path":"roster.json","sha256":"3c71b0c007924cbacd3b4af02485214ab904db8ff8fca133ab32e67c5c76d481","size":6941},{"path":"witnesses.json","sha256":"83ac4411c2efe65e0f7fc4c9336abbef6977cd32b0f90de029a7f8516afc3e97","size":750}],"format":"scienting-package/1","key":"tiny2026tiny-j4qm"} diff --git a/fixtures/invalid/unsafe-path/package/document.json b/fixtures/invalid/unsafe-path/package/document.json index e382235..9a4e921 100644 --- a/fixtures/invalid/unsafe-path/package/document.json +++ b/fixtures/invalid/unsafe-path/package/document.json @@ -1 +1 @@ -{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} +{"counts":{"leaves":10,"nodes":22},"fidelity":{"counts":{"F0":0,"F1":0,"F2":1,"F3":9},"lowest":"F2"},"format":"scienting-doc/1","hashing":{"algorithm":"sha-256","scheme":"plain"},"history":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","key":"tiny2026tiny-j4qm","kind":"article","language":"en","license":{"spdx":"CC0-1.0"},"meta":{"author":[{"family":"Tiny","given":"T."}],"issued":{"date-parts":[[2026]]},"title":"A tiny example"},"meta_hash":"1062e6079e2871c390f4737f5354448b65fe524d8c09d1c82afaa8b71ba6b3e7","policy":"full","relations":[],"rev":0,"root":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","version":{"type":"version-of-record"},"work":{"key":"tiny2026tiny-j4qm","same_as":["doi:10.5555/example.tiny.2026"]}} diff --git a/fixtures/invalid/unsafe-path/package/roster.json b/fixtures/invalid/unsafe-path/package/roster.json index 7886e39..36584ed 100644 --- a/fixtures/invalid/unsafe-path/package/roster.json +++ b/fixtures/invalid/unsafe-path/package/roster.json @@ -1 +1 @@ -{"format":"scienting-roster/1","keys":[{"id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"}],"store":"smithlab"} +{"format":"scienting-roster/1","keys":[{"did":"did:key:z6Mkj7iUX8QG7zkAtNaV78CUXcenhD87qWwQbc7NU5aVXyW9","id":"ana","person":{"name":"Ana Example"},"public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"owner","scheme":"ed25519"},{"did":"did:key:z6MkhemKN7rMQcgt6wT2eWPyx3vFRS1RUoRziLMnLq2vZ9yi","id":"ben","person":{"name":"Ben Example"},"public":"L4WMLs7xLjBLRsxS/EYpD194puMBpADybcfFEWxBkWk=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6MkrBf2w3MUroaNBiHTQJzH4e1w31jpcosd5vNxjikijndU","id":"ben-spot","person":{"name":"Ben Example"},"public":"rkzxigjCXg869PGSFAVr4EDXXRmwk+S/+wJ93lrG4dc=","purposes":["spot-check"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ed25519"},{"did":"did:key:z6Mkgrc9HCeEUL5tz1bVfuuDeSm6mP6hyWUX5ivhgReSbEQM","id":"cara","person":{"name":"Cara Example"},"public":"I7J1GqG5CHOc0LHYZPNNto1Me2lJUzBVn2A7GrUGbZ4=","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"reader","scheme":"ed25519"},{"did":"did:key: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","id":"dana","person":{"name":"Dana Example"},"public":"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","purposes":["sign"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"editor","scheme":"ml-dsa-65"},{"did":"did:key:z6MkiHaTrUvYfXFtTw39oiWrgan52dRBHYgm9WeoiEPwMotg","id":"wit","person":{"name":"Open Witness (fictional)"},"public":"OPPD6UEKZ7IObfmh/pzKS29cNjnz9WbKMQivMBXrlC0=","purposes":["witness"],"registered_at":"2026-09-01T00:00:00Z","revoked_at":null,"role":"guest","scheme":"ed25519"}],"store":"smithlab"} diff --git a/fixtures/invalid/zip-symlink/package.sct.zip b/fixtures/invalid/zip-symlink/package.sct.zip index 9fcb90055d62d7fd4d43c92fad6652a78c814c82..694972bfc93dbcfef967752e075f28c47e970c62 100644 GIT binary patch delta 6324 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 delta 459 zcmY*VJxc>Y5Z$};GoUCWL@*+rR$_6xH@AB$L=DD9qi7*mc#+)h2GYh@Xr*=*qOz5e zGT4fy&_etNX+*)&Ld4czpvgrP2Znhw%)FU-_YX$x#7M0!SsiiIwlOqcxtu6l2(^3^ z>4PAC=B(w26B5da$9xw{DY0}Ycs?x(rHFu#V8N+y1f@a`>ZQ-uRT#!6v}#aCZTUKxApgp3#<265`DCpP5oc=qgyl7j4P`pS95Kjjs=tE zV^@?e2A(mc_k$I48KS~l;G2W#2yUbY^m;Im`a2Mzkw3~N=W)C7Fz=Z%6U{X8zImFB N;PBRP*Gsn5{|$HEfujHb diff --git a/fixtures/invalid/zip-traversal/package.sct.zip b/fixtures/invalid/zip-traversal/package.sct.zip index a555eb777ab798ceb5e993a2ca9be455dfcf2f56..2b5383351c1cca886f12bee22b6fba27fc7824dd 100644 GIT binary patch delta 6331 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 delta 468 zcmdnJk8yE7qeOr=Gm8iV1Sm2%mn>5$VrF0{VxH^}BQen+(8tIi$;iyo$kg1z*f1p} z#W2Od%*52fEG;=T)hO8{$;dF-(k$5^+04u!DaAO+B*nne(#+7(+}y|{)g;Lz)m%wO zsW`JLRmsZS#AxH$7mPk8iDoHAmZ=t&W)_Af#)&4WhL&k27N+JVhRLRe#zrQlDQSi& zspjUXsmUg(X_iUG1}5go=7uRrCZ@?LiAF|n11*hACNnYb;S#S56n)0T!0?O-NIn0w8*(D~|$8k@-Z>!0gnWAK+H2I^C_~cZ(9h2kiuTCy; zc)$S`O-?MD9AGCpd6VPz&CepHGjqa&V{%)Jiwwdd1_pU(kb$TrjO&>vH<*Y3t>&G~ z9;?N4i4Dw^Wapk71mx-%gSnGpEtz~xfJ~*y?}4I%wm_!Xf)Fvy}9 n-fKJgfUW%Gt~f2G6i2X0I+1*nZveRyT), | `gpg` | A detached, armored OpenPGP signature of the payload. | | `sigstore` | A Sigstore bundle for the payload, as JSON text. | | `cose` | Reserved: a COSE_Sign1 message over the payload, in Base64, as the IETF SCITT work shapes signed statements, so other transparency services can verify a receipt. No vector yet. | -| `ml-dsa-65` | Reserved: an ML-DSA-65 signature (FIPS 204) of the payload, in Base64, for the time Ed25519 is no longer considered safe. No vector yet. | +| `ml-dsa-65` | An ML-DSA-65 signature (FIPS 204, the pure variant with an empty context) of the payload, in Base64, for the decades after Ed25519 is no longer considered safe; the roster's `public` is the 1952-byte key in Base64. The reference implementation reproduces NIST's ACVP vectors; `signatures.jsonl` pins a key generation and a deterministic signature. | A consumer treats a record signed with a scheme it does not implement as invalid, so a reserved scheme can be adopted by a new minor version without any format changing. `signature.key` is the signer's roster key and equals `by`. @@ -100,7 +100,8 @@ A spot-check is itself a receipt, so its status may depend on its own spot-check A revocation, `scienting-revocation/1`, names one `receipt`, or a `signer` and a `period` `{from, to}`, with a `reason`, and is signed like a receipt. It is valid when its signature verifies and its signer is the revoked receipt's signer, the signer it names, or a key whose `role` in the roster is `owner`. -The roster, `scienting-roster/1`, lists the keys that may sign: each with an `id`, a `person`, a `role`, a `scheme`, its `public` key (Base64 for Ed25519), its `purposes` (`sign`, `spot-check`, `export`), `registered_at` and `revoked_at`. +The roster, `scienting-roster/1`, lists the keys that may sign: each with an `id`, a `person`, a `role`, a `scheme`, its `public` key (Base64 for Ed25519 and ML-DSA-65), its `purposes` (`sign`, `spot-check`, `export`, or `witness` for a party that cosigns the team's log checkpoints, [23](23-log.md)), `registered_at` and `revoked_at`. +A key MAY carry its `did`, the `did:key` decentralized identifier the public key determines: `z` and the base58btc of the multicodec prefix (`0xed` for Ed25519, `0x1207` for ML-DSA-65, as varints) followed by the key bytes; a validator refuses a `did` that the key does not determine (`doc.roster.did`), so a signer can be named outside the store without a second name. The `role` is the holder's role in the team that keeps the roster, `owner`, `editor`, `reader` or `guest`, as in a project ([20](20-projects.md)). Because the roster carries it, a package that carries its roster carries everything needed to judge its revocations. A package MAY carry the roster its receipts need as `roster.json`, so its receipts verify without the store. diff --git a/spec/11-corrections.md b/spec/11-corrections.md index a6cb3f6..522f3bf 100644 --- a/spec/11-corrections.md +++ b/spec/11-corrections.md @@ -28,7 +28,7 @@ Runs are made canonical after every operation, and the result MUST satisfy every | Property | Holds | | --- | --- | | `evidence` | At least one item: `crop`, `witness` or `source-file` by SHA-256, or `person`. | -| `author` | `{key}` for a person in the roster, or `{model, run}` for a model's session. | +| `author` | `{key}` for a person in the roster, or `{model, run}` for a model's session, where `model` is `{name, provider?, version?, weights?, prompt?, parameters?, processor?}`: the model's name, who served it, its version, and SHA-256 of the weights, the instructions and the sampling parameters it ran with, as far as the team can obtain them, and where it ran ([14](14-rights.md)). | | `reason`, `at` | Why, and when. | A proposal, such as one a tool makes, carries these and `status: "proposed"`, and no applied fields. diff --git a/spec/18-layers.md b/spec/18-layers.md index 10b46c0..1ee877b 100644 --- a/spec/18-layers.md +++ b/spec/18-layers.md @@ -54,7 +54,7 @@ Replies are annotations that target annotations, so discussions are threads anch | `crosslink` | `SpecificResource` | `source`, `selector` | That the span corresponds to a span in another document. | | `translation` | `TextualBody` | `language` | The span in another language. | | `description` | `TextualBody` | `role` | A description of a figure, panel or table for readers who cannot see it: `alt`, a short text equivalent, or `long`, a full description. | -| `generated` | `TextualBody` | `generator` | Text a model wrote about the span; never mistaken for source. | +| `generated` | `TextualBody` | `generator` | Text a model wrote about the span; never mistaken for source. `generator` is `{model, run}` as a correction's model author is ([11.2](11-corrections.md#112-every-correction-records)). | A textual body has a `value`, and optionally a `format` (`text/plain` or `text/markdown`) and a `language`. Nothing a model writes is ever stored as source text. diff --git a/spec/20-projects.md b/spec/20-projects.md index f25f1d9..c2ce452 100644 --- a/spec/20-projects.md +++ b/spec/20-projects.md @@ -10,7 +10,7 @@ A project, `scienting-project/1`, is the unit a team works in. | `paths` | Reading paths: ordered steps through documents, nodes, claims and layers, for onboarding a student or preparing a reading group. | | `layers`, `datasets`, `views`, `drafts` | What the project holds. | | `claims` | The claim namespace or bundle it uses, as the `lode` setting. | -| `settings` | The digit rule for targeted F3 ([8.10](08-fidelity.md#810-targeted-f3)), the drift threshold ([6.6](06-anchors.md#66-drift)), the spot-check rate and minimum ([8.8](08-fidelity.md#88-spot-checks)), what happens when a right is unknown (`refuse`, the default, or `warn`), and the stage requirements in use, as the `id` of their stage file ([14](14-rights.md)). | +| `settings` | The digit rule for targeted F3 ([8.10](08-fidelity.md#810-targeted-f3)), the drift threshold ([6.6](06-anchors.md#66-drift)), the spot-check rate and minimum ([8.8](08-fidelity.md#88-spot-checks)), what happens when a right is unknown (`refuse`, the default, or `warn`), the stage requirements in use, as the `id` of their stage file ([14](14-rights.md)), and the project's transparency `log`: its `origin`, the roster keys that `witness` it, and the `threshold` of witnesses a checkpoint needs ([23](23-log.md)). | Projects are small on purpose: everything about them is designed for hundreds of documents, not millions. Owners sign policies ([14.2](14-rights.md#142-effective-uses)). diff --git a/spec/23-log.md b/spec/23-log.md index 886270d..2b5d288 100644 --- a/spec/23-log.md +++ b/spec/23-log.md @@ -38,8 +38,9 @@ The key hash is the first four bytes of SHA-256 of the signer's name, a newline, A note parsed into JSON has `format`, `origin`, `size`, `root` as hex, `signatures` as `{name, key_hash, value}` and the `note` text itself; the schema is `checkpoint.schema.json`. `checkpoint.jsonl` gives a checkpoint over the example paper's receipts and its verification. -A checkpoint may carry further signature lines from witnesses, independent parties that cosign only a checkpoint consistent with every earlier one they saw. +A checkpoint may carry further signature lines from witnesses: roster keys with the `witness` purpose, held by independent parties, that cosign only a checkpoint consistent with every earlier one they saw. A verifier that holds two checkpoints of one log checks a consistency proof between them ([11.5](11-corrections.md#115-the-history-root)); a log that cannot produce one has rewritten its past. +A project accepts a checkpoint when its origin is the project's log, a key with the role `owner` and the `sign` purpose signed it, and at least the project's `threshold` of its listed witnesses cosigned it ([20](20-projects.md)); `fixtures/records/log/checkpoint` is signed by the team and one witness. ## 23.3 What a log settles @@ -53,5 +54,15 @@ Without a log the rules of [8.6](08-fidelity.md#86-receipt-status) stand, and th ## 23.4 Serving a log -A log is served as tiles, the layout transparency logs share, so that clients fetch only the subtrees they need and a static file server can host a log. -The tile layout and the exact URL scheme are left to the first deployment; this chapter fixes only the entries, the tree and the checkpoint, which any layout must preserve. +A log is served as static files in the tile layout transparency logs share, so that a client fetches only the subtrees it needs and any file server can host a log. + +| Path | Holds | +| --- | --- | +| `checkpoint` | The latest checkpoint note ([23.2](#232-checkpoints)). | +| `tile//` | Hash tile N of level L: the 32-byte hashes of the 256 complete subtrees of 256^L entries each that the tile covers, in order. Level 0 holds the leaf hashes. | +| `tile//.p/` | The rightmost, partial tile of level L, holding W hashes. | +| `tile/entries/` and `tile/entries/.p/` | The entries themselves, 256 to a tile, as canonical JSON Lines. | + +N is written as 3-digit groups, every group but the last prefixed `x`: tile 1234067 is `tile/0/x001/x234/067`. +A tile at level L holds only the hashes of complete subtrees, so the hashes a partial tree still needs are computed from lower levels, as RFC 9162 computes a root from its subtrees. +`fixtures/records/log/` is the example paper's log in this layout, and `checkpoint.jsonl` lists its tile paths. diff --git a/sql/store.sql b/sql/store.sql index 609898f..c65b793 100644 --- a/sql/store.sql +++ b/sql/store.sql @@ -8,8 +8,9 @@ CREATE TABLE roster_keys ( id VARCHAR(128) NOT NULL, person TEXT NOT NULL, role VARCHAR(16) NOT NULL CHECK (role IN ('owner', 'editor', 'reader', 'guest')), - scheme VARCHAR(16) NOT NULL CHECK (scheme IN ('ed25519', 'ssh', 'gpg', 'sigstore')), + scheme VARCHAR(16) NOT NULL CHECK (scheme IN ('ed25519', 'ssh', 'gpg', 'sigstore', 'cose', 'ml-dsa-65')), public_key TEXT NOT NULL, + did VARCHAR(128), purposes TEXT NOT NULL, registered_at VARCHAR(20) NOT NULL, revoked_at VARCHAR(20), diff --git a/tools/README.md b/tools/README.md index e3c6ec5..7a3a7dc 100644 --- a/tools/README.md +++ b/tools/README.md @@ -59,6 +59,7 @@ The oracle exists so that no expected value in this repository is typed by hand. It favors clarity, and leaves the cryptography and schema validation to established packages. Ed25519 (a digital signature scheme) and HKDF come from `cryptography`, and JSON Schema (a format that describes the shape of JSON data) validation from `jsonschema`. +The VRF of RFC 9381 (`oracle/vrf.py`) and ML-DSA-65 of FIPS 204 (`oracle/mldsa.py`) are written out in plain Python, slow and clear, and checked against the standards' own test vectors. The oracle still refuses any schema that uses a keyword outside the subset the schemas are restricted to. Canonical JSON goes through Python's built-in JSON encoder, and falls back to an exact RFC 8785 serializer for the values that encoder writes differently: floating-point numbers, integers beyond 2^53 and some non-ASCII member names. diff --git a/tools/build.py b/tools/build.py index ba9e61b..93e33ef 100644 --- a/tools/build.py +++ b/tools/build.py @@ -25,7 +25,7 @@ from tools.oracle import align as AL # noqa: E402 from tools.oracle import anchors as AN # noqa: E402 from tools.oracle import corrections as CO # noqa: E402 from tools.oracle import crypto, fingerprint as FP, grade as GR, hashing, jcs, receipts as RC, rights as RI # noqa: E402 -from tools.oracle import keys as K, log as LG, targets as TG, vrf # noqa: E402 +from tools.oracle import keys as K, log as LG, mldsa, targets as TG, vrf # noqa: E402 from tools.oracle.model import LEAVES, MATH_KINDS, RUN_KINDS, VERBATIM_KINDS, Doc # noqa: E402 from tools.oracle.notation import fold_math # noqa: E402 from tools.oracle.package import ZIP_EXTENSION, history_items, jsonl, line, witness_id, write, write_zip # noqa: E402 @@ -51,15 +51,34 @@ KEYS = { "ben": {"name": "Ben Example", "role": "editor", "purposes": ["sign"]}, "ben-spot": {"name": "Ben Example", "role": "editor", "purposes": ["spot-check"]}, "cara": {"name": "Cara Example", "role": "reader", "purposes": ["sign"]}, + "dana": {"name": "Dana Example", "role": "editor", "purposes": ["sign"], "scheme": "ml-dsa-65"}, + "wit": {"name": "Open Witness (fictional)", "role": "guest", "purposes": ["witness"]}, } TEAM_SECRET = hashlib.sha256(b"paperspec fixture team secret: smithlab").digest() +# NIST ACVP ML-DSA-keyGen-FIPS204, parameter set ML-DSA-65, test case 26: the seed and the public key it gives. +NIST_SEED = "a991fd42b071d49c48ae3e75c647459e0daad1e1ba356a04801912d3294bcff8" +NIST_PK = "36db0b5dce98bd190cb139e80b71b49c7d7040b71c5a1f3412c46bde939192b1b57ccb88ac2714c1240cb0eb62c689e031aea3d9f3eb3ed7bfa45931d288dcae3413199b31a7032560dce8a61e195d13a1440615c2f3aa7dd28c5b1b742bfa400052186721f13d3df9dcfaee348b10d66913c7148913e085e1a4a03c659398dadc6a8e0e0c1a7f9f44d30436db90fd65a6ab8f36137338255653baae8da21526a333426dbd9f76cce0f43212643e854d772018b35ce726bcaaa5ab0651baf8c122e13929bb35b6e4963df2595fdc7237cdaa7234bf776b07f353ccdba12ad3e025138e3492d7f8e929db55dc23e23075f66d57a10492e6a10ae7b758acc2291ca18ba1ca07a5b574ab6d8aac18b9524990ad2f110225b7d82f696300a660a166ad35b3c57ecbab77117c79656fa8ae2a19a7defb2afd2af54683d043be0f933b8eae0d591448ed55d00068cd9fe10b067fcfaac53aedb1e9b667e36c4e30231f85c7aa0a474af2fa4776226f4479555e155528d78b98183cbdf7fae4e7301140f163eb71e991d15fad4a0d2f25a5a62fa2e9bcc823cc2927662e40c538213ded9e2df508e911e4924e507a50861fbb050edbbf56d937206f8fbc6f4cead4cd10d06b73aadcd4aa39703a7a2bffae68b7baa47341b699da9f3b167d4d90efee0a07ee3529a3b5e8648b9cb07ee973e1d8dccf1d16e95092c4a0184ccb4902d6086d9f444aca5fa45f43ca91b351e82585989ffcbd6d2c3471d6b8593aa46f29d0dd9b44e8aa4d8f9a0bc886bb7982c56aab11e23bfdbd8bc674732fadacacae25fa416b2d0cc7743827293336507da4b14c1f0aa2e929af975466dadc89a016f33a0cca2d5c08114cf04b02358805a772536432c44dbe9886130d2d3a0ffa0e175875a2207686f5e562b879eb2957573ab706b942468c20cc69bc566d29d9f151f3cfae71cc97ce4a30722d4679fc1c089b5009935931ee60aac5496b0fd5f24e514c0e20fa1dcc7729184a50fc85fad1d2f32f715fbf55666e49f5a19761f2dd1aa5d1a33c7916eb6a794981c0334176abc493ef30d9eaeaad42e705989dcfcdeb578529a700bd14076a348a2062d6483cc63cd7f55136587aac0e531a06eb2de74e61cfcbbce18f2ada5a741f683bf101f71432ee659dd1508e0c8fb2400e0ccbe435da3466d543d3ef5ba369e125c0b84d855efe6d4a22ff929a7a7a984e448d23871e09b88a0bc3f3b7da55dd2edfb5a6daa102819ff50cd4dccd0a95d2f27354668065d4a56c31fb18b92b2a8db2c6453baa9333aea6eabb1bd6411d584dd5900262057a707f81cc5137dbdd9ac1079bb98da78a8e4bd1b2e0546c2b3d956fcc280d37d855e31f1e4315b387a742280f057f3219eae512884ae7ec4d2e3a72265b1d0163fbcbf616b2e289b0eaf9c63437d50b7b50ce408f5b4562f2abf510c19f5e8a0ace264db6e0f2a69a7d0b4a5e62a2b964f08c8ffe9c295f5773bdd7fab054a13822d428fae28ae5e4adc9d9f6e4dffc457a3e49f0bcf62b32961c4667b60960452afd917fdd00d954fa30c8533e5629f90af85948dc1bad889f91832ddf9b738254c9e7939726c37ab4557c2ce363c1391816c467537b471e5985e8084c277b62be514922d352e20689eabb3eb91c343f36e77b152d5e85afd088f4d02e7024b248a7420f58c7ebbeb480cae39b56164f5acd37a4f56b3db6e1cc6b7c8c96cd3c44a69d9ac99175257bab7fd83c5b574b5c9702c0fd13a5b176c60f82d2dfff50c2af25d96e0f8d27ec818d499e479b9642aed4a4a0e6af5f14cc5e1299eabae055ef3c763d1e350e2d76e92cee47a4233368466a298afb4ca108a325d2a4f8b79f21ee7349c1c186ecd7897f9886cf27ec01b05388870484867f84bae2c016d04a3762241907c4de207798dd125a2cebb6c2982f779e04117bdd65cd7ff0361a59d3ec05f6d903b6d15554beefb6d40d96a0d4b37ae76c69c1b9592088b7db878f95abedcb5fd5423ed93df1b27d01a4dc9f4438e7c55f35b0aeb7395b08e1ecbf15cb2b61d043c0454aeaef2d487093fa0d7de3fc6caf084b6a0f15a5cb05d9340d4e6763983dc45b7828539c77a60d5e081a03fe29949d916392b6d989b4c8c047e3635a76ba88ac18a7a18ccff5c7e06b02a43d2dff169fa449739e382bd020e0963c14a9acae6b6561c722d2bda183f33ee6a904df0207f5b098e56335cc063f9640c4997f593218d502f6b382354c73979e93c4b1b2471965ffa5a0dc8ee8eca9f5697e7ef08dc0eefd9ad75cd4122194b450201dfd73cda46a7b2478df66129fbb9c75b774213f9615bd990f8d07501fed440fd25d6cb912b8ecfa678d887a4ee28677e6e0491d49efc7a3b34b9815c5c22983da280d0afde2324f5281bc8b796ddacfd82723bbd9aa34b0c96075b36848591e47b80086897846fa76d092bc8bc6200837bfb5545039f8602b7ea49f63c0c3b8317eeeb7612f8e818dde09e43c7da76fd2ff6847906a45da3d993e8eaed9fb3b1e579d8cc6900c89522aaeb0b4a80da1e66ab8dfd62dfe4e4d77a3a77e5bd669207c70aa8537dd6d80a647b0420d79531a7456052c3c989f0f08de3d343c40067680b39ece95a17aac8a622d1d5d95b38ca0f11d94e5b0a7634eef4055517ace79f0df1d7c172e0246abb2ab6b135ee1a38a3b84f86fd7c3caf178cd4446d0b554256ad45c657e1192070aba7df480f489ebdf9753a79ccbc6aa893913c5f1271f1c6035" + + +def public_key(kid): + scheme = KEYS[kid].get("scheme", "ed25519") + return mldsa.public_key(secret(kid)) if scheme == "ml-dsa-65" else crypto.ed25519_public(secret(kid)) + + +def seal(rec, kid): + """Sign a record with a fixture key under its scheme.""" + if KEYS[kid].get("scheme", "ed25519") == "ml-dsa-65": + return RC.seal_mldsa(rec, mldsa.keygen(secret(kid))[1], kid) + return RC.seal(rec, secret(kid), kid) def roster(): keys = [] for kid, k in KEYS.items(): - keys.append({"id": kid, "person": {"name": k["name"]}, "role": k["role"], "scheme": "ed25519", - "public": base64.b64encode(crypto.ed25519_public(secret(kid))).decode(), + scheme = k.get("scheme", "ed25519") + pub = public_key(kid) + keys.append({"id": kid, "person": {"name": k["name"]}, "role": k["role"], "scheme": scheme, + "public": base64.b64encode(pub).decode(), "did": crypto.did_key(scheme, pub), "purposes": k["purposes"], "registered_at": "2026-09-01T00:00:00Z", "revoked_at": None}) return {"format": "scienting-roster/1", "store": STORE, "keys": keys} @@ -532,7 +551,7 @@ def package_files(src, key, names, side, final, records, receipts=None, roster_r levels = RC.effective_levels(nodes, vals, receipts or [], ROSTER_BY_ID if roster_rec else {}) d = dict(src["document"]) d = {"format": "scienting-doc/1", **d} - d.update({"hashing": {"scheme": "plain"}, "root": vals[doc.root]["node_hash"], "rev": final.rev, + d.update({"hashing": {"scheme": "plain", "algorithm": "sha-256"}, "root": vals[doc.root]["node_hash"], "rev": final.rev, "history": crypto.history_root(history_items(records or [])), "counts": {"nodes": len(nodes), "leaves": sum(1 for n in nodes if n["kind"] in LEAVES)}, "fidelity": RC.distribution(levels)}) @@ -646,7 +665,7 @@ def build_checks_only(out, hale): for r in map(json.loads, f["references.jsonl"].decode().splitlines())] f["references.jsonl"] = jsonl(refs) d = dict(hale["document"]) - d.update({"policy": "checks-only", "hashing": {"scheme": "hmac-team", "key_id": crypto.key_id(k)}, + d.update({"policy": "checks-only", "hashing": {"scheme": "hmac-team", "algorithm": "sha-256", "key_id": crypto.key_id(k)}, "root": keyed[doc.root]["node_hash"], "history": crypto.EMPTY_ROOT}) d["meta_hash"] = hashing.meta_hash(d, hashing.Hasher(k)) f["document.json"] = (jcs.dumps(d) + "\n").encode() @@ -975,7 +994,18 @@ def vectors(out, hale, tiny): "signature": crypto.ed25519_sign(sk, b"").hex()}, {"id": "receipt-r1", "receipt": r1, "record_hash": RC.record_hash(r1), "payload": RC.signing_payload(r1).decode(), "public": ROSTER_BY_ID["ana"]["public"], - "record_id": r1["id"]}]) + "record_id": r1["id"]}, + {"id": "did-key-ed25519", "scheme": "ed25519", "public": crypto.ed25519_public(sk).hex(), + "did": crypto.did_key("ed25519", crypto.ed25519_public(sk))}, + {"id": "did-key-ml-dsa-65", "scheme": "ml-dsa-65", "public": mldsa.public_key(sk).hex(), + "did": crypto.did_key("ml-dsa-65", mldsa.public_key(sk))}, + # FIPS 204: NIST's ACVP key-generation case 26 for ML-DSA-65 (seed to public key), and our own + # deterministic signature over the empty message for the RFC 8032 test key used as a seed. + {"id": "ml-dsa-65-nist-keygen-26", + "seed": NIST_SEED, + "public": NIST_PK}, + {"id": "ml-dsa-65-sign-empty", "seed": sk.hex(), "public": mldsa.public_key(sk).hex(), "message": "", + "signature": mldsa.sign(mldsa.keygen(sk)[1], b"").hex()}]) # Spot-checks. q1 = hale["by_name"]["q1"] wv(out, "spotcheck.jsonl", [{"id": "q1", "receipt": r1, "seed_payload": RC.seed_payload(r1).decode(), @@ -1069,9 +1099,10 @@ def vectors(out, hale, tiny): wv(out, "vrf.jsonl", vv) # A checkpoint of the team's log (spec/23): every receipt and revocation of the example paper, then the roster. entries = [LG.entry(r) for r in hale["receipts"]] + [LG.entry(ROSTER)] - note = LG.sign_checkpoint("scient.ing/log/smithlab", entries, [("ana", secret("ana"))]) + note = LG.sign_checkpoint("scient.ing/log/smithlab", entries, [("ana", secret("ana")), ("wit", secret("wit"))]) wv(out, "checkpoint.jsonl", [{"id": "smithlab", "origin": "scient.ing/log/smithlab", "entries": entries, - "root": LG.root(entries), "signers": ["ana"], "note": note}]) + "root": LG.root(entries), "signers": ["ana", "wit"], "note": note, + "tiles": sorted(LG.tiles(entries))}]) # Alignment. def item(i, runs, container, context="paragraph"): doc, s = sentence_doc(runs) @@ -1145,6 +1176,9 @@ def corrections_vectors(): "node": {"kind": "sentence", "content": [{"kind": "text", "text": "Junk."}], "foo": 1}, "evidence": crop}), ("delete-header-cell", {"op": "delete", "target": nm["@hx"], "evidence": person}), + # A model proposed this one, so its author names the model, by weights and prompt, and the run. + ("replace-by-model", {"op": "replace", "target": nm["@c"], "find": "second", "replace": "later", "evidence": person, + "author": {"model": MODEL, "run": "illustrative-run-7"}}), ] out = [] vals0 = hashing.compute(st0.doc()) @@ -1239,6 +1273,10 @@ def ann_hash(a): TAG = "tag:scient.ing,2026:" +# A model's provenance: enough to name the weights and the instructions it ran with (all illustrative). +MODEL = {"name": "example-model", "provider": "Example Models (illustrative)", "version": "2026-09", + "weights": sha256_hex("illustrative weights"), "prompt": sha256_hex("illustrative review prompt"), + "parameters": sha256_hex("illustrative sampling parameters"), "processor": "local"} def records(out, hale): @@ -1286,7 +1324,7 @@ def records(out, hale): "context": {"table_label_mac": hk(norm(ka["context"]["table_label"])), "row_path_mac": [hk(norm(x)) for x in ka["context"]["row_path"]], "column_path_mac": [hk(norm(x)) for x in ka["context"]["column_path"]]}, - "rev": rev, "keyed": {"scheme": "hkdf-pages", "context": "layer:smithlab/kp4m2x7q", + "rev": rev, "keyed": {"scheme": "hkdf-pages", "algorithm": "sha-256", "context": "layer:smithlab/kp4m2x7q", "pages": [crypto.page_hash(f) for f in fps]}} wr(out, "anchor-keyed.json", ka) # Rights, policy, backends, profiles. @@ -1364,7 +1402,7 @@ def records(out, hale): "reason": "value", "value": "Cited for the band position; the reference is not in the library."}, target(anchor("@s3", "1595")), "assessing"), ann({"type": "TextualBody", "kind": "generated", "value": "Two panels: an energy scan and its fit residual.", - "generator": {"model": "example-model", "run": "illustrative-run-1"}}, + "generator": {"model": MODEL, "run": "illustrative-run-1"}}, target(AN.make_anchor(doc, vals, I["@fig1"], rev, store=STORE)), "describing", "proposed", model), ann({"type": "TextualBody", "kind": "exercise", "value": ex_body["prompt"], "exercise": ex_body}, target(AN.make_anchor(doc, vals, I["@tab1"], rev, store=STORE)), "assessing", "confirmed"), @@ -1433,7 +1471,8 @@ def records(out, hale): "drafts": [STORE + "/" + DRAFT], "claims": {"lode": "amber"}, "settings": {"digit_rule": "anchored-sections", "drift_threshold": "0.25", "spot_check": {"rate": "0.05", "minimum": 10}, "rights_unknown": "refuse", - "stages": "scienting-stages-default"}}) + "stages": "scienting-stages-default", + "log": {"origin": "scient.ing/log/smithlab", "witnesses": ["wit"], "threshold": 1}}}) # A digitization of panel a, and the dataset it yields. p2 = hale["pages"][1][0] pa = I["@pa"] @@ -1554,12 +1593,19 @@ def records(out, hale): "to_root": hale["document"]["history"], "path": crypto.consistency_proof(hist, 8)}) # A checkpoint of the team's log (spec/23), as the parsed form of its signed note. entries = [LG.entry(r) for r in hale["receipts"]] + [LG.entry(ROSTER)] - note = LG.sign_checkpoint("scient.ing/log/smithlab", entries, [("ana", secret("ana"))]) + signers = [("ana", secret("ana")), ("wit", secret("wit"))] + note = LG.write_log(entries, "scient.ing/log/smithlab", signers, os.path.join(out, "fixtures", "records", "log")) parsed = LG.parse_checkpoint(note) wr(out, "checkpoint.json", {"format": LG.FORMAT, "origin": parsed["origin"], "size": parsed["size"], "root": parsed["root"], "note": note, "signatures": [{"name": n, "key_hash": kh.hex(), "value": base64.b64encode(sig).decode()} for n, kh, sig in parsed["signatures"]]}) + # A receipt signed with ML-DSA-65 (FIPS 204) by dana: two sentences read against the page, at F2. + two = sorted([I["@s1"], I["@s2"]]) + wr(out, "receipt-ml-dsa.json", seal({"format": "scienting-receipt/1", "doc": HALE, "rev": rev, "level": "F2", + "scope": "targeted:ml-dsa", "nodes": [[n, vals[n]["node_hash"]] for n in two], + "evidence": [{"kind": "person", "by": "dana"}], "by": "dana", + "at": "2026-10-13T09:00:00Z"}, "dana")) # Draft snapshot and sentence IDs. s5 = I["@s5"] snap_anchor = AN.make_anchor(doc, vals, s5, rev, store=STORE) diff --git a/tools/check.py b/tools/check.py index e61ee83..d43a72e 100644 --- a/tools/check.py +++ b/tools/check.py @@ -26,7 +26,7 @@ from tools.oracle import anchors as AN # noqa: E402 from tools.oracle import corrections as CO # noqa: E402 from tools.oracle import crypto, db, fingerprint as FP, grade as GR, hashing, jcs, receipts as RC, rights as RI # noqa: E402 from tools.oracle import package as PK # noqa: E402 -from tools.oracle import keys as K, log as LG, targets as TG, vrf # noqa: E402 +from tools.oracle import keys as K, log as LG, mldsa, targets as TG, vrf # noqa: E402 import unicodedata # noqa: E402 from tools.oracle.model import Doc # noqa: E402 from tools.oracle.notation import fold_math # noqa: E402 @@ -129,6 +129,8 @@ def check_records(): R = p("fixtures", "records") roster = {k["id"]: k for k in js(os.path.join(R, "roster.json"))["keys"]} for dirpath, _, files in os.walk(R): + if os.path.relpath(dirpath, R).split(os.sep)[0] == "log": + continue # the log's tiles and checkpoint are checked by check_log for f in sorted(files): path = os.path.join(dirpath, f) rel = os.path.relpath(path, R) @@ -573,7 +575,16 @@ def check_vectors(): for c in V("merkle.jsonl"): ok("vectors", crypto.merkle_root(c["items"]) == c["root"], "merkle " + c["id"]) for c in V("signatures.jsonl"): - if "secret" in c: + if "did" in c: + ok("vectors", crypto.did_key(c["scheme"], bytes.fromhex(c["public"])) == c["did"], c["id"]) + elif c["id"].startswith("ml-dsa-65"): + pk, sk = mldsa.keygen(bytes.fromhex(c["seed"])) + ok("vectors", pk.hex() == c["public"], c["id"] + ": key generation") + if "signature" in c: + sig = bytes.fromhex(c["signature"]) + ok("vectors", mldsa.sign(sk, bytes.fromhex(c["message"])) == sig and mldsa.verify(pk, bytes.fromhex(c["message"]), sig) + and not mldsa.verify(pk, b"x", sig), c["id"] + ": signature") + elif "secret" in c: sk = bytes.fromhex(c["secret"]) ok("vectors", crypto.ed25519_public(sk).hex() == c["public"] and crypto.ed25519_sign(sk, c["message"].encode()).hex() == c["signature"], c["id"]) @@ -692,6 +703,7 @@ def check_vectors(): "checkpoint %s: verify" % c["id"]) bad = c["note"].replace(c["origin"], c["origin"] + "x", 1) ok("vectors", LG.verify_checkpoint(bad, ROSTER_BY_ID_CHECK)[1] == [], "checkpoint %s: a changed note verifies" % c["id"]) + ok("vectors", sorted(LG.tiles(c["entries"])) == c["tiles"], "checkpoint %s: tile paths" % c["id"]) def check_determinism(): @@ -792,8 +804,8 @@ def check_sql(): for m in prj["members"]: conn.execute("INSERT INTO members VALUES (?,?,?,?)", (prj["key"], m["person"], m["role"], jcs.dumps(m["keys"]))) for k in js(os.path.join(R, "roster.json"))["keys"]: - conn.execute("INSERT INTO roster_keys VALUES (?,?,?,?,?,?,?,?,?)", - ("smithlab", k["id"], jcs.dumps(k["person"]), k["role"], k["scheme"], k["public"], + conn.execute("INSERT INTO roster_keys VALUES (?,?,?,?,?,?,?,?,?,?)", + ("smithlab", k["id"], jcs.dumps(k["person"]), k["role"], k["scheme"], k["public"], k.get("did"), jcs.dumps(k["purposes"]), k["registered_at"], k["revoked_at"])) dg = js(os.path.join(R, "digitization.json")) conn.execute("INSERT INTO digitizations VALUES (?,?,?,?,?,?,?,?)", @@ -1003,6 +1015,39 @@ def check_counts(): % (rel, i, word, what, have[what])) +def check_log(): + """The log fixture (spec/23): its tiles hold the example's receipts and roster, its checkpoint is signed by the + team and cosigned by the witness, the project accepts it, and a checkpoint short of witnesses is refused.""" + R = p("fixtures", "records") + roster = {k["id"]: k for k in js(os.path.join(R, "roster.json"))["keys"]} + log_dir = os.path.join(R, "log") + entries, note = LG.read_log(log_dir) + receipts = jl(p("fixtures", "packages", HALE, "receipts.jsonl")) + want = [LG.entry(r) for r in receipts] + [LG.entry(js(os.path.join(R, "roster.json")))] + ok("log", entries == want, "the entries tiles do not hold the example's receipts and roster in order") + parsed, verified = LG.verify_checkpoint(note, roster) + ok("log", parsed and parsed["root"] == LG.root(entries) and parsed["size"] == len(entries), "checkpoint root or size") + ok("log", verified == ["ana", "wit"], "the checkpoint is not signed by the team and the witness: %s" % verified) + for path, data in LG.tiles(entries).items(): + full = os.path.join(log_dir, *path.split("/")) + ok("log", os.path.exists(full) and open(full, "rb").read() == data, "tile %s differs" % path) + ok("log", LG.tile_path(0, 1234067) == "tile/0/x001/x234/067" and LG.tile_path("entries", 5, 9) == "tile/entries/005.p/9", + "tile paths are not encoded as transparency logs share them") + settings = js(os.path.join(R, "project.json"))["settings"]["log"] + ok("log", LG.accept_checkpoint(note, roster, settings) == (True, []), "the project does not accept its checkpoint") + ok("log", not LG.accept_checkpoint(note, roster, dict(settings, threshold=2))[0], "two witnesses were not required") + ok("log", not LG.accept_checkpoint(note, roster, dict(settings, origin="other"))[0], "another origin was accepted") + alone = LG.sign_checkpoint(settings["origin"], entries, [("wit", __import__("tools.build", fromlist=["secret"]).secret("wit"))]) + ok("log", not LG.accept_checkpoint(alone, roster, settings)[0], "a checkpoint without the team's key was accepted") + # The ML-DSA-65 receipt verifies under dana's key, and fails under a tampered payload. + rec = js(os.path.join(R, "receipt-ml-dsa.json")) + ok("log", rec["signature"]["scheme"] == "ml-dsa-65" and RC.verify_signature(rec, roster), "the ML-DSA receipt does not verify") + ok("log", not RC.verify_signature(dict(rec, at="2026-10-13T09:00:01Z"), roster), "a changed ML-DSA receipt verifies") + ok("log", RC.receipt_status(rec, receipts + [rec], roster) == "valid", "the ML-DSA receipt is not valid") + for k in roster.values(): + ok("log", crypto.did_key(k["scheme"], base64.b64decode(k["public"])) == k["did"], "did of %s" % k["id"]) + + def check_doc_values(): """Every node ID, record ID or 64-hex hash the prose quotes exists in the fixtures or vectors, so the guides never describe a fixture that no longer reads that way.""" @@ -1145,6 +1190,7 @@ def main(): check_prose() check_links() check_doc_values() + check_log() check_site() for k in sorted(COUNTS): print("%-17s %5d checks" % (k, COUNTS[k])) diff --git a/tools/oracle/crypto.py b/tools/oracle/crypto.py index 6760e26..aab1c3e 100644 --- a/tools/oracle/crypto.py +++ b/tools/oracle/crypto.py @@ -215,3 +215,35 @@ def ed25519_verify(public, msg, signature): except (InvalidSignature, ValueError): return False return True + + +# --- did:key (W3C did:key method, multicodec and base58btc) --------------------------- + +BASE58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" +MULTICODEC = {"ed25519": 0xED, "ml-dsa-65": 0x1207} + + +def _varint(n): + out = bytearray() + while True: + b = n & 0x7F + n >>= 7 + out.append(b | (0x80 if n else 0)) + if not n: + return bytes(out) + + +def base58btc(data): + n = int.from_bytes(data, "big") + out = "" + while n: + n, r = divmod(n, 58) + out = BASE58[r] + out + return "1" * (len(data) - len(data.lstrip(b"\x00"))) + out + + +def did_key(scheme, public): + """The did:key of a public key: `z` and the base58btc of the multicodec prefix and the key bytes.""" + if scheme not in MULTICODEC: + raise ValueError("no multicodec code for " + scheme) + return "did:key:z" + base58btc(_varint(MULTICODEC[scheme]) + public) diff --git a/tools/oracle/jcs.py b/tools/oracle/jcs.py index 777c5bb..c4d394f 100644 --- a/tools/oracle/jcs.py +++ b/tools/oracle/jcs.py @@ -144,3 +144,12 @@ def _exact(value): def dumpb(value): """Canonical JSON as UTF-8 bytes.""" return dumps(value).encode("utf-8") + + +def loads_line(data): + """Parse one canonical JSON line of bytes, refusing a line that is not canonical.""" + import json as _json + value = _json.loads(data.decode("utf-8")) + if dumpb(value) != data: + raise ValueError("not canonical JSON") + return value diff --git a/tools/oracle/log.py b/tools/oracle/log.py index 5eb52f9..32b0fd3 100644 --- a/tools/oracle/log.py +++ b/tools/oracle/log.py @@ -8,6 +8,7 @@ an origin line, the tree size, the root hash in Base64, an empty line, and one s import base64 import hashlib +import os from . import crypto, jcs @@ -104,3 +105,100 @@ def verify_checkpoint(text, roster): if key_hash(name, public) == kh and crypto.ed25519_verify(public, body, sig): verified.append(name) return note, verified + + +# --- acceptance (spec/23 §23.3) --------------------------------------------------------------------------- + + +def accept_checkpoint(text, roster, settings): + """Whether a checkpoint note is one the project accepts: its origin is the project's log, a team key with the + `sign` purpose and the role `owner` signed it, and at least `threshold` of the project's witnesses cosigned it. + + Returns (accepted, reasons); `settings` is the project's `log` setting. Never raises. + """ + note, verified = verify_checkpoint(text, roster) + reasons = [] + if note is None: + return False, ["the note is malformed"] + if note["origin"] != settings.get("origin"): + reasons.append("the origin is not the project's log") + team = [n for n in verified if roster[n].get("role") == "owner" and "sign" in roster[n].get("purposes", [])] + if not team: + reasons.append("no owner key with the sign purpose signed it") + witnesses = [n for n in verified if n in settings.get("witnesses", []) and "witness" in roster[n].get("purposes", [])] + if len(witnesses) < settings.get("threshold", 0): + reasons.append("%d of %d witnesses cosigned" % (len(witnesses), settings.get("threshold", 0))) + return not reasons, reasons + + +# --- tiles (spec/23 §23.4) -------------------------------------------------------------------------------- + +TILE_HEIGHT = 8 +TILE_WIDTH = 1 << TILE_HEIGHT + + +def tile_path(level, index, width=None): + """The path of a tile: `tile//`, with N as 3-digit groups, all but the last prefixed `x`, and + `.p/` for a partial tile of W entries; `level` is a number or `entries`.""" + parts, n = ["%03d" % (index % 1000)], index // 1000 + while n: + parts.insert(0, "x%03d" % (n % 1000)) + n //= 1000 + path = "tile/%s/%s" % (level, "/".join(parts)) + return path + (".p/%d" % width if width is not None else "") + + +def tiles(entries): + """Every tile of a log over `entries`, as {path: bytes}: hash tiles per level (32-byte hashes of the complete + subtrees of 256^level entries, 256 to a tile) and entries tiles (canonical JSON Lines, 256 to a tile).""" + out = {} + leaves = [crypto._leaf(jcs.dumpb(list(e))) for e in entries] + level = 0 + while True: + span = TILE_WIDTH ** level + nodes = [crypto._mth(leaves[i * span:(i + 1) * span]) for i in range(len(leaves) // span)] + if not nodes: + break + for t in range(len(nodes) // TILE_WIDTH): + out[tile_path(level, t)] = b"".join(nodes[t * TILE_WIDTH:(t + 1) * TILE_WIDTH]) + rest = len(nodes) % TILE_WIDTH + if rest: + out[tile_path(level, len(nodes) // TILE_WIDTH, rest)] = b"".join(nodes[-rest:]) + level += 1 + for t in range(len(entries) // TILE_WIDTH): + out[tile_path("entries", t)] = b"".join(jcs.dumps(list(e)).encode("utf-8") + b"\n" + for e in entries[t * TILE_WIDTH:(t + 1) * TILE_WIDTH]) + rest = len(entries) % TILE_WIDTH + if rest: + out[tile_path("entries", len(entries) // TILE_WIDTH, rest)] = b"".join( + jcs.dumps(list(e)).encode("utf-8") + b"\n" for e in entries[-rest:]) + return out + + +def write_log(entries, origin, signers, out_dir): + """Write a log as static files: `checkpoint` and every tile. Returns the checkpoint note.""" + note = sign_checkpoint(origin, entries, signers) + for path, data in tiles(entries).items(): + full = os.path.join(out_dir, *path.split("/")) + os.makedirs(os.path.dirname(full), exist_ok=True) + with open(full, "wb") as f: + f.write(data) + with open(os.path.join(out_dir, "checkpoint"), "w", encoding="utf-8") as f: + f.write(note) + return note + + +def read_log(log_dir): + """The entries and the checkpoint note of a log written by `write_log`, read from its entries tiles.""" + with open(os.path.join(log_dir, "checkpoint"), encoding="utf-8") as f: + note = f.read() + parsed = parse_checkpoint(note) + if parsed is None: + raise ValueError("the checkpoint is malformed") + size = parsed["size"] + entries = [] + for t in range(size // TILE_WIDTH + (1 if size % TILE_WIDTH else 0)): + width = size % TILE_WIDTH if (t + 1) * TILE_WIDTH > size else None + with open(os.path.join(log_dir, *tile_path("entries", t, width).split("/")), "rb") as f: + entries += [json_line for json_line in (jcs.loads_line(ln) for ln in f.read().split(b"\n") if ln)] + return entries, note diff --git a/tools/oracle/mldsa.py b/tools/oracle/mldsa.py new file mode 100644 index 0000000..a7baaaa --- /dev/null +++ b/tools/oracle/mldsa.py @@ -0,0 +1,446 @@ +"""ML-DSA-65, the module-lattice digital signature algorithm of FIPS 204, in plain Python. + +Non-normative; see spec/08-fidelity.md §8.4. +This is the reference form of the standard, slow and clear, for the signature scheme `ml-dsa-65`: key generation +from a 32-byte seed, the deterministic signing variant (the hedging bytes are zero), and verification. Keys and +signatures are the standard's byte encodings, so a production verifier can use any FIPS 204 library. The pure +(non pre-hashed) variant with an empty context is used, as the standard's ML-DSA.Sign defines it. +""" + +import hashlib + +Q = 8380417 +N = 256 +D = 13 +ZETA = 1753 +K, L = 6, 5 +ETA = 4 +TAU = 49 +LAMBDA = 192 +GAMMA1 = 1 << 19 +GAMMA2 = (Q - 1) // 32 +BETA = TAU * ETA +OMEGA = 55 +PK_SIZE = 32 + 32 * K * (23 - D) +SK_SIZE = 32 + 32 + 64 + 32 * ((L + K) * 4 + D * K) +SIG_SIZE = LAMBDA // 4 + L * 32 * 20 + OMEGA + K +F_INV256 = 8347681 # 256^-1 mod q + + +def _bitrev8(m): + return int("{:08b}".format(m)[::-1], 2) + + +ZETAS = [pow(ZETA, _bitrev8(m), Q) for m in range(256)] + + +def _shake256(data, n): + return hashlib.shake_256(data).digest(n) + + +def _shake128(data, n): + return hashlib.shake_128(data).digest(n) + + +# --- bit packing (FIPS 204 §7.1) ---------------------------------------------------------------------------- + + +def _bitlen(x): + return x.bit_length() + + +def simple_bit_pack(w, b): + """Coefficients in [0, b] as bitlen(b)-bit little-endian fields.""" + bits = _bitlen(b) + acc = 0 + for i, c in enumerate(w): + acc |= c << (bits * i) + return acc.to_bytes(32 * bits, "little") + + +def simple_bit_unpack(v, b): + bits = _bitlen(b) + acc = int.from_bytes(v, "little") + mask = (1 << bits) - 1 + return [(acc >> (bits * i)) & mask for i in range(N)] + + +def bit_pack(w, a, b): + """Coefficients in [-a, b] stored as b - w_i in bitlen(a + b) bits.""" + bits = _bitlen(a + b) + acc = 0 + for i, c in enumerate(w): + acc |= (b - c) << (bits * i) + return acc.to_bytes(32 * bits, "little") + + +def bit_unpack(v, a, b): + bits = _bitlen(a + b) + acc = int.from_bytes(v, "little") + mask = (1 << bits) - 1 + return [b - ((acc >> (bits * i)) & mask) for i in range(N)] + + +def hint_bit_pack(h): + y = bytearray(OMEGA + K) + index = 0 + for i in range(K): + for j in range(N): + if h[i][j]: + y[index] = j + index += 1 + y[OMEGA + i] = index + return bytes(y) + + +def hint_bit_unpack(y): + h = [[0] * N for _ in range(K)] + index = 0 + for i in range(K): + if y[OMEGA + i] < index or y[OMEGA + i] > OMEGA: + return None + first = index + while index < y[OMEGA + i]: + if index > first and y[index - 1] >= y[index]: + return None + h[i][y[index]] = 1 + index += 1 + if any(y[i] != 0 for i in range(index, OMEGA)): + return None + return h + + +# --- arithmetic --------------------------------------------------------------------------------------------- + + +def _mod_pm(r, m): + """r mod± m: the representative in (-m/2, m/2].""" + r %= m + return r - m if r > m // 2 else r + + +def power2round(r): + rp = r % Q + r0 = _mod_pm(rp, 1 << D) + return (rp - r0) >> D, r0 + + +def decompose(r): + rp = r % Q + r0 = _mod_pm(rp, 2 * GAMMA2) + if rp - r0 == Q - 1: + return 0, r0 - 1 + return (rp - r0) // (2 * GAMMA2), r0 + + +def high_bits(r): + return decompose(r)[0] + + +def low_bits(r): + return decompose(r)[1] + + +def make_hint(z, r): + return 1 if high_bits(r) != high_bits(r + z) else 0 + + +def use_hint(h, r): + m = (Q - 1) // (2 * GAMMA2) + r1, r0 = decompose(r) + if h and r0 > 0: + return (r1 + 1) % m + if h and r0 <= 0: + return (r1 - 1) % m + return r1 + + +def _inf_norm(w): + return max(abs(_mod_pm(c, Q)) for c in w) + + +def ntt(w): + w = list(w) + m, length = 0, 128 + while length >= 1: + start = 0 + while start < N: + m += 1 + z = ZETAS[m] + for j in range(start, start + length): + t = z * w[j + length] % Q + w[j + length] = (w[j] - t) % Q + w[j] = (w[j] + t) % Q + start += 2 * length + length //= 2 + return w + + +def ntt_inv(w): + w = list(w) + m, length = 256, 1 + while length < N: + start = 0 + while start < N: + m -= 1 + z = (-ZETAS[m]) % Q + for j in range(start, start + length): + t = w[j] + w[j] = (t + w[j + length]) % Q + w[j + length] = z * (t - w[j + length]) % Q + start += 2 * length + length *= 2 + return [c * F_INV256 % Q for c in w] + + +def _mul(a, b): + return [x * y % Q for x, y in zip(a, b)] + + +def _add(a, b): + return [(x + y) % Q for x, y in zip(a, b)] + + +def _sub(a, b): + return [(x - y) % Q for x, y in zip(a, b)] + + +# --- sampling (FIPS 204 §7.3) ------------------------------------------------------------------------------- + + +def _coeff_from_three_bytes(b0, b1, b2): + z = ((b2 & 0x7F) << 16) | (b1 << 8) | b0 + return z if z < Q else None + + +def rej_ntt_poly(rho): + out, j, n = [], 0, 3 * 300 + stream = _shake128(rho, n) + pos = 0 + while j < N: + if pos + 3 > len(stream): + n *= 2 + stream = _shake128(rho, n) + c = _coeff_from_three_bytes(stream[pos], stream[pos + 1], stream[pos + 2]) + pos += 3 + if c is not None: + out.append(c) + j += 1 + return out + + +def _coeff_from_half_byte(b): + return 4 - b if b < 9 else None # eta = 4 + + +def rej_bounded_poly(rho): + out, j, n = [], 0, 200 + stream = _shake256(rho, n) + pos = 0 + while j < N: + if pos >= len(stream): + n *= 2 + stream = _shake256(rho, n) + z = stream[pos] + pos += 1 + z0 = _coeff_from_half_byte(z & 15) + z1 = _coeff_from_half_byte(z >> 4) + if z0 is not None: + out.append(z0) + j += 1 + if z1 is not None and j < N: + out.append(z1) + j += 1 + return out + + +def expand_a(rho): + return [[rej_ntt_poly(rho + bytes([s, r])) for s in range(L)] for r in range(K)] + + +def expand_s(rho_prime): + s1 = [rej_bounded_poly(rho_prime + r.to_bytes(2, "little")) for r in range(L)] + s2 = [rej_bounded_poly(rho_prime + (r + L).to_bytes(2, "little")) for r in range(K)] + return s1, s2 + + +def expand_mask(rho, mu): + c = 1 + _bitlen(GAMMA1 - 1) + return [bit_unpack(_shake256(rho + (mu + r).to_bytes(2, "little"), 32 * c), GAMMA1 - 1, GAMMA1) for r in range(L)] + + +def sample_in_ball(rho): + c = [0] * N + n = 8 + TAU * 4 + stream = _shake256(rho, n) + signs = int.from_bytes(stream[:8], "little") + pos = 8 + for i in range(N - TAU, N): + while True: + if pos >= len(stream): + n *= 2 + stream = _shake256(rho, n) + j = stream[pos] + pos += 1 + if j <= i: + break + c[i] = c[j] + c[j] = 1 if (signs >> (i + TAU - N)) & 1 == 0 else Q - 1 + return c + + +# --- encodings (FIPS 204 §7.2) ------------------------------------------------------------------------------ + + +def pk_encode(rho, t1): + return rho + b"".join(simple_bit_pack(t, (1 << (23 - D)) - 1) for t in t1) + + +def pk_decode(pk): + rho, rest = pk[:32], pk[32:] + step = 32 * (23 - D) + return rho, [simple_bit_unpack(rest[i * step:(i + 1) * step], (1 << (23 - D)) - 1) for i in range(K)] + + +def sk_encode(rho, k, tr, s1, s2, t0): + out = rho + k + tr + out += b"".join(bit_pack(s, ETA, ETA) for s in s1) + out += b"".join(bit_pack(s, ETA, ETA) for s in s2) + out += b"".join(bit_pack(t, (1 << (D - 1)) - 1, 1 << (D - 1)) for t in t0) + return out + + +def sk_decode(sk): + rho, k, tr = sk[:32], sk[32:64], sk[64:128] + pos = 128 + s1, s2, t0 = [], [], [] + for _ in range(L): + s1.append(bit_unpack(sk[pos:pos + 128], ETA, ETA)) + pos += 128 + for _ in range(K): + s2.append(bit_unpack(sk[pos:pos + 128], ETA, ETA)) + pos += 128 + for _ in range(K): + t0.append(bit_unpack(sk[pos:pos + 32 * D], (1 << (D - 1)) - 1, 1 << (D - 1))) + pos += 32 * D + return rho, k, tr, s1, s2, t0 + + +def sig_encode(c_tilde, z, h): + return c_tilde + b"".join(bit_pack(zi, GAMMA1 - 1, GAMMA1) for zi in z) + hint_bit_pack(h) + + +def sig_decode(sigma): + c_tilde = sigma[:LAMBDA // 4] + pos = LAMBDA // 4 + z = [] + for _ in range(L): + z.append(bit_unpack(sigma[pos:pos + 32 * 20], GAMMA1 - 1, GAMMA1)) + pos += 32 * 20 + h = hint_bit_unpack(sigma[pos:]) + return c_tilde, z, h + + +def w1_encode(w1): + return b"".join(simple_bit_pack(w, (Q - 1) // (2 * GAMMA2) - 1) for w in w1) + + +# --- the scheme (FIPS 204 §6) ------------------------------------------------------------------------------- + + +def _matvec(a_hat, v_hat): + out = [] + for i in range(K): + acc = [0] * N + for j in range(L): + acc = _add(acc, _mul(a_hat[i][j], v_hat[j])) + out.append(acc) + return out + + +def keygen(seed): + """ML-DSA.KeyGen_internal: (public key, secret key) bytes for a 32-byte seed.""" + if len(seed) != 32: + raise ValueError("the seed is 32 bytes") + h = _shake256(seed + bytes([K, L]), 128) + rho, rho_prime, kk = h[:32], h[32:96], h[96:] + a_hat = expand_a(rho) + s1, s2 = expand_s(rho_prime) + t = [_add(ntt_inv(row), s2i) for row, s2i in zip(_matvec(a_hat, [ntt(s) for s in s1]), s2)] + t1, t0 = [], [] + for poly in t: + hi, lo = zip(*(power2round(c) for c in poly)) + t1.append(list(hi)) + t0.append(list(lo)) + pk = pk_encode(rho, t1) + tr = _shake256(pk, 64) + return pk, sk_encode(rho, kk, tr, s1, s2, t0) + + +def public_key(seed): + return keygen(seed)[0] + + +def _message_representative(message, ctx=b""): + if len(ctx) > 255: + raise ValueError("the context is at most 255 bytes") + return bytes([0, len(ctx)]) + ctx + message + + +def sign(sk, message, ctx=b"", rnd=bytes(32)): + """ML-DSA.Sign with the deterministic variant (rnd = 0): the 3309-byte signature.""" + rho, kk, tr, s1, s2, t0 = sk_decode(sk) + s1_hat = [ntt(s) for s in s1] + s2_hat = [ntt(s) for s in s2] + t0_hat = [ntt(t) for t in t0] + a_hat = expand_a(rho) + mu = _shake256(tr + _message_representative(message, ctx), 64) + rho_pp = _shake256(kk + rnd + mu, 64) + kappa = 0 + while True: + y = expand_mask(rho_pp, kappa) + w = [ntt_inv(row) for row in _matvec(a_hat, [ntt(yi) for yi in y])] + w1 = [[high_bits(c) for c in wi] for wi in w] + c_tilde = _shake256(mu + w1_encode(w1), LAMBDA // 4) + c = sample_in_ball(c_tilde) + c_hat = ntt(c) + cs1 = [ntt_inv(_mul(c_hat, s)) for s in s1_hat] + cs2 = [ntt_inv(_mul(c_hat, s)) for s in s2_hat] + z = [_add(yi, ci) for yi, ci in zip(y, cs1)] + r0 = [[low_bits(c) for c in _sub(wi, ci)] for wi, ci in zip(w, cs2)] + kappa += L + if max(_inf_norm(zi) for zi in z) >= GAMMA1 - BETA or max(max(abs(c) for c in r) for r in r0) >= GAMMA2 - BETA: + continue + ct0 = [ntt_inv(_mul(c_hat, t)) for t in t0_hat] + h = [] + for i in range(K): + base = _add(_sub(w[i], cs2[i]), ct0[i]) + h.append([make_hint((-ct0[i][j]) % Q, base[j]) for j in range(N)]) + if max(_inf_norm(t) for t in ct0) >= GAMMA2 or sum(sum(hi) for hi in h) > OMEGA: + continue + z_signed = [[_mod_pm(c, Q) for c in zi] for zi in z] + return sig_encode(c_tilde, z_signed, h) + + +def verify(pk, message, signature, ctx=b""): + """ML-DSA.Verify: True for a valid signature of `message` under `pk`. Never raises.""" + try: + if len(pk) != PK_SIZE or len(signature) != SIG_SIZE or len(ctx) > 255: + return False + rho, t1 = pk_decode(pk) + c_tilde, z, h = sig_decode(signature) + if h is None: + return False + a_hat = expand_a(rho) + tr = _shake256(pk, 64) + mu = _shake256(tr + _message_representative(message, ctx), 64) + c_hat = ntt(sample_in_ball(c_tilde)) + az = _matvec(a_hat, [ntt(zi) for zi in z]) + ct1 = [_mul(c_hat, ntt([c << D for c in t])) for t in t1] + w_approx = [ntt_inv(_sub(a, b)) for a, b in zip(az, ct1)] + w1 = [[use_hint(h[i][j], w_approx[i][j]) for j in range(N)] for i in range(K)] + if max(_inf_norm(zi) for zi in z) >= GAMMA1 - BETA: + return False + return _shake256(mu + w1_encode(w1), LAMBDA // 4) == c_tilde + except (ValueError, TypeError, IndexError): + return False diff --git a/tools/oracle/package.py b/tools/oracle/package.py index 5f35513..9efe310 100644 --- a/tools/oracle/package.py +++ b/tools/oracle/package.py @@ -280,6 +280,8 @@ def _validate(root, store, key, rep, limit=SIZE_LIMIT): # Policy and hashing. withheld = [n["id"] for n in nodes if n.get("withheld")] scheme = document["hashing"]["scheme"] + if document["hashing"].get("algorithm") != "sha-256": + rep.add("doc.hash.algorithm", "document.json", "the hash algorithm is not one this validator implements") if document["policy"] == "full" and withheld: rep.add("doc.policy.withheld", "nodes.jsonl", "a full package withholds no text") if document["policy"] == "checks-only": @@ -402,6 +404,11 @@ def _validate(root, store, key, rep, limit=SIZE_LIMIT): # Receipts and fidelity. roster = {k["id"]: k for k in data.get("roster.json", {}).get("keys", [])} + for k in roster.values(): + if k.get("did") and k["scheme"] in crypto.MULTICODEC: + pub = R._b64(k.get("public", "")) + if pub is None or crypto.did_key(k["scheme"], pub) != k["did"]: + rep.add("doc.roster.did", k["id"], "the did:key is not the one the public key determines") recs = data["receipts.jsonl"] rorder = sorted(recs, key=lambda r: (r["at"], r["id"])) if rorder != recs: diff --git a/tools/oracle/receipts.py b/tools/oracle/receipts.py index c9daaa3..05d9465 100644 --- a/tools/oracle/receipts.py +++ b/tools/oracle/receipts.py @@ -10,7 +10,7 @@ import math from fractions import Fraction from math import comb -from . import crypto, jcs, vrf +from . import crypto, jcs, mldsa, vrf from .model import LEVELS from .text import record_id, sha256_hex @@ -48,20 +48,38 @@ def _b64(s): def verify_signature(rec, roster): - """Whether the record's Ed25519 signature verifies under the roster key it names. Never raises.""" + """Whether the record's signature verifies under the roster key it names, for the schemes the tools implement + (`ed25519` and `ml-dsa-65`); any other scheme does not verify. Never raises.""" sig = rec.get("signature") or {} if not isinstance(sig, dict): return False key = roster.get(sig.get("key")) - if not key or sig.get("scheme") != "ed25519" or key.get("scheme") != "ed25519": + if not key or sig.get("scheme") != key.get("scheme"): return False pub, value = _b64(key.get("public", "")), _b64(sig.get("value", "")) - if pub is None or value is None or len(pub) != 32 or len(value) != 64: + if pub is None or value is None: return False try: - return crypto.ed25519_verify(pub, signing_payload(rec), value) + if sig["scheme"] == "ed25519": + return len(pub) == 32 and len(value) == 64 and crypto.ed25519_verify(pub, signing_payload(rec), value) + if sig["scheme"] == "ml-dsa-65": + return mldsa.verify(pub, signing_payload(rec), value) except (ValueError, TypeError): return False + return False + + +def seal_mldsa(rec, sk, key_id): + """Fill in a record's root (for receipts), ID and ML-DSA-65 signature, deterministically.""" + rec = dict(rec) + if rec["format"] == "scienting-receipt/1": + rec["root"] = crypto.merkle_root(crypto.receipt_items(rec)) + rec.pop("id", None) + rec.pop("signature", None) + sig = mldsa.sign(sk, signing_payload(rec)) + rec["id"] = record_id(record_hash(rec)) + rec["signature"] = {"scheme": "ml-dsa-65", "key": key_id, "value": base64.b64encode(sig).decode("ascii")} + return rec def key_valid_at(key, at): diff --git a/tools/stress.py b/tools/stress.py index 83e7f40..e46c40d 100644 --- a/tools/stress.py +++ b/tools/stress.py @@ -34,7 +34,7 @@ from tools.oracle import align as AL # noqa: E402 from tools.oracle import anchors as AN # noqa: E402 from tools.oracle import corrections as CO # noqa: E402 from tools.oracle import crypto, fingerprint as FP, hashing, jcs, receipts as RC, rights as RI, targets as TG # noqa: E402 -from tools.oracle import keys as K, log as LG, vrf # noqa: E402 +from tools.oracle import keys as K, log as LG, mldsa, vrf # noqa: E402 from tools.oracle import package as PK # noqa: E402 from tools.oracle.model import LABELLED, LEAVES, Doc # noqa: E402 from tools.oracle.notation import fold_math # noqa: E402 @@ -672,6 +672,24 @@ def stress_checkpoints(rng, rounds): ok("checkpoints", p2 is None or len(v2) < len(verified), "an edited note still fully verifies: %r" % bad[max(0, k - 5):k + 5]) +def stress_mldsa(rng, rounds): + """ML-DSA-65 signs deterministically and verifies; a flipped bit anywhere, another message or another key fails.""" + for _ in range(max(3, rounds // 50)): + seed = os.urandom(32) + pk, sk = mldsa.keygen(seed) + msg = os.urandom(rng.randint(0, 100)) + sig = mldsa.sign(sk, msg) + ok("ml-dsa", len(pk) == mldsa.PK_SIZE and len(sk) == mldsa.SK_SIZE and len(sig) == mldsa.SIG_SIZE, "sizes") + ok("ml-dsa", mldsa.verify(pk, msg, sig) and mldsa.sign(sk, msg) == sig, "a signature does not verify or is not deterministic") + bad = bytearray(sig) + bad[rng.randrange(len(bad))] ^= 1 << rng.randrange(8) + ok("ml-dsa", not mldsa.verify(pk, msg, bytes(bad)), "a tampered signature verifies") + ok("ml-dsa", not mldsa.verify(pk, msg + b"x", sig) and not mldsa.verify(mldsa.keygen(os.urandom(32))[0], msg, sig), + "a signature verifies for another message or key") + ok("ml-dsa", not mldsa.verify(pk, msg, os.urandom(mldsa.SIG_SIZE)) and not mldsa.verify(os.urandom(mldsa.PK_SIZE), msg, sig), + "garbage verifies") + + def main(): ap = argparse.ArgumentParser(description=__doc__.splitlines()[0]) ap.add_argument("--seed", type=int, default=20261014, help="the random seed (default 20261014)") @@ -699,6 +717,7 @@ def main(): stress_vrf(rng, a.rounds) stress_proofs(rng, a.rounds) stress_checkpoints(rng, a.rounds) + stress_mldsa(rng, a.rounds) for k in sorted(COUNTS): print("%-17s %6d checks" % (k, COUNTS[k])) if FAILS: diff --git a/vectors/README.md b/vectors/README.md index 81edf3a..18c288a 100644 --- a/vectors/README.md +++ b/vectors/README.md @@ -114,7 +114,7 @@ The table below uses a few terms that the chapters define: | `keyed.jsonl` | The team key and its ID, an HMAC, page hashes, a page-derived key, and what someone without the paper cannot check. | [5.8](../spec/05-hashes.md#58-keyed-hashes) | | `fingerprints.jsonl` | Pages as text lines, the stamp rules that fired, and the fingerprint; two downloads that must agree, and a change that must not. | [7.1](../spec/07-geometry.md#71-page-fingerprints) | | `merkle.jsonl` | Receipt items and their Merkle roots. | [8.5](../spec/08-fidelity.md#85-merkle-roots) | -| `signatures.jsonl` | The RFC 8032 test vector, and a receipt's record hash, signing payload and signature. | [8.4](../spec/08-fidelity.md#84-record-hashes-and-signatures) | +| `signatures.jsonl` | The RFC 8032 test vector; a receipt's record hash, signing payload and signature; `did:key` identifiers for an Ed25519 and an ML-DSA-65 key; and ML-DSA-65 (FIPS 204): NIST's key-generation case and a deterministic signature. | [8.4](../spec/08-fidelity.md#84-record-hashes-and-signatures) | | `spotcheck.jsonl` | Seed payloads, seeds, sample sizes and samples. | [8.8](../spec/08-fidelity.md#88-spot-checks) | | `bounds.jsonl` | Reviewer error bounds as reported. | [8.9](../spec/08-fidelity.md#89-reviewer-error-bounds) | | `alignment.jsonl` | Two readings of a document, their pairs and their suspects. | [5.6](../spec/05-hashes.md#56-alignment) | @@ -138,7 +138,7 @@ A candidate format changes only with a recorded reason and a new or changed vect A passing run shows one thing: for these inputs, your implementation computes the same values as the reference implementation in `tools/oracle/`. That code computed the expected outputs, and `pixi run build` regenerates them ([tools/](../tools/README.md)). -The vectors hold 306 cases in all, some of them small: `hashes.jsonl` has one document, `alignment.jsonl` one pair of readings, `offsets.jsonl` and `signatures.jsonl` two cases each. +The vectors hold 311 cases in all, some of them small: `hashes.jsonl` has one document, `alignment.jsonl` one pair of readings, `offsets.jsonl` two cases. The vectors do not show the following. diff --git a/vectors/checkpoint.jsonl b/vectors/checkpoint.jsonl index 4ce0c13..7e43370 100644 --- a/vectors/checkpoint.jsonl +++ b/vectors/checkpoint.jsonl @@ -1 +1 @@ -{"entries":[["receipt","npc15pn6675z5","37b3025b54c6397e5f8d400912b5788cd6ce203059cd9143e7d521c2cdbf2917"],["receipt","y2zw8ctg5s8dp","ae17f8866a05ca1b671d96b7758984e11ac694acd6743835f107cb513c7cc600"],["receipt","mvjmb94nz7rdh","a4dca8b492bf3e1b190f22e09de77713523e345526fd1b01c1186d0fe80d1cf4"],["receipt","q465jpwz8afhe","39218b2b73e853e2e66d8d4ce68cf7e155ca001f05ee4da5942a8d9b63b216bc"],["revocation","pcbhtpwvysgq6","9062e3ab737ecc2e6d487d2076ee27f764be60f06ad01f1ad103d708d466e56a"],["receipt","gx2s84z9jf9xv","5ee8b2827d327a7bbcacb08fd19b9523fad83ebf6c29350d5ce7ca30bf5ce388"],["receipt","mg18668nzxvap","4c80506322bfeed5649cfab303959e4ccf0aa0e594995ee6fd5ad59f9d3ee6a7"],["receipt","yt70fcc3qm0xb","2ad1c0f63077a03ab1cce01e6235734577d0b072b90ebab2f7db7fd481ccee2c"],["roster","smithlab","c4d1edc00070112de84a0b57ba6d16959c0a50b5b2b85249f7d21e390b742988"]],"id":"smithlab","note":"scient.ing/log/smithlab\n9\nSsjq+QpCQnva7PfGTdEv1jcArj1AORP4mYfN+rLz268=\n\n— ana dBv7wspe8vvwH61eTw3SQfa3udWjBNSV0xVCxfoLhiuei/SytzSotCBOK8CvPK3scJ8xHEAnUROdAmyXAh65xchq2g0=\n","origin":"scient.ing/log/smithlab","root":"4ac8eaf90a42427bdaecf7c64dd12fd63700ae3d403913f89987cdfab2f3dbaf","signers":["ana"]} +{"entries":[["receipt","npc15pn6675z5","37b3025b54c6397e5f8d400912b5788cd6ce203059cd9143e7d521c2cdbf2917"],["receipt","y2zw8ctg5s8dp","ae17f8866a05ca1b671d96b7758984e11ac694acd6743835f107cb513c7cc600"],["receipt","mvjmb94nz7rdh","a4dca8b492bf3e1b190f22e09de77713523e345526fd1b01c1186d0fe80d1cf4"],["receipt","q465jpwz8afhe","39218b2b73e853e2e66d8d4ce68cf7e155ca001f05ee4da5942a8d9b63b216bc"],["revocation","pcbhtpwvysgq6","9062e3ab737ecc2e6d487d2076ee27f764be60f06ad01f1ad103d708d466e56a"],["receipt","gx2s84z9jf9xv","5ee8b2827d327a7bbcacb08fd19b9523fad83ebf6c29350d5ce7ca30bf5ce388"],["receipt","mg18668nzxvap","4c80506322bfeed5649cfab303959e4ccf0aa0e594995ee6fd5ad59f9d3ee6a7"],["receipt","yt70fcc3qm0xb","2ad1c0f63077a03ab1cce01e6235734577d0b072b90ebab2f7db7fd481ccee2c"],["roster","smithlab","782c5e68f4e4f9918e69b7a44b108d9d70c89a289981acff3d25300ec8373c15"]],"id":"smithlab","note":"scient.ing/log/smithlab\n9\nGa0n103p3Gl136z6XWmM92kGvsvMYGXlk+ijjX4KWiA=\n\n— ana dBv7wtCAdNnczkCO5KwtrmDvtWUVPRusBSuLPeBDQoLZi9Hm34IHuNjvnjyPEar5afNf7xqcDtokk2XZEP31uJMVuwE=\n— wit h7ghDsJGkhWLaPO7+TIZQUenslhiQh/E/TKWU4ddphpFcuylQBZM2kG/o8H1nyPfUT0MkbvnFqPFfHPH3OaN5W1EwAI=\n","origin":"scient.ing/log/smithlab","root":"19ad27d74de9dc6975dfacfa5d698cf76906becbcc6065e593e8a38d7e0a5a20","signers":["ana","wit"],"tiles":["tile/0/000.p/9","tile/entries/000.p/9"]} diff --git a/vectors/corrections.jsonl b/vectors/corrections.jsonl index 84cd1ca..399e1a3 100644 --- a/vectors/corrections.jsonl +++ b/vectors/corrections.jsonl @@ -26,3 +26,4 @@ {"before":{"ids":[],"nodes":[{"align_key":"b3108c22ec836d883e5116f7ed8546fa75390eb4aa960d78f2936115f69b6826","id":"s0fn2fj","kind":"document","match_hash":"b6a4e12f700a6214bf02c9a437559e82fccdbecea7b575fa438a7d2e8c33071a","node_hash":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","ord":0,"own_hash":"34444fe0e6bdbf3927a579fe3286859d204ea0882a381b7769ffd4905551d24f","parent":null,"text_hash":"bd2abc746d51cf52d57a18632383245d585e29e265426967894eed99bc937561"},{"align_key":"caf6aee3882b3890996037e35d0ffdfe30b5e66653d45321d7ea0fa9135f1ee9","attrs":{"level":1},"id":"b9wp3tt","kind":"section","label":"1","match_hash":"5a96c01f314c4d8a22fd5e105bebef45df4301886cccbc2538ecefddfcb1d405","node_hash":"ea9a1409bbf0f0f7bd8d508bfdbbf7d14a22ab1e3da011eafbfcd4e14ae7e4fd","ord":0,"own_hash":"65da097b48f8237e8d171bfbd0053ff0e3795c0532d5522d23a92b53430956f4","parent":"s0fn2fj","text_hash":"7a97628fe9643c0fca3614a077e2e631c3fee81d3733ba1564292df65a294573"},{"align_key":"c099142bc3186ded72786ba27e9ea6d2da240fb9fd3fe79b479ecf8e734b2850","id":"vet7k0e","kind":"heading","match_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd","node_hash":"a3c82ab1e44bf4cffa1a59507f8bddc39a1ad191321ee803d0d60d96609a44c7","ord":0,"own_hash":"e813ff86a8920cef741e548eb5df545774b520d2fadbdda6e2b872a6729b9d26","parent":"b9wp3tt","text_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd"},{"align_key":"c099142bc3186ded72786ba27e9ea6d2da240fb9fd3fe79b479ecf8e734b2850","content":[{"kind":"text","text":"Results"}],"fidelity":"F2","id":"em5pd9v","kind":"sentence","match_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd","node_hash":"293fc03ff4e39d7532467e4417ffcdb15f470f0bd3658dc1c021645ad53c9bef","ord":0,"own_hash":"c55f401232b19ff1133d77eac6c72868975064f177fc2d31ab8a181303c30599","parent":"vet7k0e","text_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd"},{"align_key":"610c235321e38145abff21e31eaab303d85a6ce0d1b9340a599dc821a04922f6","id":"ytp1e5n","kind":"paragraph","match_hash":"bcb4902ec69f2a7a724384f561ee9aa0e214c824c5882c1ad92777bee680aad4","node_hash":"7667a3a4bc2e8fec1dc7af53e19c414952f9ce926b1e37e8d9adca66dd8f8d1d","ord":1,"own_hash":"494e069be36a18ecaabf5a63be7c31617ade7a5460218ca83a2de3d8d8f964e0","parent":"b9wp3tt","text_hash":"f589ee914c46c4aea7ce2de49d925c433c914121f576b81a3eab692f17f179a3"},{"align_key":"8f21603c39df123eb8680362184274aac9bdf1dbd485b3bba230960179071c95","content":[{"kind":"text","text":"The value is 42.0 at 300 K."}],"fidelity":"F2","id":"jvnys4s","kind":"sentence","match_hash":"3bcf9fa8412dca28be91d6423460233ddedd7add6c324d8a0f2b26038567d3d3","node_hash":"f5761f338b2878dff39a6ee724a75b13626dd625a0df96cf1cc6f9e8258cb7cc","ord":0,"own_hash":"7f0b9190d076cf01b51a8be863a51e9a8eeaab5d3ec8656202ff4d41578d4d82","parent":"ytp1e5n","text_hash":"3bcf9fa8412dca28be91d6423460233ddedd7add6c324d8a0f2b26038567d3d3"},{"align_key":"8e7fe271cd1bab88d86c8900fe3ffae0ce95c55af6659df1fca278d359296e2d","content":[{"kind":"text","text":"See "},{"kind":"xref","target":"tb49qpc","text":"Table 1"},{"kind":"text","text":" and the note."},{"kind":"cite","refs":["r3e21zr"],"text":"1"}],"fidelity":"F2","id":"mzwwhxj","kind":"sentence","match_hash":"9894a48790a8561966e68672fa13da20541d25a5178653720648f62cbc9ad36b","node_hash":"8f3e5338ba3c97efca4cef5c60d849757aed6334ee27ab807fa71d969089e46e","ord":1,"own_hash":"02ed6d50b8ac607b59e3f7b5116ee6143ed7e69af25b19c4037aa799bc330a88","parent":"ytp1e5n","text_hash":"5b1de19c9eb1399e54bde7e96f051cac8b337be1f307fac320292b8db7e39da7"},{"align_key":"282eea00b316a6950fb7179f6289a8b98359019e11cb23a3ff426cdecad90165","id":"exq1ter","kind":"paragraph","match_hash":"da88f35d24faf0099610c720953c4919647a5dfb9003889a15c464cd9c540fb1","node_hash":"062dd26bfb226ca9811d0dfb013df211cb201dfe7b4b25f9aba000f3212298d5","ord":2,"own_hash":"494e069be36a18ecaabf5a63be7c31617ade7a5460218ca83a2de3d8d8f964e0","parent":"b9wp3tt","text_hash":"da88f35d24faf0099610c720953c4919647a5dfb9003889a15c464cd9c540fb1"},{"align_key":"b8074a8bc013aa007023c4cce7334f1e1f22384d57a526ca22fd2f5589d5ab17","content":[{"kind":"text","text":"A second paragraph."}],"fidelity":"F2","id":"j663d4h","kind":"sentence","match_hash":"2e8313b033de5e17878ae778d6293bbd6e197a072f36acf7fe0840a690a7f31e","node_hash":"443539440dca73149ca75276492334ce9a5a6c50070137e8dc7bf414b75a27ab","ord":0,"own_hash":"acee4b6b1399bfde1dc67dea8d8c86b0db961d2af516ae4aaee26f294261456f","parent":"exq1ter","text_hash":"2e8313b033de5e17878ae778d6293bbd6e197a072f36acf7fe0840a690a7f31e"},{"align_key":"437c101749b0481e615fc7eed8dcacb536b65400c7e0695ad4cbb2bf2dae488c","content":[{"kind":"text","text":"It ends here."}],"fidelity":"F2","id":"rsw24qc","kind":"sentence","match_hash":"2888dbfa0c08fd65c58c923b920860c76e13913d9fa93b03eccbbf7bdf53b882","node_hash":"caeb3ae57d0821b8ac961c9507debbcda2b118b16cdc010b83a143a782058d57","ord":1,"own_hash":"705f77e8520c8c5ce3a7a495a20d8a9c55baa9801e49a55c341f5de79eeede75","parent":"exq1ter","text_hash":"2888dbfa0c08fd65c58c923b920860c76e13913d9fa93b03eccbbf7bdf53b882"},{"align_key":"cb0107aa0d562e8bd1188c33dc1ef5a1d07808e51edeabaa87465556d11b6ec8","attrs":{"columns":[{"header_path":["af5b51r"],"id":"pj5sk05"},{"header_path":["ajqxkgh"],"id":"nymcs5q"}]},"id":"tb49qpc","kind":"table","label":"Table 1","match_hash":"1951e0b61441d7b817b4967b36eee007f8e7525ac75fd359437eddb871e59f72","node_hash":"154c910857f33c152fdc78e42582510327055e62da9a25ab10c3891eeaf69627","ord":3,"own_hash":"fb4cc66080def0b42a06f7aa566a24957c7345c77b8d873ca5c790704a890f47","parent":"b9wp3tt","text_hash":"1951e0b61441d7b817b4967b36eee007f8e7525ac75fd359437eddb871e59f72"},{"align_key":"769a4e6d0003189c7e96c5d9b7e810a0d11c3a12832527ec94b0f86d277f51ca","id":"t2ps2mp","kind":"table-head","match_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19","node_hash":"6d8056adfb50dc0b65a2a65b47eccc5f47d5482a8dfbefa0d8a06f6641a4be3a","ord":0,"own_hash":"c5749bee3a4b981fb79cf6db125ebb416dce5a83613a00feecd9d4cf75df9bb4","parent":"tb49qpc","text_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19"},{"align_key":"769a4e6d0003189c7e96c5d9b7e810a0d11c3a12832527ec94b0f86d277f51ca","id":"rr9rtf5","kind":"row","match_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19","node_hash":"8bd1fa377ec390fdc36e17baa8c3a39d2df7ef2a53cd0c0dc745ae40e98f99f8","ord":0,"own_hash":"6c7c11bf1b6260162c4141f1468aa6869f5c33359900497e2cdb1a051488bd62","parent":"t2ps2mp","text_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19"},{"align_key":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881","attrs":{"colspan":1,"column":"pj5sk05","role":"column-header","rowspan":1},"content":[{"kind":"text","text":"x"}],"fidelity":"F1","id":"af5b51r","kind":"cell","match_hash":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881","node_hash":"59d1c20766a77bacde2aae80a134c7156fbcc708c140a3bb2d2a67f78bd9c6f5","ord":0,"own_hash":"c68933b07bc7c5b806892ae36b3e4c3205a0a2066fd6f8255578f7d1ca86dc10","parent":"rr9rtf5","text_hash":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881"},{"align_key":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa","attrs":{"colspan":1,"column":"nymcs5q","role":"column-header","rowspan":1},"content":[{"kind":"text","text":"y"}],"fidelity":"F1","id":"ajqxkgh","kind":"cell","match_hash":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa","node_hash":"838e3fba38f0797d40522b7063cb5c2962e32a019c09c19f09849ced73079a87","ord":1,"own_hash":"28df42bf1dcd44b053275ed014bd1599914f17adabc0c7fdb3e4247dc648ac49","parent":"rr9rtf5","text_hash":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa"},{"align_key":"b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda","id":"dmsstkg","kind":"table-body","match_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738","node_hash":"baf17577660aa6f0ba9c8703d30816d77cfce7dbf0ea3257ed830fa9ab94ce9d","ord":1,"own_hash":"b229a7f92314227bf225ad27010a546e7c2373f4b30b7f6ec372e568cbacb6aa","parent":"tb49qpc","text_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738"},{"align_key":"b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda","attrs":{"header_path":["rdrqkv7"]},"id":"r3e7hfs","kind":"row","match_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738","node_hash":"97a1f5b27bbfe8c9d2cec7212b519b4993506fc8080be3eff02f3aa31515a19d","ord":0,"own_hash":"6c7c11bf1b6260162c4141f1468aa6869f5c33359900497e2cdb1a051488bd62","parent":"dmsstkg","text_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738"},{"align_key":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","attrs":{"colspan":1,"column":"pj5sk05","role":"row-header","rowspan":1},"content":[{"kind":"text","text":"1"}],"fidelity":"F1","id":"rdrqkv7","kind":"cell","match_hash":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","node_hash":"87da3bd568286f3d0578d8a813496d15faafb62f4db44b07aa1c29e52cda34df","ord":0,"own_hash":"fb474321001657b59bccd3cae0987c544a4ef9a27214626d77695f4db237aa93","parent":"r3e7hfs","text_hash":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"align_key":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61","attrs":{"colspan":1,"column":"nymcs5q","role":"data","rowspan":1},"content":[{"kind":"text","text":"2.5"}],"fidelity":"F1","id":"f463wj7","kind":"cell","match_hash":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61","node_hash":"f1cd6d5339c84d5c36f8e1ea484a8d837f3200f05d1b106f6119dfa30d846bfd","ord":1,"own_hash":"088eff622eb3086d68c4433cf5e1783dc9f2a6724c3536c31ec0bf80b5f89db5","parent":"r3e7hfs","text_hash":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","id":"aw97y35","kind":"back","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"fcb8027f7c89115f048b9c5d6770847248f4e4fbc61cbc8ea0b04079b4d58350","ord":1,"own_hash":"bbb972bdc024231b505f4d8ce5e711fbb75c8b5ffd1b5d42ee3fb8586b85f867","parent":"s0fn2fj","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","id":"yd513mw","kind":"references","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"8b8a9000e984c3efeb27fc40c8fbadd7349dd64860aa276dcd2a25a57ce52e87","ord":0,"own_hash":"2a5302e2041d0e59458fea212dd51b89299901318bfceeeff227c1a07d3f5d1a","parent":"aw97y35","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","content":[{"kind":"text","text":"1. An Example, 2020."}],"fidelity":"F2","id":"r3e21zr","kind":"reference","label":"1","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"71b1af6dd6a56f24cb3b338e0fe99df06b9154ecdf4b391b00b7a7e61e23a8ed","ord":0,"own_hash":"f7c9bbc8c7456e6dc435feeaaa02cbfdbe487523b020105793fb11b91d0894f5","parent":"yd513mw","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"}],"rev":0},"correction":{"at":"2026-10-11T12:00:00Z","attr":"level","author":{"key":"ana"},"evidence":[{"by":"ana","kind":"person"}],"op":"set","reason":"Vector.","target":"f463wj7","value":2},"doc":"tiny2026tiny-j4qm","expect":{"refusal":"correction.set"},"id":"set-not-settable"} {"before":{"ids":[],"nodes":[{"align_key":"b3108c22ec836d883e5116f7ed8546fa75390eb4aa960d78f2936115f69b6826","id":"s0fn2fj","kind":"document","match_hash":"b6a4e12f700a6214bf02c9a437559e82fccdbecea7b575fa438a7d2e8c33071a","node_hash":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","ord":0,"own_hash":"34444fe0e6bdbf3927a579fe3286859d204ea0882a381b7769ffd4905551d24f","parent":null,"text_hash":"bd2abc746d51cf52d57a18632383245d585e29e265426967894eed99bc937561"},{"align_key":"caf6aee3882b3890996037e35d0ffdfe30b5e66653d45321d7ea0fa9135f1ee9","attrs":{"level":1},"id":"b9wp3tt","kind":"section","label":"1","match_hash":"5a96c01f314c4d8a22fd5e105bebef45df4301886cccbc2538ecefddfcb1d405","node_hash":"ea9a1409bbf0f0f7bd8d508bfdbbf7d14a22ab1e3da011eafbfcd4e14ae7e4fd","ord":0,"own_hash":"65da097b48f8237e8d171bfbd0053ff0e3795c0532d5522d23a92b53430956f4","parent":"s0fn2fj","text_hash":"7a97628fe9643c0fca3614a077e2e631c3fee81d3733ba1564292df65a294573"},{"align_key":"c099142bc3186ded72786ba27e9ea6d2da240fb9fd3fe79b479ecf8e734b2850","id":"vet7k0e","kind":"heading","match_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd","node_hash":"a3c82ab1e44bf4cffa1a59507f8bddc39a1ad191321ee803d0d60d96609a44c7","ord":0,"own_hash":"e813ff86a8920cef741e548eb5df545774b520d2fadbdda6e2b872a6729b9d26","parent":"b9wp3tt","text_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd"},{"align_key":"c099142bc3186ded72786ba27e9ea6d2da240fb9fd3fe79b479ecf8e734b2850","content":[{"kind":"text","text":"Results"}],"fidelity":"F2","id":"em5pd9v","kind":"sentence","match_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd","node_hash":"293fc03ff4e39d7532467e4417ffcdb15f470f0bd3658dc1c021645ad53c9bef","ord":0,"own_hash":"c55f401232b19ff1133d77eac6c72868975064f177fc2d31ab8a181303c30599","parent":"vet7k0e","text_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd"},{"align_key":"610c235321e38145abff21e31eaab303d85a6ce0d1b9340a599dc821a04922f6","id":"ytp1e5n","kind":"paragraph","match_hash":"bcb4902ec69f2a7a724384f561ee9aa0e214c824c5882c1ad92777bee680aad4","node_hash":"7667a3a4bc2e8fec1dc7af53e19c414952f9ce926b1e37e8d9adca66dd8f8d1d","ord":1,"own_hash":"494e069be36a18ecaabf5a63be7c31617ade7a5460218ca83a2de3d8d8f964e0","parent":"b9wp3tt","text_hash":"f589ee914c46c4aea7ce2de49d925c433c914121f576b81a3eab692f17f179a3"},{"align_key":"8f21603c39df123eb8680362184274aac9bdf1dbd485b3bba230960179071c95","content":[{"kind":"text","text":"The value is 42.0 at 300 K."}],"fidelity":"F2","id":"jvnys4s","kind":"sentence","match_hash":"3bcf9fa8412dca28be91d6423460233ddedd7add6c324d8a0f2b26038567d3d3","node_hash":"f5761f338b2878dff39a6ee724a75b13626dd625a0df96cf1cc6f9e8258cb7cc","ord":0,"own_hash":"7f0b9190d076cf01b51a8be863a51e9a8eeaab5d3ec8656202ff4d41578d4d82","parent":"ytp1e5n","text_hash":"3bcf9fa8412dca28be91d6423460233ddedd7add6c324d8a0f2b26038567d3d3"},{"align_key":"8e7fe271cd1bab88d86c8900fe3ffae0ce95c55af6659df1fca278d359296e2d","content":[{"kind":"text","text":"See "},{"kind":"xref","target":"tb49qpc","text":"Table 1"},{"kind":"text","text":" and the note."},{"kind":"cite","refs":["r3e21zr"],"text":"1"}],"fidelity":"F2","id":"mzwwhxj","kind":"sentence","match_hash":"9894a48790a8561966e68672fa13da20541d25a5178653720648f62cbc9ad36b","node_hash":"8f3e5338ba3c97efca4cef5c60d849757aed6334ee27ab807fa71d969089e46e","ord":1,"own_hash":"02ed6d50b8ac607b59e3f7b5116ee6143ed7e69af25b19c4037aa799bc330a88","parent":"ytp1e5n","text_hash":"5b1de19c9eb1399e54bde7e96f051cac8b337be1f307fac320292b8db7e39da7"},{"align_key":"282eea00b316a6950fb7179f6289a8b98359019e11cb23a3ff426cdecad90165","id":"exq1ter","kind":"paragraph","match_hash":"da88f35d24faf0099610c720953c4919647a5dfb9003889a15c464cd9c540fb1","node_hash":"062dd26bfb226ca9811d0dfb013df211cb201dfe7b4b25f9aba000f3212298d5","ord":2,"own_hash":"494e069be36a18ecaabf5a63be7c31617ade7a5460218ca83a2de3d8d8f964e0","parent":"b9wp3tt","text_hash":"da88f35d24faf0099610c720953c4919647a5dfb9003889a15c464cd9c540fb1"},{"align_key":"b8074a8bc013aa007023c4cce7334f1e1f22384d57a526ca22fd2f5589d5ab17","content":[{"kind":"text","text":"A second paragraph."}],"fidelity":"F2","id":"j663d4h","kind":"sentence","match_hash":"2e8313b033de5e17878ae778d6293bbd6e197a072f36acf7fe0840a690a7f31e","node_hash":"443539440dca73149ca75276492334ce9a5a6c50070137e8dc7bf414b75a27ab","ord":0,"own_hash":"acee4b6b1399bfde1dc67dea8d8c86b0db961d2af516ae4aaee26f294261456f","parent":"exq1ter","text_hash":"2e8313b033de5e17878ae778d6293bbd6e197a072f36acf7fe0840a690a7f31e"},{"align_key":"437c101749b0481e615fc7eed8dcacb536b65400c7e0695ad4cbb2bf2dae488c","content":[{"kind":"text","text":"It ends here."}],"fidelity":"F2","id":"rsw24qc","kind":"sentence","match_hash":"2888dbfa0c08fd65c58c923b920860c76e13913d9fa93b03eccbbf7bdf53b882","node_hash":"caeb3ae57d0821b8ac961c9507debbcda2b118b16cdc010b83a143a782058d57","ord":1,"own_hash":"705f77e8520c8c5ce3a7a495a20d8a9c55baa9801e49a55c341f5de79eeede75","parent":"exq1ter","text_hash":"2888dbfa0c08fd65c58c923b920860c76e13913d9fa93b03eccbbf7bdf53b882"},{"align_key":"cb0107aa0d562e8bd1188c33dc1ef5a1d07808e51edeabaa87465556d11b6ec8","attrs":{"columns":[{"header_path":["af5b51r"],"id":"pj5sk05"},{"header_path":["ajqxkgh"],"id":"nymcs5q"}]},"id":"tb49qpc","kind":"table","label":"Table 1","match_hash":"1951e0b61441d7b817b4967b36eee007f8e7525ac75fd359437eddb871e59f72","node_hash":"154c910857f33c152fdc78e42582510327055e62da9a25ab10c3891eeaf69627","ord":3,"own_hash":"fb4cc66080def0b42a06f7aa566a24957c7345c77b8d873ca5c790704a890f47","parent":"b9wp3tt","text_hash":"1951e0b61441d7b817b4967b36eee007f8e7525ac75fd359437eddb871e59f72"},{"align_key":"769a4e6d0003189c7e96c5d9b7e810a0d11c3a12832527ec94b0f86d277f51ca","id":"t2ps2mp","kind":"table-head","match_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19","node_hash":"6d8056adfb50dc0b65a2a65b47eccc5f47d5482a8dfbefa0d8a06f6641a4be3a","ord":0,"own_hash":"c5749bee3a4b981fb79cf6db125ebb416dce5a83613a00feecd9d4cf75df9bb4","parent":"tb49qpc","text_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19"},{"align_key":"769a4e6d0003189c7e96c5d9b7e810a0d11c3a12832527ec94b0f86d277f51ca","id":"rr9rtf5","kind":"row","match_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19","node_hash":"8bd1fa377ec390fdc36e17baa8c3a39d2df7ef2a53cd0c0dc745ae40e98f99f8","ord":0,"own_hash":"6c7c11bf1b6260162c4141f1468aa6869f5c33359900497e2cdb1a051488bd62","parent":"t2ps2mp","text_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19"},{"align_key":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881","attrs":{"colspan":1,"column":"pj5sk05","role":"column-header","rowspan":1},"content":[{"kind":"text","text":"x"}],"fidelity":"F1","id":"af5b51r","kind":"cell","match_hash":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881","node_hash":"59d1c20766a77bacde2aae80a134c7156fbcc708c140a3bb2d2a67f78bd9c6f5","ord":0,"own_hash":"c68933b07bc7c5b806892ae36b3e4c3205a0a2066fd6f8255578f7d1ca86dc10","parent":"rr9rtf5","text_hash":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881"},{"align_key":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa","attrs":{"colspan":1,"column":"nymcs5q","role":"column-header","rowspan":1},"content":[{"kind":"text","text":"y"}],"fidelity":"F1","id":"ajqxkgh","kind":"cell","match_hash":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa","node_hash":"838e3fba38f0797d40522b7063cb5c2962e32a019c09c19f09849ced73079a87","ord":1,"own_hash":"28df42bf1dcd44b053275ed014bd1599914f17adabc0c7fdb3e4247dc648ac49","parent":"rr9rtf5","text_hash":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa"},{"align_key":"b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda","id":"dmsstkg","kind":"table-body","match_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738","node_hash":"baf17577660aa6f0ba9c8703d30816d77cfce7dbf0ea3257ed830fa9ab94ce9d","ord":1,"own_hash":"b229a7f92314227bf225ad27010a546e7c2373f4b30b7f6ec372e568cbacb6aa","parent":"tb49qpc","text_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738"},{"align_key":"b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda","attrs":{"header_path":["rdrqkv7"]},"id":"r3e7hfs","kind":"row","match_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738","node_hash":"97a1f5b27bbfe8c9d2cec7212b519b4993506fc8080be3eff02f3aa31515a19d","ord":0,"own_hash":"6c7c11bf1b6260162c4141f1468aa6869f5c33359900497e2cdb1a051488bd62","parent":"dmsstkg","text_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738"},{"align_key":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","attrs":{"colspan":1,"column":"pj5sk05","role":"row-header","rowspan":1},"content":[{"kind":"text","text":"1"}],"fidelity":"F1","id":"rdrqkv7","kind":"cell","match_hash":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","node_hash":"87da3bd568286f3d0578d8a813496d15faafb62f4db44b07aa1c29e52cda34df","ord":0,"own_hash":"fb474321001657b59bccd3cae0987c544a4ef9a27214626d77695f4db237aa93","parent":"r3e7hfs","text_hash":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"align_key":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61","attrs":{"colspan":1,"column":"nymcs5q","role":"data","rowspan":1},"content":[{"kind":"text","text":"2.5"}],"fidelity":"F1","id":"f463wj7","kind":"cell","match_hash":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61","node_hash":"f1cd6d5339c84d5c36f8e1ea484a8d837f3200f05d1b106f6119dfa30d846bfd","ord":1,"own_hash":"088eff622eb3086d68c4433cf5e1783dc9f2a6724c3536c31ec0bf80b5f89db5","parent":"r3e7hfs","text_hash":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","id":"aw97y35","kind":"back","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"fcb8027f7c89115f048b9c5d6770847248f4e4fbc61cbc8ea0b04079b4d58350","ord":1,"own_hash":"bbb972bdc024231b505f4d8ce5e711fbb75c8b5ffd1b5d42ee3fb8586b85f867","parent":"s0fn2fj","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","id":"yd513mw","kind":"references","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"8b8a9000e984c3efeb27fc40c8fbadd7349dd64860aa276dcd2a25a57ce52e87","ord":0,"own_hash":"2a5302e2041d0e59458fea212dd51b89299901318bfceeeff227c1a07d3f5d1a","parent":"aw97y35","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","content":[{"kind":"text","text":"1. An Example, 2020."}],"fidelity":"F2","id":"r3e21zr","kind":"reference","label":"1","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"71b1af6dd6a56f24cb3b338e0fe99df06b9154ecdf4b391b00b7a7e61e23a8ed","ord":0,"own_hash":"f7c9bbc8c7456e6dc435feeaaa02cbfdbe487523b020105793fb11b91d0894f5","parent":"yd513mw","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"}],"rev":0},"correction":{"at":"2026-10-11T12:00:00Z","author":{"key":"ana"},"evidence":[{"kind":"crop","sha256":"4839e386aceece09ab1602a8291e072f2cc4e322e44ef458666f9b89c4ed6e54"}],"node":{"content":[{"kind":"text","text":"Junk."}],"foo":1,"kind":"sentence"},"op":"insert","parent":"exq1ter","place_after":"j663d4h","reason":"Vector."},"doc":"tiny2026tiny-j4qm","expect":{"refusal":"doc.node.schema"},"id":"insert-node-junk"} {"before":{"ids":[],"nodes":[{"align_key":"b3108c22ec836d883e5116f7ed8546fa75390eb4aa960d78f2936115f69b6826","id":"s0fn2fj","kind":"document","match_hash":"b6a4e12f700a6214bf02c9a437559e82fccdbecea7b575fa438a7d2e8c33071a","node_hash":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","ord":0,"own_hash":"34444fe0e6bdbf3927a579fe3286859d204ea0882a381b7769ffd4905551d24f","parent":null,"text_hash":"bd2abc746d51cf52d57a18632383245d585e29e265426967894eed99bc937561"},{"align_key":"caf6aee3882b3890996037e35d0ffdfe30b5e66653d45321d7ea0fa9135f1ee9","attrs":{"level":1},"id":"b9wp3tt","kind":"section","label":"1","match_hash":"5a96c01f314c4d8a22fd5e105bebef45df4301886cccbc2538ecefddfcb1d405","node_hash":"ea9a1409bbf0f0f7bd8d508bfdbbf7d14a22ab1e3da011eafbfcd4e14ae7e4fd","ord":0,"own_hash":"65da097b48f8237e8d171bfbd0053ff0e3795c0532d5522d23a92b53430956f4","parent":"s0fn2fj","text_hash":"7a97628fe9643c0fca3614a077e2e631c3fee81d3733ba1564292df65a294573"},{"align_key":"c099142bc3186ded72786ba27e9ea6d2da240fb9fd3fe79b479ecf8e734b2850","id":"vet7k0e","kind":"heading","match_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd","node_hash":"a3c82ab1e44bf4cffa1a59507f8bddc39a1ad191321ee803d0d60d96609a44c7","ord":0,"own_hash":"e813ff86a8920cef741e548eb5df545774b520d2fadbdda6e2b872a6729b9d26","parent":"b9wp3tt","text_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd"},{"align_key":"c099142bc3186ded72786ba27e9ea6d2da240fb9fd3fe79b479ecf8e734b2850","content":[{"kind":"text","text":"Results"}],"fidelity":"F2","id":"em5pd9v","kind":"sentence","match_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd","node_hash":"293fc03ff4e39d7532467e4417ffcdb15f470f0bd3658dc1c021645ad53c9bef","ord":0,"own_hash":"c55f401232b19ff1133d77eac6c72868975064f177fc2d31ab8a181303c30599","parent":"vet7k0e","text_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd"},{"align_key":"610c235321e38145abff21e31eaab303d85a6ce0d1b9340a599dc821a04922f6","id":"ytp1e5n","kind":"paragraph","match_hash":"bcb4902ec69f2a7a724384f561ee9aa0e214c824c5882c1ad92777bee680aad4","node_hash":"7667a3a4bc2e8fec1dc7af53e19c414952f9ce926b1e37e8d9adca66dd8f8d1d","ord":1,"own_hash":"494e069be36a18ecaabf5a63be7c31617ade7a5460218ca83a2de3d8d8f964e0","parent":"b9wp3tt","text_hash":"f589ee914c46c4aea7ce2de49d925c433c914121f576b81a3eab692f17f179a3"},{"align_key":"8f21603c39df123eb8680362184274aac9bdf1dbd485b3bba230960179071c95","content":[{"kind":"text","text":"The value is 42.0 at 300 K."}],"fidelity":"F2","id":"jvnys4s","kind":"sentence","match_hash":"3bcf9fa8412dca28be91d6423460233ddedd7add6c324d8a0f2b26038567d3d3","node_hash":"f5761f338b2878dff39a6ee724a75b13626dd625a0df96cf1cc6f9e8258cb7cc","ord":0,"own_hash":"7f0b9190d076cf01b51a8be863a51e9a8eeaab5d3ec8656202ff4d41578d4d82","parent":"ytp1e5n","text_hash":"3bcf9fa8412dca28be91d6423460233ddedd7add6c324d8a0f2b26038567d3d3"},{"align_key":"8e7fe271cd1bab88d86c8900fe3ffae0ce95c55af6659df1fca278d359296e2d","content":[{"kind":"text","text":"See "},{"kind":"xref","target":"tb49qpc","text":"Table 1"},{"kind":"text","text":" and the note."},{"kind":"cite","refs":["r3e21zr"],"text":"1"}],"fidelity":"F2","id":"mzwwhxj","kind":"sentence","match_hash":"9894a48790a8561966e68672fa13da20541d25a5178653720648f62cbc9ad36b","node_hash":"8f3e5338ba3c97efca4cef5c60d849757aed6334ee27ab807fa71d969089e46e","ord":1,"own_hash":"02ed6d50b8ac607b59e3f7b5116ee6143ed7e69af25b19c4037aa799bc330a88","parent":"ytp1e5n","text_hash":"5b1de19c9eb1399e54bde7e96f051cac8b337be1f307fac320292b8db7e39da7"},{"align_key":"282eea00b316a6950fb7179f6289a8b98359019e11cb23a3ff426cdecad90165","id":"exq1ter","kind":"paragraph","match_hash":"da88f35d24faf0099610c720953c4919647a5dfb9003889a15c464cd9c540fb1","node_hash":"062dd26bfb226ca9811d0dfb013df211cb201dfe7b4b25f9aba000f3212298d5","ord":2,"own_hash":"494e069be36a18ecaabf5a63be7c31617ade7a5460218ca83a2de3d8d8f964e0","parent":"b9wp3tt","text_hash":"da88f35d24faf0099610c720953c4919647a5dfb9003889a15c464cd9c540fb1"},{"align_key":"b8074a8bc013aa007023c4cce7334f1e1f22384d57a526ca22fd2f5589d5ab17","content":[{"kind":"text","text":"A second paragraph."}],"fidelity":"F2","id":"j663d4h","kind":"sentence","match_hash":"2e8313b033de5e17878ae778d6293bbd6e197a072f36acf7fe0840a690a7f31e","node_hash":"443539440dca73149ca75276492334ce9a5a6c50070137e8dc7bf414b75a27ab","ord":0,"own_hash":"acee4b6b1399bfde1dc67dea8d8c86b0db961d2af516ae4aaee26f294261456f","parent":"exq1ter","text_hash":"2e8313b033de5e17878ae778d6293bbd6e197a072f36acf7fe0840a690a7f31e"},{"align_key":"437c101749b0481e615fc7eed8dcacb536b65400c7e0695ad4cbb2bf2dae488c","content":[{"kind":"text","text":"It ends here."}],"fidelity":"F2","id":"rsw24qc","kind":"sentence","match_hash":"2888dbfa0c08fd65c58c923b920860c76e13913d9fa93b03eccbbf7bdf53b882","node_hash":"caeb3ae57d0821b8ac961c9507debbcda2b118b16cdc010b83a143a782058d57","ord":1,"own_hash":"705f77e8520c8c5ce3a7a495a20d8a9c55baa9801e49a55c341f5de79eeede75","parent":"exq1ter","text_hash":"2888dbfa0c08fd65c58c923b920860c76e13913d9fa93b03eccbbf7bdf53b882"},{"align_key":"cb0107aa0d562e8bd1188c33dc1ef5a1d07808e51edeabaa87465556d11b6ec8","attrs":{"columns":[{"header_path":["af5b51r"],"id":"pj5sk05"},{"header_path":["ajqxkgh"],"id":"nymcs5q"}]},"id":"tb49qpc","kind":"table","label":"Table 1","match_hash":"1951e0b61441d7b817b4967b36eee007f8e7525ac75fd359437eddb871e59f72","node_hash":"154c910857f33c152fdc78e42582510327055e62da9a25ab10c3891eeaf69627","ord":3,"own_hash":"fb4cc66080def0b42a06f7aa566a24957c7345c77b8d873ca5c790704a890f47","parent":"b9wp3tt","text_hash":"1951e0b61441d7b817b4967b36eee007f8e7525ac75fd359437eddb871e59f72"},{"align_key":"769a4e6d0003189c7e96c5d9b7e810a0d11c3a12832527ec94b0f86d277f51ca","id":"t2ps2mp","kind":"table-head","match_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19","node_hash":"6d8056adfb50dc0b65a2a65b47eccc5f47d5482a8dfbefa0d8a06f6641a4be3a","ord":0,"own_hash":"c5749bee3a4b981fb79cf6db125ebb416dce5a83613a00feecd9d4cf75df9bb4","parent":"tb49qpc","text_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19"},{"align_key":"769a4e6d0003189c7e96c5d9b7e810a0d11c3a12832527ec94b0f86d277f51ca","id":"rr9rtf5","kind":"row","match_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19","node_hash":"8bd1fa377ec390fdc36e17baa8c3a39d2df7ef2a53cd0c0dc745ae40e98f99f8","ord":0,"own_hash":"6c7c11bf1b6260162c4141f1468aa6869f5c33359900497e2cdb1a051488bd62","parent":"t2ps2mp","text_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19"},{"align_key":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881","attrs":{"colspan":1,"column":"pj5sk05","role":"column-header","rowspan":1},"content":[{"kind":"text","text":"x"}],"fidelity":"F1","id":"af5b51r","kind":"cell","match_hash":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881","node_hash":"59d1c20766a77bacde2aae80a134c7156fbcc708c140a3bb2d2a67f78bd9c6f5","ord":0,"own_hash":"c68933b07bc7c5b806892ae36b3e4c3205a0a2066fd6f8255578f7d1ca86dc10","parent":"rr9rtf5","text_hash":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881"},{"align_key":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa","attrs":{"colspan":1,"column":"nymcs5q","role":"column-header","rowspan":1},"content":[{"kind":"text","text":"y"}],"fidelity":"F1","id":"ajqxkgh","kind":"cell","match_hash":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa","node_hash":"838e3fba38f0797d40522b7063cb5c2962e32a019c09c19f09849ced73079a87","ord":1,"own_hash":"28df42bf1dcd44b053275ed014bd1599914f17adabc0c7fdb3e4247dc648ac49","parent":"rr9rtf5","text_hash":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa"},{"align_key":"b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda","id":"dmsstkg","kind":"table-body","match_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738","node_hash":"baf17577660aa6f0ba9c8703d30816d77cfce7dbf0ea3257ed830fa9ab94ce9d","ord":1,"own_hash":"b229a7f92314227bf225ad27010a546e7c2373f4b30b7f6ec372e568cbacb6aa","parent":"tb49qpc","text_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738"},{"align_key":"b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda","attrs":{"header_path":["rdrqkv7"]},"id":"r3e7hfs","kind":"row","match_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738","node_hash":"97a1f5b27bbfe8c9d2cec7212b519b4993506fc8080be3eff02f3aa31515a19d","ord":0,"own_hash":"6c7c11bf1b6260162c4141f1468aa6869f5c33359900497e2cdb1a051488bd62","parent":"dmsstkg","text_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738"},{"align_key":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","attrs":{"colspan":1,"column":"pj5sk05","role":"row-header","rowspan":1},"content":[{"kind":"text","text":"1"}],"fidelity":"F1","id":"rdrqkv7","kind":"cell","match_hash":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","node_hash":"87da3bd568286f3d0578d8a813496d15faafb62f4db44b07aa1c29e52cda34df","ord":0,"own_hash":"fb474321001657b59bccd3cae0987c544a4ef9a27214626d77695f4db237aa93","parent":"r3e7hfs","text_hash":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"align_key":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61","attrs":{"colspan":1,"column":"nymcs5q","role":"data","rowspan":1},"content":[{"kind":"text","text":"2.5"}],"fidelity":"F1","id":"f463wj7","kind":"cell","match_hash":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61","node_hash":"f1cd6d5339c84d5c36f8e1ea484a8d837f3200f05d1b106f6119dfa30d846bfd","ord":1,"own_hash":"088eff622eb3086d68c4433cf5e1783dc9f2a6724c3536c31ec0bf80b5f89db5","parent":"r3e7hfs","text_hash":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","id":"aw97y35","kind":"back","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"fcb8027f7c89115f048b9c5d6770847248f4e4fbc61cbc8ea0b04079b4d58350","ord":1,"own_hash":"bbb972bdc024231b505f4d8ce5e711fbb75c8b5ffd1b5d42ee3fb8586b85f867","parent":"s0fn2fj","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","id":"yd513mw","kind":"references","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"8b8a9000e984c3efeb27fc40c8fbadd7349dd64860aa276dcd2a25a57ce52e87","ord":0,"own_hash":"2a5302e2041d0e59458fea212dd51b89299901318bfceeeff227c1a07d3f5d1a","parent":"aw97y35","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","content":[{"kind":"text","text":"1. An Example, 2020."}],"fidelity":"F2","id":"r3e21zr","kind":"reference","label":"1","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"71b1af6dd6a56f24cb3b338e0fe99df06b9154ecdf4b391b00b7a7e61e23a8ed","ord":0,"own_hash":"f7c9bbc8c7456e6dc435feeaaa02cbfdbe487523b020105793fb11b91d0894f5","parent":"yd513mw","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"}],"rev":0},"correction":{"at":"2026-10-11T12:00:00Z","author":{"key":"ana"},"evidence":[{"by":"ana","kind":"person"}],"op":"delete","reason":"Vector.","target":"af5b51r"},"doc":"tiny2026tiny-j4qm","expect":{"refusal":"doc.table.header"},"id":"delete-header-cell"} +{"before":{"ids":[],"nodes":[{"align_key":"b3108c22ec836d883e5116f7ed8546fa75390eb4aa960d78f2936115f69b6826","id":"s0fn2fj","kind":"document","match_hash":"b6a4e12f700a6214bf02c9a437559e82fccdbecea7b575fa438a7d2e8c33071a","node_hash":"a05328e6d13edba652599aceb58c018dbccf54abd1f878c9f61623017960e1fe","ord":0,"own_hash":"34444fe0e6bdbf3927a579fe3286859d204ea0882a381b7769ffd4905551d24f","parent":null,"text_hash":"bd2abc746d51cf52d57a18632383245d585e29e265426967894eed99bc937561"},{"align_key":"caf6aee3882b3890996037e35d0ffdfe30b5e66653d45321d7ea0fa9135f1ee9","attrs":{"level":1},"id":"b9wp3tt","kind":"section","label":"1","match_hash":"5a96c01f314c4d8a22fd5e105bebef45df4301886cccbc2538ecefddfcb1d405","node_hash":"ea9a1409bbf0f0f7bd8d508bfdbbf7d14a22ab1e3da011eafbfcd4e14ae7e4fd","ord":0,"own_hash":"65da097b48f8237e8d171bfbd0053ff0e3795c0532d5522d23a92b53430956f4","parent":"s0fn2fj","text_hash":"7a97628fe9643c0fca3614a077e2e631c3fee81d3733ba1564292df65a294573"},{"align_key":"c099142bc3186ded72786ba27e9ea6d2da240fb9fd3fe79b479ecf8e734b2850","id":"vet7k0e","kind":"heading","match_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd","node_hash":"a3c82ab1e44bf4cffa1a59507f8bddc39a1ad191321ee803d0d60d96609a44c7","ord":0,"own_hash":"e813ff86a8920cef741e548eb5df545774b520d2fadbdda6e2b872a6729b9d26","parent":"b9wp3tt","text_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd"},{"align_key":"c099142bc3186ded72786ba27e9ea6d2da240fb9fd3fe79b479ecf8e734b2850","content":[{"kind":"text","text":"Results"}],"fidelity":"F2","id":"em5pd9v","kind":"sentence","match_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd","node_hash":"293fc03ff4e39d7532467e4417ffcdb15f470f0bd3658dc1c021645ad53c9bef","ord":0,"own_hash":"c55f401232b19ff1133d77eac6c72868975064f177fc2d31ab8a181303c30599","parent":"vet7k0e","text_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd"},{"align_key":"610c235321e38145abff21e31eaab303d85a6ce0d1b9340a599dc821a04922f6","id":"ytp1e5n","kind":"paragraph","match_hash":"bcb4902ec69f2a7a724384f561ee9aa0e214c824c5882c1ad92777bee680aad4","node_hash":"7667a3a4bc2e8fec1dc7af53e19c414952f9ce926b1e37e8d9adca66dd8f8d1d","ord":1,"own_hash":"494e069be36a18ecaabf5a63be7c31617ade7a5460218ca83a2de3d8d8f964e0","parent":"b9wp3tt","text_hash":"f589ee914c46c4aea7ce2de49d925c433c914121f576b81a3eab692f17f179a3"},{"align_key":"8f21603c39df123eb8680362184274aac9bdf1dbd485b3bba230960179071c95","content":[{"kind":"text","text":"The value is 42.0 at 300 K."}],"fidelity":"F2","id":"jvnys4s","kind":"sentence","match_hash":"3bcf9fa8412dca28be91d6423460233ddedd7add6c324d8a0f2b26038567d3d3","node_hash":"f5761f338b2878dff39a6ee724a75b13626dd625a0df96cf1cc6f9e8258cb7cc","ord":0,"own_hash":"7f0b9190d076cf01b51a8be863a51e9a8eeaab5d3ec8656202ff4d41578d4d82","parent":"ytp1e5n","text_hash":"3bcf9fa8412dca28be91d6423460233ddedd7add6c324d8a0f2b26038567d3d3"},{"align_key":"8e7fe271cd1bab88d86c8900fe3ffae0ce95c55af6659df1fca278d359296e2d","content":[{"kind":"text","text":"See "},{"kind":"xref","target":"tb49qpc","text":"Table 1"},{"kind":"text","text":" and the note."},{"kind":"cite","refs":["r3e21zr"],"text":"1"}],"fidelity":"F2","id":"mzwwhxj","kind":"sentence","match_hash":"9894a48790a8561966e68672fa13da20541d25a5178653720648f62cbc9ad36b","node_hash":"8f3e5338ba3c97efca4cef5c60d849757aed6334ee27ab807fa71d969089e46e","ord":1,"own_hash":"02ed6d50b8ac607b59e3f7b5116ee6143ed7e69af25b19c4037aa799bc330a88","parent":"ytp1e5n","text_hash":"5b1de19c9eb1399e54bde7e96f051cac8b337be1f307fac320292b8db7e39da7"},{"align_key":"282eea00b316a6950fb7179f6289a8b98359019e11cb23a3ff426cdecad90165","id":"exq1ter","kind":"paragraph","match_hash":"da88f35d24faf0099610c720953c4919647a5dfb9003889a15c464cd9c540fb1","node_hash":"062dd26bfb226ca9811d0dfb013df211cb201dfe7b4b25f9aba000f3212298d5","ord":2,"own_hash":"494e069be36a18ecaabf5a63be7c31617ade7a5460218ca83a2de3d8d8f964e0","parent":"b9wp3tt","text_hash":"da88f35d24faf0099610c720953c4919647a5dfb9003889a15c464cd9c540fb1"},{"align_key":"b8074a8bc013aa007023c4cce7334f1e1f22384d57a526ca22fd2f5589d5ab17","content":[{"kind":"text","text":"A second paragraph."}],"fidelity":"F2","id":"j663d4h","kind":"sentence","match_hash":"2e8313b033de5e17878ae778d6293bbd6e197a072f36acf7fe0840a690a7f31e","node_hash":"443539440dca73149ca75276492334ce9a5a6c50070137e8dc7bf414b75a27ab","ord":0,"own_hash":"acee4b6b1399bfde1dc67dea8d8c86b0db961d2af516ae4aaee26f294261456f","parent":"exq1ter","text_hash":"2e8313b033de5e17878ae778d6293bbd6e197a072f36acf7fe0840a690a7f31e"},{"align_key":"437c101749b0481e615fc7eed8dcacb536b65400c7e0695ad4cbb2bf2dae488c","content":[{"kind":"text","text":"It ends here."}],"fidelity":"F2","id":"rsw24qc","kind":"sentence","match_hash":"2888dbfa0c08fd65c58c923b920860c76e13913d9fa93b03eccbbf7bdf53b882","node_hash":"caeb3ae57d0821b8ac961c9507debbcda2b118b16cdc010b83a143a782058d57","ord":1,"own_hash":"705f77e8520c8c5ce3a7a495a20d8a9c55baa9801e49a55c341f5de79eeede75","parent":"exq1ter","text_hash":"2888dbfa0c08fd65c58c923b920860c76e13913d9fa93b03eccbbf7bdf53b882"},{"align_key":"cb0107aa0d562e8bd1188c33dc1ef5a1d07808e51edeabaa87465556d11b6ec8","attrs":{"columns":[{"header_path":["af5b51r"],"id":"pj5sk05"},{"header_path":["ajqxkgh"],"id":"nymcs5q"}]},"id":"tb49qpc","kind":"table","label":"Table 1","match_hash":"1951e0b61441d7b817b4967b36eee007f8e7525ac75fd359437eddb871e59f72","node_hash":"154c910857f33c152fdc78e42582510327055e62da9a25ab10c3891eeaf69627","ord":3,"own_hash":"fb4cc66080def0b42a06f7aa566a24957c7345c77b8d873ca5c790704a890f47","parent":"b9wp3tt","text_hash":"1951e0b61441d7b817b4967b36eee007f8e7525ac75fd359437eddb871e59f72"},{"align_key":"769a4e6d0003189c7e96c5d9b7e810a0d11c3a12832527ec94b0f86d277f51ca","id":"t2ps2mp","kind":"table-head","match_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19","node_hash":"6d8056adfb50dc0b65a2a65b47eccc5f47d5482a8dfbefa0d8a06f6641a4be3a","ord":0,"own_hash":"c5749bee3a4b981fb79cf6db125ebb416dce5a83613a00feecd9d4cf75df9bb4","parent":"tb49qpc","text_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19"},{"align_key":"769a4e6d0003189c7e96c5d9b7e810a0d11c3a12832527ec94b0f86d277f51ca","id":"rr9rtf5","kind":"row","match_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19","node_hash":"8bd1fa377ec390fdc36e17baa8c3a39d2df7ef2a53cd0c0dc745ae40e98f99f8","ord":0,"own_hash":"6c7c11bf1b6260162c4141f1468aa6869f5c33359900497e2cdb1a051488bd62","parent":"t2ps2mp","text_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19"},{"align_key":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881","attrs":{"colspan":1,"column":"pj5sk05","role":"column-header","rowspan":1},"content":[{"kind":"text","text":"x"}],"fidelity":"F1","id":"af5b51r","kind":"cell","match_hash":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881","node_hash":"59d1c20766a77bacde2aae80a134c7156fbcc708c140a3bb2d2a67f78bd9c6f5","ord":0,"own_hash":"c68933b07bc7c5b806892ae36b3e4c3205a0a2066fd6f8255578f7d1ca86dc10","parent":"rr9rtf5","text_hash":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881"},{"align_key":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa","attrs":{"colspan":1,"column":"nymcs5q","role":"column-header","rowspan":1},"content":[{"kind":"text","text":"y"}],"fidelity":"F1","id":"ajqxkgh","kind":"cell","match_hash":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa","node_hash":"838e3fba38f0797d40522b7063cb5c2962e32a019c09c19f09849ced73079a87","ord":1,"own_hash":"28df42bf1dcd44b053275ed014bd1599914f17adabc0c7fdb3e4247dc648ac49","parent":"rr9rtf5","text_hash":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa"},{"align_key":"b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda","id":"dmsstkg","kind":"table-body","match_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738","node_hash":"baf17577660aa6f0ba9c8703d30816d77cfce7dbf0ea3257ed830fa9ab94ce9d","ord":1,"own_hash":"b229a7f92314227bf225ad27010a546e7c2373f4b30b7f6ec372e568cbacb6aa","parent":"tb49qpc","text_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738"},{"align_key":"b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda","attrs":{"header_path":["rdrqkv7"]},"id":"r3e7hfs","kind":"row","match_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738","node_hash":"97a1f5b27bbfe8c9d2cec7212b519b4993506fc8080be3eff02f3aa31515a19d","ord":0,"own_hash":"6c7c11bf1b6260162c4141f1468aa6869f5c33359900497e2cdb1a051488bd62","parent":"dmsstkg","text_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738"},{"align_key":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","attrs":{"colspan":1,"column":"pj5sk05","role":"row-header","rowspan":1},"content":[{"kind":"text","text":"1"}],"fidelity":"F1","id":"rdrqkv7","kind":"cell","match_hash":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","node_hash":"87da3bd568286f3d0578d8a813496d15faafb62f4db44b07aa1c29e52cda34df","ord":0,"own_hash":"fb474321001657b59bccd3cae0987c544a4ef9a27214626d77695f4db237aa93","parent":"r3e7hfs","text_hash":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"align_key":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61","attrs":{"colspan":1,"column":"nymcs5q","role":"data","rowspan":1},"content":[{"kind":"text","text":"2.5"}],"fidelity":"F1","id":"f463wj7","kind":"cell","match_hash":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61","node_hash":"f1cd6d5339c84d5c36f8e1ea484a8d837f3200f05d1b106f6119dfa30d846bfd","ord":1,"own_hash":"088eff622eb3086d68c4433cf5e1783dc9f2a6724c3536c31ec0bf80b5f89db5","parent":"r3e7hfs","text_hash":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","id":"aw97y35","kind":"back","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"fcb8027f7c89115f048b9c5d6770847248f4e4fbc61cbc8ea0b04079b4d58350","ord":1,"own_hash":"bbb972bdc024231b505f4d8ce5e711fbb75c8b5ffd1b5d42ee3fb8586b85f867","parent":"s0fn2fj","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","id":"yd513mw","kind":"references","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"8b8a9000e984c3efeb27fc40c8fbadd7349dd64860aa276dcd2a25a57ce52e87","ord":0,"own_hash":"2a5302e2041d0e59458fea212dd51b89299901318bfceeeff227c1a07d3f5d1a","parent":"aw97y35","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","content":[{"kind":"text","text":"1. An Example, 2020."}],"fidelity":"F2","id":"r3e21zr","kind":"reference","label":"1","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"71b1af6dd6a56f24cb3b338e0fe99df06b9154ecdf4b391b00b7a7e61e23a8ed","ord":0,"own_hash":"f7c9bbc8c7456e6dc435feeaaa02cbfdbe487523b020105793fb11b91d0894f5","parent":"yd513mw","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"}],"rev":0},"correction":{"at":"2026-10-11T12:00:00Z","author":{"model":{"name":"example-model","parameters":"998b5161e39e01c8bc43ef81ec89141e15b7ea53b2e936707920a6097dbcb2c5","processor":"local","prompt":"9cc338fba7c62db7266f530cb555a5ee36910d41a0120a3fe7fd7de1944d0931","provider":"Example Models (illustrative)","version":"2026-09","weights":"504b2d340045b92c22682b60020c21103aae7ff41172bb632fbe305eb4af9b5e"},"run":"illustrative-run-7"},"evidence":[{"by":"ana","kind":"person"}],"find":"second","op":"replace","reason":"Vector.","replace":"later","target":"j663d4h"},"doc":"tiny2026tiny-j4qm","expect":{"ids":[],"nodes":[{"align_key":"d5d0d7484318a8bbb9ff86e72db046272df3de603cd66887e5e36ac5e346b7b1","id":"s0fn2fj","kind":"document","match_hash":"93f6f7e23166833034b23b9b3022d67440822f938c192264e97599687264ee2b","node_hash":"015f640ad2dae6fb1b737cc7675d77f7cd8f1a541f4c28671528e05cb7c15288","ord":0,"own_hash":"34444fe0e6bdbf3927a579fe3286859d204ea0882a381b7769ffd4905551d24f","parent":null,"text_hash":"76d2d3127a13daffec6418162db302f089043973b5ff98c0ad8b7cd5b37116fe"},{"align_key":"ffdcc21ef1e1688586f97ee07e3fe67a3f6c3c145ed22bdb86696b3c10fc4118","attrs":{"level":1},"id":"b9wp3tt","kind":"section","label":"1","match_hash":"4aa5b3e8da313ac2c0ca4cb1f324e5bde4ecf70b16d6ec9df9e64c59ff88d5be","node_hash":"42bfaf1ed58b27269e230020ef79a45a8073b1a5861f05f9b4c807a10b4049b0","ord":0,"own_hash":"65da097b48f8237e8d171bfbd0053ff0e3795c0532d5522d23a92b53430956f4","parent":"s0fn2fj","text_hash":"5e2a8f77bb3b78aa1c322d063368b7f74728df621421eb68cef5813ff2951e24"},{"align_key":"c099142bc3186ded72786ba27e9ea6d2da240fb9fd3fe79b479ecf8e734b2850","id":"vet7k0e","kind":"heading","match_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd","node_hash":"a3c82ab1e44bf4cffa1a59507f8bddc39a1ad191321ee803d0d60d96609a44c7","ord":0,"own_hash":"e813ff86a8920cef741e548eb5df545774b520d2fadbdda6e2b872a6729b9d26","parent":"b9wp3tt","text_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd"},{"align_key":"c099142bc3186ded72786ba27e9ea6d2da240fb9fd3fe79b479ecf8e734b2850","content":[{"kind":"text","text":"Results"}],"fidelity":"F2","id":"em5pd9v","kind":"sentence","match_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd","node_hash":"293fc03ff4e39d7532467e4417ffcdb15f470f0bd3658dc1c021645ad53c9bef","ord":0,"own_hash":"c55f401232b19ff1133d77eac6c72868975064f177fc2d31ab8a181303c30599","parent":"vet7k0e","text_hash":"219c4a6c86a716e99d5dc9611b61e584deb11b57e972d87d4b773387ebc3cadd"},{"align_key":"610c235321e38145abff21e31eaab303d85a6ce0d1b9340a599dc821a04922f6","id":"ytp1e5n","kind":"paragraph","match_hash":"bcb4902ec69f2a7a724384f561ee9aa0e214c824c5882c1ad92777bee680aad4","node_hash":"7667a3a4bc2e8fec1dc7af53e19c414952f9ce926b1e37e8d9adca66dd8f8d1d","ord":1,"own_hash":"494e069be36a18ecaabf5a63be7c31617ade7a5460218ca83a2de3d8d8f964e0","parent":"b9wp3tt","text_hash":"f589ee914c46c4aea7ce2de49d925c433c914121f576b81a3eab692f17f179a3"},{"align_key":"8f21603c39df123eb8680362184274aac9bdf1dbd485b3bba230960179071c95","content":[{"kind":"text","text":"The value is 42.0 at 300 K."}],"fidelity":"F2","id":"jvnys4s","kind":"sentence","match_hash":"3bcf9fa8412dca28be91d6423460233ddedd7add6c324d8a0f2b26038567d3d3","node_hash":"f5761f338b2878dff39a6ee724a75b13626dd625a0df96cf1cc6f9e8258cb7cc","ord":0,"own_hash":"7f0b9190d076cf01b51a8be863a51e9a8eeaab5d3ec8656202ff4d41578d4d82","parent":"ytp1e5n","text_hash":"3bcf9fa8412dca28be91d6423460233ddedd7add6c324d8a0f2b26038567d3d3"},{"align_key":"8e7fe271cd1bab88d86c8900fe3ffae0ce95c55af6659df1fca278d359296e2d","content":[{"kind":"text","text":"See "},{"kind":"xref","target":"tb49qpc","text":"Table 1"},{"kind":"text","text":" and the note."},{"kind":"cite","refs":["r3e21zr"],"text":"1"}],"fidelity":"F2","id":"mzwwhxj","kind":"sentence","match_hash":"9894a48790a8561966e68672fa13da20541d25a5178653720648f62cbc9ad36b","node_hash":"8f3e5338ba3c97efca4cef5c60d849757aed6334ee27ab807fa71d969089e46e","ord":1,"own_hash":"02ed6d50b8ac607b59e3f7b5116ee6143ed7e69af25b19c4037aa799bc330a88","parent":"ytp1e5n","text_hash":"5b1de19c9eb1399e54bde7e96f051cac8b337be1f307fac320292b8db7e39da7"},{"align_key":"e2ffdc15a0aedd399bb1289258ce99f80f764cfb4124c273c5f5635884c9a05b","id":"exq1ter","kind":"paragraph","match_hash":"67882c3dc9b34613d96420fd3ca430b8be29013086f08f4ec203460f7b74ed04","node_hash":"9fe14a64167feee947551a33ebbe4f45ee8f242fa5f6d7f8b3c1ca6419efcb61","ord":2,"own_hash":"494e069be36a18ecaabf5a63be7c31617ade7a5460218ca83a2de3d8d8f964e0","parent":"b9wp3tt","text_hash":"67882c3dc9b34613d96420fd3ca430b8be29013086f08f4ec203460f7b74ed04"},{"align_key":"58ef15516c7e769fe65626153c05a0f99a693959c9efe141b1d3b05e5d45751e","content":[{"kind":"text","text":"A later paragraph."}],"fidelity":"F2","id":"j663d4h","kind":"sentence","match_hash":"08cc4ab6f3ade7710e5f7fac5675ad9e4b6ec3eed4385dbddc01d3266b197860","node_hash":"7638ac33bece08d53c97170c50a2d42759fa8ae6970c27635f343b95c9190f7a","ord":0,"own_hash":"6681b0147e9aef501504638010d88c9d07a81fb66ead3e6bc21549a04d296bad","parent":"exq1ter","text_hash":"08cc4ab6f3ade7710e5f7fac5675ad9e4b6ec3eed4385dbddc01d3266b197860"},{"align_key":"437c101749b0481e615fc7eed8dcacb536b65400c7e0695ad4cbb2bf2dae488c","content":[{"kind":"text","text":"It ends here."}],"fidelity":"F2","id":"rsw24qc","kind":"sentence","match_hash":"2888dbfa0c08fd65c58c923b920860c76e13913d9fa93b03eccbbf7bdf53b882","node_hash":"caeb3ae57d0821b8ac961c9507debbcda2b118b16cdc010b83a143a782058d57","ord":1,"own_hash":"705f77e8520c8c5ce3a7a495a20d8a9c55baa9801e49a55c341f5de79eeede75","parent":"exq1ter","text_hash":"2888dbfa0c08fd65c58c923b920860c76e13913d9fa93b03eccbbf7bdf53b882"},{"align_key":"cb0107aa0d562e8bd1188c33dc1ef5a1d07808e51edeabaa87465556d11b6ec8","attrs":{"columns":[{"header_path":["af5b51r"],"id":"pj5sk05"},{"header_path":["ajqxkgh"],"id":"nymcs5q"}]},"id":"tb49qpc","kind":"table","label":"Table 1","match_hash":"1951e0b61441d7b817b4967b36eee007f8e7525ac75fd359437eddb871e59f72","node_hash":"154c910857f33c152fdc78e42582510327055e62da9a25ab10c3891eeaf69627","ord":3,"own_hash":"fb4cc66080def0b42a06f7aa566a24957c7345c77b8d873ca5c790704a890f47","parent":"b9wp3tt","text_hash":"1951e0b61441d7b817b4967b36eee007f8e7525ac75fd359437eddb871e59f72"},{"align_key":"769a4e6d0003189c7e96c5d9b7e810a0d11c3a12832527ec94b0f86d277f51ca","id":"t2ps2mp","kind":"table-head","match_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19","node_hash":"6d8056adfb50dc0b65a2a65b47eccc5f47d5482a8dfbefa0d8a06f6641a4be3a","ord":0,"own_hash":"c5749bee3a4b981fb79cf6db125ebb416dce5a83613a00feecd9d4cf75df9bb4","parent":"tb49qpc","text_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19"},{"align_key":"769a4e6d0003189c7e96c5d9b7e810a0d11c3a12832527ec94b0f86d277f51ca","id":"rr9rtf5","kind":"row","match_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19","node_hash":"8bd1fa377ec390fdc36e17baa8c3a39d2df7ef2a53cd0c0dc745ae40e98f99f8","ord":0,"own_hash":"6c7c11bf1b6260162c4141f1468aa6869f5c33359900497e2cdb1a051488bd62","parent":"t2ps2mp","text_hash":"887fcea6a80333c6c02ae7e79735f0edad8d811f0b61431495f796f4bf6a7c19"},{"align_key":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881","attrs":{"colspan":1,"column":"pj5sk05","role":"column-header","rowspan":1},"content":[{"kind":"text","text":"x"}],"fidelity":"F1","id":"af5b51r","kind":"cell","match_hash":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881","node_hash":"59d1c20766a77bacde2aae80a134c7156fbcc708c140a3bb2d2a67f78bd9c6f5","ord":0,"own_hash":"c68933b07bc7c5b806892ae36b3e4c3205a0a2066fd6f8255578f7d1ca86dc10","parent":"rr9rtf5","text_hash":"2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881"},{"align_key":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa","attrs":{"colspan":1,"column":"nymcs5q","role":"column-header","rowspan":1},"content":[{"kind":"text","text":"y"}],"fidelity":"F1","id":"ajqxkgh","kind":"cell","match_hash":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa","node_hash":"838e3fba38f0797d40522b7063cb5c2962e32a019c09c19f09849ced73079a87","ord":1,"own_hash":"28df42bf1dcd44b053275ed014bd1599914f17adabc0c7fdb3e4247dc648ac49","parent":"rr9rtf5","text_hash":"a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa"},{"align_key":"b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda","id":"dmsstkg","kind":"table-body","match_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738","node_hash":"baf17577660aa6f0ba9c8703d30816d77cfce7dbf0ea3257ed830fa9ab94ce9d","ord":1,"own_hash":"b229a7f92314227bf225ad27010a546e7c2373f4b30b7f6ec372e568cbacb6aa","parent":"tb49qpc","text_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738"},{"align_key":"b902cc4550838229a710bfec4c38cbc7eb11082367a409df9135e7f007a96bda","attrs":{"header_path":["rdrqkv7"]},"id":"r3e7hfs","kind":"row","match_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738","node_hash":"97a1f5b27bbfe8c9d2cec7212b519b4993506fc8080be3eff02f3aa31515a19d","ord":0,"own_hash":"6c7c11bf1b6260162c4141f1468aa6869f5c33359900497e2cdb1a051488bd62","parent":"dmsstkg","text_hash":"24cb52bc2dd0b9ddd4650c011d76b585e76c4d4ecae8cf220c7600efb808d738"},{"align_key":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","attrs":{"colspan":1,"column":"pj5sk05","role":"row-header","rowspan":1},"content":[{"kind":"text","text":"1"}],"fidelity":"F1","id":"rdrqkv7","kind":"cell","match_hash":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","node_hash":"87da3bd568286f3d0578d8a813496d15faafb62f4db44b07aa1c29e52cda34df","ord":0,"own_hash":"fb474321001657b59bccd3cae0987c544a4ef9a27214626d77695f4db237aa93","parent":"r3e7hfs","text_hash":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"},{"align_key":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61","attrs":{"colspan":1,"column":"nymcs5q","role":"data","rowspan":1},"content":[{"kind":"text","text":"2.5"}],"fidelity":"F1","id":"f463wj7","kind":"cell","match_hash":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61","node_hash":"f1cd6d5339c84d5c36f8e1ea484a8d837f3200f05d1b106f6119dfa30d846bfd","ord":1,"own_hash":"088eff622eb3086d68c4433cf5e1783dc9f2a6724c3536c31ec0bf80b5f89db5","parent":"r3e7hfs","text_hash":"b8736b999909049671d0ea075a42b308a5fbe2df1854899123fe09eb0ee9de61"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","id":"aw97y35","kind":"back","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"fcb8027f7c89115f048b9c5d6770847248f4e4fbc61cbc8ea0b04079b4d58350","ord":1,"own_hash":"bbb972bdc024231b505f4d8ce5e711fbb75c8b5ffd1b5d42ee3fb8586b85f867","parent":"s0fn2fj","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","id":"yd513mw","kind":"references","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"8b8a9000e984c3efeb27fc40c8fbadd7349dd64860aa276dcd2a25a57ce52e87","ord":0,"own_hash":"2a5302e2041d0e59458fea212dd51b89299901318bfceeeff227c1a07d3f5d1a","parent":"aw97y35","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"},{"align_key":"b35d81b0ff35d6d05ad2c187a289d3017896427dfd8bb98160bc806ac0ec32f7","content":[{"kind":"text","text":"1. An Example, 2020."}],"fidelity":"F2","id":"r3e21zr","kind":"reference","label":"1","match_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e","node_hash":"71b1af6dd6a56f24cb3b338e0fe99df06b9154ecdf4b391b00b7a7e61e23a8ed","ord":0,"own_hash":"f7c9bbc8c7456e6dc435feeaaa02cbfdbe487523b020105793fb11b91d0894f5","parent":"yd513mw","text_hash":"9a2d5d28ee47736a00d074e066bb944154f95a192360c8c04226c3d12a4f7d1e"}],"record":{"after":"7638ac33bece08d53c97170c50a2d42759fa8ae6970c27635f343b95c9190f7a","at":"2026-10-11T12:00:00Z","author":{"model":{"name":"example-model","parameters":"998b5161e39e01c8bc43ef81ec89141e15b7ea53b2e936707920a6097dbcb2c5","processor":"local","prompt":"9cc338fba7c62db7266f530cb555a5ee36910d41a0120a3fe7fd7de1944d0931","provider":"Example Models (illustrative)","version":"2026-09","weights":"504b2d340045b92c22682b60020c21103aae7ff41172bb632fbe305eb4af9b5e"},"run":"illustrative-run-7"},"before":"443539440dca73149ca75276492334ce9a5a6c50070137e8dc7bf414b75a27ab","evidence":[{"by":"ana","kind":"person"}],"find":"second","format":"scienting-correction/1","id":"hzkw9vghv24az","index":1,"op":"replace","path":["s0fn2fj","b9wp3tt","exq1ter"],"reason":"Vector.","replace":"later","target":"j663d4h","touched":["j663d4h"]}},"id":"replace-by-model"} diff --git a/vectors/signatures.jsonl b/vectors/signatures.jsonl index 8467b09..4be6e2d 100644 --- a/vectors/signatures.jsonl +++ b/vectors/signatures.jsonl @@ -1,2 +1,6 @@ {"id":"rfc8032-test-1","message":"","public":"d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a","secret":"9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60","signature":"e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b"} {"id":"receipt-r1","payload":"{\"format\":\"scienting-receipt/1\",\"hash\":\"ae17f8866a05ca1b671d96b7758984e11ac694acd6743835f107cb513c7cc600\"}","public":"RUiz5j+y0QwgOtsQpqXrlq+gy3c/JFnkxwvlWUNX4Ao=","receipt":{"at":"2026-10-11T15:02:11Z","by":"ana","doc":"hale2026harmonic-damb","evidence":[{"kind":"crop","node":"avbhhey","sha256":"942c23ea73a297e69c2ae8a82abe88d688de2532cb3f6d3543d1107c54f65b2e"},{"kind":"crop","node":"b5gd0h1","sha256":"a0b6f761fe95f8f29ef6dc37901fa85c7a62857b50b0163ca67b0aab048e4d17"},{"kind":"crop","node":"bnyvykm","sha256":"2c560caeaf914f3521fd0e3fca433922fcb9408c184c9b72bcfa869adf5ed409"},{"kind":"crop","node":"c20cna6","sha256":"bdbf7a4d9e86609675e3fc124c21ce808053a52d6bc0f35b15e1ba39027f13af"},{"kind":"crop","node":"d1mhw8b","sha256":"3104c57d9f8fb38302b057ead3bc44456da94f7c17d7c5c8f6db8732d4812c31"},{"kind":"crop","node":"ec5jc93","sha256":"321a926653b9e097987d255d9286880893d71abf895d73f1649403ed9ac0877d"},{"kind":"crop","node":"exms5gc","sha256":"cfc0e42e734470df5cfb741f92080526ef796bf48bcf05847d44f7091cfaaab1"},{"kind":"crop","node":"ganq1ns","sha256":"81d88697cd002fdfd770ee11413c550e4e4ffaa464d35841648311f278fc13bc"},{"kind":"crop","node":"hca6dc5","sha256":"a26619c3a9824bc19fddcf89ee618d9a4792d69110439f121eb717b6f98e88a6"},{"kind":"crop","node":"j6y45v6","sha256":"e689deda15dde9ad24433eb946200417473d273a1bf3136df67bf572256a483f"},{"kind":"crop","node":"jv1741a","sha256":"de60579bacfab769f614fa74d26d20c7b1aa02caf60af1479dc46b98ddcbc106"},{"kind":"crop","node":"k6a6616","sha256":"37b29d7ba293b27f913868690a785591d89ba9a4f47da8adaf764a4d5ae9675b"},{"kind":"crop","node":"m1p1n2g","sha256":"369c69758d2d09cc3d42b2424723c4fbc75f9ceb6817da81ce183be7d36f045f"},{"kind":"crop","node":"rr20tev","sha256":"f57e2cfe704d52c712b01e993e492b121ffe8c4d0174b11a0b0fa21fc5b9930b"},{"kind":"crop","node":"ryhrskg","sha256":"e6f816d93cfff8418dbb771ba03a09fb89a3b2438f97fabfc4ebef7f78af0dbf"},{"kind":"crop","node":"tkxsmts","sha256":"5d8e205660c2c59dcaff119b5671ac11650974b5287d7d7b239a9118e9171a85"},{"kind":"crop","node":"vd76637","sha256":"389742a44f1291e2dc7d7a69acd09410c92ed8a305718b2ab86b0b09b23253f4"},{"kind":"crop","node":"w0gr97q","sha256":"588a38407463e5674714899e6cf359810ccfed98fefdd2c1a90e8cb2ed0a9d64"},{"kind":"crop","node":"w264b74","sha256":"0babb0cef51933b8744f5b22d075069d51e431d3bdc08cb5e35d7822097b5953"},{"kind":"crop","node":"x3ns64d","sha256":"6bd7423a5933eb89572ded1d40d2f5baf6f6fa2f3c46791de8210f201a94b9d1"},{"kind":"crop","node":"ycwgbx1","sha256":"5ee72aca6b32e45f961f9cb2ff70408e71fc9ed7fccd28e91eb86e872041fed3"},{"kind":"crop","node":"yvkd7xr","sha256":"62fd5beecb3e76f430dfd142f443158b84657196af17173a976345a0cdd74449"},{"kind":"crop","node":"ztww0g8","sha256":"902e8ca35e1a313a81130c4c100aeb2233fd53854677b3a992fb16f744fe3151"},{"kind":"witness","sha256":"23b6b2aaece9cb0a828a2f0265539500fcf34d5195bf720b934b8bfdeccb9834"}],"format":"scienting-receipt/1","id":"y2zw8ctg5s8dp","level":"F3","nodes":[["avbhhey","c51730c0b1d7e11b51b317163ae42838f1be808b3690f196923482c9021f97c0"],["b5gd0h1","9635a750ac2acf526a4db28746fd3ed84659f4e384f5a73fef85d002b4e9308b"],["bnyvykm","13b0c5e01b52e467de5975acc898c2387fcc015d222517a865810a330a336c94"],["c20cna6","c8e6a553f5ae1377776e86dde6ee7d48a923dea7de417408841ea33b81563272"],["d1mhw8b","557a47334329925d191e772172fddbc1bd1a035eb2217240c476ee6bc43c92ab"],["ec5jc93","5421e9cf0ef3a995792963d0371b79e11a8efad519b02efb5cb88311a896d0cc"],["exms5gc","b7c47f8360eb7272d2ac0943e8bf1aec9d71cb4ea4e5e1d02f8acee5b430a038"],["ganq1ns","40d46db2088057debc3b1d5b4a3c972ff3a94fc3d5463565f98876d0927f1e67"],["hca6dc5","8cfed5a34aab28517e89e8a164f0f96c14361de83ebc800439116e83ef479f34"],["j6y45v6","00c4b92e220303ebc2bfb36aa557ac80ae4dba1675e9ed47adb82f6aeff10634"],["jv1741a","f644190803b5ea36aa24738e7f168a7fdf0d05cb5123c14a814b7628dab71f1e"],["k6a6616","90aa63a43587bdcee8e428c7dc7a95ac1502bdbcb9f49cae05c433db6d18348b"],["m1p1n2g","0847b5d75c2259257c3619e761c64d5571d3ca3932e96a96ee07e8ce68cc63be"],["rr20tev","76e06b4811a688357ac4b912172283463cfaf1b7a1f0795d274fc733a2309ba7"],["ryhrskg","525583990e7871a2ba55739e8206abac2df0f19d30c86ad74f6cafdd7c3cbe25"],["tkxsmts","cc0bf73dd84e298da0d36c4b363c8d2bdc9b6d5738d1923d14c4a9028dca08d6"],["vd76637","33810e4da42f8e65a224b5369c06fe8db254890294b7b6760808fe6e039da21a"],["w0gr97q","f738a008336ac59b2f1d45cda2f045dc96d34f0f1378c431ce6ff8e434feb8a7"],["w264b74","2ba9cea0f5c07ee9f7b47c5d541c85e92465709322869fb6c0d994ab61c56cad"],["x3ns64d","6bfc0a055148d877dbaf28b7f62565de7b6926137bf032c382282c39a4876797"],["ycwgbx1","167d1551ca64cad5b1143431c5af6d3fc24530887470b7fd265df88d1f54f267"],["yvkd7xr","aab8791a24bc4067c7e37fc5f0244d2128205e0a169e65c2c0fad977aabce313"],["ztww0g8","bda85639faacb77e504c891c035012602836171c009ecfd21584de4d6461ba93"]],"rev":12,"root":"373a7d860a14b58e5bfa9b9ad3bc916091bcb6db7556f0dbc9c71972a612494d","scope":"targeted:lode","signature":{"key":"ana","scheme":"ed25519","value":"2sraHCMlItocGta02EhvPlDW+F8rB1ZYMXBzA5lmNmtH0h+AlrNOPTbtykVSAWQXfKT2DXuB81/6x5jyNsIVBA=="}},"record_hash":"ae17f8866a05ca1b671d96b7758984e11ac694acd6743835f107cb513c7cc600","record_id":"y2zw8ctg5s8dp"} +{"did":"did:key:z6MktwupdmLXVVqTzCw4i46r4uGyosGXRnR3XjN4Zq7oMMsw","id":"did-key-ed25519","public":"d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a","scheme":"ed25519"} +{"did":"did:key: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","id":"did-key-ml-dsa-65","public":"2841528a95e5cda35d99bc8d797774b577b254ca0680de5a07b0fdb75869b5a6a5b9f6e02cd0300fa485623ecc20ee4708a3d93fb4297a4fec246e170c6a5840b1dd6b6f01f138aa8045223d07a3ec11811f562fca76d59feb7a099015e9671acbbecab98c60cc8d1ea6aec39e54079504d970969ae75f028ee17678a528c3e245b2ab08fa54a3ab0f02d73d75c4911fc55c090086699fdc8a4dcd521dfbdc29e484534a9c0ac13984524aa714038d88bcdabb878785d3e7574d74be4339b44ce6c97bf1324a1053c30d1b5a8c1c84dd5d9b94cf7fd0c7e9310d57f0def75377d2ccbacf9c27b06ed27655f7203a16ec5d7995d9b9c202ea436100db185f9b9c4c64f310d177b12ddf5341afd5fa30d1601aff49e21640b99fbc36e6571e55d90d852fe59f7f3de92e8d3104cdeb6cb3b1451e7ea9efc341a0d090dc508bfce5fc2fc1f10afda7c7f5136fe7e668431b735f246a8ecd0e0ecbc39fc121496a31a4feb65cd618aaff9a993bcf99d7e21253af766be2255c7ae38365edb59ab155699016202a40331a7e5f3efa8552161534bd1430bdff1628083d091f8755e834dc869abc5697ae1c3edc6dfd75a85ed183f77b0749e3cb819ddc8975550274b267ffbfd0e2c17a948235f815e3154329e902391eab703f35eab756e398aeafb8419d757296600e6ef1f64601dd6907c6fece16c8221858dad70764f8d8fd5a8f031fc4167a1d6173ca99f415feb3ad26eb127667752503e245ff8247903b26b0000190de981c17a3fd9691a9e73777721b3c9818824378520c1088979a2e493a070998b7a988d2a58afb4273e43e3c33040c7eab4b2d4f28c164d31b2987b2e696a7e543f3468f1246ff2e50c95c5e353ce4c5f43c276c6d8099085131417cd3aa0be99a6f2b3429008a89ea75cd13dff6315080e0b2d38897bdaaf23b3a8d1194ef52fdc110aa0d18e5805126979e8e03dba6affb63ceb7532bfa99abc64b36ba7d71fed52a14cb5fd7ead8b1034195981dcbf039c8c91786f53b132929d79b8a379c8f0f9e4a55432cbbb546d8028d1ff9715db8ad0fc2ce510f24d0c99744297c5544b2d1dad0ef706cbb0b9023c0e28e057ef60ae0e25db530e1bd0de12e8db69d0b78c0579e2789756c88d6a60567750b0b80e0a2c6dc53ae7a002d612e589d068b11a17e1234cacfb34117e22eecc1695fc013d2919460ed5a64785a733d5f584775988c2aeada2ed3b0405d61b7189140f252cae3e4699a2b5b244eaa4fa454410899f46b6e594286d400a4d0e2adff96cf666f8ea43dbb7e9a16922dea32858396b7a270b9d9ee401c1df90676f1d1a92e23d50001613b6e6e048fd55a8c27d2ecdf29bade423614b86ce9fa74d63b9d369f0c6cb6e4e96fff3f954126d5a56719a6d497f1e8c816b4eda41d878ea6889682dd6e741cef545fd1a6677f9f94bafa6eb425e2a2c84c35afdaea590acb45f1cbe8dc73d05af78608ae81bea13efde522104245bd273729e93d650d1c3843e7011a25446d40f834ac32c7da33988291b343b510b5dd7ff1e3250b316e8e2be04839a728f471ce66602cd0b0e21a582e7b660680e2867fad602ba6cd4d7377104be911d62ed41a1152d9c6d636b37d84f4b3c6cac55ebc974fd1028ccd26905937d62eed6a41d0982258ace7d1c4f6794a49abfe48a4a3b949479bb8df918ba7f9c0054209d4c5eb12e827a44e7175d005fdbb20f83994f0832cddf77b41b8e4647bdd9fccb42580d333fe35403b282395b4fb400918da2176a84c6597871b847b1e3c957c714159f86ca6eced217416d692decfdb15a71e95e67e6d0c88c6928b88efd9b6995f758dff1bfd4385e408f912ef6e04806444e8a208e185e982ee2cbf0e2022242c5d5edc196bd5d1a915b8dfac356eeede65a3f724626a1b1765eef33dc63c180c4e6f44474b4fbf765ff3b3de7a3a63ea0304726b62e279bf981adefa08fce1a886fff9ab64c2019721fd3c2622f06256a41f8bb8d09cdedb776457f5c82446f20f14f1bf69f2df8dc3e42a380aab4e451a353d93726ba1920a632ea941339877ee7a2bb8f92ebf17719cb010b68217fe4ada5bb377997e6c8e5b39a847c13671f2fbbb9ad6bc1491af8b585d9c6af3618f7424d4c5ac7fba474ec3f96a2ab2b8a888cf133d85f8119cffce97ef020819c0b3750474788164c3ddb1a74711391e5e23b9a6552081f1b4f1f2e857d455e3919c97d18c58b49b7964dbc701183289c4cff593a69ce51c9b0aa4787750de5a6aed99ce677f9b78199bb5fc01b654c7bb6ea52a1d0940965c7300cafd103fc158a00b0b89fa54a314675c183cc18c412c69d03b2805849830f51b03aee3e2beb79af40601b2aedabc49609785d651c7b48efce8b45208cf3954d35d416b497a8f381366d4d6a1ee39173dcf936c2ae56332aeddefa2132493c66fce9dc7ddee01badd409e5808b9859b83186b0fcb2eeeec17ae5815bef17fc62ed87f05b859c6c433dd82774a1a2204da1f1b3c73a7f2775a94665bf43a445c716481a2e83e80c3975f0111af6b7a0a80c21e9d13a196839262ae542c84bcd2688b5a1074f665309973a693f1c76535d1765df98390a94fb45ebadb87e86511b01ab9b8ccd871b379a6314866d15becefd900169020ebba4729df1b9b10ea5f18b946a6dee6a27835f8da8d2a6a0c1dda4d199abdc43b47fd98cc35645545e827c494ad84ced17701667e2fbdef1b22036c7981daaf9877db22","scheme":"ml-dsa-65"} +{"id":"ml-dsa-65-nist-keygen-26","public":"36db0b5dce98bd190cb139e80b71b49c7d7040b71c5a1f3412c46bde939192b1b57ccb88ac2714c1240cb0eb62c689e031aea3d9f3eb3ed7bfa45931d288dcae3413199b31a7032560dce8a61e195d13a1440615c2f3aa7dd28c5b1b742bfa400052186721f13d3df9dcfaee348b10d66913c7148913e085e1a4a03c659398dadc6a8e0e0c1a7f9f44d30436db90fd65a6ab8f36137338255653baae8da21526a333426dbd9f76cce0f43212643e854d772018b35ce726bcaaa5ab0651baf8c122e13929bb35b6e4963df2595fdc7237cdaa7234bf776b07f353ccdba12ad3e025138e3492d7f8e929db55dc23e23075f66d57a10492e6a10ae7b758acc2291ca18ba1ca07a5b574ab6d8aac18b9524990ad2f110225b7d82f696300a660a166ad35b3c57ecbab77117c79656fa8ae2a19a7defb2afd2af54683d043be0f933b8eae0d591448ed55d00068cd9fe10b067fcfaac53aedb1e9b667e36c4e30231f85c7aa0a474af2fa4776226f4479555e155528d78b98183cbdf7fae4e7301140f163eb71e991d15fad4a0d2f25a5a62fa2e9bcc823cc2927662e40c538213ded9e2df508e911e4924e507a50861fbb050edbbf56d937206f8fbc6f4cead4cd10d06b73aadcd4aa39703a7a2bffae68b7baa47341b699da9f3b167d4d90efee0a07ee3529a3b5e8648b9cb07ee973e1d8dccf1d16e95092c4a0184ccb4902d6086d9f444aca5fa45f43ca91b351e82585989ffcbd6d2c3471d6b8593aa46f29d0dd9b44e8aa4d8f9a0bc886bb7982c56aab11e23bfdbd8bc674732fadacacae25fa416b2d0cc7743827293336507da4b14c1f0aa2e929af975466dadc89a016f33a0cca2d5c08114cf04b02358805a772536432c44dbe9886130d2d3a0ffa0e175875a2207686f5e562b879eb2957573ab706b942468c20cc69bc566d29d9f151f3cfae71cc97ce4a30722d4679fc1c089b5009935931ee60aac5496b0fd5f24e514c0e20fa1dcc7729184a50fc85fad1d2f32f715fbf55666e49f5a19761f2dd1aa5d1a33c7916eb6a794981c0334176abc493ef30d9eaeaad42e705989dcfcdeb578529a700bd14076a348a2062d6483cc63cd7f55136587aac0e531a06eb2de74e61cfcbbce18f2ada5a741f683bf101f71432ee659dd1508e0c8fb2400e0ccbe435da3466d543d3ef5ba369e125c0b84d855efe6d4a22ff929a7a7a984e448d23871e09b88a0bc3f3b7da55dd2edfb5a6daa102819ff50cd4dccd0a95d2f27354668065d4a56c31fb18b92b2a8db2c6453baa9333aea6eabb1bd6411d584dd5900262057a707f81cc5137dbdd9ac1079bb98da78a8e4bd1b2e0546c2b3d956fcc280d37d855e31f1e4315b387a742280f057f3219eae512884ae7ec4d2e3a72265b1d0163fbcbf616b2e289b0eaf9c63437d50b7b50ce408f5b4562f2abf510c19f5e8a0ace264db6e0f2a69a7d0b4a5e62a2b964f08c8ffe9c295f5773bdd7fab054a13822d428fae28ae5e4adc9d9f6e4dffc457a3e49f0bcf62b32961c4667b60960452afd917fdd00d954fa30c8533e5629f90af85948dc1bad889f91832ddf9b738254c9e7939726c37ab4557c2ce363c1391816c467537b471e5985e8084c277b62be514922d352e20689eabb3eb91c343f36e77b152d5e85afd088f4d02e7024b248a7420f58c7ebbeb480cae39b56164f5acd37a4f56b3db6e1cc6b7c8c96cd3c44a69d9ac99175257bab7fd83c5b574b5c9702c0fd13a5b176c60f82d2dfff50c2af25d96e0f8d27ec818d499e479b9642aed4a4a0e6af5f14cc5e1299eabae055ef3c763d1e350e2d76e92cee47a4233368466a298afb4ca108a325d2a4f8b79f21ee7349c1c186ecd7897f9886cf27ec01b05388870484867f84bae2c016d04a3762241907c4de207798dd125a2cebb6c2982f779e04117bdd65cd7ff0361a59d3ec05f6d903b6d15554beefb6d40d96a0d4b37ae76c69c1b9592088b7db878f95abedcb5fd5423ed93df1b27d01a4dc9f4438e7c55f35b0aeb7395b08e1ecbf15cb2b61d043c0454aeaef2d487093fa0d7de3fc6caf084b6a0f15a5cb05d9340d4e6763983dc45b7828539c77a60d5e081a03fe29949d916392b6d989b4c8c047e3635a76ba88ac18a7a18ccff5c7e06b02a43d2dff169fa449739e382bd020e0963c14a9acae6b6561c722d2bda183f33ee6a904df0207f5b098e56335cc063f9640c4997f593218d502f6b382354c73979e93c4b1b2471965ffa5a0dc8ee8eca9f5697e7ef08dc0eefd9ad75cd4122194b450201dfd73cda46a7b2478df66129fbb9c75b774213f9615bd990f8d07501fed440fd25d6cb912b8ecfa678d887a4ee28677e6e0491d49efc7a3b34b9815c5c22983da280d0afde2324f5281bc8b796ddacfd82723bbd9aa34b0c96075b36848591e47b80086897846fa76d092bc8bc6200837bfb5545039f8602b7ea49f63c0c3b8317eeeb7612f8e818dde09e43c7da76fd2ff6847906a45da3d993e8eaed9fb3b1e579d8cc6900c89522aaeb0b4a80da1e66ab8dfd62dfe4e4d77a3a77e5bd669207c70aa8537dd6d80a647b0420d79531a7456052c3c989f0f08de3d343c40067680b39ece95a17aac8a622d1d5d95b38ca0f11d94e5b0a7634eef4055517ace79f0df1d7c172e0246abb2ab6b135ee1a38a3b84f86fd7c3caf178cd4446d0b554256ad45c657e1192070aba7df480f489ebdf9753a79ccbc6aa893913c5f1271f1c6035","seed":"a991fd42b071d49c48ae3e75c647459e0daad1e1ba356a04801912d3294bcff8"} +{"id":"ml-dsa-65-sign-empty","message":"","public":"2841528a95e5cda35d99bc8d797774b577b254ca0680de5a07b0fdb75869b5a6a5b9f6e02cd0300fa485623ecc20ee4708a3d93fb4297a4fec246e170c6a5840b1dd6b6f01f138aa8045223d07a3ec11811f562fca76d59feb7a099015e9671acbbecab98c60cc8d1ea6aec39e54079504d970969ae75f028ee17678a528c3e245b2ab08fa54a3ab0f02d73d75c4911fc55c090086699fdc8a4dcd521dfbdc29e484534a9c0ac13984524aa714038d88bcdabb878785d3e7574d74be4339b44ce6c97bf1324a1053c30d1b5a8c1c84dd5d9b94cf7fd0c7e9310d57f0def75377d2ccbacf9c27b06ed27655f7203a16ec5d7995d9b9c202ea436100db185f9b9c4c64f310d177b12ddf5341afd5fa30d1601aff49e21640b99fbc36e6571e55d90d852fe59f7f3de92e8d3104cdeb6cb3b1451e7ea9efc341a0d090dc508bfce5fc2fc1f10afda7c7f5136fe7e668431b735f246a8ecd0e0ecbc39fc121496a31a4feb65cd618aaff9a993bcf99d7e21253af766be2255c7ae38365edb59ab155699016202a40331a7e5f3efa8552161534bd1430bdff1628083d091f8755e834dc869abc5697ae1c3edc6dfd75a85ed183f77b0749e3cb819ddc8975550274b267ffbfd0e2c17a948235f815e3154329e902391eab703f35eab756e398aeafb8419d757296600e6ef1f64601dd6907c6fece16c8221858dad70764f8d8fd5a8f031fc4167a1d6173ca99f415feb3ad26eb127667752503e245ff8247903b26b0000190de981c17a3fd9691a9e73777721b3c9818824378520c1088979a2e493a070998b7a988d2a58afb4273e43e3c33040c7eab4b2d4f28c164d31b2987b2e696a7e543f3468f1246ff2e50c95c5e353ce4c5f43c276c6d8099085131417cd3aa0be99a6f2b3429008a89ea75cd13dff6315080e0b2d38897bdaaf23b3a8d1194ef52fdc110aa0d18e5805126979e8e03dba6affb63ceb7532bfa99abc64b36ba7d71fed52a14cb5fd7ead8b1034195981dcbf039c8c91786f53b132929d79b8a379c8f0f9e4a55432cbbb546d8028d1ff9715db8ad0fc2ce510f24d0c99744297c5544b2d1dad0ef706cbb0b9023c0e28e057ef60ae0e25db530e1bd0de12e8db69d0b78c0579e2789756c88d6a60567750b0b80e0a2c6dc53ae7a002d612e589d068b11a17e1234cacfb34117e22eecc1695fc013d2919460ed5a64785a733d5f584775988c2aeada2ed3b0405d61b7189140f252cae3e4699a2b5b244eaa4fa454410899f46b6e594286d400a4d0e2adff96cf666f8ea43dbb7e9a16922dea32858396b7a270b9d9ee401c1df90676f1d1a92e23d50001613b6e6e048fd55a8c27d2ecdf29bade423614b86ce9fa74d63b9d369f0c6cb6e4e96fff3f954126d5a56719a6d497f1e8c816b4eda41d878ea6889682dd6e741cef545fd1a6677f9f94bafa6eb425e2a2c84c35afdaea590acb45f1cbe8dc73d05af78608ae81bea13efde522104245bd273729e93d650d1c3843e7011a25446d40f834ac32c7da33988291b343b510b5dd7ff1e3250b316e8e2be04839a728f471ce66602cd0b0e21a582e7b660680e2867fad602ba6cd4d7377104be911d62ed41a1152d9c6d636b37d84f4b3c6cac55ebc974fd1028ccd26905937d62eed6a41d0982258ace7d1c4f6794a49abfe48a4a3b949479bb8df918ba7f9c0054209d4c5eb12e827a44e7175d005fdbb20f83994f0832cddf77b41b8e4647bdd9fccb42580d333fe35403b282395b4fb400918da2176a84c6597871b847b1e3c957c714159f86ca6eced217416d692decfdb15a71e95e67e6d0c88c6928b88efd9b6995f758dff1bfd4385e408f912ef6e04806444e8a208e185e982ee2cbf0e2022242c5d5edc196bd5d1a915b8dfac356eeede65a3f724626a1b1765eef33dc63c180c4e6f44474b4fbf765ff3b3de7a3a63ea0304726b62e279bf981adefa08fce1a886fff9ab64c2019721fd3c2622f06256a41f8bb8d09cdedb776457f5c82446f20f14f1bf69f2df8dc3e42a380aab4e451a353d93726ba1920a632ea941339877ee7a2bb8f92ebf17719cb010b68217fe4ada5bb377997e6c8e5b39a847c13671f2fbbb9ad6bc1491af8b585d9c6af3618f7424d4c5ac7fba474ec3f96a2ab2b8a888cf133d85f8119cffce97ef020819c0b3750474788164c3ddb1a74711391e5e23b9a6552081f1b4f1f2e857d455e3919c97d18c58b49b7964dbc701183289c4cff593a69ce51c9b0aa4787750de5a6aed99ce677f9b78199bb5fc01b654c7bb6ea52a1d0940965c7300cafd103fc158a00b0b89fa54a314675c183cc18c412c69d03b2805849830f51b03aee3e2beb79af40601b2aedabc49609785d651c7b48efce8b45208cf3954d35d416b497a8f381366d4d6a1ee39173dcf936c2ae56332aeddefa2132493c66fce9dc7ddee01badd409e5808b9859b83186b0fcb2eeeec17ae5815bef17fc62ed87f05b859c6c433dd82774a1a2204da1f1b3c73a7f2775a94665bf43a445c716481a2e83e80c3975f0111af6b7a0a80c21e9d13a196839262ae542c84bcd2688b5a1074f665309973a693f1c76535d1765df98390a94fb45ebadb87e86511b01ab9b8ccd871b379a6314866d15becefd900169020ebba4729df1b9b10ea5f18b946a6dee6a27835f8da8d2a6a0c1dda4d199abdc43b47fd98cc35645545e827c494ad84ced17701667e2fbdef1b22036c7981daaf9877db22","seed":"9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60","signature":"1437049a0204569bffab45670ce5106cbe9bef73c8db27d5a734005ff79d9cab306270ffa510bfb7c71ca3f74a98a336e3b98d690501164f7a5e67c41b497b0592a727ebfae69d7e89b303266d4e35cb583277d8b9793b2fa88ed8a3cfaaeb12ddee4eb90ad703a8b7eba2d9756b6b2b932062111319a392ee606fedaaf60644008a4b247b69d10ce5983c186cb113d0fc1b9466279d0e5814ec4c1584c4e6918b8b6f99d463f78503cf0cd35ffbe32885efc077cd3097b432dcbcae3848c7bda4c41f6a6f097104f46501faa2a0692612e950f20f349fe071d834b2807914638bc33fb123cd0c56ae2e2001fc4b7c2dbebbaff52cc9fe883ade549425ba0e08c69246a784e6c71483f5f954a0c4bf4818569afa921b1019d983e2f929d2b4f79b5e08b7dca7508c8c4d32866f93c77eadeca0d6c300118441e2c76630f6e81e205c4852dc8504e71d71a7e7566fd898180d201bffbb0d593787bfb928b02c53c7d4255c708f4c52787b18c403d87ce8813e1b80ca76ca00dee932e69f8cd2b8fc5ec37c21de3d327076b7e38fb017dd4878269d78ba831b2453f402b21000be7208d7d90deee91ef6248d4797babf58e7339fbbbb3d2716f7dafdbc0d9c0b7075f1db4773d7f93c47e5e95bf988cf10605ad0e58f709dadfcb9a0ace88700cc944100c7d6e3e49f3d9badd68b46208f34810c74fb23c91302d6616fbdfc551193f4d2c37412d394e279960a0ddf0db7b15d601b80d44e6169dc9db4095e794bd2c566301e97e4e2d6648aa120fe44362d891d59f24b56536cc75af735a8280432347cea646eeb516fd84208756f772a47908002c5604de626f52b055e368b3b065db5cb36fcb0ef694f354e5f47079e3f53af537fd7984aa43d7cef5ed59e8b5bd26730a046ad1a0d867731697e7e26d2128e543f051125c1f0ba8a109eebe4e17f27784a5014a8398bc3105f63bae2dbfc030f7ea6718453683721493c6939d5b8ac164493f11357ce7e8ba58a8a5358a1b73137858a02e97bcd12a30c72ad1e854057f24c586feffd3ae231aaf31a2939efc38ae4359cec293a28dae7d83584960268ab028ae2a7e93d91ebebb20e9cd71cf2f723057bb7ba897a800bffb8d450750b54bdfc0961d8e626dfcff88a2bb6083a893f0250d75754895ef021cf3c4e5666413a9f9ea4914a2925b1d912588f823ae5cd42384a1de3d3871779a57c2c9d3a8c84b4eb8523b627218e71d09d2c229505bd00b234491810ebdf29c94f31e7e948083c3c593fc79347021e878fbfe04dc57777235864af54991c0fff3124aa959b03fd8c5e1dd2755d9f3b678418518af22db312ad7ce3a642df4ba2d061b65a22c9519e0cc9febd762bd3faeb766301f162069c2b4f0b2668997b49752a2aba948e508263552fdf3b4cceda5cc7aa12fda36398dad1d43b6340444863205b7076ea77dec49686ecd244f17a8885c9f4f1942301f2f683c08a349a16a000c5039fd340bdad389018267abcba45fd24c355d90a80c1ace53b16208b7f7c4f47af373a0afdb2a422589f4e0908342ee8a14b8d04338c3f33105e0e2f74b33af39fb16487f6b8c75cab27b16acf6b9ad22fb3fb82a1dbdd011623e68c1d5696209ab934ede427f9b570a4bf1004c5377d87d7641ad673a4f4bb631a43b8045e01c7ffd57054ae7a6c5a2f1599b70cc232ead087a831b7437dd2cd7197e14e1319e9efe24420347809c881d5d2938e4fc7889dc60177e24cf7d19c7363b74ec36dfa493c6b8eafc02a443527b5bd4a03ee974f778f157deff8ea1f2f2d4396211e79073bfc82298d6bb6ea35647a0c0eee73642675b073548fe672985a64f447100600f47785df7cd9b15396dce4229a8f9a6f8af7caed2a33f6e20110d84aa81e43b11dc9e75c819c6af7609d72877d9c3638afaf4769eb82572c4fdfb3a290901da89cea51559f8f24bd40272cdd315249c08809d0ccf96d07124c9efc45abe5ca35b540859110cadb4509a81521c1703fa2b4cda4b5931fb8533e20c1f00ad9545892cb532d4358d1f1049187338f7e6d44da426ca7e7d84a2919ff62b73b4b43c4d2790d50ac455e1b40395d1ed7879373dc4d2676e0549385542c7ffb24b89f93d582d7cc6dc0287314b860e7c89d55fe993ee64ab99891a184aad2f7d75247d49a96eafa088e91a8fd96303a8f349b0c976f9ff534d38bd0f9f93424d66cf7054b4001bb606876785b4b99a89f52e7dd5690c74a6b4440aec16f4b598fd77362bc5e0955b4a66383eb6d06d1fbe586928d463c2a21b1fbf0cebe936aca03a0f12c85365bd9b865628bca23e3ec5ba0652be04a3527c7d8be2ccd3fdc66a53b1deb4f4875c3cd9fbf27959288ea025d5b401920e6b84550a2fd4ae5f515c4461e3625355146ee5f965c21b293c71c10b50558230061ddaf5a89f1c8be8d1e045d94608d9a644bb9a1a0de2db984865d57e2387f62163f9c5d33d59995a11fb6f5b8cd4b3e30c608a83d80903e8a5378bea2d5614bfc929ec0ad1ddc54c28bafcca0c474e802abf74c2587248b32b4b0a2f1d6f0f607750d7c7d7ede4632cdee0a74603043df10fce2d7d49ef54dedff4f259d1181d9099bc27d8defdb684caac6cdafc21535a1dd2d5577a3b35fe39807fe61366bf267e570614dd65d104e68c8a3d0d6134e23380b77d4858841b5e83751292fbb4e654e548e5fbbc25b6b7e8a298ffbb291b25dbc18c1e7d0f190b29abbe594cc0f216206a833a5ab178880313f6eab45aca60b84f6763a1a187a2b18720144ab19a5456d631281955039a72aa40779836b4ea0c2d93067ec1a5f41689557cc71169915a7626ca8ded41cf975a6ac70d7fca0392f061b508db52ec198742be4ebc36ada764df932dd224d470ee23a788d4d61dec0cbf3246ed36114605b19e86ea1262a8d8cfee3fc9b1c8d57bdcbc4c4e00b0ae902993151afa85b1c6aed47bc9e2f9220d09201cba73e9f15a5a670cffa2d2e19bc0bd097e45703522a7f190310051dd147916b6e9f2b414d80c0f2075ecd1bf2d5dfb7ef685e023366ebb55e14aba2c4284be29d04b017fd0d8c97bc064ca7d36aa2c0ba7aa9675b7876bb2a2fed7eec47fd88b96f80940aca9b18156b34748728edca2a32f8ba3eb5130bc7358d2c3b1a1b6edcb504044930090cbad65fa571b2f856a0ca4ffe3bc5f7f2d4077a24f8c56379b32cb00378beec412b314e4829c2bf412fa3e420b004905a3fce956acc2eb78cd7d75ffbed51d5abe8e9176aad9643261d4329c6b6425dc46bf5ae20afd1b046ba6caefb13212eaf900fc3c8a160d90fa9d906a771ebbac01537b6cf2c9e7266ca2a6406ee65c87ff120325eb502ea7a8e7e530a75fa8614d3d9f5563adb088a56b885938462b0605cca923ba4ba95c957adb35bf9b52c5caf25022171dbc8a0da2ceaf8aa18c689f3d3c4f5cbc62efbb24e899e5937c0d2f04e635b906269794311ab0915553a3ebdb27672214a63c6166f558e17f21d50c4e3cb3502134416280b58e1ed3ce96324b4ad5d7605c87a51e9559e02bd5bc3d490d7671399930c4ccc56a42c5618ef5de38356b907d4d9de0feddebf4e3c1692091ebb63361ed99d47a06c1173d623ee4c708f767ff36a6c238aab6ae963b8d8cb92a43b1ec2bd3a9c053bb30ff1dbeab3c4ee01080dd27866a7d6ccb4a4bd05c0e6ebd04b1edb2654ea56567c8c1da8e891255ae8e3eea95e0f04544234833115622e176b1af8ef594a53051e2013243cba334dd013b823209fb75121e746874aaae5747d6c5f64f3854ab8e69b39247b5a435c612f1b23fe523a56789901e67bd3e2c98249eda293d7e8d4fc89c8cc3e71503179ea1ca064bac5629b7483208a3df1bb2800528a6ac1d430e832665db3716dec62e0d3445a7b334d09cb03668177b6d4abfc4241e38935755db8699203b1a6e32b3b680642d27316288fffe607b64b69842012b265990c99fc836daf7840d329a405c9e2b9fc20a6a37e98f6468716557adc86dd471ec4124683c3c961b1e26c8a7a63e40829ff023b0ee050a19f1c90c0e9d326216c2eca8423d409bd5a1823416e32e540bc04bbd0b6287b7581ecf96b4fbc9f87c3e06edc19dccd22ef5aff5993973105e7507c34210caace6190e199b50ceeea18a200911ddc62e2e4948f001be2392fc56e2f1583c1082a7dff91715594015ecd8427669fe630768cd8d5a110efe4921bdb8d05a55f30b29bc853d5f74d6f1dcc2d06638b17677d810bc52d56f1ec37ad0b479d4f54af5d78cacc0988521aa5b2f6efbbba0cc53b26318b1f8ae1fb1700f760b8adc9432979ca7c521780da13748997cc20b9d5935ec3c57d5104be411a4124bf946c2cd6951fdcd4e328cf41148937badbc670141cea9b36d3e4fd2c657d0adc9b6437f882fc30c0b530b75dd6487ce98641e18d1931bb98506c4cc6f011dcf33904a21973be2dbdb7027d43ea386f50742cead9eb3a54616afeee67064912f13872b28e2a51de5e8d4e89a6fcc1d60029395e77e3d0be16e771ea1e824c6312cd18156482f88c086731b41ad95f0c3f71167f35f5f192108ab73b84b0b3b8c7e1e5f42d3b8db5cdfc2b3e545e9cf20d346c101b4c5e888dd2fbfd4a5f8388000000000000000000000000000000000000090f15182125"}