Skip to content

feat(managed): add standalone hosted node adoption and control runtime - #450

Merged
TeoSlayer merged 11 commits into
mainfrom
feat/public-managed-runtime
Aug 7, 2026
Merged

feat(managed): add standalone hosted node adoption and control runtime#450
TeoSlayer merged 11 commits into
mainfrom
feat/public-managed-runtime

Conversation

@TeoSlayer

Copy link
Copy Markdown
Collaborator

Summary

Adds the public node-side runtime required for secure hosted adoption and remote control while keeping hosted tenancy, persistence, semantic evaluation, billing, and fleet-management services private.

  • one-time adoption into a hosted authority with pinned identity and policy material
  • signed policy refresh, action decisions, reports, and constrained lifecycle commands
  • local pre/post hook enforcement for supported harnesses
  • managed connector state and daemon wiring
  • no dependency on private platform source or on pilotprotocol-mcp
  • unmanaged installations retain their existing behavior

Public dependency releases

  • common v0.5.12
  • dataexchange v0.2.2
  • eventstream v0.2.4
  • handshake v0.2.8

Validation

  • GOWORK=off go test -race ./...
  • GOWORK=off go vet ./...
  • GOWORK=off go build ./cmd/daemon ./cmd/pilotctl
  • architecture race suites and 1000-goroutine crypto stress
  • focused managed authority, enterprise-control, CLI, and daemon tests after removing hosted server code

The optional pilotprotocol-mcp package remains a separate adapter; it does not own adoption, node identity, or the managed runtime.

teovl and others added 9 commits August 7, 2026 02:50
…unbind + test fixes

Preservation snapshot of uncommitted working-tree work (repo survey 2026-08-02).
WIP branch — do NOT push directly; split into reviewed PRs first. Build scratch
excluded via .gitignore.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…config-dir default)

L1: with fleet state sync enabled and state_directory empty, the scan root
defaulted to '.', the directory holding enterprise-control.json — so
scanFleetState shipped 256KB previews of any operator-added text file there to
the authority as signed telemetry. Fail closed: require state_directory to be
set explicitly and to be distinct from the config directory.

SECURITY_REVIEW_v1.14 L1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…i-replay)

M2: a captured authority-signed restart/shutdown command could be replayed by a
compromised or MITM'd authority connection every poll — and after the restart
it caused — for up to its 24h TTL, because the daemon's result report goes to
the attacker (who drops it) so the authority's server-side de-duplication never
engages, yielding a fleet-wide shutdown/restart boot-loop. The signature is
replayed, not forged.

Persist a lifecycle guard (monotonic IssuedAt high-water + last command id) to
the enterprise-control state dir and refuse any lifecycle command at or below
it. The record is written BEFORE the daemon acts (and the write failing is
fatal to the action — fail closed), so it survives the syscall.Exec restart and
the replay is rejected on the next poll. Regression test covers replay, older
issue-time, newer command, and restart survival.

(Cert-pinning the authority channel — the other half of the MITM precondition —
remains a tracked enhancement; this idempotency record already breaks the
replay loop.)

SECURITY_REVIEW_v1.14 M2 (idempotency).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@github-advanced-security github-advanced-security AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gosec found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.

@TeoSlayer
TeoSlayer merged commit d99fd8a into main Aug 7, 2026
14 of 15 checks passed
@TeoSlayer
TeoSlayer deleted the feat/public-managed-runtime branch August 7, 2026 00:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants