Published in openvibe-contracts v0.33.0 (docs/adr/ADR-001-canonical-subjects.md), rendered as is.

ADR-001: Canonical subject IDs and legacy identity mapping

Status: Accepted, implemented 2026-09-22

Context and current evidence

Live, Media and Games each kept their own integer user ids; the same integer named different people in different services (Network #57 and Live #57). Community existed partly to translate identities through Live. The Wave 0 baseline counted 391 Network accounts, 27,848 guest sessions, and 326 Live↔Network links known only to Live.

Decision

Alternatives considered

Migration consequences

Backfilled at Network boot (idempotent, time part from created_at). Live reports its links daily (identity-legacy-sync); /internal/link-account writes the map too. Rows created in the 2026-08-17..20 window may carry Network ids where Live ids were expected (see ADR-011 import).

Rollback

Additive: removing subject_id columns and the map returns to the previous state; nothing reads subjects in place of integer ids where a legacy caller still needs the integer.

Acceptance tests

OpenVibe.Network/test/identity-subjects.test.js: backfill validity and stability, legacy-map seeding, no repointing, problem+json errors, subject_id in tokens with sub unchanged. Production: resolve by Live id returns the Network account; unknown ids return 404 problem.