Add SCUM current-service map asset contract
This commit is contained in:
@@ -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"
|
||||
}
|
||||
+49
@@ -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}$" }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user