Commit Graph

598 Commits

Author SHA1 Message Date
pulse-triage[bot] 3a12cf11e5 Retain successful Diagnostics journey screenshots and runner facts
Capture final rendered state on every desktop and phone case, plus disabled exports during refresh. Bound the offline driver to leave time for owned teardown and retain its runner identity without retries or broader production claims.

Contract-Neutral: Integration proof capture only; production behavior and API contracts unchanged.
Change-source: pulse-maintainer
2026-10-04 15:41:57 +01:00
pulse-triage[bot] 6548b2e23c Type both Diagnostics response fixtures explicitly
The full-export response includes populated identity arrays, so its route fixture must not inherit the empty response's never-array inference. Keep both payload shapes type-checked without suppressing compiler diagnostics.

Contract-Neutral: Integration fixture typing only; no runtime, API, permissions or product contract change.
Change-source: pulse-maintainer
2026-10-04 14:36:34 +01:00
pulse-triage[bot] 09455d69a6 Align integration type resolution with its modern compiler
The locked TypeScript compiler rejects the removed node10 resolution mode before checking any integration tests. Use bundler resolution for the extensionless imports transpiled by Playwright, without changing test runtime or product behaviour.

Contract-Neutral: Test tooling only; no runtime, API, permissions or product contract change.
Change-source: pulse-maintainer
2026-10-04 14:27:56 +01:00
pulse-triage[bot] ed168c8d7e Verify safe Diagnostics exports across desktop and mobile journeys
Replace obsolete exact selectors with the existing accessible privacy controls. Exercise full and review-first file contents, identity redaction and joins, displayed-result-only downloads, keyboard and viewport access, and failed-refresh retention in the real integration spec. Add an offline full-app driver with explicit synthetic bootstrap boundaries.

Contract-Neutral: Integration verification only; no runtime, API, permissions or product contract change.
Change-source: pulse-maintainer
2026-10-04 14:14:06 +01:00
pulse-triage[bot] a1cde2ffe0 Keep PBS History E2E fixtures faithful to validated responses
PR2457 Core E2E run 37188438472 fails both PBS chart assertions in three browser projects because its mock omits range and start/end fields required by the reviewed response admission contract. Supply the real response envelope and one consistent point interval; retain target identity checks and all chart assertions. No product validator or release gate changes.

Change-source: pulse-maintainer
2026-10-04 10:09:26 +01:00
pulse-triage[bot] 30ca96816f Keep late browser refusal terminal during context cleanup
A denial arriving as the browser closes must leave a failed bounded receipt and suppress recovery authentication. Exercise real late HTTP401/403 responses alongside the earlier navigation and API controls.

Contract-Neutral: Enforces the existing all-response refusal contract through final context disposal; no new acceptance route or permission.
Change-source: pulse-maintainer
2026-10-04 03:55:53 +01:00
pulse-triage[bot] d855d322e8 Bind Chromium denial receipts to executed recovery guard proof
The browser sandbox has no jq. Retain all browser control receipts and execute the actual harness guard in the offline source-proof VM with their explicit input binding, checking denied and permitted process/auth preparation. Browser context cleanup failure also remains a failed receipt.

Contract-Neutral: Existing refusal, bounded evidence and cleanup contract is unchanged; this connects its proof across the browser and source-proof runtimes.
Change-source: pulse-maintainer
2026-10-04 03:49:31 +01:00
pulse-triage[bot] 73b790b89b Stop release browser access at every authenticated refusal
Bind anonymous probes at request start, record bounded navigation/API/SSE denial, close the page immediately and suppress recovery authentication when the upgrade receipt is refused or unavailable. Exercise real Chromium response controls through the actual shell recovery guard.

Change-source: pulse-maintainer
2026-10-04 03:44:51 +01:00
pulse-triage[bot] fdf464578a test(release): exercise exact published RC through Tailscale browser
Reuse the signed-install lifecycle assertions on a fresh public hosted VM without Docker identity overrides. Bind immutable release assets/control, observe one real UI apply/SSE/modal journey, retain sanitised terminal evidence and stop access refusals without reauthentication. Update the deployment contract and execute its recovery-access guard; release judgment and gates are unchanged.

Change-source: pulse-maintainer
2026-10-04 02:15:25 +01:00
pulse-triage[bot] d9a2c78612 Assert held delivery rows separately from unreadable evidence
The case-insensitive Deferred substring also matches the held-read warning after a 503. Scope the exact badge and source warning to delivery activity, prove pending retention and independent attempts, withdraw visible rows on 503 and 403, and recover only after a successful held read. Production runtime semantics are unchanged.

