Repository navigation
0.5.1
The Phase 1.8 §2 self-dogfood cut. Every fix in this release came from
a single round of running getdebug against a real 1,217-file Python
repo (crewAIInc/crewAI) — plus a full MCP round-trip against the
debug org itself. Two demo killers, fifteen smaller cuts, zero new
features.
Top-line numbers
- Python false-positive rate cut roughly 70% on prompt-injection
- unbounded-stream + secret-placeholder shapes. 14 of 22 HIGH FPs
on crewAI traced back tomessageandqueryin the
prompt-injection identifier set; both removed.
- unbounded-stream + secret-placeholder shapes. 14 of 22 HIGH FPs
--fail-on=verified-*is now actually a precision lane. Before
this cut,verified-highand plainhighproduced the same exit
code on every real repo — the verified suffix only skipped
status=invalidsecrets. It's now an inclusion gate: a finding
counts only with affirmative evidence (provider 2xx for secrets).- MCP
list_findings → get_findingworks end-to-end. The
get_findingtool was hitting an API route that didn't exist — so
any AI agent that listed findings could never drill into one. The
route now exists and accepts both the legacy id form and the new
stable form. Live on prod.
Demo killers (P0)
--fail-on=verified-*is an inclusion gate, not a subtraction.- TTY output surfaces
[LIVE]/[REJECTED]/[UNVERIFIED]badges
per row + a verification summary line. Pre-fix, verifier output
was silently dropped on the way to the renderer. - Python prompt-injection:
message+queryremoved from the
identifier set.self.message = f"…"in custom Exception
subclasses andquery = "SELECT …" + …SQL builders no longer
fire.
Detector improvements
- New detectors for xAI, GitLab, and npm access tokens —
verifiers shipped in 0.5.0 but no detector regex existed. - Anthropic (
sk-ant-…) now correctly classifies as Anthropic, not
OpenAI. The scan loop tracks per-line consumed ranges so a token
can produce only one finding. - Placeholder values prefixed
fake-/mock_/stub-suppressed
in.env-style files. - PEM-block detector respects Python docstrings + doctest lines.
Narrow — realsk-…shapes inside docstrings still fire. streamTruePyRerequires kwarg context — kills FPs on
self.stream = Trueattribute assignments.
CLI ergonomics
--local-llmfiles are ranked by security relevance before
the file cap. Pre-fix, the default 50-file cap burned on
__init__.py+ constants before reaching auth/sql handlers.- New per-file progress meter
[N/M] path · elapsed Ns · ETA Ns
during--local-llm. - New
--local-llm-per-file-timeout(default 3 min) — pre-fix
ceiling was the localllm HTTP client's 10 min, so one stuck file
could pin a whole run. getdebug fix . --local-onlyaccepts.as the workdir alias
(every other command did already).getdebug undodeletes the.getdebug-backup-<TS>/directory by
default. Use--keep-backupto retain it.getdebug loginno longer sticky-caches localhost API URLs
across sessions.- The 20 MB truncation hint now names the file the walk stopped at
- suggests concrete next steps.
MCP
GET /v1/findings/:idexists.mcp__getdebug__get_findingworks.- Finding ids on the wire are now
finding_<projectId>_<contentHash>
— stable across rescans. Legacy ids still resolve on the input
side for backwards compat. MCP server source unchanged; same npm
artifact, but it gets stable ids back from the API now.
Docs
/docsLocal-mode section now explicitly walks the chat-model
pull (ollama pull qwen2.5-coder:7b) needed for--local-llm,
not just the embedding model used byindex --local.- Documents the per-model wall-clock tradeoff: deepseek-r1:7b ~75s
per file needs--local-llm-max-files=10, not the default 50.
Upgrade
npm install -g @getdebug/cli@0.5.1
# or for MCP:
npm install -g @getdebug/mcp@0.5.1No breaking changes. CI gates using --fail-on=verified-high will see
sharply lower fail counts — this is the intended behavior; use plain
--fail-on=high if you want the prior gate.
Full changelog: cli/CHANGELOG.md