Skip to content

I2871 — A file in the half whose contract excludes it is refused, naming the path and the contract

A check reads I2870's declaration, walks the layer and refuses every path that a contract excludes — control-plane state under .ai/repo, authored knowledge under .ai/local — with '<path> violates <contract>'. doctor reports it and a gate runs it; update refuses a projection target outside the repository, the mj_norm_path guard I1101 found missing.

BLOCKED wave 2 · p0 · implementation profile · parallel safe

Part of two-folder-integration — A repository that adopts Majordomus gains two directories and two lines, and can give them back.

Blocked. This issue cannot start until I2870 is done. The status is derived from that, not declared.

Objective

A check reads I2870's declaration, walks the layer and refuses every path that a contract excludes — control-plane state under .ai/repo, authored knowledge under .ai/local — with '<path> violates <contract>'. doctor reports it and a gate runs it; update refuses a projection target outside the repository, the mj_norm_path guard I1101 found missing.

Why

The second slice of I1102. On 2026-10-21 nothing refused a cache or index written under .ai/repo, or a copy of a rule under .ai/local: doctor checks only that .ai/local is untracked and that manifest sections exist.

Current state

doctor checks .ai/local is git-ignored and nothing in it is tracked; scripts/ci/local-never-published keeps local out of the site; nothing reads a contract to judge a path.

Desired state

A misplaced file fails a check that names the path and the contract it violates.

Scope

  • apps/majordomus-cli/src
  • share/kinds.yaml
  • share/skeleton/ai/repo/README.md
  • lib/doctor.sh
  • lib/update.sh
  • test/cases/3405_a_misplaced_artifact_is_refused.sh
  • .ai/repo/project/issues/I2871.yaml

Out of scope

  • Moving content between halves (I1109 and the migration issues)

Dependencies

What waits on this

Acceptance criteria

  • A file a contract excludes is refused, naming the path and the contract; a negative case places one in each half
  • update writes no path outside the repository root (the mj_norm_path guard)

Validation

  • cargo test --workspace --all-features
  • bin/majordomus doctor

Evidence required

  • 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.

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/I2871.yaml. Read it back with majordomus plan show I2871.

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