Skip to content

Manual asset entry — log non-agent, non-discovered assets (printers, phones, spare equipment) into the unified device list #4622

Description

@ToddHebebrand

Problem

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.

Current state

  • apps/web/src/components/devices/DevicesPage.tsx:371-414,539 merges agent devices + network devices client-side behind ENABLE_NETWORK_DEVICES_IN_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.
  • Manual assets are first-class in the list (sort/filter/paginate per Unified device list — per-asset detail pages and inline approval #1424) and eligible for warranty sync (manufacturer + serial feed warrantySync.ts) and for license/subscription tracking once that exists.

Acceptance criteria

  • Create a manual asset from the Devices UI without scan or agent.
  • Appears in the unified list, RLS-scoped, edit/delete supported.
  • Manufacturer + serial make it eligible for the existing warranty lookup.
  • Included in the device_inventory report type.
  • RLS + cascade + export-policy registration if a new table is introduced.

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).

  • Plan: docs/superpowers/plans/device-lifecycle/2026-09-07-manual-asset-entry.md
  • Spec: docs/superpowers/specs/device-lifecycle/2026-09-07-manual-asset-entry-spec.md

Waves are tracked as sub-issues. Managed by feature-lifecycle-mcp.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions