Originally created by: blackcoderx
doberman demo --quietAdds a --quiet / -q flag to doberman demo, mirroring scan --quiet. When
set, it suppresses the opening banner, the per-scenario narration line, and the
closing "Run doberman dash" hint — keeping only the summary (silent on a full
match, loud with details on a mismatch) and the exit code. This lets demo run
as a CI smoke test ("is the engine alive") without polluting build logs.
Display-only: the scenarios and the engine decision path are untouched.
tests/unit/test_cli_demo_quiet.py — demo --fast --quiet produces fardemo --fast (banner/narration/hint gone), exitWritten with Claude Code assistance.
Closes [#441]
Tickets: #441
Tickets: #452
Tickets: #458
Tickets: #460
Tickets: #483
Originally posted by: blackcoderx
@fu351 — flagging this for you.
CI: 5/6 checks are green (
secret-scan,package-smoke-test,test (ubuntu-latest, 3.12),test (ubuntu-latest, 3.13),test (windows-latest, 3.12)). Onlytest (ubuntu-latest, 3.11)fails, and it's unrelated to this PR's diff.Root cause: test collection dies with the same error in ~230 unrelated modules:
traced through
doberman/subjective/baseline.py→river→river/stream/iter_csv.py:21:csv.DictReaderisn't subscriptable at runtime on Python 3.11 — only on newer Python, which is exactly why 3.12/3.13/Windows-3.12 all passed and only the 3.11 leg died.It's a fresh regression, not a pre-existing bug in this repo's code: the failing job's pip resolve pulled
river==0.26.0(pyproject.tomlhas an unpinned floor,river>=0.21). The previously-resolvedriver==0.25.0has the unsubscripted form (class DictReader(csv.DictReader):, no["FeatureName"]), so0.26.0is the version that introduced the runtime subscript.main's last CI run this morning was green only because its pip cache still held the older wheel — the next cache miss onmainwill hit this too, independent of any change here.Confirmed this reproduces against a clean
maincheckout as well, before any of this PR's changes existed, so it's not something introduced by this slice. Leaving the call on whether/how to pinriverto you rather than bundling an unrelated dependency fix into this PR.Originally posted by: fu351
Thanks @blackcoderx, and thank you for the river diagnosis, tracing it to the 0.25→0.26
DictReadersubscript and reproducing against a clean main saved me the whole investigation. The pin is merged as [#452]. Two small things on the PR itself: the one behavior this flag exists for, a mismatch still failing loudly with a nonzero exit under--quiet, has no direct test, andtest_demo.pyalready has the mismatch-forcing pattern, so one test combining the two closes that. And docs/CLI.md's flag table borrows scan's no-output wording, butdemo --quietkeeps the summary line, your CHANGELOG entry says it right and the table doesn't. Don't worry about the merge conflict the pin created, that one's mine, I'll land the branch from here once the test is in.Related
Tickets:
#452Originally posted by: blackcoderx
@fu351 Both addressed, pushed as cbf31be:
test_mismatch_still_reported_loudly_under_quiettotest_cli_demo_quiet.py, combiningtest_demo.py's mismatch-forcing pattern with--quiet— asserts nonzero exit,MISMATCH, and the actual/expected detail still print under--quiet.docs/CLI.md's flag table: it no longer claimsdemo --quietis fully silent likescan --quiet— now says it keeps the banner/narration/hint suppressed but the summary line/table still prints, matching what the CHANGELOG entry already said.Left the
CHANGELOG.mdconflict from [#452] alone as you asked — branch is otherwise a straight fast-forward push, no rebase.Related
Tickets:
#452Ticket changed by: fu351
Ticket changed by: fu351
Ticket changed by: fu351
Originally posted by: fu351
Merged, thanks @blackcoderx!
test_mismatch_still_reported_loudly_under_quietis the test this flag needed, I moved the summary print under the quiet guard locally and it went red straight away. I landed it through a landing branch in our repo rather than pushing to your fork: docs/CLI.md had been restructured on main since you branched, so I put--quietinto the newdemorow and the flags sentence, and I tightened the--helpstring, which was copied fromscanand said it silences everything. Nothing else touched. If you want the next parity cell, [#407] (level-4) proves approvals stay single-use and action-bound on OpenClaw, one step up from the three you've already landed.Related
Tickets: #407