Spaces:
Running
Running
| // 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); | |
| } | |