Commit Graph

10760 Commits

Author SHA1 Message Date
rcourtman 560dbf314c Merge pull request #1935 from rcourtman/fix/docker-observation-evidence
Preserve diagnostic evidence and Patrol outcome truth
2026-09-06 22:21:42 +01:00
rcourtman df0735cc79 Integrate current main with verified Patrol action history
Preserve the incoming delivery-health ordering and demo install-link
changes alongside the qualified Patrol action history. Retain prior
source bindings and record the merged build and browser checks so the
shared proof receipt reflects the integrated tree.
2026-09-06 21:44:13 +01:00
rcourtman eef4ea21e7 Merge pull request #1945 from rcourtman/claude/demo-banner-install-link
Link the demo banner back to the install steps
2026-09-06 21:23:55 +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
pulse-triage[bot] 537807300c Merge pull request #1944 from rcourtman/maintainer/20260906T185414Z
Keep delivery warnings current and alert checks reliable
2026-09-06 21:13:58 +01:00
rcourtman f23553f825 Link the demo banner back to the install steps
pulserelay.pro sends curious visitors to the public demo, and the demo
was a dead end: once inside, the only way back to installing Pulse was
the browser's history. The demo-mode banner now ends with "Run Pulse on
your own hardware", opening the site's setup steps in a new tab. It is
install guidance rather than an upsell, so it belongs in demo mode where
commercial surfaces are otherwise hidden.

The read-only notice keeps its own element so the existing text lookup
and dismiss behaviour are unchanged. Verified on a DEMO_MODE=true mock
backend behind Vite at 1280x800 and 390x844: the link renders after the
notice, wraps cleanly on a phone, and carries target _blank with rel
noopener noreferrer.

Contract-Neutral: demo banner copy and link only; no public API, config, or contract surface changes
2026-09-06 20:40:26 +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
pulse-triage[bot] 49b33a3254 Merge reviewed delivery-health projection ordering repair
Preserve the exact race-tested monitoring repair while retaining canonical main's integrated token fixture and alert UI updates.

Change-source: pulse-maintainer
2026-09-06 20:07:17 +01:00
pulse-triage[bot] 8033fa581a fix(monitoring): serialize delivery health alert projection
Concurrent timer and queue callbacks could apply an older health snapshot after a newer one, hiding a new delivery failure or resurrecting a dismissed warning. Serialize the complete read/apply operation without holding the monitor or queue mutex across alert updates.

Add isolated channel-controlled stale-clear and stale-raise regression cases. Removing the lock fails both final-state assertions; restored code passes 100 race-enabled focused repetitions. This does not qualify the integrated release candidate or clear unrelated adverse evidence.

Change-source: pulse-maintainer
Contract-Neutral: Restores monitoring contract extension point 21 immediate canonical delivery-warning reconciliation by serializing existing read/apply operations; no public API, verdict, throttle, alert identity, or agent-lifecycle contract changes. Existing isolated ordering regression tests cover both stale-clear and stale-raise outcomes.
2026-09-06 20:02:06 +01:00
pulse-triage[bot] cb70a8a9dc Merge current main into the token-fixture repair
Preserve the reviewed fixture-race repair while incorporating the upstream merge of the alert wording update.

Change-source: pulse-maintainer
2026-09-06 19:57:58 +01:00
pulse-triage[bot] df7eca7913 Merge pull request #1942 from rcourtman/maintainer/20260906T171513Z
Keep alert delivery status from reverting after newer checks
2026-09-06 19:52:24 +01:00
pulse-triage[bot] 05e31eadf0 test(monitoring): synchronise canonical token host fixture
GetMonitor starts polling concurrently, so monitor.mu does not protect the fixture host slice from State.GetSnapshot. Use the state-owned UpsertHost setter to match the reader lock while retaining all canonical-token diagnostics assertions. Addresses the fixture race reported in PR1943 rest-1; no production behaviour changes.

Change-source: pulse-maintainer
2026-09-06 19:46:16 +01:00
pulse-triage[bot] 293246ee95 Merge commit '63246694e6494411c568f3ce1b3007a7016afeab'
Change-source: pulse-maintainer

# Conflicts:
#	frontend-modern/browser-verification.json
2026-09-06 18:57:51 +01:00
rcourtman 63246694e6 Merge pull request #1941 from rcourtman/claude/demo-auto-login
Sign demo-mode visitors in instead of showing them demo/demo
2026-09-06 18:32:49 +01:00
pulse-triage[bot] 6163492069 Merge reviewed diagnosis lifecycle regression protection
Integrate the exact web-product candidate on top of the current canonical alert ordering repair without re-parenting its reviewed commit.

Change-source: pulse-maintainer
2026-09-06 18:28:42 +01:00
pulse-triage[bot] 144f5d3627 Merge current main into reviewed alert ordering repair
Preserve the reviewed alert diagnosis ordering commit while incorporating the upstream merge that published its base.

