agent-postmortem 0.3.6__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.
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/CHANGELOG.md +122 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/PKG-INFO +33 -8
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/README.md +32 -7
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/docs/DESIGN.md +739 -26
- agent_postmortem-0.4.0/hatch_build.py +74 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/plugin/.claude-plugin/plugin.json +1 -1
- agent_postmortem-0.4.0/plugin/README.md +84 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/plugin/hooks/hooks.json +31 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/plugin/hooks/run.sh +91 -4
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/pyproject.toml +7 -3
- agent_postmortem-0.4.0/scripts/live_fault_injection.py +283 -0
- agent_postmortem-0.4.0/scripts/live_replay.py +439 -0
- agent_postmortem-0.4.0/scripts/scan_cache_check.py +188 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/__init__.py +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/cli.py +785 -91
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/commands.py +47 -3
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/claim_contradiction.py +21 -4
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/mislabeled_kill.py +6 -3
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/missing_artifact.py +45 -14
- agent_postmortem-0.4.0/src/agent_postmortem/entry.py +40 -0
- agent_postmortem-0.4.0/src/agent_postmortem/hook_gate.py +175 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/hooks_cli.py +345 -18
- agent_postmortem-0.4.0/src/agent_postmortem/live.py +1812 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/markers.py +7 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/reader.py +254 -13
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/report.py +93 -40
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/rescue.py +16 -6
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/returns.py +15 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/severity.py +29 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/state.py +250 -0
- agent_postmortem-0.4.0/src/agent_postmortem/status.py +487 -0
- agent_postmortem-0.4.0/src/agent_postmortem/statusline.py +145 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/watch.py +43 -9
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules__local.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules__raw.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules__share.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_all__local.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_all__raw.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_all__share.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_propose__local.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_propose__raw.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_propose__share.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/run__local.txt +29 -7
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/run__raw.txt +29 -7
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/run__share.txt +29 -7
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/scan__local.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/scan__raw.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/scan__share.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/scan_all__local.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/scan_all__raw.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/scan_all__share.txt +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/trend__local.txt +12 -12
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/trend__raw.txt +12 -12
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/trend__share.txt +12 -12
- agent_postmortem-0.4.0/tests/live_helpers.py +139 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/synthetic-ids.txt +9 -0
- agent_postmortem-0.4.0/tests/test_build_identity.py +162 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fa_commit_no_id.py +49 -1
- agent_postmortem-0.4.0/tests/test_failed_meaning.py +36 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_help.py +3 -2
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_field_v03.py +1 -1
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_field_v03_more.py +1 -5
- agent_postmortem-0.4.0/tests/test_fork_hook_identity.py +232 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_launch_docs.py +2 -1
- agent_postmortem-0.4.0/tests/test_live_branch_review.py +304 -0
- agent_postmortem-0.4.0/tests/test_live_hooks.py +139 -0
- agent_postmortem-0.4.0/tests/test_live_nested_return.py +720 -0
- agent_postmortem-0.4.0/tests/test_live_plugin.py +214 -0
- agent_postmortem-0.4.0/tests/test_live_post_tool.py +420 -0
- agent_postmortem-0.4.0/tests/test_live_post_tool_review.py +473 -0
- agent_postmortem-0.4.0/tests/test_live_release_review.py +134 -0
- agent_postmortem-0.4.0/tests/test_live_replay.py +27 -0
- agent_postmortem-0.4.0/tests/test_live_review_fixes.py +340 -0
- agent_postmortem-0.4.0/tests/test_live_scan.py +133 -0
- agent_postmortem-0.4.0/tests/test_live_scan_cache.py +194 -0
- agent_postmortem-0.4.0/tests/test_live_session.py +466 -0
- agent_postmortem-0.4.0/tests/test_live_status.py +161 -0
- agent_postmortem-0.4.0/tests/test_live_statusline.py +124 -0
- agent_postmortem-0.4.0/tests/test_live_store.py +78 -0
- agent_postmortem-0.4.0/tests/test_live_watch_cli.py +113 -0
- agent_postmortem-0.4.0/tests/test_live_watch_workflow.py +98 -0
- agent_postmortem-0.4.0/tests/test_live_words_doc.py +27 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n6_stderr.py +7 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n8_k3_precursor.py +11 -2
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n9_docs.py +3 -3
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n9_release_gate.py +8 -7
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_no_write_surface.py +53 -21
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_plugin.py +35 -24
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_privacy_matrix.py +91 -0
- agent_postmortem-0.4.0/tests/test_release_review.py +80 -0
- agent_postmortem-0.4.0/tests/test_removed_worktree.py +177 -0
- agent_postmortem-0.4.0/tests/test_rescue_brief_scope.py +84 -0
- agent_postmortem-0.4.0/tests/test_rules_propose_cache.py +72 -0
- agent_postmortem-0.4.0/tests/test_run_id_errors.py +44 -0
- agent_postmortem-0.4.0/tests/test_scan_own_marker.py +95 -0
- agent_postmortem-0.4.0/tests/test_scan_totals_window.py +55 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_share_label_case.py +37 -3
- agent_postmortem-0.4.0/tests/test_status_commands.py +422 -0
- agent_postmortem-0.4.0/tests/test_status_disclosure.py +144 -0
- agent_postmortem-0.4.0/tests/test_status_workflows.py +159 -0
- agent_postmortem-0.4.0/tests/test_story_plurals.py +24 -0
- agent_postmortem-0.4.0/tests/test_transcript_cache.py +488 -0
- agent_postmortem-0.4.0/tests/test_transcript_memo.py +340 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/uv.lock +1 -1
- agent_postmortem-0.3.6/plugin/README.md +0 -58
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/.claude-plugin/marketplace.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/.github/ISSUE_TEMPLATE/confusing_output.yml +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/.github/ISSUE_TEMPLATE/detector_request.yml +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/.github/ISSUE_TEMPLATE/run_shape_not_covered.yml +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/.github/ISSUE_TEMPLATE/wrong_verdict.yml +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/.github/workflows/ci.yml +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/.github/workflows/release.yml +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/.gitignore +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/CLAUDE.md +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/CONTRIBUTING.md +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/LICENSE +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/plugin/skills/postmortem/SKILL.md +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/plugin/skills/rescue/SKILL.md +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/scripts/check-privacy.sh +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/scripts/export-public.sh +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/argerrors.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/claims.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/config.py +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/demo/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/__init__.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/attempt_failed.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/base.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/bash_backgrounded.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/bash_timeout.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/classifier_unavailable.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/codex_unavailable.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/codex_write_denied.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/git_cwd_mismatch.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/permission_denied.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/silent_retry.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/structured_output_failure.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/tool_json_error.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/wasted_time.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/detectors/workflow_failed.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/disclosure.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/hooks/model_allocation_guard.mjs +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/ledger.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/models.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/observe.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/rules.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/src/agent_postmortem/trend.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/conftest.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/README.md +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/demo__share.txt +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rescue_plan__local.txt +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rescue_plan__raw.txt +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rescue_plan__share.txt +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rescue_status__local.txt +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rescue_status__raw.txt +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rescue_status__share.txt +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_review__local.txt +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_review__raw.txt +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_review__share.txt +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_show__local.txt +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_show__raw.txt +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/golden/schema3/rules_show__share.txt +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000002.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000002.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000003.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000003.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000004.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000004.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000005.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000005.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000006.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000006.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000007.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000007.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a1.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a1.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a2.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a2.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a3.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a3.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a4.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a4.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_causes/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afa10000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afa10000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afa10000000000002.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afa10000000000002.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afb10000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afb10000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/attempt_failed_retry_tail/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/bash_backgrounded_timeout/agent-ac300000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/bash_backgrounded_timeout/agent-ac300000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/bash_backgrounded_timeout/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/claim_contradiction/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/clean_run/agent-ac100000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/clean_run/agent-ac100000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/clean_run/agent-ac100000000000002.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/clean_run/agent-ac100000000000002.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/clean_run/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000002.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000002.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000003.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000003.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000004.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000004.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_unavailable/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000002.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000002.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000003.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000003.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/codex_write_denied/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/evidence_noise/agent-acf00000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/evidence_noise/agent-acf00000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/evidence_noise/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ae300000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/incomplete_journal/agent-ad000000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/incomplete_journal/agent-ad000000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/incomplete_journal/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_malformed_fields/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_orphan_failed/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad200000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad200000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad300000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad300000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad400000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad400000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad400000000000002.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad400000000000002.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad500000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad500000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad500000000000002.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad500000000000002.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad600000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad600000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad600000000000002.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad600000000000002.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad700000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad700000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad800000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/agent-ad800000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_resolved/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_unresolved/agent-ad900000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_unresolved/agent-ad900000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/journal_state_unresolved/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/missing_artifact/agent-ac600000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/missing_artifact/agent-ac600000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/missing_artifact/agent-ac600000000000002.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/missing_artifact/agent-ac600000000000002.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/missing_artifact/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000002.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000002.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000003.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000003.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000004.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000004.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000005.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/agent-af000000000000005.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/self_reference/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_bridge_only/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac700000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac700000000000002.jsonl +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_compaction/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-aca00000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_compaction/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_dedup/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_envelope/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac900000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_envelope/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_human_interrupt/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_parent_stop/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_unattributed_long/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → 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
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/session_unattributed_short/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/structured_output_corrupt/agent-ac400000000000001.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/structured_output_corrupt/agent-ac400000000000001.meta.json +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/fixtures/runs/structured_output_corrupt/journal.jsonl +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/g_corpus_support.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/g_helpers.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/g_independent_return.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/n3b_helpers.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/n3b_planted.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/n4_reference_commands.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/n4b2_helpers.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/n5b_helpers.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/n5c1_helpers.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/n5c2_helpers.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/n6_helpers.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/privacy_rules.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/rule_fixtures.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_attempt_facts.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_attempt_failed.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_attribution.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_bug_report.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_claim_contradiction.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_cli_smoke.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_codex_unavailable.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_config.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_deep_lines.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_detectors_base.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_detectors_core.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_detectors_registry.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_detectors_tooling.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_disclosure_primitives.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_empty_state.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_export.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_export_public.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fa_fork.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fa_generations.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fa_path_token.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fa_return_boundary.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fa_wasted.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fb_here.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fb_live_now.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fb_rescue_live.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix10_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix11_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix12_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix1_commit.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix1_launch.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix1_poll.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix1_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix2_launch.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix2_poll.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix2_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix3_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix4_fuzz.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix4_lexer.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix4_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix4_sinks.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix5_lexer.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix5_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix5_sinks.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix6_fuzz.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix6_hook.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix6_lexer.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix6_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix6_sinks.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix6b_title.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix7_e2e.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix7_fuzz.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix7_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix7_sinks.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix7_title.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix8_e2e.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix8_fuzz.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix8_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix8_sinks.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix9_e2e.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix9_fuzz.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix9_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_fix9_sinks.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_scan.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_table.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fc_wording.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_filter_scope.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fixa_discovery.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fixa_enqueue.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_fixa_reader.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_a1_hooks.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_a1_return.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_b1.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_c.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_commit_sentences.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_commits.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_consumers.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_corpus.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_denied.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_failed.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_here.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_hooks.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_registry.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_rescue.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_return.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_g_selfreport.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_hooks_benchmark.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_hooks_cli.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_journal_malformed_fields.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_journal_state.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_model_allocation_guard.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n1_markers.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n1_parent_index.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n2_lifecycle.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_apply.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_canonical_ids.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_context.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_demo.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_first_line.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_dedupe.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_demo.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_local_path.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_names.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_paths_c4.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_paths_c6.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_paths_s10.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_paths_s4.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixa_titles.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixb_hook_group.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixb_noident_pointer.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixb_repr_tokens.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixb_rescue_c1.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixb_run_ids.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixb_traversal.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixr2_ids.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixr2_paths.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixr2_raw_dupes.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_fixr2_schema2_hostile.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_flags.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_handler_errors.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_hooks.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_local_path.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_local_scrub.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_parser_errors.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_part2_slow_path.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_part3_sinks.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_pointers.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_reader.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_rescue.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_residual_sinks.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_rules_trend.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_run_fallback.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_run_local.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_run_noncanonical_agent.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_run_path_matrix.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_run_share.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_scan.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_slow_path.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n3b_watch.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4a_base_repo.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4a_commit_grammar.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4a_lexer.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4a_measure.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4a_readonly.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4a_rows.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4a_write_grammar.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4b1_discovery.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4b1_reader_facts.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4b1_schema2.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4b2_forms.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4b2_measure.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4b2_population.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4b2_reasons.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4b2_repo_groups.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4b2_rows.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4fixb_c3.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4fixb_differential.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4fixb_minor.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4fixb_s3.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4fixb_s4.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4fixb_s5_s10.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4fixc_a4.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4fixd_a5.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n4fixe_a5.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5_schema3_goldens.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5a1_schema3.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5a2_docs.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5b_detectors.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5b_inputs.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5b_severity.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5b_verdict.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5c1_gaps.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5c1_look.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5c1_observation_export.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5c1_observe.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5c1_rescue.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5c1_returned.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5c1_work_at_risk.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5c2_exit_codes.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5c2_misc.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5c2_status_repos.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5fix1_misc.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5fix1_plan.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5fix1_returned.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5fix1_severity.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n5fix1_status.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n6_alias_state.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n6_cwd.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n6_docs.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n6_fix1.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n6_here_run.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n6_here_scan.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n6_pins.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n6_resolve.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n6_roundtrip.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n7_detectors.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n8_fix1.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n8_fix2.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n8_k1_killed.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n8_k2_what_to_do.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n8_k4_rescue.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n8_k5_watch.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_n8_k6_rules.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_no_lazy_fetch.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_observe.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_privacy.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_r1_scan_risk_parity.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_reader.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_reader_session.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_readme.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_redact.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_rel_demo.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_rel_scan_all.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_rendered_privacy.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_report_session.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_report_v2.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_rescue.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_rules.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_rules_propose.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_rules_review.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_scan_triage.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_state.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_tooling_agent_scope.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_trend.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_watch.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_wheel.py +0 -0
- {agent_postmortem-0.3.6 → agent_postmortem-0.4.0}/tests/test_workflows.py +0 -0
|
@@ -5,6 +5,128 @@ 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
|
+
|
|
8
130
|
## [0.3.6]
|
|
9
131
|
|
|
10
132
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agent-postmortem
|
|
3
|
-
Version: 0.
|
|
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
|
[](https://github.com/zeyusuntt/agent-postmortem/actions/workflows/ci.yml)
|
|
41
41
|
[](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 |
|
|
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 `
|
|
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:
|
|
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
|
[](https://github.com/zeyusuntt/agent-postmortem/actions/workflows/ci.yml)
|
|
18
18
|
[](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 |
|
|
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 `
|
|
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:
|
|
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
|
|