Skip to content

Derived Case Catalog

Machine-readable case index rendered from the canonical cases/ tree.

{
  "cases": [
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/appearance_complete/appearance_complete.city.json"
      },
      "assertions": [
        "appearance_preserved",
        "material_assignment",
        "default_material_texture_set",
        "multiple_material_texture_set"
      ],
      "case": "cases/conformance/v2_0/appearance_complete/case.json",
      "cityjson_version": "2.0",
      "description": "One material and texture with the minimum required properties and one material and texture with all properties. Uniform material assignments use the canonical 'value' form. Geometry with two materials and two textures. Default theme and texture are set.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "appearance_complete",
      "invariants": "cases/conformance/v2_0/appearance_complete/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/appearance_complete",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/cityjson_extended/cityjson_extended.city.json"
      },
      "assertions": [
        "roundtrip_stable_with_extra_members"
      ],
      "case": "cases/conformance/v2_0/cityjson_extended/case.json",
      "cityjson_version": "2.0",
      "description": "CityJSON with extended root members.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "cityjson_extended",
      "invariants": "cases/conformance/v2_0/cityjson_extended/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/cityjson_extended",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/cityjson_fake_complete/cityjson_fake_complete.city.json"
      },
      "assertions": [
        "full_surface_roundtrip"
      ],
      "case": "cases/conformance/v2_0/cityjson_fake_complete/case.json",
      "cityjson_version": "2.0",
      "description": "CityJSON that covers the entire spec.",
      "family": "omnibus",
      "geometry_kind": "dummy",
      "id": "cityjson_fake_complete",
      "invariants": "cases/conformance/v2_0/cityjson_fake_complete/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/cityjson_fake_complete",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/cityjson_minimal/cityjson_minimal.city.json"
      },
      "assertions": [
        "roundtrip_stable"
      ],
      "case": "cases/conformance/v2_0/cityjson_minimal/case.json",
      "cityjson_version": "2.0",
      "description": "CityJSON minimal example from the spec.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "cityjson_minimal",
      "invariants": "cases/conformance/v2_0/cityjson_minimal/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/cityjson_minimal",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/cityjsonfeature_minimal/cityjsonfeature_minimal.city.jsonl"
      },
      "assertions": [
        "feature_boundaries_preserved"
      ],
      "case": "cases/conformance/v2_0/cityjsonfeature_minimal/case.json",
      "cityjson_version": "2.0",
      "description": "Minimal CityJSONFeature with only the required members.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "cityjsonfeature_minimal",
      "invariants": "cases/conformance/v2_0/cityjsonfeature_minimal/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/cityjsonfeature_minimal",
      "representation": "cityjsonfeature",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/cityobject_all_types/cityobject_all_types.city.json"
      },
      "assertions": [
        "cityobject_structure_preserved",
        "cityobject_hierarchy_resolved"
      ],
      "case": "cases/conformance/v2_0/cityobject_all_types/case.json",
      "cityjson_version": "2.0",
      "description": "CityObjects covering every core type, with the valid Bridge, Building, and Tunnel hierarchies and only type/children/parents members.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "cityobject_all_types",
      "invariants": "cases/conformance/v2_0/cityobject_all_types/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/cityobject_all_types",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/cityobject_building_address/cityobject_building_address.city.json"
      },
      "assertions": [
        "building_address_preserved"
      ],
      "case": "cases/conformance/v2_0/cityobject_building_address/case.json",
      "cityjson_version": "2.0",
      "description": "A BuildingPart with with two addresses, including a point location. Without a geometry member.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "cityobject_building_address",
      "invariants": "cases/conformance/v2_0/cityobject_building_address/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/cityobject_building_address",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/cityobject_complete/cityobject_complete.city.json"
      },
      "assertions": [
        "cityobject_structure_preserved"
      ],
      "case": "cases/conformance/v2_0/cityobject_complete/case.json",
      "cityjson_version": "2.0",
      "description": "CityObject with all properties and hierarchy. With an empty geometry member.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "cityobject_complete",
      "invariants": "cases/conformance/v2_0/cityobject_complete/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/cityobject_complete",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/cityobject_extended/cityobject_extended.city.json"
      },
      "assertions": [
        "cityobject_extension_type_preserved",
        "cityobject_extension_members_preserved"
      ],
      "case": "cases/conformance/v2_0/cityobject_extended/case.json",
      "cityjson_version": "2.0",
      "description": "CityObject with an 'extended' type, e.g. +ExtendedCityObject, including attributes and hierarchy.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "cityobject_extended",
      "invariants": "cases/conformance/v2_0/cityobject_extended/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/cityobject_extended",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/coordinates_precision_ecef/coordinates_precision_ecef.city.json"
      },
      "assertions": [
        "vertex_indices_preserved",
        "coordinates_precision_roundtrip",
        "transform_preserved"
      ],
      "case": "cases/conformance/v2_0/coordinates_precision_ecef/case.json",
      "cityjson_version": "2.0",
      "description": "ECEF/geocentric CRS with millimeter precision at full Earth radius. Roundtrip drift must stay below 1e-4 m.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "coordinates_precision_ecef",
      "invariants": "cases/conformance/v2_0/coordinates_precision_ecef/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/coordinates_precision_ecef",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/coordinates_precision_local/coordinates_precision_local.city.json"
      },
      "assertions": [
        "vertex_indices_preserved",
        "coordinates_precision_roundtrip",
        "transform_preserved"
      ],
      "case": "cases/conformance/v2_0/coordinates_precision_local/case.json",
      "cityjson_version": "2.0",
      "description": "Local engineering CRS at the origin with sub-millimeter (0.1 mm) precision. Roundtrip drift must stay below 1e-4 m.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "coordinates_precision_local",
      "invariants": "cases/conformance/v2_0/coordinates_precision_local/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/coordinates_precision_local",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/coordinates_precision_stateplane/coordinates_precision_stateplane.city.json"
      },
      "assertions": [
        "vertex_indices_preserved",
        "coordinates_precision_roundtrip",
        "transform_preserved"
      ],
      "case": "cases/conformance/v2_0/coordinates_precision_stateplane/case.json",
      "cityjson_version": "2.0",
      "description": "State Plane (survey feet) national grid CRS with millimeter precision and large false origin. Roundtrip drift must stay below 1e-4 m.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "coordinates_precision_stateplane",
      "invariants": "cases/conformance/v2_0/coordinates_precision_stateplane/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/coordinates_precision_stateplane",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/coordinates_precision_utm/coordinates_precision_utm.city.json"
      },
      "assertions": [
        "vertex_indices_preserved",
        "coordinates_precision_roundtrip",
        "transform_preserved"
      ],
      "case": "cases/conformance/v2_0/coordinates_precision_utm/case.json",
      "cityjson_version": "2.0",
      "description": "UTM-class projected CRS with millimeter precision and maximum realistic northing. Roundtrip drift must stay below 1e-4 m.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "coordinates_precision_utm",
      "invariants": "cases/conformance/v2_0/coordinates_precision_utm/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/coordinates_precision_utm",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/coordinates_precision_wgs84/coordinates_precision_wgs84.city.json"
      },
      "assertions": [
        "vertex_indices_preserved",
        "coordinates_precision_roundtrip",
        "transform_preserved"
      ],
      "case": "cases/conformance/v2_0/coordinates_precision_wgs84/case.json",
      "cityjson_version": "2.0",
      "description": "WGS84 geographic CRS at full lon/lat extent with millimeter precision (1e-8 deg scale). Roundtrip drift must stay below 1e-4 m.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "coordinates_precision_wgs84",
      "invariants": "cases/conformance/v2_0/coordinates_precision_wgs84/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/coordinates_precision_wgs84",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/coordinates_precision_worst/coordinates_precision_worst.city.json"
      },
      "assertions": [
        "vertex_indices_preserved",
        "coordinates_precision_roundtrip",
        "transform_preserved"
      ],
      "case": "cases/conformance/v2_0/coordinates_precision_worst/case.json",
      "cityjson_version": "2.0",
      "description": "Worst realistic case: national grid with 0.1 mm precision at maximum extent. Roundtrip drift must stay below 1e-4 m.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "coordinates_precision_worst",
      "invariants": "cases/conformance/v2_0/coordinates_precision_worst/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/coordinates_precision_worst",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/extension/extension.city.json"
      },
      "assertions": [
        "extension_member_preserved"
      ],
      "case": "cases/conformance/v2_0/extension/case.json",
      "cityjson_version": "2.0",
      "description": "CityJSON with an extension.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "extension",
      "invariants": "cases/conformance/v2_0/extension/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/extension",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/geometry_instance/geometry_instance.city.json"
      },
      "assertions": [
        "geometry_instance_preserved",
        "geometry_instance_resolved"
      ],
      "case": "cases/conformance/v2_0/geometry_instance/case.json",
      "cityjson_version": "2.0",
      "description": "Two GeometryInstances with the same template, but different transformation matrices.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "geometry_instance",
      "invariants": "cases/conformance/v2_0/geometry_instance/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/geometry_instance",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/geometry_material_multisolid/geometry_material_multisolid.city.json"
      },
      "assertions": [
        "geometry_material_preserved"
      ],
      "case": "cases/conformance/v2_0/geometry_material_multisolid/case.json",
      "cityjson_version": "2.0",
      "description": "MultiSolid with a single material.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "geometry_material_multisolid",
      "invariants": "cases/conformance/v2_0/geometry_material_multisolid/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/geometry_material_multisolid",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/geometry_material_multisurface/geometry_material_multisurface.city.json"
      },
      "assertions": [
        "geometry_material_preserved"
      ],
      "case": "cases/conformance/v2_0/geometry_material_multisurface/case.json",
      "cityjson_version": "2.0",
      "description": "MultiSurface with a single material.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "geometry_material_multisurface",
      "invariants": "cases/conformance/v2_0/geometry_material_multisurface/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/geometry_material_multisurface",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/geometry_material_solid/geometry_material_solid.city.json"
      },
      "assertions": [
        "geometry_material_preserved"
      ],
      "case": "cases/conformance/v2_0/geometry_material_solid/case.json",
      "cityjson_version": "2.0",
      "description": "Solid with a single material.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "geometry_material_solid",
      "invariants": "cases/conformance/v2_0/geometry_material_solid/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/geometry_material_solid",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/geometry_semantics_multilinestring/geometry_semantics_multilinestring.city.json"
      },
      "assertions": [
        "geometry_semantics_preserved"
      ],
      "case": "cases/conformance/v2_0/geometry_semantics_multilinestring/case.json",
      "cityjson_version": "2.0",
      "description": "MultiLineString with semantics. One of the linestrings does not have a semantic assigned ('null').",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "geometry_semantics_multilinestring",
      "invariants": "cases/conformance/v2_0/geometry_semantics_multilinestring/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/geometry_semantics_multilinestring",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/geometry_semantics_multipoint/geometry_semantics_multipoint.city.json"
      },
      "assertions": [
        "geometry_semantics_preserved"
      ],
      "case": "cases/conformance/v2_0/geometry_semantics_multipoint/case.json",
      "cityjson_version": "2.0",
      "description": "MultiPoint with semantics. One of the points does not have a semantic assigned ('null').",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "geometry_semantics_multipoint",
      "invariants": "cases/conformance/v2_0/geometry_semantics_multipoint/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/geometry_semantics_multipoint",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/geometry_semantics_multisolid/geometry_semantics_multisolid.city.json"
      },
      "assertions": [
        "geometry_semantics_preserved"
      ],
      "case": "cases/conformance/v2_0/geometry_semantics_multisolid/case.json",
      "cityjson_version": "2.0",
      "description": "MultiSolid with semantics. One of the solids does not have a semantic assigned ('null').",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "geometry_semantics_multisolid",
      "invariants": "cases/conformance/v2_0/geometry_semantics_multisolid/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/geometry_semantics_multisolid",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/geometry_semantics_multisurface/geometry_semantics_multisurface.city.json"
      },
      "assertions": [
        "geometry_semantics_preserved"
      ],
      "case": "cases/conformance/v2_0/geometry_semantics_multisurface/case.json",
      "cityjson_version": "2.0",
      "description": "MultiSurface with semantics. One of the surfaces has an inner ring, one of the surfaces does not have a semantic assigned ('null').",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "geometry_semantics_multisurface",
      "invariants": "cases/conformance/v2_0/geometry_semantics_multisurface/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/geometry_semantics_multisurface",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/geometry_semantics_solid/geometry_semantics_solid.city.json"
      },
      "assertions": [
        "geometry_semantics_preserved"
      ],
      "case": "cases/conformance/v2_0/geometry_semantics_solid/case.json",
      "cityjson_version": "2.0",
      "description": "Solid with semantics. One of the faces does not have a semantic assigned ('null').",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "geometry_semantics_solid",
      "invariants": "cases/conformance/v2_0/geometry_semantics_solid/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/geometry_semantics_solid",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/geometry_texture_multisolid/geometry_texture_multisolid.city.json"
      },
      "assertions": [
        "geometry_texture_preserved"
      ],
      "case": "cases/conformance/v2_0/geometry_texture_multisolid/case.json",
      "cityjson_version": "2.0",
      "description": "MultiSolid with textured and untextured surfaces. One textured surface has an inner ring.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "geometry_texture_multisolid",
      "invariants": "cases/conformance/v2_0/geometry_texture_multisolid/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/geometry_texture_multisolid",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/geometry_texture_multisurface/geometry_texture_multisurface.city.json"
      },
      "assertions": [
        "geometry_texture_preserved"
      ],
      "case": "cases/conformance/v2_0/geometry_texture_multisurface/case.json",
      "cityjson_version": "2.0",
      "description": "MultiSurface with textured surfaces. One textured surface has an inner ring. Last surface is not textured (set to 'null').",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "geometry_texture_multisurface",
      "invariants": "cases/conformance/v2_0/geometry_texture_multisurface/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/geometry_texture_multisurface",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/geometry_texture_solid/geometry_texture_solid.city.json"
      },
      "assertions": [
        "geometry_texture_preserved"
      ],
      "case": "cases/conformance/v2_0/geometry_texture_solid/case.json",
      "cityjson_version": "2.0",
      "description": "Solid with textured surfaces. One textured surface has an inner ring. Last surface is not textured (set to 'null').",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "geometry_texture_solid",
      "invariants": "cases/conformance/v2_0/geometry_texture_solid/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/geometry_texture_solid",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/invalid/invalid_cityjsonfeature_root_id_unresolved/invalid_cityjsonfeature_root_id_unresolved.city.jsonl"
      },
      "assertions": [
        "feature_root_id_unresolved"
      ],
      "case": "cases/invalid/invalid_cityjsonfeature_root_id_unresolved/case.json",
      "cityjson_version": "2.0",
      "description": "Hand-written invalid CityJSONFeature where the root id does not match any CityObject in the same feature. Must be rejected.",
      "family": "invalid",
      "geometry_kind": "dummy",
      "id": "invalid_cityjsonfeature_root_id_unresolved",
      "invariants": "cases/invalid/invalid_cityjsonfeature_root_id_unresolved/invariants.json",
      "layer": "invalid",
      "path": "cases/invalid/invalid_cityjsonfeature_root_id_unresolved",
      "representation": "cityjsonfeature",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/invalid/invalid_missing_type/invalid_missing_type.json"
      },
      "assertions": [
        "rejects_missing_top_level_type"
      ],
      "case": "cases/invalid/invalid_missing_type/case.json",
      "cityjson_version": "2.0",
      "description": "Synthetic invalid CityJSON fixture that omits the required top-level `type` field. Valid JSON, but must be rejected at schema validation before any geometry or data access.",
      "family": "invalid",
      "geometry_kind": "dummy",
      "id": "invalid_missing_type",
      "invariants": "cases/invalid/invalid_missing_type/invariants.json",
      "layer": "invalid",
      "path": "cases/invalid/invalid_missing_type",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/invalid/invalid_out_of_range_vertex_index/invalid_out_of_range_vertex_index.json"
      },
      "assertions": [
        "rejects_out_of_range_vertex_index"
      ],
      "case": "cases/invalid/invalid_out_of_range_vertex_index/case.json",
      "cityjson_version": "2.0",
      "description": "Synthetic invalid CityJSON fixture with a boundary that references a vertex index outside the available vertex array. Valid JSON, but must be rejected during geometry validation.",
      "family": "invalid",
      "geometry_kind": "dummy",
      "id": "invalid_out_of_range_vertex_index",
      "invariants": "cases/invalid/invalid_out_of_range_vertex_index/invariants.json",
      "layer": "invalid",
      "path": "cases/invalid/invalid_out_of_range_vertex_index",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/invalid/invalid_u64_f64_bounds/invalid_u64_f64_bounds.json"
      },
      "assertions": [
        "rejects_numeric_bounds_overflow"
      ],
      "case": "cases/invalid/invalid_u64_f64_bounds/case.json",
      "cityjson_version": "2.0",
      "description": "Synthetic invalid CityJSON fixture that uses stored vertex values above `u64::MAX` and transform values outside the `f64` range. The input remains syntactically valid JSON, but implementations that coerce the numeric fields into bounded integer or float types should reject it.",
      "family": "invalid",
      "geometry_kind": "dummy",
      "id": "invalid_u64_f64_bounds",
      "invariants": "cases/invalid/invalid_u64_f64_bounds/invariants.json",
      "layer": "invalid",
      "path": "cases/invalid/invalid_u64_f64_bounds",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "acquired",
      "artifact_paths": {
        "acquisition": "cases/workloads/io_3dbag_cityjson/acquisition.json"
      },
      "assertions": [
        "object_count_preserved",
        "bbox_stable"
      ],
      "case": "cases/workloads/io_3dbag_cityjson/case.json",
      "cityjson_version": "2.0",
      "description": "Real-geometry 3DBAG slice stored as a single monolithic CityJSON file. Baseline for sequential I/O, parser throughput, and whole-document memory behavior.",
      "family": "io",
      "geometry_kind": "real-preserved",
      "id": "io_3dbag_cityjson",
      "invariants": "cases/workloads/io_3dbag_cityjson/invariants.json",
      "layer": "workload",
      "path": "cases/workloads/io_3dbag_cityjson",
      "representation": "cityjson",
      "source_kind": "real-geometry",
      "version": 2
    },
    {
      "artifact_mode": "acquired",
      "artifact_paths": {
        "acquisition": "cases/workloads/io_3dbag_cityjson_cluster_4x/acquisition.json"
      },
      "assertions": [
        "object_count_preserved",
        "bbox_stable"
      ],
      "case": "cases/workloads/io_3dbag_cityjson_cluster_4x/case.json",
      "cityjson_version": "2.0",
      "description": "Real-geometry 3DBAG workload built from four merged contiguous tiles. Extends the single-tile io_3dbag_cityjson baseline to a larger whole-document input for memory and throughput comparisons.",
      "family": "io",
      "geometry_kind": "real-preserved",
      "id": "io_3dbag_cityjson_cluster_4x",
      "invariants": "cases/workloads/io_3dbag_cityjson_cluster_4x/invariants.json",
      "layer": "workload",
      "path": "cases/workloads/io_3dbag_cityjson_cluster_4x",
      "representation": "cityjson",
      "source_kind": "real-geometry",
      "version": 2
    },
    {
      "artifact_mode": "acquired",
      "artifact_paths": {
        "acquisition": "cases/workloads/io_3dbag_feature_files/acquisition.json"
      },
      "assertions": [
        "file_count_preserved",
        "layout_stable"
      ],
      "case": "cases/workloads/io_3dbag_feature_files/case.json",
      "cityjson_version": "2.0",
      "description": "Real-geometry 3DBAG slice stored as one file per feature. Targets filesystem access patterns including open/close overhead, metadata lookup, and random versus sequential access.",
      "family": "io",
      "geometry_kind": "real-preserved",
      "id": "io_3dbag_feature_files",
      "invariants": "cases/workloads/io_3dbag_feature_files/invariants.json",
      "layer": "workload",
      "path": "cases/workloads/io_3dbag_feature_files",
      "representation": "feature-files",
      "source_kind": "real-geometry",
      "version": 2
    },
    {
      "artifact_mode": "acquired",
      "artifact_paths": {
        "acquisition": "cases/workloads/io_3dbag_jsonl/acquisition.json"
      },
      "assertions": [
        "record_count_preserved",
        "stream_boundaries_stable"
      ],
      "case": "cases/workloads/io_3dbag_jsonl/case.json",
      "cityjson_version": "2.0",
      "description": "Real-geometry 3DBAG slice stored as JSONL. Targets stream-oriented parsing, record framing overhead, and streaming memory behavior as a counterpart to the monolithic io_3dbag_cityjson case.",
      "family": "io",
      "geometry_kind": "real-preserved",
      "id": "io_3dbag_jsonl",
      "invariants": "cases/workloads/io_3dbag_jsonl/invariants.json",
      "layer": "workload",
      "path": "cases/workloads/io_3dbag_jsonl",
      "representation": "jsonl",
      "source_kind": "real-geometry",
      "version": 2
    },
    {
      "artifact_mode": "acquired",
      "artifact_paths": {
        "acquisition": "cases/workloads/io_basisvoorziening_3d_cityjson/acquisition.json"
      },
      "assertions": [
        "object_count_preserved",
        "bbox_stable"
      ],
      "case": "cases/workloads/io_basisvoorziening_3d_cityjson/case.json",
      "cityjson_version": "2.0",
      "description": "Real-geometry Basisvoorziening 3D tile stored as a single monolithic CityJSON file. A larger terrain-inclusive alternative to the io_3dbag_cityjson baseline, from the 2022 PDOK collection.",
      "family": "io",
      "geometry_kind": "real-preserved",
      "id": "io_basisvoorziening_3d_cityjson",
      "invariants": "cases/workloads/io_basisvoorziening_3d_cityjson/invariants.json",
      "layer": "workload",
      "path": "cases/workloads/io_basisvoorziening_3d_cityjson",
      "representation": "cityjson",
      "source_kind": "real-geometry",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/metadata_complete/metadata_complete.city.json"
      },
      "assertions": [
        "metadata_properties_preserved"
      ],
      "case": "cases/conformance/v2_0/metadata_complete/case.json",
      "cityjson_version": "2.0",
      "description": "Metadata with all properties that are defined in the spec.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "metadata_complete",
      "invariants": "cases/conformance/v2_0/metadata_complete/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/metadata_complete",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/metadata_extra_properties/metadata_extra_properties.city.json"
      },
      "assertions": [
        "metadata_extra_properties_preserved"
      ],
      "case": "cases/conformance/v2_0/metadata_extra_properties/case.json",
      "cityjson_version": "2.0",
      "description": "Metadata with extra properties that are not in the specs.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "metadata_extra_properties",
      "invariants": "cases/conformance/v2_0/metadata_extra_properties/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/metadata_extra_properties",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "acquired",
      "artifact_paths": {
        "acquisition": "cases/operations/ops_3dbag_base/acquisition.json"
      },
      "assertions": [
        "bounding_box_stable",
        "hierarchy_traversal_complete"
      ],
      "case": "cases/operations/ops_3dbag_base/case.json",
      "cityjson_version": "2.0",
      "description": "Medium-sized real-geometry 3DBAG case. Baseline for bounding-box computation, object filtering, hierarchy navigation, and geometry access.",
      "family": "operation_kernel",
      "geometry_kind": "real-preserved",
      "id": "ops_3dbag_base",
      "invariants": "cases/operations/ops_3dbag_base/invariants.json",
      "layer": "operation",
      "path": "cases/operations/ops_3dbag_base",
      "representation": "cityjson",
      "source_kind": "real-geometry",
      "version": 2
    },
    {
      "artifact_mode": "acquired",
      "artifact_paths": {
        "acquisition": "cases/operations/ops_3dbag_enriched/acquisition.json"
      },
      "assertions": [
        "attribute_payload_preserved",
        "geometry_preserved"
      ],
      "case": "cases/operations/ops_3dbag_enriched/case.json",
      "cityjson_version": "2.0",
      "description": "Real 3DBAG geometry enriched with synthetic attributes. Targets object-graph traversal, attribute lookup, and roundtrip stability on a mixed geometry-plus-metadata payload.",
      "family": "operation_kernel",
      "geometry_kind": "real-preserved",
      "id": "ops_3dbag_enriched",
      "invariants": "cases/operations/ops_3dbag_enriched/invariants.json",
      "layer": "operation",
      "path": "cases/operations/ops_3dbag_enriched",
      "representation": "cityjson",
      "source_kind": "real-geometry-enriched",
      "version": 2
    },
    {
      "artifact_mode": "acquired",
      "artifact_paths": {
        "acquisition": "cases/operations/ops_3dbag_semantic_surfaces/acquisition.json"
      },
      "assertions": [
        "semantic_surfaces_preserved",
        "boundary_to_semantics_mapping_stable"
      ],
      "case": "cases/operations/ops_3dbag_semantic_surfaces/case.json",
      "cityjson_version": "2.0",
      "description": "Real-geometry 3DBAG case with roof, wall, and ground semantic surfaces. Targets surface traversal, boundary-to-semantics mapping, and semantic-aware roundtrips.",
      "family": "operation_kernel",
      "geometry_kind": "real-preserved",
      "id": "ops_3dbag_semantic_surfaces",
      "invariants": "cases/operations/ops_3dbag_semantic_surfaces/invariants.json",
      "layer": "operation",
      "path": "cases/operations/ops_3dbag_semantic_surfaces",
      "representation": "cityjson",
      "source_kind": "real-geometry",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/operations/ops_cityjsonseq_feature_root_id_not_shared/ops_cityjsonseq_feature_root_id_not_shared.city.jsonl"
      },
      "assertions": [
        "feature_root_id_not_shared_state",
        "feature_boundaries_preserved"
      ],
      "case": "cases/operations/ops_cityjsonseq_feature_root_id_not_shared/case.json",
      "cityjson_version": "2.0",
      "description": "Hand-written CityJSONSeq stream with a base CityJSON header and multiple CityJSONFeature items that differ only by their root id. Verifies that the root id is preserved per feature and does not affect shared-root compatibility.",
      "family": "operation_kernel",
      "geometry_kind": "dummy",
      "id": "ops_cityjsonseq_feature_root_id_not_shared",
      "invariants": "cases/operations/ops_cityjsonseq_feature_root_id_not_shared/invariants.json",
      "layer": "operation",
      "path": "cases/operations/ops_cityjsonseq_feature_root_id_not_shared",
      "representation": "jsonl",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/semantic_all_types/semantic_all_types.city.json"
      },
      "assertions": [
        "semantic_surface_preserved"
      ],
      "case": "cases/conformance/v2_0/semantic_all_types/case.json",
      "cityjson_version": "2.0",
      "description": "Semantic surfaces with all possible semantic types, including a surface without semantics (last surface).",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "semantic_all_types",
      "invariants": "cases/conformance/v2_0/semantic_all_types/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/semantic_all_types",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/semantic_complete/semantic_complete.city.json"
      },
      "assertions": [
        "semantic_surface_preserved",
        "semantic_hierarchy_resolved",
        "semantic_attributes_resolved"
      ],
      "case": "cases/conformance/v2_0/semantic_complete/case.json",
      "cityjson_version": "2.0",
      "description": "Two semantic surfaces that together contain all possible semantic properties. These include semantic hierarchy and allowed attribute value types.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "semantic_complete",
      "invariants": "cases/conformance/v2_0/semantic_complete/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/semantic_complete",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/semantic_extended/semantic_extended.city.json"
      },
      "assertions": [
        "semantic_extension_type_preserved",
        "semantic_extension_properties_preserved"
      ],
      "case": "cases/conformance/v2_0/semantic_extended/case.json",
      "cityjson_version": "2.0",
      "description": "Semantic surface with an 'extended' or custom type that start with a '+', e.g. +MySemantic, including attributes and hierarchy.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "semantic_extended",
      "invariants": "cases/conformance/v2_0/semantic_extended/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/semantic_extended",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "generated",
      "artifact_paths": {
        "generated": "artifacts/generated/spec_geometry_matrix.city.json",
        "profile": "cases/conformance/synthetic/spec_geometry_matrix/profile.json"
      },
      "assertions": [
        "geometry_types_preserved",
        "boundary_normalization_stable"
      ],
      "case": "cases/conformance/synthetic/spec_geometry_matrix/case.json",
      "cityjson_version": "2.0",
      "description": "Deterministic synthetic case (seed 1001) with 8 Building/Bridge objects covering all seven geometry types, LoDs 0-3, and roof/ground/wall/closure semantics. No materials, textures, or attributes. Baseline for geometry dispatch and boundary handling.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "spec_geometry_matrix",
      "invariants": "cases/conformance/synthetic/spec_geometry_matrix/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/synthetic/spec_geometry_matrix",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "generated",
      "artifact_paths": {
        "generated": "artifacts/generated/stress_attribute_heavy_heterogenous.city.json",
        "profile": "cases/workloads/stress_attribute_heavy_heterogenous/profile.json"
      },
      "assertions": [
        "attributes_preserved",
        "bottleneck_shape_visible"
      ],
      "case": "cases/workloads/stress_attribute_heavy_heterogenous/case.json",
      "cityjson_version": "2.0",
      "description": "Deterministic synthetic case (seed 3001) with 1000 Building objects, 60 flat heterogenous-type attributes per object, and a single-surface MultiSurface geometry at LoD 2. No semantics, materials, or textures. The same attribute key can have different value types across CityObjects; null is included in the random type pool. Targets attribute map allocation, key string interning, and parse/serialize throughput with type-dispatch pressure. Hardware load: CPU (JSON key hashing, value type dispatch), RAM (60k attribute key-value pairs). Architecture bottleneck: hash map resize, key interning, and per-value type dispatch. Data model bottleneck: flat attribute record size at 60 keys per object.",
      "family": "stress",
      "geometry_kind": "dummy",
      "id": "stress_attribute_heavy_heterogenous",
      "invariants": "cases/workloads/stress_attribute_heavy_heterogenous/invariants.json",
      "layer": "workload",
      "path": "cases/workloads/stress_attribute_heavy_heterogenous",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "generated",
      "artifact_paths": {
        "generated": "artifacts/generated/stress_attribute_heavy_homogenous.city.json",
        "profile": "cases/workloads/stress_attribute_heavy_homogenous/profile.json"
      },
      "assertions": [
        "attributes_preserved",
        "attribute_types_consistent_per_key",
        "bottleneck_shape_visible"
      ],
      "case": "cases/workloads/stress_attribute_heavy_homogenous/case.json",
      "cityjson_version": "2.0",
      "description": "Deterministic synthetic case (seed 3007) with 1000 Building objects, 60 flat homogenous-type attributes per object, and a single-surface MultiSurface geometry at LoD 2. No semantics, materials, or textures. Each attribute key has a fixed scalar type (bool, integer, unsigned, float, or string) consistent across all CityObjects; each value has a 1-in-7 chance of being null. Targets attribute map allocation, key string interning, and parse/serialize throughput with schema-stable type pressure. Hardware load: CPU (JSON key hashing), RAM (60k attribute key-value pairs). Architecture bottleneck: hash map resize and key interning. Data model bottleneck: flat attribute record size at 60 keys per object with nullable scalars.",
      "family": "stress",
      "geometry_kind": "dummy",
      "id": "stress_attribute_heavy_homogenous",
      "invariants": "cases/workloads/stress_attribute_heavy_homogenous/invariants.json",
      "layer": "workload",
      "path": "cases/workloads/stress_attribute_heavy_homogenous",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "generated",
      "artifact_paths": {
        "generated": "artifacts/generated/stress_boundary_heavy.city.json",
        "profile": "cases/workloads/stress_boundary_heavy/profile.json"
      },
      "assertions": [
        "boundary_nesting_preserved",
        "bottleneck_shape_visible"
      ],
      "case": "cases/workloads/stress_boundary_heavy/case.json",
      "cityjson_version": "2.0",
      "description": "Deterministic synthetic case (seed 3004) with 1000 Building objects each carrying one CompositeSolid geometry with 4-6 solid members and 4-6 shells per solid. No attributes, semantics, materials, or textures. Targets deep boundary recursion and stack/heap pressure. Hardware load: CPU (recursive traversal), stack depth pressure, heap for shell arrays. Architecture bottleneck: CompositeSolid -> Solid -> Shell -> Ring traversal. Data model bottleneck: nested boundary reference chains at each containment level.",
      "family": "stress",
      "geometry_kind": "dummy",
      "id": "stress_boundary_heavy",
      "invariants": "cases/workloads/stress_boundary_heavy/invariants.json",
      "layer": "workload",
      "path": "cases/workloads/stress_boundary_heavy",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "generated",
      "artifact_paths": {
        "generated": "artifacts/generated/stress_geometry_heavy.city.json",
        "profile": "cases/workloads/stress_geometry_heavy/profile.json"
      },
      "assertions": [
        "all_geometries_preserved",
        "bottleneck_shape_visible"
      ],
      "case": "cases/workloads/stress_geometry_heavy/case.json",
      "cityjson_version": "2.0",
      "description": "Deterministic synthetic case (seed 3003) with 1000 Building objects each carrying 4 MultiSurface geometries at LoDs 0-3 (4000 geometry records total). No attributes, semantics, materials, or textures. Targets multi-LoD geometry dispatch and geometry array allocation. Hardware load: CPU (geometry type dispatch per LoD), memory for 4x geometry arrays per object. Architecture bottleneck: LoD index maintenance and geometry iteration. Data model bottleneck: 4 geometry structs per CityObject.",
      "family": "stress",
      "geometry_kind": "dummy",
      "id": "stress_geometry_heavy",
      "invariants": "cases/workloads/stress_geometry_heavy/invariants.json",
      "layer": "workload",
      "path": "cases/workloads/stress_geometry_heavy",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "generated",
      "artifact_paths": {
        "generated": "artifacts/generated/stress_hierarchy_heavy.city.json",
        "profile": "cases/workloads/stress_hierarchy_heavy/profile.json"
      },
      "assertions": [
        "hierarchy_preserved",
        "bottleneck_shape_visible"
      ],
      "case": "cases/workloads/stress_hierarchy_heavy/case.json",
      "cityjson_version": "2.0",
      "description": "Deterministic synthetic case (seed 3002) with 1000 CityObjects across two hierarchy levels (Building parents + BuildingPart children, 2-4 children per parent). Each object has minimal MultiPoint geometry with semantic surfaces. No attributes, materials, or textures. Targets parent-child graph traversal and semantic surface resolution. Hardware load: CPU (pointer chasing), cache misses from scattered object references. Architecture bottleneck: children/parents reference resolution. Data model bottleneck: two-level object graph with semantic mapping on minimal geometry.",
      "family": "stress",
      "geometry_kind": "dummy",
      "id": "stress_hierarchy_heavy",
      "invariants": "cases/workloads/stress_hierarchy_heavy/invariants.json",
      "layer": "workload",
      "path": "cases/workloads/stress_hierarchy_heavy",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "generated",
      "artifact_paths": {
        "generated": "artifacts/generated/stress_resource_heavy.city.json",
        "profile": "cases/workloads/stress_resource_heavy/profile.json"
      },
      "assertions": [
        "appearance_preserved",
        "semantics_preserved",
        "bottleneck_shape_visible"
      ],
      "case": "cases/workloads/stress_resource_heavy/case.json",
      "cityjson_version": "2.0",
      "description": "Deterministic synthetic case (seed 3006) with 1000 Building objects each carrying one Solid geometry (2-4 shells) with semantics, 2-4 materials, and 2-4 textures simultaneously. No attributes. Targets combined appearance and semantic annotation parsing. Hardware load: CPU (multi-path parsing for semantics + materials + textures), RAM for appearance tables. Architecture bottleneck: combined appearance initialisation and material/texture theme co-resolution. Data model bottleneck: per-surface triple annotation (semantics + material index + texture coordinate) on Solid geometry.",
      "family": "stress",
      "geometry_kind": "dummy",
      "id": "stress_resource_heavy",
      "invariants": "cases/workloads/stress_resource_heavy/invariants.json",
      "layer": "workload",
      "path": "cases/workloads/stress_resource_heavy",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "generated",
      "artifact_paths": {
        "generated": "artifacts/generated/stress_vertex_heavy.city.json",
        "profile": "cases/workloads/stress_vertex_heavy/profile.json"
      },
      "assertions": [
        "vertex_count_preserved",
        "bottleneck_shape_visible"
      ],
      "case": "cases/workloads/stress_vertex_heavy/case.json",
      "cityjson_version": "2.0",
      "description": "Deterministic synthetic case (seed 3005) with 1000 Building objects each with 33-34 triangulated surfaces (3 vertices, no inner rings), totalling ~100k vertices. MultiSurface geometry at LoD 2. No attributes, semantics, materials, or textures. Targets vertex array allocation and coordinate transform throughput. Hardware load: CPU (coordinate transform for ~100k vertices), memory bandwidth for vertex arrays. Architecture bottleneck: vertex array allocation and scale/offset application. Data model bottleneck: flat vertex array size and index array compactness.",
      "family": "stress",
      "geometry_kind": "dummy",
      "id": "stress_vertex_heavy",
      "invariants": "cases/workloads/stress_vertex_heavy/invariants.json",
      "layer": "workload",
      "path": "cases/workloads/stress_vertex_heavy",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    },
    {
      "artifact_mode": "checked-in",
      "artifact_paths": {
        "source": "cases/conformance/v2_0/vertices/vertices.city.json"
      },
      "assertions": [
        "vertex_indices_preserved",
        "coordinates_preserved",
        "transform_preserved"
      ],
      "case": "cases/conformance/v2_0/vertices/case.json",
      "cityjson_version": "2.0",
      "description": "Vertices and transformation properties using coordinates in the Dutch RD New (EPSG:7415) coordinate reference system.",
      "family": "spec_atom",
      "geometry_kind": "dummy",
      "id": "vertices",
      "invariants": "cases/conformance/v2_0/vertices/invariants.json",
      "layer": "conformance",
      "path": "cases/conformance/v2_0/vertices",
      "representation": "cityjson",
      "source_kind": "synthetic",
      "version": 2
    }
  ],
  "purpose": "Derived case index for the shared CityJSON corpus. Source of truth lives under cases/.",
  "version": 2
}