Contract-Neutral: Verification-only correction for existing alert evidence semantics; no runtime, alert policy or subsystem contract delta.
Change-source: pulse-maintainer
2026-10-03 20:04:41 +01:00
rcourtman 9e7a5ffdeb Move frontend to Tailwind CSS 4 and jscpd 5 to drop braces
GHSA-vfj7-8cjw-p6xm affects every braces release and has no fix, so the
required frontend audit failed with seven high findings on any pull
request that changes the dependency graph. Tailwind CSS 3 (chokidar,
fast-glob, micromatch) and jscpd 4 (@jscpd/finder, fast-glob) were the
only paths in, both dev-only, and no override can remove braces from
fast-glob or micromatch. Tailwind CSS 4.3.3 through @tailwindcss/vite and
jscpd 5.4.0 leave none; npm audit over the full graph reports zero.

The stylesheet keeps the v3 rendering. It pins the v3 palette (inlined,
so opacity modifiers compile to static colors), font stacks and line
heights, keeps v3's cascade order by placing former component and
unlayered rules around the generated utilities, and restores v3 hover on
touch devices, gray-200 default borders, the 3px blue ring, placeholder
color, button cursor, table-cell padding and the space-* and divide-*
child selectors. The 900/950 shades Pulse overrode with 25% alpha are
opaque now and their callers say /25, because v4 multiplies an opacity
modifier into a translucent color instead of replacing it. Opacity
modifiers on var() colors that v3 never generated are removed.

Utility order changed from lexical to numeric, so a few caller overrides
that silently lost in v3 would start to win. Touch targets keep their
authored 44px phone size (the Machines row stays 32px); cosmetic
overrides v3 never applied are removed, and overrides it did apply use
the important suffix.

Contract-Neutral: Tailwind CSS 4 migration for GHSA-vfj7-8cjw-p6xm: utility class renames and stylesheet compatibility, no subsystem contract change
2026-10-03 15:19:35 +01:00
pulse-triage[bot] 5cc1f2f7b0 Corroborate PBS History integration fixtures with reported machine names
PR #2341 Core E2E run 36660586289 fails its desktop and phone PBS target assertions because the old fixture supplies only labels and a non-contract pbs.hostname. The reviewed identity repair requires reported pbs.nodeName or an explicit Agent link. Supply nodeName and retain the expected guest/standalone History targets and wrong-target rejection. No runtime behavior changes.

