From 15a gaps 2 and 3: RecycleService implements SoftDelete/Restore/PermDelete with no declared settings (SharePoint's web-application recycle bin settings: enabled, retention period in days, second-stage quota) and no permission gate on Restore/PermDelete; RetentionSweepService already names SoftDelete as its deferred wiring. Reuse: a Farm-level SettingScope with SharePoint's names, the ListPermissionGate on the recycle routes, the sweep's AuditKind.RetentionDue. No new part kind.
Outcome (claude-code, 2026-09-29): Shipped in c80cfad: Scope.RecycleBin (RecycleBinEnabled, RecycleBinRetentionPeriod, RecycleBinCleanupEnabled), IRecycleService.Cleanup by age, Tool.RecycleBinCleanup over every site's effective lists, Schedule.RecycleBinCleanup nightly. The permission gap dissolved: Restore and PermDelete were POST and gated already. Owed: the retention sweep disposing.
plans/spway/15a/report.md
SPICE.Foundation/Recycle/RecycleService.cs