{"schemaVersion":"corex.compatibility-registry.v1","generatedAt":"2026-10-16T09:51:44.447Z","principles":{"compatibilityBeforeRemoval":true,"aliasesMustRemainResolvable":true,"lineagePreserved":true,"externalGatesFailClosed":true,"salvageBeforeRemoval":true,"productionDataCheckedBeforeSchemaRemoval":true,"oneCanonicalOwner":true},"counts":{"ACTIVE_ALIAS":4,"LINEAGE_ONLY":3,"MIGRATION_REQUIRED":2,"PROFILE_ONLY":1,"PROMOTE_PRIMITIVE":1,"EXTERNAL_GATE":1},"items":[{"id":"programme-lifecycle-wrapper","legacySurface":"src/core/programmeWorkflow.ts","canonicalSurface":"src/core/governedLifecycle.ts + corex.lifecycle.programme-activation profile","state":"ACTIVE_ALIAS","removalCondition":"Programme APIs and persisted events remain backward compatible; wrapper may only be removed after consumers use the generic lifecycle contract directly.","authorityBoundary":"Lifecycle evaluation never creates programme decision authority."},{"id":"programme-source-reconciliation-wrapper","legacySurface":"src/core/programmeSourceReconciliation.ts","canonicalSurface":"src/core/entityReconciliation.ts + programme signal rule pack","state":"ACTIVE_ALIAS","removalCondition":"Keep programme signal codes/routes until downstream consumers migrate to generic reconciliation plus profile signals.","authorityBoundary":"No automatic identity merge, wrongdoing conclusion or sensitive inference."},{"id":"adaptsprint-event-trust-wrapper","legacySurface":"src/core/adaptsprintEventTrust.ts","canonicalSurface":"src/core/eventTrustProjection.ts","state":"ACTIVE_ALIAS","removalCondition":"Retain customer-named wrapper only while existing AdaptSprint consumers resolve it.","authorityBoundary":"AdaptSprint remains an ordinary white-label/customer deployment and does not create canonical CoreX authority."},{"id":"customer-credential-template-aliases","legacySurface":"customer-named credential template identifiers and selectors","canonicalSurface":"generic credential template registry + customer/solution profile packs","state":"ACTIVE_ALIAS","removalCondition":"Historical template/profile identifiers and legacy customer selectors remain resolvable; only remove an alias after dependent consumers are proven migrated.","authorityBoundary":"Template identity and customer profile selection never create issuer authority."},{"id":"campus-community-lineage","legacySurface":"historical Campus/Community implementations","canonicalSurface":"modern programme/outcome, Studio, policy, identity, event and evidence modules","state":"LINEAGE_ONLY","removalCondition":"No live route, tenant data, event or evidence dependency remains.","authorityBoundary":"Any migration must preserve tenant isolation, identity, event chronology and evidence lineage."},{"id":"legacy-identity-runtime","legacySurface":"Prisma Identity/Session/LoginCode/Event/SystemStats (legacy source removed from active tree)","canonicalSurface":"CorexActor + CorexIdentityBinding + human identity providers + CorexExecutionContext + canonical event envelope","state":"MIGRATION_REQUIRED","removalCondition":"No active source consumers, production legacy tables remain empty or governed migration is complete, and passwordless-email semantics are represented through a provider adapter rather than a parallel identity/session authority.","authorityBoundary":"Authentication never creates tenant, role, workspace, entitlement or commercial authority.","salvageTargets":["passwordless email as a human identity provider adapter","session UX semantics where still useful","login/logout telemetry through canonical events"],"parityEvidence":["CorexActor/CorexIdentityBinding are canonical persistent identity","OIDC human identity is active","CorexExecutionContext is canonical runtime context","legacy identity source is excluded from TypeScript compilation"],"productionDataEvidence":"2026-09-27 live production counts: Identity=0; Session=0; LoginCode=0; Event=0; SystemStats=0. Excluded src/identity source removed in P1A; schema migration remains governed separately.","notes":["Recovered passwordless semantics are registered as corex.identity.provider-passwordless and remain provider-mediated; no local OTP/session authority is restored.","Active Prisma model removal is staged by 20260927080000_remove_legacy_identity_campus_runtime; production apply remains governed and fail-closed."]},{"id":"legacy-campus-runtime","legacySurface":"Prisma CampusProgram/CampusGroup/CampusMembership/CampusSession (legacy source removed from active tree)","canonicalSurface":"CorexProgramme + CorexCohort + CorexParticipation + CorexProgrammeSession + programme/outcome/evidence/presence capabilities","state":"MIGRATION_REQUIRED","removalCondition":"No active source consumers, production Campus tables remain empty or governed migration is complete, and useful attendance/membership/session semantics have deterministic parity through canonical programme and evidence primitives.","authorityBoundary":"Programme/profile migration must preserve tenant isolation, actor authority, event chronology and evidence lineage.","salvageTargets":["programme/cohort/participation/session semantics","attendance and participation evidence","operator programme administration patterns"],"parityEvidence":["programmeRepository persists CorexProgramme/CorexCohort/CorexParticipation/CorexProgrammeSession","attendanceProof supports multi-method evidence","presenceAttestation/presenceTarget provide reusable location/presence semantics","canonical programme workflow and outcome infrastructure exist"],"productionDataEvidence":"2026-09-27 live production counts: CampusProgram=0; CampusGroup=0; CampusMembership=0; CampusSession=0. Excluded src/campus source removed in P1A; schema migration remains governed separately.","notes":["Active Prisma model removal is staged by 20260927080000_remove_legacy_identity_campus_runtime; production apply remains governed and fail-closed."]},{"id":"legacy-campus-profile","legacySurface":"src/verticals/campus/**","canonicalSurface":"Education/Programme solution profile over generic programme, participation, evidence, credential and outcome fabrics","state":"PROFILE_ONLY","removalCondition":"Retain only while Campus naming/routes are intentionally supported as a vertical profile or compatibility surface.","authorityBoundary":"Vertical naming and routes do not create separate CoreX authority.","salvageTargets":["education programme route/profile semantics"],"parityEvidence":["modern Campus profile reads CorexProgramme through programmeRepository and writes only CorexCanonicalEventEnvelope through eventRepository."],"notes":["Active capability: corex.profile.education-programme","Composes shared corex.programme.participation-outcome capability."]},{"id":"legacy-campus-event-publisher","legacySurface":"historical src/core/eventsClient.ts LegacyCampusEnvelope/publishCampusEvent (removed from active tree)","canonicalSurface":"src/core/eventEnvelope.ts + src/core/eventRepository.ts","state":"LINEAGE_ONLY","removalCondition":"All active Campus/profile writes publish canonical durable events directly and compatibility fixtures prove equivalent identifiers/correlation metadata.","authorityBoundary":"Event transport records source authority; it does not create it.","salvageTargets":["program/cohort/session reference metadata","trace/correlation semantics"],"parityEvidence":["canonical CorexEventEnvelope and durable event repository are active."]},{"id":"legacy-builder-context-policy","legacySurface":"historical src/core/context.ts + src/core/policy/index.ts + builder audit route (removed from active tree)","canonicalSurface":"src/core/executionContext.ts + src/core/policy.ts/kernelAccess + canonical event/evidence rails","state":"LINEAGE_ONLY","removalCondition":"No active runtime imports remain; required builder/test semantics exist as explicit test fixtures rather than production-capable context or policy fallbacks.","authorityBoundary":"Builder conveniences must never enter pilot/production authority paths.","salvageTargets":["builder fixture ergonomics","resource/action policy examples"],"parityEvidence":["executionContext rejects mock identity outside dev/builder; canonical policy delegates to default-deny kernel access."]},{"id":"participation-outcome-capability-family","legacySurface":"Campus/Community programme, membership, session and attendance lineage","canonicalSurface":"programme + participation + presence + attendance + capture + evidence + credential + outcome primitives","state":"PROMOTE_PRIMITIVE","removalCondition":"Not removable; this is a discoverability classification for already-promoted reusable CoreX capability.","authorityBoundary":"Participation/outcome evidence never autonomously creates identity, completion, credential, employment, funding or legal authority.","salvageTargets":["Programme & Participation Fabric","Presence & Participation Evidence","Outcome & Competency Infrastructure"],"parityEvidence":["CorexProgramme/CorexCohort/CorexParticipation/CorexProgrammeSession","attendanceProof","presenceAttestation","dataCapture","outcomeInfrastructure","credential lifecycle","capability registry: corex.programme.participation-outcome = ACTIVE","education/programme solution packs include the recovered capability"],"notes":["The useful capability is active; only the superseded Campus implementation is lineage."]},{"id":"external-provider-gates","legacySurface":"implemented but unbound provider-specific activation points","canonicalSurface":"provider-neutral CoreX capability contracts","state":"EXTERNAL_GATE","removalCondition":"Provider credentials, policy, region, conformance or customer authority evidence is supplied and accepted.","authorityBoundary":"Availability must never be presented as certification, provider approval or source authority."}]}