Commit Graph

592 Commits

Author SHA1 Message Date
rcourtman 2fd184315d Simplify and harden verified Patrol receipts
Contract-Neutral: Patrol compact receipt payload does not change agent lifecycle or storage recovery contracts
2026-08-15 10:25:04 +01:00
rcourtman 772ff3087d Rework Patrol around outcomes and quiet autonomy 2026-08-14 09:45:30 +01:00
rcourtman 2373ace026 Complete Patrol retained objective loop 2026-08-14 03:11:10 +01:00
rcourtman 71a0fa37a1 Add model-authored Patrol observer proposals 2026-08-14 00:24:52 +01:00
rcourtman faf13973c4 Keep release race builds off WSL tmpfs 2026-08-12 17:56:11 +01:00
rcourtman 647f3e6a6c Keep shipped upgrade guide in release sync 2026-08-12 17:43:09 +01:00
rcourtman 31b626d73c Fix release worker Go toolchain parity check 2026-08-12 17:11:04 +01:00
rcourtman 1bb9ba4208 Accelerate release qualification with exact-SHA worker 2026-08-12 17:07:12 +01:00
rcourtman 44a3f19454 Fix large Proxmox cluster poll exhaustion 2026-08-10 14:39:01 +01:00
rcourtman bcb172c127 Authorize unsigned Windows artifacts for v6.2.1 2026-08-10 08:24:09 +01:00
rcourtman 5112ae3ea4 Document update-check age in v6.2.1 2026-08-10 08:01:26 +01:00
rcourtman be18f99d24 fix(rbac): make SSO user access manageable 2026-08-09 13:36:07 +01:00
rcourtman e2a2e7d4d2 Record v6.2.0 Windows signing exception 2026-08-09 11:05:20 +01:00
rcourtman e9904157e7 Prepare v6.2.0 stable release 2026-08-09 10:43:19 +01:00
Richard Courtman 1b804cf206 fix(release): wait for convergence metadata 2026-08-08 22:18:39 +01:00
Richard Courtman e245aa11e2 fix(release): add activation-only recovery 2026-08-08 22:10:49 +01:00
Richard Courtman 894e0eb213 chore(release): prepare v6.2.0-rc.11 2026-08-08 20:26:15 +01:00
rcourtman 8ff64e0dee Fix PBS node identity retry classification 2026-08-08 09:39:02 +01:00
rcourtman d45e597dbb fix(governance): block prerelease on credential containment 2026-08-08 05:55:12 +01:00
rcourtman e434466269 fix(security): verify SSH hosts during proxy cleanup 2026-08-08 05:18:55 +01:00
rcourtman 8e8edbf7de fix(governance): isolate release-control worktree roots 2026-08-08 05:12:07 +01:00
rcourtman ebff6f9946 fix(governance): restore advertised worktree helpers 2026-08-08 04:08:35 +01:00
Richard Courtman 7fd33dd6fa test(governance): update backend proof snapshot 2026-08-08 03:49:55 +01:00
rcourtman 633d3117f7 fix(governance): fail closed on unsupported commercial evidence 2026-08-08 03:11:12 +01:00
rcourtman d130d00867 fix(release): make customer promotion convergent 2026-08-08 02:36:28 +01:00
rcourtman b0759d20d7 fix(release): activate before mutable customer promotion 2026-08-08 00:58:18 +01:00
rcourtman 4739d9af07 fix(release): reject issue references in highlights 2026-08-08 00:54:38 +01:00
rcourtman 8fd43b307b fix(release): simplify in-app highlights 2026-08-07 15:50:39 +01:00
rcourtman 1019310adf fix(release-control): unblock RA10 documentation currentness proof
The public repository surface refresh (40d29ca44) hard-wrapped the
Settings → Infrastructure → Install on a host phrase mid-line and
dropped the v5-to-v6 agent upgrades mention from README.md, breaking
RA10's documentation-currentness-tests proof on main.

- documentation_currentness_test.py: match prose fragments against
  whitespace-normalized content, the way markdown renders it, so an
  editorial rewrap can no longer fail the guard. Structural fragments
  (table rows, gate headings) and all assertNotIn checks still match
  raw source.
- README.md: restore the v5-to-v6 agent upgrades mention the refresh
  dropped; the invariant is still live while v5 installs migrate.
