Commit Graph

66 Commits

Author SHA1 Message Date
rcourtman 3a51429a58 fix(licensing): honest installation-limit copy and v6 connectivity disclosure
Docs and frontend half of the licensing-policy client work from the v6
upgrade sweep (license findings 5 and 6); the Go classifier and grant
refresh fix land separately once the shared pre-commit guard unblocks.

A 409 MAX_INSTALLATIONS during v5 key migration rendered as 'another v6
activation handoff is still settling. Retry activation from this
instance.' Retrying can never succeed until a slot is freed server-side,
so that copy stranded users. The notice now says the key is already
active on its maximum number of v6 installations and points at
support@pulserelay.pro to free a slot, via the new
exchange_installation_limit reason and free_installation_slot action.

docs/UPGRADE_v6.md gains a 'Breaking Change: Paid Licensing Requires
Connectivity' section: v5 validated keys fully offline, v6 needs
periodic connectivity to license.pulserelay.pro, with roughly 10 days of
offline tolerance (72 hour grant plus 7 day grace) before paid features
drop to Community, plus air-gap guidance and the migrated-key
installation cap. docs/releases/V6_CHANGELOG.md gains the matching
breaking-change bullet.

Note: the two frontend files also carry two small additive hunks from
the parallel persisted-license-unreadable slice (a copy case and its
test, inert until its Go side lands); they share these files and are
included to avoid splitting them mid-flight.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-11 08:32:07 +01:00
rcourtman 43bc15c12f fix(config): restore legacy PORT fallback for FRONTEND_PORT with deprecation warning
v5 documented PORT as a legacy alias for FRONTEND_PORT. v6 dropped the
fallback silently, so an install configured with PORT=8080 upgrades to
v6 and comes up on 7655 with no explanation, unreachable behind its
existing port mapping or reverse proxy.

Honor PORT again at lowest precedence (FRONTEND_PORT wins when both are
set) and log a deprecation warning at startup, mirroring the existing
legacy DISABLE_AUTH handling. Document PORT as deprecated in
CONFIGURATION.md and note the compatibility behavior in the v6
changelog.
2026-06-10 22:32:28 +01:00
rcourtman bd6f77e093 Prepare v6.0.0 release candidate
Tighten v5-to-v6 upgrade safety, release installability, provider MSP mode handling, AI cost accounting, metrics flushing, and frontend guardrails for the v6.0.0 GA candidate.
2026-06-04 14:07:14 +01:00
rcourtman 4ef6caaa9d Finalize v6 GA release packet 2026-06-03 17:15:00 +01:00
rcourtman c25e95cb2b Drop keyboard shortcut listings from rc.6 release docs
The Cmd/Ctrl+K command palette and the / global search shortcut are
the navigation affordances worth calling out. The g-chord shortcuts
are not a notable customer-facing feature for the rc.6 prerelease
notes; the keyboard shortcut modal already documents them in-product
for anyone who wants to discover them.
2026-05-27 20:46:51 +01:00
rcourtman 1407996e58 Drop Standalone framing from release docs; describe rename as Hosts → Machines
The internal rename chain in rc.1-rc.5 went Agents -> Standalone ->
Machines but neither Agents nor Standalone shipped as user-visible
labels for the Pulse Agent inventory page. Users coming from v5 know
the page as Hosts. The rc.6 release docs incorrectly framed the
change as 'Standalone surface renamed to Machines' which references
an internal name no public release ever exposed.

Reframe in the shipped v6 docs and the rc.6 packet drafts as
'Hosts page renamed to Machines'. Top-level page listings updated
to use Machines (not Standalone). Keyboard shortcut listing
updated to 'g s Machines' (not Standalone). 'Standalone-to-Machines
surface evolution' rewritten as 'Hosts-to-Machines rename'.

Touches:
- docs/releases/RELEASE_NOTES_v6.md
- docs/releases/V6_CHANGELOG.md
- docs/releases/V6_RC_OPERATOR_SUPPORT_PACK.md
- docs/releases/RELEASE_NOTES_v6_RC6_DRAFT.md
- docs/releases/V6_CHANGELOG_RC6_DRAFT.md
- docs/releases/V6_RC6_OPERATOR_SUPPORT_PACK_DRAFT.md

The internal route path /standalone is unchanged because that is a
code-level identifier, not a user-facing label.
2026-05-27 20:44:29 +01:00
rcourtman 8769f07eea Land SMART/SSH temperature feature, rc.6 finalization, and post-IA-revert governance reconciliation 2026-05-27 15:27:25 +01:00
rcourtman affc1c76ed Add rc.6 operator support pack and prerelease index pointers
Stages the doc-only subset of rc.6 packet prep work on top of
df7934936. Holds VERSION bump and the registry/contract governance
reconciliation back for a focused later pass since the IA revert
created broader subsystem-contract debt than the packet prep can
absorb.

