Skip to content

a-finish-reads-the-criteria-its-work-serves — A finish reads what its work serves

The completion policy asks the intent engine what stands for the work a task named, refuses completed while a served criterion is unmet or a guard is violated where the policy says completed means complete, and decides nothing about any intent.

BLOCKED 0 of 1 issues done

ready
0
blocked
1
active
0
verify
0
done
0
cancelled
0

Problem

A task now starts bound to the issue and the intent it serves, and the intent engine says which criteria are met and which guards are violated. Finish asks neither. A worker can finish completed while the criterion the work exists for has no evidence.

Outcome

The completion policy asks the intent engine what stands for the work a task named, refuses completed while a served criterion is unmet or a guard is violated where the policy says completed means complete, and decides nothing about any intent.

Current state

The completion policy and finish semantics are pull request 821; the binding, the opposition, the verdict with guards and evaluations are the intent stack. The two meet in no line of code. Revived on 2026-10-18 from the rescue of 2026-10-09, because the milestone never landed; its dependency on intent-satisfaction was dropped, because no milestone of that id exists on master. Re-read on 2026-10-18 for the IDD plan, against master of 2026-10-17: ADR 0107 and case 895 keep completion and intent satisfaction apart; the #821 completion policy exists only on rescue refs. It revives milestone finish-reads-what-its-work-serves of origin/rescue/d1/feature/a-finish-reads-what-its-work-serves (2026-10-09) under its own id, because that record's order, its dependency on a milestone master does not have, and the ADR number it names do not hold on master.

Desired state

An ADR records the decision and its measurement, under a number allocated above the high-water mark when it is written (0115 on the unlanded rescue, which master never received); a policy key says whether an owed answer refuses; two questions of the completion policy are answered from intents.binding; the documents and the claim say what finish asks.

Scope

  • apps/majordomus-cli/src/gates
  • apps/majordomus-cli/src/capability/builtin/gates.rs
  • apps/majordomus-cli/tests
  • share/completion.yaml
  • lib/gates.sh
  • test/cases
  • .ai/repo
  • docs
  • site

Out of scope

  • Any change to how a criterion, a guard or a verdict is derived
  • Recording evidence at finish

Acceptance criteria

  • Where the policy requires it, finish with the outcome completed is refused while a served required criterion is unmet or a guard is violated
  • A partial finish is always available and the refusal says so
  • No intent record, stage or verdict is written by any finish

Validation

  • bash test/run.sh 966_a_finish_reads_what_its_work_serves
  • bash test/run.sh 895_a_finished_task_does_not_satisfy_an_intent

Risks

  • Evidence is current only for a recorded passing run at a commit in history. Measured: none of the 22 serving issues here has it for every served criterion, so the policy is advisory until recording a run is part of how work is finished.
  • Several issues can serve one criterion, and each is held to it until the last.
  • A criterion of a kind the ledger cannot derive reads unknown and keeps completed out of reach for the issues serving it.

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
I3259 BLOCKED 1 I3255 Where the policy says completed means complete, finish refuses completed while a criterion the task serves is unmet, and writes no intent state

The graph

a-finish-reads-the-criteria-its-work-serves dependency graphfrom .ai/repo/project
flowchart LR
    I3259["I3259<br/>Where the policy says completed means complete, finish refuses completed while a criterion the task serves is unmet, and writes no intent state"]:::blocked
    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/a-finish-reads-the-criteria-its-work-serves.yaml. Read it back with majordomus plan show a-finish-reads-the-criteria-its-work-serves.

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