Commit 1c6a7db
committed
contract: retarget CLASSID_FMA 0x0901 -> 0x0A01 (clear the patient collision)
OGAR's NodeGuid canon audit (OGAR/docs/NODEGUID-CANON-AUDIT.md F-1) surfaced a
real in-repo collision: NodeGuid::CLASSID_FMA = 0x0000_0901 was identical to
ogar_codebook's ("patient", 0x0901) — FMA anatomy and patient shared one classid,
both in the Health domain. A consumer could not distinguish an FMA structural
node from a patient node by classid, and patient RBAC grants (rbac.rs, 0x0901)
would gate FMA reference data.
Root cause: anatomy was placed in the Health PHI domain. Anatomy is public
reference (the femur exists; part_of the lower limb) — a clinical finding *about*
it is PHI, the structure itself is not.
Fix (mirrors OGAR's new 0x0A Anatomy mint, OGAR PR #117):
- ogar_codebook: add ConceptDomain::Anatomy, route 0x0A -> Anatomy, add
anatomical_structure/skeleton/bone/joint (0x0A01..04) to CODEBOOK.
- canonical_node: CLASSID_FMA 0x0901 -> 0x0A01 (anatomical_structure, the FMA
root). patient stays at 0x0901; collision cleared.
- Tests assert 0x0A01 / Anatomy and forbid the 0x0901 alias.
Constant-following consumers (ReadMode::FMA registry, soa_graph DomainSpec, q2
#50's osint-bake/fma) inherit the fix with no change. ConceptDomain is
#[non_exhaustive] (no exhaustiveness break). 735+ contract tests green,
clippy-clean. Board: EPIPHANIES E-CLASSID-FMA-PATIENT-COLLISION.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYvNjD8M8LMNYbRy3gq2FP1 parent 8bfc933 commit 1c6a7db
3 files changed
Lines changed: 68 additions & 15 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
1 | 27 | | |
2 | 28 | | |
3 | 29 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
48 | | - | |
49 | | - | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
50 | 53 | | |
51 | 54 | | |
52 | 55 | | |
53 | 56 | | |
54 | 57 | | |
55 | 58 | | |
56 | | - | |
57 | | - | |
| 59 | + | |
| 60 | + | |
58 | 61 | | |
59 | | - | |
60 | | - | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
61 | 66 | | |
62 | 67 | | |
63 | 68 | | |
| |||
1754 | 1759 | | |
1755 | 1760 | | |
1756 | 1761 | | |
1757 | | - | |
1758 | | - | |
1759 | | - | |
| 1762 | + | |
| 1763 | + | |
| 1764 | + | |
| 1765 | + | |
1760 | 1766 | | |
1761 | | - | |
| 1767 | + | |
| 1768 | + | |
| 1769 | + | |
| 1770 | + | |
| 1771 | + | |
| 1772 | + | |
1762 | 1773 | | |
1763 | | - | |
| 1774 | + | |
1764 | 1775 | | |
1765 | 1776 | | |
1766 | 1777 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
55 | | - | |
| 55 | + | |
56 | 56 | | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
57 | 61 | | |
58 | 62 | | |
59 | | - | |
| 63 | + | |
60 | 64 | | |
61 | 65 | | |
62 | 66 | | |
| |||
73 | 77 | | |
74 | 78 | | |
75 | 79 | | |
| 80 | + | |
76 | 81 | | |
77 | 82 | | |
78 | 83 | | |
| |||
302 | 307 | | |
303 | 308 | | |
304 | 309 | | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
305 | 319 | | |
306 | 320 | | |
307 | 321 | | |
| |||
378 | 392 | | |
379 | 393 | | |
380 | 394 | | |
| 395 | + | |
381 | 396 | | |
382 | 397 | | |
383 | 398 | | |
| |||
400 | 415 | | |
401 | 416 | | |
402 | 417 | | |
403 | | - | |
404 | | - | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
405 | 421 | | |
406 | 422 | | |
407 | 423 | | |
| |||
0 commit comments