stacktrace-cli 0.11.0__tar.gz → 0.12.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 (648) hide show
  1. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/CLAUDE.md +59 -5
  2. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/PKG-INFO +6 -3
  3. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/README.md +4 -1
  4. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0093-environment-cost-baselines-count-tokens-keyed-by-model.md +1 -1
  5. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0096-cost-usage-may-leave-as-token-totals-and-work-identifiers.md +1 -1
  6. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0099-cost-is-measured-in-tokens-and-relative-increases.md +1 -1
  7. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0104-usage-is-its-own-upload.md +1 -1
  8. stacktrace_cli-0.12.0/docs/adrs/0127-the-monitor-shows-weighted-tokens-beside-raw-tokens.md +121 -0
  9. stacktrace_cli-0.12.0/docs/adrs/0128-usage-files-each-response-once-where-it-was-first-filed.md +118 -0
  10. stacktrace_cli-0.12.0/docs/adrs/0129-an-unfinished-response-counts-the-output-it-shows.md +130 -0
  11. stacktrace_cli-0.12.0/docs/adrs/0130-usage-carries-one-hour-cache-writes-and-each-responses-price-class.md +126 -0
  12. stacktrace_cli-0.12.0/docs/adrs/0132-every-usage-page-names-the-store-that-built-it.md +92 -0
  13. stacktrace_cli-0.12.0/docs/adrs/0133-a-clients-own-error-record-is-a-third-block-channel.md +68 -0
  14. stacktrace_cli-0.12.0/docs/adrs/0134-a-secret-sent-to-a-server-configured-as-remote-is-egress.md +61 -0
  15. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/INDEX.md +12 -2
  16. stacktrace_cli-0.12.0/docs/agent-support.html +501 -0
  17. stacktrace_cli-0.12.0/docs/agent-support.md +139 -0
  18. stacktrace_cli-0.12.0/docs/releases/v0.12.0.md +74 -0
  19. stacktrace_cli-0.12.0/docs/specs/codex-agent-kind.md +362 -0
  20. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/cost-notifications.md +12 -5
  21. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/cost-phase-1.md +18 -8
  22. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/cost.md +11 -2
  23. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/detector.md +3 -3
  24. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/monitor.md +53 -15
  25. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/usage-upload.md +79 -7
  26. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/pyproject.toml +5 -3
  27. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/__init__.py +1 -1
  28. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cli.py +0 -2
  29. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/correlate/observed.py +49 -5
  30. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/baseline.py +16 -1
  31. stacktrace_cli-0.12.0/src/stacktrace/cost/copies.py +90 -0
  32. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/ledger.py +8 -2
  33. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/measures.py +3 -2
  34. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/models.py +29 -3
  35. stacktrace_cli-0.12.0/src/stacktrace/cost/output.py +123 -0
  36. stacktrace_cli-0.12.0/src/stacktrace/cost/price_class.py +48 -0
  37. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/reasons.py +3 -2
  38. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/rules.py +2 -1
  39. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/usage.py +169 -16
  40. stacktrace_cli-0.12.0/src/stacktrace/cost/weights.py +125 -0
  41. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/costs.py +6 -1
  42. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/db.py +123 -15
  43. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/presentation.py +26 -2
  44. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/store.py +140 -25
  45. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/usage.py +72 -18
  46. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/blocked.py +102 -0
  47. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/deterministic.py +138 -35
  48. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/prompts/__init__.py +3 -2
  49. stacktrace_cli-0.12.0/src/stacktrace/detector/prompts/jev-v3/stacktrace-deceptive-completion.json +16 -0
  50. stacktrace_cli-0.12.0/src/stacktrace/detector/prompts/jev-v3/stacktrace-infra-unsafe-action.json +10 -0
  51. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/reasoning.py +5 -19
  52. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/run.py +3 -0
  53. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/formats/_json.py +1 -5
  54. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/session.py +20 -2
  55. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/costs.py +113 -12
  56. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/render.py +23 -2
  57. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/app.js +14 -9
  58. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/cost.js +152 -16
  59. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/index.html +1 -1
  60. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/styles.css +13 -2
  61. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/upload_contract.py +4 -0
  62. stacktrace_cli-0.12.0/src/stacktrace/sessions/entrypoint.py +43 -0
  63. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/sessions/protocols.py +5 -39
  64. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/conftest.py +9 -0
  65. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/fakes.py +6 -0
  66. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_baseline.py +15 -0
  67. stacktrace_cli-0.12.0/tests/cost/test_copies.py +91 -0
  68. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_cost_is_tokens.py +10 -1
  69. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_measures.py +9 -0
  70. stacktrace_cli-0.12.0/tests/cost/test_models.py +47 -0
  71. stacktrace_cli-0.12.0/tests/cost/test_output.py +149 -0
  72. stacktrace_cli-0.12.0/tests/cost/test_price_class.py +113 -0
  73. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_rules_baseline.py +16 -2
  74. stacktrace_cli-0.12.0/tests/cost/test_unfinished_output_counts_what_it_shows.py +330 -0
  75. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_usage.py +62 -2
  76. stacktrace_cli-0.12.0/tests/cost/test_weights.py +153 -0
  77. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_accounts.py +4 -3
  78. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_db.py +197 -0
  79. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_runtime.py +1 -1
  80. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_usage.py +426 -6
  81. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_usage_store.py +242 -1
  82. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/detector_session_fixture.py +0 -4
  83. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_session.py +108 -0
  84. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/cost_harness.mjs +64 -15
  85. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/feed_harness.mjs +4 -0
  86. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_cost_page.py +144 -8
  87. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_feed_model.py +8 -0
  88. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_render_cost.py +447 -1
  89. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_site_assets.py +11 -7
  90. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_usage_contract.py +5 -0
  91. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/telemetry/test_every_derived_site.py +1 -1
  92. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/telemetry/test_hooks.py +1 -1
  93. stacktrace_cli-0.12.0/tests/test_agent_support_doc.py +81 -0
  94. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_blocked.py +18 -9
  95. stacktrace_cli-0.12.0/tests/test_detector_client_errors.py +125 -0
  96. stacktrace_cli-0.12.0/tests/test_detector_declared_egress.py +100 -0
  97. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_history.py +17 -8
  98. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_new_deterministic.py +33 -0
  99. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_prompts.py +1 -1
  100. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_reasoning.py +16 -6
  101. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_why_it_stopped.py +44 -0
  102. stacktrace_cli-0.12.0/tests/test_entrypoint_conventions.py +110 -0
  103. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_fingerprint_covers_what_the_analyzer_reads.py +0 -2
  104. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_join.py +0 -1
  105. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_kind_conformance.py +40 -0
  106. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_observed.py +93 -1
  107. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_openaidr_contract.py +220 -0
  108. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_session_identity_is_the_pair.py +10 -0
  109. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_the_locality_claim_is_qualified_everywhere.py +0 -9
  110. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_title_disclosure_invariant.py +23 -14
  111. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_untrusted_content_never_travels.py +13 -1
  112. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/uv.lock +6 -6
  113. stacktrace_cli-0.11.0/tests/cost/test_models.py +0 -15
  114. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/.agents/skills/release-stacktrace/SKILL.md +0 -0
  115. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/.claude/settings.json +0 -0
  116. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/.claude/skills/release-stacktrace/SKILL.md +0 -0
  117. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/.codex/hooks.json +0 -0
  118. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/.github/managed-autofix.md +0 -0
  119. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/.github/pull_request_template.md +0 -0
  120. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/.github/workflows/bedrock-live.yml +0 -0
  121. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/.github/workflows/ci.yml +0 -0
  122. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/.github/workflows/guard-staging.yml +0 -0
  123. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/.github/workflows/publish-pypi.yml +0 -0
  124. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/.gitignore +0 -0
  125. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/AGENTS.md +0 -0
  126. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/contracts/observations/v1/decision-request.example.json +0 -0
  127. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/contracts/observations/v1/decision-request.schema.json +0 -0
  128. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/contracts/observations/v1/decision-response.example.json +0 -0
  129. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/contracts/observations/v1/decision-response.schema.json +0 -0
  130. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/contracts/observations/v1/example.json +0 -0
  131. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/contracts/observations/v1/schema.json +0 -0
  132. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0001-session-telemetry-as-input.md +0 -0
  133. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0002-session-collection-in-openaidr.md +0 -0
  134. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0003-runtime-edges.md +0 -0
  135. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0004-three-stage-detector.md +0 -0
  136. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0005-detection-family-and-report-assembly.md +0 -0
  137. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0006-trust-boundary-and-detection-upload.md +0 -0
  138. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0007-proprietary-package-on-open-dependencies.md +0 -0
  139. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0008-console-in-separate-demo-package.md +0 -0
  140. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0010-detection-severity-and-confidence-ladders.md +0 -0
  141. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0011-verdict-cache.md +0 -0
  142. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0012-observation-evidence-kinds-and-transport.md +0 -0
  143. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0013-rule-catalogue-triage-and-per-rule-context.md +0 -0
  144. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0014-declared-project-mapping.md +0 -0
  145. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0015-narrow-the-security-catalogue.md +0 -0
  146. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0016-stall-grouping-is-session-wide.md +0 -0
  147. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0017-a-declined-repeat-is-a-stall.md +0 -0
  148. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0018-remote-sync-config-and-facade-consumption.md +0 -0
  149. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0019-delegated-commands-are-openaca-objects.md +0 -0
  150. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0020-openaca-consumption-boundary.md +0 -0
  151. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0021-two-command-kinds.md +0 -0
  152. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0022-detection-scope-is-a-catalogue-column.md +0 -0
  153. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0023-sync-detect-collects-and-does-not-escalate.md +0 -0
  154. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0024-the-upload-carries-observations.md +0 -0
  155. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0025-a-denied-call-is-activity-never-an-invocation.md +0 -0
  156. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0026-the-console-becomes-a-product-surface.md +0 -0
  157. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0027-a-finding-may-name-what-it-could-not-place.md +0 -0
  158. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0028-the-console-shows-what-it-placed.md +0 -0
  159. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0029-stage-three-returns-to-opt-in.md +0 -0
  160. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0030-a-detection-is-dated-by-the-turns-it-cites.md +0 -0
  161. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0031-one-host-daemon-observes-native-session-logs.md +0 -0
  162. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0032-refresh-daemon-compositions-outside-detection.md +0 -0
  163. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0033-a-third-party-analyzer-only-by-a-flag-that-names-it.md +0 -0
  164. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0034-the-drift-grade-is-read-off-a-run-not-a-call.md +0 -0
  165. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0035-naming-an-analyzer-selects-stored-answers.md +0 -0
  166. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0036-deliver-eligible-findings-to-slack-from-the-daemon.md +0 -0
  167. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0037-reuse-openaidr-append-cursors-in-the-daemon.md +0 -0
  168. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0038-poll-normalized-sessions-for-supplemental-changes.md +0 -0
  169. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0039-send-usage-telemetry-by-default-with-an-opt-out.md +0 -0
  170. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0041-defer-native-windows-support.md +0 -0
  171. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0042-read-the-build-commit-from-the-install-record.md +0 -0
  172. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0043-name-the-session-agent-and-host-and-count-errors-by-class.md +0 -0
  173. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0044-send-the-build-as-version-prints-it.md +0 -0
  174. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0045-scan-every-session-and-outlive-them.md +0 -0
  175. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0046-the-finding-store-is-an-append-only-queue.md +0 -0
  176. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0047-capture-activity-during-correlation-or-lose-it.md +0 -0
  177. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0048-the-daemon-keeps-a-leveled-content-free-activity-log.md +0 -0
  178. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0056-stop-a-resident-daemon-by-record-and-signal.md +0 -0
  179. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0057-grow-the-queue-schema-additively-and-share-only-the-document.md +0 -0
  180. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0058-one-word-for-a-finding-columns-for-a-counter-and-a-push-that-does-not-wait.md +0 -0
  181. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0059-the-daemon-does-not-decide-whether-it-should-be-running.md +0 -0
  182. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0060-two-upload-postures-not-one-command-with-two-sources.md +0 -0
  183. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0061-the-drain-sends-findings-only.md +0 -0
  184. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0062-hold-the-transition-lock-across-remote-side-effects.md +0 -0
  185. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0063-underbuilt-debt-does-not-hold-the-scan-watermark.md +0 -0
  186. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0064-a-redacted-value-has-one-path-span.md +0 -0
  187. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0065-asset-external-id-resolves-by-a-ladder.md +0 -0
  188. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0066-host-owned-daemon-supervision.md +0 -0
  189. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0067-a-webhook-is-an-independent-queue-subscriber.md +0 -0
  190. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0068-webhooks-retry-the-retained-backlog.md +0 -0
  191. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0069-webhooks-deliver-what-retention-holds.md +0 -0
  192. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0070-package-the-cloud-agent-environment-bootstrap.md +0 -0
  193. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0071-render-the-allowlisted-payload-per-destination.md +0 -0
  194. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0072-host-supervisors-own-daemon-restarts.md +0 -0
  195. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0073-name-what-fired-and-which-component.md +0 -0
  196. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0074-a-window-selects-findings-by-when-they-happened.md +0 -0
  197. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0076-two-phase-detection-pipeline.md +0 -0
  198. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0077-the-bom-job-wakes-once-at-startup-staggered.md +0 -0
  199. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0078-a-seeded-display-prefix-replaces-the-hostname-label.md +0 -0
  200. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0079-the-monitor-page-renders-findings-not-pipeline-health.md +0 -0
  201. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0080-enabling-reasoning-does-not-requeue-the-past.md +0 -0
  202. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0081-reasoning-activation-returns-to-explicit-opt-in.md +0 -0
  203. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0082-monitor-checks-every-installed-component-by-default.md +0 -0
  204. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0083-each-block-reason-is-its-own-rule.md +0 -0
  205. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0084-a-recursive-deletes-evidence-is-the-rm-that-ran.md +0 -0
  206. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0085-show-when-and-which-finding-slack-delivered.md +0 -0
  207. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0086-a-refusal-names-who-answered-the-call.md +0 -0
  208. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0087-deploy-compiled-policy-with-a-privileged-scheduled-job.md +0 -0
  209. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0088-slack-alerts-leave-out-confidence.md +0 -0
  210. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0089-infra-gate-reads-commands-not-shell-semantics.md +0 -0
  211. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0090-count-completed-commands-locate-by-ip-send-through-the-managed-proxy.md +0 -0
  212. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0091-mark-our-own-machines-and-name-what-failed.md +0 -0
  213. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0092-cost-is-its-own-rule-family.md +0 -0
  214. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0094-estimate-cost-from-tokens-the-agent-figure-is-a-cross-check.md +0 -0
  215. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0095-cost-findings-reach-fleet-each-rule-can-be-muted.md +0 -0
  216. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0097-the-daemon-makes-cost-findings-and-the-monitor-reads-them.md +0 -0
  217. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0098-a-run-is-its-main-session.md +0 -0
  218. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0100-the-monitor-runs-offline-for-the-website.md +0 -0
  219. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0101-what-names-a-run-in-fleet.md +0 -0
  220. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0102-token-use-is-never-compared-with-a-providers-usage-api.md +0 -0
  221. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0103-finished-runs-may-leave-as-numbers-for-org-baselines.md +0 -0
  222. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0105-an-asset-key-is-a-bare-uuid.md +0 -0
  223. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0106-boot-id-is-salted-with-the-pid-namespace.md +0 -0
  224. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0107-the-daemon-follows-every-kind-openaidr-reads.md +0 -0
  225. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0108-a-kind-renamed-before-any-release-read-it-keeps-no-alias.md +0 -0
  226. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0109-a-detection-carries-its-runs-title-and-the-persons-name.md +0 -0
  227. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0110-every-kinds-account-comes-from-openaidr.md +0 -0
  228. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0111-built-in-sub-agents-and-skills-come-from-the-bom.md +0 -0
  229. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0112-a-person-is-known-by-the-accounts-on-the-host.md +0 -0
  230. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0113-size-triggers-behaviour-explains-session-cost-carries-reasons.md +0 -0
  231. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0114-similar-sessions-are-the-same-agent-in-the-same-repo.md +0 -0
  232. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0115-usage-states-its-coverage-and-fleet-returns-expected-runs.md +0 -0
  233. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0116-a-component-row-carries-what-its-results-cost-under-one-closed-key.md +0 -0
  234. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0117-a-component-row-on-the-day-of-a-switch-counts-from-the-switch.md +0 -0
  235. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0118-observe-agents-through-adapters-and-a-shared-analyzer.md +0 -0
  236. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0119-read-sessions-from-an-ai-gateway-and-block-inline.md +0 -0
  237. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0120-own-the-adapter-event-envelope.md +0 -0
  238. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0121-a-cloud-sessions-runs-are-its-persons-and-a-card-says-where-its-name-came-from.md +0 -0
  239. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0122-use-stacktrace-as-the-python-package.md +0 -0
  240. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0123-the-cloud-boot-hook-brings-the-client-up-to-the-latest-release.md +0 -0
  241. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/0124-fleet-imports-core-from-the-stacktrace-distribution.md +0 -0
  242. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/HOOK-PROMPT.md +0 -0
  243. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/adrs/TEMPLATE.md +0 -0
  244. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/cutover-openaca-remote.md +0 -0
  245. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/002-session-input.md +0 -0
  246. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/003-correlation.md +0 -0
  247. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/004-detector.md +0 -0
  248. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/005-remote-sync.md +0 -0
  249. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/006-cli-composition.md +0 -0
  250. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/007-detection-upload.md +0 -0
  251. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/008-monitor.md +0 -0
  252. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/009-reasoning-jev.md +0 -0
  253. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/010-session-daemon.md +0 -0
  254. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/011-daemon-store.md +0 -0
  255. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/012-daemon-scanning.md +0 -0
  256. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/013-daemon-uploads.md +0 -0
  257. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/014-asset-identity.md +0 -0
  258. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/015-managed-policy-deployment.md +0 -0
  259. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/016-cost-phase-1.md +0 -0
  260. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/plans/017-cost-phase-2.md +0 -0
  261. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.0.1.md +0 -0
  262. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.1.0.md +0 -0
  263. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.10.0.md +0 -0
  264. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.11.0.md +0 -0
  265. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.2.0.md +0 -0
  266. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.2.1.md +0 -0
  267. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.2.2.md +0 -0
  268. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.2.3.md +0 -0
  269. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.3.0.md +0 -0
  270. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.3.1.md +0 -0
  271. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.4.0.md +0 -0
  272. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.4.1.md +0 -0
  273. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.5.0.md +0 -0
  274. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.5.1.md +0 -0
  275. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.5.2.md +0 -0
  276. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.5.3.md +0 -0
  277. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.6.0.md +0 -0
  278. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.6.1.md +0 -0
  279. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.7.0.md +0 -0
  280. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.7.1.md +0 -0
  281. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.8.0.md +0 -0
  282. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/releases/v0.9.0.md +0 -0
  283. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/research/001-intent-drift-metric.md +0 -0
  284. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/agent-observability.md +0 -0
  285. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/aidr.md +0 -0
  286. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/cli-composition.md +0 -0
  287. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/correlation.md +0 -0
  288. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/cost-phase-2.md +0 -0
  289. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/daemon-scanning.md +0 -0
  290. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/daemon-store.md +0 -0
  291. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/daemon-uploads.md +0 -0
  292. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/detection-policies.md +0 -0
  293. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/detection-upload.md +0 -0
  294. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/event-time.md +0 -0
  295. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/managed-policy-deployment.md +0 -0
  296. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/monitor-inventory.md +0 -0
  297. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/notification-delivery.md +0 -0
  298. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/production-agent-observability.md +0 -0
  299. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/reasoning-jev.md +0 -0
  300. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/remote-sync.md +0 -0
  301. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/docs/specs/session-input.md +0 -0
  302. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/examples/observations/custom_agent.py +0 -0
  303. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/README.md +0 -0
  304. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/bedrock-sandbox/.gitignore +0 -0
  305. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/bedrock-sandbox/ci.tf +0 -0
  306. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/bedrock-sandbox/main.tf +0 -0
  307. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/bedrock-sandbox/outputs.tf +0 -0
  308. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/bedrock-sandbox/variables.tf +0 -0
  309. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/.gitignore +0 -0
  310. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/README.md +0 -0
  311. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/check.sh +0 -0
  312. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/ci.tf +0 -0
  313. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/connect.sh +0 -0
  314. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/images/envoy/Dockerfile +0 -0
  315. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/images/envoy/entrypoint.sh +0 -0
  316. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/images/envoy/litellm.yaml +0 -0
  317. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/images/litellm/Dockerfile +0 -0
  318. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/images/litellm/config.subscription.yaml +0 -0
  319. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/images/litellm/config.yaml +0 -0
  320. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/images/litellm/entrypoint.sh +0 -0
  321. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/main.tf +0 -0
  322. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/moved.tf +0 -0
  323. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/outputs.tf +0 -0
  324. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/smoke.sh +0 -0
  325. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/user-key.sh +0 -0
  326. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/guard-staging/variables.tf +0 -0
  327. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/modules/express-gateway/main.tf +0 -0
  328. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/modules/express-gateway/outputs.tf +0 -0
  329. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/infra/modules/express-gateway/variables.tf +0 -0
  330. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/e2e/claude.sh +0 -0
  331. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/e2e/scenarios.sh +0 -0
  332. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/envoy/envoy.yaml +0 -0
  333. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/envoy/run.sh +0 -0
  334. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/litellm/README.md +0 -0
  335. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/litellm/config.example.yaml +0 -0
  336. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/litellm/config.subscription.yaml +0 -0
  337. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/litellm/e2e/config.baseten.yaml +0 -0
  338. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/litellm/e2e/config.mock.yaml +0 -0
  339. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/litellm/e2e/mock_upstream.py +0 -0
  340. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/litellm/e2e/parity.py +0 -0
  341. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/litellm/stacktrace_keys.py +0 -0
  342. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/integrations/litellm/stacktrace_litellm.py +0 -0
  343. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/scripts/cost_latency.py +0 -0
  344. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/scripts/git-hooks/pre-push +0 -0
  345. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/scripts/install-hooks.sh +0 -0
  346. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/__main__.py +0 -0
  347. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/analysis.py +0 -0
  348. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/build.py +0 -0
  349. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cloud/__init__.py +0 -0
  350. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cloud/setup.sh +0 -0
  351. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/core/__init__.py +0 -0
  352. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/core/observations.py +0 -0
  353. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/correlate/__init__.py +0 -0
  354. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/correlate/acquire.py +0 -0
  355. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/correlate/composition.py +0 -0
  356. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/correlate/join.py +0 -0
  357. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/correlate/orchestrate.py +0 -0
  358. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/correlate/project_map.py +0 -0
  359. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/correlate/record.py +0 -0
  360. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/correlate/render.py +0 -0
  361. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/__init__.py +0 -0
  362. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/clock.py +0 -0
  363. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/component_usage.py +0 -0
  364. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/components.py +0 -0
  365. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/evidence.py +0 -0
  366. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/org_baselines.py +0 -0
  367. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/runs.py +0 -0
  368. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/tokens.py +0 -0
  369. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/cost/totals.py +0 -0
  370. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/__init__.py +0 -0
  371. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/accounts.py +0 -0
  372. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/activity_log.py +0 -0
  373. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/bom.py +0 -0
  374. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/cli.py +0 -0
  375. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/client.py +0 -0
  376. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/composition.py +0 -0
  377. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/config.py +0 -0
  378. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/fleet.py +0 -0
  379. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/identity.py +0 -0
  380. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/jobs.py +0 -0
  381. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/lifecycle.py +0 -0
  382. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/observer.py +0 -0
  383. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/paths.py +0 -0
  384. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/protocol.py +0 -0
  385. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/runtime.py +0 -0
  386. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/scan.py +0 -0
  387. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/server.py +0 -0
  388. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/service.py +0 -0
  389. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/daemon/webhook.py +0 -0
  390. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/__init__.py +0 -0
  391. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/analyzer.py +0 -0
  392. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/cache.py +0 -0
  393. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/finding.py +0 -0
  394. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/history.py +0 -0
  395. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/jev.py +0 -0
  396. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/priors.py +0 -0
  397. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/prompts/jev-v1/stacktrace-deceptive-completion.json +0 -0
  398. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/prompts/jev-v2/stacktrace-deceptive-completion.json +0 -0
  399. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/prompts/jev-v2/stacktrace-infra-unsafe-action.json +0 -0
  400. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/prompts/v1/exclusions.md +0 -0
  401. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/prompts/v1/framing.md +0 -0
  402. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/prompts/v1/stacktrace-deceptive-completion.md +0 -0
  403. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/render.py +0 -0
  404. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/rules.py +0 -0
  405. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/secrets.py +0 -0
  406. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/verdict.py +0 -0
  407. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/detector/windows.py +0 -0
  408. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/__init__.py +0 -0
  409. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/analyzer.py +0 -0
  410. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/check.py +0 -0
  411. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/cli.py +0 -0
  412. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/exchange.py +0 -0
  413. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/formats/__init__.py +0 -0
  414. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/formats/anthropic.py +0 -0
  415. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/formats/bedrock.py +0 -0
  416. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/formats/body.py +0 -0
  417. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/formats/openai_chat.py +0 -0
  418. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/formats/openai_responses.py +0 -0
  419. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/service.py +0 -0
  420. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/gateway/sink.py +0 -0
  421. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/__init__.py +0 -0
  422. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/inventory.py +0 -0
  423. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/offline.py +0 -0
  424. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/reasoning.py +0 -0
  425. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/server.py +0 -0
  426. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/apple-icon.png +0 -0
  427. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/favicon.ico +0 -0
  428. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/fonts/OFL.txt +0 -0
  429. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/fonts/dm-mono-400-latin.woff2 +0 -0
  430. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/fonts/dm-mono-500-latin.woff2 +0 -0
  431. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/fonts/dm-sans-latin.woff2 +0 -0
  432. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/fonts/playfair-display-600-italic-latin.woff2 +0 -0
  433. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/icon.svg +0 -0
  434. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/site/inventory.js +0 -0
  435. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/state.py +0 -0
  436. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/verdicts.py +0 -0
  437. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/monitor/watch.py +0 -0
  438. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/options.py +0 -0
  439. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/private_state.py +0 -0
  440. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/py.typed +0 -0
  441. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/__init__.py +0 -0
  442. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/cli.py +0 -0
  443. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/client.py +0 -0
  444. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/config.py +0 -0
  445. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/detect_payload.py +0 -0
  446. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/identity.py +0 -0
  447. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/payload.py +0 -0
  448. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/policy.py +0 -0
  449. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/policy_service.py +0 -0
  450. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/policy_worker.py +0 -0
  451. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/redact.py +0 -0
  452. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/spool.py +0 -0
  453. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/sync.py +0 -0
  454. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/remote/sync_detect.py +0 -0
  455. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/sdk.py +0 -0
  456. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/sessions/__init__.py +0 -0
  457. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/sessions/access.py +0 -0
  458. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/sessions/index.py +0 -0
  459. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/sessions/lineage.py +0 -0
  460. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/sessions/outcome.py +0 -0
  461. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/sessions/render.py +0 -0
  462. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/telemetry/__init__.py +0 -0
  463. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/telemetry/cli.py +0 -0
  464. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/telemetry/events.py +0 -0
  465. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/telemetry/posthog.py +0 -0
  466. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/telemetry/state.py +0 -0
  467. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/webhook/__init__.py +0 -0
  468. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/webhook/cli.py +0 -0
  469. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/src/stacktrace/webhook/config.py +0 -0
  470. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/__init__.py +0 -0
  471. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/agent_bom_fixture.py +0 -0
  472. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/__init__.py +0 -0
  473. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/scenarios.py +0 -0
  474. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_as_of_cuts_every_timed_collection.py +0 -0
  475. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_clock.py +0 -0
  476. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_component_usage.py +0 -0
  477. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_components.py +0 -0
  478. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_cost_evidence_travels.py +0 -0
  479. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_cost_findings_are_dated_by_their_citations.py +0 -0
  480. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_cost_findings_carry_no_session_text.py +0 -0
  481. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_cost_latency.py +0 -0
  482. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_evidence.py +0 -0
  483. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_ledger.py +0 -0
  484. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_org_baselines.py +0 -0
  485. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_reasons.py +0 -0
  486. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_rules_budget.py +0 -0
  487. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_runs.py +0 -0
  488. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/cost/test_totals.py +0 -0
  489. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/__init__.py +0 -0
  490. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/observing.py +0 -0
  491. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_activity_log.py +0 -0
  492. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_cli.py +0 -0
  493. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_client.py +0 -0
  494. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_composition.py +0 -0
  495. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_config.py +0 -0
  496. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_cost_guidance.py +0 -0
  497. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_costs.py +0 -0
  498. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_detection_needs_no_subscriber.py +0 -0
  499. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_fleet.py +0 -0
  500. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_identity.py +0 -0
  501. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_job_thread.py +0 -0
  502. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_jobs.py +0 -0
  503. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_lifecycle.py +0 -0
  504. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_observer.py +0 -0
  505. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_queue_reader.py +0 -0
  506. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_scan.py +0 -0
  507. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_service.py +0 -0
  508. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_session_cost_notices.py +0 -0
  509. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_socket.py +0 -0
  510. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_stage_times.py +0 -0
  511. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_store.py +0 -0
  512. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_subagent_routing.py +0 -0
  513. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_the_drained_payload_is_the_cold_one.py +0 -0
  514. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_the_stored_row_is_sufficient.py +0 -0
  515. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_webhook.py +0 -0
  516. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/daemon/test_wire_frames_are_bounded.py +0 -0
  517. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/__init__.py +0 -0
  518. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/fixtures/claude-code-2.1.296-suite/gateway-last-turn.json +0 -0
  519. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/fixtures/claude-code-2.1.296-suite/projects/run/b23c3bab-a677-4b5f-ac36-e132c7df29e5.jsonl +0 -0
  520. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_analyzer.py +0 -0
  521. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_bodies_and_logs.py +0 -0
  522. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_call_records.py +0 -0
  523. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_check.py +0 -0
  524. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_every_choice_is_read.py +0 -0
  525. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_every_read_field_is_validated.py +0 -0
  526. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_every_shortfall_is_a_recorded_fallback.py +0 -0
  527. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_gateway_keys.py +0 -0
  528. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_gateway_scripts.py +0 -0
  529. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_litellm_stream.py +0 -0
  530. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_litellm_subscription_config.py +0 -0
  531. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_parity_live_capture.py +0 -0
  532. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_service.py +0 -0
  533. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/gateway/test_unstated_outcomes.py +0 -0
  534. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/__init__.py +0 -0
  535. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/inventory_harness.mjs +0 -0
  536. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_cost_range_switch.py +0 -0
  537. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_inventory.py +0 -0
  538. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_inventory_page.py +0 -0
  539. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_offline.py +0 -0
  540. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_reasoning_gates.py +0 -0
  541. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_render.py +0 -0
  542. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_server.py +0 -0
  543. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_state.py +0 -0
  544. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_verdicts.py +0 -0
  545. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/monitor/test_watch.py +0 -0
  546. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/observations/test_contract.py +0 -0
  547. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/observations/test_decisions.py +0 -0
  548. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/observations/test_event_envelope.py +0 -0
  549. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/__init__.py +0 -0
  550. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/helpers.py +0 -0
  551. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_cli.py +0 -0
  552. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_client.py +0 -0
  553. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_cloud_boot_updates_the_client.py +0 -0
  554. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_cloud_setup_asset_id.py +0 -0
  555. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_config.py +0 -0
  556. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_detect_activity.py +0 -0
  557. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_detect_cli.py +0 -0
  558. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_detect_client.py +0 -0
  559. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_detect_contract_is_exhaustive.py +0 -0
  560. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_detect_gate_matches_the_cloud.py +0 -0
  561. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_detect_layers_compose.py +0 -0
  562. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_detect_payload_reaches_the_cloud_model.py +0 -0
  563. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_detect_redaction.py +0 -0
  564. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_detect_spool.py +0 -0
  565. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_detect_upload_contract.py +0 -0
  566. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_detect_wire_payload.py +0 -0
  567. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_facade_contract.py +0 -0
  568. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_identity.py +0 -0
  569. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_no_local_path_survives_redaction.py +0 -0
  570. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_payload.py +0 -0
  571. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_policy.py +0 -0
  572. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_policy_service.py +0 -0
  573. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_policy_service_cli.py +0 -0
  574. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_redact_payload.py +0 -0
  575. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_seam.py +0 -0
  576. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_spool.py +0 -0
  577. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_sync.py +0 -0
  578. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_sync_detect.py +0 -0
  579. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_upload_contract.py +0 -0
  580. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/remote/test_usage_client.py +0 -0
  581. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/sdk/test_observation_client.py +0 -0
  582. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/telemetry/__init__.py +0 -0
  583. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/telemetry/test_activity_log.py +0 -0
  584. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/telemetry/test_cli.py +0 -0
  585. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/telemetry/test_events.py +0 -0
  586. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/telemetry/test_every_internal_save_is_reported.py +0 -0
  587. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/telemetry/test_release_gate.py +0 -0
  588. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/telemetry/test_state.py +0 -0
  589. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/telemetry/test_uploader.py +0 -0
  590. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_acquire.py +0 -0
  591. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_adr_cross_references_are_reciprocal.py +0 -0
  592. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_agent_instance_id.py +0 -0
  593. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_analysis.py +0 -0
  594. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_bom_shape.py +0 -0
  595. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_build_commit.py +0 -0
  596. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_call_status_conventions.py +0 -0
  597. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_cli.py +0 -0
  598. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_composition.py +0 -0
  599. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_correlate_orchestrate.py +0 -0
  600. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_correlate_render.py +0 -0
  601. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_correlated_session.py +0 -0
  602. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detection_components.py +0 -0
  603. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detection_event_time.py +0 -0
  604. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detection_subject.py +0 -0
  605. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_analyzer_contract.py +0 -0
  606. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_analyzer_live.py +0 -0
  607. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_cache.py +0 -0
  608. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_deterministic.py +0 -0
  609. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_end_to_end.py +0 -0
  610. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_finding.py +0 -0
  611. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_infra_reasoning.py +0 -0
  612. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_jev.py +0 -0
  613. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_names_the_service.py +0 -0
  614. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_priors.py +0 -0
  615. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_render.py +0 -0
  616. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_run.py +0 -0
  617. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_secrets.py +0 -0
  618. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_verdict.py +0 -0
  619. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_vulnerable_dep_invoked.py +0 -0
  620. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_detector_windows.py +0 -0
  621. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_evidence_is_dated_not_numbered.py +0 -0
  622. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_help_sections.py +0 -0
  623. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_monitor_cli.py +0 -0
  624. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_no_agent_kind_is_named.py +0 -0
  625. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_no_live_document_states_the_old_stage_three_default.py +0 -0
  626. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_no_test_undoes_every_patch_at_once.py +0 -0
  627. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_openaca_contract.py +0 -0
  628. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_option_arity_matches_the_binary.py +0 -0
  629. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_project_map.py +0 -0
  630. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_python_namespace.py +0 -0
  631. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_readme_examples_are_real_output.py +0 -0
  632. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_release_gate_coverage.py +0 -0
  633. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_release_readiness.py +0 -0
  634. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_seam_boundary.py +0 -0
  635. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_sessions_access.py +0 -0
  636. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_sessions_end_to_end.py +0 -0
  637. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_sessions_protocol_typing.py +0 -0
  638. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_sessions_protocols.py +0 -0
  639. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_sessions_render.py +0 -0
  640. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_shell_separators_match_the_shell.py +0 -0
  641. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_signed_in_asks_the_agent.py +0 -0
  642. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_stored_verdicts_are_never_gated_on_reasoning.py +0 -0
  643. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_the_detector_spec_lists_the_shipped_catalogue.py +0 -0
  644. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_the_jev_spec_states_the_shipped_thresholds.py +0 -0
  645. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_verification_subcommands_match_the_binary.py +0 -0
  646. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/test_what_jev_is_told_is_what_was_disclosed.py +0 -0
  647. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/tool_fields.py +0 -0
  648. {stacktrace_cli-0.11.0 → stacktrace_cli-0.12.0}/tests/webhook/test_cli.py +0 -0
