Commit Graph

3229 Commits

Author SHA1 Message Date
rcourtman 62c2b765d0 feat: attach availability checks as facet on known resource row
Agentless availability checks (ICMP/TCP/HTTP) were always minting
standalone network-endpoint resources, leaving them disconnected from
the known Proxmox/Docker guest they actually monitor. This made
availability evidence invisible on the platform resource row where the
user expects it, per the performance-and-scalability bounded-row
contract.

Backend (unified-resources ingest):
- Add LinkedResourceID field to AvailabilityData and AvailabilityTarget
- resolveAvailabilityLink: explicit link first, then exact-IP unambiguous
  correlation; skip hostname-only (lossy); guard against overwriting a
  different target's facet
- Unlinked/unmatched probes still mint network-endpoint (fallback)

Frontend:
- Relax getAvailabilityProbePresentation for any resource with availability
- Add compact protocol badge to UnifiedResourceHostTableCard name cell
- Add optional 'Link to resource' field to availability target form
- Add linkedResourceId to frontend types

Contracts: api-contracts, unified-resources, monitoring,
performance-and-scalability, storage-recovery.

Governance: coverage_gap + candidate_lane in status.json.
2026-06-26 12:16:11 +01:00
rcourtman 7d0b481e22 patrol: show actionable state badges on collapsed Patrol finding rows
Patrol findings hide raw investigation-status and investigation-outcome
badges per the patrol-intelligence contract, but the contract explicitly
allows plain-language actionable state labels (approval required,
investigating, verifying fix, fix failed). This adds a getPatrolFinding-
ActionableState helper and renders the resulting badge on the collapsed
Patrol row between the severity badge and the title, so the operator
sees each finding's state without expanding. The badge is absent when
no actionable state applies, leaving the default new-finding row clean.
2026-06-25 23:27:34 +01:00
rcourtman 370017b48d patrol: surface work-type composition in the Open work workspace description
Classify active Patrol findings by actionable work type (needs approval,
failed fix, in progress, recurring, new) and weave a compact composition
clause into the workspace description so the operator sees the nature of
their open work at a glance. The clause is empty when all findings are
plain new issues, so the single-finding experience is unchanged.

Advances the protection-posture-attention-queue strong-version checklist
item: Patrol groups operator work across findings, approvals, failed
checks, recurring issues, and unresolved incidents.
2026-06-25 23:19:06 +01:00
rcourtman 83e8f53ac5 Recheck guest Docker inventory after checker setup
Force stale negative LXC Docker detections to re-run after the Docker checker is configured so explicit Proxmox guest Docker inventory repopulates after backend restarts.
2026-06-25 20:30:38 +01:00
rcourtman a4c5cfd26d Fix encoded resource type filters
Treat browser-encoded comma-separated resource type lists the same as literal comma filters so Docker and platform pages keep canonical inventory rows.
2026-06-25 20:20:35 +01:00
rcourtman 376b7b9b07 Fix local infrastructure proxy bypass
Bypass environment proxies for local/private infrastructure endpoints and surface blocked workload inventory sources on platform pages.
2026-06-25 18:17:12 +01:00
rcourtman 092c9ee6c7 Fix Proxmox tag color style propagation 2026-06-25 17:14:00 +01:00
rcourtman 6d9fe4e17c Make alert investigation route to Patrol 2026-06-25 16:00:06 +01:00
rcourtman 7449d14ef7 Show Patrol open work in navigation 2026-06-25 15:22:51 +01:00
rcourtman 2f69202056 Clarify Patrol open work guidance 2026-06-25 15:02:38 +01:00
rcourtman 4b0e60a448 Contextualize Assistant launcher 2026-06-25 14:54:57 +01:00
rcourtman 6dce36fbab Clarify Patrol current-work copy 2026-06-25 14:37:04 +01:00
rcourtman 056cd59405 Restore Patrol as operator surface 2026-06-25 14:23:50 +01:00
rcourtman ad01d77ffa Promote Needs Attention as work surface 2026-06-25 13:38:54 +01:00
rcourtman 166384b8a9 Capture operator workbench product direction 2026-06-25 13:18:16 +01:00
rcourtman dd2f4c07fe alerts: offer manual targeted Patrol check from the alert AI button
The alert AI button now offers a manual targeted Patrol check alongside the
existing context-only Pulse Assistant handoff, so the take-the-lead intent routes
to Patrol (the investigator) instead of overloading Assistant (the explainer).

