feat(policy): friction telemetry + gated tuning - doberman tune (closes #243)
Your AI's guard dog to stop it from going rogue.
Brought to you by:
doberman
Originally created by: fu351
doberman tune) is pure aggregation and never applies anything by itself. doberman tune --accept <id> routes the proposal through the same possession-factor-gated weaken chokepoint as every other policy loosening (apply_standing_elevation, a structural sibling of apply_preferences_change), and only ever covers role_out_of_scope AUTHs — every security-relevant reason code is excluded by construction, not a per-code carve-out.read_decisions/record_decision gain entity_id and session_id columns so the report can group by session.tune is added to the control-plane subcommand block (shelling it out is the same tampering shape as revoke/2fa/taint) and to the CLI help-target matrix.main (post [#402]); resolved conflicts in README.md/CLI.md/CHANGELOG.md by keeping both sides' content.Closes [#243].
ruff check . / ruff format --check . — cleanlint-imports — all 3 contracts keptpython scripts/check_markdown_links.py — 46 files, no broken linkstune command wasn't registered in test_cli_help.py's CLI_HELP_TARGETS allowlist, which failed test_cli_help_targets_cover_every_eager_command_and_group. Fixed.pytest -n auto --cov run locally without getting OOM-killed partway through (confirmed via two separate attempts); relying on CI for the full-suite gate🤖 Generated with Claude Code
Ticket changed by: fu351