You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Follow-up tracking for ADR-0057 (system data lifecycle & retention) after P1–P4 shipped in #2791 (docs/skills in #2818, tracking issue #2786 closed). Each item is independently shippable.
④ PostgreSQL native-partition Rotator — dropped (2026-07-15). Current PG behavior is correct: rotation falls back to an equivalent age-based reap and the declared bound holds — native PARTITION BY RANGE would only make reclamation O(1) instead of row-wise, a pure optimization not worth carrying as an open item while CI has no PostgreSQL service to verify the DDL. The design sketch is preserved in the comments below should it ever be revisited.
⑤ (found during ③) i18n extract-config drift for *.objects.generated.ts — shipped in feat(lifecycle): retention.onlyWhen status predicate + declarative automation run-history retention + i18n bundle ownership guard (#2834) #2837. Resolved by moving ownership rather than widening the config: the stray sys_* translation copies (sys_audit_log / sys_activity / sys_comment / sys_presence) were pruned from the platform-objects bundles and live in their owning packages' bundles (plugin-audit / service-realtime, per ADR-0029 D8) — verified line-by-line, zero translation loss. A new bundle-ownership.test.ts guard turns any future stray (in either direction) into a red build, so a plain re-run of os i18n extract is safe again.
Follow-up tracking for ADR-0057 (system data lifecycle & retention) after P1–P4 shipped in #2791 (docs/skills in #2818, tracking issue #2786 closed). Each item is independently shippable.
Items
JobRunRetention/NotificationRetention(+retentionDays/retentionSweepMsoptions) removed; the LifecycleService is the one sweeper. Included a fix: the blanket 30d lifecycle retention onsys_automation_run(from feat(lifecycle): ADR-0057 P1–P4 — lifecycle contract, Reaper/Rotator/Archiver, datasource separation, governance (#2786) #2791) could strand suspended approval runs — removed at the time because the declarative contract had no status predicate. That gap was closed in feat(lifecycle): retention.onlyWhen status predicate + declarative automation run-history retention + i18n bundle ownership guard (#2834) #2837:retention.onlyWhenlanded,sys_automation_runnow declaresretention: { maxAge: '30d', onlyWhen: { status: { $in: ['completed', 'failed'] } } }, and the automation store's bespoke age sweep (pruneHistory+runHistoryRetentionDays/runHistorySweepMs) is retired too — the LifecycleService is now genuinely the one sweeper.db:clean— shipped in feat(lifecycle): ADR-0057 follow-ups — retire per-plugin sweepers, dev telemetry datasource + db:clean, Studio lifecycle form (#2834) #2835.objectstack devprovisions<primary>.telemetry.<ext>as thetelemetrydatasource for file-backed SQLite primaries (OS_TELEMETRY_DB=0opts out,<path>opts in anywhere); newos db cleanruns the one-timeVACUUM(smoke-verified 48.9 MB → 0.01 MB,auto_vacuum=2adopted).lifecycle— shipped in feat(lifecycle): ADR-0057 follow-ups — retire per-plugin sweepers, dev telemetry datasource + db:clean, Studio lifecycle form (#2834) #2835.object.form.tsexposes the full lifecycle block; metadata-forms i18n bundles regenerated with curated zh-CN. The objects-bundle drift this uncovered became item ⑤.④ PostgreSQL native-partition Rotator— dropped (2026-07-15). Current PG behavior is correct: rotation falls back to an equivalent age-based reap and the declared bound holds — nativePARTITION BY RANGEwould only make reclamation O(1) instead of row-wise, a pure optimization not worth carrying as an open item while CI has no PostgreSQL service to verify the DDL. The design sketch is preserved in the comments below should it ever be revisited.*.objects.generated.ts— shipped in feat(lifecycle): retention.onlyWhen status predicate + declarative automation run-history retention + i18n bundle ownership guard (#2834) #2837. Resolved by moving ownership rather than widening the config: the stray sys_* translation copies (sys_audit_log/sys_activity/sys_comment/sys_presence) were pruned from the platform-objects bundles and live in their owning packages' bundles (plugin-audit / service-realtime, per ADR-0029 D8) — verified line-by-line, zero translation loss. A newbundle-ownership.test.tsguard turns any future stray (in either direction) into a red build, so a plain re-run ofos i18n extractis safe again.References
docs/adr/0057-system-data-lifecycle-and-retention.md(P0–P4 implemented)retention.onlyWhen: feat(lifecycle): retention.onlyWhen status predicate + declarative automation run-history retention + i18n bundle ownership guard (#2834) #2837 · original tracking: ADR-0057 data lifecycle P1–P4: retention contract, rotation, separation, governance (tracking) #2786🤖 Generated with Claude Code