POST /api/ai/patrol/run (HandleForcePatrol) accepts an optional scope body and
routes through the same TriggerScopedPatrol engine and scoped run record as
automatic alert-triggered work, not a new trigger route; empty body keeps the
legacy fleet-wide run. Scoped runs honour Patrol readiness but bypass the
full-run cadence gate, consistent with the existing scoped-cadence rule, and
carry resource identity only (no command or remediation payload).

Frontend: triggerPatrolRun(scope?) and a split AI button (patrolOption) on the
alert overview card whose menu runs the scoped check; icon/history rows stay
single-purpose. Contract updates land in the touched/dependent subsystem docs
(ai-runtime, api-contracts, agent-lifecycle, storage-recovery, frontend-primitives,
security-privacy, patrol-intelligence, alerts); subsystem_lookup_test line
expectation refreshed for the api-contracts shift.
2026-06-25 08:49:29 +01:00
rcourtman 6b610ebed9 patrol: add finding-level at-need Pulse Pro handoff for plan-locked installs
The free Patrol working surface stays clean of ambient paid surfacing, but a
plan-locked operator who expands an active critical or warning finding now gets
one honest, non-salesy capability line in the empty primary-action slot: "Pulse
Pro can investigate and fix issues like this." A "Learn about Pulse Pro" action
appears there only when the upgrade-prompt policy allows it.

This is the single allowed contextual at-need prompt — gated to plan-locked
installs, active critical/warning findings, and the upgrade-prompt policy — so
discovery happens at the moment of genuine need without re-tainting the daily-use
surface. Adds getPatrolProInvestigationHandoff in patrolControlPresentation,
threads the handoff through PatrolIntelligenceWorkspace into FindingsPanel,
codifies the carve-out across the owner and dependent contracts, and registers
the patrolControlPresentation test as patrol-page-and-state proof.
2026-06-24 21:03:20 +01:00
rcourtman 7e54d2e95c patrol: keep free working surface clean of paid-feature surfacing
Reverts the interim opt-in Patrol mode disclosure added in 8fab6e6e0. The
free Patrol surface stays a complete, clean monitoring tool: plan-locked
installs show only the positive Watch-only control with no paid modes,
disabled buttons, Pro badges, or disclosure of any kind in the daily-use
surface. Pro discovery belongs in Settings, the website/docs, and
contextual at-need prompts instead.

Firms up the patrol-intelligence contract (owner plus api-contracts and
frontend-primitives dependents) to drop the permissive carve-out entirely,
and updates the recorded decision to match. An opt-in list of unclickable
modes did neither job well: it was not clean enough to keep the free product
proud, and too passive to drive conversion.
2026-06-24 16:58:33 +01:00
rcourtman 8fab6e6e02 patrol: surface plan-locked modes via opt-in disclosure
Plan-locked (free) installs showed only a flat "Watch only" with no way to
discover that Patrol has other modes. Add an explicit "See what Patrol can do"
affordance beside the Watch-only control that reveals the four modes (paid
ones disabled and Pro-badged) on demand, so operators can discover the
capability tiers without turning the default header into a Pro-absence matrix.

Resolves a patrol-intelligence subsystem contract conflict (a permissive line
allowing disabled paid buttons vs a prohibition on rendering them) by
codifying opt-in disclosure as the rule across the owner and dependent
contracts: the default (closed) view stays positive Watch-only, and the paid
modes appear only behind the explicit affordance. Records the product decision
in status.json resolved_decisions.
2026-06-24 16:30:16 +01:00
rcourtman 1f6fe16e49 Make Z.ai provider base URL user-overridable
Z.ai keys on the coding subscription get 429 'Insufficient balance' on the standard /api/paas/v4 endpoint. Add a per-provider BaseURLField to the Z.ai registry entry, a ZaiBaseURL override on AIConfig (returned by GetBaseURLForProvider when set, else the standard default), the handler request/response/apply plumbing, and a 'Custom Base URL' field on the Z.ai provider card so operators can point at /api/coding/paas/v4. Mirrors the existing OpenAI custom-base-URL override; the standard endpoint remains the default for pay-as-you-go users. Adds config/handler/frontend proofs and updates the ai-runtime, api-contracts, frontend-primitives, agent-lifecycle, and storage-recovery contracts.
2026-06-23 22:49:55 +01:00
rcourtman 09fc029bd6 Canonicalize assistant provider registry
Add a registry-backed provider model for runtime metadata and chat-compatible transports.

