Skip to main content

Comprehensive Rust Migration Plan - Full Stack

Date: 2025-10-28 (Updated: 2025-10-30)
Strategy: Complete Python → Rust migration (API + Services + BDU)
Goal: Pure Rust stack, no intermediate hybrid state
Timeline: 16-20 weeks (4-5 months)


Migration Status Overview​

ComponentStatusCompletionWhat's DoneWhat's Missing
Phase 0: Preparation🟡 Partial90%Dead code analysis (86/148 methods unused!), Dependency mapping, Priority orderingExecute cleanup (delete dead code)
Phase 1: Core Data Layer✅ Complete100%Models (Neuron, Synapse, CorticalArea), all data structures-
Phase 2: BDU Business Logic✅ Complete100%All 62 active methods, genome loading, neuroembryogenesis, NPU delegation, all P1-P6 done-
Phase 3: Service Layer✅ Complete100%All 6 core services complete (Genome, Connectome, System, Analytics, Runtime, Neuron)Agent & Network services deferred (infrastructure-only)
Phase 4: API Layer✅ Complete100%All 60 endpoints wired to service layer, HTTP server, OpenAPI/Swagger, full error handlingZMQ adapter (optional, can be added later)
Phase 5: Testing🟡 Started10%Unit tests for BDU/EVO, basic integration testsContract tests, full integration, performance
Phase 6: Deployment❌ Not Started0%-Production setup, Docker, K8s
Extra: Transports✅ Complete100%feagi-transports crate, ZMQ client/serverUDP, SHM (future)
Extra: EVO✅ Complete100%Genome parser, saver, validator, signatures, templates, flat converter-
OVERALL🟢 Near Complete~80%EVO, Neuroembryogenesis, Service Layer, API Layer, BDU 100% Complete!~20% remaining: Testing, deployment

Detailed Component Status​

Crates Status​

CrateStatusWhat ExistsWhat's MissingUsable?
feagi-types✅ CompleteAll models (Neuron, Synapse, CorticalArea)-✅ Yes
feagi-burst-engine✅ CompleteRustNPU, SIMD batch neuron/synapse creationMinor features✅ Yes
feagi-state-manager✅ CompleteState tracking, atomic ops-✅ Yes
feagi-brain-development✅ 100%ConnectomeManager (62/62 methods), Neuroembryogenesis (4 stages), NPU integration, all CRUD operations complete-✅ Production Ready
feagi-services✅ 100%All 6 core services (Genome, Connectome, System, Analytics, Runtime, Neuron) - fully functionalAgentService, NetworkService (deferred - infra only)✅ Production Ready
feagi-api✅ 100%All 60 endpoints fully wired to services, HTTP/Axum server, OpenAPI/Swagger, error handlingZMQ adapter (optional)✅ Production Ready
feagi-io✅ 95%ZMQ streams, sensory/motor, feagi-transports integrationMinor cleanup✅ Yes
feagi-transports✅ CompleteZMQ client/server, traitsUDP, SHM (future)✅ Yes
feagi-evolutionary✅ CompleteGenome parser/saver, validator, signatures, templates, flat-to-hierarchical converter-✅ Yes
feagi-plasticity❌ 0%-Everything (synaptic learning)❌ No

BDU Methods Status (62 active, 86 dead)​

Phase 0 Audit Results:

  • Total methods in connectome_manager.py: 148
  • Active methods (have external callers): 62 (42%)
  • Dead code (zero external usage): 86 (58%!)
    • 36 private helper methods (internal)
    • 50 public methods with zero usage (DELETE)

Active Methods by Priority:

PriorityCategoryCountStatusNotes
🔴 P1Foundation (init/load/save)6✅ Completeinstance, load_from_genome_file, load_from_genome, save_to_json, prepare_for_new_genome, resize_for_genome
🟠 P2Cortical Area Management6✅ Completeadd_cortical_area, delete_cortical_area, get_cortical_area, update_cortical_area_properties, get_cortical_id_for_idx, get_cortical_idx_for_id
🟡 P3Neuron Operations10✅ Complete✅ create_neurons_for_area, ✅ add_neuron, ✅ delete_neuron, ✅ get_neuron_count, ✅ batch_create_neurons, ✅ delete_neurons_batch, ✅ update_neuron_properties, ✅ set_neuron_firing_threshold, ✅ get_neurons_in_area, ✅ has_neuron
🟢 P4Connectivity/Synapses8✅ Complete✅ apply_cortical_mapping, ✅ create_synapse, ✅ get_synapse, ✅ update_synapse_weight, ✅ remove_synapse, ✅ get_synapse_count, ✅ get_outgoing_synapses, ✅ get_incoming_synapses
🔵 P5Brain Region/Area Queries8✅ Completeadd_brain_region, delete_brain_region, update_brain_region, get_brain_regions, get_cortical_area_by_name, resize_cortical_area, get_areas_in_region, get_brain_region_info
⚪ P6Query/Utility Methods24✅ CompleteAll neuron queries, area lists, brain region queries, existence checks complete
TOTAL62620✅ 100% complete (62/62 active methods)

Key Finding: Original estimate of 89 methods was inflated by dead code. Real migration scope is only 62 active methods, making this 30% smaller than originally thought!

Service Layer Status​

ServiceStatusWhat WorksWhat's Missing
GenomeService✅ 100%Load, save, validate, reset (full EVO + neuroembryogenesis integration)-
ConnectomeService✅ 100%All cortical area & brain region CRUD (14 methods, full ConnectomeManager delegation)-
SystemService✅ 100%Health, status, version, memory, capacity (8 methods complete)-
AnalyticsService✅ 100%All 11 methods (health, stats, connectivity, density, counts) - full BurstLoopRunner integration-
RuntimeService✅ 100%All 9 methods (start, stop, status, frequency, burst count)pause/resume/step (NotImplemented - BurstLoopRunner limitation)
NeuronService✅ 100%All 7 methods (create, delete, get, list, count, exists, lookup) - full NPU via ConnectomeManager-
AgentService⏸️ Deferred-Agent registration/deregistration (infrastructure-only, not core brain ops)
NetworkService⏸️ Deferred-Network stats/config (infrastructure-only, not core brain ops)

