Skip to content

fix: harden execution boundaries for v0.20.0 - #102

Merged
jamiesun merged 1 commit into
mainfrom
fix/execution-boundaries
Oct 27, 2026
Merged

jamiesun merged 1 commit into
mainfrom
fix/execution-boundaries

Conversation

@jamiesun

Copy link
Copy Markdown
Contributor

Summary

Prepare v0.20.0 with execution-boundary fixes:

  • Gate sudo credentials on a session-owned prompt and application input on child readiness. Cover scripts, apply, inspect, SQL, text and leading-sudo commands. Human login delegates sudo authentication to its TTY instead of prefill.
  • Keep RouterOS raw text intact, surface recognized device errors, share transport/deadline/audit evidence and guarded file operations, and keep previews offline/conservative.
  • Preserve host-test budgets and trust configuration; prefer previously trusted host-key algorithms without relaxing final verification.
  • Restore bounded SFTP pipelines and add plan-bound apply --sudo --stage-dir plus MCP parity.
  • Improve credential-shaped audit redaction, update public docs/embedded skill and invalidate old plans through execution semantics v2.
  • Advance the reviewed build baseline to Go 1.26.10 after govulncheck identified reachable standard-library fixes beyond 1.26.8.

Compatibility

  • Re-preview plans after upgrading.
  • login --sudo authenticates at the human TTY.
  • Noninteractive sudo readiness uses a shell wrapper; command-only sudoers restrictions are not bypassed.
  • ROS raw does not append without-paging; supply it explicitly when required.
  • ROS offline --expect-plan remains unsupported.

Verification

Locally passed on macOS:

  • Go 1.26.10 go test -race -count=1 ./...
  • go vet ./..., golangci-lint run ./...
  • Current govulncheck: zero reachable vulnerabilities
  • Repeated sudo/cancellation race regressions (20 runs)
  • Linux/Windows cross-build smoke (native CI is still the platform gate)
  • Pre-commit full tests/build/lint

CI adds disposable native Linux sudo policies for PASSWORD, NOPASSWD, cached authentication, root and incorrect credentials. Native SQL/keyring and platform CI must be green before merge/release. No production hosts or credentials are changed by this PR.

Bugfix reflection

  • Bug class: input-consumer confusion, duplicated execution/file paths, lost configuration, protocol-vs-domain success confusion.
  • Missing invariant: credentials never become application input; result and audit represent the same operation; declared deadlines and guarded publication survive adapters.
  • Why old tests missed it: sudo fixtures always consumed a password line, and legacy ROS tests checked happy-path envelopes without auditing wire bytes or filesystem failure boundaries.
  • Regression tests: compiled CLI shell/auth branches, native sudo CI, raw/audit/domain-error/file safety, offline preview, host deadlines/algorithms, SFTP pipelining and stage-dir/MCP.
  • Docs: AGENT, README/README_CN, execution safety, capability matrix, embedded skill, CLI help and release metadata updated.

Isolate sudo conversation from payloads, converge RouterOS execution and file evidence, preserve deadlines and trusted-key negotiation, restore bounded SFTP pipelining, and support private apply staging. Advance the reviewed Go security baseline to 1.26.10.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jamiesun
jamiesun merged commit e039016 into main Oct 27, 2026
11 checks passed
@jamiesun
jamiesun deleted the fix/execution-boundaries branch October 27, 2026 04:43
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