@@ -45,19 +45,24 @@ impl NodeGuid {
4545 // `canonical_concept_domain(classid_lo)` (see `crate::ogar_codebook`) routes on
4646 // `classid >> 8`. Realigned 2026-06-20 (ISS-CLASSID-OGAR-DRIFT): OSINT was
4747 // 0x0007 (OGAR Reserved domain) → 0x0700; FMA was 0x0008 (OGAR OCR block) →
48- // 0x0901 (anatomy concept in the Health domain). Migration:
49- // `.claude/plans/ogar-vocab-contract-codebook-migration-v1.md`.
48+ // 0x0901. Re-realigned 2026-06-24 (ISS-CLASSID-OGAR-DRIFT cont.): FMA 0x0901
49+ // **collided with OGAR `patient` (0x0901)** — both Health. FMA now routes to
50+ // the new **Anatomy** domain root 0x0A01 (`anatomical_structure`); anatomy is
51+ // public reference, not Health PHI. Surfaced by OGAR `docs/NODEGUID-CANON-AUDIT.md`
52+ // F-1. Migration: `.claude/plans/ogar-vocab-contract-codebook-migration-v1.md`.
5053
5154 /// **OSINT / Palantir-Gotham** domain root (`0x07` = OSINT domain, `0x00` =
5255 /// root). The neo4j-emulation entity graph (people / orgs / systems / events,
5356 /// family-grouped). Resolves to [`ReadMode::OSINT`] (hot `Cognitive` value +
5457 /// `CoarseOnly` adjacency).
5558 pub const CLASSID_OSINT : u32 = 0x0000_0700 ;
56- /// **FMA anatomy** — the `anatomy` concept (`0x01`) in the **Health ** domain
57- /// (`0x09 `); `0x0900 ` is the Health root. The Foundational Model of Anatomy
59+ /// **FMA anatomy** — `anatomical_structure` (`0x01`) in the **Anatomy ** domain
60+ /// (`0x0A `); `0x0A00 ` is the Anatomy root. The Foundational Model of Anatomy
5861 /// (~70k structural entities, family = body region, bones = stability anchors).
59- /// Resolves to [`ReadMode::FMA`] (cold `Compressed` reference + `CoarseOnly`).
60- pub const CLASSID_FMA : u32 = 0x0000_0901 ;
62+ /// Anatomy is **public reference, not Health PHI** — moved off `0x0901` to
63+ /// clear the collision with OGAR `patient`. Resolves to [`ReadMode::FMA`]
64+ /// (cold `Compressed` reference + `CoarseOnly`).
65+ pub const CLASSID_FMA : u32 = 0x0000_0A01 ;
6166 /// **Project-management** domain root (`0x01`) — OpenProject ↔ Redmine
6267 /// (work items, members, versions, …). OGAR codebook `0x01XX`. Resolves to
6368 /// [`ReadMode::PROJECT`].
@@ -1754,13 +1759,19 @@ mod tests {
17541759 assert_eq ! ( fma. edge_codec, EdgeCodecFlavor :: CoarseOnly ) ;
17551760
17561761 // The classids follow OGAR `0xDDCC` (ISS-CLASSID-OGAR-DRIFT realign):
1757- // OSINT domain root `0x0700` (`>>8 == 0x07`); FMA = anatomy concept
1758- // `0x0901` in the Health domain (`>>8 == 0x09`). Never the pre-realign
1759- // 0x0007 (OGAR Reserved) / 0x0008 (OGAR OCR) values.
1762+ // OSINT domain root `0x0700` (`>>8 == 0x07`); FMA = `anatomical_structure`
1763+ // `0x0A01` in the **Anatomy** domain (`>>8 == 0x0A`) — re-realigned off
1764+ // `0x0901` to clear the OGAR `patient` collision. Never the pre-realign
1765+ // 0x0007 / 0x0008, nor the colliding 0x0901.
17601766 assert_eq ! ( NodeGuid :: CLASSID_OSINT , 0x0000_0700 ) ;
1761- assert_eq ! ( NodeGuid :: CLASSID_FMA , 0x0000_0901 ) ;
1767+ assert_eq ! ( NodeGuid :: CLASSID_FMA , 0x0000_0A01 ) ;
1768+ assert_ne ! (
1769+ NodeGuid :: CLASSID_FMA ,
1770+ 0x0000_0901 ,
1771+ "must not alias `patient`"
1772+ ) ;
17621773 assert_eq ! ( NodeGuid :: CLASSID_OSINT >> 8 , 0x07 , "OSINT domain high byte" ) ;
1763- assert_eq ! ( NodeGuid :: CLASSID_FMA >> 8 , 0x09 , "Health domain high byte" ) ;
1774+ assert_eq ! ( NodeGuid :: CLASSID_FMA >> 8 , 0x0A , "Anatomy domain high byte" ) ;
17641775 assert_eq ! (
17651776 NodeGuid :: new( NodeGuid :: CLASSID_OSINT , 1 , 2 , 3 , 0xAB , 0xCD ) . read_mode( ) ,
17661777 ReadMode :: OSINT
0 commit comments