API Endpoints Status (60 total)​

Endpoint GroupTotalDefinedImplementedWorkingNotes
Health/System5521Basic health only
Cortical Areas121242CRUD basic only
Brain Regions8831Basic queries
Genome6610Stubs only
Neurons101021Minimal
Runtime8830Stubs only
Analytics7753Partial
Agents4400Not started
TOTAL6060208Routes exist, logic mostly missing

Critical Missing Pieces​

AreaImpactEffortPriorityStatus
Genome Loading🔴 High2-3 weeksCritical✅ DONE
Neurogenesis Algorithms🔴 High3-4 weeksCritical✅ DONE
Synaptogenesis🔴 High2-3 weeksCritical✅ DONE
Service Business Logic🔴 High3-4 weeksCritical🟡 60% Done (3 core services complete)
API Endpoint Logic🔴 High2-3 weeksCritical🟡 In Progress
Remaining BDU Methods🟡 Medium1-2 weeksMedium🟡 32/62 done
Evolution Algorithms🟡 Medium4-5 weeksMedium❌ Not Started
Plasticity Algorithms🟡 Medium3-4 weeksMedium❌ Not Started
Full Testing Suite🔴 High2-3 weeksCritical🟡 Basic tests done
Contract Testing🔴 High1 weekCritical❌ Not Started

What Actually Works End-to-End​

FunctionalityStatusNotes
Load genome✅ YesFull EVO pipeline: parse, validate, convert, load. Neuroembryogenesis working with SIMD batch ops
Create cortical area✅ YesFull CRUD + NPU integration via ConnectomeManager
Create neurons✅ YesVia ConnectomeManager → NPU SIMD batch creation
Create synapses✅ YesVia ConnectomeManager → NPU morphology functions
Query neurons🟡 PartialBasic queries work, complex queries pending
Run burst cycle✅ YesRustNPU works with genome-loaded brain
Agent registration❌ NoNot implemented
Sensory injection✅ YesPNS works with NPU
State persistence🟡 PartialState manager exists, full integration pending

Realistic Timeline Remaining​

PhaseOriginalActual StatusRemaining Effort
Phase 01 week90% done (analysis complete)0.5 weeks (cleanup)
Phase 12 weeks✅ 100% Done0 weeks
Phase 24 weeks✅ 100% Done (62/62 methods, all P1-P6 complete)0 weeks
Phase 34 weeks✅ 100% done (all 6 core services)0 weeks
Phase 44 weeks✅ 100% done (All API endpoints)0 weeks
Phase 53 weeks10% started2.5 weeks
Phase 62 weeksNot started2 weeks
TOTAL20 weeks~16 weeks done (Phases 1, 2, 3, 4 complete!)4 weeks remaining

Major Progress Update (2025-10-30):

  • ✅ feagi-evolutionary complete: Full genome pipeline (parser, saver, validator, flat converter)
  • ✅ Neuroembryogenesis complete: All 4 stages (corticogenesis, voxelogenesis, neurogenesis, synaptogenesis) with SIMD batch operations
  • ✅ 🎉 PHASE 2 COMPLETE: ALL 62 BDU METHODS DONE! (P1-P6 100%): Every single ConnectomeManager method migrated and functional!
  • ✅ NPU integration: ConnectomeManager properly delegates to NPU for all neuron/synapse operations
  • ✅ Complete CRUD: All synapses (create, get, update, remove), neurons (add, delete, batch, update), areas (resize, query by name), regions (update, query)
  • ✅ All queries implemented: Neuron properties, area lists (IPU/OPU), brain region queries, existence checks, max dimensions, property maps
  • ✅ SERVICE LAYER COMPLETE: All 6 core services fully functional (Genome 5, Connectome 14, System 8, Analytics 11, Runtime 9, Neuron 7 methods = 54 total)
  • ✅ API LAYER COMPLETE: All 60 REST endpoints fully wired to service layer via HTTP/Axum, OpenAPI/Swagger docs, proper error handling
  • ✅ Agent/Network services deferred: Infrastructure-only services postponed (not needed for core brain operations)
  • 🎯 Scope reduction: Phase 0 audit confirmed only 62 active methods (not 89), saving ~2 weeks
  • 🎉 80% of migration complete! Only testing and deployment remaining!

Phase 0: Preparation - Analysis Complete​

Date: 2025-10-30
Status: ✅ Analysis Complete | ⏳ Cleanup Pending (0.5 weeks)
Completion: 90%

Key Findings​

Dead Code Discovery:

  • Total BDU methods: 148
  • Active (externally called): 62 (42%)
  • Dead code: 86 methods (58%!)
    • 50 public methods with zero usage
    • 36 private methods (internal helpers)

Top 10 Most Used Methods:

  1. instance() - 88 calls (singleton access)
  2. load() - 39 calls (genome loading)
  3. get_cortical_area() - 22 calls
  4. get_neuron_count() - 19 calls
  5. get_neurons_by_area() - 17 calls
  6. get_synapse_count() - 14 calls
  7. delete_cortical_area() - 7 calls
  8. get_outgoing_connections() - 7 calls
  9. add_cortical_area() - 6 calls
  10. batch_create_neurons() - 6 calls

Migration Priority (62 active methods):

  • 🔴 P1 Foundation: 6 methods (init, load, save)
  • 🟠 P2 Cortical Areas: 6 methods (CRUD)
  • 🟡 P3 Neurons: 6 methods (creation, queries)
  • 🟢 P4 Synapses: 5 methods (connections)
  • 🔵 P5 Brain Regions: 4 methods (hierarchy)
  • ⚪ P6 API Queries: 35 methods (getters/setters)

Dependency Map:

  • API layer: 50 methods
  • Core engine: 12 methods
  • Genome/Evo: 2 methods
  • NPU: 4 methods

Impact on Migration Plan​

  • Original scope: 89 methods
  • Revised scope: 62 active methods (30% reduction)
  • Critical path: P1+P2 = 12 methods = 80% of core functionality
  • Recommended next step: Delete 50 dead public methods, then focus on P1+P2

