Commit Graph

11468 Commits

Author SHA1 Message Date
pulse-triage[bot] 0d7f5058e2 Merge pull request #2198 from rcourtman/maintainer/20260923T115045Z
Keep PBS History on its host target when the connection uses an IP or alias
2026-09-23 12:27:50 +00:00
pulse-triage[bot] 4670064c21 Merge upstream main snapshot eef1db8587
Change-source: pulse-maintainer
2026-09-23 12:50:06 +01:00
pulse-triage[bot] eef1db8587 Merge pull request #2195 from rcourtman/maintainer/20260923T103133Z
Make Profile M row-windowing checks reliable under load
2026-09-23 11:20:13 +00:00
pulse-triage[bot] 0b68e5cf3c chore(frontend): bind PBS browser proof to integrated tip
The reviewed core-runtime commit is merged exactly, and the two browser-verified frontend source files remain byte-identical to its receipt. Rebind only the receipt base to the integration merge so cumulative governance checks retain exact parent identity.

Change-source: pulse-maintainer
2026-09-23 11:46:21 +01:00
pulse-triage[bot] 4f11deddc7 Merge reviewed candidate 20260923T101610Z-core-runtime (pulse e137630fdf)
Change-source: pulse-maintainer
2026-09-23 11:45:54 +01:00
pulse-triage[bot] e137630fdf fix(unifiedresources): correlate PBS host agent by reported node name
The PBS API reports the node hostname about itself, but host-agent correlation only consulted the configured connection label and endpoint. When a connection is configured by IP or a DNS alias the agent never reports, the host agent could not be linked to its PBS connection, so the Backups drawer lost its persisted host history target between snapshots and fell back to the PBS service key, which has no host series (#1723).

Use the reported node name in pbsInstanceCorroboratesHost and expose it on the PBS resource (pbs.nodeName). The Proxmox Backups identity correlation now includes it so the host row stays correlated when the configured endpoint is not a machine-identity token.

Rebuilt on the current canonical pulse tip e994c41c20, which already carries the web-product retention change (5d831b8765). The offline browser fixture now combines both failure modes: the connection is configured by 10.0.0.5 and linked only by the reported pbs.nodeName, and a live refresh can transiently omit the correlated host row. The check passes 12/12 across pbs-only, side-by-side and guest topologies, stable and reordered snapshots, at 1280x900 and 390x844, and never requests the PBS service target.

Contract-Neutral: Behavioral machine-identity correlation fix plus an additive optional pbs.nodeName field; no breaking contract, public API removal, or canonical-ownership change.
Change-source: pulse-maintainer
2026-09-23 11:29:27 +01:00
pulse-triage[bot] 85f48c2cea Merge reviewed candidate 20260923T101610Z-web-product (pulse df9467cace)
test(frontend): bound Profile M windowing waits like their siblings

Change-source: pulse-maintainer
2026-09-23 11:29:14 +01:00
pulse-triage[bot] df9467cace test(frontend): bound Profile M windowing waits like their siblings
The two Profile M row-windowing cases still waited at vitest/testing-library's 1000ms default with no per-test timeout, so under the release qualification VM's load they could abort the same way Profile L did for v6.4.5-rc.3 (packet 20260923T082318Z-release). Give both the declared 15s waitFor budget on the row-cap assertions and a 30s per-test timeout, matching the adjacent Profile L and grouped/flat contracts. Assertions are unchanged.

Change-source: pulse-maintainer
2026-09-23 11:23:57 +01:00
pulse-triage[bot] 4aaa9fe8c4 Merge pull request #2194 from rcourtman/maintainer/20260923T094510Z
Keep the Backups History chart on its host series (#1723)
2026-09-23 11:23:03 +01:00
pulse-triage[bot] 496340868c Merge pull request #2188 from rcourtman/dependabot/docker/dot-devcontainer/docker-e75168a720
Bump golang in /.devcontainer
2026-09-23 11:21:01 +01:00
pulse-triage[bot] e994c41c20 chore(frontend): bind browser proof to integrated candidate
The integration merges preserve the exact browser-tested frontend bytes. Rebind the content-bound receipt to the integration tip so the canonical cumulative range passes the parent-identity guard.

Change-source: pulse-maintainer
2026-09-23 10:42:15 +01:00
pulse-triage[bot] 92edc05662 Merge reviewed candidate 20260923T090028Z-web-product (pulse 5d831b8765)
Change-source: pulse-maintainer
2026-09-23 10:42:02 +01:00
pulse-triage[bot] 51693f73db Merge reviewed candidate 20260923T090013Z-delivery-trust (pulse 854bcb86fa)
Change-source: pulse-maintainer
2026-09-23 10:41:58 +01:00
pulse-triage[bot] 6997a53046 Merge origin/main 6a294d9fcd into the reviewed integration line (additive Dependabot action-pin config)
Change-source: pulse-maintainer
2026-09-23 10:41:54 +01:00
pulse-triage[bot] 5d831b8765 fix(web): retain PBS host target across transient snapshots (#1723)
The Backups drawer's Identity and History target is the merged PBS host resource. Correlation was recomputed from each snapshot with no memory, so a live refresh that briefly omitted the correlated host row made the drawer fall back to the PBS service target (agent/<service key>), which has no host history. The target flicked between the host series and the service key until the host row returned.

Retain the last resolved correlation per PBS server and reuse it only across such an omission, and only while the remembered host is still fresh relative to the server, so a genuinely removed or replaced host is not advertised indefinitely. A host row that is present but ambiguous still declines, as before.

Adds unit coverage for retention, staleness and pruning, a drawer regression test, and extends the real-browser guard and fixture to omit the host row and assert the identity rows and History chart survive.

Change-source: pulse-maintainer
2026-09-23 10:27:45 +01:00
pulse-triage[bot] 6a294d9fcd Merge pull request #2193 from rcourtman/maintainer/20260923T082800Z
Keep the eight governed release action pins out of Dependabot version updates
2026-09-23 09:21:23 +00:00
pulse-triage[bot] 854bcb86fa test(frontend): let Profile L use its declared waitFor budget
The Profile L case waits up to 15s for the mounted-row cap, but the vitest per-test default is 5s, so that budget was unreachable. Under the release qualification VM's load the case timed out at 5s and failed exact preflight for v6.4.5-rc.3 (packet 20260923T082318Z-release), even though the candidate frontend tree is byte-identical to checkpoints that passed. Set the test-level timeout to 20s so the declared 15s waitFor governs.

Change-source: pulse-maintainer
2026-09-23 10:04:08 +01:00
pulse-triage[bot] 77b652adf7 Merge reviewed candidate 20260923T082019Z-web-product (pulse 8654c837ee)
Change-source: pulse-maintainer
2026-09-23 09:40:13 +01:00
pulse-triage[bot] d327361a09 Merge origin/main 966c7f5206 before publishing the reviewed action-pin freeze (additive, no content change)
Change-source: pulse-maintainer
2026-09-23 09:36:44 +01:00
pulse-triage[bot] 8654c837ee build(deps): land the reviewed @types/node 26.6.2 refresh
Dependabot npm-minor-patch #2189 raises @types/node 26.6.1 -> 26.6.2 in frontend-modern and tests/integration, but Canonical Governance blocks the manifest/lock change for a missing deployment-installability contract entry and frontend dependency security proof. The portal frontend part of the same group is a separate ws override refresh that needs a portal bundle decision and is owned separately, so it is not carried here.

Carry the frontend-modern and tests/integration @types/node 26.6.2 bump with a Current State contract entry and a dependencySecurity floor raise. @types/node is a dev-only declaration package and does not enter the shipped bundle; @playwright/test stays pinned at 1.56.1, so browser-test parity is unchanged. The frontend-modern offline dependency snapshot is bound to 26.6.1, so npm ci --offline cannot resolve the 26.6.2 tarball in this assignment; a host dependency acquisition is required before the suite can run against the new lockfile.

Change-source: pulse-maintainer
2026-09-23 09:26:24 +01:00
dependabot[bot] 1f97bda97e Bump golang in /.devcontainer
Bumps golang in `/.devcontainer` from `3c3e25a` to `6c2a553`.


Updates `golang` from `3c3e25a` to `6c2a553`

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.26.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: docker
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-23 08:03:42 +00:00
pulse-triage[bot] 966c7f5206 Merge pull request #2185 from rcourtman/maintainer/20260923T065828Z
Correct stable-patch rollback metadata and qualify the managed Go dependency group
2026-09-23 08:02:15 +00:00
pulse-triage[bot] 0f675dd493 Merge reviewed candidate 20260923T070018Z-delivery-trust (pulse 0168dd3be8)
Change-source: pulse-maintainer
2026-09-23 08:37:24 +01:00
pulse-triage[bot] 0168dd3be8 fix(ci): freeze reviewed action pins from Dependabot version updates
action_consumer_manifests.json pins each release-consumed action to an exact SHA plus the upstream action.yml sha256, and release_promotion_policy_test.py requires every workflow step to match. Dependabot's github-actions group bumps those SHAs, so every group proposal fails the manifest contract and cannot be repaired offline. Ignore the eight governed actions for version updates and guard the policy against the manifest so pin refreshes stay explicit reviewed work. This resolves the recurring failing actions-minor-patch proposal (#2139).

Change-source: pulse-maintainer
2026-09-23 08:04:21 +01:00
pulse-triage[bot] 2483be4c47 Merge origin/main 1eed94acd into the reviewed integration line
origin/main advanced to 1eed94acd before this batch began. Its tree is
already contained in the canonical line through c050a0bd, so this records
the upstream lineage without changing content, leaving the publication gate
a fast-forwardable head.

Change-source: pulse-maintainer
2026-09-23 07:48:04 +01:00
pulse-triage[bot] 1eed94acd1 Merge pull request #2183 from rcourtman/maintainer/20260923T052243Z
Serialize AI knowledge-store saves and refresh the portal bundler
2026-09-23 06:06:08 +00:00
pulse-triage[bot] 8ef0dfebf1 Merge reviewed candidate 20260923T054013Z-core-runtime (pulse c6546fce74)
Change-source: pulse-maintainer
2026-09-23 06:55:45 +01:00
pulse-triage[bot] c6546fce74 build(deps): qualify the go-minor-patch dependency group
Advance the managed go-minor-patch group with its required transitives:
golang.org/x/crypto 0.56.0->0.57.0, golang.org/x/term 0.45.0->0.46.0 and
modernc.org/sqlite 1.53.0->1.59.0 (libc 1.75.7, memory 1.12.1, x/text 0.42.0).
All other direct versions are unchanged.

Raise the dev-runtime dependency-manifest floors to the qualified releases and
add the storage-driver integrity floor so a silent downgrade fails. Record the
change in the deployment-installability contract.

The batch is routine managed dependency maintenance, independent of the excluded
6 September SQLite SIGSEGV investigation. The NormalizeSegment benchmark delta is
a code-layout measurement artifact (pure function; caller benchmarks do not
corroborate) and the failed advisory result is preserved.

Change-source: pulse-maintainer
2026-09-23 06:49:52 +01:00
pulse-triage[bot] 239f5f431e Merge reviewed candidate 20260923T052003Z-delivery-trust (pulse 064e776dd0, dc42735008)
Change-source: pulse-maintainer
2026-09-23 06:44:49 +01:00
pulse-triage[bot] dc42735008 chore(deps): keep TypeScript majors as explicit Dependabot work
Dependabot #2100 and #2101 propose TypeScript 5.9.3 -> 7.0.2, but the checked-in @typescript-eslint/eslint-plugin@8.70.0, @typescript-eslint/parser@8.70.0 and typescript-eslint@8.70.0 each declare a peer dependency of "typescript": ">=4.8.4 <6.1.0". The proposals therefore fail ERESOLVE and all frontend E2E shards, with no security advisory behind them.

Add a semver-major ignore for typescript in the npm ecosystem so majors stay explicit work alongside a lint-toolchain upgrade, and update the config guard test to pin both the browser-runtime and TypeScript ignores.

Change-source: pulse-maintainer
2026-09-23 06:32:54 +01:00
pulse-triage[bot] 064e776dd0 fix(release): support RC-derived stable patch install metadata
The install-metadata contract encoded only the emergency no-RC stable-patch shape. A stable patch with a same-version RC promotes the exercised candidate (promotion_mode stable-rc-promotion), so the contract must assert that shape and derive the rollback target from the last published stable.

previousStablePatchVersion hardcoded only v6.4.2 as unpublished, so v6.4.5 rolled back to the never-published v6.4.4. Add v6.4.3 and v6.4.4, which only ever shipped as prereleases, so v6.4.5 resolves to the published v6.4.1 that the promotion resolver also derives.

Add stablePatchPromotedPrerelease to detect the same-version candidate from the retained release notes, and branch the stable-patch install-metadata tests between the emergency and RC-derived shapes. Unit tests pin the rollback derivation and the candidate detection.

Change-source: pulse-maintainer
2026-09-23 06:32:13 +01:00
pulse-triage[bot] c050a0bda9 Merge upstream main e18a2c48b8 before publishing the KnowledgeStore serialization and portal esbuild batch (additive, no content change)
Change-source: pulse-maintainer
2026-09-23 06:24:35 +01:00
pulse-triage[bot] 316b660e2f Merge reviewed candidate 20260923T050007Z-web-product (pulse 92f2619509)
Change-source: pulse-maintainer
2026-09-23 06:20:10 +01:00
pulse-triage[bot] e18a2c48b8 Merge pull request #2182 from rcourtman/maintainer/20260923T043540Z
Refresh governed container base-image digests
2026-09-23 05:14:20 +00:00
pulse-triage[bot] 92f2619509 build(deps): bump portal frontend esbuild to 0.28.2
Apply Dependabot #2142 (esbuild 0.28.1 -> 0.28.2) and regenerate the committed portal build manifest so the source_hash covers the changed package.json. The lockfile and package.json reproduce the Dependabot blobs exactly; the manifest hash is e65ea72f, matching the value the failing backend check computed.

Change-source: pulse-maintainer
Contract-Neutral: Dev-only portal bundler patch bump (esbuild 0.28.1 -> 0.28.2); no public contract or runtime behavior changed.
2026-09-23 06:14:00 +01:00
pulse-triage[bot] 47cadcc188 fix(ai): serialize KnowledgeStore disk saves and track in-flight writes
SaveNote launched an untracked goroutine per note. Concurrent saves shared the fixed knowledge_store.json.tmp path, so the atomic temp+fsync+rename write could be defeated by an interleaved truncate/rename, and a still-running writer could recreate files in the data directory after a caller removed it (the flaky t.TempDir cleanup observed in TestKnowledgeStore_SaveLoad during release qualification).

Guard disk writes with a dedicated save mutex so only one save touches the temp path at a time, track in-flight saves with a WaitGroup, and add an unexported flush() the test uses to join them before cleanup. Add a concurrent SaveNote reload regression covering all entries, and record the persistence boundary in the ai-runtime subsystem contract.

Change-source: pulse-maintainer
2026-09-23 06:01:17 +01:00
pulse-triage[bot] bb3951cbb8 build(deps): refresh governed container image digests
Refresh the pinned digests for the governed node:24-alpine, golang:1.26.8-alpine
and alpine:3.24 tags used by the release, control-plane and mock-github-server
images. Tag versions are unchanged; this picks up the current rebuilt base
layers, matching the docker dependabot policy that refreshes immutable digests
automatically while keeping tag upgrades in explicit work.

Supersedes Dependabot #2104 (node), #2137 (golang) and #2150 (alpine).

Contract-Neutral: digest-only refresh of unchanged governed image tags; no public-contract delta
Change-source: pulse-maintainer
2026-09-23 05:23:41 +01:00
pulse-triage[bot] 9ac6480350 Merge pull request #2180 from rcourtman/maintainer/20260923T012852Z
Capture agent logs on FreeBSD/pfSense and fix the installer log hint
2026-09-23 02:09:40 +00:00
pulse-triage[bot] db531929ee Merge upstream main 08175af524 before publishing the #2123 FreeBSD/pfSense agent log-capture fix (additive, no content change)
Change-source: pulse-maintainer
2026-09-23 02:31:55 +01:00
pulse-triage[bot] 08175af524 Merge pull request #2178 from rcourtman/maintainer/20260923T002652Z
Keep the resource drawer's selected tab across data refreshes
2026-09-23 01:14:30 +00:00
pulse-triage[bot] ad141a6396 Merge reviewed candidate 20260923T004045Z-core-runtime (pulse 922626418c)
Integrate the exact reviewed FreeBSD/pfSense agent log-capture repair for #2123. The rc.d service now receives the agent's installer-owned rotating --log-file on both the pfSense/OPNsense/vanilla-FreeBSD and TrueNAS CORE branches, and the completion hints name that file instead of the absent /var/log/messages. Includes the installtests coverage and the agent-lifecycle and deployment-installability contract updates.

Change-source: pulse-maintainer
2026-09-23 02:04:57 +01:00
pulse-triage[bot] 922626418c fix(installer): capture agent logs on FreeBSD/pfSense
The FreeBSD rc.d branch printed a log hint pointing at the system log,
but pfSense has no /var/log/messages (its system log is
/var/log/system.log). More importantly, daemon(8) does not capture the
child's stdout and rc.d has no journal, so the agent's zerolog output was
never written to any file: correcting the path alone would still point
users at a log with no agent entries.

Give the agent its own rotating log via --log-file on FreeBSD (both the
TrueNAS CORE and pfSense/OPNsense/vanilla FreeBSD branches) and point the
completion hint at it, matching the Unraid/QNAP/TrueNAS-Linux convention.

The shell installer is a canonical path shared by agent-lifecycle and
deployment-installability, so record the FreeBSD log-capture obligation in
both subsystem contracts.

Refs #2123.

Change-source: pulse-maintainer
2026-09-23 01:57:51 +01:00
pulse-triage[bot] 189ef2c506 Merge origin/main before publishing the #1723 drawer-tab retention fix
Change-source: pulse-maintainer
2026-09-23 01:29:01 +01:00
pulse-triage[bot] d2ec62b4f8 Merge pull request #2175 from rcourtman/maintainer/20260922T232553Z
Deliver persisted alert notifications that are due at startup
2026-09-23 00:13:59 +00:00
pulse-triage[bot] 2c3a6b306a fix(web): keep the drawer tab across transient snapshot changes (#1723)
A live resource snapshot can briefly omit a field that gates a drawer tab, for example a merged metrics target during a refresh. The tab guard reset the active tab to Overview whenever the selected tab was missing, so the reported Proxmox -> Backups History tab silently jumped back to Summary on data refresh. Reset only when the drawer starts showing a different resource; each tab body already renders an availability notice while its tab is transiently unavailable. Adds a regression test covering a snapshot that drops and restores the metrics target, a source guard in ResourceDetailDrawer.history.test.tsx, the unified-resources contract update, and a fresh frontend browser-verification receipt from scripts/check-drawer-tab-retention.cjs (the same check times out on the pre-fix source).

Change-source: pulse-maintainer
2026-09-23 00:55:58 +01:00
pulse-triage[bot] 79cf2d0058 Merge reviewed candidate 20260922T224013Z-core-runtime (pulse f235fc37f2)
Integrate the exact reviewed notification startup-ordering repair: install the queue processor without waking the worker during manager construction, so an already-due persisted delivery is not terminally cancelled before saved webhook/email/Apprise configuration is applied. Includes the grouping contract-test wait correction, the TestRestartKeepsDueDeliveryPendingUntilConfigured regression test, and the notifications subsystem contract update. Retained offline race proof covers the exact candidate source; the release/v6.4 RC.2 backport remains with the release line.

Change-source: pulse-maintainer
2026-09-23 00:24:30 +01:00
pulse-triage[bot] cf1ee005ff Merge upstream main before candidate review
Incorporate the remote main merge that existed when this coordination batch began while preserving the already reviewed local candidate identities.

Change-source: pulse-maintainer
2026-09-23 00:24:24 +01:00
pulse-triage[bot] 2d2d272cb4 Merge pull request #2172 from rcourtman/maintainer/20260922T223953Z
Fix TrueNAS CORE CPU and memory telemetry over legacy REST
2026-09-22 23:18:05 +00:00
pulse-triage[bot] f235fc37f2 fix(notifications): start queue processing after destination config
A persisted notification that was already due at startup could be terminally cancelled as 'delivery disabled'. NewNotificationManagerWithDataDir woke the queue worker during construction, before the owner had applied saved webhook/email/Apprise configuration, so the still-empty destination list looked like a removed destination.

Install the queue processor without waking it. The worker ticker and later enqueues start delivery once configuration is present. This removes the order/state-dependent failure in TestResolvedGroupingOrdinaryRestart and drops a persisted grouped recovery in production.

Also wait past the queue poll interval in the grouping contract test, add a regression test for the startup ordering, and update the notifications subsystem contract's processor-attachment semantics.

Change-source: pulse-maintainer
2026-09-23 00:01:56 +01:00
pulse-triage[bot] 2545fb8cba test(web): guard PBS identity rows across snapshot refresh (#1723)
The Backups drawer renders Discovery and Metrics Target from the merged host resource, so a snapshot-driven correlation change would silently flip those labels. Add discoveryTarget to the retained real-browser fixture and assert both identity rows stay present and byte-identical across reordered, timer-driven snapshots and datastore switching. The guard passes on the current source; it does not reproduce the reporter's live target-spelling flicker.

Change-source: pulse-maintainer
2026-09-22 23:49:13 +01:00