Commit Graph

77 Commits

Author SHA1 Message Date
rcourtman 8302229a26 Refine workload sparkline I/O density 2026-05-18 11:29:15 +01:00
rcourtman 6bdc10d74f Retire dead infrastructure connections table 2026-05-17 15:54:49 +01:00
rcourtman abb6f86aeb frontend(platform-first): retire legacy top-level routes and cross-link affordances
Primary nav moved to platform-first (Proxmox/Docker/K8s/TrueNAS/vSphere) and
the standalone Infrastructure/Workloads/Storage/Recovery/Ceph routes were no
longer reachable from the UI — they only persisted as deep-link fallbacks and
as cross-jump targets for command palette / shortcuts / drawer links.

Code:
- RuntimeHome and NotFound redirect to /proxmox/overview; kiosk-mode
  redirect follows the same canonical home.
- App.tsx, routing/navigation.ts, routing/routePreload.ts, AppLayout.tsx
  drop the legacy routes, preloaders, tab IDs, and tab-title entries.
- Old page wrappers (Infrastructure/Workloads/Storage/Recovery/Ceph) and
  the orphan CephServiceIcon and workloadsLink helper are deleted; the
  underlying feature surfaces (InfrastructurePageSurface, WorkloadsSurface,
  StorageSurface, RecoverySurface, ProxmoxCephTable) stay embedded inside
  platform pages.
- Command palette and keyboard shortcuts now expose the five platform
  pages (g p/d/k/n/v) plus Patrol/Alerts/Settings; legacy g i/w/s/b are
  retired.