2026-08-07 13:17:19 +01:00
Richard Courtman 5e9db16927 fix(release): stage artifacts before publication 2026-08-07 12:27:36 +01:00
rcourtman c9e66b2295 release: pin code-signing policy link to the release tag
The docs link drift guard (test_repo_docs_link_drift.py) fails CI because
render_release_body.py links docs/CODE_SIGNING_POLICY.md at blob/main.
Release bodies must reference the docs snapshot of the release they
describe, so the installation section now links blob/v{version}, matching
how the rest of the body pins to the version being cut. The unit test pin
follows. Also skip .claude/ in the drift guard so local runs on a shared
tree are not polluted by stale agent worktrees under .claude/worktrees
that CI never checks out.
2026-08-07 01:13:56 +01:00
rcourtman 4e67b8117d fix(governance): exempt pure prettier reformats from browser proof
A `make format` sweep re-lays-out already-committed files without
changing a single token, so it cannot change what renders. The browser
verification guard still demanded a fresh receipt for it, which would
mean recording routes, viewports, states and interactions nobody
exercised in order to describe a diff with no visual delta. A guard that
can only be satisfied by an untrue receipt teaches people to write
untrue receipts.

Exempt a path only when its new content is byte-identical to prettier's
output for its committed content. That is provable, not a judgement
call: if the two match, the sole difference from HEAD is layout.

Fails closed everywhere else -- added or deleted files, unreadable
blobs, prettier missing, or any non-identical output all fall through
and still require the receipt. A reformat that also changes a value is
covered by a test and still blocks.
2026-08-06 21:53:44 +01:00
rcourtman ff58c33cfb fix(tooling): stop worktree commits from skipping prettier
The pre-commit frontend formatter resolved prettier at
REPO_ROOT/frontend-modern/node_modules/.bin/prettier, where REPO_ROOT is
derived from the script's own path. In a linked worktree that is the
worktree root, which never runs npm install, so prettier_bin() returned
None and the formatter silently returned 0. Every frontend commit made
from a Claude or Codex agent worktree skipped formatting entirely, and
the drift accumulated in already-committed files until someone ran
`make format` and picked up 14 files of unrelated churn.

The skip path's comment claimed "CI's prettier check still catches drift
that slips through here." No such check existed -- nothing under
.github/workflows referenced prettier -- so there was no backstop at all.

- Fall back to the primary worktree's node_modules, resolved via
  `git rev-parse --git-common-dir`, and say so in the hook output so a
  version mismatch between the two checkouts stays visible.
- Add the whole-tree "Check frontend formatting" step to the frontend CI
  job that the comment already promised. Staged-only formatting cannot
  see drift in untouched files; this can.
- Pin prettier exactly. "^3.3.0" let the tracked package-lock.json land
  on 3.9.5 while the gitignored pnpm-lock.yaml resolved 3.9.6, so CI and
  the dev machine were free to run different formatters.
- Resolve the test suite's prettier the same way, so its two real
  coverage tests stop silently skipping in worktrees.

Contract-Neutral: devDependency prettier version pin plus pre-commit/CI formatter tooling; no runtime, API, or deployment-surface delta
2026-08-06 21:53:44 +01:00
Richard Courtman 25ba5fd63e docs: publish SignPath policy links 2026-08-06 17:42:08 +01:00
Richard Courtman dbd353427b docs(governance): establish localized product lane 2026-08-06 17:26:12 +01:00
rcourtman 0dd9c92cb8 ci(signing): trust test certificate at machine scope 2026-08-06 16:08:33 +01:00
rcourtman 5ed518403f ci(signing): bound certificate store mutation 2026-08-06 16:00:41 +01:00
rcourtman 1f45db6e54 ci(signing): avoid interactive certificate import 2026-08-06 15:47:58 +01:00
rcourtman 98c6e2c46e ci(signing): bound test signature verification 2026-08-06 15:37:47 +01:00
rcourtman 1896166bc1 ci(signing): add isolated SignPath test proof 2026-08-06 15:24:50 +01:00
rcourtman 198c66c6c4 feat(monitoring): alert on certificate validity
Refs #1673
2026-08-06 09:47:03 +01:00
rcourtman 1b0b54534b Fix RC metrics, agent state, and bundle regressions 2026-08-05 00:32:24 +01:00
rcourtman 8e25badea1 chore: require live proof for hardware fix claims 2026-08-04 23:57:44 +01:00
rcourtman d1ce12e3a0 fix: make Proxmox protection posture evidence-backed 2026-08-04 15:07:18 +01:00
rcourtman cf4bed184b Pin the Alerts read-only proof file added with the tab fix
d00249fd7 added frontend-modern/src/pages/__tests__/Alerts.readOnly.test.tsx
without adding it to the pinned proof list in the canonical completion
guard, so the guard's expected list no longer matched what the registry
derives. canonical-governance has been red on main since that commit, and
the pre-commit hook has been refusing every commit locally for the same
reason. Six commits landed in that window, including the v6.2.0-rc.7 release
preparation.

