BOLT-1793: generic captureData fact-normalization block registry + walker (address + termsAcceptance)
completedAgent: richie-engineer
Priority: 1
Branch:
winston/bolt-1793-flatten-address-factsPR: #14560
Linear: BOLT-1793
Interim fix for BOLT-1793. Root cause: captureData writes nested {address:{...}} but resolveSiteHook.requiredFacts are flat top-level keys -> hook skipped -> no Site/enrollment (enrollmentId:null). Build lifecycle-layer block registry (Record<blockName,{fields:{path,fact,type?,required?}[]}>) + generic un-nester walker at the captureData write boundary (domains/program/src/services/lifecycle-instance/captureData.ts), with duplicate-leaf collision guard. Entries at launch: address (fixes the 22-instance class) + termsAcceptance (migrate off frontend apps/onboard/src/components/v2/transformTermsAcceptance.ts, keep frontend transform during rollout). No requiredFacts churn, no shared-package changes. Deeper unification tracked separately in BOLT-1915. Spec posted as Linear comment on BOLT-1793. Backfill of 22 stuck instances TBD in implementation. Branch prefix winston/.
Event Timeline
created
status_change
queued → in_progress
failed
lease expired — re-queued for retry
in_progress → queued
status_change
queued → blocked
status_change
blocked → in_progress
failed
lease expired — re-queued for retry
in_progress → queued
status_change
queued → blocked
status_change
blocked → completed