Config-free, import-safe leaf registry that optional modules use to self-register a GDPR data provider β mirrors modules/organizations/lib/orgRemoval.registry.js, but Map-keyed by a stable string key (not a Set of fn identities β an inline-arrow registration in a *.init.js can't double-register).
Scope β modules/users/lib/dataProvider.registry.js
registerDataProvider({ key, axis: 'user'|'org', retention: 'delete'|'anonymize', export?, erase? }) β TypeError on bad key / non-fn export/erase.
runDataExport(payload) β { data: { [key]: β¦ }, modules: [...] } (the modules manifest makes export completeness auditable).
runDataErasure(payload) β per-provider result manifest; sequential forβ¦of await, errors propagate (fail-closed).
_reset() test helper.
- Imports no service (avoids the import cycle that forced the previous removal).
DoD
Depends on: none (foundation).
Created via /dev:issue
Config-free, import-safe leaf registry that optional modules use to self-register a GDPR data provider β mirrors
modules/organizations/lib/orgRemoval.registry.js, butMap-keyed by a stable stringkey(not aSetof fn identities β an inline-arrow registration in a*.init.jscan't double-register).Scope β
modules/users/lib/dataProvider.registry.jsregisterDataProvider({ key, axis: 'user'|'org', retention: 'delete'|'anonymize', export?, erase? })βTypeErroron badkey/ non-fnexport/erase.runDataExport(payload)β{ data: { [key]: β¦ }, modules: [...] }(themodulesmanifest makes export completeness auditable).runDataErasure(payload)β per-provider result manifest; sequentialforβ¦of await, errors propagate (fail-closed)._reset()test helper.DoD
_resetclears, key-dedup (re-register samekeyoverwrites, not duplicates)./verifygreen; coverage β₯ threshold.Depends on: none (foundation).
Created via /dev:issue