Originally created by: blackcoderx
Adds the MCP-proxy sibling of tests/unit/test_rule_commands.py::test_unrecoverable_gitignored_data_delete_requires_auth,
proving the AN-1 guarantee ("deleting unrecoverable gitignored data is gated")
holds through the proxy's wiring, not just at the engine-rule level. No
production code changes — DestructiveCommandRule already enforces this; the
gap was test coverage on this host only.
docs/PARITY.md is regenerated (python -m tools.parity.generate_parity) so
the Mcp Proxy cell for that guarantee moves from ◻ to ✅, linking to the
new test. No other cell changes.
tests/integration/test_engine_blocks_reach_no_tool.py::test_unrecoverable_gitignored_delete_requires_auth@pytest.mark.guarantee("gitignored-delete-gate", host="mcp-proxy").rm data/app.db as a shell_exec call through the real proxiedDEFAULT_OBJECTIVE left un-stubbed, only run_auth_challenge isMutation-checked: temporarily commented out the unrecoverable-data branch
in _segment_verdict (src/doberman/engine/rules/commands.py) and confirmed
this new test goes red (assert result.isError fails: the call passes
through unmediated instead); reverted before committing.
pytest -n auto --cov=doberman --cov-fail-under=80test_real_plugin_install_discovery.py::test_installed_plugin_is_discovered_and_fires_despite_pip_target)main in this sandbox (an isolated venv it pip-installsdoberman afterward) — unrelated to this change and notWritten with AI assistance (Claude Code) as a guided first-contribution
walkthrough; all commands were run and verified locally before pushing.
Originally posted by: fu351
Merged. Two decisions here were exactly right: you left DEFAULT_OBJECTIVE real so the actual DestructiveCommandRule makes the call (a stubbed rule would only prove the mock), and you closed the loop with
fake.calls == [], which is the assertion that matters: gated means the downstream server never saw the call. Regenerating PARITY.md with the tool instead of hand-editing the cell kept the matrix honest too. Great first contribution.Nothing was changed on your branch.
If you want another cell, [#331] (approvals are single-use and action-bound on Codex, level-3) is a natural next: the same prove-a-guarantee shape, but on the auth path you just mocked. Comment there and it's yours.
We're on Discord if you want faster feedback or to argue threat models: https://discord.gg/Sfy5XGNqty
Related
Tickets:
#331Ticket changed by: fu351