Skip to content

Evidence is kept indefinitely by default - #3

Merged
rameerez merged 1 commit into
mainfrom
retention-defaults-keep
Aug 19, 2026
Merged

Evidence is kept indefinitely by default#3
rameerez merged 1 commit into
mainfrom
retention-defaults-keep

Conversation

@rameerez

Copy link
Copy Markdown
Owner

Deleting legal contractual evidence after N years is self-harm: claims surface years later, and of the two possible mistakes only keeping is reversible. This flips the gem's retention default from "refuse to boot without a deletion schedule" to "keep indefinitely unless deletion is explicitly declared".

  • A policy without retain_with runs under a new built-in evidence_kept_indefinitely class — no clocks on anything. Previously it raised at boot.
  • New DSL verb retain_core_event_indefinitely; omitting the core rule means the same. Snapshots carry {"indefinite" => true}; the privacy inventory reports {"kind" => "indefinite"} — a decision, not a gap.
  • Events under an indefinite class freeze no deadline; the planner never lists them as due (pinned at a 100-year horizon).
  • Registry gains seeds so the built-in class survives every reload's clear.
  • README: gem "clickwrap" from rubygems, the new retention posture, and HTML/resolver: document sources documented (both new examples execute in the doc-examples test).

Deletion is unchanged where it was chosen: scheduled classes still stamp deadlines, plans still list them, dispositions still apply. 796 runs / 5238 assertions green, rubocop clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_013A6ZmfmFuQ2z3GyvQCuECA

Deleting contractual evidence on a convenient clock is the wrong
default: the day it matters is usually years past every schedule, and
of the two mistakes only one is reversible. Keeping can always become a
reviewed disposition later; a deletion is forever. So the default
flips: a policy that never says retain_with now runs under a built-in
evidence_kept_indefinitely class — no deletion clock on the core event,
none on request evidence — instead of refusing to boot. Deletion stays
exactly what it was: an explicit, reviewed, opt-in decision.

retain_core_event_indefinitely says the default out loud in a class of
your own; omitting the core rule means the same thing. Snapshots record
{"indefinite" => true}, the privacy inventory reports it as a decision
rather than a gap, events freeze no deadline, and the planner never
lists an indefinite event as due — not in ten years, not in a hundred
(pinned by test at exactly that horizon).

Registries now carry seeds: clear() returns a seeded registry to its
built-ins, never to nothing, so the default class survives every
to_prepare reload.

README: install from rubygems.org, the new retention posture, and HTML
pages / runtime resolver: sources for legal documents alongside
Markdown.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013A6ZmfmFuQ2z3GyvQCuECA
@rameerez
rameerez merged commit 1fc85df into main Aug 19, 2026
23 checks passed
@rameerez
rameerez deleted the retention-defaults-keep branch August 19, 2026 17:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant