Commit graph

8580 commits

Author SHA1 Message Date
rcourtman
6e93cb3b5c Fix Unraid SMART probing and disk authority 2026-07-24 09:38:39 +01:00
rcourtman
96c35f2c35 Complete disk exclusion contracts 2026-07-24 09:25:39 +01:00
rcourtman
1ef4a68735 Clarify disk exclusion behavior 2026-07-24 09:20:26 +01:00
rcourtman
bf67ba9201 Fix cache-aware Linux memory fallbacks
Some checks are pending
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run
Canonical Governance / governance (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 4/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 5/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 6/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 7/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 8/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 1/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 2/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 3/8) (push) Waiting to run
Core E2E Tests / Agent registration lifecycle (push) Waiting to run
Core E2E Tests / E2E verdict (push) Blocked by required conditions
Unified Agent Native Verification / Linux ARM64 (push) Waiting to run
Unified Agent Native Verification / Linux x64 (push) Waiting to run
Unified Agent Native Verification / Windows x64 (push) Waiting to run
Unified Agent Native Verification / macOS ARM64 (push) Waiting to run
Unified Agent Native Verification / macOS Intel (push) Waiting to run
Unified Agent Native Verification / FreeBSD cross-build contract (push) Waiting to run
2026-07-24 00:19:40 +01:00
rcourtman
b81ba7dd06 Migrate TrueNAS to supported JSON-RPC transport 2026-07-24 00:10:17 +01:00
rcourtman
0c17922055 Fix Docker report size contract drift 2026-07-23 23:57:42 +01:00
rcourtman
c77571685d Bound long-lived frontend history caches
Some checks failed
Core E2E Tests / Playwright Core E2E (shard 5/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 6/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 7/8) (push) Waiting to run
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run
Canonical Governance / governance (push) Waiting to run
Patrol Qualification Regression / Catalog, scorer, and replay regression (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 8/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 1/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 2/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 3/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 4/8) (push) Waiting to run
Core E2E Tests / Agent registration lifecycle (push) Waiting to run
Core E2E Tests / E2E verdict (push) Blocked by required conditions
Unified Agent Native Verification / Linux ARM64 (push) Waiting to run
Unified Agent Native Verification / Linux x64 (push) Waiting to run
Unified Agent Native Verification / Windows x64 (push) Waiting to run
Unified Agent Native Verification / macOS ARM64 (push) Waiting to run
Unified Agent Native Verification / macOS Intel (push) Waiting to run
Unified Agent Native Verification / FreeBSD cross-build contract (push) Waiting to run
Helm CI / Lint and Render Chart (push) Has been cancelled
2026-07-23 23:54:40 +01:00
rcourtman
952e593d74 Fix agent update reconciliation across cached proxies 2026-07-23 23:50:28 +01:00
rcourtman
8d23529c02 Fix availability check identity projection 2026-07-23 23:46:34 +01:00
rcourtman
b4877b4b44 Fix Proxmox agent registration authorization flow 2026-07-23 23:44:05 +01:00
rcourtman
3ad35750cb Optimize telemetry adoption reporting 2026-07-23 23:40:49 +01:00
rcourtman
0b6f7ad49a Fix notification delivery health reporting 2026-07-23 23:38:35 +01:00
rcourtman
582d250c6e Align governance tests with subsystem registry
Update canonical completion and subsystem lookup expectations for shared ownership and current proof files.
2026-07-23 22:48:36 +01:00
rcourtman
3c6d933e9d Fix Proxmox cluster connection authority
Keep the configured cluster URL as primary and recover discovered member
endpoints asynchronously while it is healthy. Reset member reachability
evidence when the effective address changes.

