Add SCUM current-service map asset contract

This commit is contained in:
npc0-hue
2026-08-13 10:19:39 +08:00
parent 5331143806
commit 25a823f298
7 changed files with 341 additions and 2 deletions
@@ -0,0 +1,46 @@
{
"key": "scum-current-service-coordinate-map",
"mapVersion": "scum-current-service-coordinate-map-v1",
"adapterVersion": "scum-live-data-v1",
"requiredSchemaFingerprint": "sha256:ebd477d6c6ead9c34c41169af489236d762a76186d45dedd753d50f1b81e26f0",
"sourceEvidence": "openspec/changes/replace-scum-projections-with-real-data-management/evidence/scum-current-service-sqlite-diagnostic-2026-08-12.md",
"authorization": {
"redistribution": "first-party-generated-coordinate-metadata",
"baseMapArtwork": "not-packaged",
"renderingAvailability": "unavailable-until-authorized-base-map"
},
"worldBounds": {
"minX": -901009.4375,
"minY": -883992.5625,
"maxX": 612580.0625,
"maxY": 615977.375
},
"image": {
"width": 4096,
"height": 4096
},
"layers": [
{
"key": "players",
"capability": "positions.read",
"subjectType": "player",
"label": "Players",
"sourceQueryKey": "scum-positions-read"
},
{
"key": "vehicles",
"capability": "positions.read",
"subjectType": "vehicle",
"label": "Vehicles",
"sourceQueryKey": "scum-positions-read"
},
{
"key": "flags",
"capability": "positions.read",
"subjectType": "flag",
"label": "Flags",
"sourceQueryKey": "scum-positions-read"
}
],
"transformAssetPath": "assets/scum-live/map/current-service-transform.json"
}
@@ -0,0 +1,49 @@
{
"key": "scum-current-service-coordinate-transform",
"transformVersion": "scum-current-service-transform-v1",
"mapAssetKey": "scum-current-service-coordinate-map",
"adapterVersion": "scum-live-data-v1",
"requiredSchemaFingerprint": "sha256:ebd477d6c6ead9c34c41169af489236d762a76186d45dedd753d50f1b81e26f0",
"coordinateSystem": "current-service-observed-entity-envelope",
"sourceEvidence": "openspec/changes/replace-scum-projections-with-real-data-management/evidence/scum-current-service-sqlite-diagnostic-2026-08-12.md",
"worldBounds": {
"minX": -901009.4375,
"minY": -883992.5625,
"maxX": 612580.0625,
"maxY": 615977.375
},
"image": {
"width": 4096,
"height": 4096
},
"axisMapping": {
"x": "left-to-right",
"y": "bottom-to-top-inverted-for-image-y"
},
"formula": {
"pixelX": "((x - minX) / (maxX - minX)) * (width - 1)",
"pixelY": "((maxY - y) / (maxY - minY)) * (height - 1)"
},
"validation": {
"rejectNonFinite": true,
"rejectOutOfBounds": true,
"acceptBoundaryPoints": true
},
"fixtures": [
{
"name": "observed-minimum-corner",
"world": { "x": -901009.4375, "y": -883992.5625 },
"pixel": { "x": 0, "y": 4095 }
},
{
"name": "observed-maximum-corner",
"world": { "x": 612580.0625, "y": 615977.375 },
"pixel": { "x": 4095, "y": 0 }
},
{
"name": "observed-center",
"world": { "x": -144214.6875, "y": -134007.59375 },
"pixel": { "x": 2047.5, "y": 2047.5 }
}
]
}
@@ -558,6 +558,28 @@
"timeoutMs": 2000,
"maxResultBytes": 262144
}
],
"mapAssets": [
{
"key": "scum-current-service-coordinate-map",
"adapterVersion": "scum-live-data-v1",
"assetPath": "assets/scum-live/map/current-service-map.json",
"digest": "sha256:74800836553c7e4372a0747c5e9511adcee940b057194488bbf65bf164df372b",
"requiredSchemaFingerprint": "sha256:ebd477d6c6ead9c34c41169af489236d762a76186d45dedd753d50f1b81e26f0",
"metadataSchemaRef": "schemas/scum-live/map-metadata.schema.json",
"transformAssetPath": "assets/scum-live/map/current-service-transform.json",
"transformDigest": "sha256:f1941109167a86818e9e71996821884aeb8bd7e863584454b891e525695ba478",
"worldBounds": {
"minX": -901009.4375,
"minY": -883992.5625,
"maxX": 612580.0625,
"maxY": 615977.375
},
"image": {
"width": 4096,
"height": 4096
}
}
]
},
"permissions": [
@@ -653,6 +675,14 @@
{
"path": "assets/scum-live/queries/positions-read.json",
"mode": 384
},
{
"path": "assets/scum-live/map/current-service-map.json",
"mode": 384
},
{
"path": "assets/scum-live/map/current-service-transform.json",
"mode": 384
}
],
"productionLifecycle": {
@@ -0,0 +1,54 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMCurrentServiceMapMetadata",
"type": "object",
"additionalProperties": false,
"required": ["key", "mapVersion", "adapterVersion", "requiredSchemaFingerprint", "sourceEvidence", "authorization", "worldBounds", "image", "layers", "transformAssetPath"],
"properties": {
"key": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._/-]{0,119}$" },
"mapVersion": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,79}$" },
"adapterVersion": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,79}$" },
"requiredSchemaFingerprint": { "type": "string", "pattern": "^sha256:[a-fA-F0-9]{64}$" },
"sourceEvidence": { "type": "string", "minLength": 1, "maxLength": 240 },
"authorization": {
"type": "object",
"additionalProperties": false,
"required": ["redistribution", "baseMapArtwork", "renderingAvailability"],
"properties": {
"redistribution": { "const": "first-party-generated-coordinate-metadata" },
"baseMapArtwork": { "const": "not-packaged" },
"renderingAvailability": { "const": "unavailable-until-authorized-base-map" }
}
},
"worldBounds": {
"type": "object",
"additionalProperties": false,
"required": ["minX", "minY", "maxX", "maxY"],
"properties": { "minX": { "type": "number" }, "minY": { "type": "number" }, "maxX": { "type": "number" }, "maxY": { "type": "number" } }
},
"image": {
"type": "object",
"additionalProperties": false,
"required": ["width", "height"],
"properties": { "width": { "type": "integer", "minimum": 1 }, "height": { "type": "integer", "minimum": 1 } }
},
"layers": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["key", "capability", "subjectType", "label", "sourceQueryKey"],
"properties": {
"key": { "enum": ["players", "vehicles", "flags"] },
"capability": { "const": "positions.read" },
"subjectType": { "enum": ["player", "vehicle", "flag"] },
"label": { "type": "string", "minLength": 1, "maxLength": 40 },
"sourceQueryKey": { "const": "scum-positions-read" }
}
}
},
"transformAssetPath": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._/-]{0,240}$" }
}
}