Skip to content

feat(cockpit): aiwar dual-use enrichment as a value tenant on the OSINT:Aiwar class#43

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/aiwar-dual-use-tenant
Jun 23, 2026
Merged

feat(cockpit): aiwar dual-use enrichment as a value tenant on the OSINT:Aiwar class#43
AdaWorldAPI merged 1 commit into
mainfrom
claude/aiwar-dual-use-tenant

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

What

Wires the six previously‑unwired aiwar dual‑use axes into the cockpit's OSINT graph as a value tenant on the one OSINT class (classid 0x0700):

field tenant byte encoding
MilitryUse (militaryUse) value[1] primary token → u8 code
civicUse value[2] primary token → u8 code
AIRO_Type (airo:type) value[3] bitset (Subject/Deployer/Developer/Provider/Operator/Supplier)
ML_Type (MLTask/MLTasks) value[4] primary token → u8 code
purpose_vair (purpose) value[5] u8 code
capacity_airo (capacity) value[6] u8 code

Why a tenant (not nodes, not cold metadata)

The aiwar source models these as schema‑as‑data (SchemaAxis/SchemaValue + VALID_FOR). Rather than carry them as separate ontology nodes or as a cold name‑join, they pack as fixed‑width codes into the CANON node's [0u8; 480] value slab — the same tenant region byte 0 (CLASS_ORDER_TENANT) already uses for the class‑label order. Dual‑use becomes a hot, scannable tenant read by the same ClassView, not a cold lookup. An instance "inherits its label by the order it carries in its value tenant" — now it also carries its dual‑use signature there.

The boomerang is in the data

airo:type is a bitset because it is compound: the dataset has nodes that are BOTH AIDeployer AND AISubject — a nation that fields the tech and has it turned on its own people, the techno‑imperial boomerang in one node. airo_role_bits("AIDeployer, AISubject") == 0b011.

Codebooks

Closed enums from the schema‑as‑data value sets (militaryUse 11, civicUse 41, AIRO roles 6, ML 37, purpose 14, capacity 24). Code = 1 + index; 0 = absent/unknown (graceful — enrichment nodes with no aiwar facet read 0). Case‑insensitive; compound axes code their primary token.

Scope (phase 1, asset‑neutral)

Model layer only: write_facet_tenant() populates value[1..=6] in osint_node_rows. The OSO1 wire still emits only value[0], so the baked osint_scene.soa is unchanged — no re‑bake, no risk to the deployed scene. Phase 2 (separate PR): emit the facet tail on the wire, decode it in OsintGraph.tsx, add the AIRO‑role "meta" lens (recolour actors by game‑theory role), and re‑bake.

Tests / verification

  • New unit test dual_use_facets_pack_into_the_value_tenant: a System packs mil/civic/ML/purpose/capacity; a boomerang stakeholder packs Deployer|Subject bits; a System carries no AIRO role and a stakeholder no system facet.
  • Updated the existing tenant‑invariant test for the new value[0..=6] layout.
  • The facet codebook logic (index math + the bitset) was verified standalone: Intelligence→4, compound‑civic primary→27, boomerang→0b011, case‑insensitive, unknown→0.
  • Note: the full cockpit-server crate could not be compiled in the dev sandbox — its closure (lance 7 + datafusion + arrow + aws) exhausts local disk. CI / the Railway build is the integration gate for the full crate.

Plan: claude-notes/plans/2026-06-23-aiwar-dual-use-value-tenant.md

🤖 Generated with Claude Code

https://claude.ai/code/session_01TzqvDqbFRzyx17EkLKBoZF


Generated by Claude Code

…tenant

The aiwar dual-use taxonomy (militaryUse <-> civicUse, AIRO actor role,
MLType, purpose, capacity) was unwired. Rather than separate
SchemaAxis/SchemaValue nodes or cold name-join metadata, pack the facets
as fixed-width codes into value[1..=6] of the CANON node's value slab --
the same tenant region byte 0 (CLASS_ORDER_TENANT) already uses for the
class-label order. Dual-use becomes a hot, scannable value tenant on the
one OSINT class (0x0700), read by the same ClassView.

- facet codebooks (closed enums from the schema-as-data value sets)
- airo:type as a bitset so a node can be BOTH AIDeployer and AISubject --
  the techno-imperial boomerang in one node
- write_facet_tenant() populates value[1..=6] in osint_node_rows
- tests: a System packs mil/civic/ML/purpose/capacity; a boomerang
  stakeholder packs Deployer|Subject bits; the tenant-invariant test
  updated for the new byte 0..=6 layout

Model-layer only (asset-neutral): the OSO1 wire still emits value[0], so
osint_scene.soa is unchanged. The wire tail + cockpit decode + AIRO-role
lens + re-bake follow as phase 2.

Plan: claude-notes/plans/2026-06-23-aiwar-dual-use-value-tenant.md

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TzqvDqbFRzyx17EkLKBoZF
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@coderabbitai

coderabbitai Bot commented Jun 23, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@AdaWorldAPI, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 22 minutes and 4 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

For paid Pro and Pro+ PR reviews, CodeRabbit uses rolling per-developer review limits. Reviews become available again as older review attempts age out of the rolling limit window.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c4025ed5-6afa-472a-bf54-1811660f38c1

📥 Commits

Reviewing files that changed from the base of the PR and between 5237caa and 6f7dbc0.

📒 Files selected for processing (2)
  • claude-notes/plans/2026-06-23-aiwar-dual-use-value-tenant.md
  • crates/cockpit-server/src/osint_gotham.rs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AdaWorldAPI AdaWorldAPI merged commit 8c27a7c into main Jun 23, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants