Files
multi-simadmin/packages/operation-registry/src/upstream-58e2204.ts
T
chick f11877f13e feat(contracts): share notification, organization and device capability models
Move the Hub channel table, organization tags and device capability definitions
into the workspace packages so the control plane and the console validate the
same contract, and refresh the frozen upstream evidence for the new paths.
2026-09-05 18:52:54 +08:00

3706 lines
137 KiB
TypeScript

import { structuredEvidence58e2204 } from './structured-evidence-58e2204.ts';
import { sensitiveModelEvidence58e2204 } from './sensitive-evidence-58e2204.ts';
/** Frozen static-contract OperationRegistry audited at upstream commit 58e2204. */
const rawUpstream58e2204Operations = [
{
operationId: 'getDevice',
method: 'GET',
pathTemplate: '/api/device',
handler: 'get_device_info',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1076-1090',
responseSchemaEvidence:
'ApiResponse<DeviceInfoResponse> success payload/error envelope; success/error payload evidenced by ApiResponse<DeviceInfoResponse>; exact handler backend/src/handlers.rs:1076-1090',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'overview',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:506-506',
'backend/src/handlers.rs:1076-1090',
'bruno-api/get_device_info.bru:8',
],
upstreamDomain: 'device-system',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getSim',
method: 'GET',
pathTemplate: '/api/sim',
handler: 'get_sim_info',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1126-1145',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<SimInfoResponse>; exact handler backend/src/handlers.rs:1126-1145',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'overview',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:508-508',
'backend/src/handlers.rs:1126-1145',
'bruno-api/get_sim_info.bru:8',
],
upstreamDomain: 'sim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postSimDetailsRefresh',
method: 'POST',
pathTemplate: '/api/sim/details/refresh',
handler: 'refresh_sim_details_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1148-1164',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:1148-1164; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'overview',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:510-511', 'backend/src/handlers.rs:1148-1164'],
upstreamDomain: 'sim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postSimCache',
method: 'POST',
pathTemplate: '/api/sim/cache',
handler: 'update_sim_cache_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor UpdateSimCacheRequest fields [phone_number:Option<String>, sms_center:Option<String>] (models.rs:1036); exact handler backend/src/handlers.rs:1167-1213',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1167-1213',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'overview',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:514-515', 'backend/src/handlers.rs:1167-1213'],
upstreamDomain: 'sim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getNetwork',
method: 'GET',
pathTemplate: '/api/network',
handler: 'get_network_info',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1218-1232',
responseSchemaEvidence:
'ApiResponse<NetworkInfoResponse> success payload/error envelope; success/error payload evidenced by ApiResponse<NetworkInfoResponse>; exact handler backend/src/handlers.rs:1218-1232',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:519-520',
'backend/src/handlers.rs:1218-1232',
'bruno-api/get_network_info.bru:8',
],
upstreamDomain: 'cellular',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getCells',
method: 'GET',
pathTemplate: '/api/cells',
handler: 'get_cells',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1235-1249',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<CellsResponse>; exact handler backend/src/handlers.rs:1235-1249',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:522-522',
'backend/src/handlers.rs:1235-1249',
'bruno-api/get_cells_info.bru:8',
],
upstreamDomain: 'cellular',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postCellMonitorStart',
method: 'POST',
pathTemplate: '/api/cell-monitor/start',
handler: 'start_cell_monitor_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1252-1282',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1252-1282',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:524-525', 'backend/src/handlers.rs:1252-1282'],
upstreamDomain: 'cellular',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postCellMonitorStop',
method: 'POST',
pathTemplate: '/api/cell-monitor/stop',
handler: 'stop_cell_monitor_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1285-1312',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1285-1312',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:528-529', 'backend/src/handlers.rs:1285-1312'],
upstreamDomain: 'cellular',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getRadioMode',
method: 'GET',
pathTemplate: '/api/radio-mode',
handler: 'get_radio_mode_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1315-1329',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<RadioModeResponse>; exact handler backend/src/handlers.rs:1315-1329',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:532-533',
'backend/src/handlers.rs:1315-1329',
'bruno-api/get_radio_mode.bru:8',
],
upstreamDomain: 'radio-lock',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postRadioMode',
method: 'POST',
pathTemplate: '/api/radio-mode',
handler: 'set_radio_mode_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor RadioModeRequest fields [mode:RadioMode] (models.rs:351); exact handler backend/src/handlers.rs:1332-1352',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1332-1352',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:532-534',
'backend/src/handlers.rs:1332-1352',
'bruno-api/set_radio_mode_nr.bru:8',
'bruno-api/set_radio_mode_lte.bru:8',
'bruno-api/set_radio_mode_auto.bru:8',
],
upstreamDomain: 'radio-lock',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getBandLock',
method: 'GET',
pathTemplate: '/api/band-lock',
handler: 'get_band_lock_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1355-1369',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<BandLockStatus>; exact handler backend/src/handlers.rs:1355-1369',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:538-539',
'backend/src/handlers.rs:1355-1369',
'bruno-api/get_band_lock.bru:8',
],
upstreamDomain: 'radio-lock',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postBandLock',
method: 'POST',
pathTemplate: '/api/band-lock',
handler: 'set_band_lock_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor BandLockRequest fields [lte_fdd_bands:Vec<u32>, lte_tdd_bands:Vec<u32>, nr_fdd_bands:Vec<u32>, nr_tdd_bands:Vec<u32>] (models.rs:377); exact handler backend/src/handlers.rs:1372-1392',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1372-1392',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:538-540',
'backend/src/handlers.rs:1372-1392',
'bruno-api/set_band_lock_nr_n78.bru:8',
'bruno-api/set_band_lock_lte_b1_b3.bru:8',
'bruno-api/unlock_all_bands.bru:8',
'bruno-api/set_band_lock_lte_nr_mix.bru:8',
],
upstreamDomain: 'radio-lock',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getNetworkInterfaces',
method: 'GET',
pathTemplate: '/api/network/interfaces',
handler: 'get_network_interfaces_info',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1619-1644',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<NetworkInterfacesResponse>; exact handler backend/src/handlers.rs:1619-1644',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:544-545',
'backend/src/handlers.rs:1619-1644',
'bruno-api/get_network_interfaces.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getNetworkConnectionAddresses',
method: 'GET',
pathTemplate: '/api/network/connection-addresses',
handler: 'get_network_connection_addresses',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1647-1666',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<ConnectionAddressesResponse>; exact handler backend/src/handlers.rs:1647-1666',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:548-549', 'backend/src/handlers.rs:1647-1666'],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getDeviceNetworkDdnsConfig',
method: 'GET',
pathTemplate: '/api/device-network/ddns/config',
handler: 'get_device_ddns_config_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1669-1679',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:1669-1679; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.response.data.access_id', '$.response.data.access_secret'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:552-553',
'backend/src/handlers.rs:1669-1679',
'bruno-api/get_device_ddns_config.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postDeviceNetworkDdnsConfig',
method: 'POST',
pathTemplate: '/api/device-network/ddns/config',
handler: 'set_device_ddns_config_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor crate::config::DdnsConfig fields [enabled:bool, provider:String, access_id:String, access_secret:String, interval_seconds:u64, ttl:u32, ipv4:DdnsIpConfig, ipv6:DdnsIpConfig] (config.rs:634); exact handler backend/src/handlers.rs:1682-1721',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1682-1721',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: ['$.body.access_id', '$.body.access_secret'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:552-554',
'backend/src/handlers.rs:1682-1721',
'bruno-api/set_device_ddns_config.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getDeviceNetworkDdnsStatus',
method: 'GET',
pathTemplate: '/api/device-network/ddns/status',
handler: 'get_device_ddns_status_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1750-1757',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:1750-1757; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:558-559',
'backend/src/handlers.rs:1750-1757',
'bruno-api/get_device_ddns_status.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postDeviceNetworkDdnsSync',
method: 'POST',
pathTemplate: '/api/device-network/ddns/sync',
handler: 'sync_device_ddns_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1760-1781',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<DdnsSyncResponse>; exact handler backend/src/handlers.rs:1760-1781',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:562-563',
'backend/src/handlers.rs:1760-1781',
'bruno-api/post_device_ddns_sync.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getDeviceNetworkDdnsLogs',
method: 'GET',
pathTemplate: '/api/device-network/ddns/logs',
handler: 'get_device_ddns_logs_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1784-1790',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:1784-1790; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:566-567',
'backend/src/handlers.rs:1784-1790',
'bruno-api/get_device_ddns_logs.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postDeviceNetworkDdnsLogsClear',
method: 'POST',
pathTemplate: '/api/device-network/ddns/logs/clear',
handler: 'clear_device_ddns_logs_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1793-1802',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:1793-1802; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:570-571',
'backend/src/handlers.rs:1793-1802',
'bruno-api/post_device_ddns_logs_clear.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getDeviceNetworkWlanStatus',
method: 'GET',
pathTemplate: '/api/device-network/wlan/status',
handler: 'get_device_wlan_status_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1805-1819',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1805-1819',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.response.data.ssid'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:574-575',
'backend/src/handlers.rs:1805-1819',
'bruno-api/get_device_wlan_status.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postDeviceNetworkWlanEnabled',
method: 'POST',
pathTemplate: '/api/device-network/wlan/enabled',
handler: 'set_device_wlan_enabled_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor WlanEnabledRequest fields [enabled:bool] (models.rs:606); exact handler backend/src/handlers.rs:1822-1841',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1822-1841',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:578-579',
'backend/src/handlers.rs:1822-1841',
'bruno-api/set_device_wlan_enabled.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postDeviceNetworkWlanScan',
method: 'POST',
pathTemplate: '/api/device-network/wlan/scan',
handler: 'scan_device_wlan_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1844-1858',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<WlanScanResponse>; exact handler backend/src/handlers.rs:1844-1858',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'non-idempotent',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:582-583',
'backend/src/handlers.rs:1844-1858',
'bruno-api/post_device_wlan_scan.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getDeviceNetworkWlanProfiles',
method: 'GET',
pathTemplate: '/api/device-network/wlan/profiles',
handler: 'get_device_wlan_profiles_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1861-1875',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<WlanProfilesResponse>; exact handler backend/src/handlers.rs:1861-1875',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.response.data[*].ssid'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:586-587',
'backend/src/handlers.rs:1861-1875',
'bruno-api/get_device_wlan_profiles.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postDeviceNetworkWlanForget',
method: 'POST',
pathTemplate: '/api/device-network/wlan/forget',
handler: 'forget_device_wlan_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor WlanForgetRequest fields [uuid:String, connection_id:String] (models.rs:635); exact handler backend/src/handlers.rs:1878-1897',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<WlanProfilesResponse>; exact handler backend/src/handlers.rs:1878-1897',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:590-591',
'backend/src/handlers.rs:1878-1897',
'bruno-api/post_device_wlan_forget.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postDeviceNetworkWlanConnect',
method: 'POST',
pathTemplate: '/api/device-network/wlan/connect',
handler: 'connect_device_wlan_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor WlanConnectRequest fields [ssid:String, password:String, auto_join:bool] (models.rs:611); exact handler backend/src/handlers.rs:1900-1955',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1900-1955',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'non-idempotent',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.body.ssid', '$.body.password'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:594-595',
'backend/src/handlers.rs:1900-1955',
'bruno-api/post_device_wlan_connect.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postDeviceNetworkWlanDisconnect',
method: 'POST',
pathTemplate: '/api/device-network/wlan/disconnect',
handler: 'disconnect_device_wlan_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1958-1991',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1958-1991',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'non-idempotent',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:598-599',
'backend/src/handlers.rs:1958-1991',
'bruno-api/post_device_wlan_disconnect.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postDeviceNetworkWlanProfile',
method: 'POST',
pathTemplate: '/api/device-network/wlan/profile',
handler: 'save_device_wlan_profile_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor WlanProfileRequest fields [connection_id:String, auto_join:Option<bool>, ipv4_mode:Option<String>, ipv4_address:Option<String>, ipv4_prefix:Option<u8>, ipv4_gateway:Option<String>] (models.rs:620); exact handler backend/src/handlers.rs:1994-2013',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1994-2013',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.body.credentials'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'device-network',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:602-603',
'backend/src/handlers.rs:1994-2013',
'bruno-api/post_device_wlan_profile.bru:8',
],
upstreamDomain: 'device-network',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getNetworkSignalStrength',
method: 'GET',
pathTemplate: '/api/network/signal-strength',
handler: 'get_signal_strength_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2016-2030',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<SignalStrengthResponse>; exact handler backend/src/handlers.rs:2016-2030',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:606-607',
'backend/src/handlers.rs:2016-2030',
'bruno-api/get_signal_strength.bru:8',
],
upstreamDomain: 'cellular',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getLocationCellInfo',
method: 'GET',
pathTemplate: '/api/location/cell-info',
handler: 'get_cell_location_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1395-1409',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<CellLocationResponse>; exact handler backend/src/handlers.rs:1395-1409',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:610-611',
'backend/src/handlers.rs:1395-1409',
'bruno-api/get_cell_location_info.bru:8',
],
upstreamDomain: 'cellular',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getNetworkOperators',
method: 'GET',
pathTemplate: '/api/network/operators',
handler: 'get_network_operators',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1412-1426',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<OperatorListResponse>; exact handler backend/src/handlers.rs:1412-1426',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:614-615',
'backend/src/handlers.rs:1412-1426',
'bruno-api/get_operators.bru:8',
],
upstreamDomain: 'cellular',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getNetworkOperatorsScan',
method: 'GET',
pathTemplate: '/api/network/operators/scan',
handler: 'scan_network_operators',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1429-1443',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<OperatorListResponse>; exact handler backend/src/handlers.rs:1429-1443',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:618-619',
'backend/src/handlers.rs:1429-1443',
'bruno-api/scan_operators.bru:8',
],
upstreamDomain: 'cellular',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postNetworkRegisterManual',
method: 'POST',
pathTemplate: '/api/network/register-manual',
handler: 'register_network_manual',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor ManualRegisterRequest fields [mccmnc:String] (models.rs:771); exact handler backend/src/handlers.rs:1446-1466',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1446-1466',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'non-idempotent',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:622-623',
'backend/src/handlers.rs:1446-1466',
'bruno-api/register_operator_manual.bru:8',
],
upstreamDomain: 'cellular',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postNetworkRegisterAuto',
method: 'POST',
pathTemplate: '/api/network/register-auto',
handler: 'register_network_auto',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1469-1486',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1469-1486',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'non-idempotent',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:626-627',
'backend/src/handlers.rs:1469-1486',
'bruno-api/register_operator_auto.bru:8',
],
upstreamDomain: 'cellular',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getApn',
method: 'GET',
pathTemplate: '/api/apn',
handler: 'get_apn_list_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1489-1504',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<ApnListResponse>; exact handler backend/src/handlers.rs:1489-1504',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.body.username', '$.body.password'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:630-631',
'backend/src/handlers.rs:1489-1504',
'bruno-api/get_apn_list.bru:8',
],
upstreamDomain: 'data-connection',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postApn',
method: 'POST',
pathTemplate: '/api/apn',
handler: 'set_apn_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor SetApnRequest fields [context_path:String, apn:Option<String>, protocol:Option<String>, username:Option<String>, password:Option<String>, auth_method:Option<String>] (models.rs:795); exact handler backend/src/handlers.rs:1507-1571',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1507-1571',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.body.username', '$.body.password'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:630-632',
'backend/src/handlers.rs:1507-1571',
'bruno-api/set_apn.bru:8',
],
upstreamDomain: 'data-connection',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getCellLock',
method: 'GET',
pathTemplate: '/api/cell-lock',
handler: 'get_cell_lock_status_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1574-1582',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:1574-1582; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:636-637',
'backend/src/handlers.rs:1574-1582',
'bruno-api/get_cell_lock.bru:8',
],
upstreamDomain: 'radio-lock',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postCellLock',
method: 'POST',
pathTemplate: '/api/cell-lock',
handler: 'set_cell_lock_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor CellLockRequest fields [rat:u8, enable:bool, lock_type:u8, pci:Option<u16>, arfcn:Option<u32>] (models.rs:405); exact handler backend/src/handlers.rs:1585-1603',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<CellLockResult>; exact handler backend/src/handlers.rs:1585-1603',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:636-638',
'backend/src/handlers.rs:1585-1603',
'bruno-api/set_cell_lock_lte.bru:8',
'bruno-api/set_cell_lock_nr.bru:8',
'bruno-api/unlock_cell_nr.bru:8',
],
upstreamDomain: 'radio-lock',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postCellLockUnlockAll',
method: 'POST',
pathTemplate: '/api/cell-lock/unlock-all',
handler: 'unlock_all_cells_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:1606-1616',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:1606-1616; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:642-643',
'backend/src/handlers.rs:1606-1616',
'bruno-api/unlock_all_cells.bru:8',
],
upstreamDomain: 'radio-lock',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getData',
method: 'GET',
pathTemplate: '/api/data',
handler: 'get_data_status',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2035-2062',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<DataConnectionResponse>; exact handler backend/src/handlers.rs:2035-2062',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:647-648',
'backend/src/handlers.rs:2035-2062',
'bruno-api/get_data_status.bru:8',
],
upstreamDomain: 'data-connection',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postData',
method: 'POST',
pathTemplate: '/api/data',
handler: 'set_data_status',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor DataConnectionRequest fields [active:bool] (models.rs:234); exact handler backend/src/handlers.rs:2065-2131',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<DataConnectionResponse>; exact handler backend/src/handlers.rs:2065-2131',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:647-649',
'backend/src/handlers.rs:2065-2131',
'bruno-api/set_data_status_disable.bru:8',
'bruno-api/set_data_status_enable.bru:8',
],
upstreamDomain: 'data-connection',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getRoaming',
method: 'GET',
pathTemplate: '/api/roaming',
handler: 'get_roaming_status_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2172-2193',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<RoamingResponse>; exact handler backend/src/handlers.rs:2172-2193',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:653-654',
'backend/src/handlers.rs:2172-2193',
'bruno-api/get_roaming_status.bru:8',
],
upstreamDomain: 'data-connection',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postRoaming',
method: 'POST',
pathTemplate: '/api/roaming',
handler: 'set_roaming_status_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor RoamingRequest fields [allowed:bool] (models.rs:244); exact handler backend/src/handlers.rs:2196-2247',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<RoamingResponse>; exact handler backend/src/handlers.rs:2196-2247',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:653-655',
'backend/src/handlers.rs:2196-2247',
'bruno-api/set_roaming_enable.bru:8',
'bruno-api/set_roaming_disable.bru:8',
],
upstreamDomain: 'data-connection',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getAirplaneMode',
method: 'GET',
pathTemplate: '/api/airplane-mode',
handler: 'get_airplane_mode_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2315-2329',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<AirplaneModeResponse>; exact handler backend/src/handlers.rs:2315-2329',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:659-660',
'backend/src/handlers.rs:2315-2329',
'bruno-api/get_airplane_mode.bru:8',
],
upstreamDomain: 'data-connection',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postAirplaneMode',
method: 'POST',
pathTemplate: '/api/airplane-mode',
handler: 'set_airplane_mode_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor AirplaneModeRequest fields [enabled:bool] (models.rs:255); exact handler backend/src/handlers.rs:2250-2312',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<AirplaneModeResponse>; exact handler backend/src/handlers.rs:2250-2312',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:659-661',
'backend/src/handlers.rs:2250-2312',
'bruno-api/set_airplane_mode_disable.bru:8',
'bruno-api/set_airplane_mode_enable.bru:8',
],
upstreamDomain: 'data-connection',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postBasebandRestart',
method: 'POST',
pathTemplate: '/api/baseband/restart',
handler: 'restart_baseband_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2133-2159',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<BasebandRestartResponse>; exact handler backend/src/handlers.rs:2133-2159',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:665-666', 'backend/src/handlers.rs:2133-2159'],
upstreamDomain: 'data-connection',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getBasebandRestartStatus',
method: 'GET',
pathTemplate: '/api/baseband/restart/status',
handler: 'get_baseband_restart_status_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2161-2169',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:2161-2169; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'cellular',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:669-670', 'backend/src/handlers.rs:2161-2169'],
upstreamDomain: 'data-connection',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getWorkMode',
method: 'GET',
pathTemplate: '/api/work-mode',
handler: 'get_work_mode_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:352-365',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:352-365; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'esim',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:674-675', 'backend/src/handlers.rs:352-365'],
upstreamDomain: 'workmode-esim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postWorkMode',
method: 'POST',
pathTemplate: '/api/work-mode',
handler: 'set_work_mode_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor WorkModeRequest fields [mode:WorkMode, confirm:bool] (models.rs:57); exact handler backend/src/handlers.rs:368-405',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<WorkModeResponse>; exact handler backend/src/handlers.rs:368-405',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'esim',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:674-676', 'backend/src/handlers.rs:368-405'],
upstreamDomain: 'workmode-esim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getEsimConfig',
method: 'GET',
pathTemplate: '/api/esim/config',
handler: 'get_esim_config_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:456-462',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:456-462; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'esim',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:680-681', 'backend/src/handlers.rs:456-462'],
upstreamDomain: 'workmode-esim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postEsimConfig',
method: 'POST',
pathTemplate: '/api/esim/config',
handler: 'set_esim_config_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor crate::config::EsimConfig fields [lpac_path:String, custom_memory_total_kb:Option<u32>] (config.rs:1660); exact handler backend/src/handlers.rs:465-482',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:465-482; field shape is implementation evidence only',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'esim',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:680-682', 'backend/src/handlers.rs:465-482'],
upstreamDomain: 'workmode-esim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getEsimLpacStatus',
method: 'GET',
pathTemplate: '/api/esim/lpac/status',
handler: 'get_esim_lpac_status_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:408-416',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:408-416; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'esim',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:686-687', 'backend/src/handlers.rs:408-416'],
upstreamDomain: 'workmode-esim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postEsimLpacRepair',
method: 'POST',
pathTemplate: '/api/esim/lpac/repair',
handler: 'repair_esim_lpac_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor EsimLpacRepairRequest fields [proxy_prefix:Option<String>, asset_url:Option<String>] (models.rs:153); exact handler backend/src/handlers.rs:419-453',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:419-453; field shape is implementation evidence only',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'esim',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:690-691', 'backend/src/handlers.rs:419-453'],
upstreamDomain: 'workmode-esim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getEsimEuicc',
method: 'GET',
pathTemplate: '/api/esim/euicc',
handler: 'get_esim_euicc_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'query extractor std::collections::HashMap<String, String>; exact exact handler backend/src/handlers.rs:485-521',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:485-521; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'esim',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:694-695', 'backend/src/handlers.rs:485-521'],
upstreamDomain: 'workmode-esim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getEsimProfiles',
method: 'GET',
pathTemplate: '/api/esim/profiles',
handler: 'get_esim_profiles_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'query extractor std::collections::HashMap<String, String>; exact exact handler backend/src/handlers.rs:524-598',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<EsimProfilesResponse>; exact handler backend/src/handlers.rs:524-598',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'esim',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:698-699', 'backend/src/handlers.rs:524-598'],
upstreamDomain: 'workmode-esim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postEsimProfiles',
method: 'POST',
pathTemplate: '/api/esim/profiles',
handler: 'download_esim_profile_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor EsimDownloadRequest fields [smdp:String, matching_id:String, confirmation_code:Option<String>, imei:Option<String>] (models.rs:174); exact handler backend/src/handlers.rs:803-1071',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<EsimCommandResponse>; exact handler backend/src/handlers.rs:803-1071',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.body.matching_id', '$.body.confirmation_code', '$.body.imei'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'esim',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:698-700', 'backend/src/handlers.rs:803-1071'],
upstreamDomain: 'workmode-esim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postEsimProfilesIccidEnable',
method: 'POST',
pathTemplate: '/api/esim/profiles/{iccid}/enable',
handler: 'enable_esim_profile_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence: 'path extractor String; exact handler backend/src/handlers.rs:601-726',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:601-726; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'esim',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:704-705', 'backend/src/handlers.rs:601-726'],
upstreamDomain: 'workmode-esim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postEsimProfilesIccidRename',
method: 'POST',
pathTemplate: '/api/esim/profiles/{iccid}/rename',
handler: 'rename_esim_profile_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor EsimRenameRequest fields [name:String] (models.rs:169); path extractor String; exact handler backend/src/handlers.rs:729-750',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<EsimCommandResponse>; exact handler backend/src/handlers.rs:729-750',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'esim',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:708-709', 'backend/src/handlers.rs:729-750'],
upstreamDomain: 'workmode-esim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'deleteEsimProfilesIccid',
method: 'DELETE',
pathTemplate: '/api/esim/profiles/{iccid}',
handler: 'delete_esim_profile_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence: 'path extractor String; exact handler backend/src/handlers.rs:753-780',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:753-780; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'idempotent',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'esim',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:712-713', 'backend/src/handlers.rs:753-780'],
upstreamDomain: 'workmode-esim',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getCalls',
method: 'GET',
pathTemplate: '/api/calls',
handler: 'get_calls_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2634-2655',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<CallListResponse>; exact handler backend/src/handlers.rs:2634-2655',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:717-718',
'backend/src/handlers.rs:2634-2655',
'bruno-api/get_calls.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postCallDial',
method: 'POST',
pathTemplate: '/api/call/dial',
handler: 'dial_call_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor MakeCallRequest fields [phone_number:String] (models.rs:810); exact handler backend/src/handlers.rs:2657-2689',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2657-2689',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.body.phone_number'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:721-722',
'backend/src/handlers.rs:2657-2689',
'bruno-api/post_call_dial.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postCallHangup',
method: 'POST',
pathTemplate: '/api/call/hangup',
handler: 'hangup_call_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor HangupCallRequest fields [path:String] (models.rs:830); exact handler backend/src/handlers.rs:2691-2725',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2691-2725',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:725-726',
'backend/src/handlers.rs:2691-2725',
'bruno-api/post_call_hangup.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postCallHangupAll',
method: 'POST',
pathTemplate: '/api/call/hangup-all',
handler: 'hangup_all_calls_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2727-2760',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2727-2760',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:729-730',
'backend/src/handlers.rs:2727-2760',
'bruno-api/post_call_hangup_all.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postCallAnswer',
method: 'POST',
pathTemplate: '/api/call/answer',
handler: 'answer_call_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor HangupCallRequest fields [path:String] (models.rs:830); exact handler backend/src/handlers.rs:2762-2789',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2762-2789',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:733-734',
'backend/src/handlers.rs:2762-2789',
'bruno-api/post_call_answer.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getCallVolume',
method: 'GET',
pathTemplate: '/api/call/volume',
handler: 'get_call_volume_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2899-2906',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<CallVolumeResponse>; exact handler backend/src/handlers.rs:2899-2906',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:737-738',
'backend/src/handlers.rs:2899-2906',
'bruno-api/get_call_volume.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postCallVolume',
method: 'POST',
pathTemplate: '/api/call/volume',
handler: 'set_call_volume_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor SetCallVolumeRequest fields [speaker_volume:Option<u8>, microphone_volume:Option<u8>, muted:Option<bool>] (models.rs:856); exact handler backend/src/handlers.rs:2908-2922',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<CallVolumeResponse>; exact handler backend/src/handlers.rs:2908-2922',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:737-739',
'backend/src/handlers.rs:2908-2922',
'bruno-api/set_call_volume.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getCallForwarding',
method: 'GET',
pathTemplate: '/api/call/forwarding',
handler: 'get_call_forwarding_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2924-2931',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<CallForwardingResponse>; exact handler backend/src/handlers.rs:2924-2931',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:743-744',
'backend/src/handlers.rs:2924-2931',
'bruno-api/get_call_forwarding.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postCallForwarding',
method: 'POST',
pathTemplate: '/api/call/forwarding',
handler: 'set_call_forwarding_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor SetCallForwardingRequest fields [forward_type:String, number:String, timeout:Option<u16>] (models.rs:891); exact handler backend/src/handlers.rs:2933-2943',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<CallForwardingResponse>; exact handler backend/src/handlers.rs:2933-2943',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.body.number'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:743-745',
'backend/src/handlers.rs:2933-2943',
'bruno-api/set_call_forwarding.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getCallSettings',
method: 'GET',
pathTemplate: '/api/call/settings',
handler: 'get_call_settings_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2852-2866',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<CallSettingsResponse>; exact handler backend/src/handlers.rs:2852-2866',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:749-750',
'backend/src/handlers.rs:2852-2866',
'bruno-api/get_call_settings.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postCallSettings',
method: 'POST',
pathTemplate: '/api/call/settings',
handler: 'set_call_settings_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor SetCallSettingRequest fields [property:String, value:String] (models.rs:875); exact handler backend/src/handlers.rs:2868-2897',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2868-2897',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:749-751',
'backend/src/handlers.rs:2868-2897',
'bruno-api/set_call_settings.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getCallHistory',
method: 'GET',
pathTemplate: '/api/call/history',
handler: 'get_call_history_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'query extractor CallHistoryRequest fields [limit:i64, offset:i64] (models.rs:835); exact handler backend/src/handlers.rs:2791-2813',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<CallHistoryResponse>>); exact handler backend/src/handlers.rs:2791-2813',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:755-756', 'backend/src/handlers.rs:2791-2813'],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'deleteCallHistoryId',
method: 'DELETE',
pathTemplate: '/api/call/history/{id}',
handler: 'delete_call_history_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence: 'path extractor i64; exact handler backend/src/handlers.rs:2815-2832',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2815-2832',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'idempotent',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:759-760',
'backend/src/handlers.rs:2815-2832',
'bruno-api/delete_call_history.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postCallHistoryClear',
method: 'POST',
pathTemplate: '/api/call/history/clear',
handler: 'clear_call_history_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2834-2850',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2834-2850',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:763-764',
'backend/src/handlers.rs:2834-2850',
'bruno-api/clear_call_history.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getImsStatus',
method: 'GET',
pathTemplate: '/api/ims/status',
handler: 'get_ims_status_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2945-2952',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<ImsStatusResponse>; exact handler backend/src/handlers.rs:2945-2952',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:767-768',
'backend/src/handlers.rs:2945-2952',
'bruno-api/get_ims_status.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getVoicemailStatus',
method: 'GET',
pathTemplate: '/api/voicemail/status',
handler: 'get_voicemail_status_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2954-2961',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<VoicemailStatusResponse>; exact handler backend/src/handlers.rs:2954-2961',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'calls',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:771-772',
'backend/src/handlers.rs:2954-2961',
'bruno-api/get_voicemail_status.bru:8',
],
upstreamDomain: 'calls',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postSmsSend',
method: 'POST',
pathTemplate: '/api/sms/send',
handler: 'send_sms_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor SendSmsRequest fields [phone_number:String, content:String] (models.rs:912); exact handler backend/src/handlers.rs:2373-2404',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2373-2404',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: ['$.body.phone_number', '$.body.content'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'messages',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:776-777',
'backend/src/handlers.rs:2373-2404',
'bruno-api/post_sms_send.bru:8',
],
upstreamDomain: 'messages',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getSmsList',
method: 'GET',
pathTemplate: '/api/sms/list',
handler: 'get_sms_list_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'query extractor SmsListRequest fields [limit:i64, offset:i64, direction:Option<String>] (models.rs:918); exact handler backend/src/handlers.rs:2407-2434',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<SmsListResponse>>); exact handler backend/src/handlers.rs:2407-2434',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'messages',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:780-781', 'backend/src/handlers.rs:2407-2434'],
upstreamDomain: 'messages',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getSmsConversation',
method: 'GET',
pathTemplate: '/api/sms/conversation',
handler: 'get_sms_conversation_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'query extractor SmsConversationRequest fields [phone_number:String, limit:i64] (models.rs:927); exact handler backend/src/handlers.rs:2437-2458',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<SmsListResponse>>); exact handler backend/src/handlers.rs:2437-2458',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.query.phone_number'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'messages',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:784-785', 'backend/src/handlers.rs:2437-2458'],
upstreamDomain: 'messages',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getSmsStats',
method: 'GET',
pathTemplate: '/api/sms/stats',
handler: 'get_sms_stats_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2461-2477',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<SmsStatsResponse>>); exact handler backend/src/handlers.rs:2461-2477',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'messages',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:788-789',
'backend/src/handlers.rs:2461-2477',
'bruno-api/get_sms_stats.bru:8',
],
upstreamDomain: 'messages',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postSmsBatchDelete',
method: 'POST',
pathTemplate: '/api/sms/batch-delete',
handler: 'delete_sms_batch_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor SmsBatchDeleteRequest fields [ids:Vec<i64>, phone_numbers:Vec<String>] (models.rs:934); exact handler backend/src/handlers.rs:2551-2578',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2551-2578',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'strong',
batchable: true,
syncSafe: false,
sensitiveFields: ['$.body.phone_numbers[*]'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'messages',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:792-793', 'backend/src/handlers.rs:2551-2578'],
upstreamDomain: 'messages',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'deleteSmsConversationPhoneNumber',
method: 'DELETE',
pathTemplate: '/api/sms/conversation/{phone_number}',
handler: 'delete_sms_conversation_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence: 'path extractor String; exact handler backend/src/handlers.rs:2528-2548',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2528-2548',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'idempotent',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: ['$.path.phone_number'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'messages',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:796-797', 'backend/src/handlers.rs:2528-2548'],
upstreamDomain: 'messages',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'deleteSmsMessageId',
method: 'DELETE',
pathTemplate: '/api/sms/message/{id}',
handler: 'delete_sms_message_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence: 'path extractor i64; exact handler backend/src/handlers.rs:2508-2525',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2508-2525',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'idempotent',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'messages',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:800-801', 'backend/src/handlers.rs:2508-2525'],
upstreamDomain: 'messages',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postSmsClear',
method: 'POST',
pathTemplate: '/api/sms/clear',
handler: 'clear_sms_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:2480-2505',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2480-2505',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'messages',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:804-805',
'backend/src/handlers.rs:2480-2505',
'bruno-api/post_sms_clear.bru:8',
],
upstreamDomain: 'messages',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getStats',
method: 'GET',
pathTemplate: '/api/stats',
handler: 'get_system_stats',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:3272-3288',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:3272-3288; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'overview',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:808-808',
'backend/src/handlers.rs:3272-3288',
'bruno-api/get_stats.bru:8',
],
upstreamDomain: 'device-system',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getStatsCpu',
method: 'GET',
pathTemplate: '/api/stats/cpu',
handler: 'get_cpu_info',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:3291-3302',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<CpuInfo>; exact handler backend/src/handlers.rs:3291-3302',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'overview',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:809-809',
'backend/src/handlers.rs:3291-3302',
'bruno-api/get_cpu_info.bru:8',
],
upstreamDomain: 'device-system',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getConnectivity',
method: 'GET',
pathTemplate: '/api/connectivity',
handler: 'get_connectivity_check',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:3305-3322',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<ConnectivityCheckResponse>>); exact handler backend/src/handlers.rs:3305-3322',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'overview',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:811-812', 'backend/src/handlers.rs:3305-3322'],
upstreamDomain: 'device-system',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postSystemReboot',
method: 'POST',
pathTemplate: '/api/system/reboot',
handler: 'system_reboot',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor SystemRebootRequest fields [delay_seconds:u32] (models.rs:422); exact handler backend/src/handlers.rs:3381-3406',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:3381-3406; field shape is implementation evidence only',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'overview',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:815-816',
'backend/src/handlers.rs:3381-3406',
'bruno-api/post_system_reboot.bru:8',
],
upstreamDomain: 'device-system',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postServiceRestart',
method: 'POST',
pathTemplate: '/api/service/restart',
handler: 'restart_service_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:3578-3601',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:3578-3601; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'overview',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:819-820', 'backend/src/handlers.rs:3578-3601'],
upstreamDomain: 'device-system',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getNotificationsConfig',
method: 'GET',
pathTemplate: '/api/notifications/config',
handler: 'get_notification_config_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:3641-3652',
responseSchemaEvidence:
'Rust return ( StatusCode, Json<ApiResponse<crate::config::NotificationConfig>>, ); exact handler backend/src/handlers.rs:3641-3652',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.response.data.channels[*].config'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'notifications',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:824-825',
'backend/src/handlers.rs:3641-3652',
'bruno-api/get_notification_config.bru:8',
],
upstreamDomain: 'notifications',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postNotificationsConfig',
method: 'POST',
pathTemplate: '/api/notifications/config',
handler: 'set_notification_config_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor crate::config::NotificationConfig fields [version:u8, channels:Vec<NotificationChannelInstance>, rules:Vec<NotificationRule>, log_cleanup:NotificationLogCleanupConfig] (config.rs:548); exact handler backend/src/handlers.rs:3655-3672',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:3655-3672',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: ['$.body.channels[*].config'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'notifications',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:824-826',
'backend/src/handlers.rs:3655-3672',
'bruno-api/set_notification_config.bru:8',
],
upstreamDomain: 'notifications',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postNotificationsTestChannel',
method: 'POST',
pathTemplate: '/api/notifications/test/{channel}',
handler: 'test_notification_channel_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence: 'path extractor String; exact handler backend/src/handlers.rs:3675-3704',
responseSchemaEvidence:
'Rust return ( StatusCode, Json<ApiResponse<crate::models::WebhookTestResponse>>, ); exact handler backend/src/handlers.rs:3675-3704',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'notifications',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:830-831', 'backend/src/handlers.rs:3675-3704'],
upstreamDomain: 'notifications',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getNotificationsLogs',
method: 'GET',
pathTemplate: '/api/notifications/logs',
handler: 'get_notification_logs_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'query extractor NotificationLogQuery fields [event_type:String, status:String, q:String, start_date:String, end_date:String, limit:i64, offset:i64] (handlers.rs:3607); exact handler backend/src/handlers.rs:3709-3734',
responseSchemaEvidence:
'Rust return ( StatusCode, Json<ApiResponse<crate::db::NotificationLogsResponse>>, ); exact handler backend/src/handlers.rs:3709-3734',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'notifications',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:835-836', 'backend/src/handlers.rs:3709-3734'],
upstreamDomain: 'notifications',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postNotificationsLogsClear',
method: 'POST',
pathTemplate: '/api/notifications/logs/clear',
handler: 'clear_notification_logs_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:3737-3760',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:3737-3760',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'notifications',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:839-840', 'backend/src/handlers.rs:3737-3760'],
upstreamDomain: 'notifications',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getNotificationsQueue',
method: 'GET',
pathTemplate: '/api/notifications/queue',
handler: 'get_notification_queue_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'query extractor NotificationQueueQuery fields [limit:i64] (notification_queue.rs:14); exact handler backend/src/notification_queue.rs:24-41',
responseSchemaEvidence:
'Rust return ( StatusCode, Json<ApiResponse<crate::db::NotificationQueueResponse>>, ); exact handler backend/src/notification_queue.rs:24-41',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'notifications',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:843-844', 'backend/src/notification_queue.rs:24-41'],
upstreamDomain: 'notifications',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postNotificationsQueueRetryAll',
method: 'POST',
pathTemplate: '/api/notifications/queue/retry-all',
handler: 'retry_all_notification_queue_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/notification_queue.rs:84-100',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:84-100',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'notifications',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:847-848', 'backend/src/notification_queue.rs:84-100'],
upstreamDomain: 'notifications',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postNotificationsQueueClear',
method: 'POST',
pathTemplate: '/api/notifications/queue/clear',
handler: 'clear_notification_queue_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/notification_queue.rs:103-119',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:103-119',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'notifications',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:851-852', 'backend/src/notification_queue.rs:103-119'],
upstreamDomain: 'notifications',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'deleteNotificationsQueueId',
method: 'DELETE',
pathTemplate: '/api/notifications/queue/{id}',
handler: 'delete_notification_queue_item_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'path extractor i64; exact handler backend/src/notification_queue.rs:64-81',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:64-81',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'idempotent',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'notifications',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:855-856', 'backend/src/notification_queue.rs:64-81'],
upstreamDomain: 'notifications',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postNotificationsQueueIdRetry',
method: 'POST',
pathTemplate: '/api/notifications/queue/{id}/retry',
handler: 'retry_notification_queue_item_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'path extractor i64; exact handler backend/src/notification_queue.rs:44-61',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:44-61',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'notifications',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:859-860', 'backend/src/notification_queue.rs:44-61'],
upstreamDomain: 'notifications',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getAutomationConfig',
method: 'GET',
pathTemplate: '/api/automation/config',
handler: 'get_automation_config_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:3968-3979',
responseSchemaEvidence:
'Rust return ( StatusCode, Json<ApiResponse<crate::config::AutomationConfig>>, ); exact handler backend/src/handlers.rs:3968-3979',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.response.data.tasks[*].config'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'automation',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:864-865', 'backend/src/handlers.rs:3968-3979'],
upstreamDomain: 'automation',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postAutomationConfig',
method: 'POST',
pathTemplate: '/api/automation/config',
handler: 'set_automation_config_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor crate::config::AutomationConfig fields [enabled:bool, tasks:Vec<AutomationTask>] (config.rs:1394); exact handler backend/src/handlers.rs:3982-3999',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:3982-3999',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: ['$.body.tasks[*].config'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'automation',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:864-866', 'backend/src/handlers.rs:3982-3999'],
upstreamDomain: 'automation',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getAutomationLogs',
method: 'GET',
pathTemplate: '/api/automation/logs',
handler: 'get_automation_logs_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'query extractor AutomationLogQuery fields [task_type:String, status:String, q:String, start_date:String, end_date:String, limit:i64, offset:i64] (handlers.rs:3938); exact handler backend/src/handlers.rs:4002-4027',
responseSchemaEvidence:
'Rust return ( StatusCode, Json<ApiResponse<crate::db::AutomationLogsResponse>>, ); exact handler backend/src/handlers.rs:4002-4027',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'automation',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:870-871', 'backend/src/handlers.rs:4002-4027'],
upstreamDomain: 'automation',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postAutomationLogsClear',
method: 'POST',
pathTemplate: '/api/automation/logs/clear',
handler: 'clear_automation_logs_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:4030-4053',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:4030-4053',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'automation',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:874-875', 'backend/src/handlers.rs:4030-4053'],
upstreamDomain: 'automation',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postAutomationTestTaskId',
method: 'POST',
pathTemplate: '/api/automation/test/{task_id}',
handler: 'test_automation_task_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence: 'path extractor String; exact handler backend/src/handlers.rs:4056-4146',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:4056-4146',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'non-idempotent',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'automation',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:878-879', 'backend/src/handlers.rs:4056-4146'],
upstreamDomain: 'automation',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getOtaStatus',
method: 'GET',
pathTemplate: '/api/ota/status',
handler: 'get_ota_status_handler',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:3763-3769',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:3763-3769; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'ota',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:882-883',
'backend/src/handlers.rs:3763-3769',
'bruno-api/get_ota_status.bru:8',
],
upstreamDomain: 'ota',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postOtaUpload',
method: 'POST',
pathTemplate: '/api/ota/upload',
handler: 'upload_ota_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'bytes extractor axum::body::Bytes; exact exact handler backend/src/handlers.rs:3772-3792',
responseSchemaEvidence:
'ApiResponse<OtaUploadResponse> success payload/error envelope; success/error payload evidenced by ApiResponse<OtaUploadResponse>; exact handler backend/src/handlers.rs:3772-3792',
requestContentType: 'application/octet-stream',
timeoutMs: 30000,
idempotency: 'non-idempotent',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'ota',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:886-887', 'backend/src/handlers.rs:3772-3792'],
upstreamDomain: 'ota',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postOtaLatestRelease',
method: 'POST',
pathTemplate: '/api/ota/latest-release',
handler: 'get_latest_ota_release_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor crate::models::OtaOnlinePrepareRequest fields [proxy_prefix:Option<String>] (models.rs:986); exact handler backend/src/handlers.rs:3795-3825',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<crate::models::OtaLatestReleaseResponse>; exact handler backend/src/handlers.rs:3795-3825',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'non-idempotent',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'ota',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:892-893', 'backend/src/handlers.rs:3795-3825'],
upstreamDomain: 'ota',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postOtaOnlinePrepare',
method: 'POST',
pathTemplate: '/api/ota/online-prepare',
handler: 'prepare_online_ota_handler',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor crate::models::OtaOnlinePrepareRequest fields [proxy_prefix:Option<String>] (models.rs:986); exact handler backend/src/handlers.rs:3828-3889',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<crate::models::OtaUploadResponse>; exact handler backend/src/handlers.rs:3828-3889',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'non-idempotent',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'ota',
executionPolicy: 'registeredOperation',
sourceEvidence: ['backend/src/main.rs:896-897', 'backend/src/handlers.rs:3828-3889'],
upstreamDomain: 'ota',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postOtaApply',
method: 'POST',
pathTemplate: '/api/ota/apply',
handler: 'apply_ota_handler',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor crate::models::OtaApplyRequest fields [restart_now:bool] (models.rs:1030); exact handler backend/src/handlers.rs:3892-3911',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:3892-3911',
requestContentType: 'application/json',
timeoutMs: 30000,
idempotency: 'non-idempotent',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'ota',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:900-901',
'backend/src/handlers.rs:3892-3911',
'bruno-api/post_ota_apply_restart.bru:8',
'bruno-api/post_ota_apply.bru:8',
],
upstreamDomain: 'ota',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postOtaCancel',
method: 'POST',
pathTemplate: '/api/ota/cancel',
handler: 'cancel_ota_handler',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:3914-3931',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:3914-3931',
requestContentType: 'none',
timeoutMs: 30000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'ota',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:904-905',
'backend/src/handlers.rs:3914-3931',
'bruno-api/post_ota_cancel.bru:8',
],
upstreamDomain: 'ota',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postAuthPassword',
method: 'POST',
pathTemplate: '/api/auth/password',
handler: 'auth::change_password',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor ChangePasswordRequest fields [new_password:String] (auth.rs:59); exact handler backend/src/auth.rs:491-553',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:491-553',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: ['$.body.new_password', '$.response.headers.set-cookie'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'settings-instance',
executionPolicy: 'dedicatedFlow',
sourceEvidence: [
'backend/src/main.rs:908-909',
'backend/src/auth.rs:491-553',
'backend/src/auth.rs:43-43',
],
upstreamDomain: 'instances-auth',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getAuthSettings',
method: 'GET',
pathTemplate: '/api/auth/settings',
handler: 'auth::get_settings',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/auth.rs:555-570',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<AuthSettingsResponse>>); exact handler backend/src/auth.rs:555-570',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.request.headers.cookie'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'settings-instance',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:912-913',
'backend/src/auth.rs:555-570',
'backend/src/auth.rs:43-43',
],
upstreamDomain: 'instances-auth',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postAuthSettings',
method: 'POST',
pathTemplate: '/api/auth/settings',
handler: 'auth::set_settings',
capability: 'job',
riskLevel: 'R2',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor SecurityConfig fields [password_protection_enabled:bool, password_min_length:u8, password_require_letters:bool, password_require_digits:bool, password_require_symbols:bool, session_ttl_seconds:i64, idle_timeout_seconds:i64] (config.rs:615); exact handler backend/src/auth.rs:572-640',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:572-640',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'explicit',
batchable: false,
syncSafe: false,
sensitiveFields: ['$.request.headers.cookie'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'settings-instance',
executionPolicy: 'dedicatedFlow',
sourceEvidence: [
'backend/src/main.rs:912-914',
'backend/src/auth.rs:572-640',
'backend/src/auth.rs:43-43',
],
upstreamDomain: 'instances-auth',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getHealth',
method: 'GET',
pathTemplate: '/api/health',
handler: 'health_check',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/handlers.rs:65-75',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/handlers.rs:65-75; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: [],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'instances-new',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:923-923',
'backend/src/handlers.rs:65-75',
'bruno-api/get_health.bru:8',
'backend/src/auth.rs:43-43',
],
upstreamDomain: 'instances-auth',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'getAuthStatus',
method: 'GET',
pathTemplate: '/api/auth/status',
handler: 'auth::status',
capability: 'query',
riskLevel: 'R0',
sessionSensitive: false,
requestSchemaEvidence:
'none; no body/query/path extractor; exact handler backend/src/auth.rs:345-364',
responseSchemaEvidence:
'Rust return (StatusCode, Json<ApiResponse<AuthStatusResponse>>); exact handler backend/src/auth.rs:345-364',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'safe',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.request.headers.cookie'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'instances-new',
executionPolicy: 'registeredOperation',
sourceEvidence: [
'backend/src/main.rs:925-926',
'backend/src/auth.rs:345-364',
'backend/src/auth.rs:43-43',
],
upstreamDomain: 'instances-auth',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postAuthSetup',
method: 'POST',
pathTemplate: '/api/auth/setup',
handler: 'auth::setup',
capability: 'job',
riskLevel: 'R3',
sessionSensitive: false,
requestSchemaEvidence:
'body extractor LoginRequest fields [password:String] (auth.rs:54); exact handler backend/src/auth.rs:366-427',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:366-427',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'strong',
batchable: false,
syncSafe: false,
sensitiveFields: ['$.body.password', '$.response.headers.set-cookie'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'instances-new',
executionPolicy: 'dedicatedFlow',
sourceEvidence: [
'backend/src/main.rs:929-930',
'backend/src/auth.rs:366-427',
'backend/src/auth.rs:43-43',
],
upstreamDomain: 'instances-auth',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
},
{
operationId: 'postAuthLogin',
method: 'POST',
pathTemplate: '/api/auth/login',
handler: 'auth::login',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: true,
requestSchemaEvidence:
'body extractor LoginRequest fields [password:String] (auth.rs:54); exact handler backend/src/auth.rs:429-489',
responseSchemaEvidence:
'success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:429-489',
requestContentType: 'application/json',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.body.password', '$.response.headers.set-cookie'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'instances-new',
executionPolicy: 'dedicatedFlow',
sourceEvidence: [
'backend/src/main.rs:933-934',
'backend/src/auth.rs:429-489',
'backend/src/auth.rs:43-43',
],
upstreamDomain: 'instances-auth',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
automaticReplay: 'forbidden',
},
{
operationId: 'postAuthLogout',
method: 'POST',
pathTemplate: '/api/auth/logout',
handler: 'auth::logout',
capability: 'command',
riskLevel: 'R1',
sessionSensitive: true,
requestSchemaEvidence:
'none body; HeaderMap carries simadmin_session cookie; exact handler backend/src/auth.rs:642-655; cookie name backend/src/auth.rs:43-43',
responseSchemaEvidence:
'dynamic-json construction in exact handler backend/src/auth.rs:642-655; field shape is implementation evidence only',
requestContentType: 'none',
timeoutMs: 10000,
idempotency: 'conditional',
confirmationPolicy: 'none',
batchable: false,
syncSafe: true,
sensitiveFields: ['$.request.headers.cookie', '$.response.headers.set-cookie'],
compatibilityAdapter: 'none-pinned-commit',
uiOwner: 'settings-instance',
executionPolicy: 'dedicatedFlow',
sourceEvidence: [
'backend/src/main.rs:937-938',
'backend/src/auth.rs:642-655',
'backend/src/auth.rs:43-43',
],
upstreamDomain: 'instances-auth',
auditedAtCommit: '58e220411d6599609f0eeda01eb7016e9212f970',
responseFixtureStatus: 'pending-phase-0.3',
automaticReplay: 'forbidden',
},
] as const;
type Direction = 'request' | 'response' | 'path' | 'query' | 'session';
type SensitiveHint = {
symbol?: string;
containers?: [string, string, string][];
handlerToken?: string;
};
const sensitive = (
direction: Direction,
path: string,
reason: string,
redactionMode: 'drop' | 'mask' = 'mask',
hint: SensitiveHint = {},
) => ({ direction, path, reason, redactionMode, hint });
/* Paths below are deliberately endpoint-specific. They are review policy layered on top of the
* mechanically rebuilt source claims; the snapshot proves the anchors exist, not their semantics. */
const sensitiveSupplements: Record<string, ReturnType<typeof sensitive>[]> = {
'GET /api/sim': ['iccid', 'imsi', 'phone_numbers', 'sms_center'].map((f) =>
sensitive('response', `$.response.data.${f}`, 'SIM/subscriber identifier', 'mask', {
symbol: 'SimInfoResponse',
}),
),
'POST /api/sim/cache': ['phone_number', 'sms_center'].map((f) =>
sensitive('request', `$.body.${f}`, 'subscriber contact value'),
),
'GET /api/sms/list': [
sensitive(
'response',
'$.response.data.messages[*].phone_number',
'message correspondent',
'mask',
{ symbol: 'SmsMessage', containers: [['SmsListResponse', 'messages', 'SmsMessage']] },
),
sensitive('response', '$.response.data.messages[*].content', 'message body', 'drop', {
symbol: 'SmsMessage',
containers: [['SmsListResponse', 'messages', 'SmsMessage']],
}),
],
'GET /api/sms/conversation': [
sensitive('query', '$.query.phone_number', 'message correspondent', 'mask', {
symbol: 'SmsConversationRequest',
}),
sensitive(
'response',
'$.response.data.messages[*].phone_number',
'message correspondent',
'mask',
{ symbol: 'SmsMessage', containers: [['SmsListResponse', 'messages', 'SmsMessage']] },
),
sensitive('response', '$.response.data.messages[*].content', 'message body', 'drop', {
symbol: 'SmsMessage',
containers: [['SmsListResponse', 'messages', 'SmsMessage']],
}),
],
'GET /api/calls': [
sensitive('response', '$.response.data.calls[*].phone_number', 'call party', 'mask', {
symbol: 'CallInfo',
containers: [['CallListResponse', 'calls', 'CallInfo']],
}),
],
'GET /api/call/history': [
sensitive('response', '$.response.data.records[*].phone_number', 'call party', 'mask', {
symbol: 'CallRecord',
containers: [['CallHistoryResponse', 'records', 'CallRecord']],
}),
],
'GET /api/call/forwarding': [
'voice_unconditional',
'voice_busy',
'voice_no_reply',
'voice_not_reachable',
].map((f) =>
sensitive('response', `$.response.data.${f}`, 'forwarding destination', 'mask', {
symbol: 'CallForwardingResponse',
}),
),
'GET /api/voicemail/status': [
sensitive('response', '$.response.data.mailbox_number', 'voicemail number', 'mask', {
symbol: 'VoicemailStatusResponse',
}),
],
'GET /api/apn': [
sensitive('response', '$.response.data.contexts[*].username', 'APN credential', 'drop', {
symbol: 'ApnContext',
containers: [['ApnListResponse', 'contexts', 'ApnContext']],
}),
sensitive('response', '$.response.data.contexts[*].password', 'APN credential', 'drop', {
symbol: 'ApnContext',
containers: [['ApnListResponse', 'contexts', 'ApnContext']],
}),
],
'GET /api/device-network/wlan/status': ['ssid', 'ipv4_addresses', 'ipv6_addresses'].map((f) =>
sensitive('response', `$.response.data.${f}`, 'network identifier', 'mask', {
symbol: 'WlanStatusResponse',
}),
),
'POST /api/device-network/wlan/scan': ['ssid', 'bssid'].map((f) =>
sensitive('response', `$.response.data.networks[*].${f}`, 'network identifier', 'mask', {
symbol: 'WlanNetwork',
containers: [['WlanScanResponse', 'networks', 'WlanNetwork']],
}),
),
'GET /api/device-network/wlan/profiles': [
sensitive('response', '$.response.data.profiles[*].ssid', 'network identifier', 'mask', {
symbol: 'WlanSavedNetwork',
containers: [['WlanProfilesResponse', 'profiles', 'WlanSavedNetwork']],
}),
],
'POST /api/device-network/wlan/connect': [
sensitive('request', '$.body.ssid', 'network identifier'),
sensitive('request', '$.body.password', 'WLAN credential', 'drop'),
],
'GET /api/esim/euicc': [
sensitive('response', '$.response.data.eid', 'eUICC identifier', 'mask', {
symbol: 'EsimEuiccInfo',
}),
],
'GET /api/esim/profiles': [
sensitive('response', '$.response.data.profiles[*].iccid', 'eSIM identifier', 'mask', {
symbol: 'EsimProfile',
containers: [['EsimProfilesResponse', 'profiles', 'EsimProfile']],
}),
],
};
function legacySensitive(path: string) {
const isDrop = /password|secret|token|cookie|content|confirmation_code/i.test(path);
const direction: Direction = path.startsWith('$.body')
? 'request'
: path.startsWith('$.query')
? 'query'
: path.startsWith('$.path')
? 'path'
: /cookie|session/.test(path)
? 'session'
: 'response';
const canonical = path
.replace('$.request.headers.', '$.session.')
.replace('$.response.headers.', '$.session.');
return sensitive(
direction,
canonical,
isDrop ? 'secret or message content' : 'identifier or address',
isDrop ? 'drop' : 'mask',
);
}
function anchorSensitive(field: ReturnType<typeof sensitive>, operation: any) {
const modelField = field.path
.replace(/\[\*\]/g, '')
.split('.')
.at(-1)!;
const claim = ['request', 'path', 'query'].includes(field.direction)
? operation.requestEvidence
: operation.responseEvidence;
const candidates = [
...claim.modelEvidence.map((m: any) => m.symbol),
...Object.keys(sensitiveModelEvidence58e2204),
];
const symbol =
field.hint.symbol ??
candidates.find((s) => (sensitiveModelEvidence58e2204 as any)[s]?.fields?.[modelField]);
if (symbol) {
const model = (sensitiveModelEvidence58e2204 as any)[symbol];
const containerPath = (field.hint.containers ?? []).map(([owner, linkField, targetSymbol]) => ({
...(sensitiveModelEvidence58e2204 as any)[owner],
field: linkField,
targetSymbol,
}));
return {
...field,
sourceAnchor: { symbol, sourceSha256: model.sourceSha256 },
evidence: { ...model, modelField, fieldPath: field.path, containerPath },
};
}
if (field.direction === 'session') {
const sessionEvidence = {
sourceFile: 'backend/src/auth.rs',
startLine: 43,
endLine: 43,
sourceSha256: 'b5bc3eefe0f9312882f59ddacf3a062064fdd90e448e5022b81d9ba940a9d266',
symbol: 'SESSION_COOKIE',
fieldPath: field.path,
handlerToken: 'simadmin_session',
};
return {
...field,
sourceAnchor: { symbol: 'SESSION_COOKIE', sourceSha256: sessionEvidence.sourceSha256 },
evidence: sessionEvidence,
};
}
const fallbackToken = modelField;
return {
...field,
sourceAnchor: { symbol: operation.handler, sourceSha256: claim.sourceSha256 },
evidence: {
sourceFile: claim.sourceFile,
startLine: claim.startLine,
endLine: claim.endLine,
sourceSha256: claim.sourceSha256,
symbol: operation.handler,
fieldPath: field.path,
handlerToken: field.hint.handlerToken ?? fallbackToken,
},
};
}
export const upstream58e2204Operations = rawUpstream58e2204Operations.map((operation) => {
const route = `${operation.method} ${operation.pathTemplate}`;
const evidence = structuredEvidence58e2204[route as keyof typeof structuredEvidence58e2204];
const merged = [
...operation.sensitiveFields.map(legacySensitive),
...(sensitiveSupplements[route] ?? []),
]
.filter((field) => !(route === 'GET /api/apn' && field.path.startsWith('$.body.')))
.filter(
(field) =>
!(
route === 'GET /api/device-network/wlan/profiles' &&
field.path === '$.response.data[*].ssid'
),
)
.filter(
(field) =>
!(route === 'POST /api/device-network/wlan/profile' && field.path.endsWith('.credentials')),
);
const unique = [
...new Map(merged.map((field) => [`${field.direction}:${field.path}`, field])).values(),
];
const withEvidence = { ...operation, ...evidence };
return {
...withEvidence,
semanticBindingReview: 'reviewed-phase-0.2',
sensitiveFields: unique.map((field) => anchorSensitive(field, withEvidence)),
};
});