Skip to content

feat(frontend): asset inventory on the redesign layout #906

Closed

Description

@alex-dembele

Problem

The inventory is the base of the Identify group. The design shows one dense table with type filters and the two actions that matter.

Design: https://claude.ai/artifact/HLqrbeYqvv4a6RVnBz9Vei (screen "assets"). Parent: #899. The rules in the epic apply.

Acceptance criteria

  1. Subtitle with asset count, critical count and agent coverage.
  2. "Voir la topologie" and "Lancer une découverte" actions.
  3. Search field and type pills with counts.
  4. Table: asset (name and slug), type with icon, criticality pill, owner, location, risk count, vulnerability count with KEV tag, last scan.
  5. Rows open our existing asset drawer; import and schema features stay reachable.

Definition of done

  • The screen matches the design at 1440×900 in dark and light, checked side by side in a real browser; the comparison and any deliberate difference are written on this issue.
  • Loading skeleton, error with retry, and empty state exist for every block.
  • FR and EN strings, no hard-coded copy.
  • npx tsc -b --noEmit, npx vitest run on the touched features, and npx eslint on the touched files pass.
  • Backend changes, if any, come with TestXxx_Success, TestXxx_NotFound, TestXxx_Unauthorized, filter by tenant_id, and go test ./... passes.
  • PR opened with Closes #<this issue>; parent epic epic(frontend): rebuild every console screen on the October 2026 redesign #899.

Activity

  1. added
    type:featureNew user-facing capability
    status:readyMeets the ready definition
    tier:4-uxUX: polish on top of a working engine
    and removed
    status:readyMeets the ready definition
    on Oct 8, 2026
  2. alex-dembele commented on Oct 10, 2026

    @alex-dembele
    MemberAuthor

    inventory redesign — 2026-10-10

    Done — PR #936 on feat/906-assets, stacked on #933. Backend: GET /assets/exposure (application/vulnerability/asset_exposure.go, ExposureByAsset in repository/gorm_vulnerability_repository.go, handler/asset_exposure_handler.go, isolation decision, OpenAPI). Frontend: features/assets/InventoryPage.tsx rebuilt, inventoryRow.ts, useAssetExposure.ts, DiscoverButton.tsx, fr/en inventory.*; DataTable gains optional searchClassName.
    Verified — go test ./... all ok · npx tsc -b --noEmit clean · eslint + prettier clean on touched files · npx vitest run 1054/1054 · live on Postgres at 1440 dark/light, 1280 light, 600 px: no page overflow, drawer opens from a row, discovery routes correctly, no console errors.
    Criteria — 1 ✅ (coverage explicitly "non mesurée" until #910) · 2 ✅ (discovery runs a real scan) · 3 ✅ · 4 ✅ ("Dernière détection" instead of "Dernier scan", explained) · 5 ✅ (drawer; import, schemas, creation in the "…" menu)
    Next — merge #932 → #933 → #936. Then #907 topology (owner notes D-069 D on that issue).
    Blocked on — nothing.

  3. alex-dembele commented on Oct 10, 2026

    @alex-dembele
    MemberAuthor

    filters reworked — 2026-10-10

    Done — owner feedback on the pills: replaced by design-system tabs on schema categories (with counts, keyboard, keyline) and a "KEV seulement" toggle; toolbar is one line at 1440 and 1280. Commit 875cd22.
    Verified — npx vitest run 1054/1054, tsc clean, live at 1440 dark and 1280 light.
    Next — asset analysis in the drawer is its own issue (#937).

  4. added a commit that references this issue on Oct 12, 2026
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

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions