Menu

#377 test(claude): prove unrecoverable delete parity

closed
nobody
None
2026-08-15
2026-08-15
Anonymous
No

Originally created by: jasperdingg

Pull Request

Slice

  • Repo: doberman-core
  • Feature / Slice: [#329]
  • Plan reference: [#329]

What this PR does

Marks the existing Claude Code test as proof that deleting unrecoverable gitignored data requires AUTH, and updates the parity matrix.

Tests added (run in CI)

  • Focused tests, full suite, parity, Ruff, formatting, and import checks pass.
  • Mutation check confirms the test fails if the delete safeguard is removed.

Public-release safety (doberman-core only)

  • [x] Contains nothing from the "not allowed" list: no enterprise/hosted code, no proprietary detection, no customer data, no secrets, no commercial-license code
  • [x] Core still builds/tests/runs with NO enterprise package installed

Security checklist

  • [x] Fails closed on error / uncertainty
  • [x] No secret, full file, or unredacted prompt logged or committed
  • [x] Any guardrail/learning change is raise-only (no silent loosening)
  • [x] Every BLOCK/AUTH carries reason codes + a human explanation
  • [x] doberman-core does not import doberman_enterprise

Edge cases covered / Deviations from plan / Risks introduced

  • rm data/app.db requires AUTH.
  • The operand is not exposed in the reason.
  • No production behavior changed.

Related

Tickets: #312
Tickets: #329

Discussion

  • Anonymous

    Anonymous - 2026-08-15

    Ticket changed by: fu351

    • status: open --> closed
     
  • Anonymous

    Anonymous - 2026-08-15

    Originally posted by: fu351

    Merged, and this closes [#329]. The AN-1 gate now has its Claude Code host-hook proof to sit beside the engine-level one.

    What stood out: you didn't stop at proving the verdict. assert "data/app.db" not in reason proves the redaction invariant that makes the guarantee safe to ship — the AUTH message can't become an oracle for which unrecoverable file exists at a given path. That's the assertion most people skip, and it's the one that matters here.

    I ran the mutation check before merging (neutralizing _rm_targets_unrecoverable_data to a no-op sends the test red, exit 1 — reverted). And you let the generator produce the PARITY.md cell rather than hand-editing it, so CI's own test_parity_matrix.py --check confirms the doc matches the marker. Clean, well-scoped work.

    Next rung on the parity ladder if you want it: [#330] is the same AN-1 cell on the MCP proxy — you've now done this exact shape end-to-end, so it should go quickly.

     

    Related

    Tickets: #329
    Tickets: #330


Log in to post a comment.