Change-source: pulse-maintainer
2026-09-06 18:19:36 +01:00
pulse-triage[bot] b9d0bbf490 test(alerts): pin diagnosis refresh failure and disposal guards
Protect the existing stale-response repair when a newer periodic read fails and when the overview is disposed. Both added tests fail with the response guards removed; 49 focused tests and TypeScript pass with runtime unchanged. This is regression coverage, not recipient-delivery or combined-candidate qualification.

Change-source: pulse-maintainer
2026-09-06 18:18:17 +01:00
rcourtman b0b39f00dc Qualify Docker storage collection against a live fault
Exercise the production collector through healthy, full and recovered
storage states using the existing bounded disposable lab. Preserve exact
mount configuration while keeping collector proof separate from model
diagnosis and installed-agent qualification.
2026-09-06 18:00:24 +01:00
rcourtman bbe230f6c1 Merge remote-tracking branch 'origin/main' into claude/demo-auto-login 2026-09-06 17:59:43 +01:00
rcourtman 8729bca778 Sign demo-mode visitors in instead of showing them demo/demo
"Try the live demo" on pulserelay.pro landed on a login form with the
demo credentials printed above it. The demo runtime is read-only and its
credentials are public, so making a first-time visitor type them was pure
friction at the moment of curiosity.

When the security status reports demo mode, the login page now submits
demo/demo itself, once per browser tab, showing "Signing you in to the
demo…" in the demo banner while the request is in flight. The marker
lives in sessionStorage under SESSION_STORAGE_KEYS.DEMO_AUTO_LOGIN. The
logout handler sets the same marker to "suppressed" right after it clears
session storage, so a visitor who signs out lands on the form (and stays
there across a reload) rather than being signed straight back in; a new
tab signs in again. SSO callbacks (?oidc / ?saml), first-run setup and a
non-demo runtime never trigger it, and a rejected sign-in falls back to
the normal form with the server's error.

The credential request moves out of the submit handler into
submitCredentials so the form and the automatic path share one code path
and one set of error messages.

Verified on a demo-mode backend (DEMO_MODE=true, mock data, demo/demo)
behind Vite at 1280x800 and 390x844: automatic sign-in from a fresh
context, Logout to the form with the marker suppressed, reload keeps the
form, manual sign-in from the form, second fresh context signs in again,
and a stubbed 401 shows the form with the error. Login and
useAppRuntimeState test files pass (41 tests).

Contract-Neutral: demo-mode login convenience on the existing /api/login flow; no public API, config, or contract surface changes
2026-09-06 17:58:48 +01:00
pulse-triage[bot] 95740ff28a Merge pull request #1939 from rcourtman/maintainer/20260906T161349Z
Prepare a forward 6.4.4 beta and preserve storage crash diagnostics
2026-09-06 17:54:46 +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] 5000e0409b Merge commit '64dba483d05ca8f30fb85e44a650b5a9d02748c9'
Change-source: pulse-maintainer
2026-09-06 16:51:23 +01:00
pulse-triage[bot] dd53fad328 Merge commit 'f4dc1e69a0e214dd0085c7696f42444b8fd91fa3'
Change-source: pulse-maintainer
2026-09-06 16:51:23 +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
pulse-triage[bot] f4dc1e69a0 Merge pull request #1938 from rcourtman/maintainer/20260906T150036Z
Show alert dispatch honestly and guard responsive startup
2026-09-06 16:45:48 +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] 2014e38b23 Merge candidate 20260906T143516Z-core-runtime
Change-source: pulse-maintainer
2026-09-06 16:08:52 +01:00
pulse-triage[bot] e566e575ed test(metrics): isolate large summary seed persistence across reopen
Release qualification crashed in historical baseline SQLite ingestion during the workloads-summary seed. Preserve a metrics-only diagnostic for the same 84,000-row batch shape, with row-count and integrity checks before and after reopen, without the HTTP or reflection fixtures. This does not reproduce or fix the unexplained crash.

Validation: ten focused runs on Go 1.26.7 and one on Go 1.26.8 passed; a one-repeat race run passed. The three-repeat race run timed out at 180 seconds during its final integrity check and remains retained evidence. Omitting the final seed batch makes the row-count assertion fail.
Change-source: pulse-maintainer
2026-09-06 15:59:08 +01:00
pulse-triage[bot] 050fe82be8 Merge batch-start Pulse upstream
Change-source: pulse-maintainer
2026-09-06 15:58:56 +01:00
pulse-triage[bot] 11a8cc2180 Merge pull request #1932 from rcourtman/maintainer/20260906T091615Z
Keep host links stable and storage alerts dependable through restart
2026-09-06 15:52:35 +01:00
rcourtman 580a246981 Read incident evidence from canonical resource history
Assistant incident reads used an unconnected cached-metric recorder while
resource history already retained operational events. Read the shared
organization-scoped timeline with original provenance, bounded results
and explicit coverage and failure semantics. Keep legacy archive reads
resource-bound.