The delta is one file added and none removed, so this restores the snapshot
rather than lowering the bar. A removal would have meant proof coverage was
dropped, which is a regression to investigate rather than a pin to update.

Contract-Neutral: governance pin restored to match the registry
2026-08-03 22:56:29 +01:00
rcourtman d4609665dc Fix release workflow JSON input transport 2026-08-03 22:19:32 +01:00
rcourtman 024aa16d92 Enforce browser verification for frontend changes 2026-08-02 20:22:36 +01:00
courtmanr@gmail.com a53d45e2d3 Harden external probe outage alerting 2026-07-29 20:09:23 +01:00
courtmanr@gmail.com 4d972a68ee Gate Patrol readiness on the completed overall verdict (#1640)
The "Patrol tools" readiness check read the cached model-readiness
snapshot's tool-protocol dimension on its own. Since the interrupted-run
handling landed (8d0d74e35, b78330405), a run cancelled after every tool
scenario already passed keeps ToolProtocol at pass while the overall
status reports not_assessed, so the check reported "Patrol ready" from an
evaluation that never completed.

The check now requires the snapshot's own overall verdict (Success)
before reporting ready. A snapshot carrying no verdict at all — overall
status not_assessed, or the interrupted or internal_error cause — is not
turned into a failure either: it falls back to the base-config classifier
exactly as an absent snapshot does, capped at a warning. That cap matters
because not_ready is a blocking status in this payload: it clears
readiness.ready, which disables the Patrol run control in
usePatrolIntelligenceState and drops the page into the setup-only view.
#1640 promises a severed or cancelled check never blames the model and
never blocks Patrol from running in Watch mode, and the runtime gate on
POST /api/ai/patrol/run (PatrolRuntimeReadiness) already treats an
unassessed mode as a warning, so a blocking tools check would have
contradicted the route that actually runs Patrol.

A completed run whose tool protocol passed while the overall verdict fell
short now warns instead of claiming ready. It must not block either: the
dimension that actually failed carries the verdict on its own check
(context quality blocks, latency warns), so blocking here would have
turned today's latency warning into a hard stop.

Regression tests: internal/api/issue1640_readiness_gate_test.go covers
the gate across interrupted, internal-error, completed-pass,
completed-fail, and short-of-pass snapshots, asserting the resulting
runnability of the readiness payload;
internal/ai/issue1640_readiness_gate_test.go drives a real evaluation
that is cancelled at the continuation probe to produce the
ToolProtocol=pass / status=not_assessed snapshot end to end and pins that
PatrolRuntimeReadiness keeps Patrol runnable. The new API test file is
registered in the subsystem verification registry.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 13:57:48 +01:00
courtmanr@gmail.com 71d53a37aa Fix CI fallout from the readiness hardening
Two failures on c3fb35c8f. The subsystem lookup unit tests hold their own
hardcoded copies of the settings-shell-and-framing exact_files list, a
third snapshot surface beyond the guard test's, and registering the new
banner proof file left them stale. Synced all eight copies.

The apiClient message-precedence change broke a pre-existing pin that a
short plain-text body outranks the caller fallback on retryable errors
(useReportingPanelState). Body-over-fallback was the long-standing
behavior; what #1640 actually required was dropping markup and oversized
bodies, which stays. Restored body-wins for sane plain text, flipped the
two precedence tests introduced alongside the change, and corrected the
cloud-paid contract paragraph to describe the real order.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 12:53:58 +01:00