@@ -264,12 +264,55 @@ silently editing an accepted ADR breaks that contract.
264
264
  the user explicitly says "merge locally," "keep as branch," or
265
265
  "discard."
266
266
 
267
+ ## Writing documents
268
+
269
+ Write all Markdown documents in ASD-STE100 Simplified Technical English.
270
+ This includes specs, ADRs, READMEs, plans and release notes. The rule
271
+ applies to every author, human or agent.
272
+
273
+ - Write one idea in each sentence.
274
+ - Use a maximum of 20 words in an instruction and 25 words in a
275
+ description.
276
+ - Use a maximum of six sentences in a paragraph.
277
+ - Use the active voice and the present tense.
278
+ - Start an instruction with a verb, for example "Run the tests."
279
+ - Use "a", "an" and "the". Do not remove them to make the text shorter.
280
+ - Use one term for one thing, and use it the same way in all of the
281
+ document.
282
+ - Use simple, common words. Do not use filler, such as "in order to" or
283
+ "utilize".
284
+ - Do not use em-dash asides. Write a new sentence.
285
+ - Do not change technical names, commands or code. Code blocks, tables and
286
+ quoted text do not have to obey these rules.
287
+
288
+ Apply these rules to the text that you write or change. Do not rewrite an
289
+ existing document only to change its style. Do not edit an accepted ADR to
290
+ change its style.
291
+
292
+ These rules are for authors. They are not a code review topic. Reviewers
293
+ do not report style findings.
294
+
267
295
  ## Code Review Rules
