Commit Graph

5301 Commits

Author SHA1 Message Date
pulse-triage[bot] 6e81f06e09 Integrate reviewed safe cloned-host identity guidance
Preserve the exact reviewed documentation candidate and its focused proof while retaining the current canonical frontier.

Change-source: pulse-maintainer
2026-09-30 02:57:07 +01:00
pulse-triage[bot] 25a2e56d5e Make cloned-host identity guidance safe and persistent
The agent prefers its saved identity before deriving one from the OS. The old live machine-ID deletion recipe could disrupt unrelated services while leaving a Pulse collision unchanged. Explain managed overrides, precedence, private evidence and distinct-host verification in both shipped guides; cover the safe path with documentation and real-browser checks.

Contract-Neutral: Guidance and verification for existing agent identity options only; no runtime, authentication, schema or frontend behaviour changes.
Change-source: pulse-maintainer
2026-09-30 02:29:54 +01:00
pulse-triage[bot] 3ea52c25b5 Complete PBS identity safety candidate on current main
Compose the retained PBS identity repair with current reviewed source without rewriting its history. The continuation requires terminal exact-source race validation before this candidate is complete.

Change-source: pulse-maintainer
2026-09-30 02:21:58 +01:00
pulse-triage[bot] a0081d676b Keep PBS Agent identity fresh and reject host-local IP matches
Direct PBS host correlation could lend Agent History and SMART ownership through loopback, Docker-local or stale address evidence, and a stale Agent could block its fresh replacement. Reuse the provider address filter and the five-minute observation boundary, preserve IPv6 URL hosts, and cover unsafe evidence, private management controls, link replacement and the three-PBS/nine-Agent topology.

Change-source: pulse-maintainer
2026-09-30 00:36:07 +01:00
pulse-triage[bot] d707df9577 Make lockout and incident troubleshooting safe to follow
Remove the obsolete inline recovery-token curl recipe: recovery sessions are client-bound, so it neither unlocks a separate browser nor needs a credential copied into command history. Point to deployment-specific bootstrap recovery and give symptom-specific, reviewed and sanitized incident reporting steps without requiring dangerous repeats.

Contract-Neutral: Documentation and verification only; clarifies existing browser-bound recovery and sanitized diagnostics without changing authentication, API, schema or runtime behaviour.
Change-source: pulse-maintainer
2026-09-30 00:30:41 +01:00
pulse-triage[bot] 2ad36fe4d1 Reject PBS connection labels as Agent identity
A user-chosen PBS label could attach an unrelated Agent before the exact guest-IP/Agent link was evaluated, putting host History and SMART ownership on the wrong server. Use reported node and endpoint evidence instead, and cover both the collision and label-only cases.

Change-source: pulse-maintainer
2026-09-29 23:52:56 +01:00
pulse-triage[bot] c3e8b6dd6d Integrate reviewed PBS guest Agent correlation
Change-source: pulse-maintainer
2026-09-29 23:40:59 +01:00
pulse-triage[bot] 3ab4183d82 Integrate reviewed Docker update action outcome
Change-source: pulse-maintainer
2026-09-29 23:40:43 +01:00
pulse-triage[bot] 4363493597 Correlate PBS guest agents through fresh PVE IP evidence
When a PBS API token cannot report nodeName and the in-guest Agent omits interface addresses, use a unique running PVE VM at the exact PBS endpoint IP plus its state-owned Agent link. Reject stale or ambiguous observations instead of guessing from display names. This restores the source-native host target for corroborated PBS VMs while preserving the separate PBS service target.

Change-source: pulse-maintainer
2026-09-29 23:28:27 +01:00
pulse-triage[bot] dcb9399cec Keep governed Docker updates pending until their action outcome is known
Do not infer success from a registry badge clearing while a receipt is pending. Keep the action review reachable from the row, preserve inconclusive outcomes, and show completion only from the recorded audit. Add focused state tests and desktop/phone browser proof.

