I1102 — The two namespaces are a typed contract, not a habit
Declare the canonical layout of `.ai/` and `.majordomus/` as typed, versioned data — what each namespace holds, what it must never hold, and which lifecycle each directory's contents carry — so that the boundary can be checked rather than remembered.
BLOCKED wave 1 · p0 · deep-work profile · parallel safe
Blocked. This issue cannot start until I1101 is done. The status is derived from that, not declared.
Objective
Declare the canonical layout of `.ai/` and `.majordomus/` as typed, versioned data — what each namespace holds, what it must never hold, and which lifecycle each directory's contents carry — so that the boundary can be checked rather than remembered.
Why
The boundary between portable knowledge and control-plane mechanics is the whole architecture. Stated only in prose it survives until the first subsystem finds it convenient to write an index next to a rule.
Current state
Both namespaces exist and are populated. Nothing declares what belongs in which, and nothing refuses a control-plane artifact written under `.ai/` or a copy of authored knowledge written under `.majordomus/`.
Desired state
The layout is a schema-backed declaration; a check reads it and refuses a path that contradicts it.
Scope
- share/schemas
- share/skeleton
Out of scope
- A configuration file restating what a convention already fixes
- Moving existing content; that is the migration issue
Dependencies
What waits on this
- I1103BLOCKED Whether a file is authored or derived is a field, not a naming convention
- I1104BLOCKED Both namespaces carry their contracts, all the way down
Acceptance criteria
- Each namespace declares what it holds, in typed and versioned form, generated from the canonical Rust types where generation is available
- `.ai/` is defined as portable semantic material that keeps its meaning without this tool and across providers, and `.majordomus/` as control-plane state that must never hold a second copy of it
- A check refuses an artifact placed in the namespace whose contract excludes it, and names both the path and the contract it violates
- The skeleton a new repository receives is derived from the same declaration rather than being a parallel copy of it
Validation
- cargo test --workspace --all-features
- bin/majordomus doctor
Evidence required
- layout_declared
- boundary_checked
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Risk
A layout schema can become a second description of the tree it describes. It declares intent and lifecycle; the tree remains what discovery finds.
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/I1102.yaml. Read it back with majordomus plan show I1102.