stacktrace-cli 0.12.0__tar.gz → 0.13.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (698) hide show
  1. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/.github/workflows/ci.yml +6 -0
  2. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/CLAUDE.md +24 -5
  3. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/PKG-INFO +11 -6
  4. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/README.md +9 -4
  5. stacktrace_cli-0.13.0/SECURITY.md +41 -0
  6. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0006-trust-boundary-and-detection-upload.md +1 -1
  7. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0018-remote-sync-config-and-facade-consumption.md +1 -1
  8. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0020-openaca-consumption-boundary.md +1 -0
  9. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0024-the-upload-carries-observations.md +1 -1
  10. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0031-one-host-daemon-observes-native-session-logs.md +1 -1
  11. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0070-package-the-cloud-agent-environment-bootstrap.md +1 -1
  12. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0072-host-supervisors-own-daemon-restarts.md +1 -1
  13. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0073-name-what-fired-and-which-component.md +1 -1
  14. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0090-count-completed-commands-locate-by-ip-send-through-the-managed-proxy.md +1 -1
  15. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0096-cost-usage-may-leave-as-token-totals-and-work-identifiers.md +1 -1
  16. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0101-what-names-a-run-in-fleet.md +1 -1
  17. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0109-a-detection-carries-its-runs-title-and-the-persons-name.md +1 -1
  18. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0113-size-triggers-behaviour-explains-session-cost-carries-reasons.md +1 -1
  19. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0118-observe-agents-through-adapters-and-a-shared-analyzer.md +1 -1
  20. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0123-the-cloud-boot-hook-brings-the-client-up-to-the-latest-release.md +1 -1
  21. stacktrace_cli-0.13.0/docs/adrs/0131-activate-hook-policy-without-a-privileged-runtime.md +87 -0
  22. stacktrace_cli-0.13.0/docs/adrs/0135-enforce-policy-through-the-daemon-and-agent-hooks.md +111 -0
  23. stacktrace_cli-0.13.0/docs/adrs/0136-bound-policy-evidence-collection-as-one-bundle.md +102 -0
  24. stacktrace_cli-0.13.0/docs/adrs/0137-a-rule-in-wording-reads-the-same-on-every-surface.md +87 -0
  25. stacktrace_cli-0.13.0/docs/adrs/0138-a-credential-in-a-prompt-travels-as-a-mask-and-a-digest.md +98 -0
  26. stacktrace_cli-0.13.0/docs/adrs/0139-remediation-finding-contract.md +95 -0
  27. stacktrace_cli-0.13.0/docs/adrs/0140-an-untitled-run-names-itself-by-its-first-five-words.md +70 -0
  28. stacktrace_cli-0.13.0/docs/adrs/0141-two-remediation-models-one-credential-identity-and-a-letters-only-fragment.md +81 -0
  29. stacktrace_cli-0.13.0/docs/adrs/0142-the-cli-has-no-machine-limit.md +72 -0
  30. stacktrace_cli-0.13.0/docs/adrs/0143-the-plugin-owns-session-hooks-on-every-host.md +139 -0
  31. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/INDEX.md +14 -4
  32. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/agent-support.html +6 -4
  33. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/agent-support.md +6 -5
  34. stacktrace_cli-0.13.0/docs/releases/v0.13.0.md +98 -0
  35. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/codex-agent-kind.md +3 -4
  36. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/cost-notifications.md +3 -3
  37. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/cost.md +1 -1
  38. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/daemon-uploads.md +2 -2
  39. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/detection-policies.md +91 -11
  40. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/detector.md +7 -5
  41. stacktrace_cli-0.13.0/docs/specs/hook-policy-rollout.md +205 -0
  42. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/managed-policy-deployment.md +6 -0
  43. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/monitor.md +1 -1
  44. stacktrace_cli-0.13.0/docs/specs/plugin-installation.md +107 -0
  45. stacktrace_cli-0.13.0/docs/specs/policy-enforcement.md +417 -0
  46. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/remote-sync.md +6 -3
  47. stacktrace_cli-0.13.0/docs/trust.md +204 -0
  48. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/pyproject.toml +7 -3
  49. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/__init__.py +1 -1
  50. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cli.py +14 -8
  51. stacktrace_cli-0.13.0/src/stacktrace/cloud/__init__.py +37 -0
  52. stacktrace_cli-0.13.0/src/stacktrace/cloud/boot.py +186 -0
  53. stacktrace_cli-0.13.0/src/stacktrace/cloud/profile.py +71 -0
  54. stacktrace_cli-0.13.0/src/stacktrace/cloud/setup.sh +185 -0
  55. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/composition.py +22 -1
  56. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/models.py +12 -0
  57. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/rules.py +2 -192
  58. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/usage.py +55 -0
  59. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/weights.py +3 -8
  60. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/client.py +10 -4
  61. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/config.py +0 -42
  62. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/costs.py +1 -9
  63. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/db.py +45 -0
  64. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/fleet.py +9 -9
  65. stacktrace_cli-0.13.0/src/stacktrace/daemon/policy_collect.py +306 -0
  66. stacktrace_cli-0.13.0/src/stacktrace/daemon/policy_inputs.py +278 -0
  67. stacktrace_cli-0.13.0/src/stacktrace/daemon/policy_runtime.py +569 -0
  68. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/presentation.py +14 -7
  69. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/protocol.py +46 -2
  70. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/runtime.py +10 -11
  71. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/server.py +76 -2
  72. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/store.py +15 -4
  73. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/usage.py +13 -17
  74. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/webhook.py +24 -0
  75. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/cache.py +2 -8
  76. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/deterministic.py +288 -68
  77. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/finding.py +35 -6
  78. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/history.py +4 -13
  79. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/jev.py +1 -14
  80. stacktrace_cli-0.13.0/src/stacktrace/detector/personal_data.py +328 -0
  81. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/reasoning.py +1 -9
  82. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/render.py +10 -0
  83. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/rules.py +80 -15
  84. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/run.py +3 -0
  85. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/secrets.py +88 -3
  86. stacktrace_cli-0.13.0/src/stacktrace/finding_contract.py +236 -0
  87. stacktrace_cli-0.13.0/src/stacktrace/finding_titles.py +57 -0
  88. stacktrace_cli-0.13.0/src/stacktrace/hooks/__init__.py +1 -0
  89. stacktrace_cli-0.13.0/src/stacktrace/hooks/claude.py +239 -0
  90. stacktrace_cli-0.13.0/src/stacktrace/hooks/session.py +76 -0
  91. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/costs.py +4 -4
  92. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/render.py +10 -2
  93. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/app.js +30 -1
  94. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/cost.js +16 -9
  95. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/styles.css +1 -0
  96. stacktrace_cli-0.13.0/src/stacktrace/policy_display.py +129 -0
  97. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/cli.py +8 -44
  98. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/client.py +159 -15
  99. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/config.py +61 -2
  100. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/detect_payload.py +37 -4
  101. stacktrace_cli-0.13.0/src/stacktrace/remote/hook_policy.py +148 -0
  102. stacktrace_cli-0.13.0/src/stacktrace/remote/policy_show.py +109 -0
  103. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/sync.py +14 -2
  104. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/upload_contract.py +31 -0
  105. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/telemetry/events.py +1 -0
  106. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/conftest.py +23 -6
  107. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_cost_evidence_travels.py +0 -35
  108. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_cost_findings_are_dated_by_their_citations.py +9 -28
  109. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_cost_findings_carry_no_session_text.py +0 -10
  110. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_models.py +20 -1
  111. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_usage.py +163 -0
  112. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_weights.py +5 -0
  113. stacktrace_cli-0.13.0/tests/daemon/test_claude_policy_conformance.py +586 -0
  114. stacktrace_cli-0.13.0/tests/daemon/test_claude_policy_hook.py +232 -0
  115. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_cli.py +9 -3
  116. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_client.py +7 -3
  117. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_costs.py +76 -99
  118. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_fleet.py +50 -2
  119. stacktrace_cli-0.13.0/tests/daemon/test_policy_collect.py +344 -0
  120. stacktrace_cli-0.13.0/tests/daemon/test_policy_collect_contract.py +180 -0
  121. stacktrace_cli-0.13.0/tests/daemon/test_policy_hook_transport.py +207 -0
  122. stacktrace_cli-0.13.0/tests/daemon/test_policy_inputs.py +551 -0
  123. stacktrace_cli-0.13.0/tests/daemon/test_policy_reconcile.py +535 -0
  124. stacktrace_cli-0.13.0/tests/daemon/test_policy_runtime.py +277 -0
  125. stacktrace_cli-0.13.0/tests/daemon/test_policy_socket.py +153 -0
  126. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_session_cost_notices.py +2 -2
  127. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_the_stored_row_is_sufficient.py +5 -0
  128. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_usage.py +54 -0
  129. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_usage_store.py +18 -0
  130. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_webhook.py +56 -0
  131. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_wire_frames_are_bounded.py +6 -1
  132. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/cost_harness.mjs +1 -0
  133. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/feed_harness.mjs +12 -2
  134. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_cost_page.py +29 -6
  135. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_feed_model.py +22 -5
  136. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_render_cost.py +76 -16
  137. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_cli.py +19 -211
  138. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_client.py +292 -0
  139. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_cloud_boot_updates_the_client.py +87 -16
  140. stacktrace_cli-0.13.0/tests/remote/test_cloud_session.py +59 -0
  141. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_cloud_setup_asset_id.py +6 -0
  142. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_config.py +85 -0
  143. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_contract_is_exhaustive.py +31 -3
  144. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_gate_matches_the_cloud.py +7 -0
  145. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_facade_contract.py +40 -1
  146. stacktrace_cli-0.13.0/tests/remote/test_hook_policy.py +81 -0
  147. stacktrace_cli-0.13.0/tests/remote/test_policy_show.py +138 -0
  148. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_seam.py +8 -0
  149. stacktrace_cli-0.13.0/tests/remote/test_session_registration.py +54 -0
  150. stacktrace_cli-0.13.0/tests/remote/test_user_install_profile.py +45 -0
  151. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_build_commit.py +2 -2
  152. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_composition.py +3 -6
  153. stacktrace_cli-0.13.0/tests/test_detector_credential_in_prompt.py +217 -0
  154. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_deterministic.py +56 -0
  155. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_end_to_end.py +6 -2
  156. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_finding.py +9 -0
  157. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_history.py +21 -0
  158. stacktrace_cli-0.13.0/tests/test_detector_personal_data.py +220 -0
  159. stacktrace_cli-0.13.0/tests/test_detector_pii_in_prompt.py +117 -0
  160. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_secrets.py +164 -0
  161. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_vulnerable_dep_invoked.py +68 -54
  162. stacktrace_cli-0.13.0/tests/test_finding_contract.py +168 -0
  163. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_kind_conformance.py +2 -0
  164. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_no_agent_kind_is_named.py +3 -0
  165. stacktrace_cli-0.13.0/tests/test_one_wording_per_rule.py +168 -0
  166. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_release_gate_coverage.py +4 -0
  167. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_seam_boundary.py +8 -0
  168. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_session_identity_is_the_pair.py +9 -0
  169. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_title_disclosure_invariant.py +75 -7
  170. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_untrusted_content_never_travels.py +51 -0
  171. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/uv.lock +30 -6
  172. stacktrace_cli-0.12.0/src/stacktrace/cloud/__init__.py +0 -60
  173. stacktrace_cli-0.12.0/src/stacktrace/cloud/setup.sh +0 -469
  174. stacktrace_cli-0.12.0/tests/cost/test_rules_budget.py +0 -189
  175. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/.agents/skills/release-stacktrace/SKILL.md +0 -0
  176. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/.claude/settings.json +0 -0
  177. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/.claude/skills/release-stacktrace/SKILL.md +0 -0
  178. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/.codex/hooks.json +0 -0
  179. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/.github/managed-autofix.md +0 -0
  180. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/.github/pull_request_template.md +0 -0
  181. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/.github/workflows/bedrock-live.yml +0 -0
  182. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/.github/workflows/guard-staging.yml +0 -0
  183. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/.github/workflows/publish-pypi.yml +0 -0
  184. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/.gitignore +0 -0
  185. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/AGENTS.md +0 -0
  186. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/contracts/observations/v1/decision-request.example.json +0 -0
  187. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/contracts/observations/v1/decision-request.schema.json +0 -0
  188. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/contracts/observations/v1/decision-response.example.json +0 -0
  189. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/contracts/observations/v1/decision-response.schema.json +0 -0
  190. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/contracts/observations/v1/example.json +0 -0
  191. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/contracts/observations/v1/schema.json +0 -0
  192. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0001-session-telemetry-as-input.md +0 -0
  193. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0002-session-collection-in-openaidr.md +0 -0
  194. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0003-runtime-edges.md +0 -0
  195. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0004-three-stage-detector.md +0 -0
  196. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0005-detection-family-and-report-assembly.md +0 -0
  197. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0007-proprietary-package-on-open-dependencies.md +0 -0
  198. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0008-console-in-separate-demo-package.md +0 -0
  199. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0010-detection-severity-and-confidence-ladders.md +0 -0
  200. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0011-verdict-cache.md +0 -0
  201. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0012-observation-evidence-kinds-and-transport.md +0 -0
  202. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0013-rule-catalogue-triage-and-per-rule-context.md +0 -0
  203. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0014-declared-project-mapping.md +0 -0
  204. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0015-narrow-the-security-catalogue.md +0 -0
  205. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0016-stall-grouping-is-session-wide.md +0 -0
  206. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0017-a-declined-repeat-is-a-stall.md +0 -0
  207. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0019-delegated-commands-are-openaca-objects.md +0 -0
  208. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0021-two-command-kinds.md +0 -0
  209. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0022-detection-scope-is-a-catalogue-column.md +0 -0
  210. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0023-sync-detect-collects-and-does-not-escalate.md +0 -0
  211. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0025-a-denied-call-is-activity-never-an-invocation.md +0 -0
  212. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0026-the-console-becomes-a-product-surface.md +0 -0
  213. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0027-a-finding-may-name-what-it-could-not-place.md +0 -0
  214. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0028-the-console-shows-what-it-placed.md +0 -0
  215. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0029-stage-three-returns-to-opt-in.md +0 -0
  216. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0030-a-detection-is-dated-by-the-turns-it-cites.md +0 -0
  217. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0032-refresh-daemon-compositions-outside-detection.md +0 -0
  218. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0033-a-third-party-analyzer-only-by-a-flag-that-names-it.md +0 -0
  219. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0034-the-drift-grade-is-read-off-a-run-not-a-call.md +0 -0
  220. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0035-naming-an-analyzer-selects-stored-answers.md +0 -0
  221. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0036-deliver-eligible-findings-to-slack-from-the-daemon.md +0 -0
  222. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0037-reuse-openaidr-append-cursors-in-the-daemon.md +0 -0
  223. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0038-poll-normalized-sessions-for-supplemental-changes.md +0 -0
  224. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0039-send-usage-telemetry-by-default-with-an-opt-out.md +0 -0
  225. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0041-defer-native-windows-support.md +0 -0
  226. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0042-read-the-build-commit-from-the-install-record.md +0 -0
  227. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0043-name-the-session-agent-and-host-and-count-errors-by-class.md +0 -0
  228. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0044-send-the-build-as-version-prints-it.md +0 -0
  229. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0045-scan-every-session-and-outlive-them.md +0 -0
  230. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0046-the-finding-store-is-an-append-only-queue.md +0 -0
  231. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0047-capture-activity-during-correlation-or-lose-it.md +0 -0
  232. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0048-the-daemon-keeps-a-leveled-content-free-activity-log.md +0 -0
  233. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0056-stop-a-resident-daemon-by-record-and-signal.md +0 -0
  234. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0057-grow-the-queue-schema-additively-and-share-only-the-document.md +0 -0
  235. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0058-one-word-for-a-finding-columns-for-a-counter-and-a-push-that-does-not-wait.md +0 -0
  236. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0059-the-daemon-does-not-decide-whether-it-should-be-running.md +0 -0
  237. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0060-two-upload-postures-not-one-command-with-two-sources.md +0 -0
  238. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0061-the-drain-sends-findings-only.md +0 -0
  239. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0062-hold-the-transition-lock-across-remote-side-effects.md +0 -0
  240. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0063-underbuilt-debt-does-not-hold-the-scan-watermark.md +0 -0
  241. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0064-a-redacted-value-has-one-path-span.md +0 -0
  242. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0065-asset-external-id-resolves-by-a-ladder.md +0 -0
  243. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0066-host-owned-daemon-supervision.md +0 -0
  244. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0067-a-webhook-is-an-independent-queue-subscriber.md +0 -0
  245. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0068-webhooks-retry-the-retained-backlog.md +0 -0
  246. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0069-webhooks-deliver-what-retention-holds.md +0 -0
  247. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0071-render-the-allowlisted-payload-per-destination.md +0 -0
  248. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0074-a-window-selects-findings-by-when-they-happened.md +0 -0
  249. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0076-two-phase-detection-pipeline.md +0 -0
  250. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0077-the-bom-job-wakes-once-at-startup-staggered.md +0 -0
  251. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0078-a-seeded-display-prefix-replaces-the-hostname-label.md +0 -0
  252. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0079-the-monitor-page-renders-findings-not-pipeline-health.md +0 -0
  253. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0080-enabling-reasoning-does-not-requeue-the-past.md +0 -0
  254. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0081-reasoning-activation-returns-to-explicit-opt-in.md +0 -0
  255. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0082-monitor-checks-every-installed-component-by-default.md +0 -0
  256. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0083-each-block-reason-is-its-own-rule.md +0 -0
  257. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0084-a-recursive-deletes-evidence-is-the-rm-that-ran.md +0 -0
  258. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0085-show-when-and-which-finding-slack-delivered.md +0 -0
  259. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0086-a-refusal-names-who-answered-the-call.md +0 -0
  260. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0087-deploy-compiled-policy-with-a-privileged-scheduled-job.md +0 -0
  261. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0088-slack-alerts-leave-out-confidence.md +0 -0
  262. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0089-infra-gate-reads-commands-not-shell-semantics.md +0 -0
  263. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0091-mark-our-own-machines-and-name-what-failed.md +0 -0
  264. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0092-cost-is-its-own-rule-family.md +0 -0
  265. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0093-environment-cost-baselines-count-tokens-keyed-by-model.md +0 -0
  266. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0094-estimate-cost-from-tokens-the-agent-figure-is-a-cross-check.md +0 -0
  267. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0095-cost-findings-reach-fleet-each-rule-can-be-muted.md +0 -0
  268. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0097-the-daemon-makes-cost-findings-and-the-monitor-reads-them.md +0 -0
  269. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0098-a-run-is-its-main-session.md +0 -0
  270. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0099-cost-is-measured-in-tokens-and-relative-increases.md +0 -0
  271. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0100-the-monitor-runs-offline-for-the-website.md +0 -0
  272. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0102-token-use-is-never-compared-with-a-providers-usage-api.md +0 -0
  273. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0103-finished-runs-may-leave-as-numbers-for-org-baselines.md +0 -0
  274. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0104-usage-is-its-own-upload.md +0 -0
  275. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0105-an-asset-key-is-a-bare-uuid.md +0 -0
  276. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0106-boot-id-is-salted-with-the-pid-namespace.md +0 -0
  277. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0107-the-daemon-follows-every-kind-openaidr-reads.md +0 -0
  278. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0108-a-kind-renamed-before-any-release-read-it-keeps-no-alias.md +0 -0
  279. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0110-every-kinds-account-comes-from-openaidr.md +0 -0
  280. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0111-built-in-sub-agents-and-skills-come-from-the-bom.md +0 -0
  281. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0112-a-person-is-known-by-the-accounts-on-the-host.md +0 -0
  282. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0114-similar-sessions-are-the-same-agent-in-the-same-repo.md +0 -0
  283. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0115-usage-states-its-coverage-and-fleet-returns-expected-runs.md +0 -0
  284. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0116-a-component-row-carries-what-its-results-cost-under-one-closed-key.md +0 -0
  285. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0117-a-component-row-on-the-day-of-a-switch-counts-from-the-switch.md +0 -0
  286. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0119-read-sessions-from-an-ai-gateway-and-block-inline.md +0 -0
  287. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0120-own-the-adapter-event-envelope.md +0 -0
  288. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0121-a-cloud-sessions-runs-are-its-persons-and-a-card-says-where-its-name-came-from.md +0 -0
  289. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0122-use-stacktrace-as-the-python-package.md +0 -0
  290. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0124-fleet-imports-core-from-the-stacktrace-distribution.md +0 -0
  291. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0127-the-monitor-shows-weighted-tokens-beside-raw-tokens.md +0 -0
  292. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0128-usage-files-each-response-once-where-it-was-first-filed.md +0 -0
  293. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0129-an-unfinished-response-counts-the-output-it-shows.md +0 -0
  294. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0130-usage-carries-one-hour-cache-writes-and-each-responses-price-class.md +0 -0
  295. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0132-every-usage-page-names-the-store-that-built-it.md +0 -0
  296. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0133-a-clients-own-error-record-is-a-third-block-channel.md +0 -0
  297. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/0134-a-secret-sent-to-a-server-configured-as-remote-is-egress.md +0 -0
  298. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/HOOK-PROMPT.md +0 -0
  299. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/adrs/TEMPLATE.md +0 -0
  300. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/cutover-openaca-remote.md +0 -0
  301. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/002-session-input.md +0 -0
  302. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/003-correlation.md +0 -0
  303. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/004-detector.md +0 -0
  304. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/005-remote-sync.md +0 -0
  305. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/006-cli-composition.md +0 -0
  306. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/007-detection-upload.md +0 -0
  307. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/008-monitor.md +0 -0
  308. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/009-reasoning-jev.md +0 -0
  309. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/010-session-daemon.md +0 -0
  310. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/011-daemon-store.md +0 -0
  311. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/012-daemon-scanning.md +0 -0
  312. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/013-daemon-uploads.md +0 -0
  313. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/014-asset-identity.md +0 -0
  314. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/015-managed-policy-deployment.md +0 -0
  315. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/016-cost-phase-1.md +0 -0
  316. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/plans/017-cost-phase-2.md +0 -0
  317. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.0.1.md +0 -0
  318. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.1.0.md +0 -0
  319. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.10.0.md +0 -0
  320. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.11.0.md +0 -0
  321. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.12.0.md +0 -0
  322. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.2.0.md +0 -0
  323. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.2.1.md +0 -0
  324. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.2.2.md +0 -0
  325. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.2.3.md +0 -0
  326. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.3.0.md +0 -0
  327. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.3.1.md +0 -0
  328. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.4.0.md +0 -0
  329. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.4.1.md +0 -0
  330. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.5.0.md +0 -0
  331. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.5.1.md +0 -0
  332. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.5.2.md +0 -0
  333. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.5.3.md +0 -0
  334. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.6.0.md +0 -0
  335. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.6.1.md +0 -0
  336. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.7.0.md +0 -0
  337. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.7.1.md +0 -0
  338. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.8.0.md +0 -0
  339. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/releases/v0.9.0.md +0 -0
  340. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/research/001-intent-drift-metric.md +0 -0
  341. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/agent-observability.md +0 -0
  342. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/aidr.md +0 -0
  343. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/cli-composition.md +0 -0
  344. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/correlation.md +0 -0
  345. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/cost-phase-1.md +0 -0
  346. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/cost-phase-2.md +0 -0
  347. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/daemon-scanning.md +0 -0
  348. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/daemon-store.md +0 -0
  349. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/detection-upload.md +0 -0
  350. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/event-time.md +0 -0
  351. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/monitor-inventory.md +0 -0
  352. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/notification-delivery.md +0 -0
  353. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/production-agent-observability.md +0 -0
  354. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/reasoning-jev.md +0 -0
  355. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/session-input.md +0 -0
  356. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/docs/specs/usage-upload.md +0 -0
  357. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/examples/observations/custom_agent.py +0 -0
  358. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/README.md +0 -0
  359. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/bedrock-sandbox/.gitignore +0 -0
  360. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/bedrock-sandbox/ci.tf +0 -0
  361. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/bedrock-sandbox/main.tf +0 -0
  362. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/bedrock-sandbox/outputs.tf +0 -0
  363. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/bedrock-sandbox/variables.tf +0 -0
  364. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/.gitignore +0 -0
  365. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/README.md +0 -0
  366. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/check.sh +0 -0
  367. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/ci.tf +0 -0
  368. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/connect.sh +0 -0
  369. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/envoy/Dockerfile +0 -0
  370. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/envoy/entrypoint.sh +0 -0
  371. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/envoy/litellm.yaml +0 -0
  372. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/litellm/Dockerfile +0 -0
  373. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/litellm/config.subscription.yaml +0 -0
  374. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/litellm/config.yaml +0 -0
  375. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/litellm/entrypoint.sh +0 -0
  376. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/main.tf +0 -0
  377. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/moved.tf +0 -0
  378. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/outputs.tf +0 -0
  379. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/smoke.sh +0 -0
  380. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/user-key.sh +0 -0
  381. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/guard-staging/variables.tf +0 -0
  382. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/modules/express-gateway/main.tf +0 -0
  383. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/modules/express-gateway/outputs.tf +0 -0
  384. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/infra/modules/express-gateway/variables.tf +0 -0
  385. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/e2e/claude.sh +0 -0
  386. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/e2e/scenarios.sh +0 -0
  387. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/envoy/envoy.yaml +0 -0
  388. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/envoy/run.sh +0 -0
  389. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/litellm/README.md +0 -0
  390. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/litellm/config.example.yaml +0 -0
  391. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/litellm/config.subscription.yaml +0 -0
  392. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/litellm/e2e/config.baseten.yaml +0 -0
  393. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/litellm/e2e/config.mock.yaml +0 -0
  394. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/litellm/e2e/mock_upstream.py +0 -0
  395. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/litellm/e2e/parity.py +0 -0
  396. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/litellm/stacktrace_keys.py +0 -0
  397. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/integrations/litellm/stacktrace_litellm.py +0 -0
  398. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/scripts/cost_latency.py +0 -0
  399. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/scripts/git-hooks/pre-push +0 -0
  400. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/scripts/install-hooks.sh +0 -0
  401. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/__main__.py +0 -0
  402. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/analysis.py +0 -0
  403. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/build.py +0 -0
  404. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/core/__init__.py +0 -0
  405. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/core/observations.py +0 -0
  406. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/__init__.py +0 -0
  407. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/acquire.py +0 -0
  408. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/join.py +0 -0
  409. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/observed.py +0 -0
  410. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/orchestrate.py +0 -0
  411. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/project_map.py +0 -0
  412. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/record.py +0 -0
  413. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/render.py +0 -0
  414. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/__init__.py +0 -0
  415. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/baseline.py +0 -0
  416. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/clock.py +0 -0
  417. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/component_usage.py +0 -0
  418. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/components.py +0 -0
  419. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/copies.py +0 -0
  420. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/evidence.py +0 -0
  421. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/ledger.py +0 -0
  422. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/measures.py +0 -0
  423. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/org_baselines.py +0 -0
  424. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/output.py +0 -0
  425. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/price_class.py +0 -0
  426. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/reasons.py +0 -0
  427. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/runs.py +0 -0
  428. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/tokens.py +0 -0
  429. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/totals.py +0 -0
  430. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/__init__.py +0 -0
  431. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/accounts.py +0 -0
  432. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/activity_log.py +0 -0
  433. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/bom.py +0 -0
  434. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/cli.py +0 -0
  435. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/composition.py +0 -0
  436. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/identity.py +0 -0
  437. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/jobs.py +0 -0
  438. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/lifecycle.py +0 -0
  439. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/observer.py +0 -0
  440. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/paths.py +0 -0
  441. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/scan.py +0 -0
  442. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/service.py +0 -0
  443. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/__init__.py +0 -0
  444. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/analyzer.py +0 -0
  445. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/blocked.py +0 -0
  446. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/priors.py +0 -0
  447. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/__init__.py +0 -0
  448. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/jev-v1/stacktrace-deceptive-completion.json +0 -0
  449. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/jev-v2/stacktrace-deceptive-completion.json +0 -0
  450. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/jev-v2/stacktrace-infra-unsafe-action.json +0 -0
  451. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/jev-v3/stacktrace-deceptive-completion.json +0 -0
  452. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/jev-v3/stacktrace-infra-unsafe-action.json +0 -0
  453. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/v1/exclusions.md +0 -0
  454. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/v1/framing.md +0 -0
  455. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/v1/stacktrace-deceptive-completion.md +0 -0
  456. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/verdict.py +0 -0
  457. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/windows.py +0 -0
  458. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/__init__.py +0 -0
  459. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/analyzer.py +0 -0
  460. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/check.py +0 -0
  461. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/cli.py +0 -0
  462. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/exchange.py +0 -0
  463. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/__init__.py +0 -0
  464. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/_json.py +0 -0
  465. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/anthropic.py +0 -0
  466. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/bedrock.py +0 -0
  467. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/body.py +0 -0
  468. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/openai_chat.py +0 -0
  469. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/openai_responses.py +0 -0
  470. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/service.py +0 -0
  471. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/session.py +0 -0
  472. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/sink.py +0 -0
  473. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/__init__.py +0 -0
  474. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/inventory.py +0 -0
  475. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/offline.py +0 -0
  476. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/reasoning.py +0 -0
  477. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/server.py +0 -0
  478. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/apple-icon.png +0 -0
  479. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/favicon.ico +0 -0
  480. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/fonts/OFL.txt +0 -0
  481. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/fonts/dm-mono-400-latin.woff2 +0 -0
  482. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/fonts/dm-mono-500-latin.woff2 +0 -0
  483. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/fonts/dm-sans-latin.woff2 +0 -0
  484. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/fonts/playfair-display-600-italic-latin.woff2 +0 -0
  485. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/icon.svg +0 -0
  486. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/index.html +0 -0
  487. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/inventory.js +0 -0
  488. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/state.py +0 -0
  489. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/verdicts.py +0 -0
  490. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/watch.py +0 -0
  491. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/options.py +0 -0
  492. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/private_state.py +0 -0
  493. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/py.typed +0 -0
  494. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/__init__.py +0 -0
  495. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/identity.py +0 -0
  496. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/payload.py +0 -0
  497. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/policy.py +0 -0
  498. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/policy_service.py +0 -0
  499. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/policy_worker.py +0 -0
  500. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/redact.py +0 -0
  501. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/spool.py +0 -0
  502. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/sync_detect.py +0 -0
  503. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/sdk.py +0 -0
  504. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/__init__.py +0 -0
  505. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/access.py +0 -0
  506. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/entrypoint.py +0 -0
  507. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/index.py +0 -0
  508. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/lineage.py +0 -0
  509. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/outcome.py +0 -0
  510. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/protocols.py +0 -0
  511. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/render.py +0 -0
  512. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/telemetry/__init__.py +0 -0
  513. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/telemetry/cli.py +0 -0
  514. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/telemetry/posthog.py +0 -0
  515. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/telemetry/state.py +0 -0
  516. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/webhook/__init__.py +0 -0
  517. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/webhook/cli.py +0 -0
  518. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/src/stacktrace/webhook/config.py +0 -0
  519. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/__init__.py +0 -0
  520. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/agent_bom_fixture.py +0 -0
  521. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/__init__.py +0 -0
  522. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/fakes.py +0 -0
  523. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/scenarios.py +0 -0
  524. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_as_of_cuts_every_timed_collection.py +0 -0
  525. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_baseline.py +0 -0
  526. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_clock.py +0 -0
  527. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_component_usage.py +0 -0
  528. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_components.py +0 -0
  529. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_copies.py +0 -0
  530. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_cost_is_tokens.py +0 -0
  531. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_cost_latency.py +0 -0
  532. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_evidence.py +0 -0
  533. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_ledger.py +0 -0
  534. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_measures.py +0 -0
  535. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_org_baselines.py +0 -0
  536. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_output.py +0 -0
  537. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_price_class.py +0 -0
  538. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_reasons.py +0 -0
  539. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_rules_baseline.py +0 -0
  540. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_runs.py +0 -0
  541. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_totals.py +0 -0
  542. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/cost/test_unfinished_output_counts_what_it_shows.py +0 -0
  543. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/__init__.py +0 -0
  544. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/observing.py +0 -0
  545. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_accounts.py +0 -0
  546. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_activity_log.py +0 -0
  547. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_composition.py +0 -0
  548. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_config.py +0 -0
  549. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_cost_guidance.py +0 -0
  550. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_db.py +0 -0
  551. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_detection_needs_no_subscriber.py +0 -0
  552. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_identity.py +0 -0
  553. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_job_thread.py +0 -0
  554. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_jobs.py +0 -0
  555. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_lifecycle.py +0 -0
  556. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_observer.py +0 -0
  557. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_queue_reader.py +0 -0
  558. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_runtime.py +0 -0
  559. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_scan.py +0 -0
  560. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_service.py +0 -0
  561. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_socket.py +0 -0
  562. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_stage_times.py +0 -0
  563. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_store.py +0 -0
  564. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_subagent_routing.py +0 -0
  565. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/daemon/test_the_drained_payload_is_the_cold_one.py +0 -0
  566. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/detector_session_fixture.py +0 -0
  567. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/__init__.py +0 -0
  568. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/fixtures/claude-code-2.1.296-suite/gateway-last-turn.json +0 -0
  569. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/fixtures/claude-code-2.1.296-suite/projects/run/b23c3bab-a677-4b5f-ac36-e132c7df29e5.jsonl +0 -0
  570. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_analyzer.py +0 -0
  571. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_bodies_and_logs.py +0 -0
  572. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_call_records.py +0 -0
  573. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_check.py +0 -0
  574. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_every_choice_is_read.py +0 -0
  575. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_every_read_field_is_validated.py +0 -0
  576. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_every_shortfall_is_a_recorded_fallback.py +0 -0
  577. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_gateway_keys.py +0 -0
  578. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_gateway_scripts.py +0 -0
  579. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_litellm_stream.py +0 -0
  580. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_litellm_subscription_config.py +0 -0
  581. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_parity_live_capture.py +0 -0
  582. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_service.py +0 -0
  583. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_session.py +0 -0
  584. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/gateway/test_unstated_outcomes.py +0 -0
  585. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/__init__.py +0 -0
  586. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/inventory_harness.mjs +0 -0
  587. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_cost_range_switch.py +0 -0
  588. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_inventory.py +0 -0
  589. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_inventory_page.py +0 -0
  590. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_offline.py +0 -0
  591. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_reasoning_gates.py +0 -0
  592. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_render.py +0 -0
  593. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_server.py +0 -0
  594. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_site_assets.py +0 -0
  595. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_state.py +0 -0
  596. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_verdicts.py +0 -0
  597. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/monitor/test_watch.py +0 -0
  598. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/observations/test_contract.py +0 -0
  599. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/observations/test_decisions.py +0 -0
  600. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/observations/test_event_envelope.py +0 -0
  601. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/__init__.py +0 -0
  602. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/helpers.py +0 -0
  603. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_activity.py +0 -0
  604. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_cli.py +0 -0
  605. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_client.py +0 -0
  606. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_layers_compose.py +0 -0
  607. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_payload_reaches_the_cloud_model.py +0 -0
  608. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_redaction.py +0 -0
  609. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_spool.py +0 -0
  610. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_upload_contract.py +0 -0
  611. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_wire_payload.py +0 -0
  612. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_identity.py +0 -0
  613. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_no_local_path_survives_redaction.py +0 -0
  614. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_payload.py +0 -0
  615. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_policy.py +0 -0
  616. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_policy_service.py +0 -0
  617. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_policy_service_cli.py +0 -0
  618. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_redact_payload.py +0 -0
  619. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_spool.py +0 -0
  620. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_sync.py +0 -0
  621. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_sync_detect.py +0 -0
  622. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_upload_contract.py +0 -0
  623. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_usage_client.py +0 -0
  624. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/remote/test_usage_contract.py +0 -0
  625. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/sdk/test_observation_client.py +0 -0
  626. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/telemetry/__init__.py +0 -0
  627. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_activity_log.py +0 -0
  628. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_cli.py +0 -0
  629. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_events.py +0 -0
  630. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_every_derived_site.py +0 -0
  631. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_every_internal_save_is_reported.py +0 -0
  632. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_hooks.py +0 -0
  633. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_release_gate.py +0 -0
  634. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_state.py +0 -0
  635. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_uploader.py +0 -0
  636. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_acquire.py +0 -0
  637. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_adr_cross_references_are_reciprocal.py +0 -0
  638. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_agent_instance_id.py +0 -0
  639. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_agent_support_doc.py +0 -0
  640. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_analysis.py +0 -0
  641. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_bom_shape.py +0 -0
  642. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_call_status_conventions.py +0 -0
  643. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_cli.py +0 -0
  644. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_correlate_orchestrate.py +0 -0
  645. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_correlate_render.py +0 -0
  646. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_correlated_session.py +0 -0
  647. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detection_components.py +0 -0
  648. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detection_event_time.py +0 -0
  649. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detection_subject.py +0 -0
  650. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_analyzer_contract.py +0 -0
  651. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_analyzer_live.py +0 -0
  652. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_blocked.py +0 -0
  653. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_cache.py +0 -0
  654. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_client_errors.py +0 -0
  655. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_declared_egress.py +0 -0
  656. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_infra_reasoning.py +0 -0
  657. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_jev.py +0 -0
  658. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_names_the_service.py +0 -0
  659. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_new_deterministic.py +0 -0
  660. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_priors.py +0 -0
  661. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_prompts.py +0 -0
  662. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_reasoning.py +0 -0
  663. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_render.py +0 -0
  664. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_run.py +0 -0
  665. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_verdict.py +0 -0
  666. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_why_it_stopped.py +0 -0
  667. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_detector_windows.py +0 -0
  668. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_entrypoint_conventions.py +0 -0
  669. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_evidence_is_dated_not_numbered.py +0 -0
  670. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_fingerprint_covers_what_the_analyzer_reads.py +0 -0
  671. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_help_sections.py +0 -0
  672. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_join.py +0 -0
  673. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_monitor_cli.py +0 -0
  674. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_no_live_document_states_the_old_stage_three_default.py +0 -0
  675. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_no_test_undoes_every_patch_at_once.py +0 -0
  676. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_observed.py +0 -0
  677. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_openaca_contract.py +0 -0
  678. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_openaidr_contract.py +0 -0
  679. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_option_arity_matches_the_binary.py +0 -0
  680. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_project_map.py +0 -0
  681. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_python_namespace.py +0 -0
  682. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_readme_examples_are_real_output.py +0 -0
  683. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_release_readiness.py +0 -0
  684. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_sessions_access.py +0 -0
  685. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_sessions_end_to_end.py +0 -0
  686. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_sessions_protocol_typing.py +0 -0
  687. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_sessions_protocols.py +0 -0
  688. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_sessions_render.py +0 -0
  689. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_shell_separators_match_the_shell.py +0 -0
  690. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_signed_in_asks_the_agent.py +0 -0
  691. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_stored_verdicts_are_never_gated_on_reasoning.py +0 -0
  692. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_the_detector_spec_lists_the_shipped_catalogue.py +0 -0
  693. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_the_jev_spec_states_the_shipped_thresholds.py +0 -0
  694. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_the_locality_claim_is_qualified_everywhere.py +0 -0
  695. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_verification_subcommands_match_the_binary.py +0 -0
  696. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/test_what_jev_is_told_is_what_was_disclosed.py +0 -0
  697. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/tool_fields.py +0 -0
  698. {stacktrace_cli-0.12.0 → stacktrace_cli-0.13.0}/tests/webhook/test_cli.py +0 -0
