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: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/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":"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/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: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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/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":"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/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":"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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-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: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/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: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/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":"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/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 9fcb900..694972b 100644 Binary files a/fixtures/invalid/zip-symlink/package.sct.zip and b/fixtures/invalid/zip-symlink/package.sct.zip differ diff --git a/fixtures/invalid/zip-traversal/package.sct.zip b/fixtures/invalid/zip-traversal/package.sct.zip index a555eb7..2b53833 100644 Binary files a/fixtures/invalid/zip-traversal/package.sct.zip and b/fixtures/invalid/zip-traversal/package.sct.zip differ diff --git a/fixtures/keys/dana.ed25519.hex b/fixtures/keys/dana.ed25519.hex new file mode 100644 index 0000000..7264c58 --- /dev/null +++ b/fixtures/keys/dana.ed25519.hex @@ -0,0 +1 @@ +d561c68d0b5b83e0086a9a59170e6e93f47080dd1366bdbccddae57f8252337a diff --git a/fixtures/keys/wit.ed25519.hex b/fixtures/keys/wit.ed25519.hex new file mode 100644 index 0000000..6ca5589 --- /dev/null +++ b/fixtures/keys/wit.ed25519.hex @@ -0,0 +1 @@ +f3c3fe2604b52fd5c7115392be3c9dad905af954a210e7808f67bef92d31f82f diff --git a/fixtures/records/anchor-keyed.json b/fixtures/records/anchor-keyed.json index e1b53ea..47bae5c 100644 --- a/fixtures/records/anchor-keyed.json +++ b/fixtures/records/anchor-keyed.json @@ -1 +1 @@ -{"context":{"column_path_mac":["8de5d9cfdf71c50b161f357ab526bc7ffadd407c49c642a10112bb41cc4e1bc1","31824d3d0594c075074ff3a88e4c571e1f856218179a809f4f69bd5891ee7ff8"],"row_path_mac":["1db463578fc748d9686a5a1355c2a08086f4f331b546ec3273dd5e49ff1d178d","74bdccbc71693a4f8046f2e92bc477ff04fc5e04a8998e3ee189ba6b72b971e0"],"table_label_mac":"6943d614b69c7b2458c337ead13591262e932934151c27862ec0d47e4d560641"},"doc":"hale2026harmonic-damb","format":"scienting-anchor/1","keyed":{"context":"layer:smithlab/kp4m2x7q","pages":["9dd865c7a19b44dc97a5d236859ed79174b25b72a5781d8df4f091d096de8908","1feb6882031349ca5eee822557bab0b6b0436a2d132ae8ca03babac2ff1948b8"],"scheme":"hkdf-pages"},"kind":"cell","node":"c20cna6","node_hash":"3efa98f63b493f7ba3ed01153859d3e0069fc39e1c51078b1239dedf0a4fc601","own_hash":"7bad196fc9634da03db3e418dfad50aa6b193acf9047e31db8908d9466c5ba40","quote":{"length":5,"mac":"0d8d4fcd55f1a4cfd7f254d597b7a5777b8865eb371283c03527ac8195ebb5ac"},"rev":12,"store":"smithlab"} +{"context":{"column_path_mac":["8de5d9cfdf71c50b161f357ab526bc7ffadd407c49c642a10112bb41cc4e1bc1","31824d3d0594c075074ff3a88e4c571e1f856218179a809f4f69bd5891ee7ff8"],"row_path_mac":["1db463578fc748d9686a5a1355c2a08086f4f331b546ec3273dd5e49ff1d178d","74bdccbc71693a4f8046f2e92bc477ff04fc5e04a8998e3ee189ba6b72b971e0"],"table_label_mac":"6943d614b69c7b2458c337ead13591262e932934151c27862ec0d47e4d560641"},"doc":"hale2026harmonic-damb","format":"scienting-anchor/1","keyed":{"algorithm":"sha-256","context":"layer:smithlab/kp4m2x7q","pages":["9dd865c7a19b44dc97a5d236859ed79174b25b72a5781d8df4f091d096de8908","1feb6882031349ca5eee822557bab0b6b0436a2d132ae8ca03babac2ff1948b8"],"scheme":"hkdf-pages"},"kind":"cell","node":"c20cna6","node_hash":"3efa98f63b493f7ba3ed01153859d3e0069fc39e1c51078b1239dedf0a4fc601","own_hash":"7bad196fc9634da03db3e418dfad50aa6b193acf9047e31db8908d9466c5ba40","quote":{"length":5,"mac":"0d8d4fcd55f1a4cfd7f254d597b7a5777b8865eb371283c03527ac8195ebb5ac"},"rev":12,"store":"smithlab"} diff --git a/fixtures/records/checkpoint.json b/fixtures/records/checkpoint.json index 7b41f2a..94e9fec 100644 --- a/fixtures/records/checkpoint.json +++ b/fixtures/records/checkpoint.json @@ -1 +1 @@ -{"format":"scienting-checkpoint/1","note":"scient.ing/log/smithlab\n9\nSsjq+QpCQnva7PfGTdEv1jcArj1AORP4mYfN+rLz268=\n\n— ana dBv7wspe8vvwH61eTw3SQfa3udWjBNSV0xVCxfoLhiuei/SytzSotCBOK8CvPK3scJ8xHEAnUROdAmyXAh65xchq2g0=\n","origin":"scient.ing/log/smithlab","root":"4ac8eaf90a42427bdaecf7c64dd12fd63700ae3d403913f89987cdfab2f3dbaf","signatures":[{"key_hash":"741bfbc2","name":"ana","value":"yl7y+/AfrV5PDdJB9re51aME1JXTFULF+guGK56L9LK3NKi0IE4rwK88rexwnzEcQCdRE50CbJcCHrnFyGraDQ=="}],"size":9} +{"format":"scienting-checkpoint/1","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","signatures":[{"key_hash":"741bfbc2","name":"ana","value":"0IB02dzOQI7krC2uYO+1ZRU9G6wFK4s94ENCgtmL0ebfgge42O+ePI8Rqvlp81/vGpwO2iSTZdkQ/fW4kxW7AQ=="},{"key_hash":"87b8210e","name":"wit","value":"wkaSFYto87v5MhlBR6eyWGJCH8T9MpZTh12mGkVy7KVAFkzaQb+jwfWfI99RPQyRu+cWo8V8c8fc5o3lbUTAAg=="}],"size":9} diff --git a/fixtures/records/layer/annotations.jsonl b/fixtures/records/layer/annotations.jsonl index fff0064..250fcd2 100644 --- a/fixtures/records/layer/annotations.jsonl +++ b/fixtures/records/layer/annotations.jsonl @@ -3,7 +3,7 @@ {"@context":["http://www.w3.org/ns/anno.jsonld","https://paperspec.scient.ing/context/scienting-1.jsonld"],"body":{"kind":"comment","type":"TextualBody","value":"The step size matters more than the text admits."},"created":"2026-10-11T19:00:00Z","creator":{"id":"tag:scient.ing,2026:key:ana","name":"Ana Example","type":"Person"},"id":"tag:scient.ing,2026:annotation:smithlab/m9e0g8r5ebnkf","layer":"tag:scient.ing,2026:layer:smithlab/kp4m2x7q","motivation":"commenting","status":"proposed","target":{"selector":[{"anchor":{"doc":"hale2026harmonic-damb","format":"scienting-anchor/1","kind":"sentence","node":"xjns57z","node_hash":"42b1de7852cdc68730984fff789fe248ecd5b43198c0e7d671931ff3fe561dc3","own_hash":"4dc28d1ad57c74d044f87264dfbc744ae9d5e9644638db976dbc346361442486","quote":{"exact":"steps of 0.01","prefix":"Each bond was scanned in ","suffix":" Å around its minimum, and the e"},"rev":12,"span":[25,38],"store":"smithlab"},"type":"AnchorSelector"},{"exact":"steps of 0.01","prefix":"Each bond was scanned in ","suffix":" Å around its minimum, and the e","type":"TextQuoteSelector"}],"source":"tag:scient.ing,2026:doc:smithlab/hale2026harmonic-damb","type":"SpecificResource"},"type":"Annotation"} {"@context":["http://www.w3.org/ns/anno.jsonld","https://paperspec.scient.ing/context/scienting-1.jsonld"],"body":{"for":"group","kind":"question","type":"TextualBody","value":"Why fit to a scan first and to frequencies second?"},"created":"2026-10-11T19:00:00Z","creator":{"id":"tag:scient.ing,2026:key:ana","name":"Ana Example","type":"Person"},"id":"tag:scient.ing,2026:annotation:smithlab/x0emxkxem54hw","layer":"tag:scient.ing,2026:layer:smithlab/kp4m2x7q","motivation":"questioning","status":"proposed","target":{"selector":[{"anchor":{"doc":"hale2026harmonic-damb","format":"scienting-anchor/1","kind":"section","node":"d400rz3","node_hash":"e5a8eeb3c112f2dc3341da8f433540a3fc5a7e7f631e72c4dd36c6933aae808d","own_hash":"c3d50f266b05d7889c001aef16662cecd4e99ac4a2747ec331c1044e6adc8e3e","rev":12,"store":"smithlab"},"type":"AnchorSelector"}],"source":"tag:scient.ing,2026:doc:smithlab/hale2026harmonic-damb","type":"SpecificResource"},"type":"Annotation"} {"@context":["http://www.w3.org/ns/anno.jsonld","https://paperspec.scient.ing/context/scienting-1.jsonld"],"body":{"kind":"citation-context","reason":"value","reference":"vxsdvzq","type":"TextualBody","value":"Cited for the band position; the reference is not in the library.","verdict":"cannot-tell"},"created":"2026-10-11T19:00:00Z","creator":{"id":"tag:scient.ing,2026:key:ana","name":"Ana Example","type":"Person"},"id":"tag:scient.ing,2026:annotation:smithlab/gbj7nn87ndfd8","layer":"tag:scient.ing,2026:layer:smithlab/kp4m2x7q","motivation":"assessing","status":"proposed","target":{"selector":[{"anchor":{"doc":"hale2026harmonic-damb","format":"scienting-anchor/1","kind":"sentence","node":"hca6dc5","node_hash":"8cfed5a34aab28517e89e8a164f0f96c14361de83ebc800439116e83ef479f34","own_hash":"c270571517825ceed31ca912b80ac76203effe47f1c84f8ee8962800d0afc92f","quote":{"exact":"1595","prefix":" case, with a bending band near ","suffix":" cm⁻¹.2"},"rev":12,"span":[71,75],"store":"smithlab"},"type":"AnchorSelector"},{"exact":"1595","prefix":" case, with a bending band near ","suffix":" cm⁻¹.2","type":"TextQuoteSelector"}],"source":"tag:scient.ing,2026:doc:smithlab/hale2026harmonic-damb","type":"SpecificResource"},"type":"Annotation"} -{"@context":["http://www.w3.org/ns/anno.jsonld","https://paperspec.scient.ing/context/scienting-1.jsonld"],"body":{"generator":{"model":"example-model","run":"illustrative-run-1"},"kind":"generated","type":"TextualBody","value":"Two panels: an energy scan and its fit residual."},"created":"2026-10-11T19:00:00Z","creator":{"id":"tag:scient.ing,2026:software:example-model","name":"A model (illustrative)","type":"Software"},"id":"tag:scient.ing,2026:annotation:smithlab/tq5gp6mftzmxy","layer":"tag:scient.ing,2026:layer:smithlab/kp4m2x7q","motivation":"describing","status":"proposed","target":{"selector":[{"anchor":{"doc":"hale2026harmonic-damb","format":"scienting-anchor/1","kind":"figure","node":"v7cx6qs","node_hash":"f76864779843485fa9e2f3cc3cd1c76ad222e1649c56f4cface33bf20b8f33b6","own_hash":"a1e46cb40201a17903dfd6f128db1e707b0e9f5bf45fcc32ec7ca772011edeae","rev":12,"store":"smithlab"},"type":"AnchorSelector"}],"source":"tag:scient.ing,2026:doc:smithlab/hale2026harmonic-damb","type":"SpecificResource"},"type":"Annotation"} +{"@context":["http://www.w3.org/ns/anno.jsonld","https://paperspec.scient.ing/context/scienting-1.jsonld"],"body":{"generator":{"model":{"name":"example-model","parameters":"998b5161e39e01c8bc43ef81ec89141e15b7ea53b2e936707920a6097dbcb2c5","processor":"local","prompt":"9cc338fba7c62db7266f530cb555a5ee36910d41a0120a3fe7fd7de1944d0931","provider":"Example Models (illustrative)","version":"2026-09","weights":"504b2d340045b92c22682b60020c21103aae7ff41172bb632fbe305eb4af9b5e"},"run":"illustrative-run-1"},"kind":"generated","type":"TextualBody","value":"Two panels: an energy scan and its fit residual."},"created":"2026-10-11T19:00:00Z","creator":{"id":"tag:scient.ing,2026:software:example-model","name":"A model (illustrative)","type":"Software"},"id":"tag:scient.ing,2026:annotation:smithlab/szb6k3fj9z7aw","layer":"tag:scient.ing,2026:layer:smithlab/kp4m2x7q","motivation":"describing","status":"proposed","target":{"selector":[{"anchor":{"doc":"hale2026harmonic-damb","format":"scienting-anchor/1","kind":"figure","node":"v7cx6qs","node_hash":"f76864779843485fa9e2f3cc3cd1c76ad222e1649c56f4cface33bf20b8f33b6","own_hash":"a1e46cb40201a17903dfd6f128db1e707b0e9f5bf45fcc32ec7ca772011edeae","rev":12,"store":"smithlab"},"type":"AnchorSelector"}],"source":"tag:scient.ing,2026:doc:smithlab/hale2026harmonic-damb","type":"SpecificResource"},"type":"Annotation"} {"@context":["http://www.w3.org/ns/anno.jsonld","https://paperspec.scient.ing/context/scienting-1.jsonld"],"body":{"exercise":{"exercise":"anchor","format":"scienting-exercise/1","key":{"elements":[{"anchors":[{"context":{"column_path":["Set A","$K_r$ (kcal mol⁻¹ Å⁻²)"],"row_path":["Bond parameters","CT–CT"],"table_label":"Table 1"},"doc":"hale2026harmonic-damb","format":"scienting-anchor/1","kind":"cell","node":"c20cna6","node_hash":"c8e6a553f5ae1377776e86dde6ee7d48a923dea7de417408841ea33b81563272","own_hash":"45bf6ab427d435f28b82cb2b64d93c502968921507fc9397abd5d5170731c6ab","quote":{"exact":"310.0"},"rev":12,"store":"smithlab"}],"feedback":{"hit":"That is the cell.","miss":"Look in Table 1, row CT–CT."},"points":"1"}]},"prompt":"Find the table cell that gives the Set A bond constant for the CT–CT bond.","rule":{"match":"same-node"}},"kind":"exercise","type":"TextualBody","value":"Find the table cell that gives the Set A bond constant for the CT–CT bond."},"created":"2026-10-11T19:00:00Z","creator":{"id":"tag:scient.ing,2026:key:ana","name":"Ana Example","type":"Person"},"id":"tag:scient.ing,2026:annotation:smithlab/whcypxav2cqbx","layer":"tag:scient.ing,2026:layer:smithlab/kp4m2x7q","motivation":"assessing","receipt":"r10e5mzvw6tja","status":"confirmed","target":{"selector":[{"anchor":{"doc":"hale2026harmonic-damb","format":"scienting-anchor/1","kind":"table","node":"hj4s7pb","node_hash":"6c6fba200faf41cd06fa8b64e06e2aa29ff8848568b859ae42d1902596348643","own_hash":"66310a9ab1c92568f4c6cae012e35d4245d4ca4b89d2542b7c2113a31ad379ed","rev":12,"store":"smithlab"},"type":"AnchorSelector"}],"source":"tag:scient.ing,2026:doc:smithlab/hale2026harmonic-damb","type":"SpecificResource"},"type":"Annotation"} {"@context":["http://www.w3.org/ns/anno.jsonld","https://paperspec.scient.ing/context/scienting-1.jsonld"],"body":{"exercise":{"exercise":"check","format":"scienting-exercise/1","key":{"elements":[{"anchors":[{"doc":"hale2026harmonic-damb","format":"scienting-anchor/1","kind":"sentence","node":"kea5026","node_hash":"b836d5872ca37471fa996be04c538254a8b1e37ca12e8f1b4a40837b503afa33","own_hash":"d673d236c03d9583ecf6e01fa819765ec324dc684bd9bbc6967fa50f216e34d2","quote":{"exact":"the most common description","prefix":"Harmonic bond terms remain ","suffix":" of covalent stretching in class"},"rev":12,"span":[27,54],"store":"smithlab"}],"points":"1"}],"verdict":{"points":"1","value":"supports"}},"prompt":"Does the cited passage support the claim that harmonic terms are the most common choice?","rule":{"match":"overlap","min_overlap":"0.5"}},"kind":"exercise","type":"TextualBody","value":"Does the cited passage support the claim that harmonic terms are the most common choice?"},"created":"2026-10-11T19:00:00Z","creator":{"id":"tag:scient.ing,2026:key:ana","name":"Ana Example","type":"Person"},"id":"tag:scient.ing,2026:annotation:smithlab/y7bd3he0jwjbx","layer":"tag:scient.ing,2026:layer:smithlab/kp4m2x7q","motivation":"assessing","receipt":"r10e5mzvw6tja","status":"confirmed","target":{"selector":[{"anchor":{"doc":"hale2026harmonic-damb","format":"scienting-anchor/1","kind":"sentence","node":"kea5026","node_hash":"b836d5872ca37471fa996be04c538254a8b1e37ca12e8f1b4a40837b503afa33","own_hash":"d673d236c03d9583ecf6e01fa819765ec324dc684bd9bbc6967fa50f216e34d2","quote":{"exact":"Harmonic bond terms remain the most common description of covalent stretching in classical force fields.1"},"rev":12,"store":"smithlab"},"type":"AnchorSelector"},{"exact":"Harmonic bond terms remain the most common description of covalent stretching in classical force fields.1","prefix":"","suffix":"","type":"TextQuoteSelector"}],"source":"tag:scient.ing,2026:doc:smithlab/hale2026harmonic-damb","type":"SpecificResource"},"type":"Annotation"} {"@context":["http://www.w3.org/ns/anno.jsonld","https://paperspec.scient.ing/context/scienting-1.jsonld"],"body":{"kind":"description","language":"en","role":"alt","type":"TextualBody","value":"Energy along the C–C bond stretch (panel a) and the fit residual (panel b)."},"created":"2026-10-11T19:00:00Z","creator":{"id":"tag:scient.ing,2026:key:ana","name":"Ana Example","type":"Person"},"id":"tag:scient.ing,2026:annotation:smithlab/gb5tmv3hq08vz","layer":"tag:scient.ing,2026:layer:smithlab/kp4m2x7q","motivation":"describing","receipt":"r10e5mzvw6tja","status":"confirmed","target":{"selector":[{"anchor":{"doc":"hale2026harmonic-damb","format":"scienting-anchor/1","kind":"figure","node":"v7cx6qs","node_hash":"f76864779843485fa9e2f3cc3cd1c76ad222e1649c56f4cface33bf20b8f33b6","own_hash":"a1e46cb40201a17903dfd6f128db1e707b0e9f5bf45fcc32ec7ca772011edeae","rev":12,"store":"smithlab"},"type":"AnchorSelector"}],"source":"tag:scient.ing,2026:doc:smithlab/hale2026harmonic-damb","type":"SpecificResource"},"type":"Annotation"} diff --git a/fixtures/records/project.json b/fixtures/records/project.json index 63af77c..87f9794 100644 --- a/fixtures/records/project.json +++ b/fixtures/records/project.json @@ -1 +1 @@ -{"claims":{"lode":"amber"},"datasets":["ds-hale-bond-params","ds-hale-ctct-scan"],"documents":[{"doc":"smithlab/hale2026harmonic-damb","reason":"The bond constants we start from.","status":{"Ben Example":"read","Cara Example":"reading"},"tags":["parameters"]},{"doc":"okafor2025solvent-acth","reason":"Solvent shifts for the validation set.","tags":["spectra"]}],"drafts":["smithlab/writer2027fixed-ynr7.v3"],"format":"scienting-project/1","key":"smithlab-charges","layers":["tag:scient.ing,2026:layer:smithlab/kp4m2x7q"],"members":[{"keys":["ana"],"person":"Ana Example","role":"owner"},{"keys":["ben","ben-spot"],"person":"Ben Example","role":"editor"},{"keys":["cara"],"person":"Cara Example","role":"reader"}],"name":"Charges and bonds","paths":[{"id":"onboarding","steps":[{"note":"Read the introduction.","ref":"smithlab/hale2026harmonic-damb","type":"document"},{"note":"Then the table.","ref":"smithlab/hale2026harmonic-damb#hj4s7pb","type":"node"},{"ref":"lode:amber/k-bond","type":"claim"}],"title":"First week"}],"settings":{"digit_rule":"anchored-sections","drift_threshold":"0.25","rights_unknown":"refuse","spot_check":{"minimum":10,"rate":"0.05"},"stages":"scienting-stages-default"},"store":"smithlab","views":["ctct-scan"]} +{"claims":{"lode":"amber"},"datasets":["ds-hale-bond-params","ds-hale-ctct-scan"],"documents":[{"doc":"smithlab/hale2026harmonic-damb","reason":"The bond constants we start from.","status":{"Ben Example":"read","Cara Example":"reading"},"tags":["parameters"]},{"doc":"okafor2025solvent-acth","reason":"Solvent shifts for the validation set.","tags":["spectra"]}],"drafts":["smithlab/writer2027fixed-ynr7.v3"],"format":"scienting-project/1","key":"smithlab-charges","layers":["tag:scient.ing,2026:layer:smithlab/kp4m2x7q"],"members":[{"keys":["ana"],"person":"Ana Example","role":"owner"},{"keys":["ben","ben-spot"],"person":"Ben Example","role":"editor"},{"keys":["cara"],"person":"Cara Example","role":"reader"}],"name":"Charges and bonds","paths":[{"id":"onboarding","steps":[{"note":"Read the introduction.","ref":"smithlab/hale2026harmonic-damb","type":"document"},{"note":"Then the table.","ref":"smithlab/hale2026harmonic-damb#hj4s7pb","type":"node"},{"ref":"lode:amber/k-bond","type":"claim"}],"title":"First week"}],"settings":{"digit_rule":"anchored-sections","drift_threshold":"0.25","log":{"origin":"scient.ing/log/smithlab","threshold":1,"witnesses":["wit"]},"rights_unknown":"refuse","spot_check":{"minimum":10,"rate":"0.05"},"stages":"scienting-stages-default"},"store":"smithlab","views":["ctct-scan"]} diff --git a/fixtures/records/receipt-ml-dsa.json b/fixtures/records/receipt-ml-dsa.json new file mode 100644 index 0000000..5949a67 --- /dev/null +++ b/fixtures/records/receipt-ml-dsa.json @@ -0,0 +1 @@ +{"at":"2026-10-13T09:00:00Z","by":"dana","doc":"hale2026harmonic-damb","evidence":[{"by":"dana","kind":"person"}],"format":"scienting-receipt/1","id":"vbttn1qvxkx4s","level":"F2","nodes":[["kea5026","b836d5872ca37471fa996be04c538254a8b1e37ca12e8f1b4a40837b503afa33"],["rr20tev","76e06b4811a688357ac4b912172283463cfaf1b7a1f0795d274fc733a2309ba7"]],"rev":12,"root":"1529e715397aae9f44f1f17fb95c5ef8fbef008d901c2624413b899e8552b174","scope":"targeted:ml-dsa","signature":{"key":"dana","scheme":"ml-dsa-65","value":"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"}} diff --git a/fixtures/records/roster.json b/fixtures/records/roster.json index 7886e39..36584ed 100644 --- a/fixtures/records/roster.json +++ b/fixtures/records/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/registry/rules.json b/registry/rules.json index 9c24d06..f2e89d7 100644 --- a/registry/rules.json +++ b/registry/rules.json @@ -103,6 +103,16 @@ "description": "An align_key does not recompute.", "chapter": "spec/22-conformance.md" }, + { + "id": "doc.hash.algorithm", + "description": "document.json names no hash algorithm, or one the consumer does not implement.", + "chapter": "spec/01-conventions.md" + }, + { + "id": "doc.roster.did", + "description": "A roster key's did:key is not the one its public key determines.", + "chapter": "spec/08-fidelity.md" + }, { "id": "doc.hash.key", "description": "The key supplied does not match the package's key_id.", diff --git a/schemas/annotation.schema.json b/schemas/annotation.schema.json index c1f42f2..3aa0376 100644 --- a/schemas/annotation.schema.json +++ b/schemas/annotation.schema.json @@ -491,8 +491,7 @@ "type": "object", "properties": { "model": { - "type": "string", - "minLength": 1 + "$ref": "common.schema.json#/$defs/model" }, "run": { "type": "string", diff --git a/schemas/common.schema.json b/schemas/common.schema.json index 39022e2..6defcd0 100644 --- a/schemas/common.schema.json +++ b/schemas/common.schema.json @@ -318,8 +318,7 @@ "type": "object", "properties": { "model": { - "type": "string", - "minLength": 1 + "$ref": "#/$defs/model" }, "run": { "type": "string", @@ -334,6 +333,12 @@ } ] }, + "hashAlgorithm": { + "enum": [ + "sha-256" + ], + "description": "The hash function every value of a package uses; the only value so far (spec/01 §1.3)." + }, "hashing": { "oneOf": [ { @@ -341,6 +346,9 @@ "properties": { "scheme": { "const": "plain" + }, + "algorithm": { + "$ref": "#/$defs/hashAlgorithm" } }, "required": [ @@ -354,6 +362,9 @@ "scheme": { "const": "hmac-team" }, + "algorithm": { + "$ref": "#/$defs/hashAlgorithm" + }, "key_id": { "type": "string", "pattern": "^[0-9a-f]{16}$" @@ -371,6 +382,9 @@ "scheme": { "const": "hkdf-pages" }, + "algorithm": { + "$ref": "#/$defs/hashAlgorithm" + }, "context": { "type": "string", "minLength": 1 @@ -392,6 +406,40 @@ } ] }, + "model": { + "type": "object", + "description": "A model that proposed something: enough to name the weights and the instructions it ran with (spec/11 §11.2).", + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "provider": { + "type": "string", + "minLength": 1 + }, + "version": { + "type": "string", + "minLength": 1 + }, + "weights": { + "$ref": "#/$defs/hash" + }, + "prompt": { + "$ref": "#/$defs/hash" + }, + "parameters": { + "$ref": "#/$defs/hash" + }, + "processor": { + "$ref": "#/$defs/processor" + } + }, + "required": [ + "name" + ], + "additionalProperties": false + }, "quote": { "type": "object", "properties": { diff --git a/schemas/project.schema.json b/schemas/project.schema.json index a62e789..ef8a284 100644 --- a/schemas/project.schema.json +++ b/schemas/project.schema.json @@ -220,6 +220,34 @@ }, "stages": { "$ref": "common.schema.json#/$defs/key" + }, + "log": { + "type": "object", + "description": "The project's transparency log (spec/23): its origin, the roster keys that witness it, and how many must cosign a checkpoint.", + "properties": { + "origin": { + "type": "string", + "pattern": "^[^\\n]+$", + "minLength": 1 + }, + "witnesses": { + "type": "array", + "items": { + "$ref": "common.schema.json#/$defs/key" + }, + "uniqueItems": true + }, + "threshold": { + "type": "integer", + "minimum": 0 + } + }, + "required": [ + "origin", + "witnesses", + "threshold" + ], + "additionalProperties": false } }, "required": [], diff --git a/schemas/roster.schema.json b/schemas/roster.schema.json index da86cb1..5d7feb1 100644 --- a/schemas/roster.schema.json +++ b/schemas/roster.schema.json @@ -63,13 +63,19 @@ "type": "string", "minLength": 1 }, + "did": { + "type": "string", + "pattern": "^did:key:z[1-9A-HJ-NP-Za-km-z]+$", + "description": "The key as a did:key decentralized identifier, which the public key determines (spec/08 §8.7)." + }, "purposes": { "type": "array", "items": { "enum": [ "sign", "spot-check", - "export" + "export", + "witness" ] }, "minItems": 1, diff --git a/spec/01-conventions.md b/spec/01-conventions.md index 434098d..feb6c33 100644 --- a/spec/01-conventions.md +++ b/spec/01-conventions.md @@ -27,6 +27,8 @@ A producer SHOULD round coordinates to hundredths of a point, which keeps their A hash is SHA-256, written as 64 lowercase hexadecimal digits. Six digits are for display and for pins in addresses; no record stores a shortened hash. +`document.json` names the function in `hashing.algorithm`, `sha-256` in this version, and every hash in the package, its records and its proofs uses the one function the document names; a consumer refuses an algorithm it does not implement (`doc.hash.algorithm`). +Property names such as `sha256` and `page_fp` belong to that function, so a later algorithm arrives as a new major version of the formats whose values it changes, with the name in the data letting two versions share a store. Inside a team's own store, hashes are plain SHA-256; any content value that leaves the team is keyed, as [5.8](05-hashes.md#58-keyed-hashes) defines. ## 1.4 Text normalization for hashing diff --git a/spec/08-fidelity.md b/spec/08-fidelity.md index a18bf07..461e1bc 100644 --- a/spec/08-fidelity.md +++ b/spec/08-fidelity.md @@ -62,7 +62,7 @@ Its signing payload is the canonical JSON of `{"format": , | `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"}