Commit Graph

648 Commits

Author SHA1 Message Date
rcourtman 206c352bef Pick the sdc disk row by kind in the TrueNAS history spec
The spec took the first table row containing "sdc". The archive pool's
Health cell now carries the copied SMART alert for /dev/sdc, so that row
matched first and the spec opened the pool drawer instead of the disk's,
then timed out waiting for the sdc drawer. Select the disk row by its
storage kind, which is what the test means.
2026-10-05 06:58:37 +01:00
rcourtman 6e48d61186 Reload the Patrol briefing E2E page by navigation on WebKit
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.
2026-10-05 04:48:40 +01:00
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] acace4d4f2 Integrate reviewed backup resumption evidence correction
Retain exact Core candidate. Nineteen focused committed-source checker and CLI methods establish rejection of unsupported post-task resumption while preserving calibrated healthy records. No production polling or native thaw acceptance is changed.

Change-source: pulse-maintainer
2026-10-04 05:20:55 +01:00
pulse-triage[bot] 1920db3c34 Require observed post-task reads in backup resumption records
Reject a resumed disk or memory History claim when the complete native trace lacks the corresponding successful new guest read after backup completion. Preserve calibrated clock bounds, normal later polls, independent filesystem writes and native provenance review; no QGA command or runtime behaviour changes.

Contract-Neutral: Tighten consistency checks for the existing backup-safety measurement only; production polling, interfaces, access boundaries and release gates are unchanged.
Change-source: pulse-maintainer
2026-10-04 05:09:18 +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] 1070ca275b Preserve returned backup presentation and exact browser proof
Compose the existing Web completion without reparenting its source or own-parent receipts. Keep the guest guard, completed-backup truth, upstream disk hover and Unknown dot, and test-only exact Deferred assertions. Return the combined source for independent review and protected publication.

Change-source: pulse-maintainer
2026-10-03 20:49:38 +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
pulse-triage[bot] ee069f2144 Add independent bounded guest-write evidence for backup thaw
An OK PVE task and HTTP admission controls cannot establish thaw. Supply a credential-free guest-local fsync/readback witness and bounded offline record checks for the real #2439 job, without QGA probes, recovery actions or a replacement native platform. Require actual overlap, every covered filesystem and truthful monitoring resumption; retain native provenance and execution with Delivery.

Contract-Neutral: Measurement support for the existing guest-agent backup safety obligation only; production APIs, polling, access boundaries and release gates are unchanged.
Change-source: pulse-maintainer
2026-10-03 19:44:31 +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
pulse-triage[bot] f7a43d2794 Retain observed Docker update alert age through cleanup
Hourly cleanup previously aged pending image updates by first detection, so a continuing update older than 24 hours lost its tracking and could restart its delay. Track observation activity separately, keep unknown checks pending, and reclaim state when observations stop or an affirmative clear arrives. Cover 24- and 48-hour delays and cleanup.

Contract-Neutral: Preserve the existing Docker update alert policy and public contract while correcting internal tracking expiry.
Change-source: pulse-maintainer
2026-09-28 05:03:26 +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] bfae4ce0c8 fix(ui): keep disk mounts in the parent scrolling flow
The nested 140px mount list relies on a thin scrollbar to reveal additional disks, which #2051 reports as invisible in Firefox. Remove that nested scroll boundary so all mounts participate in the existing outer scroll flow without changing data or global scrollbar styling.

Validate short and long lists in light/dark Firefox and Chromium fixtures, including keyboard reachability, and retain aggregate/empty-state component coverage. This is synthetic browser proof, not reporter installation acceptance.

Change-source: pulse-maintainer
2026-09-11 11:26:20 +01:00
pulse-triage[bot] 72809bc1cf docs: pin registry qualification OCI references
PR #2049 fails the repository docs-link drift guard because its qualification references follow mutable upstream main. Bind both OCI references to the verified v1.1.1 commit without changing the runtime repair or weakening the guard.

Change-source: pulse-maintainer
2026-09-11 11:03:38 +01:00
pulse-triage[bot] 052286db23 fix(docker): reject non-manifest registry fallback responses
Headerless HTTP 200 error pages were hashed into unrelated latest image digests and cached as updates. Require a schema-2 manifest envelope before trusting fallback body metadata, preserving valid indexes, platform comparison and existing error backoff. Retain before/after collector, ingest and resource endpoint qualification; this reproduces a mechanism, not the exact reporter cause in #2048.

Change-source: pulse-maintainer
2026-09-11 10:28:15 +01:00
pulse-triage[bot] ad9877e28d test: match lifecycle receipts at published webhook precision
Preserve nanosecond API timestamps for incident queries, compare recipient alert identity and RFC3339-second starts, and reject ambiguous same-second recurrences. Require a recipient receipt for terminal retry as well as its original notification audit.

Change-source: pulse-maintainer
2026-09-10 16:22:51 +01:00
pulse-triage[bot] eb88aa7be2 test: retry live terminal alerts before resolving acceptance fixture
Installed beta.2 correctly cancels obsolete terminal firing rows on resolution. Exercise operator retry while the occurrence is live, then verify distinct recurrence delivery, and retain failed retry responses.

Change-source: pulse-maintainer
2026-09-10 16:21:31 +01:00
pulse-triage[bot] 73a7e477ab test: correct installed alert fixture scope contract
The first immutable beta.2 fixture stopped with 403 before alert stimulus because the documented token omitted monitoring:write. Include the required scope and verify both corrected admission and the original denial through the production scope guard. Preserve rejected attempts and require reviewed fresh fixtures; no product authorization checks are changed.

Change-source: pulse-maintainer
2026-09-10 15:58:12 +01:00
pulse-triage[bot] 0f87aad59f test(alerts): add external installed lifecycle acceptance driver
Published notification recovery still lacks installed ordinary-recipient lifecycle evidence. Add a synthetic-only HTTP driver with bounded faults, occurrence-aware receipts, preserved-state restart attestations and explicit incomplete-acceptance reporting so qualification can gather that evidence without changing the frozen product.

Validate the harness failure/observation guards and its report/template contracts separately from installed acceptance. No production code or release gate changes.

Change-source: pulse-maintainer
2026-09-10 15:38:49 +01: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] 37d1874904 docs(msp): verify published evaluation bundle guidance
Replace obsolete v6.2.1 guidance using retained signed v6.4.1 delivery and payload evidence. Limit privacy claims to the evaluated licence request, synchronize the shipped guide, and adapt the registered deployment regression and contract without claiming installed onboarding acceptance.

Change-source: pulse-maintainer
2026-09-09 20:23:20 +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