Keys (spec/02 §2.4), the rule paperstack settled on:
- A work key is a Scholar-style citation key, a hyphen and the first four
Crockford base32 characters of SHA-256("scienting-key/1:" + identity),
where the identity is the first of doi, arxiv, isbn, pmid, pmcid and
openalex in same_as, else the folded title, year and family name. A
collision lengthens the later key by two characters; a key is minted
once and never recomputed. A document key adds .si, .v<seq> or .<type>
for versions other than the version of record.
- Every fixture key is now minted (hale2026harmonic-damb,
okafor2025solvent-acth, writer2027fixed-ynr7.v3, tiny2026tiny-j4qm), so
every node and record ID was re-minted and the docs rewritten to match.
The validator checks the document key against the work key and version
(doc.key.work) and the hash part against the identifier (doc.key.suffix).
vectors/keys.jsonl pins the cases paperstack's tests pin.
Review:
- Spot-check seeds are ECVRF-EDWARDS25519-SHA512-TAI proofs (RFC 9381),
implemented in tools/oracle/vrf.py in plain Python and reproduced
against the RFC's Example 16; the sample ranks by the VRF output. The
earlier Ed25519 seed could be ground by a dishonest checker.
- RFC 9162 inclusion and consistency proofs (crypto.inclusion_path,
verify_inclusion, consistency_proof, verify_consistency) with
scienting-proof/1, vectors/proofs.jsonl and two fixture records.
- document.json carries `history`, the root over the corrections, with
the empty-tree hash for none (spec/11 §11.5, rule doc.history).
- A provisional transparency log (spec/23): log entries, signed-note
checkpoints with key hashes as transparency logs share them, the rule
that a logged revocation beats a self-asserted time, and vectors.
- Reserved signature schemes cose and ml-dsa-65 (spec/08 §8.4).
Identifiers and text:
- urn:scienting: becomes tag:scient.ing,2026: (RFC 4151), since the URN
namespace was never registered.
- Unicode 16.0 is pinned for normalization and categories (spec/01 §1.4);
the checker refuses another version.
Checking:
- check.py: keys, proofs, VRF and checkpoint vectors; the proof and
checkpoint records; a check that every ID and hash the prose quotes
exists in the fixtures or vectors; three more broken packages
(history-wrong, key-suffix, key-work).
- stress.py: key, VRF, proof and checkpoint properties.
- Docs: a keys section in the concepts and FAQ, rationale entries for
keys, VRF, proofs, tag URIs and the Unicode pin, a "Looking ahead"
section, media-type registration and OCI distribution notes.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
7 lines
3.1 KiB
JSON
7 lines
3.1 KiB
JSON
{"alpha":"","beta":"90cf1df3b703cce59e2a35b925d411164068269d7b2d29f3301c03dd757876ff66b71dda49d2de59d03450451af026798e8f81cd2e333de5cdf4f3e140fdd8ae","id":"rfc9381-example-16","proof":"8657106690b5526245a92b003bb079ccd1a92130477671f6fc01ad16f26f723f26f8a57ccaed74ee1b190bed1f479d9727d2d0f9b005a6e456a35d4fb0daab1268a1b0db10836d9826a528ca76567805","public":"d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a","secret":"9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60"}
|
|
{"alpha":"72","beta":"8541f3ff9e0837a8a3c2b6da4326f0431a22bc7353edfedbc15089cab85bd4cb8108cbaf1e931fe2e6f477bb21a7bcdfe1c422c1ff2394b41379f4723ceb6b64","id":"rfc9381-key-alpha-72","proof":"cb809f3db77e2a15b9470e7b4cccb28ba08099a442bd357889505d3a5753143038392e8c6ec61b1796930d37bc58cbb5891b4d570a2180b3b18724ef9760bfffd4789004c970c70bd816cc104e9a110f","public":"d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a","secret":"9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60"}
|
|
{"alpha":"af82","beta":"9df8bd916435e1a2ec0185aa3fe11396f9cfcb6966d72bc50a24beaa6e2cc40fb91dc7f5959874a3d6165be18f675f783525d8c32e6488456152d5f9bfc15b46","id":"rfc9381-key-alpha-af82","proof":"06eecb68db258fdd7161d2ca4a85fa59eef631fd60ee546c4cf53b03541a4416ab41be1cc4c3aa0877c2d5c856b4f606f0d7d478818d305c499e60e37b8d9644a58c7b677bff66ed1562b79e3f688204","public":"d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a","secret":"9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60"}
|
|
{"alpha":"7b22666f726d6174223a22736369656e74696e672d73706f742d636865636b2f31222c2272656365697074223a2261653137663838363661303563613162363731643936623737353839383465313161633639346163643637343338333566313037636235313363376363363030227d","beta":"124417f3bbb8fcfaca31a6f3eb5c230a78db44a22502411f245d9fd088d911843d9efb674ffcf29df1cd0f0d8ea6d944bc37d765d45aed9fd64ebe7edc650784","id":"ben-spot-seed-q1","proof":"def39199968be33a5682d6d9336f5f2ab5b180a38786d5eca4892eb42caa81981651a06f9980907c7b660880fe60d5b633e2c8afcb8c969abf2c3e5c229d2899044374a49321daf1a02c501c581cc20d","public":"ae4cf18a08c25e0f3af4f19214056be040d75d19b093e4bffb027dde5ac6e1d7"}
|
|
{"alpha":"7b22666f726d6174223a22736369656e74696e672d73706f742d636865636b2f31222c2272656365697074223a2261653137663838363661303563613162363731643936623737353839383465313161633639346163643637343338333566313037636235313363376363363030227d","beta":null,"id":"tampered-challenge","proof":"def39199968be33a5682d6d9336f5f2ab5b180a38786d5eca4892eb42caa81981651a06f9980907c7a660880fe60d5b633e2c8afcb8c969abf2c3e5c229d2899044374a49321daf1a02c501c581cc20d","public":"ae4cf18a08c25e0f3af4f19214056be040d75d19b093e4bffb027dde5ac6e1d7"}
|
|
{"alpha":"7b22666f726d6174223a22736369656e74696e672d73706f742d636865636b2f31222c2272656365697074223a2261653137663838363661303563613162363731643936623737353839383465313161633639346163643637343338333566313037636235313363376363363030227d78","beta":null,"id":"other-input","proof":"def39199968be33a5682d6d9336f5f2ab5b180a38786d5eca4892eb42caa81981651a06f9980907c7b660880fe60d5b633e2c8afcb8c969abf2c3e5c229d2899044374a49321daf1a02c501c581cc20d","public":"ae4cf18a08c25e0f3af4f19214056be040d75d19b093e4bffb027dde5ac6e1d7"}
|