Commit Graph

1690 Commits

Author SHA1 Message Date
pulse-triage[bot] 7de1195416 fix(web): align webhook test custom fields with saved configuration
Manually entered Pushover aliases were normalised on save but not on test, so the test could exercise a different payload. Apply the same normalisation and retain a failing-before parity regression; 56 focused webhook tests pass.

Change-source: pulse-maintainer
2026-09-08 23:29:31 +01:00
pulse-triage[bot] 6edaa56f4f fix(web): avoid prescribing permissions from update access failures
The update evidence reason represents generic permission errors and HTTP 403, not a verified missing Sys.Audit privilege. Report access denial without prescribing a role change, as illustrated by the new #1802 retest. Preserve unavailable and stale evidence semantics. Both focused presentation and drawer suites pass (6 tests).

Change-source: pulse-maintainer
2026-09-08 21:59:40 +01:00
pulse-triage[bot] 4462e43288 fix(release): retain streamed stress-test timing evidence
Buffered package logs cannot map the API stress-test failure to resource telemetry. Stream Go events and retain a bounded target lifecycle with distinct event, receipt and resource collection times, while preserving readable output and pipeline failure status. Synthetic decoder and worker tests cover pass, skip, failure and unavailable telemetry; this does not clear historical qualification or authorise a replay.

Change-source: pulse-maintainer
2026-09-08 20:45:07 +01:00
pulse-triage[bot] a6f90ec181 fix(release): bound transient convergence API read retries
Scheduled reconciliation run 34264958741 aborted while listing releases after GitHub returned HTTP 504. Allow JSON API reads three attempts with bounded backoff so a transient gateway error need not strand this reconciliation until the next schedule. Discard partial pagination on failure and preserve terminal failure after exhaustion.

Only read helpers opt in; mutations, downloads, log reads and access failures retain their single-attempt behaviour. Focused reconciliation suite passes 42 tests, including new transient-read regressions that failed before the change.

Change-source: pulse-maintainer
2026-09-08 20:02:08 +01:00
pulse-triage[bot] 6988e486f2 fix(web): identify notification destination server failures
The queue and health API expose server_error, but the delivery UI treated it as unclassified. Preserve that diagnosis and direct operators to service availability and server logs before retrying retained deliveries. Add focused label and health guidance regression coverage.

Change-source: pulse-maintainer
2026-09-08 12:54:21 +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] 953cda829a docs(test): clarify mocked alert activation in browser proof
The application journey stubs configuration and active alerts as well as incident data. State those boundaries explicitly so UI refresh evidence is not mistaken for saved-intent persistence or real activation acceptance.

Change-source: pulse-maintainer
2026-09-08 09:50:56 +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] c5dca69702 test(web): cover production incident refresh after tab suspension
Existing suspension coverage forces overlapping requests through a fixture-only control. Add a separate cached-read scenario using the enabled production Refresh button after native foreground return, so that ownership evidence is not mistaken for user refresh integration. Document the synthetic component and full-application boundary.

Change-source: pulse-maintainer
2026-09-08 08:42:45 +01:00
pulse-triage[bot] 64c63e7435 Merge candidate 20260908T072509Z-delivery-trust
Change-source: pulse-maintainer
2026-09-08 08:35:43 +01:00
pulse-triage[bot] ded338657d fix(ci): select governed source for scheduled release rehearsals
The default-branch schedule rejected main before any product checks. Resolve the governed branch to one commit, check its VERSION against policy and retain exact event-source checks for manual dispatches. Report workflow and tested source separately and exercise selection against local Git fixtures in governance CI.

Change-source: pulse-maintainer
2026-09-08 08:30:38 +01:00
pulse-triage[bot] daa471edf3 test(web): verify incident convergence after native tab suspension
The verified headed-tab control previously stopped at blank-page lifecycle evidence. Apply the same single-session mechanism to the production incident hook and panel with bounded synthetic HTTP responses, preserving the failed same-URL fixture attempt and separating this result from installed release qualification.

Change-source: pulse-maintainer
2026-09-08 08:23:44 +01:00
pulse-triage[bot] 15b3deff9f test(web): establish native tab lifecycle positive control
Bare Xvfb window bounds requests never established native backgrounding. Use an owned second tab and verify background/foreground states before suspension so future convergence checks do not mistake protocol acknowledgement for visibility evidence. Preserve earlier adverse controls and separate this passing diagnostic from application and installed-release acceptance.

