dev.cocore.compute.termsAcceptance

cocore.dev

Schema Diff

+9 -0

From

CID
bafyreibqlxlmvoe...
Indexed At
2026-06-17 21:16 UTC
View this version

To

CID
bafyreie5m7sbpos...
Indexed At
2026-06-17 23:00 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 4 non-breaking changes.

Non-Breaking Changes (4)
  • AddedVertex AddedVertex { vertex_id: "dev.cocore.compute.termsAcceptance:body.attestation" }
  • AddedVertex AddedVertex { vertex_id: "dev.cocore.compute.termsAcceptance:body.sig" }
  • AddedEdge AddedEdge { src: "dev.cocore.compute.termsAcceptance:body", tgt: "dev.cocore.compute.termsAcceptance:body.attestation", kind: "prop", name: Some("attestation") }
  • AddedEdge AddedEdge { src: "dev.cocore.compute.termsAcceptance:body", tgt: "dev.cocore.compute.termsAcceptance:body.sig", kind: "prop", name: Some("sig") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "dev.cocore.compute.termsAcceptance:body.attestation" }
  • AddedVertex { vertex_id: "dev.cocore.compute.termsAcceptance:body.sig" }

Additional Notes

  • Non-breaking: AddedEdge { src: "dev.cocore.compute.termsAcceptance:body", tgt: "dev.cocore.compute.termsAcceptance:body.attestation", kind: "prop", name: Some("attestation") }
  • Non-breaking: AddedEdge { src: "dev.cocore.compute.termsAcceptance:body", tgt: "dev.cocore.compute.termsAcceptance:body.sig", kind: "prop", name: Some("sig") }
1 1
{
2 2
  "id": "dev.cocore.compute.termsAcceptance",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "tid",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 10
          "exchange",
11 11
          "policy",
12 12
          "termsVersion",
13 13
          "termsUri",
14 14
          "acceptedAt"
15 15
        ],
16 16
        "properties": {
17 +
          "sig": {
18 +
            "type": "string",
19 +
            "description": "Exchange's ES256 signature (base64url, raw R||S) over the canonical bytes of this record with `sig` removed — the same integer-only, sorted-key canonical form used for receipts and settlements. This is the cocore attestation that the acceptance was witnessed and countersigned by the exchange, not merely written by the user. Optional for back-compat; populated going forward."
20 +
          },
17 21
          "policy": {
18 22
            "ref": "com.atproto.repo.strongRef",
19 23
            "type": "ref",
20 24
            "description": "Strong-ref to the dev.cocore.compute.exchangePolicy that was active at acceptance time. The policy itself carries fee schedule + self-loop rules; the acceptance pins the human-readable terms via the policy's termsUri + termsVersion."
21 25
          },
22 26
          "exchange": {
23 27
            "type": "string",
24 28
            "format": "did",
25 29
            "description": "DID of the exchange whose terms the user is accepting."
26 30
          },
27 31
          "termsUri": {
28 32
            "type": "string",
29 33
            "format": "uri",
30 34
            "description": "URL of the terms-of-service text the user actually saw. Snapshotted from the policy."
31 35
          },
32 36
          "userAgent": {
33 37
            "type": "string",
34 38
            "maxLength": 512,
35 39
            "description": "Optional user-agent string from the client at acceptance time. Useful for forensics; not required."
36 40
          },
37 41
          "acceptedAt": {
38 42
            "type": "string",
39 43
            "format": "datetime"
40 44
          },
45 +
          "attestation": {
46 +
            "ref": "com.atproto.repo.strongRef",
47 +
            "type": "ref",
48 +
            "description": "Strong-ref to the dev.cocore.compute.exchangeAttestation whose `signingKeyFingerprint` identifies the key that produced `sig`. Lets a verifier resolve the exchange's signing key and check `sig` without trusting the exchange live. Optional for back-compat with pre-signing acceptances; populated going forward."
49 +
          },
41 50
          "termsVersion": {
42 51
            "type": "string",
43 52
            "maxLength": 32,
44 53
            "description": "Version string of the human-readable terms accepted. Copied from the policy at acceptance time so the acceptance is self-contained even if the policy is later updated."
45 54
          }
46 55
        }
47 56
      }
48 57
    }
49 58
  },
50 59
  "$type": "com.atproto.lexicon.schema",
51 60
  "lexicon": 1,
52 61
  "description": "A user's affirmative acceptance of an exchange's terms of service / privacy policy. Published on the user's PDS so the record is portable + auditable + survives the user disconnecting from any one exchange. Clients prompt for re-acceptance whenever the active exchange policy's `termsVersion` doesn't match the version on the user's most recent acceptance for that exchange."
53 62
}

Compare Other Versions

Lexicon Garden

@