Document the schema, value types, and render semantics so a Macroplan .toml can be produced and consumed outside this app's renderer. Ships a JSON Schema (served from public/ for editor use) and a reference file.
109 lines
3.8 KiB
JSON
109 lines
3.8 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://macroplan.apoena.dev/macroplan.schema.json",
|
|
"title": "Macroplan",
|
|
"description": "A week-by-week delivery plan. Portable TOML format v1 — see docs/format.md. Validates the TOML-decoded structure; dates are TOML date literals, surfaced to JSON Schema as date-formatted strings.",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"macroplan_version": {
|
|
"description": "Format version. Omit for the current version (1). A newer version must be rejected by a consumer that only understands 1.",
|
|
"type": "integer",
|
|
"const": 1
|
|
},
|
|
"title": {
|
|
"description": "Display name of the plan. Defaults to \"Untitled Macroplan\" when absent.",
|
|
"type": "string"
|
|
},
|
|
"start": {
|
|
"description": "Optional left edge of the plan's week span. Only extends the span; never clips a feature. Snapped to its ISO-week Monday.",
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"end": {
|
|
"description": "Optional right edge of the plan's week span. Only extends the span; never clips a feature. Snapped to its ISO-week Monday.",
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"feature": {
|
|
"description": "The features of the plan. Written as [[feature]] blocks. Names must be unique.",
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/feature" }
|
|
},
|
|
"milestone": {
|
|
"description": "Dated checkpoints. Written as [[milestone]] blocks.",
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/milestone" }
|
|
}
|
|
},
|
|
"$defs": {
|
|
"date": {
|
|
"description": "A calendar date (TOML date literal, e.g. 2026-06-15). Snapped to its ISO-week Monday.",
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"feature": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["name", "start", "original"],
|
|
"properties": {
|
|
"name": {
|
|
"description": "Identifies the feature; the join key for a milestone's `requires`. Must be unique within the plan.",
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"start": {
|
|
"description": "The week work began.",
|
|
"$ref": "#/$defs/date"
|
|
},
|
|
"original": {
|
|
"description": "The Original Estimate — the immovable baseline all lateness is judged against (ADR-0001).",
|
|
"$ref": "#/$defs/date"
|
|
},
|
|
"reestimates": {
|
|
"description": "Each later week the estimate slipped to. Order-independent.",
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/date" }
|
|
},
|
|
"delivered": {
|
|
"description": "The week the feature actually shipped. Absent means still in flight.",
|
|
"$ref": "#/$defs/date"
|
|
},
|
|
"learning": {
|
|
"description": "A post-delivery takeaway.",
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"description": "In-flight confidence. Meaningful only while undelivered. Lateness is derived, never authored.",
|
|
"enum": ["on-track", "at-risk", "off-track"]
|
|
},
|
|
"note": {
|
|
"description": "A short note accompanying `status`.",
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"milestone": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["name", "week"],
|
|
"properties": {
|
|
"name": {
|
|
"description": "Display name of the milestone.",
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"week": {
|
|
"description": "When the milestone falls due.",
|
|
"$ref": "#/$defs/date"
|
|
},
|
|
"requires": {
|
|
"description": "Feature names that must be delivered on/before `week` to meet the milestone.",
|
|
"type": "array",
|
|
"items": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|