@@ -5,6 +5,12 @@ on:
5
5
  branches: [main]
6
6
  pull_request:
7
7
 
8
+ # A new push to a PR cancels the run for the push it replaces, as in Fleet.
9
+ # Runs on main are never cancelled, so every merged commit is checked.
10
+ concurrency:
11
+ group: ci-${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
13
+
8
14
  jobs:
9
15
  lint-and-test:
10
16
  runs-on: ubuntu-latest
@@ -240,13 +240,23 @@ the alternative we rejected? If yes, write the ADR.
240
240
  full ADR. The cost of one Read is much smaller than the cost of
241
241
  re-deriving or re-litigating a decision.
242
242
 
243
- **Supersede, never edit.** Accepted ADRs are immutable. If a later
244
- decision contradicts an existing ADR, write a NEW ADR with
243
+ **Supersede or amend, never edit.** Accepted ADRs are immutable. If a later
244
+ decision contradicts an existing ADR, write a NEW ADR that supersedes or
245
+ amends it, as the next rule decides. For a supersession, put
245
246
  `supersedes: NNNN` in its frontmatter, and update the old one's
246
247
  frontmatter to `status: superseded` + `superseded-by: NNNN`. Old PRs
247
248
  need to remain readable against the rules in effect at the time —
248
249
  silently editing an accepted ADR breaks that contract.
249
250
 
251
+ **Amend or supersede: one test.** Ask if any decision in the old ADR still
252
+ binds, whether or not the ADR numbers its decisions. If one does, amend: put
253
+ `amends: NNNN` on the new ADR and `amended-by: NNNN` on the old one, and both
254
+ stay active. If none does, supersede. Only this test decides. The size of
255
+ the change, the importance of the replaced clause, and the old ADR's "When
256
+ to revisit" text do not change the result. `docs/adrs/INDEX.md` gives the
257
+ worked example. A reviewer reports the choice only when the finding names
258
+ every decision in the old ADR and shows that none still binds.
259
+
250
260
  ## Commits and PRs
251
261
 
252
262
  - Frequent commits, one logical change per commit.
@@ -364,9 +374,18 @@ review catches the glaring issues, and later reviews check only what changed.
364
374
  - Batch related fixes into one tested update before requesting re-review.
365
375
  Avoid duplicate review requests for the same head.
366
376
  - An automated fixer pushes ordinary commits to the existing PR branch and
367
- runs every required gate. It does not bypass gates, merge, rebase, or
368
- force-push, or change workflows, permissions, credentials, or branch
369
- protection. Report an environment failure or required rebase as a blocker.
377
+ runs every required gate. It does not bypass gates, merge, or change
378
+ workflows, permissions, credentials, or branch protection. It force-pushes
379
+ only after a rebase, as the next rule says. Report an environment failure
380
+ as a blocker.
381
+ - When a PR branch conflicts with its base branch, the automated fixer
382
+ rebases it onto the current base branch. The base branch is normally
383
+ `main`. It resolves the conflicts, runs every required gate, and pushes
384
+ with `git push --force-with-lease`. It does not merge the base branch into
385
+ the PR branch. PR branches are rarely shared, so rewritten history is
386
+ acceptable. Report a conflict as a blocker when both sides change the same
387
+ logic and each resolution loses behavior. A rebase with no other change is
388
+ not a fix round.
370
389
  - After pushing fixes, wait for CI and a completed review of the current
371
390
  head. Silence, an older review, or a running review is not clearance.
372
391
  - Stop and ask for human input when the same failure repeats without progress.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: stacktrace-cli
3
- Version: 0.12.0
3
+ Version: 0.13.0
4
4
  Summary: CLI for Stacktrace — Detection and Response platform for AI Agents.
5
5
  Project-URL: Homepage, https://stacktrace.ai
6
6
  Author-email: "Stacktrace AI, Inc" <founders@stacktrace.ai>
@@ -20,7 +20,7 @@ Classifier: Topic :: Security
20
20
  Requires-Python: >=3.11
21
21
  Requires-Dist: click>=8.1
22
22
  Requires-Dist: httpx<1.0.dev0,>=0.28.1
23
- Requires-Dist: openaca==0.10.1
23
+ Requires-Dist: openaca==0.11.0
24
24
  Requires-Dist: openaidr==0.7.0
25
25
  Requires-Dist: posthog<8,>=7.0
26
26
  Requires-Dist: pydantic<3,>=2.10
@@ -52,7 +52,7 @@ Requires Python 3.11 or newer.
52
52
 
53
53
  ```console
54
54
  $ stacktrace --version
55
- stacktrace 0.12.0 (openaca 0.10.1)
55
+ stacktrace 0.13.0
56
56
  ```
57
57
 
58
58
  ## Python package namespace
@@ -107,9 +107,14 @@ stacktrace webhook disable
107
107
  ```
108
108
 
109
109
  `configure` prompts for an optional HMAC-SHA256 signing secret without echoing
110
- it. The endpoint receives a narrow JSON document containing the event ID, rule,
111
- severity, confidence and session identity—not transcript content, finding prose
112
- or evidence. Delivery is at least once, so receivers should deduplicate on
110
+ it. The endpoint receives a narrow JSON document: the event ID, detection time,
111
+ rule, severity, confidence and session identity, plus, when the finding has
112
+ them, the rule's catalogue title, the component it concerns (type and name) and
113
+ the kinds of evidence it cites. For `stacktrace-destructive-action` the
114
+ evidence kind is `rm -rf` and the paths it deleted outside the workspace,
115
+ redacted so an absolute path is never sent (ADR-0073, ADR-0084). Transcript
116
+ content, remediation text and evidence detail are not sent. Delivery is at
117
+ least once, so receivers should deduplicate on
113
118
  `event_id`. The URL and secret are stored in a mode-0600 host configuration
114
119
  file. HTTP is accepted only for loopback development endpoints.
115
120
 
@@ -24,7 +24,7 @@ Requires Python 3.11 or newer.
24
24
 
25
25
  ```console
26
26
  $ stacktrace --version
27
- stacktrace 0.12.0 (openaca 0.10.1)
27
+ stacktrace 0.13.0
28
28
  ```
29
29
 
30
30
  ## Python package namespace
@@ -79,9 +79,14 @@ stacktrace webhook disable
79
79
  ```
80
80
 
81
81
  `configure` prompts for an optional HMAC-SHA256 signing secret without echoing
82
- it. The endpoint receives a narrow JSON document containing the event ID, rule,
83
- severity, confidence and session identity—not transcript content, finding prose
84
- or evidence. Delivery is at least once, so receivers should deduplicate on
82
+ it. The endpoint receives a narrow JSON document: the event ID, detection time,
83
+ rule, severity, confidence and session identity, plus, when the finding has
84
+ them, the rule's catalogue title, the component it concerns (type and name) and
85
+ the kinds of evidence it cites. For `stacktrace-destructive-action` the
86
+ evidence kind is `rm -rf` and the paths it deleted outside the workspace,
87
+ redacted so an absolute path is never sent (ADR-0073, ADR-0084). Transcript
88
+ content, remediation text and evidence detail are not sent. Delivery is at
89
+ least once, so receivers should deduplicate on
85
90
  `event_id`. The URL and secret are stored in a mode-0600 host configuration
86
91
  file. HTTP is accepted only for loopback development endpoints.
87
92
 
@@ -0,0 +1,41 @@
1
+ # Security policy
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ Email **security@stacktrace.ai**. Please do not open a public issue, post in a
6
+ public channel, or disclose details before we have released a fix.
7
+
8
+ A useful report says:
9
+
10
+ - the `stacktrace --version` output and your operating system;
11
+ - what you did, what happened, and what you expected;
12
+ - whether the issue can expose session content, credentials or file paths, or
13
+ send anything off the machine that [docs/trust.md](docs/trust.md) says stays
14
+ on it.
15
+
16
+ We acknowledge a report within three business days and keep you informed until
17
+ it is resolved. Once a fix is released we credit you in the release notes,
18
+ unless you ask us not to.
19
+
20
+ ## Supported versions
21
+
22
+ Fixes ship in a new release on PyPI (`stacktrace-cli`). Only the latest release
23
+ is supported: upgrade with `uv tool upgrade stacktrace-cli` or
24
+ `pip install -U stacktrace-cli`. A published version is never re-uploaded, so a
25
+ fix always arrives as a new version number.
26
+
27
+ ## Scope
28
+
29
+ In scope: the `stacktrace` command, its daemon, and every path by which it
30
+ sends data off the machine (see [docs/trust.md](docs/trust.md)).
31
+
32
+ Session collection and composition analysis come from two open-source
33
+ dependencies, [`openaidr`](https://github.com/open-agent-security/openaidr) and
34
+ [`openaca`](https://pypi.org/project/openaca/). Report an issue in either one
35
+ to us at the same address; we coordinate the fix upstream.
36
+
37
+ ## Good-faith research
38
+
39
+ We will not pursue legal action against research that is done in good faith,
40
+ stays within your own machines and accounts, avoids harm to other people's
41
+ data, and gives us reasonable time to fix the issue before disclosure.
@@ -5,7 +5,7 @@ status: accepted
5
5
  date: 2026-08-28
6
6
  supersedes: null
7
7
  superseded-by: null
8
- amended-by: 0011, 0027, 0031, 0039, 0064, 0084, 0086, 0096, 0109, 0118
8
+ amended-by: 0011, 0027, 0031, 0039, 0064, 0084, 0086, 0096, 0109, 0118, 0138, 0139
9
9
  ---
10
10
 
11
11
  ## Context
@@ -6,7 +6,7 @@ date: 2026-09-03
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: null
9
- amended-by: 0087
9
+ amended-by: 0087, 0131
10
10
  ---
11
11
 
12
12
  ## Context
@@ -5,6 +5,7 @@ status: accepted
5
5
  date: 2026-09-03
6
6
  supersedes: null
7
7
  superseded-by: null
8
+ amended-by: 0136
8
9
  ---
9
10
 
10
11
  ## Context
@@ -6,7 +6,7 @@ date: 2026-09-05
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: null
9
- amended-by: null
9
+ amended-by: 0139
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-09-17
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0006
9
- amended-by: 0032, 0036, 0037, 0038, 0039, 0045, 0046, 0066, 0072, 0107, 0113, 0118
9
+ amended-by: 0032, 0036, 0037, 0038, 0039, 0045, 0046, 0066, 0072, 0107, 0113, 0118, 0135
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-09-25
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: null
9
- amended-by: 0123
9
+ amended-by: 0123, 0143
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-09-25
6
6
  supersedes: 0066
7
7
  superseded-by: null
8
8
  amends: 0031, 0045, 0058
9
- amended-by: null
9
+ amended-by: 0143
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-09-26
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0067, 0071
9
- amended-by: 0084, 0085
9
+ amended-by: 0084, 0085, 0138
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-10-02
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0039
9
- amended-by: null
9
+ amended-by: 0131
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-10-06
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0006
9
- amended-by: 0103, 0109, 0115, 0116, 0130
9
+ amended-by: 0103, 0109, 0115, 0116, 0130, 0140
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-10-08
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: null
9
- amended-by: 0109, 0110, 0112, 0121
9
+ amended-by: 0109, 0110, 0112, 0121, 0140
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-10-11
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0006, 0096, 0101
9
- amended-by: 0110, 0112
9
+ amended-by: 0110, 0112, 0140
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-10-11
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0031, 0092, 0093
9
- amended-by: null
9
+ amended-by: 0142
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-10-11
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0001, 0004, 0006, 0031, 0061
9
- amended-by: null
9
+ amended-by: 0135
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-10-13
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0070
9
- amended-by: null
9
+ amended-by: 0143
10
10
  ---
11
11
 
12
12
  ## Context
@@ -0,0 +1,87 @@
1
+ ---
2
+ id: 0131
3
+ title: Activate hook policy without a privileged runtime
4
+ status: proposed
5
+ date: 2026-10-16
6
+ supersedes: null
7
+ superseded-by: null
8
+ amends: 0018, 0090, 0135
9
+ amended-by: 0143
10
+ ---
11
+
12
+ ## Context
13
+
14
+ The user wants existing policy configurations enforced through hooks.
15
+ The user accepts the stated loading and context-injection gaps.
16
+ Existing installations can have root-owned policy files and a scheduled runtime.
17
+ An unprivileged installer cannot remove those files.
18
+
19
+ ## Decision
20
+
21
+ Require Claude Code 2.1.274 or newer.
22
+ Use `PreToolUse` for MCP tools, Skill calls and namespaced plugin-agent calls.
23
+ Use `UserPromptExpansion` for direct slash-command expansion.
24
+ Use native MCP provenance instead of guessing an owner from the tool-name prefix.
25
+ Send only bounded selector fields to the daemon.
26
+ Do not send prompts, arguments, transcripts, tool results or expansion text.
27
+
28
+ Block only a confirmed policy restriction.
29
+ Unknown or ambiguous subjects use the known category default.
30
+ A blocked category default remains an intentional policy restriction.
31
+ Missing vulnerability coordinates do not add component or plugin-sibling blocks.
32
+ Retain the last completed snapshot during failed refreshes.
33
+ Use known defaults before the first completed snapshot.
34
+
35
+ Defer when no applicable policy or category can be established.
36
+
37
+ Continue through native permissions on invalid input, protocol errors, daemon outages and invalid local configuration.
38
+ Set both native command handlers to `onFailure: continue` with a five-second timeout.
39
+ Command launch failures and timeouts do not add policy blocks.
40
+ Neither `allow` nor `defer` grants a native permission.
41
+ This contract replaces the earlier deny-on-uncertainty proposal.
42
+
43
+ The shared installer installs or updates the official user plugin through native Claude commands.
44
+ Plugin installation requires neither enrollment, policy evidence nor a running daemon.
45
+ Plugin installation does not write enrollment or a local policy-mode flag.
46
+ Plugin validation and native conformance tests check hook declarations and failure behavior.
47
+ The daemon serves hook policy automatically after enrollment.
48
+ Normal enrollment never provisions or updates the legacy privileged helper.
49
+
50
+ Ignore the former `hook_policy_enabled` configuration key.
51
+ Start a new Claude session after plugin installation.
52
+ Use native plugin controls to enable or disable hook dispatch.
53
+
54
+ Keep existing root-owned managed policy until the administrator completes migration.
55
+ Install the plugin and check the new session's status.
56
+ `hooks migration` prints a fixed administrator command chain.
57
+ It does not execute that chain.
58
+ The chain stops the legacy job and removes its artifact, enrollment, state, lock and private runtime.
59
+ Other administrators' managed settings remain in force.
60
+
61
+ Report migration as incomplete while any removed path remains.
62
+ Disabling the plugin does not recreate managed policy.
63
+
64
+ Amend ADR-0018 for the disposable policy child defined in ADR-0136.
65
+ It calls the public OpenACA facade without CLI output parsing.
66
+ Amend ADR-0090 for the internal `hooks admit` command.
67
+ Do not initialize command analytics or send per-action command events from that path.
68
+ Keep normal command telemetry for user-facing setup and status commands.
69
+
70
+ Disclose plugin loading, startup hooks, LSP startup and preloaded skill-context injection as gaps.
71
+ Also disclose MCP connections, resources, prompt attachment and disabled or unlaunched hooks.
72
+ Require a new session after switching projects.
73
+ Do not claim that hooks detect every unsupported in-session `/cd` switch.
74
+ A previous call does not prove current adapter health.
75
+
76
+ Release and pin the public evidence API before rollout.
77
+ Use dependency overlays only for development tests.
78
+ Do not commit an overlay or treat it as a published release.
79
+ Complete native-host, released-pair installation, managed-plugin approval and cloud-bootstrap checks before general installer cutover.
80
+
81
+ ## Alternatives considered
82
+
83
+ - Deny on identity, coverage or operational uncertainty: rejected by the user because implementation gaps must not block permitted work.
84
+ - Keep managed settings as a required fallback: rejected because it retains the privileged runtime.
85
+ - Delete root-owned files from the user installer: rejected because the administrator owns that transition.
86
+ - Use only `PreToolUse`: rejected because direct slash-command expansion has a separate event.
87
+ - Count every hook as a remote command: rejected because host callbacks are not developer command use.
@@ -0,0 +1,111 @@
1
+ ---
2
+ id: 0135
3
+ title: Enforce policy through the daemon and agent hooks
4
+ status: proposed
5
+ date: 2026-09-29
6
+ supersedes: null
7
+ superseded-by: null
8
+ amends: 0031, 0118
9
+ amended-by: 0136, 0131, 0143
10
+ ---
11
+
12
+ ## Context
13
+
14
+ Fleet supplies organization policy. ADR-0087 installs its compiled restrictions through a privileged scheduled job.
15
+ The replacement must use the existing user daemon and thin agent hooks.
16
+ Normal setup and enforcement must not require sudo or a separate privileged policy runtime.
17
+ Existing installations can require one administrator cleanup step.
18
+
19
+ The policy language already supports MCPs, plugins, skill defaults, vulnerability gates and posture gates.
20
+ The replacement must retain those policy configurations.
21
+ The user accepts enforcement of hook-visible use and the stated loading and context-injection gaps.
22
+
23
+ ## Decision
24
+
25
+ Keep validated policy inputs in the existing daemon database.
26
+ Keep component decisions in memory.
27
+ Use one background worker to collect and evaluate one evidence bundle for each fixed project scope.
28
+ Use the existing private Unix socket for local decisions.
29
+ Hooks do not fetch policy, scan components or evaluate policy.
30
+
31
+ Claude Code is the first host.
32
+ Cover MCP tool calls, Skill calls, direct slash-command expansion and namespaced plugin-agent calls.
33
+ Plugin children inherit their owning plugin's policy.
34
+ Keep the current OpenACA policy language and evaluator.
35
+ Do not add individual standalone-skill lists, tool-argument rules or an approval outcome.
36
+
37
+ This is the endpoint component-admission exception to ADR-0118 decision 2.
38
+ The existing user daemon evaluates local composition, vulnerability and posture evidence through the public OpenACA facade.
39
+ Core retains session-context rules, shared session state and hosted evaluation.
40
+ This exception does not widen the content-export boundary.
41
+
42
+ 1. Store the revision floor and publication digest before semantic validation.
43
+ Store the validated desired policy separately.
44
+ A rejected document cannot erase the recorded revision or replace the last valid policy.
45
+ This amends ADR-0031 decision 4 for policy inputs and bounded diagnostics only.
46
+ 2. Bind inputs to the canonical API origin, verified organization and enrollment epoch.
47
+ Credential changes advance the epoch.
48
+ Asset registration alone does not change the epoch.
49
+ An A-to-B-to-A transition cannot restore an old decision.
50
+ 3. Collect one evidence bundle outside the input locks.
51
+ Publish its decisions only if the captured inputs and scope generation still match.
52
+ Do not persist decisions, composition or risk snapshots.
53
+ 4. Block a uniquely resolved subject only when the completed active snapshot establishes the block.
54
+ Retain that snapshot during asynchronous replacement and failed refreshes.
55
+ Do not expire its decisions on a timer.
56
+ Replace its decisions, defaults, revision and evidence identifiers atomically.
57
+ Unknown or ambiguous subjects use the known category default.
58
+ A blocked category default remains a policy restriction.
59
+ Missing vulnerability coordinates do not add component or plugin-sibling blocks.
60
+ 5. Continue through native permissions when the policy or category is unknown.
61
+ Protocol errors, daemon outages and hook launch or timeout failures do not create policy blocks.
62
+ Neither `allow` nor `defer` grants a native permission.
63
+ 6. Retain ADR-0062's lock for credential-dependent requests and input publication.
64
+ Collect evidence outside that lock.
65
+ Recheck enrollment before publication and authorization.
66
+ Check the input token before publication.
67
+ Authorization reads the active snapshot during replacement.
68
+ 7. Report revisions, evidence age, errors, declared coverage and the last observed call.
69
+ Do not treat an installed plugin or a previous call as proof of adapter health.
70
+ 8. Support one fixed project per Claude session.
71
+ Require a new session after a project switch.
72
+ Disclose that hooks cannot reliably detect every in-session `/cd` switch.
73
+
74
+ ADR-0136 defines the evidence bundle and its refresh limits.
75
+ ADR-0131 defines activation, migration and the uncertainty contract.
76
+ The [enforcement spec](../specs/policy-enforcement.md) defines the current algorithm.
77
+ The [rollout spec](../specs/hook-policy-rollout.md) separates source implementation from release and deployment gates.
78
+
79
+ ## Alternatives considered
80
+
81
+ - **Keep managed settings as the normal path.** Rejected because it keeps the privileged runtime and ongoing sudo requirement.
82
+ - **Put an evaluator in each plugin.** Rejected because it duplicates policy and evidence handling.
83
+ - **Call Fleet for each invocation.** Rejected because network availability must not govern the local action path.
84
+ - **Deny when identity, inventory or risk coverage is incomplete.** Rejected by the user because implementation gaps must not create policy restrictions.
85
+ - **Persist effective decisions.** Deferred because component decisions require current identity and evidence.
86
+ Restore desired inputs after restart, then rebuild decisions.
87
+ Use known category defaults during rebuilding, or defer when no default can be established.
88
+ - **Refresh only after a policy change.** Rejected because local inventory and advisory data can change at the same policy revision.
89
+ - **Support `/cd` through hook working-directory fields.** Rejected because shell directory changes and configuration switches can produce the same observed fields.
90
+ - **Add receipts, leases or adapter-health claims.** Deferred because the local decision path does not require them.
91
+
92
+ ## Consequences
93
+
94
+ The same policy document governs hook-visible use without repeated managed-settings writes.
95
+ A confirmed restriction blocks an invocation.
96
+ A coverage or availability gap does not add a restriction.
97
+ Native permissions remain in force.
98
+
99
+ The hooks do not prevent plugin loading, startup hooks, LSP startup or earlier skill-context injection.
100
+ They do not intercept MCP connections, resources or prompt attachment.
101
+ Disabled or unlaunched hooks remain coverage gaps.
102
+ Hooks do not provide complete mediation or a tamper-resistant boundary.
103
+
104
+ The legacy managed-policy path remains available until each installation completes its explicit migration.
105
+ No design or implementation PR merges, publishes or deploys automatically.
106
+
107
+ ## When to revisit
108
+
109
+ Add another host only after its own conformance checks pass.
110
+ Revisit project switching when the host exposes a reliable configuration-change signal.
111
+ Add durable decisions or health reporting only when measured requirements justify their extra state.
@@ -0,0 +1,102 @@
1
+ ---
2
+ id: 0136
3
+ title: Bound policy evidence collection as one bundle
4
+ status: proposed
5
+ date: 2026-10-16
6
+ supersedes: null
7
+ superseded-by: null
8
+ amends: 0020, 0135
9
+ amended-by: 0143
10
+ ---
11
+
12
+ ## Context
13
+
14
+ The observation daemon's cached BOM is not the domain graph that the policy evaluator needs.
15
+ Separate composition, vulnerability and posture caches would require a protocol to join their generations.
16
+ A stalled collector must not prevent later policy work.
17
+
18
+ ## Decision
19
+
20
+ Collect one policy evidence bundle for each fixed Claude scope.
21
+ Use `openaca.core.collect_policy_evidence` and `openaca.core.apply_risk_gates`.
22
+ Keep the observation composition cache unchanged.
23
+ Do not render or install a managed-settings artifact.
24
+
25
+ Amend ADR-0020 for one disposable child of the existing user daemon.
26
+ The child imports the public library facade directly.
27
+ It does not invoke the OpenACA CLI or interpret CLI output.
28
+ Use isolated Python imports and a 45-second deadline.
29
+ Give the child its own deadline if the parent exits.
30
+ Discard collector stdout and stderr.
31
+
32
+ Return bounded selector decisions, source paths and evidence identifiers to the daemon.
33
+ Include an inventory content digest and the requested vulnerability and posture collection identifiers.
34
+ Use null for an unrequested gate.
35
+ Do not claim a provider database revision that the facade does not expose.
36
+
37
+ Use one worker with a 30-second tick.
38
+ Poll desired policy after 60 seconds have elapsed since the last attempt.
39
+ Refresh successful evidence hourly.
40
+ Retry failed work without requiring a changed revision or ETag.
41
+
42
+ Check the fixed candidate and last-collected source paths on each worker pass.
43
+ Include missing files so additions and removals change the configuration metadata digest.
44
+ A changed digest advances the scope generation and makes the scope due.
45
+ Keep those filesystem checks outside authorization.
46
+ Process one due scope per pass, oldest attempt first.
47
+ This order prevents one failed scope from starving another scope.
48
+
49
+ Keep the last completed snapshot until a successful replacement.
50
+ Its age does not change admission.
51
+ Report age with the greater of wall-clock and monotonic elapsed time.
52
+ Wall-clock elapsed time counts suspend time.
53
+ Monotonic elapsed time limits the effect of a wall-clock rollback.
54
+ A failed refresh does not reset the collection time.
55
+
56
+ Continue scheduled refresh and retry attempts.
57
+
58
+ The scope contains the canonical configuration root, launch project root and exact native `.claude.json` path.
59
+ Keep user, project, local and plugin MCP provenance distinct.
60
+ Resolve established project-over-user skill shadowing.
61
+ Keep equal-precedence and namespaced collisions ambiguous.
62
+ Unknown or ambiguous subjects use known category defaults.
63
+ Defer when the category or policy cannot be established.
64
+
65
+ Replace the complete decision bundle under one cache guard.
66
+ Publish only if enrollment, desired inputs and the scope generation still match.
67
+ Retain the active snapshot while desired policy or configuration changes require evaluation.
68
+ Keep its decisions, defaults, policy revision and evidence identifiers together.
69
+ Keep the evaluator's blocking rule reference and bounded display description with each resolved denial.
70
+ Publish the replacement atomically after checking the captured inputs.
71
+ Reject old candidates without removing the active snapshot.
72
+
73
+ Clear snapshots when enrollment changes or policy becomes absent.
74
+ The scope generation changes when the configuration metadata digest changes.
75
+ Use an immutable selector index for authorization.
76
+ Unknown or ambiguous selectors use defaults from the same active snapshot.
77
+ Register at most 64 scopes per daemon lifetime.
78
+ Defer excess requests without creating a block.
79
+
80
+ Missing advisory coordinates do not add a component or plugin-sibling block.
81
+ Confirmed admission restrictions and risk matches still apply.
82
+ A failed collection cannot publish invented decisions.
83
+ Keep the active decisions and their defaults during prolonged collection failures.
84
+ Both old allows and old denies can persist until evaluation succeeds.
85
+ Clear decisions on enrollment changes, an absent policy or daemon restart.
86
+
87
+ Before the first snapshot, use known desired-policy defaults or defer.
88
+
89
+ The first adapter covers MCP tools, Skill calls, slash-command expansion and namespaced plugin agents.
90
+ The loading, injection and project-switching gaps remain those in ADR-0135.
91
+ The public evidence API must be released and pinned before rollout.
92
+ The current CLI pin does not contain that API.
93
+
94
+ ## Alternatives considered
95
+
96
+ - Expire snapshots on a fixed timer: rejected because failed collection would replace component decisions with category defaults.
97
+
98
+ - Discard active decisions on every policy change: rejected because defaults can interrupt permitted work before evaluation completes.
99
+ - Join three producer caches: rejected because the collector supplies one evidence bundle.
100
+ - Collect on the authorization thread: rejected because scans exceed native hook budgets.
101
+ - Keep an unbounded library call on the only worker: rejected because one stalled call would prevent every retry.
102
+ - Reimplement the policy matcher: rejected because it would duplicate the existing language, plugin inheritance and risk rules.