agent-postmortem 0.3.5__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/CHANGELOG.md +136 -0
  2. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/PKG-INFO +33 -8
  3. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/README.md +32 -7
  4. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/docs/DESIGN.md +752 -27
  5. agent_postmortem-0.4.0/hatch_build.py +74 -0
  6. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/plugin/.claude-plugin/plugin.json +1 -1
  7. agent_postmortem-0.4.0/plugin/README.md +84 -0
  8. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/plugin/hooks/hooks.json +31 -0
  9. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/plugin/hooks/run.sh +91 -4
  10. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/pyproject.toml +7 -3
  11. agent_postmortem-0.4.0/scripts/live_fault_injection.py +283 -0
  12. agent_postmortem-0.4.0/scripts/live_replay.py +439 -0
  13. agent_postmortem-0.4.0/scripts/scan_cache_check.py +188 -0
  14. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/__init__.py +1 -1
  15. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/cli.py +785 -91
  16. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/commands.py +47 -3
  17. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/claim_contradiction.py +21 -4
  18. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/mislabeled_kill.py +6 -3
  19. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/missing_artifact.py +45 -14
  20. agent_postmortem-0.4.0/src/agent_postmortem/entry.py +40 -0
  21. agent_postmortem-0.4.0/src/agent_postmortem/hook_gate.py +175 -0
  22. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/hooks_cli.py +345 -18
  23. agent_postmortem-0.4.0/src/agent_postmortem/live.py +1812 -0
  24. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/markers.py +7 -0
  25. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/reader.py +254 -13
  26. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/report.py +164 -65
  27. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/rescue.py +16 -6
  28. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/returns.py +15 -1
  29. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/severity.py +29 -0
  30. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/state.py +250 -0
  31. agent_postmortem-0.4.0/src/agent_postmortem/status.py +487 -0
  32. agent_postmortem-0.4.0/src/agent_postmortem/statusline.py +145 -0
  33. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/watch.py +43 -9
  34. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules__local.txt +1 -1
  35. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules__raw.txt +1 -1
  36. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules__share.txt +1 -1
  37. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_all__local.txt +1 -1
  38. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_all__raw.txt +1 -1
  39. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_all__share.txt +1 -1
  40. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_propose__local.txt +1 -1
  41. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_propose__raw.txt +1 -1
  42. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_propose__share.txt +1 -1
  43. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/run__local.txt +29 -7
  44. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/run__raw.txt +29 -7
  45. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/run__share.txt +29 -7
  46. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/scan__local.txt +1 -1
  47. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/scan__raw.txt +1 -1
  48. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/scan__share.txt +1 -1
  49. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/scan_all__local.txt +1 -1
  50. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/scan_all__raw.txt +1 -1
  51. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/scan_all__share.txt +1 -1
  52. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/trend__local.txt +12 -12
  53. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/trend__raw.txt +12 -12
  54. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/trend__share.txt +12 -12
  55. agent_postmortem-0.4.0/tests/live_helpers.py +139 -0
  56. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/synthetic-ids.txt +10 -0
  57. agent_postmortem-0.4.0/tests/test_build_identity.py +162 -0
  58. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fa_commit_no_id.py +49 -1
  59. agent_postmortem-0.4.0/tests/test_failed_meaning.py +36 -0
  60. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_help.py +3 -2
  61. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_field_v03.py +1 -1
  62. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_field_v03_more.py +1 -5
  63. agent_postmortem-0.4.0/tests/test_fork_hook_identity.py +232 -0
  64. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_launch_docs.py +2 -1
  65. agent_postmortem-0.4.0/tests/test_live_branch_review.py +304 -0
  66. agent_postmortem-0.4.0/tests/test_live_hooks.py +139 -0
  67. agent_postmortem-0.4.0/tests/test_live_nested_return.py +720 -0
  68. agent_postmortem-0.4.0/tests/test_live_plugin.py +214 -0
  69. agent_postmortem-0.4.0/tests/test_live_post_tool.py +420 -0
  70. agent_postmortem-0.4.0/tests/test_live_post_tool_review.py +473 -0
  71. agent_postmortem-0.4.0/tests/test_live_release_review.py +134 -0
  72. agent_postmortem-0.4.0/tests/test_live_replay.py +27 -0
  73. agent_postmortem-0.4.0/tests/test_live_review_fixes.py +340 -0
  74. agent_postmortem-0.4.0/tests/test_live_scan.py +133 -0
  75. agent_postmortem-0.4.0/tests/test_live_scan_cache.py +194 -0
  76. agent_postmortem-0.4.0/tests/test_live_session.py +466 -0
  77. agent_postmortem-0.4.0/tests/test_live_status.py +161 -0
  78. agent_postmortem-0.4.0/tests/test_live_statusline.py +124 -0
  79. agent_postmortem-0.4.0/tests/test_live_store.py +78 -0
  80. agent_postmortem-0.4.0/tests/test_live_watch_cli.py +113 -0
  81. agent_postmortem-0.4.0/tests/test_live_watch_workflow.py +98 -0
  82. agent_postmortem-0.4.0/tests/test_live_words_doc.py +27 -0
  83. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n6_stderr.py +7 -0
  84. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n8_k3_precursor.py +11 -2
  85. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n9_docs.py +3 -3
  86. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n9_release_gate.py +8 -7
  87. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_no_write_surface.py +53 -21
  88. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_plugin.py +35 -24
  89. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_privacy_matrix.py +91 -0
  90. agent_postmortem-0.4.0/tests/test_release_review.py +80 -0
  91. agent_postmortem-0.4.0/tests/test_removed_worktree.py +177 -0
  92. agent_postmortem-0.4.0/tests/test_rescue_brief_scope.py +84 -0
  93. agent_postmortem-0.4.0/tests/test_rules_propose_cache.py +72 -0
  94. agent_postmortem-0.4.0/tests/test_run_id_errors.py +44 -0
  95. agent_postmortem-0.4.0/tests/test_scan_own_marker.py +95 -0
  96. agent_postmortem-0.4.0/tests/test_scan_totals_window.py +55 -0
  97. agent_postmortem-0.4.0/tests/test_share_label_case.py +318 -0
  98. agent_postmortem-0.4.0/tests/test_status_commands.py +422 -0
  99. agent_postmortem-0.4.0/tests/test_status_disclosure.py +144 -0
  100. agent_postmortem-0.4.0/tests/test_status_workflows.py +159 -0
  101. agent_postmortem-0.4.0/tests/test_story_plurals.py +24 -0
  102. agent_postmortem-0.4.0/tests/test_transcript_cache.py +488 -0
  103. agent_postmortem-0.4.0/tests/test_transcript_memo.py +340 -0
  104. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/uv.lock +1 -1
  105. agent_postmortem-0.3.5/plugin/README.md +0 -58
  106. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/.claude-plugin/marketplace.json +0 -0
  107. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  108. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/.github/ISSUE_TEMPLATE/confusing_output.yml +0 -0
  109. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/.github/ISSUE_TEMPLATE/detector_request.yml +0 -0
  110. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/.github/ISSUE_TEMPLATE/run_shape_not_covered.yml +0 -0
  111. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/.github/ISSUE_TEMPLATE/wrong_verdict.yml +0 -0
  112. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  113. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/.github/workflows/ci.yml +0 -0
  114. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/.github/workflows/release.yml +0 -0
  115. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/.gitignore +0 -0
  116. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/CLAUDE.md +0 -0
  117. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/CONTRIBUTING.md +0 -0
  118. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/LICENSE +0 -0
  119. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/plugin/skills/postmortem/SKILL.md +0 -0
  120. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/plugin/skills/rescue/SKILL.md +0 -0
  121. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/scripts/check-privacy.sh +0 -0
  122. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/scripts/export-public.sh +0 -0
  123. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/argerrors.py +0 -0
  124. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/claims.py +0 -0
  125. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/config.py +0 -0
  126. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/demo/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-d30/agent-ac200000000000001.jsonl +0 -0
  127. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/demo/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-d30/agent-ac200000000000001.meta.json +0 -0
  128. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/demo/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-d30/agent-ac200000000000002.jsonl +0 -0
  129. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/demo/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-d30/agent-ac200000000000002.meta.json +0 -0
  130. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/demo/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-d30/agent-ac200000000000003.jsonl +0 -0
  131. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/demo/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-d30/agent-ac200000000000003.meta.json +0 -0
  132. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/demo/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-d30/agent-ac200000000000004.jsonl +0 -0
  133. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/demo/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-d30/agent-ac200000000000004.meta.json +0 -0
  134. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/demo/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-d30/journal.jsonl +0 -0
  135. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/demo/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
  136. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/__init__.py +0 -0
  137. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/attempt_failed.py +0 -0
  138. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/base.py +0 -0
  139. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/bash_backgrounded.py +0 -0
  140. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/bash_timeout.py +0 -0
  141. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/classifier_unavailable.py +0 -0
  142. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/codex_unavailable.py +0 -0
  143. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/codex_write_denied.py +0 -0
  144. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/git_cwd_mismatch.py +0 -0
  145. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/permission_denied.py +0 -0
  146. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/silent_retry.py +0 -0
  147. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/structured_output_failure.py +0 -0
  148. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/tool_json_error.py +0 -0
  149. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/wasted_time.py +0 -0
  150. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/workflow_failed.py +0 -0
  151. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/disclosure.py +0 -0
  152. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/hooks/model_allocation_guard.mjs +0 -0
  153. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/ledger.py +0 -0
  154. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/models.py +0 -0
  155. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/observe.py +0 -0
  156. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/redact.py +0 -0
  157. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/rules.py +0 -0
  158. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/src/agent_postmortem/trend.py +0 -0
  159. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/conftest.py +0 -0
  160. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/README.md +0 -0
  161. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/demo__share.txt +0 -0
  162. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rescue_plan__local.txt +0 -0
  163. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rescue_plan__raw.txt +0 -0
  164. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rescue_plan__share.txt +0 -0
  165. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rescue_status__local.txt +0 -0
  166. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rescue_status__raw.txt +0 -0
  167. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rescue_status__share.txt +0 -0
  168. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_review__local.txt +0 -0
  169. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_review__raw.txt +0 -0
  170. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_review__share.txt +0 -0
  171. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_show__local.txt +0 -0
  172. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_show__raw.txt +0 -0
  173. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_show__share.txt +0 -0
  174. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000001.jsonl +0 -0
  175. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000001.meta.json +0 -0
  176. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000002.jsonl +0 -0
  177. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000002.meta.json +0 -0
  178. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000003.jsonl +0 -0
  179. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000003.meta.json +0 -0
  180. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000004.jsonl +0 -0
  181. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000004.meta.json +0 -0
  182. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000005.jsonl +0 -0
  183. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000005.meta.json +0 -0
  184. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000006.jsonl +0 -0
  185. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000006.meta.json +0 -0
  186. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000008.jsonl +0 -0
  187. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000008.meta.json +0 -0
  188. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000009.jsonl +0 -0
  189. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000009.meta.json +0 -0
  190. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000010.jsonl +0 -0
  191. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000010.meta.json +0 -0
  192. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000011.jsonl +0 -0
  193. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/agent-af200000000000011.meta.json +0 -0
  194. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_facts/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af0/journal.jsonl +0 -0
  195. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000001.jsonl +0 -0
  196. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000001.meta.json +0 -0
  197. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000002.jsonl +0 -0
  198. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000002.meta.json +0 -0
  199. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000003.jsonl +0 -0
  200. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000003.meta.json +0 -0
  201. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000004.jsonl +0 -0
  202. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000004.meta.json +0 -0
  203. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000005.jsonl +0 -0
  204. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000005.meta.json +0 -0
  205. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000006.jsonl +0 -0
  206. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000006.meta.json +0 -0
  207. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000007.jsonl +0 -0
  208. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000007.meta.json +0 -0
  209. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a1.jsonl +0 -0
  210. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a1.meta.json +0 -0
  211. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a2.jsonl +0 -0
  212. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a2.meta.json +0 -0
  213. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a3.jsonl +0 -0
  214. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a3.meta.json +0 -0
  215. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a4.jsonl +0 -0
  216. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a4.meta.json +0 -0
  217. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/journal.jsonl +0 -0
  218. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afa10000000000001.jsonl +0 -0
  219. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afa10000000000001.meta.json +0 -0
  220. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afa10000000000002.jsonl +0 -0
  221. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afa10000000000002.meta.json +0 -0
  222. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afb10000000000001.jsonl +0 -0
  223. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afb10000000000001.meta.json +0 -0
  224. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/journal.jsonl +0 -0
  225. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/bash_backgrounded_timeout/agent-ac300000000000001.jsonl +0 -0
  226. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/bash_backgrounded_timeout/agent-ac300000000000001.meta.json +0 -0
  227. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/bash_backgrounded_timeout/journal.jsonl +0 -0
  228. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/claim_contradiction/journal.jsonl +0 -0
  229. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/clean_run/agent-ac100000000000001.jsonl +0 -0
  230. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/clean_run/agent-ac100000000000001.meta.json +0 -0
  231. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/clean_run/agent-ac100000000000002.jsonl +0 -0
  232. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/clean_run/agent-ac100000000000002.meta.json +0 -0
  233. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/clean_run/journal.jsonl +0 -0
  234. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000001.jsonl +0 -0
  235. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000001.meta.json +0 -0
  236. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000002.jsonl +0 -0
  237. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000002.meta.json +0 -0
  238. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000003.jsonl +0 -0
  239. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000003.meta.json +0 -0
  240. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000004.jsonl +0 -0
  241. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000004.meta.json +0 -0
  242. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/journal.jsonl +0 -0
  243. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000001.jsonl +0 -0
  244. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000001.meta.json +0 -0
  245. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000002.jsonl +0 -0
  246. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000002.meta.json +0 -0
  247. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000003.jsonl +0 -0
  248. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000003.meta.json +0 -0
  249. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/journal.jsonl +0 -0
  250. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/evidence_noise/agent-acf00000000000001.jsonl +0 -0
  251. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/evidence_noise/agent-acf00000000000001.meta.json +0 -0
  252. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/evidence_noise/journal.jsonl +0 -0
  253. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ae300000000000001.jsonl +0 -0
  254. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ae300000000000001.meta.json +0 -0
  255. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-710/agent-ae100000000000001.jsonl +0 -0
  256. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-710/agent-ae100000000000001.meta.json +0 -0
  257. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-710/agent-ae100000000000002.jsonl +0 -0
  258. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-710/agent-ae100000000000002.meta.json +0 -0
  259. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-710/journal.jsonl +0 -0
  260. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-720/agent-ae200000000000001.jsonl +0 -0
  261. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-720/agent-ae200000000000001.meta.json +0 -0
  262. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-720/journal.jsonl +0 -0
  263. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
  264. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/incomplete_journal/agent-ad000000000000001.jsonl +0 -0
  265. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/incomplete_journal/agent-ad000000000000001.meta.json +0 -0
  266. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/incomplete_journal/journal.jsonl +0 -0
  267. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_malformed_fields/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af1/agent-aee00000000000001.jsonl +0 -0
  268. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_malformed_fields/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af1/agent-aee00000000000001.meta.json +0 -0
  269. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_malformed_fields/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af1/agent-aee00000000000003.jsonl +0 -0
  270. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_malformed_fields/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af1/agent-aee00000000000003.meta.json +0 -0
  271. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_malformed_fields/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af1/agent-aee00000000000004.jsonl +0 -0
  272. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_malformed_fields/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af1/agent-aee00000000000004.meta.json +0 -0
  273. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_malformed_fields/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-af1/journal.jsonl +0 -0
  274. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_malformed_fields/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
  275. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_orphan_failed/journal.jsonl +0 -0
  276. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad200000000000001.jsonl +0 -0
  277. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad200000000000001.meta.json +0 -0
  278. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad300000000000001.jsonl +0 -0
  279. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad300000000000001.meta.json +0 -0
  280. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad400000000000001.jsonl +0 -0
  281. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad400000000000001.meta.json +0 -0
  282. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad400000000000002.jsonl +0 -0
  283. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad400000000000002.meta.json +0 -0
  284. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad500000000000001.jsonl +0 -0
  285. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad500000000000001.meta.json +0 -0
  286. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad500000000000002.jsonl +0 -0
  287. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad500000000000002.meta.json +0 -0
  288. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad600000000000001.jsonl +0 -0
  289. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad600000000000001.meta.json +0 -0
  290. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad600000000000002.jsonl +0 -0
  291. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad600000000000002.meta.json +0 -0
  292. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad700000000000001.jsonl +0 -0
  293. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad700000000000001.meta.json +0 -0
  294. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad800000000000001.jsonl +0 -0
  295. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad800000000000001.meta.json +0 -0
  296. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/journal.jsonl +0 -0
  297. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_unresolved/agent-ad900000000000001.jsonl +0 -0
  298. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_unresolved/agent-ad900000000000001.meta.json +0 -0
  299. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_unresolved/journal.jsonl +0 -0
  300. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/missing_artifact/agent-ac600000000000001.jsonl +0 -0
  301. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/missing_artifact/agent-ac600000000000001.meta.json +0 -0
  302. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/missing_artifact/agent-ac600000000000002.jsonl +0 -0
  303. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/missing_artifact/agent-ac600000000000002.meta.json +0 -0
  304. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/missing_artifact/journal.jsonl +0 -0
  305. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/reader_minimal/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_a0000000-001/journal.jsonl +0 -0
  306. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/reader_minimal/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_b0000000-002/agent-a1111111111111111.jsonl +0 -0
  307. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/reader_minimal/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_b0000000-002/agent-a1111111111111111.meta.json +0 -0
  308. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/reader_minimal/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_b0000000-002/agent-a2222222222222222.jsonl +0 -0
  309. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/reader_minimal/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_b0000000-002/agent-a2222222222222222.meta.json +0 -0
  310. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/reader_minimal/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_b0000000-002/journal.jsonl +0 -0
  311. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/reader_minimal/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_c0000000-003/journal.jsonl +0 -0
  312. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/redaction_adversarial/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-960/agent-ad100000000000001.jsonl +0 -0
  313. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/redaction_adversarial/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-960/agent-ad100000000000001.meta.json +0 -0
  314. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/redaction_adversarial/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/workflows/wf_00000000-960/journal.jsonl +0 -0
  315. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000001.jsonl +0 -0
  316. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000001.meta.json +0 -0
  317. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000002.jsonl +0 -0
  318. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000002.meta.json +0 -0
  319. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000003.jsonl +0 -0
  320. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000003.meta.json +0 -0
  321. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000004.jsonl +0 -0
  322. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000004.meta.json +0 -0
  323. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000005.jsonl +0 -0
  324. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000005.meta.json +0 -0
  325. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/journal.jsonl +0 -0
  326. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_bridge_only/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
  327. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac700000000000001.jsonl +0 -0
  328. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac700000000000001.meta.json +0 -0
  329. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac700000000000002.jsonl +0 -0
  330. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac700000000000002.meta.json +0 -0
  331. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
  332. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_compaction/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-aca00000000000001.jsonl +0 -0
  333. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_compaction/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-aca00000000000001.meta.json +0 -0
  334. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_compaction/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
  335. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_dedup/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
  336. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_envelope/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac900000000000001.jsonl +0 -0
  337. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_envelope/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac900000000000001.meta.json +0 -0
  338. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_envelope/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
  339. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_human_interrupt/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-acc00000000000001.jsonl +0 -0
  340. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_human_interrupt/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-acc00000000000001.meta.json +0 -0
  341. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_human_interrupt/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
  342. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_parent_stop/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-acb00000000000001.jsonl +0 -0
  343. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_parent_stop/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-acb00000000000001.meta.json +0 -0
  344. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_parent_stop/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
  345. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_unattributed_long/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-acd00000000000001.jsonl +0 -0
  346. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_unattributed_long/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-acd00000000000001.meta.json +0 -0
  347. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_unattributed_long/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
  348. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_unattributed_short/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ace00000000000001.jsonl +0 -0
  349. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_unattributed_short/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ace00000000000001.meta.json +0 -0
  350. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_unattributed_short/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
  351. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/structured_output_corrupt/agent-ac400000000000001.jsonl +0 -0
  352. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/structured_output_corrupt/agent-ac400000000000001.meta.json +0 -0
  353. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/fixtures/runs/structured_output_corrupt/journal.jsonl +0 -0
  354. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/g_corpus_support.py +0 -0
  355. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/g_helpers.py +0 -0
  356. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/g_independent_return.py +0 -0
  357. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/n3b_helpers.py +0 -0
  358. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/n3b_planted.py +0 -0
  359. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/n4_reference_commands.py +0 -0
  360. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/n4b2_helpers.py +0 -0
  361. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/n5b_helpers.py +0 -0
  362. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/n5c1_helpers.py +0 -0
  363. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/n5c2_helpers.py +0 -0
  364. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/n6_helpers.py +0 -0
  365. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/privacy_rules.py +0 -0
  366. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/rule_fixtures.py +0 -0
  367. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_attempt_facts.py +0 -0
  368. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_attempt_failed.py +0 -0
  369. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_attribution.py +0 -0
  370. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_bug_report.py +0 -0
  371. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_claim_contradiction.py +0 -0
  372. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_cli_smoke.py +0 -0
  373. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_codex_unavailable.py +0 -0
  374. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_config.py +0 -0
  375. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_deep_lines.py +0 -0
  376. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_detectors_base.py +0 -0
  377. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_detectors_core.py +0 -0
  378. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_detectors_registry.py +0 -0
  379. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_detectors_tooling.py +0 -0
  380. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_disclosure_primitives.py +0 -0
  381. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_empty_state.py +0 -0
  382. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_export.py +0 -0
  383. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_export_public.py +0 -0
  384. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fa_fork.py +0 -0
  385. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fa_generations.py +0 -0
  386. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fa_path_token.py +0 -0
  387. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fa_return_boundary.py +0 -0
  388. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fa_wasted.py +0 -0
  389. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fb_here.py +0 -0
  390. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fb_live_now.py +0 -0
  391. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fb_rescue_live.py +0 -0
  392. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix10_redact.py +0 -0
  393. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix11_redact.py +0 -0
  394. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix12_redact.py +0 -0
  395. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix1_commit.py +0 -0
  396. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix1_launch.py +0 -0
  397. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix1_poll.py +0 -0
  398. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix1_redact.py +0 -0
  399. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix2_launch.py +0 -0
  400. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix2_poll.py +0 -0
  401. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix2_redact.py +0 -0
  402. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix3_redact.py +0 -0
  403. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix4_fuzz.py +0 -0
  404. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix4_lexer.py +0 -0
  405. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix4_redact.py +0 -0
  406. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix4_sinks.py +0 -0
  407. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix5_lexer.py +0 -0
  408. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix5_redact.py +0 -0
  409. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix5_sinks.py +0 -0
  410. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix6_fuzz.py +0 -0
  411. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix6_hook.py +0 -0
  412. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix6_lexer.py +0 -0
  413. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix6_redact.py +0 -0
  414. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix6_sinks.py +0 -0
  415. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix6b_title.py +0 -0
  416. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix7_e2e.py +0 -0
  417. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix7_fuzz.py +0 -0
  418. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix7_redact.py +0 -0
  419. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix7_sinks.py +0 -0
  420. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix7_title.py +0 -0
  421. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix8_e2e.py +0 -0
  422. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix8_fuzz.py +0 -0
  423. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix8_redact.py +0 -0
  424. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix8_sinks.py +0 -0
  425. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix9_e2e.py +0 -0
  426. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix9_fuzz.py +0 -0
  427. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix9_redact.py +0 -0
  428. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_fix9_sinks.py +0 -0
  429. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_scan.py +0 -0
  430. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_table.py +0 -0
  431. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fc_wording.py +0 -0
  432. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_filter_scope.py +0 -0
  433. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fixa_discovery.py +0 -0
  434. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fixa_enqueue.py +0 -0
  435. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_fixa_reader.py +0 -0
  436. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_a1_hooks.py +0 -0
  437. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_a1_return.py +0 -0
  438. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_b1.py +0 -0
  439. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_c.py +0 -0
  440. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_commit_sentences.py +0 -0
  441. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_commits.py +0 -0
  442. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_consumers.py +0 -0
  443. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_corpus.py +0 -0
  444. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_denied.py +0 -0
  445. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_failed.py +0 -0
  446. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_here.py +0 -0
  447. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_hooks.py +0 -0
  448. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_registry.py +0 -0
  449. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_rescue.py +0 -0
  450. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_return.py +0 -0
  451. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_g_selfreport.py +0 -0
  452. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_hooks_benchmark.py +0 -0
  453. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_hooks_cli.py +0 -0
  454. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_journal_malformed_fields.py +0 -0
  455. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_journal_state.py +0 -0
  456. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_model_allocation_guard.py +0 -0
  457. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n1_markers.py +0 -0
  458. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n1_parent_index.py +0 -0
  459. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n2_lifecycle.py +0 -0
  460. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_apply.py +0 -0
  461. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_canonical_ids.py +0 -0
  462. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_context.py +0 -0
  463. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_demo.py +0 -0
  464. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_first_line.py +0 -0
  465. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_dedupe.py +0 -0
  466. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_demo.py +0 -0
  467. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_local_path.py +0 -0
  468. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_names.py +0 -0
  469. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_paths_c4.py +0 -0
  470. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_paths_c6.py +0 -0
  471. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_paths_s10.py +0 -0
  472. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_paths_s4.py +0 -0
  473. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_titles.py +0 -0
  474. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixb_hook_group.py +0 -0
  475. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixb_noident_pointer.py +0 -0
  476. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixb_repr_tokens.py +0 -0
  477. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixb_rescue_c1.py +0 -0
  478. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixb_run_ids.py +0 -0
  479. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixb_traversal.py +0 -0
  480. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixr2_ids.py +0 -0
  481. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixr2_paths.py +0 -0
  482. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixr2_raw_dupes.py +0 -0
  483. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_fixr2_schema2_hostile.py +0 -0
  484. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_flags.py +0 -0
  485. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_handler_errors.py +0 -0
  486. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_hooks.py +0 -0
  487. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_local_path.py +0 -0
  488. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_local_scrub.py +0 -0
  489. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_parser_errors.py +0 -0
  490. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_part2_slow_path.py +0 -0
  491. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_part3_sinks.py +0 -0
  492. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_pointers.py +0 -0
  493. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_reader.py +0 -0
  494. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_rescue.py +0 -0
  495. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_residual_sinks.py +0 -0
  496. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_rules_trend.py +0 -0
  497. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_run_fallback.py +0 -0
  498. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_run_local.py +0 -0
  499. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_run_noncanonical_agent.py +0 -0
  500. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_run_path_matrix.py +0 -0
  501. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_run_share.py +0 -0
  502. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_scan.py +0 -0
  503. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_slow_path.py +0 -0
  504. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n3b_watch.py +0 -0
  505. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4a_base_repo.py +0 -0
  506. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4a_commit_grammar.py +0 -0
  507. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4a_lexer.py +0 -0
  508. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4a_measure.py +0 -0
  509. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4a_readonly.py +0 -0
  510. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4a_rows.py +0 -0
  511. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4a_write_grammar.py +0 -0
  512. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4b1_discovery.py +0 -0
  513. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4b1_reader_facts.py +0 -0
  514. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4b1_schema2.py +0 -0
  515. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4b2_forms.py +0 -0
  516. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4b2_measure.py +0 -0
  517. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4b2_population.py +0 -0
  518. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4b2_reasons.py +0 -0
  519. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4b2_repo_groups.py +0 -0
  520. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4b2_rows.py +0 -0
  521. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4fixb_c3.py +0 -0
  522. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4fixb_differential.py +0 -0
  523. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4fixb_minor.py +0 -0
  524. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4fixb_s3.py +0 -0
  525. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4fixb_s4.py +0 -0
  526. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4fixb_s5_s10.py +0 -0
  527. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4fixc_a4.py +0 -0
  528. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4fixd_a5.py +0 -0
  529. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n4fixe_a5.py +0 -0
  530. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5_schema3_goldens.py +0 -0
  531. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5a1_schema3.py +0 -0
  532. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5a2_docs.py +0 -0
  533. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5b_detectors.py +0 -0
  534. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5b_inputs.py +0 -0
  535. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5b_severity.py +0 -0
  536. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5b_verdict.py +0 -0
  537. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5c1_gaps.py +0 -0
  538. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5c1_look.py +0 -0
  539. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5c1_observation_export.py +0 -0
  540. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5c1_observe.py +0 -0
  541. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5c1_rescue.py +0 -0
  542. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5c1_returned.py +0 -0
  543. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5c1_work_at_risk.py +0 -0
  544. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5c2_exit_codes.py +0 -0
  545. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5c2_misc.py +0 -0
  546. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5c2_status_repos.py +0 -0
  547. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5fix1_misc.py +0 -0
  548. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5fix1_plan.py +0 -0
  549. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5fix1_returned.py +0 -0
  550. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5fix1_severity.py +0 -0
  551. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n5fix1_status.py +0 -0
  552. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n6_alias_state.py +0 -0
  553. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n6_cwd.py +0 -0
  554. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n6_docs.py +0 -0
  555. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n6_fix1.py +0 -0
  556. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n6_here_run.py +0 -0
  557. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n6_here_scan.py +0 -0
  558. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n6_pins.py +0 -0
  559. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n6_resolve.py +0 -0
  560. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n6_roundtrip.py +0 -0
  561. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n7_detectors.py +0 -0
  562. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n8_fix1.py +0 -0
  563. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n8_fix2.py +0 -0
  564. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n8_k1_killed.py +0 -0
  565. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n8_k2_what_to_do.py +0 -0
  566. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n8_k4_rescue.py +0 -0
  567. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n8_k5_watch.py +0 -0
  568. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_n8_k6_rules.py +0 -0
  569. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_no_lazy_fetch.py +0 -0
  570. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_observe.py +0 -0
  571. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_privacy.py +0 -0
  572. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_r1_scan_risk_parity.py +0 -0
  573. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_reader.py +0 -0
  574. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_reader_session.py +0 -0
  575. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_readme.py +0 -0
  576. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_redact.py +0 -0
  577. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_rel_demo.py +0 -0
  578. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_rel_scan_all.py +0 -0
  579. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_rendered_privacy.py +0 -0
  580. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_report_session.py +0 -0
  581. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_report_v2.py +0 -0
  582. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_rescue.py +0 -0
  583. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_rules.py +0 -0
  584. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_rules_propose.py +0 -0
  585. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_rules_review.py +0 -0
  586. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_scan_triage.py +0 -0
  587. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_state.py +0 -0
  588. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_tooling_agent_scope.py +0 -0
  589. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_trend.py +0 -0
  590. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_watch.py +0 -0
  591. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_wheel.py +0 -0
  592. {agent_postmortem-0.3.5 → agent_postmortem-0.4.0}/tests/test_workflows.py +0 -0
