agent-postmortem 0.3.4__tar.gz → 0.3.6__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.4 → agent_postmortem-0.3.6}/CHANGELOG.md +31 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/CONTRIBUTING.md +14 -16
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/PKG-INFO +11 -9
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/README.md +8 -6
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/docs/DESIGN.md +25 -10
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/plugin/.claude-plugin/plugin.json +1 -1
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/plugin/README.md +4 -3
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/plugin/hooks/run.sh +16 -8
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/plugin/skills/postmortem/SKILL.md +1 -1
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/pyproject.toml +3 -3
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/__init__.py +1 -1
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/report.py +81 -35
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/synthetic-ids.txt +1 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_launch_docs.py +15 -10
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n9_docs.py +3 -3
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_plugin.py +42 -11
- agent_postmortem-0.3.6/tests/test_share_label_case.py +284 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/uv.lock +1 -1
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/.claude-plugin/marketplace.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/.github/ISSUE_TEMPLATE/confusing_output.yml +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/.github/ISSUE_TEMPLATE/detector_request.yml +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/.github/ISSUE_TEMPLATE/run_shape_not_covered.yml +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/.github/ISSUE_TEMPLATE/wrong_verdict.yml +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/.github/workflows/ci.yml +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/.github/workflows/release.yml +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/.gitignore +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/CLAUDE.md +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/LICENSE +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/plugin/hooks/hooks.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/plugin/skills/rescue/SKILL.md +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/scripts/check-privacy.sh +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/scripts/export-public.sh +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/argerrors.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/claims.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/cli.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/commands.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/config.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/src/agent_postmortem/demo/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/__init__.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/attempt_failed.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/base.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/bash_backgrounded.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/bash_timeout.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/claim_contradiction.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/classifier_unavailable.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/codex_unavailable.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/codex_write_denied.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/git_cwd_mismatch.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/mislabeled_kill.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/missing_artifact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/permission_denied.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/silent_retry.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/structured_output_failure.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/tool_json_error.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/wasted_time.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/detectors/workflow_failed.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/disclosure.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/hooks/model_allocation_guard.mjs +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/hooks_cli.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/ledger.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/markers.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/models.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/observe.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/reader.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/rescue.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/returns.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/rules.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/severity.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/state.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/trend.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/src/agent_postmortem/watch.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/conftest.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/README.md +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/demo__share.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rescue_plan__local.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rescue_plan__raw.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rescue_plan__share.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rescue_status__local.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rescue_status__raw.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rescue_status__share.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules__local.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules__raw.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules__share.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules_all__local.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules_all__raw.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules_all__share.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules_propose__local.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules_propose__raw.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules_propose__share.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules_review__local.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules_review__raw.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules_review__share.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules_show__local.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules_show__raw.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/rules_show__share.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/run__local.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/run__raw.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/run__share.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/scan__local.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/scan__raw.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/scan__share.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/scan_all__local.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/scan_all__raw.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/scan_all__share.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/trend__local.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/trend__raw.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/golden/schema3/trend__share.txt +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000002.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000002.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000003.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000003.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000004.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000004.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000005.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000005.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000006.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000006.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000007.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af100000000000007.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a1.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a1.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a2.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a2.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a3.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a3.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a4.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/agent-af1000000000000a4.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_causes/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afa10000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afa10000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afa10000000000002.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afa10000000000002.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afb10000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_retry_tail/agent-afb10000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/attempt_failed_retry_tail/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/bash_backgrounded_timeout/agent-ac300000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/bash_backgrounded_timeout/agent-ac300000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/bash_backgrounded_timeout/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/claim_contradiction/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/clean_run/agent-ac100000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/clean_run/agent-ac100000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/clean_run/agent-ac100000000000002.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/clean_run/agent-ac100000000000002.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/clean_run/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000002.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000002.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000003.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000003.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000004.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_unavailable/agent-ae100000000000004.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_unavailable/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000002.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000002.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000003.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_write_denied/agent-ac500000000000003.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/codex_write_denied/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/evidence_noise/agent-acf00000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/evidence_noise/agent-acf00000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/evidence_noise/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ae300000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ae300000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/hook_session/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/incomplete_journal/agent-ad000000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/incomplete_journal/agent-ad000000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/incomplete_journal/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_malformed_fields/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_orphan_failed/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad200000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad200000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad300000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad300000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad400000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad400000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad400000000000002.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad400000000000002.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad500000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad500000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad500000000000002.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad500000000000002.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad600000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad600000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad600000000000002.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad600000000000002.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad700000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad700000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad800000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/agent-ad800000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_resolved/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_unresolved/agent-ad900000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_unresolved/agent-ad900000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/journal_state_unresolved/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/missing_artifact/agent-ac600000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/missing_artifact/agent-ac600000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/missing_artifact/agent-ac600000000000002.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/missing_artifact/agent-ac600000000000002.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/missing_artifact/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/self_reference/agent-af000000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/self_reference/agent-af000000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/self_reference/agent-af000000000000002.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/self_reference/agent-af000000000000002.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/self_reference/agent-af000000000000003.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/self_reference/agent-af000000000000003.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/self_reference/agent-af000000000000004.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/self_reference/agent-af000000000000004.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/self_reference/agent-af000000000000005.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/self_reference/agent-af000000000000005.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/self_reference/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_bridge_only/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac700000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac700000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac700000000000002.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac700000000000002.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_clean/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_compaction/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-aca00000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_compaction/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-aca00000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_compaction/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_dedup/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_envelope/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac900000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_envelope/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ac900000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_envelope/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_human_interrupt/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-acc00000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_human_interrupt/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_parent_stop/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-acb00000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_parent_stop/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_unattributed_long/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-acd00000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_unattributed_long/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_unattributed_short/-home-user-project/00000000-0000-4000-8000-000000000000/subagents/agent-ace00000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/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.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/session_unattributed_short/-home-user-project/00000000-0000-4000-8000-000000000000.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/structured_output_corrupt/agent-ac400000000000001.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/structured_output_corrupt/agent-ac400000000000001.meta.json +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/fixtures/runs/structured_output_corrupt/journal.jsonl +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/g_corpus_support.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/g_helpers.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/g_independent_return.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/n3b_helpers.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/n3b_planted.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/n4_reference_commands.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/n4b2_helpers.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/n5b_helpers.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/n5c1_helpers.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/n5c2_helpers.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/n6_helpers.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/privacy_rules.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/rule_fixtures.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_attempt_facts.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_attempt_failed.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_attribution.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_bug_report.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_claim_contradiction.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_cli_smoke.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_codex_unavailable.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_config.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_deep_lines.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_detectors_base.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_detectors_core.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_detectors_registry.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_detectors_tooling.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_disclosure_primitives.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_empty_state.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_export.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_export_public.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fa_commit_no_id.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fa_fork.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fa_generations.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fa_path_token.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fa_return_boundary.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fa_wasted.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fb_here.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fb_live_now.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fb_rescue_live.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix10_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix11_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix12_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix1_commit.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix1_launch.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix1_poll.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix1_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix2_launch.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix2_poll.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix2_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix3_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix4_fuzz.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix4_lexer.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix4_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix4_sinks.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix5_lexer.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix5_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix5_sinks.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix6_fuzz.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix6_hook.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix6_lexer.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix6_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix6_sinks.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix6b_title.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix7_e2e.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix7_fuzz.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix7_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix7_sinks.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix7_title.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix8_e2e.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix8_fuzz.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix8_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix8_sinks.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix9_e2e.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix9_fuzz.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix9_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_fix9_sinks.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_help.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_scan.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_table.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fc_wording.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_field_v03.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_field_v03_more.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_filter_scope.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fixa_discovery.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fixa_enqueue.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_fixa_reader.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_a1_hooks.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_a1_return.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_b1.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_c.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_commit_sentences.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_commits.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_consumers.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_corpus.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_denied.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_failed.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_here.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_hooks.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_registry.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_rescue.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_return.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_g_selfreport.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_hooks_benchmark.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_hooks_cli.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_journal_malformed_fields.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_journal_state.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_model_allocation_guard.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n1_markers.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n1_parent_index.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n2_lifecycle.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_apply.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_canonical_ids.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_context.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_demo.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_first_line.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixa_dedupe.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixa_demo.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixa_local_path.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixa_names.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixa_paths_c4.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixa_paths_c6.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixa_paths_s10.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixa_paths_s4.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixa_titles.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixb_hook_group.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixb_noident_pointer.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixb_repr_tokens.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixb_rescue_c1.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixb_run_ids.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixb_traversal.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixr2_ids.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixr2_paths.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixr2_raw_dupes.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_fixr2_schema2_hostile.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_flags.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_handler_errors.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_hooks.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_local_path.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_local_scrub.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_parser_errors.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_part2_slow_path.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_part3_sinks.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_pointers.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_reader.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_rescue.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_residual_sinks.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_rules_trend.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_run_fallback.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_run_local.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_run_noncanonical_agent.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_run_path_matrix.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_run_share.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_scan.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_slow_path.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n3b_watch.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4a_base_repo.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4a_commit_grammar.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4a_lexer.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4a_measure.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4a_readonly.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4a_rows.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4a_write_grammar.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4b1_discovery.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4b1_reader_facts.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4b1_schema2.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4b2_forms.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4b2_measure.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4b2_population.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4b2_reasons.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4b2_repo_groups.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4b2_rows.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4fixb_c3.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4fixb_differential.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4fixb_minor.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4fixb_s3.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4fixb_s4.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4fixb_s5_s10.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4fixc_a4.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4fixd_a5.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n4fixe_a5.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5_schema3_goldens.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5a1_schema3.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5a2_docs.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5b_detectors.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5b_inputs.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5b_severity.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5b_verdict.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5c1_gaps.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5c1_look.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5c1_observation_export.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5c1_observe.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5c1_rescue.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5c1_returned.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5c1_work_at_risk.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5c2_exit_codes.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5c2_misc.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5c2_status_repos.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5fix1_misc.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5fix1_plan.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5fix1_returned.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5fix1_severity.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n5fix1_status.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n6_alias_state.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n6_cwd.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n6_docs.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n6_fix1.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n6_here_run.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n6_here_scan.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n6_pins.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n6_resolve.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n6_roundtrip.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n6_stderr.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n7_detectors.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n8_fix1.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n8_fix2.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n8_k1_killed.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n8_k2_what_to_do.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n8_k3_precursor.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n8_k4_rescue.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n8_k5_watch.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n8_k6_rules.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_n9_release_gate.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_no_lazy_fetch.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_no_write_surface.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_observe.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_privacy.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_privacy_matrix.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_r1_scan_risk_parity.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_reader.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_reader_session.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_readme.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_redact.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_rel_demo.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_rel_scan_all.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_rendered_privacy.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_report_session.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_report_v2.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_rescue.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_rules.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_rules_propose.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_rules_review.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_scan_triage.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_state.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_tooling_agent_scope.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_trend.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_watch.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_wheel.py +0 -0
- {agent_postmortem-0.3.4 → agent_postmortem-0.3.6}/tests/test_workflows.py +0 -0
|
@@ -5,6 +5,37 @@ 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.3.6]
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- The default (share) output could print an agent's own label. A story sentence starts with
|
|
13
|
+
a capital, and when an agent's whole story was its interrupt finding, whose title starts
|
|
14
|
+
with the label, the label was capitalized before the name substitution ran. That
|
|
15
|
+
substitution matched names case-sensitively, so a workflow label such as `impl:t2` or a
|
|
16
|
+
subagent description starting with a lowercase letter printed as `Impl:t2` in the
|
|
17
|
+
STORIES section of `run` and in `stories[].text` of `run --json`. A story clause is now
|
|
18
|
+
capitalized after its names are replaced, so it reads `Agent-1 interrupted after ...`.
|
|
19
|
+
`scan`, `run --bug-report`, `rescue` and the hook messages never carried it, and none of
|
|
20
|
+
the 382 runs on the maintainer's machine hit it. `--local` and `--raw` are unchanged.
|
|
21
|
+
|
|
22
|
+
## [0.3.5]
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- The PyPI summary is the positioning line the plugin already uses: it reads the Claude Code
|
|
27
|
+
logs already on your machine and tells you which agent's "done" you can't trust. The package
|
|
28
|
+
is classified as Alpha, matching the README's status line, and the README's license badge
|
|
29
|
+
links to the LICENSE file by full URL, so it also works on the PyPI page. PyPI version and
|
|
30
|
+
Python version badges join the CI and license badges.
|
|
31
|
+
- Installs come from PyPI now. The README's first command is `uvx agent-postmortem scan`, and
|
|
32
|
+
Quick start, the plugin README and the `/postmortem` skill say `uv tool install
|
|
33
|
+
agent-postmortem`. No git is needed.
|
|
34
|
+
- The plugin installs its CLI from PyPI at the plugin's own version. It falls back to the
|
|
35
|
+
matching GitHub tag only if that install fails, for example in the minutes between a release
|
|
36
|
+
reaching GitHub and reaching PyPI. Both attempts share the one 60-second deadline the single
|
|
37
|
+
install had. The missing-CLI hint says `uv tool install agent-postmortem`.
|
|
38
|
+
|
|
8
39
|
## [0.3.4]
|
|
9
40
|
|
|
10
41
|
### Fixed
|
|
@@ -70,22 +70,20 @@ sets.
|
|
|
70
70
|
|
|
71
71
|
Releases are cut by pushing a `v*` tag, which `.github/workflows/release.yml`
|
|
72
72
|
picks up: it runs the tests, builds the wheel and sdist, runs the privacy
|
|
73
|
-
check against them,
|
|
74
|
-
that version's CHANGELOG section
|
|
75
|
-
(
|
|
76
|
-
and so does the plugin
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
and plugin/hooks/run.sh back to PyPI in one release (tests/test_launch_docs.py
|
|
88
|
-
and tests/test_plugin.py pin them).
|
|
73
|
+
check against them, makes the GitHub release with the built files and
|
|
74
|
+
that version's CHANGELOG section, and publishes both files to PyPI through a
|
|
75
|
+
trusted publisher (no API token is stored in this repository). Users install
|
|
76
|
+
from PyPI (`uv tool install agent-postmortem`), and so does the plugin, pinned
|
|
77
|
+
to its own version, with the matching GitHub tag as a fallback for the minutes
|
|
78
|
+
between the tag and the PyPI upload (tests/test_launch_docs.py and
|
|
79
|
+
tests/test_plugin.py pin these install lines).
|
|
80
|
+
|
|
81
|
+
The publish job runs only while the repository variable `PUBLISH_PYPI` is
|
|
82
|
+
`true` (Settings, Secrets and variables, Actions, Variables); without it the
|
|
83
|
+
job is skipped, not failed. If a release's publish was skipped, set the
|
|
84
|
+
variable, re-run the release workflow for that tag (Actions, Release, the
|
|
85
|
+
tag's run, Re-run all jobs), and check that installing `agent-postmortem`
|
|
86
|
+
from PyPI gives that version.
|
|
89
87
|
|
|
90
88
|
One-time trusted-publisher setup on pypi.org, before the first tagged
|
|
91
89
|
release:
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agent-postmortem
|
|
3
|
-
Version: 0.3.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.3.6
|
|
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
|
|
7
7
|
Project-URL: Changelog, https://github.com/zeyusuntt/agent-postmortem/blob/main/CHANGELOG.md
|
|
8
8
|
License: MIT
|
|
9
9
|
License-File: LICENSE
|
|
10
|
-
Classifier: Development Status ::
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
11
|
Classifier: Environment :: Console
|
|
12
12
|
Classifier: Intended Audience :: Developers
|
|
13
13
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -30,15 +30,17 @@ agent-postmortem reads the transcripts Claude Code already wrote under `~/.claud
|
|
|
30
30
|
On the maintainer's machine (scan 2026-10-27, 0.3.2), 13 of 166 workflow runs launched at least one agent's task a second time, and 10.2 hours went to retries and to attempts that ended without a result.
|
|
31
31
|
|
|
32
32
|
```
|
|
33
|
-
uvx
|
|
33
|
+
uvx agent-postmortem scan
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
That runs the
|
|
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
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.
|
|
39
39
|
|
|
40
40
|
[](https://github.com/zeyusuntt/agent-postmortem/actions/workflows/ci.yml)
|
|
41
|
-
[](https://pypi.org/project/agent-postmortem/)
|
|
42
|
+
[](https://pypi.org/project/agent-postmortem/)
|
|
43
|
+
[](https://github.com/zeyusuntt/agent-postmortem/blob/main/LICENSE)
|
|
42
44
|
|
|
43
45
|
```
|
|
44
46
|
RUN wf_00000000-d30 DEGRADED ended 2026-01-06 19:55Z
|
|
@@ -96,10 +98,10 @@ If you run one of the partial or not-yet shapes, please open a ["my run shape is
|
|
|
96
98
|
|
|
97
99
|
## Quick start
|
|
98
100
|
|
|
99
|
-
Install the command-line tool from
|
|
101
|
+
Install the command-line tool from PyPI with [uv](https://docs.astral.sh/uv/) (it fetches Python 3.11 or later if you don't have it), then try it:
|
|
100
102
|
|
|
101
103
|
```
|
|
102
|
-
uv tool install
|
|
104
|
+
uv tool install agent-postmortem
|
|
103
105
|
agent-postmortem demo
|
|
104
106
|
agent-postmortem scan
|
|
105
107
|
agent-postmortem run <run-id>
|
|
@@ -245,7 +247,7 @@ Paths inside free text (finding titles, diagnostics, error messages, and at `--l
|
|
|
245
247
|
|
|
246
248
|
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.
|
|
247
249
|
|
|
248
|
-
The plugin's one network action happens on `SessionStart` only: when it has not installed a CLI into its own data directory and no `agent-postmortem` on `PATH` passes its protocol check, it installs the CLI from
|
|
250
|
+
The plugin's one network action happens on `SessionStart` only: when it has not installed a CLI into its own data directory and no `agent-postmortem` on `PATH` passes its protocol check, it installs the CLI from PyPI at the plugin's own version, or from the matching GitHub tag if that install fails, into that data directory, retrying at most once every 24 hours on failure; opt out by setting `AGENT_POSTMORTEM_NO_AUTO_INSTALL=1`, or by installing the CLI yourself first.
|
|
249
251
|
|
|
250
252
|
## How it was built
|
|
251
253
|
|
|
@@ -7,15 +7,17 @@ agent-postmortem reads the transcripts Claude Code already wrote under `~/.claud
|
|
|
7
7
|
On the maintainer's machine (scan 2026-10-27, 0.3.2), 13 of 166 workflow runs launched at least one agent's task a second time, and 10.2 hours went to retries and to attempts that ended without a result.
|
|
8
8
|
|
|
9
9
|
```
|
|
10
|
-
uvx
|
|
10
|
+
uvx agent-postmortem scan
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
That runs the
|
|
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
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.
|
|
16
16
|
|
|
17
17
|
[](https://github.com/zeyusuntt/agent-postmortem/actions/workflows/ci.yml)
|
|
18
|
-
[](https://pypi.org/project/agent-postmortem/)
|
|
19
|
+
[](https://pypi.org/project/agent-postmortem/)
|
|
20
|
+
[](https://github.com/zeyusuntt/agent-postmortem/blob/main/LICENSE)
|
|
19
21
|
|
|
20
22
|
```
|
|
21
23
|
RUN wf_00000000-d30 DEGRADED ended 2026-01-06 19:55Z
|
|
@@ -73,10 +75,10 @@ If you run one of the partial or not-yet shapes, please open a ["my run shape is
|
|
|
73
75
|
|
|
74
76
|
## Quick start
|
|
75
77
|
|
|
76
|
-
Install the command-line tool from
|
|
78
|
+
Install the command-line tool from PyPI with [uv](https://docs.astral.sh/uv/) (it fetches Python 3.11 or later if you don't have it), then try it:
|
|
77
79
|
|
|
78
80
|
```
|
|
79
|
-
uv tool install
|
|
81
|
+
uv tool install agent-postmortem
|
|
80
82
|
agent-postmortem demo
|
|
81
83
|
agent-postmortem scan
|
|
82
84
|
agent-postmortem run <run-id>
|
|
@@ -222,7 +224,7 @@ Paths inside free text (finding titles, diagnostics, error messages, and at `--l
|
|
|
222
224
|
|
|
223
225
|
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.
|
|
224
226
|
|
|
225
|
-
The plugin's one network action happens on `SessionStart` only: when it has not installed a CLI into its own data directory and no `agent-postmortem` on `PATH` passes its protocol check, it installs the CLI from
|
|
227
|
+
The plugin's one network action happens on `SessionStart` only: when it has not installed a CLI into its own data directory and no `agent-postmortem` on `PATH` passes its protocol check, it installs the CLI from PyPI at the plugin's own version, or from the matching GitHub tag if that install fails, into that data directory, retrying at most once every 24 hours on failure; opt out by setting `AGENT_POSTMORTEM_NO_AUTO_INSTALL=1`, or by installing the CLI yourself first.
|
|
226
228
|
|
|
227
229
|
## How it was built
|
|
228
230
|
|
|
@@ -4742,7 +4742,19 @@ trend row's target) and `Finding.title`, rendered through `Redactor.title()`
|
|
|
4742
4742
|
followed by structural `redact()`; **(N3b S1)** names come first, so a label
|
|
4743
4743
|
that holds a UUID, an email, or a `-Users-...` slug is replaced whole
|
|
4744
4744
|
instead of being half-rewritten by the structural pass and then missed)
|
|
4745
|
-
work exactly as before.
|
|
4745
|
+
work exactly as before. **(0.3.6)** A story clause is capitalized only after the sink
|
|
4746
|
+
substituted names in it (`report._render_pieces` renders each `_Clause` through
|
|
4747
|
+
`Redactor.title`, then upper-cases its first character), so a name meets the pattern as
|
|
4748
|
+
written and becomes `Agent-1` at a sentence start. Through 0.3.5 the clause was capitalized
|
|
4749
|
+
first: a `mislabeled_kill` title starts with the label, and when it was an agent's whole
|
|
4750
|
+
story the label `impl:x` reached share output as `Impl:x`, which the case-sensitive pattern
|
|
4751
|
+
never matched (`run` text and `run --json` stories only; `tests/test_share_label_case.py`).
|
|
4752
|
+
Matching stays case-sensitive, and every clause in the tool's own words is written with
|
|
4753
|
+
its capital already (`report._own_clause`: "Killed 1 time by the runtime", "Attempt 2
|
|
4754
|
+
failed: ...", "Wrote no paths."), so a label that is a plain word (`killed`, `attempt`,
|
|
4755
|
+
`wrote`) never rewrites them, and neither are finding titles, except the title of a
|
|
4756
|
+
detector that leads with its agent's own label (`report._LABEL_LED_TITLES`:
|
|
4757
|
+
`mislabeled_kill`), which is capitalized only after the substitution. Evidence, a diagnostic, and a metrics value are
|
|
4746
4758
|
never fed to the five *name* categories (agent/desc/phase/type/target): they
|
|
4747
4759
|
pass through structural `redact()` alone (plain `Redactor.__call__`),
|
|
4748
4760
|
because they are a faithful quote of transcript text (4.5), not a rendered
|
|
@@ -6377,9 +6389,12 @@ internal deadline as `check`.
|
|
|
6377
6389
|
|
|
6378
6390
|
On SessionStart, if no compatible CLI resolves and `uv` is on PATH and
|
|
6379
6391
|
`AGENT_POSTMORTEM_NO_AUTO_INSTALL` is unset, `run.sh` runs `uv tool install
|
|
6392
|
+
"agent-postmortem==<version in plugin.json>" --python 3.11+` from PyPI, and only if that
|
|
6393
|
+
install fails, `uv tool install
|
|
6380
6394
|
"git+https://github.com/zeyusuntt/agent-postmortem@v<version in plugin.json>" --python
|
|
6381
|
-
3.11+` (
|
|
6382
|
-
|
|
6395
|
+
3.11+` (0.3.5: PyPI first; the tag covers the minutes between a release reaching GitHub
|
|
6396
|
+
and reaching PyPI, and needs git besides uv; both attempts run inside the one 60 s
|
|
6397
|
+
deadline below; the missing-CLI hint names `uv tool install agent-postmortem`) (`UV_TOOL_DIR`
|
|
6383
6398
|
and `UV_TOOL_BIN_DIR` both pointed at `$DATA_DIR`, 7.2's one data
|
|
6384
6399
|
directory, so the installed shim lands at `$DATA_DIR/bin/agent-postmortem`,
|
|
6385
6400
|
exactly where resolution step (1) looks) under the same process-group-kill
|
|
@@ -6704,7 +6719,7 @@ later events go positional).
|
|
|
6704
6719
|
|
|
6705
6720
|
### 8.1 Package
|
|
6706
6721
|
|
|
6707
|
-
`pyproject.toml`: name `agent-postmortem`, version `0.3.
|
|
6722
|
+
`pyproject.toml`: name `agent-postmortem`, version `0.3.6`, console scripts
|
|
6708
6723
|
`agent-postmortem` and `postmortem`, `requires-python >= 3.11`, no runtime
|
|
6709
6724
|
dependencies, `[project.optional-dependencies].dev = ["pytest>=8",
|
|
6710
6725
|
"ruff>=0.6"]`, classifiers, URLs (Homepage, Issues, Changelog). The wheel
|
|
@@ -6754,8 +6769,8 @@ check of the artifacts), then a `github-release` job (`permissions: contents: wr
|
|
|
6754
6769
|
`gh release create <tag> dist/* --verify-tag` with that version's CHANGELOG section as
|
|
6755
6770
|
notes) and a publish job with `environment: pypi`, `permissions: id-token: write`,
|
|
6756
6771
|
`pypa/gh-action-pypi-publish@release/v1` that runs only when the repository variable
|
|
6757
|
-
`PUBLISH_PYPI` is `true` (
|
|
6758
|
-
|
|
6772
|
+
`PUBLISH_PYPI` is `true` (a tag must never turn the release red when publishing is
|
|
6773
|
+
switched off; a skipped job is not a failure; PyPI publishing is on from 0.3.4). Both workflows declare a
|
|
6759
6774
|
top-level `permissions: contents: read` so every job is read-only by
|
|
6760
6775
|
default regardless of the repository's own token-permission setting; the
|
|
6761
6776
|
publish job's own `id-token: write` is layered on top of that at the job
|
|
@@ -6769,14 +6784,14 @@ pypi.org and the TestPyPI dry run.
|
|
|
6769
6784
|
First screen, in order (from 0.3.3): name; the question the tool answers
|
|
6770
6785
|
("Which 'done' in your last Claude Code run can't you trust?"); one paragraph on
|
|
6771
6786
|
what it reads, what it reports and that it is local and read-only; one dated number
|
|
6772
|
-
from a named version's scan; `uvx
|
|
6773
|
-
|
|
6787
|
+
from a named version's scan; `uvx agent-postmortem scan` (from PyPI, 0.3.5; 0.3.3 and
|
|
6788
|
+
0.3.4 used the tagged GitHub release while PyPI was not yet working); the status paragraph; badges (CI, license; PyPI version and Python versions only once a
|
|
6774
6789
|
PyPI release exists, since a badge for a missing release renders broken),
|
|
6775
6790
|
the demo output as a fenced code block (not a screenshot: it must stay text,
|
|
6776
6791
|
so it can be diffed against a live `agent-postmortem demo` run -- 8.2,
|
|
6777
6792
|
tests/test_readme.py), the install command that works for the current
|
|
6778
|
-
distribution (
|
|
6779
|
-
|
|
6793
|
+
distribution (`uv tool install agent-postmortem` from PyPI from 0.3.5; a
|
|
6794
|
+
GitHub install with `uv tool install git+...` in 0.3.3 and 0.3.4), a command table
|
|
6780
6795
|
listing exactly which commands take `--json` and which take `--no-redact`.
|
|
6781
6796
|
Then "What it covers", before Quick start: one table of run shapes and failure
|
|
6782
6797
|
kinds, each marked covered, partial or not yet, as checked against the upstream issue
|
|
@@ -41,15 +41,16 @@ On `SessionStart`, if the plugin has not installed a CLI into its own data
|
|
|
41
41
|
directory and no `agent-postmortem` on your `PATH` passes its protocol check
|
|
42
42
|
(`agent-postmortem hook capabilities` answers protocol 1), and
|
|
43
43
|
[`uv`](https://docs.astral.sh/uv/) is on your `PATH`, the plugin installs
|
|
44
|
-
the version pinned in the plugin manifest from
|
|
45
|
-
|
|
44
|
+
the version pinned in the plugin manifest from PyPI, or from the matching
|
|
45
|
+
GitHub tag if that install fails (that fallback needs `git`), retrying at
|
|
46
|
+
most once every 24
|
|
46
47
|
hours on failure, and writes what happened to a log file instead of your
|
|
47
48
|
terminal. This is the plugin's only network access.
|
|
48
49
|
|
|
49
50
|
Opt out by setting `AGENT_POSTMORTEM_NO_AUTO_INSTALL=1` (in your shell
|
|
50
51
|
profile, or wherever you set environment variables for Claude Code), or by
|
|
51
52
|
installing the CLI yourself ahead of time with
|
|
52
|
-
`uv tool install
|
|
53
|
+
`uv tool install agent-postmortem`.
|
|
53
54
|
|
|
54
55
|
## The `/postmortem` skill
|
|
55
56
|
|
|
@@ -40,7 +40,9 @@ fi
|
|
|
40
40
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
|
41
41
|
PLUGIN_ROOT="$(cd "$SCRIPT_DIR/.." >/dev/null 2>&1 && pwd)"
|
|
42
42
|
PLUGIN_JSON="$PLUGIN_ROOT/.claude-plugin/plugin.json"
|
|
43
|
-
# The CLI install
|
|
43
|
+
# The CLI install sources (docs/DESIGN.md 7.3): PyPI at the plugin version first, then the
|
|
44
|
+
# public repository at the tag v<plugin version> if that install fails.
|
|
45
|
+
PYPI_PACKAGE="agent-postmortem"
|
|
44
46
|
GIT_SOURCE="git+https://github.com/zeyusuntt/agent-postmortem"
|
|
45
47
|
|
|
46
48
|
# docs/DESIGN.md 7.2's D9: one data directory, derived once, used for
|
|
@@ -325,8 +327,8 @@ _print_missing_cli_hint_if_due() {
|
|
|
325
327
|
if _modified_within_a_day "$marker"; then
|
|
326
328
|
return 0
|
|
327
329
|
fi
|
|
328
|
-
printf '{"systemMessage": "agent-postmortem CLI not found; run: uv tool install %s
|
|
329
|
-
"$
|
|
330
|
+
printf '{"systemMessage": "agent-postmortem CLI not found; run: uv tool install %s"}\n' \
|
|
331
|
+
"$PYPI_PACKAGE"
|
|
330
332
|
: >"$marker" 2>/dev/null
|
|
331
333
|
}
|
|
332
334
|
|
|
@@ -353,16 +355,22 @@ _maybe_install() {
|
|
|
353
355
|
pinned_version="$(_plugin_version)"
|
|
354
356
|
[ -n "$pinned_version" ] || return 0
|
|
355
357
|
|
|
356
|
-
#
|
|
357
|
-
|
|
358
|
+
# PyPI at the plugin version first; the matching GitHub tag only if that install fails
|
|
359
|
+
# (for example in the minutes between a release reaching GitHub and reaching PyPI). Both
|
|
360
|
+
# run under the one 60-second deadline the single install had, so the hook's time budget
|
|
361
|
+
# is unchanged.
|
|
362
|
+
pypi_source="$PYPI_PACKAGE==$pinned_version"
|
|
363
|
+
git_source="$GIT_SOURCE@v$pinned_version"
|
|
358
364
|
{
|
|
359
|
-
printf '%s attempting: uv tool install %s\n' \
|
|
360
|
-
"$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$
|
|
365
|
+
printf '%s attempting: uv tool install %s (fallback: %s)\n' \
|
|
366
|
+
"$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$pypi_source" "$git_source"
|
|
361
367
|
} >>"$install_log" 2>/dev/null
|
|
362
368
|
|
|
363
369
|
mkdir -p "$DATA_DIR/bin" 2>/dev/null
|
|
364
370
|
UV_TOOL_DIR="$DATA_DIR" UV_TOOL_BIN_DIR="$DATA_DIR/bin" \
|
|
365
|
-
_run_with_deadline 60
|
|
371
|
+
_run_with_deadline 60 sh -c \
|
|
372
|
+
'uv tool install "$1" --python 3.11+ || uv tool install "$2" --python 3.11+' \
|
|
373
|
+
sh "$pypi_source" "$git_source" \
|
|
366
374
|
</dev/null >>"$install_log" 2>&1
|
|
367
375
|
}
|
|
368
376
|
|
|
@@ -114,5 +114,5 @@ Bash tool.
|
|
|
114
114
|
`--no-redact` only if the user asks to see raw paths or session ids, and
|
|
115
115
|
say so when you do.
|
|
116
116
|
- If the CLI is missing entirely, tell the user to run
|
|
117
|
-
`uv tool install
|
|
117
|
+
`uv tool install agent-postmortem` and stop; do not try to install it
|
|
118
118
|
yourself.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "agent-postmortem"
|
|
3
|
-
version = "0.3.
|
|
4
|
-
description = "
|
|
3
|
+
version = "0.3.6"
|
|
4
|
+
description = "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
|
readme = "README.md"
|
|
6
6
|
license = { text = "MIT" }
|
|
7
7
|
requires-python = ">=3.11"
|
|
8
8
|
dependencies = []
|
|
9
9
|
classifiers = [
|
|
10
|
-
"Development Status ::
|
|
10
|
+
"Development Status :: 3 - Alpha",
|
|
11
11
|
"Environment :: Console",
|
|
12
12
|
"Intended Audience :: Developers",
|
|
13
13
|
"License :: OSI Approved :: MIT License",
|
|
@@ -1759,9 +1759,11 @@ def _agent_story_pieces(agent, agent_findings: list[Finding]) -> list:
|
|
|
1759
1759
|
all_runtime = False
|
|
1760
1760
|
if all_runtime and silences:
|
|
1761
1761
|
silence_text = ", ".join(silences)
|
|
1762
|
-
lead =
|
|
1762
|
+
lead = _own_clause(
|
|
1763
|
+
f"killed {k} {_plural(k, 'time')} by the runtime ({silence_text} of silence)"
|
|
1764
|
+
)
|
|
1763
1765
|
else:
|
|
1764
|
-
lead = f"restarted {k} {_plural(k, 'time')}"
|
|
1766
|
+
lead = _own_clause(f"restarted {k} {_plural(k, 'time')}")
|
|
1765
1767
|
|
|
1766
1768
|
parent_stop = False
|
|
1767
1769
|
if final is not None:
|
|
@@ -1773,13 +1775,13 @@ def _agent_story_pieces(agent, agent_findings: list[Finding]) -> list:
|
|
|
1773
1775
|
elif lead is not None:
|
|
1774
1776
|
clauses.append(lead)
|
|
1775
1777
|
elif parent_stop:
|
|
1776
|
-
clauses.append("stopped by the parent")
|
|
1778
|
+
clauses.append(_own_clause("stopped by the parent"))
|
|
1777
1779
|
|
|
1778
1780
|
for finding in by_detector.get("attempt_failed", []):
|
|
1779
1781
|
ordinal = _finding_ordinal(finding, attempts_sorted)
|
|
1780
1782
|
phrase = _cause_phrase(finding.metrics.get("cause", "unattributed"))
|
|
1781
1783
|
reset_time = finding.metrics.get("reset_time")
|
|
1782
|
-
text = f"attempt {ordinal} failed: {phrase}"
|
|
1784
|
+
text = _own_clause(f"attempt {ordinal} failed: {phrase}")
|
|
1783
1785
|
if reset_time:
|
|
1784
1786
|
text += f", resets {reset_time}"
|
|
1785
1787
|
clauses.append(text)
|
|
@@ -1787,7 +1789,9 @@ def _agent_story_pieces(agent, agent_findings: list[Finding]) -> list:
|
|
|
1787
1789
|
for finding in by_detector.get("claim_contradiction", []):
|
|
1788
1790
|
ordinal = _finding_ordinal(finding, attempts_sorted)
|
|
1789
1791
|
phrases = _claim_contradiction_phrases(finding.metrics)
|
|
1790
|
-
clauses.append(
|
|
1792
|
+
clauses.append(
|
|
1793
|
+
_own_clause(f"attempt {ordinal} completed but reported {'; '.join(phrases)}")
|
|
1794
|
+
)
|
|
1791
1795
|
|
|
1792
1796
|
_paths_display, commits_count = _agent_facts_totals(agent)
|
|
1793
1797
|
path_count, paths_partial = _agent_paths(agent)
|
|
@@ -1818,30 +1822,68 @@ def _agent_story_pieces(agent, agent_findings: list[Finding]) -> list:
|
|
|
1818
1822
|
clauses.append("; ".join(tooling_bits))
|
|
1819
1823
|
|
|
1820
1824
|
if not clauses and agent_findings:
|
|
1821
|
-
clauses.append(agent_findings[0]
|
|
1825
|
+
clauses.append(_title_clause(agent_findings[0], agent.label))
|
|
1822
1826
|
|
|
1823
1827
|
return _sentences_pieces(clauses)
|
|
1824
1828
|
|
|
1825
1829
|
|
|
1830
|
+
def _sentence_case(text: str) -> str:
|
|
1831
|
+
"""`text` with its first character upper-cased: how a story sentence starts."""
|
|
1832
|
+
return text[:1].upper() + text[1:]
|
|
1833
|
+
|
|
1834
|
+
|
|
1835
|
+
def _own_clause(text: str) -> str:
|
|
1836
|
+
"""A story clause in the tool's own words, capitalized where it is written (0.4 review round
|
|
1837
|
+
2): every clause is capitalized again only after names are substituted, and a label that is
|
|
1838
|
+
the clause's first word (`killed`, `restarted`, `attempt`) must not meet that word in
|
|
1839
|
+
lowercase."""
|
|
1840
|
+
return _sentence_case(text)
|
|
1841
|
+
|
|
1842
|
+
|
|
1843
|
+
# Detectors whose title starts with the agent's own label ("<label> interrupted after ...").
|
|
1844
|
+
_LABEL_LED_TITLES = frozenset({"mislabeled_kill"})
|
|
1845
|
+
|
|
1846
|
+
|
|
1847
|
+
def _title_clause(finding: Finding, label: str | None) -> object:
|
|
1848
|
+
"""A finding title as a story clause (0.3.6 review round 3). The title of a detector that
|
|
1849
|
+
leads with the agent's own label stays as written, so the name substitution meets the label
|
|
1850
|
+
before the sentence is capitalized; every other title is in the tool's own words and is
|
|
1851
|
+
capitalized where it is used (`_own_clause`), so a label that is its first word ("the" in
|
|
1852
|
+
"the harness reported this workflow failed") never rewrites it."""
|
|
1853
|
+
if finding.title_parts:
|
|
1854
|
+
return finding.title_parts
|
|
1855
|
+
title = finding.title
|
|
1856
|
+
if (
|
|
1857
|
+
finding.detector in _LABEL_LED_TITLES
|
|
1858
|
+
and isinstance(label, str) and label and title.startswith(label)
|
|
1859
|
+
):
|
|
1860
|
+
return title
|
|
1861
|
+
return _own_clause(title)
|
|
1862
|
+
|
|
1863
|
+
|
|
1864
|
+
class _Clause(str):
|
|
1865
|
+
"""A story clause as written, without its final period. Its first character is upper-cased
|
|
1866
|
+
only after a sink rendered it (0.3.6): a clause can start with a user-authored name (a
|
|
1867
|
+
`mislabeled_kill` title starts with the label), and the case-sensitive name substitution
|
|
1868
|
+
must meet that name as written (docs/DESIGN.md 5.1)."""
|
|
1869
|
+
|
|
1870
|
+
|
|
1826
1871
|
def _sentences(clauses: list[str]) -> str:
|
|
1827
1872
|
"""Join clauses as sentences: each starts with a capital and the whole
|
|
1828
1873
|
ends with one period. Finding titles start lowercase by convention
|
|
1829
1874
|
(docs/DESIGN.md 4.3), so this is where a story gets its capitals."""
|
|
1830
1875
|
parts = [clause.rstrip(".") for clause in clauses if clause]
|
|
1831
|
-
text = ". ".join(c
|
|
1876
|
+
text = ". ".join(_sentence_case(c) for c in parts)
|
|
1832
1877
|
return f"{text}." if text else ""
|
|
1833
1878
|
|
|
1834
1879
|
|
|
1835
1880
|
def _sentences_pieces(clauses: list) -> list:
|
|
1836
|
-
"""`_sentences` as pieces (F fix 7, W7-2):
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
and
|
|
1841
|
-
the
|
|
1842
|
-
if not any(isinstance(clause, TitleParts) for clause in clauses):
|
|
1843
|
-
text = _sentences(clauses)
|
|
1844
|
-
return [text] if text else []
|
|
1881
|
+
"""`_sentences` as pieces (F fix 7, W7-2; 0.3.6): one piece per clause, with the ". "
|
|
1882
|
+
between clauses and the final "." as plain strings. A string clause is a `_Clause`, which a
|
|
1883
|
+
sink renders first and capitalizes after (`_render_pieces`), so a name at its start is
|
|
1884
|
+
substituted as written. The `TitleParts` of a finding title that names a path has its
|
|
1885
|
+
template capitalized and stripped of a final period here, since those words are the tool's
|
|
1886
|
+
own, and `_render_pieces` renders the path once and never scans them. No text, no piece."""
|
|
1845
1887
|
parts: list = []
|
|
1846
1888
|
for clause in clauses:
|
|
1847
1889
|
if not clause:
|
|
@@ -1849,35 +1891,39 @@ def _sentences_pieces(clauses: list) -> list:
|
|
|
1849
1891
|
if isinstance(clause, TitleParts):
|
|
1850
1892
|
head, placeholder, tail = clause.template.partition("{path}")
|
|
1851
1893
|
template = head + placeholder + tail.rstrip(".")
|
|
1852
|
-
parts.append(TitleParts(template
|
|
1894
|
+
parts.append(TitleParts(_sentence_case(template), clause.path))
|
|
1853
1895
|
else:
|
|
1854
|
-
|
|
1855
|
-
|
|
1896
|
+
parts.append(_Clause(clause.rstrip(".")))
|
|
1897
|
+
if all(isinstance(part, _Clause) and not part for part in parts):
|
|
1898
|
+
return []
|
|
1856
1899
|
pieces: list = []
|
|
1857
1900
|
for index, part in enumerate(parts):
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
pieces.append(piece)
|
|
1863
|
-
if pieces and isinstance(pieces[-1], str):
|
|
1864
|
-
pieces[-1] += "."
|
|
1865
|
-
else:
|
|
1866
|
-
pieces.append(".")
|
|
1901
|
+
if index:
|
|
1902
|
+
pieces.append(". ")
|
|
1903
|
+
pieces.append(part)
|
|
1904
|
+
pieces.append(".")
|
|
1867
1905
|
return pieces
|
|
1868
1906
|
|
|
1869
1907
|
|
|
1870
1908
|
def _pieces_raw(pieces: list) -> str:
|
|
1871
|
-
"""The pieces with the real path (the raw text of a story)."""
|
|
1872
|
-
return "".join(
|
|
1909
|
+
"""The pieces with the real path and real names (the raw text of a story)."""
|
|
1910
|
+
return "".join(
|
|
1911
|
+
piece.raw() if isinstance(piece, TitleParts)
|
|
1912
|
+
else _sentence_case(piece) if isinstance(piece, _Clause)
|
|
1913
|
+
else piece
|
|
1914
|
+
for piece in pieces
|
|
1915
|
+
)
|
|
1873
1916
|
|
|
1874
1917
|
|
|
1875
1918
|
def _render_pieces(pieces: list, redactor: Redactor) -> str:
|
|
1876
|
-
"""The pieces as a sink prints them: a
|
|
1877
|
-
rest of the scanner), a `TitleParts` through
|
|
1878
|
-
its words never scanned)
|
|
1919
|
+
"""The pieces as a sink prints them: a `_Clause` through `Redactor.title` (labels, paths and
|
|
1920
|
+
the rest of the scanner) and only then capitalized, a `TitleParts` through
|
|
1921
|
+
`Redactor.title_parts` (its path rendered once, its words never scanned), and the separators
|
|
1922
|
+
as they are."""
|
|
1879
1923
|
return "".join(
|
|
1880
|
-
redactor.title_parts(piece) if isinstance(piece, TitleParts)
|
|
1924
|
+
redactor.title_parts(piece) if isinstance(piece, TitleParts)
|
|
1925
|
+
else _sentence_case(redactor.title(piece)) if isinstance(piece, _Clause)
|
|
1926
|
+
else piece
|
|
1881
1927
|
for piece in pieces
|
|
1882
1928
|
)
|
|
1883
1929
|
|
|
@@ -1933,7 +1979,7 @@ def _story_records(run: Run, findings: list[Finding], verbose: bool) -> list[dic
|
|
|
1933
1979
|
run_relevant = [f for f in run_level if verbose or f.severity != "info"]
|
|
1934
1980
|
if run_relevant:
|
|
1935
1981
|
rank = min(_SEVERITIES.index(f.severity) for f in run_relevant)
|
|
1936
|
-
pieces = _sentences_pieces([f
|
|
1982
|
+
pieces = _sentences_pieces([_title_clause(f, None) for f in run_relevant])
|
|
1937
1983
|
entries.append({
|
|
1938
1984
|
"agent": "run",
|
|
1939
1985
|
"severity": _SEVERITIES[rank],
|