Change-source: pulse-maintainer
2026-09-29 23:18:14 +01:00
pulse-triage[bot] 5e57a07780 Record PBS node status in service History
Persist measured PBS CPU and memory on the service metrics target when node status succeeds. Keep host-agent history separate and avoid false samples on unavailable status. Cover service reads, denial and recovery.

Change-source: pulse-maintainer
2026-09-29 22:53:25 +01:00
pulse-triage[bot] 91d8822d76 Pin hosted Go builders to refreshed 1.26.8 image
Advance the provider control-plane source builder and integration mock builder
on Pulse PR #2275's reviewed 1.26.8 Alpine digest. Keep their exact compiler
image locked by an installability proof and record what this does not qualify.
The published prebuilt runtime path is unchanged.

Change-source: pulse-maintainer
2026-09-29 22:36:18 +01:00
pulse-triage[bot] 75d72f5868 Integrate Core symptom notification recovery
Change-source: pulse-maintainer
2026-09-29 22:04:42 +01:00
pulse-triage[bot] fd9e836ca4 Notify continuing symptoms after primary recovery
A supported endpoint failure may outlive its primary host incident. When synthesis removes the supported cause, dispatch its first independent notification without reopening the occurrence or duplicating a symptom previously notified before grouping.

Change-source: pulse-maintainer
2026-09-29 21:18:19 +01:00
pulse-triage[bot] e57bb692ae Integrate Actions review request ownership
Change-source: pulse-maintainer
2026-09-29 21:17:53 +01:00
pulse-triage[bot] 90556cc1fc Correct alert contract test attribution
The supported-cause escalation and queued callback tests live in incident_synthesis_test.go, not escalation_policy_change_test.go. Keep the verification contract aligned with the actual test file.

Change-source: pulse-maintainer
2026-09-29 21:06:40 +01:00
pulse-triage[bot] ba298b29e2 Guard Actions review against stale responses
Keep route-selected action details and inbox tabs bound to their latest reads so delayed replies cannot replace a newer review or reopen one after close. Preserve server-authored identity and prove the overlap in focused tests and responsive browser navigation.

Change-source: pulse-maintainer
2026-09-29 20:52:24 +01:00
pulse-triage[bot] 38b66ad000 Keep supported symptoms out of escalation delivery
A verified primary infrastructure alert already owns the initial notification for its supporting symptoms. Apply that same ownership to scheduled escalation, queued callback admission, and quiet-hours replay so a late duplicate cannot be sent. Preserve independent escalation for uncorroborated observation sets.

Change-source: pulse-maintainer
2026-09-29 20:51:42 +01:00
pulse-triage[bot] fbf17b271a Merge commit 'b54b8981ed9228bb0a32286ea83d40f0f10079aa'
Change-source: pulse-maintainer
2026-09-29 20:34:47 +01:00
pulse-triage[bot] b54b8981ed docs: distinguish server releases from Helm helper results
Explain that the signed Proxmox server installer uses the v-tagged server archive and never asks for a GitHub PAT. Tell operators to stop when a different helper selects a chart release or requests a token, and to check for a partly created container before a fresh install.

Change-source: pulse-maintainer
2026-09-29 20:23:12 +01:00
pulse-triage[bot] 094059db6c Integrate pending action receipt review improvement
Change-source: pulse-maintainer
2026-09-29 20:22:12 +01:00
pulse-triage[bot] a1b7e9d5d8 Make pending action receipts safely refreshable
Show an unknown-outcome warning for every receipt-pending review and offer a same-action status re-read without another dispatch. Keep aged audit closure behind its existing admin and server gates, and cover desktop and phone interactions.

