Skip to content

feat(nodes): add policy-gated system exec#3282

Closed
bogdanovich wants to merge 930 commits into
sipeed:mainfrom
bogdanovich:feat/node-system-exec
Closed

feat(nodes): add policy-gated system exec#3282
bogdanovich wants to merge 930 commits into
sipeed:mainfrom
bogdanovich:feat/node-system-exec

Conversation

@bogdanovich

Copy link
Copy Markdown
Contributor

What changed or was removed

  • add opt-in system.exec.v1 to the slim node companion
  • execute direct canonical argv without a shell
  • enforce companion-owned executable, working-root, environment, timeout, and output limits before durable acceptance and again before execution
  • persist typed timeout/start/wait failures and preserve non-zero process exits as successful typed results
  • terminate process groups on Unix and confirm explicit cancellation only after the child has stopped
  • keep the capability absent from the advertised catalog unless system_exec is explicitly configured

Why

The node MVP needs useful remote execution without turning pairing or gateway approval into unlimited host authority. This adds the narrow execution primitive described by the node-companion architecture while retaining an independent node-local maximum policy.

User and developer impact

Operators may opt in with system_exec.working_roots, system_exec.executables, and an optional environment-name allowlist, plus the existing local command policy. Existing companion configurations and catalogs are unchanged by default. Commands receive only explicitly allowlisted environment variables; shell interpreters are rejected.

Validation

  • go test -race ./pkg/nodes/... ./cmd/picoclaw-node
  • go test -tags goolm,stdjson ./...
  • golangci-lint run --build-tags=goolm,stdjson
  • GOOS=windows GOARCH=amd64 go test -c ./pkg/nodes/companion
  • GOOS=windows GOARCH=amd64 go build ./cmd/picoclaw-node
  • go generate ./...
  • focused subprocess tests cover opt-in advertisement, executable/env denial before ledger acceptance, cwd symlink escape, bounded output, non-zero exit, timeout, and confirmed cancellation

Later PRs

  • operator-facing node configuration and lifecycle/install tooling
  • typed service status/log capabilities
  • real-process loopback WSS end-to-end coverage and final MVP audit

bogdanovich and others added 30 commits July 12, 2026 20:28
fix(evolution): disable automatic skill mutation
fix(tasks): recover durable async deliverables
…ntion

fix(tasks): enforce event retention independently
…ntion

feat(tasks): bound task registry snapshot size
…-eval

feat(eval): add self-evolution effectiveness gate
feat(agent): classify pending tools during steering
…-observability

feat(tasks): configure task registry retention
…nt-pruning

fix(tasks): prune orphan events from empty registries
feat(eval): audit self-evolution draft corpus
feat(eval): support live isolated evolution trials
…on-runtime

refactor(evolution): remove learning runtime
fix(web): remove duplicate lockfile entries
…-verdict

docs(evolution): record held-out effectiveness verdict
…tifacts

refactor(eval): remove evolution artifacts
bogdanovich and others added 26 commits July 20, 2026 14:29
fix(agent): scope runtime sessions by workspace
…ervation

feat(interactions): add ordered observation boundary
refactor(eval): extract durable trace writer
refactor(eval): centralize bounded trace assembly
feat(nodes): persist companion invocations
feat(nodes): dispatch companion invocations concurrently
feat(nodes): add durable invocation cancellation
@bogdanovich

Copy link
Copy Markdown
Contributor Author

Opened against upstream by CLI repository auto-detection; this ForgeClaw-specific change belongs in the fork.

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.

1 participant