Shapes are checked contracts

Inference retains known fields; a declaration can publish the shape callers may use.

age?: integer permits a missing field; age: integer? permits null. Records are closed; [Person] describes an array. Input contracts validate loaded JSON.

Structures keep JSON storage. An explicit value contract hides field precision; callers then need extraction such as as_integer.