Refs #1437 and #1493
2026-07-23 22:43:34 +01:00
rcourtman
6639e8f816 Prepare canonical governance Go test assets 2026-07-23 22:36:00 +01:00
rcourtman
15dbabfe9a Preserve resource URLs across runtime identity changes
Contract-Neutral: Docker URL migration touches shared monitor ingest files without changing the host deletion or re-enrollment contract.
2026-07-23 22:33:07 +01:00
rcourtman
0a95b25f41 Harden host agent re-enrollment lifecycle 2026-07-23 22:29:39 +01:00
rcourtman
87fe506c0a Bound state refresh and recovery ingest ownership 2026-07-23 22:24:52 +01:00
rcourtman
d618fb8b74 Harden hypervisor guest CPU authority 2026-07-23 22:19:35 +01:00
rcourtman
b8ea840f11 fix(monitoring): make Unraid task state freshness-safe 2026-07-23 22:17:25 +01:00
rcourtman
d235aab3cf Fix RBAC assignment migration and loading 2026-07-23 22:11:48 +01:00
rcourtman
8c341753ae Normalize physical disk endurance evidence 2026-07-23 22:11:22 +01:00
rcourtman
13c4b57885 Fix VMware connection test degradation handling 2026-07-23 22:06:57 +01:00
rcourtman
50bac2ccf1 Ensure Docker lifecycle lab removes fixtures 2026-07-23 22:06:57 +01:00
rcourtman
615fa4418b Restore Docker agents to Hosts inventory 2026-07-23 22:06:56 +01:00
rcourtman
6a527ba9f2 Fix Proxmox physical disk inventory continuity 2026-07-23 22:05:09 +01:00
rcourtman
b14cb376bc Prove resolved alert lock discipline
Route canonical cooldown refires through one resolved-state critical section and document the m.mu to resolvedMutex invariant. Exercise production refire, recovery, broadcast, alias repair, cleanup, and shutdown paths under the race detector while preserving cooldown history and start-time semantics.
2026-07-23 21:59:46 +01:00
rcourtman
5772589363 Prove TrueNAS alert threshold identity persistence 2026-07-23 21:54:57 +01:00
rcourtman
8580b48abc Fix Docker container update recreation lifecycle 2026-07-23 21:39:35 +01:00
rcourtman
2b7d202d8d Fix bounded Docker update checks
Keep manual check commands active until registry collection completes. Deduplicate replayed and concurrent commands, bound collection and acknowledgement retries, surface registry result counts, and prove timeout, rate-limit, and replay behavior.
2026-07-23 21:38:20 +01:00
rcourtman
d7793a255d Fix TrueNAS boot and replication health classification 2026-07-23 21:37:26 +01:00
rcourtman
e1a05104d9 Fix remote telemetry adoption reports 2026-07-23 20:38:09 +01:00
rcourtman
e8bf181a57 Cover AI chat fixture abort path and licence presentation fallbacks
Two more frontend modules with a measured residue their existing specs never
reached. Deltas are uncovered counts, module scoped, existing specs versus
existing plus new.

- aiChatDevStreamFixture: branches 32 -> 2 uncovered; abortError and
  handleAbort, previously never called, are now covered. The abort tests
  assert the real cleanup lifecycle (timer cleared, listener removed, error
  shape) rather than only that a promise rejected, and the per-step pacing
  arms are exercised across their full cadence table.
- licensePresentation: branches 29 -> 24 uncovered, targeting the licence
  expiry, tier and seat-count fallbacks.

No source file is modified. Adversarial review found no rejects. One describe
block in the chat-fixture test was removed before committing: it duplicated
exact event sequences already asserted in aiChat.test.ts and its trailing
checks were tautological with the toEqual above them; re-measuring after the
removal gave an identical delta, confirming it contributed no coverage.

PULSE_ALLOW_CONTRACT_NEUTRAL_COMMIT=test-only branch coverage, no source or contract change

Contract-Neutral: test-only branch coverage, no source or contract change
2026-07-23 18:55:12 +01:00
rcourtman
1d96b918c2 Cover infrastructure operations, thresholds and chart API branch arms
Four more frontend modules with a measured residue their existing specs never
reached, including seven functions no test called at all. Deltas are uncovered
counts, module scoped, existing specs versus existing plus new.

- infrastructureOperationsModel: branches 38 -> 1 uncovered and
  createSurfaceScopedRow, previously never called, is now covered. This was
  the largest proportional branch gap left in the frontend.