Change-source: pulse-maintainer
2026-09-08 08:01:53 +01:00
pulse-triage[bot] ad8f7af6c1 test(web): record headed lifecycle activation control
Add an opt-in owned-X-display diagnostic with window restoration and bounded foreground observations. Preserve the failed bare-Xvfb result: resumed timers do not establish restored visibility or Pulse convergence.

Change-source: pulse-maintainer
2026-09-08 07:52:15 +01:00
pulse-triage[bot] 73fd4da42f test(web): retain failed foreground activation control
A successful lifecycle resume leaves the diagnostic target hidden. Add an opt-in tab activation observation with explicit visibility and focus assertions so it cannot be mistaken for foreground convergence. Preserve both failed runs and the short timer-sampling limitation; no application or release qualification is claimed.

Change-source: pulse-maintainer
2026-09-08 07:41:45 +01:00
pulse-triage[bot] 90ff4e0b17 test(web): establish single-session browser freeze control
Compare forced focus with an independent unforced target using one CDP owner. Retain observed timer suspension and prior adverse evidence without claiming installed incident recovery.

Change-source: pulse-maintainer
2026-09-08 07:12:46 +01:00
pulse-triage[bot] 4caca9c12e test(web): retain failing browser suspension control diagnostic
The previous fresh-session focus intervention did not suspend timers. Preserve a bounded true-to-false comparison and its adverse result so acknowledged CDP commands cannot be mistaken for lifecycle or Pulse recovery proof. This diagnostic is deliberately outside CI and release qualification.

Change-source: pulse-maintainer
2026-09-08 07:00:33 +01:00
pulse-triage[bot] f526f72c21 Merge candidate 20260908T021505Z-web-product
Change-source: pulse-maintainer

# Conflicts:
#	docs/release-control/v6/internal/subsystems/alerts.md
#	docs/release-control/v6/internal/subsystems/frontend-primitives.md
#	frontend-modern/browser-verification.json
#	scripts/check-incident-request-ownership.mjs
2026-09-08 03:36:54 +01:00
pulse-triage[bot] a222424c63 Merge current upstream incident history before publication
Incorporate protected PR #1973 while preserving every reviewed local alert and notification commit in history. Reconcile its failed-read state with per-request ownership and retain exact combined browser evidence.

Change-source: pulse-maintainer
2026-09-08 03:21:41 +01:00
pulse-triage[bot] 7a915017d4 fix(alerts): preserve request ownership in incident error state
PR #1973 introduced resource incident error state independently of the request lifecycle repair. Reconcile its state with this branch's ownership guards so superseded or disposed reads cannot report a false current failure. Reset clears errors and retry preserves cached history while clearing the failure indicator.

Extend lifecycle assertions for error ownership, retry and superseded success after a current failure. Focused incident hook and panel tests pass: 3 files, 17 tests. Full merged UI browser acceptance remains separate.

Change-source: pulse-maintainer
2026-09-08 03:19:57 +01:00
pulse-triage[bot] e5ef265c77 fix(alerts): retain ownership of incident history requests
Invalidate pending reads on reset and disposal, and gate success, failure and loading writes per resource. Convert the four reproductions to ordinary tests and retain reset/reopen and stale-failure controls. Qualify the real hook and panel with 14 Chromium lifecycle cases; register that exact browser surface proof without broadening path policies. This does not qualify installed delivery or PR1973's absent error accessor.

Change-source: pulse-maintainer
2026-09-08 02:57:57 +01:00
rcourtman e2b6fe3b16 Preserve canonical incident history and Assistant handoffs
Filter canonical history before selecting occurrences, preserve source evidence
and expose bounded reads and failures. Reconcile duplicate saved shells without
splitting one alert lifecycle, and keep note identity and canonical risk intact.

Carry attributed operator notes into Assistant. Preserve mobile investigations
across layout changes, transfer composer focus on handoff and keep long event
text readable. Record scoped qualification and its unresolved wider limits.

