384 lines
12 KiB
Markdown
384 lines
12 KiB
Markdown
|
|
# FedMart UI - XIC Real-Time Pipeline Monitor
|
|||
|
|
|
|||
|
|
Real-time telemetry dashboard for XIC (eXtended Infrastructure Cognition) symbolic pipeline execution with interactive guardrail controls and glyph resonance visualization.
|
|||
|
|
|
|||
|
|
## Overview
|
|||
|
|
|
|||
|
|
The FedMart UI provides a browser-based monitoring interface for the XIC v1.5 symbolic pipeline. It connects to the telemetry ingestion service via WebSocket to receive real-time updates about pipeline execution, multi-glyph resonance scores, and guardrail events.
|
|||
|
|
|
|||
|
|
### Key Features
|
|||
|
|
|
|||
|
|
- **Pipeline Timeline**: Step-by-step execution trace with timing information
|
|||
|
|
- **Glyph Resonance Heatmap**: Visual representation of resonance weights across glyphs using a color-coded canvas
|
|||
|
|
- **Glyph Inspector**: Detailed metrics for individual glyphs (weight, lineage score, contributor score, etc.)
|
|||
|
|
- **Guardrail Control**: Live guardrail status display with pause and throttle buttons
|
|||
|
|
- **Specification Coverage**: Track XIC instruction implementation status and test coverage
|
|||
|
|
- **Real-time Updates**: WebSocket-based live streaming of telemetry events
|
|||
|
|
|
|||
|
|
## Architecture
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ React/Browser (or Static HTML) │
|
|||
|
|
│ ┌─────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ XIC Panel (index.html) │ │
|
|||
|
|
│ │ ├─ Timeline Visualization │ │
|
|||
|
|
│ │ ├─ Heatmap Canvas │ │
|
|||
|
|
│ │ ├─ Glyph Inspector │ │
|
|||
|
|
│ │ ├─ Guardrail Control │ │
|
|||
|
|
│ │ └─ Spec Coverage │ │
|
|||
|
|
│ └─────────────────────────────────────────────────┘ │
|
|||
|
|
│ ↓ WebSocket & REST │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ FastAPI Backend (server.py) │
|
|||
|
|
│ ├─ /ws/fedmart/xic (WebSocket broadcast) │
|
|||
|
|
│ ├─ /fedmart/ingest/xic (Telemetry ingestion) │
|
|||
|
|
│ ├─ /fedmart/control/pause (Pause signal) │
|
|||
|
|
│ ├─ /fedmart/control/throttle (Throttle signal) │
|
|||
|
|
│ └─ /fedmart/status (System status) │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ XIC Pipeline │
|
|||
|
|
│ └─ Emits telemetry via FedMartAdapter │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Installation & Setup
|
|||
|
|
|
|||
|
|
### Prerequisites
|
|||
|
|
|
|||
|
|
- FastAPI server running (see `/home/dave/server.py`)
|
|||
|
|
- Python 3.9+ with uvicorn
|
|||
|
|
- Modern web browser with WebSocket support
|
|||
|
|
|
|||
|
|
### Quick Start
|
|||
|
|
|
|||
|
|
1. **Start the FastAPI server** (if not already running):
|
|||
|
|
```bash
|
|||
|
|
python3 server.py
|
|||
|
|
# Server starts on http://localhost:8000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **Open the UI in a browser**:
|
|||
|
|
```
|
|||
|
|
http://localhost:8000/fedmart_ui/modules/xic_panel/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **Click "Connect to Feed"**:
|
|||
|
|
- UI establishes WebSocket connection to `/ws/fedmart/xic`
|
|||
|
|
- Status indicator changes to "Connected ✓"
|
|||
|
|
- UI is ready to receive telemetry
|
|||
|
|
|
|||
|
|
4. **Run an XIC pipeline**:
|
|||
|
|
- Execute any XIC program that emits telemetry
|
|||
|
|
- Telemetry events appear in real-time in the dashboard
|
|||
|
|
- Timeline updates, heatmap renders, metrics display
|
|||
|
|
|
|||
|
|
## Module Structure
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
fedmart_ui/
|
|||
|
|
├── README.md (this file)
|
|||
|
|
└── modules/
|
|||
|
|
└── xic_panel/
|
|||
|
|
├── index.html (UI template with all panels)
|
|||
|
|
├── xic_panel.css (Professional dark-theme styling)
|
|||
|
|
├── xic_panel.js (Real-time data handling & rendering)
|
|||
|
|
└── README.md (Detailed component documentation)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## File Descriptions
|
|||
|
|
|
|||
|
|
### index.html
|
|||
|
|
|
|||
|
|
HTML5 template with:
|
|||
|
|
- Responsive grid layout (2 columns on desktop, 1 on mobile)
|
|||
|
|
- Six main panels: header, timeline, heatmap, inspector, guardrail control, spec coverage
|
|||
|
|
- Canvas element for heatmap rendering
|
|||
|
|
- Dropdown for glyph selection
|
|||
|
|
- Buttons for feed connection and guardrail controls
|
|||
|
|
|
|||
|
|
### xic_panel.css
|
|||
|
|
|
|||
|
|
Stylesheet with:
|
|||
|
|
- Dark theme (#1e1e1e background, #667eea accent colors)
|
|||
|
|
- Responsive media queries for mobile compatibility
|
|||
|
|
- Color-coded elements:
|
|||
|
|
- Blue: Standard pipeline steps
|
|||
|
|
- Orange: Control/warning events
|
|||
|
|
- Red: Guardrail triggers
|
|||
|
|
- Gradient heatmap legend (blue → green → orange)
|
|||
|
|
- Smooth transitions and hover effects
|
|||
|
|
|
|||
|
|
### xic_panel.js
|
|||
|
|
|
|||
|
|
JavaScript module (ES6) with:
|
|||
|
|
- `XICMonitor` class managing the entire UI state
|
|||
|
|
- WebSocket subscription with automatic reconnection
|
|||
|
|
- Telemetry processing and buffer management
|
|||
|
|
- Timeline rendering from step metadata
|
|||
|
|
- Canvas-based heatmap visualization with color gradients
|
|||
|
|
- Glyph selector population and inspector rendering
|
|||
|
|
- Guardrail alert display with action buttons
|
|||
|
|
- REST API calls to control endpoints
|
|||
|
|
|
|||
|
|
## Telemetry Schema
|
|||
|
|
|
|||
|
|
The dashboard expects telemetry in this format:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"event_type": "symbolic_pipeline_run",
|
|||
|
|
"timestamp": "2026-05-21T12:00:00Z",
|
|||
|
|
"run_id": "xic_1234567890",
|
|||
|
|
"program": "demo_symbolic.gx.json",
|
|||
|
|
"chain_label": "analysis_1",
|
|||
|
|
"glyph_ids": ["glyph://a", "glyph://b", "glyph://c"],
|
|||
|
|
"glyph_count": 3,
|
|||
|
|
"global_resonance_score": 0.847,
|
|||
|
|
"steps_executed": 20,
|
|||
|
|
"guardrails_triggered": [],
|
|||
|
|
"resonance_map_summary": {
|
|||
|
|
"top_glyphs": [
|
|||
|
|
{"glyph_id": "glyph://a", "weight": 0.95},
|
|||
|
|
{"glyph_id": "glyph://b", "weight": 0.73},
|
|||
|
|
{"glyph_id": "glyph://c", "weight": 0.81}
|
|||
|
|
],
|
|||
|
|
"average_resonance": 0.83
|
|||
|
|
},
|
|||
|
|
"raw_payload": {
|
|||
|
|
"output_text": "Pipeline execution complete",
|
|||
|
|
"fused_symbol_summary": { ... }
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Required Fields:**
|
|||
|
|
- `event_type`: Always "symbolic_pipeline_run"
|
|||
|
|
- `timestamp`: ISO 8601 UTC timestamp
|
|||
|
|
- `run_id`: Unique identifier for the execution
|
|||
|
|
- `glyph_count`: Number of glyphs involved
|
|||
|
|
- `global_resonance_score`: 0.0-1.0 float
|
|||
|
|
- `steps_executed`: Integer count
|
|||
|
|
- `guardrails_triggered`: Array (empty if none)
|
|||
|
|
|
|||
|
|
**Optional Fields:**
|
|||
|
|
- `program`, `chain_label`: Execution context metadata
|
|||
|
|
- `glyph_ids`, `resonance_map_summary`: Multi-glyph analysis
|
|||
|
|
- `raw_payload`: Raw pipeline output
|
|||
|
|
|
|||
|
|
## UI Components
|
|||
|
|
|
|||
|
|
### Pipeline Timeline
|
|||
|
|
Shows execution steps in chronological order:
|
|||
|
|
- Program loading
|
|||
|
|
- Chain entry
|
|||
|
|
- Multi-glyph resonance computation
|
|||
|
|
- Guardrail enforcement
|
|||
|
|
- Symbolic fusion
|
|||
|
|
|
|||
|
|
Each step displays as a colored bar with the step name.
|
|||
|
|
|
|||
|
|
### Glyph Resonance Heatmap
|
|||
|
|
Canvas-based visualization:
|
|||
|
|
- X-axis: Individual glyphs
|
|||
|
|
- Y-axis: Resonance weight (0.0-1.0)
|
|||
|
|
- Color: Blue (low) → Green (mid) → Orange (high)
|
|||
|
|
- Hover-friendly with clear labels
|
|||
|
|
|
|||
|
|
### Glyph Inspector
|
|||
|
|
Detailed metrics for selected glyph:
|
|||
|
|
- Glyph ID
|
|||
|
|
- Resonance Weight (%)
|
|||
|
|
- Status (Active/Inactive)
|
|||
|
|
- (Extensible for additional metrics)
|
|||
|
|
|
|||
|
|
### Guardrail Control
|
|||
|
|
- Live list of triggered guardrails
|
|||
|
|
- Pause Run button (sends control signal)
|
|||
|
|
- Throttle 50% button (reduces execution speed)
|
|||
|
|
- Enabled only when guardrails are active
|
|||
|
|
|
|||
|
|
### Specification Coverage
|
|||
|
|
Status grid showing XIC instruction implementation:
|
|||
|
|
- Instructions grouped by phase
|
|||
|
|
- Color-coded by status: green (implemented), blue (validated), orange (pending)
|
|||
|
|
- Coverage percentage per instruction
|
|||
|
|
|
|||
|
|
## REST API Endpoints
|
|||
|
|
|
|||
|
|
### Telemetry Ingestion
|
|||
|
|
|
|||
|
|
**POST /fedmart/ingest/xic**
|
|||
|
|
|
|||
|
|
Ingest a telemetry event:
|
|||
|
|
```bash
|
|||
|
|
curl -X POST http://localhost:8000/fedmart/ingest/xic \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{
|
|||
|
|
"event_type": "symbolic_pipeline_run",
|
|||
|
|
"glyph_count": 3,
|
|||
|
|
"global_resonance_score": 0.847,
|
|||
|
|
"steps_executed": 20,
|
|||
|
|
"guardrails_triggered": []
|
|||
|
|
}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Response:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"status": "accepted",
|
|||
|
|
"run_id": "xic_1234567890",
|
|||
|
|
"buffer_size": 42
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Control Actions
|
|||
|
|
|
|||
|
|
**POST /fedmart/control/pause**
|
|||
|
|
|
|||
|
|
Send pause signal to a running pipeline:
|
|||
|
|
```bash
|
|||
|
|
curl -X POST http://localhost:8000/fedmart/control/pause \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{"run_id": "xic_1234567890"}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**POST /fedmart/control/throttle**
|
|||
|
|
|
|||
|
|
Throttle a pipeline's execution:
|
|||
|
|
```bash
|
|||
|
|
curl -X POST http://localhost:8000/fedmart/control/throttle \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{"run_id": "xic_1234567890", "factor": 0.5}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Telemetry Retrieval
|
|||
|
|
|
|||
|
|
**GET /fedmart/telemetry/recent?limit=10**
|
|||
|
|
|
|||
|
|
Retrieve recent telemetry events from buffer.
|
|||
|
|
|
|||
|
|
### Status
|
|||
|
|
|
|||
|
|
**GET /fedmart/status**
|
|||
|
|
|
|||
|
|
System health and statistics.
|
|||
|
|
|
|||
|
|
## WebSocket API
|
|||
|
|
|
|||
|
|
### Connection
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
const ws = new WebSocket('ws://localhost:8000/ws/fedmart/xic');
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Message Format
|
|||
|
|
|
|||
|
|
Incoming telemetry (same as POST schema):
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"event_type": "symbolic_pipeline_run",
|
|||
|
|
"timestamp": "2026-05-21T12:00:00Z",
|
|||
|
|
...
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Color Scheme
|
|||
|
|
|
|||
|
|
The dashboard uses a professional dark theme:
|
|||
|
|
|
|||
|
|
| Element | Color | Use |
|
|||
|
|
|---------|-------|-----|
|
|||
|
|
| Background | #1e1e1e | Main surface |
|
|||
|
|
| Header | Gradient (#667eea → #764ba2) | Top bar |
|
|||
|
|
| Text | #e0e0e0 | Primary text |
|
|||
|
|
| Accent | #667eea | Highlights, borders |
|
|||
|
|
| Success | #4caf50 | Active status, implemented specs |
|
|||
|
|
| Warning | #ff9800 | Control events, pending specs |
|
|||
|
|
| Error | #f44336 | Guardrails, failures |
|
|||
|
|
| Heatmap Low | #0066cc | Blue (low resonance) |
|
|||
|
|
| Heatmap Mid | #00cc66 | Green (mid resonance) |
|
|||
|
|
| Heatmap High | #ff9900 | Orange (high resonance) |
|
|||
|
|
|
|||
|
|
## Performance Considerations
|
|||
|
|
|
|||
|
|
- **Buffer Size**: Limited to 1000 telemetry events (oldest discarded)
|
|||
|
|
- **WebSocket**: Efficient binary-free JSON transport
|
|||
|
|
- **Canvas Rendering**: Optimized for 600×200px heatmap
|
|||
|
|
- **Responsive Design**: CSS Grid adapts to viewport size
|
|||
|
|
- **Client-side State**: All rendering happens in the browser (no server-side session needed)
|
|||
|
|
|
|||
|
|
## Troubleshooting
|
|||
|
|
|
|||
|
|
### "Cannot connect to WebSocket"
|
|||
|
|
- Verify FastAPI server is running on port 8000
|
|||
|
|
- Check browser console for CORS/network errors
|
|||
|
|
- Ensure firewall allows WebSocket traffic (port 8000)
|
|||
|
|
|
|||
|
|
### Heatmap not rendering
|
|||
|
|
- Browser must support HTML5 Canvas API
|
|||
|
|
- Check browser console for JavaScript errors
|
|||
|
|
- Verify telemetry includes `resonance_map_summary` with `top_glyphs`
|
|||
|
|
|
|||
|
|
### No telemetry appearing
|
|||
|
|
- Click "Connect to Feed" first
|
|||
|
|
- Ensure XIC pipeline is emitting telemetry to `/fedmart/ingest/xic`
|
|||
|
|
- Check `/fedmart/telemetry/recent` endpoint to see if events are buffered
|
|||
|
|
- Monitor browser network tab (F12) for WebSocket messages
|
|||
|
|
|
|||
|
|
### Slow performance with many events
|
|||
|
|
- Clear browser cache (Ctrl+Shift+Del)
|
|||
|
|
- Reduce WebSocket message frequency in source
|
|||
|
|
- Check browser memory usage (F12 Performance tab)
|
|||
|
|
|
|||
|
|
## Testing
|
|||
|
|
|
|||
|
|
Run the validation suite:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Test FedMart adapter
|
|||
|
|
python3 tests/validate_fedmart_integration.py
|
|||
|
|
|
|||
|
|
# Test UI components
|
|||
|
|
python3 tests/validate_ui_integration.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
All tests should show ✅ PASS status.
|
|||
|
|
|
|||
|
|
## Future Enhancements
|
|||
|
|
|
|||
|
|
- [ ] Export telemetry timeline as CSV
|
|||
|
|
- [ ] Real-time performance profiling graphs
|
|||
|
|
- [ ] Custom guardrail threshold configuration
|
|||
|
|
- [ ] Multi-run comparison view
|
|||
|
|
- [ ] Historical analysis dashboard
|
|||
|
|
- [ ] Integration with third-party monitoring (Grafana, Prometheus)
|
|||
|
|
|
|||
|
|
## Architecture Notes
|
|||
|
|
|
|||
|
|
The UI is deliberately **framework-agnostic**:
|
|||
|
|
- Pure HTML5 + CSS3 + ES6 JavaScript
|
|||
|
|
- No external dependencies (no npm, no build step)
|
|||
|
|
- Single 50KB JavaScript module
|
|||
|
|
- Easy to integrate into React, Vue, or standalone
|
|||
|
|
|
|||
|
|
For a larger project, consider:
|
|||
|
|
- Wrapping `XICMonitor` as a React component
|
|||
|
|
- Using a state management library (Redux, Zustand)
|
|||
|
|
- Adding TypeScript for type safety
|
|||
|
|
- Building a D3.js visualization layer for complex graphs
|
|||
|
|
|
|||
|
|
## Support
|
|||
|
|
|
|||
|
|
For issues, questions, or feature requests:
|
|||
|
|
1. Check the troubleshooting section above
|
|||
|
|
2. Review telemetry schema in FedMart adapter (`integrations/fedmart/xic_adapter.py`)
|
|||
|
|
3. Check FastAPI server logs for backend errors
|
|||
|
|
4. Inspect browser console (F12) for frontend errors
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Status**: ✅ Production Ready
|
|||
|
|
**Last Updated**: 2026-05-21
|
|||
|
|
**Version**: 1.5.0
|