- summaryTableFocus: branches 26 -> 11 uncovered and scheduleViewportRefresh,
  previously never called, is now covered.
- thresholdsResourceModel: hasThresholdDiff, dockerContainerOverrideIdCandidates,
  findOverrideByCandidates and buildAgentHeaderMeta were all uncalled; covered
  branches move 114 -> 130.
- api/charts: getStorageSummaryCharts and timeRangeToMinutes were uncalled;
  covered branches move 41 -> 55. The fetch mocking follows the existing specs
  and asserts parsed results, not that the mock was called.

No source file is modified. Adversarial review found no rejects; one subtest
duplicating an arm a sibling already covered was removed before committing and
the coverage was re-measured unchanged.

A fifth candidate, resourceBadgePresentation, was written and discarded rather
than landed: 263 tests moved the module by a single branch, because its
residual arms are unreachable defensive fallbacks.

PULSE_ALLOW_CONTRACT_NEUTRAL_COMMIT=test-only branch coverage, no source or contract change

Contract-Neutral: test-only branch coverage, no source or contract change
2026-07-23 18:24:21 +01:00
rcourtman
e8740159cc Cover patrol handoff, resource adapters and TrueNAS page branch arms
Four frontend models whose existing specs called every exported function but
took only one arm of most conditionals. Deltas are uncovered counts, module
scoped, existing specs versus existing plus new.

- patrolInvestigationContextModel: branches 155 -> 19 uncovered, the largest
  single branch gap in the frontend. Covers the nullish-coalescing fallbacks,
  ternary alternates, singular and plural boundaries, the resource cap at
  MAX_ASSESSMENT_RESOURCES, and the identifier-label fallbacks.
- resourceStateAdapters: branches 51 -> 3 uncovered.
- truenasPageModel: branches 28 -> 7 uncovered.
- contextualFocus: all six previously uncalled DOM scroller helpers now
  covered, taking covered branches from 41 to 82. The uncovered count moves
  27 -> 29 only because those six dead functions bring their own branches into
  scope for the first time.

No source file is modified. Adversarial review found no rejects. Acted on its
findings before committing: a test claiming to cover an identifier-formatter
fallback actually passed through the formatter unchanged, so it is retitled to
say what it does, and the real fallback arm is covered separately by the
separator-only key case; a cross-field consistency assertion that compared two
fields the source assigns from the same local is replaced with the concrete
value; three subtests duplicating an arm a sibling already covered were
removed; and a comment describing the parent-chain walk was corrected, since
resolveScrollableAncestor uses parentElement and never sees the Document.
Re-measuring after the removals gave identical coverage.

PULSE_ALLOW_CONTRACT_NEUTRAL_COMMIT=test-only branch coverage, no source or contract change

Contract-Neutral: test-only branch coverage, no source or contract change
2026-07-23 17:51:41 +01:00
rcourtman
2ec5ef8d1a Record v6.1.1 release completion 2026-07-23 17:22:48 +01:00
rcourtman
c46ce90484 Close remaining branch gaps in storage and discovery presentation
Four frontend modules had a small measured residue their existing specs never
reached, including four functions no test called at all. Deltas below are
uncovered counts, module-scoped, existing specs vs existing plus new.

- storagePageState: getActiveStorageNodeOptions was never called; branches
  5 -> 1 uncovered, functions 1 -> 0.
- discoveryPresentation: the three suggested-URL class helpers were never
  called; branches 3 -> 1 uncovered, functions 3 -> 0.
- infrastructureOnboardingPresentation:
  getInfrastructureSourcePickerItemForRouteStep was never called; functions
  1 -> 0.
- storageBarPresentation: branches 7 -> 0 uncovered, so the module is now
  fully branch-covered.

No source file is modified. Adversarial review found no rejects. Three
tautological assertions of the form f() equals f(), one test duplicating an
arm the existing spec already covered, and four cases re-exercising an already
covered arm of a two-arm selector were removed before committing; re-measuring
afterwards produced identical coverage, which confirms they contributed
nothing.

PULSE_ALLOW_CONTRACT_NEUTRAL_COMMIT=test-only branch coverage, no source or contract change

