Skip to content

Commit 6d34bcb

Browse files
committed
feat(ogar-vocab): mint the 0x07XX OSINT domain (osint_system + osint_person)
Author the canonical OSINT ObjectView mirror for the AIRO/AIwar dual-use domain, mirroring the q2 cockpit V3 SoA bake (data/osint-v3/, harvested from AdaWorldAPI/aiwar-neo4j-harvest). 0x07XX is the operator-ratified canonical OSINT domain; the low u16 is the frozen canonical concept, the render-skin APP_PREFIX (0x1000, a V3 format signal) is the consumer half (classid = (APP_PREFIX << 16) | concept). Two concepts mirror the two GUIDs of a baked node: - osint_system (0x0700) — the AI-system card: 12 AIRO/VAIR dims in GUID1's 6x(8:8) tier order (HEEL current_status:type, HIP military_use:civic_use, TWIG ml_task:ml_type, LEAF purpose:capacity, family output:impact, identity stakeholder:airo_role). Attribute order IS the tier order, so the lifted ObjectView FieldMask bit i == tier byte i. - osint_person (0x0701) — the McClelland/Rubicon card: 5 dims in GUID2 (HEEL stage:need, HIP receptor:rubicon, TWIG motive) — the Person side of the Person x Situation split (the Epstein-archetype motive lens). OgarClassView picks both up automatically (all_canonical_classes); the render kit renders them with zero new templates. Wired through every drift-guard touchpoint: CODEBOOK, class_ids consts + ALL, all_promoted_ classes() (in class_ids::ALL order), and the Osint domain-count test (0 -> 2). Not compiled locally: an out-of-scope workspace sibling (ogar-knowable-from) pulls the proxy-blocked `vart` git repo, so workspace resolution fails in this environment; OGAR CI runs the drift-guard suite with vart access. Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 8d70a56 commit 6d34bcb

2 files changed

Lines changed: 115 additions & 3 deletions

File tree

