You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The unified Devices list (#1424 / #1322) unions agent endpoints with discovered_assets, but every discovered_assets row requires a network footprint: ip_address is NOT NULL and part of the (org_id, ip_address) unique index (apps/api/src/db/schema/discovery.ts:132,170), and the only inserts come from network scans and UniFi sync (discoveryWorker.ts:983, unifiSyncService.ts, unifiTelemetryService.ts).
There is no way to log an asset with neither an agent nor a network presence: a spare laptop, a desk phone, a non-networked printer, loaned equipment. MSPs need one view of everything they are responsible for at a customer.
topologyManualNodes (discovery.ts:318-331) is a topology-diagram annotation, not an inventory record, and is never unioned into the list.
apps/api/src/routes/devices/network.ts:18-49 returns only approval_status='approved' AND linked_device_id IS NULL rows.
No manual-asset route or table exists.
Proposed behavior
"Add asset manually" from the Devices list, org- and site-scoped: name, asset type (reuse discovered_asset_type enum), manufacturer/model, serial, location/site, notes, optional assigned user.
Either a source='manual' discriminator on a relaxed discovered_assets (nullable ip_address for manual rows) or a lightweight manual_assets table unioned as a third arm. Spec decides based on reuse of the detail-page/approval machinery.
Problem
The unified Devices list (#1424 / #1322) unions agent endpoints with
discovered_assets, but everydiscovered_assetsrow requires a network footprint:ip_addressis NOT NULL and part of the(org_id, ip_address)unique index (apps/api/src/db/schema/discovery.ts:132,170), and the only inserts come from network scans and UniFi sync (discoveryWorker.ts:983,unifiSyncService.ts,unifiTelemetryService.ts).There is no way to log an asset with neither an agent nor a network presence: a spare laptop, a desk phone, a non-networked printer, loaned equipment. MSPs need one view of everything they are responsible for at a customer.
topologyManualNodes(discovery.ts:318-331) is a topology-diagram annotation, not an inventory record, and is never unioned into the list.Current state
apps/web/src/components/devices/DevicesPage.tsx:371-414,539merges agent devices + network devices client-side behindENABLE_NETWORK_DEVICES_IN_LIST.apps/api/src/routes/devices/network.ts:18-49returns onlyapproval_status='approved' AND linked_device_id IS NULLrows.Proposed behavior
discovered_asset_typeenum), manufacturer/model, serial, location/site, notes, optional assigned user.source='manual'discriminator on a relaxeddiscovered_assets(nullableip_addressfor manual rows) or a lightweightmanual_assetstable unioned as a third arm. Spec decides based on reuse of the detail-page/approval machinery.warrantySync.ts) and for license/subscription tracking once that exists.Acceptance criteria
device_inventoryreport type.Related
#1424, #1322, #3210, #3451.
Tracking issue for Manual asset entry — log non-agent, non-discovered assets (printers, phones, spare equipment) into the unified device list (
manual-asset-entry).docs/superpowers/plans/device-lifecycle/2026-09-07-manual-asset-entry.mddocs/superpowers/specs/device-lifecycle/2026-09-07-manual-asset-entry-spec.mdWaves are tracked as sub-issues. Managed by feature-lifecycle-mcp.