Commit Graph

10301 Commits

Author SHA1 Message Date
pulse-triage[bot] 041ca09531 Merge pull request #1919 from rcourtman/maintainer/20260905T220513Z-release-v6.4
Stop v6.4 from confirming unhealthy Docker updates
2026-09-05 23:24:52 +01:00
pulse-triage[bot] 80a5c50e13 fix(runtime): backport truthful Docker update verification
Backport 6375d09a8b. Candidate f64fbb8b7 reproduced six false independent confirmations before repair; focused Docker result/executor and receipt reconciliation tests pass afterwards. Preserve stopped updates and execution history. This does not resolve issue #1891 or qualify an installed artifact.

Change-source: pulse-maintainer
2026-09-05 22:23:01 +01:00
pulse-triage[bot] f64fbb8b7f Merge pull request #1915 from rcourtman/maintainer/20260905T201236Z-release-v6.4
Keep v6.4 storage alerts active until genuine recovery
2026-09-05 22:03:38 +01:00
pulse-triage[bot] af4edae81c fix(alerts): backport truthful storage recovery
Backport production fixes 57cb1a83bf and 49b998a251, with restart coverage from 49928385ba. Adapt PBS webhook assertions to the release-line nonzero recovery fixture.

On candidate 6558b2d106, reproduced confirmed-empty storage retaining its incident; applying only the storage guard then reproduced stale recovery content. Both fixes pass focused alert checks and three race-enabled repetitions across alerts and monitoring. Local synthetic receiver and orderly restart evidence only; no installed qualification.

Change-source: pulse-maintainer
2026-09-05 20:39:34 +01:00
pulse-triage[bot] 6558b2d106 Merge pull request #1910 from rcourtman/maintainer/20260905T170325Z-release-v6.4
Keep PBS alerts active when status telemetry disappears
2026-09-05 18:52:25 +01:00
pulse-triage[bot] 699344bc32 fix(pbs): backport absent-status recovery protection
Backport of 31f1f1933a, adapted to release/v6.4 client tests. Reproduced absent envelopes returning zero metrics and the null-status poller availability failure on candidate base 239ee0f9da before applying the production fix. Focused client and lifecycle race checks pass three repetitions. No installed qualification claimed.

Change-source: pulse-maintainer
2026-09-05 17:57:50 +01:00
pulse-triage[bot] 239ee0f9da test(monitoring): verify PBS partial metrics through webhook delivery
Callback-only PBS lifecycle coverage cannot detect broken monitor wiring or notification queue delivery. Exercise the real poller and production callbacks through a local receiver, requiring a successful firing audit before recovery and retaining incident identity during node endpoint failures.

Change-source: pulse-maintainer
(cherry picked from commit a815f8bb02)
2026-09-05 17:46:06 +01:00
pulse-triage[bot] 1b2507e9d8 test(alerts): preserve PBS incidents and recovery history across restart
Exercise real threshold incidents with SQLite active state across two manager restarts. Missing metrics retain identity without recovery; measured zero resolves each incident once and durable history survives. Disabling the availability guard makes the regression fail.

Change-source: pulse-maintainer
(cherry picked from commit fe563325c2)
2026-09-05 17:31:41 +01:00
pulse-triage[bot] 7a5b535a43 fix(pbs): backport missing-metric alert recovery protection
Backport 2b78867cae with the PBS HTTP fixture and connectivity characterisation from a01efeed6b. Exclude unrelated main-line security-status documentation.

Release-line reproduction on 369e7f339e: node-status denial falsely resolves active memory utilisation. Retain active metric alerts until a valid sample arrives; connectivity and policy suppression remain independent.

Validation: go test -race ./internal/alerts ./internal/models ./internal/monitoring -run 'Test.*PBS' -count=3 passes. Installed destination delivery and restart persistence remain unqualified.

Change-source: pulse-maintainer
2026-09-05 17:17:56 +01:00
pulse-triage[bot] 369e7f339e Merge commit 'e106c04d2ed08d0846b3a5e5f91c669971583c33' into release/v6.4
Change-source: pulse-maintainer
2026-09-05 16:26:26 +01:00
pulse-triage[bot] d3773c4296 Merge remote-tracking branch 'origin/release/v6.4' into release/v6.4
Change-source: pulse-maintainer
2026-09-05 16:26:26 +01:00
pulse-triage[bot] e106c04d2e fix(pbs): backport typed backup cache error classification
Reproduced on release base 11539a8059: HTTP 502 quoting API error 403 and HTTP 503 quoting API error 404 discarded cached backups. Both now preserve inventory; genuine 401/403/404 remain terminal.

