Pulse/tests
rcourtman b0c4faa4a0 frontend(platforms): drop platform sub-tabs whose canonical projection is missing
Audit pass against the live mock backend (PULSE_MOCK_MODE=true) revealed
three platform sub-tabs that could never populate from canonical
resources today, even with a mature fixture environment:

- Docker > Swarm services: no `docker-service` resource is emitted by
  the unified resource adapter at the /api/resources boundary.
- Kubernetes > Services: no `k8s-service` resource type is defined in
  internal/unifiedresources; only k8s-cluster, k8s-node, pod, and
  k8s-deployment are projected.
- TrueNAS > Hosts: TrueNAS connections produce storage, datasets,
  physical disks, and app-containers but no top-level `agent` row
  tagged with the `truenas` platform.

Per the platform-pages goal ("if a platform lacks enough canonical data
model support to make a useful page even after fixture work, do not
invent speculative UI — report the data-model gap and skip or gate
that surface deliberately"), the three sub-tabs are removed from the
page navigation and the resource queries are tightened to drop the
unused types. TrueNAS now defaults to /truenas/storage as the first
canonical operator entry point.

Kubernetes Nodes now also includes agent rows whose `sources` array
reports `kubernetes`, because the backend registry merges Pulse-Agent-
linked Kubernetes nodes onto the linked agent row. The merged agents
are the canonical projection of K8s nodes when an agent is installed
on them; treating them as Nodes makes the tab populate against mock
mode and live agent fleets alike.

Browser verification (Playwright, chromium, against live mock-mode
Pulse dev runtime):
- 8 tests, all pass. Every declared platform sub-tab now asserts at
  least one canonical row populates under mock mode:
  - docker: /docker/overview (2 hosts), /docker/containers
  - kubernetes: /kubernetes/overview (1 cluster),
    /kubernetes/nodes (3 merged agents), /kubernetes/pods (10),
    /kubernetes/deployments (4)
  - truenas: /truenas/storage (9), /truenas/apps (5)
  - vmware: /vmware/overview (4 ESXi hosts), /vmware/vms (8),
    /vmware/storage (datastores)

Targeted tests:
- dockerPageModel, kubernetesPageModel, truenasPageModel suites
  updated and passing.
- resourceLinks.test.ts asserts the new TrueNAS default sub-tab.

Contracts updated:
- unified-resources.md Extension Points: platform default sub-tab must
  land on a canonical surface that actually populates.
- storage-recovery.md Shared Boundaries: same; calls out TrueNAS
  defaulting to /truenas/storage today.

Remaining canonical data-model gaps (intentionally not surfaced as
empty platform sub-tabs in the UI):
- internal/unifiedresources does not emit `docker-service` resources
  even though mock.generateDockerServicesAndTasks() generates them in
  the StateSnapshot; revisit when adding a docker-service projection.
- internal/unifiedresources does not define ResourceTypeK8sService;
  revisit when k8s-service rows are added to the canonical model.
- internal/unifiedresources does not project a top-level TrueNAS
  system as an `agent` row; revisit when the TrueNAS adapter promotes
  the connection target into a canonical infrastructure row.
2026-05-15 23:49:23 +01:00
..
integration frontend(platforms): drop platform sub-tabs whose canonical projection is missing 2026-05-15 23:49:23 +01:00
migration test: prove commercial migration retry continuity 2026-05-13 18:33:53 +01:00