@@ -1122,16 +1122,15 @@ const CODEBOOK: &[(&str, u16)] = &[
11221122 ( "pricelist" , 0x0209 ) ,
11231123 ( "pricelist_rule" , 0x020A ) ,
11241124 ( "unit_of_measure" , 0x020B ) ,
1125- // ── 0x07XX — OSINT domain (AIRO/AIwar dual-use intelligence) ──
1126- // Minted from the q2 cockpit V3 SoA bake (`data/osint-v3/`, harvested from
1127- // `AdaWorldAPI/aiwar-neo4j-harvest`). The low u16 is the FROZEN canonical
1128- // concept (07xx is operator-ratified canonical; the slot is the owner's);
1129- // the render-skin APP_PREFIX (`0x1000`, the V3 format signal) is the
1130- // consumer's half (`classid = (APP_PREFIX << 16) | concept`). Two concepts:
1131- // the AI-system card (GUID1, 12 AIRO dims) and the person card (GUID2, 5
1132- // McClelland/Rubicon dims — the Epstein-archetype implicit-motive lens).
1133- ( "osint_system" , 0x0700 ) ,
1134- ( "osint_person" , 0x0701 ) ,
1125+ // ── 0x07XX — OSINT domain: ZERO vocabulary rows BY DESIGN (operator
1126+ // ruling 2026-07-02, corrects PR #145's two hallucinated concept mints
1127+ // `osint_system@0x0700` / `osint_person@0x0701`). Within the OSINT domain
1128+ // the low byte is NOT a concept slot — it is allocated domain-wise as an
1129+ // APPID: `0x0700` = the OSINT domain itself (low byte 00 = domain-wide),
1130+ // `0x0701` = OSINT-for-q2 (q2 is appid 0x01, the consumer); V3 form
1131+ // `0x1000_0701`. Class content (AIRO/VAIR system card, McClelland/Rubicon
1132+ // person lens) lives consumer-side in q2's `osint_classview.rs` — OGAR
1133+ // vocabulary carries no OSINT concept names. Do NOT re-mint rows here.
11351134 // ── 0x09XX — Health domain (clinical / patient / care) ──
11361135 // medcare-rs Healthcare-namespace promotion (Northstar T9). The 7
11371136 // entities the OGIT `NTO/Healthcare/entities/` TTL ships, projected
@@ -1652,14 +1651,9 @@ pub mod class_ids {
16521651 /// (`ogit.Automation:Trigger`).
16531652 pub const AUTOMATION_TRIGGER : u16 = 0x0C09 ;
16541653
1655- // ── 0x07XX — OSINT domain (AIRO/AIwar dual-use intelligence) ──
1656-
1657- /// `osint_system` (`0x0700`) — AI system profiled on the 12 AIRO/VAIR
1658- /// dual-use dims (V3 SoA GUID1 `6×(8:8)` tier cascade).
1659- pub const OSINT_SYSTEM : u16 = 0x0700 ;
1660- /// `osint_person` (`0x0701`) — person profiled on McClelland motive +
1661- /// Rubicon stage (V3 SoA GUID2; the Epstein-archetype implicit-motive lens).
1662- pub const OSINT_PERSON : u16 = 0x0701 ;
1654+ // ── 0x07XX — OSINT domain: no concept constants (low byte = APPID,
1655+ // domain-wise; q2 = 0x01 → `0x0701` is OSINT-for-q2, not a concept —
1656+ // operator ruling 2026-07-02; see the CODEBOOK section note). ──
16631657
16641658 /// Every `(canonical_concept_name, id)` pair the constants vouch for.
16651659 /// Drift-guarded against [`super::CODEBOOK`] by tests in this module.
@@ -1704,8 +1698,6 @@ pub mod class_ids {
17041698 ( "pricelist_rule" , PRICELIST_RULE ) ,
17051699 ( "unit_of_measure" , UNIT_OF_MEASURE ) ,
17061700 // 0x07XX — OSINT (AIRO/AIwar dual-use intelligence)
1707- ( "osint_system" , OSINT_SYSTEM ) ,
1708- ( "osint_person" , OSINT_PERSON ) ,
17091701 // 0x09XX — health
17101702 ( "patient" , PATIENT ) ,
17111703 ( "diagnosis" , DIAGNOSIS ) ,
@@ -2465,18 +2457,6 @@ pub fn canonical_concept(name: &str) -> String {
24652457 ) {
24662458 return "priority" . to_string ( ) ;
24672459 }
2468- // OSINT domain (0x07XX) — the canonical class-name spellings must
2469- // round-trip so ordinary PascalCase model-name inputs (`OsintSystem` /
2470- // `OsintPerson`, the builders' `Class::new(...)` names) recover their
2471- // codebook ids; without this arm they lexically land on `osintsystem` /
2472- // `osintperson`, which are NOT in the codebook (`osint_system` /
2473- // `osint_person` are). Codex P2 on PR #145, mirrors the PR #60 pattern.
2474- if matches ! ( lower. as_str( ) , "osintsystem" | "osint_system" ) {
2475- return "osint_system" . to_string ( ) ;
2476- }
2477- if matches ! ( lower. as_str( ) , "osintperson" | "osint_person" ) {
2478- return "osint_person" . to_string ( ) ;
2479- }
24802460 // ── Layer 2: lexical fallback ──
24812461 lexical_concept ( name)
24822462}
@@ -2611,8 +2591,6 @@ pub fn all_promoted_classes() -> Vec<Class> {
26112591 unit_of_measure( ) ,
26122592 // 0x07XX — OSINT arm (AIRO/AIwar dual-use: system + person cards),
26132593 // in class_ids::ALL order.
2614- osint_system( ) ,
2615- osint_person( ) ,
26162594 // 0x09XX — health arm (7 OGIT Healthcare concepts), in
26172595 // class_ids::ALL order.
26182596 patient( ) ,
@@ -3722,88 +3700,6 @@ pub fn treatment() -> Class {
37223700 c
37233701}
37243702
3725- // ─────────────────────────────────────────────────────────────────────
3726- // 0x07XX — OSINT domain (AIRO/AIwar dual-use intelligence)
3727- //
3728- // Minted from the q2 cockpit V3 SoA bake (`data/osint-v3/`, harvested from
3729- // `AdaWorldAPI/aiwar-neo4j-harvest`). Two concepts mirror the two GUIDs of a
3730- // baked node: GUID1 (the AI system, 12 AIRO/VAIR dims) and GUID2 (the person,
3731- // 5 McClelland/Rubicon dims). Field order IS the SoA tier order — the FieldMask
3732- // bit basis. The low u16 is the frozen canonical concept; the render-skin
3733- // APP_PREFIX (`0x1000`, a V3 format signal) is the consumer's half.
3734- // ─────────────────────────────────────────────────────────────────────
3735-
3736- /// OSINT **AI system** — the AIRO/AIwar dual-use system card (`osint_system`,
3737- /// `0x0700`). The 12 dims the V3 SoA bake packs into GUID1's `6×(8:8)` tier
3738- /// cascade: HEEL `current_status:type`, HIP `military_use:civic_use`,
3739- /// TWIG `ml_task:ml_type`, LEAF `purpose:capacity`, family `output:impact`,
3740- /// identity `stakeholder:airo_role`. Attribute declaration order IS the tier
3741- /// order, so the lifted `ObjectView` FieldMask bit `i` == tier byte `i`. The
3742- /// reasoning roles (Demand `offer⟷need`, Causality `intent⟷impact`) are a
3743- /// consumer-side overlay on these names (see q2 `osint_classview.rs`).
3744- #[ must_use]
3745- pub fn osint_system ( ) -> Class {
3746- let mut c = Class :: new ( "OsintSystem" ) ;
3747- c. language = Language :: Unknown ;
3748- c. canonical_concept = Some ( "osint_system" . to_string ( ) ) ;
3749- c. description =
3750- Some ( "An AI system profiled on the AIRO/AIwar dual-use dimensions" . to_string ( ) ) ;
3751- c. source_domain = Some ( "osint" . to_string ( ) ) ;
3752- c. source_curator = Some ( "aiwar" . to_string ( ) ) ;
3753- let mut attrs = Vec :: with_capacity ( 12 ) ;
3754- for name in [
3755- "current_status" , // HEEL.hi — state
3756- "type" , // HEEL.lo — identity
3757- "military_use" , // HIP.hi — dual-use need
3758- "civic_use" , // HIP.lo — dual-use need
3759- "ml_task" , // TWIG.hi — the task (need)
3760- "ml_type" , // TWIG.lo — the technique (offer)
3761- "purpose" , // LEAF.hi — intent (explicit)
3762- "capacity" , // LEAF.lo — offer
3763- "output" , // family.hi — offer
3764- "impact" , // family.lo — causality (implicit)
3765- "stakeholder" , // identity.hi — relation
3766- "airo_role" , // identity.lo — actor role (person)
3767- ] {
3768- let mut a = Attribute :: new ( name) ;
3769- a. type_name = Some ( "string" . to_string ( ) ) ;
3770- attrs. push ( a) ;
3771- }
3772- c. attributes = attrs;
3773- c
3774- }
3775-
3776- /// OSINT **person** — the McClelland / Rubicon actor card (`osint_person`,
3777- /// `0x0701`). The 5 dims the V3 SoA bake packs into GUID2: HEEL `stage:need`,
3778- /// HIP `receptor:rubicon`, TWIG `motive`. This is the Epstein-archetype lens —
3779- /// implicit motive (`nPow`/`nAch`/`nAff`) × Rubicon crossing × power receptor —
3780- /// the Person side of the Person×Situation split (the system card carries the
3781- /// Situation). Attribute order IS the GUID2 tier order (the FieldMask bit basis).
3782- #[ must_use]
3783- pub fn osint_person ( ) -> Class {
3784- let mut c = Class :: new ( "OsintPerson" ) ;
3785- c. language = Language :: Unknown ;
3786- c. canonical_concept = Some ( "osint_person" . to_string ( ) ) ;
3787- c. description =
3788- Some ( "A person profiled on McClelland motives and the Rubicon action stage" . to_string ( ) ) ;
3789- c. source_domain = Some ( "osint" . to_string ( ) ) ;
3790- c. source_curator = Some ( "aiwar" . to_string ( ) ) ;
3791- let mut attrs = Vec :: with_capacity ( 5 ) ;
3792- for name in [
3793- "stage" , // HEEL.hi — Rubicon stage I..IV
3794- "need" , // HEEL.lo — McClelland nPow/nAch/nAff
3795- "receptor" , // HIP.hi — power receptor
3796- "rubicon" , // HIP.lo — Rubicon crossing
3797- "motive" , // TWIG.hi — dominant motive
3798- ] {
3799- let mut a = Attribute :: new ( name) ;
3800- a. type_name = Some ( "string" . to_string ( ) ) ;
3801- attrs. push ( a) ;
3802- }
3803- c. attributes = attrs;
3804- c
3805- }
3806-
38073703/// Visit — a clinical encounter (OGIT `Visit`, `0x0906`). The temporal
38083704/// container diagnoses / labs / treatments / vitals are recorded within.
38093705#[ must_use]
@@ -4258,24 +4154,6 @@ mod tests {
42584154 assert ! ( wire_synergies( & [ a, b, c] ) . is_empty( ) ) ;
42594155 }
42604156
4261- #[ test]
4262- fn canonical_concept_promotes_osint_classes_deterministically ( ) {
4263- // OSINT domain (0x07XX): the builders' PascalCase class names must
4264- // round-trip to their codebook ids, like every other promoted class
4265- // (codex P2 on PR #145). Without the resolver arm, `OsintSystem`
4266- // lexically lands on `osintsystem`, which is NOT in the codebook.
4267- assert_eq ! ( canonical_concept( "OsintSystem" ) , "osint_system" ) ;
4268- assert_eq ! ( canonical_concept( "OsintPerson" ) , "osint_person" ) ;
4269- assert_eq ! ( canonical_concept( "osint_system" ) , "osint_system" ) ;
4270- assert_eq ! ( canonical_concept( "osint_person" ) , "osint_person" ) ;
4271- // Full round-trip through the codebook resolver.
4272- assert_eq ! ( ogar_codebook( "OsintSystem" ) , Some ( 0x0700 ) ) ;
4273- assert_eq ! ( ogar_codebook( "OsintPerson" ) , Some ( 0x0701 ) ) ;
4274- // The class builder's own `.name` resolves to its codebook id.
4275- assert_eq ! ( ogar_codebook( & osint_system( ) . name) , Some ( 0x0700 ) ) ;
4276- assert_eq ! ( ogar_codebook( & osint_person( ) . name) , Some ( 0x0701 ) ) ;
4277- }
4278-
42794157 #[ test]
42804158 fn canonical_concept_promotes_billable_work_entry_deterministically ( ) {
42814159 // Promoted cross-domain invariant — OpenProject `TimeEntry` and
@@ -4967,8 +4845,10 @@ mod tests {
49674845 ] ,
49684846 "Automation domain set drift — re-sync the consumer coverage gate" ,
49694847 ) ;
4970- // The OSINT domain carries the two AIRO/AIwar cards (system + person).
4971- assert_eq ! ( concepts_in_domain( ConceptDomain :: Osint ) . count( ) , 2 ) ;
4848+ // The OSINT domain carries ZERO vocabulary rows BY DESIGN (operator
4849+ // ruling 2026-07-02): its low byte is appid space (q2 = 0x01), not a
4850+ // concept slot — see the CODEBOOK 0x07XX section note.
4851+ assert_eq ! ( concepts_in_domain( ConceptDomain :: Osint ) . count( ) , 0 ) ;
49724852 }
49734853
49744854 #[ test]
0 commit comments