I2872 — The skeleton a new repository receives is derived from the layout declaration
init seeds a new repository from I2870's declaration instead of lib/init.sh's hand-written list of files, and a derive-check proves share/skeleton's manifest and directory contracts agree with the declaration, so the skeleton cannot drift from the layer it seeds.
BLOCKED wave 2 · p0 · implementation profile · parallel safe
Blocked. This issue cannot start until I2870 is done. The status is derived from that, not declared.
Objective
init seeds a new repository from I2870's declaration instead of lib/init.sh's hand-written list of files, and a derive-check proves share/skeleton's manifest and directory contracts agree with the declaration, so the skeleton cannot drift from the layer it seeds.
Why
The third slice of I1102. On 2026-10-21 share/skeleton was found hand-copied by lib/init.sh, a second enumeration of the layout, and already drifted: its manifest lacks the `releases` section .ai/manifest.yaml has.
Current state
share/skeleton is 41 hand-written files; lib/init.sh copies them through a hard-coded list and creates the local directories itself; no generator or check covers it.
Desired state
The skeleton is derived from the declaration, and a check fails when they disagree.
Scope
- share/skeleton
- lib/init.sh
- apps/majordomus-cli/src
- scripts
- .ai/repo/project/issues/I2872.yaml
Out of scope
- Adopting an existing repository (the adopter milestones)
Dependencies
What waits on this
Acceptance criteria
- init's seeded tree is derived from the declaration, not from a second list
- A check fails when share/skeleton and the declaration disagree; the skeleton's manifest carries `releases`
Validation
- cargo test --workspace --all-features
- scripts/derive-check
Evidence required
- skeleton_derived
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I2872.yaml. Read it back with majordomus plan show I2872.