Originally created by: floze-the-genius
Pull Request
Slice
- Repo: doberman-core
- Feature / Slice: [#344] — one CLI message-severity vocabulary
- Plan reference: issue [#344]
What this PR does
- Prefixes all eight audited fatal CLI diagnostics with
error: while preserving their existing exit codes and stdout/stderr channels.
- Extends focused coverage for denial, unknown elevation, and missing optional-dependency paths.
- Documents the
error: / warning: / note: vocabulary in the README, CLI reference, and changelog.
Fixes [#344].
Tests added (run in CI)
- Focused changed-path suite: 25 passed.
- Full suite: 2,571 passed, 5 skipped, 1 failed locally; the sole failure is the unchanged real-plugin discovery harness, which reproduces on current
main with the same ModuleNotFoundError: No module named doberman.
- Ruff check and format check.
- Markdown link check: 25 files.
- Import contracts: 2 kept, 0 broken.
- Parity generator check and
git diff --check.
- Built sdist and wheel; verified the clean wheel environment reports version 0.17.1 and includes bundled roles without the enterprise package.
Public-release safety (doberman-core only)
- [x] Contains nothing from the not-allowed list: no enterprise/hosted code, no proprietary detection, no customer data, no secrets, no commercial-license code
- [x] Core still builds/tests/runs with NO enterprise package installed
Security checklist
- [x] Fails closed on error / uncertainty
- [x] No secret, full file, or unredacted prompt logged or committed
- [x] Any guardrail/learning change is raise-only (N/A: message prefixes only)
- [x] Every BLOCK/AUTH carries reason codes + a human explanation (N/A: no decision-path change)
- [x] doberman-core does not import doberman_enterprise
Edge cases covered / Deviations from plan / Risks introduced
- Missing
textual and dashboard dependencies retain their original install hints and exit 1, now with the same fatal prefix.
- No machine-readable output, command behavior, or exit code changes.
AI assistance
This contribution was prepared with Codex assistance.
Originally posted by: fu351
@floze-the-genius, welcome to Doberman. You turned the CLI's mixed failure wording into one clear vocabulary while preserving exit codes, output channels, and machine-readable schemas. Extending the focused tests and documenting the convention in both the README and CLI reference made this a complete change rather than a string-only sweep.
I added one mechanical fix on your branch before merge. The original audit list missed
doctor's non-zero failure summary, so it still printed a bare "critical check(s) not healthy" line and contradicted the new documented rule. Commit5362289adds theerror:prefix without moving the line from stdout and locks it intest_cli_doctor.py.This is your first merged contribution here. If the project is useful to you, a star would mean a lot. Come say hello in the Discord too: https://discord.gg/Sfy5XGNqty
For a next step, [#330] (
level-3) is a good fit. It is another bounded, mutation-checked test task, this time proving the gitignored-data deletion gate through the MCP proxy. Thanks for the careful first contribution.Related
Tickets:
#330Ticket changed by: fu351
Originally posted by: fu351
@floze-the-genius Consistent severity prefixes are the kind of fix nobody notices because everything simply reads right now. Thanks for that.
Quick community roll-call: are you in the Doberman Discord? If yes, drop your handle here (or DM me there) so I can match the GitHub side of your work to your Discord name. If not, you're warmly invited: https://discord.gg/Sfy5XGNqty