Commit Graph

11384 Commits

Author SHA1 Message Date
pulse-triage[bot] 76f96f9906 chore(frontend): refresh browser receipt base to the integration merge
The cumulative browser guard matches the receipt at the integration tip against the tip parent. Re-point base_sha from the candidate tip parent e9a426aeeb to the integration merge a3ad75e78b so the content-addressed receipt for the two frontend sources is accepted.

Change-source: pulse-maintainer
2026-09-22 10:28:06 +01:00
pulse-triage[bot] a3ad75e78b Merge reviewed candidate 20260922T083537Z-web-product (pulse 98cab1a8bd)
Integrates the web-product candidate: #2119 alert-card footer alignment (41fa79d52b) and #1723 PBS host-history correlation across guest and agent rows (e9a426aeeb), with the cumulative browser receipt at 98cab1a8bd. Preflight passed; base efeac6cb72.

Change-source: pulse-maintainer
2026-09-22 10:27:48 +01:00
pulse-triage[bot] e4382af24f Merge pull request #2152 from rcourtman/maintainer/20260922T082007Z
Fix spurious PBS backup alerts and Proxmox LXC memory; qualify release-line RCs
2026-09-22 08:51:44 +00:00
pulse-triage[bot] 98cab1a8bd test(frontend): rebind the candidate browser receipt to both surfaces
The cumulative candidate browser guard compares the receipt at the tip against every user-visible frontend source changed since the candidate base. This candidate carries two: the #2119 alert-card footer class and the #1723 PBS host-history correlation. Record both content-addressed sources, the union of the two offline proof matrices, and re-point base_sha at the tip parent so the guard can match the candidate.

