Files
blackroad-operating-system/BLACKROAD_OS_REPO_MAP.md
2025-11-18 01:18:52 -06:00

1319 lines
45 KiB
Markdown

# BlackRoad OS Repository Map
> **Version:** Phase 2 Scaffold
> **Last Updated:** 2025-11-18
> **Branch:** `claude/os-phase2-scaffold-01LKeSDWFNBtXhhsV2xMbM4T`
## Overview
This document maps all Phase 2 scaffolded components within the BlackRoad-Operating-System monorepo.
## Repository Structure
All components are housed in the **single monorepo**:
- **Repo:** `blackboxprogramming/BlackRoad-Operating-System`
- **Approach:** Monorepo with modular services
- **Future:** May extract to separate repos if needed
---
## Component Map
### 1. Backend API
| Property | Value |
|----------|-------|
| **Location** | `backend/` |
| **Language** | Python (FastAPI) |
| **New Endpoints** | `/api/system/version`, `/api/system/config/public`, `/api/system/os/state` |
| **Tests** | `backend/tests/test_system.py` |
| **CI Workflow** | `.github/workflows/backend-tests.yml` |
| **Run Command** | `cd backend && uvicorn app.main:app --reload` |
| **API Docs** | `http://localhost:8000/api/docs` |
**Key Features:**
- 30+ existing API routers
- New system endpoints for OS integration
- JWT authentication
- PostgreSQL + Redis integration
**How to Run:**
```bash
cd backend
uvicorn app.main:app --reload
# 🗺️ BlackRoad OS Repository Map
**Version**: 2.5
**Date**: 2025-11-18
**Purpose**: Complete module-by-module breakdown showing how components connect
---
## Repository Structure
```
BlackRoad-Operating-System/ # Canonical OS monorepo
├── backend/ # FastAPI backend + static UI
│ ├── app/ # Core application
│ │ ├── main.py # FastAPI app, router registration
│ │ ├── config.py # Settings (Pydantic)
│ │ ├── database.py # SQLAlchemy async sessions
│ │ ├── redis_client.py # Redis connection pool
│ │ ├── models/ # Database models (SQLAlchemy)
│ │ ├── routers/ # API endpoint routers (33+)
│ │ ├── services/ # Business logic layer
│ │ └── utils/ # Shared utilities
│ ├── static/ # Frontend UI (canonical)
│ │ ├── index.html # Main OS interface
│ │ ├── prism/ # Prism Console UI
│ │ ├── js/ # JavaScript modules
│ │ └── assets/ # CSS, images, fonts
│ ├── tests/ # Backend test suite
│ ├── requirements.txt # Python dependencies
│ └── Dockerfile # Container definition
├── agents/ # 200+ AI agent ecosystem
│ ├── base/ # Core agent framework
│ ├── categories/ # 10 agent categories
│ └── tests/ # Agent tests
├── sdk/ # Client SDKs
│ ├── python/ # Python SDK
│ └── typescript/ # TypeScript SDK
├── codex-docs/ # MkDocs documentation
│ ├── mkdocs.yml # Docs configuration
│ ├── docs/ # Markdown documentation
│ └── DEPLOY_DOCS.md # Deployment guide
├── infra/ # Infrastructure configs
│ ├── cloudflare/ # DNS, Workers
│ ├── railway/ # Railway deployment
│ └── env/ # Environment variables
├── .github/ # GitHub automation
│ ├── workflows/ # CI/CD pipelines
│ └── CODEOWNERS # Code ownership
├── docs/ # Legacy docs (consolidating to codex-docs/)
├── scripts/ # Utility scripts
├── ops/ # Operations tools
└── [Root documentation files]
├── README.md # Project overview
├── CLAUDE.md # AI assistant guide
├── MASTER_ORCHESTRATION_PLAN.md # Infrastructure blueprint
├── PHASE2_5_SUMMARY_FOR_ALEXA.md # Phase 2.5 summary
└── DEPLOYMENT_NOTES.md # Production deployment guide
```
---
## Module Connections & Data Flow
### 1. Request Flow (User → Backend → Database)
```
┌─────────────────────────────────────────────────────────────┐
│ USER BROWSER │
│ - Visits: https://blackroad.systems │
│ - Loads: backend/static/index.html │
│ - Executes: JavaScript (OS boot) │
└─────────────────────────────────────────────────────────────┘
↓ HTTP Request
┌─────────────────────────────────────────────────────────────┐
│ CLOUDFLARE CDN │
│ - DNS resolution │
│ - SSL termination │
│ - Static asset caching │
│ - DDoS protection │
└─────────────────────────────────────────────────────────────┘
↓ Proxy
┌─────────────────────────────────────────────────────────────┐
│ RAILWAY → FastAPI Backend (backend/app/main.py) │
│ │
│ Request Handling: │
│ 1. CORS Middleware (app/main.py:78) │
│ 2. Timing Middleware (app/main.py:89) │
│ 3. Router Matching │
│ │
│ Routes: │
│ • GET / → StaticFiles(backend/static/) │
│ • GET /prism → StaticFiles(backend/static/prism/) │
│ • GET /api/docs → OpenAPI documentation │
│ • GET /health → Health check endpoint │
│ • POST /api/auth/login → auth.router │
│ • GET /api/prism/jobs → prism.router (future) │
│ • [30+ other API routes] │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ ROUTER LAYER (backend/app/routers/) │
│ │
│ Example: POST /api/auth/login │
│ 1. routers/auth.py:login() │
│ 2. Validate request (Pydantic schema) │
│ 3. Call service layer │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ SERVICE LAYER (backend/app/services/) │
│ │
│ Example: services/auth.py │
│ 1. authenticate_user(email, password) │
│ 2. Query database via models │
│ 3. Verify password hash │
│ 4. Generate JWT token │
│ 5. Store session in Redis │
│ 6. Return user data + token │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ DATA LAYER │
│ │
│ PostgreSQL (Railway managed): │
│ • app/database.py → async session │
│ • app/models/ → SQLAlchemy ORM │
│ • Tables: users, wallets, blocks, etc. │
│ │
│ Redis (Railway managed): │
│ • app/redis_client.py → connection pool │
│ • Usage: sessions, caching, WebSocket state │
└─────────────────────────────────────────────────────────────┘
↓ Response
┌─────────────────────────────────────────────────────────────┐
│ BROWSER (JavaScript) │
│ - Receives JSON response │
│ - Updates OS UI (DOM manipulation) │
│ - Stores token in localStorage │
│ - Makes subsequent API calls with auth header │
└─────────────────────────────────────────────────────────────┘
```
---
### 2. Core OS Runtime
| Property | Value |
|----------|-------|
| **Location** | `core_os/` |
| **Language** | Python |
| **Key Files** | `models.py`, `state.py`, `adapters/api_client.py` |
| **Tests** | `core_os/tests/` |
| **CI Workflow** | `.github/workflows/core-os-tests.yml` |
| **README** | `core_os/README.md` |
**Key Features:**
- `UserSession`, `Window`, `OSState` models
- State management functions (open_window, close_window, etc.)
- Backend API adapter for communication
- In-memory state storage (future: Redis/PostgreSQL)
**How to Run:**
```python
from core_os import get_initial_state, open_window
state = get_initial_state()
state = open_window("notepad")
```
---
### 3. Operator Engine
| Property | Value |
|----------|-------|
| **Location** | `operator_engine/` |
| **Language** | Python |
| **Key Files** | `jobs.py`, `scheduler.py`, `server.py` |
| **Tests** | `operator_engine/tests/` |
| **CI Workflow** | `.github/workflows/operator-tests.yml` |
| **Run Command** | `python -m operator_engine.server` |
| **README** | `operator_engine/README.md` |
**Key Features:**
- In-memory job registry with example jobs
- Simple interval-based scheduler
- Optional HTTP API on port 8001
- Job lifecycle management (pending, running, completed, failed)
**How to Run:**
```bash
# As a library
python -c "from operator_engine import Scheduler; print('OK')"
# As a service
python -m operator_engine.server
# Visit http://localhost:8001/docs
## 2. Frontend Architecture (Vanilla JavaScript)
### Main OS (backend/static/)
```
static/
├── index.html # OS entry point
│ └── Loads:
│ ├── css/os.css # OS styling
│ ├── js/os.js # Core OS runtime
│ ├── js/components.js # UI component library
│ ├── js/registry.js # App registry
│ └── js/apps/*.js # Individual apps
├── js/
│ ├── os.js # Core OS
│ │ ├── window.OS object # Global OS namespace
│ │ ├── Event bus # Inter-app communication
│ │ ├── Window manager # Draggable windows
│ │ └── State management # Local storage
│ │
│ ├── components.js # UI Components
│ │ ├── Button() # Button component
│ │ ├── Card() # Card component
│ │ ├── Modal() # Modal dialog
│ │ └── [12+ other components]
│ │
│ ├── registry.js # App Registry
│ │ ├── List of all apps # Icon, name, category
│ │ └── App initialization # Load on demand
│ │
│ └── apps/ # Application Modules
│ ├── prism.js # Prism Console app
│ ├── lucidia.js # AI chat app
│ ├── miners.js # Mining app
│ ├── dashboard.js # Dashboard app
│ └── [20+ other apps]
└── assets/
├── css/ # Stylesheets
│ ├── os.css # Main OS styles
│ ├── win95.css # Windows 95 theme
│ └── components.css # Component styles
└── images/ # Icons, logos, backgrounds
```
### Prism Console (backend/static/prism/)
```
prism/
├── index.html # Prism entry point (served at /prism)
│ └── Loads:
│ ├── css/prism.css # Prism-specific styling
│ ├── js/prism-core.js # Prism runtime
│ └── js/prism-components.js # Prism UI components
├── js/
│ ├── prism-core.js # Core Prism logic
│ │ ├── Job queue management # Monitor running jobs
│ │ ├── Event log viewer # System event stream
│ │ ├── Metrics dashboard # Health, performance
│ │ └── API client # Calls /api/prism/*
│ │
│ └── prism-components.js # Prism-specific UI
│ ├── JobCard() # Job display card
│ ├── LogViewer() # Event log component
│ └── MetricsChart() # Metrics visualization
└── assets/
└── css/prism.css # Prism styling
```
### Communication Pattern
```javascript
// Example: Prism Console fetching jobs
// 1. Prism UI component (prism/js/prism-core.js)
async function fetchJobs() {
const response = await fetch('/api/prism/jobs', {
headers: {
'Authorization': `Bearer ${localStorage.getItem('token')}`
}
});
const jobs = await response.json();
renderJobs(jobs);
}
// 2. Backend router (backend/app/routers/prism.py)
@router.get("/jobs")
async def get_jobs(
current_user = Depends(get_current_user),
db: AsyncSession = Depends(get_db)
):
jobs = await db.execute(select(Job).where(Job.user_id == current_user.id))
return jobs.scalars().all()
// 3. Response flows back to frontend, rendered in UI
```
---
### 4. Web Client (Pocket OS)
| Property | Value |
|----------|-------|
| **Location** | `backend/static/` (primary), `web-client/` (docs) |
| **Language** | JavaScript (Vanilla), HTML, CSS |
| **New File** | `backend/static/js/core-os-client.js` |
| **CI Workflow** | `.github/workflows/ci.yml` (HTML/JS validation) |
| **Run Command** | Served by backend at `http://localhost:8000/` |
| **README** | `web-client/README.md` |
**Key Features:**
- Windows 95-style desktop UI
- New `CoreOSClient` class for API integration
- Event-driven architecture
- Zero dependencies
**How to Run:**
```bash
# Start backend (serves frontend at /)
cd backend
uvicorn app.main:app --reload
# Visit http://localhost:8000/
```
**New in Phase 2:**
```javascript
await window.coreOS.initialize();
const version = await window.coreOS.getVersion();
console.log('OS Version:', version.version);
## 3. Backend API Architecture
### Router Organization (backend/app/routers/)
```
routers/
├── auth.py # Authentication
│ ├── POST /api/auth/register # User registration
│ ├── POST /api/auth/login # User login
│ ├── POST /api/auth/refresh # Token refresh
│ └── GET /api/auth/me # Current user
├── prism_static.py # Prism Console static serving (NEW)
│ └── GET /prism/* # Serve Prism UI files
├── prism.py # Prism API (future)
│ ├── GET /api/prism/jobs # List jobs
│ ├── POST /api/prism/jobs # Create job
│ ├── GET /api/prism/jobs/{id} # Get job details
│ ├── GET /api/prism/events # Event stream
│ └── GET /api/prism/metrics # System metrics
├── dashboard.py # Dashboard data
│ ├── GET /api/dashboard/stats # System statistics
│ └── GET /api/dashboard/activity # Recent activity
├── blockchain.py # RoadChain
│ ├── GET /api/blockchain/blocks # List blocks
│ ├── POST /api/blockchain/blocks # Create block
│ └── GET /api/blockchain/verify # Verify chain
├── ai_chat.py # AI/Lucidia integration
│ ├── POST /api/chat/message # Send message
│ └── GET /api/chat/history # Chat history
├── miner.py # Mining operations
│ ├── POST /api/miner/start # Start mining
│ ├── POST /api/miner/stop # Stop mining
│ └── GET /api/miner/stats # Mining statistics
└── [30+ other routers] # See backend/app/main.py for full list
```
### Service Layer (backend/app/services/)
```
services/
├── auth.py # Authentication logic
│ ├── authenticate_user() # Verify credentials
│ ├── create_access_token() # Generate JWT
│ └── verify_token() # Validate JWT
├── crypto.py # Cryptography
│ ├── hash_password() # Password hashing
│ ├── verify_password() # Password verification
│ └── encrypt_wallet_key() # Wallet encryption
├── blockchain.py # RoadChain logic
│ ├── create_block() # Create new block
│ ├── verify_chain() # Verify blockchain
│ └── calculate_hash() # SHA-256 hashing
└── [Other services]
```
### Database Models (backend/app/models/)
```
models/
├── user.py # User model
│ ├── id: int (PK)
│ ├── email: str (unique)
│ ├── password_hash: str
│ ├── created_at: datetime
│ └── Relationships: wallets, jobs
├── wallet.py # Wallet model
│ ├── id: int (PK)
│ ├── user_id: int (FK → users)
│ ├── address: str (unique)
│ ├── private_key_encrypted: str
│ └── balance: float
├── block.py # Blockchain block
│ ├── id: int (PK)
│ ├── index: int
│ ├── timestamp: datetime
│ ├── data: JSON
│ ├── previous_hash: str
│ └── hash: str
├── job.py # Prism job (future)
│ ├── id: int (PK)
│ ├── user_id: int (FK → users)
│ ├── type: str (e.g., "deploy", "test")
│ ├── status: str (pending/running/completed/failed)
│ ├── created_at: datetime
│ └── result: JSON
└── [Other models]
```
---
### 5. Prism Console
| Property | Value |
|----------|-------|
| **Location** | `prism-console/` |
| **Language** | HTML, CSS, JavaScript |
| **Entry Point** | `prism-console/index.html` |
| **Run Command** | `cd prism-console && python -m http.server 8080` |
| **README** | `prism-console/README.md` |
**Key Features:**
- Modern dark-themed admin UI
- Multi-tab navigation (Overview, Jobs, Agents, Logs, System)
- System metrics dashboard
- Backend API integration
- Auto-refresh every 30 seconds
**How to Run:**
```bash
# Standalone
cd prism-console
python -m http.server 8080
# Visit http://localhost:8080/
# Or integrate with backend (future)
# Visit http://localhost:8000/prism
```
---
### 6. Documentation (Codex)
| Property | Value |
|----------|-------|
| **Location** | `codex-docs/` |
| **Technology** | MkDocs + Material theme |
| **Config** | `codex-docs/mkdocs.yml` |
| **Source** | `codex-docs/docs/` |
| **CI Workflow** | `.github/workflows/docs-build.yml` |
| **Run Command** | `cd codex-docs && mkdocs serve` |
| **README** | `codex-docs/README.md` |
**Key Features:**
- Complete system documentation
- Architecture guides
- Component documentation
- API reference
- Development guides
**How to Run:**
```bash
cd codex-docs
pip install mkdocs mkdocs-material mkdocstrings
mkdocs serve
# Visit http://localhost:8000
## 4. Agent Ecosystem (agents/)
### Base Framework (agents/base/)
```
base/
├── agent.py # Base Agent class
│ ├── __init__(name, version, category)
│ ├── async execute() # Main execution method
│ ├── async initialize() # Setup before execution
│ ├── async cleanup() # Cleanup after execution
│ └── async on_error(error) # Error handling
├── executor.py # Execution engine
│ ├── run_agent(agent) # Execute single agent
│ ├── run_workflow(agents) # Execute agent workflow
│ └── schedule_agent(agent, cron) # Schedule recurring execution
└── registry.py # Agent discovery
├── register(agent) # Register agent
├── discover() # Auto-discover agents
└── get_agent(name) # Get agent by name
```
### Agent Categories (agents/categories/)
```
categories/
├── devops/ # DevOps agents (30+)
│ ├── deploy_agent.py # Deployment automation
│ ├── monitor_agent.py # Infrastructure monitoring
│ └── backup_agent.py # Backup automation
├── engineering/ # Engineering agents (40+)
│ ├── code_review_agent.py # Code review
│ ├── test_generator_agent.py # Test generation
│ └── refactor_agent.py # Code refactoring
├── ai_ml/ # AI/ML agents (25+)
│ ├── model_trainer_agent.py # Model training
│ ├── data_pipeline_agent.py # Data processing
│ └── inference_agent.py # Model inference
└── [7 more categories] # See agents/README.md
```
### Agent Communication (via Prism)
```
┌─────────────────────────────────────────────────────────────┐
│ AGENT A (Deploy Agent) │
│ 1. Execute deployment │
│ 2. Publish event to Prism: {"type": "deploy_complete"} │
└─────────────────────────────────────────────────────────────┘
↓ Event
┌─────────────────────────────────────────────────────────────┐
│ PRISM (Event Bus) │
│ - Receives event │
│ - Logs to event table (database) │
│ - Publishes to Redis (pub/sub) │
│ - Notifies subscribed agents │
└─────────────────────────────────────────────────────────────┘
↓ Subscription
┌─────────────────────────────────────────────────────────────┐
│ AGENT B (Monitor Agent) │
│ 1. Receives "deploy_complete" event │
│ 2. Runs health checks │
│ 3. Publishes event: {"type": "health_check_passed"} │
└─────────────────────────────────────────────────────────────┘
```
---
## CI/CD Workflows
All workflows in `.github/workflows/`:
| Workflow | Triggers | Tests | Artifact |
|----------|----------|-------|----------|
| `backend-tests.yml` | backend/* changes | Backend API + system endpoints | Test results |
| `core-os-tests.yml` | core_os/* changes | Core OS models + state management | Test results |
| `operator-tests.yml` | operator_engine/* changes | Operator jobs + scheduler | Test results |
| `docs-build.yml` | codex-docs/* changes | MkDocs build | Documentation site |
| `ci.yml` | HTML/JS changes | HTML/JS validation | - |
---
## Integration Flow
### User Request Flow
```
User Browser
Web Client (Pocket OS)
├── core-os-client.js
├── Calls: GET /api/system/version
└── Calls: GET /api/system/os/state
Backend API (FastAPI)
├── /api/system/version → system.py router
├── /api/system/config/public → system.py router
└── /api/system/os/state → system.py router (stub)
Core OS Runtime (future integration)
├── get_current_state()
└── Returns OSState with windows, desktop, etc.
```
### Admin/Ops Flow
```
Admin Browser
Prism Console
├── prism.js
├── Calls: GET /api/system/version
├── Calls: GET /api/system/config/public
└── Calls: GET /api/operator/jobs (future)
Backend API
Operator Engine (future integration)
├── list_jobs()
└── execute_job(job_id)
## 5. Documentation (codex-docs/)
### MkDocs Structure
```
codex-docs/
├── mkdocs.yml # Configuration
│ ├── site_name: "BlackRoad OS Codex"
│ ├── theme: material # Material for MkDocs
│ ├── plugins: search, etc. # MkDocs plugins
│ └── nav: [navigation structure] # Sidebar navigation
├── docs/ # Markdown documentation
│ ├── index.md # Landing page
│ │
│ ├── architecture/ # Architecture docs
│ │ ├── overview.md # System overview
│ │ ├── phase2-decisions.md # Phase 2.5 decisions
│ │ └── infra-deployment.md # Deployment architecture
│ │
│ ├── api/ # API reference
│ │ ├── authentication.md # Auth endpoints
│ │ ├── prism.md # Prism API
│ │ └── blockchain.md # RoadChain API
│ │
│ ├── guides/ # User guides
│ │ ├── quickstart.md # Quick start guide
│ │ ├── deployment.md # Deployment guide
│ │ └── development.md # Development setup
│ │
│ ├── agents/ # Agent documentation
│ │ ├── overview.md # Agent ecosystem
│ │ ├── creating-agents.md # How to create agents
│ │ └── categories.md # Agent categories
│ │
│ └── contributing.md # Contribution guidelines
├── DEPLOY_DOCS.md # Deployment guide for docs
└── site/ # Generated site (gitignored)
└── [Built HTML files]
```
### Documentation Deployment Flow
```
┌─────────────────────────────────────────────────────────────┐
│ DEVELOPER │
│ 1. Edit markdown in codex-docs/docs/ │
│ 2. Test locally: mkdocs serve │
│ 3. Commit and push to main │
└─────────────────────────────────────────────────────────────┘
↓ Git Push
┌─────────────────────────────────────────────────────────────┐
│ GITHUB ACTIONS (.github/workflows/docs-deploy.yml) │
│ 1. Checkout code │
│ 2. Install MkDocs + Material theme │
│ 3. Run: mkdocs build --strict │
│ 4. Deploy to gh-pages branch │
└─────────────────────────────────────────────────────────────┘
↓ Deploy
┌─────────────────────────────────────────────────────────────┐
│ GITHUB PAGES │
│ - Serves from: gh-pages branch │
│ - URL: https://blackboxprogramming.github.io/BlackRoad-* │
└─────────────────────────────────────────────────────────────┘
↓ DNS
┌─────────────────────────────────────────────────────────────┐
│ CLOUDFLARE │
│ - CNAME: docs.blackroad.systems → blackboxprogramming.github.io │
│ - Proxied: Yes (SSL + CDN) │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ USER │
│ - Visits: https://docs.blackroad.systems │
│ - Views: MkDocs documentation │
└─────────────────────────────────────────────────────────────┘
```
---
## Request Path Examples
### Example 1: Get System Version
**Client Code:**
```javascript
const version = await window.coreOS.getVersion();
```
**HTTP Request:**
```
GET /api/system/version
```
**Backend Route:**
```python
# backend/app/routers/system.py
@router.get("/version")
async def get_version():
return {
"version": settings.APP_VERSION,
"build_time": datetime.utcnow().isoformat(),
"env": settings.ENVIRONMENT,
}
```
**Response:**
```json
{
"version": "1.0.0",
"build_time": "2025-11-18T12:00:00",
"env": "development",
"git_sha": "abc12345"
}
## 6. SDK Architecture (sdk/)
### Python SDK (sdk/python/)
```python
# Example usage:
from blackroad import BlackRoadClient
client = BlackRoadClient(
base_url="https://blackroad.systems",
api_key="your-api-key"
)
# Authenticate
user = await client.auth.login("email@example.com", "password")
# Create a job
job = await client.prism.create_job({
"type": "deploy",
"target": "production",
"config": {...}
})
# Monitor job
status = await client.prism.get_job_status(job.id)
```
### TypeScript SDK (sdk/typescript/)
```typescript
// Example usage:
import { BlackRoadClient } from '@blackroad/sdk';
const client = new BlackRoadClient({
baseUrl: 'https://blackroad.systems',
apiKey: 'your-api-key'
});
// Authenticate
const user = await client.auth.login('email@example.com', 'password');
// Create a job
const job = await client.prism.createJob({
type: 'deploy',
target: 'production',
config: {...}
});
// Monitor job
const status = await client.prism.getJobStatus(job.id);
```
---
### Example 2: Get Public Config
**Client Code:**
```javascript
const config = await window.coreOS.getPublicConfig();
```
**HTTP Request:**
```
GET /api/system/config/public
```
**Response:**
```json
{
"environment": "development",
"app_name": "BlackRoad Operating System",
"version": "1.0.0",
"features": {
"blockchain_enabled": true,
"ai_agents_enabled": true,
"video_streaming_enabled": true
},
"limits": {
"max_upload_size_mb": 100,
"session_timeout_minutes": 60
},
"external_services": {
"github_integration": true,
"stripe_enabled": false,
"openai_enabled": true
}
}
## 7. Infrastructure (infra/)
### Cloudflare (infra/cloudflare/)
```
cloudflare/
├── records.yaml # DNS records
├── CLOUDFLARE_DNS_BLUEPRINT.md # DNS configuration guide
├── DNS_CONFIGURATION.md # Detailed DNS setup (NEW)
└── cloudflare_dns_sync.py # Automated DNS sync script
```
### Railway (infra/railway/)
```
railway/
├── RAILWAY_DEPLOYMENT_GUIDE.md # Complete deployment guide (NEW)
├── railway.toml # Railway configuration
└── railway.json # Service definitions
```
### Environment (infra/env/)
```
env/
└── ENVIRONMENT_MAP.md # Cross-platform env vars
```
---
### Example 3: Initialize OS (Client-side)
**Client Code:**
```javascript
const result = await window.coreOS.initialize();
console.log('Version:', result.version);
console.log('Config:', result.config);
console.log('State:', result.state);
```
**Makes 3 parallel requests:**
1. `GET /api/system/version`
2. `GET /api/system/config/public`
3. `GET /api/system/os/state`
---
## Testing Each Component
### Backend API
```bash
cd backend
pytest tests/test_system.py -v
```
### Core OS
```bash
pytest core_os/tests/ -v
```
### Operator Engine
```bash
pytest operator_engine/tests/ -v
```
### Web Client
```bash
# Start backend
cd backend && uvicorn app.main:app --reload
# Open browser: http://localhost:8000/
# Open console: Should see "Core OS Client loaded (v0.1.0)"
# Run: await window.coreOS.initialize()
```
### Prism Console
```bash
cd prism-console
python -m http.server 8080
# Visit http://localhost:8080/
# Should see system metrics dashboard
```
### Documentation
```bash
cd codex-docs
mkdocs build
# Check for errors in build output
```
---
## File Count Summary
| Component | Files Created | Tests | CI Workflows |
|-----------|--------------|-------|--------------|
| Backend API | 1 new router | 1 test file | Existing |
| Core OS | 6 files | 2 test files | 1 new workflow |
| Operator Engine | 7 files | 2 test files | 1 new workflow |
| Web Client | 2 files | Manual | Existing |
| Prism Console | 4 files | Manual | None yet |
| Documentation | 10+ files | Build test | 1 new workflow |
**Total New Files:** ~30+
**Total New Tests:** 5 test files
**Total New Workflows:** 3 CI workflows
---
## Environment Variables
All modules share these environment variables (set in `backend/.env`):
```bash
# Core
DATABASE_URL=postgresql+asyncpg://user:pass@host:5432/db
REDIS_URL=redis://localhost:6379/0
SECRET_KEY=your-secret-key-here
# Application
APP_NAME="BlackRoad Operating System"
APP_VERSION="1.0.0"
ENVIRONMENT=development
# Operator
SCHEDULER_INTERVAL_SECONDS=60
MAX_CONCURRENT_JOBS=5
# External (optional)
GITHUB_TOKEN=...
OPENAI_API_KEY=...
STRIPE_SECRET_KEY=...
```
---
## Next Steps (Post-PR)
1. **Merge PR** - Review and merge this scaffold
2. **Deploy to Railway** - Test in production
3. **Integrate Core OS** - Connect backend API to core_os module
4. **Enable Prism Route** - Serve Prism at `/prism` from backend
5. **Add WebSocket** - Real-time state sync
6. **Production Jobs** - Replace stub jobs with real ones
7. **Deploy Docs** - Publish Codex to GitHub Pages
---
## Troubleshooting
### Backend won't start
```bash
# Check dependencies
pip install -r backend/requirements.txt
# Check database
# Ensure DATABASE_URL is set
# Check ports
# Ensure port 8000 is available
```
### Tests failing
```bash
# Install test dependencies
pip install pytest pytest-asyncio pytest-cov
# Run with verbose output
pytest -v --tb=short
```
### Docs won't build
```bash
# Install MkDocs
pip install mkdocs mkdocs-material mkdocstrings
# Build with strict mode
cd codex-docs
mkdocs build --strict
```
---
## Repository Summary
**Monorepo:** `blackboxprogramming/BlackRoad-Operating-System`
**Branch:** `claude/os-phase2-scaffold-01LKeSDWFNBtXhhsV2xMbM4T`
**Components:** 6 modules (API, Core OS, Operator, Web, Prism, Docs)
**New Code:** ~3,000 lines (Python + JavaScript + HTML + Markdown)
**Tests:** 5 test suites with 15+ tests
**CI:** 3 new workflows + 4 existing
**Documentation:** 10+ pages in MkDocs
---
**Phase 2 Scaffold Complete! Ready for Alexa's review. 🚀**
## 8. CI/CD (.github/workflows/)
```
workflows/
├── ci.yml # Main CI (lint, test, build)
├── backend-tests.yml # Backend test suite
├── railway-deploy.yml # Deploy to Railway
├── docs-deploy.yml # Deploy docs to GitHub Pages (NEW)
├── railway-automation.yml # Railway secrets audit
└── [Other workflows]
```
---
## API Contracts Between Layers
### Frontend ↔ Backend
**Authentication:**
```typescript
// Request
POST /api/auth/login
{
"email": "user@example.com",
"password": "password123"
}
// Response
{
"access_token": "eyJhbGciOi...",
"token_type": "bearer",
"user": {
"id": 1,
"email": "user@example.com"
}
}
```
**Prism Jobs:**
```typescript
// Request
GET /api/prism/jobs
Headers: { "Authorization": "Bearer eyJhbGciOi..." }
// Response
{
"data": [
{
"id": 1,
"type": "deploy",
"status": "completed",
"created_at": "2025-11-18T12:00:00Z",
"result": {...}
}
],
"total": 42,
"page": 1,
"per_page": 20
}
```
### Backend ↔ Database
**User Query:**
```python
# ORM Query (SQLAlchemy)
from app.models.user import User
from sqlalchemy import select
result = await db.execute(
select(User).where(User.email == email)
)
user = result.scalar_one_or_none()
```
**Blockchain Query:**
```python
# Get latest blocks
from app.models.block import Block
result = await db.execute(
select(Block)
.order_by(Block.index.desc())
.limit(10)
)
blocks = result.scalars().all()
```
### Backend ↔ Redis
**Session Storage:**
```python
# Store session
await redis.setex(
f"session:{user_id}",
3600, # 1 hour
json.dumps({"user_id": user_id, "email": email})
)
# Retrieve session
session_data = await redis.get(f"session:{user_id}")
```
**WebSocket State:**
```python
# Publish event
await redis.publish(
"prism:events",
json.dumps({"type": "job_completed", "job_id": 123})
)
# Subscribe to events
pubsub = redis.pubsub()
await pubsub.subscribe("prism:events")
```
---
## Key Integration Points
### 1. OS → Prism Console
- User clicks "Prism Console" app in OS
- OS opens window with iframe/route to `/prism`
- Prism UI loads, shares auth token from OS
- Prism makes API calls to `/api/prism/*`
### 2. Prism → Backend API
- Prism fetches jobs: `GET /api/prism/jobs`
- Backend queries database via models
- Returns JSON response
- Prism renders in UI
### 3. Backend → Database
- Router receives request
- Service layer business logic
- ORM query via async session
- Results returned to router
### 4. Backend → Redis
- Session management
- WebSocket state
- Caching API responses
- Pub/sub for real-time events
### 5. Frontend → Documentation
- "Help" link in OS
- Opens new tab to `https://docs.blackroad.systems`
- MkDocs site served from GitHub Pages
- Searchable documentation
---
## Deployment Connections
### Development Environment
```
Developer Machine
├── Backend: http://localhost:8000
│ ├── OS: http://localhost:8000/
│ ├── Prism: http://localhost:8000/prism
│ └── API Docs: http://localhost:8000/api/docs
├── Docs: http://localhost:8001
│ └── mkdocs serve (port 8001)
├── PostgreSQL: localhost:5432 (via Docker)
└── Redis: localhost:6379 (via Docker)
```
### Production Environment
```
User Browser
Cloudflare CDN (DNS + SSL)
Railway Backend
├── FastAPI (port 8000)
├── PostgreSQL (Railway managed)
└── Redis (Railway managed)
GitHub Pages
└── Docs (codex-docs/ → gh-pages branch)
```
---
## Phase 2 vs Phase 3: Monorepo Evolution
### Phase 2 (Current): Monorepo
**All in `BlackRoad-Operating-System`:**
- ✅ Single source of truth
- ✅ Easy cross-component changes
- ✅ Simple CI/CD
### Phase 3 (Future): Multi-Repo
**When to split:**
- Team size > 10 developers
- Independent release cycles needed
- Different tech stacks emerging
**Potential split:**
```
blackroad-os-core → Core runtime (Python)
blackroad-os-api → Backend API (Python/FastAPI)
blackroad-os-web → Frontend UI (JavaScript)
blackroad-os-prism → Prism Console (JavaScript/Python)
blackroad-os-operator → Worker engine (Python)
blackroad-os-docs → Documentation (Markdown/MkDocs)
```
**Migration strategy:**
- Use `git subtree split` to preserve history
- Set up cross-repo CI coordination
- Implement versioned API contracts
- Maintain unified documentation
---
## Summary: How It All Connects
1. **User** visits `blackroad.systems`
2. **Cloudflare** resolves DNS, terminates SSL, proxies to Railway
3. **Railway** runs FastAPI backend
4. **Backend** serves static OS UI from `backend/static/`
5. **OS** boots in browser, renders Windows 95-style interface
6. **User** opens Prism Console app
7. **OS** loads `/prism` route (static Prism UI)
8. **Prism** makes API calls to `/api/prism/*`
9. **Backend** routes to `routers/prism.py`
10. **Router** calls service layer
11. **Service** queries database via models
12. **Database** returns data
13. **Service** returns to router
14. **Router** returns JSON to Prism
15. **Prism** renders data in UI
16. **User** sees job queue, metrics, events
**For documentation:**
1. **Developer** edits `codex-docs/docs/`
2. **Push** to main branch
3. **GitHub Actions** runs `mkdocs build`
4. **Deploys** to `gh-pages` branch
5. **GitHub Pages** serves at `blackboxprogramming.github.io/...`
6. **Cloudflare** CNAMEs `docs.blackroad.systems` to GitHub Pages
7. **User** visits `https://docs.blackroad.systems`
---
**Where AI meets the open road.** 🛣️
*Complete repository map showing all module connections and data flows.*