Preserve the exact published frontier alongside reviewed canonical work. No publication or deployment is performed by this merge.
Change-source: pulse-maintainer
Audit Webhooks is the only webhook page in Settings, so people who want
alerts in Discord or Slack land there. In #1344 a user tried to add a
Discord webhook from it and filed a bug when that didn't work. Alert
delivery lives in Alerts, Notifications, which Settings never mentions.
The panel now opens, gated or enabled, with one line saying these
webhooks carry security events only, linking to alert notifications.
Verified at 1440 and 390. The link lands on /alerts/notifications
without a page reload.
The Security Overview tagged the HTTPS tile red and Critical on every
install, directly above a hardening card that calls HTTPS Recommended on
a private network and says local HTTP is acceptable. The same flag
counted plain HTTP as a missing critical control in the posture score,
so a typical LAN install read 55 percent.
The tile now uses the hardening card's rule: critical once the instance
is publicly reachable, recommended otherwise. A private install with a
password and protected exports reads 79 percent (still Moderate). A
public one still shows HTTPS as Critical.
Verified at 1440 and 390 on a private-network instance.
Preserve existing reviewed integrations and published attention-reason presentation without re-parenting source commits.
Change-source: pulse-maintainer
Match QNAP guidance to existing data-volume relocation, create private per-attempt staging and preserve diagnostic logs and identity. Exercise copied commands for preparation and installer failures without an appliance operation.
Contract-Neutral: Clarifies existing installer storage and private staging guidance; no runtime, permission or data-contract change.
Change-source: pulse-maintainer
Audit Webhooks is the only webhook page in Settings, so people looking to
send alerts to Discord or Slack land there. Issue 1344 tried to add a
Discord webhook from it and filed a bug when that did not work. Alert
delivery lives in Alerts, Notifications, which Settings never mentions.
The panel now opens, gated or enabled, with one line saying these webhooks
carry security events only and linking to alert notifications.
On a phone the TrueNAS Storage Health column is hidden, so the row
drawer is where a user learns why a row is amber. It fell short in three
ways:
- A read-only dataset said only "Observed state Degraded", because a
read-only dataset raises no incident.
- A pool showed one of its two incidents, because the health presenter
read only the rollup, plus a generic "Resource Health Issue" line.
- When an open alert matched the first reason, the drawer dropped every
other reason.
The fix:
- The shared health presenter keeps every incident summary.
- It adds a TrueNAS dataset's state, through a small shared util the
storage table will also use.
- It uses the rollup's category label only when nothing more specific
exists.
- The Overview's Needs attention list skips only the reasons an open
alert already states, ignoring a trailing full stop.
Verified on the phone and desktop drawers for the read-only dataset and
the degraded pool, and on the Machines table, which is unchanged.
Preserve the exact reviewed documentation candidate and its retained privacy/query proof; no runtime or storage changes.
Change-source: pulse-maintainer
Additively incorporate the exact observed main frontier without advancing PR2486 or rewriting accepted work. The newer canonical range remains deferred pending its existing source-check and composition-proof routes.
Change-source: pulse-maintainer
The Security Overview tagged the HTTPS tile red and Critical on every
install, directly above a hardening card that calls HTTPS Recommended on
a private network and says local HTTP is acceptable. The same flag also
counted plain HTTP as a missing critical control in the posture score, so
a typical LAN install read 55 percent.
The tile now uses the hardening card's rule: critical once the instance
is publicly reachable, recommended otherwise. A private install with a
password and protected exports reads 79 percent, still Moderate, and a
public one still shows HTTPS as Critical.
An earlier change (#2490) named the alert type on a second line under
the gateway name. The shared platform-table contract keeps summary rows
on one line, with context in an operational column, a tooltip or the
drawer.
Each gateway alert is about one number in the row, so that number now
carries it. The message shows on hover and for screen readers.
- Queue, hold and message-age alerts colour Queue.
- Deferred alerts colour Deferred.
- Quarantine alerts colour Quarantine.
- Inbound spam and virus anomalies colour the Spam and Virus columns.
Alerts with no column of their own (offline, outbound anomalies) stay on
the status dot, a screen-reader summary, the row tint and the drawer.
Verified at 1440 and 390, light and dark, including the phone drawer.
On a phone the TrueNAS Storage Health column is hidden, so the row drawer
is where a user learns why a row is amber, and it fell short. A read-only
dataset said only Observed state Degraded, because it raises no incident.
A pool showed one of its two incidents, because the health presenter read
only the rollup, plus a generic Resource Health Issue line. And when an
open alert matched the first reason, the drawer dropped every other one.
The presenter now keeps every incident summary, adds a TrueNAS dataset's
state (the provider's only reason for a read-only dataset, read through a
shared util), and uses the rollup's category label only when nothing more
specific exists. The Overview's Needs attention list skips only the
reasons an open alert already states, ignoring a trailing full stop.
Record inspected desktop and touch-WebKit phone light/dark evidence for the final fractional CPU, silent-host and shared-column content. Exercise the actual mobile Filters and View controls before flat-row drawer expansion; production container source is unchanged.
Change-source: pulse-maintainer
Reuse the tested API helper, explain point/source and access distinctions, and preserve data before storage tuning. Copied examples now exercise private success/error responses, redirects, incomplete transport and encoded IDs.
Contract-Neutral: Documentation and recipe checks align with existing history API behaviour; no runtime, storage, entitlement or authentication contract changes.
Change-source: pulse-maintainer
Share the original memory observation policy with the dedicated guest drawer and carry filesystem deferrals through the existing History presentation. Preserve measured zero, stored samples, source and access isolation, and same-ID read budgets. Record fresh eight-state browser proof; native thaw and workload recovery remain independent.
Change-source: pulse-maintainer
Preserve the reviewed candidate commits as the second parent and retain canonical one-shot, redirect, partial-response and disclosure controls in the overlapping API/PBS smoke fixtures. Keep the candidate's canonical PBS guard, scoped private temperature-file assertions and unchanged-verdict audit diagnostics.
Contract-Neutral: Integration of test-only private-help adapters; no runtime, guides, dependencies or frontend source changed.
Change-source: pulse-maintainer
The earlier change named the alert type on a second line under the
gateway name. The shared platform-table contract keeps summary rows on one
line, with context in an operational column, a tooltip or the drawer.
Each gateway alert is about one number in the row, so that number now
carries it: queue, hold and message-age alerts colour Queue, deferred
alerts colour Deferred, quarantine alerts Quarantine, and inbound spam and
virus anomalies their columns, with the message on hover and for screen
readers. Alerts with no column of their own, such as offline or outbound
anomalies, stay on the status dot, a screen-reader summary, the row tint
and the drawer.
The Services tab gave SMART a red dot with no reason, beside the same
Stopped pill as SSH, and spent a column on process IDs. The VMs tab
spent two columns on the bootloader and device counts. None of those
columns answers whether something is wrong.
- A service stopped while set to start at boot, and a VM set to
autostart that is stopped, say "should be running" beside the state,
with the full sentence on hover.
- The State column is hidden on phones, so the service drawer gains a
Condition row and the VM drawer gains the same row and summary note
(skipped while TrueNAS data is stale).
- A VM stopped without autostart gets no note: someone stopped it on
purpose.
- Process IDs, bootloader and device counts stay in the drawers.
- Rows stay single-line, as the shared platform-table rhythm requires.
Verified at 1440 and 390, including the phone drawer for SMART. The mock
has no stopped autostart VM, so that case is covered by component and
drawer-model tests.
The Services tab gave a red dot to SMART with no reason, beside the same
Stopped pill as SSH, and spent a column on process IDs. The VMs tab spent
two columns on the bootloader and device counts. None of those columns
answers whether something is wrong.
A service stopped while set to start at boot, and a VM set to autostart
that is stopped, now say "should be running" beside the state, with the
full sentence on hover. Services also gain a drawer Condition row, since
the State column is hidden on phones. A VM stopped without autostart gets
no note, because someone stopped it on purpose. Process IDs, bootloader
and device counts stay in the drawers. Rows stay single-line, as the
shared platform-table rhythm requires.
Retain the three-sample baseline-plus-ten bound in an isolated copy of the same test binary. Add full-publication copying controls and exact complete admission-content parity, rather than attributing independent registry allocation variation to ignored metadata.
Contract-Neutral: Test measurement correction only; no runtime, identity, freshness, publication or allocation-limit contract changes.
Change-source: pulse-maintainer
The reviewed phase-aware runner and PBS helper exclude Windows. Apply the same build constraint to their existing Bash temperature consumers so Windows test compilation does not retain unresolved runPBSRecipe references. Linux test content, guides and runtime are unchanged.
Contract-Neutral: Align an existing Bash-only test file with its non-Windows test helper; no runtime, guide, dependency or platform contract change.
Change-source: pulse-maintainer
Retain exact candidate 87790b9042 after independent diff and hash-bound proof review. Only test observer source changes; guides and runtime stay unchanged.
Change-source: pulse-maintainer
Retain the batch-start main frontier before integrating the independently reviewed documentation-test candidate. No publication or deployment.
Change-source: pulse-maintainer
Settings said "2 down" where Machines said "1 offline, 3 need
attention" for the same checks. Settings counted any failed latest
probe as down, while Machines and the alert engine count a check offline
only once it has failed its threshold number of times in a row.
Settings now classifies each check with the Machines status of its
resource when that is loaded, and otherwise reads the target the way the
availability poller does, so both pages report the same counts in the
same words. A check that is failing but not yet offline is amber, with
the threshold on hover.
The Machines table shows 24h uptime beside the latest result (it existed
only in the Fleet view), and only when most of the window had a
determinate answer, refreshing every five minutes. Failures read "3 in a
row" instead of "3/2", polling cadence moves to the widest tables, and
the duplicate Manage link is gone.
A bounded synthetic comparison shows the whole-shell watchdog can kill a POST before its own curl deadline or expire before a PBS request starts. Observe each phase privately, preserve curl arguments and exact request limits, cancel owned descendants and retain incomplete pipe results. Exercise delayed preparation, one-shot transport, private responses and every cancellation phase without changing any guide or runtime.
Contract-Neutral: Repair Bash documentation test timing and owned-child observation only; no guide, mirror, runtime, API, authentication, request deadline, dependency or permission contract changes.
Change-source: pulse-maintainer
Bind the new 0600 assertion only to the reviewed temperature cleanup helper rather than impose it on the unchanged public Unified Agent installer recipe. Include the captured canned audit output when its existing one-call assertion fails, preserving verdicts, call counts and timing controls. The complete second proof retains its fail-closed two-call observation without a cause or successful-retry claim.
Contract-Neutral: Test adapter scope and failure diagnostics only; existing guide, audit verdict and timing contracts are unchanged.
Change-source: pulse-maintainer
A gateway Proxmox reported online could be failing its job: mail held
in the queue past the configured age. The Mail Gateway table ignored
alerts, so that gateway rendered green and counted as Healthy while the
problem sat only on the Alerts page. Alerts are keyed by the PMG
instance id and rows by the unified id, so nothing joined them.
Rows now match unacknowledged alerts across the gateway's identity
aliases. An alerted, reachable gateway reads and filters as needing
attention (red when an alert is critical) and names the alert type under
its name. Its expansion leads with the exact alert message. On phones,
six tracks truncated "mail-gateway-eu" and "mail-gateway-us" to the same
text; the node count moves into the expansion so names stay whole.
Settings said "2 down" where Machines said "1 offline, 3 need
attention" for the same checks. Settings counted any failed latest
probe as down, while Machines and the alert engine count a check offline
only once it has failed its threshold number of times in a row.
Settings now classifies each check with the Machines status of its
resource when that is loaded, and otherwise reads the target the way the
availability poller does, so both pages report the same counts in the
same words. A check that is failing but not yet offline is amber, with
the threshold on hover.
The Machines table shows 24h uptime beside the latest result (it existed
only in the Fleet view), and only when most of the window had a
determinate answer, refreshing every five minutes. Failures read "3 in a
row" instead of "3/2", polling cadence moves to the widest tables, and
the duplicate Manage link is gone.
The Coverage tooltip and expansion render the posture explanation
verbatim, and it read like the model: "a current subject-linked
backup", "older than the configured freshness window", "a newer
provider failure", "a stronger protection claim".
Each explanation now says what Pulse found in plain words and stays true
to its branch: the stale case names the window ("the newest confirmed
backup is older than 7 days"), the failure case no longer claims a
timing it cannot know, and partial history without a backup no longer
says a backup exists. The window formatter never rounds a sub-hour or
fractional window up. The frontend fallbacks for checking, unrated and
unknown rows and the snapshot-only tooltip use the same voice.
Preserve exact Core candidate ab15c4db8a and its two prerequisite commits. Retained connected proof and complete cost samples support allocation and scaling gains, not native CPU/RSS relief.
Change-source: pulse-maintainer
Keep the shared direct-curl recorder compatible with the other existing guides while binding API requests to its reviewed private helper. Update the temperature selector to the reviewed fail-closed temporary download and retain disable-first TLS and mode checks. The first broad proof caught both adapter faults before publication.
Contract-Neutral: Test-only adapters for existing reviewed guide contracts; no runtime, guide, dependency or frontend change.
Change-source: pulse-maintainer
Preserve the exact reviewed permission-help commit and the composed light-mode heading plus multiline service instructions. Record a fresh parent-bound browser receipt after inspecting eight Discord and Telegram captures across Chromium desktop and WebKit phone light/dark states. The fixture uses production form/state/CSS with source-exact public templates and no notification operation; earlier harness failures remain retained separately.
Contract-Neutral: Browser verification and offline fixture only; no runtime, schema, permission, notification, navigation or dependency contract change.
Change-source: pulse-maintainer
Patrol's workspace views became routes, so the briefing spec's tab
click now pushes a history entry before it reloads twice. Playwright's
WebKit build hits a release assertion in
WebCore::Navigation::initializeForNewWindow when a pushState-created
entry is reloaded and the page navigates again, so the second reload
crashed the page on mobile-safari. It reproduces with a bare
history.pushState on any route, so this is not Pulse behaviour.
The spec now reloads by navigating to the current URL, which loads the
same document without tripping the assertion. It passes on
mobile-safari, chromium and mobile-chrome.
The note sat before the same frontend-primitives heading another lane used and conflicted with main. Taking main's file with the note folded into the existing object-drawer clause lets main merge cleanly.
Compose exact upstream a82a8e0474 additively without changing accepted commits. Resolve the append-only registry-test conflict by retaining both the reviewed metadata invalidation control and upstream stale-health control. Existing PR2486 remains unchanged while normal source-check corrections are pending.
Change-source: pulse-maintainer
The Coverage tooltip and expansion render the posture explanation
verbatim, and it read like the model: "a current subject-linked
backup", "older than the configured freshness window", "a newer
provider failure", "a stronger protection claim".
Each explanation now says what Pulse found in plain words and stays true
to its branch: the stale case names the window ("the newest confirmed
backup is older than 7 days"), the failure case no longer claims a
timing it cannot know, and partial history without a backup no longer
says a backup exists. The window formatter never rounds a sub-hour or
fractional window up. The frontend fallbacks for checking, unrated and
unknown rows and the snapshot-only tooltip use the same voice.