Change-source: pulse-maintainer
2026-09-22 09:49:38 +01:00
pulse-triage[bot] e9a426aeeb fix(web): correlate PBS host history across guest and agent rows (#1723)
A standalone source=pbs host row and the PVE guest carrying the same agent are one machine. Collapse correlation candidates that share an agent identity and prefer the guest metrics target, whose persisted host series the Backups drawer renders; the PBS service target names the service key and has no host history. Distinct agent identities, or rows without a provable identity, still decline to choose so the drawer cannot substitute an unrelated host. Re-compose the reviewed runtime change with its three subsystem contracts, offline browser fixture, check script and a content-addressed browser receipt in one governed commit.

Change-source: pulse-maintainer
2026-09-22 09:43:00 +01:00
pulse-triage[bot] c3213510e6 Merge the #2119 alert-card footer repair (41fa79d52b)
Change-source: pulse-maintainer
2026-09-22 09:42:04 +01:00
pulse-triage[bot] d6e79593ec Merge pull request #2151 from rcourtman/dependabot/docker_compose/tests/integration/alpine-3.24
Bump alpine from 3.24 to 3.24 in /tests/integration
2026-09-22 09:38:18 +01:00
pulse-triage[bot] efeac6cb72 Merge reviewed candidate 20260922T074002Z-delivery-trust (pulse d5de3e26fc)
Change-source: pulse-maintainer
2026-09-22 09:12:22 +01:00
pulse-triage[bot] e9ace60929 chore(governance): register the #2148 LXC memory completion pair
Register 8b56fc72e4 with its contract-completion commit so canonical governance evaluates the reviewed Proxmox LXC linked-agent memory runtime change and its monitoring and unified-resources contract sections as one historical unit.

Change-source: pulse-maintainer
2026-09-22 08:46:39 +01:00
pulse-triage[bot] 1026f5293b docs(monitoring): record #2148 LXC linked-agent-memory contracts
Complete the #2148 runtime change with the monitoring and unified-resources contract sections its canonical subsystem paths require, so the combined change satisfies the canonical completion guard without rewriting reviewed history.

Change-source: pulse-maintainer
2026-09-22 08:46:29 +01:00
pulse-triage[bot] bf3fecc16d Merge commit '8b56fc72e4ee79f3c219cf51f4c002e2e9343286' into maintainer-async/20260922T074019Z-core-runtime/pulse
Change-source: pulse-maintainer
2026-09-22 08:46:14 +01:00
pulse-triage[bot] 50405af743 fix(alerts): skip backup-age alerts for PBS host backups (#2136)
A PBS host/config backup (backup-type host) is keyed by the node name, not a guest VMID, so CheckBackupsWithInventory raised a guest backup-age alert under a node-named subject (for example 'nas backup via proxmox-pbs') that never advanced while the node's guests were backed up, notifying repeatedly. Skip backup-age alerts for PBS subjects with no guest VMID: they are host/config backups, not guest workloads, and the Backups overview already keeps them out of guest coverage. PVE host backups already produce no subject and no alert, restoring consistency. Genuine orphaned PBS guest backups (numeric VMID) and PMG node backups still alert. The recovery point and rollup are retained, so inventory and artifact display are unchanged; only the spurious alert is cleared. Includes the alerts subsystem contract record and the regression tests.

Change-source: pulse-maintainer
2026-09-22 08:01:27 +01:00
dependabot[bot] fb73cce5c1 Bump alpine from 3.24 to 3.24 in /tests/integration
Bumps alpine from 3.24 to 3.24.

---
updated-dependencies:
- dependency-name: alpine
  dependency-version: '3.24'
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-22 03:43:48 +00:00
pulse-triage[bot] d5de3e26fc fix(release-control): qualify release-line RCs against their own branch
The secure-runtime RC qualification workflow (commit 79d87a4a2c) resolves the branch the control plane maps the version to and passes it as --main-ref, but secure_runtime_attestation_v6.verify_canonical_main_identity still required origin/main and required the candidate to be an ancestor of origin/main. Every release-train candidate therefore failed the pre-authentication step before any check ran; v6.4.5-rc.1 failed at 'Pre-authenticate exact qualification packet' with 'committed-main classification requires canonical origin/main' (run 35680955017), and all three historical runs failed.

Accept exactly origin/main or the release train's origin/release/vX.Y, verify the ref against the canonical origin's live branch tip, and check candidate ancestry against that same ref. The release-candidate classification is unchanged. Update the deployment-installability contract and the v6 unit tests, including a mapped-release-branch acceptance case.

Change-source: pulse-maintainer
2026-09-22 04:28:39 +01:00
pulse-triage[bot] 8b56fc72e4 fix(monitoring): prefer linked agent memory for Proxmox LXC
Extend the #1962 linked-agent memory fallback to Proxmox LXC containers (#2148). A correlated online Pulse agent running inside a container now supplies the container's memory metric instead of the cache-inclusive cluster/resources fallback, which can badly under-report shared-memory workloads. The agent sample is only trusted when its total matches the container's configured limit, so an agent without lxcfs cannot leak host memory into the guest row. Threads the previous-guest agent map through the efficient and node-by-node container builders and reads agent-owned memory from merged ContainerView resources.

Change-source: pulse-maintainer
2026-09-21 23:24:33 +01:00
rcourtman dd93eeb6b4 Merge pull request #2147 from rcourtman/fix/patrol-objective-recovery
Recover saved Patrol objectives without observers
2026-09-21 17:50:27 +01:00
rcourtman 2856bd16b3 Recover saved Patrol objectives without observers
Saved objectives could remain uncovered indefinitely after their in-memory
setup trigger was lost or rejected. Reconcile missing or invalidated
observers from retained intent and recheck its revision at run admission.

Persist attempt timing before provider work so restart and history pruning
cannot erase pacing. Keep coverage dependent on actual observer validation,
installation and health evidence.

Support case patrol-objective-recovery.
2026-09-21 17:18:32 +01:00
pulse-triage[bot] 41fa79d52b fix(alerts): align the Started run with the alert-card footer (#2119)
The Alerts overview alert-card footer is an items-center flex row whose first child, the Started timestamp, carried its own mt-1. Under items-center that margin shifted the Started run 2px below the adjacent delivery-status run, which is the small text misalignment the reporter underlined in #2119. Remove the child margin; the footer row already carries the top margin, so the two runs share a baseline.

Add a presentation regression test and an offline browser proof that measures the text rects of both runs at desktop and narrow widths.

Contract-Neutral: Behavioral footer-alignment fix; no public-contract or subsystem-shape delta.
Change-source: pulse-maintainer
2026-09-21 14:31:27 +01:00
pulse-triage[bot] eb47a4e653 Merge pull request #2144 from rcourtman/maintainer/20260921T112617Z
Fix node Verify SSL setting reverting after re-registration (#2140)
2026-09-21 12:14:14 +00:00
pulse-triage[bot] adc68cb7a6 Merge reviewed candidate 20260921T104103Z-core-runtime (pulse 10d672c5fa)
Preserve an operator's Verify SSL choice across PVE consolidation and canonical auto-registration (#2140).

Change-source: pulse-maintainer
2026-09-21 12:23:57 +01:00
pulse-triage[bot] 10d672c5fa chore(release-control): register #2140 completion pairs
Register the two #2140 runtime commits with their contract and proof completion commit so the canonical completion guard evaluates each runtime change together with the follow-up that records its contracts and verification artifacts, as one reviewed unit. Registry-only change; no runtime behaviour.

Change-source: pulse-maintainer
2026-09-21 11:55:03 +01:00
pulse-triage[bot] 9fa81dee8f docs(release-control): complete #2140 TLS-preservation contracts
Record the #2140 node TLS-preference fix in the contracts its runtime commits touch: agent-lifecycle, api-contracts, security-privacy and the dependent storage-recovery contract, with the node API payload and persisted-field proofs in internal/api/contract_test.go and internal/config/config_load_test.go. The canonical completion history registers these contract and proof files as the completion of the auto-register and consolidation runtime commits.

Change-source: pulse-maintainer
2026-09-21 11:54:39 +01:00
pulse-triage[bot] fd00e62cde Merge pull request #2141 from rcourtman/maintainer/20260921T100425Z
Ship reviewed frontend dependency security updates
2026-09-21 10:49:03 +00:00
pulse-triage[bot] 919009d767 fix(config): honour explicit operator VerifySSL across PVE merge
ConsolidatePVEInstances promoted VerifySSL false->true whenever a merged duplicate or standalone had it enabled, silently re-enabling a disabled Verify SSL certificate setting on every save, load and monitor reconciliation (#2140). The add and update handlers now record an explicit operator choice in VerifySSLExplicit; a merge never overrides it, while the historical promotion is kept when neither side recorded a choice so an existing secure connection is not downgraded. A merged fingerprint still pins the peer.

Regression tests cover the standalone and duplicate-cluster merges and the reported PUT-save path through normalizePVEConfigState.

Change-source: pulse-maintainer
2026-09-21 11:47:26 +01:00
pulse-triage[bot] 10ad85e0cf fix(config): keep operator VerifySSL across PVE consolidation
ConsolidatePVEInstances promoted VerifySSL false->true when folding a duplicate cluster or overlapping standalone into the canonical instance, silently re-enabling a disabled Verify SSL certificate setting on every save, load and monitor reconciliation (#2140). The canonical instance now owns the preference; a merged fingerprint still pins the peer, so verification is not downgraded.

Regression tests cover the standalone and duplicate-cluster merges and the reported PUT-save path through normalizePVEConfigState.

Change-source: pulse-maintainer
2026-09-21 11:43:51 +01:00
pulse-triage[bot] a211d2ea17 docs(release-control): complete #2140 TLS-preservation contracts
Record the canonical-shape completion for the auto-register VerifySSL preservation in the agent-lifecycle contract and its api-contracts and storage-recovery dependents, so the runtime change is documented in the same candidate.

Change-source: pulse-maintainer
2026-09-21 11:38:14 +01:00
pulse-triage[bot] 529e815525 fix(configapi): preserve operator VerifySSL on auto-register
Re-registration of an existing node overwrote the stored VerifySSL value with the fingerprint-capture result, silently re-enabling a disabled Verify SSL certificate setting on every agent health-check repair (#2140). Preserve the operator's choice and keep only the legacy heal where strict verification is on with no pin (#1303).

Change-source: pulse-maintainer
2026-09-21 11:26:23 +01:00
pulse-triage[bot] c008d33d40 test(configapi): probe verifySSL persistence for #2140
Reproduction probe for the reported SSL toggle not sticking.

Change-source: pulse-maintainer
2026-09-21 11:23:56 +01:00
pulse-triage[bot] 624221e10a build(frontend): land the reviewed npm-minor-patch security floors
Dependabot's npm-minor-patch group (#2138) bumps frontend-modern and tests/integration but is blocked by Canonical Governance, which requires the deployment-installability contract update and the frontend dependency security proof in the same commit. The portal frontend in the same group is split out: it needs a portal bundle rebuild and is owned separately.

Carry the frontend-modern manifest/lock bump (dompurify 3.4.15, highlight.js 11.12.0, solid-js 1.9.15, @types/node 26.6.1, typescript-eslint 8.70.0, autoprefixer 10.6.1, eslint-plugin-solid 0.18.0, postcss 8.5.28, prettier 3.9.8, vite-plugin-solid 2.11.14, vite-plugin-sri-gen 1.7.4) and the tests/integration @types/node 26.6.1 bump with a Current State contract entry and dependencySecurity floor assertions. @playwright/test stays pinned at 1.56.1, so browser-test parity is unchanged.

Change-source: pulse-maintainer
2026-09-21 10:44:34 +01:00
pulse-triage[bot] a7da26e8ba Merge origin/main into the reviewed maintenance line
Change-source: pulse-maintainer
2026-09-21 10:29:15 +01:00
pulse-triage[bot] f592523599 Merge pull request #2134 from rcourtman/maintainer/20260921T083244Z
Ship reviewed maintenance fixes for metrics, monitoring, TrueNAS, VMware and the updater
2026-09-21 09:19:24 +00:00
pulse-triage[bot] 1b901d67c9 Merge commit '3ac317192775cbe36dec30b89d51fa94a488beff'
Change-source: pulse-maintainer
2026-09-21 10:00:17 +01:00
pulse-triage[bot] 3ac3171927 test(server): synchronize remaining startup watchdog log capture
TestStartupWatchdogFiresAndNamesLastPhase and TestStartupWatchdogStopIsIdempotentAndPreventsFire still poll a plain bytes.Buffer while the watchdog goroutine writes it through zerolog, so 'go test -race' reports the same read/write data race that 4d2ee8666c fixed only in service_health_test.go. Reuse the package-level syncBuffer so the poll and the watchdog write are serialized; drop the now-unused bytes import.

Change-source: pulse-maintainer
2026-09-21 09:41:55 +01:00
pulse-triage[bot] d268963536 test(server): serialize the remaining startup watchdog log reads
The startup-watchdog race repair only converted the capture in service_health_test.go, but startup_watchdog_test.go still polls a plain bytes.Buffer while the watchdog goroutine writes the same buffer through zerolog. go test -race therefore still reports a read/write data race in TestStartupWatchdogFiresAndNamesLastPhase and the rest-0 backend shard stays red. Capture those logs through the same mutex-guarded syncBuffer so the poll and the watchdog write are serialized.

Change-source: pulse-maintainer
2026-09-21 09:41:00 +01:00
pulse-triage[bot] 4d2ee8666c test(server): synchronize startup watchdog log capture
TestStartupWatchdogLogsPhaseAndStack polls a bytes.Buffer while the watchdog goroutine writes the same buffer through zerolog, so 'go test -race' reports a read/write data race at service_health_test.go:134 and fails the rest-0 backend shard. Capture the log through a mutex-guarded buffer so the poll and the watchdog write are serialized.

Change-source: pulse-maintainer
2026-09-21 09:25:24 +01:00
pulse-triage[bot] 1b422dd1a6 Document maintenance API and repair documentation section links
Lands contributor PR #2067 (head 5eeea72a3a, author rcourtman) as a single maintainer commit on main. The PR documents the authenticated /api/resources/{id}/operator-state maintenance window contract and repairs GitHub-compatible documentation heading fragments.

Composed from the reviewed web-product candidate tree 68465bc48d (candidate 20260921T054028Z-web-product), which resolved the conflicts against main and replaced the unavailable github-slugger dependency with a dependency-free GitHub-compatible heading slugger. The tree is unchanged from that reviewed candidate; only the commit shape differs so the fdb2be15be..HEAD provenance range contains no external PR commit.

Validation retained from that candidate: vite build passed, check-bundle-size.mjs passed (vendor within budget), 61 focused vitest tests passed, and the offline Playwright docs-fragment-navigation run passed with a content-addressed browser-verification.json receipt based at fdb2be15be.

Change-source: pulse-maintainer
2026-09-21 07:23:24 +01:00
pulse-triage[bot] fdb2be15be chore(frontend): refresh browser receipt base to the candidate tip
The cumulative candidate browser guard matches the receipt committed at the tip against the tip parent. Re-point base_sha from the original base to the tip parent so the content-addressed receipt for usePlatformWindowedItems.ts is accepted.

Change-source: pulse-maintainer
2026-09-21 00:06:21 +01:00
pulse-triage[bot] 788936b72d chore(governance): register the windowed estimate completion pair
Pair the windowed item-height estimate repair (6f0dc177c8) with its contract completion commit (8738eb1bff) so the per-commit canonical guard evaluates them as one reviewed unit.

Change-source: pulse-maintainer
2026-09-21 00:05:33 +01:00
pulse-triage[bot] 8738eb1bff docs(frontend): record windowed item-height estimate sampling
Record the shared windowing controller's representative item-height
measurement in the frontend-primitives and performance-and-scalability
contracts. Grouped surfaces lead with a short group header, so sampling only
the first sibling collapsed the estimate and desynced the mounted window from
the scroll position; the controller now samples several leading siblings and
keeps the tallest.

Change-source: pulse-maintainer
2026-09-21 00:00:19 +01:00
pulse-triage[bot] 6f0dc177c8 fix(alerts): keep grouped-list window estimate off the header (#2130)
The virtual window measured only the top spacer's first sibling. On grouped
surfaces that sibling is a short group header, so the estimate collapsed to
the header height and the mounted window advanced roughly one row per header
height of scroll. The Alert Thresholds card list then dropped a host's rows
while scrolling and its Ctrl-F match count oscillated.

Measure the tallest of the first few rendered siblings so a leading header
cannot collapse the estimate, while uniform tables still measure their real
row height. Add a regression test and offline browser proof.

Change-source: pulse-maintainer
2026-09-20 23:50:19 +01:00
pulse-triage[bot] 1c8fee0119 fix(alerts): bound alert event log snapshot volume
A permanently-offline derived identity flapped a docker-host alert and wrote 4,748 resolved/refired pairs in three days; each lifecycle event stores a full alert-state snapshot averaging ~170 KB, so events.db reached 1.2 GB and filled the host root filesystem (#2113 downstream evidence). The 90-day age retention is not a volume bound: one alert can still write unbounded payload inside the window.

The hourly prune now also enforces a total stored snapshot-payload cap and removes the oldest events first when it is exceeded, raising the same retention revision age pruning uses so the history projection rebuilds from the remaining log. Normal installs stay far below the cap and are unaffected; the bound only triggers on pathological amplification. Focused proof in eventlog_snapshot_test.go; the alerts subsystem contract records the bound.

Change-source: pulse-maintainer
2026-09-20 22:06:17 +01:00
pulse-triage[bot] 9a99f9948f chore(governance): register the startup-watchdog completion pair
Register the server startup-stall watchdog runtime commit and its shared
follow-up contract/proof commit in the canonical completion history so the
per-commit guard evaluates the pair as one reviewed unit.

Change-source: pulse-maintainer
2026-09-20 21:32:30 +01:00
pulse-triage[bot] 1ba7f8bdcd test(server): prove the startup watchdog names the stalled phase
pkg/server/server.go is a security-privacy runtime path, so the startup
watchdog commit needs its contract obligation and an accepted proof in the
same reviewed unit. Record the local-only diagnostic boundary in the
security-privacy contract and place the watchdog proof in the
registry-accepted pkg/server/service_health_test.go.

Change-source: pulse-maintainer
2026-09-20 21:32:18 +01:00
pulse-triage[bot] 03db748782 fix(server): dump goroutines when startup stalls before serving
Bind the UI/API listener early so port conflicts fail fast, but srv.Serve
only starts near the end of Run. Every synchronous initialization step in
between therefore runs with a live listening socket whose accept queue fills
while nothing accepts: the reported #2129 shape (bound port, non-zero Recv-Q,
no HTTP response). A stall there is invisible because no log line is emitted
while it runs.

Track the last completed startup phase and arm an independent watchdog that
fires if serving has not begun within two minutes, logging the last phase and
every goroutine stack. This makes a recurrence diagnosable from the field log
without an operator sending SIGQUIT. The watchdog is stopped when serving
begins or Run exits and is safe to stop more than once.

Change-source: pulse-maintainer
2026-09-20 21:26:11 +01:00
pulse-triage[bot] cdc56258d4 Merge reviewed candidate 20260920T164008Z-product-intelligence (pulse b36e9609dd)
Integrate the reviewed failed-staging config-backup discard repair (07d54cd345)
with its deployment-installability contract, installtest proof and registered
completion pair (ccfd22da7f, b36e9609dd). The candidate auto-update RETURN-trap
repair (9b004cc787) duplicates the already-integrated 564c235e32, so the merge
keeps the canonical trap implementation and both regression suites and retains
both registry entries. Change-source: pulse-maintainer

Change-source: pulse-maintainer
2026-09-20 18:22:29 +01:00
pulse-triage[bot] b36e9609dd chore(governance): register update-path completion pairs
Register the two update-path runtime commits and their shared follow-up
contract/proof commit in the canonical completion history so the per-commit
guard evaluates each pair as one reviewed unit.

Change-source: pulse-maintainer
2026-09-20 17:53:04 +01:00
pulse-triage[bot] ccfd22da7f docs(deploy): record update-path resilience contract and proof
Record the deployment-installability contract section for the auto-update
RETURN-trap and failed-staging config-backup repairs, and add the Go proof
that exercises the extracted perform_update and asserts the trap does not leak
into a later function return. This completes the two runtime commits for
canonical governance as one reviewed unit each.

Change-source: pulse-maintainer
2026-09-20 17:52:50 +01:00
pulse-triage[bot] 889c6d52b6 chore(governance): register auto-update RETURN-trap completion pair
Register 564c235e32 (runtime) with bb25e3ec03 (contract + Go proof) as a
reviewed completion unit so the per-commit canonical guard evaluates them
together rather than rejecting the runtime commit for a missing same-commit
contract and verification artifact.

Change-source: pulse-maintainer
2026-09-20 17:49:34 +01:00
pulse-triage[bot] bb25e3ec03 chore(governance): record auto-update RETURN-trap contract and proof
Follow-up to 564c235e32 (fix(update): disarm perform_update RETURN trap after
it runs). That runtime change touches the deployment-installability subsystem,
so this commit adds the matching substantive contract section in
docs/release-control/v6/internal/subsystems/deployment-installability.md and
the registry-accepted deployment-script-runtime proof in
scripts/installtests/pulse_auto_update_test.go
(TestPerformUpdateDoesNotLeakReturnTrap). The pair is registered in
scripts/release_control/canonical_completion_history.json by the next commit.

Change-source: pulse-maintainer
2026-09-20 17:49:20 +01:00
pulse-triage[bot] 07d54cd345 fix(installer): discard unneeded config backup when staging cannot start
backup_existing snapshots the configuration before the update stages, but a
staging disk-headroom failure then exited and left that snapshot behind. On a
small root filesystem each automatic retry added another full backup and made
the low-space condition progressively worse until updates could no longer run
(#2127). Record the snapshot and remove it when download_pulse aborts at the
headroom check, before anything was replaced. Add regression coverage.

Change-source: pulse-maintainer
2026-09-20 17:44:43 +01:00