Pulse/scripts/release_control
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
..
internal Clarify Relay mobile handoff paid copy 2026-04-30 13:18:04 +01:00
agent_preflight.py Add canonical agent preflight gate 2026-03-20 10:23:29 +00:00
agent_preflight_test.py Add canonical agent preflight gate 2026-03-20 10:23:29 +00:00
ai_runtime_docs_policy_test.py Own public AI docs product language 2026-04-28 21:23:05 +01:00
canonical_completion_guard.py Add contract-neutral bypass to staged shape guard 2026-04-17 12:24:01 +01:00
canonical_completion_guard_test.py Fail closed malformed approval expiry state 2026-05-07 16:56:47 +01:00
commercial_cancellation_reactivation_proof.py Restore public release proof entrypoints 2026-03-28 17:35:17 +00:00
commercial_cancellation_reactivation_rehearsal.py Restore public release proof entrypoints 2026-03-28 17:35:17 +00:00
contract_audit.py fix: remediate dependency alerts 2026-04-09 09:35:28 +01:00
contract_audit_test.py fix: remediate dependency alerts 2026-04-09 09:35:28 +01:00
control_plane.py Map legacy stable releases in control plane 2026-04-11 13:23:07 +01:00
control_plane_audit.py feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
control_plane_audit_test.py Map legacy stable releases in control plane 2026-04-11 13:23:07 +01:00
dev_runtime_governance_test.py Harden dev agent deploy SSH host verification 2026-04-22 11:41:50 +01:00
documentation_currentness_test.py Require current release gate runbooks 2026-05-08 01:26:06 +01:00
format_staged_go.py feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
format_staged_go_test.py feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
generate_platform_support_backend_module.py Fix Unraid agent host profile detection 2026-05-08 11:05:14 +01:00
generate_platform_support_frontend_module.py Drive agent host profiles from platform manifest 2026-05-07 23:42:15 +01:00
governance_stage_guard.py Make billing recovery route-owned and unblock governed commits 2026-04-08 22:11:10 +01:00
governance_stage_guard_test.py Make billing recovery route-owned and unblock governed commits 2026-04-08 22:11:10 +01:00
mobile_relay_auth_approvals_proof.py Restore public release proof entrypoints 2026-03-28 17:35:17 +00:00
paid_feature_claims_proof.py Add paid feature claim proof bundle 2026-04-29 14:18:43 +01:00
proof_entrypoints_test.py Add paid feature claim proof bundle 2026-04-29 14:18:43 +01:00
readiness_assertion_guard.py feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
readiness_assertion_guard_test.py feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
record_rc_to_ga_blocked.py Prepare v6.0.0-rc.4 release packet 2026-05-05 15:32:32 +01:00
record_rc_to_ga_rehearsal.py Govern RC-to-GA rehearsal record capture 2026-04-11 14:08:57 +01:00
registry_audit.py Own mobile relay runtime in L7 2026-03-28 18:07:44 +00:00
registry_audit_test.py Own mobile relay runtime in L7 2026-03-28 18:07:44 +00:00
relay_registration_reconnect_drain_proof.py Restore public release proof entrypoints 2026-03-28 17:35:17 +00:00
release_promotion_policy_support.py Govern RC-to-GA rehearsal record capture 2026-04-11 14:08:57 +01:00
release_promotion_policy_support_test.py Pin workflow actions and CI image versions 2026-04-22 10:12:15 +01:00
release_promotion_policy_test.py Support private Pro archive installs 2026-05-07 09:28:38 +01:00
render_release_body.py Support private Pro archive installs 2026-05-07 09:28:38 +01:00
render_release_body_test.py Publish a distribution path for pulse-mcp 2026-05-10 17:04:49 +01:00
repo_file_io.py feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
repo_file_io_test.py feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
resolve_release_promotion.py Restore v6 development version semantics 2026-04-04 23:02:58 +01:00
resolve_release_promotion_test.py Restore v6 development version semantics 2026-04-04 23:02:58 +01:00
ssh_host_key_policy_test.py Harden dev agent deploy SSH host verification 2026-04-22 11:41:50 +01:00
staged_commit_shape_guard.py Add contract-neutral bypass to staged shape guard 2026-04-17 12:24:01 +01:00
staged_commit_shape_guard_test.py Add contract-neutral bypass to staged shape guard 2026-04-17 12:24:01 +01:00
status_audit.py Polish prerelease audit wording 2026-03-25 11:32:39 +00:00
status_audit_test.py Reopen v6 release control as pre-RC hold 2026-04-04 22:47:37 +01:00
status_lookup.py Promote lane expansion as active v6 target 2026-03-19 09:45:43 +00:00
status_lookup_test.py Add governed action audit preflight 2026-04-25 22:35:19 +01:00
subsystem_contracts.py fix: remediate dependency alerts 2026-04-09 09:35:28 +01:00
subsystem_contracts_test.py fix: remediate dependency alerts 2026-04-09 09:35:28 +01:00
subsystem_lookup.py Govern public v6 preview ops ownership 2026-04-15 09:24:41 +01:00
subsystem_lookup_test.py Keep Patrol evidence aligned with live findings 2026-05-08 11:08:53 +01:00
work_claim.py Add governed work-claim tooling 2026-03-19 10:06:39 +00:00
work_claim_test.py Add governed work-claim tooling 2026-03-19 10:06:39 +00:00