Refs #1782
2026-09-08 02:08:15 +01:00
pulse-triage[bot] d9f2637ee2 Merge current upstream source main into reviewed maintenance
Incorporate the protected release-snapshot workflow landing while preserving every reviewed maintenance commit and the additive governance correction in local history.

Change-source: pulse-maintainer

# Conflicts:
#	docs/release-control/v6/internal/subsystems/deployment-installability.md
2026-09-07 21:02:31 +01:00
pulse-triage[bot] 092405e33c fix(governance): validate reviewed split completions exactly
A reviewed notification correction and its required contracts and API proof were accepted as separate immutable commits, leaving the protected per-commit governance check unable to pass without rewriting reviewed history. Add a fail-closed exact-pair validator that reconstructs the completion commit in a detached worktree and runs the normal guard over the combined file set; all unregistered commits continue through the unchanged per-commit path.

Change-source: pulse-maintainer
2026-09-07 20:13:34 +01:00
rcourtman b64709e7b7 Publish reviewed release snapshots independently of branch tips
Continuous development must not change the source of an admitted release.
Allow the workflow to run at the qualified preparation PR head after its
normal merge, verifying exact source and workflow identity, canonical PR
provenance, and ancestry in the governed release line. Later branch commits
remain outside that release. Document the immutable-candidate contract and
verify source workflow compatibility before qualification.

Validation: snapshot identity and workflow contract tests passed, including
wrong-head, wrong-base, fork, unmerged and unbound dispatch rejection. The
existing release workflow promotion policy test also passed.
2026-09-07 19:30:27 +01:00
pulse-triage[bot] 1f965e85b0 Merge current upstream main into reviewed alert recovery
Incorporate the landed Patrol planning work while preserving every reviewed alert recovery, credential-redaction and release-evidence commit and its ancestry.

Change-source: pulse-maintainer

# Conflicts:
#	docs/release-control/v6/internal/subsystems/agent-lifecycle.md
#	docs/release-control/v6/internal/subsystems/api-contracts.md
#	docs/release-control/v6/internal/subsystems/storage-recovery.md
#	frontend-modern/browser-verification.json
2026-09-07 19:16:44 +01:00
rcourtman c501376843 Preserve canonical Patrol planning and outcome continuity
Return persisted planning acceptance or refusal inside the investigation turn.
Keep model judgment separate from action authority and preserve accepted action
identity across provider failures. Enforce actor/request idempotency atomically
and retain complete approval and independent verification context.

Preserve unknown disk evidence, stream whitespace and historical resolution
timestamps. Keep conversation scrolling inside its own panel. Record real-model,
disposable-lab and browser qualification with explicit population limits.

Refs #1782
2026-09-07 17:24:25 +01:00
pulse-triage[bot] c6dfbdbf02 Merge candidate 20260907T154236Z-delivery-trust
Change-source: pulse-maintainer
2026-09-07 16:53:02 +01:00
pulse-triage[bot] b116f2defc chore(release): retain bounded backend resource evidence
The held latency failure lacks contemporaneous resource context, and isolated passing samples do not explain it. Retain allowlisted backend boundary counters including cgroup ancestors in the existing durable log, preserving backend failures and unchanged qualification thresholds. Focused tests cover failure exits, unavailable telemetry, ancestor collection and environment filtering.

Change-source: pulse-maintainer
2026-09-07 16:47:55 +01:00
pulse-triage[bot] fc3ebefd86 test(web): verify recovery preserves real settings-parent edits
The previous recovery browser fixture owned the edited URL in a synthetic parent, leaving the production configuration-state integration untested. Mount the real Alerts settings surface and assert edits and dirty state survive recovery without reload or implicit save, then reach the explicit save boundary intact.

Two serialized Chromium runs passed 12 cases each, including six real settings-parent cases. Record the exact script hash and final result; retain earlier harness failures and distinguish mocked API evidence from persistence, installed recovery and recipient receipt.

Change-source: pulse-maintainer
2026-09-07 16:39:11 +01:00
pulse-triage[bot] 504d9a0c6e test(web): verify unsaved edits survive recovery actions
The recovery browser fixture used no-op configuration setters, so prior passes could not demonstrate unsaved-value retention. Exercise a reactive synthetic ping URL and dirty flag through rejection, cancellation, refresh failure and message clearing without expanding the product surface. All 12 serialized Chromium cases pass, including six edited-value cases; installed and assistive-technology acceptance remain separate.

