Transfers: retention for peer-transfer history (lean at scale, mirrors #402) #404

Closed
opened 2026-09-03 00:11:49 +00:00 by Cordy · 0 comments
Owner

Ratified follow-up to #402: peer-transfers.json is the last unbounded grower — one record per send, forever, scanned per bell derivation and shown in the Transfers view.

Design (mockup approved)

  • transferRetentionDays setting: 0/absent = default 90, maximum 365, no "forever". Deliberately separate from notifyRetentionDays: that one is a view horizon (deletes nothing), this one deletes finished records — tightening the bell must never silently erase transfer history.
  • Prune: lazy on the transfer store's own saves, terminal records only (done/failed), aged by EndedAt (fallback StartedAt). In-flight transfers are never pruned regardless of age — a stuck old transfer is exactly what needs investigating.
  • UI: "Transfer history retention (days)" row in Basic settings; the card takes the agreed rename "General" (×4 locales; third loose setting landed). Page description gains the clause. Transfers view gets a muted footer — "Showing the last N days." — so a shortened history reads as policy, not data loss. i18n ×4.
  • Scope: purely local. Received Inbox files are user data, never pruned; peers keep their own records; no protocol impact. Bell "sent" items may disappear earlier than the notification horizon when this is set shorter — honest view semantics.

Closes the growth flag recorded in #402.

Ratified follow-up to #402: `peer-transfers.json` is the last unbounded grower — one record per send, forever, scanned per bell derivation and shown in the Transfers view. ## Design (mockup approved) - **`transferRetentionDays`** setting: 0/absent = default **90**, maximum 365, no "forever". Deliberately separate from `notifyRetentionDays`: that one is a view horizon (deletes nothing), this one **deletes finished records** — tightening the bell must never silently erase transfer history. - **Prune**: lazy on the transfer store's own saves, terminal records only (done/failed), aged by `EndedAt` (fallback `StartedAt`). **In-flight transfers are never pruned** regardless of age — a stuck old transfer is exactly what needs investigating. - **UI**: "Transfer history retention (days)" row in Basic settings; the card takes the agreed rename **"General"** (×4 locales; third loose setting landed). Page description gains the clause. Transfers view gets a muted footer — "Showing the last N days." — so a shortened history reads as policy, not data loss. i18n ×4. - **Scope**: purely local. Received Inbox files are user data, never pruned; peers keep their own records; no protocol impact. Bell "sent" items may disappear earlier than the notification horizon when this is set shorter — honest view semantics. Closes the growth flag recorded in #402.
Cordy closed this issue 2026-09-03 00:16:05 +00:00
Sign in to join this conversation.
No labels
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Cordy/Cairn#404
No description provided.