Backport of c3b28f4557, including substantive monitoring contract and verification documentation. Adapt client test rename to the three existing callers; no unrelated mainline tests imported.

Validation: focused monitoring and PBS client tests passed with -race -count=3. No installed candidate, notification delivery or soak claim.

Change-source: pulse-maintainer
2026-09-05 16:22:20 +01:00
pulse-triage[bot] ba0747879e Merge pull request #1908 from rcourtman/maintainer/20260905T140306Z-release-v6.4
Guard v6.4 CPU reporting across unequal polling windows
2026-09-05 15:37:26 +01:00
pulse-triage[bot] 11539a8059 Merge commit 'b90f2ee6e2cbc0d26e3405c7f1049b607dab8474'
Change-source: pulse-maintainer
2026-09-05 15:23:57 +01:00
pulse-triage[bot] b90f2ee6e2 test(web): separate reconnect hydration admission fixtures
Protect the existing #1899 release-line regression backport with independent hydration and resource-snapshot signals. Both boundary cases reject a mutation to general hydration; 88 focused tests pass. No runtime change.

Change-source: pulse-maintainer
2026-09-05 15:17:33 +01:00
pulse-triage[bot] c64c66d28a Merge upstream release/v6.4 publication
Incorporate GitHub's merge of the prior reviewed CPU routing guard while
preserving the exact unequal-window regression backport and its ancestry.

Change-source: pulse-maintainer
2026-09-05 15:06:04 +01:00
pulse-triage[bot] bd2b6d8619 Merge pull request #1906 from rcourtman/maintainer/20260905T110331Z-release-v6.4
Protect the v6.4 CPU fix across every collector
2026-09-05 13:22:31 +01:00
pulse-triage[bot] c1c4286fcd test: qualify unequal CPU reporting windows and collector replacement
Equal-cadence CPU regression checks can miss a shared cached percentage because both reporting loops expect the same average. Add unequal host and Docker intervals and replace the Docker collector to guard independent baseline ownership without resetting the host loop. This protects the existing issue #1894 repair; synthetic coverage does not establish installed-agent qualification or reporter resolution.

Contract-Neutral: regression-test coverage only; no runtime behaviour or product surface changes.
Change-source: pulse-maintainer
(cherry picked from commit fc80229b1b)
2026-09-05 12:50:54 +01:00
pulse-triage[bot] 002ddee851 test(dockeragent): protect CPU baseline routing across modules
Issue #1894 exposed CPU sampling interference between host and Docker reporting loops. Existing tests cover independent collectors and host routing but do not exercise Docker's production dependency entry points.

Interleave the real host, Docker and package-level collectors over synthetic procfs counters. Alternate Docker's include and no-include paths and require each loop to retain a full-interval 5 percent baseline. Production behaviour is unchanged.

Validation: focused test passed; reverting either Docker route to the package-level collector made it fail. After restoration, three focused CPU tests passed with -race -count=3 across dockeragent, hostagent and hostmetrics. git diff --check passed.

Change-source: pulse-maintainer
2026-09-05 11:57:27 +01:00
pulse-triage[bot] 2a926cddcf Merge pull request #1905 from rcourtman/maintainer/20260905T100105Z-release-v6.4
Protect PBS history through rebuilds and restarts
2026-09-05 11:38:02 +01:00
pulse-triage[bot] 141d578535 test(monitoring): backport PBS observation lifecycle regression coverage
Backport-of: c590a01f33

Protect the existing release-line repair d33f81709e for candidate regression #1882 across repeated registry rebuilds and SQLite close/reopen. No runtime or product scope change.

Validation: focused test passes; restoring rebuild timestamps fails with 18 samples instead of 3; lifecycle and canonical-storage tests pass three race repetitions.

Contract-Neutral: regression coverage for existing observation-time behaviour.

Change-source: pulse-maintainer
2026-09-05 10:13:41 +01:00
pulse-triage[bot] e04291d5fa Merge pull request #1903 from rcourtman/maintainer/20260905T080159Z-release-v6.4
Keep v6.4 alerts and navigation reliable through reconnects
2026-09-05 09:22:23 +01:00
pulse-triage[bot] fba4c0f5f3 Merge current upstream release/v6.4 after PR #1902 integration
Preserve the reviewed reconnect navigation backport while incorporating the canonical merge of the critical-transition alert repair.

