Prove parity cell: gated delete of unrecoverable gitignored data (AN-1) on...
Your AI's guard dog to stop it from going rogue.
Brought to you by:
doberman
Originally created by: fu351
Same guarantee as the Claude Code issue, host mcp-proxy. Also ◻, also no proven sibling on any host — this mirrors the same engine-level test through the proxy's wiring instead.
What to do
tests/unit/test_rule_commands.py::test_unrecoverable_gitignored_data_delete_requires_auth (rm data/app.db etc. → AUTH).tests/integration/test_engine_blocks_reach_no_tool.py, mirroring test_auth_returns_error_and_nothing_recorded in the same file for the wiring shape: monkeypatch executor.run_auth_challenge to _deny_challenge (already defined there) so the AUTH resolves deterministically, then call agent.call_tool("shell_exec", {"command": "rm data/app.db"}). Unlike that sibling, do NOT stub executor.DEFAULT_OBJECTIVE — leave it real so the actual DestructiveCommandRule decides. Assert result.isError, "authentication required" in the text, and the protective property: fake.calls == [].@pytest.mark.guarantee("gitignored-delete-gate", host="mcp-proxy")src/doberman/engine/rules/commands.py, confirm red, revert. Note "mutation-checked" in the PR.python -m tools.parity.generate_parity.Same rule, different door. Proves the proxy path enforces it exactly like the direct hook does.
Originally posted by: blackcoderx
I am working on this — adding the mcp-proxy sibling of
test_unrecoverable_gitignored_data_delete_requires_authintests/integration/test_engine_blocks_reach_no_tool.py.Ticket changed by: fu351