268
296
 
297
+ **The goal of review is to converge.** The reviewer and the fixer both work
298
+ toward a PR that can merge in few rounds. Each round costs a full CI run and
299
+ a review, and a finding on text that was already reviewed starts another
300
+ round. Converging does not mean letting a serious defect through. The first
301
+ review catches the glaring issues, and later reviews check only what changed.
302
+
269
303
  ### Reviewer
270
304
 
271
- - Review the full PR against its base branch. Report all qualifying
272
- findings together; do not deliberately reserve findings for later rounds.
305
+ - **The first review of a PR is the complete one.** Review the full PR
306
+ against its base branch. Report every qualifying finding together. Do not
307
+ reserve findings for later rounds.
308
+ - **A later review covers only what changed since the previous reviewed
309
+ head.** That is the PR's new commits, plus existing code whose behavior
310
+ those commits change, such as a caller or dependency of changed code.
311
+ Changes that a merge or rebase brings in from the base branch are not part
312
+ of it.
313
+ - **Do not report a defect that existed at the previous reviewed head**,
314
+ unless the new commits change its behavior. Exception: report a P0 or P1
315
+ even if it existed before, and label it a late discovery.
273
316
  - Report concrete, actionable defects with supported failure scenarios.
274
317
  Respect explicit scope decisions and accepted tradeoffs. Do not present
