Skip to content

post-mortem

Wrap up completed work. Council validates the implementation, then extract and process learnings. Triggers: "post-mortem", "wrap up", "close epic", "what did we learn".

Source: skills/post-mortem/SKILL.md


Purpose: Wrap up completed work — validate it shipped correctly, extract learnings, process the knowledge backlog, activate high-value insights, and retire stale knowledge.

Runtime note: Hook-driven closeout is runtime-dependent. Claude/OpenCode can wire Phase 2-5 maintenance through lifecycle hooks. Codex CLI v0.115.0+ supports native hooks (same behavior). For older Codex versions without hook surfaces, finish closeout with ao codex stop.

Six phases: 1. Council — Did we implement it correctly? 2. Extract — What did we learn? 3. Process Backlog — Score, deduplicate, and flag stale learnings 4. Activate — Promote high-value learnings to MEMORY.md and constraints 5. Retire — Archive stale and superseded learnings 6. Harvest — Surface next work for the flywheel


Quick Start

Bash
/post-mortem                    # wraps up recent work
/post-mortem epic-123           # wraps up specific epic
/post-mortem --quick "insight"  # quick-capture single learning (no council)
/post-mortem --process-only     # skip council+extraction, run Phase 3-5 on backlog
/post-mortem --skip-activate    # extract + process but don't write MEMORY.md
/post-mortem --deep recent      # thorough council review
/post-mortem --mixed epic-123   # cross-vendor (Claude + Codex)
/post-mortem --skip-checkpoint-policy epic-123  # skip ratchet chain validation

Codex Closeout

Codex CLI v0.115.0+ has native hooks and handles closeout automatically (no extra steps needed). For older Codex versions (hookless fallback), run these after the post-mortem workflow writes learnings and next work:

Bash
ao codex stop
ao codex status

ao codex stop uses the latest transcript or history fallback to queue/persist learnings and run close-loop maintenance without runtime hooks.


Flags

Flag Default Description
--quick "text" off Quick-capture a single learning directly to .agents/learnings/ without running a full post-mortem. Formerly handled by /retro --quick.
--process-only off Skip council and extraction (Phase 1-2). Run Phase 3-5 on the existing backlog only.
--skip-activate off Extract and process learnings but do not write to MEMORY.md (skip Phase 4 promotions).
--deep off 3 judges (default for post-mortem)
--mixed off Cross-vendor (Claude + Codex) judges
--explorers=N off Each judge spawns N explorers before judging
--debate off Two-round adversarial review
--skip-checkpoint-policy off Skip ratchet chain validation
--skip-sweep off Skip pre-council deep audit sweep

Quick Mode

Given /post-mortem --quick "insight text":

Quick Step 1: Generate Slug

Create a slug from the content: first meaningful words, lowercase, hyphens, max 50 chars.

Quick Step 2: Write Learning Directly

Write to: .agents/learnings/YYYY-MM-DD-quick-<slug>.md

Markdown
---
type: learning
source: post-mortem-quick
date: YYYY-MM-DD
maturity: provisional
utility: 0.5
---

# Learning: <Short Title>

**Category**: <auto-classify: debugging|architecture|process|testing|security>
**Confidence**: medium

## What We Learned

<user's insight text>

## Source

Quick capture via `/post-mortem --quick`

This skips the full pipeline — writes directly to learnings, no council or backlog processing.

Quick Step 3: Confirm

Text Only
Learned: <one-line summary>
Saved to: .agents/learnings/YYYY-MM-DD-quick-<slug>.md

For deeper reflection, use `/post-mortem` without --quick.

Done. Return immediately after confirmation.


Execution Steps

Pre-Flight Checks

Before proceeding, verify: 1. Git repo exists: git rev-parse --git-dir 2>/dev/null — if not, error: "Not in a git repository" 2. Work was done: git log --oneline -1 2>/dev/null — if empty, error: "No commits found. Run /implement first." 3. Epic context: If epic ID provided, verify it has closed children. If 0 closed children, error: "No completed work to review."

If --process-only: Skip Pre-Flight Checks through Step 3. Jump directly to Phase 3: Process Backlog.

Step 0.4: Load Reference Documents (MANDATORY)

Before Step 0.5 and Step 2.5, load required reference docs into context using the Read tool:

