Skip to content

fix(#8484): pass --no-git-ignore to openshell sandbox upload - #8485

Merged
waynesun09 merged 1 commit into
mainfrom
agent/8484-upload-no-git-ignore
Oct 16, 2026
Merged

waynesun09 merged 1 commit into
mainfrom
agent/8484-upload-no-git-ignore

Conversation

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor

Summary

openshell sandbox upload now always gets --no-git-ignore. A failed output-schema upload now stops bootstrap with an error instead of logging a warning. Since OpenShell 0.1.3 (NVIDIA/OpenShell#3957), uploading a single file fails when the checkout's .gitignore matches it. The output schema is uploaded from .fullsend-cache/, which many checkouts ignore, fullsend's own included. On 0.1.2 that same upload only warned.

Related Issue

Blocks #8299 (OpenShell v0.1.4 bump).

Changes

  • internal/sandbox/sandbox.go: Upload passes --no-git-ignore before the positional args. fullsend always uploads one file it has already picked (UploadDir applies its own excludes and uploads a tarball), so OpenShell's Git filtering is never wanted here. The flag already exists on 0.1.2, so there is no version gate.
  • internal/cli/run.go: bootstrapEnv now returns creating .fullsend dir for output schema: ... or uploading output schema <path>: ... instead of printing a WARNING and running without FULLSEND_OUTPUT_SCHEMA. The "schema file not found on host" warning is unchanged.
  • Tests:
    • New TestUpload_PassesNoGitIgnore checks that both a regular-file Upload and UploadDir's tarball upload pass the flag.
    • New bootstrapEnv tests cover the upload-failure error, the mkdir-failure error, and the success path, where the schema env var is exported.
    • Test-fake openshell scripts in internal/sandbox and internal/runtime now read upload paths as $5/$6 instead of $4/$5, and the log assertions match the new argv.

Testing

  • go test ./internal/sandbox/ ./internal/runtime/ ./internal/cli/ pass, apart from failures that also happen on unmodified main in this sandbox: TestDialReachable_ClosedPort, TestBuildRunCommand_ClaudeMissingExits127 (a real claude is on PATH here), TestStartFetchService_* and TestPostScriptEnv_NoSchema*. The fetch, security and telemetry packages also fail here but are untouched by this change.
  • Lint: pre-commit could not fetch its hook repos (TLS error in the sandbox), so the hooks that apply to Go files were run directly and all passed: the pre-commit-hooks file checks, gofmt, go vet ./..., and lint-broken-symlinks. Secret scan passed.
  • Tests added/updated for new or modified logic. The new error returns and the success export are covered.

Checklist

  • PR title follows Conventional Commits
  • Commits are signed off (DCO): not applicable, this is an autonomous agent commit

🤖 Generated with Claude Code


Closes #8484

Post-script verification

  • Branch is not main/master (agent/8484-upload-no-git-ignore)
  • Secret scan passed (gitleaks — 4dea855322bc8cca6a277fac06642bfcd1cd093d..HEAD)
  • PR body secret scan passed (gitleaks — no-git)

OpenShell >= 0.1.3 (NVIDIA/OpenShell#3957) makes "sandbox upload" fail
when the source sits in a Git work tree and .gitignore filtering selects
no files; 0.1.2 only warned. The output schema is uploaded from
<fullsend-dir>/.fullsend-cache/..., which many checkouts (including
fullsend's own) ignore, so it would fail after the OpenShell bump.

- sandbox.Upload now passes --no-git-ignore before the positional args.
  fullsend always hands openshell one file it already chose (UploadDir
  applies its own excludes and uploads a tarball), so Git filtering at
  this layer is never wanted. The flag exists on 0.1.2, so no version
  gate.
- bootstrapEnv now returns an error when creating the .fullsend dir or
  uploading the output schema fails, instead of warning and continuing
  without FULLSEND_OUTPUT_SCHEMA. The "schema file not found on host"
  warning is unchanged.
- Tests: assert --no-git-ignore for Upload and UploadDir; cover the
  schema mkdir/upload error paths and the success export; shift
  test-fake openshell upload argv indexes ($4/$5 -> $5/$6).

Note: pre-commit could not fetch hook repos (TLS); applicable hooks
(pre-commit-hooks file checks, gofmt, go vet, broken symlinks) were run
directly and passed. Pre-existing env-dependent failures unrelated to
this change (network/claude-on-PATH tests) also fail on main.

Closes #8484

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@waynesun09

Copy link
Copy Markdown
Member

/fs-fix-stop

@github-actions github-actions Bot added the fullsend-no-fix Skip bot-triggered fix agent runs label Oct 16, 2026
@github-actions

Copy link
Copy Markdown

Fix agent disabled for this PR. Remove the fullsend-no-fix label or use /fs-fix to re-engage.

@fullsend-ai-review

fullsend-ai-review Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 1:08 PM UTC · Completed 1:15 PM UTC

Commit: 9d5b70c · View workflow run →

Runtime: pi · Model: sonnet → claude-sonnet-5-5 · Effort: high · Cost: $1.37

@waynesun09

Copy link
Copy Markdown
Member

Validation on OpenShell 0.1.4

I ran a real fullsend run locally on an OpenShell v0.1.4 gateway (podman) with the dummy runtime, so no inference was involved.

Fixture: a harness whose base: is fullsend-ai/agents@ce9e432 harness/triage.yaml. That puts validation_loop.schema at .fullsend/.fullsend-cache/resources/sha256/…/content.json, inside a checkout that uses fullsend's own .gitignore (git check-ignore → .gitignore:7:.fullsend-cache/).

fullsend run schema-check --fullsend-dir <repo>/.fullsend --target-repo <repo> \
  --no-post-script --keep-sandbox --fullsend-binary <linux/arm64 build>
# then, inside the kept sandbox:
. /sandbox/workspace/.env; fullsend-check-output output/agent-result.json

main 4b3766043: the run exits 0, but the schema never reaches the sandbox.

WARNING: could not upload output schema: upload to sandbox "fs-sch-c0a676a1da26" failed: Error:   × Git filtering selected no files for …/.fullsend/.fullsend-cache/resources/sha256/e4a0…/content.json; upload stopped.
  ✓ Validation passed: …           # host-side check only
# in sandbox:
FULLSEND_OUTPUT_SCHEMA=<unset>
FAIL: FULLSEND_OUTPUT_SCHEMA is not set
fullsend-check-output exit=1

This PR 9d5b70c2e: no upload warning, and the in-sandbox check passes.

  ✓ Validation passed: …
# in sandbox:
FULLSEND_OUTPUT_SCHEMA=/sandbox/workspace/.fullsend/output-schema.json
PASS: output validated against schema
fullsend-check-output exit=0

pre-commit run --from-ref origin/main is clean.

@fullsend-ai-review fullsend-ai-review Bot added the risk/moderate PR risk: moderate label Oct 16, 2026
@fullsend-ai-review

Copy link
Copy Markdown

Risk Assessment: moderate (2/5)

Details

Focused bug fix with high test coverage and no protected paths, elevated to moderate by high churn in modified runner files and behavioral change without a feature flag.

@fullsend-ai-review

Copy link
Copy Markdown

Review

Findings

Low

  • [error-handling] internal/cli/run.go:3687 — The new mkdir check only catches errors where openshell exec never started or timed out (exit 124). sandbox.ExecContext returns a nil error for any other nonzero exit, and the exit code is discarded here. A real mkdir -p failure therefore does not produce the intended "creating .fullsend dir" error. Bootstrap still fails closed. sandbox.UploadFile runs its own mkdir -p of the same directory and checks the exit code, so the failure comes back as uploading output schema .... The cost is a less specific error message and a redundant exec. This also matches the other Exec call sites in run.go. TestBootstrapEnv_SchemaMkdirFailureIsError removes openshell from PATH, so it covers only the failed-to-start path.
    Remediation: Optionally check the exit code and stderr from the mkdir Exec. Alternatively, drop the pre-mkdir and rely on UploadFile. A fake-openshell test where mkdir exits nonzero would cover the gap.

Comment thread internal/cli/run.go Resolved
@fullsend-ai-review fullsend-ai-review Bot added the ready-for-merge All reviewers approved — ready to merge label Oct 16, 2026
@codecov

codecov Bot commented Oct 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@waynesun09

Copy link
Copy Markdown
Member

@fullsend-ai/core this is ready for a human review: CI is green, all threads are resolved, and the 0.1.4 validation is above. It unblocks the OpenShell 0.1.4 bump (#8299).

@waynesun09 waynesun09 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Approved: fixes the 0.1.4 strict-upload break (#8484); validated locally on v0.1.4.

@waynesun09
waynesun09 added this pull request to the merge queue Oct 16, 2026
Merged via the queue into main with commit e177e42 Oct 16, 2026
83 of 84 checks passed
@waynesun09
waynesun09 deleted the agent/8484-upload-no-git-ignore branch October 16, 2026 15:05
waynesun09 added a commit that referenced this pull request Oct 16, 2026
…ks-integrity

Point TestInstallClaudeHooks_PinsInterpreter's upload stub at $5: #8485 put --no-git-ignore before the sandbox name, so the local path moved from $4 to $5.

Assisted-by: Claude
Signed-off-by: Wayne Sun <gsun@redhat.com>

This branch was previously deployed

1 inactive deployment
dev — 9d5b70c2 Deployed Oct 16, 2026 by fullsend-ai-coder[bot] via playback #16824
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fullsend-no-fix Skip bot-triggered fix agent runs ready-for-merge All reviewers approved — ready to merge ready-for-review Triggers review agent dispatch risk/moderate PR risk: moderate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Output-schema upload fails on OpenShell >= 0.1.3 when the checkout ignores .fullsend-cache/ (sandbox upload lacks --no-git-ignore)

1 participant