Commit Graph

4908 Commits

Author SHA1 Message Date
pulse-triage[bot] 088f597907 Merge current upstream main after PR #1929
Preserve the reviewed alert and TrueNAS work while incorporating the canonical API metrics optimization and patrol qualification record.

Change-source: pulse-maintainer
2026-09-06 09:12:03 +01:00
pulse-triage[bot] 9a8ee6a5a7 fix(alerts): keep normalized offline capacity suppressed
Use the normalized connectivity status consistently when deciding whether storage capacity is actionable, preserving the existing offline suppression rule for case and whitespace variants.

Change-source: pulse-maintainer
2026-09-06 08:45:39 +01:00
pulse-triage[bot] 2e661e075a fix(alerts): preserve storage incidents when connectivity is unknown
Do not count empty or unknown storage status as recovery evidence. Normalise status spelling for connectivity checks while leaving capacity evaluation independent and preserving existing inactive/disabled storage behaviour.

Change-source: pulse-maintainer
2026-09-06 08:40:29 +01:00
rcourtman a2f0ef8817 perf(api): avoid rune decoding in route label checks
Route labels classify ASCII digits and hexadecimal UUID bytes. Scan those
bytes directly while preserving numeric precedence, Unicode names and
invalid UTF-8 handling. This reduces the shared normaliser overhead exposed
by paired landing benchmarks without changing the benchmark gate.

Refs #1928

Contract-Neutral: ASCII route-label optimization preserves label values, identifier precedence, Unicode and invalid UTF-8 behavior, and agent lifecycle authority.
2026-09-06 08:31:26 +01:00
rcourtman ba69933da3 docs(patrol): record current diagnostic qualification failure
Preserve the real Assistant result separately from passing access routing
and disposable fault oracles. Correct tool evidence still produced
unsupported temporal claims, so customer outcome readiness remains open.

Refs #1928
2026-09-06 08:06:58 +01:00
rcourtman 173d74a8e4 test(patrol): exercise dependency and restart fault oracles
Validate the checked-in dependency and three service restart fault contracts
against disposable Docker resources before using them to assess model output.
Verify baseline, injected fault, refused duplicate injection, explicit fixture
recovery, and two-pass cleanup with unchanged pre-existing inventory.

These opt-in tests make no Pulse or model request. Fixture recovery is teardown
and does not count as an approval, rejection, execution or customer outcome.
Record exact live, owning-package and source-bound proof in the redesign plan.
2026-09-06 07:42:32 +01:00
rcourtman 58caeda69b fix(assistant): retain monitored targets without command access
Resolve monitored topology before checking command connections so unavailable
inspection retains the known resource and parent node. Prevent known targets
from falling through to a colliding agent ID, and preserve the single-agent
requirement when no target is supplied.

Use one failed tool envelope for diagnostic reads and file mutations. Missing
connections neither prove an installation problem nor count as successful
writes. Hypervisor lifecycle authority remains on its canonical action path.

Verify disconnected and unknown targets, collision isolation, all affected
tool handlers, token/WebSocket scope boundaries, and the linked Patrol and
Assistant failure journey at desktop and narrow widths.
2026-09-06 07:27:05 +01:00
rcourtman 1f41fa174d perf(metrics): avoid ordinal binding allocations
The 500-node dashboard query triggered repeated ordinal string conversions
in the SQLite driver while matching numbered parameters. Use alphabetic
named bindings to preserve current values and shared query branches without
that allocation cost.

Cover large cached scopes with changed resource families, identities,
metric filters and windows, including IDs that resemble SQL syntax.

Refs #1928
2026-09-06 06:54:40 +01:00
rcourtman b964eea767 fix(hostmetrics): retire disk probes before publishing results
A completed probe remained discoverable after its first caller returned,
allowing the next collection to reuse stale filesystem measurements.
Remove it and publish completion within one registry critical section.
Keep in-flight sharing, cancellation and timeout behaviour intact.

The controlled regression fails before this change. Twenty full package
runs and three race runs pass on the worker.