Change-source: pulse-maintainer
2026-09-05 06:03:56 +01:00
pulse-triage[bot] d8f2c99163 Merge pull request #1902 from rcourtman/maintainer/20260905T040121Z-release-v6.4
Notify when provider incidents become critical
2026-09-05 06:02:18 +01:00
pulse-triage[bot] 09156b2d84 fix(web): backport reconnect navigation admission regression
Backport-of: 672a497076 (runtime, tests and matching contracts; fresh release-line browser receipt).

Reproduced alert-only admission failure on 2c4b27fc4b. 87 focused tests, three isolated Chromium checks and three focused alert race repetitions pass. Published artifact qualification and restarted patch soak remain outstanding.

Change-source: pulse-maintainer
2026-09-05 05:09:33 +01:00
pulse-triage[bot] 2c4b27fc4b Merge upstream release/v6.4 after PR #1901 integration
Change-source: pulse-maintainer
2026-09-05 04:56:15 +01:00
pulse-triage[bot] 74eb3487d9 Merge pull request #1901 from rcourtman/maintainer/20260905T030322Z-release-v6.4
Preserve TrueNAS emergency alerts on the v6.4 patch line
2026-09-05 04:38:41 +01:00
pulse-triage[bot] 096d1a6170 fix(alerts): backport provider critical transition dispatch
Reproduced on release candidate 7f44ccd047: WARNING to EMERGENCY retained severity but dispatched only once instead of twice. Backport the existing delivery repair and acknowledgement/rate-budget lifecycle regression coverage; no new product scope.

Backport-of: 4752d5b4b7 (code and tests), b116d05592

Validation: five focused race repetitions passed; pre-fix active transition failed. Appliance/provider receipt and restarted candidate soak remain outstanding.

Change-source: pulse-maintainer
2026-09-05 04:13:33 +01:00
pulse-triage[bot] 7f44ccd047 Merge current upstream release/v6.4 for publication
Change-source: pulse-maintainer
2026-09-05 04:05:20 +01:00
pulse-triage[bot] 31c939b3ef Merge pull request #1897 from rcourtman/maintainer/20260905T010422Z-release-v6.4
Prevent false storage alerts on the v6.4 patch line
2026-09-05 02:56:32 +01:00
pulse-triage[bot] d40d5206d0 fix(truenas): backport emergency incident retention
Backport runtime mapping and regression tests from 65a024b3d3. Candidate v6.4.3-rc.1 and stable v6.4.1 omit the documented EMERGENCY severity. Include release-line monitoring and unified-resource contracts for the repaired projection and recovery boundary.

Reproduced omitted projection, zero notification callbacks and false recovery before the fix. Affected package suites and focused race tests passed in the initial turn. Appliance and external-provider receipt remain unqualified.

Change-source: pulse-maintainer
2026-09-05 02:31:06 +01:00
pulse-triage[bot] d01a3ec423 test(alerts): cover TrueNAS escalation and interrupted recovery
The INFO and NOTICE repairs need lifecycle coverage beyond isolated severity transitions. Verify that escalation retains identity and that renewed actionable evidence interrupts recovery, preventing a later single INFO observation from clearing the incident.

Change-source: pulse-maintainer
(cherry picked from commit 62c66d2a48)
2026-09-05 02:06:04 +01:00
pulse-triage[bot] 2a7d8e242f fix(alerts): preserve actionable TrueNAS NOTICE incidents
Correct the INFO backport so native TrueNAS NOTICE remains actionable while retaining informational canonical severity. Preserve the provider level as optional evidence and pin projection, JSON compatibility, alert activation, and confirmed recovery boundaries.

Adapted from ff1d010dd9 for release/v6.4.

Change-source: pulse-maintainer
2026-09-05 01:46:02 +01:00
pulse-triage[bot] 059328e386 fix(alerts): keep TrueNAS information out of actionable incidents
Issue #1892 reports successful replication information requiring acknowledgement. Preserve provider information on resources while excluding TrueNAS INFO-level conditions from active alert synchronisation. Warning conditions still activate and clear when downgraded to information.

