Commit graph

2126 commits

Author SHA1 Message Date
rcourtman
863f214c10 Add CLI action audit reads 2026-05-04 00:18:19 +01:00
rcourtman
2c96242487 Use stable SSO principals
Derive OIDC and SAML browser-session principals from provider-scoped subjects instead of mutable username or email claims.

Preserve compatibility by migrating legacy username/email RBAC assignments to the stable SSO principal when no authoritative group mapping is present, and pin the invariant in API/security contracts.
2026-05-04 00:16:31 +01:00
rcourtman
f0bf88a89d Add CLI action capability discovery 2026-05-04 00:10:15 +01:00
rcourtman
5fbe723ad9 Add CLI action planning adapter 2026-05-04 00:05:21 +01:00
rcourtman
7829c3e6ed Pin hosted identity invariants
Resolve hosted magic-link verification through current organization membership so sessions bind to the stored stable user principal instead of token email.

Add the v6 identity invariant contract and static guards covering hosted handoff, checkout, provisioning, and magic-link boundaries.
2026-05-03 23:58:08 +01:00
rcourtman
b11f57ed62 Add API-first action planning endpoint 2026-05-03 23:51:54 +01:00
rcourtman
3e497ecb70 Harden hosted tenant identity keys
Use stable control-plane user IDs as hosted tenant organization principals while preserving email as contact metadata and legacy fallback. Cloud handoff sessions now bind to the signed subject instead of email, seeded tenant orgs store owner/member email separately from durable user IDs, and the subsystem contracts pin that boundary.
2026-05-03 23:28:26 +01:00
rcourtman
d994a7a60d Resolve agent-ready operations target scope 2026-05-03 23:27:49 +01:00
rcourtman
4f75542e50 Record agent-ready operations proof gap 2026-05-03 23:23:10 +01:00
rcourtman
db97478566 Reduce metrics rollup write amplification
Refs #1124
2026-05-03 21:43:20 +01:00
rcourtman
f1744d36d0 Refresh RC3 packet for metrics proof fix 2026-05-03 16:38:00 +01:00
rcourtman
f69e68d4a4 Refresh RC3 packet for stable installer fix 2026-05-03 16:18:56 +01:00
rcourtman
c27814d190 Fix stable installer prerelease selection
Refs #1435
2026-05-03 15:20:18 +01:00
rcourtman
6459515c78 Refresh RC3 packet for SSO candidate commits 2026-05-03 15:09:42 +01:00
rcourtman
82c54cc39b Make self-hosted SSO Community-tier
Treat OIDC, SAML, and multi-provider SSO as included Community capabilities while retaining advanced_sso as a compatibility key. Remove SAML-specific paywalls and paid-upgrade copy from runtime, settings UI, entitlement snapshots, docs, journey proof, and subsystem contracts.

Refs #1449
2026-05-03 12:48:01 +01:00
rcourtman
7e9a7a3fd4 Document RC3 commit coverage audit 2026-05-03 11:52:51 +01:00
rcourtman
9ba0c3fa96 Retry release asset uploads 2026-05-03 10:26:51 +01:00
rcourtman
694e746a3b Fix storage summary responsiveness 2026-05-02 07:49:32 +01:00
rcourtman
54378a14e5 Fix release validation draft metadata preservation 2026-05-02 02:01:57 +01:00
rcourtman
011d288cb4 Fix release asset validation workflow gates 2026-05-02 00:36:54 +01:00
rcourtman
c8e24f06d7 Fix clean VCS metadata for release builds 2026-05-01 23:12:41 +01:00
rcourtman
7d7b83bf45 Fix header audit after Dashboard retirement 2026-05-01 20:40:36 +01:00
rcourtman
2c3ece3e51 Prepare v6.0.0-rc.3 release packet 2026-05-01 20:28:12 +01:00
rcourtman
df1a983540 Offset summary chart hover tooltips
Refs #1452
2026-05-01 20:28:12 +01:00
rcourtman
fe597554c3 Fix backup orphan inventory readiness
Refs #1352
2026-05-01 20:28:12 +01:00
rcourtman
61cd902ded Fix Docker update alert disable cleanup
Refs #1355
2026-05-01 20:28:12 +01:00
rcourtman
361f289485 Fix alert threshold metric coloring
Refs #1358
2026-05-01 20:28:12 +01:00
rcourtman
67f2ce5dc2 Preserve PVE authorized_keys symlinks in setup scripts
Refs #1297
2026-05-01 20:28:11 +01:00
rcourtman
e66fd1b976 Record v5.1.29 RC3 delta triage
Document the continued RC3 issue/discussion sweep after v5.1.29 publication, including the current latest-release state, newest public threads, and confirmation that the remaining v5 maintenance fixes are already covered in v6.
2026-05-01 20:28:11 +01:00
rcourtman
09231a9ef7 Fix Docker agent reconnect token binding
Refs #1447