Change-source: pulse-maintainer
2026-09-07 15:52:21 +01:00
pulse-triage[bot] 036d324460 fix(alerts): retain notification recovery failure feedback
Recovery failures otherwise disappear with their toast, leaving slower readers without the action outcome. Keep a view-local untimed equivalent on Overview and Notifications until clear or a newer confirmed action, independently of queue health.

Separate accepted queue mutations from optional activity-refresh failures. Cover ownership and cancellation in focused tests, and verify both real views with scripted APIs in Chromium at three widths and both themes. This implements the current main-only recovery feedback bet, not a backend delivery fix or release-line backport.

Change-source: pulse-maintainer
2026-09-07 11:44:50 +01:00
rcourtman 09ab5c2d0a Merge pull request #1951 from rcourtman/fix/patrol-filesystem-evidence
Preserve native filesystem evidence and Patrol action history
2026-09-07 10:24:57 +01:00
rcourtman 3a4a3fd62b Preserve native filesystem evidence and Patrol action history
Expose confined, identity-bound filesystem observations through the shared
resource pipeline so investigations can distinguish an exhausted container
mount from unrelated host capacity. Keep unavailable measurements explicit.

Isolate alert-history reads from durable writes and reuse one chronological
fold across polling. Catch up through bounded durable event IDs so simultaneous
readers do not replay every retained snapshot. Retain expired actions when
investigation outcomes move back to needs attention, and keep attached
Assistant context focused.

Record live storage diagnosis, healthy and dependency controls, approved and
rejected Docker outcomes, source-bound browser proof and exact test limits.
Missing-access continuity, VM dispatch completion and remaining Assistant
orchestration defects stay open in the redesign plan.
2026-09-07 09:45:31 +01:00
rcourtman 8b73085e82 Fix release smoke workspace identity on rootless Docker
The exact rehearsal passed its test suites and image build but its browser
could not enter the private bind mount. A host UID is remapped to an unrelated
subordinate identity inside rootless Docker. Use the daemon owner's container
identity for rootless Docker and the host UID/GID for rootful Docker.

Execute the locked Playwright CLI directly and probe it during integration
preparation, before expensive suites, so missing dependencies or inaccessible
mounts fail early without fetching an unqualified CLI version.
2026-09-07 08:29:42 +01:00
pulse-triage[bot] edcd1dcc5e Merge batch-start upstream main
Change-source: pulse-maintainer

# Conflicts:
#	docs/release-control/v6/internal/subsystems/api-contracts.md
2026-09-06 22:31:11 +01:00
pulse-triage[bot] 92c3297049 ci: add fixed UUID layout diagnostic without release gate waiver
The exact release tree retains a failed paired UUID benchmark check, while push CI cannot repeat that comparison. Provide a reviewed-source route to collect the requested four-condition hosted layout evidence instead of repeating local samples or changing product order.

Fix source/tree/toolchain identities, isolate diagnostic controls, alternate ten rounds, and retain partial receipts without publishing binaries. Execution still needs separate operator authority; collection success does not dispose of the failed gate. Nine focused harness tests and existing benchmark contract tests pass.

Change-source: pulse-maintainer
2026-09-06 22:11:03 +01:00
rcourtman 3853124a39 Keep Patrol action history consistent with recorded outcomes
Refresh durable investigation lifecycle from authoritative actions while
preserving completed evidence. Keep resolved history reviewable and label
recorded plan facts separately from action outcomes. Follow all resource
pages during qualification and record live approval, rejection and storage
semantic-review results. Integrate current main and preserve its alert
ordering correction.
2026-09-06 21:23:01 +01:00
rcourtman 57ead19484 Preserve Patrol evidence and surface action submission failures
Live funded qualification found hidden tool results and misleading action
submission outcomes. Share the result-bearing transcript across stored chat
and product history, render the retained evidence, and distinguish captured
proposals from broker acceptance. Keep review usable while Patrol is paused.