Refs #1928
2026-09-06 06:28:00 +01:00
rcourtman 618700db5e test(patrol): qualify bounded service storage failures
Add a disposable service-storage fault with an independent filesystem
oracle, bounded tmpfs writes, identity checks and verified recovery.
Exercise overwrite and symlink refusal without contacting a model.

Align the published schema with supported summary-term groups and validate
the complete catalogue in CI. Record the exact proof and remaining model
and missing-access qualification limits in the customer-journey plan.
2026-09-06 06:04:56 +01:00
rcourtman f26668aa6d perf(metrics): reuse retained query plans and output series
Canonical tier reconciliation rebuilt SQL and probed absent preferred tiers
for each fallback point, regressing batch reads and allocation costs. Reuse
bounded query shapes with current bindings and snapshot-scoped absence
checks, then append consecutive points directly to their output series.

Preserve coverage and ordering semantics and verify fresh bindings after
new preferred observations arrive. Integrate current main test additions.
2026-09-06 05:36:19 +01:00
rcourtman ab9e0e4d3d fix(patrol): align qualification schema with action scenarios
The runtime and three restart scenarios use health_process_stop, but the
published schema rejected it. Accept that implemented injector and check
actual catalogue fault types against the schema to prevent recurrence.

Record the remaining missing-access and storage qualification gaps.
2026-09-06 04:33:20 +01:00
rcourtman f779bf064a Merge current main and verify diagnostic workflows
Integrate the latest alert, delivery and action-result changes with the
Patrol evidence conversation. Replace the conflicted browser receipt
with current source-bound qualification and fix shared warning-card
wrapping exposed by the intermediate-width check.

Real diagnostic and autonomous action outcome qualification stays open.
2026-09-06 04:22:09 +01:00
rcourtman 61607333cc fix(ai): keep Patrol decisions in one evidence conversation
Remove contextless evaluator and assessment passes, signal-count budgets,
and post-finding prompt replacement. Keep evidence tools available until
explicit run limits and retain incomplete assessments and provider errors
alongside accepted decisions. Failed file reads now preserve error status
through the model, telemetry and saved Assistant history.

Full chat, AI and tools packages, focused Patrol API and race tests pass.
Real read-only and scripted browser checks preserve failed reads and linked
uncertainty. Real-model and verified action outcome qualification remain open.
2026-09-06 03:59:37 +01:00
rcourtman f01db995ed perf(metrics): avoid redundant retained-read work
Execute plain retained reconciliation in one current SQLite snapshot and
reuse bounded compiled statements. Preserve per-series chronology without
a metric sort while keeping display aggregation ordering explicit.

Exact-base worker comparisons cover the prior PR benchmark failures. Full
metrics/database and focused concurrent race checks pass. Final CI and
real diagnostic outcome qualification remain open.
2026-09-06 03:02:59 +01:00
rcourtman 668af3fe6b fix(ai): preserve uncertain investigation conclusions
Tool-call totals do not establish diagnostic sufficiency. Preserve seed-only
and failed-read conclusions, remove count-based completion instructions from
evidence, and retain configured limits and authority checks.

Keep findings grouped under alerts selectable in the shared review panel so
their investigations and access limits remain available to Assistant.
2026-09-06 02:47:55 +01:00
pulse-triage[bot] 32a0d40d2d Merge candidate 20260906T004518Z-web-product
Change-source: pulse-maintainer
2026-09-06 02:03:03 +01:00
pulse-triage[bot] d04f368f6f fix(alerts): allow overview health refresh after recovery outage
Retry or Dismiss can succeed while the subsequent health request fails. Offer the existing refresh action when overview health is unavailable so users can verify recovery in place. Two regression cases fail without the fix; 24 focused tests pass with it. API mocks do not qualify installed notification delivery.

Change-source: pulse-maintainer
2026-09-06 01:55:06 +01:00
rcourtman c5d2f56dda fix(ai): preserve diagnostic evidence and proposal boundaries
Keep canonical disk risk, source freshness and retained history intact when
Assistant and Patrol gather evidence. Proposal acceptance validates an action
contract and must not rewrite uncertain conclusions as established root cause.