Resource-incident timeline events contain numeric placeholders, not threshold evidence. Avoid displaying these as a fictitious 0 >= 0 trigger while retaining numeric metric formatting. Focused regressions reproduce both failures and pass with these changes.

Change-source: pulse-maintainer
(cherry picked from commit 7726539f83)
2026-09-05 01:41:12 +01:00
pulse-triage[bot] d5b4c86a9a fix(truenas): recognise finished replication outcomes (#1892)
TrueNAS emits FINISHED for successful replication, but the recovery mapper treated it as unknown. Recognise that provider state while preserving error precedence and the missing-run guard; add regression coverage reproducing the reported outcome.

Change-source: pulse-maintainer
(cherry picked from commit 62c6e07477)
2026-09-05 01:41:12 +01:00
pulse-triage[bot] dc54789eb9 fix(unraid): suppress parity warning for explicit pool-only arrays
Issue #1895 reports parity alerts when mdNumDisks=0 on a pool-only Unraid system. Array service state alone does not establish that a parity array exists.

Preserve the optional disk count from collection through canonical runtime conversion and suppress only the no-parity warning for an explicit zero. Missing or malformed counts retain legacy behaviour, and disk failure reasons remain active.

Validated focused Unraid tests in hostagent, storagehealth, monitoring, unifiedresources and alerts, including JSON zero preservation and canonical round trip. The new pool-only regression fails against the previous warning condition. Both agent and server need this change; no release or reporter retest is claimed.

Change-source: pulse-maintainer
(cherry picked from commit 3334cccfd9)
2026-09-05 01:04:09 +01:00
pulse-triage[bot] ac44f232e6 Isolate host and Docker CPU sampling baselines (#1894)
Near-synchronous host and Docker reports consumed a shared CPU baseline, measuring collection bursts rather than each module's reporting interval. Retain a collector per host collector and a separate Docker module collector while preserving the package-level convenience API and disk filters.

Add an interleaved-counter regression covering both collection entry points. It fails when routed through the shared baseline and passes with isolated state. All hostmetrics, hostagent and dockeragent tests pass, as do the focused CPU regression tests under the race detector.

Change-source: pulse-maintainer
(cherry picked from commit 0f972f42f2)
2026-09-04 22:56:45 +01:00
pulse-triage[bot] 657211f056 Fix portable root ownership for installer lifecycle state
Issue #1890 reports macOS agent updates stopping because the root group does not exist. Use numeric superuser ownership in the two shared lifecycle writes without relaxing failure handling or the least-privilege group boundary. Add a regression fixture that rejects named root ownership and checks that chown failures still prevent replacement.

Change-source: pulse-maintainer
(cherry picked from commit 19c2b6a925)
2026-09-04 22:46:06 +01:00
pulse-triage[bot] c4593e8bce Adapt release-line fallback fixture to verified assets
The release line carries an additional oversized-metadata regression fixture. Model its published archive HEAD response so the backported existence check retains coverage without treating that fixture as a deleted release.

Refs: #1881

Contract-Neutral: backport test adaptation only

Change-source: pulse-maintainer
2026-09-04 22:27:14 +01:00
pulse-triage[bot] f62a80aac7 Verify feed fallback release assets
GitHub's Atom feed can retain entries for deleted releases. Probe the deterministic runtime archive without following redirects before exposing a feed candidate, and continue to the next published version when the candidate is stale. Keep custom update servers from falling through to the public feed on a 403.

Contract-Neutral: Update discovery validation only; no wire, persisted-data, or subsystem contract change
Refs: #1881
Change-source: pulse-maintainer
(cherry picked from commit 3193db66b0)
2026-09-04 22:26:02 +01:00
pulse-triage[bot] a867dd8d0e Fall back when release metadata exceeds bounds
GitHub's release list now exceeds the update check's 1 MiB safety limit,
causing valid installations to report that updates are unavailable. Keep the
bound and use the existing bounded Atom feed only for the typed over-limit
condition so malformed metadata remains a hard error.

Accept both release-name and bare-tag feed entries, and do not substitute the
public GitHub feed for a configured custom update server.

Contract-Neutral: Update discovery error handling only; no wire, persisted-data, or subsystem contract change
Refs: #1881
Change-source: pulse-maintainer
(cherry picked from commit a186bd205e)
2026-09-04 22:26:02 +01:00
pulse-triage[bot] f27d5b4620 Merge release/v6.4 backport candidate for coordination
Change-source: pulse-maintainer
2026-09-04 11:50:02 +01:00
pulse-triage[bot] 1656428982 Keep explicitly included tmpfs mounts distinct
Operators can explicitly select tmpfs paths that automatic filesystem
filtering would otherwise hide. Multiple such mounts commonly share both the
generic tmpfs device name and capacity, so applying normal storage
deduplication to them silently dropped configured disks from collection.

Limit device-and-capacity deduplication to normally visible storage while
preserving it for NAS bind mounts and subvolumes.

Change-source: issue #1875
2026-09-04 11:29:27 +01:00
pulse-triage[bot] f60d162e64 Merge current release/v6.4 telemetry guard
Incorporate the upstream test-telemetry protection without rewriting the reviewed local backport tip.

Change-source: pulse-maintainer
2026-09-04 11:08:00 +01:00
Richard Courtman 85c37443a6 Stop test binaries reporting to the production telemetry endpoint
Backport of the main-branch guard. pkg/server tests boot the real server
through Run() with the version literal "test-version", which normalizes to
0.0.0-test-version, and each test runs against its own t.TempDir(), so
every run mints a fresh install ID. The service-health failure reporter
sends synchronously from a deferred handler as soon as Run() returns an
error, so any test exercising a startup failure posts one ping.

This line still emitted after main was fixed: release-line lane work runs
pkg/server tests on this branch, and those pings arrive with the old
version classifier too, so they land mislabelled as ordinary prereleases
and re-contaminate install-population reads that were just corrected.

send() now refuses the production endpoint whenever testing.Testing()
reports true. The check compares against productionPingEndpoint, so
telemetry's own tests keep asserting on ping content through a redirected
endpoint. Verified on this branch: three runs of the failing-startup
tests, zero pings received.
2026-09-04 10:58:31 +01:00
rcourtman 142c49f8f2 Merge pull request #1887 from rcourtman/claude/telemetry-guard-backport-v6.4
Stop test binaries reporting to the production telemetry endpoint
2026-09-04 10:10:02 +01:00
Richard Courtman 0c788079d0 Stop test binaries reporting to the production telemetry endpoint
Backport of the main-branch guard. pkg/server tests boot the real server
through Run() with the version literal "test-version", which normalizes to
0.0.0-test-version, and each test runs against its own t.TempDir(), so
every run mints a fresh install ID. The service-health failure reporter
sends synchronously from a deferred handler as soon as Run() returns an
error, so any test exercising a startup failure posts one ping.

This line still emitted after main was fixed: release-line lane work runs
pkg/server tests on this branch, and those pings arrive with the old
version classifier too, so they land mislabelled as ordinary prereleases
and re-contaminate install-population reads that were just corrected.

send() now refuses the production endpoint whenever testing.Testing()
reports true. The check compares against productionPingEndpoint, so
telemetry's own tests keep asserting on ping content through a redirected
endpoint. Verified on this branch: three runs of the failing-startup
tests, zero pings received.
2026-09-04 10:07:27 +01:00
pulse-triage[bot] d33f81709e Keep PBS metric writes tied to observations
Canonical registry rebuilds can run several times between PBS polls. Reuse the metric source sighting time so unchanged datastore capacity does not create a fresh raw sample on every rebuild.

Contract-Neutral: behavioral regression fix; metric contract and agent lifecycle boundaries unchanged
Change-source: pulse-maintainer
2026-09-04 10:01:56 +01:00
pulse-triage[bot] 9f3beb1718 Raise Go crypto security floor
Exclude the SSH connection deadlock advisories published against x/crypto versions before v0.56.0.

Contract-Neutral: dependency-only security floor update; no runtime contract changed
Change-source: pulse-maintainer
2026-09-04 10:01:55 +01:00
pulse-triage[bot] adf9e7c765 Fall back when GitHub release metadata outgrows cap
GitHub's releases API response now exceeds the updater's 1 MiB
metadata limit. This causes v6.4.3-rc.1 update checks to fail even
though the releases Atom feed remains bounded.

Retain the safety cap and use the existing bounded Atom path only for
the default GitHub source. Custom update servers remain fail-closed.

Contract-Neutral: update-source recovery fix only; no public contract change
Change-source: pulse-maintainer
2026-09-04 08:02:06 +01:00