stacktrace-cli 0.12.0__tar.gz → 0.14.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 (715) hide show
  1. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/.github/workflows/ci.yml +6 -0
  2. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/CLAUDE.md +41 -5
  3. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/PKG-INFO +12 -7
  4. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/README.md +9 -4
  5. stacktrace_cli-0.14.0/SECURITY.md +41 -0
  6. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0006-trust-boundary-and-detection-upload.md +1 -1
  7. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0018-remote-sync-config-and-facade-consumption.md +1 -1
  8. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0020-openaca-consumption-boundary.md +1 -0
  9. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0024-the-upload-carries-observations.md +1 -1
  10. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0031-one-host-daemon-observes-native-session-logs.md +1 -1
  11. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0036-deliver-eligible-findings-to-slack-from-the-daemon.md +1 -1
  12. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0070-package-the-cloud-agent-environment-bootstrap.md +1 -1
  13. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0072-host-supervisors-own-daemon-restarts.md +1 -1
  14. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0073-name-what-fired-and-which-component.md +1 -1
  15. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0083-each-block-reason-is-its-own-rule.md +1 -1
  16. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0086-a-refusal-names-who-answered-the-call.md +1 -1
  17. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0090-count-completed-commands-locate-by-ip-send-through-the-managed-proxy.md +1 -1
  18. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0096-cost-usage-may-leave-as-token-totals-and-work-identifiers.md +1 -1
  19. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0101-what-names-a-run-in-fleet.md +1 -1
  20. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0109-a-detection-carries-its-runs-title-and-the-persons-name.md +1 -1
  21. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0113-size-triggers-behaviour-explains-session-cost-carries-reasons.md +1 -1
  22. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0118-observe-agents-through-adapters-and-a-shared-analyzer.md +1 -1
  23. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0123-the-cloud-boot-hook-brings-the-client-up-to-the-latest-release.md +1 -1
  24. stacktrace_cli-0.14.0/docs/adrs/0131-activate-hook-policy-without-a-privileged-runtime.md +87 -0
  25. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0133-a-clients-own-error-record-is-a-third-block-channel.md +1 -1
  26. stacktrace_cli-0.14.0/docs/adrs/0135-enforce-policy-through-the-daemon-and-agent-hooks.md +111 -0
  27. stacktrace_cli-0.14.0/docs/adrs/0136-bound-policy-evidence-collection-as-one-bundle.md +102 -0
  28. stacktrace_cli-0.14.0/docs/adrs/0137-a-rule-in-wording-reads-the-same-on-every-surface.md +87 -0
  29. stacktrace_cli-0.14.0/docs/adrs/0138-a-credential-in-a-prompt-travels-as-a-mask-and-a-digest.md +98 -0
  30. stacktrace_cli-0.14.0/docs/adrs/0139-remediation-finding-contract.md +95 -0
  31. stacktrace_cli-0.14.0/docs/adrs/0140-an-untitled-run-names-itself-by-its-first-five-words.md +70 -0
  32. stacktrace_cli-0.14.0/docs/adrs/0141-two-remediation-models-one-credential-identity-and-a-letters-only-fragment.md +81 -0
  33. stacktrace_cli-0.14.0/docs/adrs/0142-the-cli-has-no-machine-limit.md +72 -0
  34. stacktrace_cli-0.14.0/docs/adrs/0143-the-plugin-owns-session-hooks-on-every-host.md +139 -0
  35. stacktrace_cli-0.14.0/docs/adrs/0146-eight-rules-send-remediation-targets.md +138 -0
  36. stacktrace_cli-0.14.0/docs/adrs/0147-the-webhook-names-the-run-and-the-person-and-an-egress-label-keeps-its-last-four.md +105 -0
  37. stacktrace_cli-0.14.0/docs/adrs/0148-credential-egress-notifies-at-medium-confidence-when-it-is-high.md +59 -0
  38. stacktrace_cli-0.14.0/docs/adrs/0149-a-credential-switch-replaces-the-mcp-sign-in-rule.md +94 -0
  39. stacktrace_cli-0.14.0/docs/adrs/0150-codex-hooks-use-the-shared-policy-runtime.md +93 -0
  40. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/INDEX.md +20 -4
  41. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/agent-support.html +9 -11
  42. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/agent-support.md +5 -6
  43. stacktrace_cli-0.14.0/docs/plans/018-remediation-rules.md +48 -0
  44. stacktrace_cli-0.14.0/docs/plans/019-credential-switch.md +44 -0
  45. stacktrace_cli-0.14.0/docs/releases/v0.13.0.md +98 -0
  46. stacktrace_cli-0.14.0/docs/releases/v0.14.0.md +66 -0
  47. stacktrace_cli-0.14.0/docs/specs/TEMPLATE.md +75 -0
  48. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/codex-agent-kind.md +11 -14
  49. stacktrace_cli-0.14.0/docs/specs/codex-hook-policy.md +182 -0
  50. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/cost-notifications.md +3 -3
  51. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/cost-phase-1.md +4 -4
  52. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/cost.md +1 -1
  53. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/daemon-uploads.md +2 -2
  54. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/detection-policies.md +148 -127
  55. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/detector.md +45 -32
  56. stacktrace_cli-0.14.0/docs/specs/hook-policy-rollout.md +205 -0
  57. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/managed-policy-deployment.md +6 -0
  58. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/monitor.md +1 -1
  59. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/notification-delivery.md +2 -1
  60. stacktrace_cli-0.14.0/docs/specs/plugin-installation.md +107 -0
  61. stacktrace_cli-0.14.0/docs/specs/policy-enforcement.md +425 -0
  62. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/remote-sync.md +6 -3
  63. stacktrace_cli-0.14.0/docs/trust.md +207 -0
  64. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/litellm/e2e/mock_upstream.py +5 -3
  65. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/pyproject.toml +14 -6
  66. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/__init__.py +1 -1
  67. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cli.py +14 -8
  68. stacktrace_cli-0.14.0/src/stacktrace/cloud/__init__.py +37 -0
  69. stacktrace_cli-0.14.0/src/stacktrace/cloud/boot.py +186 -0
  70. stacktrace_cli-0.14.0/src/stacktrace/cloud/profile.py +71 -0
  71. stacktrace_cli-0.14.0/src/stacktrace/cloud/setup.sh +185 -0
  72. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/correlate/composition.py +22 -1
  73. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/measures.py +2 -2
  74. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/models.py +12 -0
  75. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/rules.py +3 -193
  76. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/usage.py +55 -0
  77. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/weights.py +3 -8
  78. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/client.py +10 -4
  79. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/config.py +0 -42
  80. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/costs.py +5 -13
  81. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/db.py +45 -0
  82. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/fleet.py +34 -9
  83. stacktrace_cli-0.14.0/src/stacktrace/daemon/policy_collect.py +346 -0
  84. stacktrace_cli-0.14.0/src/stacktrace/daemon/policy_inputs.py +278 -0
  85. stacktrace_cli-0.14.0/src/stacktrace/daemon/policy_runtime.py +597 -0
  86. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/presentation.py +22 -7
  87. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/protocol.py +46 -2
  88. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/runtime.py +30 -12
  89. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/server.py +76 -2
  90. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/store.py +61 -5
  91. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/usage.py +13 -17
  92. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/webhook.py +251 -23
  93. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/cache.py +2 -8
  94. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/deterministic.py +813 -568
  95. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/finding.py +35 -6
  96. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/history.py +4 -13
  97. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/jev.py +1 -14
  98. stacktrace_cli-0.14.0/src/stacktrace/detector/personal_data.py +328 -0
  99. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/reasoning.py +1 -9
  100. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/render.py +10 -0
  101. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/rules.py +94 -25
  102. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/run.py +3 -0
  103. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/secrets.py +88 -3
  104. stacktrace_cli-0.14.0/src/stacktrace/finding_contract.py +553 -0
  105. stacktrace_cli-0.14.0/src/stacktrace/finding_titles.py +46 -0
  106. stacktrace_cli-0.14.0/src/stacktrace/hooks/__init__.py +1 -0
  107. stacktrace_cli-0.14.0/src/stacktrace/hooks/claude.py +242 -0
  108. stacktrace_cli-0.14.0/src/stacktrace/hooks/codex.py +84 -0
  109. stacktrace_cli-0.14.0/src/stacktrace/hooks/session.py +76 -0
  110. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/costs.py +4 -4
  111. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/render.py +11 -5
  112. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/app.js +57 -1
  113. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/cost.js +16 -9
  114. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/styles.css +2 -0
  115. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/verdicts.py +26 -9
  116. stacktrace_cli-0.14.0/src/stacktrace/policy_display.py +129 -0
  117. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/cli.py +8 -44
  118. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/client.py +159 -15
  119. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/config.py +61 -2
  120. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/detect_payload.py +55 -4
  121. stacktrace_cli-0.14.0/src/stacktrace/remote/hook_policy.py +193 -0
  122. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/policy_service.py +0 -21
  123. stacktrace_cli-0.14.0/src/stacktrace/remote/policy_show.py +119 -0
  124. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/sync.py +14 -2
  125. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/upload_contract.py +40 -0
  126. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/telemetry/events.py +1 -0
  127. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/conftest.py +23 -6
  128. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_cost_evidence_travels.py +0 -35
  129. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_cost_findings_are_dated_by_their_citations.py +9 -28
  130. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_cost_findings_carry_no_session_text.py +0 -10
  131. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_measures.py +1 -1
  132. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_models.py +20 -1
  133. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_usage.py +163 -0
  134. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_weights.py +5 -0
  135. stacktrace_cli-0.14.0/tests/daemon/test_claude_policy_conformance.py +586 -0
  136. stacktrace_cli-0.14.0/tests/daemon/test_claude_policy_hook.py +232 -0
  137. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_cli.py +9 -3
  138. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_client.py +7 -3
  139. stacktrace_cli-0.14.0/tests/daemon/test_codex_policy_collect_contract.py +86 -0
  140. stacktrace_cli-0.14.0/tests/daemon/test_codex_policy_conformance.py +564 -0
  141. stacktrace_cli-0.14.0/tests/daemon/test_codex_policy_hook.py +125 -0
  142. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_costs.py +83 -106
  143. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_fleet.py +108 -2
  144. stacktrace_cli-0.14.0/tests/daemon/test_policy_agent_scopes.py +55 -0
  145. stacktrace_cli-0.14.0/tests/daemon/test_policy_collect.py +412 -0
  146. stacktrace_cli-0.14.0/tests/daemon/test_policy_collect_contract.py +180 -0
  147. stacktrace_cli-0.14.0/tests/daemon/test_policy_hook_transport.py +207 -0
  148. stacktrace_cli-0.14.0/tests/daemon/test_policy_inputs.py +551 -0
  149. stacktrace_cli-0.14.0/tests/daemon/test_policy_reconcile.py +556 -0
  150. stacktrace_cli-0.14.0/tests/daemon/test_policy_runtime.py +277 -0
  151. stacktrace_cli-0.14.0/tests/daemon/test_policy_socket.py +153 -0
  152. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_session_cost_notices.py +2 -2
  153. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_store.py +25 -0
  154. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_the_stored_row_is_sufficient.py +5 -0
  155. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_usage.py +54 -0
  156. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_usage_store.py +18 -0
  157. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_webhook.py +473 -6
  158. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_wire_frames_are_bounded.py +6 -1
  159. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/fixtures/claude-code-2.1.296-suite/gateway-last-turn.json +2 -2
  160. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/fixtures/claude-code-2.1.296-suite/projects/run/b23c3bab-a677-4b5f-ac36-e132c7df29e5.jsonl +2 -2
  161. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_parity_live_capture.py +3 -2
  162. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/cost_harness.mjs +1 -0
  163. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/feed_harness.mjs +21 -2
  164. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_cost_page.py +29 -6
  165. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_feed_model.py +35 -5
  166. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_render_cost.py +76 -16
  167. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_verdicts.py +49 -0
  168. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_cli.py +19 -211
  169. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_client.py +292 -0
  170. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_cloud_boot_updates_the_client.py +87 -16
  171. stacktrace_cli-0.14.0/tests/remote/test_cloud_session.py +59 -0
  172. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_cloud_setup_asset_id.py +6 -0
  173. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_config.py +85 -0
  174. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_detect_contract_is_exhaustive.py +45 -4
  175. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_detect_gate_matches_the_cloud.py +7 -0
  176. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_facade_contract.py +40 -1
  177. stacktrace_cli-0.14.0/tests/remote/test_hook_policy.py +107 -0
  178. stacktrace_cli-0.14.0/tests/remote/test_policy_show.py +147 -0
  179. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_seam.py +8 -0
  180. stacktrace_cli-0.14.0/tests/remote/test_session_registration.py +54 -0
  181. stacktrace_cli-0.14.0/tests/remote/test_user_install_profile.py +45 -0
  182. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_build_commit.py +2 -2
  183. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_call_status_conventions.py +1 -1
  184. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_composition.py +3 -6
  185. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_blocked.py +9 -9
  186. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_client_errors.py +5 -2
  187. stacktrace_cli-0.14.0/tests/test_detector_credential_in_prompt.py +217 -0
  188. stacktrace_cli-0.14.0/tests/test_detector_credential_switched.py +254 -0
  189. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_deterministic.py +56 -0
  190. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_end_to_end.py +6 -2
  191. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_finding.py +9 -0
  192. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_history.py +21 -0
  193. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_names_the_service.py +39 -29
  194. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_new_deterministic.py +508 -1666
  195. stacktrace_cli-0.14.0/tests/test_detector_personal_data.py +220 -0
  196. stacktrace_cli-0.14.0/tests/test_detector_pii_in_prompt.py +117 -0
  197. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_render.py +2 -2
  198. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_secrets.py +164 -0
  199. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_vulnerable_dep_invoked.py +68 -54
  200. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_why_it_stopped.py +24 -16
  201. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_evidence_is_dated_not_numbered.py +12 -6
  202. stacktrace_cli-0.14.0/tests/test_finding_contract.py +431 -0
  203. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_kind_conformance.py +2 -0
  204. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_no_agent_kind_is_named.py +7 -0
  205. stacktrace_cli-0.14.0/tests/test_one_wording_per_rule.py +168 -0
  206. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_release_gate_coverage.py +4 -0
  207. stacktrace_cli-0.14.0/tests/test_rules_send_remediation_targets.py +201 -0
  208. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_seam_boundary.py +8 -0
  209. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_session_identity_is_the_pair.py +27 -0
  210. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_title_disclosure_invariant.py +75 -7
  211. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_untrusted_content_never_travels.py +83 -16
  212. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/uv.lock +33 -9
  213. stacktrace_cli-0.12.0/src/stacktrace/cloud/__init__.py +0 -60
  214. stacktrace_cli-0.12.0/src/stacktrace/cloud/setup.sh +0 -469
  215. stacktrace_cli-0.12.0/tests/cost/test_rules_budget.py +0 -189
  216. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/.agents/skills/release-stacktrace/SKILL.md +0 -0
  217. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/.claude/settings.json +0 -0
  218. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/.claude/skills/release-stacktrace/SKILL.md +0 -0
  219. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/.codex/hooks.json +0 -0
  220. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/.github/managed-autofix.md +0 -0
  221. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/.github/pull_request_template.md +0 -0
  222. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/.github/workflows/bedrock-live.yml +0 -0
  223. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/.github/workflows/guard-staging.yml +0 -0
  224. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/.github/workflows/publish-pypi.yml +0 -0
  225. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/.gitignore +0 -0
  226. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/AGENTS.md +0 -0
  227. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/contracts/observations/v1/decision-request.example.json +0 -0
  228. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/contracts/observations/v1/decision-request.schema.json +0 -0
  229. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/contracts/observations/v1/decision-response.example.json +0 -0
  230. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/contracts/observations/v1/decision-response.schema.json +0 -0
  231. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/contracts/observations/v1/example.json +0 -0
  232. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/contracts/observations/v1/schema.json +0 -0
  233. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0001-session-telemetry-as-input.md +0 -0
  234. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0002-session-collection-in-openaidr.md +0 -0
  235. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0003-runtime-edges.md +0 -0
  236. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0004-three-stage-detector.md +0 -0
  237. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0005-detection-family-and-report-assembly.md +0 -0
  238. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0007-proprietary-package-on-open-dependencies.md +0 -0
  239. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0008-console-in-separate-demo-package.md +0 -0
  240. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0010-detection-severity-and-confidence-ladders.md +0 -0
  241. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0011-verdict-cache.md +0 -0
  242. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0012-observation-evidence-kinds-and-transport.md +0 -0
  243. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0013-rule-catalogue-triage-and-per-rule-context.md +0 -0
  244. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0014-declared-project-mapping.md +0 -0
  245. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0015-narrow-the-security-catalogue.md +0 -0
  246. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0016-stall-grouping-is-session-wide.md +0 -0
  247. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0017-a-declined-repeat-is-a-stall.md +0 -0
  248. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0019-delegated-commands-are-openaca-objects.md +0 -0
  249. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0021-two-command-kinds.md +0 -0
  250. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0022-detection-scope-is-a-catalogue-column.md +0 -0
  251. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0023-sync-detect-collects-and-does-not-escalate.md +0 -0
  252. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0025-a-denied-call-is-activity-never-an-invocation.md +0 -0
  253. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0026-the-console-becomes-a-product-surface.md +0 -0
  254. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0027-a-finding-may-name-what-it-could-not-place.md +0 -0
  255. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0028-the-console-shows-what-it-placed.md +0 -0
  256. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0029-stage-three-returns-to-opt-in.md +0 -0
  257. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0030-a-detection-is-dated-by-the-turns-it-cites.md +0 -0
  258. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0032-refresh-daemon-compositions-outside-detection.md +0 -0
  259. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0033-a-third-party-analyzer-only-by-a-flag-that-names-it.md +0 -0
  260. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0034-the-drift-grade-is-read-off-a-run-not-a-call.md +0 -0
  261. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0035-naming-an-analyzer-selects-stored-answers.md +0 -0
  262. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0037-reuse-openaidr-append-cursors-in-the-daemon.md +0 -0
  263. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0038-poll-normalized-sessions-for-supplemental-changes.md +0 -0
  264. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0039-send-usage-telemetry-by-default-with-an-opt-out.md +0 -0
  265. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0041-defer-native-windows-support.md +0 -0
  266. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0042-read-the-build-commit-from-the-install-record.md +0 -0
  267. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0043-name-the-session-agent-and-host-and-count-errors-by-class.md +0 -0
  268. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0044-send-the-build-as-version-prints-it.md +0 -0
  269. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0045-scan-every-session-and-outlive-them.md +0 -0
  270. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0046-the-finding-store-is-an-append-only-queue.md +0 -0
  271. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0047-capture-activity-during-correlation-or-lose-it.md +0 -0
  272. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0048-the-daemon-keeps-a-leveled-content-free-activity-log.md +0 -0
  273. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0056-stop-a-resident-daemon-by-record-and-signal.md +0 -0
  274. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0057-grow-the-queue-schema-additively-and-share-only-the-document.md +0 -0
  275. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0058-one-word-for-a-finding-columns-for-a-counter-and-a-push-that-does-not-wait.md +0 -0
  276. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0059-the-daemon-does-not-decide-whether-it-should-be-running.md +0 -0
  277. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0060-two-upload-postures-not-one-command-with-two-sources.md +0 -0
  278. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0061-the-drain-sends-findings-only.md +0 -0
  279. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0062-hold-the-transition-lock-across-remote-side-effects.md +0 -0
  280. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0063-underbuilt-debt-does-not-hold-the-scan-watermark.md +0 -0
  281. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0064-a-redacted-value-has-one-path-span.md +0 -0
  282. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0065-asset-external-id-resolves-by-a-ladder.md +0 -0
  283. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0066-host-owned-daemon-supervision.md +0 -0
  284. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0067-a-webhook-is-an-independent-queue-subscriber.md +0 -0
  285. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0068-webhooks-retry-the-retained-backlog.md +0 -0
  286. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0069-webhooks-deliver-what-retention-holds.md +0 -0
  287. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0071-render-the-allowlisted-payload-per-destination.md +0 -0
  288. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0074-a-window-selects-findings-by-when-they-happened.md +0 -0
  289. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0076-two-phase-detection-pipeline.md +0 -0
  290. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0077-the-bom-job-wakes-once-at-startup-staggered.md +0 -0
  291. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0078-a-seeded-display-prefix-replaces-the-hostname-label.md +0 -0
  292. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0079-the-monitor-page-renders-findings-not-pipeline-health.md +0 -0
  293. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0080-enabling-reasoning-does-not-requeue-the-past.md +0 -0
  294. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0081-reasoning-activation-returns-to-explicit-opt-in.md +0 -0
  295. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0082-monitor-checks-every-installed-component-by-default.md +0 -0
  296. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0084-a-recursive-deletes-evidence-is-the-rm-that-ran.md +0 -0
  297. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0085-show-when-and-which-finding-slack-delivered.md +0 -0
  298. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0087-deploy-compiled-policy-with-a-privileged-scheduled-job.md +0 -0
  299. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0088-slack-alerts-leave-out-confidence.md +0 -0
  300. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0089-infra-gate-reads-commands-not-shell-semantics.md +0 -0
  301. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0091-mark-our-own-machines-and-name-what-failed.md +0 -0
  302. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0092-cost-is-its-own-rule-family.md +0 -0
  303. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0093-environment-cost-baselines-count-tokens-keyed-by-model.md +0 -0
  304. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0094-estimate-cost-from-tokens-the-agent-figure-is-a-cross-check.md +0 -0
  305. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0095-cost-findings-reach-fleet-each-rule-can-be-muted.md +0 -0
  306. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0097-the-daemon-makes-cost-findings-and-the-monitor-reads-them.md +0 -0
  307. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0098-a-run-is-its-main-session.md +0 -0
  308. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0099-cost-is-measured-in-tokens-and-relative-increases.md +0 -0
  309. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0100-the-monitor-runs-offline-for-the-website.md +0 -0
  310. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0102-token-use-is-never-compared-with-a-providers-usage-api.md +0 -0
  311. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0103-finished-runs-may-leave-as-numbers-for-org-baselines.md +0 -0
  312. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0104-usage-is-its-own-upload.md +0 -0
  313. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0105-an-asset-key-is-a-bare-uuid.md +0 -0
  314. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0106-boot-id-is-salted-with-the-pid-namespace.md +0 -0
  315. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0107-the-daemon-follows-every-kind-openaidr-reads.md +0 -0
  316. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0108-a-kind-renamed-before-any-release-read-it-keeps-no-alias.md +0 -0
  317. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0110-every-kinds-account-comes-from-openaidr.md +0 -0
  318. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0111-built-in-sub-agents-and-skills-come-from-the-bom.md +0 -0
  319. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0112-a-person-is-known-by-the-accounts-on-the-host.md +0 -0
  320. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0114-similar-sessions-are-the-same-agent-in-the-same-repo.md +0 -0
  321. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0115-usage-states-its-coverage-and-fleet-returns-expected-runs.md +0 -0
  322. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0116-a-component-row-carries-what-its-results-cost-under-one-closed-key.md +0 -0
  323. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0117-a-component-row-on-the-day-of-a-switch-counts-from-the-switch.md +0 -0
  324. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0119-read-sessions-from-an-ai-gateway-and-block-inline.md +0 -0
  325. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0120-own-the-adapter-event-envelope.md +0 -0
  326. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0121-a-cloud-sessions-runs-are-its-persons-and-a-card-says-where-its-name-came-from.md +0 -0
  327. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0122-use-stacktrace-as-the-python-package.md +0 -0
  328. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0124-fleet-imports-core-from-the-stacktrace-distribution.md +0 -0
  329. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0127-the-monitor-shows-weighted-tokens-beside-raw-tokens.md +0 -0
  330. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0128-usage-files-each-response-once-where-it-was-first-filed.md +0 -0
  331. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0129-an-unfinished-response-counts-the-output-it-shows.md +0 -0
  332. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0130-usage-carries-one-hour-cache-writes-and-each-responses-price-class.md +0 -0
  333. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0132-every-usage-page-names-the-store-that-built-it.md +0 -0
  334. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/0134-a-secret-sent-to-a-server-configured-as-remote-is-egress.md +0 -0
  335. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/HOOK-PROMPT.md +0 -0
  336. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/adrs/TEMPLATE.md +0 -0
  337. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/cutover-openaca-remote.md +0 -0
  338. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/002-session-input.md +0 -0
  339. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/003-correlation.md +0 -0
  340. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/004-detector.md +0 -0
  341. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/005-remote-sync.md +0 -0
  342. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/006-cli-composition.md +0 -0
  343. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/007-detection-upload.md +0 -0
  344. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/008-monitor.md +0 -0
  345. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/009-reasoning-jev.md +0 -0
  346. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/010-session-daemon.md +0 -0
  347. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/011-daemon-store.md +0 -0
  348. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/012-daemon-scanning.md +0 -0
  349. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/013-daemon-uploads.md +0 -0
  350. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/014-asset-identity.md +0 -0
  351. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/015-managed-policy-deployment.md +0 -0
  352. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/016-cost-phase-1.md +0 -0
  353. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/plans/017-cost-phase-2.md +0 -0
  354. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.0.1.md +0 -0
  355. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.1.0.md +0 -0
  356. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.10.0.md +0 -0
  357. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.11.0.md +0 -0
  358. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.12.0.md +0 -0
  359. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.2.0.md +0 -0
  360. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.2.1.md +0 -0
  361. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.2.2.md +0 -0
  362. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.2.3.md +0 -0
  363. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.3.0.md +0 -0
  364. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.3.1.md +0 -0
  365. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.4.0.md +0 -0
  366. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.4.1.md +0 -0
  367. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.5.0.md +0 -0
  368. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.5.1.md +0 -0
  369. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.5.2.md +0 -0
  370. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.5.3.md +0 -0
  371. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.6.0.md +0 -0
  372. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.6.1.md +0 -0
  373. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.7.0.md +0 -0
  374. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.7.1.md +0 -0
  375. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.8.0.md +0 -0
  376. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/releases/v0.9.0.md +0 -0
  377. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/research/001-intent-drift-metric.md +0 -0
  378. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/agent-observability.md +0 -0
  379. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/aidr.md +0 -0
  380. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/cli-composition.md +0 -0
  381. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/correlation.md +0 -0
  382. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/cost-phase-2.md +0 -0
  383. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/daemon-scanning.md +0 -0
  384. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/daemon-store.md +0 -0
  385. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/detection-upload.md +0 -0
  386. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/event-time.md +0 -0
  387. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/monitor-inventory.md +0 -0
  388. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/production-agent-observability.md +0 -0
  389. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/reasoning-jev.md +0 -0
  390. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/session-input.md +0 -0
  391. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/docs/specs/usage-upload.md +0 -0
  392. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/examples/observations/custom_agent.py +0 -0
  393. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/README.md +0 -0
  394. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/bedrock-sandbox/.gitignore +0 -0
  395. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/bedrock-sandbox/ci.tf +0 -0
  396. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/bedrock-sandbox/main.tf +0 -0
  397. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/bedrock-sandbox/outputs.tf +0 -0
  398. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/bedrock-sandbox/variables.tf +0 -0
  399. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/.gitignore +0 -0
  400. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/README.md +0 -0
  401. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/check.sh +0 -0
  402. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/ci.tf +0 -0
  403. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/connect.sh +0 -0
  404. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/images/envoy/Dockerfile +0 -0
  405. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/images/envoy/entrypoint.sh +0 -0
  406. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/images/envoy/litellm.yaml +0 -0
  407. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/images/litellm/Dockerfile +0 -0
  408. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/images/litellm/config.subscription.yaml +0 -0
  409. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/images/litellm/config.yaml +0 -0
  410. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/images/litellm/entrypoint.sh +0 -0
  411. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/main.tf +0 -0
  412. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/moved.tf +0 -0
  413. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/outputs.tf +0 -0
  414. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/smoke.sh +0 -0
  415. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/user-key.sh +0 -0
  416. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/guard-staging/variables.tf +0 -0
  417. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/modules/express-gateway/main.tf +0 -0
  418. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/modules/express-gateway/outputs.tf +0 -0
  419. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/infra/modules/express-gateway/variables.tf +0 -0
  420. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/e2e/claude.sh +0 -0
  421. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/e2e/scenarios.sh +0 -0
  422. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/envoy/envoy.yaml +0 -0
  423. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/envoy/run.sh +0 -0
  424. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/litellm/README.md +0 -0
  425. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/litellm/config.example.yaml +0 -0
  426. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/litellm/config.subscription.yaml +0 -0
  427. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/litellm/e2e/config.baseten.yaml +0 -0
  428. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/litellm/e2e/config.mock.yaml +0 -0
  429. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/litellm/e2e/parity.py +0 -0
  430. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/litellm/stacktrace_keys.py +0 -0
  431. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/integrations/litellm/stacktrace_litellm.py +0 -0
  432. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/scripts/cost_latency.py +0 -0
  433. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/scripts/git-hooks/pre-push +0 -0
  434. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/scripts/install-hooks.sh +0 -0
  435. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/__main__.py +0 -0
  436. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/analysis.py +0 -0
  437. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/build.py +0 -0
  438. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/core/__init__.py +0 -0
  439. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/core/observations.py +0 -0
  440. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/correlate/__init__.py +0 -0
  441. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/correlate/acquire.py +0 -0
  442. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/correlate/join.py +0 -0
  443. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/correlate/observed.py +0 -0
  444. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/correlate/orchestrate.py +0 -0
  445. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/correlate/project_map.py +0 -0
  446. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/correlate/record.py +0 -0
  447. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/correlate/render.py +0 -0
  448. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/__init__.py +0 -0
  449. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/baseline.py +0 -0
  450. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/clock.py +0 -0
  451. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/component_usage.py +0 -0
  452. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/components.py +0 -0
  453. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/copies.py +0 -0
  454. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/evidence.py +0 -0
  455. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/ledger.py +0 -0
  456. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/org_baselines.py +0 -0
  457. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/output.py +0 -0
  458. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/price_class.py +0 -0
  459. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/reasons.py +0 -0
  460. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/runs.py +0 -0
  461. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/tokens.py +0 -0
  462. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/cost/totals.py +0 -0
  463. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/__init__.py +0 -0
  464. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/accounts.py +0 -0
  465. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/activity_log.py +0 -0
  466. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/bom.py +0 -0
  467. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/cli.py +0 -0
  468. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/composition.py +0 -0
  469. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/identity.py +0 -0
  470. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/jobs.py +0 -0
  471. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/lifecycle.py +0 -0
  472. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/observer.py +0 -0
  473. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/paths.py +0 -0
  474. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/scan.py +0 -0
  475. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/daemon/service.py +0 -0
  476. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/__init__.py +0 -0
  477. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/analyzer.py +0 -0
  478. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/blocked.py +0 -0
  479. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/priors.py +0 -0
  480. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/prompts/__init__.py +0 -0
  481. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/prompts/jev-v1/stacktrace-deceptive-completion.json +0 -0
  482. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/prompts/jev-v2/stacktrace-deceptive-completion.json +0 -0
  483. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/prompts/jev-v2/stacktrace-infra-unsafe-action.json +0 -0
  484. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/prompts/jev-v3/stacktrace-deceptive-completion.json +0 -0
  485. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/prompts/jev-v3/stacktrace-infra-unsafe-action.json +0 -0
  486. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/prompts/v1/exclusions.md +0 -0
  487. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/prompts/v1/framing.md +0 -0
  488. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/prompts/v1/stacktrace-deceptive-completion.md +0 -0
  489. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/verdict.py +0 -0
  490. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/detector/windows.py +0 -0
  491. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/__init__.py +0 -0
  492. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/analyzer.py +0 -0
  493. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/check.py +0 -0
  494. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/cli.py +0 -0
  495. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/exchange.py +0 -0
  496. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/formats/__init__.py +0 -0
  497. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/formats/_json.py +0 -0
  498. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/formats/anthropic.py +0 -0
  499. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/formats/bedrock.py +0 -0
  500. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/formats/body.py +0 -0
  501. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/formats/openai_chat.py +0 -0
  502. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/formats/openai_responses.py +0 -0
  503. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/service.py +0 -0
  504. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/session.py +0 -0
  505. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/gateway/sink.py +0 -0
  506. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/__init__.py +0 -0
  507. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/inventory.py +0 -0
  508. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/offline.py +0 -0
  509. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/reasoning.py +0 -0
  510. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/server.py +0 -0
  511. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/apple-icon.png +0 -0
  512. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/favicon.ico +0 -0
  513. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/fonts/OFL.txt +0 -0
  514. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/fonts/dm-mono-400-latin.woff2 +0 -0
  515. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/fonts/dm-mono-500-latin.woff2 +0 -0
  516. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/fonts/dm-sans-latin.woff2 +0 -0
  517. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/fonts/playfair-display-600-italic-latin.woff2 +0 -0
  518. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/icon.svg +0 -0
  519. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/index.html +0 -0
  520. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/site/inventory.js +0 -0
  521. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/state.py +0 -0
  522. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/monitor/watch.py +0 -0
  523. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/options.py +0 -0
  524. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/private_state.py +0 -0
  525. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/py.typed +0 -0
  526. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/__init__.py +0 -0
  527. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/identity.py +0 -0
  528. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/payload.py +0 -0
  529. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/policy.py +0 -0
  530. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/policy_worker.py +0 -0
  531. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/redact.py +0 -0
  532. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/spool.py +0 -0
  533. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/remote/sync_detect.py +0 -0
  534. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/sdk.py +0 -0
  535. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/sessions/__init__.py +0 -0
  536. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/sessions/access.py +0 -0
  537. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/sessions/entrypoint.py +0 -0
  538. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/sessions/index.py +0 -0
  539. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/sessions/lineage.py +0 -0
  540. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/sessions/outcome.py +0 -0
  541. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/sessions/protocols.py +0 -0
  542. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/sessions/render.py +0 -0
  543. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/telemetry/__init__.py +0 -0
  544. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/telemetry/cli.py +0 -0
  545. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/telemetry/posthog.py +0 -0
  546. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/telemetry/state.py +0 -0
  547. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/webhook/__init__.py +0 -0
  548. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/webhook/cli.py +0 -0
  549. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/src/stacktrace/webhook/config.py +0 -0
  550. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/__init__.py +0 -0
  551. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/agent_bom_fixture.py +0 -0
  552. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/__init__.py +0 -0
  553. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/fakes.py +0 -0
  554. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/scenarios.py +0 -0
  555. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_as_of_cuts_every_timed_collection.py +0 -0
  556. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_baseline.py +0 -0
  557. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_clock.py +0 -0
  558. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_component_usage.py +0 -0
  559. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_components.py +0 -0
  560. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_copies.py +0 -0
  561. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_cost_is_tokens.py +0 -0
  562. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_cost_latency.py +0 -0
  563. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_evidence.py +0 -0
  564. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_ledger.py +0 -0
  565. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_org_baselines.py +0 -0
  566. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_output.py +0 -0
  567. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_price_class.py +0 -0
  568. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_reasons.py +0 -0
  569. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_rules_baseline.py +0 -0
  570. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_runs.py +0 -0
  571. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_totals.py +0 -0
  572. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/cost/test_unfinished_output_counts_what_it_shows.py +0 -0
  573. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/__init__.py +0 -0
  574. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/observing.py +0 -0
  575. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_accounts.py +0 -0
  576. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_activity_log.py +0 -0
  577. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_composition.py +0 -0
  578. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_config.py +0 -0
  579. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_cost_guidance.py +0 -0
  580. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_db.py +0 -0
  581. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_detection_needs_no_subscriber.py +0 -0
  582. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_identity.py +0 -0
  583. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_job_thread.py +0 -0
  584. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_jobs.py +0 -0
  585. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_lifecycle.py +0 -0
  586. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_observer.py +0 -0
  587. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_queue_reader.py +0 -0
  588. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_runtime.py +0 -0
  589. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_scan.py +0 -0
  590. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_service.py +0 -0
  591. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_socket.py +0 -0
  592. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_stage_times.py +0 -0
  593. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_subagent_routing.py +0 -0
  594. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/daemon/test_the_drained_payload_is_the_cold_one.py +0 -0
  595. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/detector_session_fixture.py +0 -0
  596. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/__init__.py +0 -0
  597. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_analyzer.py +0 -0
  598. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_bodies_and_logs.py +0 -0
  599. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_call_records.py +0 -0
  600. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_check.py +0 -0
  601. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_every_choice_is_read.py +0 -0
  602. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_every_read_field_is_validated.py +0 -0
  603. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_every_shortfall_is_a_recorded_fallback.py +0 -0
  604. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_gateway_keys.py +0 -0
  605. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_gateway_scripts.py +0 -0
  606. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_litellm_stream.py +0 -0
  607. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_litellm_subscription_config.py +0 -0
  608. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_service.py +0 -0
  609. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_session.py +0 -0
  610. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/gateway/test_unstated_outcomes.py +0 -0
  611. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/__init__.py +0 -0
  612. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/inventory_harness.mjs +0 -0
  613. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_cost_range_switch.py +0 -0
  614. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_inventory.py +0 -0
  615. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_inventory_page.py +0 -0
  616. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_offline.py +0 -0
  617. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_reasoning_gates.py +0 -0
  618. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_render.py +0 -0
  619. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_server.py +0 -0
  620. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_site_assets.py +0 -0
  621. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_state.py +0 -0
  622. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/monitor/test_watch.py +0 -0
  623. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/observations/test_contract.py +0 -0
  624. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/observations/test_decisions.py +0 -0
  625. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/observations/test_event_envelope.py +0 -0
  626. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/__init__.py +0 -0
  627. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/helpers.py +0 -0
  628. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_detect_activity.py +0 -0
  629. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_detect_cli.py +0 -0
  630. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_detect_client.py +0 -0
  631. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_detect_layers_compose.py +0 -0
  632. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_detect_payload_reaches_the_cloud_model.py +0 -0
  633. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_detect_redaction.py +0 -0
  634. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_detect_spool.py +0 -0
  635. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_detect_upload_contract.py +0 -0
  636. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_detect_wire_payload.py +0 -0
  637. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_identity.py +0 -0
  638. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_no_local_path_survives_redaction.py +0 -0
  639. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_payload.py +0 -0
  640. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_policy.py +0 -0
  641. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_policy_service.py +0 -0
  642. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_policy_service_cli.py +0 -0
  643. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_redact_payload.py +0 -0
  644. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_spool.py +0 -0
  645. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_sync.py +0 -0
  646. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_sync_detect.py +0 -0
  647. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_upload_contract.py +0 -0
  648. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_usage_client.py +0 -0
  649. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/remote/test_usage_contract.py +0 -0
  650. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/sdk/test_observation_client.py +0 -0
  651. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/telemetry/__init__.py +0 -0
  652. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/telemetry/test_activity_log.py +0 -0
  653. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/telemetry/test_cli.py +0 -0
  654. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/telemetry/test_events.py +0 -0
  655. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/telemetry/test_every_derived_site.py +0 -0
  656. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/telemetry/test_every_internal_save_is_reported.py +0 -0
  657. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/telemetry/test_hooks.py +0 -0
  658. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/telemetry/test_release_gate.py +0 -0
  659. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/telemetry/test_state.py +0 -0
  660. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/telemetry/test_uploader.py +0 -0
  661. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_acquire.py +0 -0
  662. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_adr_cross_references_are_reciprocal.py +0 -0
  663. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_agent_instance_id.py +0 -0
  664. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_agent_support_doc.py +0 -0
  665. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_analysis.py +0 -0
  666. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_bom_shape.py +0 -0
  667. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_cli.py +0 -0
  668. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_correlate_orchestrate.py +0 -0
  669. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_correlate_render.py +0 -0
  670. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_correlated_session.py +0 -0
  671. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detection_components.py +0 -0
  672. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detection_event_time.py +0 -0
  673. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detection_subject.py +0 -0
  674. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_analyzer_contract.py +0 -0
  675. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_analyzer_live.py +0 -0
  676. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_cache.py +0 -0
  677. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_declared_egress.py +0 -0
  678. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_infra_reasoning.py +0 -0
  679. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_jev.py +0 -0
  680. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_priors.py +0 -0
  681. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_prompts.py +0 -0
  682. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_reasoning.py +0 -0
  683. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_run.py +0 -0
  684. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_verdict.py +0 -0
  685. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_detector_windows.py +0 -0
  686. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_entrypoint_conventions.py +0 -0
  687. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_fingerprint_covers_what_the_analyzer_reads.py +0 -0
  688. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_help_sections.py +0 -0
  689. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_join.py +0 -0
  690. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_monitor_cli.py +0 -0
  691. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_no_live_document_states_the_old_stage_three_default.py +0 -0
  692. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_no_test_undoes_every_patch_at_once.py +0 -0
  693. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_observed.py +0 -0
  694. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_openaca_contract.py +0 -0
  695. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_openaidr_contract.py +0 -0
  696. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_option_arity_matches_the_binary.py +0 -0
  697. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_project_map.py +0 -0
  698. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_python_namespace.py +0 -0
  699. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_readme_examples_are_real_output.py +0 -0
  700. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_release_readiness.py +0 -0
  701. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_sessions_access.py +0 -0
  702. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_sessions_end_to_end.py +0 -0
  703. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_sessions_protocol_typing.py +0 -0
  704. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_sessions_protocols.py +0 -0
  705. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_sessions_render.py +0 -0
  706. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_shell_separators_match_the_shell.py +0 -0
  707. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_signed_in_asks_the_agent.py +0 -0
  708. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_stored_verdicts_are_never_gated_on_reasoning.py +0 -0
  709. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_the_detector_spec_lists_the_shipped_catalogue.py +0 -0
  710. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_the_jev_spec_states_the_shipped_thresholds.py +0 -0
  711. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_the_locality_claim_is_qualified_everywhere.py +0 -0
  712. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_verification_subcommands_match_the_binary.py +0 -0
  713. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/test_what_jev_is_told_is_what_was_disclosed.py +0 -0
  714. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.0}/tests/tool_fields.py +0 -0
  715. {stacktrace_cli-0.12.0 → stacktrace_cli-0.14.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
@@ -129,6 +129,23 @@ nothing about detection.
129
129
  `tests/monitor/test_render_cost.py`. When reviews keep re-arguing scope (a
130
130
  time boundary, which sessions a rule reads), write the answer into the spec,
131
131
  as `docs/specs/cost-phase-1.md` §1 "What a rule reads, and when" does.
132
+ - Write an ADR only in a `/kind feature` PR. Bug fixes, cleanups, wording changes
133
+ and UI changes get no ADR.
134
+ - A spec holds the design. An ADR holds one decision and its rejected alternatives.
135
+ Keep the Decision section of an ADR short. Write one paragraph, or a short
136
+ numbered list of choices. Put commands, flags, failure behavior and test plans
137
+ in the spec.
138
+ - The specs in `docs/specs/` describe components and change with them. A feature
139
+ that changes a component updates the spec of that component in the same PR. A
140
+ feature that adds a component adds a new spec. Start a new spec from
141
+ `docs/specs/TEMPLATE.md`.
142
+ - Write or update the spec first. Then write ADRs for the decisions whose rejected
143
+ alternative is plausible. List those ADRs in a "Decisions" table in the spec.
144
+ Link each ADR to the spec section that has the detail.
145
+ - Do not write "This spec implements ADR-NNNN". The spec is the source of the
146
+ design.
147
+ - Before a multi-step implementation plan, write the spec and its ADRs. The plan
148
+ references them. A plan is not a substitute for either.
132
149
 
133
150
  ## Adding a command
134
151
 
@@ -240,13 +257,23 @@ the alternative we rejected? If yes, write the ADR.
240
257
  full ADR. The cost of one Read is much smaller than the cost of
241
258
  re-deriving or re-litigating a decision.
242
259
 
243
- **Supersede, never edit.** Accepted ADRs are immutable. If a later
244
- decision contradicts an existing ADR, write a NEW ADR with
260
+ **Supersede or amend, never edit.** Accepted ADRs are immutable. If a later
261
+ decision contradicts an existing ADR, write a NEW ADR that supersedes or
262
+ amends it, as the next rule decides. For a supersession, put
245
263
  `supersedes: NNNN` in its frontmatter, and update the old one's
246
264
  frontmatter to `status: superseded` + `superseded-by: NNNN`. Old PRs
247
265
  need to remain readable against the rules in effect at the time —
248
266
  silently editing an accepted ADR breaks that contract.
249
267
 
268
+ **Amend or supersede: one test.** Ask if any decision in the old ADR still
269
+ binds, whether or not the ADR numbers its decisions. If one does, amend: put
270
+ `amends: NNNN` on the new ADR and `amended-by: NNNN` on the old one, and both
271
+ stay active. If none does, supersede. Only this test decides. The size of
272
+ the change, the importance of the replaced clause, and the old ADR's "When
273
+ to revisit" text do not change the result. `docs/adrs/INDEX.md` gives the
274
+ worked example. A reviewer reports the choice only when the finding names
275
+ every decision in the old ADR and shows that none still binds.
276
+
250
277
  ## Commits and PRs
251
278
 
252
279
  - Frequent commits, one logical change per commit.
@@ -364,9 +391,18 @@ review catches the glaring issues, and later reviews check only what changed.
364
391
  - Batch related fixes into one tested update before requesting re-review.
365
392
  Avoid duplicate review requests for the same head.
366
393
  - 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.
394
+ runs every required gate. It does not bypass gates, merge, or change
395
+ workflows, permissions, credentials, or branch protection. It force-pushes
396
+ only after a rebase, as the next rule says. Report an environment failure
397
+ as a blocker.
398
+ - When a PR branch conflicts with its base branch, the automated fixer
399
+ rebases it onto the current base branch. The base branch is normally
400
+ `main`. It resolves the conflicts, runs every required gate, and pushes
401
+ with `git push --force-with-lease`. It does not merge the base branch into
402
+ the PR branch. PR branches are rarely shared, so rewritten history is
403
+ acceptable. Report a conflict as a blocker when both sides change the same
404
+ logic and each resolution loses behavior. A rebase with no other change is
405
+ not a fix round.
370
406
  - After pushing fixes, wait for CI and a completed review of the current
371
407
  head. Silence, an older review, or a running review is not clearance.
372
408
  - 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.14.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,8 +20,8 @@ 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
24
- Requires-Dist: openaidr==0.7.0
23
+ Requires-Dist: openaca==0.12.0
24
+ Requires-Dist: openaidr==0.7.1
25
25
  Requires-Dist: posthog<8,>=7.0
26
26
  Requires-Dist: pydantic<3,>=2.10
27
27
  Description-Content-Type: text/markdown
@@ -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.14.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.14.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-20
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0031
9
- amended-by: 0067
9
+ amended-by: 0067, 0148
10
10
  ---
11
11
 
12
12
  Subsystem: the daemon and its delivery sinks. The integration view across the
@@ -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, 0147, 0149
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-09-30
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0039
9
- amended-by: null
9
+ amended-by: 0146
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-10-01
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0006, 0027
9
- amended-by: null
9
+ amended-by: 0146, 0149
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, 0147
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, 0150
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.
@@ -6,7 +6,7 @@ date: 2026-10-16
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: null
9
- amended-by: null
9
+ amended-by: 0146
10
10
  ---
11
11
 
12
12
  ## Context
@@ -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, 0150
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.