93 lines
3 KiB
Markdown
93 lines
3 KiB
Markdown
---
|
|
phase: quick
|
|
plan: 260410-d4u
|
|
type: execute
|
|
wave: 1
|
|
depends_on: []
|
|
files_modified: [claudebox.sh]
|
|
autonomous: true
|
|
must_haves:
|
|
truths:
|
|
- "claudebox launches successfully on non-NixOS Linux hosts where /etc/static does not exist"
|
|
- "claudebox still mounts /etc/static on NixOS hosts where it does exist"
|
|
- "dry-run output reflects the conditional mount accurately"
|
|
artifacts:
|
|
- path: "claudebox.sh"
|
|
provides: "Conditional /etc/static mount"
|
|
contains: "etc/static"
|
|
---
|
|
|
|
<objective>
|
|
Fix bwrap failure on non-NixOS hosts caused by unconditional `--ro-bind /etc/static /etc/static`.
|
|
|
|
Purpose: `/etc/static` is NixOS-specific. On Ubuntu, Fedora, Arch, etc. this path does not exist and bwrap exits with an error, making claudebox unusable on non-NixOS Linux.
|
|
|
|
Output: claudebox.sh conditionally includes the /etc/static mount only when the path exists.
|
|
</objective>
|
|
|
|
<execution_context>
|
|
@$HOME/.claude/get-shit-done/workflows/execute-plan.md
|
|
@$HOME/.claude/get-shit-done/templates/summary.md
|
|
</execution_context>
|
|
|
|
<context>
|
|
@claudebox.sh
|
|
</context>
|
|
|
|
<tasks>
|
|
|
|
<task type="auto">
|
|
<name>Task 1: Conditionally mount /etc/static only when it exists</name>
|
|
<files>claudebox.sh</files>
|
|
<action>
|
|
Build a `CONDITIONAL_MOUNTS` array before the dry-run block (around line 284, after SANDBOX_CMD is set). Populate it conditionally:
|
|
|
|
```bash
|
|
# Conditional mounts for NixOS-specific paths
|
|
CONDITIONAL_MOUNTS=()
|
|
if [[ -d /etc/static ]]; then
|
|
CONDITIONAL_MOUNTS+=(--ro-bind /etc/static /etc/static)
|
|
fi
|
|
```
|
|
|
|
Then splice `"${CONDITIONAL_MOUNTS[@]}"` into both:
|
|
|
|
1. **Dry-run output (line ~309):** Replace the hardcoded `echo " --ro-bind /etc/static /etc/static \\"` with a loop over CONDITIONAL_MOUNTS that prints them in the same format:
|
|
```bash
|
|
local cm_i=0
|
|
while (( cm_i < ${#CONDITIONAL_MOUNTS[@]} )); do
|
|
echo " ${CONDITIONAL_MOUNTS[$cm_i]} ${CONDITIONAL_MOUNTS[$((cm_i+1))]} ${CONDITIONAL_MOUNTS[$((cm_i+2))]} \\"
|
|
(( cm_i += 3 ))
|
|
done
|
|
```
|
|
|
|
2. **exec bwrap (line ~339):** Replace `--ro-bind /etc/static /etc/static \` with `"${CONDITIONAL_MOUNTS[@]}" \` in the exec call.
|
|
|
|
This keeps the pattern simple -- one array, two splice points. No other mounts are affected.
|
|
</action>
|
|
<verify>
|
|
<automated>bash -n claudebox.sh && echo "syntax ok"</automated>
|
|
</verify>
|
|
<done>
|
|
- `bash -n claudebox.sh` passes (no syntax errors)
|
|
- /etc/static mount is conditional on directory existence
|
|
- Both dry-run and exec paths use the same CONDITIONAL_MOUNTS array
|
|
- No other mounts are changed
|
|
</done>
|
|
</task>
|
|
|
|
</tasks>
|
|
|
|
<verification>
|
|
- `bash -n claudebox.sh` passes
|
|
- On NixOS: `claudebox --dry-run` output includes `--ro-bind /etc/static /etc/static`
|
|
- On non-NixOS: `claudebox --dry-run` output omits the /etc/static line entirely
|
|
</verification>
|
|
|
|
<success_criteria>
|
|
claudebox.sh no longer fails on hosts without /etc/static, while preserving the mount on NixOS.
|
|
</success_criteria>
|
|
|
|
<output>
|
|
After completion, create `.planning/quick/260410-d4u-on-non-nixos-hosts-bwrap-fails-because-e/260410-d4u-SUMMARY.md`
|
|
</output>
|