Text Only
REQUIRED_REFS=(
  "skills/post-mortem/references/checkpoint-policy.md"
  "skills/post-mortem/references/metadata-verification.md"
  "skills/post-mortem/references/closure-integrity-audit.md"
  "skills/post-mortem/references/four-surface-closure.md"
)

For each reference file, use the Read tool to load its content and hold it in context for use in later steps. Do NOT just test file existence with [ -f ] -- actually read the content so it is available when Steps 0.5 and 2.5 need it.

If a reference file does not exist (Read returns an error), log a warning and add it as a checkpoint warning in the council context. Proceed only if the missing reference is intentionally deferred.

Step 0.5: Checkpoint-Policy Preflight (MANDATORY)

Read references/checkpoint-policy.md for the full checkpoint-policy preflight procedure. It validates the ratchet chain, checks artifact availability, and runs idempotency checks. BLOCK on prior FAIL verdicts; WARN on everything else.

Step 1: Identify Completed Work and Record Timing

Record the post-mortem start time for cycle-time tracking:

Bash
PM_START=$(date +%s)

If epic/issue ID provided: Use it directly.

If no ID: Find recently completed work:

Bash
# Check for closed beads
bd list --status closed --since "7 days ago" 2>/dev/null | head -5

# Or check recent git activity
git log --oneline --since="7 days ago" | head -10

Step 1.5: RPI Session Metrics

Read .agents/rpi/rpi-state.json and extract session ID, phase, verdicts, and streak data. If absent or unparseable, skip silently. Prepend a tweetable summary to the report: > RPI streak: N consecutive days | Sessions: N | Last verdict: PASS/WARN/FAIL. See references/streak-tracking.md for extraction logic and fallback behavior.

Step 2: Load the Original Plan/Spec

Before invoking council, load the original plan for comparison:

  1. If epic/issue ID provided: bd show <id> to get the spec/description
  2. Search for plan doc: ls .agents/plans/ | grep <target-keyword>
  3. Check git log: git log --oneline | head -10 to find the relevant bead reference

If a plan is found, include it in the council packet's context.spec field:

JSON
{
  "spec": {
    "source": "bead na-0042",
    "content": "<the original plan/spec text>"
  }
}

Step 2.1: Load Compiled Prevention Context

