Status: review
As a a system user, I want extension records to store and validate legacy identifier references on creation, so that all new capabilities join deterministically to legacy Access records in workflows and reports.
Campaign_Tracker.Server/campaign-tracker-client/_bmad-output/implementation-artifacts/_bmad-output/planning-artifacts/epics.md (Epic 1 / Story 1.8)_bmad-output/planning-artifacts/architecture.md_bmad-output/planning-artifacts/ux-design-specification.mdclaude-sonnet-4-6
Campaign_Tracker.Server/ExtensionData/ namespace with the full linking infrastructure.LegacyLinkType enum defines the three join-key domains: JurisdictionJCode, KitId, ContactId.LegacyLinkReference immutable record stores the type+value pair; factory methods enforce non-blank JCode.LegacyLinkValidationResult captures success/failure with a descriptive error string.ILegacyLinkValidator / LegacyLinkValidator: resolves each link type through the anti-corruption layer (ILegacyDataAccess), guaranteeing unambiguous resolution per AC #2; rejects unknown/missing identifiers per AC #3.ILegacyLinkedRecord / ILegacyLinkedRecordProvider: contracts that every future extension record type implements to participate in AC #1 and AC #4.LegacyLinkIntegrityReport + LegacyLinkIntegrityFailure: report model for AC #4.ILegacyLinkIntegrityCheck / LegacyLinkIntegrityService: scans all registered providers, validates each record's link, computes consistency percentage. Empty provider set → 100% consistent (no records to fail).LegacyLinkController (POST /api/admin/legacy-link/integrity-check, Admin-only): on-demand integrity check with audit event.Program.cs: registered ILegacyLinkValidator and ILegacyLinkIntegrityCheck as scoped services.ILegacyLinkedRecordProvider implementations to feed the nightly check.Campaign_Tracker.Server/ExtensionData/LegacyLinkType.cs (new)Campaign_Tracker.Server/ExtensionData/LegacyLinkReference.cs (new)Campaign_Tracker.Server/ExtensionData/LegacyLinkValidationResult.cs (new)Campaign_Tracker.Server/ExtensionData/ILegacyLinkValidator.cs (new)Campaign_Tracker.Server/ExtensionData/LegacyLinkValidator.cs (new)Campaign_Tracker.Server/ExtensionData/ILegacyLinkedRecord.cs (new)Campaign_Tracker.Server/ExtensionData/ILegacyLinkedRecordProvider.cs (new)Campaign_Tracker.Server/ExtensionData/LegacyLinkIntegrityReport.cs (new)Campaign_Tracker.Server/ExtensionData/ILegacyLinkIntegrityCheck.cs (new)Campaign_Tracker.Server/ExtensionData/LegacyLinkIntegrityService.cs (new)Campaign_Tracker.Server/Controllers/LegacyLinkController.cs (new)Campaign_Tracker.Server/Program.cs (modified — added ExtensionData using + service registrations)Campaign_Tracker.Server.Tests/LegacyLinkValidatorTests.cs (new — 12 tests)Campaign_Tracker.Server.Tests/LegacyLinkIntegrityServiceTests.cs (new — 7 tests)_bmad-output/implementation-artifacts/1-8-legacy-identifier-linking-for-extension-records.md (this file)_bmad-output/implementation-artifacts/sprint-status.yaml (modified — status updated)ExtensionData namespace. Validator, integrity check service, admin API endpoint, and 19 unit tests added. All 4 ACs satisfied. (claude-sonnet-4-6)Powered by TurnKey Linux.