Traceability Matrix¶
Features¶
Requirements¶
ID |
Title |
Priority |
Satisfies |
Implemented by |
|---|---|---|---|---|
MCP endpoint must enforce authentication |
high |
|||
MCP must be feature-gated |
medium |
|||
MCP must respect PLC access claims |
high |
|||
MCP must reuse existing service layer |
medium |
|||
All endpoints must require authentication |
high |
|||
Security response headers must be applied |
medium |
|||
PLC access must be restricted by claims |
high |
|||
Symbol writes must be validated |
high |
|||
Value constraints must be enforced on writes |
medium |
API_VARIABLES_BATCH_WRITE; API_VARIABLES_CONSTRAINTS; API_VARIABLES_WRITE |
||
Write operations must enforce WriteAccess policy |
high |
API_ALARMS_ACKNOWLEDGE; API_ETHERCAT_RESET_ERROR_COUNTERS; API_FILES_WRITE; API_RPC_INVOKE; API_VARIABLES_BATCH_WRITE; API_VARIABLES_WRITE |
Endpoints¶
ID |
Method |
Route |
Policy |
Implements |
|---|---|---|---|---|
GET |
/api/alarms |
ReadAccess |
||
SSE |
/api/alarms/stream |
ReadAccess |
||
GET |
/api/plcs |
Authenticated |
||
GET |
/api/plcs/{plcId}/alarms |
ReadAccess |
||
SSE |
/api/plcs/{plcId}/alarms/stream |
ReadAccess |
||
WS |
/api/plcs/{plcId}/alarms/ws |
ReadAccess |
||
POST |
/api/plcs/{plcId}/alarms/{key}/acknowledge |
WriteAccess |
||
GET |
/api/plcs/{plcId}/constraints/{symbolPath} |
ReadAccess |
||
GET |
/api/plcs/{plcId}/device/info |
ReadAccess |
||
GET |
/api/plcs/{plcId}/device/state |
ReadAccess |
||
GET |
/api/plcs/{plcId}/ethercat/masters |
ReadAccess |
||
GET |
/api/plcs/{plcId}/ethercat/masters/{masterId} |
ReadAccess |
||
GET |
/api/plcs/{plcId}/ethercat/masters/{masterId}/slaves |
ReadAccess |
||
GET |
/api/plcs/{plcId}/ethercat/masters/{masterId}/slaves/{address} |
ReadAccess |
||
GET |
/api/plcs/{plcId}/ethercat/masters/{masterId}/slaves/{address}/coe/{index}/{subIndex} |
ReadAccess |
||
POST |
/api/plcs/{plcId}/ethercat/masters/{masterId}/slaves/{address}/reset-error-counters |
WriteAccess |
||
GET |
/api/plcs/{plcId}/ethercat/masters/{masterId}/syncunits |
ReadAccess |
||
GET |
/api/plcs/{plcId}/ethercat/masters/{masterId}/topology |
ReadAccess |
||
WS |
/api/plcs/{plcId}/ethercat/ws |
ReadAccess |
||
GET |
/api/plcs/{plcId}/files/{path} |
ReadAccess |
||
PUT |
/api/plcs/{plcId}/files/{path} |
WriteAccess |
||
GET |
/api/plcs/{plcId}/files?dir={path} |
ReadAccess |
||
POST |
/api/plcs/{plcId}/lifecycle/reset |
LifecycleAccess |
||
POST |
/api/plcs/{plcId}/lifecycle/start |
LifecycleAccess |
||
POST |
/api/plcs/{plcId}/lifecycle/stop |
LifecycleAccess |
||
POST |
/api/plcs/{plcId}/methods/{methodPath} |
WriteAccess |
||
SSE |
/api/plcs/{plcId}/notifications/sse?symbols={symbolPath} |
ReadAccess |
||
WS |
/api/plcs/{plcId}/notifications/ws |
ReadAccess |
||
POST |
/api/plcs/{plcId}/sim/pause |
LifecycleAccess |
||
POST |
/api/plcs/{plcId}/sim/reset |
LifecycleAccess |
||
POST |
/api/plcs/{plcId}/sim/run |
LifecycleAccess |
||
GET |
/api/plcs/{plcId}/sim/state |
LifecycleAccess |
||
POST |
/api/plcs/{plcId}/sim/step?cycles={n} |
LifecycleAccess |
||
GET |
/api/plcs/{plcId}/status |
Authenticated |
||
GET |
/api/plcs/{plcId}/symbols |
ReadAccess |
||
GET |
/api/plcs/{plcId}/symbols/{symbolPath} |
ReadAccess |
||
GET |
/api/plcs/{plcId}/symbols?search={pattern}&flat={bool} |
ReadAccess |
||
GET |
/api/plcs/{plcId}/types/{typeName}/enum-members |
ReadAccess |
||
PUT |
/api/plcs/{plcId}/variables |
WriteAccess |
FEAT_VARIABLES; REQ_SEC_SYMBOL_GUARD; REQ_SEC_VALUE_CONSTRAINTS; REQ_SEC_WRITE_AUTH |
|
GET |
/api/plcs/{plcId}/variables/{symbolPath} |
ReadAccess |
||
PUT |
/api/plcs/{plcId}/variables/{symbolPath} |
WriteAccess |
FEAT_VARIABLES; REQ_SEC_SYMBOL_GUARD; REQ_SEC_VALUE_CONSTRAINTS; REQ_SEC_WRITE_AUTH |
|
GET |
/api/plcs/{plcId}/variables?paths={symbolPath} |
ReadAccess |
||
GET |
/health/alarms |
Anonymous |
||
GET |
/health/live |
Anonymous |
||
GET |
/health/ready |
Anonymous |
||
MCP |
/mcp |
ReadAccess |
FEAT_MCP; REQ_MCP_AUTH; REQ_MCP_FEATURE_GATE; REQ_MCP_PLC_ACCESS |
Endpoints without a requirement¶
Endpoints that trace only to a feature. Candidates for a requirement of their own.
ID |
Title |
Implements |
|---|---|---|
Alarm Health Check |
||
List Outstanding Alarms |
||
Stream Alarm Transitions (SSE) |
||
Stream Alarm Transitions (WebSocket / SignalR) |
||
Get Device Info |
||
Get Device State |
||
CoE Read Object |
||
Real-Time Notifications (SignalR) |
||
Master Detail |
||
List Masters |
||
Slave Detail |
||
List Slaves |
||
Sync Units |
||
Topology |
||
List Directory |
||
Read File |
||
Liveness Probe |
||
Readiness Probe |
||
Reset PLC |
||
Start PLC |
||
Stop PLC |
||
Server-Sent Events (SSE) |
||
WebSocket (SignalR) |
||
List PLCs |
||
Get PLC Status |
||
Pause |
||
Reset |
||
Run |
||
Get State |
||
Step |
||
Browse Root Symbols |
||
Get Symbol Info |
||
Search Symbols |
||
Resolve an Enum's Members |
||
Batch Read |
||
Read Variable |