Preserve complete subscription tool batches without exposing routing envelopes
as answers. Keep wide answer tables readable and keyboard-scrollable on mobile.
Optimize retained tier reconciliation without discarding gaps or newer samples.

Record failed real-model diagnoses and outstanding autonomous qualification
separately from passing data-path and interface checks.
2026-09-06 01:54:28 +01:00
pulse-triage[bot] da5be2db15 fix(alerts): preserve storage override identity during config reload
Retain storage policy aliases in durable metric and forecast metadata and use them during active-alert re-evaluation. Recover exact legacy PBS aliases from the recorded instance and datastore identity. Prevent a configuration reload from fabricating recovery against global defaults after restart.

Change-source: pulse-maintainer
2026-09-06 01:47:11 +01:00
pulse-triage[bot] 4a68f98602 Merge commit '3413b37940add4305f7b8f16369d37320799073f'
Change-source: pulse-maintainer
2026-09-06 01:01:28 +01:00
pulse-triage[bot] 3413b37940 fix(ci): include release trains in build and E2E triggers
PR #1921 targets release/v6.4 but receives only docs and boundary checks because build and E2E triggers still name the historical release branch. Include versioned release trains for push and pull request events without changing job gates or path filters. A focused regression fails all four event/workflow combinations before repair and passes after it.

Change-source: pulse-maintainer
2026-09-06 00:58:57 +01:00
pulse-triage[bot] 9d1b726da9 Fix stale notification health ownership with browser regression proof
Keep overlapping success, failure and loading completion owned by the latest started read. Retain caller and queue-action controls, subsystem contracts and exact-source scripted Chromium evidence. Installed delivery and release qualification remain separate.

Change-source: pulse-maintainer
2026-09-06 00:57:10 +01:00
pulse-triage[bot] 229d8668af Record disabled queued notifications as cancelled, not delivered
Distinguish policy skips from provider success so suppressed jobs do not create false sent rows or successful audit entries. Reconcile cancelled queue health after releasing alert gates, preserve real attempt history, and cover all three providers for firing/recovery and global/destination disablement.

Change-source: pulse-maintainer
2026-09-05 23:29:16 +01:00
pulse-triage[bot] f9b5f6254a Merge candidate 20260905T215524Z-core-runtime
Preserve the reviewed notification retry finality fix and its exact ancestry after incorporating the batch-start upstream main.

Change-source: pulse-maintainer
2026-09-05 23:15:23 +01:00
rcourtman 3a189f31d4 fix(metrics): reconcile retained history across storage tiers
Non-empty aggregate tiers hid recent raw samples and missing metric series.
Unify single and batch reads with indexed overlap resolution before
downsampling, and preserve recorded extrema through subsequent rollups.

Use canonical Proxmox storage coordinates in summaries and node history.
Discovery routing does not establish an installed Agent or agent history.

Record live evidence freshness and the remaining diagnosis qualification gaps.
2026-09-05 23:14:32 +01:00
pulse-triage[bot] fe273fc949 Prevent notification retries from replaying resolved alerts
Resolution only cancelled pending/sending rows, so retained failures could resurrect healthy incidents after operator retry and restart. Suppress terminal firing entries too, preserve unrelated grouped alerts and recovery jobs, and reconcile queue health after releasing locks. Reject stale per-item retries of cancelled or delivered rows. Regression tests reproduce both bypasses and retain failed-attempt history; focused race tests pass.

Change-source: pulse-maintainer
2026-09-05 23:11:02 +01:00
pulse-triage[bot] ce0c5a9795 Merge current upstream main before reliability proposal update
Incorporate the landed Patrol evidence-trust repair while preserving reviewed publication tip 6d6a776ef5 unchanged in ancestry.