275
318
  speculative hardening or optional improvements as correctness defects.
@@ -280,12 +323,16 @@ silently editing an accepted ADR breaks that contract.
280
323
  - P3: low-priority suggestion.
281
324
  - Report only P0 and P1 findings. Do not post P2 or P3 findings, inline or
282
325
  in the review summary. Do not inflate priority to get a finding reported.
283
- - On subsequent reviews, verify earlier fixes and inspect their effects on
284
- callers and dependencies. Older code within the PR remains reviewable.
326
+ - A missing detail or an optional improvement is never P1. This applies to
327
+ code and to documentation. A P1 is something wrong: a defect, or a false
328
+ statement.
329
+ - On later reviews, verify that the earlier fixes work. Check their effects on
330
+ callers and dependencies.
285
331
  - When review history supports it, identify a finding as:
286
332
  - Regression: introduced since the previous reviewed head.
287
- - Late discovery: present at a previously reviewed head but not reported.
288
333
  - Unresolved: a previously reported defect remains.
334
+ - Late discovery: present at a previously reviewed head but not reported.
335
+ Only a P0 or P1 may be a late discovery.
289
336
  If the history is unavailable or ambiguous, say so rather than guessing.
290
337
  - Deduplicate by underlying defect and remedy, not by title. Refer to an
