Skip to content

Copy configured guest files before agent bootstrap - #514

Merged
ESultanik merged 3 commits into
mainfrom
feat/guest-files
Oct 6, 2026
Merged

ESultanik merged 3 commits into
mainfrom
feat/guest-files

Conversation

@ESultanik

@ESultanik ESultanik commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Add repeatable [[guest_files]] mappings to copy explicit host files or directories into each VM before agent bootstrap. Copies refresh on restart, retain guest-only files, and use private owner-writable permissions. --no-agents still copies the configured files.

Stage sources in private directories before VM startup or disk replacement. Allow source links only within declared roots, use descriptor-relative reads, and reject staging recursion, special files, destination overlaps or symlinks, and live-mount overlaps.

Update configuration examples and the configuration, command, architecture, trust, and testing references.

Stacked on #513.

Validation: workspace tests (1,200 coop, 30 proxy, and eight proxy integration), format, clippy, taplo, and normal pre-commit hooks passed. Mutation testing caught all 14 viable mutants (four unviable, none missed). Full Firecracker integration passed: 504 passed, zero failed, ten skipped.

The exact-candidate Lima run recorded 494 passed, one failed, and 13 skipped: an existing onboarding restart timed out waiting for SSH authentication. The unchanged isolated onboarding fixture then passed all eight checks. All six guest-file checks passed in the full attempt, and the complete combined stack at #516 subsequently passed full Lima integration (510 passed, zero failed, 13 skipped), including onboarding and all guest-file checks. The failed attempt remains recorded; it is not counted as a full pass.

@ESultanik

ESultanik commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor Author

Merge/readiness checklist for this PR:

Stack order: #512 → #513 → #514 → #516. Each PR should ultimately merge into main, in that order; do not merge a follow-on PR into its current feature-branch base.

After a predecessor merges, retarget the next PR to main (verify the base even if GitHub updates it automatically). Integrate main with a merge commit if needed, resolve conflicts, and check that the final diff contains only that PR's intended change. Preserve published history: no force-push/rebase is needed. Refresh required CI and review; repeat validation affected by any changes to the tested tree.

Validation clarification: this PR's original full Lima run had one SSH failure during the existing stub-Claude image build; that phase passed on an isolated retry without code changes. All six guest-file assertions passed. The complete downstream stack at #516 commit 23cf11417bccfd4187c7b37ad0951ccc064d6f4b subsequently passed a clean full Lima run: 515 passed, zero failed, nine skipped, runner exit zero, including the marketplace phase. This is additional combined-stack evidence, not a replacement claim about this PR's original run. Workspace checks, scoped mutation testing, and Linux CI pass.

Use a clean checkout of this PR's final candidate and a Linux SSH host with working KVM/Firecracker access and the remote full-suite prerequisites. The full run needs the documented build/network tools and passwordless sudo. Run these suites serially on a shared host because they rebuild shared test images.

git rev-parse HEAD
./tests/run-integration.sh --full --remote user@host --name coop-pr-514

Replace user@host with the available test host. Confirm that guest-file copying, restart refresh, retained guest-only files, writable neighboring configuration, bootstrap ordering, and applicable mount protections execute and pass. Explain backend-specific skips.

Post the tested commit SHA, host architecture, runner exit status, pass/fail/skip counts, and a log link or attachment here. Inspect skipped phases; a zero exit alone is insufficient if relevant coverage was skipped. Linux CI does not substitute for Firecracker VM integration. A run of #516 alone provides combined-stack evidence, not proof that each earlier PR's exact candidate was tested.

@ESultanik
ESultanik added this pull request to stack #517 September 29, 2026 21:30
@ESultanik
ESultanik removed this pull request from stack #517 October 2, 2026 01:57
@ESultanik
ESultanik added this pull request to stack #534 October 2, 2026 01:57
@ESultanik
ESultanik marked this pull request as ready for review October 2, 2026 02:20
Base automatically changed from fix/issue-511 to main October 6, 2026 16:27
Comment thread tests/integration.sh
Comment thread scripts/guest/copy-files.sh Outdated
@hbrodin

hbrodin commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator

Review summary for db0f4c8: two inline findings, covering reprovision test coverage and a same-size/same-mtime rsync refresh edge case. No diff-noise finding.

I reviewed correctness, design, conventions, security, API usage, tests, docs, and code comments. I checked the pinned diff and post-change call paths, ran git diff --check, syntax-checked the changed shell scripts, and reproduced the rsync behavior with the actual guest copy script. There were no earlier review threads to carry forward.

Current-head CI checks passed. I did not run Lima or Firecracker VM integration. The linked Firecracker full run exercised earlier commit 7ef0a67; the PR describes a Lima run with one failure and a later clean combined-stack run. Neither is a full VM run of this exact head.

@ESultanik
ESultanik merged commit f7efdc2 into main Oct 6, 2026
10 checks passed
@ESultanik
ESultanik deleted the feat/guest-files branch October 6, 2026 21:11
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.

2 participants