Before council and retro synthesis, load compiled prevention outputs when they exist:

  • .agents/planning-rules/*.md
  • .agents/pre-mortem-checks/*.md

Use these compiled artifacts first, then fall back to .agents/findings/registry.jsonl only when compiled outputs are missing or incomplete. Carry matched finding IDs into the retro as Applied findings / Known risks applied context so post-mortem can judge whether the flywheel actually prevented rediscovery.

Step 2.2: Load Implementation Summary

Check for a crank-generated phase-2 summary:

Bash
PHASE2_SUMMARY=$(ls -t .agents/rpi/phase-2-summary-*-crank.md 2>/dev/null | head -1)
if [ -n "$PHASE2_SUMMARY" ]; then
    echo "Phase-2 summary found: $PHASE2_SUMMARY"
    # Read the summary with the Read tool for implementation context
fi

If available, use the phase-2 summary to understand what was implemented, how many waves ran, and which files were modified.

Step 2.3: Reconcile Plan vs Delivered Scope

Compare the original plan scope against what was actually delivered:

  1. Read the plan from .agents/plans/ (most recent)
  2. Compare planned issues against closed issues (bd children <epic-id>)
  3. Note any scope additions, removals, or modifications
  4. Include scope delta in the post-mortem findings

Step 2.4: Closure Integrity Audit (MANDATORY)

Read references/closure-integrity-audit.md for the full procedure. Mechanically verifies:

  1. Evidence precedence per child — every closed child resolves on the strongest available evidence in this order: commit, then staged, then worktree
  2. Phantom bead detection — flags children with generic titles ("task") or empty descriptions
  3. Orphaned children — beads in bd list but not linked to parent in bd show
  4. Multi-wave regression detection — for crank epics, checks if a later wave removed code added by an earlier wave
  5. Stretch goal audit — verifies deferred stretch goals have documented rationale

Include results in the council packet as context.closure_integrity. WARN on 1-2 findings, FAIL on 3+.

If a closure is evidence-only, emit a proof artifact with bash skills/post-mortem/scripts/write-evidence-only-closure.sh and cite at .agents/releases/evidence-only-closures/<target-id>.json. Record evidence_mode plus repo-state detail for replayability. A valid durable packet is acceptable audit evidence even when the child intentionally has no scoped-file section.

Step 2.5: Pre-Council Metadata Verification (MANDATORY)

Read references/metadata-verification.md for the full verification procedure. Mechanically checks: plan vs actual files, file existence in commits, cross-references in docs, and ASCII diagram integrity. Failures are included in the council packet as context.metadata_failures.

Step 2.6: Pre-Council Deep Audit Sweep

Skip if --quick or --skip-sweep.

Before council runs, dispatch a deep audit sweep to systematically discover issues across all changed files. This uses the same protocol as /vibe --deep — see the deep audit protocol in the vibe skill (skills/vibe/) for the full specification.

In summary:

  1. Identify all files in scope (from epic commits or recent changes)
  2. Chunk files into batches of 3-5 by line count (<=100 lines -> batch of 5, 101-300 -> batch of 3, >300 -> solo)
  3. Dispatch up to 8 Explore agents in parallel, each with a mandatory 8-category checklist per file (resource leaks, string safety, dead code, hardcoded values, edge cases, concurrency, error handling, HTTP/web security)
  4. Merge all explorer findings into a sweep manifest at .agents/council/sweep-manifest.md
  5. Include sweep manifest in council packet — judges shift to adjudication mode (confirm/reject/reclassify sweep findings + add cross-cutting findings)

Why: Post-mortem council judges exhibit satisfaction bias when reviewing monolithic file sets — they stop at ~10 findings regardless of actual issue count. Per-file explorers with category checklists find 3x more issues, and the sweep manifest gives judges structured input to adjudicate rather than discover from scratch.

Skip conditions: - --quick flag -> skip (fast inline path) - --skip-sweep flag -> skip (old behavior: judges do pure discovery) - No source files in scope -> skip (nothing to audit)

Step 3: Council Validates the Work

Council Verdict:

Run /council with the retrospective preset and always 3 judges:

Text Only
/council --deep --preset=retrospective validate <epic-or-recent>

Default (3 judges with retrospective perspectives): - plan-compliance: What was planned vs what was delivered? What's missing? What was added? - tech-debt: What shortcuts were taken? What will bite us later? What needs cleanup? - learnings: What patterns emerged? What should be extracted as reusable knowledge?

Post-mortem always uses 3 judges (--deep) because completed work deserves thorough review.

Four-Surface Closure: Validate all four surfaces -- Code, Documentation, Examples, and Proof. A PASS verdict requires all four surfaces addressed, not just code correctness. Read skills/post-mortem/references/four-surface-closure.md for the closure checklist and common gaps.

Timeout: Post-mortem inherits council timeout settings. If judges time out, the council report will note partial results. Post-mortem treats a partial council report the same as a full report — the verdict stands with available judges.

The plan/spec content is injected into the council packet context so the plan-compliance judge can compare planned vs delivered.

With --quick (inline, no spawning):

Text Only
/council --quick validate <epic-or-recent>
Single-agent structured review. Fast wrap-up without spawning.

With debate mode:

Text Only
/post-mortem --debate epic-123
Enables adversarial two-round review for post-implementation validation. Use for high-stakes shipped work where missed findings have production consequences. See /council docs for full --debate details.

Advanced options (passed through to council): - --mixed — Cross-vendor (Claude + Codex) with retrospective perspectives - --preset=<name> — Override with different personas (e.g., --preset=ops for production readiness) - --explorers=N — Each judge spawns N explorers to investigate the implementation deeply before judging - --debate — Two-round adversarial review (judges critique each other's findings before final verdict)

Step 3.5: Prediction Accuracy (Pre-Mortem Correlation)

When a pre-mortem report exists for the current epic (ls -t .agents/council/*pre-mortem*.md), cross-reference its prediction IDs against actual vibe/implementation findings. Score each as HIT (prediction confirmed), MISS (did not materialize), or SURPRISE (unpredicted issue). Write a ## Prediction Accuracy table in the report. Skip silently if no pre-mortem exists. See references/prediction-tracking.md for the full table format and scoring rules.

Phase 2: Extract Learnings

Inline extraction of learnings from the completed work (formerly delegated to the retro skill).

Step EX.1: Gather Context

Bash
# Recent commits
git log --oneline -20 --since="7 days ago"

# Epic children (if epic ID provided)
bd children <epic-id> 2>/dev/null | head -20

# Recent plans and research
ls -lt .agents/plans/ .agents/research/ 2>/dev/null | head -10

Read relevant artifacts: research documents, plan documents, commit messages, code changes. Use the Read tool and git commands to understand what was done.

If retrospecting an epic: Run the closure integrity quick-check from references/context-gathering.md (Phantom Bead Detection + Multi-Wave Regression Scan). Include any warnings in findings.

Step EX.2: Classify Learnings

Ask these questions:

What went well? - What approaches worked? - What was faster than expected? - What should we do again?

What went wrong? - What failed? - What took longer than expected? - What would we do differently?

What did we discover? - New patterns found - Codebase quirks learned - Tool tips discovered - Debugging insights - Test pyramid gaps found during implementation or review

For each learning, capture: - ID: L1, L2, L3... - Category: debugging, architecture, process, testing, security - What: The specific insight - Why it matters: Impact on future work - Confidence: high, medium, low

Step EX.3: Write Learnings

Write to: .agents/learnings/YYYY-MM-DD-<topic>.md

Markdown
---
id: learning-YYYY-MM-DD-<slug>
type: learning
date: YYYY-MM-DD
category: <category>
confidence: <high|medium|low>
maturity: provisional
utility: 0.5
---

# Learning: <Short Title>

## What We Learned

<1-2 sentences describing the insight>

## Why It Matters

<1 sentence on impact/value>

## Source

<What work this came from>

---

# Learning: <Next Title>

**ID**: L2
...

Step EX.3.5: Test Pyramid Gap Analysis

Compare planned vs actual test levels per the test pyramid standard (test-pyramid.md in the standards skill). For each closed issue: check planned test_levels metadata against actual test files. Write a ## Test Pyramid Assessment table (Issue | Planned | Actual | Gaps | Action). Gaps with severity >= moderate become next-work.jsonl items with type tech-debt.

Step EX.4: Classify Learning Scope

For each learning extracted in Step EX.3, classify:

Question: "Does this learning reference specific files, packages, or architecture in THIS repo? Or is it a transferable pattern that helps any project?"

  • Repo-specific -> Write to .agents/learnings/ (existing behavior from Step EX.3). Use git rev-parse --show-toplevel to resolve repo root — never write relative to cwd.
  • Cross-cutting/transferable -> Rewrite to remove repo-specific context (file paths, function names, package names), then:
  • Write abstracted version to ~/.agents/learnings/YYYY-MM-DD-<slug>.md (NOT local — one copy only)
  • Run abstraction lint check:
    Bash
    file="<path-to-written-global-file>"
    grep -iEn '(internal/|cmd/|\.go:|/pkg/|/src/|AGENTS\.md|CLAUDE\.md)' "$file" 2>/dev/null
    grep -En '[A-Z][a-z]+[A-Z][a-z]+\.(go|py|ts|rs)' "$file" 2>/dev/null
    grep -En '\./[a-z]+/' "$file" 2>/dev/null
    
    If matches: WARN user with matched lines, ask to proceed or revise. Never block the write.

Note: Each learning goes to ONE location (local or global). No promoted_to needed — there's no local copy to mark when writing directly to global.

Example abstraction: - Local: "Compile's validate package needs O_CREATE|O_EXCL for atomic claims because Zeus spawns concurrent workers" - Global: "Use O_CREATE|O_EXCL for atomic file creation when multiple processes may race on the same path"

Step EX.5: Write Structured Findings to Registry

Before backlog processing, normalize reusable council findings into .agents/findings/registry.jsonl.

Use the tracked contract in docs/contracts/finding-registry.md:

  • persist only reusable findings that should change future planning or review behavior
  • require dedup_key, provenance, pattern, detection_question, checklist_item, applicable_when, and confidence
  • applicable_when must use the controlled vocabulary from the contract
  • append or merge by dedup_key
  • use the contract's temp-file-plus-rename atomic write rule

This registry is the v1 advisory prevention surface. It complements learnings and next-work; it does not replace them.

Step EX.6: Refresh Compiled Prevention Outputs

After the registry mutation, refresh compiled outputs immediately so the same session can benefit from the updated prevention set.

If hooks/finding-compiler.sh exists, run:

Bash
bash hooks/finding-compiler.sh --quiet 2>/dev/null || true

This promotes registry rows into .agents/findings/*.md, refreshes .agents/planning-rules/*.md and .agents/pre-mortem-checks/*.md, and rewrites draft constraint metadata under .agents/constraints/. Active enforcement still depends on the constraint index lifecycle and runtime hook support, but compilation itself is no longer deferred.

Step ACT.3: Feed Next-Work

Actionable improvements identified during processing -> append one schema v1.3 batch entry to .agents/rpi/next-work.jsonl using the tracked contract in ../../docs/contracts/next-work.schema.md and the write procedure in references/harvest-next-work.md. Follow the claim/finalize lifecycle documented in references/harvest-next-work.md.

Bash
mkdir -p .agents/rpi
# Build VALID_ITEMS via the schema-validation flow in references/harvest-next-work.md
# Then append one entry per post-mortem / epic.
# If a harvested item already maps to a known proof surface, preserve it on the
# item as "proof_ref" instead of burying target IDs in free text. Example item:
# [{"title":"Verify the parity gate after proof propagation lands","type":"task","severity":"medium","source":"council-finding","description":"Re-run the targeted validator after the follow-up lands.","target_repo":"agentops","proof_ref":{"kind":"execution_packet","run_id":"6f36a5640805","path":".agents/rpi/runs/6f36a5640805/execution-packet.json"}}]
ENTRY_TIMESTAMP="$(date -Iseconds)"
SOURCE_EPIC="${EPIC_ID:-recent}"
VALID_ITEMS_JSON="${VALID_ITEMS_JSON:-[]}"

printf '%s\n' "$(jq -cn \
  --arg source_epic "$SOURCE_EPIC" \
  --arg timestamp "$ENTRY_TIMESTAMP" \
  --argjson items "$VALID_ITEMS_JSON" \
  '{
    source_epic: $source_epic,
    timestamp: $timestamp,
    items: $items,
    consumed: false,
    claim_status: "available",
    claimed_by: null,
    claimed_at: null,
    consumed_by: null,
    consumed_at: null
  }'
)" >> .agents/rpi/next-work.jsonl

Step ACT.4: Update Marker

Bash
date -Iseconds > .agents/ao/last-processed

This must be the LAST action in Phase 4.

Phases 3-6 (Maintenance): Read references/maintenance-phases.md for backlog processing, activation, retirement, and harvesting phases. Load when --process-only flag is set or when running full post-mortem.

Step 7: Report to User

Tell the user: 1. Council verdict on implementation 2. Key learnings 3. Any follow-up items 4. Location of post-mortem report 5. Knowledge flywheel status 6. Suggested next /rpi command from the harvested ## Next Work section (ALWAYS — this is how the flywheel spins itself) 7. ALL proactive improvements, organized by priority (highlight one quick win) 8. Knowledge lifecycle summary (Phase 3-5 stats)

The next /rpi suggestion is MANDATORY, not opt-in. After every post-mortem, present the highest-severity harvested item as a ready-to-copy command:

Markdown
## Flywheel: Next Cycle

Based on this post-mortem, the highest-priority follow-up is:

> **<title>** (<type>, <severity>)
> <1-line description>

Ready to run:
/rpi "" <div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code>Or see all N harvested items in `.agents/rpi/next-work.jsonl`. </code></pre></div></p> <p>If no items were harvested, write: "Flywheel stable — no follow-up items identified."</p> <hr /> <h2 id="integration-with-workflow">Integration with Workflow<a class="headerlink" href="#integration-with-workflow" title="Anchor link">¶</a></h2> <div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code>/plan epic-123 | v /pre-mortem (council on plan) | v /implement | v /vibe (council on code) | v Ship it | v /post-mortem <-- You are here | |-- Phase 1: Council validates implementation |-- Phase 2: Extract learnings (inline) |-- Phase 3: Process backlog (score, dedup, flag stale) |-- Phase 4: Activate (promote to MEMORY.md, compile constraints) |-- Phase 5: Retire stale learnings |-- Phase 6: Harvest next work |-- Suggest next /rpi --------------------+ | +----------------------------------------+ | (flywheel: learnings become next work) v /rpi "<highest-priority enhancement>" </code></pre></div> <hr /> <h2 id="examples">Examples<a class="headerlink" href="#examples" title="Anchor link">¶</a></h2> <h3 id="wrap-up-recent-work">Wrap Up Recent Work<a class="headerlink" href="#wrap-up-recent-work" title="Anchor link">¶</a></h3> <p><strong>User says:</strong> <code>/post-mortem</code></p> <p><strong>What happens:</strong> 1. Agent scans recent commits. 2. Runs <code>/council --deep validate recent</code>. 3. Extracts learnings, processes backlog, and promotes items. 4. Harvests next-work to <code>.agents/rpi/next-work.jsonl</code>.</p> <p><strong>Result:</strong> Report with learnings, stats, and a suggested <code>/rpi</code> command.</p> <h3 id="other-modes">Other Modes<a class="headerlink" href="#other-modes" title="Anchor link">¶</a></h3> <ul> <li><strong>Epic-specific:</strong> <code>/post-mortem ag-5k2</code> — review against the target plan</li> <li><strong>Quick capture:</strong> <code>/post-mortem --quick "insight"</code> — write a learning without council</li> <li><strong>Process-only:</strong> <code>/post-mortem --process-only</code> — run backlog processing only</li> <li><strong>Cross-vendor:</strong> <code>/post-mortem --mixed ag-3b7</code> — broaden judgment coverage</li> </ul> <h2 id="troubleshooting">Troubleshooting<a class="headerlink" href="#troubleshooting" title="Anchor link">¶</a></h2> <table> <thead> <tr> <th>Problem</th> <th>Cause</th> <th>Solution</th> </tr> </thead> <tbody> <tr> <td>Council times out</td> <td>Epic too large or too many files changed</td> <td>Split post-mortem into smaller reviews or increase timeout</td> </tr> <tr> <td>No next-work items harvested</td> <td>Council found no tech debt or improvements</td> <td>Flywheel stable — write entry with empty items array to next-work.jsonl</td> </tr> <tr> <td>Checkpoint-policy preflight blocks</td> <td>Prior FAIL verdict in ratchet chain without fix</td> <td>Resolve prior failure (fix + re-vibe) or skip checkpoint-policy via <code>--skip-checkpoint-policy</code></td> </tr> <tr> <td>Metadata verification fails</td> <td>Plan vs actual files mismatch or missing cross-references</td> <td>Include failures in council packet as <code>context.metadata_failures</code> — judges assess severity</td> </tr> </tbody> </table> <hr /> <h2 id="see-also">See Also<a class="headerlink" href="#see-also" title="Anchor link">¶</a></h2> <ul> <li><code>skills/council/SKILL.md</code> — Multi-model validation council</li> <li><code>skills/vibe/SKILL.md</code> — Council validates code (<code>/vibe</code> after coding)</li> <li><code>skills/pre-mortem/SKILL.md</code> — Council validates plans (before implementation)</li> </ul> <h2 id="reference-documents">Reference Documents<a class="headerlink" href="#reference-documents" title="Anchor link">¶</a></h2> <ul> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/harvest-next-work.md">references/harvest-next-work.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/learning-templates.md">references/learning-templates.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/plan-compliance-checklist.md">references/plan-compliance-checklist.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/closure-integrity-audit.md">references/closure-integrity-audit.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/security-patterns.md">references/security-patterns.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/checkpoint-policy.md">references/checkpoint-policy.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/metadata-verification.md">references/metadata-verification.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/context-gathering.md">references/context-gathering.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/output-templates.md">references/output-templates.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/backlog-processing.md">references/backlog-processing.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/activation-policy.md">references/activation-policy.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/prediction-tracking.md">references/prediction-tracking.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/retro-history.md">references/retro-history.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/streak-tracking.md">references/streak-tracking.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/maintenance-phases.md">references/maintenance-phases.md</a></li> <li><a href="https://github.com/boshu2/agentops/blob/main/skills/post-mortem/references/four-surface-closure.md">references/four-surface-closure.md</a></li> </ul> <aside class="md-source-file"> <span class="md-source-file__fact"> <span class="md-icon" title="Last update"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">April 21, 2026</span> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type="button" class="md-top md-icon" data-md-component="top" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class="md-footer"> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> </div> <div class="md-social"> <a href="https://github.com/boshu2/agentops" target="_blank" rel="noopener" title="AgentOps on GitHub" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.tabs.sticky", "navigation.sections", "navigation.expand", "navigation.indexes", "navigation.top", "navigation.footer", "navigation.instant", "navigation.instant.prefetch", "navigation.tracking", "search.suggest", "search.highlight", "search.share", "content.code.copy", "content.code.annotate", "content.action.edit", "content.action.view", "content.tabs.link", "content.tooltips", "toc.follow"], "search": "../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script> <script src="../../assets/javascripts/bundle.83f73b43.min.js"></script> </body> </html>