- docs/releases/V6_RC6_OPERATOR_SUPPORT_PACK_DRAFT.md: new 300-line
  operator support brief mirroring the rc.5 pack with rc.6 themes:
  pre-release for testing framing, platform-shaped frontend revert
  explanation, vSphere as a first-class platform, Machines surface,
  TrueNAS native detail UX, FilterBar adoption, Patrol capacity-
  forecast and PDM bridge, free-first self-hosted posture, install.sh
  smoke gate. Carries the rc.5 free-first paid-continuity wording
  through unchanged so the operator-support-pack policy test holds.
- docs/releases/RELEASE_NOTES_v6_RC6_DRAFT.md,
  docs/releases/V6_CHANGELOG_RC6_DRAFT.md: fill in the SHA audit
  numbers (v6.0.0-rc.5..df7934936, 616 commits, 1379 files / 139185
  insertions / 67870 deletions). Add the licensing-continuity
  paragraph carrying the rc.5 Pulse Mobile pairing for handoff
  copy through unchanged so the discovered-packet policy test holds.
- docs/RELEASE_NOTES.md: link the rc.6 draft packet as current, push
  rc.5 to historical.
- docs/UPGRADE_v6.md: round out the prerelease packet pointer block
  with the rc.6 operator support pack path alongside the release
  notes and changelog already pointed at in df7934936.
- docs/releases/V6_PRERELEASE_RUNBOOK.md: add 6.0.0-rc.6 to the
  version-examples list and bump the RC_VERSION export shown in the
  RC release steps to rc.6.

Out of scope for this commit and intentionally held back until
governance reconciliation can land coherently:

- VERSION bump to 6.0.0-rc.6 (triggers deployment-installability
  shape-guard which cascades into registry/contract audits against
  72 dead-file references left over from the rc.6 IA revert).
- docs/release-control/v6/internal/status.json,
  docs/release-control/v6/internal/subsystems/registry.json, and the
  10 subsystem contract .md files that need post-IA-revert cleanup.
- scripts/release_control test fixture refreshes.
- The rc-to-ga-promotion-readiness-blocked record regen (gated on
  VERSION bump landing).

Working copies of the held-back files are preserved at
/tmp/rc6-prep-backup-2026-05-27/ with a MANIFEST.md describing each.
2026-05-27 13:37:24 +01:00
rcourtman df79349368 Document rc.6 frontend IA revert in v6 release docs
rc.1-rc.5 shipped a unified /infrastructure /workloads /storage
/recovery top-level layout; rc.6 reverts the frontend to platform-
shaped pages (Proxmox / Docker / Kubernetes / TrueNAS / vSphere /
Standalone) on the same unified resource backend.

Updates the shipped v6 release docs to match:

- RELEASE_NOTES_v6.md and V6_CHANGELOG.md rewritten to describe the
  v6 layout as platform-shaped on a unified backend, with a paragraph
  in each explaining the rc.6 revert and the operator feedback that
  drove it.
- UPGRADE_v6.md prerelease packet pointer bumped from rc.5 to rc.6.
- MIGRATION_UNIFIED_NAV.md gets a top-of-file revert banner that
  redirects bookmarks targeting the unified routes to their platform-
  shaped equivalents; the original content is preserved below as a
  Historical Context section so the 19 tracked references into that
  doc still resolve.

Also adds the rc.6 draft packet:

- docs/releases/RELEASE_NOTES_v6_RC6_DRAFT.md
- docs/releases/V6_CHANGELOG_RC6_DRAFT.md

Validation SHAs in both drafts are left as <populate at packet
finalisation> markers; they fill in when the release-control packet
runs.
2026-05-27 11:50:59 +01:00
rcourtman e1a6dff2a1 Document Pulse Cloud launch in v6 release notes 2026-05-11 23:18:05 +01:00
rcourtman 894ea89af9 Refresh RC5 packet validation range for plain-JSON tool-call sanitisation 2026-05-11 17:09:57 +01:00
rcourtman 366bf8d127 Prepare v6.0.0-rc.5 release packet 2026-05-11 16:52:31 +01:00
rcourtman 3da835c5bc Publish a distribution path for pulse-mcp
The MCP adapter shipped in slice 51 with one install option:
clone the repo and go build. This slice integrates pulse-mcp
into Pulse's existing governed release pipeline so a Pulse
release publishes a pulse-mcp binary alongside the unified agent
and the install scripts that bring it home in one command.

