mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-26 05:29:45 +00:00
1d6d2bfcae
Settings > Assistant offered a Protected guests list (protected_guests) that was saved and pushed into the Assistant tool executor, but its only reader was executeControlGuest, which nothing calls. pulse_control plans through the shared action lifecycle and never consulted the list, so a guest named in it (by VMID and by name) was planned like any other. The "legacy" label added in #2765 states that limit; this removes the setting instead of keeping a field that cannot do its job. The canonical way to keep Pulse off a resource is its operator lock (Never auto-remediate, or a Retired lifecycle). It is keyed by canonical resource id, applies to every platform, and the action lifecycle refuses dispatch for it even for approved plans. The one gap was planning: the lifecycle plans without reading operator state, so the Assistant could leave a plan in Actions that can never run. assistantTypedActionPlanner now reads the state through the tenant-scoped lifecycle store (the same read Patrol's broker uses) and declines before Plan, and pulse_control reports the block with how to clear it. A state that cannot be read does not refuse planning, because dispatch re-checks. Removed: AIConfig.ProtectedGuests and its getter, the settings API field, the executor field/setter/config, the chat service plumbing, the Settings field and form state, and the legacy copy, pins and prose from #2765. A stored value still loads (tolerant decode) and is dropped the next time the settings are written; older PUT bodies that send the key are ignored. The Settings panel points at the guest's Manage tab.