crates/ogar-class-view/src/lib.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ use ogar_vocab::{
7171
canonical_concept_id, commercial_document, commercial_line_item, currency_policy, diagnosis,
7272
hr_department, hr_employee, hr_employment_contract, hr_job, joint, knowledge_item, lab_value,
7373
mars_application, mars_machine, mars_node_template, mars_resource, mars_software, medication,
74-
patient, payment_record, pricelist, pricelist_rule, priority, product, project, project_actor,
74+
osint_person, osint_system, patient, payment_record, pricelist, pricelist_rule, priority,
75+
product, project, project_actor,
7576
project_attachment, project_changeset, project_comment, project_custom_field,
7677
project_custom_value, project_enabled_module, project_forum, project_journal,
7778
project_member_role, project_membership, project_message, project_news, project_query,
@@ -127,6 +128,9 @@ fn all_canonical_classes() -> Vec<(&'static str, Class)> {
127128
("pricelist", pricelist()),
128129
("pricelist_rule", pricelist_rule()),
129130
("unit_of_measure", unit_of_measure()),
131+
// ── 0x07XX — OSINT (AIRO/AIwar dual-use intelligence) ──
132+
("osint_system", osint_system()),
133+
("osint_person", osint_person()),
130134
// ── 0x09XX — health (OGIT Healthcare) ──
131135
("patient", patient()),
132136
("diagnosis", diagnosis()),

crates/ogar-vocab/src/lib.rs

Lines changed: 110 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,6 +1122,16 @@ 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),
11251135
// ── 0x09XX — Health domain (clinical / patient / care) ──
11261136
// medcare-rs Healthcare-namespace promotion (Northstar T9). The 7
11271137
// entities the OGIT `NTO/Healthcare/entities/` TTL ships, projected
@@ -1642,6 +1652,15 @@ pub mod class_ids {
16421652
/// (`ogit.Automation:Trigger`).
16431653
pub const AUTOMATION_TRIGGER: u16 = 0x0C09;
16441654

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;
1663+
16451664
/// Every `(canonical_concept_name, id)` pair the constants vouch for.
16461665
/// Drift-guarded against [`super::CODEBOOK`] by tests in this module.
16471666
pub const ALL: &[(&str, u16)] = &[
@@ -1684,6 +1703,9 @@ pub mod class_ids {
16841703
("pricelist", PRICELIST),
16851704
("pricelist_rule", PRICELIST_RULE),
16861705
("unit_of_measure", UNIT_OF_MEASURE),
1706+
// 0x07XX — OSINT (AIRO/AIwar dual-use intelligence)
1707+
("osint_system", OSINT_SYSTEM),
1708+
("osint_person", OSINT_PERSON),
16871709
// 0x09XX — health
16881710
("patient", PATIENT),
16891711
("diagnosis", DIAGNOSIS),
@@ -2575,6 +2597,10 @@ pub fn all_promoted_classes() -> Vec<Class> {
25752597
pricelist(),
25762598
pricelist_rule(),
25772599
unit_of_measure(),
2600+
// 0x07XX — OSINT arm (AIRO/AIwar dual-use: system + person cards),
2601+
// in class_ids::ALL order.
2602+
osint_system(),
2603+
osint_person(),
25782604
// 0x09XX — health arm (7 OGIT Healthcare concepts), in
25792605
// class_ids::ALL order.
25802606
patient(),
@@ -3684,6 +3710,88 @@ pub fn treatment() -> Class {
36843710
c
36853711
}
36863712

3713+
// ─────────────────────────────────────────────────────────────────────
3714+
// 0x07XX — OSINT domain (AIRO/AIwar dual-use intelligence)
3715+
//
3716+
// Minted from the q2 cockpit V3 SoA bake (`data/osint-v3/`, harvested from
3717+
// `AdaWorldAPI/aiwar-neo4j-harvest`). Two concepts mirror the two GUIDs of a
3718+
// baked node: GUID1 (the AI system, 12 AIRO/VAIR dims) and GUID2 (the person,
3719+
// 5 McClelland/Rubicon dims). Field order IS the SoA tier order — the FieldMask
3720+
// bit basis. The low u16 is the frozen canonical concept; the render-skin
3721+
// APP_PREFIX (`0x1000`, a V3 format signal) is the consumer's half.
3722+
// ─────────────────────────────────────────────────────────────────────
3723+
3724+
/// OSINT **AI system** — the AIRO/AIwar dual-use system card (`osint_system`,
3725+
/// `0x0700`). The 12 dims the V3 SoA bake packs into GUID1's `6×(8:8)` tier
3726+
/// cascade: HEEL `current_status:type`, HIP `military_use:civic_use`,
3727+
/// TWIG `ml_task:ml_type`, LEAF `purpose:capacity`, family `output:impact`,
3728+
/// identity `stakeholder:airo_role`. Attribute declaration order IS the tier
3729+
/// order, so the lifted `ObjectView` FieldMask bit `i` == tier byte `i`. The
3730+
/// reasoning roles (Demand `offer⟷need`, Causality `intent⟷impact`) are a
3731+
/// consumer-side overlay on these names (see q2 `osint_classview.rs`).
3732+
#[must_use]
3733+
pub fn osint_system() -> Class {
3734+
let mut c = Class::new("OsintSystem");
3735+
c.language = Language::Unknown;
3736+
c.canonical_concept = Some("osint_system".to_string());
3737+
c.description =
3738+
Some("An AI system profiled on the AIRO/AIwar dual-use dimensions".to_string());
3739+
c.source_domain = Some("osint".to_string());
3740+
c.source_curator = Some("aiwar".to_string());
3741+
let mut attrs = Vec::with_capacity(12);
3742+
for name in [
3743+
"current_status", // HEEL.hi — state
3744+
"type", // HEEL.lo — identity
3745+
"military_use", // HIP.hi — dual-use need
3746+
"civic_use", // HIP.lo — dual-use need
3747+
"ml_task", // TWIG.hi — the task (need)
3748+
"ml_type", // TWIG.lo — the technique (offer)
3749+
"purpose", // LEAF.hi — intent (explicit)
3750+
"capacity", // LEAF.lo — offer
3751+
"output", // family.hi — offer
3752+
"impact", // family.lo — causality (implicit)
3753+
"stakeholder", // identity.hi — relation
3754+
"airo_role", // identity.lo — actor role (person)
3755+
] {
3756+
let mut a = Attribute::new(name);
3757+
a.type_name = Some("string".to_string());
3758+
attrs.push(a);
3759+
}
3760+
c.attributes = attrs;
3761+
c
3762+
}
3763+
3764+
/// OSINT **person** — the McClelland / Rubicon actor card (`osint_person`,
3765+
/// `0x0701`). The 5 dims the V3 SoA bake packs into GUID2: HEEL `stage:need`,
3766+
/// HIP `receptor:rubicon`, TWIG `motive`. This is the Epstein-archetype lens —
3767+
/// implicit motive (`nPow`/`nAch`/`nAff`) × Rubicon crossing × power receptor —
3768+
/// the Person side of the Person×Situation split (the system card carries the
3769+
/// Situation). Attribute order IS the GUID2 tier order (the FieldMask bit basis).
3770+
#[must_use]
3771+
pub fn osint_person() -> Class {
3772+
let mut c = Class::new("OsintPerson");
3773+
c.language = Language::Unknown;
3774+
c.canonical_concept = Some("osint_person".to_string());
3775+
c.description =
3776+
Some("A person profiled on McClelland motives and the Rubicon action stage".to_string());
3777+
c.source_domain = Some("osint".to_string());
3778+
c.source_curator = Some("aiwar".to_string());
3779+
let mut attrs = Vec::with_capacity(5);
3780+
for name in [
3781+
"stage", // HEEL.hi — Rubicon stage I..IV
3782+
"need", // HEEL.lo — McClelland nPow/nAch/nAff
3783+
"receptor", // HIP.hi — power receptor
3784+
"rubicon", // HIP.lo — Rubicon crossing
3785+
"motive", // TWIG.hi — dominant motive
3786+
] {
3787+
let mut a = Attribute::new(name);
3788+
a.type_name = Some("string".to_string());
3789+
attrs.push(a);
3790+
}
3791+
c.attributes = attrs;
3792+
c
3793+
}
3794+
36873795
/// Visit — a clinical encounter (OGIT `Visit`, `0x0906`). The temporal
36883796
/// container diagnoses / labs / treatments / vitals are recorded within.
36893797
#[must_use]
@@ -4829,8 +4937,8 @@ mod tests {
48294937
],
48304938
"Automation domain set drift — re-sync the consumer coverage gate",
48314939
);
4832-
// An empty (reserved-but-unpopulated) domain yields nothing.
4833-
assert_eq!(concepts_in_domain(ConceptDomain::Osint).count(), 0);
4940+
// The OSINT domain carries the two AIRO/AIwar cards (system + person).
4941+
assert_eq!(concepts_in_domain(ConceptDomain::Osint).count(), 2);
48344942
}
48354943

48364944
#[test]

0 commit comments

Comments
 (0)