Record the separately reproduced alert identity split at the shared
write boundary. This read-path correction does not qualify complete
incident diagnosis or recovery.
2026-09-06 15:33:44 +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
pulse-triage[bot] 4fd68c72b2 test(monitoring): guard startup against blocked alert replay
Hold the replay serialization lock while attaching the resource store to prove history catch-up stays off the router construction path. Retain the imported-history and idempotence assertions after releasing replay so availability cannot be achieved by dropping repair.

Change-source: pulse-maintainer
2026-09-06 14:54:46 +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] d4f3f2f15d test(alerts): verify storage restart lifecycle through HTTP receipts
Callback and queue restart tests cover separate boundaries. Exercise the monitor handlers and ordinary dispatcher together so missing capacity cannot silently produce a recovery, restart cannot replace incident identity, and recurrence still reaches a local HTTP receiver.

Change-source: pulse-maintainer
2026-09-06 14:34:03 +01:00
pulse-triage[bot] 7c7459830e Merge candidate 20260906T125522Z-web-product
Change-source: pulse-maintainer
2026-09-06 14:16:35 +01:00
pulse-triage[bot] bfd4ce6c85 Merge candidate 20260906T125520Z-core-runtime
Change-source: pulse-maintainer
2026-09-06 14:16:35 +01:00
pulse-triage[bot] 35181d4c91 fix(tests): supply valid PBS datastore health fixture
The advanced proposal's complete backend shard exposed a shared PBS fixture that returned an array from the datastore-status endpoint. Supply the healthy datastore observation those node-metric lifecycle tests intend, preventing the live datastore evaluator from fabricating an unrelated connectivity incident.

Change-source: pulse-maintainer
2026-09-06 14:12:46 +01:00
rcourtman f5f440dbad Separate command connectivity from monitoring evidence
Name command transport explicitly in shared query results and preserve
unobserved connection state in topology and Assistant inventory context.
Keep parent-node transport distinct from a direct guest connection so
monitoring evidence cannot imply command access or collection downtime.

Existing execution policy and approval checks remain authoritative.
2026-09-06 14:10:11 +01:00
pulse-triage[bot] f5eba15cf6 test(pbs): enforce datastore policy through live polling
Cover disabled alerting, storage suppression and canonical datastore overrides before the polled capacity lifecycle. Removing the conversion alias makes the disabled-override regression case fail.

Change-source: pulse-maintainer
2026-09-06 14:02:02 +01:00
pulse-triage[bot] 3eea42fd49 test(alerts): reject stale healthy evidence after queue refresh failure
A pre-action health read can finish after retry or dismissal succeeds but its follow-up read fails. Exercise this combined race for both actions so old healthy evidence cannot erase delivery uncertainty.

Change-source: pulse-maintainer
2026-09-06 14:01:05 +01:00
pulse-triage[bot] cd12b62bae Merge benchmark executable provenance evidence
Preserve the exact reviewed candidate and bind future CI samples to executed binary hashes.\n\nChange-source: pulse-maintainer

Change-source: pulse-maintainer
2026-09-06 13:48:10 +01:00
pulse-triage[bot] acaf1045f5 Merge web alert uncertainty regression coverage
Preserve the exact reviewed candidate while combining it with existing mainline PBS coverage.\n\nChange-source: pulse-maintainer

Change-source: pulse-maintainer
2026-09-06 13:48:10 +01:00
rcourtman 4d302109ce Record storage diagnosis qualification limits
Bind the ordinary read-only storage assessment to the corrected runtime and
persisted tool evidence. Keep useful capacity observations separate from
unsupported causal and temporal claims so completion is not counted as a
qualified diagnosis or autonomous outcome.
2026-09-06 13:38:54 +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
pulse-triage[bot] 1eb6d46c35 test(alerts): preserve uncertainty after queue action refresh failure
A successful retry or dismissal does not establish that the queue is healthy when the follow-up read fails. Cover both actions so connection loss cannot silently clear the attention state, and verify the independent evidence refresh still runs and busy flags settle.

Change-source: pulse-maintainer
2026-09-06 13:27:22 +01:00
rcourtman 355ac1f0a4 Resolve configuration reads from current inventory
Native container config reads confused missing session discovery with a
missing resource and could reuse stale placement. Read identity and
capability from canonical inventory while preserving explicit query
restrictions and existing action authority.

Keep unavailable providers, unsupported adapters and empty observations
distinct from resource absence, with the tool error bit preserved.
2026-09-06 13:25:00 +01:00