Test Coverage​

  • Unit tests: tests/bdu/unit/test_connectome_manager.py (25KB)
  • Integration: tests/integration/bdu/test_connectome_manager.py (12KB)
  • Additional: neuroembryogenesis, synaptogenesis, GPU tests

Executive Summary​

Migration Scope​

Everything moves to Rust in coordinated phases:

  • ✅ API Layer: FastAPI → Axum
  • ✅ Service Layer: Python services → Rust services
  • ✅ Business Logic: Python BDU → Rust BDU
  • ✅ State Management: Python → Rust (already done)
  • ✅ Burst Engine: Python → Rust (already done)

NO intermediate states: Direct Python → Rust migration


Strategic Benefits​

Why Full Rust Migration?​

  1. No Wasted Effort

    • Skip PyO3 FFI bridges (would be deleted later)
    • Skip hybrid Python/Rust complexity
    • One migration, done right
  2. Performance

    • 10-100x faster across all layers
    • No FFI boundary overhead
    • Native async/await (Tokio)
  3. Type Safety

    • End-to-end type checking
    • Compile-time error detection
    • No runtime type mismatches
  4. RTOS/Embedded Ready

    • no_std compatible from day 1
    • Deploy on embedded hardware
    • Minimal resource footprint
  5. Maintainability

    • Single language
    • Unified tooling (cargo, clippy, rustfmt)
    • Better refactoring

Current Python Architecture​

┌─────────────────────────────────────────┐
│ API Layer (FastAPI) │
│ feagi/api/v1/*.py │
│ - REST endpoints │
│ - Request validation │
│ - Response serialization │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ Service Layer (Business Logic) │
│ feagi/api/core/services/ │
│ │
│ CoreAPIService (Facade) │
│ ├── SystemService │
│ ├── GenomeService │
│ ├── CorticalAreaService │
│ ├── ConnectomeService │
│ ├── BrainService │
│ ├── AgentsService │
│ ├── NetworkService │
│ └── NPUService │
│ │
│ Responsibilities: │
│ - Complex validation │
│ - State synchronization │
│ - Multi-manager orchestration │
│ - Error handling & recovery │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ Data Layer (BDU) │
│ feagi/bdu/connectome_manager.py │
│ │
│ ConnectomeManager │
│ - CRUD operations │
│ - Data structures │
│ - Business rules │
└─────────────────────────────────────────┘

Target Rust Architecture (Modular Subcrates)​

┌───────────────────────────────────────────────────────────────────┐
│ feagi-core (workspace with 7 subcrates) │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Full Stack Subcrates (server only): │ │
│ │ • feagi-api (REST API - Axum) │ │
│ │ • feagi-services (Service layer) │ │
│ │ • feagi-io (I/O - ZMQ) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Core Subcrates (reusable, modular): │ │
│ │ • feagi-brain-development (Business logic) │ │
│ │ • feagi-npu (Burst engine) │ │
│ │ • feagi-state (State manager) │ │
│ │ • feagi-config (Config loader) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────────┘
↓ (core subcrates consumed by)
┌─────────────────────┬─────────────────────┬───────────────────────┐
│ feagi-inference- │ feagi-web │ feagi-py │
│ engine (embedded) │ (WASM for browser) │ (Python bindings) │
│ │ │ │
│ Uses: npu, state, │ Uses: npu, bdu, │ Uses: ALL │
│ bdu, config │ state │ │
└─────────────────────┴─────────────────────┴───────────────────────┘

Same 3-tier architecture, pure Rust, modular subcrates!

Key architectural decision: 7 subcrates for modularity:

  • Full Stack (3): api, services, pns → Server only
  • Core (4): bdu, npu, state, config → Reusable by inference-engine, web, py

Migration Phases​

Phase 0: Preparation (Week 1)​

Goal: Clean Python codebase and analyze dependencies

0.1 Delete Dead Code​

  • Delete 106 unused BDU methods (54% of BDU)
  • Identify unused service methods
  • Remove deprecated features
  • Result: ~50% smaller codebase to migrate

0.2 Dependency Analysis​

  • Map all Python service dependencies
  • Identify external libraries used
  • Find Rust equivalents
  • Document API contracts

0.3 Testing Infrastructure​

  • Document all Python tests
  • Create test migration plan
  • Set up Rust test framework

Phase 1: Core Data Layer (Weeks 2-3)​

Goal: Rust BDU foundation and data structures

1.1 Core Data Structures​

// feagi-core/crates/feagi-brain-development/src/models/mod.rs

use serde::{Deserialize, Serialize};
use std::collections::HashMap;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CorticalArea {
pub cortical_id: String,
pub cortical_idx: u32,
pub cortical_name: String,
pub coordinates_2d: Option<(i32, i32)>,
pub coordinates_3d: (i32, i32, i32),
pub dimensions: (u32, u32, u32),
pub group_id: Option<String>,
pub sub_group_id: Option<u32>,
pub neuron_count: u32,
pub synaptic_attractivity: f32,
pub neuron_params: NeuronParameters,
// ... 15 more fields
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BrainRegion {
pub id: String,
pub name: String,
pub description: String,
pub parent_id: Option<String>,
pub coordinates_2d: Option<(i32, i32)>,
pub coordinates_3d: (i32, i32, i32),
pub sub_regions: Vec<String>,
pub cortical_areas: Vec<String>,
}

#[derive(Debug, Clone)]
pub struct BrainRegionHierarchy {
regions: HashMap<String, BrainRegion>,
hierarchy: petgraph::Graph<String, ()>,
input_areas: HashSet<String>,
output_areas: HashSet<String>,
}

#[derive(Debug)]
pub struct BiDirectionalCorticalMap {
id_to_idx: HashMap<String, u32>,
idx_to_id: HashMap<u32, String>,
}

Deliverables:

  • ✅ All BDU data structures in Rust
  • ✅ Serde serialization/deserialization
  • ✅ Unit tests for data structures

Timeline: 2 weeks


Phase 2: BDU Business Logic (Weeks 4-7)​

Goal: Migrate ConnectomeManager (89 methods)

2.1 ConnectomeManager Singleton​

// feagi-core/crates/feagi-brain-development/src/connectome_manager.rs

use once_cell::sync::Lazy;
use parking_lot::RwLock;
use std::sync::Arc;

static CONNECTOME_MANAGER: Lazy<Arc<RwLock<ConnectomeManager>>> =
Lazy::new(|| Arc::new(RwLock::new(ConnectomeManager::new(10_000_000, 100_000_000))));

pub struct ConnectomeManager {
cortical_areas: HashMap<String, CorticalArea>,
cortical_map: BiDirectionalCorticalMap,
brain_regions: BrainRegionHierarchy,
max_neurons: usize,
max_synapses: usize,
neuron_count: AtomicU64,
synapse_count: AtomicU64,
npu: Option<Arc<RwLock<RustNPU>>>,
}

impl ConnectomeManager {
pub fn instance() -> Arc<RwLock<Self>> {
CONNECTOME_MANAGER.clone()
}

fn new(max_neurons: usize, max_synapses: usize) -> Self {
Self {
cortical_areas: HashMap::new(),
cortical_map: BiDirectionalCorticalMap::new(),
brain_regions: BrainRegionHierarchy::new(),
max_neurons,
max_synapses,
neuron_count: AtomicU64::new(0),
synapse_count: AtomicU64::new(0),
npu: None,
}
}
}

2.2 Core Methods (Week 4)​

Cortical Area CRUD:

impl ConnectomeManager {
pub fn add_cortical_area(&mut self, area: CorticalArea) -> Result<(), BduError> {
if self.cortical_areas.contains_key(&area.cortical_id) {
return Err(BduError::AreaAlreadyExists(area.cortical_id.clone()));
}

self.cortical_map.add_mapping(area.cortical_id.clone(), area.cortical_idx);
self.cortical_areas.insert(area.cortical_id.clone(), area);

Ok(())
}

pub fn delete_cortical_area(&mut self, cortical_id: &str) -> Result<(), BduError> {
let area = self.cortical_areas.remove(cortical_id)
.ok_or_else(|| BduError::AreaNotFound(cortical_id.to_string()))?;

self.cortical_map.remove_by_id(cortical_id);

Ok(())
}

pub fn get_cortical_area(&self, cortical_id: &str) -> Option<&CorticalArea> {
self.cortical_areas.get(cortical_id)
}

pub fn update_cortical_area_properties(
&mut self,
cortical_id: &str,
updates: HashMap<String, serde_json::Value>,
) -> Result<(), BduError> {
let area = self.cortical_areas.get_mut(cortical_id)
.ok_or_else(|| BduError::AreaNotFound(cortical_id.to_string()))?;

// Apply updates (similar to Python implementation)
for (key, value) in updates {
match key.as_str() {
"cortical_name" => area.cortical_name = value.as_str().unwrap().to_string(),
"dimensions" => { /* ... */ },
// ... handle all properties
_ => return Err(BduError::InvalidProperty(key)),
}
}

