- Replace --bind ~/.claudebox + --symlink with direct --bind ~/.claude ~/.claude - Add compute_canonical_root() function using git rev-parse --git-common-dir - Add per-project INSTANCE_DIR via sha256sum[:16] of canonical git root - Overlay projects/ with per-project hash dir for isolated conversation history - Overlay history.jsonl and SANDBOX.md as file-level bind mounts - Update credential mount target from ~/.claudebox to ~/.claude - Add CLAUDE_JSON_FILE (~/.claude.json) detection and conditional bind mount - Remove stale CLAUDE.md injection logic (D-06: user's real CLAUDE.md used) - Update dry-run block and print_audit to reflect new mount layout - Update SANDBOX.md heredoc to remove ~/.claudebox reference
4.8 KiB
4.8 KiB
| phase | verified | status | score | overrides_applied |
|---|---|---|---|---|
| 03-sandbox-aware-prompting | 2026-04-09T21:30:00Z | passed | 4/4 | 0 |
Phase 3: Sandbox-Aware Prompting Verification Report
Phase Goal: Claude inside the sandbox knows it is sandboxed, how to install tools, and what is unavailable Verified: 2026-04-09T21:30:00Z Status: passed Re-verification: No -- initial verification
Goal Achievement
Observable Truths
| # | Truth | Status | Evidence |
|---|---|---|---|
| 1 | Claude inside the sandbox sees SANDBOX.md content describing its environment | VERIFIED | SANDBOX.md heredoc in claudebox.sh (lines 107-143) contains all 4 sections: Sandbox Environment, Installing Tools, Default Restrictions, Git. Bind mount at line 345 maps ~/.claudebox to ~/.claude inside sandbox. |
| 2 | CLAUDE.md in ~/.claudebox/ exists after first launch with @SANDBOX.md import on line 1 | VERIFIED | Lines 146-153: creates file with @SANDBOX.md if missing, prepends if first line differs. Behavioral test confirmed: first-run creates CLAUDE.md with exactly @SANDBOX.md. |
| 3 | SANDBOX.md is overwritten on every launch with current content | VERIFIED | cat > (line 107) unconditionally writes the file on every invocation. No conditional guard -- always overwrites. |
| 4 | Existing user content in CLAUDE.md is preserved when import line is prepended | VERIFIED | Lines 150-152: mktemp + printf + cat + mv pattern preserves existing content. Behavioral test confirmed: user content "# My custom stuff" preserved on line 2 after prepend. |
Score: 4/4 truths verified
Required Artifacts
| Artifact | Expected | Status | Details |
|---|---|---|---|
claudebox.sh |
SANDBOX.md generation and CLAUDE.md import check | VERIFIED | Lines 104-153 contain the full implementation with section comment, heredoc, and import management |
~/.claudebox/SANDBOX.md |
Sandbox context for Claude Code | VERIFIED | Generated at runtime; confirmed via dry-run. Contains "bubblewrap" (line 110) |
~/.claudebox/CLAUDE.md |
User-owned CLAUDE.md with managed import | VERIFIED | Generated at runtime; confirmed via dry-run. Contains "@SANDBOX.md" on line 1 |
Key Link Verification
| From | To | Via | Status | Details |
|---|---|---|---|---|
| claudebox.sh | ~/.claudebox/SANDBOX.md | heredoc write on every launch | WIRED | cat > "$HOME/.claudebox/SANDBOX.md" << 'SANDBOXEOF' at line 107 |
| ~/.claudebox/CLAUDE.md | ~/.claudebox/SANDBOX.md | @SANDBOX.md import on line 1 | WIRED | printf '%s\n' "@SANDBOX.md" at lines 148/151 |
| bwrap --bind ~/.claudebox ~/.claude | Claude Code session | bind mount | WIRED | --bind "$HOME/.claudebox" "$HOME/.claude" at line 345 (exec) and line 316 (dry-run) |
Data-Flow Trace (Level 4)
Not applicable -- this phase generates static configuration files, not dynamic data rendering.
Behavioral Spot-Checks
| Behavior | Command | Result | Status |
|---|---|---|---|
| First-run creates SANDBOX.md | rm -f ~/.claudebox/SANDBOX.md && nix run . -- --dry-run --yes; head -1 ~/.claudebox/SANDBOX.md |
# Sandbox Environment |
PASS |
| First-run creates CLAUDE.md | rm -f ~/.claudebox/CLAUDE.md && nix run . -- --dry-run --yes; cat ~/.claudebox/CLAUDE.md |
@SANDBOX.md |
PASS |
| Idempotency (no duplicate import) | nix run . -- --dry-run --yes; grep -c '@SANDBOX.md' ~/.claudebox/CLAUDE.md |
1 |
PASS |
| Prepend preserves user content | Write user content, run dry-run, check lines 1-2 | line 1: @SANDBOX.md, line 2: # My custom stuff |
PASS |
| SANDBOX.md has 3 H2 sections | grep -c '^## ' ~/.claudebox/SANDBOX.md |
3 |
PASS |
Requirements Coverage
| Requirement | Source Plan | Description | Status | Evidence |
|---|---|---|---|---|
| AWARE-01 | 03-01-PLAN | Default CLAUDE.md created in ~/.claudebox/ on first run if not present | SATISFIED | Lines 146-148: creates file with @SANDBOX.md if not present. Behavioral test confirmed. |
| AWARE-02 | 03-01-PLAN | Injected CLAUDE.md tells Claude about sandbox, comma/nix, and unavailable resources | SATISFIED | SANDBOX.md heredoc (lines 108-142) covers all three topics: bwrap sandbox identity, comma + nix shell installation, SSH/GPG/cloud restriction list. CLAUDE.md imports it via @SANDBOX.md. |
Anti-Patterns Found
| File | Line | Pattern | Severity | Impact |
|---|---|---|---|---|
| (none) | - | - | - | No TODOs, FIXMEs, placeholders, or stubs found |
Human Verification Required
No human verification items identified. All behaviors verified programmatically via dry-run execution.
Gaps Summary
No gaps found. All 4 must-have truths verified, all 3 artifacts confirmed, all 3 key links wired, both requirements (AWARE-01, AWARE-02) satisfied. Behavioral spot-checks all pass.
Verified: 2026-04-09T21:30:00Z Verifier: Claude (gsd-verifier)