From 91b63da9cf30a2b617e474d67dcdd065b64e4084 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 10 Oct 2026 10:07:25 +0000 Subject: [PATCH] Mirror OGAR's HIRO app prefix 0x000C as AppPrefix::Hiro OGAR #333 adds HiroPort at app prefix 0x000C, mapping HIRO's ogit/_type wire names onto the nine 0x0CXX automation concepts. The contract mirrors the prefix so a zero-dep consumer can name it without ogar-vocab, as #1438 did for 0x0008-0x000B. - AppPrefix::Hiro = 0x000C in prefix() and from_prefix(); the next free value is now 0x000D, 0x0006 stays unallocated. - app_prefixes_match_ogar_allocation_table pins 0x000C, round-trips Hiro, and checks a HIRO machine renders as 0x0C04_000C. Mapping Hiro to 0x000D turns it red. - No codebook row changes; lance-graph-ogar parity is unaffected. - LATEST_STATE: contract delta entry. lance-graph-contract: 1458 unit tests and every integration test pass. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01VysoWJ6vsyg3wEGc5v7T5v --- .claude/board/LATEST_STATE.md | 4 ++++ crates/lance-graph-contract/src/ogar_codebook.rs | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.claude/board/LATEST_STATE.md b/.claude/board/LATEST_STATE.md index 92934eca4..17899cd99 100644 --- a/.claude/board/LATEST_STATE.md +++ b/.claude/board/LATEST_STATE.md @@ -1,3 +1,7 @@ +## 2026-10-10 — HIRO app prefix mirror on branch `claude/hiro-app-prefix` (unmerged; pairs with OGAR #333) + +- Contract delta (additive): `ogar_codebook::AppPrefix::Hiro` = `0x000C`, matching OGAR's new `HiroPort`, which maps HIRO's `ogit/_type` wire names onto the nine `0x0CXX` automation concepts. No codebook row changes, so `lance-graph-ogar` codebook parity is unaffected; no cross-repo test pairs the two prefixes, so merge order does not matter. `0x0006` stays unallocated and the next free prefix is `0x000D`. `app_prefixes_match_ogar_allocation_table` pins the value; mapping `Hiro` to `0x000D` turns it red. + ## 2026-10-10 — CRM codebook mirror on branch `ccr-1d749cc5-q8s5qs` (unmerged; pairs with OGAR #330) - Contract delta (additive): `ogar_codebook::ConceptDomain::Crm` (high byte `0x05`), 15 `CODEBOOK` rows `crm_contact 0x0501` … `crm_custom_record 0x050F`; `AppPrefix::{Osm 0x0008, WeatherNext 0x0009, Spear 0x000A, HubSpo 0x000B}` (the prefixes OGAR already allocated, now reachable without `ogar-vocab`). `0x0500` re-pinned `Unassigned` → `Crm`; `0x0006` stays unallocated. Parity (`lance-graph-ogar`, 84 + 21 tests) green against the OGAR branch. Order: OGAR #330 first, this straight after. This branch's parity check against OGAR `main` is red until #330 merges, and `main`'s is red from that merge until this one lands. diff --git a/crates/lance-graph-contract/src/ogar_codebook.rs b/crates/lance-graph-contract/src/ogar_codebook.rs index 67d763e2d..36e695d33 100644 --- a/crates/lance-graph-contract/src/ogar_codebook.rs +++ b/crates/lance-graph-contract/src/ogar_codebook.rs @@ -322,6 +322,9 @@ pub enum AppPrefix { Spear, /// `0x000B` — HubSPO (CRM render lens). HubSpo, + /// `0x000C` — HIRO (IT-automation render lens; HIRO's `ogit/_type` wire + /// names onto the `0x0CXX` automation concepts). + Hiro, } impl AppPrefix { @@ -345,11 +348,12 @@ impl AppPrefix { AppPrefix::WeatherNext => 0x0009, AppPrefix::Spear => 0x000A, AppPrefix::HubSpo => 0x000B, + AppPrefix::Hiro => 0x000C, } } /// Resolve an app-prefix value back to its [`AppPrefix`]. `None` for an - /// unallocated value (`0x0006`, `0x000C`+ — reserved, costs nothing until + /// unallocated value (`0x0006`, `0x000D`+ — reserved, costs nothing until /// an app mints its first private class). #[inline] #[must_use] @@ -366,6 +370,7 @@ impl AppPrefix { 0x0009 => Some(AppPrefix::WeatherNext), 0x000A => Some(AppPrefix::Spear), 0x000B => Some(AppPrefix::HubSpo), + 0x000C => Some(AppPrefix::Hiro), _ => None, } } @@ -1061,6 +1066,7 @@ mod tests { assert_eq!(AppPrefix::WeatherNext.prefix(), 0x0009); assert_eq!(AppPrefix::Spear.prefix(), 0x000A); assert_eq!(AppPrefix::HubSpo.prefix(), 0x000B); + assert_eq!(AppPrefix::Hiro.prefix(), 0x000C); for app in [ AppPrefix::Core, AppPrefix::OpenProject, @@ -1073,11 +1079,17 @@ mod tests { AppPrefix::WeatherNext, AppPrefix::Spear, AppPrefix::HubSpo, + AppPrefix::Hiro, ] { assert_eq!(AppPrefix::from_prefix(app.prefix()), Some(app)); } assert_eq!(AppPrefix::from_prefix(0x0006), None); - assert_eq!(AppPrefix::from_prefix(0x000C), None); + assert_eq!(AppPrefix::from_prefix(0x000D), None); + // A HIRO machine renders with the automation concept in the canon half. + assert_eq!( + render_classid_for_concept(AppPrefix::Hiro, "mars_machine"), + Some(0x0C04_000C) + ); } #[test]