Mock Data Layer (MSW)
Complete MSW v2 handlers and realistic mock data fixtures for a Drone Flight Controller (DFC-v2.1) project at DVT preparation stage.
Table of contents
- MSW Browser Setup
- Handler Barrel Export
- Request Handlers
- Mock Data Fixtures
src/mocks/data/sessions.jsonsrc/mocks/data/agents.jsonsrc/mocks/data/bom.jsonsrc/mocks/data/bom-risk.jsonsrc/mocks/data/compliance.jsonsrc/mocks/data/digital-thread.jsonsrc/mocks/data/supply-chain.jsonsrc/mocks/data/approvals.jsonsrc/mocks/data/artifacts.jsonsrc/mocks/data/health.jsonsrc/mocks/data/gate-readiness.jsonsrc/mocks/data/testing.jsonsrc/mocks/data/websocket-events.json
MSW Browser Setup
src/mocks/mock-server.ts
Initializes the MSW service worker for browser-based request interception.
import { setupWorker } from 'msw/browser';
import { handlers } from './handlers';
export const worker = setupWorker(...handlers);
Conditional Initialization in src/main.tsx
The mock layer is only loaded when the VITE_MOCK_API environment variable is set. This keeps the MSW dependency out of production bundles entirely via dynamic import.
import React from 'react';
import ReactDOM from 'react-dom/client';
import { App } from './App';
import './index.css';
async function enableMocking() {
if (import.meta.env.VITE_MOCK_API !== 'true') return;
const { worker } = await import('./mocks/mock-server');
return worker.start({ onUnhandledRequest: 'bypass' });
}
enableMocking().then(() => {
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<App />
</React.StrictMode>,
);
});
Handler Barrel Export
src/mocks/handlers/index.ts
Combines all domain-specific handler arrays into a single flat list for the worker.
import { sessionHandlers } from './sessions';
import { agentHandlers } from './agents';
import { healthHandlers } from './health';
import { bomHandlers } from './bom';
import { complianceHandlers } from './compliance';
import { digitalThreadHandlers } from './digital-thread';
import { supplyChainHandlers } from './supply-chain';
import { approvalHandlers } from './approvals';
import { artifactHandlers } from './artifacts';
export const handlers = [
...sessionHandlers,
...agentHandlers,
...healthHandlers,
...bomHandlers,
...complianceHandlers,
...digitalThreadHandlers,
...supplyChainHandlers,
...approvalHandlers,
...artifactHandlers,
];
Request Handlers
src/mocks/handlers/sessions.ts
import { http, HttpResponse, delay } from 'msw';
import sessionsData from '../data/sessions.json';
import type { Session } from '@/types/session';
const sessions: Session[] = sessionsData.sessions;
export const sessionHandlers = [
// GET /api/v1/sessions — paginated session list
http.get('/api/v1/sessions', async ({ request }) => {
await delay(120);
const url = new URL(request.url);
const limit = Number(url.searchParams.get('limit') ?? 50);
const offset = Number(url.searchParams.get('offset') ?? 0);
const status = url.searchParams.get('status');
let filtered = sessions;
if (status) {
filtered = sessions.filter((s) => s.status === status);
}
const page = filtered.slice(offset, offset + limit);
return HttpResponse.json({
sessions: page,
total: filtered.length,
limit,
offset,
});
}),
// GET /api/v1/session/:id — single session
http.get('/api/v1/session/:id', async ({ params }) => {
await delay(80);
const session = sessions.find((s) => s.id === params.id);
if (!session) {
return HttpResponse.json(
{ error: { code: 'NOT_FOUND', message: `Session ${params.id} not found` } },
{ status: 404 },
);
}
return HttpResponse.json(session);
}),
// POST /api/v1/session/create — create new session
http.post('/api/v1/session/create', async ({ request }) => {
await delay(200);
const body = (await request.json()) as { skill: string; input?: Record<string, unknown> };
const newSession: Session = {
id: `ses-${String(sessions.length + 1).padStart(3, '0')}`,
skill: body.skill,
status: 'created',
agent: body.skill,
title: `New ${body.skill} session`,
created: new Date().toISOString(),
updated: new Date().toISOString(),
trace: [],
artifacts: [],
};
sessions.push(newSession);
return HttpResponse.json(newSession, { status: 201 });
}),
// DELETE /api/v1/session/:id — delete session
http.delete('/api/v1/session/:id', async ({ params }) => {
await delay(100);
const idx = sessions.findIndex((s) => s.id === params.id);
if (idx === -1) {
return HttpResponse.json(
{ error: { code: 'NOT_FOUND', message: `Session ${params.id} not found` } },
{ status: 404 },
);
}
sessions.splice(idx, 1);
return new HttpResponse(null, { status: 204 });
}),
];
src/mocks/handlers/agents.ts
import { http, HttpResponse, delay } from 'msw';
import agentsData from '../data/agents.json';
import type { Agent } from '@/types/agent';
const agents: Agent[] = agentsData.agents;
export const agentHandlers = [
// GET /api/v1/agents — all registered agents
http.get('/api/v1/agents', async () => {
await delay(100);
return HttpResponse.json({ agents });
}),
// GET /api/v1/agent/:id/status — single agent status
http.get('/api/v1/agent/:id/status', async ({ params }) => {
await delay(80);
const agent = agents.find((a) => a.id === params.id);
if (!agent) {
return HttpResponse.json(
{ error: { code: 'NOT_FOUND', message: `Agent ${params.id} not found` } },
{ status: 404 },
);
}
return HttpResponse.json(agent);
}),
];
src/mocks/handlers/health.ts
import { http, HttpResponse, delay } from 'msw';
import healthData from '../data/health.json';
import agentsData from '../data/agents.json';
export const healthHandlers = [
// GET /api/v1/health — lightweight liveness probe
http.get('/api/v1/health', async () => {
await delay(50);
return HttpResponse.json(healthData);
}),
// GET /api/v1/status — full system status
http.get('/api/v1/status', async () => {
await delay(100);
return HttpResponse.json({
version: '0.1.0',
workspace: '/workspace/dfc-v2.1',
sessions: { active: 2, pending: 1, completed: 5 },
tools: healthData.components.tools,
agents: agentsData.agents.map((a) => ({
name: a.name,
version: '1.0.0',
loaded: true,
})),
});
}),
];
src/mocks/handlers/bom.ts
import { http, HttpResponse, delay } from 'msw';
import bomData from '../data/bom.json';
import bomRiskData from '../data/bom-risk.json';
export const bomHandlers = [
// GET /api/v1/bom — full bill of materials
http.get('/api/v1/bom', async () => {
await delay(150);
return HttpResponse.json({ items: bomData.items });
}),
// GET /api/v1/bom/risk — aggregated risk summary
http.get('/api/v1/bom/risk', async () => {
await delay(100);
return HttpResponse.json(bomRiskData);
}),
];
src/mocks/handlers/compliance.ts
import { http, HttpResponse, delay } from 'msw';
import complianceData from '../data/compliance.json';
export const complianceHandlers = [
// GET /api/v1/compliance/:market — compliance status per market
http.get('/api/v1/compliance/:market', async ({ params }) => {
await delay(120);
const market = (params.market as string).toUpperCase();
const data = complianceData.markets.find((m) => m.market === market);
if (!data) {
return HttpResponse.json(
{ error: { code: 'NOT_FOUND', message: `Market ${market} not found` } },
{ status: 404 },
);
}
return HttpResponse.json(data);
}),
];
src/mocks/handlers/digital-thread.ts
import { http, HttpResponse, delay } from 'msw';
import threadData from '../data/digital-thread.json';
export const digitalThreadHandlers = [
// GET /api/v1/digital-thread — full graph
http.get('/api/v1/digital-thread', async () => {
await delay(200);
return HttpResponse.json(threadData);
}),
// GET /api/v1/digital-thread/trace/:reqId — filtered subgraph
http.get('/api/v1/digital-thread/trace/:reqId', async ({ params }) => {
await delay(150);
const reqId = params.reqId as string;
// Filter to nodes reachable from the given requirement
const reachable = new Set<string>([reqId]);
let changed = true;
while (changed) {
changed = false;
for (const edge of threadData.edges) {
if (reachable.has(edge.source) && !reachable.has(edge.target)) {
reachable.add(edge.target);
changed = true;
}
}
}
const nodes = threadData.nodes.filter((n) => reachable.has(n.id));
const edges = threadData.edges.filter(
(e) => reachable.has(e.source) && reachable.has(e.target),
);
return HttpResponse.json({ nodes, edges });
}),
];
src/mocks/handlers/supply-chain.ts
import { http, HttpResponse, delay } from 'msw';
import supplyChainData from '../data/supply-chain.json';
export const supplyChainHandlers = [
// GET /api/v1/supply-chain/risks — supply chain risk items
http.get('/api/v1/supply-chain/risks', async () => {
await delay(130);
return HttpResponse.json({ risks: supplyChainData.risks });
}),
];
src/mocks/handlers/approvals.ts
import { http, HttpResponse, delay } from 'msw';
import approvalsData from '../data/approvals.json';
import type { Approval } from '@/types/approval';
const pending: Approval[] = [...approvalsData.pending];
export const approvalHandlers = [
// GET /api/v1/pending — all pending approvals
http.get('/api/v1/pending', async () => {
await delay(100);
return HttpResponse.json({ pending });
}),
// POST /api/v1/approve/:session — approve a session
http.post('/api/v1/approve/:session', async ({ params }) => {
await delay(200);
const idx = pending.findIndex((a) => a.sessionId === params.session);
if (idx !== -1) pending.splice(idx, 1);
return HttpResponse.json({
session_id: params.session,
status: 'approved',
applied: true,
});
}),
// POST /api/v1/reject/:session — reject a session
http.post('/api/v1/reject/:session', async ({ params, request }) => {
await delay(200);
const body = (await request.json()) as { reason: string };
const idx = pending.findIndex((a) => a.sessionId === params.session);
if (idx !== -1) pending.splice(idx, 1);
return HttpResponse.json({
session_id: params.session,
status: 'rejected',
reason: body.reason,
});
}),
];
src/mocks/handlers/artifacts.ts
import { http, HttpResponse, delay } from 'msw';
import artifactsData from '../data/artifacts.json';
import gateReadinessData from '../data/gate-readiness.json';
import testingData from '../data/testing.json';
import type { Artifact } from '@/types/artifact';
const artifacts: Artifact[] = artifactsData.artifacts;
export const artifactHandlers = [
// GET /api/v1/artifacts/:id — artifact metadata
http.get('/api/v1/artifacts/:id', async ({ params }) => {
await delay(80);
const artifact = artifacts.find((a) => a.id === params.id);
if (!artifact) {
return HttpResponse.json(
{ error: { code: 'NOT_FOUND', message: `Artifact ${params.id} not found` } },
{ status: 404 },
);
}
return HttpResponse.json(artifact);
}),
// GET /api/v1/artifacts/:id/gltf — mock binary blob for 3D models
http.get('/api/v1/artifacts/:id/gltf', async () => {
await delay(300);
// Return a minimal valid glTF 2.0 binary stub (GLB magic + header)
const header = new ArrayBuffer(12);
const view = new DataView(header);
view.setUint32(0, 0x46546C67, false); // magic: glTF
view.setUint32(4, 2, true); // version: 2
view.setUint32(8, 12, true); // length: 12 (header only)
return HttpResponse.arrayBuffer(header, {
headers: { 'Content-Type': 'model/gltf-binary' },
});
}),
// GET /api/v1/gate-readiness/:gate — gate readiness score
http.get('/api/v1/gate-readiness/:gate', async ({ params }) => {
await delay(100);
const gate = (params.gate as string).toUpperCase();
const data = gateReadinessData.gates.find((g) => g.gate === gate);
if (!data) {
return HttpResponse.json(
{ error: { code: 'NOT_FOUND', message: `Gate ${gate} not found` } },
{ status: 404 },
);
}
return HttpResponse.json(data);
}),
// GET /api/v1/testing/coverage — test coverage data
http.get('/api/v1/testing/coverage', async () => {
await delay(120);
return HttpResponse.json(testingData);
}),
];
Mock Data Fixtures
All fixtures represent the Drone Flight Controller DFC-v2.1 project at DVT preparation stage.
src/mocks/data/sessions.json
Eight sessions representing a full development workflow from requirements through supply chain analysis.
{
"sessions": [
{
"id": "ses-001",
"skill": "requirements",
"agent": "REQ",
"title": "Requirements Extraction",
"status": "completed",
"created": "2025-01-15T09:00:00Z",
"updated": "2025-01-15T09:12:34Z",
"trace": [
{
"timestamp": "2025-01-15T09:00:01Z",
"agent": "REQ",
"action": "parse_prd",
"message": "Parsing product requirements document...",
"duration": 4200
},
{
"timestamp": "2025-01-15T09:04:12Z",
"agent": "REQ",
"action": "extract_constraints",
"message": "Extracting electrical and mechanical constraints...",
"duration": 3800
},
{
"timestamp": "2025-01-15T09:08:01Z",
"agent": "REQ",
"action": "generate_matrix",
"message": "Generating requirements traceability matrix...",
"duration": 2100
},
{
"timestamp": "2025-01-15T09:11:32Z",
"agent": "REQ",
"action": "validate",
"message": "Validating completeness — 42 requirements identified",
"duration": 1020
}
],
"artifacts": [
{ "id": "art-001", "path": "constraints.json", "type": "file", "size": 8432 },
{ "id": "art-002", "path": "requirements_matrix.csv", "type": "file", "size": 12840 },
{ "id": "art-003", "path": "prd_summary.md", "type": "file", "size": 3200 }
]
},
{
"id": "ses-002",
"skill": "architecture",
"agent": "SYS",
"title": "System Architecture",
"status": "completed",
"created": "2025-01-16T10:00:00Z",
"updated": "2025-01-16T10:22:15Z",
"trace": [
{
"timestamp": "2025-01-16T10:00:02Z",
"agent": "SYS",
"action": "analyze_requirements",
"message": "Analyzing 42 requirements for subsystem decomposition...",
"duration": 5100
},
{
"timestamp": "2025-01-16T10:05:12Z",
"agent": "SYS",
"action": "define_subsystems",
"message": "Defining 6 subsystems: Power, Sensors, Comms, Motor Control, Flight Controller, Enclosure",
"duration": 6200
},
{
"timestamp": "2025-01-16T10:15:24Z",
"agent": "SYS",
"action": "generate_block_diagram",
"message": "Generating system block diagram in Mermaid format...",
"duration": 3400
},
{
"timestamp": "2025-01-16T10:20:45Z",
"agent": "SYS",
"action": "validate_interfaces",
"message": "Validating inter-subsystem interfaces — all 14 interfaces defined",
"duration": 1500
}
],
"artifacts": [
{ "id": "art-004", "path": "architecture.md", "type": "file", "size": 18200 },
{ "id": "art-005", "path": "block_diagram.mermaid", "type": "file", "size": 4100 },
{ "id": "art-006", "path": "interface_spec.json", "type": "file", "size": 9600 }
]
},
{
"id": "ses-003",
"skill": "electronics",
"agent": "EE",
"title": "Schematic Review & DRC",
"status": "completed",
"created": "2025-01-18T08:30:00Z",
"updated": "2025-01-18T09:15:42Z",
"trace": [
{
"timestamp": "2025-01-18T08:30:02Z",
"agent": "EE",
"action": "load_schematic",
"message": "Loading KiCad schematic (6 sheets, 312 components)...",
"duration": 2800
},
{
"timestamp": "2025-01-18T08:34:50Z",
"agent": "EE",
"action": "run_erc",
"message": "Running Electrical Rules Check — 3 warnings, 0 errors",
"duration": 8400
},
{
"timestamp": "2025-01-18T08:48:52Z",
"agent": "EE",
"action": "run_drc",
"message": "Running Design Rules Check — 1 warning (trace clearance on U3 pad 12), 0 errors",
"duration": 12200
},
{
"timestamp": "2025-01-18T09:09:04Z",
"agent": "EE",
"action": "export_bom",
"message": "Exporting BOM — 45 unique components, 312 total placements",
"duration": 3100
},
{
"timestamp": "2025-01-18T09:14:15Z",
"agent": "EE",
"action": "generate_report",
"message": "Generating DRC report with annotated schematic references",
"duration": 1270
}
],
"artifacts": [
{ "id": "art-007", "path": "board.kicad_sch", "type": "file", "size": 245000 },
{ "id": "art-008", "path": "drc_report.json", "type": "file", "size": 6200 },
{ "id": "art-009", "path": "bom.csv", "type": "file", "size": 14800 }
]
},
{
"id": "ses-004",
"skill": "firmware",
"agent": "FW",
"title": "Firmware Scaffold Generation",
"status": "completed",
"created": "2025-01-20T11:00:00Z",
"updated": "2025-01-20T11:34:22Z",
"trace": [
{
"timestamp": "2025-01-20T11:00:01Z",
"agent": "FW",
"action": "analyze_architecture",
"message": "Analyzing system architecture for firmware requirements...",
"duration": 3200
},
{
"timestamp": "2025-01-20T11:05:22Z",
"agent": "FW",
"action": "generate_hal",
"message": "Generating HAL layer for STM32H743 (SPI, I2C, UART, PWM, ADC)...",
"duration": 8500
},
{
"timestamp": "2025-01-20T11:19:43Z",
"agent": "FW",
"action": "generate_drivers",
"message": "Generating sensor drivers (BMI270, BMP390, MMC5983MA)...",
"duration": 6400
},
{
"timestamp": "2025-01-20T11:30:04Z",
"agent": "FW",
"action": "generate_cmake",
"message": "Generating CMakeLists.txt and build configuration",
"duration": 2200
},
{
"timestamp": "2025-01-20T11:33:25Z",
"agent": "FW",
"action": "validate_build",
"message": "Validating build configuration — cmake configure passed",
"duration": 970
}
],
"artifacts": [
{ "id": "art-010", "path": "firmware/src/main.c", "type": "file", "size": 4200 },
{ "id": "art-011", "path": "firmware/CMakeLists.txt", "type": "file", "size": 2800 },
{ "id": "art-012", "path": "firmware/src/hal/", "type": "directory", "size": 28400 }
]
},
{
"id": "ses-005",
"skill": "simulation",
"agent": "SIM",
"title": "Power Rail SPICE Simulation",
"status": "completed",
"created": "2025-01-22T14:00:00Z",
"updated": "2025-01-22T14:45:18Z",
"trace": [
{
"timestamp": "2025-01-22T14:00:02Z",
"agent": "SIM",
"action": "extract_netlist",
"message": "Extracting SPICE netlist from power subsystem...",
"duration": 4600
},
{
"timestamp": "2025-01-22T14:07:42Z",
"agent": "SIM",
"action": "run_dc_analysis",
"message": "Running DC operating point analysis — all rails within spec",
"duration": 8200
},
{
"timestamp": "2025-01-22T14:21:24Z",
"agent": "SIM",
"action": "run_transient",
"message": "Running transient analysis (motor startup surge, 0-100ms)...",
"duration": 12400
},
{
"timestamp": "2025-01-22T14:42:05Z",
"agent": "SIM",
"action": "generate_report",
"message": "Generating simulation report — 3.3V rail ripple: 18mV (spec: <50mV), PASS",
"duration": 3130
}
],
"artifacts": [
{ "id": "art-013", "path": "spice_results.json", "type": "file", "size": 52400 },
{ "id": "art-014", "path": "power_analysis.pdf", "type": "file", "size": 184000 },
{ "id": "art-015", "path": "transient_waveforms.csv", "type": "file", "size": 96200 }
]
},
{
"id": "ses-006",
"skill": "testing",
"agent": "TST",
"title": "DVT Test Plan Generation",
"status": "pending_approval",
"created": "2025-01-24T09:00:00Z",
"updated": "2025-01-24T09:38:50Z",
"trace": [
{
"timestamp": "2025-01-24T09:00:01Z",
"agent": "TST",
"action": "analyze_requirements",
"message": "Mapping 42 requirements to test procedures...",
"duration": 5400
},
{
"timestamp": "2025-01-24T09:09:01Z",
"agent": "TST",
"action": "generate_test_cases",
"message": "Generating 45 test cases across 6 categories...",
"duration": 12200
},
{
"timestamp": "2025-01-24T09:29:22Z",
"agent": "TST",
"action": "generate_fmea",
"message": "Generating FMEA table — 12 failure modes identified",
"duration": 7800
},
{
"timestamp": "2025-01-24T09:37:43Z",
"agent": "TST",
"action": "compile_plan",
"message": "Compiling DVT test plan document — awaiting approval",
"duration": 1070
}
],
"artifacts": [
{ "id": "art-016", "path": "test_plan.md", "type": "file", "size": 34200 },
{ "id": "art-017", "path": "fmea_table.csv", "type": "file", "size": 8400 }
]
},
{
"id": "ses-007",
"skill": "manufacturing",
"agent": "MFG",
"title": "DFM Analysis & Gerber Export",
"status": "running",
"created": "2025-01-25T08:00:00Z",
"updated": "2025-01-25T08:14:30Z",
"trace": [
{
"timestamp": "2025-01-25T08:00:02Z",
"agent": "MFG",
"action": "load_pcb",
"message": "Loading PCB layout for DFM analysis...",
"duration": 3200
},
{
"timestamp": "2025-01-25T08:05:22Z",
"agent": "MFG",
"action": "run_dfm_checks",
"message": "Running DFM checks — 2 advisories (via-in-pad on U1, tight courtyard on J3)",
"duration": 6800
},
{
"timestamp": "2025-01-25T08:12:10Z",
"agent": "MFG",
"action": "generate_gerbers",
"message": "Generating Gerber RS-274X files (6 copper layers + mask + silk)...",
"duration": null
}
],
"artifacts": []
},
{
"id": "ses-008",
"skill": "supply-chain",
"agent": "SC",
"title": "Supply Chain Risk Assessment",
"status": "running",
"created": "2025-01-25T08:30:00Z",
"updated": "2025-01-25T08:42:15Z",
"trace": [
{
"timestamp": "2025-01-25T08:30:01Z",
"agent": "SC",
"action": "load_bom",
"message": "Loading BOM (45 unique components)...",
"duration": 1800
},
{
"timestamp": "2025-01-25T08:33:01Z",
"agent": "SC",
"action": "query_distributors",
"message": "Querying DigiKey, Mouser, and LCSC for stock and pricing...",
"duration": 8400
},
{
"timestamp": "2025-01-25T08:47:01Z",
"agent": "SC",
"action": "analyze_risks",
"message": "Analyzing lifecycle, lead-time, and single-source risks...",
"duration": null
}
],
"artifacts": []
}
]
}
src/mocks/data/agents.json
Nine Phase 1 specialist agents with tool lists, current status, and session history.
{
"agents": [
{
"id": "agent-req",
"abbrev": "REQ",
"name": "Requirements Agent",
"description": "Extracts, validates, and manages hardware product requirements from PRDs and specifications",
"status": "idle",
"version": "1.0.0",
"lastRun": "2025-01-15T09:12:34Z",
"currentSession": null,
"sessionsCompleted": 1,
"tools": ["prd_parser", "constraint_extractor", "traceability_matrix"],
"capabilities": [
"PRD parsing and constraint extraction",
"Requirements traceability matrix generation",
"Completeness and consistency validation"
]
},
{
"id": "agent-sys",
"abbrev": "SYS",
"name": "Systems Agent",
"description": "Defines system architecture, subsystem decomposition, and interface specifications",
"status": "idle",
"version": "1.0.0",
"lastRun": "2025-01-16T10:22:15Z",
"currentSession": null,
"sessionsCompleted": 1,
"tools": ["architecture_generator", "interface_validator", "mermaid_renderer"],
"capabilities": [
"Subsystem decomposition from requirements",
"Block diagram generation (Mermaid)",
"Interface specification and validation"
]
},
{
"id": "agent-ee",
"abbrev": "EE",
"name": "Electronics Agent",
"description": "Performs schematic review, ERC/DRC checks, BOM export, and Gerber generation via KiCad",
"status": "idle",
"version": "1.0.0",
"lastRun": "2025-01-18T09:15:42Z",
"currentSession": null,
"sessionsCompleted": 1,
"tools": ["kicad_erc", "kicad_drc", "kicad_bom_export", "kicad_gerber_export"],
"capabilities": [
"KiCad schematic ERC validation",
"PCB design rules check (DRC)",
"BOM extraction and export",
"Gerber RS-274X file generation"
]
},
{
"id": "agent-fw",
"abbrev": "FW",
"name": "Firmware Agent",
"description": "Generates firmware scaffolds, HAL layers, and driver code for embedded targets",
"status": "idle",
"version": "1.0.0",
"lastRun": "2025-01-20T11:34:22Z",
"currentSession": null,
"sessionsCompleted": 1,
"tools": ["code_generator", "cmake_builder", "hal_generator", "static_analyzer"],
"capabilities": [
"STM32 HAL layer generation",
"Sensor driver scaffolding",
"CMake build system configuration",
"Static analysis integration"
]
},
{
"id": "agent-sim",
"abbrev": "SIM",
"name": "Simulation Agent",
"description": "Runs SPICE simulations, thermal analysis, and signal integrity checks",
"status": "idle",
"version": "1.0.0",
"lastRun": "2025-01-22T14:45:18Z",
"currentSession": null,
"sessionsCompleted": 1,
"tools": ["ngspice", "netlist_extractor", "waveform_analyzer"],
"capabilities": [
"NGSpice netlist extraction and simulation",
"DC operating point analysis",
"Transient analysis with waveform export",
"Power rail ripple and stability checks"
]
},
{
"id": "agent-tst",
"abbrev": "TST",
"name": "Test Engineering Agent",
"description": "Generates test plans, FMEA tables, and test coverage analysis for hardware validation",
"status": "idle",
"version": "1.0.0",
"lastRun": "2025-01-24T09:38:50Z",
"currentSession": null,
"sessionsCompleted": 1,
"tools": ["test_plan_generator", "fmea_generator", "coverage_analyzer"],
"capabilities": [
"DVT/PVT test plan generation",
"FMEA table construction",
"Requirements-to-test coverage mapping",
"Test procedure documentation"
]
},
{
"id": "agent-mfg",
"abbrev": "MFG",
"name": "Manufacturing Agent",
"description": "Performs DFM analysis, generates Gerber files, pick-and-place data, and manufacturing notes",
"status": "running",
"version": "1.0.0",
"lastRun": null,
"currentSession": "ses-007",
"sessionsCompleted": 0,
"tools": ["kicad_gerber_export", "dfm_checker", "pick_and_place_generator", "panelization_tool"],
"capabilities": [
"DFM rule checking (IPC-2221/IPC-7351)",
"Gerber RS-274X and Excellon drill export",
"Pick-and-place file generation",
"Panel layout optimization"
]
},
{
"id": "agent-sc",
"abbrev": "SC",
"name": "Supply Chain Agent",
"description": "Queries distributor APIs for stock, pricing, and lead times; assesses supply chain risk",
"status": "running",
"version": "1.0.0",
"lastRun": null,
"currentSession": "ses-008",
"sessionsCompleted": 0,
"tools": ["digikey_api", "mouser_api", "lcsc_api", "lifecycle_checker"],
"capabilities": [
"Multi-distributor stock and price queries",
"Lead time monitoring and alerts",
"Component lifecycle status checking",
"Alternate part recommendations"
]
},
{
"id": "agent-reg",
"abbrev": "REG",
"name": "Regulatory Agent",
"description": "Tracks compliance requirements across UKCA, CE, and FCC markets; manages evidence collection",
"status": "idle",
"version": "1.0.0",
"lastRun": null,
"currentSession": null,
"sessionsCompleted": 0,
"tools": ["regulation_database", "evidence_tracker", "compliance_checker"],
"capabilities": [
"Multi-market regulatory requirement mapping",
"Evidence collection and gap analysis",
"Compliance checklist generation",
"Test lab submission tracking"
]
}
]
}
src/mocks/data/bom.json
Forty-five components for the DFC-v2.1 drone flight controller. All part numbers are real. Risk scenarios include NRND lifecycle parts, long lead times, and single-source components.
{
"project": "DFC-v2.1",
"revision": "B",
"generatedBy": "ses-003",
"generatedAt": "2025-01-18T09:14:15Z",
"items": [
{
"id": "bom-001",
"designator": "U1",
"mpn": "STM32H743VIT6",
"manufacturer": "STMicroelectronics",
"description": "32-bit Arm Cortex-M7 MCU, 480 MHz, 2 MB Flash, 1 MB RAM, LQFP-100",
"category": "MCU",
"quantity": 1,
"unitPrice": 12.50,
"totalPrice": 12.50,
"stock": 4820,
"leadTime": 8,
"lifecycle": "active",
"risk": "low",
"package": "LQFP-100",
"specifications": { "core": "Cortex-M7", "flash": "2MB", "ram": "1MB", "speed": "480MHz", "voltage": "1.62-3.6V" },
"alternates": [
{ "mpn": "STM32H753VIT6", "manufacturer": "STMicroelectronics", "unitPrice": 14.20, "note": "Adds crypto accelerator" },
{ "mpn": "STM32H750VBT6", "manufacturer": "STMicroelectronics", "unitPrice": 8.90, "note": "128KB flash, requires external" }
]
},
{
"id": "bom-002",
"designator": "U2",
"mpn": "STM32F103C8T6",
"manufacturer": "STMicroelectronics",
"description": "32-bit Arm Cortex-M3 MCU, 72 MHz, 64 KB Flash, LQFP-48",
"category": "MCU",
"quantity": 1,
"unitPrice": 2.80,
"totalPrice": 2.80,
"stock": 18200,
"leadTime": 4,
"lifecycle": "active",
"risk": "low",
"package": "LQFP-48",
"specifications": { "core": "Cortex-M3", "flash": "64KB", "ram": "20KB", "speed": "72MHz", "voltage": "2.0-3.6V" },
"alternates": [
{ "mpn": "STM32F103CBT6", "manufacturer": "STMicroelectronics", "unitPrice": 3.40, "note": "128KB flash" },
{ "mpn": "GD32F103C8T6", "manufacturer": "GigaDevice", "unitPrice": 1.90, "note": "Pin-compatible clone" }
]
},
{
"id": "bom-003",
"designator": "U3",
"mpn": "BMI270",
"manufacturer": "Bosch Sensortec",
"description": "6-axis IMU (accel + gyro), 16-bit, SPI/I2C, LGA-14",
"category": "Sensor",
"quantity": 1,
"unitPrice": 3.20,
"totalPrice": 3.20,
"stock": 12400,
"leadTime": 6,
"lifecycle": "active",
"risk": "low",
"package": "LGA-14",
"specifications": { "axes": 6, "accelRange": "+-16g", "gyroRange": "+-2000dps", "interface": "SPI/I2C", "odr": "1600Hz" },
"alternates": [
{ "mpn": "BMI088", "manufacturer": "Bosch Sensortec", "unitPrice": 4.80, "note": "Wider accel range, separate dies" },
{ "mpn": "LSM6DSO32", "manufacturer": "STMicroelectronics", "unitPrice": 3.60, "note": "+-32g accel range" }
]
},
{
"id": "bom-004",
"designator": "U4",
"mpn": "BMP390",
"manufacturer": "Bosch Sensortec",
"description": "Barometric pressure sensor, 300-1250 hPa, SPI/I2C, LGA-10",
"category": "Sensor",
"quantity": 1,
"unitPrice": 2.10,
"totalPrice": 2.10,
"stock": 8900,
"leadTime": 5,
"lifecycle": "active",
"risk": "low",
"package": "LGA-10",
"specifications": { "range": "300-1250hPa", "resolution": "0.01hPa", "accuracy": "+-0.5hPa", "interface": "SPI/I2C" },
"alternates": [
{ "mpn": "BMP388", "manufacturer": "Bosch Sensortec", "unitPrice": 1.90, "note": "Previous generation, slightly lower accuracy" },
{ "mpn": "DPS310XTSA1", "manufacturer": "Infineon", "unitPrice": 2.30, "note": "Comparable accuracy" }
]
},
{
"id": "bom-005",
"designator": "U5",
"mpn": "ICM-42688-P",
"manufacturer": "TDK InvenSense",
"description": "6-axis IMU (backup), high-precision, SPI/I2C, LGA-14",
"category": "Sensor",
"quantity": 1,
"unitPrice": 4.50,
"totalPrice": 4.50,
"stock": 320,
"leadTime": 18,
"lifecycle": "active",
"risk": "high",
"riskReason": "18-week lead time, low distributor stock",
"package": "LGA-14",
"specifications": { "axes": 6, "accelRange": "+-16g", "gyroRange": "+-2000dps", "interface": "SPI/I2C", "odr": "32000Hz" },
"alternates": [
{ "mpn": "ICM-42605", "manufacturer": "TDK InvenSense", "unitPrice": 3.80, "note": "Lower ODR, 8-week lead" },
{ "mpn": "BMI270", "manufacturer": "Bosch Sensortec", "unitPrice": 3.20, "note": "Lower ODR but readily available" }
]
},
{
"id": "bom-006",
"designator": "U6",
"mpn": "MMC5983MA",
"manufacturer": "MEMSIC",
"description": "3-axis magnetometer, 16-bit, SPI/I2C, LGA-16",
"category": "Sensor",
"quantity": 1,
"unitPrice": 1.80,
"totalPrice": 1.80,
"stock": 6200,
"leadTime": 6,
"lifecycle": "active",
"risk": "low",
"package": "LGA-16",
"specifications": { "axes": 3, "range": "+-8G", "resolution": "18-bit", "interface": "SPI/I2C", "bandwidth": "1000Hz" },
"alternates": [
{ "mpn": "QMC5883L", "manufacturer": "QST", "unitPrice": 0.80, "note": "Lower resolution, I2C only" },
{ "mpn": "LIS3MDL", "manufacturer": "STMicroelectronics", "unitPrice": 1.60, "note": "+-16G range" }
]
},
{
"id": "bom-007",
"designator": "U7",
"mpn": "TPS62823DLCR",
"manufacturer": "Texas Instruments",
"description": "3.3V synchronous buck converter, 3A, 2.4-5.5V input, SOT-583-8",
"category": "Power",
"quantity": 2,
"unitPrice": 1.45,
"totalPrice": 2.90,
"stock": 24500,
"leadTime": 4,
"lifecycle": "active",
"risk": "low",
"package": "SOT-583-8",
"specifications": { "topology": "buck", "vinMax": "5.5V", "vout": "3.3V", "iout": "3A", "efficiency": "95%", "frequency": "2.2MHz" },
"alternates": [
{ "mpn": "TPS62822DLCR", "manufacturer": "Texas Instruments", "unitPrice": 1.45, "note": "1.8V output variant" },
{ "mpn": "AP3418KTR-G1", "manufacturer": "Diodes Inc.", "unitPrice": 0.95, "note": "2A, lower current" }
]
},
{
"id": "bom-008",
"designator": "U8",
"mpn": "TPS7A2033DRVR",
"manufacturer": "Texas Instruments",
"description": "3.3V LDO, 300mA, ultra-low noise, SOT-236-5",
"category": "Power",
"quantity": 2,
"unitPrice": 0.95,
"totalPrice": 1.90,
"stock": 31200,
"leadTime": 3,
"lifecycle": "active",
"risk": "low",
"package": "SOT-236-5",
"specifications": { "topology": "LDO", "vinMax": "6V", "vout": "3.3V", "iout": "300mA", "noise": "4.4uVrms", "dropout": "200mV" },
"alternates": [
{ "mpn": "TPS7A20DRVR", "manufacturer": "Texas Instruments", "unitPrice": 0.85, "note": "Adjustable output" },
{ "mpn": "ADP151AUJZ-3.3-R7", "manufacturer": "Analog Devices", "unitPrice": 1.10, "note": "9uVrms ultra-low noise" }
]
},
{
"id": "bom-009",
"designator": "U9",
"mpn": "LP2985-33DBVR",
"manufacturer": "Texas Instruments",
"description": "3.3V LDO, 150mA, SOT-23-5",
"category": "Power",
"quantity": 1,
"unitPrice": 0.65,
"totalPrice": 0.65,
"stock": 2100,
"leadTime": 10,
"lifecycle": "NRND",
"risk": "high",
"riskReason": "Not Recommended for New Designs — TI recommends TLV75533PDBVR as replacement",
"package": "SOT-23-5",
"specifications": { "topology": "LDO", "vinMax": "16V", "vout": "3.3V", "iout": "150mA", "noise": "30uVrms", "dropout": "280mV" },
"alternates": [
{ "mpn": "TLV75533PDBVR", "manufacturer": "Texas Instruments", "unitPrice": 0.55, "note": "Recommended replacement, better specs" },
{ "mpn": "MIC5504-3.3YM5-TR", "manufacturer": "Microchip", "unitPrice": 0.40, "note": "300mA, SOT-23-5" }
]
},
{
"id": "bom-010",
"designator": "U10",
"mpn": "BQ25180YBGR",
"manufacturer": "Texas Instruments",
"description": "1-cell Li-Ion/Li-Po battery charger, I2C config, DSBGA-12",
"category": "Power",
"quantity": 1,
"unitPrice": 2.30,
"totalPrice": 2.30,
"stock": 7800,
"leadTime": 6,
"lifecycle": "active",
"risk": "low",
"package": "DSBGA-12",
"specifications": { "vinMax": "5.5V", "chargeVoltage": "4.2V", "chargeCurrent": "1A", "interface": "I2C" },
"alternates": [
{ "mpn": "MCP73831T-2ACI/OT", "manufacturer": "Microchip", "unitPrice": 0.65, "note": "Simpler, no I2C, 500mA max" },
{ "mpn": "BQ24075RGTR", "manufacturer": "Texas Instruments", "unitPrice": 2.80, "note": "Power path management" }
]
},
{
"id": "bom-011",
"designator": "U11",
"mpn": "ESP32-S3-WROOM-1-N8R2",
"manufacturer": "Espressif",
"description": "WiFi + BLE 5.0 module, dual-core LX7, 8MB flash, 2MB PSRAM",
"category": "Connectivity",
"quantity": 1,
"unitPrice": 3.40,
"totalPrice": 3.40,
"stock": 15600,
"leadTime": 5,
"lifecycle": "active",
"risk": "low",
"package": "Module-18x25.5mm",
"specifications": { "wifi": "802.11 b/g/n", "bluetooth": "BLE 5.0", "flash": "8MB", "psram": "2MB", "gpio": 36, "voltage": "3.0-3.6V" },
"alternates": [
{ "mpn": "ESP32-S3-WROOM-1-N16R8", "manufacturer": "Espressif", "unitPrice": 4.20, "note": "16MB flash, 8MB PSRAM" },
{ "mpn": "ESP32-C3-WROOM-02-N4", "manufacturer": "Espressif", "unitPrice": 2.10, "note": "Single-core, lower power" }
]
},
{
"id": "bom-012",
"designator": "U12",
"mpn": "SX1262IMLTRT",
"manufacturer": "Semtech",
"description": "LoRa transceiver, 150MHz-960MHz, +22dBm, SPI, QFN-24",
"category": "Connectivity",
"quantity": 1,
"unitPrice": 4.20,
"totalPrice": 4.20,
"stock": 1800,
"leadTime": 8,
"lifecycle": "active",
"risk": "medium",
"riskReason": "Single source — Semtech is the only manufacturer of LoRa transceivers",
"package": "QFN-24",
"specifications": { "frequency": "150-960MHz", "txPower": "+22dBm", "sensitivity": "-148dBm", "interface": "SPI", "voltage": "1.8-3.7V" },
"alternates": [
{ "mpn": "SX1261IMLTRT", "manufacturer": "Semtech", "unitPrice": 3.80, "note": "+15dBm variant, same family" },
{ "mpn": "LLCC68IMLTRT", "manufacturer": "Semtech", "unitPrice": 3.20, "note": "Cost-optimized LoRa, reduced spreading factors" }
]
},
{
"id": "bom-013",
"designator": "U13",
"mpn": "MAX-M10S",
"manufacturer": "u-blox",
"description": "Multi-GNSS receiver module (GPS/GLONASS/Galileo/BeiDou), LGA-24",
"category": "Connectivity",
"quantity": 1,
"unitPrice": 12.80,
"totalPrice": 12.80,
"stock": 2400,
"leadTime": 10,
"lifecycle": "active",
"risk": "medium",
"riskReason": "Single source — u-blox proprietary GNSS platform",
"package": "LGA-24",
"specifications": { "constellations": "GPS/GLONASS/Galileo/BeiDou", "sensitivity": "-167dBm", "accuracy": "2.5m CEP", "interface": "UART/SPI/I2C", "voltage": "1.71-3.6V" },
"alternates": [
{ "mpn": "MAX-M10S-00B", "manufacturer": "u-blox", "unitPrice": 11.50, "note": "Chip antenna variant" },
{ "mpn": "LC29H(DA)", "manufacturer": "Quectel", "unitPrice": 9.80, "note": "Dual-band, different form factor" }
]
},
{
"id": "bom-014",
"designator": "U14, U15, U16, U17",
"mpn": "DRV8313PWPR",
"manufacturer": "Texas Instruments",
"description": "Triple half-bridge motor driver, 2.5A per channel, HTSSOP-28",
"category": "Motor Driver",
"quantity": 4,
"unitPrice": 3.80,
"totalPrice": 15.20,
"stock": 9200,
"leadTime": 6,
"lifecycle": "active",
"risk": "low",
"package": "HTSSOP-28",
"specifications": { "channels": 3, "currentPerChannel": "2.5A", "voltage": "8-60V", "rdson": "0.5ohm", "protection": "OCP/OTP/UVLO" },
"alternates": [
{ "mpn": "DRV8316RRGFR", "manufacturer": "Texas Instruments", "unitPrice": 2.90, "note": "Integrated FETs, QFN-24" },
{ "mpn": "L6234PD013TR", "manufacturer": "STMicroelectronics", "unitPrice": 3.50, "note": "Three half-bridge, PowerSO-20" }
]
},
{
"id": "bom-015",
"designator": "U18",
"mpn": "W25Q128JVSIQ",
"manufacturer": "Winbond",
"description": "128Mbit serial NOR flash, SPI/Dual/Quad, SOIC-8",
"category": "Memory",
"quantity": 1,
"unitPrice": 1.20,
"totalPrice": 1.20,
"stock": 42000,
"leadTime": 3,
"lifecycle": "active",
"risk": "low",
"package": "SOIC-8",
"specifications": { "density": "128Mbit", "interface": "SPI/Dual/Quad", "speed": "133MHz", "voltage": "2.7-3.6V", "endurance": "100K cycles" },
"alternates": [
{ "mpn": "GD25Q128ESIG", "manufacturer": "GigaDevice", "unitPrice": 0.85, "note": "Pin-compatible, lower cost" },
{ "mpn": "IS25LP128-JBLE", "manufacturer": "ISSI", "unitPrice": 1.35, "note": "Low-power variant" }
]
},
{
"id": "bom-016",
"designator": "U19",
"mpn": "IS42S16400J-7TLI",
"manufacturer": "ISSI",
"description": "64Mbit SDRAM, 16-bit bus, 143MHz, TSOP-II-54",
"category": "Memory",
"quantity": 1,
"unitPrice": 2.40,
"totalPrice": 2.40,
"stock": 5600,
"leadTime": 8,
"lifecycle": "active",
"risk": "low",
"riskReason": "Price volatility +15% over last quarter",
"package": "TSOP-II-54",
"specifications": { "density": "64Mbit", "organization": "4M x 16", "speed": "143MHz", "voltage": "3.3V", "casLatency": "CL3" },
"alternates": [
{ "mpn": "AS4C4M16SA-7TIN", "manufacturer": "Alliance Memory", "unitPrice": 2.20, "note": "Pin-compatible" },
{ "mpn": "MT48LC4M16A2P-6A:G", "manufacturer": "Micron", "unitPrice": 2.80, "note": "Widely available" }
]
},
{
"id": "bom-017",
"designator": "U20",
"mpn": "ATECC608B-TNGLOOS-G",
"manufacturer": "Microchip",
"description": "Secure element, ECDH/ECDSA, I2C, UDFN-8",
"category": "Security",
"quantity": 1,
"unitPrice": 0.72,
"totalPrice": 0.72,
"stock": 18400,
"leadTime": 4,
"lifecycle": "active",
"risk": "low",
"package": "UDFN-8",
"specifications": { "crypto": "ECDH/ECDSA P-256", "interface": "I2C", "voltage": "2.0-5.5V", "certifications": "FIPS/CC" },
"alternates": [
{ "mpn": "ATECC608A-MAHDA-T", "manufacturer": "Microchip", "unitPrice": 0.65, "note": "Previous gen, same pinout" }
]
},
{
"id": "bom-018",
"designator": "U21",
"mpn": "SN74LVC1G125DCKR",
"manufacturer": "Texas Instruments",
"description": "Single bus buffer/gate, tri-state, SC70-5",
"category": "Logic",
"quantity": 3,
"unitPrice": 0.28,
"totalPrice": 0.84,
"stock": 50000,
"leadTime": 2,
"lifecycle": "active",
"risk": "low",
"package": "SC70-5",
"specifications": { "channels": 1, "voltage": "1.65-5.5V", "propagation": "3.5ns", "output": "tri-state" },
"alternates": [
{ "mpn": "74LVC1G125GW", "manufacturer": "Nexperia", "unitPrice": 0.22, "note": "SOT-353 package" }
]
},
{
"id": "bom-019",
"designator": "U22",
"mpn": "TXB0108PWR",
"manufacturer": "Texas Instruments",
"description": "8-bit bidirectional voltage-level translator, TSSOP-20",
"category": "Logic",
"quantity": 1,
"unitPrice": 1.40,
"totalPrice": 1.40,
"stock": 22000,
"leadTime": 3,
"lifecycle": "active",
"risk": "low",
"package": "TSSOP-20",
"specifications": { "channels": 8, "voltageA": "1.2-3.6V", "voltageB": "1.65-5.5V", "dataRate": "100Mbps" },
"alternates": [
{ "mpn": "TXB0104PWR", "manufacturer": "Texas Instruments", "unitPrice": 0.90, "note": "4-bit variant" },
{ "mpn": "GTL2003PW", "manufacturer": "NXP", "unitPrice": 0.95, "note": "Passive FET-based" }
]
},
{
"id": "bom-020",
"designator": "U23",
"mpn": "TMP117AIDRVR",
"manufacturer": "Texas Instruments",
"description": "High-accuracy digital temperature sensor, +-0.1C, I2C, SOT-6",
"category": "Sensor",
"quantity": 1,
"unitPrice": 1.85,
"totalPrice": 1.85,
"stock": 14200,
"leadTime": 4,
"lifecycle": "active",
"risk": "low",
"package": "SOT-6",
"specifications": { "accuracy": "+-0.1C", "range": "-55 to 150C", "resolution": "0.0078C", "interface": "I2C" },
"alternates": [
{ "mpn": "STTS22HTR", "manufacturer": "STMicroelectronics", "unitPrice": 0.90, "note": "+-0.5C, lower cost" }
]
},
{
"id": "bom-021",
"designator": "U24",
"mpn": "INA228AIDGSR",
"manufacturer": "Texas Instruments",
"description": "High-precision power monitor, 20-bit ADC, I2C, MSOP-10",
"category": "Power",
"quantity": 2,
"unitPrice": 2.60,
"totalPrice": 5.20,
"stock": 8400,
"leadTime": 5,
"lifecycle": "active",
"risk": "low",
"package": "MSOP-10",
"specifications": { "resolution": "20-bit", "busVoltage": "0-85V", "accuracy": "+-0.1%", "interface": "I2C" },
"alternates": [
{ "mpn": "INA226AIDGSR", "manufacturer": "Texas Instruments", "unitPrice": 1.60, "note": "16-bit, lower resolution" }
]
},
{
"id": "bom-022",
"designator": "U25",
"mpn": "NCP186AMT330TAG",
"manufacturer": "onsemi",
"description": "1V LDO regulator, 3.3V, 500mA, ultra-low noise, WDFN-4",
"category": "Power",
"quantity": 1,
"unitPrice": 0.48,
"totalPrice": 0.48,
"stock": 15600,
"leadTime": 4,
"lifecycle": "NRND",
"risk": "high",
"riskReason": "NRND — onsemi recommends NCV8163AMT330TAG as replacement",
"package": "WDFN-4",
"specifications": { "topology": "LDO", "vinMax": "5.5V", "vout": "3.3V", "iout": "500mA", "noise": "6.5uVrms", "dropout": "145mV" },
"alternates": [
{ "mpn": "NCV8163AMT330TAG", "manufacturer": "onsemi", "unitPrice": 0.52, "note": "Recommended replacement" },
{ "mpn": "AP7381-33Y-13", "manufacturer": "Diodes Inc.", "unitPrice": 0.35, "note": "150mA, ultra-low quiescent" }
]
},
{
"id": "bom-023",
"designator": "Y1",
"mpn": "ABM8-25.000MHZ-B2-T",
"manufacturer": "Abracon",
"description": "25 MHz crystal, 10ppm, 18pF, 3.2x2.5mm",
"category": "Crystal/Oscillator",
"quantity": 1,
"unitPrice": 0.35,
"totalPrice": 0.35,
"stock": 28000,
"leadTime": 3,
"lifecycle": "active",
"risk": "low",
"package": "3.2x2.5mm",
"specifications": { "frequency": "25MHz", "tolerance": "10ppm", "loadCapacitance": "18pF", "esr": "40ohm" },
"alternates": [
{ "mpn": "NX3225GA-25MHZ-STD-CRA-3", "manufacturer": "NDK", "unitPrice": 0.40, "note": "Higher reliability grade" }
]
},
{
"id": "bom-024",
"designator": "Y2",
"mpn": "ABM8-8.000MHZ-B2-T",
"manufacturer": "Abracon",
"description": "8 MHz crystal, 10ppm, 18pF, 3.2x2.5mm",
"category": "Crystal/Oscillator",
"quantity": 1,
"unitPrice": 0.30,
"totalPrice": 0.30,
"stock": 32000,
"leadTime": 3,
"lifecycle": "active",
"risk": "low",
"package": "3.2x2.5mm",
"specifications": { "frequency": "8MHz", "tolerance": "10ppm", "loadCapacitance": "18pF", "esr": "60ohm" },
"alternates": [
{ "mpn": "ECS-.327-12.5-34B-TR", "manufacturer": "ECS", "unitPrice": 0.25, "note": "Alternative supplier" }
]
},
{
"id": "bom-025",
"designator": "Y3",
"mpn": "FA-128-32.768KHZ-12.5PF",
"manufacturer": "Epson",
"description": "32.768 kHz crystal, 20ppm, 12.5pF, 2.0x1.2mm",
"category": "Crystal/Oscillator",
"quantity": 1,
"unitPrice": 0.45,
"totalPrice": 0.45,
"stock": 20000,
"leadTime": 4,
"lifecycle": "active",
"risk": "low",
"package": "2.0x1.2mm",
"specifications": { "frequency": "32.768kHz", "tolerance": "20ppm", "loadCapacitance": "12.5pF" },
"alternates": [
{ "mpn": "ABS07-32.768KHZ-T", "manufacturer": "Abracon", "unitPrice": 0.35, "note": "Same specs" }
]
},
{
"id": "bom-026",
"designator": "L1, L2",
"mpn": "XAL4020-222MEB",
"manufacturer": "Coilcraft",
"description": "2.2uH power inductor, 5.5A, 4x4x2mm, shielded",
"category": "Inductor",
"quantity": 2,
"unitPrice": 0.82,
"totalPrice": 1.64,
"stock": 16000,
"leadTime": 4,
"lifecycle": "active",
"risk": "low",
"package": "4020",
"specifications": { "inductance": "2.2uH", "dcr": "22mohm", "saturationCurrent": "5.5A", "type": "shielded" },
"alternates": [
{ "mpn": "NR4018T2R2M", "manufacturer": "Taiyo Yuden", "unitPrice": 0.55, "note": "Lower saturation current 4.2A" }
]
},
{
"id": "bom-027",
"designator": "L3",
"mpn": "DFE201210P-1R0M=P2",
"manufacturer": "Murata",
"description": "1.0uH inductor, 2A, 2.0x1.25mm, shielded",
"category": "Inductor",
"quantity": 1,
"unitPrice": 0.18,
"totalPrice": 0.18,
"stock": 45000,
"leadTime": 3,
"lifecycle": "active",
"risk": "low",
"package": "2012",
"specifications": { "inductance": "1.0uH", "dcr": "95mohm", "saturationCurrent": "2.0A", "type": "shielded" },
"alternates": [
{ "mpn": "LQH2MCN1R0M02L", "manufacturer": "Murata", "unitPrice": 0.15, "note": "Unshielded variant" }
]
},
{
"id": "bom-028",
"designator": "J1",
"mpn": "10118194-0001LF",
"manufacturer": "Amphenol",
"description": "USB Micro-B receptacle, SMD, right-angle",
"category": "Connector",
"quantity": 1,
"unitPrice": 0.45,
"totalPrice": 0.45,
"stock": 25000,
"leadTime": 3,
"lifecycle": "active",
"risk": "low",
"package": "SMD",
"specifications": { "type": "USB Micro-B", "current": "1.8A", "contacts": 5, "mounting": "SMD right-angle" },
"alternates": [
{ "mpn": "USB3131-30-0230-A", "manufacturer": "GCT", "unitPrice": 0.55, "note": "USB-C alternative" }
]
},
{
"id": "bom-029",
"designator": "J2",
"mpn": "SM06B-SRSS-TB(LF)(SN)",
"manufacturer": "JST",
"description": "6-pin SH series connector, 1.0mm pitch, SMD",
"category": "Connector",
"quantity": 1,
"unitPrice": 0.38,
"totalPrice": 0.38,
"stock": 18000,
"leadTime": 4,
"lifecycle": "active",
"risk": "low",
"package": "SMD",
"specifications": { "type": "JST-SH", "pitch": "1.0mm", "pins": 6, "current": "1A" },
"alternates": [
{ "mpn": "BM06B-SRSS-TB(LF)(SN)", "manufacturer": "JST", "unitPrice": 0.40, "note": "Bottom-entry variant" }
]
},
{
"id": "bom-030",
"designator": "J3, J4, J5, J6",
"mpn": "SM03B-SRSS-TB(LF)(SN)",
"manufacturer": "JST",
"description": "3-pin SH series connector, 1.0mm pitch, SMD (motor/ESC)",
"category": "Connector",
"quantity": 4,
"unitPrice": 0.25,
"totalPrice": 1.00,
"stock": 35000,
"leadTime": 3,
"lifecycle": "active",
"risk": "low",
"package": "SMD",
"specifications": { "type": "JST-SH", "pitch": "1.0mm", "pins": 3, "current": "1A" },
"alternates": [
{ "mpn": "53048-0310", "manufacturer": "Molex", "unitPrice": 0.30, "note": "PicoBlade equivalent" }
]
},
{
"id": "bom-031",
"designator": "J7",
"mpn": "DF12(3.0)-30DP-0.5V(86)",
"manufacturer": "Hirose",
"description": "30-pin board-to-board connector, 0.5mm pitch, SMD",
"category": "Connector",
"quantity": 1,
"unitPrice": 1.20,
"totalPrice": 1.20,
"stock": 8400,
"leadTime": 6,
"lifecycle": "active",
"risk": "low",
"package": "SMD",
"specifications": { "type": "Board-to-Board", "pitch": "0.5mm", "pins": 30, "stackHeight": "3.0mm" },
"alternates": [
{ "mpn": "WP3-P030VA1-R6000", "manufacturer": "JAE", "unitPrice": 1.10, "note": "Equivalent B2B" }
]
},
{
"id": "bom-032",
"designator": "J8",
"mpn": "U.FL-R-SMT-1(80)",
"manufacturer": "Hirose",
"description": "U.FL coaxial connector for antenna, SMD",
"category": "Connector",
"quantity": 2,
"unitPrice": 0.60,
"totalPrice": 1.20,
"stock": 22000,
"leadTime": 3,
"lifecycle": "active",
"risk": "low",
"package": "SMD",
"specifications": { "type": "U.FL", "impedance": "50ohm", "frequency": "6GHz", "insertion": "500 cycles" },
"alternates": [
{ "mpn": "CONUFL001-SMD-T", "manufacturer": "Linx", "unitPrice": 0.50, "note": "Compatible alternative" }
]
},
{
"id": "bom-033",
"designator": "D1",
"mpn": "PMEG3020ER,115",
"manufacturer": "Nexperia",
"description": "Schottky diode, 30V, 2A, SOD-123W",
"category": "Diode",
"quantity": 2,
"unitPrice": 0.15,
"totalPrice": 0.30,
"stock": 38000,
"leadTime": 2,
"lifecycle": "active",
"risk": "low",
"package": "SOD-123W",
"specifications": { "vrrm": "30V", "ifav": "2A", "vf": "0.39V", "type": "Schottky" },
"alternates": [
{ "mpn": "SS32", "manufacturer": "onsemi", "unitPrice": 0.08, "note": "SMA package, through-hole compatible" }
]
},
{
"id": "bom-034",
"designator": "D2, D3",
"mpn": "PESD5V0S1BSF,115",
"manufacturer": "Nexperia",
"description": "ESD protection diode, 5V, SOD-962",
"category": "Diode",
"quantity": 4,
"unitPrice": 0.08,
"totalPrice": 0.32,
"stock": 48000,
"leadTime": 2,
"lifecycle": "active",
"risk": "low",
"package": "SOD-962",
"specifications": { "vwm": "5V", "ipp": "9A", "capacitance": "1.5pF", "type": "TVS" },
"alternates": [
{ "mpn": "PRTR5V0U2X,215", "manufacturer": "Nexperia", "unitPrice": 0.10, "note": "Dual-line USB protection" }
]
},
{
"id": "bom-035",
"designator": "Q1, Q2",
"mpn": "SI2301CDS-T1-GE3",
"manufacturer": "Vishay",
"description": "P-channel MOSFET, -20V, -3.1A, SOT-23",
"category": "MOSFET",
"quantity": 2,
"unitPrice": 0.35,
"totalPrice": 0.70,
"stock": 26000,
"leadTime": 3,
"lifecycle": "active",
"risk": "low",
"package": "SOT-23",
"specifications": { "type": "P-Channel", "vds": "-20V", "id": "-3.1A", "rdson": "80mohm", "vgs": "-1.5V" },
"alternates": [
{ "mpn": "DMP2035U-7", "manufacturer": "Diodes Inc.", "unitPrice": 0.25, "note": "Similar specs, SOT-23" }
]
},
{
"id": "bom-036",
"designator": "Q3, Q4",
"mpn": "SI2302CDS-T1-GE3",
"manufacturer": "Vishay",
"description": "N-channel MOSFET, 20V, 2.6A, SOT-23",
"category": "MOSFET",
"quantity": 2,
"unitPrice": 0.30,
"totalPrice": 0.60,
"stock": 30000,
"leadTime": 3,
"lifecycle": "active",
"risk": "low",
"package": "SOT-23",
"specifications": { "type": "N-Channel", "vds": "20V", "id": "2.6A", "rdson": "55mohm", "vgs": "1.0V" },
"alternates": [
{ "mpn": "2N7002", "manufacturer": "Nexperia", "unitPrice": 0.04, "note": "Lower current, 300mA" }
]
},
{
"id": "bom-037",
"designator": "R1-R12",
"mpn": "RC0402FR-0710KL",
"manufacturer": "Yageo",
"description": "10kohm resistor, 1%, 0402, 62.5mW",
"category": "Passive",
"quantity": 12,
"unitPrice": 0.01,
"totalPrice": 0.12,
"stock": 50000,
"leadTime": 2,
"lifecycle": "active",
"risk": "low",
"package": "0402",
"specifications": { "resistance": "10kohm", "tolerance": "1%", "power": "62.5mW", "tcr": "100ppm/C" },
"alternates": [
{ "mpn": "CRCW040210K0FKEDC", "manufacturer": "Vishay", "unitPrice": 0.01, "note": "Alternative supplier" }
]
},
{
"id": "bom-038",
"designator": "R13-R20",
"mpn": "RC0402FR-074K7L",
"manufacturer": "Yageo",
"description": "4.7kohm resistor, 1%, 0402, 62.5mW",
"category": "Passive",
"quantity": 8,
"unitPrice": 0.01,
"totalPrice": 0.08,
"stock": 50000,
"leadTime": 2,
"lifecycle": "active",
"risk": "low",
"package": "0402",
"specifications": { "resistance": "4.7kohm", "tolerance": "1%", "power": "62.5mW", "tcr": "100ppm/C" },
"alternates": [
{ "mpn": "CRCW04024K70FKEDC", "manufacturer": "Vishay", "unitPrice": 0.01, "note": "Alternative supplier" }
]
},
{
"id": "bom-039",
"designator": "R21-R28",
"mpn": "RC0402FR-07100KL",
"manufacturer": "Yageo",
"description": "100kohm resistor, 1%, 0402, 62.5mW",
"category": "Passive",
"quantity": 8,
"unitPrice": 0.01,
"totalPrice": 0.08,
"stock": 50000,
"leadTime": 2,
"lifecycle": "active",
"risk": "low",
"package": "0402",
"specifications": { "resistance": "100kohm", "tolerance": "1%", "power": "62.5mW", "tcr": "100ppm/C" },
"alternates": [
{ "mpn": "CRCW0402100KFKEDC", "manufacturer": "Vishay", "unitPrice": 0.01, "note": "Alternative supplier" }
]
},
{
"id": "bom-040",
"designator": "R29-R32",
"mpn": "ERJ-2RKF1001X",
"manufacturer": "Panasonic",
"description": "1kohm resistor, 1%, 0402, 100mW",
"category": "Passive",
"quantity": 4,
"unitPrice": 0.01,
"totalPrice": 0.04,
"stock": 50000,
"leadTime": 2,
"lifecycle": "active",
"risk": "low",
"package": "0402",
"specifications": { "resistance": "1kohm", "tolerance": "1%", "power": "100mW", "tcr": "100ppm/C" },
"alternates": [
{ "mpn": "RC0402FR-071KL", "manufacturer": "Yageo", "unitPrice": 0.01, "note": "Standard alternative" }
]
},
{
"id": "bom-041",
"designator": "R33-R36",
"mpn": "WSL0402R0100FEA",
"manufacturer": "Vishay",
"description": "10mohm current sense resistor, 1%, 0402, 125mW",
"category": "Passive",
"quantity": 4,
"unitPrice": 0.18,
"totalPrice": 0.72,
"stock": 14000,
"leadTime": 4,
"lifecycle": "active",
"risk": "low",
"package": "0402",
"specifications": { "resistance": "10mohm", "tolerance": "1%", "power": "125mW", "type": "current sense" },
"alternates": [
{ "mpn": "SFR01MZPF-R010-11", "manufacturer": "Vishay", "unitPrice": 0.15, "note": "Thin film variant" }
]
},
{
"id": "bom-042",
"designator": "C1-C24",
"mpn": "GRM155R71C104KA88D",
"manufacturer": "Murata",
"description": "100nF MLCC, 16V, X7R, 0402",
"category": "Passive",
"quantity": 24,
"unitPrice": 0.02,
"totalPrice": 0.48,
"stock": 50000,
"leadTime": 2,
"lifecycle": "active",
"risk": "low",
"package": "0402",
"specifications": { "capacitance": "100nF", "voltage": "16V", "dielectric": "X7R", "tolerance": "10%" },
"alternates": [
{ "mpn": "CL05B104KO5NNNC", "manufacturer": "Samsung", "unitPrice": 0.015, "note": "Standard alternative" }
]
},
{
"id": "bom-043",
"designator": "C25-C36",
"mpn": "GRM155R60J105KE19D",
"manufacturer": "Murata",
"description": "1uF MLCC, 6.3V, X5R, 0402",
"category": "Passive",
"quantity": 12,
"unitPrice": 0.03,
"totalPrice": 0.36,
"stock": 48000,
"leadTime": 2,
"lifecycle": "active",
"risk": "low",
"package": "0402",
"specifications": { "capacitance": "1uF", "voltage": "6.3V", "dielectric": "X5R", "tolerance": "10%" },
"alternates": [
{ "mpn": "CL05A105KO5NNNC", "manufacturer": "Samsung", "unitPrice": 0.025, "note": "Standard alternative" }
]
},
{
"id": "bom-044",
"designator": "C37-C42",
"mpn": "GRM188R61A106KE69D",
"manufacturer": "Murata",
"description": "10uF MLCC, 10V, X5R, 0603",
"category": "Passive",
"quantity": 6,
"unitPrice": 0.05,
"totalPrice": 0.30,
"stock": 35000,
"leadTime": 2,
"lifecycle": "active",
"risk": "low",
"package": "0603",
"specifications": { "capacitance": "10uF", "voltage": "10V", "dielectric": "X5R", "tolerance": "10%" },
"alternates": [
{ "mpn": "CL10A106KP8NNNC", "manufacturer": "Samsung", "unitPrice": 0.04, "note": "Standard alternative" }
]
},
{
"id": "bom-045",
"designator": "C43-C44",
"mpn": "TAJA476K010RNJ",
"manufacturer": "AVX",
"description": "47uF tantalum capacitor, 10V, size A (3216)",
"category": "Passive",
"quantity": 2,
"unitPrice": 0.42,
"totalPrice": 0.84,
"stock": 12000,
"leadTime": 4,
"lifecycle": "active",
"risk": "low",
"package": "3216-A",
"specifications": { "capacitance": "47uF", "voltage": "10V", "esr": "3.0ohm", "type": "tantalum" },
"alternates": [
{ "mpn": "T491A476K010AT", "manufacturer": "KEMET", "unitPrice": 0.38, "note": "Standard alternative" }
]
}
]
}
src/mocks/data/bom-risk.json
Aggregated risk summary computed from the BOM. Two NRND components (LP2985-33DBVR and NCP186AMT330TAG), one long-lead-time part (ICM-42688-P), and two single-source items (SX1262IMLTRT, MAX-M10S).
{
"overallScore": 34,
"totalComponents": 45,
"totalUniqueParts": 45,
"totalPlacements": 312,
"totalCost": 92.67,
"singleSourceCount": 2,
"singleSourceParts": [
{ "mpn": "SX1262IMLTRT", "manufacturer": "Semtech", "reason": "Sole LoRa transceiver manufacturer" },
{ "mpn": "MAX-M10S", "manufacturer": "u-blox", "reason": "Proprietary GNSS platform" }
],
"eolCount": 0,
"eolParts": [],
"nrndCount": 2,
"nrndParts": [
{ "mpn": "LP2985-33DBVR", "manufacturer": "Texas Instruments", "replacement": "TLV75533PDBVR" },
{ "mpn": "NCP186AMT330TAG", "manufacturer": "onsemi", "replacement": "NCV8163AMT330TAG" }
],
"longLeadCount": 1,
"longLeadParts": [
{ "mpn": "ICM-42688-P", "manufacturer": "TDK InvenSense", "leadTime": 18, "threshold": 12 }
],
"riskBreakdown": {
"high": 3,
"medium": 2,
"low": 40
},
"categoryBreakdown": [
{ "category": "MCU", "count": 2, "cost": 15.30 },
{ "category": "Sensor", "count": 5, "cost": 13.45 },
{ "category": "Power", "count": 8, "cost": 13.43 },
{ "category": "Connectivity", "count": 3, "cost": 20.40 },
{ "category": "Motor Driver", "count": 1, "cost": 15.20 },
{ "category": "Memory", "count": 2, "cost": 3.60 },
{ "category": "Security", "count": 1, "cost": 0.72 },
{ "category": "Logic", "count": 2, "cost": 2.24 },
{ "category": "Crystal/Oscillator", "count": 3, "cost": 1.10 },
{ "category": "Inductor", "count": 2, "cost": 1.82 },
{ "category": "Connector", "count": 5, "cost": 4.23 },
{ "category": "Diode", "count": 2, "cost": 0.62 },
{ "category": "MOSFET", "count": 2, "cost": 1.30 },
{ "category": "Passive", "count": 7, "cost": 1.88 }
]
}
src/mocks/data/compliance.json
Three target markets with partial evidence checklists. The drone flight controller requires radio, EMC, and electrical safety certifications.
{
"markets": [
{
"market": "UKCA",
"overallProgress": 55,
"regimes": [
{
"id": "ukca-rer",
"name": "Radio Equipment Regulations 2017",
"shortName": "RER 2017",
"progress": 70,
"evidenceItems": [
{ "id": "ukca-rer-001", "description": "RF conducted emissions test report (EN 300 328)", "status": "approved", "submittedDate": "2025-01-10T00:00:00Z", "approvedDate": "2025-01-12T00:00:00Z" },
{ "id": "ukca-rer-002", "description": "RF radiated emissions test report (EN 300 328)", "status": "approved", "submittedDate": "2025-01-10T00:00:00Z", "approvedDate": "2025-01-12T00:00:00Z" },
{ "id": "ukca-rer-003", "description": "Receiver blocking and spurious response", "status": "submitted", "submittedDate": "2025-01-20T00:00:00Z", "approvedDate": null },
{ "id": "ukca-rer-004", "description": "Receiver sensitivity and co-channel rejection", "status": "submitted", "submittedDate": "2025-01-20T00:00:00Z", "approvedDate": null },
{ "id": "ukca-rer-005", "description": "LoRa band-specific compliance (EN 300 220-2)", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "ukca-rer-006", "description": "GNSS receiver performance declaration", "status": "pending", "submittedDate": null, "approvedDate": null }
]
},
{
"id": "ukca-emc",
"name": "Electromagnetic Compatibility Regulations 2016",
"shortName": "EMC 2016",
"progress": 50,
"evidenceItems": [
{ "id": "ukca-emc-001", "description": "Conducted emissions (EN 55032 Class B)", "status": "approved", "submittedDate": "2025-01-08T00:00:00Z", "approvedDate": "2025-01-11T00:00:00Z" },
{ "id": "ukca-emc-002", "description": "Radiated emissions (EN 55032 Class B)", "status": "approved", "submittedDate": "2025-01-08T00:00:00Z", "approvedDate": "2025-01-11T00:00:00Z" },
{ "id": "ukca-emc-003", "description": "ESD immunity (EN 61000-4-2)", "status": "submitted", "submittedDate": "2025-01-18T00:00:00Z", "approvedDate": null },
{ "id": "ukca-emc-004", "description": "Radiated immunity (EN 61000-4-3)", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "ukca-emc-005", "description": "Electrical fast transient (EN 61000-4-4)", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "ukca-emc-006", "description": "Surge immunity (EN 61000-4-5)", "status": "pending", "submittedDate": null, "approvedDate": null }
]
},
{
"id": "ukca-esr",
"name": "Electrical Equipment (Safety) Regulations 2016",
"shortName": "Safety 2016",
"progress": 45,
"evidenceItems": [
{ "id": "ukca-esr-001", "description": "Insulation resistance and dielectric strength", "status": "approved", "submittedDate": "2025-01-05T00:00:00Z", "approvedDate": "2025-01-09T00:00:00Z" },
{ "id": "ukca-esr-002", "description": "Touch current and protective conductor current", "status": "submitted", "submittedDate": "2025-01-19T00:00:00Z", "approvedDate": null },
{ "id": "ukca-esr-003", "description": "Battery safety (IEC 62133-2)", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "ukca-esr-004", "description": "Temperature rise and thermal protection test", "status": "pending", "submittedDate": null, "approvedDate": null }
]
}
]
},
{
"market": "CE",
"overallProgress": 45,
"regimes": [
{
"id": "ce-red",
"name": "Radio Equipment Directive 2014/53/EU",
"shortName": "RED",
"progress": 60,
"evidenceItems": [
{ "id": "ce-red-001", "description": "Essential requirements Art.3.1(a) — Health & Safety", "status": "approved", "submittedDate": "2025-01-06T00:00:00Z", "approvedDate": "2025-01-10T00:00:00Z" },
{ "id": "ce-red-002", "description": "Essential requirements Art.3.1(b) — EMC", "status": "approved", "submittedDate": "2025-01-06T00:00:00Z", "approvedDate": "2025-01-10T00:00:00Z" },
{ "id": "ce-red-003", "description": "Essential requirements Art.3.2 — Spectrum efficiency", "status": "submitted", "submittedDate": "2025-01-21T00:00:00Z", "approvedDate": null },
{ "id": "ce-red-004", "description": "EU Declaration of Conformity draft", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "ce-red-005", "description": "Technical documentation package", "status": "pending", "submittedDate": null, "approvedDate": null }
]
},
{
"id": "ce-emcd",
"name": "EMC Directive 2014/30/EU",
"shortName": "EMCD",
"progress": 40,
"evidenceItems": [
{ "id": "ce-emcd-001", "description": "EN 55032 emissions test report", "status": "approved", "submittedDate": "2025-01-08T00:00:00Z", "approvedDate": "2025-01-11T00:00:00Z" },
{ "id": "ce-emcd-002", "description": "EN 55035 immunity test report", "status": "submitted", "submittedDate": "2025-01-22T00:00:00Z", "approvedDate": null },
{ "id": "ce-emcd-003", "description": "EMC risk assessment document", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "ce-emcd-004", "description": "EMC design justification file", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "ce-emcd-005", "description": "Harmonised standard applicability matrix", "status": "pending", "submittedDate": null, "approvedDate": null }
]
},
{
"id": "ce-lvd",
"name": "Low Voltage Directive 2014/35/EU",
"shortName": "LVD",
"progress": 35,
"evidenceItems": [
{ "id": "ce-lvd-001", "description": "EN 62368-1 safety test report", "status": "submitted", "submittedDate": "2025-01-15T00:00:00Z", "approvedDate": null },
{ "id": "ce-lvd-002", "description": "Safety risk assessment (EN ISO 12100)", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "ce-lvd-003", "description": "Battery subsystem safety evaluation (IEC 62133-2)", "status": "pending", "submittedDate": null, "approvedDate": null }
]
}
]
},
{
"market": "FCC",
"overallProgress": 30,
"regimes": [
{
"id": "fcc-15",
"name": "FCC Part 15 — Unintentional Radiators",
"shortName": "Part 15",
"progress": 40,
"evidenceItems": [
{ "id": "fcc-15-001", "description": "Conducted emissions (FCC Part 15 Subpart B)", "status": "approved", "submittedDate": "2025-01-09T00:00:00Z", "approvedDate": "2025-01-13T00:00:00Z" },
{ "id": "fcc-15-002", "description": "Radiated emissions (FCC Part 15 Subpart B)", "status": "submitted", "submittedDate": "2025-01-23T00:00:00Z", "approvedDate": null },
{ "id": "fcc-15-003", "description": "AC power line conducted emissions", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "fcc-15-004", "description": "FCC ID application package", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "fcc-15-005", "description": "Equipment authorization (Supplier DoC)", "status": "pending", "submittedDate": null, "approvedDate": null }
]
},
{
"id": "fcc-15-247",
"name": "FCC Part 15.247 — Spread Spectrum / Digital Modulation",
"shortName": "Part 15.247",
"progress": 20,
"evidenceItems": [
{ "id": "fcc-247-001", "description": "Occupied bandwidth and power spectral density", "status": "submitted", "submittedDate": "2025-01-24T00:00:00Z", "approvedDate": null },
{ "id": "fcc-247-002", "description": "Antenna conducted output power", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "fcc-247-003", "description": "6 dB bandwidth and hopping sequence documentation", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "fcc-247-004", "description": "Spurious emissions (restricted bands)", "status": "pending", "submittedDate": null, "approvedDate": null },
{ "id": "fcc-247-005", "description": "Certification application (FCC Form 731)", "status": "pending", "submittedDate": null, "approvedDate": null }
]
}
]
}
]
}
src/mocks/data/digital-thread.json
A representative subgraph of the full digital thread with 30 nodes and 45 edges showing traceability from requirements through design, components, tests, evidence, and certifications.
{
"nodes": [
{ "id": "REQ-001", "type": "requirement", "label": "Flight controller shall support 4 independent BLDC motors", "status": "verified", "priority": "critical" },
{ "id": "REQ-002", "type": "requirement", "label": "System shall fuse data from dual redundant IMUs at >= 400 Hz", "status": "verified", "priority": "critical" },
{ "id": "REQ-003", "type": "requirement", "label": "3.3V rail ripple shall not exceed 50mV under full motor load", "status": "verified", "priority": "high" },
{ "id": "REQ-004", "type": "requirement", "label": "System shall provide GPS/GLONASS/Galileo/BeiDou positioning", "status": "verified", "priority": "high" },
{ "id": "REQ-005", "type": "requirement", "label": "Wireless telemetry via WiFi (primary) and LoRa (long-range)", "status": "in-progress", "priority": "high" },
{ "id": "REQ-006", "type": "requirement", "label": "Firmware OTA update capability over WiFi", "status": "in-progress", "priority": "medium" },
{ "id": "REQ-007", "type": "requirement", "label": "System shall comply with FCC Part 15 and CE RED", "status": "in-progress", "priority": "critical" },
{ "id": "REQ-008", "type": "requirement", "label": "Operating temperature range -20C to +60C", "status": "not-started", "priority": "medium" },
{ "id": "DES-PWR", "type": "design", "label": "Power Subsystem", "subsystem": "power", "revision": "B" },
{ "id": "DES-SNS", "type": "design", "label": "Sensor Fusion Module", "subsystem": "sensors", "revision": "B" },
{ "id": "DES-COM", "type": "design", "label": "Communications Module", "subsystem": "comms", "revision": "A" },
{ "id": "DES-MOT", "type": "design", "label": "Motor Control Subsystem", "subsystem": "motor", "revision": "B" },
{ "id": "DES-FCC", "type": "design", "label": "Flight Controller Core", "subsystem": "controller", "revision": "B" },
{ "id": "DES-ENC", "type": "design", "label": "Enclosure & Thermal", "subsystem": "enclosure", "revision": "A" },
{ "id": "CMP-STM32H7", "type": "component", "label": "STM32H743VIT6", "bomRef": "bom-001" },
{ "id": "CMP-BMI270", "type": "component", "label": "BMI270", "bomRef": "bom-003" },
{ "id": "CMP-ICM42688", "type": "component", "label": "ICM-42688-P", "bomRef": "bom-005" },
{ "id": "CMP-DRV8313", "type": "component", "label": "DRV8313PWPR", "bomRef": "bom-014" },
{ "id": "CMP-ESP32S3", "type": "component", "label": "ESP32-S3-WROOM-1", "bomRef": "bom-011" },
{ "id": "CMP-SX1262", "type": "component", "label": "SX1262IMLTRT", "bomRef": "bom-012" },
{ "id": "CMP-MAXM10S", "type": "component", "label": "MAX-M10S", "bomRef": "bom-013" },
{ "id": "CMP-TPS62823", "type": "component", "label": "TPS62823DLCR", "bomRef": "bom-007" },
{ "id": "TST-001", "type": "test", "label": "Motor driver thermal stress test", "status": "passed" },
{ "id": "TST-002", "type": "test", "label": "Dual IMU fusion accuracy test", "status": "passed" },
{ "id": "TST-003", "type": "test", "label": "Power rail ripple under load", "status": "passed" },
{ "id": "TST-004", "type": "test", "label": "LoRa range and throughput test", "status": "pending" },
{ "id": "EVD-001", "type": "evidence", "label": "SPICE simulation report — power rail analysis", "artifactRef": "art-013" },
{ "id": "EVD-002", "type": "evidence", "label": "DRC report — clean pass with 1 advisory", "artifactRef": "art-008" },
{ "id": "CRT-FCC", "type": "certification", "label": "FCC Part 15 Certification", "market": "FCC", "status": "in-progress" },
{ "id": "CRT-CE", "type": "certification", "label": "CE RED Certification", "market": "CE", "status": "in-progress" }
],
"edges": [
{ "source": "REQ-001", "target": "DES-MOT", "relationship": "SATISFIED_BY" },
{ "source": "REQ-001", "target": "CMP-DRV8313", "relationship": "SATISFIED_BY" },
{ "source": "REQ-002", "target": "DES-SNS", "relationship": "SATISFIED_BY" },
{ "source": "REQ-002", "target": "CMP-BMI270", "relationship": "SATISFIED_BY" },
{ "source": "REQ-002", "target": "CMP-ICM42688", "relationship": "SATISFIED_BY" },
{ "source": "REQ-003", "target": "DES-PWR", "relationship": "SATISFIED_BY" },
{ "source": "REQ-003", "target": "CMP-TPS62823", "relationship": "SATISFIED_BY" },
{ "source": "REQ-004", "target": "DES-COM", "relationship": "SATISFIED_BY" },
{ "source": "REQ-004", "target": "CMP-MAXM10S", "relationship": "SATISFIED_BY" },
{ "source": "REQ-005", "target": "DES-COM", "relationship": "SATISFIED_BY" },
{ "source": "REQ-005", "target": "CMP-ESP32S3", "relationship": "SATISFIED_BY" },
{ "source": "REQ-005", "target": "CMP-SX1262", "relationship": "SATISFIED_BY" },
{ "source": "REQ-006", "target": "CMP-ESP32S3", "relationship": "SATISFIED_BY" },
{ "source": "REQ-006", "target": "DES-FCC", "relationship": "SATISFIED_BY" },
{ "source": "REQ-007", "target": "CRT-FCC", "relationship": "SATISFIED_BY" },
{ "source": "REQ-007", "target": "CRT-CE", "relationship": "SATISFIED_BY" },
{ "source": "REQ-008", "target": "DES-ENC", "relationship": "SATISFIED_BY" },
{ "source": "DES-FCC", "target": "CMP-STM32H7", "relationship": "MANUFACTURED_BY" },
{ "source": "DES-SNS", "target": "CMP-BMI270", "relationship": "MANUFACTURED_BY" },
{ "source": "DES-SNS", "target": "CMP-ICM42688", "relationship": "MANUFACTURED_BY" },
{ "source": "DES-MOT", "target": "CMP-DRV8313", "relationship": "MANUFACTURED_BY" },
{ "source": "DES-COM", "target": "CMP-ESP32S3", "relationship": "MANUFACTURED_BY" },
{ "source": "DES-COM", "target": "CMP-SX1262", "relationship": "MANUFACTURED_BY" },
{ "source": "DES-COM", "target": "CMP-MAXM10S", "relationship": "MANUFACTURED_BY" },
{ "source": "DES-PWR", "target": "CMP-TPS62823", "relationship": "MANUFACTURED_BY" },
{ "source": "CMP-DRV8313", "target": "TST-001", "relationship": "TESTED_BY" },
{ "source": "CMP-BMI270", "target": "TST-002", "relationship": "TESTED_BY" },
{ "source": "CMP-ICM42688", "target": "TST-002", "relationship": "TESTED_BY" },
{ "source": "CMP-TPS62823", "target": "TST-003", "relationship": "TESTED_BY" },
{ "source": "CMP-SX1262", "target": "TST-004", "relationship": "TESTED_BY" },
{ "source": "DES-MOT", "target": "TST-001", "relationship": "TESTED_BY" },
{ "source": "DES-SNS", "target": "TST-002", "relationship": "TESTED_BY" },
{ "source": "DES-PWR", "target": "TST-003", "relationship": "TESTED_BY" },
{ "source": "DES-COM", "target": "TST-004", "relationship": "TESTED_BY" },
{ "source": "TST-003", "target": "EVD-001", "relationship": "PRODUCES" },
{ "source": "DES-FCC", "target": "EVD-002", "relationship": "PRODUCES" },
{ "source": "EVD-001", "target": "CRT-CE", "relationship": "JUSTIFIES" },
{ "source": "EVD-002", "target": "CRT-CE", "relationship": "JUSTIFIES" },
{ "source": "EVD-001", "target": "CRT-FCC", "relationship": "JUSTIFIES" },
{ "source": "EVD-002", "target": "CRT-FCC", "relationship": "JUSTIFIES" },
{ "source": "REQ-001", "target": "TST-001", "relationship": "VERIFIED_BY" },
{ "source": "REQ-002", "target": "TST-002", "relationship": "VERIFIED_BY" },
{ "source": "REQ-003", "target": "TST-003", "relationship": "VERIFIED_BY" },
{ "source": "REQ-005", "target": "TST-004", "relationship": "VERIFIED_BY" },
{ "source": "REQ-007", "target": "CRT-FCC", "relationship": "VERIFIED_BY" }
]
}
src/mocks/data/supply-chain.json
Active supply chain risk items flagged by the SC agent analysis.
{
"risks": [
{
"id": "scr-001",
"mpn": "ICM-42688-P",
"manufacturer": "TDK InvenSense",
"category": "lead_time",
"severity": "high",
"title": "18-week lead time on backup IMU",
"description": "ICM-42688-P has an 18-week lead time across all major distributors (DigiKey, Mouser, LCSC). Current stock at DigiKey is 320 units. At projected consumption of 500 units/month for DVT, stock will be exhausted before replenishment.",
"impact": "DVT build may be delayed by 8-10 weeks if not addressed",
"mitigation": "Place advance order immediately or qualify ICM-42605 (8-week lead) as alternate",
"detectedAt": "2025-01-25T08:42:00Z",
"bomRef": "bom-005",
"distributorStock": [
{ "distributor": "DigiKey", "stock": 320, "leadTime": 18, "unitPrice": 4.50 },
{ "distributor": "Mouser", "stock": 0, "leadTime": 20, "unitPrice": 4.65 },
{ "distributor": "LCSC", "stock": 145, "leadTime": 16, "unitPrice": 4.30 }
]
},
{
"id": "scr-002",
"mpn": "LP2985-33DBVR",
"manufacturer": "Texas Instruments",
"category": "lifecycle",
"severity": "high",
"title": "NRND status — LP2985-33DBVR",
"description": "Texas Instruments has marked LP2985-33DBVR as Not Recommended for New Designs. Product change notification (PCN) issued 2024-09-15. Last-time buy date not yet announced but typically 12-18 months after NRND.",
"impact": "Component may become unavailable during production ramp. Design change required.",
"mitigation": "Replace with TLV75533PDBVR (pin-compatible, better dropout, lower cost). BOM change pending approval.",
"detectedAt": "2025-01-25T08:38:00Z",
"bomRef": "bom-009",
"distributorStock": [
{ "distributor": "DigiKey", "stock": 2100, "leadTime": 10, "unitPrice": 0.65 },
{ "distributor": "Mouser", "stock": 1800, "leadTime": 12, "unitPrice": 0.68 },
{ "distributor": "LCSC", "stock": 5200, "leadTime": 6, "unitPrice": 0.45 }
]
},
{
"id": "scr-003",
"mpn": "MAX-M10S",
"manufacturer": "u-blox",
"category": "single_source",
"severity": "medium",
"title": "Single source — GNSS module",
"description": "MAX-M10S is a u-blox proprietary GNSS module with no second-source equivalent. The M10 platform uses u-blox's proprietary baseband and RF front-end. Quectel LC29H is a potential alternate but requires PCB redesign due to different footprint.",
"impact": "Any u-blox supply disruption would halt production. Alternate requires board respin.",
"mitigation": "Maintain 3-month safety stock. Evaluate Quectel LC29H for rev C board layout.",
"detectedAt": "2025-01-25T08:40:00Z",
"bomRef": "bom-013",
"distributorStock": [
{ "distributor": "DigiKey", "stock": 2400, "leadTime": 10, "unitPrice": 12.80 },
{ "distributor": "Mouser", "stock": 1200, "leadTime": 12, "unitPrice": 13.10 },
{ "distributor": "LCSC", "stock": 800, "leadTime": 8, "unitPrice": 11.50 }
]
},
{
"id": "scr-004",
"mpn": "SX1262IMLTRT",
"manufacturer": "Semtech",
"category": "single_source",
"severity": "medium",
"title": "Single source — LoRa transceiver",
"description": "Semtech holds exclusive patents on LoRa modulation. SX1262IMLTRT and all LoRa-compatible transceivers are manufactured solely by Semtech. LLCC68 is a cost-reduced variant but still single-source.",
"impact": "No alternative LoRa supplier exists. Sub-GHz ISM alternatives (Sigfox, proprietary FSK) would require protocol redesign.",
"mitigation": "Maintain safety stock. Consider dual-protocol support (LoRa + proprietary FSK fallback) in firmware.",
"detectedAt": "2025-01-25T08:41:00Z",
"bomRef": "bom-012",
"distributorStock": [
{ "distributor": "DigiKey", "stock": 1800, "leadTime": 8, "unitPrice": 4.20 },
{ "distributor": "Mouser", "stock": 2200, "leadTime": 8, "unitPrice": 4.25 },
{ "distributor": "LCSC", "stock": 3400, "leadTime": 6, "unitPrice": 3.80 }
]
},
{
"id": "scr-005",
"mpn": "IS42S16400J-7TLI",
"manufacturer": "ISSI",
"category": "price_volatility",
"severity": "low",
"title": "Price increase — SDRAM +15%",
"description": "IS42S16400J-7TLI unit price has increased 15% over the last quarter ($2.09 -> $2.40) at DigiKey. DRAM spot market trends suggest continued upward pressure due to data center demand affecting legacy node capacity allocation.",
"impact": "BOM cost increase of $0.31 per unit. Minimal impact at current volumes.",
"mitigation": "Lock pricing with distributor via blanket PO for 6-month supply. Alliance Memory AS4C4M16SA-7TIN is pin-compatible at $2.20.",
"detectedAt": "2025-01-25T08:43:00Z",
"bomRef": "bom-016",
"distributorStock": [
{ "distributor": "DigiKey", "stock": 5600, "leadTime": 8, "unitPrice": 2.40 },
{ "distributor": "Mouser", "stock": 3200, "leadTime": 10, "unitPrice": 2.45 },
{ "distributor": "LCSC", "stock": 8800, "leadTime": 6, "unitPrice": 2.15 }
]
}
]
}
src/mocks/data/approvals.json
Three pending approvals awaiting human review in the approval queue.
{
"pending": [
{
"id": "appr-001",
"sessionId": "ses-006",
"agent": "TST",
"title": "DVT Test Plan Approval",
"description": "Test Engineering Agent generated a DVT test plan covering 45 test cases across 6 categories. Includes FMEA table with 12 identified failure modes. Requires engineering lead approval before DVT execution can begin.",
"requestedAt": "2025-01-24T09:38:50Z",
"requestedBy": "agent-tst",
"priority": "high",
"changes": [
{ "path": "test_plan.md", "action": "add", "additions": 842, "deletions": 0, "size": 34200 },
{ "path": "fmea_table.csv", "action": "add", "additions": 156, "deletions": 0, "size": 8400 },
{ "path": "requirements_matrix.csv", "action": "modify", "additions": 45, "deletions": 12, "size": 14200 }
],
"context": {
"gate": "DVT",
"blockedBy": [],
"blocking": ["DVT test execution", "Gate readiness review"]
}
},
{
"id": "appr-002",
"sessionId": "ses-008",
"agent": "SC",
"title": "BOM Alternate: LP2985 Replacement",
"description": "Supply Chain Agent recommends replacing LP2985-33DBVR (NRND) with TLV75533PDBVR. Drop-in replacement with better dropout voltage (130mV vs 280mV), lower cost ($0.55 vs $0.65), and active lifecycle status. Pin-compatible SOT-23-5 package.",
"requestedAt": "2025-01-25T08:44:00Z",
"requestedBy": "agent-sc",
"priority": "medium",
"changes": [
{ "path": "bom.csv", "action": "modify", "additions": 1, "deletions": 1, "size": 14900 }
],
"context": {
"gate": "DVT",
"blockedBy": [],
"blocking": ["Gerber export finalization"],
"oldPart": { "mpn": "LP2985-33DBVR", "manufacturer": "Texas Instruments", "unitPrice": 0.65, "lifecycle": "NRND" },
"newPart": { "mpn": "TLV75533PDBVR", "manufacturer": "Texas Instruments", "unitPrice": 0.55, "lifecycle": "active" }
}
},
{
"id": "appr-003",
"sessionId": "ses-004",
"agent": "FW",
"title": "Firmware HAL Update — New IMU Driver",
"description": "Firmware Agent generated a new ICM-42688-P driver to support the backup IMU. Includes SPI initialization, FIFO configuration, and sensor fusion integration. Also updates CMakeLists.txt to include the new source file.",
"requestedAt": "2025-01-25T09:00:00Z",
"requestedBy": "agent-fw",
"priority": "medium",
"changes": [
{ "path": "firmware/src/drivers/icm42688.c", "action": "add", "additions": 285, "deletions": 0, "size": 9200 },
{ "path": "firmware/src/drivers/icm42688.h", "action": "add", "additions": 68, "deletions": 0, "size": 2400 },
{ "path": "firmware/CMakeLists.txt", "action": "modify", "additions": 3, "deletions": 1, "size": 2900 }
],
"context": {
"gate": "DVT",
"blockedBy": ["Backup IMU hardware availability"],
"blocking": ["Sensor fusion validation test"]
}
}
]
}
src/mocks/data/artifacts.json
Artifacts produced by completed sessions. Each entry includes metadata for display in the session detail view and artifact browser.
{
"artifacts": [
{
"id": "art-001",
"sessionId": "ses-001",
"agent": "REQ",
"path": "constraints.json",
"filename": "constraints.json",
"type": "json",
"mimeType": "application/json",
"size": 8432,
"description": "Extracted hardware constraints from PRD (42 requirements, electrical/mechanical/environmental)",
"createdAt": "2025-01-15T09:12:34Z",
"checksum": "sha256:a1b2c3d4e5f6789012345678abcdef0123456789abcdef0123456789abcdef01"
},
{
"id": "art-002",
"sessionId": "ses-001",
"agent": "REQ",
"path": "requirements_matrix.csv",
"filename": "requirements_matrix.csv",
"type": "csv",
"mimeType": "text/csv",
"size": 12840,
"description": "Requirements traceability matrix — 42 requirements mapped to subsystems and verification methods",
"createdAt": "2025-01-15T09:12:34Z",
"checksum": "sha256:b2c3d4e5f678901234567890bcdef0123456789abcdef0123456789abcdef0123"
},
{
"id": "art-003",
"sessionId": "ses-001",
"agent": "REQ",
"path": "prd_summary.md",
"filename": "prd_summary.md",
"type": "markdown",
"mimeType": "text/markdown",
"size": 3200,
"description": "Executive summary of product requirements with key decisions and open questions",
"createdAt": "2025-01-15T09:12:34Z",
"checksum": "sha256:c3d4e5f67890123456789012cdef0123456789abcdef0123456789abcdef012345"
},
{
"id": "art-004",
"sessionId": "ses-002",
"agent": "SYS",
"path": "architecture.md",
"filename": "architecture.md",
"type": "markdown",
"mimeType": "text/markdown",
"size": 18200,
"description": "System architecture document — 6 subsystems, 14 interfaces, power budget, and communication protocols",
"createdAt": "2025-01-16T10:22:15Z",
"checksum": "sha256:d4e5f6789012345678901234def0123456789abcdef0123456789abcdef0123456"
},
{
"id": "art-005",
"sessionId": "ses-002",
"agent": "SYS",
"path": "block_diagram.mermaid",
"filename": "block_diagram.mermaid",
"type": "mermaid",
"mimeType": "text/plain",
"size": 4100,
"description": "System block diagram in Mermaid format showing all subsystems and data flows",
"createdAt": "2025-01-16T10:22:15Z",
"checksum": "sha256:e5f678901234567890123456ef0123456789abcdef0123456789abcdef01234567"
},
{
"id": "art-006",
"sessionId": "ses-002",
"agent": "SYS",
"path": "interface_spec.json",
"filename": "interface_spec.json",
"type": "json",
"mimeType": "application/json",
"size": 9600,
"description": "Interface specification for 14 inter-subsystem interfaces (SPI, I2C, UART, PWM, GPIO)",
"createdAt": "2025-01-16T10:22:15Z",
"checksum": "sha256:f6789012345678901234567890123456789abcdef0123456789abcdef012345678"
},
{
"id": "art-007",
"sessionId": "ses-003",
"agent": "EE",
"path": "board.kicad_sch",
"filename": "board.kicad_sch",
"type": "kicad_schematic",
"mimeType": "application/x-kicad-schematic",
"size": 245000,
"description": "KiCad schematic (6 sheets) — 312 components, passed ERC with 3 warnings",
"createdAt": "2025-01-18T09:15:42Z",
"checksum": "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01"
},
{
"id": "art-008",
"sessionId": "ses-003",
"agent": "EE",
"path": "drc_report.json",
"filename": "drc_report.json",
"type": "json",
"mimeType": "application/json",
"size": 6200,
"description": "Design Rules Check report — 0 errors, 1 warning (trace clearance on U3 pad 12)",
"createdAt": "2025-01-18T09:15:42Z",
"checksum": "sha256:123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123"
},
{
"id": "art-009",
"sessionId": "ses-003",
"agent": "EE",
"path": "bom.csv",
"filename": "bom.csv",
"type": "csv",
"mimeType": "text/csv",
"size": 14800,
"description": "Bill of Materials export — 45 unique components, 312 placements, $92.67 total unit cost",
"createdAt": "2025-01-18T09:15:42Z",
"checksum": "sha256:23456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234"
},
{
"id": "art-010",
"sessionId": "ses-004",
"agent": "FW",
"path": "firmware/src/main.c",
"filename": "main.c",
"type": "c_source",
"mimeType": "text/x-csrc",
"size": 4200,
"description": "Firmware entry point — system init, RTOS task creation, watchdog configuration",
"createdAt": "2025-01-20T11:34:22Z",
"checksum": "sha256:3456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012345"
},
{
"id": "art-011",
"sessionId": "ses-004",
"agent": "FW",
"path": "firmware/CMakeLists.txt",
"filename": "CMakeLists.txt",
"type": "cmake",
"mimeType": "text/plain",
"size": 2800,
"description": "CMake build configuration for STM32H743 target with arm-none-eabi toolchain",
"createdAt": "2025-01-20T11:34:22Z",
"checksum": "sha256:456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456"
},
{
"id": "art-013",
"sessionId": "ses-005",
"agent": "SIM",
"path": "spice_results.json",
"filename": "spice_results.json",
"type": "json",
"mimeType": "application/json",
"size": 52400,
"description": "NGSpice simulation results — DC operating points, transient analysis, power rail characterization",
"createdAt": "2025-01-22T14:45:18Z",
"checksum": "sha256:6789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234567"
},
{
"id": "art-014",
"sessionId": "ses-005",
"agent": "SIM",
"path": "power_analysis.pdf",
"filename": "power_analysis.pdf",
"type": "pdf",
"mimeType": "application/pdf",
"size": 184000,
"description": "Power analysis report with waveform plots — 3.3V ripple 18mV (spec <50mV), all rails PASS",
"createdAt": "2025-01-22T14:45:18Z",
"checksum": "sha256:789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012345678"
},
{
"id": "art-016",
"sessionId": "ses-006",
"agent": "TST",
"path": "test_plan.md",
"filename": "test_plan.md",
"type": "markdown",
"mimeType": "text/markdown",
"size": 34200,
"description": "DVT test plan — 45 test cases, 6 categories, pass/fail criteria, equipment requirements",
"createdAt": "2025-01-24T09:38:50Z",
"checksum": "sha256:9abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789ab"
}
]
}
src/mocks/data/health.json
Healthy system status with all Phase 1 tools detected.
{
"status": "healthy",
"version": "0.1.0",
"uptime": 14400,
"timestamp": "2025-01-25T12:00:00Z",
"components": {
"gateway": "ok",
"llm_provider": "ok",
"workspace": "ok",
"tools": [
{ "name": "kicad", "version": "8.0.1", "available": true, "path": "/usr/bin/kicad-cli" },
{ "name": "ngspice", "version": "42", "available": true, "path": "/usr/bin/ngspice" },
{ "name": "python", "version": "3.12.1", "available": true, "path": "/usr/bin/python3" },
{ "name": "cmake", "version": "3.28.1", "available": true, "path": "/usr/bin/cmake" },
{ "name": "arm-none-eabi-gcc", "version": "13.2.0", "available": true, "path": "/usr/bin/arm-none-eabi-gcc" },
{ "name": "openocd", "version": "0.12.0", "available": true, "path": "/usr/bin/openocd" }
]
}
}
src/mocks/data/gate-readiness.json
Gate readiness scores for EVT, DVT, and PVT milestones. DVT is the current target gate with blockers identified.
{
"gates": [
{
"gate": "EVT",
"score": 88,
"status": "ready",
"updatedAt": "2025-01-25T08:00:00Z",
"breakdown": {
"evidence": { "score": 92, "total": 24, "completed": 22, "label": "Evidence Completeness" },
"defects": { "score": 85, "total": 20, "resolved": 17, "label": "Defect Resolution" },
"requirements": { "score": 87, "total": 42, "verified": 37, "label": "Requirements Coverage" }
},
"blockers": []
},
{
"gate": "DVT",
"score": 62,
"status": "at-risk",
"updatedAt": "2025-01-25T08:00:00Z",
"breakdown": {
"evidence": { "score": 55, "total": 36, "completed": 20, "label": "Evidence Completeness" },
"defects": { "score": 78, "total": 15, "resolved": 12, "label": "Defect Resolution" },
"requirements": { "score": 53, "total": 42, "verified": 22, "label": "Requirements Coverage" }
},
"blockers": [
"Test plan pending approval (ses-006)",
"2 NRND components need alternates (LP2985-33DBVR, NCP186AMT330TAG)"
]
},
{
"gate": "PVT",
"score": 15,
"status": "not-ready",
"updatedAt": "2025-01-25T08:00:00Z",
"breakdown": {
"evidence": { "score": 12, "total": 48, "completed": 6, "label": "Evidence Completeness" },
"defects": { "score": 20, "total": 10, "resolved": 2, "label": "Defect Resolution" },
"requirements": { "score": 13, "total": 42, "verified": 5, "label": "Requirements Coverage" }
},
"blockers": [
"DVT gate not yet passed",
"Manufacturing DFM analysis incomplete",
"Compliance evidence insufficient for all 3 markets",
"Supply chain risks unresolved"
]
}
]
}
src/mocks/data/testing.json
Test coverage data across all categories with FMEA entries for the drone flight controller.
{
"summary": {
"totalTestCases": 45,
"passed": 28,
"failed": 5,
"pending": 12,
"coverage": 62,
"lastRunAt": "2025-01-24T09:38:50Z"
},
"categories": [
{
"name": "Power",
"totalTests": 8,
"passed": 6,
"failed": 0,
"pending": 2,
"coverage": 75,
"tests": [
{ "id": "tst-pwr-001", "name": "3.3V rail regulation under load", "status": "passed", "duration": 120 },
{ "id": "tst-pwr-002", "name": "3.3V rail ripple measurement", "status": "passed", "duration": 180 },
{ "id": "tst-pwr-003", "name": "Motor startup surge transient", "status": "passed", "duration": 240 },
{ "id": "tst-pwr-004", "name": "Battery charger CV/CC profile", "status": "passed", "duration": 600 },
{ "id": "tst-pwr-005", "name": "Power sequencing verification", "status": "passed", "duration": 90 },
{ "id": "tst-pwr-006", "name": "Reverse polarity protection", "status": "passed", "duration": 60 },
{ "id": "tst-pwr-007", "name": "Sleep mode current consumption", "status": "pending", "duration": null },
{ "id": "tst-pwr-008", "name": "Thermal shutdown recovery", "status": "pending", "duration": null }
]
},
{
"name": "Communication",
"totalTests": 6,
"passed": 4,
"failed": 0,
"pending": 2,
"coverage": 67,
"tests": [
{ "id": "tst-com-001", "name": "WiFi throughput and range test", "status": "passed", "duration": 300 },
{ "id": "tst-com-002", "name": "BLE connection stability", "status": "passed", "duration": 180 },
{ "id": "tst-com-003", "name": "LoRa range test (1km LOS)", "status": "passed", "duration": 900 },
{ "id": "tst-com-004", "name": "GNSS time-to-first-fix (cold start)", "status": "passed", "duration": 120 },
{ "id": "tst-com-005", "name": "LoRa packet error rate at max range", "status": "pending", "duration": null },
{ "id": "tst-com-006", "name": "Simultaneous WiFi + LoRa operation", "status": "pending", "duration": null }
]
},
{
"name": "Sensors",
"totalTests": 8,
"passed": 4,
"failed": 2,
"pending": 2,
"coverage": 50,
"tests": [
{ "id": "tst-sns-001", "name": "Primary IMU calibration accuracy", "status": "passed", "duration": 240 },
{ "id": "tst-sns-002", "name": "Backup IMU failover test", "status": "failed", "duration": 180, "failureReason": "I2C bus contention detected during failover — driver timing issue" },
{ "id": "tst-sns-003", "name": "Barometer altitude accuracy (+-1m)", "status": "passed", "duration": 600 },
{ "id": "tst-sns-004", "name": "Magnetometer hard/soft iron calibration", "status": "passed", "duration": 300 },
{ "id": "tst-sns-005", "name": "Sensor fusion Kalman filter convergence", "status": "passed", "duration": 420 },
{ "id": "tst-sns-006", "name": "IMU vibration rejection test", "status": "failed", "duration": 360, "failureReason": "Gyro drift exceeds 0.5 deg/s at 200Hz vibration — mounting needs damping" },
{ "id": "tst-sns-007", "name": "Temperature compensation across -20C to +60C", "status": "pending", "duration": null },
{ "id": "tst-sns-008", "name": "Dual-IMU fusion accuracy under vibration", "status": "pending", "duration": null }
]
},
{
"name": "Motor Control",
"totalTests": 5,
"passed": 3,
"failed": 1,
"pending": 1,
"coverage": 60,
"tests": [
{ "id": "tst-mot-001", "name": "Motor driver thermal stress (continuous 2A)", "status": "passed", "duration": 1800 },
{ "id": "tst-mot-002", "name": "PWM frequency accuracy (20kHz)", "status": "passed", "duration": 60 },
{ "id": "tst-mot-003", "name": "Motor RPM closed-loop response time", "status": "passed", "duration": 120 },
{ "id": "tst-mot-004", "name": "Motor driver overcurrent protection", "status": "failed", "duration": 90, "failureReason": "OCP trigger at 2.8A instead of specified 2.5A — threshold resistor value needs adjustment" },
{ "id": "tst-mot-005", "name": "Motor brake and coast mode switching", "status": "pending", "duration": null }
]
},
{
"name": "Firmware",
"totalTests": 10,
"passed": 7,
"failed": 1,
"pending": 2,
"coverage": 70,
"tests": [
{ "id": "tst-fw-001", "name": "Boot time measurement (<500ms)", "status": "passed", "duration": 10 },
{ "id": "tst-fw-002", "name": "Watchdog reset recovery", "status": "passed", "duration": 30 },
{ "id": "tst-fw-003", "name": "RTOS task scheduling latency", "status": "passed", "duration": 60 },
{ "id": "tst-fw-004", "name": "Flash wear-leveling write endurance", "status": "passed", "duration": 3600 },
{ "id": "tst-fw-005", "name": "OTA firmware update (WiFi)", "status": "passed", "duration": 45 },
{ "id": "tst-fw-006", "name": "OTA update rollback on checksum failure", "status": "passed", "duration": 30 },
{ "id": "tst-fw-007", "name": "Secure boot chain verification", "status": "passed", "duration": 15 },
{ "id": "tst-fw-008", "name": "Memory leak detection (72hr soak test)", "status": "failed", "duration": 259200, "failureReason": "Heap fragmentation after 48 hours — telemetry buffer not properly freed" },
{ "id": "tst-fw-009", "name": "I2C bus recovery after SDA stuck low", "status": "pending", "duration": null },
{ "id": "tst-fw-010", "name": "SPI DMA transfer integrity at max clock", "status": "pending", "duration": null }
]
},
{
"name": "Environmental",
"totalTests": 8,
"passed": 4,
"failed": 1,
"pending": 3,
"coverage": 38,
"tests": [
{ "id": "tst-env-001", "name": "Operating temperature range (-20C to +60C)", "status": "passed", "duration": 7200 },
{ "id": "tst-env-002", "name": "Thermal cycling (100 cycles, -40C to +85C)", "status": "passed", "duration": 86400 },
{ "id": "tst-env-003", "name": "Humidity exposure (85C/85%RH, 168h)", "status": "passed", "duration": 604800 },
{ "id": "tst-env-004", "name": "Random vibration (MIL-STD-810H)", "status": "passed", "duration": 3600 },
{ "id": "tst-env-005", "name": "Mechanical shock (40G, 11ms half-sine)", "status": "failed", "duration": 60, "failureReason": "U.FL antenna connector dislodged at 35G — retention clip needed" },
{ "id": "tst-env-006", "name": "Salt fog corrosion (48h)", "status": "pending", "duration": null },
{ "id": "tst-env-007", "name": "IP54 ingress protection", "status": "pending", "duration": null },
{ "id": "tst-env-008", "name": "Altitude simulation (0-5000m)", "status": "pending", "duration": null }
]
}
],
"fmea": [
{
"id": "fmea-001",
"component": "DRV8313PWPR",
"failureMode": "Motor driver thermal shutdown during sustained high-current operation",
"effect": "Motor stops unexpectedly, drone loses altitude control",
"cause": "Inadequate heatsinking or ambient temperature exceeds design margin",
"severity": 9,
"occurrence": 3,
"detection": 4,
"rpn": 108,
"mitigation": "Add thermal pad to PCB, implement firmware temperature monitoring with gradual power reduction"
},
{
"id": "fmea-002",
"component": "BMI270",
"failureMode": "IMU sensor drift exceeding calibration bounds",
"effect": "Inaccurate attitude estimation, flight instability",
"cause": "Temperature-induced bias drift, vibration coupling",
"severity": 8,
"occurrence": 4,
"detection": 3,
"rpn": 96,
"mitigation": "Dual-IMU redundancy with cross-validation, vibration-isolated mounting"
},
{
"id": "fmea-003",
"component": "MAX-M10S",
"failureMode": "GPS signal loss in urban canyon or under interference",
"effect": "Loss of position hold, failsafe RTH may drift",
"cause": "Multipath interference, jamming, antenna obstruction",
"severity": 7,
"occurrence": 5,
"detection": 2,
"rpn": 70,
"mitigation": "Multi-constellation support, barometric altitude backup, dead reckoning via IMU"
},
{
"id": "fmea-004",
"component": "BQ25180YBGR",
"failureMode": "Battery overcurrent during fast charge",
"effect": "Battery cell damage, thermal runaway risk",
"cause": "Charge current setpoint error, faulty I2C configuration",
"severity": 10,
"occurrence": 2,
"detection": 3,
"rpn": 60,
"mitigation": "Hardware current limit via sense resistor independent of I2C, NTC temperature monitoring"
},
{
"id": "fmea-005",
"component": "ESP32-S3-WROOM-1",
"failureMode": "WiFi connection drops during OTA firmware update",
"effect": "Partial firmware image, device bricked until manual recovery",
"cause": "RF interference, insufficient signal strength, power brownout",
"severity": 8,
"occurrence": 3,
"detection": 5,
"rpn": 120,
"mitigation": "A/B partition scheme with automatic rollback, checksum verification before boot swap"
},
{
"id": "fmea-006",
"component": "SX1262IMLTRT",
"failureMode": "LoRa desensitization from co-located WiFi transmitter",
"effect": "Reduced LoRa range, intermittent packet loss on telemetry",
"cause": "Insufficient RF isolation between WiFi and LoRa antennas",
"severity": 5,
"occurrence": 4,
"detection": 3,
"rpn": 60,
"mitigation": "Antenna placement optimization, SAW filter on LoRa RX path, time-division multiplexing"
},
{
"id": "fmea-007",
"component": "TPS62823DLCR",
"failureMode": "3.3V buck converter output oscillation",
"effect": "MCU brown-out resets, sensor data corruption",
"cause": "Insufficient output capacitance, high ESR bulk cap, PCB layout loop area",
"severity": 8,
"occurrence": 2,
"detection": 4,
"rpn": 64,
"mitigation": "Layout per TI reference design, add 22uF ceramic bulk cap, verify loop bandwidth with bode plot"
},
{
"id": "fmea-008",
"component": "W25Q128JVSIQ",
"failureMode": "Flash memory data corruption during power loss",
"effect": "Loss of configuration data, flight logs, or calibration constants",
"cause": "Incomplete write during power interruption",
"severity": 6,
"occurrence": 3,
"detection": 4,
"rpn": 72,
"mitigation": "Journaling filesystem, CRC verification on read, dual-copy critical data with checksums"
},
{
"id": "fmea-009",
"component": "STM32H743VIT6",
"failureMode": "MCU lockup due to hard fault in ISR context",
"effect": "Complete loss of flight control, uncontrolled descent",
"cause": "Stack overflow in nested interrupts, null pointer dereference",
"severity": 10,
"occurrence": 2,
"detection": 3,
"rpn": 60,
"mitigation": "MPU stack guard regions, watchdog timer with independent clock, co-processor failsafe"
},
{
"id": "fmea-010",
"component": "ICM-42688-P",
"failureMode": "Backup IMU SPI bus failure",
"effect": "Loss of redundant IMU data, reduced fault tolerance",
"cause": "Solder joint fatigue from vibration, ESD damage",
"severity": 6,
"occurrence": 3,
"detection": 5,
"rpn": 90,
"mitigation": "Continuous health monitoring with cross-check against primary IMU, conformal coating"
},
{
"id": "fmea-011",
"component": "Connectors (J3-J6)",
"failureMode": "Motor connector intermittent contact under vibration",
"effect": "Motor power interruption, asymmetric thrust, crash",
"cause": "Vibration loosening connector retention, contact oxidation",
"severity": 9,
"occurrence": 3,
"detection": 6,
"rpn": 162,
"mitigation": "Locking connector upgrade, conformal coating on contacts, vibration testing per MIL-STD-810H"
},
{
"id": "fmea-012",
"component": "MMC5983MA",
"failureMode": "Magnetometer reading corrupted by motor current",
"effect": "Incorrect heading estimation, compass navigation errors",
"cause": "Electromagnetic interference from BLDC motor currents",
"severity": 5,
"occurrence": 5,
"detection": 3,
"rpn": 75,
"mitigation": "Magnetometer placement away from motor traces, calibration with motors running, timing sync with motor commutation"
}
]
}
src/mocks/data/websocket-events.json
A replay sequence of 14 WebSocket events simulating a live agent workflow for demo mode. Events are ordered chronologically with delay hints for realistic playback timing.
{
"description": "WebSocket event replay sequence for demo mode. delayMs indicates the pause before sending each event.",
"events": [
{
"delayMs": 0,
"event": "session.started",
"data": {
"sessionId": "ses-007",
"agent": "MFG",
"skill": "manufacturing",
"title": "DFM Analysis & Gerber Export",
"timestamp": "2025-01-25T08:00:00Z"
}
},
{
"delayMs": 3000,
"event": "agent.progress",
"data": {
"sessionId": "ses-007",
"agent": "MFG",
"progress": 0.1,
"message": "Analyzing PCB design — loading 6-layer stackup...",
"timestamp": "2025-01-25T08:00:03Z"
}
},
{
"delayMs": 5000,
"event": "agent.progress",
"data": {
"sessionId": "ses-007",
"agent": "MFG",
"progress": 0.3,
"message": "Running DFM checks — 312 components, 45 unique parts...",
"timestamp": "2025-01-25T08:00:08Z"
}
},
{
"delayMs": 6000,
"event": "agent.progress",
"data": {
"sessionId": "ses-007",
"agent": "MFG",
"progress": 0.5,
"message": "Generating Gerber RS-274X files (F.Cu, In1.Cu, In2.Cu, In3.Cu, In4.Cu, B.Cu, F.Mask, B.Mask, F.SilkS, B.SilkS)...",
"timestamp": "2025-01-25T08:00:14Z"
}
},
{
"delayMs": 4000,
"event": "agent.progress",
"data": {
"sessionId": "ses-007",
"agent": "MFG",
"progress": 0.7,
"message": "Creating pick-and-place data — 312 placements across top and bottom layers...",
"timestamp": "2025-01-25T08:00:18Z"
}
},
{
"delayMs": 3000,
"event": "agent.progress",
"data": {
"sessionId": "ses-007",
"agent": "MFG",
"progress": 0.9,
"message": "Finalizing manufacturing notes — 2 DFM advisories documented...",
"timestamp": "2025-01-25T08:00:21Z"
}
},
{
"delayMs": 2000,
"event": "session.complete",
"data": {
"sessionId": "ses-007",
"agent": "MFG",
"status": "completed",
"artifacts": [
{ "id": "art-018", "path": "gerber/DFC-v2.1-gerbers.zip", "size": 284000 },
{ "id": "art-019", "path": "manufacturing/pick_and_place.csv", "size": 18400 },
{ "id": "art-020", "path": "manufacturing/dfm_report.json", "size": 5200 }
],
"timestamp": "2025-01-25T08:00:23Z"
}
},
{
"delayMs": 2000,
"event": "session.started",
"data": {
"sessionId": "ses-008",
"agent": "SC",
"skill": "supply-chain",
"title": "Supply Chain Risk Assessment",
"timestamp": "2025-01-25T08:00:25Z"
}
},
{
"delayMs": 4000,
"event": "agent.progress",
"data": {
"sessionId": "ses-008",
"agent": "SC",
"progress": 0.2,
"message": "Querying distributor APIs — DigiKey, Mouser, LCSC...",
"timestamp": "2025-01-25T08:00:29Z"
}
},
{
"delayMs": 6000,
"event": "agent.progress",
"data": {
"sessionId": "ses-008",
"agent": "SC",
"progress": 0.5,
"message": "Analyzing lead times and lifecycle status for 45 components...",
"timestamp": "2025-01-25T08:00:35Z"
}
},
{
"delayMs": 3000,
"event": "bom.updated",
"data": {
"component": "LP2985-33DBVR",
"field": "lifecycle",
"oldValue": "active",
"newValue": "NRND",
"message": "LP2985-33DBVR flagged as NRND — replacement recommended: TLV75533PDBVR",
"timestamp": "2025-01-25T08:00:38Z"
}
},
{
"delayMs": 4000,
"event": "agent.progress",
"data": {
"sessionId": "ses-008",
"agent": "SC",
"progress": 0.8,
"message": "Generating risk report — 5 risk items identified (2 high, 2 medium, 1 low)...",
"timestamp": "2025-01-25T08:00:42Z"
}
},
{
"delayMs": 3000,
"event": "session.complete",
"data": {
"sessionId": "ses-008",
"agent": "SC",
"status": "completed",
"artifacts": [
{ "id": "art-021", "path": "supply-chain/risk_report.json", "size": 12400 },
{ "id": "art-022", "path": "supply-chain/distributor_quotes.csv", "size": 8200 }
],
"timestamp": "2025-01-25T08:00:45Z"
}
},
{
"delayMs": 1000,
"event": "approval.requested",
"data": {
"approvalId": "appr-002",
"sessionId": "ses-008",
"agent": "SC",
"title": "BOM Alternate: LP2985 Replacement",
"priority": "medium",
"message": "Supply Chain Agent recommends replacing LP2985-33DBVR (NRND) with TLV75533PDBVR",
"timestamp": "2025-01-25T08:00:46Z"
}
}
]
}