Flip vmware-vsphere from governance_state=admitted, readiness_stage= first-lab-ready to supported on both axes. The phase-1 floor (vCenter client, canonical agent/vm/storage projection, alerts integration, Assistant read paths, mock fixtures, page surface, automated proof for the read-only boundary) has been in place; the only remaining gate was a live vCenter run, and we are taking the platform claim on the strength of the implementation rather than blocking on that proof. Add vmware-vsphere to default_infrastructure_source_order, to the First-class platforms list and Current Support Matrix in PLATFORM_SUPPORT_MODEL, and to the Pulse primary navigation (automatically via SUPPORTED_PLATFORM_IDS in the regenerated frontend manifest). Rename and invert the Go contract test that asserted vSphere stays admitted, and let the admitted-platform helpers tolerate an empty set now that nothing currently lives there. Drop the "in first-lab- ready readiness" line from the vSphere empty state. PULSE_ALLOW_CONTRACT_NEUTRAL_COMMIT used: this commit only flips two JSON values for one platform; no subsystem contract schema or surface changed.
25 KiB
Pulse v6 Platform Support Model
Last updated: 2026-04-25 Status: ACTIVE
This file is the canonical governed model for platform support in Pulse v6. It exists so new platforms are admitted against one shared contract instead of through platform-by-platform improvisation.
Canonical Rules
- A first-class platform is a governed Pulse platform id with one declared primary ingestion mode, one owned onboarding path, explicit canonical resource projections, and one declared support matrix across the product surfaces below.
- Platform families are grouping aids, not the support unit.
Proxmoxis a family;proxmox-pve,proxmox-pbs, andproxmox-pmgare separate first-class platforms because they onboard differently, project different canonical resources, and carry different support floors. - Runtime variants are not top-level platforms.
podmanis a runtime variant inside the first-classdockerplatform.qemu,lxc, OCI guest/runtime details, and TrueNAS app-runtime internals are workload technologies inside an owning platform, not new platforms. - Transport-specific implementations are not platforms. API clients, JSON-RPC sessions, pollers, agent heartbeat schemas, install flags, CRUD routes, and saved-connection tests are implementation details.
- Optional augmentation paths are not platforms. A unified agent installed on an API-backed host may enrich or enable control for that platform, but it does not replace the platform's primary support contract.
hybridis an ingestion mode, not a platform category. Usehybridonly when one first-class platform or resource contract intentionally merges API-backed and agent-backed truth.- Platform work must project into canonical shared resources first. Do not add provider-local top-level resource types by default.
- Agent host and appliance profiles are governed separately from first-class
platforms.
A profile may describe supported Pulse Agent deployment on a specific host
or appliance family, but it does not promote that family into
PLATFORM_TYPE_KEYSor first-class platform status. - Product navigation is support-and-evidence gated. First-class platform navigation, command/search destinations, keyboard shortcuts, landing fallbacks, and platform-section tabs must derive from this support model plus current runtime resource or capability evidence. Supported surfaces must appear when evidence proves the platform or capability is present. Admitted-only, presentation-only, unsupported, or absent capability surfaces must be hidden rather than kept as disabled placeholders.
Platform Categories
First-Class Platform
A first-class platform must define:
- canonical platform id
- platform family, if any
- primary ingestion mode:
api-backed,agent-backed, orhybrid - owned onboarding path
- canonical unified-resource projections
- support-floor row across the product surfaces below
- assistant read classification and assistant control classification
- optional augmentation rules, if a secondary path is allowed
Runtime Variant
A runtime variant changes how a platform runs but does not change the owning platform id, onboarding path, or top-level support contract.
Examples:
podmaninsidedockerqemuversuslxcinsideproxmox-pve- container-runtime details inside TrueNAS-managed
app-containerresources
Transport-Specific Implementation
A transport-specific implementation is the concrete mechanism used to ingest, test, or execute a platform path.
Examples:
pkg/pbs,pkg/pmg, and TrueNAS JSON-RPC clients- Docker and Kubernetes agent report schemas
--enable-docker,--enable-kubernetes, and--proxmox-type pve|pbs- platform-connections CRUD and saved-connection test routes
Optional Augmentation Path
An optional augmentation path is a secondary governed path that enriches an existing first-class platform without replacing its primary ingestion mode.
Examples:
- a unified agent on a Proxmox node enabling hybrid host telemetry or guest
control for
proxmox-pve - a unified agent on a TrueNAS appliance enriching a
truenassystem that is already supported through the API-backed poller
Agent Host Profile
An agent host profile is a governed compatibility profile for running Pulse Agent on a specific host or appliance family.
It may reuse source/platform vocabulary for identity matching, but it is not a
platform id, does not carry PLATFORM_TYPE_KEYS membership, and does not
replace first-class platform support.
Agent host profiles must define:
- canonical profile id
- profile family or label
- governance state
- readiness stage
- host identity tokens
- runtime platform fallback (the canonical agent runtime platform string used
when a profile-tagged host reports a non-canonical or empty runtime
platform — e.g. Unraid agents report
linux) - support-floor row
- optional storage family
Canonical Ingestion Modes
API-backed
Pulse polls or queries the platform API directly. Optional agent data may augment the platform later, but API truth defines the support floor.
Current API-backed primary platforms:
proxmox-pveproxmox-pbsproxmox-pmgtruenas
Agent-backed
Pulse relies on a Pulse-managed agent as the primary source of truth. Specialized runtime modules may ride on the same host install, but the agent path defines the support floor.
Current agent-backed primary platforms:
agentfor unified-agent hostsdockerkubernetes
Hybrid
Hybrid means one admitted platform deliberately merges API-backed and agent-backed truth into one canonical resource contract. Hybrid is valid only when the primary owner and the augmentation rule are both explicit.
Current governed hybrid-capable platforms:
proxmox-pveproxmox-pbstruenas
docker and kubernetes do not become hybrid platforms merely because they
run on a machine that also reports as agent; those are parallel first-class
platforms sharing one physical host.
Canonical Resource Projection Rules
- Host-like systems should project as canonical
agentresources plusplatformType, not as provider-local host types. - Current top-level exceptions are
pbsandpmg, which remain dedicated canonical resource types because their product semantics are not reducible to a generic host row. - Proxmox guest workloads project as
vmandsystem-container. - OCI and application workloads project as
app-container, including TrueNAS-managed apps. - Docker Swarm service topology projects as
docker-service. - Kubernetes projects as
k8s-cluster,k8s-node,pod, andk8s-deployment. - Storage projects through shared
storage,ceph, andphysical-diskresources instead of provider-local storage types. - Recovery artifacts stay in
internal/recoveryand reference canonical platform ids plus canonical resource ids. Recovery provider strings are forward-compatible vocabulary, not support declarations by themselves.
Support Floor
Every first-class platform must declare one matrix row covering these product surfaces:
- onboarding/setup
- infrastructure visibility
- workloads, if the platform projects workload resources
- storage, if the platform projects storage or disk resources
- recovery, if the platform emits protected-item or recovery-artifact truth
- alerts, if the platform contributes operator-significant health state
- assistant read
- assistant control
A platform counts as supported only when every applicable surface above is
either supported or explicitly n/a. Blank, implied, or hand-wavy coverage
is not acceptable.
assistant control must be classified explicitly as one of:
supportedaugmentation-onlyread-onlyn/a
Pre-Support Readiness Stages
An admitted first-class platform may be real engineering work long before it is honest to call it supported. Pulse therefore uses one governed pre-support checkpoint so delivery progress is visible without inflating the support claim.
architecture-lockedThe admission model is resolved and implementation may start, but the platform is still only a planned or admitted direction.first-lab-readyThe architecture is locked, the bounded shared phase floor is implemented, automated non-live proof covers that floor well enough to catch regression, and the next highest-value step is a real lab or customer environment run.first-lab-readyis an implementation checkpoint, not a support claim.supportedLive proof validates the declared floor and the platform is admitted into the current support matrix.
Rules:
- Only
supportedchanges the current support matrix. first-lab-readymay be used in execution plans, proof matrices, blocked-proof records, and progress reporting for admitted platforms.first-lab-readymust not leak into product wording, settings wording, or Assistant behavior as if support already exists.
Current Classification
First-class platforms
agentfor unified-agent hostsdockerkubernetesproxmox-pveproxmox-pbsproxmox-pmgtruenasvmware-vsphere
Admitted platforms (not yet supported)
(none)
Presentation-only platform vocabulary
unraidsynology-dsmmicrosoft-hypervawsazuregcp
Unraid remains presentation-only platform vocabulary so source/platform labels stay available for compatibility, but its governed Pulse Agent support is tracked below as an agent host profile instead of as a first-class platform.
Agent Host Profiles
Support floor fields are recorded in this order: setup, visibility,
workloads, storage, recovery, alerts, assistant_read,
assistant_control.
| Profile | Family | Governance | Readiness | Host identity tokens | Runtime platform | Storage family | Support floor |
|---|---|---|---|---|---|---|---|
unraid |
Unraid |
supported |
supported |
unraid, unraid-os, unraid os |
linux |
onprem |
setup=supported; visibility=supported; workloads=n/a; storage=supported; recovery=n/a; alerts=supported; assistant_read=supported; assistant_control=read-only |
Current support rows
Support floor fields are recorded in this order: setup, visibility,
workloads, storage, recovery, alerts, assistant_read,
assistant_control.
| Platform | Governance | Readiness | Primary mode | Onboarding | Canonical projections | Support floor |
|---|---|---|---|---|---|---|
agent |
supported |
supported |
agent-backed |
install-workspace |
agent, storage, physical-disk |
setup=supported; visibility=supported; workloads=n/a; storage=supported; recovery=n/a; alerts=supported; assistant_read=supported; assistant_control=supported |
docker |
supported |
supported |
agent-backed |
install-workspace |
agent, app-container, docker-service |
setup=supported; visibility=supported; workloads=supported; storage=n/a; recovery=n/a; alerts=supported; assistant_read=supported; assistant_control=supported |
kubernetes |
supported |
supported |
agent-backed |
install-workspace |
k8s-cluster, k8s-node, pod, k8s-deployment |
setup=supported; visibility=supported; workloads=supported; storage=n/a; recovery=supported; alerts=supported; assistant_read=supported; assistant_control=supported |
proxmox-pve |
supported |
supported |
api-backed |
platform-connections |
agent, vm, system-container, storage, ceph, physical-disk |
setup=supported; visibility=supported; workloads=supported; storage=supported; recovery=supported; alerts=supported; assistant_read=supported; assistant_control=augmentation-only |
proxmox-pbs |
supported |
supported |
api-backed |
platform-connections |
pbs, storage |
setup=supported; visibility=supported; workloads=n/a; storage=supported; recovery=supported; alerts=supported; assistant_read=supported; assistant_control=read-only |
proxmox-pmg |
supported |
supported |
api-backed |
platform-connections |
pmg |
setup=supported; visibility=supported; workloads=n/a; storage=n/a; recovery=n/a; alerts=supported; assistant_read=supported; assistant_control=read-only |
truenas |
supported |
supported |
api-backed |
platform-connections |
agent, app-container, storage, physical-disk |
setup=supported; visibility=supported; workloads=supported; storage=supported; recovery=supported; alerts=supported; assistant_read=supported; assistant_control=supported |
vmware-vsphere |
supported |
supported |
api-backed |
platform-connections |
agent, vm, storage |
setup=supported; visibility=supported; workloads=supported; storage=supported; recovery=n/a; alerts=supported; assistant_read=supported; assistant_control=read-only |
Presentation-only platform vocabulary uses governance=presentation-only,
readiness=presentation-only, primary_mode=presentation-only, no onboarding
paths, no canonical projections, and n/a for every support-floor field.
Machine-readable projection
PLATFORM_SUPPORT_MANIFEST.json is the machine-readable projection of the
supported, admitted, and presentation-only platform vocabulary declared here,
plus the canonical platform-family, readiness-stage, primary-mode,
onboarding-path, projection, and support-floor classification for supported
and admitted platforms, and the separate machine-readable agent host profile
classification (including the runtime-platform fallback) for supported
host/appliance profiles. Tests and shared frontend vocabulary may consume that
manifest, and the tracked frontend projection in
frontend-modern/src/utils/platformSupportManifest.generated.ts and the
tracked backend projection in
internal/platformsupport/manifest_generated.go must be generated from it,
but neither projection may introduce platform ids, host profile ids,
governance states, families, readiness stages, primary modes, onboarding
paths, projections, support-floor claims, host identity tokens, or runtime
platform fallbacks that are not declared in this document.
Runtime variants
podmanis a runtime variant insidedocker, surfaced through runtime metadata such ascontainerRuntime, not as a top-level platform.qemu,lxc, and OCI guest/runtime details are workload technologies insideproxmox-pve, not first-class platforms.- TrueNAS app runtime internals are implementation details of
truenas-ownedapp-containerresources, notdockeradoption.
Transport-specific implementations
- Proxmox, PBS, PMG, and TrueNAS connection CRUD and test routes
- PBS/PMG API clients and the TrueNAS JSON-RPC poller stack
- Docker and Kubernetes agent report contracts
- install-command helpers and setup-script flags
- platform badge and filter helpers
Optional augmentation paths
- unified agent on a Proxmox node
- unified agent on a TrueNAS appliance
- host-level agent support that enables shell or guest control for an already admitted API-backed platform
Current Support Matrix
| Platform | Family | Primary mode | Optional augmentation | Canonical projections |
|---|---|---|---|---|
agent |
Pulse-managed host | agent-backed | none | agent, storage, physical-disk |
docker |
container runtime | agent-backed | none | agent, app-container, docker-service |
kubernetes |
cluster runtime | agent-backed | none | k8s-cluster, k8s-node, pod, k8s-deployment |
proxmox-pve |
Proxmox | api-backed | host agent may augment into hybrid | agent, vm, system-container, storage, ceph, physical-disk |
proxmox-pbs |
Proxmox | api-backed | host agent may augment into hybrid | pbs, storage |
proxmox-pmg |
Proxmox | api-backed | none today | pmg |
truenas |
TrueNAS | api-backed | host agent may augment into hybrid | agent, app-container, storage, physical-disk |
vmware-vsphere |
VMware | api-backed | host or guest agent later, not phase 1 | agent, vm, storage |
| Platform | Setup | Visibility | Workloads | Storage | Recovery | Alerts | Assistant read | Assistant control |
|---|---|---|---|---|---|---|---|---|
agent |
install workspace | supported | n/a |
supported | n/a |
supported | supported | supported |
docker |
install workspace / runtime enablement | supported | supported | n/a |
n/a |
supported | supported | supported |
kubernetes |
install workspace / runtime enablement | supported | supported | n/a |
supported | supported | supported | supported |
proxmox-pve |
platform connections | supported | supported | supported | supported | supported | supported | augmentation-only |
proxmox-pbs |
platform connections | supported | n/a |
supported | supported | supported | supported | read-only |
proxmox-pmg |
platform connections | supported | n/a |
n/a |
n/a |
supported | supported | read-only |
truenas |
platform connections | supported | supported | supported | supported | supported | supported | supported |
vmware-vsphere |
platform connections | supported | supported | supported | n/a |
supported | supported | read-only |
Current Inconsistencies To Treat Explicitly
PLATFORM_SUPPORT_MANIFEST.jsonintentionally carries admitted and presentation-only ids such asvmware-vsphere,microsoft-hyperv,aws,azure,gcp,unraid, andsynology-dsmso shared tests and frontend vocabulary can normalize them consistently. Those ids must not be interpreted as current support unless the classifications above say so.- Recovery provider strings are intentionally forward-compatible and already
include values such as
docker,agent, andproxmox-pmg. Those strings do not mean recovery support exists until the platform matrix above marks recovery as supported. - Frontend compatibility types still expose some legacy or presentation-local resource aliases. The canonical backend truth remains the shared unified-resource model plus this platform matrix.
Future Platform Admission
A new platform may be admitted as first-class only after governance answers all of these questions before implementation starts:
- What is the canonical platform id, and what platform family does it belong to, if any?
- Is the primary ingestion mode
api-backed,agent-backed, orhybrid? If hybrid, what is primary and what is only augmentation? - What is the canonical onboarding path: platform connections, install workspace, or both?
- What existing canonical resource types does it project into? New resource types require explicit justification; provider-local host types are forbidden by default.
- Which support-floor surfaces are
supported,augmentation-only,read-only, orn/a? - What stable identities drive dedupe, monitored-system counting, and
cross-source merge with
agent,docker,kubernetes, or other existing platforms? - What transport/security boundary owns credentials, polling cadence, reconnect semantics, and disabled/default behavior?
- What proof demonstrates the declared floor is real in onboarding, visibility, applicable domain surfaces, alerts, and assistant behavior?
If those answers are not yet stable, the work must stop at a governed open-decision or resolved-decision update instead of starting runtime code.
VMware vSphere Admission Model
Pulse now has a resolved architecture recommendation for any future VMware
vSphere work. This does not admit vmware-vsphere into the current support
matrix yet. It defines the only acceptable phase-1 model if implementation
starts.
- treat VMware as one separate first-class platform id,
vmware-vsphere, not as another Proxmox subtype and not as a generic future-label shortcut - use
vCenteras the only supported phase-1 entry point - treat direct
ESXionboarding as deferred work, not as an implied part of the vCenter claim - keep the primary ingestion mode
api-backed - use official VMware APIs first: vCenter Automation API for modern inventory and VM control surfaces, plus the Virtual Infrastructure JSON API for alarm, event, snapshot, and performance/detail paths
- treat a Pulse-managed agent only as future augmentation for deeper host or guest behavior, not as a bootstrap requirement or primary support contract
- project ESXi hosts as canonical
agent, guest workloads as canonicalvm, and datastores as canonicalstorage - keep vCenter, datacenter, cluster, folder, and resource-pool objects as
topology or relationship metadata under those shared resources rather than
inventing top-level
esxi-host,vsphere-cluster, orvsphere-vmtypes - keep
physical-disk,system-container,app-container, and recovery artifacts out of the phase-1 projection contract unless a later governed slice proves they belong on the shared path
| Platform | Family | Entry point | Primary mode | Optional augmentation | Canonical projections | Admission state | Readiness stage |
|---|---|---|---|---|---|---|---|
vmware-vsphere |
VMware | vCenter only in phase 1 |
api-backed |
host or guest agent later, not phase 1 | agent, vm, storage |
architecture locked, not yet in support matrix | first-lab-ready |
VMware vSphere Proposed Phase-1 Floor
This is the proposed phase-1 support floor once implementation and proof land. It is not a claim that VMware is currently supported in Pulse.
| Platform | Setup | Visibility | Workloads | Storage | Recovery | Alerts | Assistant read | Assistant control |
|---|---|---|---|---|---|---|---|---|
vmware-vsphere |
platform connections to vCenter only |
supported | supported | supported | n/a |
supported | supported | read-only |
Phase-1 floor details:
- visibility means inventory and topology read across vCenter-backed ESXi hosts, VM placement, and datastore relationships
- workloads means VM inventory, power/runtime state, guest identity when the API exposes it, snapshot-tree visibility, and metrics/alarm context
- storage means datastore inventory, capacity/free-space/accessibility, host attachments, and VM-to-datastore usage
- recovery stays
n/ain the platform matrix because vSphere snapshots and changed-disk APIs are recovery-adjacent read signals, not a governed Pulse recovery-artifact or restore surface by themselves - alerts means vSphere alarm state, overall health state, and related event/task history projected through shared alert and incident paths
- assistant control stays read-only even though VMware exposes real control APIs, because Pulse has not yet expanded the governed action surface into a general VMware admin plane
Phase-1 exclusions:
- direct
ESXionboarding physical-diskprojection, including vSAN-only physical disk health APIssystem-containerorapp-containerprojections- treating vSphere snapshots as shared Pulse recovery support
- assistant or operator control claims for VM power, snapshot lifecycle, or guest operations
- any provider-local resource type, page shell, or AI tool family
Support gate:
Pulse should not call VMware supported until a real vCenter proves the declared
floor end to end: connection onboarding, minimum privilege bundle, supported
version floor, canonical agent/vm/storage projections, alert and metrics
history truth, and assistant read behavior. If that proof does not hold,
implementation must stop at governance rather than widening the support claim.
The concrete first-implementation slice order and stop/go checks live in
docs/release-control/v6/internal/VMWARE_VSPHERE_PHASE1_EXECUTION_PLAN.md.
As of 2026-03-31, VMware has reached the governed first-lab-ready
checkpoint: the non-live phase-1 floor is implemented and regression-proofed
well enough that the next proper step is a real vCenter proof run rather
than more architecture work.