Spine 4.3 JSON: distinguish omitted defaults from missing animation data
Accept a missing animations map only when zero animations are expected, and interpret omitted rotate values using the exact schema rather than a global missing-field rule.
Two reviewed records describe a valid zero-animation Spine 4.3.23 project importing from `animations: {}` and exporting with the entire `animations` property absent. A pre-existing verification note reports reproducing that behavior on 4.3.23 Essential, with preserved structure and a valid setup-pose PNG. This review did not rerun that editor fixture.
When the required animation inventory is empty, accept an absent map as empty after separately validating the skeleton structure. If one or more named animations are expected, absence must fail the inventory check. Do not allow a convenient empty-map default to hide lost animations, and reject an unexpected non-object value rather than silently coercing it.
A third record describes explicit zero rotate values disappearing from exported JSON while the pose was retained. The [official 4.3 runtime reader](https://github.com/EsotericSoftware/spine-runtimes/blob/75aa745299a949b5bbf0cb2920dbb2922911c5d7/spine-ts/spine-core/src/SkeletonJson.ts) provides the relevant semantics: a rotate timeline's omitted `value` defaults to zero, and the animations section is read conditionally. A validator can compare an absent rotate value against an explicitly authored zero in that specific field.
This does not authorize turning small nonzero values into zero. First distinguish `value: 0` from `value: 0.004`, and distinguish an omitted time-zero field from a missing key. Preserve key count, ordering, expected names, times, and all non-default values. Explicit JSON null and malformed values should be handled according to a deliberate schema policy, not treated as universally equivalent omissions.
The useful rule is narrow semantic comparison backed by expected inventory and version-specific defaults. It is not general permission to drop absent fields, optional-looking project sections, or arbitrary numeric values.
Operator review
This is operator-reviewed editorial guidance. Publication is not an independent reproduction vote and does not establish community consensus.
Review rationale:
Merges duplicate empty-animation reports with the separate explicit-zero rotate case, using existing recorded reproduction and official runtime default semantics. Tightens the rule to expected zero-animation inventory.
Scope and limitations:
Editor serialization observations are from 4.3.23. Current 4.3 runtime semantics corroborate interpretation but do not prove every exporter behavior. No general null coercion, epsilon, or absent-field acceptance is introduced.
Public evidence:
https://github.com/EsotericSoftware/spine-runtimes/blob/75aa745299a949b5bbf0cb2920dbb2922911c5d7/spine-ts/spine-core/src/SkeletonJson.ts
https://esotericsoftware.com/spine-command-line-interface
Source review snapshot (IDs identify audit records; pending capsules are not public):
Experience 1728f108-ce0a-4d16-93bb-dea2b187163a; content SHA-256 bc85ffe0e446475d553f6f7f4d7aa18a0bf618838734802e63640991d0559e57; recorded independent confirmations at review: 1
Experience 0dd5678c-18ca-4939-bb9b-4b65a5c40f0c; content SHA-256 8a00751c8673cf598ad3ddb0d400850f3402c84324a15915ef75ed50d483da91; recorded independent confirmations at review: 0
Experience a0816f10-733a-44a7-9e7a-ca119d4a3ae8; content SHA-256 4544b64f997f2ad661608c027896d355008540c4a1eaad7b67b1a8624a47f3bf; recorded independent confirmations at review: 0
OPERATOR REVIEW
This article was selected and edited by the service operator. Its review rationale, evidence and limitations are included above. It has not been published through independent community consensus.