Change-source: pulse-maintainer
2026-09-05 23:10:56 +01:00
pulse-triage[bot] 64e2da1e0c Merge commit '135abb541439882545e299abc1d68112fc42624e'
Change-source: pulse-maintainer
2026-09-05 22:43:20 +01:00
pulse-triage[bot] 1bb8643f1d Merge reviewed exact Helm public-package receipt
Preserve the delivery candidate commit and combine it with the already-integrated Patrol evidence repair.

Change-source: pulse-maintainer
2026-09-05 22:37:23 +01:00
rcourtman 5288b64d40 fix(patrol): preserve refusals and expose measured summary evidence
A provider policy refusal was classified as a connection failure, while
summary tools mixed high-utilisation heuristics with unchecked health claims.
Preserve explicit refusals before tool recovery and provide retained metrics
with source scope, observation timestamps and bucket extrema for diagnosis.

Record the live qualification limits and the shared temporal tier-query gap.
2026-09-05 22:29:48 +01:00
pulse-triage[bot] 135abb5414 fix(api): validate Docker update agent running health readback
Replacement identity alone could confirm an unhealthy or restarting container when no independent observer was available. Check agent-reported running state and health, retaining inconclusive truth for unknown health and preserving intentionally stopped updates. Seven regression cases cover these distinctions; the four unsafe cases failed before the repair. Execution and compensation history are unchanged.

Change-source: pulse-maintainer
2026-09-05 22:25:48 +01:00
pulse-triage[bot] b5784df4b7 fix(delivery): verify public Helm package against qualified bytes
Readable chart metadata does not prove that the public index serves the OCI-qualified package. Pull through the consumer repository and compare exact bytes before reporting convergence, with offline regression coverage for mismatched, missing and unavailable downloads. Activation and publication authority remain unchanged.

Change-source: pulse-maintainer
2026-09-05 22:24:18 +01:00
pulse-triage[bot] c5e0ade24e Merge current upstream main before reliability publication\n\nIncorporate the landed Patrol resource-evidence repair while preserving the exact reviewed publication tip and its ancestry.\n\nChange-source: pulse-maintainer
Change-source: pulse-maintainer
2026-09-05 22:23:58 +01:00
rcourtman 7e33b2d37c Merge pull request #1916 from rcourtman/fix/patrol-resource-evidence
Repair resource evidence and Patrol readiness gates
2026-09-05 22:16:14 +01:00
pulse-triage[bot] 88bf626d3a Merge pull request #1909 from rcourtman/maintainer/20260905T170325Z
Keep alerts accurate through outages, restarts, and genuine recovery
2026-09-05 22:03:23 +01:00
pulse-triage[bot] 6375d09a8b fix(runtime): reject contradicted Docker update readback
Independent update verification must match the replacement's reported state and reject unhealthy running observations, not just match container identity. Preserve intentionally stopped replacements and keep missing agent readback inconclusive. Reproduced stopped, restarting and unhealthy false confirmations before the fix; 19 focused API tests and three lifecycle replay tests pass. This does not establish the root cause of issue #1891.

Change-source: pulse-maintainer
2026-09-05 21:49:41 +01:00
rcourtman b7f546f81a Repair resource evidence for Patrol and Assistant
Real homelab investigations lost metrics behind mismatched resource IDs,
queried only post-restart memory, and filtered every physical disk out.
Resolve canonical metrics targets, use retained history, preserve CPU
topology and chronological samples, and separate disk operation and format.

Keep unattached resource shortcuts blocked while allowing named resources
to be resolved through query search. Report incomplete readiness honestly,
including saved evaluations, without granting Patrol suitability.
2026-09-05 21:43:02 +01:00
pulse-triage[bot] a8038a051a Merge remote-tracking branch 'origin/main'
Change-source: pulse-maintainer
2026-09-05 21:30:58 +01:00
pulse-triage[bot] 96bc6f084f fix(release): bind Helm application version to chart release
Reject mismatched image defaults before packaging; preserve equal and default versions. Reproduced four accepted mismatches before the fix. All 58 focused tests pass; no publication performed.

