I2870 — The layer's layout is declared as typed data: what each half holds, excludes, and the lifecycle of its contents
A versioned layout declaration, defined in a .proto beside context/v1 and projected to JSON Schema by majordomus generate, states for `.ai/repo` and `.ai/local` and each of their directories what it holds, what it must never hold, and the lifecycle of its contents in I1101's vocabulary (canonical, derived, generated, cache, runtime, accidental). The declaration describes the tree as it is today. The local half, which carries no tracked contract of its own, is declared in the manifest's `local:` block; its Rust type and the hand-written manifest schema are held in step by a test, until I2873 generates that schema from typed sections.
PŘIPRAVENO vlna 1 · p0 · profil implementation · bezpečné paralelně
Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I2870 bude přijato.
Cíl
A versioned layout declaration, defined in a .proto beside context/v1 and projected to JSON Schema by majordomus generate, states for `.ai/repo` and `.ai/local` and each of their directories what it holds, what it must never hold, and the lifecycle of its contents in I1101's vocabulary (canonical, derived, generated, cache, runtime, accidental). The declaration describes the tree as it is today. The local half, which carries no tracked contract of its own, is declared in the manifest's `local:` block; its Rust type and the hand-written manifest schema are held in step by a test, until I2873 generates that schema from typed sections.
Proč
The first slice of I1102. On 2026-10-21 a survey of master 905159df7cc found the boundary between authored knowledge and control-plane state stated only in prose (.ai/README.md) and in the context documents' Purpose sections; no typed field says what a directory may hold, so nothing can check it.
Aktuální stav
context/v1 declares a directory's status, scope and children but not its holds, excludes or lifecycle; share/schemas/majordomus/manifest/manifest.v1.schema.json is hand-written while the manifest's Rust types derive only Deserialize.
Cílový stav
One declaration, typed and versioned, names the contents of every directory of both halves; its schema is generated.
Rozsah
- share/schemas
- apps/majordomus-cli/src/repository.rs
- apps/majordomus-cli/src/proto
- .ai/repo/project/issues/I2870.yaml
Mimo rozsah
- Where control-plane state lives in the end (.ai/local or .majordomus/): the owner's open question on I1102
- Refusing a misplaced file (I2871) and deriving the skeleton (I2872)
- Generating the manifest schema from typed sections (I2873): today's open sections map would loosen it
Závislosti
Co na tom čeká
- I1102BLOCKED The two namespaces are a typed contract, not a habit
- I2871BLOCKED A file in the half whose contract excludes it is refused, naming the path and the contract
- I2872BLOCKED The skeleton a new repository receives is derived from the layout declaration
- I2873BLOCKED The manifest schema is generated from typed sections
Kritéria přijetí
- A layout declaration names, for .ai/repo, .ai/local and each of their directories, what it holds, what it excludes and its lifecycle, typed and versioned
- The context schema is generated from its proto and generate --check holds it; a test holds the manifest's Rust type and its hand-written schema in step for the new local fields
Validace
- cargo test --workspace --all-features
- majordomus generate --check
Požadované důkazy
- layout_declared
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/I2870.yaml. Read it back with majordomus plan show I2870.