mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-26 05:29:45 +00:00
db57faf1c0
Patrol now has two modes: **Watch only** reports findings, and **Ask first** investigates and proposes fixes. Every fix waits in Actions for an operator to approve and run it. Safe auto-fix (`assisted`) and Autopilot (`full`) are retired. Why: schema-v17 telemetry for the week to 2026-10-11 counts 1 assisted and 2 full installs out of 612 reporting Patrol, and 4 executed Patrol actions in 30 days, all on one install. No GitHub issue asks for more autonomy. Meanwhile the automatic path carried its own policy leases, acknowledgement store, per-resource allowlist, release gate and Colima lab. Investigation is what paid installs use, so it stays. Behaviour - A saved `assisted`, `full` or `autonomous` level reads as `approval`. Both autonomy update routes refuse those levels with `400 invalid_autonomy_level`. The acknowledgement routes are gone. - The core Patrol action broker only plans: `Plan` and `Submit` persist the plan and return. `TestContract_PatrolActionBrokerOnlyPlans` forbids execution calls in its source. - Removed: - `ExecuteUnderPolicy`, the policy authorization lease, and the policy execution store methods; - Autopilot acknowledgement persistence, its routes and its dialog; - the per-resource automatic-action allowlist: type, API field and drawer editor. The store column is written as NULL. - Kept for compatibility: - `GetPatrolFullModeUnlocked` stays on the extension contract and reports false; - historical action records keep their lease and reason codes decodable, labelled as retired modes. - The Patrol inbox no longer has a "continuing without a decision" bucket: every current issue is an operator decision. Governance - RG-06 now proves Patrol never executes without an operator decision (integration tier). - RG-02/RG-04 and the RA35/RA39/RA40 proof commands point at surviving tests. Every `-run` name was checked against `git grep '^func Test'`. - Pro plan copy, AI docs, privacy telemetry wording and the subsystem contracts describe the two modes. Verification - Go: vet is clean. config, ai, ai/qualification, telemetry, actionlifecycle, unifiedresources, aicontracts and api pass on pulse-dev. - Frontend: type-check and lint are clean; 217 related test files pass. - Governance: release_control Python suites, status/registry audits and the docs mirror pass. - Browser: a pulse-enterprise build of this tree with a Pro licence, run before and after merging onto main: - the Patrol selector has exactly two modes, and each save reads back; - retired levels get 400, and the acknowledgement route returns 404; - the drawer Manage tab has no allowlist editor and still saves; - phone width is fine; the plan page shows no retired modes.