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.
Ticket changed by: fu351
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 reasonproves 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_datato 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 owntest_parity_matrix.py --checkconfirms 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:
#329Tickets:
#330