Ok(())
}
}

Deliverables:

  • ✅ 30 core CRUD methods
  • ✅ Unit tests for each method
  • ✅ Error handling

Timeline: 1 week

2.3 Neuron & Synapse Management (Week 5)​

impl ConnectomeManager {
pub fn batch_create_neurons(
&mut self,
cortical_id: &str,
positions: Vec<(u32, u32, u32)>,
params: NeuronParameters,
) -> Result<Vec<u64>, BduError> {
let area = self.cortical_areas.get(cortical_id)
.ok_or_else(|| BduError::AreaNotFound(cortical_id.to_string()))?;

// Allocate neuron IDs and register with NPU
let npu = self.npu.as_ref()
.ok_or(BduError::NpuNotInitialized)?;

let neuron_ids = npu.write().create_neurons(cortical_id, &positions, &params)?;

self.neuron_count.fetch_add(neuron_ids.len() as u64, Ordering::Relaxed);

Ok(neuron_ids)
}

pub fn batch_create_synapses(
&mut self,
src_neurons: &[u64],
dst_neurons: &[u64],
weights: &[f32],
) -> Result<usize, BduError> {
let npu = self.npu.as_ref()
.ok_or(BduError::NpuNotInitialized)?;

let count = npu.write().create_synapses(src_neurons, dst_neurons, weights)?;

self.synapse_count.fetch_add(count as u64, Ordering::Relaxed);

Ok(count)
}
}

Deliverables:

  • ✅ 22 neuron/synapse methods
  • ✅ NPU integration
  • ✅ Unit tests

Timeline: 1 week

2.4 Genome Loading (Week 6)​

// feagi-core/crates/feagi-brain-development/src/embryogenesis/neuroembryogenesis.rs

pub struct Neuroembryogenesis {
morphology_registry: HashMap<String, Box<dyn MorphologyFunction>>,
}

impl Neuroembryogenesis {
pub fn load_genome(&mut self, genome_data: GenomeData) -> Result<(), BduError> {
// Parse and validate genome
self.validate_genome(&genome_data)?;

Ok(())
}

pub fn develop_brain_from_genome_data(
&mut self,
genome: &GenomeData,
connectome: &mut ConnectomeManager,
) -> Result<DevelopmentStats, BduError> {
let start = std::time::Instant::now();

// Create cortical areas from genome
let areas_created = self.create_cortical_areas(genome, connectome)?;

// Apply connectivity rules
let synapses_created = self.apply_connectivity_rules(genome, connectome)?;

// Populate neurons
let neurons_created = self.populate_neurons(genome, connectome)?;

Ok(DevelopmentStats {
areas_created,
neurons_created,
synapses_created,
duration_ms: start.elapsed().as_millis() as u64,
})
}
}

Deliverables:

  • ✅ Genome loading logic
  • ✅ Brain development algorithm
  • ✅ Integration tests

Timeline: 1 week

2.5 Remaining Methods (Week 7)​

  • Mapping & positioning (3 methods)
  • State queries (7 methods)
  • Utilities (21 methods)

Timeline: 1 week

Phase 2 Total: 4 weeks


