{
  "uid": "cogitave.learn.work-the-request-lifecycle.the-definition-of-done",
  "kind": "moduleUnit",
  "href": "/modules/work-the-request-lifecycle/the-definition-of-done/",
  "title": "The Definition of Done",
  "summary": "",
  "type": null,
  "products": [],
  "roles": [],
  "levels": [],
  "subjects": [],
  "headings": [
    "What DoD == 100% means",
    "Two gates, not one",
    "Closing the loop"
  ],
  "source": "\"Worked on\" is not \"done.\" Stage 6 (review) settles the difference with a\nmachine-checkable gate: the **Definition of Done**, the operational form of the\nfloor's own \"Definition of done.\" A Request advances `review -> done` only when\n**DoD == 100%** *and* a **CODEOWNER approves**. The canonical checklist is\n[`definition-of-done.md`](../../../../agents/lifecycle/definition-of-done.md).\n\n## What DoD == 100% means\n\nThe DoD is **scoped by request type**. Every Request runs the **Core** items;\nclassification flags add **conditional** items on top:\n\n- **Core (every Request)** - code review complete, tests green, evals green for\n  any agent-behavior change, the `docs-required` gate satisfied, signed\n  Conventional Commits, English only, least privilege honored, no unapproved\n  mutation, no secrets, links complete, evidence recorded.\n- **Conditional (added by flags)** - `impact.breaking` adds migration notes;\n  `impact.security` adds a threat model; `type: deps` adds a dependency review; a\n  design-class change requires its RFC/ADR already `Accepted`.\n\nEach item is `pass`, `fail`, `n/a`, or `waived`. **DoD == 100%** means no item is\n`fail`, every applicable item is `pass`, and every waiver is recorded.\n\n> [!IMPORTANT]\n> A waiver requires `{ approver, reason }` and is valid **only for conditional\n> items**. **Core items cannot be waived** - there is no rationale that excuses\n> skipping code review or signed commits.\n\n## Two gates, not one\n\nThe DoD score is the **machine** gate. The CODEOWNER approval is a **separate\nhuman** gate, computed independently. Both are required - this is separation of\nduties: propose is not approve.\n\nThe `get_dod` tool returns the checklist as data, so the gate is queryable rather\nthan a matter of opinion. Its `result` is `done` only when **no item fails, every\napplicable item passes or is validly waived, and `codeownerApproval.approved` is\ntrue**. A perfect automated score with no human approval is *not* done.\n\n## Closing the loop\n\nThe final stage (done / doc-update) closes it: draft the Keep a Changelog entry\nfrom the Conventional commits, sync `docs/`, reindex the UID graph, and write a\n**completion-evidence token** to Core. Only when doc-drift is clear and that\nevidence is recorded does the Request reach `done`.\n\n> [!TIP]\n> Before you call anything finished, ask the three questions this unit answers:\n> is every applicable DoD item passing (no fails, waivers recorded), did a\n> CODEOWNER approve, and is the completion evidence written? If any answer is no,\n> it is worked on - not done.\n",
  "partOf": "cogitave.learn.work-the-request-lifecycle",
  "durationInMinutes": 6,
  "quiz": null
}