Commit graph

369 commits

Author SHA1 Message Date
rcourtman
80a5fded28 Split AI settings section owners 2026-03-21 12:14:46 +00:00
rcourtman
5a638644b1 Own settings registry plumbing and system panel props 2026-03-21 12:04:07 +00:00
rcourtman
808b6904c7 Split network settings section owners 2026-03-21 11:48:25 +00:00
rcourtman
0531a00ce8 Split system logs runtime owner 2026-03-21 11:33:02 +00:00
rcourtman
ca6ae3bf33 Split hosted billing admin runtime owners 2026-03-21 11:28:49 +00:00
rcourtman
5c96a36deb Split Pro license runtime owners 2026-03-21 11:20:13 +00:00
rcourtman
38aebe666a Split relay settings runtime owners 2026-03-21 10:39:28 +00:00
rcourtman
2c1a89402b Split organization billing runtime owners 2026-03-21 01:53:17 +00:00
rcourtman
7b7adb07d4 Split organization overview runtime owners 2026-03-21 01:46:11 +00:00
rcourtman
9b94d75786 Split organization access runtime owners 2026-03-21 01:40:10 +00:00
rcourtman
7252902cdd Split organization sharing runtime owners 2026-03-21 01:32:31 +00:00
rcourtman
b486ac05cd Split RBAC settings runtime owners 2026-03-21 01:20:44 +00:00
rcourtman
c6f627dc2f Split infrastructure operations render owners 2026-03-21 01:01:07 +00:00
rcourtman
0986f46fab Extract Proxmox settings panel owners 2026-03-21 00:40:18 +00:00
rcourtman
446677f636 Extract infrastructure reporting summary owner 2026-03-21 00:24:38 +00:00
rcourtman
70c03a0c15 Model infrastructure workspace routing 2026-03-20 23:56:00 +00:00
rcourtman
274f109dff Split direct Proxmox settings surface owners 2026-03-20 23:40:02 +00:00
rcourtman
dcd88e2f64 Extract API token manager state owner 2026-03-20 23:08:43 +00:00
rcourtman
47eb1316b3 Normalize storage route shell 2026-03-20 21:05:48 +00:00
rcourtman
d209180af6 Extract node modal state owners 2026-03-20 19:35:44 +00:00
rcourtman
56bca4001f Extract infrastructure operations model owner 2026-03-20 18:02:29 +00:00
rcourtman
42e472e9f7 Clarify canonical timeline ownership 2026-03-20 11:05:08 +00:00
rcourtman
a4e2de310c Add canonical agent preflight gate 2026-03-20 10:23:29 +00:00
rcourtman
229b19fa25 Simplify resource drawer change history 2026-03-19 21:37:59 +00:00
rcourtman
6476708fe6 Rename release control lookup fixture IDs 2026-03-19 14:55:14 +00:00
rcourtman
c826707f60 Rename contract graph helper 2026-03-19 14:46:35 +00:00
rcourtman
a80fbf4eca Normalize release control resource wording 2026-03-19 14:43:17 +00:00
rcourtman
2c0217ecfc Refocus v6 resource history on investigation timeline 2026-03-19 10:58:59 +00:00
rcourtman
11c50eb7a0 Align v6 release branch governance 2026-03-19 10:18:45 +00:00
rcourtman
43cdc30f9b Add governed work-claim tooling 2026-03-19 10:06:39 +00:00
rcourtman
8354fcbc40 Promote lane expansion as active v6 target 2026-03-19 09:45:43 +00:00
rcourtman
778a2577b6 feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
rcourtman
c0b3a0e665 Restart Pulse service after failed auto-update (#1323)
The auto-update flow stops the Pulse service before applying updates.
If the update fails, the rollback path restored files but never
restarted the service. Since the main unit was explicitly stopped
(not crashed), systemd's Restart=always didn't rescue it.

Add restart-on-failure guards to both pulse-auto-update.sh and
install.sh so Pulse is always restarted after a failed update attempt.
2026-03-07 10:46:19 +00:00
rcourtman
01bf637d0d Fix QNAP agent duplicate processes during upgrades (#1317)
Add singleton watchdog with lock dir, pidfile tracking, and signal
traps to prevent multiple pulse-agent instances spawning on QNAP.
Tighten procfs matching to avoid killing unrelated processes.
2026-03-06 11:40:53 +00:00
rcourtman
499ab812e3 Fix post-release regressions and lock v5 to single-tenant runtime 2026-03-05 23:46:35 +00:00
rcourtman
cdceccef05 fix(agent): kill old QNAP agent processes during upgrade (#1317)
Add stop_qnap_agents() helper that kills wrapper scripts before binaries
to prevent watchdog respawn, and uses path-based pkill patterns that work
with BusyBox and match agents at both old and new install paths.
2026-03-05 10:01:43 +00:00
rcourtman
aae6035e66 fix(docs): audit and fix agent docs vs install script discrepancies (#1299)
- Split configuration table into "Installer flags" and "Agent-only flags"
  so users know which flags work with `curl | bash` vs the binary directly
- Add missing --cacert and --env flags to installer docs
- Fix --disable-auto-update example (install script doesn't accept it;
  use --env PULSE_DISABLE_AUTO_UPDATE=true instead)
- Add --disable-docker/kubernetes/proxmox and --proxmox-type to
  install.sh show_help()
- Fix --enable-docker=false in CENTRALIZED_MANAGEMENT.md
2026-02-27 21:20:54 +00:00
rcourtman
b1d58fc8aa fix(installer): avoid "No space left on device" on QNAP by writing binary to persistent storage
On QNAP, /usr/local/bin is a tiny RAM disk. The installer was downloading
the binary then mv'ing it there, which failed when the RAM disk was full.
The QNAP-specific logic that copies to the persistent data volume only
ran after that mv.

Move QNAP detection before the download step so INSTALL_DIR points to the
persistent data volume (e.g. /share/CACHEDEV1_DATA/.pulse-agent) directly.
The wrapper script still attempts to copy to /usr/local/bin at boot but
falls back to running from persistent storage if that fails.

Also fixes:
- pkill -f pattern in wrapper could match and kill the wrapper itself
  (path contains "pulse-agent"); switched to pkill -x for exact match
- Upgrade detection now checks /usr/local/bin for legacy QNAP installs
- Uninstall cleans up /usr/local/bin runtime copy
2026-02-27 20:41:32 +00:00
rcourtman
8298852483 feat(installer): add QNAP QTS/QuTS hero agent support (#1253)
QNAP wipes /etc/init.d on every reboot, so the agent needs persistent
storage on a data volume and autorun.sh boot persistence via the flash
config partition. Adds detection, install (with watchdog wrapper), and
clean uninstall paths. Flash config mount/umount is fail-safe via
subshell isolation to prevent leaving the partition mounted on write
errors.
2026-02-27 14:19:40 +00:00
rcourtman
3da224877c feat(agent): add --env flag for custom environment variables in service files (#1277)
Users can now pass --env KEY=VALUE (repeatable) to the install script to
inject custom environment variables into the agent's service file. Useful
for KUBECONFIG and similar paths not auto-detected by the installer.

The Settings UI adds a textarea for entering env vars that get appended
to the generated install command. Both frontend and script validate key
format and reject unsafe value characters.
2026-02-20 20:15:29 +00:00
rcourtman
1d07c1cd30 fix(agent): prevent duplicate PVE entries on agent re-registration (#1245)
Two changes to prevent duplicates in Settings > Virtual Environment:

1. Install script: only clear Proxmox state files on fresh installs,
   not upgrades. Previously every install forced re-registration.

2. Auto-register dedup: match agent re-registrations by server name
   when both the existing entry and new request have Pulse-created
   tokens (pulse-monitor@pam!pulse-*). This catches the case where
   the agent creates a new token after state files are cleared.
2026-02-20 19:38:03 +00:00
rcourtman
04d8c45ede fix(install): pass --cacert CA certificate to agent via SSL_CERT_FILE (#1201)
The --cacert flag was only used for curl during installation. On systems
with custom CA certificates (e.g. TrueNAS CORE with certs in
/etc/certificates/CA), the agent process had no way to trust the custom
CA and users had to fall back to --insecure.

Set SSL_CERT_FILE in the agent's runtime environment when --cacert is
provided. Go's crypto/x509 reads this natively, so the agent trusts the
custom CA without any binary changes. All service types are covered:
systemd, upstart, launchd, FreeBSD rc.d, OpenRC, SysV init, and Unraid.

Also validates the --cacert path at install time: directories and missing
paths now fail early with a clear message instead of silently proceeding.
2026-02-19 09:55:09 +00:00
rcourtman
cf047bd899 feat(install): add TrueNAS CORE (FreeBSD) support to install script (#1201)
Extends the TrueNAS SCALE installer to also support TrueNAS CORE
(FreeBSD-based). The installer auto-detects the platform and configures
the appropriate service manager: systemd for SCALE, rc.d for CORE.

- Rename is_truenas_scale() to is_truenas() with FreeBSD detection
- Add FreeBSD rc.d service script generation with placeholder substitution
- Add FreeBSD bootstrap script for Init/Shutdown task persistence
- Split install/uninstall paths by OS throughout the TrueNAS block
- Add --cacert <path> flag for custom CA bundles (wired to curl only,
  not passed to the agent binary)
- Fix --cacert incorrectly mapping to --insecure in exec args
- Fix missing closing quote on RCSCRIPT_LINK in FreeBSD bootstrap
- Fix unreachable echo after exit 0 in FreeBSD bootstrap

Co-authored-by: wilddev65 <wilddev65@users.noreply.github.com>
(cherry picked from commit affdbaeebaf2b1135431b232593122f464c6bb53)
2026-02-18 12:59:55 +00:00
rcourtman
3d0082c07e chore: update dev paths to /Volumes/Development
Migrated hardcoded paths from ~/Development to /Volumes/Development.
2026-02-07 19:20:37 +00:00
rcourtman
f253ed2778 fix(license): harden release key validation and fingerprint logging 2026-02-07 14:18:44 +00:00
rcourtman
cea2fdd40f fix: add FreeBSD binaries to release manifest and validation
The previous commit added FreeBSD binaries to the Docker build and
release directory but didn't update the manifest generator or validation
script. Without this, FreeBSD binaries would be built but not tracked
or validated, and release validation would fail on the new entries.

Related to #1051
2026-02-04 11:00:31 +00:00
rcourtman
7346d48872 fix: add FreeBSD agent binaries to Docker build and fix pfSense boot (#1051)
Two fixes for FreeBSD agent support:

1. The Docker image never built or included FreeBSD agent binaries, causing
   404 errors when FreeBSD clients requested the download. Added FreeBSD
   amd64/arm64 cross-compilation for both host-agent and unified-agent,
   plus COPY statements to include them in the image. Also added bare
   FreeBSD binaries to GitHub release assets for the redirect fallback.

2. pfSense does not use the standard FreeBSD rc.d boot system — scripts
   in /usr/local/etc/rc.d/ must end in .sh to run at boot. The installer
   now detects pfSense and creates a .sh boot wrapper alongside the
   standard rc.d script. Also added -r flag to daemon for auto-restart.

Related to #1051
2026-02-04 10:55:55 +00:00
rcourtman
1490a6e6e3 revert: remove dual-key license verification
Restored original license signing key from backup - key was never
compromised (private repo). Removes unnecessary dual-key complexity:

- Remove legacyPublicKey and SetLegacyPublicKey from license.go
- Simplify signature verification to single key
- Remove EmbeddedLegacyPublicKey from pubkey.go
- Remove PULSE_LICENSE_LEGACY_PUBLIC_KEY from Dockerfile and workflows
- Remove dual-key test
- Simplify mock.env
2026-02-03 21:29:21 +00:00
rcourtman
f810a003eb license: add dual-key verification 2026-02-03 20:45:00 +00:00
rcourtman
c2de5f7f4c Fix: add Windows uninstall command support for unified agent
The UI only showed a bash uninstall command which doesn't work on Windows.
Added PULSE_UNINSTALL env var support to install.ps1 and updated the UI
to display platform-specific uninstall commands for both Linux/macOS and
Windows.

Related to #1176
2026-02-03 12:03:06 +00:00