What ships:

  - scripts/build-release.sh extended to build pulse-mcp for
    the same multi-OS matrix as the unified agent, package
    per-platform tarballs and zips, and copy bare binaries to
    RELEASE_DIR for /releases/latest/download/ redirect
    compatibility.
  - .github/workflows/create-release.yml extended to upload
    the bare pulse-mcp binaries plus install-mcp.sh and
    install-mcp.ps1 as release assets.
  - scripts/install-mcp.sh: bash one-line installer that
    detects platform/arch, downloads the matching binary from
    the configured release (latest by default), verifies SHA256
    against the published checksums.txt, places at
    ~/.local/bin/pulse-mcp (or /usr/local/bin if not writable).
    Honors PULSE_MCP_VERSION, PULSE_MCP_BIN_DIR, PULSE_MCP_REPO,
    PULSE_MCP_NO_VERIFY env vars; declines Windows shells with
    a pointer at the .ps1 sibling.
  - scripts/install-mcp.ps1: PowerShell installer for Windows,
    placing pulse-mcp.exe at $LOCALAPPDATA\pulse-mcp.

Documentation aligned:

  - cmd/pulse-mcp/README.md gains an Install section above
    Quick start with three options: one-line installer,
    GitHub Release download, go install. Documents the macOS
    Gatekeeper bypass since v1 is unnotarized by design.
  - The Settings -> API Access agent-integrations panel now
    surfaces the curl|bash command above the config snippet so
    operators see "install pulse-mcp" before "configure your
    MCP client."
  - docs/releases/AGENT_PARADIGM.md drops the "no published
    distribution path" item from "what it does not do yet" and
    documents the Gatekeeper / Homebrew gaps as next-tier
    follow-ups.

Trade-offs surfaced and chosen:

  - Same cadence as Pulse: pulse-mcp ships per Pulse release,
    not on its own track. The MCP server reads the manifest
    from the Pulse it talks to, so version alignment is the
    natural model.
  - No Homebrew tap or core formula in v1. Maintaining a tap
    is real ongoing work; foundation supports adding Homebrew
    later as a layer.
  - No Docker image. Stdio JSON-RPC fights Docker's stdin
    /stdout pattern.
  - No notarization in v1. SHA256 verification through the
    installer preserves the audit trail; README documents the
    Gatekeeper bypass.

Subsystem contract: deployment-installability.md gains
scripts/install-mcp.sh, scripts/install-mcp.ps1, and
cmd/pulse-mcp/ in canonical files (mid-list entries
renumbered) plus a paragraph documenting the new MCP entry
point alongside the existing installer family.

Verification artifacts:

  - scripts/installtests/build_release_assets_test.go gains
    TestBuildReleasePackagesPulseMcpForAllPlatforms which pins
    the build/package/copy wiring and the load-bearing
    install-mcp.sh helpers (platform detection, SHA256
    verification, install-dir resolution).
  - scripts/release_control/render_release_body_test.py gains
    test_agent_paradigm_release_notes_blurb_documents_-
    distribution_path which pins the AGENT_PARADIGM.md draft's
    install-mcp.sh reference and the four-axis frame so a
    future edit cannot regress the install story silently.

Smoke-tested install-mcp.sh locally on darwin-arm64: platform
detection, install-dir resolution, URL building, and 404 error
handling all correct. The full end-to-end install path becomes
live the moment a Pulse release ships pulse-mcp binaries; the
next RC cut will exercise it.
2026-05-10 17:04:49 +01:00
rcourtman 4b6e409747 Draft a release-notes blurb for the agent paradigm work
Sources cleanly into release announcements without forcing a
fresh draft when the next RC or GA cuts.

Sized as a focused source draft (under 130 lines): one-paragraph
headline, three operator-facing bullets, the four-axis frame
(discover, read, write, push) lifted and condensed from
docs/AGENT_SUBSTRATE.md, an integrators-pointing section that
names the two reference adapters and the canonical contract, an
honest "what it does not do yet" paragraph (no published
pulse-mcp distribution; no real-world consumer feedback yet),
and an audit-trail summary.

Style matches the existing docs/releases/RELEASE_NOTES_v6_*.md
draft pattern: technical, plainspoken, no marketing prose,
honest about scope. No em dashes per project rule.

Lives at docs/releases/AGENT_PARADIGM.md alongside the existing
release-notes drafts so a release author finds it where they
already look. The header explicitly frames it as a source
draft to drop into announcements, GitHub prerelease descriptions,
or a "What Changed" section in a versioned release notes file,
trimmed or expanded as the cut requires.