Change-source: pulse-maintainer
2026-09-29 20:10:56 +01:00
pulse-triage[bot] 82cdcd8f61 Keep monitor-only alerts out of escalation and replay
Treat monitor-only as terminal before quiet-hours replay and flapping, and reject scheduled or queued escalations when the current alert is monitor-only. Align firing, recovery and delivery diagnosis with that policy; cover ordinary and critical-repeat scheduling plus a policy change after callback queueing.

Change-source: pulse-maintainer
2026-09-29 20:06:55 +01:00
pulse-triage[bot] 475d8ef0ca Integrate Core operator alert suppression
Change-source: pulse-maintainer
2026-09-29 19:46:25 +01:00
pulse-triage[bot] e2430fb759 Stop operator-suppressed alerts before delivery dispatch
Keep resource maintenance, mute and expected-offline policy terminal in the internal alert callback path. Quiet-hours deferral remains replayable, while delivery diagnosis and event history report the actual operator suppression. Cover pre-reconciliation active alerts and unaffected performance signals.

Change-source: pulse-maintainer
2026-09-29 19:35:43 +01:00
pulse-triage[bot] f7a7456d03 Integrate safer one-off failure intake
Change-source: pulse-maintainer
2026-09-29 19:32:29 +01:00
pulse-triage[bot] e53c6975a8 Integrate Core resource identity history correction
Change-source: pulse-maintainer
2026-09-29 19:28:51 +01:00
pulse-triage[bot] 564a63a651 Accept unsafe one-off failures in community intake
The bug and v6 pre-release forms previously required reproduction steps even when a retry could cause a host outage, duplicate update, alert storm or data loss. Ask for the original sequence and safe evidence instead, and mirror the guidance in the public triage document.

Contract-Neutral: Community intake wording only; release and installation contracts unchanged.
Change-source: pulse-maintainer
2026-09-29 19:24:42 +01:00
pulse-triage[bot] a5aa881ac5 Treat resource identity lists as sets in change history
Avoid configuration-history rows when source merges only reorder identity addresses or represent an absent list as empty. Real identity changes remain recorded. The #2319 serial-bearing disk fixture and registry-generation check cover the tags-only and no-op identity paths.

Change-source: pulse-maintainer
2026-09-29 19:11:39 +01:00
pulse-triage[bot] 5d39c8623f Make failed-install issue intake truthful
Ask for the attempted release and installer provenance when Pulse never started, without forcing a false running-version attestation or a token-bearing command. Keep public triage guidance aligned and pin both forms in tests.

Contract-Neutral: Issue form provenance and wording change community intake only, not release promotion or artifact dispatch
Change-source: pulse-maintainer
2026-09-29 18:44:42 +01:00
pulse-triage[bot] 0204fe000f Keep Agent-only SMART disks out of PVE poll readback
Linked Agent SMART disks inherit a PVE instance for presentation. Restrict skipped-poll readback to actual PVE observations so an empty disks/list cannot alternate fabricated inventory, tags and history rows. Pin repeated cycles and the source boundary in the monitoring contracts.

Change-source: pulse-maintainer
2026-09-29 18:16:44 +01:00
pulse-triage[bot] 41bee3d475 Integrate PBS mixed-source History repair
Change-source: pulse-maintainer
2026-09-29 17:54:16 +01:00
pulse-triage[bot] 5e7c6bb7d9 Restore PBS History for mixed Agent and PVE sources
Preserve the registry-corroborated PBS-to-Agent link on the service row while selecting the Agent host metrics target in the Backups drawer. Reject PVE-only name collisions and retain the target through a transient missing host row. Recompose the unchanged #1723 runtime repair on current main with fresh desktop and phone browser proof.

Change-source: pulse-maintainer
2026-09-29 17:43:53 +01:00
pulse-triage[bot] d7baa07dad Compose scoped Proxmox repair with protected main frontier
Retain the verified #2321 source and its original receipt while incorporating upstream release and browser range validation.

