a11oy / web /src /data /aerialTwinMilestones.ts
betterwithage's picture
sync(space): complete build context — fix BUILD_ERROR (CTO)
518343a verified
Raw
History Blame
39.6 kB
// AERIAL TWIN — operational milestone packs.
//
// Each pack is one of the 9 milestones in the Aerial Twin doctrine roadmap,
// rendered as its own visitable surface under /a11oy/aerial-twin/<slug>.
// The first milestone (the doctrine page itself) is the parent surface; the
// remaining 8 are defined here.
//
// Each pack documents what shipped today: the operational capability that
// each engine module exposes, the deliverables that depend on it, and the
// guardrails that keep it in scope.
export type MilestoneSlug =
| 'sionna-eval'
| 'vessels-port'
| 'terra-building'
| 'sentra-anomaly'
| 'federated-ledger'
| 'ric-binding'
| 'ai-ran'
| 'attestation-soc2';
export type MilestonePhase = '0\u20136' | '7\u201312' | '13\u201324';
export interface MilestoneKpi {
label: string;
value: string | number;
sub: string;
}
export interface Deliverable {
id: string;
name: string;
oneLine: string;
detail: string;
module: string;
}
export interface EngineCapability {
module: string;
capability: string;
detail: string;
}
export interface MilestoneGuardrail {
layer: string;
control: string;
enforcedBy: string;
}
export interface MilestonePack {
slug: MilestoneSlug;
number: number;
phase: MilestonePhase;
title: string;
tagline: string;
doctrine: string;
kpis: readonly MilestoneKpi[];
deliverables: readonly Deliverable[];
oss: readonly EngineCapability[];
guardrails: readonly MilestoneGuardrail[];
related: readonly MilestoneSlug[];
}
// ---------------------------------------------------------------------------
// 2 \u2014 Sionna RT evaluation harness
// ---------------------------------------------------------------------------
const M2_SIONNA_EVAL: MilestonePack = {
slug: 'sionna-eval',
number: 2,
phase: '0\u20136',
title: 'Sionna RT evaluation harness',
tagline: 'A sandboxed twin engine wrapping public Sionna RT against a single reference scene. Reproducible CIRs, gated by Mirror Eval.',
doctrine:
'Stand up the smallest credible twin engine. One public scene catalogue entry, one ray tracer (Sionna RT, Apache-2.0), one set of materials (ITU-R P.2040). Output channel impulse responses are hash-anchored and reproducible across runs. Every simulation is a Mirror Eval episode with a baseline comparison gate.',
kpis: [
{ label: 'TWIN ENGINE', value: '1', sub: 'Sionna RT 1.x in compartment' },
{ label: 'REFERENCE SCENE', value: '1', sub: 'public catalogue (Munich)' },
{ label: 'CIR REPRODUCIBILITY', value: 'hash', sub: 'scene + ruleset + seed' },
{ label: 'PROMOTION GATE', value: 'Mirror Eval', sub: 'baseline-delta bounded' },
],
deliverables: [
{
id: 'twin-engine',
name: 'Sandboxed twin engine',
oneLine: 'Sionna RT runs inside a Sentra capability compartment with no egress to RF hardware.',
detail: 'Capability compartment strips the egress namespace down to a read-only scene store and a write-only CIR sink. Engine version, ruleset version, and scene hash are captured per call.',
module: 'Sentra Sandbox + A11oy Capability Registry',
},
{
id: 'reference-scene',
name: 'Reference scene catalogue',
oneLine: 'A single public scene (Munich from the open Sionna catalogue) for the v1 engine.',
detail: 'Triangle mesh + per-surface ITU-R P.2040 materials. Scene hash committed to Cerberus per release. No owner-supplied geometry yet \u2014 that lands in milestone 4 (Terra in-building).',
module: 'A11oy Scene Store + Hephaestus Provenance',
},
{
id: 'cir-snapshots',
name: 'Reproducible CIR snapshots',
oneLine: 'Per (tx, rx, frequency, seed) tuple the engine writes a hash-anchored impulse-response tensor.',
detail: 'Outputs sit in the per-tenant evidence partition. Re-running the same tuple yields a byte-identical tensor; any drift triggers a Mirror Eval failure.',
module: 'Cerberus Evidence Vault',
},
{
id: 'mirror-eval-gate',
name: 'Mirror Eval CIR gate',
oneLine: 'Every CIR batch is compared against a frozen baseline. Excess delta blocks downstream promotion.',
detail: 'Default metric is per-tap complex-amplitude L2 distance, with thresholds per scene. Failures are routed to the Sentra Approval Queue.',
module: 'A11oy Mirror Eval + Sentra Approval Queue',
},
{
id: 'planner-action',
name: 'A11oy planner action',
oneLine: 'Planner can invoke aerial.twin.simulate with a typed payload and receive a signed evidence handle back.',
detail: 'Action signature, parameter schema, and output schema are registered in the A11oy capability registry. Constitution admission is required before promotion.',
module: 'A11oy Planner + Capability Registry',
},
],
oss: [
{
module: 'Aerial Twin Engine',
capability: 'Differentiable ray tracer with UTD diffraction and ITU-R P.2040 materials.',
detail: 'Wrapped behind the A11oy capability registry. Scene + ruleset + seed are hashed and committed to Cerberus per call. Engine release is pinned through Hephaestus provenance; no in-tree forks.',
},
{
module: 'A11oy PHY Adapter',
capability: 'OFDM resource grid + CIR ingest matched to the engine\u2019s tensor layout.',
detail: 'Downstream PHY blocks consume CIR tensors directly. The harness ships no learned PHY weights at v1 \u2014 only the typed I/O contract.',
},
{
module: 'Lab Validation Pipeline',
capability: 'Owner-licensed SDR captures decoded with a known flowgraph for ground-truth comparison.',
detail: 'Runs lab-side behind a service boundary. Used to bound engine error against measured signal; never drives production output.',
},
],
guardrails: [
{ layer: 'Sandbox', control: 'Engine has no egress to RF hardware. Outputs are write-only to the evidence vault.', enforcedBy: 'Sentra capability compartment + connector firewall.' },
{ layer: 'Reproducibility', control: 'Scene hash, ruleset hash, seed, and engine version are required for every call.', enforcedBy: 'A11oy capability registry pre-call validator.' },
{ layer: 'Promotion', control: 'No CIR batch is consumed downstream until the Mirror Eval gate passes.', enforcedBy: 'Mirror Eval policy attached to aerial.twin.simulate.' },
],
related: ['vessels-port', 'terra-building'],
};
// ---------------------------------------------------------------------------
// 3 \u2014 Vessels port-coverage demo
// ---------------------------------------------------------------------------
const M3_VESSELS_PORT: MilestonePack = {
slug: 'vessels-port',
number: 3,
phase: '0\u20136',
title: 'Vessels port-coverage demo',
tagline: 'One reference port. Per-berth coverage maps and vessel-to-shore link budgets, signed and bound to the Vessels asset registry.',
doctrine:
'The first vertical the twin serves. A single reference port (public OSM mesh), two bands (mid-band and mmWave), and four sea-state regimes. Output is a per-berth heatmap + per-route link-budget timeline + a signed coverage attestation per berth, bound to the Vessels asset ID.',
kpis: [
{ label: 'REFERENCE PORT', value: '1', sub: 'public OSM mesh' },
{ label: 'BANDS', value: '2', sub: '3.5 GHz mid + 28 GHz mmWave' },
{ label: 'SEA-STATE REGIMES', value: '4', sub: 'calm \u2192 rough' },
{ label: 'ATTESTATION SIG', value: 'Cerberus', sub: 'bound to asset ID' },
],
deliverables: [
{
id: 'port-mesh',
name: 'Reference port mesh',
oneLine: 'Triangle mesh of a single port assembled from public cadastral and OSM Buildings data.',
detail: 'Per-surface materials drawn from the ITU-R P.2040 catalogue. Mesh is checked into the scene store with a hash and version. No proprietary terminal scans, no scraped vendor BIM.',
module: 'Aerial Twin Scene Store + Hephaestus',
},
{
id: 'coverage-heatmap',
name: 'Per-berth coverage heatmap',
oneLine: 'Received-power map across each berth, computed for both the mid-band and mmWave band.',
detail: 'Coverage map is a regular grid at 1 m spacing per berth. Output rendered in the Vessels surface as a layered overlay on the existing port plan.',
module: 'Vessels + Aerial Twin Engine',
},
{
id: 'link-budget',
name: 'Vessel-to-shore link budget timeline',
oneLine: 'For each scheduled arrival, a timeline of expected link budget under the prevailing sea state and weather.',
detail: 'Pulls vessel ETA from the Vessels schedule, sea state from the existing weather feed, and CIR distributions from the twin. Output is a per-arrival risk score on the Vessels operations board.',
module: 'Vessels Schedule + Aerial Twin Engine',
},
{
id: 'attestation',
name: 'Signed coverage attestation',
oneLine: 'Per-berth attestation PDF: signed, hash-bound to the asset ID and the scene version.',
detail: 'Generated by the existing investor-doc PDF renderer pattern. Stored in Cerberus with a signature chain back to the engine + scene + ruleset.',
module: 'Vessels + Cerberus + PDF renderer',
},
{
id: 'asset-binding',
name: 'Vessels asset-registry binding',
oneLine: 'Every twin output is keyed to a Vessels asset ID (berth, crane, mooring point).',
detail: 'No floating outputs. If the asset is retired in Vessels, the attestation moves to historical evidence and is excluded from active operations.',
module: 'Vessels Asset Registry + Cerberus',
},
],
oss: [
{
module: 'Aerial Twin Engine \u2014 Coverage Map',
capability: 'Per-cell received-power computation across a regular receiver grid with antenna-pattern application per transmitter.',
detail: 'Maps render directly into the Vessels surface as the canonical output. Each map is hash-bound to the scene and ruleset versions; no notebook artefacts.',
},
{
module: 'A11oy gNB Twin',
capability: 'Software gNB driven by the twin\u2019s CIR feed, with FAPI-style PHY/MAC split and slot-based scheduling.',
detail: 'Acts as the radio counterpart to the Vessels schedule. Pinned tag, vendored patches via Hephaestus, no live emission.',
},
{
module: 'Sea-State Link Budget',
capability: 'BLER curves derived from twin CIRs under each of the four sea-state regimes.',
detail: 'Each timeline tap carries its scene + sea-state context. Surfaces on the Vessels operations board as a per-arrival risk score.',
},
],
guardrails: [
{ layer: 'Inputs', control: 'Public OSM and cadastral data only. Owner-provided port plans flow through the gated ingestion in milestone 4.', enforcedBy: 'A11oy ingestion gate.' },
{ layer: 'Emission', control: 'Twin reads, never transmits. Vessels asset registry is read-only from the twin\u2019s side.', enforcedBy: 'Sentra connector firewall.' },
{ layer: 'Asset binding', control: 'No twin output is published without a live Vessels asset ID.', enforcedBy: 'Cerberus emit gate.' },
],
related: ['sionna-eval', 'sentra-anomaly', 'attestation-soc2'],
};
// ---------------------------------------------------------------------------
// 4 \u2014 Terra in-building twin
// ---------------------------------------------------------------------------
const M4_TERRA_BUILDING: MilestonePack = {
slug: 'terra-building',
number: 4,
phase: '7\u201312',
title: 'Terra in-building twin',
tagline: 'Single-floor mmWave + sub-6 coverage twin for one reference asset, with owner-provided geometry intake and a signed pre-leasing attestation.',
doctrine:
'The first vertical that consumes owner-provided geometry. A single class-A office floor, mmWave + sub-6 coverage per square meter, mmWave shadowing analysis per workspace, and a signed pre-leasing attestation. Owner geometry never re-shared across tenants.',
kpis: [
{ label: 'REFERENCE FLOOR', value: '4500 m\u00b2', sub: 'class-A office, single floor' },
{ label: 'BANDS', value: '2', sub: 'sub-6 + 28 GHz mmWave' },
{ label: 'GRID RESOLUTION', value: '0.5 m', sub: 'coverage per square' },
{ label: 'ATTESTATION', value: 'PDF', sub: 'pre-leasing artefact' },
],
deliverables: [
{
id: 'floor-mesh',
name: 'Reference floor mesh',
oneLine: 'A single class-A office floor expressed as an OpenUSD scene with per-surface materials.',
detail: 'Mesh derived from owner-provided floor plan plus the public ITU-R P.2040 material catalogue. Per-tenant: never shared across customers.',
module: 'Terra Asset Registry + Aerial Twin Scene Store',
},
{
id: 'coverage-grid',
name: 'Coverage grid per square meter',
oneLine: 'Sub-6 and mmWave received-power maps at 0.5 m grid spacing across the floor.',
detail: 'Output overlays directly onto the Terra floor view. Per-cell coverage value is bound to the scene + ruleset hash for reproducibility.',
module: 'Terra + Aerial Twin Engine',
},
{
id: 'shadowing',
name: 'mmWave shadowing analysis',
oneLine: 'Per-workspace shadowing profile that flags blockage hotspots before installation.',
detail: 'Computed from the diffraction + reflection path types in the twin. Surfaces in the Terra workspace planner as a coverage risk per seat.',
module: 'Terra Workspace Planner',
},
{
id: 'attestation-pdf',
name: 'Pre-leasing attestation PDF',
oneLine: 'A signed, brand-styled PDF the owner can attach to a lease packet.',
detail: 'Built on the existing investor-doc PDF renderer pattern. Cover page + per-band coverage map + workspace shadowing + scene hash + signature chain.',
module: 'Terra + Cerberus + PDF renderer',
},
{
id: 'geometry-intake',
name: 'Owner-provided geometry intake',
oneLine: 'Sandboxed ingestion path for owner-supplied floor plans (DWG / IFC / GLB).',
detail: 'Conversion runs in a Sentra capability compartment with no egress. Output is committed to the per-tenant scene partition only.',
module: 'Sentra Sandbox + A11oy Ingestion Gate',
},
],
oss: [
{
module: 'Aerial Twin Engine \u2014 Indoor Path Tracer',
capability: 'Indoor path tracing with UTD diffraction and scattering for mmWave shadowing modelling.',
detail: 'Output renders natively into the Terra floor view. Per-tenant scene partition prevents cross-customer leakage.',
},
{
module: 'A11oy DAS Topology Generator',
capability: 'Distributed antenna system topology generated from the floor mesh with indoor gNB simulation.',
detail: 'Owner can A/B alternate antenna placements before installation. Topology is data-driven from the scene rather than hand-configured.',
},
{
module: 'A11oy Real-time PHY Backend (optional)',
capability: 'Disciplined real-time PHY/MAC backend, selectable per tenant where service-boundary licensing is acceptable.',
detail: 'Lives strictly behind a network service boundary. Never linked into closed-source binaries; off by default.',
},
],
guardrails: [
{ layer: 'Tenant scope', control: 'Owner-provided geometry stays on-tenant. Federated layer pools statistics only (milestone 6).', enforcedBy: 'Cerberus per-tenant partition.' },
{ layer: 'Ingestion', control: 'All owner geometry conversion runs in a sandboxed compartment with no network egress.', enforcedBy: 'Sentra capability compartment.' },
{ layer: 'Provenance', control: 'Every PDF carries a signature chain back to the scene + ruleset + engine version.', enforcedBy: 'Hephaestus provenance gate + Cerberus.' },
],
related: ['vessels-port', 'attestation-soc2'],
};
// ---------------------------------------------------------------------------
// 5 \u2014 Sentra RF anomaly classifier
// ---------------------------------------------------------------------------
const M5_SENTRA_ANOMALY: MilestonePack = {
slug: 'sentra-anomaly',
number: 5,
phase: '7\u201312',
title: 'Sentra RF anomaly classifier',
tagline: 'A twin-vs-reality delta classifier (rogue cell, jammer, IMSI catcher). Promoted via Mirror Eval. Findings flow into the Sentra Approval Queue.',
doctrine:
'Use the twin as the predicted baseline. Compare against owner-licensed spectrum captures. Anything the twin says cannot exist becomes a finding for Sentra to triage. Three classes at v1: rogue base station, broadband jamming, IMSI catcher.',
kpis: [
{ label: 'CLASSES', value: '3', sub: 'rogue cell · jammer · IMSI catcher' },
{ label: 'DELTA METRIC', value: 'CIR L2', sub: 'per-tap distance' },
{ label: 'PROMOTION GATE', value: 'Mirror Eval', sub: 'bounded false-positive rate' },
{ label: 'EVIDENCE PATH', value: 'Cerberus', sub: 'append-only ledger' },
],
deliverables: [
{
id: 'delta-engine',
name: 'Twin-vs-reality delta engine',
oneLine: 'Computes a per-tap complex-amplitude L2 distance between predicted CIR and observed CIR.',
detail: 'Observed CIRs come from owner-licensed spectrum captures only. Engine outputs a per-(time, location, frequency) delta tensor.',
module: 'A11oy Mirror Eval + Aerial Twin Engine',
},
{
id: 'classifier',
name: 'Three-class anomaly classifier',
oneLine: 'Rogue cell, broadband jamming, and IMSI catcher classes at v1.',
detail: 'Trained on synthetic adversarial CIRs generated in twin only. Classifier head is small and explainable; per-class scores are surfaced in the Sentra finding card.',
module: 'Sentra Risk Engine + Silver RL Planner',
},
{
id: 'promotion-gate',
name: 'Mirror Eval promotion gate',
oneLine: 'Classifier cannot ship to production without passing a frozen-eval false-positive bound.',
detail: 'Default v1 bound: false-positive rate < 1% on a frozen evaluation set of legitimate captures from each tenant.',
module: 'A11oy Mirror Eval',
},
{
id: 'approval-queue',
name: 'Approval Queue integration',
oneLine: 'Every finding lands in the Sentra Approval Queue with the twin baseline and the captured signal as evidence.',
detail: 'Operator can accept, dismiss with reason, or escalate. All actions are written to the Cerberus ledger.',
module: 'Sentra Approval Queue + Cerberus',
},
{
id: 'evidence-binding',
name: 'Cerberus evidence binding',
oneLine: 'Every finding carries the scene hash, ruleset, classifier version, capture-source attestation, and operator decision.',
detail: 'Evidence chain is append-only and externally attestable. Required for any cross-vertical promotion of the finding.',
module: 'Cerberus Evidence Vault',
},
],
oss: [
{
module: 'A11oy Differentiable Delta Path',
capability: 'End-to-end differentiable PHY blocks for the twin-vs-reality delta computation.',
detail: 'Lets the classifier head train jointly against twin and observed CIRs. No learned PHY weights ship in the runtime; only the typed graph.',
},
{
module: 'Lab Capture Pipeline',
capability: 'Owner-licensed SDR capture \u2192 flowgraph \u2192 framed CIR estimate, handed to Mirror Eval as a typed batch.',
detail: 'Runs lab-side behind a service boundary. Capture provenance is attested by Hephaestus before any batch enters Mirror Eval.',
},
{
module: 'A11oy xApp Candidate Registration',
capability: 'Classifier is packaged as a twin-trained xApp candidate with manifest, lifecycle hooks, and policy slots.',
detail: 'At this milestone the classifier stops at a Sentra finding. Promotion to a real RIC is the milestone-7 deliverable.',
},
],
guardrails: [
{ layer: 'Captures', control: 'Real-world captures must be owner-licensed or owner-owned. No third-party spectrum scraping.', enforcedBy: 'A11oy ingestion gate + Hephaestus capture attestation.' },
{ layer: 'Sandbox', control: 'All adversarial training runs in twin only. No live emission from any classifier path.', enforcedBy: 'Sentra capability compartment.' },
{ layer: 'Decision', control: 'Findings are advisory until a human operator approves. No autonomous take-down.', enforcedBy: 'Sentra Approval Queue + Constitution rule.' },
],
related: ['sionna-eval', 'ric-binding', 'attestation-soc2'],
};
// ---------------------------------------------------------------------------
// 6 \u2014 Federated RF episode ledger v1
// ---------------------------------------------------------------------------
const M6_FEDERATED_LEDGER: MilestonePack = {
slug: 'federated-ledger',
number: 6,
phase: '7\u201312',
title: 'Federated RF episode ledger v1',
tagline: 'Tenants opt in to share aggregated CIR statistics, never raw captures. Contributions earn Defender Credits.',
doctrine:
'A federated layer that pools channel statistics across consenting tenants without ever moving raw spectrum, scene geometry, or per-vessel / per-floor identifiers off-tenant. Contribution earns Defender Credits in the existing economy.',
kpis: [
{ label: 'POOL UNIT', value: 'CIR stats', sub: 'per-band per-environment' },
{ label: 'RAW EGRESS', value: '0 B', sub: 'never leaves tenant' },
{ label: 'CONSENT MODEL', value: 'opt-in', sub: 'lifecycle managed' },
{ label: 'INCENTIVE', value: 'Defender Credits', sub: 'per accepted contribution' },
],
deliverables: [
{
id: 'aggregator',
name: 'Per-tenant CIR statistics aggregator',
oneLine: 'On-tenant aggregator that emits descriptors (delay-spread distribution, K-factor, pathloss exponents) \u2014 never raw CIRs.',
detail: 'Runs inside the tenant\u2019s capability compartment. Output schema is fixed and auditable. Differential-privacy noise is added before emission for sensitive descriptors.',
module: 'A11oy Federation + Sentra Sandbox',
},
{
id: 'pooling-contract',
name: 'Cross-tenant pooling contract',
oneLine: 'A typed federation contract specifying which descriptors flow, at what cadence, with what privacy budget.',
detail: 'Versioned alongside the Constitution. Any change requires Constitution review and dual-key approval.',
module: 'A11oy Federation Contract + Constitution',
},
{
id: 'defender-credits',
name: 'Defender Credits accrual',
oneLine: 'Every accepted contribution earns Defender Credits in the existing economy.',
detail: 'Credit value scales with novelty (new environment class) and quality (passes the federation Mirror Eval). Spend paths reuse the existing Defender Credits surface.',
module: 'Defender Credits',
},
{
id: 'consent-lifecycle',
name: 'Tenant opt-in / opt-out lifecycle',
oneLine: 'Tenants can join, pause, and withdraw. Withdrawal removes the tenant from future pooling and is reversible.',
detail: 'Withdrawal does not retroactively unpool past contributions, since those are already aggregated. The audit trail makes this explicit.',
module: 'A11oy Federation + Tenant Admin',
},
{
id: 'partition',
name: 'Cerberus per-tenant partition',
oneLine: 'Raw CIRs and scene geometry are stored only in the tenant\u2019s Cerberus partition.',
detail: 'Federation pooling reads only the aggregator output, never the raw partition. Partition boundaries are enforced at the storage layer.',
module: 'Cerberus Evidence Vault',
},
],
oss: [
{
module: 'A11oy Statistical Descriptor Aggregator',
capability: 'Per-tenant descriptors of channel impulse responses (delay spread, K-factor, doppler) emitted with a fixed, auditable schema.',
detail: 'Differential-privacy noise applied before emission. Pool consumers see only the joint distribution, never per-tenant samples.',
},
{
module: 'A11oy Federation Contract',
capability: 'Typed, versioned, signed governance object describing what flows, at what cadence, with what privacy budget.',
detail: 'Contract version is committed to Cerberus before activation. Any change requires Constitution review and dual-key approval.',
},
{
module: 'A11oy Pooling Trainer',
capability: 'Pool consumers train locally with the pooled distribution as a prior.',
detail: 'No gradients are federated and no raw data crosses tenant boundaries; only the smaller, less reversible descriptor distribution is shared.',
},
],
guardrails: [
{ layer: 'Egress', control: 'No raw CIR, no raw scene, no per-asset identifier ever leaves the tenant.', enforcedBy: 'A11oy federation ingress filter + Cerberus partition.' },
{ layer: 'Privacy', control: 'Differential-privacy noise budget per descriptor family; budget exhaustion blocks further contributions for the period.', enforcedBy: 'Aggregator policy + audit log.' },
{ layer: 'Consent', control: 'Tenant must opt in explicitly. Withdrawal is reversible going forward, never retroactive.', enforcedBy: 'Tenant admin + signed contract version.' },
{ layer: 'Incentive', control: 'Defender Credits are earned only for contributions that pass the federation Mirror Eval gate.', enforcedBy: 'Defender Credits gate.' },
],
related: ['sentra-anomaly', 'ric-binding', 'attestation-soc2'],
};
// ---------------------------------------------------------------------------
// 7 \u2014 O-RAN SC RIC binding
// ---------------------------------------------------------------------------
const M7_RIC_BINDING: MilestonePack = {
slug: 'ric-binding',
number: 7,
phase: '13\u201324',
title: 'O-RAN SC RIC binding',
tagline: 'Twin and real RAN expose the same E2 / A1 / O1 interface to A11oy-managed xApps. Promotion is twin \u2192 staging \u2192 prod with dual-key approval.',
doctrine:
'Wire the twin to the standard control plane. xApps trained in twin see the same E2 telemetry shape as production. Promotion is a gated lane: twin \u2192 staging \u2192 prod, dual-key approval, with a 24-hour staging soak.',
kpis: [
{ label: 'INTERFACES', value: '3', sub: 'E2 · A1 · O1' },
{ label: 'PROMOTION LANE', value: '3 stages', sub: 'twin \u2192 staging \u2192 prod' },
{ label: 'APPROVAL', value: 'dual-key', sub: 'platform + vertical owner' },
{ label: 'STAGING SOAK', value: '24h', sub: 'minimum' },
],
deliverables: [
{
id: 'e2-termination',
name: 'E2 termination point',
oneLine: 'Twin emits E2 telemetry indistinguishable from a production RAN to xApps.',
detail: 'Built on the O-RAN SC ric-plt termination pattern. Service models supported at v1: KPM (Key Performance Measurement), RC (RAN Control).',
module: 'A11oy RIC Adapter + Aerial Twin Engine',
},
{
id: 'a1-policy',
name: 'A1 policy receiver',
oneLine: 'Non-RT RIC policy can target the twin first, then promote to real RAN.',
detail: 'A1 policy types are versioned and signed. Constitution review required to register a new policy type.',
module: 'A11oy A1 Receiver + Constitution',
},
{
id: 'o1-management',
name: 'O1 management interface',
oneLine: 'Twin exposes the standard O1 management surface for configuration and FCAPS.',
detail: 'Read-only at v1: configuration is sourced from the A11oy capability registry rather than O1 NETCONF writes. O1 alarms feed the Sentra finding stream.',
module: 'A11oy O1 Adapter + Sentra',
},
{
id: 'xapp-registry',
name: 'Twin-trained xApp registry',
oneLine: 'Every twin-trained xApp is registered with manifest, training-data lineage, and Mirror Eval result.',
detail: 'Registry entries are append-only. Re-registration with the same name requires a Constitution review.',
module: 'A11oy Capability Registry + Cerberus',
},
{
id: 'promotion-lane',
name: 'Twin \u2192 staging \u2192 prod promotion lane',
oneLine: 'A typed lane with dual-key approval and a 24h staging soak before any production xApp activation.',
detail: 'Each transition emits a signed evidence record. A staging failure rolls back automatically; a prod failure pages the on-call and rolls back.',
module: 'A11oy Promotion Engine + Sentra Approval Queue',
},
],
oss: [
{
module: 'A11oy RIC Adapter',
capability: 'Near-RT RIC termination: E2 termination, subscription manager, xApp orchestration.',
detail: 'Subscriptions are managed by the A11oy capability registry so they are typed and approval-gated rather than free-form.',
},
{
module: 'A11oy xApp Template',
capability: 'xApp lifecycle hooks, RMR messaging, configuration loading, plus a Constitution-bound manifest.',
detail: 'Every xApp ships with a required Mirror Eval reference and a signed provenance footer before it can register.',
},
{
module: 'A11oy A1 Receiver',
capability: 'Typed A1 policy objects with lifecycle and conflict resolution.',
detail: 'Policies must register as typed capabilities. Conflicts defer to the Sentra Approval Queue rather than a silent override.',
},
{
module: 'A11oy Deployment Manager',
capability: 'Helm-based xApp packaging and lifecycle management.',
detail: 'Deployments are gated by the A11oy promotion lane. Helm charts are built reproducibly and committed to Cerberus before activation.',
},
],
guardrails: [
{ layer: 'Promotion', control: 'No xApp lands in production without dual-key approval and a 24h staging soak.', enforcedBy: 'A11oy promotion engine + Sentra Approval Queue.' },
{ layer: 'Configuration', control: 'O1 is read-only at v1; configuration writes flow through the A11oy capability registry instead.', enforcedBy: 'A11oy O1 adapter policy.' },
{ layer: 'Provenance', control: 'Every E2 subscription, A1 policy, and xApp deployment carries a signed provenance footer.', enforcedBy: 'Hephaestus + Cerberus.' },
],
related: ['sentra-anomaly', 'ai-ran'],
};
// ---------------------------------------------------------------------------
// 8 \u2014 AI-RAN inference path
// ---------------------------------------------------------------------------
const M8_AI_RAN: MilestonePack = {
slug: 'ai-ran',
number: 8,
phase: '13\u201324',
title: 'AI-RAN inference path',
tagline: 'Twin-trained ML blocks (beam prediction, channel estimation) served via a CUDA-accelerated runtime behind the connector firewall.',
doctrine:
'The first ML blocks promoted from twin to inference. Beam prediction and channel estimation at v1, both trained in twin, both compared A/B against the classical baseline. Runtime sits behind the Sentra connector firewall.',
kpis: [
{ label: 'ML BLOCKS', value: '2', sub: 'beam · channel-est' },
{ label: 'TRAINING SOURCE', value: 'twin only', sub: 'no production data' },
{ label: 'A/B BASELINE', value: 'classical', sub: 'always co-deployed' },
{ label: 'PROVENANCE', value: 'per batch', sub: 'manifest in Cerberus' },
],
deliverables: [
{
id: 'beam-predictor',
name: 'Beam predictor (twin-trained)',
oneLine: 'Predicts the best beam from sub-6 reference signals, trained against twin-derived ground truth.',
detail: 'Architecture: small ResNet over reference-signal magnitude, output is a beam-index distribution. Mirror Eval gate enforces a top-k accuracy floor against held-out twin scenes.',
module: 'A11oy Model Router + Aerial Twin Engine',
},
{
id: 'channel-estimator',
name: 'Channel estimator (twin-trained)',
oneLine: 'Replaces the classical least-squares estimator on a per-symbol basis where it beats classical in twin.',
detail: 'Output is the same complex CIR tensor as the classical block. Co-deployed with classical estimator; A/B selector decides per-frame.',
module: 'A11oy Model Router',
},
{
id: 'runtime',
name: 'Inference runtime sandbox',
oneLine: 'CUDA-accelerated inference in a Sentra capability compartment with pinned model artefacts.',
detail: 'Compartment has read-only access to the model store and write-only access to the inference-log sink. Model loading is gated by signature verification.',
module: 'Sentra Sandbox + A11oy Model Router',
},
{
id: 'firewall',
name: 'Connector-firewall path',
oneLine: 'All inference traffic flows through Sentra\u2019s connector firewall with per-block egress allowlists.',
detail: 'Beam predictor and channel estimator have no egress beyond the inference-log sink and the model-router callback.',
module: 'Sentra Connector Firewall',
},
{
id: 'provenance',
name: 'Per-batch provenance manifest',
oneLine: 'Every inference batch carries a manifest: model version, training scene set, ruleset, runtime version.',
detail: 'Manifest is signed and committed to Cerberus. Required for any cross-vertical promotion of an inference result.',
module: 'Hephaestus + Cerberus',
},
],
oss: [
{
module: 'A11oy ML PHY Block Contracts',
capability: 'Tensor-layout contracts for channel estimator, MIMO detector, and OFDM resource grid that match the twin\u2019s output.',
detail: 'Models trained against twin CIRs are drop-in. Runtime is hardened and sandboxed; no notebook-grade execution.',
},
{
module: 'A11oy Inference Runtime',
capability: 'CUDA-accelerated PHY runtime with classical baseline + ML block + A/B selector co-deployed in every slot.',
detail: 'Runtime sits behind the Sentra connector firewall. ML block can be disabled in one switch without taking the slot offline.',
},
{
module: 'A11oy Classical Baseline',
capability: 'Classical channel estimation and MIMO detection blocks served as the always-on A/B reference.',
detail: 'Baseline is never disabled. The A/B selector defers to classical on any twin-vs-prod drift detected by Mirror Eval.',
},
],
guardrails: [
{ layer: 'Training data', control: 'Models are trained on twin-derived data only at v1. No production data ingestion.', enforcedBy: 'A11oy model registry policy.' },
{ layer: 'A/B safety', control: 'Classical baseline is always co-deployed. ML block can be disabled in one switch.', enforcedBy: 'A11oy Model Router.' },
{ layer: 'Egress', control: 'Inference compartment has no network egress beyond the log sink and router callback.', enforcedBy: 'Sentra connector firewall.' },
{ layer: 'Provenance', control: 'Every batch carries a signed manifest covering model + training set + ruleset + runtime.', enforcedBy: 'Hephaestus + Cerberus.' },
],
related: ['ric-binding', 'attestation-soc2'],
};
// ---------------------------------------------------------------------------
// 9 \u2014 Coverage attestation as SOC2 artefact
// ---------------------------------------------------------------------------
const M9_ATTESTATION_SOC2: MilestonePack = {
slug: 'attestation-soc2',
number: 9,
phase: '13\u201324',
title: 'Coverage attestation as SOC2 artefact',
tagline: 'Signed coverage attestations cross-referenced into the SOC 2 Type II control surface as evidence of connectivity controls.',
doctrine:
'Turn the per-vessel and per-property attestations into recurring SOC 2 evidence. CC6 (logical access) and CC7 (system operations) families benefit. Attestations are versioned, signed, and refreshed on a schedule the auditor can rely on.',
kpis: [
{ label: 'CONTROL FAMILIES', value: '2', sub: 'CC6 · CC7' },
{ label: 'ATTESTATION SIG', value: 'Cerberus', sub: 'externally verifiable' },
{ label: 'REFRESH', value: 'annual', sub: 'plus on material change' },
{ label: 'AUDIT EXPORT', value: 'JSONL+PDF', sub: 'machine + human' },
],
deliverables: [
{
id: 'control-mapping',
name: 'SOC 2 control mapping',
oneLine: 'Mapping table that ties each attestation field to a SOC 2 CC6 / CC7 control statement.',
detail: 'Versioned alongside the Constitution. Audited by the same review path as any policy change. Mapping diff appears in the auditor export.',
module: 'Sentra Compliance Engine + Constitution',
},
{
id: 'pdf-generator',
name: 'Per-vertical signed PDF generator',
oneLine: 'One generator with vertical-specific cover sheets (Vessels berth, Terra parcel).',
detail: 'Built on the existing investor-doc PDF renderer pattern. Cover sheet, evidence block, signature chain, scene + ruleset hash.',
module: 'Cerberus + PDF renderer',
},
{
id: 'evidence-binding',
name: 'Cerberus evidence vault binding',
oneLine: 'Every attestation is committed to the Cerberus append-only ledger with a stable evidence ID.',
detail: 'Auditor can dereference any evidence ID to retrieve the signed bundle (PDF + JSON + provenance footer).',
module: 'Cerberus Evidence Vault',
},
{
id: 'audit-export',
name: 'Audit trail export',
oneLine: 'JSONL + PDF export for the auditor: every attestation, every approval, every revocation.',
detail: 'Export is reproducible from Cerberus and is itself signed. Auditor receives the export plus the signature.',
module: 'Sentra Compliance Engine',
},
{
id: 'recertification',
name: 'Annual recertification scheduler',
oneLine: 'Automated reminders + a forced refresh on material change (scene, ruleset, or vertical scope).',
detail: 'Recertification job runs on the existing durable-job runner. Failure to recertify within the grace window flags the attestation as expired in Cerberus.',
module: 'A11oy Durable Jobs + Cerberus',
},
],
oss: [
{
module: 'Cerberus Config-as-Data',
capability: 'Attestations are typed, versioned, signed configuration objects with a deterministic rollback path.',
detail: 'Each version is signed and committed before publication. Rollback is a vault operation, not a redeploy.',
},
{
module: 'Aerial Twin Reproducibility Contract',
capability: 'Same scene + ruleset + seed yields the same output, every time, on demand.',
detail: 'The auditor can request a re-derivation of any attestation from its inputs. Re-derivation is the evidentiary backbone of the SOC 2 mapping.',
},
],
guardrails: [
{ layer: 'Provenance', control: 'Every attestation carries a full provenance footer: scene + ruleset + engine + ML versions + operator identity.', enforcedBy: 'Hephaestus + Cerberus.' },
{ layer: 'Reproducibility', control: 'Auditor can request re-derivation from the inputs at any time.', enforcedBy: 'A11oy Mirror Eval + Aerial Twin Engine.' },
{ layer: 'Lifecycle', control: 'Attestations expire and must be recertified annually or on material change.', enforcedBy: 'Durable-job recertification + Cerberus expiry gate.' },
],
related: ['vessels-port', 'terra-building', 'sentra-anomaly'],
};
// ---------------------------------------------------------------------------
// REGISTRY
// ---------------------------------------------------------------------------
export const AERIAL_TWIN_MILESTONES: readonly MilestonePack[] = [
M2_SIONNA_EVAL,
M3_VESSELS_PORT,
M4_TERRA_BUILDING,
M5_SENTRA_ANOMALY,
M6_FEDERATED_LEDGER,
M7_RIC_BINDING,
M8_AI_RAN,
M9_ATTESTATION_SOC2,
];
export function getMilestonePack(slug: string): MilestonePack | undefined {
return AERIAL_TWIN_MILESTONES.find((m) => m.slug === slug);
}