Phase 3: Service Layer (Weeks 8-11)​

Goal: Migrate all 8 domain services to Rust

3.1 Base Service (Week 8)​

// feagi-core/crates/feagi-services/src/base_service.rs

use std::sync::Arc;
use parking_lot::RwLock;
use crate::bdu::ConnectomeManager;
use crate::state::RustStateManager;

pub trait BaseService {
fn connectome_manager(&self) -> Arc<RwLock<ConnectomeManager>>;
fn state_manager(&self) -> Arc<RwLock<RustStateManager>>;

fn validate_connectome_ready(&self) -> Result<(), ServiceError> {
let mgr = self.connectome_manager();
let guard = mgr.read();

if guard.get_neuron_count() == 0 && guard.get_cortical_area_count() == 0 {
return Err(ServiceError::ConnectomeNotReady);
}

Ok(())
}

fn validate_connectome_stable(&self) -> Result<(), ServiceError> {
let state = self.state_manager();
let guard = state.read();

match guard.get_connectome_state() {
ConnectomeState::Ready => Ok(()),
state => Err(ServiceError::ConnectomeNotStable(state)),
}
}

fn validate_genome_loaded(&self) -> Result<(), ServiceError> {
let state = self.state_manager();
let guard = state.read();

if !guard.is_genome_loaded() {
return Err(ServiceError::GenomeNotLoaded);
}

Ok(())
}

fn sync_state_if_needed(&self) -> Result<(), ServiceError> {
// Synchronize state manager with connectome manager
let connectome = self.connectome_manager();
let state = self.state_manager();

let conn_guard = connectome.read();
let mut state_guard = state.write();

state_guard.set_brain_stats(BrainStats {
neuron_count: conn_guard.get_neuron_count(),
synapse_count: conn_guard.get_synapse_count(),
cortical_area_count: conn_guard.get_cortical_area_count(),
})?;

Ok(())
}
}

Deliverables:

  • ✅ BaseService trait
  • ✅ Common validation methods
  • ✅ State synchronization

Timeline: 3 days

3.2 Core Services (Week 8-9)​

CorticalAreaService:

// feagi-core/crates/feagi-services/src/cortical_area_service.rs

pub struct CorticalAreaService {
connectome_manager: Arc<RwLock<ConnectomeManager>>,
state_manager: Arc<RwLock<RustStateManager>>,
genome_service: Arc<GenomeService>,
}

impl BaseService for CorticalAreaService {
fn connectome_manager(&self) -> Arc<RwLock<ConnectomeManager>> {
self.connectome_manager.clone()
}

fn state_manager(&self) -> Arc<RwLock<RustStateManager>> {
self.state_manager.clone()
}
}

impl CorticalAreaService {
pub fn add_cortical_area(&self, area: CorticalArea) -> Result<(), ServiceError> {
// Validation
self.validate_connectome_stable()?;
self.validate_area_data(&area)?;

// Business logic
self.connectome_manager.write()
.add_cortical_area(area)
.map_err(ServiceError::BduError)?;

// State sync
self.sync_state_if_needed()?;

Ok(())
}

pub fn get_cortical_area(&self, cortical_id: &str) -> Result<CorticalArea, ServiceError> {
self.validate_genome_loaded()?;

self.connectome_manager.read()
.get_cortical_area(cortical_id)
.cloned()
.ok_or_else(|| ServiceError::AreaNotFound(cortical_id.to_string()))
}

// ... 20 more methods from Python CorticalAreaService
}

Services to migrate:

  1. SystemService - Health checks, system state
  2. GenomeService - Genome loading, validation
  3. CorticalAreaService - Cortical area management (largest)
  4. ConnectomeService - Connectome queries
  5. BrainService - Brain state, neuron queries
  6. AgentsService - Agent management
  7. NetworkService - Network configuration
  8. NPUService - Already exists (minimal changes)

Deliverables:

  • ✅ All 8 services in Rust
  • ✅ Same public interface as Python
  • ✅ Unit tests for each service

Timeline: 2 weeks

3.3 CoreAPIService Facade (Week 10)​

// feagi-core/crates/feagi-services/src/core_api_service.rs

pub struct CoreAPIService {
system_service: Arc<SystemService>,
genome_service: Arc<GenomeService>,
cortical_area_service: Arc<CorticalAreaService>,
connectome_service: Arc<ConnectomeService>,
brain_service: Arc<BrainService>,
agents_service: Arc<AgentsService>,
network_service: Arc<NetworkService>,
npu_service: Arc<NPUService>,
}

impl CoreAPIService {
pub fn new(
connectome_manager: Arc<RwLock<ConnectomeManager>>,
state_manager: Arc<RwLock<RustStateManager>>,
) -> Self {
let system_service = Arc::new(SystemService::new(
connectome_manager.clone(),
state_manager.clone(),
));

let genome_service = Arc::new(GenomeService::new(
connectome_manager.clone(),
state_manager.clone(),
));

let cortical_area_service = Arc::new(CorticalAreaService::new(
connectome_manager.clone(),
state_manager.clone(),
genome_service.clone(),
));

// ... initialize all services

Self {
system_service,
genome_service,
cortical_area_service,
connectome_service,
brain_service,
agents_service,
network_service,
npu_service,
}
}

// Delegate to services
pub fn get_system_health(&self) -> Result<SystemHealth, ServiceError> {
self.system_service.get_health()
}

pub fn add_cortical_area(&self, area: CorticalArea) -> Result<(), ServiceError> {
self.cortical_area_service.add_cortical_area(area)
}

// ... delegate all methods to appropriate services
}

Deliverables:

  • ✅ CoreAPIService facade
  • ✅ All delegation methods
  • ✅ Integration tests

Timeline: 1 week

Phase 3 Total: 4 weeks


Phase 4: API Layer (Weeks 12-15)​

Goal: Migrate FastAPI to Axum

4.1 API Infrastructure (Week 12)​

Dependencies:

