Types are written as Python annotations. In JSON, str | None is a string or null,
datetime is an ISO 8601 string without a timezone suffix ("2026-10-04T15:34:54.643569",
UTC), enums are their string value.
IDs vs identifiers. Every asset has two keys:
id: an internal UUID generated when the asset is built. It changes on every run. Edges
reference assets by id, so inside one map file id is the join key.
arn: the stable, cloud-native identifier (an AWS ARN, an Azure resource ID, a GCP full
resource name, or a cloudg synthetic identifier, see Identifier formats).
Use arn to correlate assets across runs.
Order. Lists are in collection order unless a section says otherwise. Do not rely on the
order of assets or edges.
Counts dictionaries (assets_by_type, ...) map a key to an integer. Some are sorted by
descending count; the field tables say which. JSON keeps insertion order, Python dicts too.