Support Z.ai, Groq, Mistral, Cerebras, Together, and Fireworks through the shared chat-compatible client path while keeping native providers on their existing adapters. Expose provider metadata through settings and render the expanded provider set in the frontend.
2026-06-23 19:38:22 +01:00
rcourtman da0693b3b1 monitoring: resolve configured-host IPs off the monitor lock
getConfiguredHostIPs() and the new discoveryConfigSnapshot() now deep-copy config under a brief RLock and release it before resolving Proxmox/PBS/PMG hostnames via the injectable lookupConfiguredHostIP seam, so slow or blocked DNS can no longer stall monitor writers. The discovery IPBlocklist is the deduplicated merge of the operator-configured blocklist and the resolved configured-host IPs. Adds lock-freedom and merge coverage tests; updates the monitoring contract obligation.
2026-06-23 17:31:37 +01:00
rcourtman ee8a24e14a backend and governance: MCP contract, agent capabilities, API, and release-control
Manifest-backed MCP tools, prompts, and resources with surface affordance contracts; agent capability manifest and governance projection; API contract tests and capability route projection; operations-loop and intelligence-funnel telemetry; release-control subsystem documentation, registry, and tooling; licensing and configuration.
2026-06-23 17:26:15 +01:00
rcourtman d06c0a24b7 Govern verified support case handling 2026-06-16 16:46:46 +01:00
rcourtman 84f6302450 Fix Proxmox cluster snapshot polling read state
Refs #1437
2026-06-16 14:43:18 +01:00
rcourtman 6f792030b7 Record support operations release gate
Add the L2 release gate for canonical commercial support-case handling before data-protection-sensitive support actions.
2026-06-16 10:37:25 +01:00
rcourtman c04ac2f7cf Make private Pro publication block v6 releases 2026-06-15 15:37:13 +01:00
rcourtman 7235dcf504 Clarify Patrol event trigger runtime state
Expose runtime-blocked event triggers in Patrol status and surface the user-facing reason in the Patrol UI.
2026-06-15 10:08:54 +01:00
rcourtman 48e1efece7 Use patched Go toolchain for v6 release 2026-06-14 18:22:26 +01:00
rcourtman b9d28a2f83 Show thermal pressure in machine temperature cells
Render pressure-only host thermal state as compact table status when no Celsius reading is available.
2026-06-14 11:46:39 +01:00
rcourtman 6a162a1736 Add macOS thermal state reporting
Report Darwin pmset pressure separately from Celsius readings and carry it through host sensor state and resource details.
2026-06-14 11:07:47 +01:00
rcourtman 566c5b9da4 Add lab-agent hot-dev mode 2026-06-14 09:55:56 +01:00
rcourtman f81d35f3b1 Localize alerts overview journey 2026-06-14 09:09:12 +01:00
rcourtman 331d13afde Localize first-session monitoring journey 2026-06-14 08:41:11 +01:00
rcourtman 67defeaa32 Start localization foundation for settings journey 2026-06-14 00:02:48 +01:00
rcourtman 6559c37626 Converge AI Chat message actions on shared Button primitives 2026-06-13 23:48:55 +01:00
rcourtman dbb936e623 Converge standalone machine actions on ActionIconButton 2026-06-13 23:35:23 +01:00
rcourtman 52f094f11f Converge AI Chat icon actions on ActionIconButton 2026-06-13 23:27:33 +01:00
rcourtman 05f1a3298e Converge Patrol approval actions on shared Button primitives 2026-06-13 22:59:58 +01:00
rcourtman 85ae9ad540 Converge organization settings actions on shared Button primitives 2026-06-13 22:48:05 +01:00
rcourtman 418cf1648d Converge RBAC settings actions on shared Button primitives 2026-06-13 22:31:23 +01:00
rcourtman a418b8da27 Converge security auth actions on shared Button primitive 2026-06-13 22:20:03 +01:00
rcourtman e73420d4d5 Converge Proxmox backup view selector on shared primitive 2026-06-13 22:08:09 +01:00
rcourtman 55e058d1e6 Converge API token scope pills on shared selectable primitive 2026-06-13 21:52:18 +01:00
rcourtman 9578cd7368 Converge billing admin row actions on shared Button primitives 2026-06-13 21:37:30 +01:00
rcourtman 1af7d47792 Converge SSO actions on shared Button primitives 2026-06-13 21:23:21 +01:00
rcourtman 03b593461f Converge panel empty states on shared primitive 2026-06-13 21:11:57 +01:00
rcourtman c48dfa8261 Converge standalone metrics on platform table helper 2026-06-13 20:50:06 +01:00
rcourtman 66002e8ba7 Converge Pro license actions on shared Button primitives 2026-06-13 20:37:12 +01:00
rcourtman 51c47a2279 Converge GitHub star banner on shared action primitives 2026-06-13 20:24:17 +01:00