- K8s Namespaces/Deployments drawer "view pods" buttons route to
  /kubernetes/pods (the legacy ?context= + ?namespace= filter doesn't
  carry forward yet — the new sub-tab doesn't consume those params).
- Workload-row node-name click, host-row workloads icon, resource
  correlation/change drilldowns, and the PBS "Open Recovery Events" link
  render as plain text or are dropped — platform pages already surface
  the related data in adjacent sub-tabs.

Governance:
- Subsystem contracts updated to match: storage-recovery and
  performance-and-scalability drop the retired page wrappers from their
  Canonical Files lists; ai-runtime, cloud-paid, frontend-primitives, and
  unified-resources gain Current-State notes describing the platform-first
  redirect, palette/shortcut re-anchoring, and cross-link affordance
  removal so future work doesn't resurrect the retired paths.
- status.json L8 (First-session & UX polish) evidence: the retired
  pages/Infrastructure.tsx wrapper is replaced by pages/Proxmox.tsx as
  the canonical post-redirect landing surface.
- registry.json: 18 retired-file entries removed from owned_files,
  path-policy match_files, and exact_files across the route-shell-and-
  operations, workload-presentation, storage-recovery, and unified-
  resources subsystems. Surviving entries continue to cover the proof
  set — the embedded feature surfaces remain canonical and the retired
  page wrappers were thin shells with no remaining proof obligation.
- canonical_completion_guard_test.py and subsystem_lookup_test.py
  retargeted: the recovery and storage product-surface fixtures now
  exercise the canonical components/* surfaces instead of the retired
  pages/* shells, matching the new registry shape.

Tests: typecheck clean. Vitest 5820 pass / 6 pre-existing fail
(PageControls.guardrails, useStoragePoolDetailModel, ApprovalSection x3,
frontendResourceTypeBoundaries:1018) — all failing on HEAD before this
change with clean porcelain on the offending source files. Python
canonical_completion_guard_test (141) and subsystem_lookup_test (183)
green.
2026-05-16 18:57:37 +01:00
rcourtman 3580a5ed6d Clarify storage topology and recovery guards 2026-05-14 20:51:32 +01:00
rcourtman 92a5cb68ec Harden Workloads refresh retention 2026-05-14 15:18:34 +01:00
rcourtman 7951da526b Add release_cycle_artifact_globs so RC ceremony skips contract-update requirement 2026-05-11 22:55:29 +01:00
rcourtman 9cbd3dcbc6 Fail closed malformed approval expiry state 2026-05-07 16:56:47 +01:00
rcourtman 361f289485 Fix alert threshold metric coloring
Refs #1358
2026-05-01 20:28:12 +01:00
rcourtman 4e2b62e89b Retire legacy Storage and Workloads filter helpers after FilterBar migration
Deletes files that no runtime path imports after the migration to
chip-based FilterBar:

  Storage's three-layer filter indirection:
  - StorageFilter.tsx (legacy filter shell)
  - StorageControls.tsx (subtab + filter pass-through wrapper)
  - useStorageFilterToolbarModel.ts (legacy active-filter / reset hook)
  - useStoragePageControlsModel.ts (sortDisabled + groupBy gating)
  - useStorageControlsModel.ts (subtab + node-filter wiring)
  - their tests

  Workloads filter state hook:
  - useWorkloadsFilterState.ts (replaced by inline FilterBar wiring;
    countActiveWorkloadsFilters / hasActiveWorkloadsFilters stay in
    workloadsFilterModel.ts)
  - its test

The StorageStatusFilter and StorageGroupByFilter type aliases that
StorageFilter.tsx exported fold into the existing canonical types in
storagePageState.ts (StorageStatusFilterValue) and storageModelCore.ts
(StorageGroupKey), keeping useStorageFilterState.ts alive without the
deleted shell.

PageControls.tsx and its companion FilterToolbar primitives stay in
the tree because the alert-history filter card and the Kubernetes
deployments drawer still consume them. The canonical claim shifts:
FilterBar is the chip-based shell for catalog-driven page filters
(Infrastructure, Workloads, Storage, Recovery Protected items, Recovery
events). PageControls remains for non-migrated surfaces.

Subsystem contracts and registry updated:
- frontend-primitives.md: adds FilterBar files to Canonical Files;
  describes FilterBar as the canonical page-level filter shell for
  catalog-driven resource lists; PageControls described as the legacy
  fallback for non-migrated surfaces.
- performance-and-scalability.md: drops useWorkloadsFilterState
  references; describes Workloads' FilterBar / viewOptionsTrailing
  composition.
- storage-recovery.md: replaces "PageControls toolbar rail" prose with
  FilterBar / viewOptionsTrailing for both Storage and Recovery events;
  notes the legacy three-layer indirection retired.
- registry.json: drops deleted file paths from owned_files,
  verification.exact_files, and verification.path_policies entries.
- canonical_completion_guard_test.py + subsystem_lookup_test.py: drop
  deleted file paths from hard-coded fixtures so the governance helper
  tests track the registry.
- SharedPrimitives.guardrails.test.ts: adds regression assertions that
  StoragePageControls no longer imports the deleted shells.
2026-05-01 10:51:22 +01:00
rcourtman 99129d0c09 Retire product upgrade metrics runtime
Remove local upgrade-metrics API registration, settings payload wiring, startup store migration, and backend conversion recorder hooks from the normal product runtime.

Delete the retired conversion/funnel and metering packages from compiled licensing code, and extend diagnostics boundary audits and governance contracts so maintainer commercial analytics cannot return through Settings or diagnostics.
2026-04-30 12:24:22 +01:00
rcourtman 0714fec8af Guard diagnostics against internal analytics 2026-04-30 09:41:16 +01:00
rcourtman b413a56d85 Canonicalize Docker Podman infrastructure copy 2026-04-30 00:20:59 +01:00
rcourtman 72fe17a5d9 Extend paid claim proof boundary 2026-04-29 23:40:32 +01:00
rcourtman 65fe50ad5b Canonicalize remaining table shells 2026-04-29 23:15:12 +01:00
rcourtman f6bf4779be Canonicalize platform drawer table shells 2026-04-29 20:41:31 +01:00
rcourtman 0c8628c23e Warm Workloads route and chart caches 2026-04-29 18:02:30 +01:00
rcourtman c743a231b8 Retire dashboard landing surface 2026-04-29 16:25:09 +01:00
rcourtman cc26f59f01 Retire self-hosted trial activation callback 2026-04-28 16:36:09 +01:00
rcourtman a2c101379a Guard stable updater from prerelease tags
Refuse prerelease-shaped tags and explicit GitHub prerelease responses in the unattended stable updater before installer invocation.

Add installability tests and proof routing for the auto-update prerelease refusal guard.
2026-04-25 23:49:27 +01:00
rcourtman fc5325ab80 Add resource data handling settings surface 2026-04-25 20:23:40 +01:00
rcourtman 669908acd4 Normalize workloads and recovery page headers 2026-04-21 17:51:33 +01:00
rcourtman d75b10df57 phase 9 — retire stop-monitoring & legacy per-type shells
Delete the stop-monitoring dialog plus the retired per-type settings
shells now that the unified ConnectionEditor replaces them: remove
PlatformConnectionsWorkspace / ProxmoxSettingsPanel /
ProxmoxDirectWorkspace / NodeModal et al and the accompanying tests.
Strip the lingering reporting-state hook from
useInfrastructureOperationsState and the guardrail test reinforces the
removal. Reconcile registry.json, frontend-primitives.md,
api-contracts.md, agent-lifecycle.md, status.json, and the
release-control guard/test fixtures so governance audits stay clean.
2026-04-19 16:55:05 +01:00
rcourtman 329f59eddb Add health-state indicators to Infrastructure, Storage, Workloads, and Recovery summaries
Summary cards now show degraded/alerting/failing counts rather than raw
online/offline splits, giving operators an at-a-glance health posture without
drilling into the full resource list.

- InfrastructureSummary/infrastructureSummaryModel: adds degraded and alerting
  counts derived from resource statuses and active alerts
- StorageSummary/StoragePageSummary/useStoragePageSummary: adds poolsDegraded
  and disksFailing indicators, shows "all healthy" when zero degradation
- WorkloadsSummary/useDashboardWorkloadDerivedState: adds alerting guest count
  from activeAlerts accessor, included in summary header counts
- RecoverySummary: adds aggregate health-state summary row
- useDashboardState: threads alertsEnabled through workload derived state
- Fix monitored-system cap test helper to use TierEnterprise so limits are
  honored (self-hosted tiers are now uncapped per the v6 product model)
- Update registry and governance test snapshots to include
  useStoragePageSummary.test.ts in the storage-product-surface proof set
2026-04-19 08:35:45 +01:00
rcourtman d78bc64583 Recenter infrastructure settings on monitored systems 2026-04-18 18:46:25 +01:00
rcourtman 8883e36f0b Collapse infrastructure settings to ledger-first workspace 2026-04-18 17:13:34 +01:00
rcourtman 847d09d17b Unify settings infrastructure ledger 2026-04-18 14:54:53 +01:00
rcourtman 675c47d971 Add contract-neutral bypass to staged shape guard
Introduce PULSE_ALLOW_CONTRACT_NEUTRAL_COMMIT as a narrow escape
hatch for the canonical-shape block in staged_commit_shape_guard
and canonical_completion_guard. A non-empty reason logs to stderr
for audit and suppresses only the canonical-shape requirements;
lane-progress, promotion-proof, sensitivity, gitleaks,
governance-stage, control-plane, status, registry, and contract
audits still run. Previously a behavioral bug fix on a canonical
runtime path demanded full contract + verification ceremony even
when no public-contract delta existed, forcing --no-verify.
2026-04-17 12:24:01 +01:00
rcourtman 7c1c5d396a Own mock runtime fixtures under monitoring 2026-04-16 16:00:23 +01:00
rcourtman 31315fb594 Normalize Proxmox special ZFS groups
Refs #1413
2026-04-15 16:40:43 +01:00
rcourtman d03056f656 Port v5 NAS vendor identity and RAID normalization 2026-04-15 12:54:15 +01:00
rcourtman 84943907af Port v5 Ceph and Podman runtime compatibility 2026-04-15 12:32:05 +01:00
rcourtman 0cd2304d8f Prefer Unraid disk topology over aggregate counts 2026-04-13 12:12:56 +01:00
rcourtman 2d8385c1d8 Fix same-host websocket proxy origin checks 2026-04-13 12:04:29 +01:00
rcourtman 1c6b415229 Clean up monitored-system contract governance 2026-04-09 16:14:40 +01:00
rcourtman 8a44d27675 Filter historical Docker swarm tasks 2026-04-01 13:57:56 +01:00
rcourtman 70e43d7ac1 Fix Proxmox node disk fallback selection 2026-04-01 10:04:30 +01:00
rcourtman e1474cfc92 Implement VMware vCenter resource projection slice 2026-03-30 18:55:06 +01:00
rcourtman 4833f6f6ee Promote organization transport shared ownership 2026-03-30 10:13:03 +01:00
rcourtman 40e095a9a0 Tighten control-plane subsystem lookup context 2026-03-30 09:42:16 +01:00
rcourtman e14ddcf348 feat(truenas): project app stats through canonical workload history 2026-03-29 17:17:57 +01:00
rcourtman 4d11ca5a78 refactor(settings): surface truenas in platform connections 2026-03-29 16:37:13 +01:00
rcourtman 8020306ca8 Own mobile relay runtime in L7 2026-03-28 18:07:44 +00:00
rcourtman 27897ee62f Govern recovery desktop layout proof 2026-03-24 21:30:21 +00:00
rcourtman 72e085d521 Govern Patrol remediation presentation helper 2026-03-24 21:22:36 +00:00
rcourtman ce9900218e Normalize recovery subject labels across rollups 2026-03-24 19:46:00 +00:00
rcourtman 0922685b01 Govern threshold slider presentation helper 2026-03-24 16:32:22 +00:00
rcourtman 9fb7c15ebf Govern dashboard storage presentation helper 2026-03-24 16:21:24 +00:00
rcourtman 5a303339e7 Govern environment lock presentation boundary 2026-03-24 16:12:15 +00:00
rcourtman d898fca26c Govern Proxmox lifecycle presentation helpers 2026-03-24 15:56:27 +00:00
rcourtman dc98053112 Govern shared resource summary presentation 2026-03-24 09:17:47 +00:00