← Tutorial
Chapter 08

The Done panel

8. The Done panel

Done is what shipped, grouped by the iteration it shipped in. The bands are facts: once a story was accepted in week N, that's where it lives forever. agilemarkdown doesn't re-bin Done by current velocity or any other moving target.

8.1 What shows up

The Done panel filters every story where:

  1. status is accepted, and
  2. the accepted timestamp falls in a prior iteration (not the current one).

Stories accepted in the current iteration stay in the Backlog band above the in-flight line. The moment Monday's tick advances the current iteration number, those accepted stories silently roll into Done without any batch job or archive step; the row and the file are the same, but the filter result is different because now advanced.

$ am show done
Done (stories)   18 stories

── Iteration 1376  Mon May 11 ──
   1. ★  Wave once at the moon         accepted    1p
   2. ★  Address the very first letter accepted    3p
   3. ★  Hum a small tune over the seed accepted   2p

── Iteration 1375  Mon May 04 ──
   4. ★  Water the seed at exactly dawn accepted    3p
   5. ★  Toss the last crumb            accepted    1p
   6. ★  Speak to the seed softly       accepted    1p

   ... and so on for prior iterations

done_list returns the same rows, newest first, with the accepted ISO timestamp on each. The client groups them by iteration in the UI; the API just hands you the list.

Full envelope
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "done_list",
    "arguments": { "backlog": "stories" }
  }
}

Response: result.structuredContent.items is an array sorted descending by accepted timestamp. Each row has the full OrderRow shape, same one as priority_list, so a client can render a Done card identically to a priority card.

8.2 The Friday retro

am retro reads the same accepted-story timeline shown above and folds in this iteration's headline numbers: velocity, volatility, cycle time, rejection rate. Print it before the team sits down on Friday and there is a starting agenda. Anything the team wants to remember coming out of the conversation goes into .am/learnings.md via record-learning. The retro view prints those back under "Recent learnings", so the next Friday's retro starts by reading them.

There is no agilemarkdown surface for the retro itself, so the team can use a whiteboard, a markdown file, or anything else. agilemarkdown supplies the summary view (am retro) and remembers what comes out of the conversation in .am/learnings.md, both of which are plain files in the repo.

$ am retro
Retro summary

  velocity:        7 pts
  volatility:      22%
  cycle time:      21.2d (median)
  rejection rate:  0% (latest, target band 5-15%)
  accepted total:  21
  rejected total:  1

Three questions:
  1. What worked?
  2. What did not work?
  3. What changes for next iteration?

Recent learnings:
  - On the morning of 2026-05-07: yelling at the seedling
    did not help. We have agreed to try kindness instead.
  - On the afternoon of 2026-05-14: the cookies were better
    when shared. We will remember this.

$ am record-learning "Pointing the gnarly one first kept the rest honest."
- 2026-05-28: Pointing the gnarly one first kept the rest honest.

record_learning appends a dated bullet to .am/learnings.md and returns the line it wrote. There is no separate retro MCP tool; the summary is a human-facing CLI surface. Agents participate by recording what came out of the conversation.

Full envelope
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "record_learning",
    "arguments": {
      "note": "Pointing the gnarly one first kept the rest honest."
    }
  }
}

Response: result.structuredContent.entry is the dated line that was written; result.structuredContent.path is .am/learnings.md.

What just happened

Next: Find things three ways →