Ghostlight/schemas/corpus-coverage.schema.json
2026-05-04 14:06:01 +01:00

139 lines
4.5 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "ghostlight.corpus_coverage.schema.json",
"title": "Ghostlight Corpus Coverage Ledger",
"type": "object",
"required": [
"schema_version",
"coverage_id",
"coverage_targets",
"entries"
],
"properties": {
"schema_version": {
"const": "ghostlight.corpus_coverage.v0"
},
"coverage_id": {
"type": "string",
"minLength": 1
},
"coverage_targets": {
"type": "object",
"required": [
"major_powers",
"minor_powers",
"movements",
"pre_elysium_flashpoints",
"defunct_absorbed_powers",
"practical_first_broad_target",
"major_power_requirement",
"collision_requirement"
],
"properties": {
"major_powers": { "type": "integer", "minimum": 0 },
"minor_powers": { "type": "integer", "minimum": 0 },
"movements": { "type": "integer", "minimum": 0 },
"pre_elysium_flashpoints": { "type": "integer", "minimum": 0 },
"defunct_absorbed_powers": { "type": "integer", "minimum": 0 },
"practical_first_broad_target": {
"type": "object",
"required": ["minimum", "maximum"],
"properties": {
"minimum": { "type": "integer", "minimum": 0 },
"maximum": { "type": "integer", "minimum": 0 }
},
"additionalProperties": false
},
"major_power_requirement": { "type": "string", "minLength": 1 },
"collision_requirement": { "type": "string", "minLength": 1 }
},
"additionalProperties": false
},
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"fixture_id",
"status",
"timeline_lane",
"story_type",
"primary_subjects",
"secondary_subjects",
"collision_axes",
"tonal_modes",
"training_targets",
"training_usability",
"artifacts",
"review",
"economy_hooks",
"open_lore_gaps",
"notes"
],
"properties": {
"fixture_id": { "type": "string", "minLength": 1 },
"status": {
"enum": ["planned", "draft", "accepted_as_draft", "accepted", "needs_revision", "rejected", "superseded"]
},
"timeline_lane": {
"enum": ["historical_grounded", "transition_grounded", "future_branch"]
},
"canon_status": {
"enum": ["single_history", "branch_local", "promoted_branch", "template", "draft"]
},
"story_type": {
"enum": [
"founding_era_story",
"day_in_the_life_story",
"flashpoint_story",
"movement_story",
"future_branch_story",
"trade_life_story"
]
},
"era": { "type": "string" },
"location": { "type": "string" },
"flashpoint": { "type": "string" },
"primary_subjects": { "$ref": "#/$defs/nonemptyStringArray" },
"secondary_subjects": { "type": "array", "items": { "type": "string", "minLength": 1 } },
"collision_axes": { "$ref": "#/$defs/nonemptyStringArray" },
"tonal_modes": { "$ref": "#/$defs/nonemptyStringArray" },
"training_targets": { "$ref": "#/$defs/nonemptyStringArray" },
"training_usability": {
"type": "object",
"required": ["overall"],
"additionalProperties": {
"enum": [
"training_ready",
"reference_only",
"not_training_data"
]
}
},
"artifacts": {
"type": "object",
"additionalProperties": { "type": "string", "minLength": 1 }
},
"review": {
"type": "object",
"additionalProperties": {
"enum": ["not_run", "accepted", "accepted_as_draft", "needs_revision", "rejected", "blocked"]
}
},
"economy_hooks": { "type": "array", "items": { "type": "string", "minLength": 1 } },
"open_lore_gaps": { "type": "array", "items": { "type": "string", "minLength": 1 } },
"notes": { "type": "string" }
},
"additionalProperties": false
}
}
},
"additionalProperties": false,
"$defs": {
"nonemptyStringArray": {
"type": "array",
"minItems": 1,
"items": { "type": "string", "minLength": 1 }
}
}
}