291
338
  existing thread for an unresolved defect instead of opening another one.
@@ -301,6 +348,13 @@ silently editing an accepted ADR breaks that contract.
301
348
  If its reasoning or priority is wrong, explain why rather than applying
302
349
  it solely because a reviewer requested it. Surface unresolved disputes
303
350
  for human judgment.
351
+ - Decline a late discovery that is not P0 or P1. If the defect existed at the
352
+ previous reviewed head and the new commits do not change its behavior,
353
+ reply that the review rules exclude it, and do not fix it. A declined
354
+ finding does not count as a fix round.
355
+ - Keep each fix to what its finding needs. Do not rewrite or extend nearby
356
+ code or text. A change beyond the finding gives the next review new
357
+ material to report, and the PR does not converge.
304
358
  - Fix the underlying invariant across relevant call sites. Test the
305
359
  failure class rather than only the reported example.
306
360
  - Preserve accepted fixes and regression tests when reviewing a rebased PR or
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: stacktrace-cli
3
- Version: 0.11.0
3
+ Version: 0.12.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>
@@ -21,7 +21,7 @@ Requires-Python: >=3.11
21
21
  Requires-Dist: click>=8.1
22
22
  Requires-Dist: httpx<1.0.dev0,>=0.28.1
23
23
  Requires-Dist: openaca==0.10.1
