debugbrief 1.4.0__tar.gz → 1.4.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.
- {debugbrief-1.4.0 → debugbrief-1.4.1}/.github/ISSUE_TEMPLATE/bug_report.yml +1 -1
- {debugbrief-1.4.0 → debugbrief-1.4.1}/CHANGELOG.md +19 -5
- {debugbrief-1.4.0 → debugbrief-1.4.1}/CONTRIBUTING.md +41 -2
- debugbrief-1.4.1/PKG-INFO +214 -0
- debugbrief-1.4.1/README.md +174 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/SECURITY.md +46 -19
- {debugbrief-1.4.0 → debugbrief-1.4.1}/docs/COMMANDS.md +66 -17
- debugbrief-1.4.1/docs/maintainers.md +86 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/pyproject.toml +1 -1
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/docs.html +4 -4
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/__init__.py +1 -1
- debugbrief-1.4.1/src/debugbrief.egg-info/PKG-INFO +214 -0
- debugbrief-1.4.0/PKG-INFO +0 -174
- debugbrief-1.4.0/README.md +0 -134
- debugbrief-1.4.0/docs/maintainers.md +0 -69
- debugbrief-1.4.0/src/debugbrief.egg-info/PKG-INFO +0 -174
- {debugbrief-1.4.0 → debugbrief-1.4.1}/.github/CODEOWNERS +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/.github/workflows/ci.yml +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/.github/workflows/pages.yml +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/.github/workflows/release.yml +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/.github/workflows/site.yml +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/LICENSE +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/MANIFEST.in +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/docs/PLATFORM_VERIFICATION.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/docs/REAL_PROJECT_VERIFICATION.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/docs/SAFARI_ACCESSIBILITY_VERIFICATION.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/docs/TRANSFORMATION.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/docs/demo.gif +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/docs/demo.tape +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/examples/sample-handoff.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/examples/sample-incident.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/examples/sample-pr.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/scripts/check_site.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/scripts/generate_samples.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/scripts/serve_site.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/scripts/verify_wheel.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/setup.cfg +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/.nojekyll +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/data/sample-handoff.json +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/data/sample-handoff.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/data/sample-incident.json +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/data/sample-incident.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/data/sample-pr.json +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/data/sample-pr.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/explorer.html +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/explorer.js +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/favicon.svg +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/index.html +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/sample-handoff.html +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/sample-incident.html +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/sample-report.html +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/site.css +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/site.js +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/social-preview.png +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/site/stage.js +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/__main__.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/_process_guard.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/cli.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/command_runner.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/config.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/derive.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/doctor.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/filters.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/git_utils.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/markdown.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/models.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/paths.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/redaction.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/redo_safety.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/reporters/__init__.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/reporters/base.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/reporters/handoff.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/reporters/html.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/reporters/incident.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/reporters/pr.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/reports_index.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/session_manager.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/sessions_index.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief/utils.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief.egg-info/SOURCES.txt +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief.egg-info/dependency_links.txt +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief.egg-info/entry_points.txt +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief.egg-info/requires.txt +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/src/debugbrief.egg-info/top_level.txt +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/conftest.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/snapshots/failing_incident_report.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/snapshots/failing_pr_report.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/snapshots/handoff_report.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/snapshots/incident_report.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/snapshots/no_test_pr_report.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/snapshots/pr_report.md +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_autostart.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_cancel.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_ci_workflow.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_cli_ergonomics.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_command_lease.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_command_runner.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_config.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_derive.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_doctor.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_e2e_cli.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_filters.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_git_utils.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_html_report.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_json_report.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_last_open.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_list_show.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_markdown_safety.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_paths.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_process_guard.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_product_trust.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_redaction.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_reporters.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_run_passthrough.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_runner_robustness.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_session_lifecycle.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_site.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_snapshots.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_state_dir_safety.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_state_file_safety.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_state_integrity.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_utils.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_v12_features.py +0 -0
- {debugbrief-1.4.0 → debugbrief-1.4.1}/tests/test_version.py +0 -0
|
@@ -5,6 +5,20 @@ All notable changes to DebugBrief are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.4.1] - 2026-10-16
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Corrected the security policy's process-cleanup and local file-access descriptions.
|
|
13
|
+
- Made Git requirements and timestamp validation consistent across the README,
|
|
14
|
+
command reference and website docs. Added the missing recover reference and
|
|
15
|
+
clarified stdout formats and Explorer report imports.
|
|
16
|
+
- Rewrote the README for a shorter introduction and practical examples. Added
|
|
17
|
+
contributor browser checks and documented the actual repository protections
|
|
18
|
+
and token-free PyPI release workflow.
|
|
19
|
+
- Enabled the private vulnerability-reporting form referenced by the security policy.
|
|
20
|
+
- Command capture and report behavior are unchanged from 1.4.0.
|
|
21
|
+
|
|
8
22
|
## [1.4.0] - 2026-10-16
|
|
9
23
|
|
|
10
24
|
### Added
|
|
@@ -12,17 +26,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
12
26
|
- Reports now expose an explicit `verified` or `unverified` evidence state and
|
|
13
27
|
preserve the important caveat that DebugBrief does not infer a root cause.
|
|
14
28
|
- `end --format html` writes a self-contained browser report, and `--format all`
|
|
15
|
-
writes Markdown, JSON, and HTML together. HTML
|
|
16
|
-
selected
|
|
29
|
+
writes Markdown, JSON, and HTML together. HTML sections follow the
|
|
30
|
+
selected report mode and omit sections with no evidence.
|
|
17
31
|
- The static product site lives in `site/` and presents the real workflow,
|
|
18
32
|
report modes, trust boundary, and limitations. Fonts and optional homepage animation libraries load from a CDN.
|
|
19
33
|
- `end --format html --open` writes and opens a self-contained HTML brief, `open --html` opens
|
|
20
34
|
the newest HTML report, and `last --open` provides a one-step review path.
|
|
21
|
-
- `preview --format html|json` renders
|
|
35
|
+
- `preview --format html|json` renders JSON or HTML previews
|
|
22
36
|
without finalizing the active session.
|
|
23
37
|
- PR and HTML reports now expose the verification scope and the captured failure
|
|
24
38
|
excerpt, not only a pass/fail headline.
|
|
25
|
-
- The
|
|
39
|
+
- The product site includes the animated red-to-green field,
|
|
26
40
|
light and dark themes, report tabs, install copying and a keyboard-accessible
|
|
27
41
|
documentation section finder.
|
|
28
42
|
- The Evidence Explorer reads local JSON reports in memory, with command/output
|
|
@@ -54,7 +68,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
54
68
|
- Reports and JSON output now normalize untrusted legacy text without allowing
|
|
55
69
|
modified filenames or tainted command/error fields to break Markdown structure.
|
|
56
70
|
JSON scalar values remain plain, `last` handles malformed report files, and
|
|
57
|
-
absolute project
|
|
71
|
+
the absolute project-root field is a CLI-only opt-in.
|
|
58
72
|
- Invalid command end timestamps fall back to validated event or start timestamps,
|
|
59
73
|
malformed persisted leaves degrade to controlled values, and multiline notes
|
|
60
74
|
remain intact in storage while being escaped at report-rendering time.
|
|
@@ -12,7 +12,8 @@ DebugBrief intentionally does NOT:
|
|
|
12
12
|
- make network calls at runtime,
|
|
13
13
|
- capture shell history,
|
|
14
14
|
- run a background daemon,
|
|
15
|
-
-
|
|
15
|
+
- run a web server as part of command capture. Self-contained HTML reports and
|
|
16
|
+
the separate static website are supported,
|
|
16
17
|
- add new runtime dependencies. DebugBrief uses the standard library and native
|
|
17
18
|
`git`, plus one conditional dependency: the `tomli` TOML parser on Python 3.9
|
|
18
19
|
and 3.10, where the standard-library `tomllib` is not yet available.
|
|
@@ -45,6 +46,44 @@ deliberate):
|
|
|
45
46
|
DEBUGBRIEF_UPDATE_SNAPSHOTS=1 pytest tests/test_snapshots.py
|
|
46
47
|
```
|
|
47
48
|
|
|
49
|
+
Run the same lint and type checks as CI:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
python -m ruff check src tests
|
|
53
|
+
python -m mypy src/debugbrief
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Website changes
|
|
57
|
+
|
|
58
|
+
The site is plain HTML, CSS and JavaScript; there is no build step. From the
|
|
59
|
+
repository root, `python3 scripts/serve_site.py` starts an uncached preview at
|
|
60
|
+
`http://127.0.0.1:8765`. Stop it when you finish.
|
|
61
|
+
|
|
62
|
+
Check local links and the generated report fixtures:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
python scripts/check_site.py
|
|
66
|
+
python scripts/generate_samples.py --check
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
For browser tests, install Node.js and the pinned tools in `package-lock.json`:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm ci
|
|
73
|
+
npx playwright install --with-deps chromium
|
|
74
|
+
npm run test:site
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The browser suite checks imports, keyboard interaction, accessibility, reflow and
|
|
78
|
+
report privacy. Firefox and WebKit checks are available through
|
|
79
|
+
`npm run test:site:firefox` and `npm run test:site:webkit` after installing those
|
|
80
|
+
Playwright engines. Engine tests do not replace physical-device or screen-reader
|
|
81
|
+
checks.
|
|
82
|
+
|
|
83
|
+
When report rendering changes, regenerate the nine illustrative site fixtures
|
|
84
|
+
with `python scripts/generate_samples.py`, review the output, then run the check
|
|
85
|
+
again. Do not edit generated reports by hand or pass them off as real executions.
|
|
86
|
+
|
|
48
87
|
## Build the wheel
|
|
49
88
|
|
|
50
89
|
```bash
|
|
@@ -76,7 +115,7 @@ python -m debugbrief --help
|
|
|
76
115
|
runtime dependencies. If one is truly unavoidable, justify it clearly in the
|
|
77
116
|
pull request and README.
|
|
78
117
|
- Add or update tests for any behavior you change. Core logic must stay tested.
|
|
79
|
-
- Keep CLI output plain and
|
|
118
|
+
- Keep CLI output plain and readable.
|
|
80
119
|
- Be honest in code and docs. Do not fabricate report content, root causes,
|
|
81
120
|
test results, or verification, and do not claim a command was run unless it
|
|
82
121
|
was actually run. Do not include AI-generated fake summaries or fabricated
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: debugbrief
|
|
3
|
+
Version: 1.4.1
|
|
4
|
+
Summary: Records debugging commands, outcomes, notes, and Git changes, then generates evidence-backed reports for pull requests, handoffs, and incidents.
|
|
5
|
+
Author: Hari Krishna Kancharla
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/hari-kancharla/Debug-Brief
|
|
8
|
+
Project-URL: Repository, https://github.com/hari-kancharla/Debug-Brief
|
|
9
|
+
Project-URL: Documentation, https://github.com/hari-kancharla/Debug-Brief/tree/main/docs
|
|
10
|
+
Project-URL: Changelog, https://github.com/hari-kancharla/Debug-Brief/blob/main/CHANGELOG.md
|
|
11
|
+
Project-URL: Issues, https://github.com/hari-kancharla/Debug-Brief/issues
|
|
12
|
+
Project-URL: Security, https://github.com/hari-kancharla/Debug-Brief/security/policy
|
|
13
|
+
Keywords: cli,debugging,developer-tools,git,testing,pull-request,handoff,incident,report,terminal
|
|
14
|
+
Classifier: Development Status :: 4 - Beta
|
|
15
|
+
Classifier: Environment :: Console
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: Operating System :: POSIX
|
|
18
|
+
Classifier: Operating System :: MacOS
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
26
|
+
Classifier: Topic :: Software Development
|
|
27
|
+
Requires-Python: >=3.9
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Requires-Dist: tomli>=2.0.1; python_version < "3.11"
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
33
|
+
Requires-Dist: ruff>=0.6; extra == "dev"
|
|
34
|
+
Requires-Dist: mypy>=1.8; extra == "dev"
|
|
35
|
+
Requires-Dist: build>=1.0; extra == "dev"
|
|
36
|
+
Provides-Extra: release
|
|
37
|
+
Requires-Dist: build>=1.0; extra == "release"
|
|
38
|
+
Requires-Dist: twine>=5.0; extra == "release"
|
|
39
|
+
Dynamic: license-file
|
|
40
|
+
|
|
41
|
+
# DebugBrief
|
|
42
|
+
|
|
43
|
+
[](https://github.com/hari-kancharla/Debug-Brief/actions/workflows/ci.yml) [](https://pypi.org/project/debugbrief/)
|
|
44
|
+
|
|
45
|
+
Record commands and notes while you debug, then turn them into a report for a
|
|
46
|
+
pull request, a handoff, or an incident review.
|
|
47
|
+
|
|
48
|
+
DebugBrief keeps the actual commands, exit codes, output previews and Git changes.
|
|
49
|
+
It does not use AI or infer a root cause. You decide what to run and what to share.
|
|
50
|
+
|
|
51
|
+

|
|
52
|
+
|
|
53
|
+
## Install
|
|
54
|
+
|
|
55
|
+
Python 3.9 or newer on Linux or macOS. The project you debug can use any language.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pipx install debugbrief
|
|
59
|
+
# or
|
|
60
|
+
uv tool install debugbrief
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Upgrade an existing installation with `pipx upgrade debugbrief` or
|
|
64
|
+
`uv tool upgrade debugbrief`. Inside an activated Python environment, use
|
|
65
|
+
`python -m pip install --upgrade debugbrief`.
|
|
66
|
+
|
|
67
|
+
The HTML and Explorer workflows below require DebugBrief 1.4.0 or newer.
|
|
68
|
+
Check your installed version with `debugbrief --version`. Install your project's
|
|
69
|
+
test tools and dependencies separately; DebugBrief does not install them for you.
|
|
70
|
+
|
|
71
|
+
## Quickstart
|
|
72
|
+
|
|
73
|
+
Run this from your project, replacing the pytest command with your usual check:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
debugbrief run -- python -m pytest -q
|
|
77
|
+
# If it fails, edit the files and run the same command again:
|
|
78
|
+
debugbrief redo
|
|
79
|
+
debugbrief end --format html --open
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The first `run` starts a session automatically. A title and notes are optional:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
debugbrief start "Handle an expired cache entry"
|
|
86
|
+
debugbrief note "Expired entries still reach the read path."
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Use `start` before your first captured command if you want to set the title.
|
|
90
|
+
Put DebugBrief flags before `--`; everything after it is the command to capture.
|
|
91
|
+
An optional alias saves some typing:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
alias db="debugbrief run --"
|
|
95
|
+
db pytest -q
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Reports
|
|
99
|
+
|
|
100
|
+
| Mode | What it contains |
|
|
101
|
+
| --- | --- |
|
|
102
|
+
| `pr` | Reproduce and verify commands, changed files, failed attempts and a red-to-green window when available. |
|
|
103
|
+
| `handoff` | Current status, notes, command history and next steps drawn from your notes. |
|
|
104
|
+
| `incident` | A timeline, the recorded error, current outcome and follow-up notes. |
|
|
105
|
+
|
|
106
|
+
`end` defaults to a compact PR report in Markdown. Use `--detail full` for the
|
|
107
|
+
complete Markdown record. JSON and HTML always retain the complete evidence.
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
debugbrief end --format all # Markdown, JSON and HTML
|
|
111
|
+
debugbrief open --html # open the newest HTML report
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
The other formats are `md`, `json`, `both` (Markdown and JSON), and `html`.
|
|
115
|
+
Use `preview --format html` or `preview --format json` to inspect an active
|
|
116
|
+
session without ending it.
|
|
117
|
+
|
|
118
|
+
Current illustrative reports, generated by the report code:
|
|
119
|
+
[PR](https://github.com/hari-kancharla/Debug-Brief/blob/main/site/data/sample-pr.md),
|
|
120
|
+
[handoff](https://github.com/hari-kancharla/Debug-Brief/blob/main/site/data/sample-handoff.md),
|
|
121
|
+
[incident](https://github.com/hari-kancharla/Debug-Brief/blob/main/site/data/sample-incident.md).
|
|
122
|
+
The incident example deliberately retains a later failure and incomplete capture.
|
|
123
|
+
|
|
124
|
+
Review a report before sharing it. To post a reviewed Markdown brief with the
|
|
125
|
+
optional GitHub CLI:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
debugbrief end --stdout | gh pr comment --body-file -
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## What the evidence means
|
|
132
|
+
|
|
133
|
+
- Verification needs an eligible passing check, valid recorded timestamps for all
|
|
134
|
+
verification candidates, and no currently failing check. A previous failure is
|
|
135
|
+
not required. Help, version and collection/list commands do not count, even
|
|
136
|
+
with `--verify`. Use that flag to declare a custom check.
|
|
137
|
+
- A red-to-green window requires Git and the same command failing and then passing
|
|
138
|
+
in the same directory. Files changed during that window are a correlation,
|
|
139
|
+
not a proven cause. A later failure keeps the report unverified.
|
|
140
|
+
- `redo` runs the stored command in its recorded directory using the current
|
|
141
|
+
files, environment and dependencies. It does not recreate an old environment.
|
|
142
|
+
`redo --dry-run` shows what would run; potentially destructive reruns ask for
|
|
143
|
+
confirmation. `--yes` skips that prompt.
|
|
144
|
+
- Reports retain project-relative command directories. Missing directory data in
|
|
145
|
+
older reports stays unknown. The project-root field uses the repository name
|
|
146
|
+
by default; absolute paths inside commands, notes and output can still appear.
|
|
147
|
+
- Stored text goes through best-effort secret redaction. Live command output is
|
|
148
|
+
shown as the command prints it. Redaction can miss secrets, and `--no-redact`
|
|
149
|
+
disables it for a captured command. Review reports before sharing.
|
|
150
|
+
|
|
151
|
+
Verification covers the recorded checks, not the whole issue. Full capture and
|
|
152
|
+
privacy details are in [SECURITY.md](https://github.com/hari-kancharla/Debug-Brief/blob/main/SECURITY.md).
|
|
153
|
+
|
|
154
|
+
## Commands
|
|
155
|
+
|
|
156
|
+
| Command | Purpose |
|
|
157
|
+
| --- | --- |
|
|
158
|
+
| `init` | Set up local state and show the workflow. |
|
|
159
|
+
| `start "<title>"` | Start a named session. |
|
|
160
|
+
| `note <text>` | Record an observation. |
|
|
161
|
+
| `run -- <command>` | Run and capture a command. |
|
|
162
|
+
| `redo` | Run the last captured command again. |
|
|
163
|
+
| `preview` | Print a report without ending the session. |
|
|
164
|
+
| `end` | Finish the session and write reports. |
|
|
165
|
+
| `cancel` | Abandon the session, keeping its local record. |
|
|
166
|
+
| `status` | Inspect the active session and command. |
|
|
167
|
+
| `doctor` | Check the project and local state. |
|
|
168
|
+
| `recover` | Repair stale state after an interruption. |
|
|
169
|
+
| `last` / `open` | Find or open a saved report. |
|
|
170
|
+
| `list` / `show <id>` | Inspect earlier sessions. |
|
|
171
|
+
|
|
172
|
+
See [the command reference](https://github.com/hari-kancharla/Debug-Brief/blob/main/docs/COMMANDS.md)
|
|
173
|
+
for flags, configuration, recognized runners and recovery behavior.
|
|
174
|
+
|
|
175
|
+
## Dependencies and limits
|
|
176
|
+
|
|
177
|
+
The CLI uses the Python standard library and native Git. Python 3.9 and 3.10 also
|
|
178
|
+
need `tomli`, installed automatically to read optional TOML configuration.
|
|
179
|
+
DebugBrief itself sends no telemetry and makes no network requests. Commands you
|
|
180
|
+
run can still use the network.
|
|
181
|
+
|
|
182
|
+
Linux and macOS are tested in CI on Python 3.9–3.14. Native Windows and PowerShell
|
|
183
|
+
are not supported. Capture is explicit through `run`; it does not read shell
|
|
184
|
+
history or meaningfully capture full-screen programs such as vim or htop. Output
|
|
185
|
+
previews are bounded, so reports are not complete terminal transcripts.
|
|
186
|
+
|
|
187
|
+
Ordinary background descendants are stopped during command cleanup. Deliberately
|
|
188
|
+
detached processes can survive; run long-lived servers outside DebugBrief.
|
|
189
|
+
Outside a Git repository, command and note capture still work, but Git state,
|
|
190
|
+
changed-file correlation and red-to-green windows are unavailable.
|
|
191
|
+
|
|
192
|
+
## Website and development
|
|
193
|
+
|
|
194
|
+
The static site includes a command reference and a JSON Evidence Explorer.
|
|
195
|
+
Imported reports stay in memory in the browser; they are never uploaded or stored.
|
|
196
|
+
An explicitly chosen color theme is saved. Fonts and optional homepage animations
|
|
197
|
+
load from a CDN. Generated HTML reports are self-contained and need no CDN.
|
|
198
|
+
|
|
199
|
+
From a source checkout, preview the site with `python3 scripts/serve_site.py`.
|
|
200
|
+
The site is included in the source archive, not the installed wheel.
|
|
201
|
+
|
|
202
|
+
For Python development:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
python -m pip install -e ".[dev]"
|
|
206
|
+
python -m pytest
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
[CONTRIBUTING.md](https://github.com/hari-kancharla/Debug-Brief/blob/main/CONTRIBUTING.md)
|
|
210
|
+
covers setup, linting, types, browser checks and builds.
|
|
211
|
+
|
|
212
|
+
## License
|
|
213
|
+
|
|
214
|
+
MIT. See [LICENSE](https://github.com/hari-kancharla/Debug-Brief/blob/main/LICENSE).
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# DebugBrief
|
|
2
|
+
|
|
3
|
+
[](https://github.com/hari-kancharla/Debug-Brief/actions/workflows/ci.yml) [](https://pypi.org/project/debugbrief/)
|
|
4
|
+
|
|
5
|
+
Record commands and notes while you debug, then turn them into a report for a
|
|
6
|
+
pull request, a handoff, or an incident review.
|
|
7
|
+
|
|
8
|
+
DebugBrief keeps the actual commands, exit codes, output previews and Git changes.
|
|
9
|
+
It does not use AI or infer a root cause. You decide what to run and what to share.
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
Python 3.9 or newer on Linux or macOS. The project you debug can use any language.
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pipx install debugbrief
|
|
19
|
+
# or
|
|
20
|
+
uv tool install debugbrief
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Upgrade an existing installation with `pipx upgrade debugbrief` or
|
|
24
|
+
`uv tool upgrade debugbrief`. Inside an activated Python environment, use
|
|
25
|
+
`python -m pip install --upgrade debugbrief`.
|
|
26
|
+
|
|
27
|
+
The HTML and Explorer workflows below require DebugBrief 1.4.0 or newer.
|
|
28
|
+
Check your installed version with `debugbrief --version`. Install your project's
|
|
29
|
+
test tools and dependencies separately; DebugBrief does not install them for you.
|
|
30
|
+
|
|
31
|
+
## Quickstart
|
|
32
|
+
|
|
33
|
+
Run this from your project, replacing the pytest command with your usual check:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
debugbrief run -- python -m pytest -q
|
|
37
|
+
# If it fails, edit the files and run the same command again:
|
|
38
|
+
debugbrief redo
|
|
39
|
+
debugbrief end --format html --open
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The first `run` starts a session automatically. A title and notes are optional:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
debugbrief start "Handle an expired cache entry"
|
|
46
|
+
debugbrief note "Expired entries still reach the read path."
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Use `start` before your first captured command if you want to set the title.
|
|
50
|
+
Put DebugBrief flags before `--`; everything after it is the command to capture.
|
|
51
|
+
An optional alias saves some typing:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
alias db="debugbrief run --"
|
|
55
|
+
db pytest -q
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Reports
|
|
59
|
+
|
|
60
|
+
| Mode | What it contains |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `pr` | Reproduce and verify commands, changed files, failed attempts and a red-to-green window when available. |
|
|
63
|
+
| `handoff` | Current status, notes, command history and next steps drawn from your notes. |
|
|
64
|
+
| `incident` | A timeline, the recorded error, current outcome and follow-up notes. |
|
|
65
|
+
|
|
66
|
+
`end` defaults to a compact PR report in Markdown. Use `--detail full` for the
|
|
67
|
+
complete Markdown record. JSON and HTML always retain the complete evidence.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
debugbrief end --format all # Markdown, JSON and HTML
|
|
71
|
+
debugbrief open --html # open the newest HTML report
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The other formats are `md`, `json`, `both` (Markdown and JSON), and `html`.
|
|
75
|
+
Use `preview --format html` or `preview --format json` to inspect an active
|
|
76
|
+
session without ending it.
|
|
77
|
+
|
|
78
|
+
Current illustrative reports, generated by the report code:
|
|
79
|
+
[PR](https://github.com/hari-kancharla/Debug-Brief/blob/main/site/data/sample-pr.md),
|
|
80
|
+
[handoff](https://github.com/hari-kancharla/Debug-Brief/blob/main/site/data/sample-handoff.md),
|
|
81
|
+
[incident](https://github.com/hari-kancharla/Debug-Brief/blob/main/site/data/sample-incident.md).
|
|
82
|
+
The incident example deliberately retains a later failure and incomplete capture.
|
|
83
|
+
|
|
84
|
+
Review a report before sharing it. To post a reviewed Markdown brief with the
|
|
85
|
+
optional GitHub CLI:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
debugbrief end --stdout | gh pr comment --body-file -
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## What the evidence means
|
|
92
|
+
|
|
93
|
+
- Verification needs an eligible passing check, valid recorded timestamps for all
|
|
94
|
+
verification candidates, and no currently failing check. A previous failure is
|
|
95
|
+
not required. Help, version and collection/list commands do not count, even
|
|
96
|
+
with `--verify`. Use that flag to declare a custom check.
|
|
97
|
+
- A red-to-green window requires Git and the same command failing and then passing
|
|
98
|
+
in the same directory. Files changed during that window are a correlation,
|
|
99
|
+
not a proven cause. A later failure keeps the report unverified.
|
|
100
|
+
- `redo` runs the stored command in its recorded directory using the current
|
|
101
|
+
files, environment and dependencies. It does not recreate an old environment.
|
|
102
|
+
`redo --dry-run` shows what would run; potentially destructive reruns ask for
|
|
103
|
+
confirmation. `--yes` skips that prompt.
|
|
104
|
+
- Reports retain project-relative command directories. Missing directory data in
|
|
105
|
+
older reports stays unknown. The project-root field uses the repository name
|
|
106
|
+
by default; absolute paths inside commands, notes and output can still appear.
|
|
107
|
+
- Stored text goes through best-effort secret redaction. Live command output is
|
|
108
|
+
shown as the command prints it. Redaction can miss secrets, and `--no-redact`
|
|
109
|
+
disables it for a captured command. Review reports before sharing.
|
|
110
|
+
|
|
111
|
+
Verification covers the recorded checks, not the whole issue. Full capture and
|
|
112
|
+
privacy details are in [SECURITY.md](https://github.com/hari-kancharla/Debug-Brief/blob/main/SECURITY.md).
|
|
113
|
+
|
|
114
|
+
## Commands
|
|
115
|
+
|
|
116
|
+
| Command | Purpose |
|
|
117
|
+
| --- | --- |
|
|
118
|
+
| `init` | Set up local state and show the workflow. |
|
|
119
|
+
| `start "<title>"` | Start a named session. |
|
|
120
|
+
| `note <text>` | Record an observation. |
|
|
121
|
+
| `run -- <command>` | Run and capture a command. |
|
|
122
|
+
| `redo` | Run the last captured command again. |
|
|
123
|
+
| `preview` | Print a report without ending the session. |
|
|
124
|
+
| `end` | Finish the session and write reports. |
|
|
125
|
+
| `cancel` | Abandon the session, keeping its local record. |
|
|
126
|
+
| `status` | Inspect the active session and command. |
|
|
127
|
+
| `doctor` | Check the project and local state. |
|
|
128
|
+
| `recover` | Repair stale state after an interruption. |
|
|
129
|
+
| `last` / `open` | Find or open a saved report. |
|
|
130
|
+
| `list` / `show <id>` | Inspect earlier sessions. |
|
|
131
|
+
|
|
132
|
+
See [the command reference](https://github.com/hari-kancharla/Debug-Brief/blob/main/docs/COMMANDS.md)
|
|
133
|
+
for flags, configuration, recognized runners and recovery behavior.
|
|
134
|
+
|
|
135
|
+
## Dependencies and limits
|
|
136
|
+
|
|
137
|
+
The CLI uses the Python standard library and native Git. Python 3.9 and 3.10 also
|
|
138
|
+
need `tomli`, installed automatically to read optional TOML configuration.
|
|
139
|
+
DebugBrief itself sends no telemetry and makes no network requests. Commands you
|
|
140
|
+
run can still use the network.
|
|
141
|
+
|
|
142
|
+
Linux and macOS are tested in CI on Python 3.9–3.14. Native Windows and PowerShell
|
|
143
|
+
are not supported. Capture is explicit through `run`; it does not read shell
|
|
144
|
+
history or meaningfully capture full-screen programs such as vim or htop. Output
|
|
145
|
+
previews are bounded, so reports are not complete terminal transcripts.
|
|
146
|
+
|
|
147
|
+
Ordinary background descendants are stopped during command cleanup. Deliberately
|
|
148
|
+
detached processes can survive; run long-lived servers outside DebugBrief.
|
|
149
|
+
Outside a Git repository, command and note capture still work, but Git state,
|
|
150
|
+
changed-file correlation and red-to-green windows are unavailable.
|
|
151
|
+
|
|
152
|
+
## Website and development
|
|
153
|
+
|
|
154
|
+
The static site includes a command reference and a JSON Evidence Explorer.
|
|
155
|
+
Imported reports stay in memory in the browser; they are never uploaded or stored.
|
|
156
|
+
An explicitly chosen color theme is saved. Fonts and optional homepage animations
|
|
157
|
+
load from a CDN. Generated HTML reports are self-contained and need no CDN.
|
|
158
|
+
|
|
159
|
+
From a source checkout, preview the site with `python3 scripts/serve_site.py`.
|
|
160
|
+
The site is included in the source archive, not the installed wheel.
|
|
161
|
+
|
|
162
|
+
For Python development:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
python -m pip install -e ".[dev]"
|
|
166
|
+
python -m pytest
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
[CONTRIBUTING.md](https://github.com/hari-kancharla/Debug-Brief/blob/main/CONTRIBUTING.md)
|
|
170
|
+
covers setup, linting, types, browser checks and builds.
|
|
171
|
+
|
|
172
|
+
## License
|
|
173
|
+
|
|
174
|
+
MIT. See [LICENSE](https://github.com/hari-kancharla/Debug-Brief/blob/main/LICENSE).
|
|
@@ -6,9 +6,10 @@ and makes no network requests of its own.
|
|
|
6
6
|
## What data leaves your machine
|
|
7
7
|
|
|
8
8
|
DebugBrief itself sends nothing. It has no network code: no telemetry, no
|
|
9
|
-
accounts, no cloud sync, no update checks. It
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
accounts, no cloud sync, no update checks. It stores session state and reports under your project's `.debugbrief/`
|
|
10
|
+
directory. It also reads project configuration, Git metadata and changed-file
|
|
11
|
+
contents for comparison, and can add a local ignore entry in `.git/info/exclude`.
|
|
12
|
+
It runs local Git and the commands you ask it to capture.
|
|
12
13
|
|
|
13
14
|
Commands you run through DebugBrief keep their normal behavior. A command can
|
|
14
15
|
access the network exactly as it would if you ran it directly, so what such a
|
|
@@ -36,8 +37,11 @@ hazards rather than a remote attacker:
|
|
|
36
37
|
that do not support Unix permissions.
|
|
37
38
|
- **Crash safety.** Session and report writes are atomic (write to a temp file,
|
|
38
39
|
then rename). A running command holds an OS lock for its whole lifetime; if the
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
recorder dies, an independent supervisor stops the owned command process
|
|
41
|
+
group, including after SIGKILL. Cleanup releases the lock after its holders
|
|
42
|
+
exit. `recover` preserves saved events and reports the lost result as unknown;
|
|
43
|
+
it never turns an incomplete capture into a pass. Recovery can still report a
|
|
44
|
+
held lock during cleanup, and deliberately detached processes can outlive it.
|
|
41
45
|
- **Repository-supplied state.** `.debugbrief/` lives inside the project, so a
|
|
42
46
|
cloned repository could ship a pre-seeded session. DebugBrief does not trust
|
|
43
47
|
that state to drive execution: `debugbrief redo` refuses to re-run a command
|
|
@@ -55,16 +59,38 @@ hazards rather than a remote attacker:
|
|
|
55
59
|
It does **not** defend against a local attacker who already has write access to
|
|
56
60
|
your `.debugbrief/` directory or who can modify the commands you run.
|
|
57
61
|
|
|
58
|
-
##
|
|
62
|
+
## Foreground commands and cleanup
|
|
59
63
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
Capture is intended for commands that finish, not for managing long-lived servers.
|
|
65
|
+
On normal completion, timeout, interruption or recorder death, the supervisor
|
|
66
|
+
stops ordinary descendants in its process group. It escalates from SIGTERM to
|
|
67
|
+
SIGKILL when needed. A program that deliberately creates another session or
|
|
68
|
+
process group can survive. If it also closes its captured streams, its continued
|
|
69
|
+
execution may be undetectable to the recorder.
|
|
70
|
+
|
|
71
|
+
A surviving process can retain the command lock. `status` and `recover` report
|
|
72
|
+
that the lock is still held; recovery will not clear it to pretend the project
|
|
73
|
+
is idle. After cleanup finishes, retry recovery. Saved events remain available,
|
|
74
|
+
but a crash can lose the command result that had not yet been recorded.
|
|
75
|
+
|
|
76
|
+
## Reports and the browser Explorer
|
|
77
|
+
|
|
78
|
+
The project-root field shows the repository name by default. The
|
|
79
|
+
`--include-full-path` flag exposes the full root intentionally. This setting does
|
|
80
|
+
not remove absolute paths inside command text, output or notes.
|
|
81
|
+
|
|
82
|
+
Generated HTML reports escape recorded text, include their own styles and use a
|
|
83
|
+
restrictive Content Security Policy. They contain no executable application
|
|
84
|
+
scripts or external assets.
|
|
85
|
+
|
|
86
|
+
The static website is separate from the CLI. It loads fonts and optional homepage
|
|
87
|
+
animation libraries from a CDN. Its Explorer reads one JSON report in memory,
|
|
88
|
+
without uploading it or saving report contents to browser storage. Only an
|
|
89
|
+
explicitly chosen theme is saved. File size, structure and list lengths are
|
|
90
|
+
bounded; the current limits include 5 MiB per file and 2,000 entries per list.
|
|
91
|
+
Imported text is rendered as text, not HTML or executable commands. A fixed
|
|
92
|
+
allowlist supplies the bundled examples. The Explorer displays the report's
|
|
93
|
+
claims; it does not authenticate or rerun the recorded checks.
|
|
68
94
|
|
|
69
95
|
## Redaction is best effort
|
|
70
96
|
|
|
@@ -73,7 +99,9 @@ command text, captured output, notes, titles, warnings, the session pointer, and
|
|
|
73
99
|
the lease: sensitive `name=value` and quoted/JSON `"name": "value"` pairs,
|
|
74
100
|
`Authorization`/`Bearer` headers, OpenAI/AWS/GitHub-style keys,
|
|
75
101
|
connection-string passwords, and PEM private-key blocks, each replaced with
|
|
76
|
-
`[redacted]`. Pass `--no-redact` to store
|
|
102
|
+
`[redacted]`. Pass `--no-redact` to store raw command text and captured output
|
|
103
|
+
for that command. Redaction applies to stored text, not to the command's live
|
|
104
|
+
terminal output.
|
|
77
105
|
|
|
78
106
|
This is **best effort and conservative; it is not a guarantee.** It recognizes
|
|
79
107
|
known shapes and will miss secrets that do not match one. Known limitations
|
|
@@ -91,7 +119,6 @@ Native Windows and PowerShell are not supported.
|
|
|
91
119
|
## Reporting a vulnerability
|
|
92
120
|
|
|
93
121
|
Please report security issues privately rather than opening a public issue. Use
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
a fix timeline.
|
|
122
|
+
the repository's [private vulnerability report form](https://github.com/hari-kancharla/Debug-Brief/security/advisories/new).
|
|
123
|
+
Include the affected version, steps to reproduce and the impact. Remove unrelated
|
|
124
|
+
secrets and personal data from logs. The maintainer can follow up privately.
|