{"namespace":"scvd-attestation","version":"v1","title":"The scvd-attestation format, v1","summary":"The interchange contract for every signed artifact this store issues: canonical forms, encodings, the certificate binding convention, and verification steps that need nothing from us but a published key. A tool that implements this page can verify any scvd artifact offline and cite the result by name.","url":"https://scvd.store/spec/scvd-attestation/v1","publisher":{"name":"SCVD General Store","what":"A human-run general store selling small signed goods to autonomous agents, paid over x402 in USDC on Base, Polygon, or Solana. Also a free conformance desk that checks any issuer's x402 offers and receipts, including stores it competes with.","homepage":"https://scvd.store","verify":"Anyone can check this artifact without asking us and without an account: https://scvd.store/api/verify/{id}, free and permanent. The signing key is at https://scvd.store/.well-known/scvd-signing-key, and the offline verifier is MIT-licensed. The conformance desk is POST https://scvd.store/api/conformance/v1 — send any issuer's x402 signed offer or receipt, ours or not.","rights":"You own what you bought outright and owe this store no credit for it. This block is here so the artifact can explain itself to whoever holds it next, not because attribution is required — see /rights."},"stability":{"promise":"Within v1, changes are additive only: new artifact types and new OPTIONAL fields may appear, and signed field lists may be APPENDED to, never reordered or truncated — the certificate list's first eight positions have been frozen since the store opened, and every addition since is an append with a dated note in the signing code. Anything that would break an existing verifier is a v2 at a new URL, with v1 continuing to serve. This page carries its version in its path for exactly that reason.","versioning_of_artifacts":"Artifacts do not carry this spec's version; they are dated, and the spec states its rules as of those dates (the certificate's legacy form below is the worked example). A verifier should key on the artifact's served fields, not on an assumed vintage."},"signing":{"algorithm":"ed25519","encoding":"signature and public_key are lowercase hex strings; the message is the UTF-8 encoding of the canonical form; digests are lowercase hex sha256 unless stated otherwise.","the_uniform_rule":"For every artifact that carries its own signature, the signed message is the JSON serialization of the artifact's fields IN THE ORDER SERVED, stopping above `signature` — JSON.stringify of exactly those fields, no whitespace, no re-sorting. Fields absent from the artifact are omitted entirely, never null (the certificate's canonical form skips undefined fields). Where a wrapper serves the artifact (the certificate, the context anchor), the response also carries signed_payload: the exact string the signature covers, so nothing has to be rebuilt — prefer the served bytes; the recipe here is for when you only kept the artifact.","verification_steps":["1. Obtain the key: the live and retired keys, with service dates, at https://scvd.store/.well-known/scvd-signing-key. Match the artifact's public_key against that history; a key not in the history did not sign for this store.","2. Reconstruct the message per the artifact's canonical form below (or take signed_payload verbatim where served).","3. ed25519_verify(utf8(message), hex_to_bytes(signature), hex_to_bytes(public_key)).","4. Compare the fields inside the message against the artifact as displayed: a field shown but not signed is not vouched for, and honest surfaces here say so themselves."],"key_history_integrity":"The key history above is ours and editable by us; the same history is committed where we cannot reach it: https://scvd.store/.well-known/anchor-log.json — a hash chain over key states, each digest timestamped into Bitcoin via OpenTimestamps. It proves WHEN a key state was committed, never WHO SHOULD HAVE held the key.","relation_to_jcs_rfc8785":"This namespace's PRIMARY canonical form is DECLARED-FIELD-ORDER serialization, not RFC 8785 (JCS). JCS derives byte order by sorting keys; this spec derives it from the field lists published on this page, which are part of the contract. The two disciplines are equally deterministic and NOT byte-compatible: re-canonicalizing an scvd artifact's primary signature through JCS produces different bytes and a failed verification. This is deliberate and permanent for artifacts already issued — this store's signatures are forever, and migrating a preimage discipline would orphan every one of them (the frozen_prefix rule below is the same commitment at field level).","jcs_dual_emit":"SINCE 2026-08-18 every artifact minted here ALSO carries `signature_jcs`: a second ed25519 signature, same key, same field subset, over the RFC 8785 (JCS) canonicalization — sorted keys, ECMAScript number and string serialization, no whitespace. Verify it with any RFC 8785 implementation: jcs(signed_fields_as_object) -> utf8 bytes -> ed25519_verify against the same public_key. The primary signature remains the authoritative one; signature_jcs is interop, so tooling built around the JCS receipts discipline (draft-hopley-x402-canonicalisation-jcs-v1 and kin) can verify scvd artifacts without knowing our field lists. Artifacts minted before 2026-08-18 carry no signature_jcs, exactly the way certificates minted before 2026-07-30 lack later fields: history, not a defect. Where served, signature_jcs_covers states this in place, and /api/verify reports the JCS signature's own validity separately from the primary's — never collapsed into one boolean.","relation_to_receipt_drafts":"The draft-vauban-x402-* family (Independent Submission; receipt-format negotiation, a claim algebra, delegation binding) pins the same RFC 8785 preimage discipline as draft-hopley-x402-canonicalisation-jcs-v1, so `signature_jcs` above already verifies under it. Vocabulary mapping for readers arriving from those drafts: this store's certificate plays the SettlementReceipt role (self-contained, offline-verifiable, seller-issued); the `attests` binding is the same idea as their 32-byte `action_ref` — a digest inside the signed fields tying the payment artifact to a work-layer artifact — differing in name and in that ours states WHAT was digested per item class. We implement no STARK or post-quantum variant and no claim-algebra operators; if the receipt_format negotiation in those drafts stabilizes, this namespace's formats would be offered as tokens under it rather than replaced by it. Drafts, not standards: nothing here is bound by them, and this paragraph is dated so its staleness is visible."},"test_vectors":{"what":"A fully worked example of both signature disciplines, with a PUBLISHED throwaway key. Run it before trusting your verifier: if your implementation cannot reproduce these two verifications, the bug is on your side of the wire, and finding that out costs nothing.","key_warning":"The vector key below signs NOTHING real. It appears in no key history and never will; a real artifact presenting it must fail step 1 of verification (key not in the store's history).","vector":{"seed_hex":"4242424242424242424242424242424242424242424242424242424242424242","public_key":"2152f8d19b791d24453242e15f2eab6cb7cffa7b6a5ed30097960e069881db12","served_payload_exact_bytes":"{\"note\":\"This vector signs nothing real; its key is published on purpose and appears in no key history.\",\"artifact\":\"test_vector\",\"issued_at\":\"2026-08-21T00:00:00.000Z\"}","primary_signature_over_served_bytes":"194853ba44ed91d5f178d0ac225c5aed912c21f969118233f1e40dda9caa9f4af38cea1b2834ddd9cb99e8b2347c3025738d64e41eb5b725ee7ccee2ce4fd60e","jcs_canonicalization_of_same_payload":"{\"artifact\":\"test_vector\",\"issued_at\":\"2026-08-21T00:00:00.000Z\",\"note\":\"This vector signs nothing real; its key is published on purpose and appears in no key history.\"}","signature_jcs_over_jcs_bytes":"532f58e1723cf5d9227b54cf8aaf809a6104cdc8fa2173d264d95920b7ffe05a6c4ecc7998e1f090165e3fa2c6057388be5a61468a99fbbaf5523f84acc5c009","the_lesson":"The payload's keys are served UNSORTED on purpose: the two disciplines produce different bytes and different signatures over the same object. A verifier that conflates them will pass one and fail the other, and this vector catches it."},"reference_verifier_js":"async function verify(message, signatureHex, publicKeyHex) { const hex = (h) => Uint8Array.from(h.match(/.{2}/g).map((b) => parseInt(b, 16))); const key = await crypto.subtle.importKey(\"raw\", hex(publicKeyHex), { name: \"Ed25519\" }, false, [\"verify\"]); return crypto.subtle.verify({ name: \"Ed25519\" }, key, hex(signatureHex), new TextEncoder().encode(message)); } // WebCrypto Ed25519 (Node 19+, Deno, Cloudflare Workers, modern browsers). message is signed_payload verbatim for the primary, or your own RFC 8785 canonicalization for signature_jcs.","incident_policy":"Stated as facts about what exists. ONE live signing key, one operator; a stolen live key would sign indistinguishably from the store — every artifact-selling surface says so. On suspected compromise, what the machinery already supports: the key is retired in the directory with an end-of-service date, a new key enters with its start date, the state change is committed into the Bitcoin-anchored key chain (which proves WHEN, never WHO SHOULD HAVE), and a corrections entry names the incident window. Containment is the service window: artifacts attribute to the key that signed them WITHIN its dated service, so a compromise bounds the doubt to the window between last-known-good anchor and retirement, never to the whole history. What does NOT exist yet, said plainly: a pre-announced successor key (the single-point-of-failure every outside read names; open ruling F3), and any co-signer or independent witness.","revocation_story":"There is no revocation registry, and this spec does not pretend one. Three mechanisms do the honest work instead: (1) EXPIRY — artifacts that age (passports) carry their own expiry and freshness arithmetic, and verifiers should refuse expired evidence without asking anybody; (2) WITHDRAWAL — a claim this store no longer stands behind is withdrawn IN PUBLIC at its original URL, the notice leading both dialects while the signed bytes stay byte-identical and the withdrawal rides OUTSIDE the signed payload (precedent: the August 2026 field report — a retraction must never rewrite what the signature covers); (3) KEY RETIREMENT — see incident_policy. /api/verify reports what a signature IS (valid over these bytes, by this key, in this service window), never that the claim remains endorsed."},"assurance_levels":{"what":"Every artifact verifies identically; its LEVEL says what a valid signature claims. Levels describe this store's claim, never the subject's quality.","levels":[{"level":1,"name":"novelty","claim":"This store sold this artifact, with these bytes, on this date. Provenance and nothing else.","not_claimed":"Nothing about the world outside the store. A signed blessing is a real blessing, not a true one.","examples":["hello","small_blessing","lucky artifacts","zodiac readings"]},{"level":2,"name":"observation","claim":"At a stated moment, our instrument looked at one thing outside the store and recorded what it saw, with the evidence cited so you can re-look.","not_claimed":"Nothing before or after the moment, and nothing the cited evidence does not itself support. An observation is a photograph, not a warranty.","examples":["settlement_attestation","bitcoin_anchor","the fresh set's rows","reconcile_card_statement"]},{"level":3,"name":"monitored","claim":"Observations on a standing cadence, with the gaps recorded — a missed check appears as a hole, never papered over.","not_claimed":"Continuous coverage. The cadence is stated; between checks the world is unwatched and the record says so.","examples":["conformance_watch","the weekly census and its corpus"]},{"level":4,"name":"audited","claim":"A full named battery ran against the subject at a point in time; every criterion and its verdict is in the report, including the failures.","not_claimed":"Anything past the audit's date, and anything outside the named criteria. An audit ages from the moment it is signed.","examples":["service_audit","launch_check"]},{"level":5,"name":"witnessed","claim":"A named human stood in the loop and attests to what the machine cannot: that a person looked.","not_claimed":"Institutional assurance. One store, one keeper, one key — the ceiling of this ladder until independent co-signers exist, and the spec says so rather than implying otherwise.","examples":["the_collab"]}],"human_room":"https://scvd.store/trust"},"certificate":{"what":"The purchase receipt every sale mints; the wrapper most other artifacts bind into.","signed_fields_in_order":["cert_id","item","patron_number","date","name","tip_usdc","note","win","tag","attests","made_by","paid_usdc","asset","network","payer","settlement_tx","cross_ref","purpose","from_the_store","mandate_id","saw"],"canonical_form":"JSON.stringify of the object built by walking signed_fields_in_order and copying each field THAT IS PRESENT on the certificate, in that order. Absent fields are omitted, never null.","frozen_prefix":"The first eight positions (cert_id through win) are frozen forever: old signatures cover exactly that sequence. Everything after is a dated append.","legacy_form":"Certificates minted before 2026-07-30 were signed over the pre-append field set. /api/verify accepts both forms and names WHICH one verified (current | legacy | invalid), listing any served fields a legacy signature does not cover, rather than collapsing to a boolean.","verify_url":"https://scvd.store/api/verify/{cert_id}"},"attests_binding":{"what":"The convention that lets one verify endpoint answer for two artifacts: a certificate's `attests` field carries a lowercase hex digest of a second artifact, INSIDE the signed fields, so the store's dated signature covers the binding itself.","per_item":{"settlement_attestation":"attests = the observation's evidence_hash: sha256 of the JSON serialization of the observation's core fields (everything above evidence_hash — observed_at through query).","attestation_bundle":"attests = sha256 of the sheaf's evidence_hash values comma-joined in delivery order. Each member still carries and verifies its own hash and signature alone.","bitcoin_anchor":"attests = the buyer's own digest, lowercased. The store never saw the bytes; the same digest is independently committed into Bitcoin via the OpenTimestamps proof on the anchor record.","service_audit":"attests = the report's evidence_hash: sha256 of the JSON serialization of the report's core fields (audit_id through advisories)."},"rule":"An attests value is always a digest, never content; recompute it from the delivered artifact and compare. A certificate whose attests does not match the artifact it travels with is binding some OTHER artifact, and the mismatch is the finding."},"hash_chains":{"what":"Two of the store's own histories are hash-linked so WE cannot rewrite them: each entry carries the previous entry's digest, and entry digests are OTS-stamped into Bitcoin.","anchor_log":"https://scvd.store/.well-known/anchor-log.json — key-state history. Entries prove themselves by digest chain plus OTS proof; they are not separately ed25519-signed, because the chain exists precisely for the moments a signature of ours would be worthless (a stolen key signs lies just as validly).","corpus":"https://scvd.store/corpus.json — the weekly ecosystem record. Entries are BOTH chained and ed25519-signed over a fixed canonical field order (version, sequence, taken_at, previous_digest, source, week, round).","deliberately_unchained":"Patron Bitcoin anchors are NOT chained to each other or to our logs: a stranger's proof should not be coupled to our bookkeeping, and a Bitcoin-confirmed OTS proof carries its own time alone."},"ots_anchoring":{"what":"Where a record carries an `ots` block, it is an OpenTimestamps submission of a sha256 digest: status is pending (a calendar accepted it), complete (upgraded to a Bitcoin-confirmed proof), or failed (the store's hourly pass retries).","verify":"Base64-decode proof_base64 into a .ots file and run the standard `ots verify` client against the digest. A complete proof verifies against Bitcoin block headers alone — no calendar, no us."},"trust_models_note":"A valid signature means different things for different artifacts — the trust model per class, including where it is the weakest available, is stated at https://scvd.store/attestation and not repeated here. Model names used below: Self-signed (in-process); Custody and timestamp only; Third-party observation.","artifacts":[{"id":"certificate","name":"Certificates of purchase","trust_model":"Self-signed (in-process)","signature_covers":"The canonical JSON of the certificate's own fields, in a fixed declared order: cert_id, item, patron_number, date, name, tip_usdc, note, win, tag, attests, made_by, paid_usdc, asset, network, payer, settlement_tx, cross_ref, purpose, from_the_store, mandate_id, saw — every one of those that is present. DERIVED FROM THE SIGNING CODE, NOT TYPED BESIDE IT: this sentence was hand-written and had fallen a day behind by 2026-07-31, omitting made_by and then the five payment fields, on the page whose entire job is stating exactly what bytes a signature covers. paid_usdc is the TOTAL settled rather than the tip, payer is the paying wallet (chain-verifiable, unlike a chosen name), and settlement_tx is the on-chain transaction. The exact string is served as signed_payload on the verify response, so nothing has to be reconstructed.","does_not_prove":"That the goods were delivered, that they were any good, or that the buyer was who they said. It proves this store issued this certificate, with these fields, on this date.","verify_url":"https://scvd.store/api/verify/{cert_id}"},{"id":"settlement_attestation","name":"Settlement attestations (single, or each member of a sheaf)","trust_model":"Third-party observation","signature_covers":"The whole observation object: the transaction hash asked about, what the chain said, the block height, the chain head at the time of reading, the confirmation count, and the moment of observation. A sheaf (attestation_bundle) is this artifact at volume — every member signed alone over the same fields, quotable alone.","does_not_prove":"That goods or services were delivered, that a NOT_FOUND will never settle later, or that the payment was legitimate. One RPC read of public state, at one moment, signed by a party with no interest in the answer.","verify_url":"https://scvd.store/api/verify/{cert_id}"},{"id":"standing_watch_probe","name":"Standing watch rows (the Night Watch)","trust_model":"Third-party observation","signature_covers":"Each hourly row on its own: the watch id, the watched URL, the moment, the verdict, the names of any failed checks, and the status and latency where present — in the declared canonical order, so any single row can be quoted alone.","does_not_prove":"Anything about hours we did not probe. The gaps are derived at read and counted against us in the same history; a row is one look from one vantage, never an uptime figure. Nor is it bought. The watched party pays — the rating agency's model, whose one defect is that the rater drifts favorable — so the terms say it at spec level: payment buys frequency and permanence, never outcome. An endpoint that degrades while its operator is paying gets signed readouts saying so, in public, at the URL the operator paid for. The clause rides every watch history as who_pays_and_what_it_buys.","verify_url":"https://scvd.store/api/watch/{watch_id}"},{"id":"conformance_watch_pass","name":"Conformance watch passes (the Conformance Watch)","trust_model":"Third-party observation","signature_covers":"Each daily pass on its own: the watch id, the watched URL, the moment, the verdict, the names of failed checks and of advisories — in the declared canonical order, so any single day can be quoted alone.","does_not_prove":"Anything about the hours between passes, or about days nobody checked — those are derived at read and counted against us. One pass a day is conformance cadence, never uptime. Nor is it bought. The watched party pays — the rating agency's model, whose one defect is that the rater drifts favorable — so the terms say it at spec level: payment buys frequency and permanence, never outcome. An endpoint that degrades while its operator is paying gets signed readouts saying so, in public, at the URL the operator paid for. The clause rides every watch history as who_pays_and_what_it_buys.","verify_url":"https://scvd.store/api/conformance-watch/{watch_id}"},{"id":"service_audit","name":"Service audit reports (the Once-Over)","trust_model":"Third-party observation","signature_covers":"The whole report: the audited URL, the moment, the criteria version, the verdict, every check and advisory, and the report's evidence hash. The purchase certificate binds the same evidence hash in its attests field.","does_not_prove":"That the endpoint is endorsed, reliable, or up at any other moment. One GET against published criteria; an unreachable verdict is a fact about one network path at one moment.","verify_url":"https://scvd.store/api/service-audit/{audit_id}"},{"id":"onpage_audit","name":"On-page audit reports (the Shop Window)","trust_model":"Third-party observation","signature_covers":"The whole report: the page named, the moment, the criteria version, the verdict, every check and advisory, the blind spots, and the report's evidence hash. The purchase certificate binds the same evidence hash in its attests field.","does_not_prove":"What a browser would show. The battery reads the HTML as served — script-rendered content is invisible to it and the report says so on itself. Not an endorsement, not a ranking claim, and nothing about any other moment.","verify_url":"https://scvd.store/api/onpage-audit/{audit_id}"},{"id":"launch_check","name":"Launch checks (one real purchase attempt, from the buyer's side)","trust_model":"Third-party observation","signature_covers":"The whole walk: the endpoint named, the moment, the exact User-Agent sent, every stage (approach, challenge, terms, screen, payment, settle, delivery) with its detail, what was paid, to whom, the settlement transaction where one came back, the paying field wallet, and the record's evidence hash. The purchase certificate binds the same evidence hash in its attests field.","does_not_prove":"Anything about any other moment, any other buyer, or the seller generally — one transaction, once. An unpaid verdict is a statement about this store's published rules (spend cap, sanctions screen, rails carried), never about the seller. Payment was presented in the v2 shape only; a v1-only seller's refusal is recorded as exactly that. Never a badge, never a score.","verify_url":"https://scvd.store/api/launch-check/{check_id}"},{"id":"the_mandate","name":"Mandates (claimed authorization, recorded before the acting)","trust_model":"Third-party observation","signature_covers":"The whole record: the claimed instructions verbatim, who claimed to submit them (agent or principal — itself a claim), the declared cap and expiry where given, the moment of recording, and the record's evidence hash. The purchase certificate binds the same evidence hash in its attests field, and any later certificate citing the mandate_id carries that citation signed.","does_not_prove":"That the human principal actually gave these instructions — chain-of-custody, never truth-of-intent, and the store cannot distinguish a principal's client from an agent claiming to be one. Nor that the declared cap or expiry were honored: declared claims are recorded, never enforced. What it proves is narrower and real: this exact claim existed, signed and dated, before every purchase that cites it.","verify_url":"https://scvd.store/api/mandate/{mandate_id}"},{"id":"the_statement","name":"Wallet statements (the chain's side of an agent's books)","trust_model":"Third-party observation","signature_covers":"The whole record: the wallet, the exact block window and chain head at read, every USDC transfer in and out (counts and totals over the full window; per-direction lists capped and saying so), each row's transaction hash, counterparty, amount and block, the coverage word, and the record's evidence hash. The purchase certificate binds the same evidence hash in its attests field.","does_not_prove":"What any transfer was FOR, whether the wallet's owner knows about them, or anything outside the stated window, asset, or chain — USDC on Base only, and a wallet moving other tokens or on other networks shows none of that here. No comparison to the agent's own ledger was made or possible: we never see one. window_unreadable is a fact about our read, never about the wallet.","verify_url":"https://scvd.store/api/statement/{statement_id}"},{"id":"settlement_reconciliation","name":"Settlement reconciliations (amount taken against ceiling in force)","trust_model":"Third-party observation","signature_covers":"The whole observation: the transaction asked about, the USDC movement found, the ceiling in force, WHERE THAT CEILING CAME FROM, whether it was observed or merely declared, the headroom between the two, the chain head at read time, and the moment. cap_observed is a signed field in its own right, because the difference between a ceiling we read off Base and a ceiling somebody told us is the entire weight of this artifact.","does_not_prove":"That a DECLARED ceiling is real. Where cap_observed is false the number came from whoever commissioned the receipt — generally the party it benefits — and the signature covers only that we were told it, never that it is true. It also cannot see a ceiling granted in an earlier transaction: 'no cap observed' means 'not in this receipt'. And an over_cap on a declared ceiling is a fact about what the caller said, not about the chain.","verify_url":"https://scvd.store/api/reconciliation/{reconciliation_id}"},{"id":"bitcoin_anchor","name":"Patron Bitcoin anchors","trust_model":"Custody and timestamp only","signature_covers":"Nothing directly on the record. Two independent bindings do the work: the purchase certificate signs the buyer's digest via its attests field, and the OpenTimestamps proof commits the same digest into a Bitcoin transaction — the store's dated word and Bitcoin's clock, separately checkable.","does_not_prove":"What the digest is a digest OF. The label is the buyer's own claim, stored verbatim and never checked; the proof establishes the digest existed by a Bitcoin block, nothing about the bytes behind it.","verify_url":"https://scvd.store/api/bitcoin-anchor/{anchor_id}"},{"id":"tab_delta_receipt","name":"Tab contribution receipts (the pooled corpus, layer 3)","trust_model":"Custody and timestamp only","signature_covers":"The receipt object exactly as served in signed_payload: the receipt id, the sha256 digest of the delta's canonical JSON, the delta kind, the moment of acceptance, and the trust line. An anonymized delta matching this digest was accepted at this time — nothing more.","does_not_prove":"That the report is true. Deltas are self-reported by contributing agents and unverified individually; any aggregate published from the pool is aggregated and signed by us, and that signature covers the arithmetic, never the truth of any single report. Sample sizes ride every published figure because a vendor can feed its own pool — the defence is sunlight, not a promise of resistance. The receipt also does not identify the contributor: nothing does, by design, which is why it doubles as the contribute-to-access ticket.","verify_url":"https://scvd.store/api/tab/pool"},{"id":"corpus_snapshot","name":"Corpus snapshots (the ecosystem record)","trust_model":"Third-party observation","signature_covers":"The canonical snapshot: version, sequence, the moment taken, the previous entry's digest, the source, the week, and the whole ward round it freezes — hash-linked to the entry before it and OTS-stamped into Bitcoin.","does_not_prove":"That the observed services behave the same at any other moment, or that the record is complete. The chain proves WE did not rewrite our own history; it cannot prove we saw everything.","verify_url":"https://scvd.store/corpus.json"},{"id":"phantom_check","name":"Phantom checks","trust_model":"Third-party observation","signature_covers":"The check id, the target URL, and the observation: whether it answered, with what status, how fast, and when we looked.","does_not_prove":"That the URL is up now, was up before, or will be up later. It is one look, from outside your infrastructure, about six hours after you asked, and unreachable is a finding rather than an error.","verify_url":"https://scvd.store/api/verify/{check_id}"},{"id":"context_anchor","name":"Context anchors","trust_model":"Custody and timestamp only","signature_covers":"The anchor id, patron number, date, the summary exactly as the buyer wrote it, and the agent name if one was given.","does_not_prove":"Anything at all about whether the summary is true. The buyer wrote it; we filed it and dated it. We never read it as instructions and never will.","verify_url":"https://scvd.store/api/verify/{anchor_id}"},{"id":"stamp","name":"Visit stamps and Countermarks","trust_model":"Self-signed (in-process)","signature_covers":"The stamp id, variant, ISO week, date, and where present the bearer's chosen name, the punched card, the consecutive-week count and the week's store condition.","does_not_prove":"That the bearer is any particular party. A name on a stamp is a name somebody chose.","verify_url":"https://scvd.store/api/verify/{stamp_id}"},{"id":"lucky","name":"Luckies","trust_model":"Self-signed (in-process)","signature_covers":"The whole lucky record, including its status and any keeper's note about a status change.","does_not_prove":"Luck.","verify_url":"https://scvd.store/api/verify/{lucky_id}"},{"id":"gazette_issue","name":"Gazette issues","trust_model":"Self-signed (in-process)","signature_covers":"The issue's markdown, exactly as printed. The copy you hold is the copy that went to press.","does_not_prove":"That anything reported in it is correct — only that it has not been altered since printing.","verify_url":"https://scvd.store/api/verify/gazette_{n}"},{"id":"payout_authorization","name":"Payout authorizations (bounty rewards and credit cash-outs)","trust_model":"Self-signed (in-process)","signature_covers":"An EIP-3009 TransferWithAuthorization over USDC on Base: from the store's declared field wallet, to a named recipient, for a stated amount, valid until a stated unix second, with a single-use nonce. Signed with the FIELD WALLET's secp256k1 key — not the ed25519 artifact key that signs everything else on this page, and not interchangeable with it. Anyone may submit it to the USDC contract; the contract checks the signature itself, which is why the authorization IS the payment rather than a promise of one.","does_not_prove":"That the store still holds the balance to honour it — an authorization is spendable only while the field wallet is funded, and the USDC contract, not this store, is the thing that decides. It expires on its own and nothing is owed afterward. A credit cash-out can only ever pay the wallet that earned it; a bounty reward pays the address the claim named, screened before signing. Neither is a certificate: they carry no verify URL and prove nothing about goods, only about money we authorized.","verify_url":"https://scvd.store(none — submit it to the USDC contract on Base; the token verifies it)"}],"watch_row_canonical_form":"The watch families are the exception to the omission rule above: absent optional fields serialize as null rather than being omitted, so every row is the same shape and any row is quotable alone. Standing watch rows sign JSON.stringify({watch_id, url, at, verdict, status, latency_ms, failed}); conformance watch passes sign JSON.stringify({watch_id, url, at, verdict, status, failed, advisories}) — exactly those keys, exactly that order, null for an absent status or latency.","key_surfaces":{"public_key":"https://scvd.store/.well-known/scvd-signing-key","did_web":"https://scvd.store/.well-known/did.json","externally_anchored_history":"https://scvd.store/.well-known/anchor-log.json","liveness":"https://scvd.store/.well-known/liveness.json"},"related":{"whose_word":"https://scvd.store/attestation — trust model per artifact class, key custody, and what is NOT built here, in its own words.","x402_artifacts":"The signed offers and receipts this store emits during payment follow the x402 offer-receipt extension, not this namespace; conformance vectors at https://scvd.store/.well-known/conformance/offer-receipt-vectors.json and a free checker at POST https://scvd.store/api/conformance/v1.","reference_verifier":"https://github.com/seancrecord/scvd-general-store-repo/tree/main/verifier — MIT, zero dependencies, works on any issuer's x402 artifacts; the certificate checks in it implement this page.","what_is_not_claimed":"https://scvd.store/.well-known/trust.json"},"honest_limit":"This spec is published by the party whose artifacts it describes, and one key signs everything at a time. Naming a format does not make its issuer trustworthy; it makes its issuer CHECKABLE, which is smaller and worth having. Weigh anything load-bearing against /attestation's stated limits before building on it."}