Skip to content

Milestones and issues are canonical repository files, and a key nobody reads is an error

A milestone is one file under .ai/repo/project/milestones/, an issue is one file under .ai/repo/project/issues/, and both are hand-written YAML in the same restricted subset the policy uses. Every key in them is checked against an allowlist in share/allow/. A key that no code reads is a failure of majordomus plan validate and of majordomus doctor, not a comment.

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

The same allowlist rule the policy and the profiles live under. The filename is the id; a record that disagrees with its own filename is refused rather than reconciled.

What it means

A milestone is one file under .ai/repo/project/milestones/, an issue is one file under .ai/repo/project/issues/, and both are hand-written YAML in the same restricted subset the policy uses. Every key in them is checked against an allowlist in share/allow/. A key that no code reads is a failure of majordomus plan validate and of majordomus doctor, not a comment.

How it works

mj_project_load flattens each file, refuses one whose declared id disagrees with its filename, and refuses two files claiming the same id. mj_project_unknown_keys compares every flattened key against share/allow/project.txt, share/allow/milestone.txt or share/allow/issue.txt. The rule is the one already applied to policy.yaml and to every profile, so there is one answer in the repository to "what happens to a field nobody reads".

How to see it

printf 'estimate: 3d\n' >> .ai/repo/project/issues/I0001.yaml
majordomus plan validate
# FAIL schema      I0001 — unknown keys: estimate  [reproduce: majordomus plan validate]

What it does not cover

The allowlist proves that a key is read by something. It does not prove that the value is meaningful: a priority of p9 parses, sorts last, and is nobody's error.

Why it exists

Every field that exists but is never read eventually appears on the website as a fact. The cheapest moment to refuse it is the moment it is written.

Detail rendered from docs/claims/project-schema.md.

From the statement to the proof

  1. 1 · the public statement

    Milestones and issues are canonical repository files, and a key nobody reads is an error

    Made on Planning, Plan.

  2. 2 · the canonical claim

    project-schemadeclared status: guaranteed in docs/CLAIMS.yaml

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

  3. 3 · the implementation

    lib/project.sh

  4. 4 · the test and the scenarios

    Test: test/cases/40_project_model.sh

    Executed in Complete an issue only when its evidence exists, Keep the plan as milestones and issues the tool can validate.

  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 40_project_model

Where this claim is used

The moments this answers

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