I2873 — The manifest schema is generated from typed sections
Manifest.sections becomes a typed struct, one documented optional path per section the layer knows, and share/schemas/majordomus/manifest/manifest.v1.schema.json is generated from the manifest's Rust types by majordomus generate (as the graph schema is), so the section list, its descriptions and the closed shape live in one place and the hand-written schema goes away.
BLOKOVÁNO vlna 2 · p1 · profil implementation · bezpečné paralelně
Blocked. This issue cannot start until I2870, I1980 are done. The status is derived from that, not declared.
Cíl
Manifest.sections becomes a typed struct, one documented optional path per section the layer knows, and share/schemas/majordomus/manifest/manifest.v1.schema.json is generated from the manifest's Rust types by majordomus generate (as the graph schema is), so the section list, its descriptions and the closed shape live in one place and the hand-written schema goes away.
Proč
Split out of I2870 on 2026-10-21. The hand-written manifest schema closes `sections` with a fixed list of names and descriptions, while the Rust type reads them as an open map: generating the schema from today's types would quietly accept any section name on every App::load, a validation regression. Typing the sections first keeps the closed shape and makes the schema a projection (ADR 0004).
Aktuální stav
manifest.v1.schema.json is hand-written; Manifest.sections is a BTreeMap<String, String>; the two describe the section list twice.
Cílový stav
The sections are typed once; the schema is generated from them and generate --check holds it.
Rozsah
- apps/majordomus-cli/src/repository.rs
- apps/majordomus-cli/src/generate.rs
- share/schemas/majordomus/manifest
- .ai/repo/project/issues/I2873.yaml
Mimo rozsah
- New sections or layout fields (I2870, I1980)
Závislosti
- I2870READY The layer's layout is declared as typed data: what each half holds, excludes, and the lifecycle of its contents
- I1980PŘIPRAVENO Vrstva uvádí verzi nástroje, pro kterou byla napsána, a doctor rozliší posun verzí od vad
Co na tom čeká
Kritéria přijetí
- Manifest.sections is a typed struct and every reader of a section reads its field
- manifest.v1.schema.json is generated from the Rust types, keeps the closed section list and its descriptions, and generate --check holds it
Validace
- cargo test --workspace --all-features
- majordomus generate --check
Požadované důkazy
- manifest_schema_generated
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Canonical record: .ai/repo/project/issues/I2873.yaml. Read it back with majordomus plan show I2873.