Contract-neutral commit: docs-only addition, no runtime code,
wire shape, manifest entry, error code, version artifact,
release workflow input, governed metadata, or canonical-files
contract changed. PULSE_ALLOW_CONTRACT_NEUTRAL_COMMIT used with
a documented reason since the deployment-installability
verification-artifact rule wants a Python release-promotion
test touched, which would be wrong scope for a markdown draft.
2026-05-10 16:44:26 +01:00
rcourtman fc4928e1f2 Clarify paid Pulse Pro runtime install path 2026-05-06 21:52:50 +01:00
rcourtman 4aa91f6af3 Refresh RC4 packet after watcher lifecycle fix 2026-05-05 18:30:06 +01:00
rcourtman 09c8e75f4d Refresh RC4 packet validation metadata 2026-05-05 16:27:49 +01:00
rcourtman 1a3e5ec27d Fix tenant monitor broadcast nil hub panic 2026-05-05 16:25:00 +01:00
rcourtman 96c2e160c9 Fix RC4 release validation blockers 2026-05-05 15:59:23 +01:00
rcourtman f149c5d643 Prepare v6.0.0-rc.4 release packet 2026-05-05 15:32:32 +01:00
rcourtman f1744d36d0 Refresh RC3 packet for metrics proof fix 2026-05-03 16:38:00 +01:00
rcourtman f69e68d4a4 Refresh RC3 packet for stable installer fix 2026-05-03 16:18:56 +01:00
rcourtman 6459515c78 Refresh RC3 packet for SSO candidate commits 2026-05-03 15:09:42 +01:00
rcourtman 7e9a7a3fd4 Document RC3 commit coverage audit 2026-05-03 11:52:51 +01:00
rcourtman 2c3ece3e51 Prepare v6.0.0-rc.3 release packet 2026-05-01 20:28:12 +01:00
rcourtman c7164c2906 Clarify Relay mobile handoff paid copy 2026-04-30 13:18:04 +01:00
rcourtman 7b9389603a Align release docs with infrastructure landing 2026-04-29 23:49:17 +01:00
rcourtman f060f261cd Present Relay as annual-first support tier 2026-04-29 12:49:20 +01:00
rcourtman 2f2f729d35 Use neutral self-hosted monitoring copy 2026-04-29 11:09:57 +01:00
rcourtman 2e64d3d254 Remove stale unlimited monitoring wording 2026-04-29 10:48:09 +01:00
rcourtman 5d496a5d2a Align self-hosted plan docs and tests 2026-04-29 09:21:10 +01:00
rcourtman b2202b71c7 Clarify support pack Pro continuity wording 2026-04-28 21:13:49 +01:00
rcourtman cd8c743a19 Align RC changelog with free-first licensing 2026-04-28 20:03:11 +01:00
rcourtman f59e8d09ff fix: remove self-hosted monitored-system upsell copy 2026-04-24 19:03:35 +01:00
rcourtman eaa2b7d31d docs: gate paid Pro release readiness 2026-04-23 22:16:38 +01:00
rcourtman 3cbb62a40d Document update signer continuity for future releases 2026-04-22 20:36:49 +01:00
rcourtman 6db9aeadcf Prepare the v6 stable promotion candidate 2026-04-20 14:09:17 +01:00
rcourtman d1600d5ef1 Own prerelease feedback intake under deployment-installability 2026-04-16 15:18:46 +01:00
rcourtman 954a7c06c7 Tighten rc release packet runbook 2026-04-16 14:57:07 +01:00
rcourtman f29104d693 Draft rc2 changelog packet 2026-04-16 14:45:14 +01:00
rcourtman 02194a237e Draft rc2 release notes packet 2026-04-16 12:22:03 +01:00
rcourtman 5914a4127d Make self-hosted core monitoring uncapped
Refs #1409
2026-04-16 01:21:57 +01:00
rcourtman f72ff5df5c Update infrastructure install path docs
Refs #1415
2026-04-15 17:00:32 +01:00
rcourtman 8e2f925825 Add canonical grandfathering support reply 2026-04-15 11:19:07 +01:00
rcourtman 23d5a8a6b2 Clarify grandfathered v5 licensing docs 2026-04-15 11:14:48 +01:00
rcourtman 34784c9b9b Lock grandfathering to pre-cutover subscribers 2026-04-15 09:16:07 +01:00
rcourtman d0bde35018 Clarify paid v5 customer continuity in v6 docs 2026-04-15 00:42:14 +01:00
rcourtman 0a71db8b35 Add Pulse v6 RC changelog 2026-04-14 16:37:23 +01:00
rcourtman ef288b250b Reconcile draft release retries 2026-04-12 10:52:19 +01:00
rcourtman d643b0fb51 Govern RC-to-GA rehearsal record capture 2026-04-11 14:08:57 +01:00