Contract-Neutral: test-only branch coverage, no source or contract change
2026-07-23 17:06:47 +01:00
rcourtman
5fde028276 Govern mobile Relay observability 2026-07-23 16:55:54 +01:00
rcourtman
0f938f8e9b Cover eval scenario catalog, control-plane printers and pure helpers
Adds branch-coverage tests for eight packages whose target functions were
measured at 0% before this change. Every named target was verified to move
by running each package's coverage with and without the new file.

- internal/ai/eval: all 36 Scenario constructors and the four PatrolScenario
  constructors 0% -> 100%. These are catalog-invariant tests, not literal
  echoes: unique names, populated required fields, runnable assertions, tool
  references checked against the agentcapabilities registry, and exact
  assertion-count deltas across the env-gated conditional appends. A parity
  test scans scenarios.go itself, so adding a constructor without registering
  it in the table now fails rather than silently going untested.
- cmd/pulse-control-plane: nine MSP and tenant-runtime print helpers
  0% -> 100%, covering the nil, empty-slice and optional-field arms.
- internal/ai/memory: RemediationLog GetByID, MarkRolledBack and
  GetRollbackable 0% -> 100%, pinning the overwrite-vs-preserve contract on
  RollbackInfo and each falsy arm of the rollbackable predicate.
- internal/alerts/config: AlertConfig.UnmarshalJSON 0% -> 90% and
  NormalizeAlertConfigAliases 52.9% -> 94.1%.
- internal/config: RunMigrationIfNeeded 0% -> 100%, copyFile 0% -> 88.9%.
- internal/mock: AvailabilityFixtures, FixtureGraph.SupplementalChanges and
  generateMockHostRate 0% -> 100%.
- internal/api: testProxmoxPlatformConnection 0% -> 100% through its injected
  connect func, so no network is involved.
- internal/servicediscovery: needsDeepScan 0% -> 100% across every return arm
  including the confidence boundary.

No source file is modified. Adversarial review found no rejects; two findings
were acted on before committing, replacing a circular catalog-count assertion
with the real source-parity scan and reducing an AllPatrolScenarios test that
compared the function against the same constructors it calls to the ordering
and completeness signal that is actually independent.

PULSE_ALLOW_CONTRACT_NEUTRAL_COMMIT=test-only branch coverage, no source or contract change

Contract-Neutral: test-only branch coverage, no source or contract change
2026-07-23 16:42:08 +01:00
rcourtman
dc8a64b3b3 Update v6.1.1 release packet 2026-07-23 15:52:17 +01:00
rcourtman
20f9da541a Fix Proxmox backup posture identity
Some checks are pending
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run
Canonical Governance / governance (push) Waiting to run
Helm CI / Lint and Render Chart (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 1/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 2/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 3/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 4/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 5/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 6/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 7/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 8/8) (push) Waiting to run
Core E2E Tests / Agent registration lifecycle (push) Waiting to run
Core E2E Tests / E2E verdict (push) Blocked by required conditions
Unified Agent Native Verification / Linux ARM64 (push) Waiting to run
Unified Agent Native Verification / Linux x64 (push) Waiting to run
Unified Agent Native Verification / Windows x64 (push) Waiting to run
Unified Agent Native Verification / macOS ARM64 (push) Waiting to run
Unified Agent Native Verification / macOS Intel (push) Waiting to run
Unified Agent Native Verification / FreeBSD cross-build contract (push) Waiting to run
2026-07-23 14:55:44 +01:00
rcourtman
0cedde5f3d Resume v6.1.1 release after backend gate repair 2026-07-23 14:06:49 +01:00
rcourtman
a45b568d79 Fix backend release gate failures 2026-07-23 14:03:44 +01:00
rcourtman
01a9bd2734 Fix stable patch workflow dispatch input types
Contract-Neutral: Correct workflow_dispatch JSON value encoding without changing the governed release contract.
2026-07-23 13:31:31 +01:00
rcourtman
781e168e34 Prepare v6.1.1 emergency patch release 2026-07-23 13:28:17 +01:00
rcourtman
d2c268c0e5 Fix agent update triage and durable action recovery 2026-07-23 11:19:50 +01:00
rcourtman
a082d5588f Add transparent telemetry payload update notice 2026-07-23 10:23:13 +01:00
rcourtman
2323c96385 Guard pseudonymous telemetry terminology 2026-07-23 09:38:50 +01:00
rcourtman
6e9fb01887 Cover eval CLI parsers, cloud audit predicates and vmware fixture fetching
Five new branch-coverage tests over the remaining pure vein, with no source or
existing test touched.

