I0829 — Performance doctrine as project rules
Add project rules: derived state is computed once per state version, a command's hot path does not re-parse canonical files, every public command is benchmarkable from the registry, cacheability never changes observable behaviour, and performance claims need benchmark evidence.
DONE wave 0 · p0 · implementation profile · runs alone
Part of M004 — Performance is executable evidence, and the hot path does no canonical work twice.
Objective
Add project rules: derived state is computed once per state version, a command's hot path does not re-parse canonical files, every public command is benchmarkable from the registry, cacheability never changes observable behaviour, and performance claims need benchmark evidence.
Why
A rule that lives only in a document is not enforced; project rules are loaded by every worker and named by doctor.
Current state
No performance rule exists.
Desired state
Five rules under .ai/repo/rules/project, advisory where a reviewer decides and enforced by the cases and counters where a case exists, each naming its case.
Scope
- .ai/repo/rules/project
- docs/DOCTRINE.md
Out of scope
- Provider-specific copies
Dependencies
None. This issue is a root of the graph.
What waits on this
Acceptance criteria
- rules list shows the five rules resolving
- Each rule names the case or the review that proves it
Validation
- bin/majordomus rules list
- bash test/run.sh 67_rule_dag
Evidence required
- docs_integrated
Evidence
| covers | type | command | result | at commit |
|---|---|---|---|---|
| docs_integrated | test | bin/majordomus rules list | five advisory project rules resolve with the vendored baseline: project.derived-once (case 78 when it exists, else review with MJ_TIMING counters), project.hot-path-reads-once (case 78), project.benchmarkable-commands (case 79), project.cache-is-invisible (the equivalence case once a cache exists; none exists), project.performance-evidence (review of the commit message against MJ_TIMING and of the baseline diff against bench --check); their depends_on resolve to project.derived-files-regenerated@1, project.no-claim-without-test@1 and project.no-counts-in-prose@1; doctor reports the rule set resolving in one deterministic order and cases 67 and 68 pass | next |
Risk
project.no-new-nouns: the rules use the existing vocabulary (phase, counter, cache, baseline) and add no concept.
Timeline
- started
- 2026-09-05T03:47:33Z
- verified
- 2026-09-05T03:47:33Z
- completed
- 2026-09-05T03:47:33Z
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/I0829.yaml. Read it back with majordomus plan show I0829.