stacktrace-cli 0.3.0__tar.gz → 0.3.1__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.
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/.agents/skills/release-stacktrace/SKILL.md +14 -3
- stacktrace_cli-0.3.1/.claude/skills/release-stacktrace/SKILL.md +1 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/PKG-INFO +2 -2
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/README.md +1 -1
- stacktrace_cli-0.3.1/docs/releases/v0.3.1.md +38 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/pyproject.toml +1 -1
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/__init__.py +1 -1
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_readme_examples_are_real_output.py +30 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/uv.lock +1 -1
- stacktrace_cli-0.3.0/.claude/skills/release-stacktrace/SKILL.md +0 -194
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/.claude/settings.json +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/.codex/hooks.json +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/.github/workflows/autofix.yml +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/.github/workflows/ci.yml +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/.github/workflows/claude.yml +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/.github/workflows/publish-pypi.yml +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/.gitignore +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/AGENTS.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/CLAUDE.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0001-session-telemetry-as-input.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0002-session-collection-in-openaidr.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0003-runtime-edges.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0004-three-stage-detector.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0005-detection-family-and-report-assembly.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0006-trust-boundary-and-detection-upload.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0007-proprietary-package-on-open-dependencies.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0008-console-in-separate-demo-package.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0010-detection-severity-and-confidence-ladders.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0011-verdict-cache.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0012-observation-evidence-kinds-and-transport.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0013-rule-catalogue-triage-and-per-rule-context.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0014-declared-project-mapping.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0015-narrow-the-security-catalogue.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0016-stall-grouping-is-session-wide.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0017-a-declined-repeat-is-a-stall.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0018-remote-sync-config-and-facade-consumption.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0019-delegated-commands-are-openaca-objects.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0020-openaca-consumption-boundary.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0021-two-command-kinds.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0022-detection-scope-is-a-catalogue-column.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0023-sync-detect-collects-and-does-not-escalate.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0024-the-upload-carries-observations.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0025-a-denied-call-is-activity-never-an-invocation.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0026-the-console-becomes-a-product-surface.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0027-a-finding-may-name-what-it-could-not-place.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0028-the-console-shows-what-it-placed.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0029-stage-three-returns-to-opt-in.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/HOOK-PROMPT.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/INDEX.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/TEMPLATE.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/cutover-openaca-remote.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/plans/002-session-input.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/plans/003-correlation.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/plans/004-detector.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/plans/005-remote-sync.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/plans/006-cli-composition.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/plans/007-detection-upload.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/plans/008-monitor.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/releases/v0.0.1.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/releases/v0.1.0.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/releases/v0.2.0.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/releases/v0.2.1.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/releases/v0.2.2.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/releases/v0.2.3.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/releases/v0.3.0.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/specs/aidr.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/specs/cli-composition.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/specs/correlation.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/specs/detection-upload.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/specs/detector.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/specs/monitor.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/specs/remote-sync.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/specs/session-input.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/scripts/git-hooks/pre-push +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/scripts/install-hooks.sh +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/__main__.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/analysis.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/cli.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/correlate/__init__.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/correlate/acquire.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/correlate/composition.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/correlate/join.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/correlate/observed.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/correlate/orchestrate.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/correlate/project_map.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/correlate/record.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/correlate/render.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/__init__.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/analyzer.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/cache.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/deterministic.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/finding.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/markers.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/priors.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/prompts/__init__.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/prompts/v1/exclusions.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/prompts/v1/framing.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/prompts/v1/stacktrace-deceptive-completion.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/prompts/v1/stacktrace-injected-instruction-followed.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/prompts/v1/stacktrace-intent-drift.md +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/reasoning.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/render.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/rules.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/run.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/secrets.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/verdict.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/__init__.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/reasoning.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/render.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/server.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/site/app.js +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/site/fonts/OFL.txt +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/site/fonts/dm-mono-400-latin.woff2 +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/site/fonts/dm-mono-500-latin.woff2 +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/site/fonts/dm-sans-latin.woff2 +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/site/index.html +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/site/styles.css +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/state.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/verdicts.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/monitor/watch.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/remote/__init__.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/remote/cli.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/remote/client.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/remote/config.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/remote/detect_payload.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/remote/payload.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/remote/policy.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/remote/redact.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/remote/spool.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/remote/sync.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/remote/sync_detect.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/remote/upload_contract.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/sessions/__init__.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/sessions/access.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/sessions/outcome.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/sessions/protocols.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/sessions/render.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/__init__.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/agent_bom_fixture.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/detector_session_fixture.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/monitor/__init__.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/monitor/feed_harness.mjs +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/monitor/test_feed_model.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/monitor/test_reasoning_gates.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/monitor/test_render.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/monitor/test_server.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/monitor/test_site_assets.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/monitor/test_state.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/monitor/test_verdicts.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/monitor/test_watch.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/__init__.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/helpers.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_cli.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_client.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_config.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_detect_activity.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_detect_cli.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_detect_client.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_detect_contract_is_exhaustive.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_detect_gate_matches_the_cloud.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_detect_layers_compose.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_detect_payload_reaches_the_cloud_model.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_detect_redaction.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_detect_spool.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_detect_upload_contract.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_detect_wire_payload.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_facade_contract.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_payload.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_policy.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_redact_payload.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_seam.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_spool.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_sync.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_sync_detect.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/remote/test_upload_contract.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_acquire.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_agent_instance_id.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_analysis.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_bom_shape.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_call_status_conventions.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_cli.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_composition.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_correlate_orchestrate.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_correlate_render.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_correlated_session.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detection_components.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detection_subject.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_analyzer_contract.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_analyzer_live.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_cache.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_deterministic.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_end_to_end.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_finding.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_liveness.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_markers.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_priors.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_reasoning.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_render.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_run.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_secrets.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_detector_verdict.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_fingerprint_covers_what_the_analyzer_reads.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_help_sections.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_join.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_monitor_cli.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_no_live_document_states_the_old_stage_three_default.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_observed.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_openaca_contract.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_openaidr_contract.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_option_arity_matches_the_binary.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_project_map.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_release_readiness.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_seam_boundary.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_sessions_access.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_sessions_end_to_end.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_sessions_protocol_typing.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_sessions_protocols.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_sessions_render.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_shell_separators_match_the_shell.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_stored_verdicts_are_never_gated_on_reasoning.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_untrusted_content_never_travels.py +0 -0
- {stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/tests/test_verification_subcommands_match_the_binary.py +0 -0
|
@@ -102,9 +102,10 @@ shipped.
|
|
|
102
102
|
|
|
103
103
|
### Step 4. Bump the version, pin workspace dependencies, and gate
|
|
104
104
|
|
|
105
|
-
`pyproject.toml`'s `version
|
|
106
|
-
`__version__`
|
|
107
|
-
|
|
105
|
+
`pyproject.toml`'s `version`, `src/stacktrace_cli/__init__.py`'s
|
|
106
|
+
`__version__` and the `--version` console block in `README.md` are three
|
|
107
|
+
separate copies of the version string. The workflow fails the build if the
|
|
108
|
+
first two disagree with the tag. Move them together:
|
|
108
109
|
|
|
109
110
|
```bash
|
|
110
111
|
sed -i.bak 's/^version = ".*"/version = "<version>"/' pyproject.toml && rm pyproject.toml.bak
|
|
@@ -125,6 +126,16 @@ uv lock # refresh uv.lock, now free t
|
|
|
125
126
|
uv run stacktrace --version # sanity: prints <version>
|
|
126
127
|
```
|
|
127
128
|
|
|
129
|
+
Paste that exact output over the console block under `## Installation` in
|
|
130
|
+
`README.md`. `readme = "README.md"` makes that file the PyPI long description,
|
|
131
|
+
and a description is baked into the artifact at upload — releases being
|
|
132
|
+
immutable, a stale line there is only ever corrected by burning the next
|
|
133
|
+
version number, which is what 0.3.1 was for. The block sat at `0.2.1` through
|
|
134
|
+
three releases before anything checked it;
|
|
135
|
+
`tests/test_readme_examples_are_real_output.py` now fails the build when it
|
|
136
|
+
drifts, so this is a step you are reminded of rather than one you must
|
|
137
|
+
remember.
|
|
138
|
+
|
|
128
139
|
Now pin both to whatever `uv lock` just resolved — the one point in the
|
|
129
140
|
procedure where the lockfile has just picked the newest available versions
|
|
130
141
|
and a release is actually being cut:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
../../../.agents/skills/release-stacktrace/SKILL.md
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: stacktrace-cli
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
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>
|
|
@@ -49,7 +49,7 @@ Requires Python 3.11 or newer.
|
|
|
49
49
|
|
|
50
50
|
```console
|
|
51
51
|
$ stacktrace --version
|
|
52
|
-
stacktrace 0.
|
|
52
|
+
stacktrace 0.3.1 (openaca 0.6.0)
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
## Quick start
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 0.3.1 — the README says what the CLI says
|
|
2
|
+
|
|
3
|
+
A documentation fix, and the test that keeps it fixed. Nothing in the pipeline
|
|
4
|
+
moved; `0.3.1` behaves exactly as `0.3.0` does.
|
|
5
|
+
|
|
6
|
+
The `stacktrace --version` block in `README.md` read `stacktrace 0.2.1` while
|
|
7
|
+
the wheel beside it was `0.3.0`. Because `readme = "README.md"` makes that file
|
|
8
|
+
the PyPI long description, the project page for 0.2.2, 0.2.3 and 0.3.0 each
|
|
9
|
+
opened with a console block contradicting the release it described.
|
|
10
|
+
|
|
11
|
+
## Highlights
|
|
12
|
+
|
|
13
|
+
- **The README's version example is now asserted against the CLI.** The block
|
|
14
|
+
is produced by invoking `--version` and must appear in `README.md` verbatim,
|
|
15
|
+
so the line cannot drift from the build again — it joins the sessions example,
|
|
16
|
+
which has been checked this way for some time. The flag is invoked rather than
|
|
17
|
+
its text rebuilt from `__version__`, which also puts the `openaca` half of the
|
|
18
|
+
line under the same check.
|
|
19
|
+
|
|
20
|
+
- **The guard runs in the gate that publishes.** It sits in
|
|
21
|
+
`tests/test_readme_examples_are_real_output.py` rather than in
|
|
22
|
+
`test_release_readiness.py`, whose `release_gate` marker is deselected by
|
|
23
|
+
`addopts` — a check placed there would not be collected by the `pytest` step
|
|
24
|
+
the publish workflow runs.
|
|
25
|
+
|
|
26
|
+
## Install
|
|
27
|
+
|
|
28
|
+
`uv tool install stacktrace-cli==0.3.1` or `pip install stacktrace-cli==0.3.1`.
|
|
29
|
+
|
|
30
|
+
## Compatibility
|
|
31
|
+
|
|
32
|
+
No behaviour changes. The 0.3.0 rename of `--escalate` to `--reasoning` is the
|
|
33
|
+
last one that needed anything of you; see `docs/releases/v0.3.0.md` if you are
|
|
34
|
+
coming from 0.2.3.
|
|
35
|
+
|
|
36
|
+
The 0.3.0 project page on PyPI still shows the stale `0.2.1` line. A PyPI
|
|
37
|
+
description is baked into the artifact at upload and releases are immutable, so
|
|
38
|
+
that page cannot be corrected in place — this release is the correction.
|
|
@@ -27,7 +27,9 @@ from datetime import UTC, datetime
|
|
|
27
27
|
from pathlib import Path
|
|
28
28
|
|
|
29
29
|
import detector_session_fixture as fx
|
|
30
|
+
from click.testing import CliRunner
|
|
30
31
|
|
|
32
|
+
from stacktrace_cli.cli import main
|
|
31
33
|
from stacktrace_cli.sessions.access import SessionView
|
|
32
34
|
from stacktrace_cli.sessions.render import render_text as render_sessions_text
|
|
33
35
|
|
|
@@ -67,3 +69,31 @@ def test_the_sessions_example_is_what_the_sessions_renderer_prints() -> None:
|
|
|
67
69
|
)
|
|
68
70
|
rendered = render_sessions_text(SessionView(sessions=(session,)), include_content=True)
|
|
69
71
|
assert rendered.strip() in _readme()
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def test_the_version_example_is_what_the_version_flag_prints() -> None:
|
|
75
|
+
"""The README's `--version` block is a third copy of the version string.
|
|
76
|
+
|
|
77
|
+
`pyproject.toml` and `__version__` are kept together by two steps of the
|
|
78
|
+
publish workflow, which fail the build when either disagrees with the tag.
|
|
79
|
+
Nothing watched this block, so it sat at `0.2.1` while 0.2.2, 0.2.3 and
|
|
80
|
+
0.3.0 shipped past it — and because `readme = "README.md"` makes this file
|
|
81
|
+
the PyPI long description, every one of those releases published a landing
|
|
82
|
+
page whose first console block contradicted the wheel beside it. A PyPI
|
|
83
|
+
description is baked into the artifact at upload and releases are
|
|
84
|
+
immutable, so a stale line there cannot be edited afterwards; it is only
|
|
85
|
+
ever corrected by burning the next version number.
|
|
86
|
+
|
|
87
|
+
Asserted by invoking the flag rather than by rebuilding its text from
|
|
88
|
+
`__version__`, so the openaca half is covered too: a reassembled string
|
|
89
|
+
would restate the f-string in `cli.py` and certify itself.
|
|
90
|
+
|
|
91
|
+
This lives here and not in `test_release_readiness.py` because that module
|
|
92
|
+
is marked `release_gate`, and `addopts` deselects the marker — the
|
|
93
|
+
`uv run pytest -q` step that guards the publish would never collect it.
|
|
94
|
+
"""
|
|
95
|
+
printed = CliRunner().invoke(main, ["--version"], prog_name="stacktrace").output
|
|
96
|
+
assert printed.strip() in _readme(), (
|
|
97
|
+
f"README.md does not contain the line `stacktrace --version` prints "
|
|
98
|
+
f"({printed.strip()!r}); the console block under ## Installation has drifted"
|
|
99
|
+
)
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: release-stacktrace
|
|
3
|
-
description: Use when cutting a new stacktrace-cli PyPI release. Walks through version bump, release-notes drafting, pre-flight checks, tag, and push — enforces the publish-pypi.yml notes-file gate so the GitHub Releases page can't silently drift from PyPI.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# release-stacktrace
|
|
7
|
-
|
|
8
|
-
End-to-end release procedure for the `stacktrace-cli` distribution.
|
|
9
|
-
`.github/workflows/publish-pypi.yml` enforces the machine-checkable gates
|
|
10
|
-
(tag on main, tag matches both version strings, notes file present, four
|
|
11
|
-
CI gates green). This skill is the human-side counterpart: it drafts the
|
|
12
|
-
notes with judgment, runs the pre-flight checks, and pushes the tag.
|
|
13
|
-
|
|
14
|
-
**Announce at start:** "I'm using the release-stacktrace skill to cut a new
|
|
15
|
-
stacktrace-cli release."
|
|
16
|
-
|
|
17
|
-
## When to invoke
|
|
18
|
-
|
|
19
|
-
User says any of: "cut a release", "ship 0.0.N", "release stacktrace",
|
|
20
|
-
"tag a new version", or starts editing `pyproject.toml`'s version field
|
|
21
|
-
in this repo.
|
|
22
|
-
|
|
23
|
-
## Inputs
|
|
24
|
-
|
|
25
|
-
1. **Target version** (e.g. `0.1.0`). Inferred from `pyproject.toml` if
|
|
26
|
-
the user already bumped it; otherwise ask.
|
|
27
|
-
2. **Theme** — the H1 line of the notes file. Ask the user; a commit log
|
|
28
|
-
can't infer it.
|
|
29
|
-
|
|
30
|
-
## Procedure
|
|
31
|
-
|
|
32
|
-
### Step 1. Pre-flight checks
|
|
33
|
-
|
|
34
|
-
Run from the repo root. Stop and ask if any fails — do not "fix" a dirty
|
|
35
|
-
tree or out-of-sync main automatically, those signal in-flight work.
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
git rev-parse --abbrev-ref HEAD # must be main
|
|
39
|
-
git status --porcelain # must be empty
|
|
40
|
-
git fetch --tags origin
|
|
41
|
-
git rev-parse --verify "v<version>" 2>/dev/null # MUST FAIL — tag must not exist
|
|
42
|
-
test "$(git rev-parse HEAD)" = "$(git rev-parse origin/main)"
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
PyPI versions are immutable, including yanked ones. If `<version>` is
|
|
46
|
-
already on PyPI, the only path forward is a new version number:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
curl -s https://pypi.org/pypi/stacktrace-cli/json | python3 -c 'import json,sys; print(sorted(json.load(sys.stdin)["releases"]))'
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### Step 2. Gather the commit log
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
prev_tag=$(git describe --tags --abbrev=0) # empty on the first release
|
|
56
|
-
git log --oneline "${prev_tag}..HEAD"
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Raw material only — do not dump it into the notes file verbatim.
|
|
60
|
-
|
|
61
|
-
### Step 3. Draft `docs/releases/v<version>.md`
|
|
62
|
-
|
|
63
|
-
Follow the shape of the existing files in `docs/releases/`:
|
|
64
|
-
|
|
65
|
-
```markdown
|
|
66
|
-
# <version> — <theme>
|
|
67
|
-
|
|
68
|
-
## Highlights
|
|
69
|
-
|
|
70
|
-
- **<Theme A>.** 1-3 sentences pitched at someone who installs the CLI.
|
|
71
|
-
Reference ADRs by number when a design doc backs the change.
|
|
72
|
-
- **Bug fixes.** Combine small fixes into one bullet, comma-separated.
|
|
73
|
-
|
|
74
|
-
## Install
|
|
75
|
-
|
|
76
|
-
`uv tool install stacktrace-cli==<version>` or `pip install stacktrace-cli==<version>`.
|
|
77
|
-
|
|
78
|
-
## Compatibility
|
|
79
|
-
|
|
80
|
-
<Behavior changes existing users will notice. Say "pre-alpha, no
|
|
81
|
-
back-compat hedging" while that's still true.>
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**Judgment guidelines (apply ruthlessly):**
|
|
85
|
-
|
|
86
|
-
- **Group by theme, not by commit.** Five commits adding one capability
|
|
87
|
-
are one bullet.
|
|
88
|
-
- **Lead with user-visible impact**, not implementation.
|
|
89
|
-
- **Cut chore/format/docs-only and release-machinery commits.** They
|
|
90
|
-
aren't release-visible.
|
|
91
|
-
- **Acknowledge breaking changes explicitly** under `## Compatibility` —
|
|
92
|
-
a renamed subcommand or changed output shape goes there.
|
|
93
|
-
|
|
94
|
-
Show the draft to the user and iterate until they agree it captures what
|
|
95
|
-
shipped.
|
|
96
|
-
|
|
97
|
-
### Step 4. Bump both version strings together
|
|
98
|
-
|
|
99
|
-
`pyproject.toml`'s `version` and `src/stacktrace_cli/__init__.py`'s
|
|
100
|
-
`__version__` are separate sources; the workflow fails the build if they
|
|
101
|
-
disagree with the tag. Move them together:
|
|
102
|
-
|
|
103
|
-
```bash
|
|
104
|
-
sed -i.bak 's/^version = ".*"/version = "<version>"/' pyproject.toml && rm pyproject.toml.bak
|
|
105
|
-
sed -i.bak 's/^__version__ = ".*"/__version__ = "<version>"/' src/stacktrace_cli/__init__.py && rm src/stacktrace_cli/__init__.py.bak
|
|
106
|
-
uv lock # refresh uv.lock
|
|
107
|
-
uv run stacktrace --version # sanity: prints <version>
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Step 5. Release-prep commit + PR
|
|
111
|
-
|
|
112
|
-
If the user's original request did not explicitly ask to cut, ship, or
|
|
113
|
-
publish a release, stop before the push and ask. Editing the version
|
|
114
|
-
field is enough to invoke this skill; it is not permission to publish.
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
git checkout -b release/<version>
|
|
118
|
-
git add pyproject.toml uv.lock src/stacktrace_cli/__init__.py docs/releases/v<version>.md
|
|
119
|
-
git status --porcelain # inspect anything still unstaged; stage intentionally or stop
|
|
120
|
-
git commit -m "release: <version> — <theme>"
|
|
121
|
-
git push -u origin release/<version>
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
Opening the PR needs its own explicit ask. Then:
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
gh pr create --title "release: <version>" --body "Release prep for <version>.
|
|
128
|
-
|
|
129
|
-
- Bumps \`pyproject.toml\` and \`__version__\` to <version>
|
|
130
|
-
- Adds release notes at \`docs/releases/v<version>.md\`
|
|
131
|
-
- After merge: tag \`v<version>\` on main and push to trigger PyPI publish + GitHub Release"
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
Surface the PR URL. **Stop here.** The user reviews and merges.
|
|
135
|
-
|
|
136
|
-
### Step 6. After merge: tag + push
|
|
137
|
-
|
|
138
|
-
After the user confirms the PR merged, on a clean main:
|
|
139
|
-
|
|
140
|
-
```bash
|
|
141
|
-
git checkout main
|
|
142
|
-
git pull --ff-only
|
|
143
|
-
git tag v<version>
|
|
144
|
-
git push origin v<version>
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
The tag-triggered run registers asynchronously, so `--limit 1` can grab a
|
|
148
|
-
stale earlier run. Poll for the run tied to the tagged commit:
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
tag_sha=$(git rev-parse "v<version>^{commit}")
|
|
152
|
-
run_id=""
|
|
153
|
-
until [ -n "$run_id" ]; do
|
|
154
|
-
run_id=$(gh run list --repo stacktrace-ai/stacktrace \
|
|
155
|
-
--workflow publish-pypi.yml --commit "$tag_sha" \
|
|
156
|
-
--json databaseId --jq '.[0].databaseId // empty')
|
|
157
|
-
[ -z "$run_id" ] && sleep 5
|
|
158
|
-
done
|
|
159
|
-
gh run watch --repo stacktrace-ai/stacktrace "$run_id"
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### Step 7. Verify
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
curl -s https://pypi.org/pypi/stacktrace-cli/json | python3 -c 'import json,sys; print(sorted(json.load(sys.stdin)["releases"]))'
|
|
166
|
-
gh release view v<version> --repo stacktrace-ai/stacktrace --json name,body
|
|
167
|
-
uvx --from stacktrace-cli==<version> stacktrace --version # installs from PyPI, must print <version>
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
All three must succeed. If any fails, surface the workflow run URL rather
|
|
171
|
-
than guessing.
|
|
172
|
-
|
|
173
|
-
## Failure modes this prevents
|
|
174
|
-
|
|
175
|
-
1. **On PyPI but not on GitHub Releases.** The workflow's notes-file gate
|
|
176
|
-
runs before publish: no notes file at the tag → no PyPI upload.
|
|
177
|
-
2. **Notes file is a raw commit dump.** Step 3's judgment guidelines.
|
|
178
|
-
3. **Tagging a non-main commit.** The workflow's "Verify tag is on main".
|
|
179
|
-
4. **Tag ≠ `pyproject.toml` version, or `__version__` drift.** Two
|
|
180
|
-
separate workflow steps; Step 4 keeps them moving together.
|
|
181
|
-
5. **Forgetting to refresh `uv.lock`.** `uv sync --frozen` fails in the
|
|
182
|
-
build job; Step 4 bumps the lock to avoid the round-trip.
|
|
183
|
-
|
|
184
|
-
## What this skill does NOT do
|
|
185
|
-
|
|
186
|
-
- **Doesn't publish to PyPI directly.** The workflow does, via Trusted
|
|
187
|
-
Publishing (OIDC). There is no PyPI token anywhere in this repo, and
|
|
188
|
-
none should be added.
|
|
189
|
-
- **Doesn't create the GitHub Release directly.** The workflow's
|
|
190
|
-
`release-github` job does, from the notes file.
|
|
191
|
-
- **Doesn't write a CHANGELOG.md.** The convention is per-release files
|
|
192
|
-
under `docs/releases/`.
|
|
193
|
-
- **Doesn't yank.** PyPI versions are immutable; a broken release is
|
|
194
|
-
fixed by shipping the next version, not by re-uploading.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0002-session-collection-in-openaidr.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0005-detection-family-and-report-assembly.md
RENAMED
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0006-trust-boundary-and-detection-upload.md
RENAMED
|
File without changes
|
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0008-console-in-separate-demo-package.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0015-narrow-the-security-catalogue.md
RENAMED
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0016-stall-grouping-is-session-wide.md
RENAMED
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0017-a-declined-repeat-is-a-stall.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0020-openaca-consumption-boundary.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0024-the-upload-carries-observations.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0028-the-console-shows-what-it-placed.md
RENAMED
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/docs/adrs/0029-stage-three-returns-to-opt-in.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/prompts/__init__.py
RENAMED
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/prompts/v1/exclusions.md
RENAMED
|
File without changes
|
{stacktrace_cli-0.3.0 → stacktrace_cli-0.3.1}/src/stacktrace_cli/detector/prompts/v1/framing.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|