Skip to content

I1947 — Every feature reaches a test, and every use case has a feature

Give every active use case an owning feature, and give the cockpit and deployments features a claim naming their own tests, so that a homepage panel routed to a use case reaches a feature and every feature reaches a test through the subject index (ADR 0087 decision 9).

DONE wave 0 · p1 · implementation profile · parallel safe

Part of test-evidence — Every verifiable claim and widget resolves to revision-bound test evidence, on every surface.

Objective

Give every active use case an owning feature, and give the cockpit and deployments features a claim naming their own tests, so that a homepage panel routed to a use case reaches a feature and every feature reaches a test through the subject index (ADR 0087 decision 9).

Why

The subject index derives subjects from existing declarations. A use case no feature names is a subject the index cannot place under a feature, and a feature with no claim reaches tests only through its rules. Nothing checks use-case ownership today.

Current state

Some active use cases are named by no feature's use_cases list: `git grep <use-case-id> -- .ai/repo/features` is empty for each of them. .ai/repo/features/cockpit.md and .ai/repo/features/deployments.md carry no claims line.

Desired state

Every active use case is named by at least one feature; the cockpit and deployments features each carry a claim whose test names it back; and a case fails, naming each one, when an active use case has no owning feature.

Scope

  • .ai/repo/features/finish-contract.md
  • .ai/repo/features/commit.md
  • .ai/repo/features/install.md
  • .ai/repo/features/continuity.md
  • .ai/repo/features/cockpit.md
  • .ai/repo/features/deployments.md
  • apps/majordomus-cli/tests/cockpit.rs
  • test/cases/84_deployment_contract.sh
  • test/cases/503_every_use_case_has_a_feature.sh
  • docs/CLAIMS.yaml
  • docs/claims

Out of scope

  • Editing any use case file
  • .ai/repo/features/finish-contract.md.tmp
  • docs/CLAIMS.yaml beyond the two rows this slice appends

Dependencies

None. This issue is a root of the graph.

What waits on this

Acceptance criteria

  • Every use case whose status is active is named by at least one feature, and the case fails naming each one that is not
  • The case fails when any list it reads is empty or a command in its pipeline fails
  • The cockpit and deployments features carry a claim each, and each claim's test names the claim id
  • bin/majordomus-cli product validate and bin/majordomus usecase validate pass

Validation

  • bash test/run.sh 503_every_use_case_has_a_feature
  • bin/majordomus-cli product validate
  • bin/majordomus usecase validate
  • scripts/ci/claim-proof-check --strict

Evidence required

  • every_use_case_has_a_feature
  • every_feature_reaches_a_test

Evidence

coverstypecommandresultat commit
every_use_case_has_a_featuretestbash test/run.sh 503_every_use_case_has_a_featureok at 4090b2b8ae: no active use case of this repository is outside the features' use_cases, and the fixture's unowned one is named; product validate and usecase validate exit 04090b2b
every_feature_reaches_a_testtestscripts/ci/claim-proof-check --strictexit 0 at 4090b2b8ae: 0 of 217 guaranteed claims name a test that does not name the claim back, the cockpit and deployments claims among them4090b2b

Timeline

started
2026-10-08T10:49:57Z
verified
2026-10-08T10:50:33Z
completed
2026-10-08T10:50:38Z

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

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