Skip to content

The repository's AI layer is one directory whose manifest names every section, readable without the tool

Everything Majordomus knows about a repository lives under .ai/: .ai/manifest.yaml names the schema and every section of the layer, .ai/repo/ holds the tracked canonical context (policy, profiles, rules, prompts, workflows, knowledge, the project model) and .ai/local/ holds this checkout's own state. A person or another tool can read the layer with nothing but a file browser, because the manifest says what each directory is and .ai/README.md says how to read it.

declared statusdeclared status: guaranteed Declared deterministic and blocking, implemented, and naming the behavioural test that is to prove it. Whether a recorded run supports it is the evidence verdict, shown beside it.

recorded evidencerecorded evidence: not run Declared guaranteed, and not supported by a recorded run: the test is named, and no passing run of the current inputs is recorded. how evidence is recorded

init seeds .ai/ from the skeleton and nothing else; no hook, no shell file, no tool installation. doctor fails on a section the manifest names that is absent, and on a manifest key nothing reads.

What it means

Everything Majordomus knows about a repository lives under .ai/: .ai/manifest.yaml names the schema and every section of the layer, .ai/repo/ holds the tracked canonical context (policy, profiles, rules, prompts, workflows, knowledge, the project model) and .ai/local/ holds this checkout's own state. A person or another tool can read the layer with nothing but a file browser, because the manifest says what each directory is and .ai/README.md says how to read it.

How it works

lib/init.sh copies the layer from share/skeleton/ai/ and seeds the vendored rule package; it creates nothing outside .ai/ except one ignore line in .gitignore, and it installs no hook, no shell file and no copy of the tool. lib/common.sh resolves every path the commands read or write from the manifest (mj_resolve_layout), so a section the manifest does not name is not a section. doctor fails on a section the manifest names that is absent, on a manifest key nothing reads, and on anything under .ai/local/ that is tracked.

How to see it

majordomus init
cat .ai/manifest.yaml            # schema: ai-repository/v1, then one line per section
rm -r .ai/repo/workflows
majordomus doctor                # FAIL layout .ai/repo/workflows — named by the manifest as section 'workflows' but absent

What it does not cover

The manifest names sections, not their contents: a rule file that does not parse or a profile with an unknown key is caught by the check that reads that file, not by the layout check. Nothing here says whether the context in the layer is good, only that it is where the manifest says it is.

Why it exists

The alternative is a tool whose data can be found only by running the tool. Then every other tool, and every person without the executable, is locked out of the repository's own operating context, and the layer cannot outlive the tool that wrote it. test/cases/01_init.sh proves the fresh layout file by file, and test/cases/65_tool_root_independence.sh proves the layer is the same whichever copy of the tool reads it.

Detail rendered from docs/claims/ai-layer-manifest.md.

From the statement to the proof

  1. 1 · the public statement

    The repository's AI layer is one directory whose manifest names every section, readable without the tool

    Made on Context, Layer.

  2. 2 · the canonical claim

    ai-layer-manifestdeclared status: guaranteed in docs/CLAIMS.yaml

    Defined in read it on this site · docs/SCHEMAS.md

  3. 3 · the implementation

    lib/init.sh · majordomus init

  4. 4 · the test and the scenarios

    Test: test/cases/01_init.sh

    Executed in Trace a change to the context documents it affects, Decide what belongs in the AI context, as data, Move a repository from the pre-.ai layout to the layer.

  5. 5 · the recorded runs

    recorded evidence: not run how evidence is recorded

Verify it yourself

The test runs in a disposable temporary repository and asserts the behaviour, not a string in the source.

from a clone of the repository
bash test/run.sh 01_init

Where this claim is used

Related claims same implementation

The moments this answers

Searches the titles and descriptions of every page this site publishes.