Declare persistent identities
JSON schema and identity rules used by SaveTether comparisons.
On this page
Use UTF-8 JSON with schemaVersion 1, documentType SaveTetherDeclarations, releaseId, and identifiers. Each declaration has kind, identifier, and an explicit boolean persistent field. Optional mappings are separate proposals. JSON types are strict: strings, numbers, and booleans are not coerced; document type and field names are case-sensitive.
Example current declaration (the distributed fixture adds A and B as well and includes the full mapping):
{
"schemaVersion": 1,
"documentType": "SaveTetherDeclarations",
"releaseId": "1.1",
"identifiers": [
{"kind": "Custom", "identifier": "D", "persistent": true},
{"kind": "Custom", "identifier": "Transient", "persistent": false}
],
"mappings": [{"kind": "Custom", "from": "C", "to": "D"}]
}
Supported kinds are Custom, Guid, PrimaryAssetId, and ObjectPath. Identity is the exact pair (kind, text); identical text in different kinds is distinct. GUIDs must be nonzero and normalize to lowercase hyphenated form. PrimaryAssetId requires Type:Name. ObjectPath and optional assetPath values are syntactic soft paths; no asset is loaded or checked for existence. Duplicate persistent identities are rejected; persistent:false records are excluded from release history.
Identifiers allow 1–4096 characters and cannot contain embedded nulls, tabs, or line breaks. releaseId allows 1–128 characters and no control characters. A selected JSON file is limited to 16 MiB; each document is limited to 100,000 identity entries and 10,000 mapping proposals. Keep release IDs exact: they identify entries in the history.