diff --git a/.changeset/add-graph-follow-lexicon.md b/.changeset/add-graph-follow-lexicon.md deleted file mode 100644 index 5f86d742..00000000 --- a/.changeset/add-graph-follow-lexicon.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hypercerts-org/lexicon": minor ---- - -Add `app.certified.graph.follow` lexicon — a social-graph follow record schema-compatible with `app.bsky.graph.follow` (same `tid` key, same `subject` / `createdAt` / optional `via` strongRef fields). Exports new `GRAPH_FOLLOW_NSID`, `GRAPH_FOLLOW_LEXICON_JSON`, `GRAPH_FOLLOW_LEXICON_DOC`, and `AppCertifiedGraphFollow` type namespace. diff --git a/.changeset/clarify-knownvalues-open-vocabulary.md b/.changeset/clarify-knownvalues-open-vocabulary.md deleted file mode 100644 index 8ebb5d8e..00000000 --- a/.changeset/clarify-knownvalues-open-vocabulary.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hypercerts-org/lexicon": patch ---- - -Clarify that `knownValues` is an open vocabulary, not a closed enum. Adds a "Schema Conventions" section to README.md explaining that custom string values are permitted on any `knownValues` field (and contrasting with `enum`, which is closed and validator-enforced). Updates inline descriptions on `app.certified.location#locationType`, `org.hypercerts.workscope.tag#category`, and `org.hypercerts.workscope.tag#status` to explicitly note that values beyond the listed set are permitted — bringing them in line with the existing wording on `org.hypercerts.collection#type`, `org.hypercerts.context.attachment#contentType`, and `app.certified.badge.definition#badgeType`. The `locationType` description now also explicitly calls out that polygons / multipolygons / featurecollections use the catch-all `geojson` entry rather than a typed variant. Fixes a misleading line in STRING_CONSTRAINTS.md that conflated `knownValues` with `enum`. Documentation-only — no schema or type changes. diff --git a/CHANGELOG.md b/CHANGELOG.md index e24bd3b4..958ceaca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,58 @@ # @hypercerts-org/lexicon +## 0.13.0 + +### Minor Changes + +- [#209](https://github.com/hypercerts-org/hypercerts-lexicon/pull/209) [`8ec051f`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/8ec051faaf46b507409d97ca609b05fb8f318a3d) Thanks [@s-adamantine](https://github.com/s-adamantine)! - Add `app.certified.graph.follow` lexicon — a social-graph follow record schema-compatible with `app.bsky.graph.follow` (same `tid` key, same `subject` / `createdAt` / optional `via` strongRef fields). Exports new `GRAPH_FOLLOW_NSID`, `GRAPH_FOLLOW_LEXICON_JSON`, `GRAPH_FOLLOW_LEXICON_DOC`, and `AppCertifiedGraphFollow` type namespace. + +- [#170](https://github.com/hypercerts-org/hypercerts-lexicon/pull/170) [`97981bd`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/97981bd1d321cb6147c01039103984eb297ebb08) Thanks [@satyam-mishra-pce](https://github.com/satyam-mishra-pce)! - Add cryptographic signature support to all lexicons + + Adds optional cryptographic signature support to all record lexicons, enabling platform attestation and verification that records were created through trusted services. The on-the-wire shape, signing procedure, and verification procedure all conform to Nick Gerakines' [ATProtocol Attestation Specification](https://tangled.org/strings/did:plc:cbkjy5n7bk3ax2wplmtjofq2/3m3fy2xuahc22) (see also the [accompanying blog post](https://ngerakines.leaflet.pub/3m3idxul5hc2r)). + + **New lexicons:** + - `app.certified.signature.defs` - Shared type definitions for signatures. Provides: + - `#list` - open union array of inline signatures and `com.atproto.repo.strongRef` references to remote proofs + - `#inline` - inline signature object with two required fields: `signature` (ECDSA bytes, low-S per BIP-0062, signing the record's CID) and `key` (DID verification method reference). The signing curve is determined by the multicodec prefix on the verification method's `publicKeyMultibase`, so no separate algorithm-tag field is carried on the signature itself. + - `app.certified.signature.proof` - Remote attestation proof record containing the CID of the attested content (computed with the spec's `$sig`-repository binding). + + **Changes to existing lexicons:** + + All 21 record lexicons now include an optional `signatures` property (a ref to `app.certified.signature.defs#list`) placed directly on the record with no wrapper object: + - `org.hypercerts.claim.activity` + - `org.hypercerts.claim.contribution` + - `org.hypercerts.claim.contributorInformation` + - `org.hypercerts.claim.rights` + - `org.hypercerts.collection` + - `org.hypercerts.context.acknowledgement` + - `org.hypercerts.context.attachment` + - `org.hypercerts.context.evaluation` + - `org.hypercerts.context.measurement` + - `org.hypercerts.funding.receipt` + - `org.hypercerts.workscope.tag` + - `org.hyperboards.board` + - `org.hyperboards.displayProfile` + - `app.certified.badge.award` + - `app.certified.badge.definition` + - `app.certified.badge.response` + - `app.certified.actor.profile` + - `app.certified.actor.organization` + - `app.certified.location` + - `app.certified.graph.follow` + - `app.certified.link.evm` + + Note on `app.certified.link.evm`: this record carries two orthogonal integrity primitives. The EIP-712 `proof` field proves wallet consent (the EVM key holder agreed to be linked to the DID). The `signatures` array proves record provenance (e.g. that a platform UI minted the record, defending against replay of harvested EIP-712 signatures). Both are useful and they do not conflict. + + **Design notes:** + + This is a non-breaking extension - signatures are optional on all records. Two signature patterns are supported: + 1. **Inline signatures** - Embedded directly in the record via `app.certified.signature.defs#inline`. + 2. **Remote attestations** - References to proof records in other repositories via `com.atproto.repo.strongRef`. + +### Patch Changes + +- [#213](https://github.com/hypercerts-org/hypercerts-lexicon/pull/213) [`80e5b42`](https://github.com/hypercerts-org/hypercerts-lexicon/commit/80e5b427b1e6886417d2db12017e7aa4a42a6482) Thanks [@s-adamantine](https://github.com/s-adamantine)! - Clarify that `knownValues` is an open vocabulary, not a closed enum. Adds a "Schema Conventions" section to README.md explaining that custom string values are permitted on any `knownValues` field (and contrasting with `enum`, which is closed and validator-enforced). Updates inline descriptions on `app.certified.location#locationType`, `org.hypercerts.workscope.tag#category`, and `org.hypercerts.workscope.tag#status` to explicitly note that values beyond the listed set are permitted — bringing them in line with the existing wording on `org.hypercerts.collection#type`, `org.hypercerts.context.attachment#contentType`, and `app.certified.badge.definition#badgeType`. The `locationType` description now also explicitly calls out that polygons / multipolygons / featurecollections use the catch-all `geojson` entry rather than a typed variant. Fixes a misleading line in STRING_CONSTRAINTS.md that conflated `knownValues` with `enum`. Documentation-only — no schema or type changes. + ## 0.12.0 ### Minor Changes diff --git a/package-lock.json b/package-lock.json index f0079887..55fd20de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@hypercerts-org/lexicon", - "version": "0.12.0", + "version": "0.13.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@hypercerts-org/lexicon", - "version": "0.12.0", + "version": "0.13.0", "license": "MIT", "dependencies": { "@atproto/lexicon": "^0.6.0", diff --git a/package.json b/package.json index 3460ea83..e3911af3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hypercerts-org/lexicon", - "version": "0.12.0", + "version": "0.13.0", "description": "ATProto lexicon definitions and TypeScript types for the Hypercerts protocol", "type": "module", "main": "./dist/index.cjs",