lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

radroots_profile.v1.json (35353B)


      1 {
      2   "suite": "calendar_radroots_profile",
      3   "contract_version": "1.0.0",
      4   "vectors": [
      5     {
      6       "id": "profile_date_parse_minimum_gregorian_001",
      7       "kind": "calendar.profile.date.parse.valid",
      8       "input": { "value": "0001-01-01" },
      9       "expected": { "value": "0001-01-01" }
     10     },
     11     {
     12       "id": "profile_date_parse_leap_day_001",
     13       "kind": "calendar.profile.date.parse.valid",
     14       "input": { "value": "2000-02-29" },
     15       "expected": { "value": "2000-02-29" }
     16     },
     17     {
     18       "id": "profile_date_parse_year_zero_001",
     19       "kind": "calendar.profile.date.parse.invalid",
     20       "input": { "value": "0000-01-01" },
     21       "expected": { "error": "invalid_date" }
     22     },
     23     {
     24       "id": "profile_date_parse_noncanonical_width_001",
     25       "kind": "calendar.profile.date.parse.invalid",
     26       "input": { "value": "2026-6-20" },
     27       "expected": { "error": "invalid_date" }
     28     },
     29     {
     30       "id": "profile_authored_date_complete_001",
     31       "kind": "calendar.profile.authored.date.valid",
     32       "input": {
     33         "d": "fernwood-csa-pickup",
     34         "title": "CSA pickup",
     35         "start": "2026-06-20",
     36         "end": "2026-06-21",
     37         "description": "Bring clean bins to the farm stand.",
     38         "locations": ["Farm stand", "Moss Street Market"],
     39         "geohash": "c23nb62w20st",
     40         "summary": "Weekly pickup",
     41         "image": {
     42           "bytes_utf8": "victoria-calendar",
     43           "descriptor": {
     44             "url": "https://media.example/aba72b48bb536e341ab81c5f86053981c443029766a4374ee86a4f56577ebc84.webp",
     45             "sha256": "aba72b48bb536e341ab81c5f86053981c443029766a4374ee86a4f56577ebc84",
     46             "size": 17,
     47             "type": "image/webp",
     48             "uploaded": 1784347200
     49           }
     50         },
     51         "participants": [
     52           {"pubkey": "585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df", "relay": "wss://relay.example.test", "role": "host"}
     53         ],
     54         "categories": ["csa", "vegetables"],
     55         "references": ["https://example.test/pickup-details"],
     56         "calendar_requests": [
     57           {"calendar": "31924:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:farm-calendar", "relay": "wss://relay.example.test"}
     58         ]
     59       },
     60       "expected": {
     61         "wire_parts": {
     62           "kind": 31922,
     63           "content": "Bring clean bins to the farm stand.",
     64           "tags": [
     65             ["d", "fernwood-csa-pickup"],
     66             ["title", "CSA pickup"],
     67             ["start", "2026-06-20"],
     68             ["end", "2026-06-21"],
     69             ["location", "Farm stand"],
     70             ["location", "Moss Street Market"],
     71             ["g", "c23nb62w20st"],
     72             ["summary", "Weekly pickup"],
     73             ["image", "https://media.example/aba72b48bb536e341ab81c5f86053981c443029766a4374ee86a4f56577ebc84.webp"],
     74             ["p", "585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df", "wss://relay.example.test", "host"],
     75             ["t", "csa"],
     76             ["t", "vegetables"],
     77             ["r", "https://example.test/pickup-details"],
     78             ["a", "31924:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:farm-calendar", "wss://relay.example.test"]
     79           ]
     80         },
     81         "media_verification": "byte_verified",
     82         "upload_completion": "not_attested_by_codec"
     83       }
     84     },
     85     {
     86       "id": "profile_authored_date_equal_end_001",
     87       "kind": "calendar.profile.authored.date.invalid",
     88       "input": {"d": "equal-date", "title": "Equal date", "start": "2026-06-20", "end": "2026-06-20"},
     89       "expected": { "error": "invalid_range" }
     90     },
     91     {
     92       "id": "profile_authored_date_noncanonical_title_001",
     93       "kind": "calendar.profile.authored.date.invalid",
     94       "input": {"d": "bad-title", "title": " Bad title ", "start": "2026-06-20"},
     95       "expected": { "error": "invalid_title" }
     96     },
     97     {
     98       "id": "profile_authored_date_uppercase_geohash_001",
     99       "kind": "calendar.profile.authored.date.invalid",
    100       "input": {"d": "bad-geohash", "title": "Bad geohash", "start": "2026-06-20", "geohash": "C23NB62W20ST"},
    101       "expected": { "error": "invalid_geohash" }
    102     },
    103     {
    104       "id": "profile_authored_time_canonical_001",
    105       "kind": "calendar.profile.authored.time.valid",
    106       "input": {
    107         "d": "wash-pack-shift",
    108         "title": "Wash pack shift",
    109         "start": 86399,
    110         "end": 172801,
    111         "start_tzid": "America/Vancouver",
    112         "locations": ["Pack shed"],
    113         "geohash": "c23nb62w20st",
    114         "categories": ["farm-work"]
    115       },
    116       "expected": {
    117         "effective_end_tzid": "America/Vancouver",
    118         "wire_parts": {
    119           "kind": 31923,
    120           "content": "",
    121           "tags": [
    122             ["d", "wash-pack-shift"],
    123             ["title", "Wash pack shift"],
    124             ["start", "86399"],
    125             ["end", "172801"],
    126             ["D", "0"],
    127             ["D", "1"],
    128             ["D", "2"],
    129             ["start_tzid", "America/Vancouver"],
    130             ["location", "Pack shed"],
    131             ["g", "c23nb62w20st"],
    132             ["t", "farm-work"]
    133           ]
    134         }
    135       }
    136     },
    137     {
    138       "id": "profile_authored_time_maximum_coverage_001",
    139       "kind": "calendar.profile.authored.time.coverage.valid",
    140       "input": {"d": "annual-farm-plan", "title": "Annual farm plan", "start": 0, "end": 31622400},
    141       "expected": {"count": 366, "first": "0", "last": "365"}
    142     },
    143     {
    144       "id": "profile_authored_time_over_coverage_limit_001",
    145       "kind": "calendar.profile.authored.time.invalid",
    146       "input": {"d": "overlong-plan", "title": "Overlong plan", "start": 0, "end": 31708800},
    147       "expected": {"error": "covered_day_limit_exceeded", "max": 366, "actual": 367}
    148     },
    149     {
    150       "id": "profile_authored_time_invalid_iana_timezone_001",
    151       "kind": "calendar.profile.authored.time.invalid",
    152       "input": {"d": "bad-zone", "title": "Bad zone", "start": 0, "start_tzid": "america/vancouver"},
    153       "expected": {"error": "invalid_time_zone"}
    154     },
    155     {
    156       "id": "profile_admit_date_canonical_001",
    157       "kind": "calendar.profile.admit.date.valid",
    158       "input": {
    159         "kind": 31922,
    160         "content": "",
    161         "tags": [["d", "farm-tour"], ["title", "Urban farm tour"], ["start", "2026-07-18"], ["image", "https://media.example/aba72b48bb536e341ab81c5f86053981c443029766a4374ee86a4f56577ebc84.webp"]]
    162       },
    163       "expected": {"d": "farm-tour", "blossom_image": true}
    164     },
    165     {
    166       "id": "profile_admit_date_forbidden_day_extension_001",
    167       "kind": "calendar.profile.admit.date.invalid",
    168       "input": {
    169         "kind": 31922,
    170         "content": "",
    171         "tags": [["d", "farm-tour"], ["title", "Urban farm tour"], ["start", "2026-07-18"], ["D", "20620"]]
    172       },
    173       "expected": {"error": "forbidden_date_day_index"}
    174     },
    175     {
    176       "id": "profile_admit_date_noncanonical_metadata_001",
    177       "kind": "calendar.profile.admit.date.invalid",
    178       "input": {
    179         "kind": 31922,
    180         "content": "",
    181         "tags": [["d", "farm-tour"], ["title", " Urban farm tour "], ["start", "2026-07-18"]]
    182       },
    183       "expected": {"error": "non_canonical_field"}
    184     },
    185     {
    186       "id": "profile_admit_date_uppercase_relay_hint_001",
    187       "kind": "calendar.profile.admit.date.invalid",
    188       "input": {
    189         "kind": 31922,
    190         "content": "",
    191         "tags": [["d", "farm-tour"], ["title", "Urban farm tour"], ["start", "2026-07-18"], ["p", "585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df", "WSS://relay.example.test"]]
    192       },
    193       "expected": {"error": "non_canonical_field"}
    194     },
    195     {
    196       "id": "profile_admit_date_non_blossom_image_001",
    197       "kind": "calendar.profile.admit.date.invalid",
    198       "input": {
    199         "kind": 31922,
    200         "content": "",
    201         "tags": [["d", "farm-tour"], ["title", "Urban farm tour"], ["start", "2026-07-18"], ["image", "https://ordinary.example.test/farm-tour.jpg"]]
    202       },
    203       "expected": {"error": "non_blossom_image"}
    204     },
    205     {
    206       "id": "profile_admit_time_canonical_001",
    207       "kind": "calendar.profile.admit.time.valid",
    208       "input": {
    209         "kind": 31923,
    210         "content": "",
    211         "tags": [["d", "harvest-window"], ["title", "Harvest window"], ["start", "86399"], ["end", "172801"], ["D", "0"], ["D", "1"], ["D", "2"]]
    212       },
    213       "expected": {"d": "harvest-window", "covered_days": [0, 1, 2], "blossom_image": false}
    214     },
    215     {
    216       "id": "profile_admit_time_incomplete_coverage_001",
    217       "kind": "calendar.profile.admit.time.invalid",
    218       "input": {
    219         "kind": 31923,
    220         "content": "",
    221         "tags": [["d", "harvest-window"], ["title", "Harvest window"], ["start", "86399"], ["end", "172801"], ["D", "0"], ["D", "2"]]
    222       },
    223       "expected": {"error": "incomplete_day_coverage"}
    224     },
    225     {
    226       "id": "profile_admit_time_noncanonical_timestamp_001",
    227       "kind": "calendar.profile.admit.time.invalid",
    228       "input": {
    229         "kind": 31923,
    230         "content": "",
    231         "tags": [["d", "harvest-window"], ["title", "Harvest window"], ["start", "086399"], ["end", "172801"], ["D", "0"], ["D", "1"], ["D", "2"]]
    232       },
    233       "expected": {"error": "non_canonical_field"}
    234     },
    235     {
    236       "id": "profile_admit_time_noncanonical_day_001",
    237       "kind": "calendar.profile.admit.time.invalid",
    238       "input": {
    239         "kind": 31923,
    240         "content": "",
    241         "tags": [["d", "harvest-window"], ["title", "Harvest window"], ["start", "86399"], ["end", "172801"], ["D", "00"], ["D", "1"], ["D", "2"]]
    242       },
    243       "expected": {"error": "incomplete_day_coverage"}
    244     },
    245     {
    246       "id": "profile_admit_time_over_coverage_limit_001",
    247       "kind": "calendar.profile.admit.time.invalid",
    248       "input": {
    249         "kind": 31923,
    250         "content": "",
    251         "tags": [["d", "long-range"], ["title", "Long range"], ["start", "0"], ["end", "31708800"], ["D", "0"]]
    252       },
    253       "expected": {"error": "covered_day_limit_exceeded", "max": 366, "actual": 367}
    254     },
    255     {
    256       "id": "profile_authored_collection_empty_001",
    257       "kind": "calendar.profile.authored.collection.valid",
    258       "input": {
    259         "d": "AAAAAAAAAAAAAAAAAAAAAA",
    260         "title": "Victoria farm calendar",
    261         "event_references": []
    262       },
    263       "expected": {
    264         "wire_parts": {
    265           "kind": 31924,
    266           "content": "",
    267           "tags": [["d", "AAAAAAAAAAAAAAAAAAAAAA"], ["title", "Victoria farm calendar"]]
    268         }
    269       }
    270     },
    271     {
    272       "id": "profile_authored_collection_ordered_mixed_001",
    273       "kind": "calendar.profile.authored.collection.valid",
    274       "input": {
    275         "d": "AAAAAAAAAAAAAAAAAAAAAA",
    276         "title": "South Island farm schedule",
    277         "content": "Market dates and farm work windows for Victoria growers.",
    278         "list_description": "NIP-51 set description for compatible clients.",
    279         "event_references": [
    280           {
    281             "coordinate": "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    282             "relay": "wss://date-relay.example.test/events"
    283           },
    284           {
    285             "coordinate": "31923:e0266e3cfb0d2886f91c73f5f868f3b98273713e5fcd97c081663f5518a4b3af:CCCCCCCCCCCCCCCCCCCCCg",
    286             "relay": "wss://time-relay.example.test/events"
    287           }
    288         ]
    289       },
    290       "expected": {
    291         "wire_parts": {
    292           "kind": 31924,
    293           "content": "Market dates and farm work windows for Victoria growers.",
    294           "tags": [
    295             ["d", "AAAAAAAAAAAAAAAAAAAAAA"],
    296             ["title", "South Island farm schedule"],
    297             ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ", "wss://date-relay.example.test/events"],
    298             ["a", "31923:e0266e3cfb0d2886f91c73f5f868f3b98273713e5fcd97c081663f5518a4b3af:CCCCCCCCCCCCCCCCCCCCCg", "wss://time-relay.example.test/events"],
    299             ["description", "NIP-51 set description for compatible clients."]
    300           ]
    301         }
    302       }
    303     },
    304     {
    305       "id": "profile_authored_collection_byte_verified_blossom_image_001",
    306       "kind": "calendar.profile.authored.collection.valid",
    307       "input": {
    308         "d": "AAAAAAAAAAAAAAAAAAAAAA",
    309         "title": "Victoria farm calendar",
    310         "content": "A shared calendar with a verified cover image.",
    311         "image": {
    312           "bytes_utf8": "victoria-calendar",
    313           "descriptor": {
    314             "url": "https://media.example/aba72b48bb536e341ab81c5f86053981c443029766a4374ee86a4f56577ebc84.webp",
    315             "sha256": "aba72b48bb536e341ab81c5f86053981c443029766a4374ee86a4f56577ebc84",
    316             "size": 17,
    317             "type": "image/webp",
    318             "uploaded": 1784347200
    319           }
    320         },
    321         "event_references": [
    322           {
    323             "coordinate": "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    324             "relay": null
    325           }
    326         ]
    327       },
    328       "expected": {
    329         "wire_parts": {
    330           "kind": 31924,
    331           "content": "A shared calendar with a verified cover image.",
    332           "tags": [
    333             ["d", "AAAAAAAAAAAAAAAAAAAAAA"],
    334             ["title", "Victoria farm calendar"],
    335             ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ"],
    336             ["image", "https://media.example/aba72b48bb536e341ab81c5f86053981c443029766a4374ee86a4f56577ebc84.webp"]
    337           ]
    338         },
    339         "media_verification": "byte_verified",
    340         "upload_completion": "not_attested_by_codec"
    341       }
    342     },
    343     {
    344       "id": "profile_authored_collection_human_identifier_001",
    345       "kind": "calendar.profile.authored.collection.invalid",
    346       "input": {"d": "victoria-calendar", "title": "Victoria farm calendar", "event_references": []},
    347       "expected": {"error": "invalid_calendar_uid"}
    348     },
    349     {
    350       "id": "profile_authored_collection_noncanonical_title_001",
    351       "kind": "calendar.profile.authored.collection.invalid",
    352       "input": {"d": "AAAAAAAAAAAAAAAAAAAAAA", "title": " Victoria farm calendar ", "event_references": []},
    353       "expected": {"error": "invalid_title"}
    354     },
    355     {
    356       "id": "profile_authored_collection_duplicate_coordinate_001",
    357       "kind": "calendar.profile.authored.collection.invalid",
    358       "input": {
    359         "d": "AAAAAAAAAAAAAAAAAAAAAA",
    360         "title": "Duplicate event calendar",
    361         "event_references": [
    362           {
    363             "coordinate": "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    364             "relay": "wss://one.example.test"
    365           },
    366           {
    367             "coordinate": "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    368             "relay": "wss://two.example.test"
    369           }
    370         ]
    371       },
    372       "expected": {"error": "duplicate_event_reference"}
    373     },
    374     {
    375       "id": "profile_authored_collection_uppercase_relay_001",
    376       "kind": "calendar.profile.authored.collection.invalid",
    377       "input": {
    378         "d": "AAAAAAAAAAAAAAAAAAAAAA",
    379         "title": "Uppercase relay",
    380         "event_references": [
    381           {
    382             "coordinate": "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    383             "relay": "WSS://Relay.Example.Test/events"
    384           }
    385         ]
    386       },
    387       "expected": {"error": "invalid_event_reference"}
    388     },
    389     {
    390       "id": "profile_authored_collection_wrong_coordinate_kind_001",
    391       "kind": "calendar.profile.authored.collection.invalid",
    392       "input": {
    393         "d": "AAAAAAAAAAAAAAAAAAAAAA",
    394         "title": "Wrong coordinate kind",
    395         "event_references": [
    396           {
    397             "coordinate": "31924:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    398             "relay": null
    399           }
    400         ]
    401       },
    402       "expected": {"error": "invalid_event_reference"}
    403     },
    404     {
    405       "id": "profile_authored_collection_media_hash_mismatch_001",
    406       "kind": "calendar.profile.authored.collection.invalid",
    407       "input": {
    408         "d": "AAAAAAAAAAAAAAAAAAAAAA",
    409         "title": "Mismatched media",
    410         "image": {
    411           "bytes_utf8": "victoria-calendar",
    412           "descriptor": {
    413             "url": "https://media.example/585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df.webp",
    414             "sha256": "585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df",
    415             "size": 17,
    416             "type": "image/webp",
    417             "uploaded": 1784347200
    418           }
    419         },
    420         "event_references": []
    421       },
    422       "expected": {"error": "blob_hash_mismatch"}
    423     },
    424     {
    425       "id": "profile_admit_collection_empty_001",
    426       "kind": "calendar.profile.admit.collection.valid",
    427       "input": {
    428         "kind": 31924,
    429         "content": "",
    430         "tags": [["d", "AAAAAAAAAAAAAAAAAAAAAA"], ["title", "Victoria farm calendar"]]
    431       },
    432       "expected": {
    433         "d": "AAAAAAAAAAAAAAAAAAAAAA",
    434         "event_references": [],
    435         "blossom_image": false
    436       }
    437     },
    438     {
    439       "id": "profile_admit_collection_ordered_mixed_blossom_001",
    440       "kind": "calendar.profile.admit.collection.valid",
    441       "input": {
    442         "kind": 31924,
    443         "content": "Market dates and farm work windows for Victoria growers.",
    444         "tags": [
    445           ["d", "AAAAAAAAAAAAAAAAAAAAAA"],
    446           ["title", "South Island farm schedule"],
    447           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ", "wss://date-relay.example.test/events"],
    448           ["a", "31923:e0266e3cfb0d2886f91c73f5f868f3b98273713e5fcd97c081663f5518a4b3af:CCCCCCCCCCCCCCCCCCCCCg", "wss://time-relay.example.test/events"],
    449           ["description", "NIP-51 set description for compatible clients."],
    450           ["image", "https://media.example/aba72b48bb536e341ab81c5f86053981c443029766a4374ee86a4f56577ebc84.webp"]
    451         ]
    452       },
    453       "expected": {
    454         "d": "AAAAAAAAAAAAAAAAAAAAAA",
    455         "content": "Market dates and farm work windows for Victoria growers.",
    456         "list_description": "NIP-51 set description for compatible clients.",
    457         "event_references": [
    458           {
    459             "coordinate": "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    460             "relay": "wss://date-relay.example.test/events"
    461           },
    462           {
    463             "coordinate": "31923:e0266e3cfb0d2886f91c73f5f868f3b98273713e5fcd97c081663f5518a4b3af:CCCCCCCCCCCCCCCCCCCCCg",
    464             "relay": "wss://time-relay.example.test/events"
    465           }
    466         ],
    467         "blossom_image": true,
    468         "media_verification": "structural_only"
    469       }
    470     },
    471     {
    472       "id": "profile_admit_collection_uppercase_coordinate_and_relay_001",
    473       "kind": "calendar.profile.admit.collection.invalid",
    474       "input": {
    475         "kind": 31924,
    476         "content": "",
    477         "tags": [
    478           ["d", "AAAAAAAAAAAAAAAAAAAAAA"],
    479           ["title", "Uppercase reference"],
    480           ["a", "31922:585591529DA0BAB31B3B1B1F986611CF5F435DCA84F978C89EE8A40CCA7103DF:BBBBBBBBBBBBBBBBBBBBBQ", "WSS://Relay.Example.Test/events"]
    481         ]
    482       },
    483       "expected": {"error": "non_canonical_field", "field": "event_reference"}
    484     },
    485     {
    486       "id": "profile_admit_collection_duplicate_coordinate_001",
    487       "kind": "calendar.profile.admit.collection.invalid",
    488       "input": {
    489         "kind": 31924,
    490         "content": "",
    491         "tags": [
    492           ["d", "AAAAAAAAAAAAAAAAAAAAAA"],
    493           ["title", "Duplicate reference"],
    494           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ", "wss://one.example.test"],
    495           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ", "wss://two.example.test"]
    496         ]
    497       },
    498       "expected": {"error": "duplicate_event_reference"}
    499     },
    500     {
    501       "id": "profile_admit_collection_human_identifier_001",
    502       "kind": "calendar.profile.admit.collection.invalid",
    503       "input": {
    504         "kind": 31924,
    505         "content": "",
    506         "tags": [["d", "victoria-calendar"], ["title", "Victoria farm calendar"]]
    507       },
    508       "expected": {"error": "non_canonical_field", "field": "d"}
    509     },
    510     {
    511       "id": "profile_admit_collection_non_blossom_image_001",
    512       "kind": "calendar.profile.admit.collection.invalid",
    513       "input": {
    514         "kind": 31924,
    515         "content": "",
    516         "tags": [
    517           ["d", "AAAAAAAAAAAAAAAAAAAAAA"],
    518           ["title", "Ordinary image"],
    519           ["image", "https://ordinary.example.test/victoria-calendar.jpg"]
    520         ]
    521       },
    522       "expected": {"error": "non_blossom_image"}
    523     },
    524     {
    525       "id": "profile_authored_rsvp_minimal_accepted_001",
    526       "kind": "calendar.profile.authored.rsvp.valid",
    527       "input": {
    528         "d": "DDDDDDDDDDDDDDDDDDDDDw",
    529         "event_reference": {
    530           "coordinate": "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    531           "relay": null
    532         },
    533         "status": "accepted"
    534       },
    535       "expected": {
    536         "wire_parts": {
    537           "kind": 31925,
    538           "content": "",
    539           "tags": [
    540             ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    541             ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ"],
    542             ["status", "accepted"]
    543           ]
    544         }
    545       }
    546     },
    547     {
    548       "id": "profile_authored_rsvp_complete_independent_hints_001",
    549       "kind": "calendar.profile.authored.rsvp.valid",
    550       "input": {
    551         "d": "DDDDDDDDDDDDDDDDDDDDDw",
    552         "event_reference": {
    553           "coordinate": "31923:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    554           "relay": "wss://coordinate-relay.example.test/events"
    555         },
    556         "revision_reference": {
    557           "id": "e0266e3cfb0d2886f91c73f5f868f3b98273713e5fcd97c081663f5518a4b3af",
    558           "relay": "wss://event-relay.example.test/events"
    559         },
    560         "status": "tentative",
    561         "free_busy": "busy",
    562         "author_hint": {
    563           "pubkey": "585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df",
    564           "relay": "wss://author-relay.example.test/events"
    565         },
    566         "note": "I can help with the wash-pack shift."
    567       },
    568       "expected": {
    569         "wire_parts": {
    570           "kind": 31925,
    571           "content": "I can help with the wash-pack shift.",
    572           "tags": [
    573             ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    574             ["a", "31923:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ", "wss://coordinate-relay.example.test/events"],
    575             ["status", "tentative"],
    576             ["e", "e0266e3cfb0d2886f91c73f5f868f3b98273713e5fcd97c081663f5518a4b3af", "wss://event-relay.example.test/events"],
    577             ["fb", "busy"],
    578             ["p", "585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df", "wss://author-relay.example.test/events"]
    579           ]
    580         },
    581         "observed_free_busy": "busy",
    582         "effective_free_busy": "busy"
    583       }
    584     },
    585     {
    586       "id": "profile_authored_rsvp_declined_with_free_busy_001",
    587       "kind": "calendar.profile.authored.rsvp.invalid",
    588       "input": {
    589         "d": "DDDDDDDDDDDDDDDDDDDDDw",
    590         "event_reference": {
    591           "coordinate": "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    592           "relay": null
    593         },
    594         "status": "declined",
    595         "free_busy": "busy"
    596       },
    597       "expected": {"error": "declined_free_busy_forbidden"}
    598     },
    599     {
    600       "id": "profile_authored_rsvp_human_identifier_001",
    601       "kind": "calendar.profile.authored.rsvp.invalid",
    602       "input": {
    603         "d": "farm-tour-rsvp",
    604         "event_reference": {
    605           "coordinate": "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    606           "relay": null
    607         },
    608         "status": "accepted"
    609       },
    610       "expected": {"error": "invalid_calendar_uid"}
    611     },
    612     {
    613       "id": "profile_authored_rsvp_uppercase_event_id_001",
    614       "kind": "calendar.profile.authored.rsvp.invalid",
    615       "input": {
    616         "d": "DDDDDDDDDDDDDDDDDDDDDw",
    617         "event_reference": {
    618           "coordinate": "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    619           "relay": null
    620         },
    621         "revision_reference": {
    622           "id": "E0266E3CFB0D2886F91C73F5F868F3B98273713E5FCD97C081663F5518A4B3AF",
    623           "relay": null
    624         },
    625         "status": "accepted"
    626       },
    627       "expected": {"error": "invalid_revision_reference"}
    628     },
    629     {
    630       "id": "profile_authored_rsvp_author_mismatch_001",
    631       "kind": "calendar.profile.authored.rsvp.invalid",
    632       "input": {
    633         "d": "DDDDDDDDDDDDDDDDDDDDDw",
    634         "event_reference": {
    635           "coordinate": "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    636           "relay": null
    637         },
    638         "status": "accepted",
    639         "author_hint": {
    640           "pubkey": "e0266e3cfb0d2886f91c73f5f868f3b98273713e5fcd97c081663f5518a4b3af",
    641           "relay": null
    642         }
    643       },
    644       "expected": {"error": "author_hint_mismatch"}
    645     },
    646     {
    647       "id": "profile_authored_rsvp_uppercase_event_relay_001",
    648       "kind": "calendar.profile.authored.rsvp.invalid",
    649       "input": {
    650         "d": "DDDDDDDDDDDDDDDDDDDDDw",
    651         "event_reference": {
    652           "coordinate": "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    653           "relay": "WSS://Relay.Example.Test/events"
    654         },
    655         "status": "accepted"
    656       },
    657       "expected": {"error": "invalid_event_reference"}
    658     },
    659     {
    660       "id": "profile_authored_rsvp_wrong_coordinate_kind_001",
    661       "kind": "calendar.profile.authored.rsvp.invalid",
    662       "input": {
    663         "d": "DDDDDDDDDDDDDDDDDDDDDw",
    664         "event_reference": {
    665           "coordinate": "31924:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    666           "relay": null
    667         },
    668         "status": "accepted"
    669       },
    670       "expected": {"error": "invalid_event_reference"}
    671     },
    672     {
    673       "id": "profile_admit_rsvp_minimal_accepted_001",
    674       "kind": "calendar.profile.admit.rsvp.valid",
    675       "input": {
    676         "kind": 31925,
    677         "content": "",
    678         "tags": [
    679           ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    680           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ"],
    681           ["status", "accepted"]
    682         ]
    683       },
    684       "expected": {
    685         "d": "DDDDDDDDDDDDDDDDDDDDDw",
    686         "status": "accepted",
    687         "observed_free_busy": null,
    688         "effective_free_busy": null
    689       }
    690     },
    691     {
    692       "id": "profile_admit_rsvp_complete_independent_hints_001",
    693       "kind": "calendar.profile.admit.rsvp.valid",
    694       "input": {
    695         "kind": 31925,
    696         "content": "I can help with the wash-pack shift.",
    697         "tags": [
    698           ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    699           ["a", "31923:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ", "wss://coordinate-relay.example.test/events"],
    700           ["e", "e0266e3cfb0d2886f91c73f5f868f3b98273713e5fcd97c081663f5518a4b3af", "wss://event-relay.example.test/events"],
    701           ["status", "tentative"],
    702           ["fb", "busy"],
    703           ["p", "585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df", "wss://author-relay.example.test/events"]
    704         ]
    705       },
    706       "expected": {
    707         "d": "DDDDDDDDDDDDDDDDDDDDDw",
    708         "event_reference": {
    709           "coordinate": "31923:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ",
    710           "relay": "wss://coordinate-relay.example.test/events"
    711         },
    712         "revision_reference": {
    713           "id": "e0266e3cfb0d2886f91c73f5f868f3b98273713e5fcd97c081663f5518a4b3af",
    714           "relay": "wss://event-relay.example.test/events"
    715         },
    716         "author_hint": {
    717           "pubkey": "585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df",
    718           "relay": "wss://author-relay.example.test/events"
    719         },
    720         "status": "tentative",
    721         "observed_free_busy": "busy",
    722         "effective_free_busy": "busy"
    723       }
    724     },
    725     {
    726       "id": "profile_admit_rsvp_declined_observed_free_busy_001",
    727       "kind": "calendar.profile.admit.rsvp.valid",
    728       "input": {
    729         "kind": 31925,
    730         "content": "Unable to attend.",
    731         "tags": [
    732           ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    733           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ"],
    734           ["status", "declined"],
    735           ["fb", "busy"]
    736         ]
    737       },
    738       "expected": {
    739         "d": "DDDDDDDDDDDDDDDDDDDDDw",
    740         "status": "declined",
    741         "observed_free_busy": "busy",
    742         "effective_free_busy": null
    743       }
    744     },
    745     {
    746       "id": "profile_admit_rsvp_uppercase_fields_001",
    747       "kind": "calendar.profile.admit.rsvp.invalid",
    748       "input": {
    749         "kind": 31925,
    750         "content": "",
    751         "tags": [
    752           ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    753           ["a", "31922:585591529DA0BAB31B3B1B1F986611CF5F435DCA84F978C89EE8A40CCA7103DF:BBBBBBBBBBBBBBBBBBBBBQ", "WSS://Coordinate-Relay.Example.Test/events"],
    754           ["e", "E0266E3CFB0D2886F91C73F5F868F3B98273713E5FCD97C081663F5518A4B3AF", "WSS://Event-Relay.Example.Test/events"],
    755           ["status", "accepted"],
    756           ["p", "585591529DA0BAB31B3B1B1F986611CF5F435DCA84F978C89EE8A40CCA7103DF", "WSS://Author-Relay.Example.Test/events"]
    757         ]
    758       },
    759       "expected": {"error": "non_canonical_field"}
    760     },
    761     {
    762       "id": "profile_admit_rsvp_author_mismatch_001",
    763       "kind": "calendar.profile.admit.rsvp.invalid",
    764       "input": {
    765         "kind": 31925,
    766         "content": "",
    767         "tags": [
    768           ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    769           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ"],
    770           ["status", "accepted"],
    771           ["p", "e0266e3cfb0d2886f91c73f5f868f3b98273713e5fcd97c081663f5518a4b3af"]
    772         ]
    773       },
    774       "expected": {"error": "author_hint_mismatch"}
    775     },
    776     {
    777       "id": "profile_admit_rsvp_human_identifier_001",
    778       "kind": "calendar.profile.admit.rsvp.invalid",
    779       "input": {
    780         "kind": 31925,
    781         "content": "",
    782         "tags": [
    783           ["d", "farm-tour-rsvp"],
    784           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ"],
    785           ["status", "accepted"]
    786         ]
    787       },
    788       "expected": {"error": "non_canonical_field", "field": "d"}
    789     },
    790     {
    791       "id": "profile_admit_collection_uppercase_coordinate_001",
    792       "kind": "calendar.profile.admit.collection.invalid",
    793       "input": {
    794         "kind": 31924,
    795         "content": "",
    796         "tags": [
    797           ["d", "AAAAAAAAAAAAAAAAAAAAAA"],
    798           ["title", "Uppercase coordinate"],
    799           ["a", "31922:585591529DA0BAB31B3B1B1F986611CF5F435DCA84F978C89EE8A40CCA7103DF:BBBBBBBBBBBBBBBBBBBBBQ"]
    800         ]
    801       },
    802       "expected": {"error": "non_canonical_field", "field": "event_reference"}
    803     },
    804     {
    805       "id": "profile_admit_collection_uppercase_relay_001",
    806       "kind": "calendar.profile.admit.collection.invalid",
    807       "input": {
    808         "kind": 31924,
    809         "content": "",
    810         "tags": [
    811           ["d", "AAAAAAAAAAAAAAAAAAAAAA"],
    812           ["title", "Uppercase relay"],
    813           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ", "WSS://Relay.Example.Test/events"]
    814         ]
    815       },
    816       "expected": {"error": "non_canonical_field", "field": "event_reference"}
    817     },
    818     {
    819       "id": "profile_admit_rsvp_uppercase_coordinate_001",
    820       "kind": "calendar.profile.admit.rsvp.invalid",
    821       "input": {
    822         "kind": 31925,
    823         "content": "",
    824         "tags": [
    825           ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    826           ["a", "31922:585591529DA0BAB31B3B1B1F986611CF5F435DCA84F978C89EE8A40CCA7103DF:BBBBBBBBBBBBBBBBBBBBBQ"],
    827           ["status", "accepted"]
    828         ]
    829       },
    830       "expected": {"error": "non_canonical_field", "field": "event_reference"}
    831     },
    832     {
    833       "id": "profile_admit_rsvp_uppercase_event_id_001",
    834       "kind": "calendar.profile.admit.rsvp.invalid",
    835       "input": {
    836         "kind": 31925,
    837         "content": "",
    838         "tags": [
    839           ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    840           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ"],
    841           ["e", "E0266E3CFB0D2886F91C73F5F868F3B98273713E5FCD97C081663F5518A4B3AF"],
    842           ["status", "accepted"]
    843         ]
    844       },
    845       "expected": {"error": "non_canonical_field", "field": "revision_reference"}
    846     },
    847     {
    848       "id": "profile_admit_rsvp_uppercase_author_pubkey_001",
    849       "kind": "calendar.profile.admit.rsvp.invalid",
    850       "input": {
    851         "kind": 31925,
    852         "content": "",
    853         "tags": [
    854           ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    855           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ"],
    856           ["status", "accepted"],
    857           ["p", "585591529DA0BAB31B3B1B1F986611CF5F435DCA84F978C89EE8A40CCA7103DF"]
    858         ]
    859       },
    860       "expected": {"error": "non_canonical_field", "field": "author_hint"}
    861     },
    862     {
    863       "id": "profile_admit_rsvp_uppercase_a_relay_001",
    864       "kind": "calendar.profile.admit.rsvp.invalid",
    865       "input": {
    866         "kind": 31925,
    867         "content": "",
    868         "tags": [
    869           ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    870           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ", "WSS://Coordinate-Relay.Example.Test/events"],
    871           ["status", "accepted"]
    872         ]
    873       },
    874       "expected": {"error": "non_canonical_field", "field": "event_reference"}
    875     },
    876     {
    877       "id": "profile_admit_rsvp_uppercase_e_relay_001",
    878       "kind": "calendar.profile.admit.rsvp.invalid",
    879       "input": {
    880         "kind": 31925,
    881         "content": "",
    882         "tags": [
    883           ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    884           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ"],
    885           ["e", "e0266e3cfb0d2886f91c73f5f868f3b98273713e5fcd97c081663f5518a4b3af", "WSS://Event-Relay.Example.Test/events"],
    886           ["status", "accepted"]
    887         ]
    888       },
    889       "expected": {"error": "non_canonical_field", "field": "revision_reference"}
    890     },
    891     {
    892       "id": "profile_admit_rsvp_uppercase_p_relay_001",
    893       "kind": "calendar.profile.admit.rsvp.invalid",
    894       "input": {
    895         "kind": 31925,
    896         "content": "",
    897         "tags": [
    898           ["d", "DDDDDDDDDDDDDDDDDDDDDw"],
    899           ["a", "31922:585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df:BBBBBBBBBBBBBBBBBBBBBQ"],
    900           ["status", "accepted"],
    901           ["p", "585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df", "WSS://Author-Relay.Example.Test/events"]
    902         ]
    903       },
    904       "expected": {"error": "non_canonical_field", "field": "author_hint"}
    905     }
    906   ]
    907 }