Record Gemini route pricing and exact qualification limits. Integrate current
main and repeat browser proof for the incoming login flow. Approved/rejected
recovery remains unqualified without the development command agent.
2026-09-06 20:09:54 +01:00
rcourtman 186ce504c8 Retire disconnected incident recording and preserve archives
The fleet sampler and coordinator had no production alert trigger and could
repeat cached values as fresh incident evidence. Preserve saved recordings
through explicit read-only lookups, propagate read failures and report the
former live incident count as unmeasured. Keep historical status and duration
units explicit without rewriting archived observations.

Integrate main's alert dispatch wording and startup replay qualification.
Canonical incident listing and real-model outcome qualification remain open.
2026-09-06 17:42:24 +01:00
pulse-triage[bot] 495562ef66 fix(alerts): ignore superseded delivery diagnosis responses
Overlapping bulk diagnosis refreshes could resolve out of order and replace a current notifications-disabled warning with older dispatch evidence. Version each request, including empty alert sets, so only the newest response updates card diagnoses.

Pin overlap and empty-set invalidation with component and registered hook regressions. All 47 focused tests and TypeScript pass. Isolated Chromium verifies rendered ordering at three widths; update both subsystem contracts and bind browser proof to the runtime bytes. No backend delivery or recipient receipt is claimed.

Change-source: pulse-maintainer
2026-09-06 17:17:36 +01:00
pulse-triage[bot] 64dba483d0 fix(release): bind forward 6.4.4 checkpoint to release train
The held regression candidate needs an honest forward beta above published 6.4.3-rc.1. Bind only 6.4.4 to release/v6.4 without capturing patch 40 or weakening candidate checks. Exercise the actual release and rehearsal branch-policy shell and retain historical rollback mapping.

Change-source: pulse-maintainer
2026-09-06 16:48:17 +01:00
rcourtman ab6d214000 Merge main into diagnostic evidence improvements
Preserve both monitoring contracts and combine the diagnostic history
correction with current host continuity and delivery evidence changes.
Verify the combined backend, frontend and browser behaviour before
landing the existing diagnostic work.
2026-09-06 16:45:28 +01:00
rcourtman 919331d5b3 Join Docker alert events with canonical resource history
Keep alert and inventory evidence together after container removal and
restart without rewriting retained events or transferring approval and
operator authority. Resolve exact source identities in the shared store
and preserve event replay idempotency across old and current records.

Verify actual retained homelab events, registered tool reads, lifecycle
callbacks, tenant isolation, race behaviour and responsive evidence views.
2026-09-06 16:23:30 +01:00
pulse-triage[bot] 9ddee2f8f9 fix(alerts): distinguish dispatch from notification receipt
LastNotified is recorded before delivery callbacks, so the active card cannot use it as evidence of destination success. Name dispatch and cooldown eligibility explicitly while preserving policy and timestamp fallbacks.

Pin the evidence boundary in presentation and Overview regressions, subsystem contracts and an isolated real-browser qualification. Scripted diagnoses verify labels and wrapping, not installed delivery or recipient receipt.

Change-source: pulse-maintainer
2026-09-06 15:12:07 +01:00
rcourtman 6e18777d30 Preserve tmpfs mount evidence through collection and queries
Docker can report tmpfs mounts only in HostConfig.Tmpfs. Preserve those
entries in shared inventory and retain type, options and canonical write
access in diagnostic queries. Configured size is not measured free space.

Record the failed ordinary storage diagnosis and independently verified
recovery without claiming autonomous or installed-collector qualification.
2026-09-06 14:50:11 +01:00
pulse-triage[bot] 7475fbf5f4 fix(ci): bind benchmark samples to executed binary hashes
Record executable SHA-256 before measured Go test invocations without logging paths or arguments. Preserve sample ordering and failure status; document instrumentation limits rather than dismissing historical regressions.

Change-source: pulse-maintainer
2026-09-06 13:32:05 +01:00
rcourtman f48c806718 Preserve observed Docker storage evidence
Missing block I/O and container image sizes could become false evidence
for diagnosis. Preserve per-direction counter presence and measured zero
through collection, resource conversion and browser rendering. Separate
new observed history from ambiguous retained disk series without deleting
old rows or changing public metric names.

Keep partial host rates distinct and persist a newly enabled Disk I/O
column across the first preference reload.
2026-09-06 12:45:40 +01:00