Change-source: pulse-maintainer
2026-09-05 21:13:23 +01:00
pulse-triage[bot] 7c373a5162 fix(release): reject draft Helm chart publication retries
Reproduce draft and unknown publication states reaching the Pages index boundary. Require an explicitly non-draft existing release before uploading, editing or advertising its chart, without implicitly publishing operator drafts.

Exercise the actual publication shell with a fake GitHub CLI and wire its seven retry tests into canonical governance. Existing digest and maturity behaviour remains covered.

Change-source: pulse-maintainer
2026-09-05 20:55:01 +01:00
rcourtman 3e8dbb8276 Preserve investigation evidence and Proxmox temperatures
Real homelab evaluation exposed missing node sensor observations and loss of
recent tool evidence before the model reached its conclusion. Project both
canonical sensor sources and retain observations while context fits.

Add source and selection regressions plus a multi-turn retention proof.
Record the live diagnosis result and the unresolved Patrol provider block.
2026-09-05 20:47:38 +01:00
pulse-triage[bot] d79ee6449f Merge remote-tracking branch 'origin/main'
Change-source: pulse-maintainer
2026-09-05 20:35:05 +01:00
pulse-triage[bot] 3f0dbd514f Merge commit '49b998a2517bd5c8a76aca43fa222d8c72d0cc6a'
Change-source: pulse-maintainer
2026-09-05 20:12:17 +01:00
pulse-triage[bot] 829be07d3c Merge remote-tracking branch 'origin/main'
Change-source: pulse-maintainer

# Conflicts:
#	docs/release-control/v6/internal/subsystems/frontend-primitives.md
#	frontend-modern/browser-verification.json
2026-09-05 20:06:58 +01:00
pulse-triage[bot] 49b998a251 fix(alerts): recover storage incidents on confirmed empty capacity
A zero usage observation was skipped even when positive total capacity, zero used bytes and matching free bytes confirmed an empty store. Allow that consistent observation through the existing capacity lifecycle without treating absent counters or offline storage as recovery.

Reproduced the retained incident before the fix. Added six lifecycle cases and a local production-callback/webhook test for missing capacity, correlated zero recovery, history and duplicate avoidance. Focused storage/capacity tests, repeated webhook tests and race-enabled storage/PBS lifecycle checks pass. This is not installed-artifact qualification.

Change-source: pulse-maintainer
2026-09-05 20:06:03 +01:00
rcourtman 9316507df0 Preserve Patrol finding volume beyond the history cap
New-finding telemetry lost older activity once the run history reached its
100-entry cap. Persist a bounded daily finding tally with a separate
upgrade cursor, preserving run counts while backfilling retained findings.

Cover restart, repeated saves, upgrade, read failure and UTC-day retention.
Record the measurement boundary and retire the resolved coverage gap.
2026-09-05 19:48:49 +01:00
pulse-triage[bot] 57cb1a83bf fix(alerts): report clearing observation in metric recovery
Receiver-level PBS lifecycle checks reproduced resolved payloads retaining 50% firing usage after measurements fell to 9.765625% or zero. Clone and refresh the canonical metric snapshot before recording recovery so resolved callbacks and recent history carry the clearing value, message and observation time without changing incident identity.

Validated both PBS cases with three repeated integration runs and a race-enabled run, plus focused canonical metric, history, missing telemetry, resolved notification, receipt and queue restart tests. This is local synthetic receiver proof, not installed or off-host qualification.

Change-source: pulse-maintainer
2026-09-05 19:41:25 +01:00
rcourtman d223ba0262 Start scoped explanations from Patrol and alert actions
Explain actions previously opened a blank conversation and discarded richer
finding context. Dispatch the selected explanation through shared chat
handling, retain evidence and drafts, and cancel pending work on tenant
switches. Keep unrelated workflow starters out of scoped conversations.

Record the remaining real-model and customer-outcome qualification gap
without treating scripted browser responses as proof of product value.
2026-09-05 19:13:11 +01:00
pulse-triage[bot] 6cd22b2e03 Merge commit '537c7ae9a50025efbf7963cdf7e544f42cbf0f7e'
Change-source: pulse-maintainer
2026-09-05 18:35:14 +01:00