fix(data-plane): preserve immutable zone product v1

This commit is contained in:
Codex 2026-07-21 12:48:49 +03:00
parent 343812b90d
commit 92d292ce87
6 changed files with 67 additions and 27 deletions

View File

@ -92,7 +92,7 @@ deleted.
The active predecessor is package version `0.1.4` at immutable release
`0.1.4-59dc9f7882721d6a`. Package `0.1.5` adds the provider-neutral complete
snapshot replace mode used by `map.zones.current.v1`; its Platform staging
snapshot replace mode used by `map.zones.current.v2`; its Platform staging
remains inert until a separately reviewed Engine-owned transition selects the
exact digest and accepts the updated MCP node schema.

View File

@ -4,5 +4,5 @@ Adds the bounded, offset-paged `gelios.geozone` read capability and maps a
complete account generation into `map.gelios-geofences.current.v1`.
Gelios account geo-objects are deliberately not published into the normative
`map.zones.current.v1` Department of Transport dataset. Independent authorities
`map.zones.current.v2` Department of Transport dataset. Independent authorities
must never share one replace generation.

View File

@ -46,12 +46,12 @@ assert.deepEqual(validateProviderPackage(geliosProviderPackageV6), { ok: true, e
const zonesProduct = geliosProviderPackageV6.dataProducts.find((product) => product.id === "map.gelios-geofences.current.v1");
const registeredZonesProduct = JSON.parse(await readFile(new URL(
"../../../services/external-data-plane/definitions/map.zones.current.v1.json",
"../../../services/external-data-plane/definitions/map.zones.current.v2.json",
import.meta.url,
), "utf8"));
assert.deepEqual(zonesProduct.semanticTypes, ["map.zone"]);
assert.equal(zonesProduct.fieldContracts.geometry.type, "geometry");
assert.equal(registeredZonesProduct.version, "1.1.0");
assert.equal(registeredZonesProduct.version, "2.0.0");
assert.deepEqual(registeredZonesProduct.fieldContracts.dataset_authority.enum, ["moscow-department-of-transport"]);
assert.deepEqual(registeredZonesProduct.fieldContracts.source_adapter.enum, [
"depttrans-mmap-snapshot-v1",

View File

@ -1,50 +1,32 @@
{
"id": "map.zones.current.v1",
"version": "1.1.0",
"version": "1.0.0",
"ontologyRevision": "ontology.map.zone.v1",
"deliveryMode": "snapshot+patch",
"semanticTypes": ["map.zone"],
"fields": [
"area_square_meters",
"applies_to_couriers",
"applies_to_kicksharing",
"dataset_authority",
"dataset_id",
"description",
"display_name",
"geometry",
"geometry_kind",
"max_speed_kph",
"perimeter_meters",
"schedule_timezone",
"source_adapter",
"source_created_at",
"source_kind",
"source_revision",
"source_updated_at",
"style_color",
"weekly_speed_schedule"
"style_color"
],
"fieldContracts": {
"area_square_meters": { "type": "number", "required": false, "minimum": 0 },
"applies_to_couriers": { "type": "boolean", "required": false },
"applies_to_kicksharing": { "type": "boolean", "required": false },
"dataset_authority": { "type": "string", "required": true, "enum": ["moscow-department-of-transport"] },
"dataset_id": { "type": "string", "required": true, "enum": ["pmd-slow-zones"] },
"description": { "type": "string", "required": false },
"display_name": { "type": "string", "required": true },
"geometry": { "type": "geometry", "required": true },
"geometry_kind": { "type": "string", "required": true, "enum": ["circle", "corridor", "polygon"] },
"max_speed_kph": { "type": "number", "required": false, "minimum": 0 },
"perimeter_meters": { "type": "number", "required": false, "minimum": 0 },
"schedule_timezone": { "type": "string", "required": false, "enum": ["Europe/Moscow"] },
"source_adapter": { "type": "string", "required": true, "enum": ["depttrans-mmap-snapshot-v1", "depttrans-api-snapshot-v1"] },
"source_created_at": { "type": "string", "required": false },
"source_kind": { "type": "string", "required": true, "enum": ["versioned_snapshot"] },
"source_kind": { "type": "string", "required": true, "enum": ["live_api", "versioned_snapshot"] },
"source_revision": { "type": "string", "required": true },
"source_updated_at": { "type": "string", "required": false },
"style_color": { "type": "string", "required": false },
"weekly_speed_schedule": { "type": "string_array", "required": false }
"style_color": { "type": "string", "required": false }
},
"history": { "mode": "none", "retentionDays": 1 }
}

View File

@ -0,0 +1,50 @@
{
"id": "map.zones.current.v2",
"version": "2.0.0",
"ontologyRevision": "ontology.map.zone.v1",
"deliveryMode": "snapshot+patch",
"semanticTypes": ["map.zone"],
"fields": [
"area_square_meters",
"applies_to_couriers",
"applies_to_kicksharing",
"dataset_authority",
"dataset_id",
"description",
"display_name",
"geometry",
"geometry_kind",
"max_speed_kph",
"perimeter_meters",
"schedule_timezone",
"source_adapter",
"source_created_at",
"source_kind",
"source_revision",
"source_updated_at",
"style_color",
"weekly_speed_schedule"
],
"fieldContracts": {
"area_square_meters": { "type": "number", "required": false, "minimum": 0 },
"applies_to_couriers": { "type": "boolean", "required": false },
"applies_to_kicksharing": { "type": "boolean", "required": false },
"dataset_authority": { "type": "string", "required": true, "enum": ["moscow-department-of-transport"] },
"dataset_id": { "type": "string", "required": true, "enum": ["pmd-slow-zones"] },
"description": { "type": "string", "required": false },
"display_name": { "type": "string", "required": true },
"geometry": { "type": "geometry", "required": true },
"geometry_kind": { "type": "string", "required": true, "enum": ["circle", "corridor", "polygon"] },
"max_speed_kph": { "type": "number", "required": false, "minimum": 0 },
"perimeter_meters": { "type": "number", "required": false, "minimum": 0 },
"schedule_timezone": { "type": "string", "required": false, "enum": ["Europe/Moscow"] },
"source_adapter": { "type": "string", "required": true, "enum": ["depttrans-mmap-snapshot-v1", "depttrans-api-snapshot-v1"] },
"source_created_at": { "type": "string", "required": false },
"source_kind": { "type": "string", "required": true, "enum": ["versioned_snapshot"] },
"source_revision": { "type": "string", "required": true },
"source_updated_at": { "type": "string", "required": false },
"style_color": { "type": "string", "required": false },
"weekly_speed_schedule": { "type": "string_array", "required": false }
},
"history": { "mode": "none", "retentionDays": 1 }
}

View File

@ -12,6 +12,7 @@ assert.deepEqual(bundled.map((definition) => definition.id), [
"fleet.positions.current.v3",
"fleet.positions.current.v4",
"map.zones.current.v1",
"map.zones.current.v2",
]);
assert.deepEqual(bundled[0].semanticTypes, ["map.moving_object"]);
assert.equal(bundled[0].ontologyRevision, "ontology.map.moving_object.v1");
@ -46,12 +47,19 @@ assert.deepEqual(bundled[3].fieldContracts.movement_state, {
required: true,
enum: ["moving", "stopped"],
});
assert.equal(bundled[4].version, "1.1.0");
assert.equal(bundled[4].version, "1.0.0");
assert.equal(bundled[4].ontologyRevision, "ontology.map.zone.v1");
assert.deepEqual(bundled[4].semanticTypes, ["map.zone"]);
assert.deepEqual(bundled[4].fieldContracts.geometry, { type: "geometry", required: true });
assert.equal(bundled[4].fields.includes("dataset_authority"), false);
assert.equal(bundled[5].version, "2.0.0");
assert.equal(bundled[5].ontologyRevision, "ontology.map.zone.v1");
assert.deepEqual(bundled[5].semanticTypes, ["map.zone"]);
assert.deepEqual(bundled[5].fieldContracts.geometry, { type: "geometry", required: true });
assert.deepEqual(bundled[5].fieldContracts.dataset_authority.enum, ["moscow-department-of-transport"]);
assert.equal(Object.keys(bundled[3].fieldContracts).length, bundled[3].fields.length);
assert.equal(Object.keys(bundled[4].fieldContracts).length, bundled[4].fields.length);
assert.equal(Object.keys(bundled[5].fieldContracts).length, bundled[5].fields.length);
const directory = await mkdtemp(join(tmpdir(), "nodedc-edp-definitions-"));
try {