@@ -5,6 +5,142 @@ All notable changes to this project are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.4.0]
9
+
10
+ 0.4 adds live mode: the tool checks a subagent's "done" the moment it returns, and tells the
11
+ main agent at its next tool call, with nothing to arm. It speaks only for what Claude Code does
12
+ not already say: an interrupt nothing in the session explains, a failure that left files
13
+ changed, and a return its own transcript contradicts. A second `scan` is fast.
14
+
15
+ ### Added
16
+
17
+ - Per-call live checks. The plugin runs `hook post-tool` after every tool call and
18
+ `hook prompt-submit` on every prompt. When one of the session's own subagents was interrupted
19
+ with nothing in the session to explain it, failed after changing files (with the count), or
20
+ returned while its own last entry is an error or the file its prompt asked for is missing,
21
+ the agent hears it at its next tool call, or at its next prompt if it sat idle. A call with
22
+ nothing new prints nothing: 58 ms median through the plugin with its bundled CLI, about
23
+ 130 ms with a CLI on PATH, which the plugin checks at every call.
24
+ Each ending is told once across every channel: these hooks, `watch --session`, Stop and the
25
+ resume sentence.
26
+ - `agent-postmortem watch --session [SESSION_ID|PATH]` follows one session, for a Claude Code
27
+ Monitor on a long background run. It prints a line only for the endings above, passes
28
+ background-session state changes through, says ENDED when the session exits, and a re-armed
29
+ watch never repeats a line.
30
+ - `agent-postmortem status [SESSION]` prints one snapshot of a session: its subagents running,
31
+ returned, interrupted or failed, what an interrupted one changed, returns their own
32
+ transcripts contradict, how each of its workflows ended, and the background sessions' states
33
+ as Claude Code records them. With no argument it reads the calling session. A second call
34
+ reads only what was appended (0.13 to 0.37 s warm on the maintainer's machine). A session
35
+ that ran shell commands in the background (for example a `codex exec` worker) gets one
36
+ COMMANDS line counting them by how Claude Code says they ended, with the oldest running
37
+ one's age, and saying that status does not check their output.
38
+ - `agent-postmortem statusline subagents` is a `subagentStatusLine` command for Claude Code's
39
+ subagent panel. It rewrites a row only when it has something to add: an interrupt nothing in
40
+ the session explains, how many paths an interrupted or failed subagent changed, a return its
41
+ own last entry contradicts, or quiet time over two minutes. `AGENT_POSTMORTEM_STATUSLINE=0`
42
+ turns it off.
43
+ - `hook agent-launched` runs on every Agent and Task launch. A foreground subagent that returns
44
+ on an error or without its prompted output file is reported in the same hook. The first
45
+ background launch of a session says that its subagents are checked when they return and
46
+ that a Monitor running `watch --session` is an option for a long run; a foreground launch
47
+ gets no hint, and `AGENT_POSTMORTEM_WATCH_HINT=0` turns it off.
48
+ - `hook session-start` on a resumed session says how many of its own subagents never returned
49
+ or were interrupted before it stopped, and how many paths they changed, unless a live
50
+ channel already told it.
51
+ - `watch <RUN_ID>` checks each result the moment it lands. A workflow agent that returns
52
+ `ok: false`, failed tests, failure counts or a report path that does not exist gets a CLAIM
53
+ line in place of its OK line, so the main agent hears about it before using the result.
54
+ - `agent-postmortem --version` names the build when it was installed from a git checkout, as
55
+ `agent-postmortem <version> (<branch> <commit>, <date>)`, with `+dirty` when tracked files
56
+ were modified. A release prints the plain version, and `hook capabilities` always does.
57
+ - The plugin keeps its bundled CLI at the plugin's version. Before, it installed one only when
58
+ none was found, so a plugin upgrade left the old CLI in place. Now SessionStart compares the
59
+ bundled CLI's version with the plugin's and, when they differ, reinstalls the plugin's
60
+ version in the background, at most once a day per version. A CLI you installed yourself on
61
+ PATH is never touched, and neither is a bundled CLI that is a link to a CLI outside the
62
+ plugin's data directory.
63
+
64
+ ### Changed
65
+
66
+ - A second `scan` is fast. Each run's analysis is cached by the exact size, time and inode of
67
+ every file it reads, and is read again the moment any of them changes, a path it checked
68
+ appears or disappears, the config or version changes, or its 72-hour report window closes.
69
+ A transcript that grew is parsed again on its own, so a live session with hundreds of
70
+ subagents no longer makes every scan slow: on the maintainer's machine a warm scan takes
71
+ 2.7 s after the largest session grew, where it took 17 to 23 s. A warm scan prints exactly
72
+ what a cold one prints. `--no-cache` reads everything.
73
+ - `scan --since D` no longer reads runs it is about to drop: a run whose files were all last
74
+ written more than a day before D is skipped before it is parsed. The result set is the same,
75
+ except for a run with no readable event at all, which has no start date and can be left out.
76
+ The totals line says `SINCE D` instead of `ALL TIME`.
77
+ - `scan` says it is working. On a terminal one stderr line counts the runs read and is erased
78
+ at the end; elsewhere, a scan of more than 50 runs prints one line when it starts.
79
+ - The `missing_artifact` path rule, shared with the live check: a path must start a token,
80
+ templates (`<case>`, `{id}`, `*`, `$VAR`) are skipped, and a period that ends the sentence
81
+ right after a path no longer hides it. On the maintainer's 355 runs this removes 12 info
82
+ findings (placeholders and slashes inside relative paths) and adds 16, all in sessions
83
+ built to leave that file missing.
84
+ - README: a table maps the live words KILL, FAILED and CLAIM to what `scan` and `run` print.
85
+
86
+ ### Fixed
87
+
88
+ - A subagent that another subagent launched in the foreground no longer stays RUNNING
89
+ ("quiet 7d") in `status`, the resume sentence and the per-call check after it returned. Its
90
+ result lands in its launcher's transcript as a "[Subagent hand-back]" with no notice in the
91
+ main one; live mode now reads it there, as `run` already did.
92
+ - The share-label fix of 0.3.6 also covers an attempt whose journal entry has no key and an
93
+ agent id that carries two labels. Such an attempt's interrupt finding is told as the run's
94
+ story, and its label is now replaced there too.
95
+ - A forked session no longer owns its parent's history when the copied entries carry the fork's
96
+ own `sessionId` (Claude Code 2.1.305 and later). The hook attachments in the copied block still
97
+ name the session that wrote them, and that now marks where the fork's own entries begin. On a
98
+ background session forked from its dispatcher, `status` had counted the dispatcher's subagent
99
+ as running and `run` had said WORK AT RISK unknown; both now read 0 subagents.
100
+ - `rescue plan` on a session names, under BRIEF FOR A RELAUNCH, only what the rescued subagents
101
+ wrote. It listed every subagent's files, so a relaunched agent was told to build on other
102
+ agents' work. A workflow's brief still covers the whole run.
103
+ - A commit run behind `NAME=VALUE`, `env NAME=VALUE` or `mise exec ... --` counts as a commit
104
+ command, so an agent that committed that way and printed no summary line reads `COMMITS ?`
105
+ instead of `0`.
106
+ - `scan --since <today>` could print more runs under SINCE than under LAST 7 DAYS. A run whose
107
+ files carry no timestamp is kept by `--since`; the 7-day line now places it by its newest
108
+ file write too.
109
+ - `status --local` and `--raw` print real agent ids (the `agent-<id>.jsonl` names), and a blocked
110
+ or failed background session's own name and working directory. Before, `--no-redact` printed
111
+ the same aliases as the default, which ends with one line saying what `--local` adds.
112
+ - `scan` marks the caller's own runs: a triage row ends in `(this session)` or
113
+ `(started by this session)` when `CLAUDE_CODE_SESSION_ID` names that session.
114
+ - A story's count agrees with its noun: `1 Bash command backgrounded`, not `1 Bash commands`.
115
+ - An unattributed interrupt's title says what the transcript logged: `..., cause unattributed,
116
+ logged as a user interrupt, consistent with a runtime kill`.
117
+ - `status` says how each of the session's workflows ended. Open ones keep their `watch` command,
118
+ a failed, killed or stopped one points at `run`, and completed ones are one count line, where
119
+ a long session printed one watch line per workflow.
120
+ - A worktree removed after its run (a merged branch, cleaned up) no longer reads as false
121
+ alarms: its report files are named as in a directory that no longer exists, WHAT TO DO stops
122
+ asking to check them, WORK AT RISK names the removed directory instead of a `git status`
123
+ command for it, and `status` makes no CLAIM of an output there.
124
+ - `rules propose` reads through scan's cache: 101 s on 382 runs before, 1.2 s warm.
125
+ - A no-match error repeats a typed `wf_` or `s_` id and says `agent-postmortem scan --all` lists
126
+ every run id.
127
+ - A FAILED workflow whose agents all completed says that Claude Code reported the failure and to
128
+ check what the workflow itself returned.
129
+
130
+ ## [0.3.6]
131
+
132
+ ### Fixed
133
+
134
+ - The default (share) output could print an agent's own label. A story sentence starts with
135
+ a capital, and when an agent's whole story was its interrupt finding, whose title starts
136
+ with the label, the label was capitalized before the name substitution ran. That
137
+ substitution matched names case-sensitively, so a workflow label such as `impl:t2` or a
138
+ subagent description starting with a lowercase letter printed as `Impl:t2` in the
139
+ STORIES section of `run` and in `stories[].text` of `run --json`. A story clause is now
140
+ capitalized after its names are replaced, so it reads `Agent-1 interrupted after ...`.
141
+ `scan`, `run --bug-report`, `rescue` and the hook messages never carried it, and none of
142
+ the 382 runs on the maintainer's machine hit it. `--local` and `--raw` are unchanged.
143
+
8
144
  ## [0.3.5]
9
145
 
10
146
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agent-postmortem
3
- Version: 0.3.5
3
+ Version: 0.4.0
4
4
  Summary: Reads the Claude Code logs already on your machine and tells you which agent's 'done' you can't trust, and what to run next.
5
5
  Project-URL: Homepage, https://github.com/zeyusuntt/agent-postmortem
6
6
  Project-URL: Issues, https://github.com/zeyusuntt/agent-postmortem/issues
@@ -35,7 +35,7 @@ uvx agent-postmortem scan
35
35
 
36
36
  That runs the latest release from PyPI with [uv](https://docs.astral.sh/uv/), which fetches Python 3.11 or later if you don't have it; nothing else to install. On a machine with no runs yet it says where it looked and suggests `agent-postmortem demo`.
37
37
 
38
- The command-line tool is local and read-only: Python standard library only, no LLM, no network access, and it never changes your files, transcripts, commits, or branches. (The Claude Code plugin's one network action, installing that tool, is described under Privacy; Limits notes two rare git index modes in which git's own `status` still updates its bookkeeping.) What it covers, below, lists the run shapes it handles and the ones it does not yet. Status: alpha, used so far on the maintainer's own machines. Claude Code only.
38
+ The command-line tool is local and read-only: Python standard library only, no LLM, no network access, and it never changes your files, transcripts, commits, or branches. (The Claude Code plugin's one network action, installing that tool into its own data directory or replacing that copy with the plugin's version, is described under Privacy; Limits notes two rare git index modes in which git's own `status` still updates its bookkeeping.) What it covers, below, lists the run shapes it handles and the ones it does not yet. Status: alpha, used so far on the maintainer's own machines. Claude Code only.
39
39
 
40
40
  [![CI](https://github.com/zeyusuntt/agent-postmortem/actions/workflows/ci.yml/badge.svg)](https://github.com/zeyusuntt/agent-postmortem/actions/workflows/ci.yml)
41
41
  [![PyPI](https://img.shields.io/pypi/v/agent-postmortem.svg)](https://pypi.org/project/agent-postmortem/)
@@ -88,9 +88,9 @@ Coverage today, checked against the failure reports in Claude Code's issue track
88
88
  | Workflow runs: runtime kills and retries | covered | kills logged as `[Request interrupted by user]` with no one at the keyboard, cold same-key retries and the time they cost, failed attempts with their cause (usage limit and reset time, machine sleep, server error), and a workflow the harness reported failed |
89
89
  | A "done" you can't trust | covered | an agent that completed while its own result reports failed tests, `ok: false` or blockers (`claim_contradiction`), or while its Codex companion call never started (`codex_unavailable`) |
90
90
  | Subagents that never returned | covered | WORK AT RISK says `unknown` instead of `none`, and names them |
91
- | `claude -p` (headless) | partial | killed and unreturned subagents show; the process's own exit status (for example exit 0 with `result: success` after a kill) is not in the transcript, so the tool cannot see it |
91
+ | `claude -p` (headless) | partial | killed and unreturned subagents show; with the plugin, a foreground subagent that returns on an error or without its prompted output file is reported at once. The process's own exit status (for example exit 0 with `result: success` after a kill) is not in the transcript, so the tool cannot see it |
92
92
  | Background subagents (`run_in_background`) | partial | killed and unreturned ones show; a "completed" that arrived while the agent's own background work was still running, or with a tool call that never got a result, is not flagged yet |
93
- | `claude --bg` sessions | not yet | each job's session is read like any session, but the job's own state (its "done" line, work still in flight) is not |
93
+ | `claude --bg` sessions | partial | each job's session is read like any session; `watch --session` and `status` pass the job's own state (working, blocked, done, stopped) through as Claude Code records it, and a resumed session hears which of its subagents never returned. Work still in flight inside the job is not modeled |
94
94
  | Agent teams | not yet | teammates and their idle or blocked states are not modeled |
95
95
  | Cross-session messages (`SendMessage`) | not yet | whether a message was delivered is not checked |
96
96
 
@@ -139,9 +139,12 @@ Verdict: 0.3 stops guessing. Severity, the WORK AT RISK block, and the run's end
139
139
  | `agent-postmortem rescue plan <run-id>` | Print a read-only decision packet: what a killed or failed attempt wrote, its repo state, declared checks, and the steps to take next. Never edits anything or runs a check itself. |
140
140
  | `agent-postmortem rescue status <run-id>` | Print what the main session's own transcript shows was run and observed after the run ended. Reports only what it saw, never a confirmation that a check passed. |
141
141
  | `agent-postmortem watch <run-id>` | Follow one running workflow: print START, then KILL, FAILED, OK (a result came back), and QUIET as they happen, then DONE or LIMIT. DONE comes the moment the session's own record says the run ended, or after a grace period once every journal key is resolved. Read-only, designed to be a Claude Code Monitor command. |
142
+ | `agent-postmortem watch --session [<session-id>]` | Follow one session while it runs, for a Claude Code Monitor: a line only when a subagent is interrupted with nothing in the session to explain it, fails after changing files, or returns while its own last entry says otherwise, plus background-session state changes. With no id it follows the session you are in. |
143
+ | `agent-postmortem status [<session-id>]` | One snapshot of a session: its subagents running, returned, interrupted or failed, what an interrupted one changed, returns its own transcript contradicts, and the background sessions' states. Reads only what was appended since the last call. |
144
+ | `agent-postmortem statusline subagents` | A `subagentStatusLine` command: adds a fact to a row of Claude Code's subagent panel and leaves every other row as Claude Code draws it. |
142
145
  | `agent-postmortem hook <event>` | Claude Code plugin hook entry point; reads hook JSON from stdin. |
143
146
 
144
- `scan`, `run`, `rules`, `trend`, and `rescue` take `--json` and the level flags; `apply` takes the level flags only; `demo` and `watch` take `--json` only; `hook` takes neither. The level flags are `--local` and `--raw` (`--no-redact` is the same as `--raw`); see Privacy.
147
+ `scan`, `run`, `rules`, `trend`, `rescue`, and `status` take `--json` and the level flags; `apply` takes the level flags only; `demo` and `watch` take `--json` only; `statusline` and `hook` take neither. The level flags are `--local` and `--raw` (`--no-redact` is the same as `--raw`); see Privacy.
145
148
 
146
149
  ## Why
147
150
 
@@ -187,7 +190,18 @@ Install the command-line tool first (Quick start above), so the plugin finds it
187
190
  /plugin install agent-postmortem@agent-postmortem
188
191
  ```
189
192
 
190
- Its hooks shell out to the same CLI, never touch a run directory, and never fail a turn. On `SessionStart` they summarize any run that finished since you last looked. On `Stop` and `StopFailure` they check every subagent and workflow unit spawned so far and print a finding the moment it is detected, not only at session end. On `SessionEnd` they run the read-only tooling checks over the main thread itself. On a `Workflow` launch they register the run immediately, so it is tracked even before its own directory exists, and hand the session the `watch` command to arm as a Monitor. Two skills come with it: `/postmortem` for the verdict and `/rescue` for the bounded rescue protocol.
193
+ Its hooks shell out to the same CLI, never touch a run directory, and never fail a turn. After every tool call and on every prompt they check the session's own subagents: one that was interrupted with nothing in the session to explain it, failed after changing files, or returned while its own transcript contradicts the return is reported to the agent at its next tool call, once. A call with nothing new prints nothing. On `SessionStart` they summarize any run that finished since you last looked, and a resumed session hears which of its own subagents never returned. On `Stop` and `StopFailure` they check every subagent and workflow unit spawned so far and print a finding the moment it is detected, not only at session end. On `SessionEnd` they run the read-only tooling checks over the main thread itself. On a `Workflow` launch they register the run immediately, so it is tracked even before its own directory exists, and hand the session the `watch` command to arm as a Monitor. Two skills come with it: `/postmortem` for the verdict and `/rescue` for the bounded rescue protocol.
194
+
195
+ For your own view, add the subagent panel command to `~/.claude/settings.json`, at the top level:
196
+
197
+ ```json
198
+ "subagentStatusLine": {
199
+ "type": "command",
200
+ "command": "agent-postmortem statusline subagents"
201
+ }
202
+ ```
203
+
204
+ It rewrites a row of the subagent panel only when it has a fact to add (an interrupt nothing explains, how many paths an interrupted or failed subagent changed, a return its own last entry contradicts, quiet over two minutes) and leaves every other row as Claude Code draws it. `agent-postmortem status` prints the same facts for the session you are in.
191
205
 
192
206
  ## What it detects
193
207
 
@@ -214,6 +228,17 @@ The honesty rule: `mislabeled_kill` blames the runtime only when the same key wa
214
228
 
215
229
  The verdict follows from those severities: `FAILED` when the harness itself reported the workflow failed (or a finding is critical, which no detector produces today), `DEGRADED` when any finding is major, `CLEAN` otherwise, with `(INCOMPLETE)` added when the tool could not read everything. `run`, `demo`, and `scan` exit 3 for `FAILED` and 4 for `INCOMPLETE` without `FAILED`; 3 wins when both apply. They exit 2 when there is nothing to judge: no run matches, or no runs at all under the root, in which case the message says where it looked (`~/.claude/projects` by default), what it reads, and to try `agent-postmortem demo`.
216
230
 
231
+ ### Live words and report words
232
+
233
+ `watch`, `status`, the statusline and the hooks speak in three words; `scan` and `run` speak in
234
+ verdicts and detector names. A line to settle in one is the same thing in the other:
235
+
236
+ | Live line | What it means | In `scan` and `run` |
237
+ |---|---|---|
238
+ | `KILL` | a subagent was interrupted and nothing in the session explains it | `mislabeled_kill`, and `silent_retry` when a workflow restarted it |
239
+ | `FAILED` | an agent failed (usage limit, API error, stall) or the harness failed the workflow | `attempt_failed`; the verdict `FAILED` and `workflow_failed` |
240
+ | `CLAIM` | an agent said it was done, but its own result or its last entry says otherwise | `claim_contradiction`, `missing_artifact`, and `codex_unavailable` when a Codex review never ran |
241
+
217
242
  ### Quieting a detector
218
243
 
219
244
  A detector you have already acted on, or one that does not apply to how you work, can be quieted without losing its data. List its id in `~/.config/agent-postmortem/config.toml` (or `$XDG_CONFIG_HOME/agent-postmortem/config.toml`):
@@ -237,7 +262,7 @@ The default output is meant for sharing: names become aliases, every path the to
237
262
  | local | `--local` | real labels, phase titles, agent ids, and project names | a recognized path is relative to the repository, `~/.../<name>` inside your home directory, otherwise `path-N`; never a recognized absolute path | only with `--evidence` |
238
263
  | raw | `--raw` | real | absolute | only with `--evidence` |
239
264
 
240
- At `local` and `raw` the first line of a command's output says so and says not to paste it (an error printed alone on stderr carries no such line; at the default and `local` levels an error never echoes a path or id, and at `raw` it prints as 0.2 did). Hooks and `watch` always print at the default level. An error message never echoes a path or id you typed back at the default level: it says `path-1` or `value-1` and names what it expected.
265
+ At `local` and `raw` the first line of a command's output says so and says not to paste it (an error printed alone on stderr carries no such line; at the default and `local` levels an error never echoes a path or a private id, and at `raw` it prints as 0.2 did). Hooks and `watch` always print at the default level. An error message never echoes a path or id you typed back at the default level: it says `path-1` or `value-1` and names what it expected. The one exception is a public run id (`wf_...`, `s_...`), which is what `scan` prints and is repeated as typed.
241
266
 
242
267
  An alias is a prefix, 12 or more hex characters, of an HMAC of the real id under a secret created once on your machine. Once assigned, an alias never changes: the same agent has the same alias in `run`, `rescue`, `watch`, and hook messages, the same project in `scan --all` and `run`, and nobody without the secret can turn an alias back into the id or match it to a transcript file. On top of that, the default and `local` levels replace your home directory with `~`, a bare account name with `user`, an email with `email:` plus a 6-character hash, a session id inside text with `uuid:` plus its last 4 hex digits, and any other project slug with `project:` plus a 6-character hash.
243
268
 
@@ -247,7 +272,7 @@ Paths inside free text (finding titles, diagnostics, error messages, and at `--l
247
272
 
248
273
  State lives in `$XDG_STATE_HOME/agent-postmortem/`, or `~/.local/state/agent-postmortem/` if that variable is unset: `state.json` (which findings a session already reported, and the rules the 0.1 `apply` command wrote, now read-only history), plus `secret` and `aliases.json` for the aliases. All three are mode 0600. The secret and the registry are never printed; `trend` shows the applied-rule history from `state.json` at the active level. If a command prints `stable aliases unavailable` on stderr, that output named everything `agent-1`, `agent-2`, and so on instead of by alias; nothing is repaired automatically, because a new secret would change every alias. Remove both `secret` and `aliases.json` to start over with new aliases.
249
274
 
250
- The plugin's one network action happens on `SessionStart` only: when it has not installed a CLI into its own data directory and no `agent-postmortem` on `PATH` passes its protocol check, it installs the CLI from PyPI at the plugin's own version, or from the matching GitHub tag if that install fails, into that data directory, retrying at most once every 24 hours on failure; opt out by setting `AGENT_POSTMORTEM_NO_AUTO_INSTALL=1`, or by installing the CLI yourself first.
275
+ The plugin's one network action happens on `SessionStart` only: it installs the CLI into its own data directory (uv keeps its download cache, and Python if it has to fetch one, in its usual places) from PyPI at the plugin's own version, or from the matching GitHub tag if that install fails. It does so when it has not installed a CLI there and no `agent-postmortem` on `PATH` passes its protocol check, retrying at most once every 24 hours on failure, and when the CLI it installed there reports another version than the plugin's (after a plugin upgrade), in the background and at most once a day per version. A CLI on `PATH`, or a bundled CLI that is a link to one outside that directory, is never replaced. Opt out of both by setting `AGENT_POSTMORTEM_NO_AUTO_INSTALL=1`, or by installing the CLI yourself first.
251
276
 
252
277
  ## How it was built
253
278
 
@@ -12,7 +12,7 @@ uvx agent-postmortem scan
12
12
 
13
13
  That runs the latest release from PyPI with [uv](https://docs.astral.sh/uv/), which fetches Python 3.11 or later if you don't have it; nothing else to install. On a machine with no runs yet it says where it looked and suggests `agent-postmortem demo`.
14
14
 
15
- The command-line tool is local and read-only: Python standard library only, no LLM, no network access, and it never changes your files, transcripts, commits, or branches. (The Claude Code plugin's one network action, installing that tool, is described under Privacy; Limits notes two rare git index modes in which git's own `status` still updates its bookkeeping.) What it covers, below, lists the run shapes it handles and the ones it does not yet. Status: alpha, used so far on the maintainer's own machines. Claude Code only.
15
+ The command-line tool is local and read-only: Python standard library only, no LLM, no network access, and it never changes your files, transcripts, commits, or branches. (The Claude Code plugin's one network action, installing that tool into its own data directory or replacing that copy with the plugin's version, is described under Privacy; Limits notes two rare git index modes in which git's own `status` still updates its bookkeeping.) What it covers, below, lists the run shapes it handles and the ones it does not yet. Status: alpha, used so far on the maintainer's own machines. Claude Code only.
16
16
 
17
17
  [![CI](https://github.com/zeyusuntt/agent-postmortem/actions/workflows/ci.yml/badge.svg)](https://github.com/zeyusuntt/agent-postmortem/actions/workflows/ci.yml)
18
18
  [![PyPI](https://img.shields.io/pypi/v/agent-postmortem.svg)](https://pypi.org/project/agent-postmortem/)
@@ -65,9 +65,9 @@ Coverage today, checked against the failure reports in Claude Code's issue track
65
65
  | Workflow runs: runtime kills and retries | covered | kills logged as `[Request interrupted by user]` with no one at the keyboard, cold same-key retries and the time they cost, failed attempts with their cause (usage limit and reset time, machine sleep, server error), and a workflow the harness reported failed |
66
66
  | A "done" you can't trust | covered | an agent that completed while its own result reports failed tests, `ok: false` or blockers (`claim_contradiction`), or while its Codex companion call never started (`codex_unavailable`) |
67
67
  | Subagents that never returned | covered | WORK AT RISK says `unknown` instead of `none`, and names them |
68
- | `claude -p` (headless) | partial | killed and unreturned subagents show; the process's own exit status (for example exit 0 with `result: success` after a kill) is not in the transcript, so the tool cannot see it |
68
+ | `claude -p` (headless) | partial | killed and unreturned subagents show; with the plugin, a foreground subagent that returns on an error or without its prompted output file is reported at once. The process's own exit status (for example exit 0 with `result: success` after a kill) is not in the transcript, so the tool cannot see it |
69
69
  | Background subagents (`run_in_background`) | partial | killed and unreturned ones show; a "completed" that arrived while the agent's own background work was still running, or with a tool call that never got a result, is not flagged yet |
70
- | `claude --bg` sessions | not yet | each job's session is read like any session, but the job's own state (its "done" line, work still in flight) is not |
70
+ | `claude --bg` sessions | partial | each job's session is read like any session; `watch --session` and `status` pass the job's own state (working, blocked, done, stopped) through as Claude Code records it, and a resumed session hears which of its subagents never returned. Work still in flight inside the job is not modeled |
71
71
  | Agent teams | not yet | teammates and their idle or blocked states are not modeled |
72
72
  | Cross-session messages (`SendMessage`) | not yet | whether a message was delivered is not checked |
73
73
 
@@ -116,9 +116,12 @@ Verdict: 0.3 stops guessing. Severity, the WORK AT RISK block, and the run's end
116
116
  | `agent-postmortem rescue plan <run-id>` | Print a read-only decision packet: what a killed or failed attempt wrote, its repo state, declared checks, and the steps to take next. Never edits anything or runs a check itself. |
117
117
  | `agent-postmortem rescue status <run-id>` | Print what the main session's own transcript shows was run and observed after the run ended. Reports only what it saw, never a confirmation that a check passed. |
118
118
  | `agent-postmortem watch <run-id>` | Follow one running workflow: print START, then KILL, FAILED, OK (a result came back), and QUIET as they happen, then DONE or LIMIT. DONE comes the moment the session's own record says the run ended, or after a grace period once every journal key is resolved. Read-only, designed to be a Claude Code Monitor command. |
119
+ | `agent-postmortem watch --session [<session-id>]` | Follow one session while it runs, for a Claude Code Monitor: a line only when a subagent is interrupted with nothing in the session to explain it, fails after changing files, or returns while its own last entry says otherwise, plus background-session state changes. With no id it follows the session you are in. |
120
+ | `agent-postmortem status [<session-id>]` | One snapshot of a session: its subagents running, returned, interrupted or failed, what an interrupted one changed, returns its own transcript contradicts, and the background sessions' states. Reads only what was appended since the last call. |
121
+ | `agent-postmortem statusline subagents` | A `subagentStatusLine` command: adds a fact to a row of Claude Code's subagent panel and leaves every other row as Claude Code draws it. |
119
122
  | `agent-postmortem hook <event>` | Claude Code plugin hook entry point; reads hook JSON from stdin. |
120
123
 
121
- `scan`, `run`, `rules`, `trend`, and `rescue` take `--json` and the level flags; `apply` takes the level flags only; `demo` and `watch` take `--json` only; `hook` takes neither. The level flags are `--local` and `--raw` (`--no-redact` is the same as `--raw`); see Privacy.
124
+ `scan`, `run`, `rules`, `trend`, `rescue`, and `status` take `--json` and the level flags; `apply` takes the level flags only; `demo` and `watch` take `--json` only; `statusline` and `hook` take neither. The level flags are `--local` and `--raw` (`--no-redact` is the same as `--raw`); see Privacy.
122
125
 
123
126
  ## Why
124
127
 
@@ -164,7 +167,18 @@ Install the command-line tool first (Quick start above), so the plugin finds it
164
167
  /plugin install agent-postmortem@agent-postmortem
165
168
  ```
166
169
 
167
- Its hooks shell out to the same CLI, never touch a run directory, and never fail a turn. On `SessionStart` they summarize any run that finished since you last looked. On `Stop` and `StopFailure` they check every subagent and workflow unit spawned so far and print a finding the moment it is detected, not only at session end. On `SessionEnd` they run the read-only tooling checks over the main thread itself. On a `Workflow` launch they register the run immediately, so it is tracked even before its own directory exists, and hand the session the `watch` command to arm as a Monitor. Two skills come with it: `/postmortem` for the verdict and `/rescue` for the bounded rescue protocol.
170
+ Its hooks shell out to the same CLI, never touch a run directory, and never fail a turn. After every tool call and on every prompt they check the session's own subagents: one that was interrupted with nothing in the session to explain it, failed after changing files, or returned while its own transcript contradicts the return is reported to the agent at its next tool call, once. A call with nothing new prints nothing. On `SessionStart` they summarize any run that finished since you last looked, and a resumed session hears which of its own subagents never returned. On `Stop` and `StopFailure` they check every subagent and workflow unit spawned so far and print a finding the moment it is detected, not only at session end. On `SessionEnd` they run the read-only tooling checks over the main thread itself. On a `Workflow` launch they register the run immediately, so it is tracked even before its own directory exists, and hand the session the `watch` command to arm as a Monitor. Two skills come with it: `/postmortem` for the verdict and `/rescue` for the bounded rescue protocol.
171
+
172
+ For your own view, add the subagent panel command to `~/.claude/settings.json`, at the top level:
173
+
174
+ ```json
175
+ "subagentStatusLine": {
176
+ "type": "command",
177
+ "command": "agent-postmortem statusline subagents"
178
+ }
179
+ ```
180
+
181
+ It rewrites a row of the subagent panel only when it has a fact to add (an interrupt nothing explains, how many paths an interrupted or failed subagent changed, a return its own last entry contradicts, quiet over two minutes) and leaves every other row as Claude Code draws it. `agent-postmortem status` prints the same facts for the session you are in.
168
182
 
169
183
  ## What it detects
170
184
 
@@ -191,6 +205,17 @@ The honesty rule: `mislabeled_kill` blames the runtime only when the same key wa
191
205
 
192
206
  The verdict follows from those severities: `FAILED` when the harness itself reported the workflow failed (or a finding is critical, which no detector produces today), `DEGRADED` when any finding is major, `CLEAN` otherwise, with `(INCOMPLETE)` added when the tool could not read everything. `run`, `demo`, and `scan` exit 3 for `FAILED` and 4 for `INCOMPLETE` without `FAILED`; 3 wins when both apply. They exit 2 when there is nothing to judge: no run matches, or no runs at all under the root, in which case the message says where it looked (`~/.claude/projects` by default), what it reads, and to try `agent-postmortem demo`.
193
207
 
208
+ ### Live words and report words
209
+
210
+ `watch`, `status`, the statusline and the hooks speak in three words; `scan` and `run` speak in
211
+ verdicts and detector names. A line to settle in one is the same thing in the other:
212
+
213
+ | Live line | What it means | In `scan` and `run` |
214
+ |---|---|---|
215
+ | `KILL` | a subagent was interrupted and nothing in the session explains it | `mislabeled_kill`, and `silent_retry` when a workflow restarted it |
216
+ | `FAILED` | an agent failed (usage limit, API error, stall) or the harness failed the workflow | `attempt_failed`; the verdict `FAILED` and `workflow_failed` |
217
+ | `CLAIM` | an agent said it was done, but its own result or its last entry says otherwise | `claim_contradiction`, `missing_artifact`, and `codex_unavailable` when a Codex review never ran |
218
+
194
219
  ### Quieting a detector
195
220
 
196
221
  A detector you have already acted on, or one that does not apply to how you work, can be quieted without losing its data. List its id in `~/.config/agent-postmortem/config.toml` (or `$XDG_CONFIG_HOME/agent-postmortem/config.toml`):
@@ -214,7 +239,7 @@ The default output is meant for sharing: names become aliases, every path the to
214
239
  | local | `--local` | real labels, phase titles, agent ids, and project names | a recognized path is relative to the repository, `~/.../<name>` inside your home directory, otherwise `path-N`; never a recognized absolute path | only with `--evidence` |
215
240
  | raw | `--raw` | real | absolute | only with `--evidence` |
216
241
 
217
- At `local` and `raw` the first line of a command's output says so and says not to paste it (an error printed alone on stderr carries no such line; at the default and `local` levels an error never echoes a path or id, and at `raw` it prints as 0.2 did). Hooks and `watch` always print at the default level. An error message never echoes a path or id you typed back at the default level: it says `path-1` or `value-1` and names what it expected.
242
+ At `local` and `raw` the first line of a command's output says so and says not to paste it (an error printed alone on stderr carries no such line; at the default and `local` levels an error never echoes a path or a private id, and at `raw` it prints as 0.2 did). Hooks and `watch` always print at the default level. An error message never echoes a path or id you typed back at the default level: it says `path-1` or `value-1` and names what it expected. The one exception is a public run id (`wf_...`, `s_...`), which is what `scan` prints and is repeated as typed.
218
243
 
219
244
  An alias is a prefix, 12 or more hex characters, of an HMAC of the real id under a secret created once on your machine. Once assigned, an alias never changes: the same agent has the same alias in `run`, `rescue`, `watch`, and hook messages, the same project in `scan --all` and `run`, and nobody without the secret can turn an alias back into the id or match it to a transcript file. On top of that, the default and `local` levels replace your home directory with `~`, a bare account name with `user`, an email with `email:` plus a 6-character hash, a session id inside text with `uuid:` plus its last 4 hex digits, and any other project slug with `project:` plus a 6-character hash.
220
245
 
@@ -224,7 +249,7 @@ Paths inside free text (finding titles, diagnostics, error messages, and at `--l
224
249
 
225
250
  State lives in `$XDG_STATE_HOME/agent-postmortem/`, or `~/.local/state/agent-postmortem/` if that variable is unset: `state.json` (which findings a session already reported, and the rules the 0.1 `apply` command wrote, now read-only history), plus `secret` and `aliases.json` for the aliases. All three are mode 0600. The secret and the registry are never printed; `trend` shows the applied-rule history from `state.json` at the active level. If a command prints `stable aliases unavailable` on stderr, that output named everything `agent-1`, `agent-2`, and so on instead of by alias; nothing is repaired automatically, because a new secret would change every alias. Remove both `secret` and `aliases.json` to start over with new aliases.
226
251
 
227
- The plugin's one network action happens on `SessionStart` only: when it has not installed a CLI into its own data directory and no `agent-postmortem` on `PATH` passes its protocol check, it installs the CLI from PyPI at the plugin's own version, or from the matching GitHub tag if that install fails, into that data directory, retrying at most once every 24 hours on failure; opt out by setting `AGENT_POSTMORTEM_NO_AUTO_INSTALL=1`, or by installing the CLI yourself first.
252
+ The plugin's one network action happens on `SessionStart` only: it installs the CLI into its own data directory (uv keeps its download cache, and Python if it has to fetch one, in its usual places) from PyPI at the plugin's own version, or from the matching GitHub tag if that install fails. It does so when it has not installed a CLI there and no `agent-postmortem` on `PATH` passes its protocol check, retrying at most once every 24 hours on failure, and when the CLI it installed there reports another version than the plugin's (after a plugin upgrade), in the background and at most once a day per version. A CLI on `PATH`, or a bundled CLI that is a link to one outside that directory, is never replaced. Opt out of both by setting `AGENT_POSTMORTEM_NO_AUTO_INSTALL=1`, or by installing the CLI yourself first.
228
253
 
229
254
  ## How it was built
230
255