Skip to content

intent-planning — The plan of an intent is held to it before execution

An issue names the intent criteria it serves; coverage of every criterion is derived from the plan and refused when a criterion has no work or work has no purpose. The gap a worker observed and the critique of the plan are typed records validated against the intent and the plan, and work does not start on an intent whose plan was never critiqued or has an open blocking finding.

BLOCKED 0 of 2 issues done

ready
0
blocked
2
active
0
verify
0
done
0
cancelled
0

Problem

An intent (ADR 0070) names its milestones and the evidence that settles each criterion, but nothing relates a criterion to the work meant to make it true. An intent can name a milestone whose issues address two of its four criteria and nothing says the other two have no work until verification finds them unmet. Planning starts from a prompt: what a worker observed was missing, and what a review of the plan overlooked, live in a terminal scroll and are gone when the session ends.

Outcome

An issue names the intent criteria it serves; coverage of every criterion is derived from the plan and refused when a criterion has no work or work has no purpose. The gap a worker observed and the critique of the plan are typed records validated against the intent and the plan, and work does not start on an intent whose plan was never critiqued or has an open blocking finding.

Current state

Issues carry objective, why and acceptance criteria but no link to an intent criterion. No gap or critique record kind exists. plan validate checks dependencies, waves, cycles and scope overlap within the plan only.

Desired state

intent validate reports the coverage of every criterion, the purpose of every issue, and the findings of the gap and critique records, and exits non-zero when the plan does not carry the intent.

Scope

  • apps/majordomus-cli/src/intent_plan.rs
  • apps/majordomus-cli/src/intent_review.rs
  • apps/majordomus-cli/src/plan.rs
  • apps/majordomus-cli/tests
  • share/schemas/majordomus
  • share/kinds.yaml
  • .ai/repo/project
  • .ai/repo/adrs
  • test/cases

Out of scope

  • Deriving issues from a gap automatically
  • Judging whether a criterion is met

Acceptance criteria

  • Every criterion of every live intent has derived coverage, and an uncovered one fails intent validate
  • Every issue has a derived origin, and one under an intent's milestone that serves nothing fails intent validate
  • Gap and critique records are typed kinds validated against the intent and the plan
  • Execution on an intent whose plan has no critique, or an open blocking finding, fails intent validate

Validation

  • majordomus intent validate
  • cargo test --test intent_plan
  • bash test/run.sh 386_a_plan_is_held_to_its_intent

Risks

  • Refusing an uncovered criterion makes an intent declared ahead of its issues invalid; the intent and the issues that serve it must land together.

Issues

Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.

issuestatuswavedepends ontitle
I1901 BLOCKED 1 I1900 An issue names the intent criterion it serves, and coverage is derived
I1902 BLOCKED 2 I1901 The gap and the critique of an intent are typed records the plan is held to

The graph

intent-planning dependency graphfrom .ai/repo/project
flowchart LR
    I1901["I1901<br/>An issue names the intent criterion it serves, and coverage is derived"]:::blocked
    I1902["I1902<br/>The gap and the critique of an intent are typed records the plan is held to"]:::blocked
    I1901 --> I1902
    classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
    classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
    classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
    classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
    classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
    classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px

Canonical record: .ai/repo/project/milestones/intent-planning.yaml. Read it back with majordomus plan show intent-planning.

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