Contract-Neutral: Integration-fixture machine identity only; existing History assertions and runtime contracts are unchanged.
Change-source: pulse-maintainer
2026-09-30 04:16:08 +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
rcourtman f5651f3eb9 Match setup handoff E2E to the corrected first-source copy (#2314)
#2309 reworded the empty setup-complete next step so it no longer
promises temperatures and SMART on every Proxmox host, but the
stable-tier E2E spec `30-setup-platform-connections-handoff` still
waited for the old sentence. Core E2E has failed on main since that
merge. This expects the current English copy; every other string the
spec asserts is present in source.
2026-09-28 23:03:53 +01:00
rcourtman 45491819f9 Match setup handoff E2E to the corrected first-source copy
#2309 reworded the empty setup-complete next step so it no longer
promises temperatures and SMART on every Proxmox host, but the stable
tier E2E spec still waited for the old sentence. Core E2E has failed on
main since that merge. Expect the current English copy.

Contract-Neutral: Test copy follows #2309; no runtime change
2026-09-28 22:24:10 +01:00
rcourtman a866b27f2a Hide Patrol navigation when AI is off and rename Updates
Issue #905 asked for every AI entry point to disappear when AI is
switched off, and the Assistant launcher still honours that through the
assistantEnabled session capability. Patrol did not: v6 added it as a
permanent top-level tab, mobile bottom-bar slot, g r shortcut and
command-palette entry, and the palette also kept offering Assistant
commands. Patrol cannot run without a configured provider, so an AI-off
install carried a tab that only led to an "off" page.

Gate all of those on the same capability as the Assistant launcher.
Settings keeps its Patrol and Assistant items and /patrol stays
reachable, so the path back to turning AI on is unchanged.

Also rename the System settings item "Pulse server updates" to
"Updates" and drop "runtime" from its description. The item already sits
in the System group, and the description still sends agent updates to
Infrastructure, which was the reason for the longer name.
2026-09-28 22:05:02 +01:00
Richard Courtman c48b5dc0eb Say the agent adds temperatures and SMART on Proxmox
The first rewrite told users that Proxmox, TrueNAS and VMware need
nothing installed, which reads as "do not put the agent on them". On
Proxmox that is wrong: the API does not report node temperatures or SMART
disk health, and the agent on each node does. TrueNAS already reports
both through its API, and ESXi hosts take no agent, so the copy now says
to start with the API and add the agent on Proxmox nodes.

Contract-Neutral: copy-only: correct first-source copy about the agent on Proxmox nodes; no runtime, API or primitive change
2026-09-28 16:10:45 +01:00
Richard Courtman a5de22f114 Use plain words on the first-source setup screen
After security setup, the screen asked new users to choose "how the first
system should enter the unified infrastructure model: platform API
inventory, Pulse Agent telemetry, or both", under a "Choose the first
source strategy" heading. Someone who only wants their Proxmox server on
screen knows none of those terms, and this is where most never-activated
installs stop: in the week to 2026-09-28, 280 of 596 persistent installs
that never monitored anything had finished security setup and then never
configured a connection.

The screen keeps its structure and routing. The copy now says what to
do and what each path shows: connect Proxmox, TrueNAS or VMware by API
with nothing to install, add the agent for temperatures, disk health and
Docker, or both. German and Spanish follow, and the agent-lifecycle
contract records the plain-words rule.

Contract-Neutral: copy-only: plain-language first-source setup copy; owning agent-lifecycle clause updated; no runtime, API or primitive change
2026-09-28 16:05:35 +01:00
courtmanr@gmail.com 81e92bff95 Report update channel and last update check outcome in telemetry (#2285)
A failed update check never reaches the update history, because nothing
was applied, so telemetry could not tell an install whose check is broken
from one that was offered an update and ignored it. The 6.4.3-rc.1 installs
looked healthy while their check failed on every call (#2282).

The update manager now records a closed outcome for every check on the
install's effective channel (up_to_date, available, no_release,
rate_limited, network_error, metadata_error, skipped, error), tagging
lookup failures without changing their error text, and ignores previews of
another channel from Settings. Telemetry schema v18 exports update_channel,
update_check_outcome and update_available. No version, URL or error text
leaves the install. The Settings preview type, privacy disclosure, adoption
report and subsystem contracts are updated to match; the Pulse Pro receiver
change lands separately and the parity check passes against it.
2026-09-27 23:50:23 +01:00
rcourtman e1f23b35d0 Wait for the coalesced report in the agent registration journey
The agent registration journey posts a second host report about a
second after the first and read /api/state at once. Report-driven store
refreshes now fold into one trailing refresh per 2-second window, so
the update is published within the window rather than before the report
response returns, and the journey read the first report's 42.5% CPU
instead of 75% (Core E2E "Agent registration lifecycle"). Poll
/api/state for up to 10 seconds until the update appears, then check
the remaining fields as before.
2026-09-24 11:30:28 +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
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
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] 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
rcourtman 95ad983199 Merge pull request #2103 from rcourtman/dependabot/npm_and_yarn/tests/integration/typescript-7.0.2
build(deps-dev): bump typescript from 5.9.3 to 7.0.2 in /tests/integration
2026-09-17 00:32:16 +01:00
dependabot[bot] 3e8a85ae79 build(deps-dev): bump typescript in /tests/integration
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.9.3 to 7.0.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.9.3...v7.0.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 7.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-15 03:30:38 +00:00
dependabot[bot] 35ae26bf35 build(deps-dev): bump @types/node in /tests/integration
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.19.24 to 26.5.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.5.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-15 03:30:32 +00:00
pulse-triage[bot] 605643b017 fix(web): preserve PBS host history targets in Backups
Backups fetched only PBS service rows, leaving standalone host telemetry unavailable, and rejected agents merged into PVE guests. Include PBS agent rows and reuse the deduplicated Overview inventory for unique correlation without changing the PBS drawer identity. Keep guests without agent telemetry and ambiguous identities excluded. Focused drawer and surface regressions cover missing disk data and canonical history targets.

Change-source: pulse-maintainer
2026-09-10 01:03:55 +01:00
pulse-triage[bot] 50270c2499 fix(web): discard obsolete import impact previews
Invalidate in-flight preview generations when the import plan changes or the editor unmounts. Ignore stale success, error and completion updates so another endpoint cannot inherit the prior request's impact.

The deferred-error regression fails before repair. Record the preview lifetime and unchanged setup authority in both owning contracts, with consumer boundary coverage. All 87 focused tests and two source-built Chromium desktop/narrow interaction cases pass; retain exact-content browser evidence.

Change-source: pulse-maintainer
2026-09-10 00:36:48 +01:00
pulse-triage[bot] bdf03e54eb chore(deps): qualify isolated Moby API and client update
Separate Docker SDK maintenance from the grouped dependency update so unrelated modules remain pinned. Preserve older-daemon negotiation and container recreation payloads with real HTTP compatibility fixtures, and ensure dependency-only changes invalidate cached development binaries.

Change-source: pulse-maintainer
2026-09-09 22:29:18 +01:00
pulse-triage[bot] 6cddb75fb1 fix(web): wrap entitled organization header on compact screens
Activate the offline default context before mobile organization audits. Preserve visible session controls without page overflow, with real-backend Chromium and WebKit proof.

Change-source: pulse-maintainer
2026-09-09 11:42:59 +01:00
pulse-triage[bot] 14a109444c test(e2e): provision offline signed organization entitlements
Keep a loopback ephemeral issuer alive for source-built managed browser runs and activate each organisation through the authenticated API. Verify installation bindings without billing-state injection or signature bypass, and retain a narrow CI provisioning proof separately from quarantine acceptance.

Change-source: pulse-maintainer
2026-09-09 11:35:47 +01:00
pulse-triage[bot] b72d81bbd8 test(settings): audit the app shell's scrollable content
Retained Safari failures scroll window even though the app shell owns Settings overflow. Traverse and measure the same content owner, and include its horizontal scroll width so nested overflow cannot falsely pass. Add Chromium/WebKit geometry proof at three phone widths with a window-scroll negative control.

Change-source: pulse-maintainer
2026-09-09 11:21:52 +01:00
pulse-triage[bot] 2ff0272bb0 test(web): align provider readiness assertion with rendered copy
The retained Chromium failure snapshot contains the warning and all capability evidence. Match its current sentence punctuation without relaxing readiness checks or changing production behaviour.

Change-source: pulse-maintainer
2026-09-09 10:57:34 +01:00
pulse-triage[bot] 6667bd8ad0 test: capture bounded paired Settings bootstrap timings
The hosted Settings failure stalls during bootstrap without enough evidence to separate server delay from browser scheduling. Attach redacted, bounded cookie-session HTTP timings alongside browser response timings without weakening readiness or layout assertions.

Change-source: pulse-maintainer
2026-09-09 10:03:05 +01:00
pulse-triage[bot] ef4116bc38 test(alerts): distinguish staged recovery edits from saved intent
The real-backend persistence check covered only the saved path. Assert that reload discards an unsaved recovery edit before saving it, so browser-only state cannot be mistaken for persisted operator intent. Retain reload and real startup checks after Save.

Change-source: pulse-maintainer
2026-09-08 10:32:49 +01:00
pulse-triage[bot] 6a66de4556 test(alerts): verify saved recovery intent across backend restart
Exercise the production Schedule control and real configuration API on an owned local backend without alert endpoint mocks. Keep persistence evidence distinct from installed notification delivery.

Change-source: pulse-maintainer
2026-09-08 10:06:21 +01:00
pulse-triage[bot] a39b08e55d test(web): verify native return through owning CDP session
The application preflight stayed visible because Playwright enabled focus emulation on another CDP session. Disable that override in an opt-in loopback transport without fabricating visibility or weakening assertions. Preserve the ordinary fixtures and prior adverse evidence.

Change-source: pulse-maintainer
2026-09-08 09:24:03 +01:00
pulse-triage[bot] 7443465c28 test(web): retain application incident foreground preflight
Exercise the real history row before native background and explicit refresh. Keep the opt-in headed check and its observed visibility failure distinct from passing component coverage and installed acceptance.

Change-source: pulse-maintainer
2026-09-08 09:20:43 +01:00
pulse-triage[bot] 7eec890025 fix(web): clear explicitly withdrawn Proxmox memory
A canonical snapshot can omit memory after the producer marks its Proxmox
facet unavailable. Retaining the previous display metric hides withdrawal
and leaves a stale percentage visible. Clear that explicit transition in
full and fast merges and emit the corresponding store operation, preserving
ordinary partial omission and trusted canonical metrics including zero.

Pin withdrawal and recovery with adapter tests and desktop/narrow Chromium
acceptance. Workload details remain canonical-only; do not invent raw totals
or Usage UI. Record inspected screenshots and matching subsystem contracts.

Change-source: pulse-maintainer
2026-09-07 23:03:54 +01:00
pulse-triage[bot] 6feddfebee test(web): verify hybrid memory updates in Chromium
Exercise canonical REST and socket snapshots through the Proxmox table and guest drawer for issue #1962. Preserve platform fallback and measured-zero presentation without substituting nested agent memory; backend polling remains separately qualified.

Change-source: pulse-maintainer
2026-09-07 21:36:04 +01:00
pulse-triage[bot] f81b659497 fix(web): preserve Space activation before type-to-search
The populated Ceph thresholds browser test reproduced Space on the disclosure moving focus to search instead of collapsing it. Leave Space to buttons, summaries and role buttons, while preserving ordinary type-to-search input. Protect the keyboard journey with a full collapsed focus cycle and reopened action focus, plus focused hook coverage. Chromium failed before this repair and passes after it; 59 focused unit tests pass.

Change-source: pulse-maintainer
2026-09-07 15:17:11 +01:00
pulse-triage[bot] 096480a4e3 test(web): verify compact settings headings and canonical routes
Fresh multi-tenant browser runs reproduced desktop-title expectations on mobile organization panels. Match the compact navigation labels, update the server-updates title, and assert canonical URLs including the legacy AI route redirect. All 33 settings-shell checks pass across Chromium, mobile Chrome and mobile Safari; production presentation policy is unchanged.

Change-source: pulse-maintainer
2026-09-07 14:24:22 +01:00
pulse-triage[bot] 82ad139f0a test(e2e): keep shared multi-tenant fixture non-white-label
The multi-tenant bootstrap granted white_label, which security/status maps to commercial suppression. Settings shell tests then reached General instead of the expected billing pages. Keep the shared fixture non-white-label and assert that both general-purpose profiles exclude this presentation-changing entitlement. Dedicated commercial-boundary tests and production policy are unchanged.

Change-source: pulse-maintainer
2026-09-07 13:56:57 +01:00
pulse-triage[bot] 6b40a52add test(truenas): supply API key owner in setup journeys
The setup fixtures omitted the owner identity required by supported API-key authentication, so they stopped at local validation rather than exercising test, preview, save and capacity denial. Supply the owner and assert it reaches test and create payloads; retain a browser assertion that a missing owner sends no test request.

Validation: reproduced both original Chromium failures and inspected the missing-owner screenshot; corrected spec passes 3/3 with no retries using pulse-heavy-run. Focused TrueNAS state tests pass 36/36 and E2E tier selection passes. No runtime or tier changes.
Change-source: pulse-maintainer
2026-09-06 08:26:14 +01:00
pulse-triage[bot] 2d63fbc25b test(web): scope TrueNAS incident count to active investigation surface
Run 34005581846 reports duplicate incident-count matches in the main page and mobile investigation sheet. Scope the existing count assertion to the active surface without selecting an arbitrary count match or changing product behaviour. Remove the unused panel locator. Browser requalification remains required; only diff whitespace validation was run locally.

Change-source: pulse-maintainer
2026-09-06 03:47:39 +01:00
pulse-triage[bot] 1abaea81c3 test(web): qualify changed backend incidents across socket recovery
Existing browser qualification only compared unchanged navigation. Exercise genuine backend acknowledgement and empty active-alert responses while browser reads are interrupted, then assert rendered recovery without reload. Bind the target to the current generated estate and follow acknowledgement through list windowing. Both focused cases and the complete ten-case recovery matrix pass.

Change-source: pulse-maintainer
2026-09-05 22:44:25 +01:00
pulse-triage[bot] 8be4e41e8c test(web): extend phone reflow qualification to 320px
Existing phone receipts cover 390px, whereas reflow guidance includes 320px cell content. Extend the opt-in navigation and text-bound checks without changing product behaviour. Preserve the stronger single-line label requirement at 390px while allowing wrapping at 320px. Record the initial one-pass/one-failure diagnostic and the cancelled queued final rerun explicitly; final test revision remains browser-unqualified.

Change-source: pulse-maintainer
2026-09-05 19:06:45 +01:00
pulse-triage[bot] 537c7ae9a5 fix(web): keep Docker phone update labels and detail names readable
Chromium receipts showed that the phone table clipped update badges without any horizontal path to recover the text. Wrap existing labels within reduced cell padding and allow expanded drawer names to wrap, preserving Android page-owned scrolling and existing action semantics. Add real text-bound and heading assertions and retain six passing reconnect cases plus inspected synthetic screenshots.

Change-source: pulse-maintainer
2026-09-05 18:28:23 +01:00
pulse-triage[bot] 0833e8dc80 test(web): qualify superseded admission and diagnose narrow table access
Close the missing third-organisation and real shell SIGTERM evidence without expanding product scope. Retain measured narrow-table clipping and accessible-name evidence so follow-up repairs preserve Android vertical gesture ownership rather than assuming horizontal scroll access.

Validation: eight Chromium admission cases, two local-backend narrow socket/access runs, real Compose/Playwright SIGTERM cleanup, twelve focused shell tests, and diff checks passed. No installed release or physical-device qualification.
Change-source: pulse-maintainer
2026-09-05 17:57:42 +01:00