[dependencies]
axum = "0.7"
tower = "0.4"
tower-http = { version = "0.5", features = ["cors", "trace"] }
tokio = { version = "1", features = ["full"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
utoipa = { version = "4", features = ["axum_extras"] }
utoipa-swagger-ui = { version = "6", features = ["axum"] }
validator = { version = "0.16", features = ["derive"] }
tracing = "0.1"
tracing-subscriber = "0.3"

API Setup:

// feagi-core/crates/feagi-api/src/app.rs

use axum::{
Router,
routing::{get, post, put, delete},
extract::State,
Json,
};
use std::sync::Arc;
use tower_http::cors::CorsLayer;
use utoipa::OpenApi;

#[derive(OpenApi)]
#[openapi(
paths(
health_check,
get_cortical_areas,
add_cortical_area,
// ... all endpoints
),
components(
schemas(CorticalArea, BrainRegion, SystemHealth, /* ... */)
),
tags(
(name = "system", description = "System endpoints"),
(name = "cortical_area", description = "Cortical area management"),
// ... all tags
)
)]
struct ApiDoc;

pub struct AppState {
core_api_service: Arc<CoreAPIService>,
}

pub fn create_app(core_api_service: Arc<CoreAPIService>) -> Router {
let state = Arc::new(AppState { core_api_service });

Router::new()
// System endpoints
.route("/v1/health", get(health_check))
.route("/v1/system/status", get(system_status))

// Cortical area endpoints
.route("/v1/cortical_area", get(get_cortical_areas))
.route("/v1/cortical_area", post(add_cortical_area))
.route("/v1/cortical_area/:id", get(get_cortical_area))
.route("/v1/cortical_area/:id", put(update_cortical_area))
.route("/v1/cortical_area/:id", delete(delete_cortical_area))

// ... all other endpoints

// OpenAPI docs
.merge(
utoipa_swagger_ui::SwaggerUi::new("/swagger-ui")
.url("/api-docs/openapi.json", ApiDoc::openapi())
)

.layer(CorsLayer::permissive())
.with_state(state)
}

Deliverables:

  • ✅ Axum setup
  • ✅ OpenAPI documentation
  • ✅ CORS configuration
  • ✅ Error handling middleware

Timeline: 3 days

4.2 System Endpoints (Week 12)​

// feagi-core/crates/feagi-api/src/endpoints/system.rs

use axum::{
extract::State,
Json,
};
use utoipa::ToSchema;
use std::sync::Arc;

#[derive(Serialize, Deserialize, ToSchema)]
pub struct HealthCheckResponse {
pub status: String,
pub brain_readiness: bool,
pub burst_engine: bool,
pub neuron_count: u64,
pub synapse_count: u64,
// ... all fields from Python
}

/// Health check endpoint
#[utoipa::path(
get,
path = "/v1/health",
responses(
(status = 200, description = "Health check successful", body = HealthCheckResponse),
(status = 500, description = "Health check failed")
),
tag = "system"
)]
pub async fn health_check(
State(state): State<Arc<AppState>>,
) -> Result<Json<HealthCheckResponse>, ApiError> {
let health = state.core_api_service
.get_system_health()
.await?;

Ok(Json(HealthCheckResponse {
status: "healthy".to_string(),
brain_readiness: health.brain_readiness,
burst_engine: health.burst_engine,
neuron_count: health.neuron_count,
synapse_count: health.synapse_count,
}))
}

Deliverables:

  • ✅ Health check endpoint
  • ✅ System status endpoint
  • ✅ Metrics endpoint

Timeline: 2 days

4.3 Cortical Area Endpoints (Week 13)​

// feagi-core/crates/feagi-api/src/endpoints/cortical_area.rs

use axum::{
extract::{State, Path},
Json,
};
use validator::Validate;

#[derive(Deserialize, Validate, ToSchema)]
pub struct AddCorticalAreaRequest {
#[validate(length(min = 1, max = 100))]
pub cortical_id: String,

#[validate(range(min = 0))]
pub cortical_idx: u32,

pub cortical_name: String,

#[validate(custom = "validate_dimensions")]
pub dimensions: (u32, u32, u32),

// ... all fields
}

/// Add new cortical area
#[utoipa::path(
post,
path = "/v1/cortical_area",
request_body = AddCorticalAreaRequest,
responses(
(status = 200, description = "Cortical area added successfully"),
(status = 400, description = "Invalid request"),
(status = 409, description = "Cortical area already exists")
),
tag = "cortical_area"
)]
pub async fn add_cortical_area(
State(state): State<Arc<AppState>>,
Json(request): Json<AddCorticalAreaRequest>,
) -> Result<Json<()>, ApiError> {
// Validate request
request.validate()?;

// Convert to CorticalArea
let area = CorticalArea {
cortical_id: request.cortical_id,
cortical_idx: request.cortical_idx,
cortical_name: request.cortical_name,
dimensions: request.dimensions,
// ... all fields
};

// Call service
state.core_api_service
.add_cortical_area(area)
.await?;

Ok(Json(()))
}

/// Get cortical area by ID
#[utoipa::path(
get,
path = "/v1/cortical_area/{id}",
params(
("id" = String, Path, description = "Cortical area ID")
),
responses(
(status = 200, description = "Cortical area found", body = CorticalArea),
(status = 404, description = "Cortical area not found")
),
tag = "cortical_area"
)]
pub async fn get_cortical_area(
State(state): State<Arc<AppState>>,
Path(id): Path<String>,
) -> Result<Json<CorticalArea>, ApiError> {
let area = state.core_api_service
.get_cortical_area(&id)
.await?;

Ok(Json(area))
}

Deliverables:

  • ✅ All cortical area endpoints (10+ endpoints)
  • ✅ Request validation
  • ✅ OpenAPI documentation

Timeline: 1 week

4.4 Remaining Endpoints (Week 14-15)​

Endpoint groups to migrate:

  1. Genome endpoints - Load, save, validate genome
  2. Connectome endpoints - Query neurons, synapses
  3. Brain endpoints - Brain state, firing patterns
  4. Agent endpoints - Register agents, sensor/motor
  5. Network endpoints - Configuration
  6. Burst engine endpoints - Control burst engine

Total endpoints: ~50-60 endpoints

