Skip to content

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

coverstypecommandresultat commit
docs_integratedtestbin/majordomus rules listfive 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 passnext

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.