Use the canonical Docker host identity for token bindings after a matched reconnect, preserve previous/current identity aliases for recreated containers, and keep rejecting token reuse by genuinely different Docker hosts.

Record the RC3 release-gate evidence for the Docker-in-LXC reconnect path.
2026-05-01 20:28:11 +01:00
rcourtman
87aba32540 Port installer disk preflight from v5 2026-05-01 20:28:11 +01:00
rcourtman
6127d412d3 Align Patrol prober with agent command policy 2026-05-01 20:28:11 +01:00
rcourtman
411e8daa4d Port installer bundle fallback fix from v5 2026-05-01 20:28:11 +01:00
rcourtman
ff1c21c39b Record late RC3 issue intake triage 2026-05-01 20:28:11 +01:00
rcourtman
6955dc5379 Document unified agent privilege model 2026-05-01 20:28:11 +01:00
rcourtman
4dfb42f877 Port issue-first contribution policy to v6 docs 2026-05-01 20:28:11 +01:00
rcourtman
3146d83701 Count Ceph monitors from monitor arrays
Refs #1290
2026-05-01 20:28:11 +01:00
rcourtman
575f432183 Make metrics writes idempotent for duplicate samples
Refs #1442
2026-05-01 20:28:11 +01:00
rcourtman
0273ab8456 Resolve RC3 issue follow-up candidates
Preserve the most severe Proxmox connection member state so offline members roll up correctly.

Move history-chart tooltips beside the hovered point when space allows and resolve PBS metric alerts against PBS thresholds during config reevaluation.

Refs #1441

Refs #1452

Refs https://github.com/rcourtman/Pulse/discussions/1448
2026-05-01 20:28:11 +01:00
rcourtman
af8a5f0740 Port RC3 maintenance fixes from v5
Refs #1440, #1444, #1451
2026-05-01 20:28:11 +01:00
rcourtman
931179cb29 Fail closed hosted refresh for inactive tenants 2026-05-01 14:42:50 +01:00
rcourtman
2d4da7e08e Hide deleted workspaces from portal APIs 2026-05-01 14:38:45 +01:00
rcourtman
1267a817c7 Gate cloud provisioning to hosted checkouts 2026-05-01 14:13:08 +01:00
rcourtman
57acaba142 Add saved views to FilterBar so power users can recall named filter combos
Operators that look at the same filtered slice repeatedly (stopped
containers on a specific cluster, stale backups in last 30 days,
TrueNAS pools needing attention) now save the current filter state as
a named view and recall it with one click.

The view is the page's URL query string at save time, so saved views
double as shareable URLs: copying the bar URL after applying a view
gives someone else the exact filtered state. Storage is per-browser
localStorage under `pulse:filterbar:saved-views:<key>`. Each catalog
opts in by passing `savedViewsKey` to FilterBar:

  Infrastructure: 'infrastructure'
  Workloads: 'workloads'
  Storage: 'storage'
  Recovery Protected items: 'recovery-protected'
  Recovery events: 'recovery-events'

The menu lives next to "+ Filter" on the search row. Empty state
prompts the user to save the active filters; populated state lists
saved views with hover-to-reveal X buttons for delete. The save flow
is a small inline dialog (name input + Save / Cancel) so users never
leave the menu.

The hook (useSavedViews) owns localStorage IO, JSON parse hardening,
and URL navigation through @solidjs/router. The menu (SavedViewsMenu)
owns dropdown chrome and click-outside / Escape lifecycle. WorkloadsFilter
unit tests mock @solidjs/router so the menu can render outside a Router
context in test setup.

Implicit "remember last filters" is intentionally not added: defaulting
to yesterday's `Status: Failed` would hide real problems on a monitoring
page. Recently-used auto-tracking and pinned quick-buttons remain
deferred until we see whether named views is enough.

Subsystem contracts updated to reflect the new primitive and the
per-page opt-ins:
- frontend-primitives.md: adds SavedViewsMenu + useSavedViews to
  Canonical Files; describes the shared saved-views primitive in
  Extension Points.
- performance-and-scalability.md, storage-recovery.md,
  unified-resources.md: note that Workloads / Storage / Recovery /
  Infrastructure each opt into shared saved views by passing
  savedViewsKey.
- Recovery.test.tsx: regression assertion that the events controls
  group renders the Saved views menu trigger (verification artifact
  for the storage-recovery contract change).
2026-05-01 11:13:43 +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
828e885d8e Canonicalize shared filter control deck 2026-04-30 15:03:32 +01:00
rcourtman
509852b28d Clarify workloads filter sections 2026-04-30 14:35:15 +01:00
rcourtman
1b04eb3d92 Fill workloads filter control row 2026-04-30 14:21:18 +01:00
rcourtman
fc0bcd3204 Use full-width workloads filter deck 2026-04-30 14:19:59 +01:00
rcourtman
c7164c2906 Clarify Relay mobile handoff paid copy 2026-04-30 13:18:04 +01:00