Typed Standards: relations to public projects
typedstandards-core-satellite-example: the SciOS core-and-satellite model applied to Typed Standards, published as two signed records, map.yaml and core.md.
The map places 34 public projects in three rings by their technical relation to Typed Standards, and the core record measures Typed Standards against the model's list of core responsibilities and assesses it as a satellite. This page is generated from those two signed files and the repository's README, and is not signed itself.
How Typed Standards was used here
Typed Standards, in its own record (core.md): A specification for signed records of how analytical artifacts were produced, including AI-assisted analyses of public data, with a reference producer, a reference verifier and a reference publishing application. Its mission: Make how an analytical artifact was produced checkable by anyone, offline, without trusting its publisher.
What was produced. Two signed records: package/core.bundle.json for core.md, and package/map.bundle.json for map.yaml. Each record carries:
- the file's exact bytes and their SHA-256, a 64-character fingerprint that changes if any byte changes;
- the sources the fetch program used, each with its location, SHA-256, size, HTTP status, fetch time and licence: 34 in the map record and 11 in the core record, 5 of them in both, out of the 40 recorded in
corpus/manifest.json; - the two programs that made the file, each named by the SHA-256 of its code;
- two labels. The profile says a script wrote the file and can write it again. The capture method says the packaging program read the finished file rather than watching the writer run. Nothing verifies that label (
docs/verify-output.txt, line 15); - the signer: a key that names itself, with no registry, account or person behind it.
How it was made.
corpus/pin.mjsfetched each source once and pinned it: it recorded the SHA-256 of what the location served. Then it wrotecore.mdandmap.yamlfrom the list incorpus/sources.jsonand those pins.package/build.mjsread the two finished files, then packaged and signed each one.
The key was generated for this example, outside the repository. It is now held in the publisher's 1Password vault, and signing runs only in the publisher's own terminal.
What you can check. After cloning the repository, in a terminal:
- Both records verify offline:
npm ci && node verify.mjs. The output should matchdocs/verify-output.txt, whose line 46 readsnetwork: global fetch calls 0; injected fetch calls 0. - Each file is byte for byte what was signed:
shasum -a 256 core.md map.yamlprints the SHA-256 that each record states for its file, ascontentHash.sha256. - Any pinned source can be fetched again and compared:
node corpus/pin.mjs --forcein a scratch clone, thengit diff corpus/manifest.json. - Both files can be written again from the pins, offline:
node corpus/pin.mjs, thengit diff --exit-code core.md map.yaml. - The web page,
docs/index.html, comes only from signed bytes:npm run check:pageregenerates it and compares, and the generator refuses a signed file whose SHA-256 differs from its record.
What it does not establish. The table below marks five things as not covered: who holds the key, when the records existed, inclusion in a public transparency log, revocation of the key, and whether any statement in either file is correct. It marks four more as asserted: signed, but resting on the signer's word.
Why it was useful.
- The checks run offline on your own copy. They show that the files are what this key signed, whichever server delivered them, but not who holds the key.
- The source pins and the labels are inside the signed bytes, so changing any of them breaks check #1, which recomputes the hash of the whole signed record.
- A signed git commit also fixes bytes. A record is also self-contained, verifies offline against the specification's numbered checks, and carries its source pins and labels inside its signed bytes.
- Building this example ran into three gaps in the specification and its reference packages, all filed (
docs/findings.md): two filed before (typedstandards#91, #88) and one found here (typedstandards#96, hub#230).
Terms used below.
- ref: a location, with the SHA-256 of what that location served.
- front matter: the YAML block between the two
---lines at the top ofcore.md. - inline output: the file's bytes, carried inside the record.
raw-bytes/v1is the rule that they are carried exactly as they are. - envelope: the whole signed record. The key signs its hash.
- did:key: an identifier made from the public key itself, so no registry is needed.
- Ed25519ph: the signature algorithm.
The map
Ring 1 (8) Standards the specification builds on.
- W3C PROV-O
- in-toto Attestation Framework (DigestSet)
- Sigstore Rekor (hashedrekord)
- RFC 3161 Time-Stamp Protocol
- RFC 8785 JSON Canonicalization Scheme
- RFC 8032 EdDSA (Ed25519ph)
- The did:key Method v0.9
- Discourse Graphs
Ring 2 (15) Adjacent standards, drafts and proposals.
- C2PA Technical Specification 2.3
- W3C Verifiable Credentials Data Model v2.0
- IETF SCITT architecture (RFC 9943)
- SLSA Build Provenance v1.2
- Nanopublication Guidelines
- Open Verification: the Proof-of-Control Standard for Agents
- The Proof of Insight Protocol
- Project NANDA AgentFacts
- MCP SEP-3094: Granular Citations Format (draft)
- ATProto Lexicon
- Open Knowledge Format v0.2
- W3C DCAT 3
- RO-Crate 1.3
- Workflow Run RO-Crate 0.6
- MIRA schema (draft)
Ring 3 (11) Implementations, possible emitters, and agent runtimes.
- civicaitools.org
- socrata-mcp-server
- typedstandards.org verifier
- typedstandards-eval-run-example
- qsv
- Verikan
- MCP for CKAN (okfn/mcp-server)
- hi-oss-ai-red-teaming
- Strands Agents (Python SDK)
- Microsoft Agent Framework
- Open-source AI foundation layer (Mila and Mozilla initiative) (not pinned)
core.md, assesses it as a satellite and does not declare type: core. The rings group the edges and are not orbits: the map has no orbits edge (What the map leaves out). Each numbered node is one edge's other end, and each arrow runs from subject to object. Every edge gives the same as text.builds-on(12), circle and solid line. The subject implements, or normatively uses, the object's published specification or code.complements(7), square and dashed line. The two address different layers or artifact classes of one job and can be used together. Neither depends on the other.could-emit(1), triangle and dash-dot line. The subject's own public text states an intent to produce Typed Standards records, cited by URL and date.adjacent(14), diamond and dotted line. A related problem space. Neither depends on the other, and there is no public statement of an intent to emit or evaluate Typed Standards records.- Dashed outline: the source has no fixed version, so it is not pinned (sha256 null). 1 edge.
- In the tables, → marks an edge whose subject is typedstandards.org (typedstandards.org builds-on W3C PROV-O). ← marks one whose subject is the project in the row (civicaitools.org builds-on typedstandards.org).
What the map leaves out
No orbits edge
The published schema shows one edge type, orbits, from a satellite to a core. This map has no orbits edge. No core record exists in this domain to be the object of one, and the model says a core is never a satellite. Each edge names its relation in x-typedstandards.relation, because the published schema has no edge type for any of these relations.
map.yaml, x-typedstandards.edgeTypes
Not pinned (1)
- 34. Open-source AI foundation layer (Mila and Mozilla initiative) (https://mila.quebec/en/news/mila-and-mozilla-announce-new-initiative-to-build-trustworthy-open-source-ai-for-everyone): sha256 null. Only announcement pages exist, from Mila and from Mozilla, both dated 2026-09-17. No repository, specification or release is published, and an announcement page is not immutable.
Dropped (1)
Considered for the map and left out, with the reason map.yaml gives.
| Name | Seed | Reason |
|---|---|---|
| DSSE (Dead Simple Signing Envelope) | Ring 1, listed with in-toto | Typed Standards uses neither the DSSE envelope nor its pre-authentication encoding. It signs an Ed25519ph signature over the envelope-hash hex string (specification §8.3.1). The specification does name DSSE: its adjacent-standards table lists in-toto / DSSE (§5.5), and Appendix C lists DSSE as a candidate envelope-serialization profile for in-toto-native consumers. Nothing is built on it. The in-toto entry covers the conventions the specification does use. |
The core record: core.md
selfAssessment: satellite, typeDeclared: false.
The record's basis for its self-assessment (4)
- One maintainer. The project's roadmap says "The project is maintained by one person" (hub-roadmap, section 2).
- The model describes a core as a body of people, "a community of humans, not a collaboration of artifacts", and reads one repository surfacing a record as, in spirit, a satellite.
- Typed Standards is a specification, and the model says a core is not a standards body.
- No core record exists in this domain, so the map beside this record carries no orbits edge.
Absence markers in the front matter (4)
Comment lines 6, 17, 18 and 19 of core.md. A YAML parser discards comments, so the generator reads them from the text.
| Commented-out field | As written |
|---|---|
type: core | NOT DECLARED. The self-assessment below is "satellite"; see x-typedstandards. |
funding: {} | NOT DONE. No fiscal host, no public ledger, no allocation rule; nothing is routed to other projects. |
agent: {} | NOT EXPOSED for this domain. The project's MCP server serves civic open data, not this domain's map; no vetted skills or eval suites for the domain. |
certifies: [] | NOT DONE. No model, agent or tool is certified; no norms for AI-generated contributions. |
Core responsibilities
The table from core.md (lines 90 to 99), whole. 5 of 8 verdicts read NOT DONE.
| Core responsibility (the model's list) | What this project does | Verdict |
|---|---|---|
| Hold an opinionated judgment on the domain: canonical, dependency, trusted, experimental, dead | map.yaml states technical relations to public projects. It marks nothing canonical, trusted or dead, and it is one maintainer's reading. | NOT DONE |
| Maintain stabilized, canonical versions of the domain's artifacts | The specification (v0.1.9, CC BY 4.0) and its reference packages, versioned independently. They are this project's own artifacts; no other party has declared them canonical. | Partial |
| Manage in-flow and distribution of funding | None. | NOT DONE |
| Build and maintain an agentic toolchain for the domain | An offline verifier library and a producer library that an agent can call, and an MCP server and a publishing skill for civic open data. No MCP endpoint serves this domain's map, and there is no eval suite. | Partial |
| Certify or attest to AI behavior in the domain | The specification's attestation/certifies/v1 and attestation/evaluates/v1 sub-types are ratified and recognized by check #12. No check enforces their authorization rules or payloads (specification §8.12.4), and nothing is certified. | NOT DONE |
| Act as a partner channel for AI labs | None. | NOT DONE |
| Set internal protocols for governance, finance and satellite lifecycle | A public roadmap and public decision records, each decided by the solo maintainer. No finance protocol, and no insertion, orbit, accretion, ejection or sunsetting protocol. | Partial |
| The people: maintainers, governance, sustainability and domain roles | One maintainer. | NOT DONE |
Every edge (34)
Every edge in map.yaml, in document order: the picture as text. → and ← as in the legend. Each edge's basis is in the collapsed table below.
| # | Name | Ring | Relation |
|---|---|---|---|
| 1 | W3C PROV-OW3C | 1 | → builds-on |
| 2 | in-toto Attestation Framework (DigestSet)in-toto project | 1 | → builds-on |
| 3 | Sigstore Rekor (hashedrekord)Sigstore | 1 | → builds-on |
| 4 | RFC 3161 Time-Stamp ProtocolIETF | 1 | → builds-on |
| 5 | RFC 8785 JSON Canonicalization SchemeRFC Editor (Independent Submission) | 1 | → builds-on |
| 6 | RFC 8032 EdDSA (Ed25519ph)IRTF Crypto Forum Research Group | 1 | → builds-on |
| 7 | The did:key Method v0.9W3C Credentials Community Group | 1 | → builds-on |
| 8 | Discourse GraphsDiscourse Graphs project | 1 | → builds-on |
| 9 | C2PA Technical Specification 2.3Coalition for Content Provenance and Authenticity | 2 | → complements |
| 10 | W3C Verifiable Credentials Data Model v2.0W3C | 2 | → adjacent |
| 11 | IETF SCITT architecture (RFC 9943)IETF | 2 | → complements |
| 12 | SLSA Build Provenance v1.2SLSA project | 2 | → adjacent |
| 13 | Nanopublication GuidelinesNanopublication community | 2 | → adjacent |
| 14 | Open Verification: the Proof-of-Control Standard for AgentsAdvanced AI Society (steward), in the LFDT-ProofOfControl GitHub organization | 2 | → complements |
| 15 | The Proof of Insight ProtocolArclio LLC, as interim editor | 2 | → adjacent |
| 16 | Project NANDA AgentFactsProject NANDA | 2 | → adjacent |
| 17 | MCP SEP-3094: Granular Citations Format (draft)Model Context Protocol project (open proposal) | 2 | → complements |
| 18 | ATProto LexiconBluesky Social PBC (AT Protocol) | 2 | → adjacent |
| 19 | Open Knowledge Format v0.2Google Cloud | 2 | → complements |
| 20 | W3C DCAT 3W3C | 2 | → complements |
| 21 | RO-Crate 1.3researchobject.org community | 2 | → adjacent |
| 22 | Workflow Run RO-Crate 0.6Workflow Run RO-Crate working group | 2 | → adjacent |
| 23 | MIRA schema (draft)MIRA-science | 2 | → adjacent |
| 24 | civicaitools.orgCivic AI Tools | 3 | ← builds-on |
| 25 | socrata-mcp-serverCivic AI Tools | 3 | ← complements |
| 26 | typedstandards.org verifierTyped Standards | 3 | ← builds-on |
| 27 | typedstandards-eval-run-exampleTyped Standards | 3 | ← builds-on |
| 28 | qsvdatHere | 3 | ← could-emit |
| 29 | VerikandatHere | 3 | ← builds-on |
| 30 | MCP for CKAN (okfn/mcp-server)Open Knowledge Foundation | 3 | → adjacent |
| 31 | hi-oss-ai-red-teamingHumane Intelligence | 3 | → adjacent |
| 32 | Strands Agents (Python SDK)Strands Agents | 3 | → adjacent |
| 33 | Microsoft Agent FrameworkMicrosoft | 3 | → adjacent |
| 34 | Open-source AI foundation layer (Mila and Mozilla initiative)Mila and Mozillanot pinned: sha256 null. Only announcement pages exist, from Mila and from Mozilla, both dated 2026-09-17. No repository, specification or release is published, and an announcement page is not immutable. | 3 | → adjacent |
Every edge's basis, and the other end's id, location and SHA-256 (34)
Each ref is either a file at a 40-character commit SHA, a dated W3C TR URL, an rfc-editor.org text URL, or a published npm release tarball. A ref gives both the location and the SHA-256 of the bytes that location served when it was fetched. Where a project has no immutable location, the ref gives the location, a null sha256, and the reason in x-typedstandards.pin.
typedstandards.org's own end carries the same ref on every edge: https://raw.githubusercontent.com/npstorey/civic-ai-tools/cfdb210cdae865a872ff30f7c86c5fdcd74e9886/docs/architecture/typed-standards-specification.md, sha256 0e3b54b39e6877a076c495b82afd7295aefac09c70054c02e9832147037ff3f5.
| # | Other end | Basis | Location and SHA-256 |
|---|---|---|---|
| 1 | w3.org/TR/prov-o | Every record's provenance graph is PROV-O JSON-LD, and the envelope does not redefine derivation, attribution or generation (specification §5.5, §8.1.4). | https://www.w3.org/TR/2013/REC-prov-o-20130430/6b96671ab84faf12ce3f041aca12c3f93a6df2ed242348810743179a68e69555 |
| 2 | github.com/in-toto/attestation | The contentHash field uses the in-toto DigestSet convention (algorithm name to hex digest), and the type URIs follow the pattern of in-toto's predicateType (specification §5.5). | https://raw.githubusercontent.com/in-toto/attestation/df02077bf97218a8860a5c534eff1f1381f56984/spec/v1/digest_set.md0b1889fdea7f6d623b41555632aedf04ee4398cf02a32002060608c75ebb038e |
| 3 | github.com/sigstore/rekor | Records submit hashedrekord entries, and verify-core checks Merkle inclusion against a pinned Rekor log key (specification §8.3.2, §9.2 check #8). This example's records carry no Rekor entry. | https://raw.githubusercontent.com/sigstore/rekor/a36bd716fd0d81c314092718f37b53dc26b2af38/pkg/types/hashedrekord/v0.0.1/hashedrekord_v0_0_1_schema.jsonb8ecdc597ddb7e3289ae41e28fc3983ea25f248f531314a68dcc2361f3edada4 |
| 4 | rfc-editor.org/rfc/rfc3161 | Records carry RFC 3161 timestamp tokens, which verify-core checks against pinned TSA anchors (specification §9.2 check #7). This example's records carry none. | https://www.rfc-editor.org/rfc/rfc3161.txt39fd17644ff2d654bc83814a78b1c5b5e7517f496741f34ead5064943eb98240 |
| 5 | rfc-editor.org/rfc/rfc8785 | The envelope hash is the SHA-256 of the RFC 8785 canonicalization of the unsigned envelope (specification §8.2). | https://www.rfc-editor.org/rfc/rfc8785.txt63d52294eb0e3f0014174288186d388b4ddbf2c67d1ce8af1d9726eb0c3ab240 |
| 6 | rfc-editor.org/rfc/rfc8032 | Every record signature is Ed25519ph, defined in RFC 8032 §5.1 (specification §8.3.1). | https://www.rfc-editor.org/rfc/rfc8032.txted63657ff389301282b169b0abde9b5dd2c7e4d524fdfa5da6ff3094fc93c4c3 |
| 7 | github.com/w3c-ccg/did-key-spec | A self-certifying signer's identifier is a did:key in base58btc form, derived from the signing key (specification §8.5.1, hub ADR-0030). This example's two records use one. | https://raw.githubusercontent.com/w3c-ccg/did-key-spec/2cc490c38c5aacf58497a87fc0cf8794668bf716/index.htmle014a146acb0dcdafbdfee01226061d778da3ee72e8a048a7d53754c79675764 |
| 8 | github.com/DiscourseGraphs/schemas | The specification takes its claim, question and evidence content types and its support, opposition and answer relations from the Discourse Graphs pattern (§5.5, §7.5). Those content types are specified, not built, and the current schema file names its relations differently. | https://raw.githubusercontent.com/DiscourseGraphs/schemas/19403e9e28d505dbce6cd2af5868eb27af6e3e36/owl/dg_core.ttl0e41bd5223785716146fac882667a56afdb14e705380c41704174a55f82a8982 |
| 9 | github.com/c2pa-org/specifications | C2PA binds signed provenance manifests to media assets, and Typed Standards signs production records for analytical artifacts. It is the same job for a different artifact class, and neither depends on the other (specification §5.5). | https://raw.githubusercontent.com/c2pa-org/specifications/6998a277b4519fc652550686861f0b97a64e5c19/build/site/specifications/2.3/specs/C2PA_Specification.html0d2a8936068caa60cbb5ad8f04d8c83dccf700d3f9d97fb9b589f862438a37d1 |
| 10 | w3.org/TR/vc-data-model-2.0 | A data model for issuer-secured claims about a subject. It does not model how an artifact was produced (specification §5.5). | https://www.w3.org/TR/2025/REC-vc-data-model-2.0-20250515/a9196a3d0b6601356c4e127bad24f8c7f2c17f6ed22e41b35755a910104156f8 |
| 11 | rfc-editor.org/rfc/rfc9943 | An architecture for transparency services that register signed statements of any payload type and return receipts. That is the transparency layer Typed Standards fills with Sigstore Rekor today. | https://www.rfc-editor.org/rfc/rfc9943.txt204aea020731e1306e8ffe0aaae5c9559a7a8edf24bd089ae79d6a6d6c7676f1 |
| 12 | github.com/slsa-framework/slsa | Build provenance for software artifacts, carried as an in-toto predicate. Typed Standards covers analytical artifacts instead (specification §5.5). | https://raw.githubusercontent.com/slsa-framework/slsa/19e4e2f005f871270c4f555fc47afecfb37f3efe/docs/spec/v1.2/build-provenance.md182ab5cf823c374874136371466ba43f99f0a9ba87a8046757d26a2ed74854a0 |
| 13 | github.com/Nanopublication/Guidelines | Nanopublications are RDF named graphs that pair an atomic assertion with its provenance and publication information. Typed Standards is envelope-first JSON with capture-method labels, and consuming one as the other is not built (specification §5.5). | https://raw.githubusercontent.com/Nanopublication/Guidelines/8388dd90795b264f4b01c64d0f7218babcae4871/index.htmlf3ee522113a4372604d61ff2cae25ee307cedbcc5ab1094a3e86c5ebff56dbbb |
| 14 | github.com/LFDT-ProofOfControl/ov-poc-standard | Specifies audit requirements and an evidence-token format (JWT and CWT) for an agent's runtime control: the data it touched, the authority it used, the tools it invoked. It points to SLSA and in-toto for artifact provenance and defines no record of how an analytical artifact was produced. | https://raw.githubusercontent.com/LFDT-ProofOfControl/ov-poc-standard/22c7b625be459f5eee7dd8690afd080b5141b8c6/0.1/en/0x01-Frontispiece.md28323b575b63255c6636c62ef748fb694455f86d56fa81bf28b6fc31c20b3eb5 |
| 15 | github.com/proof-of-insight/spec | Specifies the same kind of object as Typed Standards: a signed, content-addressed record of how an analysis was produced, as a graph of observe, compute, reason and attest steps, with a Sigstore Rekor profile. It is working draft v0.7.0, and neither depends on the other. | https://raw.githubusercontent.com/proof-of-insight/spec/6f390d76a3a660d3863fd7341062bdfdc3ec29f2/versions/v0.7.0.mde6a63102bf7830b982e7740afdb4610e74a908ad3434e8b64122dcbbd636b2b0 |
| 16 | github.com/projnanda/agentfacts-format | A JSON Schema for agent metadata (identity, endpoints, capabilities, evaluations, certification), used for discovery and routing. It defines no record of how an output was produced. | https://raw.githubusercontent.com/projnanda/agentfacts-format/89e938c08a7166341201568055c0a3b6852d26e4/agentfacts_schema.json34495d046d6c579209296c8a4ffcd32b7ff2624733d63eda6ada8df8dbef1745 |
| 17 | github.com/modelcontextprotocol/modelcontextprotocol/pull/3094 | Proposes that MCP tool results carry citations to source fragments. Its content-integrity section says the proposal 'punts on a decision to add integrity checks', which a signed record provides at another layer. | https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/109bbfe75d43c93a23ee17aa2b6dcdf05d21b338/seps/3094-granular-citations-and-fragment-addressing.mdebc6d82df5d14ada988d90506029be251674a272184ef0f958d4ab54f0a80715 |
| 18 | atproto.com/specs/lexicon | A schema language for typed records in the AT Protocol. The SciOS paper names it as a model for its common schema. Neither depends on the other. | https://raw.githubusercontent.com/bluesky-social/atproto-website/7a6cdd6c7b48d2aa8d93293827374e0c4fdbb305/src/app/%5Blocale%5D/specs/lexicon/en.mdx3c893eb2eb94c50c12ad491d9b75f3965af49d8328be5140bea628126969be55 |
| 19 | github.com/GoogleCloudPlatform/knowledge-catalog/okf | Organisational knowledge as Markdown files with YAML front matter, with provenance and attested-computation fields that are not signed. A raw-bytes/v1 record can sign such a file byte for byte, as this example signs core.md. The SciOS paper names it as a model for its schema. | https://raw.githubusercontent.com/GoogleCloudPlatform/knowledge-catalog/22efaa5402775a7c4d4c37f89e41258daaf3cb65/okf/SPEC.md26aa5da029278939f914e578107242d9607d4f2dc5fe153272b82f9ed1030101 |
| 20 | w3.org/TR/vocab-dcat-3 | DCAT describes datasets and catalogs for discovery. A record's data-source references may cite DCAT-described datasets (specification §5.5). | https://www.w3.org/TR/2024/REC-vocab-dcat-3-20240822/068b43f7814525ea784b7d565ada8de2b4538f5377517c4f0ec9b162a34dedfb |
| 21 | github.com/ResearchObject/ro-crate | A JSON-LD packaging format for research data. The specification names an RO-Crate compatibility profile as the direction for a multi-file package (open question Q1). Nothing is built. | https://raw.githubusercontent.com/ResearchObject/ro-crate/22fbd7e098ccd2839c80967e363a2201528a2efe/docs/_specification/1.3/structure.mde63fe86d1a098d01ab9ea71af4f0f8742ab9fbcd29fe8afc7b55837c0e5d96e9 |
| 22 | github.com/ResearchObject/workflow-run-crate | RO-Crate profiles for recording tool and workflow executions. The specification names WRROC with RO-Crate as the direction for a multi-file package. Nothing is built. | https://raw.githubusercontent.com/ResearchObject/workflow-run-crate/3c5b530c3d2784169e461d3273855a6b3a57246e/docs/profiles/0.6/workflow_run_crate/index.md204a5af0f2823899503fe150d53feccb2a04b2f5f9988d9f605d2b4d269cb597 |
| 23 | github.com/MIRA-science/schema | A draft LinkML schema for question, claim and evidence graphs over research papers, built on Discourse Graphs and PROV. It signs nothing. | https://raw.githubusercontent.com/MIRA-science/schema/f42c5966629cbc90ca09464b52d55c82c4f21116/mira.yaml21eafff5ac0bd7ad5ef9edcd867491824a4ff833b4af1096cb4cdb4298eaae0a |
| 24 | civicaitools.org | The reference publishing application. It answers questions over civic open data through MCP servers and packages each published analysis as a signed record package. | https://raw.githubusercontent.com/npstorey/civic-ai-tools-website/109eecb809a53bd36cc3468c79d243457570a49d/README.mdba16dd52cf07fe369bf6359d22bfe36bae345614179fd14d5e814ac481cde89f |
| 25 | github.com/npstorey/socrata-mcp-server | An MCP server that gives AI tools query access to Socrata open-data portals. It serves the tool results an analysis cites, and signs nothing itself. | https://raw.githubusercontent.com/npstorey/socrata-mcp-server/5b18c979b37465999d686785074973a340207555/README.md7e4a5242bf2d8f2439ef0963b9afb823fbfced25bcc7bad59375c5dca618ae02 |
| 26 | typedstandards.org/verify | The site's client-side verifier runs verify-core's checks on a record package in the browser. | https://raw.githubusercontent.com/npstorey/typedstandards/b0bf0a447ba35991ca2a211fa71983e1ba9ac78e/README.mdc0a1894c4089a615d685b420d632f50b9edfadd963a58fda9c7b9e025a086f9c |
| 27 | github.com/npstorey/typedstandards-eval-run-example | Turns one public AI benchmark evaluation run into two signed record packages that verify offline with one command (hub ADR-0028). | https://raw.githubusercontent.com/npstorey/typedstandards-eval-run-example/9031a94eebe0d800e52eab6fd4e01c7e788603a6/README.md3e405213b53a67e9ebffa7e1f332b34ddbbd3c894d6b1c556c8ca25109930529 |
| 28 | github.com/dathere/qsv | An open issue on the project's own tracker, titled with the intent, and a plan comment posted from the maintainer account describe emitting JCS envelopes and Ed25519ph signatures for the Data Schematic output. The issue is open and labelled revisit-later.Stated in: https://github.com/dathere/qsv/issues/4448 (2026-08-20); https://github.com/dathere/qsv/issues/4448#issuecomment-5440060941 (2026-08-27); https://github.com/dathere/qsv/issues/4448#issuecomment-5649582321 (2026-09-13). | https://raw.githubusercontent.com/dathere/qsv/7c43b6bc77b22556220328eef22f29b9fac6d24b/README.md1541ba978efb0231096072c945df32e282dda499fb6a919bee13a987c3efb639 |
| 29 | github.com/dathere/Verikan | Its README at the pinned release lists a module that builds 'Typed Standards evidence packages' and states 'Evidence format by Typed Standards'. Its package builder targets the datHere content profile at specification revision v0.1.7. | https://raw.githubusercontent.com/dathere/Verikan/8e5e85fdda9829d142358c51f9b5db797333ed47/README.md28e521a2d04351228578376487b4354e3ef39e9c2f46c2072d59eadee66dfe0b |
| 30 | github.com/okfn/mcp-server | An MCP server for CKAN portals, in an early research phase, whose repository states the aim of making AI-generated answers traceable to their underlying datasets. It states no intent to produce signed records. | https://raw.githubusercontent.com/okfn/mcp-server/38f65642325067feb3c0354f046a19b80520d526/README.mdb0937703f25c094df17c2f1f98389a98da9074c458c579936bf5c9ede0a326b8 |
| 31 | github.com/humane-intelligence/hi-oss-ai-red-teaming | A platform for human red-teaming evaluations of AI systems that keeps reviewable records (conversation capture, reviewer verdicts, an append-only audit trail). None is signed, and its public text states no intent to produce signed evaluation records, so no evaluator relation is asserted. | https://raw.githubusercontent.com/humane-intelligence/hi-oss-ai-red-teaming/046a45d5a37339133c4b3f527276bbf9fb2b61bc/README.md0b0343ea53fce2f3655b9bde927340c2852c95f1efbca9d9298d54f525ccffde |
| 32 | github.com/strands-agents/harness-sdk | An agent SDK that runs the model and tool calls a producer records in queries[] and trace. Its README states nothing about provenance or signing. | https://raw.githubusercontent.com/strands-agents/harness-sdk/45c2ffd3333cdb67c1dd9f4f208639ce3b89aa19/strands-py/README.mda5f8050bf77d175f9208e80d163e0f5ca337a50332fec05523e202c43f2742c3 |
| 33 | github.com/microsoft/agent-framework | An agent and workflow framework with built-in OpenTelemetry tracing, the trace shape a record's trace field carries. Its README states nothing about signed records. | https://raw.githubusercontent.com/microsoft/agent-framework/0c9944cc9f577d51277ac7c55dbc388b60a577af/README.md4a628aa224c014ff326587cc543a4991e483e11723a226f6fcdb22664224c58a |
| 34 | mila.quebec/en/news/mila-and-mozilla-announce-new-initiative-to-build-trustworthy-open-source-ai-for-everyone | An announced open standard of interface contracts, with a self-hosted reference implementation for running AI systems. Nothing is published yet, and the announcement says nothing about provenance or signing. | https://mila.quebec/en/news/mila-and-mozilla-announce-new-initiative-to-build-trustworthy-open-source-ai-for-everyone not pinned: sha256 null |
What the records prove / what they do not
From README.md (lines 85 to 109), whole. README.md is not a signed record.
This section describes the offline output of verify-core as node verify.mjs prints it (docs/verify-output.txt).
- Attested:
- checkable by anyone from the bundles in
package/. The row names the check that establishes it. - Asserted:
- stated inside the signed bytes, but resting on the signer's word. No check establishes it.
- Not covered:
- nothing in this repository addresses it.
| Property | Status | Why |
|---|---|---|
The bytes of core.md and map.yaml | Attested (#3, #4, #1) | Each record carries its file's exact UTF-8 bytes inline, under raw-bytes/v1 (#3 ok). #4 recomputes contentHash.sha256 from those bytes (ok), and #1 recomputes the envelope hash (verified). The digest is the file's ordinary SHA-256, so shasum -a 256 checks it without any Typed Standards code, and verify.mjs compares each file on disk with its signed output byte for byte. |
| The signature over each record | Attested (#2) | Ed25519ph over the envelope-hash hex string. Valid for both records. |
| One key signed both records | Attested (#14, #2) | #14 reports key_derived_match for each record: the did:key identifier is derived from the public key in that record's signature. verify.mjs then confirms that both signatures carry the same key and identifier. |
| The key names itself consistently | Attested (#6, checked by verify.mjs) | signature.kid, metadata.signingKeyId and signer.identifier are one string. No verifier implements spec check #6 (typedstandards#88), so verify.mjs checks it directly. |
| Who holds the key | Not covered | #5 reports self_certified with verified: false: no trust registry and no domain vouch for the key. displayName names the example, not a person. |
| Capture method and producer profile | Asserted | #15 reports ok: script-run is a value the scripted-recomputation profile allows. No check establishes that one program wrote the files and a second one packaged them. The label is signed, so it cannot be changed without breaking #1. |
| The source digests | Asserted | corpus/manifest.json pins 40 sources. The map record lists the 34 it uses and the core record the 11 it uses, 5 of them in both, in queries[].arguments: location, SHA-256, bytes, HTTP status, fetch time and stated licence. These are signed assertions that no check recomputes. Every location is immutable, so anyone can re-fetch it and compare. An accidental second fetch, 38 seconds after the pin, got identical digests for all 40 (docs/pin-record.md). |
core.md and map.yaml follow from the manifest | Asserted | node corpus/pin.mjs rewrites both files from corpus/sources.json and corpus/manifest.json without the network, and git diff --exit-code shows the same bytes. That reproduces the writer, but it is not a §9.2 check. |
| The relations, the bases and the self-assessment | Asserted | They are the signer's reading of each project's own public text. No check evaluates them, and the published schema has no edge type for any of these relations. |
| When the records existed | Not covered | Check #7 reads n/a because no RFC 3161 token was requested. External proofs are left out of this version (gate G1, D7), and metadata.createdAt is the signer's own claim. |
| Inclusion in a public transparency log | Not covered | Check #8 reads n/a because no Rekor entry was submitted. A Rekor entry is public and permanent, and a record re-signed after a gate would leave an abandoned hash in the log under this key. |
| Revocation of the key | Not covered | A did:key has no rotation and no revocation (hub ADR-0030 §7). |
| That any statement in either file is correct | Not covered | A signature shows the bytes are unchanged since signing, not that they are true (spec §5.3). |
Provenance
generated from map.yaml @ 38945eb4cb3ac6528f77647e082778fa8d0ebc9afb66c8cc25508127ba8d155c, core.md @ c85c650af7c47608a27cff4f6760d3313d62ff18095e8f4f0fdb947df6aece3b, README.md @ 21f956a13e0f1a18065999baeee0e8fe010d9c5a55ff4c5318db562bd02f9d6a
Generated by site/generate.mjs in github.com/npstorey/typedstandards-core-satellite-example, with one YAML parser, yaml, pinned exactly. The page carries no generation time: it is a function of the three inputs alone.
The three inputs
| Input | Signed record | SHA-256 |
|---|---|---|
map.yaml | Yes | 38945eb4cb3ac6528f77647e082778fa8d0ebc9afb66c8cc25508127ba8d155c |
core.md | Yes | c85c650af7c47608a27cff4f6760d3313d62ff18095e8f4f0fdb947df6aece3b |
README.md | No | 21f956a13e0f1a18065999baeee0e8fe010d9c5a55ff4c5318db562bd02f9d6a |
Yes: the file's bytes are the inline output of its record in package/, and its SHA-256 is that record's contentHash.sha256. The generator refuses to write this page otherwise. README.md is an input because the sections above that come from it are in neither signed file.