Files
pulse/docs
rcourtman 7cb45489e8 Add cloud_context_privacy dial (privacy redesign increment 1)
Introduce the single privacy dial that will govern what infrastructure context
cloud models may see, replacing the binary share_operational_context_with_cloud
toggle as the canonical operator control. This increment adds and surfaces the
setting; it does not change the redaction seam (that is increment 2).

Config (internal/config/ai.go): add AIConfig.CloudContextPrivacy with the
full|redacted|local_only levels, default "full", plus NormalizeCloudContextPrivacy
and the nil-safe GetCloudContextPrivacy getter. NewDefaultAIConfig defaults a fresh
self-hosted install to "full" so the Assistant answers with real resource detail
out of the box. The legacy ShareOperationalContextWithCloud boolean is retained as
the field the redaction seam still reads until it is wired into the dial directly.

Migration (internal/config/persistence.go): LoadAIConfig derives the dial from the
legacy toggle for pre-dial configs (legacy on -> full, off/absent -> redacted) and
persists it, leaving the legacy boolean untouched so existing installs keep their
current cloud behavior byte-for-byte. Fresh installs (no config file) default to full.

API (internal/api/ai_handlers.go): round-trip cloud_context_privacy through
/api/settings/ai field-by-field like discovery_enabled. The response always
serializes GetCloudContextPrivacy() (no omitempty) so the UI binds a 3-option
control to the concrete value; the update request carries an optional *string
validated against NormalizeCloudContextPrivacy (unknown values -> 400). When the
dial is provided it supersedes and re-syncs the legacy boolean (full -> true,
redacted/local_only -> false) so the existing seam honors the dial's full/redacted
axis without new redaction code paths.

Frontend: replace the binary "Share operational context with cloud models" toggle
with a "Cloud model privacy" 3-option FormSelect in AIRuntimeControlsSection.tsx,
bound to state.form.cloudContextPrivacy and the cloud_context_privacy payload via
useAISettingsState. CloudContextPrivacy type + payload fields in types/ai.ts;
label/help/option/summary copy in aiSettingsPresentation.ts.

Governance (ai-runtime + frontend-primitives substantive deltas; dependent
api-contracts, agent-lifecycle, storage-recovery notes): the contracts now name the
dial as canonical with the legacy boolean as the synced/migrated seam field.
Proofs: ai_config_test.go (getter/normalize/default), persistence_ai_test.go
(migration cases), ai_handlers_test.go (round-trip + legacy sync + 400),
contract_test.go JSON snapshots, settingsArchitecture + aiSettingsPresentation tests.
Live-verified in the preview drawer: dial renders with all three levels, the
migrated value (redacted) is selected, the summary updates reactively, and an
end-to-end UI save round-trips full (legacy sync true) then restores redacted.
2026-06-08 16:43:50 +01:00
..
2026-06-04 14:07:14 +01:00
2026-06-04 18:44:47 +01:00
2026-06-02 19:14:18 +01:00
2026-06-02 19:14:18 +01:00
2026-06-04 14:07:14 +01:00
2026-06-04 14:07:14 +01:00
2026-06-02 19:14:18 +01:00

📚 Pulse Documentation

Welcome to the Pulse documentation portal. Here you'll find everything you need to install, configure, and master Pulse.


v6 Execution Canonical Source

For Pulse v6 build/release execution work, do not start from this broad docs index. Use:

  1. docs/release-control/v6/internal/SOURCE_OF_TRUTH.md for stable human governance and locked decisions
  2. docs/release-control/v6/internal/status.json for live lane state, lane-to-subsystem ownership, structured evidence references, typed lane/subsystem decision records, and canonical ordered lists
  3. docs/release-control/v6/status.schema.json for the machine-readable status contract
  4. docs/release-control/v6/internal/subsystems/registry.json and docs/release-control/v6/internal/subsystems/registry.schema.json for subsystem ownership, explicit shared-ownership exceptions, and proof-routing rules
  5. python3 scripts/release_control/status_audit.py --check if you need a machine-derived evidence health audit
  6. python3 scripts/release_control/registry_audit.py --check if you need a machine-derived subsystem registry audit
  7. python3 scripts/release_control/contract_audit.py --check if you need a machine-derived subsystem contract audit, including explicit cross-subsystem dependency checks and exact registry-derived shared-boundary wording Local pre-commit runs the v6 machine audits against staged control-file content so partial staging cannot hide governance drift. Local pre-commit also blocks partial staging for hook-sensitive governance files under docs/release-control/v6/, scripts/release_control/, internal/repoctl/, .husky/pre-commit, and .github/workflows/canonical-governance.yml, because those checks still execute or structurally read the working-tree versions locally.
  8. python3 scripts/release_control/subsystem_lookup.py <path> [<path> ...] --pretty --lean if you need subsystem ownership, proof routing, exact contract-focus lines, and compact lane context for a change

For governed runtime changes, a staged subsystem contract only counts if its diff updates a substantive contract section such as Purpose, Canonical Files, Shared Boundaries, Extension Points, Forbidden Paths, Completion Obligations, or Current State, rather than metadata alone.

All other documents are supporting references unless explicitly required for evidence.


🚀 Getting Started

  • Installation Guide Step-by-step guides for Docker, Kubernetes, and bare metal.
  • Configuration
    Learn how to configure authentication, notifications (Email, Discord, etc.), and system settings.
  • Deployment Models
    Where config lives, how updates work, and what differs per deployment.
  • Migration Guide
    Moving to a new server? Here's how to export and import your data safely.
  • Upgrade to v6
    Practical upgrade guidance and post-upgrade checks for Pulse v6.
  • FAQ Common questions and quick answers.

🛠️ Deployment & Operations

🔐 Security

  • Security Policy The core security model (Encryption, Auth, API Scopes).
  • Privacy What leaves your network (and what doesnt).
  • OIDC / SSO OIDC Single Sign-On configuration (Authentik, Keycloak, Azure AD, etc.).
  • Proxy Auth Authentik/Authelia/Cloudflare proxy authentication configuration.
  • Agent Security Agent privilege model, Proxmox API-only choices, and self-update verification.

📖 Advanced Topics (Relay / Pro / legacy Pro+ / Cloud)

  • AI Autonomy & Safety Configure patrol autonomy levels, assistant control levels, investigation tuning, and safety guardrails.
  • Role-Based Access Control (RBAC) Define custom roles, assign permissions, and integrate with OIDC group mapping.
  • Audit Logging Tamper-evident event logging for compliance, with query, export, and signature verification.

New in 6.0

💳 Plans (Community / Relay / Pro / Cloud)

Pulse is available in three self-hosted tiers plus hosted Cloud:

  • Community: Free self-hosted monitoring with core monitoring included and 7-day history.

  • Relay: Adds secure remote access to the Pulse web UI, Pulse Mobile pairing for handoff, push notifications, and 14-day history.

  • Pro: Adds alert-triggered root-cause analysis, safe remediation workflows, operations tooling, governance features, and 90-day history.

  • Cloud: Hosted Pulse with Pro-level capabilities; hosted pricing is unchanged by the self-hosted model lock.

  • Learn more at pulserelay.pro

  • Plans and entitlements (includes the Community/Relay/Pro/Cloud matrix)

  • AI deep dive

  • Multi-Tenant Organizations (Enterprise) — Isolate infrastructure by organization for MSPs and multi-datacenter deployments.

📡 Monitoring & Agents

💻 Development

📁 Previous Versions


Found a bug or have a suggestion?

GitHub Issues