Change-source: pulse-maintainer
2026-09-29 17:36:27 +01:00
pulse-triage[bot] b12dca9cd8 Integrate scoped Proxmox tab evidence on current main
Preserve the browser-verified #2321 repair and current protected Relay changes in separate ancestry. Resolve the shared receipt to the current main version; both proofs remain in their original non-merge commits.

Change-source: pulse-maintainer
2026-09-29 17:35:52 +01:00
rcourtman ac62e114b2 Validate merged integration ranges against in-range browser receipts (#2330)
The maintainer coordinator merges reviewed candidates onto a main that
keeps moving and then ran the browser verification guard once over the
whole range with the merge tip as the commit. No lane can produce a
receipt bound to that merge's parent and covering upstream frontend work
too, so 13 of 13 coordinator browser-guard rollbacks since 28 September
failed on base_sha. This adds a range mode where every changed frontend
file's final content must match a valid receipt from a non-merge commit
inside the range, each validated against its own commit. Merge-authored
receipts never count, and the per-commit and staged modes are unchanged.
2026-09-29 17:34:19 +01:00
courtmanr@gmail.com ded4e91d1f Validate merged integration ranges against in-range browser receipts
The maintainer coordinator integrates reviewed candidates by merge onto a
main that keeps moving, then ran this guard once over before..after with
--commit after. That demands one tip receipt whose base_sha is the tip's
parent and whose paths and digests cover the whole cumulative delta. The
tip is a merge and the range carries the candidate plus upstream work that
was verified on its own, so no lane could ever produce that receipt. 13 of
13 coordinator browser-guard rollbacks since 28 September failed on
base_sha for this reason.

Add --base <range-base> for range mode. Every changed user-visible
frontend file's content at the tip must equal a digest recorded by a valid
receipt in a non-merge commit inside the range, and each receipt is
validated as the per-commit guard validates it at its own commit, bound to
that commit's parent and tree. Merge-authored receipts are never evidence,
so a conflict resolution or a later correction that changes frontend
source still needs fresh proof for the final content. Replaying the three
rolled-back 29 September batches from the host passes, and the existing
per-commit and staged modes are unchanged.
2026-09-29 17:15:10 +01:00
pulse-triage[bot] 498e2b12a2 Merge protected Pulse main with reviewed publication range
Preserve upstream browser verification for the newer Relay retirement surface; earlier action recovery proof remains in reviewed ancestry. Include current CI sharding and qualification canary without rewriting accepted commits.

Change-source: pulse-maintainer
2026-09-29 17:12:31 +01:00
courtmanr@gmail.com c9915434d8 Let the RC attester read the lab's root-owned evidence
With the host-interface canary in place, v6.4.5-rc.4 passed the
schema-v7 systemd and rootful Docker lab (run 36594651903), but the
attestation step then failed with Permission denied on receipt.json,
which the privileged lab writes as root into the bind-mounted evidence
directory. Hand that directory to the runner user after a passing lab
and before attestation, without touching its content.
2026-09-29 17:12:27 +01:00
courtmanr@gmail.com eafd48d197 Give RC qualification a local host-interface canary
The immutable RC systemd lab failed before installed acceptance because
its --network none container had no non-loopback IPv4 address to prove
the helper's private network cannot reach. Add a veth canary wholly
inside that namespace and assert no default route before the lab runs.

Also check out the repository in the demo resolver before it calls
scripts/write_github_output.py, so verification-only dry runs reach
their demo checks.

Split out of #2323 so the v6.4.5 promotion is not held behind the
unrelated action-review UI work in that PR.
2026-09-29 16:42:35 +01:00
courtmanr@gmail.com 341e8a7eb4 Calibrate internal/api shard weights to CI and record per-test seconds
The weights from #2324 came from one local run and left the api shards at
4.5, 8.8, 17.1 and 12.5 minutes on CI. Most of the 17.1 was not test time.
That shard ran `-run . -skip <1231 names>`, and the test binary caches only
its last compiled pattern, so alternating the two recompiled the 62 KB skip
regex for every test and subtest (about 50 ms each under -race locally, 30s
against 1.3s for 300 trivial tests). Two runs put that shard at 887s and
875s against roughly 450s of tests. The skip path now passes -skip alone.

Every api shard now runs go test -json through
.github/scripts/record-internal-api-test-seconds.py. It prints what plain go
test would (package lines and the output of failing or unfinished tests),
exits non-zero on any failure behind pipefail, and writes each top-level
test's seconds to an internal-api-test-seconds-N artifact that is uploaded
even when the shard fails. .github/scripts/refresh-internal-api-test-seconds.py
rebuilds the weights file from those artifacts (gh run download, median
across runs, DEFAULT_WEIGHT set to the mean of the unlisted tests, which the
selector now reads from the file).

Until those artifacts exist, the weights are a local -race -json run with
each region of go test's order scaled to what CI reported for it.
Equal-count quarters averaged 107, 437, 100 and 787s over four runs, and the
weighted cut gave 131s for the first 1187 tests, 350s for the next 23 and
608s for the last 21 over two. The last quarter and the last 21 tests
disagree on how the tail splits, so the tail takes the midpoint of an exact
fit and a pooled factor.

With these weights four shards still predict a slowest shard near 10
minutes, and a 20% slower runner on the tail would take it past the 11
minutes of Frontend and rest-1. Five shards predict about 131, 325, 280-340,
330-355 and 330-365s of tests, or 4.5 to 8.5 minutes a job with about 2.3
minutes of setup, so API_SHARD_COUNT goes to 5. Every test still runs
exactly once in contiguous go test order, and all five slices passed locally
from their new starting points. The required Backend tests (api) verdict
keeps its name.
2026-09-29 15:27:08 +01:00
rcourtman a76f1de3db Retire Relay labels and upsells inside Pulse (#2325)
Relay left public checkout on 2026-09-29: it only ever connected the
Pulse Mobile app, which retires on 31 March 2027, and existing Relay
subscribers now carry Pro entitlements. The app still sold it. Every
Community install saw a "Get alerts on your phone ... Available with
Relay and Pro plans" upgrade panel on Alerts destinations, the plan
screen offered a Relay card with "Remote web access via Relay", and the
settings section was called Remote Access although Relay never reached
the web UI.

The Alerts push panel now renders only on instances that have the relay
feature, with no upsell. The settings section, nav, header and locale
catalogs say Pulse Mobile and carry the retirement date. Community sees
only the Pro comparison card and Relay-tier licenses see none; gated
mobile features name Pro as their minimum plan. The relay feature is
labelled "Pulse Relay (Mobile Connection)" in the catalog, plan copy no
longer claims remote web access, the backend pairing diagnostics point
at Settings > Pulse Mobile, and the user docs, including PRIVACY.md,
state that Relay does not provide remote web UI access.
2026-09-29 15:04:36 +01:00
pulse-triage[bot] b129b5a40c Use source-filtered facets for Proxmox tab evidence
Prevent unrelated estate-wide VM and storage counts from advertising Proxmox sections, while retaining direct-link hydration and the PBS-only Backups path. Revalidate the compact facet request when an all-resources cache supplies rows without scoped counts; cover mixed-source counts in component and browser proof and update both subsystem contracts.

Change-source: pulse-maintainer
2026-09-29 14:57:59 +01:00
pulse-triage[bot] 20c99e2e67 Preserve community decomposition decisions in issue label sync
An empty form field or unrelated edit cannot prove comment-raised topics were dispositioned. Only label newly declared topics, leaving removal to whole-thread triage and respecting a completed manual disposition.

Change-source: pulse-maintainer
2026-09-29 14:45:33 +01:00
pulse-triage[bot] 968e7c5a27 Make bug evidence intake truthful for non-container installs
Ask for the failing running version and a container image only where one exists. Accept symptom-appropriate screenshots or logs without forcing irrelevant log text, and state the matching triage rule.

Change-source: pulse-maintainer
2026-09-29 14:21:28 +01:00
pulse-triage[bot] efd04b11c9 Compose Proxmox capability tab repair on current main
Carry the validated #2321 web candidate across the protected main frontier without changing its runtime or browser contract. Change-source: pulse-maintainer

Change-source: pulse-maintainer
2026-09-29 14:19:06 +01:00
pulse-triage[bot] ffc295b8a7 Merge protected Pulse main at batch frontier
Change-source: pulse-maintainer
2026-09-29 14:02:16 +01:00
rcourtman 97f894b009 Retire Relay labels and upsells inside Pulse
Relay left public checkout on 2026-09-29: it only ever connected the
Pulse Mobile app, which retires on 31 March 2027, and existing Relay
subscribers now carry Pro entitlements. The app still sold it. Every
Community install saw a "Get alerts on your phone ... Available with
Relay and Pro plans" upgrade panel on Alerts destinations, the plan
screen offered a Relay card with "Remote web access via Relay", and the
settings section was called Remote Access although Relay never reached
the web UI.

The Alerts push panel now renders only on instances that have the relay
feature, with no upsell. The settings section, nav, header and locale
catalogs say Pulse Mobile and carry the retirement date. Community sees
only the Pro comparison card and Relay-tier licenses see none; gated
mobile features name Pro as their minimum plan. The relay feature is
labelled "Pulse Relay (Mobile Connection)" in the catalog, plan copy no
longer claims remote web access, the backend pairing diagnostics point
at Settings > Pulse Mobile, and the user docs, including PRIVACY.md,
state that Relay does not provide remote web UI access.
2026-09-29 13:19:54 +01:00
courtmanr@gmail.com 06d78b66d3 Balance internal/api race shards by measured run time
The four Backend tests (api-N) shards took equal-count quarters of go
test's list, which left them at 4.0, 10.6, 4.0 and 16.8 minutes on the
first PR run, and at 1.9, 8.0, 1.5 and 10.3 minutes of go test time on
the following main push (run 36560070496). Almost all of it sits in a
few tests. One contract mock chart test runs about six minutes on the
runner, and the 28 integration server tests at the end of the list take
about twenty seconds each, so the fourth quarter held nearly half the
package.

Shards are still contiguous runs of go test's own order, since some
tests depend on package state from their neighbours, but the cut points
now come from estimated seconds.
.github/scripts/select-internal-api-shard.sh weighs each test from
.github/scripts/internal-api-test-seconds.txt (the 199 tests at 0.5s or
more, seeded from a local -race -json run scaled to that main run's
shard totals, with a 0.05s default for anything unlisted), binary
searches the smallest per-shard budget that fits the list into four
slices, and fills up to it. The weights only move cut points. Every test
is assigned exactly one shard in a single pass, so a stale file can
unbalance shards but never drop or repeat a test, and no shard is ever
empty.

With today's list the slices hold 1187, 23, 2556 and 21 tests, estimated
at 1.9, 6.9, 6.5 and 6.7 minutes of tests, or about 9.5 minutes per job
with the roughly 2.6 minutes of setup and race compile. The 2556-test
slice would need a 124 KB -run pattern, so a shard passes -skip of the
other shards' tests whenever that is shorter, which runs the same tests
in the same order.
2026-09-29 13:14:27 +01:00
pulse-triage[bot] 3a061d66c4 Gate Proxmox tabs on observed capabilities
Avoid showing unsupported Replication, Ceph and Mail Gateway sections while Proxmox resource counts are unknown, while preserving bookmarked-route hydration and legitimate PBS navigation. Cover count transitions in component tests and synthetic production-page desktop/phone browser verification; update the affected subsystem contracts and receipt.

Change-source: pulse-maintainer
2026-09-29 12:25:29 +01:00