Menu

#330 Prove parity cell: gated delete of unrecoverable gitignored data (AN-1) on the MCP proxy

closed
nobody
2026-08-16
2026-08-11
Anonymous
No

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

  1. Read the engine-level proof: tests/unit/test_rule_commands.py::test_unrecoverable_gitignored_data_delete_requires_auth (rm data/app.db etc. → AUTH).
  2. Write the proxy equivalent in 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 == [].
  3. Mark it: @pytest.mark.guarantee("gitignored-delete-gate", host="mcp-proxy")
  4. Mutation-check it: temporarily comment out the unrecoverable-data branch in src/doberman/engine/rules/commands.py, confirm red, revert. Note "mutation-checked" in the PR.
  5. Regenerate: python -m tools.parity.generate_parity.

Same rule, different door. Proves the proxy path enforces it exactly like the direct hook does.

Related

Tickets: #346
Tickets: #377
Tickets: #384
Tickets: #389

Discussion

  • Anonymous

    Anonymous - 2026-08-16

    Originally posted by: blackcoderx

    I am working on this — adding the mcp-proxy sibling of test_unrecoverable_gitignored_data_delete_requires_auth in tests/integration/test_engine_blocks_reach_no_tool.py.

     
  • Anonymous

    Anonymous - 2026-08-16

    Ticket changed by: fu351

    • status: open --> closed
     

Log in to post a comment.