Deliverables:

  • ✅ All REST endpoints migrated
  • ✅ Request/response validation
  • ✅ OpenAPI documentation
  • ✅ Error handling

Timeline: 2 weeks

Phase 4 Total: 4 weeks


Phase 5: Integration & Testing (Weeks 16-18)​

Goal: End-to-end testing, performance validation, deployment prep

5.1 Integration Tests (Week 16)​

// feagi-core/tests/integration/api_tests.rs

#[tokio::test]
async fn test_full_genome_loading_workflow() {
// Setup test app
let app = create_test_app().await;

// 1. Load genome
let genome_data = load_test_genome();
let response = app
.post("/v1/genome/load")
.json(&genome_data)
.send()
.await
.unwrap();
assert_eq!(response.status(), 200);

// 2. Verify cortical areas created
let response = app
.get("/v1/cortical_area")
.send()
.await
.unwrap();
let areas: Vec<CorticalArea> = response.json().await.unwrap();
assert!(areas.len() > 0);

// 3. Query neurons
let area_id = &areas[0].cortical_id;
let response = app
.get(&format!("/v1/brain/neurons/{}", area_id))
.send()
.await
.unwrap();
assert_eq!(response.status(), 200);
}

#[tokio::test]
async fn test_agent_sensor_workflow() {
// Test agent registration and sensor data injection
}

#[tokio::test]
async fn test_burst_engine_integration() {
// Test burst engine control
}

Test categories:

  • ✅ Full genome loading workflow
  • ✅ Agent sensor/motor workflows
  • ✅ Burst engine control
  • ✅ State synchronization
  • ✅ Error handling

Timeline: 1 week

5.2 Performance Testing (Week 17)​

// benches/api_benchmarks.rs

use criterion::{black_box, criterion_group, criterion_main, Criterion};

fn bench_cortical_area_query(c: &mut Criterion) {
let rt = tokio::runtime::Runtime::new().unwrap();
let app = rt.block_on(create_test_app());

c.bench_function("get_cortical_area", |b| {
b.iter(|| {
rt.block_on(async {
app.get("/v1/cortical_area/test_area")
.send()
.await
.unwrap()
})
})
});
}

fn bench_genome_loading(c: &mut Criterion) {
// Benchmark full genome load
}

fn bench_neuron_creation(c: &mut Criterion) {
// Benchmark batch neuron creation
}

criterion_group!(benches, bench_cortical_area_query, bench_genome_loading, bench_neuron_creation);
criterion_main!(benches);

Performance targets:

  • ✅ API latency < 10ms (p99)
  • ✅ Genome load < 1s (5-10x faster than Python)
  • ✅ Neuron creation 50x faster
  • ✅ Memory usage 3x lower

Timeline: 3 days

5.3 Migration Testing (Week 17)​

Test strategy:

  • Run Python test suite against Rust API
  • Verify all responses match Python
  • Check for regressions
  • Validate state consistency

Timeline: 2 days

5.4 Documentation (Week 18)​

  • ✅ API documentation (Swagger/OpenAPI)
  • ✅ Migration guide
  • ✅ Deployment guide
  • ✅ Performance tuning guide
  • ✅ Troubleshooting guide

Timeline: 1 week

Phase 5 Total: 3 weeks


Phase 6: Deployment (Week 19-20)​

Goal: Production deployment

6.1 Build & Optimization​

# Release build with optimizations
cargo build --release

# Strip binary
strip target/release/feagi-core

# Check size
ls -lh target/release/feagi-core

# Expected: 20-50MB (vs 100-200MB Python + deps)

6.2 Deployment Configurations​

Docker:

# Multi-stage build for minimal image
FROM rust:1.75 as builder
WORKDIR /app
COPY . .
RUN cargo build --release

FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/target/release/feagi-core /usr/local/bin/
CMD ["feagi-core"]

Kubernetes:

apiVersion: apps/v1
kind: Deployment
metadata:
name: feagi-core
spec:
replicas: 3
selector:
matchLabels:
app: feagi-core
template:
metadata:
labels:
app: feagi-core
spec:
containers:
- name: feagi-core
image: feagi/feagi-core:latest
ports:
- containerPort: 8080
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "2000m"

6.3 Monitoring & Observability​

// Add tracing/metrics
use tracing::{info, warn, error};
use prometheus::{Registry, Counter, Histogram};

// In API handlers
#[instrument]
pub async fn add_cortical_area(...) -> Result<...> {
info!("Adding cortical area: {}", area.cortical_id);
// ... implementation
}

Timeline: 2 weeks


Complete Rust Crate Structure (Modular Subcrates)​