cmd/eval: twelve argument and environment parsers taken to full coverage,
including the two provider-filter variants driven so their differing default
behaviour is proved rather than assumed, the model list and exclude keyword
splitters over empty, whitespace and duplicate input, the selection reason
across every reason it can return, and the provider ordering proved
deterministic across repeated runs over the same map.

internal/actionlifecycle: the plan audit persistence asserted by reading the
record back through the store and by proving a store error is propagated rather
than swallowed, the policy mutation wrapper on both the success and error paths,
and the availability check error unwrapped through errors.Is.

internal/cloudcp: the audit failure accumulator including the monotonic OK flag
and the absence of deduplication, the container health predicate over each state
and health string it recognises with the case sensitivity of the state check
pinned, the tenant display name resolver against a real registry, and the
storage admission guard proved never to reach Docker when disabled.

internal/vmware: the fixture fetcher with independence asserted in both
directions and across consecutive calls, the refresh error wrapping asserted by
sentinel and message, the cached snapshot proved sorted, and the transport close
proved behaviourally by counting accepted connections on a loopback server
rather than by absence of error.

Contract-Neutral: test-only branch coverage, no contract surface touched
2026-07-23 08:07:35 +01:00
rcourtman
fc6671b92e Cover action dispatch binding and in-memory store record keeping
Some checks are pending
Core E2E Tests / Playwright Core E2E (shard 2/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 3/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 4/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 5/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 6/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 7/8) (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 8/8) (push) Waiting to run
Core E2E Tests / Agent registration lifecycle (push) Waiting to run
Core E2E Tests / E2E verdict (push) Blocked by required conditions
Unified Agent Native Verification / Linux ARM64 (push) Waiting to run
Unified Agent Native Verification / Linux x64 (push) Waiting to run
Unified Agent Native Verification / Windows x64 (push) Waiting to run
Unified Agent Native Verification / macOS ARM64 (push) Waiting to run
Unified Agent Native Verification / macOS Intel (push) Waiting to run
Unified Agent Native Verification / FreeBSD cross-build contract (push) Waiting to run
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run
Canonical Governance / governance (push) Waiting to run
Helm CI / Lint and Render Chart (push) Waiting to run
Patrol Qualification Regression / Catalog, scorer, and replay regression (push) Waiting to run
Core E2E Tests / Playwright Core E2E (shard 1/8) (push) Waiting to run
Four new branch-coverage tests over internal/unifiedresources, taking the
dispatch binding helpers and the in-memory store's action, loop report and
change counting paths from zero to covered. No source or existing test touched.

The dispatch binding is exercised through every validation failure arm with its
concrete error, a successful bind asserted field by field, a re-bind over an
already bound attempt, and blank identifiers, alongside the operation binding
predicate and the empty policy posture summary proved to hand back independent
pointers.

The in-memory store paths are all write-then-read round trips rather than error
checks: expiry, dispatch receipt lookup, dispatch completion, execution refusal
and lifecycle event recording each assert the stored record afterwards, and the
audit expiry is driven with nothing eligible, a mix of eligible and ineligible
records proving the ineligible ones stay, and limits smaller than the eligible
count.

The loop report lookups pin the triple key exactly, with a window end differing
by a single nanosecond proved not to match, and the user outcome update asserted
through a subsequent read.

The six change counters each cover an empty store, a different resource that
must not be counted, the cutoff boundary on the real comparison, and for every
filtered variant a filter that selects a strict subset so the filtered and
unfiltered results are proved to differ.

Contract-Neutral: test-only branch coverage, no contract surface touched
2026-07-23 07:25:38 +01:00