24
- Requires-Dist: openaidr==0.6.3
24
+ Requires-Dist: openaidr==0.7.0
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.11.0 (openaca 0.10.1)
55
+ stacktrace 0.12.0 (openaca 0.10.1)
56
56
  ```
57
57
 
58
58
  ## Python package namespace
@@ -250,6 +250,9 @@ Beta, and under active development.
250
250
  Devin sessions alike (Devin CLI and Devin Desktop's local agent). Session collection is
251
251
  [OpenAIDR](https://github.com/open-agent-security/openaidr)'s, and further agent
252
252
  kinds arrive with it. The daemon observes every kind it reads, sub-agents included.
253
+ [Agent support](docs/agent-support.md) lists what works for each agent, rule by
254
+ rule, and what cannot. Codex is next
255
+ ([spec](docs/specs/codex-agent-kind.md)).
253
256
 
254
257
  ## Built on
255
258
 
@@ -24,7 +24,7 @@ Requires Python 3.11 or newer.
24
24
 
25
25
  ```console
26
26
  $ stacktrace --version
27
- stacktrace 0.11.0 (openaca 0.10.1)
27
+ stacktrace 0.12.0 (openaca 0.10.1)
28
28
  ```
29
29
 
30
30
  ## Python package namespace
@@ -222,6 +222,9 @@ Beta, and under active development.
222
222
  Devin sessions alike (Devin CLI and Devin Desktop's local agent). Session collection is
223
223
  [OpenAIDR](https://github.com/open-agent-security/openaidr)'s, and further agent
224
224
  kinds arrive with it. The daemon observes every kind it reads, sub-agents included.
225
+ [Agent support](docs/agent-support.md) lists what works for each agent, rule by
226
+ rule, and what cannot. Codex is next
227
+ ([spec](docs/specs/codex-agent-kind.md)).
225
228
 
226
229
  ## Built on
227
230
 
@@ -6,7 +6,7 @@ date: 2026-10-05
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: null
9
- amended-by: 0099, 0113, 0114
9
+ amended-by: 0099, 0113, 0114, 0129
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
9
+ amended-by: 0103, 0109, 0115, 0116, 0130
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-10-06
6
6
  supersedes: 0094
7
7
  superseded-by: null
8
8
  amends: 0093
9
- amended-by: null
9
+ amended-by: 0127
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: 0061
9
- amended-by: null
9
+ amended-by: 0128
10
10
  ---
11
11
 
12
12
  ## Context
@@ -0,0 +1,121 @@
1
+ ---
2
+ id: 0127
3
+ title: The monitor shows weighted tokens beside raw tokens
4
+ status: proposed
5
+ date: 2026-10-15
6
+ supersedes: null
7
+ superseded-by: null
8
+ amends: 0099
9
+ amended-by: null
10
+ ---
11
+
12
+ ## Context
13
+
14
+ The monitor's Usage tab adds fresh input, cache reads, cache writes and output
15
+ one to one. On the measured machine 98% of those tokens were cache reads
16
+ (ADR-0099). A cache read is billed at a tenth of a fresh input token on most
17
+ Claude models, and at less on the newest. So the raw total mostly says how
18
+ often a context was re-read. A long session that re-reads a large cache looks
19
+ heavy. A session that sends the same context uncached on every call looks
20
+ light.
21
+
22
+ Fleet now judges and shows cost in dollars (Fleet ADR-0087). A developer who
23
+ opens the monitor sees a raw count that moves differently from Fleet's figure.
24
+ Nothing on the page says why.
25
+
26
+ The product owner asked the monitor to show each kind of token on its own, and
27
+ what each kind weighs, beside the raw count.
28
+
29
+ ADR-0099 rejected tokens weighted by kind: "that is a price table by another
30
+ name." Its concern was a table kept current for every model, and a figure read
31
+ against an invoice it never matches. That conclusion does not hold for this
32
+ use:
33
+
34
+ - The table holds ratios between the kinds of one model, as the provider's
35
+ pricing page states them. It holds no price. The ratios change rarely: every
36
+ Claude model shares the same cache write and output ratios, and only four
37
+ models have cheaper cache reads.
38
+ - A model the table does not list still gets a figure, at Anthropic's usual
39
+ ratios, marked estimated. ADR-0099's "a new model works on day one" holds.
40
+ - A weighted token is still a token: one fresh input token of the model that
41
+ served it. It names no money and makes no claim about any invoice.
42
+ - Rules, thresholds, baselines, evidence and the usual stay in raw tokens.
43
+ Only what the monitor shows changes.
44
+
45
+ ## Decision
46
+
47
+ 1. **The monitor shows weighted tokens beside raw tokens.** The Usage tab's
48
+ head states the range's weighted total under its raw total. A card lists each
49
+ kind of token with its raw count, the ratio it was weighed at, its weighted
50
+ count and its share of the weighted total. Each row of the table by model and
51
+ by agent carries its weighted count. The Live tab's session line carries the
52
+ session's weighted count beside its tokens.
53
+ 2. **One weighted token is one fresh input token of the model that served it.**
54
+ Each kind is multiplied by that model's published ratio to its own fresh
55
+ input, model by model, and then summed. On every Anthropic model: fresh input
56
+ ×1, 5-minute cache write ×1.25, 1-hour cache write ×2, output ×5. Cache reads
57
+ ×0.1, except ×0.05 on Opus 5.5 and Sonnet 5.5 and ×0.025 on Fable 5.1 and
58
+ Mythos 5.1. A cache write recorded without its lifetime weighs as a 5-minute
59
+ write.
60
+ 3. **The table lives in the client, as ratios** (`cost/weights.py`). A model is
61
+ looked up by the name `cost.models` gives it, without its snapshot date, and
62
+ without the effort suffix Devin records (`claude-opus-5-5-medium`).
63
+ 4. **A figure weighed by defaults is marked estimated.** A `claude-*` model the
64
+ table does not list, any other model (Devin's `swe-1-6`) and a response with
65
+ no model weigh at Anthropic's usual ratios, cache reads at ×0.1. No token is
66
+ dropped. The page says "estimated" and names the models.
67
+ 5. **Three charges are not weighted:** fast mode, US-only inference, and Haiku
68
+ 5.5's tier for prompts over 100K tokens. Each is billed higher, so each
69
+ leaves a weighted figure under the bill, never over. The page says so.
70
+ 6. **Nothing else changes unit.** The chart, the runs, the components, the
71
+ usual, Session cost and its reasons, and every figure that leaves the
72
+ machine stay in raw tokens.
73
+
74
+ What this amends: ADR-0099's rejection of "tokens weighted by kind", for what
75
+ the monitor shows. ADR-0099's decision stands. Every cost figure is tokens, and
76
+ a weighted token is a token. There is still no price table: this table holds
77
+ ratios.
78
+
79
+ ## Alternatives considered
80
+
81
+ - **Dollars on the machine.** Rejected by ADR-0099 and by this repo's rule that
82
+ cost is tokens, never dollars. It needs prices kept current, and invites a
83
+ comparison with an invoice that subscriptions and discounts never match.
84
+ - **One reference model for every model.** Weigh each model's tokens against a
85
+ single model's fresh input, so Opus and Haiku add up on one scale. Rejected:
86
+ the ratio between two models is a ratio of their prices, so this is dollars in
87
+ disguise, with a reference price to keep current.
88
+ - **Weigh only in Fleet**, as cost-notifications §6 proposed. Rejected: the
89
+ product owner asked for it on the machine. Fleet now shows dollars (Fleet
90
+ ADR-0087), so a monitor with raw tokens alone disagrees with Fleet by a factor
91
+ that moves with the mix of kinds, and nothing explains it.
92
+ - **Show weighted tokens instead of raw ones.** Rejected: the rules, the usual
93
+ and Session cost read raw tokens, and the page must show the figure they
94
+ judge.
95
+ - **Fold cache writes without a lifetime into 5-minute writes.** Rejected: that
96
+ changes the raw 5-minute figure. They get their own row when there are any.
97
+
98
+ ## Consequences
99
+
100
+ - A reader sees why a large raw total can weigh little: cache reads count a
101
+ tenth or less.
102
+ - The table is one more thing to keep current. A changed ratio needs a client
103
+ release. Until it ships, a listed model's figure is off, and a new model's
104
+ figure says estimated.
105
+ - The machine's weighted tokens and Fleet's dollars are different scales. Within
106
+ one model they move together. Across models they do not, because each
107
+ model's weighted token is its own fresh input token.
108
+ - The monitor weighs 1-hour writes at ×2, because transcripts split the two
109
+ lifetimes. cost-notifications §6 had Fleet weigh both at ×1.25.
110
+ - `tests/cost/test_weights.py` holds each listed model's cache-read ratio,
111
+ checks that no kind of token is dropped, and checks that every model with a
112
+ known context window has ratios of its own.
113
+
114
+ ## When to revisit
115
+
116
+ - When Anthropic changes a ratio, or a new model's cache reads differ from
117
+ ×0.1.
118
+ - When OpenAIDR reads an agent whose provider publishes different ratios, such
119
+ as Codex.
120
+ - If Session cost or the usual should judge weighted tokens. That changes the
121
+ rules, and needs its own ADR.
@@ -0,0 +1,118 @@
1
+ ---
2
+ id: 0128
3
+ title: Usage files each response once, where it was first filed
4
+ status: proposed
5
+ date: 2026-10-15
6
+ supersedes: null
7
+ superseded-by: null
8
+ amends: 0104
9
+ amended-by: 0130, 0132
10
+ ---
11
+
12
+ ## Context
13
+
14
+ An audit of the cost pipeline on 2026-10-15 found two ways one response reached
15
+ Fleet twice. Both were reproduced through the real reader.
16
+
17
+ - **Branches.** Claude Code 2.1.300's `/branch` writes a new session file
18
+ holding the conversation so far. Each record is copied whole under the new
19
+ session id, with its message id, usage and time, plus a `forkedFrom` field.
20
+ `--fork-session` likely does the same. OpenAIDR keys a response by its session
21
+ (its ADR-0014), and its token-usage spec leaves cross-session duplicates to
22
+ the consumer. One branch counted 1.66 times the tokens billed and raised a
23
+ false budget breach.
24
+ - **A response read while it is written.** Claude Code writes a response a
25
+ block at a time, each record repeating its usage. The reader dates a response
26
+ by its newest record. A pass between two records files it a minute earlier
27
+ than the next pass does. Buckets merge by max and never move (ADR-0104), so
28
+ each minute kept a full copy. On this machine's transcripts that came to
29
+ about 2.4% of all tokens. One test response reached Fleet three times.
30
+
31
+ ## Decision
32
+
33
+ A response is dated by its first turn: the first record of it that makes a
34
+ turn, whose time never moves once written. A record of thinking alone makes no
35
+ turn, so a response still being written with no turn yet waits for one. A
36
+ final response, or one quiet for 10 minutes, is dated by its own time. The
37
+ pass offers a session holding a waiting response again until it is filed.
38
+ Every read dates a finished transcript the same way, so a store rebuilt from it
39
+ sends Fleet the same bucket keys.
40
+
41
+ The store records, per response, the session that first carried it and the
42
+ minute it was dated in (`usage_responses`). `put_usage` files each response
43
+ there, in the same transaction as the bucket merge. A later read files it in
44
+ the same place, at its newest counts. A read of the same response from another
45
+ session adds nothing.
46
+
47
+ A response that no session has filed goes to the session that began first,
48
+ with equal starts going by session id. A branch holds a subset of its
49
+ original's records plus its own later ones, so it never began before the
50
+ original. The machine's own figures use the same rank without a store: the
51
+ cost rules through the ledger, the baseline's history of finished runs, the
52
+ backfill's run names and components, and the monitor (`cost.copies.distinct`).
53
+
54
+ Rows go at 30 days and on a switch to another Fleet, as buckets do.
55
+
56
+ A database a build before this one wrote already has coverage, in
57
+ `usage_buckets`, with nothing in `usage_responses` -- the table is additive
58
+ (ADR-0057) and opens empty. Left alone, a branch read before its original is
59
+ read again under this build would find nothing filed for the responses it
60
+ copied and claim them as new. The first open under this build resets every
61
+ covered kind's coverage once (`db.py`'s `_reclaim_usage_responses`), so the
62
+ next backfill reads that history again and files it properly before any
63
+ branch can; the buckets already merged are kept; the reread only adds to
64
+ them. Guarded by `usage_responses` being empty, so it runs exactly once per
65
+ database, ending for good at the first response the reread files.
66
+
67
+ ## Alternatives considered
68
+
69
+ - **Skip records that carry `forkedFrom`, in OpenAIDR.** This is the exact
70
+ signal. It is rejected for now because OpenAIDR does not expose the field,
71
+ and changing that needs an upstream release and a new pin. Collection is not
72
+ ours to parse (ADR-0002). When OpenAIDR exposes it, the rank becomes a
73
+ fallback rather than the rule.
74
+ - **Date a response by its first record.** That time is stable, but OpenAIDR
75
+ exposes only the newest record's. The first turn is the nearest stable time
76
+ it exposes; waiting for it costs a few seconds of upload latency.
77
+ - **Date a response by the minute it was first read.** It is stable on one
78
+ machine, but a store rebuilt from the finished transcript would date it
79
+ differently, and Fleet could not match the resend to what it holds.
80
+ - **Move buckets: send the old minute lowered, or zero.** Fleet applies a
81
+ lower revision as a negative change, so this would work on the wire. It is
82
+ rejected because it gives up the max merge. With the max merge, the backfill
83
+ and the pass commute, and an older read landing late cannot lower a count.
84
+ - **Deduplicate only against the ledger's 36 hours.** That misses a branch of a
85
+ conversation older than the ledger, which is the likely
86
+ `--resume … --fork-session` case. It also re-ranks after every restart.
87
+
88
+ ## Consequences
89
+
90
+ - Each response is sent to Fleet once. Branches no longer inflate totals,
91
+ budgets or runs on the machine or in Fleet.
92
+ - A branch's own run no longer includes the conversation it inherited. Its run
93
+ and Live figures show only its own work.
94
+ - The store holds one row per response for 30 days. A heavy machine makes a
95
+ few thousand responses a day.
96
+ - Filing holds one object per response until its transaction ends. The
97
+ backfill files its history a slice of sessions at a time, at least 5,000
98
+ responses each, in rank order, and names runs after the last slice. On a
99
+ measured month of 60,000 responses its peak was 3.2 MiB, below the
100
+ 13.5 MiB of filing the month's buckets at once. Nothing stays in memory:
101
+ the filings live in the store, and the daemon keeps only the ids of
102
+ sessions waiting for a response's first turn.
103
+ - A response that straddled a minute and is read again just after upgrading may
104
+ still be counted in its old minute once. That is the stored state before this
105
+ change, not a new error.
106
+ - A store that is lost and rebuilt has no filings. It dates each response the
107
+ same way, so its minute buckets match what Fleet holds. Its rows older than
108
+ seven days roll into hours, which Fleet cannot match to the minutes it
109
+ holds; that resend still counts twice until the upload says which store sent
110
+ a row.
111
+ - A response read before its first turn waits up to 10 minutes. A response
112
+ that never gets a turn is filed late, never lost.
113
+
114
+ ## When to revisit
115
+
116
+ When OpenAIDR exposes `forkedFrom`, or the first record's time of a response.
117
+ Also when another agent kind's reader turns out to repeat a response id across
118
+ distinct responses: the key assumes an id is unique within its kind.
@@ -0,0 +1,130 @@
1
+ ---
2
+ id: 0129
3
+ title: An unfinished response counts at least the output it shows
4
+ status: proposed
5
+ date: 2026-10-16
6
+ supersedes: null
7
+ superseded-by: null
8
+ amends: 0093
9
+ amended-by: null
10
+ ---
11
+
12
+ ## Context
13
+
14
+ Claude Code writes a response one content block per record. Each record repeats
15
+ the response's id and usage. Only the last record carries a stop reason, and
16
+ only it states the whole output. The records before it state a small part.
17
+ OpenAIDR marks a response `final` when it read that last record. It calls output
18
+ on any other response a lower bound (its ADR-0014).
19
+
20
+ Sub-agent transcripts mostly never get that last record. ADR-0093 counts what
21
+ the transcripts record, on both sides of every comparison, and accepted that a
22
+ run with many sub-agents counts its output low. Measured on one machine's
23
+ transcripts on 2026-10-16:
24
+
25
+ - 874 sub-agent responses were not final. They recorded 9,907 output tokens.
26
+ - Their text and tool-call arguments came to 177,024 tokens at four characters
27
+ a token, read from the raw files.
28
+ - Read through OpenAIDR they came to 105,802. The reader abridges any tool
29
+ argument over 1,000 characters to its first and last 400 (adr-sensor's
30
+ `truncate_middle`). The same cut applied to the raw files gives 105,802
31
+ exactly, on the same 874 responses.
32
+ - So the recorded output was 9% of what those responses visibly wrote.
33
+
34
+ Output is the kind the monitor's weighted tokens count heaviest, at five times
35
+ fresh input (ADR-0127). Every cost figure on the machine, and every usage
36
+ bucket sent to Fleet, undercounted each run that used sub-agents.
37
+
38
+ ## Decision
39
+
40
+ A response that is not final counts the greater of its recorded output and
41
+ what its turns show, at four characters a token.
42
+
43
+ What a response shows is read from the assistant turns that carry its id in its
44
+ own session:
45
+
46
+ - A turn with no tool calls shows its text.
47
+ - A turn that issued tool calls shows each call's arguments as JSON, and not its
48
+ text. The reader stands the placeholder `[Assistant used tools]` in for the
49
+ text of a record that holds only calls, and the model wrote none of it.
50
+ - JSON keeps a character outside ASCII as written, so it counts once.
51
+
52
+ A final response counts as recorded. Every other count of every response is
53
+ unchanged.
54
+
55
+ `cost.output.floored` applies the rule wherever sessions enter cost:
56
+
57
+ - the ledger that the cost rules and the live baseline summaries read
58
+ (`Ledger.update`, once per change);
59
+ - the usage recorder (`UsageRecorder.record`);
60
+ - the usage backfill, on each slice it files;
61
+ - the baseline backfill (`Baseline.backfill`);
62
+ - the monitor's deduplicated view, which its range figures and Live cards read
63
+ (`snapshot_from`).
64
+
65
+ A response's turns are its own session's, so the floor gives the same count
66
+ before or after `cost.copies.distinct`. The floor keeps one integer per
67
+ response and no text. `tests/cost/test_unfinished_output_counts_what_it_shows.py`
68
+ asks every entry point through the real reader, and fails when a new module
69
+ reads sessions cold or removes copies without being asked.
70
+
71
+ A figure built from a response that is not final stays a lower bound, and the
72
+ monitor still writes "at least". The usage recorder still waits up to 10
73
+ minutes for a response with no turn yet (ADR-0128). Such a response shows
74
+ nothing, so it files as recorded.
75
+
76
+ This amends ADR-0093's "Recorded tokens on both sides". Baselines and rules
77
+ count what the transcripts record, except that a response that is not final
78
+ counts at least the output it shows.
79
+
80
+ ## Alternatives considered
81
+
82
+ - **Count only final responses.** Rejected: a sub-agent whose responses never
83
+ finish would count no output at all. That is further from the truth than the
84
+ recorded fragment.
85
+ - **Read the sub-agent's totals from the parent's Task tool result.** Rejected:
86
+ Claude Code's result for a sub-agent carries `isAsync`, `status`, `agentId`,
87
+ `description`, `resolvedModel`, `prompt`, `outputFile`, `canReadOutputFile`
88
+ and `canContinueAgent`, and no token count (13 results measured). Reading it
89
+ would also parse an agent format here, which ADR-0002 forbids.
90
+ - **Three characters a token.** Rejected: on 425 final responses, whose output
91
+ is exact, three characters a token came out above the recorded output once,
92
+ at 1.07×. Four came out above it on none. A count above the true output
93
+ would stay in Fleet, because buckets merge by the greater (ADR-0104).
94
+ - **Count the placeholder as text.** Rejected: the reader wrote it. It came to
95
+ 23,276 characters on the measured responses, about 5% of the floor.
96
+ - **Floor output in `Tokens.of`, where every reader counts.** Rejected: a
97
+ response alone carries no turns. The floor needs its session.
98
+ - **Floor in the seam, `sessions/access.py`.** Rejected: the seam passes
99
+ OpenAIDR's sessions on as they are. `stacktrace sessions` shows what the
100
+ transcript recorded.
101
+ - **Parse the transcript again for the content blocks.** Rejected by ADR-0002.
102
+
103
+ ## Consequences
104
+
105
+ - Sub-agent output counts. On the measured machine the 874 unfinished
106
+ responses count 105,410 output tokens instead of 9,907.
107
+ - The count is still a lower bound. Thinking does not show, and the reader
108
+ abridges long arguments. Through the real reader, on 388 final responses,
109
+ the floor came to a median of 0.25 of the recorded output and at most 0.79.
110
+ - A count above a response's true output would stay in Fleet under the max
111
+ merge. Nothing measured did. A response made of long runs of one repeated
112
+ character could.
113
+ - The floor rises as a response's records land, and its bucket rises with it.
114
+ A final record that arrives later replaces the floor when it is larger, and
115
+ whichever read lands last, the bucket keeps the larger.
116
+ - Stored baseline rows catch up at the next daemon start: the backfill
117
+ summarizes every finished run again and replaces a row whose summary changed.
118
+ - Usage Fleet already holds rises only when a read files that response again.
119
+ A store first opened by ADR-0128's build reads its covered history again
120
+ once (`db.py`'s `_reclaim_usage_responses`). Shipped in one release with this
121
+ change, that read refiles the last 30 days with the floor.
122
+ - The ledger and each backfill slice walk the turns of unfinished responses
123
+ once. On a synthetic month of 60,000 responses, half of them unfinished, the
124
+ backfill's peak went from 3.0 MiB to 3.1 MiB.
125
+
126
+ ## When to revisit
127
+
128
+ When Claude Code writes the last record of a sub-agent's responses, or OpenAIDR
129
+ exposes a sub-agent's own totals. Also when another kind's reader marks
130
+ responses not final and its turns can hold text the model did not write.