ak.schema.contact_remark.v1
ak.schema.contact_remark.v1 · file: schemas/contact-remark.schema.json Closed decrypted plaintext shape for the principal-private ak.contacts.actor.<principal_key> account-data value described by zh/discovery/client-preferences.md section 3.6. A producer validates the final plaintext before it encrypts and signs; a consumer validates after it opens the AEAD and before it applies the value. The recipient Station holds no key and cannot validate this shape, so nothing here is a server-side admission check. Structural validity proves nothing about where a name came from: the display-name confirmation evidence, the tag namespace and the storage-key binding are domain rules the same client also enforces.
* $ · object
Closed decrypted plaintext shape for the principal-private ak.contacts.actor.<principal_key> account-data value described by zh/discovery/client-preferences.md section 3.6. A producer validates the final plaintext before it encrypts and signs; a consumer validates after it opens the AEAD and before it applies the value. The recipient Station holds no key and cannot validate this shape, so nothing here is a server-side admission check. Structural validity proves nothing about where a name came from: the display-name confirmation evidence, the tag namespace and the storage-key binding are domain rules the same client also enforces.
* version ·
const 1Value format version of this remark. v1 has exactly one value, so a different number is a rejected value rather than a negotiated variant.
enum:
1* subject · object
Closed identity of the remarked Contact. It is principal-scoped on purpose: a remark is holder-private display data and never takes part in authorization or subject equality, so it carries no Station or actor role.
* kind ·
const "human"Aligned with the human branch of the Contact list. Organization, device, service and Realm actors MUST NOT reuse this record.
enum:
"human"* principal_id ·
string · $ref ./common-ids.schema.json#/$defs/did_core_idCanonical stable DID-derived identity core. The lowercase DID method name follows ak:did_core:, and the remaining method-adapter-defined core is opaque to generic consumers. The did:web v1 adapter uses the complete canonical method-specific-id, never a digest or truncated host. Principal-core and service-core equality is byte-for-byte equality of the complete did_core_id. Event actor and Realm membership equality instead use the complete closed ActorId, and account-scoped equality uses the complete AccountId; neither may be reduced to a principal core. A did_core_id is not a DID and cannot be resolved without a did or AuthenticatedServiceResolution.
pattern:
^ak:did_core:[a-z0-9]+:[^\s/?#]+$petname ·
string (arkret-single-line-display-text) · format=arkret-single-line-display-text · $ref ./string-profiles.schema.json#/$defs/display_text_128NFC multilingual single-line display text; mixed scripts, emoji, and symbols are allowed.
pattern:
^[^\u0000-\u001F\u007F-\u009F\u202A-\u202E\u2066-\u2069\uFEFF]*[^\s\u0000-\u001F\u007F-\u009F\u202A-\u202E\u2066-\u2069\uFEFF][^\u0000-\u001F\u007F-\u009F\u202A-\u202E\u2066-\u2069\uFEFF]*$note ·
stringFree-form holder note, at most 4096 Unicode code points. It may be empty and it may span lines, so it does not reuse the single-line display profile.
tags · array<string>
Private grouping tags. The reserved and vendor namespace rule of section 3.1 governs the values, and a client validates it as a domain rule: an array of strings passing this schema is not evidence that the namespace rule holds.
items ·
stringpinned ·
booleanWhether the holder pinned this Contact in local ordering.
verified_handle_at_save ·
string (arkret-canonical-handle) · format=arkret-canonical-handle · $ref ./string-profiles.schema.json#/$defs/canonical_handleCanonical <prepared-localpart>:<lowercase-A-label-domain> handle or realm alias. The prepared localpart maximum is 128 Unicode code points; the domain maximum is 253 ASCII octets.
pattern:
^(?!ak:)[^\s:@/#?\\]+:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$confirmed_display_name ·
string (arkret-single-line-display-text) · format=arkret-single-line-display-text · $ref ./string-profiles.schema.json#/$defs/display_text_128NFC multilingual single-line display text; mixed scripts, emoji, and symbols are allowed.
pattern:
^[^\u0000-\u001F\u007F-\u009F\u202A-\u202E\u2066-\u2069\uFEFF]*[^\s\u0000-\u001F\u007F-\u009F\u202A-\u202E\u2066-\u2069\uFEFF][^\u0000-\u001F\u007F-\u009F\u202A-\u202E\u2066-\u2069\uFEFF]*$* saved_at ·
string (date-time) · format=date-time · $ref ./time.schema.json#/$defs/timestampCanonical Arkret-owned absolute instant. UTC Z form with exactly three millisecond digits. Whole seconds MUST use .000Z; offsets, missing/finer fractions, lowercase separators, leap seconds, and invalid Gregorian calendar dates are forbidden. Shape validation by this pattern is supplemented by semantic date validation.
pattern:
^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\.[0-9]{3}Z$updated_at ·
string (date-time) · format=date-time · $ref ./time.schema.json#/$defs/timestampCanonical Arkret-owned absolute instant. UTC Z form with exactly three millisecond digits. Whole seconds MUST use .000Z; offsets, missing/finer fractions, lowercase separators, leap seconds, and invalid Gregorian calendar dates are forbidden. Shape validation by this pattern is supplemented by semantic date validation.
pattern:
^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\.[0-9]{3}Z$Source
- registry row:
spec/v1/artifacts/registry/schema-registry.json - schema document:
spec/v1/artifacts/schemas/contact-remark.schema.json