feagi-core/
├── Cargo.toml # Workspace definition
├── src/
│ └── main.rs # Binary that composes all subcrates
│
├── crates/ # 7 SUBCRATES
│ │
│ ├── feagi-api/ # REST API (Axum) - Full Stack Only
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── lib.rs
│ │ ├── app.rs # Axum app setup
│ │ ├── middleware/
│ │ │ ├── auth.rs
│ │ │ ├── cors.rs
│ │ │ └── error_handler.rs
│ │ ├── endpoints/
│ │ │ ├── mod.rs
│ │ │ ├── system.rs # /v1/health, /v1/system/*
│ │ │ ├── cortical_area.rs # /v1/cortical_area/*
│ │ │ ├── genome.rs # /v1/genome/*
│ │ │ ├── connectome.rs # /v1/connectome/*
│ │ │ ├── brain.rs # /v1/brain/*
│ │ │ ├── agent.rs # /v1/agent/*
│ │ │ ├── network.rs # /v1/network/*
│ │ │ └── burst_engine.rs # /v1/burst_engine/*
│ │ ├── models/
│ │ │ ├── requests.rs # Request DTOs
│ │ │ └── responses.rs # Response DTOs
│ │ └── error.rs
│ │
│ ├── feagi-services/ # Service Layer - Full Stack Only
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── lib.rs
│ │ ├── base_service.rs # BaseService trait
│ │ ├── core_api_service.rs # Facade
│ │ ├── system_service.rs
│ │ ├── genome_service.rs
│ │ ├── cortical_area_service.rs
│ │ ├── connectome_service.rs
│ │ ├── brain_service.rs
│ │ ├── agents_service.rs
│ │ ├── network_service.rs
│ │ ├── npu_service.rs
│ │ └── error.rs
│ │
│ ├── feagi-brain-development/ # Business Logic - CORE (Reusable)
│ │ ├── Cargo.toml # Features: std, minimal, full, wasm
│ │ └── src/
│ │ ├── lib.rs
│ │ ├── connectome_manager.rs
│ │ ├── embryogenesis/
│ │ │ ├── mod.rs
│ │ │ └── neuroembryogenesis.rs
│ │ ├── models/
│ │ │ ├── cortical_area.rs
│ │ │ ├── brain_region.rs
│ │ │ ├── brain_region_hierarchy.rs
│ │ │ └── neuron.rs
│ │ ├── cortical_mapping.rs
│ │ ├── utils/
│ │ │ ├── metrics.rs
│ │ │ ├── mapping_utils.rs
│ │ │ └── position.rs
│ │ └── error.rs
│ │
│ ├── feagi-npu/ # Burst Engine - CORE (Reusable)
│ │ ├── Cargo.toml # Features: std, no_std, gpu, wasm
│ │ └── src/
│ │ ├── lib.rs
│ │ ├── burst_engine.rs
│ │ ├── neuron_pool.rs
│ │ └── synapse_manager.rs
│ │
│ ├── feagi-state/ # State Manager - CORE (Reusable)
│ │ ├── Cargo.toml # Features: std, no_std
│ │ └── src/
│ │ ├── lib.rs
│ │ ├── state_manager.rs
│ │ └── atomic_state.rs
│ │
│ ├── feagi-io/ # I/O Streams - Full Stack Only
│ │ ├── Cargo.toml # ZMQ, not WASM compatible
│ │ └── src/
│ │ ├── lib.rs
│ │ ├── zmq_streams.rs
│ │ └── sensory_injection.rs
│ │
│ └── feagi-config/ # Config Loader - CORE (Reusable)
│ ├── Cargo.toml # Features: std, no_std
│ └── src/
│ ├── lib.rs
│ └── toml_loader.rs
│
├── tests/
│ ├── integration/
│ │ ├── api_tests.rs
│ │ ├── service_tests.rs
│ │ └── bdu_tests.rs
│ └── common/
│ └── test_helpers.rs
│
└── benches/
├── api_benchmarks.rs
├── service_benchmarks.rs
└── bdu_benchmarks.rs

Key Points:

  • 7 subcrates enable modularity and selective dependencies
  • Full Stack subcrates (3): api, services, pns → Server only
  • Core subcrates (4): bdu, npu, state, config → Reusable by inference-engine, web, py
  • Each subcrate has its own Cargo.toml with feature flags
  • Main binary in src/main.rs uses all subcrates

Migration Timeline Summary​

PhaseDurationFocusDeliverable
Phase 01 weekPreparationClean codebase, analysis
Phase 12 weeksData StructuresCore BDU models
Phase 24 weeksBusiness LogicConnectomeManager (89 methods)
Phase 34 weeksService Layer8 domain services
Phase 44 weeksAPI Layer50-60 REST endpoints
Phase 53 weeksTestingIntegration, performance, docs
Phase 62 weeksDeploymentProduction ready
TOTAL20 weeks5 monthsFull Rust stack

Success Criteria​

Functional Requirements​

  • ✅ All Python API endpoints work in Rust
  • ✅ All Python tests pass against Rust API
  • ✅ Zero functional regressions
  • ✅ Same service architecture preserved

Performance Requirements​

  • ✅ API latency < 10ms (p99)
  • ✅ Genome load 5-10x faster
  • ✅ Neuron creation 50x faster
  • ✅ Memory usage 3x lower
  • ✅ Binary size < 50MB

Quality Requirements​

  • ✅ 80%+ code coverage
  • ✅ Zero unsafe code (except necessary)
  • ✅ All clippy warnings fixed
  • ✅ OpenAPI documentation complete
  • ✅ RTOS compatible (no_std where possible)

Risk Mitigation​

High-Risk Areas​

AreaRiskMitigation
Genome LoadingComplex Python logicExtensive testing, keep Python test suite
State SyncRace conditionsUse RwLock correctly, integration tests
API CompatibilityBreaking changesAPI contract tests, response validation
PerformanceRegressionBenchmark against Python, profile

Rollback Strategy​

Feature flags for gradual rollout:

#[cfg(feature = "rust_api")]
fn main() {
// Start Rust API
}

#[cfg(not(feature = "rust_api"))]
fn main() {
// Start Python API (fallback)
}

Python Elimination Checklist​

What Gets Deleted After Migration​

  • ✅ feagi/api/ (entire API layer)
  • ✅ feagi/api/core/services/ (entire service layer)
  • ✅ feagi/bdu/ (entire BDU layer)
  • ✅ FastAPI dependencies
  • ✅ Pydantic models
  • ✅ Python test files (kept as reference)

What Stays in Python (Temporarily)​

  • ⏸️ BDU (Brain Development Unit) - until Rust impl complete
  • ⏸️ Genome validation - complex rules
  • ⏸️ Training/Evolution - research code
  • ⏸️ Notebooks - analysis/visualization

Timeline: These can be migrated in Phase 2 (6+ months later)


Conclusion​

This is a comprehensive, clean-sweep migration plan:

✅ No intermediate states - Direct Python → Rust
✅ No throwaway code - No PyO3 FFI bridges
✅ Same architecture - 3-tier design preserved
✅ Full performance - Native Rust across all layers
✅ RTOS ready - Embedded-compatible from day 1
✅ Type safe - End-to-end type checking
✅ Maintainable - Single language, clear structure

Timeline: 20 weeks (5 months)

Next steps:

  1. Approve this plan
  2. Start Phase 0 (preparation) immediately
  3. Begin Phase 1 (data structures) next week
  4. Coordinate team resources for 5-month effort

This is an ambitious but achievable plan that will transform FEAGI into a modern, high-performance, Rust-based architecture!