What
Shared copies can already have location stripped by policy. Photographs of a bedroom mould patch often include a child, a face, or a prescription bottle. Add visual redaction for shared copies: the tenant draws boxes in the app (or supplies coordinates on the CLI), the derived copy is rendered with those regions blacked out, and a redaction record (region list, method, hash of the derived copy) is committed to custody and bound to the sealed original. The packet shows the redacted copy, states "N regions redacted by the tenant", and verify proves the derived copy descends from the sealed original whose hash the timestamp covers.
Why it matters
The threat model is a landlord who retaliates; over-sharing is a harm the tool should prevent at the point of export, and minimal disclosure (docs/legal/minimal-disclosure.md, RR-15) is a stated goal. Doing it verifiably keeps the tamper-evidence story intact: the original is never edited, and a reviewer later granted the original can confirm the redaction was only what was declared. It reuses the media-policy pipeline that already produces location-stripped copies.
Scope
- A redaction record type;
capture redact on the CLI and an app editor with keyboard-operable region entry; a pure-Python raster fill for JPEG and PNG.
- Disclosure policy and packet copy (EN/ES); a decision-table row.
- A guard test: the sealed original's bytes and hash are unchanged by any redaction.
Out of scope
- Automatic face or text detection.
- Redacting video or audio (declared as a limit).
Done when
- A redacted copy verifies as derived from its original with the declared regions; an undeclared extra edit fails.
- The original in the vault is byte-identical before and after.
- A redaction with an empty region list is refused.
Pointers
Proposed with AI assistance.
What
Shared copies can already have location stripped by policy. Photographs of a bedroom mould patch often include a child, a face, or a prescription bottle. Add visual redaction for shared copies: the tenant draws boxes in the app (or supplies coordinates on the CLI), the derived copy is rendered with those regions blacked out, and a redaction record (region list, method, hash of the derived copy) is committed to custody and bound to the sealed original. The packet shows the redacted copy, states "N regions redacted by the tenant", and
verifyproves the derived copy descends from the sealed original whose hash the timestamp covers.Why it matters
The threat model is a landlord who retaliates; over-sharing is a harm the tool should prevent at the point of export, and minimal disclosure (
docs/legal/minimal-disclosure.md, RR-15) is a stated goal. Doing it verifiably keeps the tamper-evidence story intact: the original is never edited, and a reviewer later granted the original can confirm the redaction was only what was declared. It reuses the media-policy pipeline that already produces location-stripped copies.Scope
capture redacton the CLI and an app editor with keyboard-operable region entry; a pure-Python raster fill for JPEG and PNG.Out of scope
Done when
Pointers
src/habitable/media.py,src/habitable/disclosure.py,src/habitable/evidence.py,src/habitable/htmlpacket.py,docs/legal/minimal-disclosure.mddocs/RESEARCH-ROADMAP.md(RR-15); Restore scoped and rehashed custody views (P0 restoration, workstream A) #262Proposed with AI assistance.