Overlay: manifest-as-intent before copy, two-pass validated uninstall

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QKxGW1raAWaqeU8WdHsMsp
This commit is contained in:
2026-08-24 19:11:34 -04:00
co-authored by Claude Fable 5
parent 88b933d2bc
commit 1ef2743f9e
+9 -3
View File
@@ -37,12 +37,17 @@ uninstall() {
exit 1 exit 1
fi fi
# Validate every entry before deleting anything
while IFS= read -r rel; do while IFS= read -r rel; do
[[ $rel == source=* || $rel == dest=* ]] && continue [[ $rel == source=* || $rel == dest=* ]] && continue
if ! valid_entry "$rel"; then if ! valid_entry "$rel"; then
echo "Refusing suspicious manifest entry: $rel" >&2 echo "Refusing suspicious manifest entry: $rel (nothing deleted)" >&2
exit 1 exit 1
fi fi
done < "$MANIFEST"
while IFS= read -r rel; do
[[ $rel == source=* || $rel == dest=* ]] && continue
if [[ $rel == "cn" ]]; then if [[ $rel == "cn" ]]; then
run_in "$dest" rm -rf "$dest/cn" run_in "$dest" rm -rf "$dest/cn"
else else
@@ -84,20 +89,21 @@ install() {
entries+=("$rel") entries+=("$rel")
done done
# Manifest is the intent record, published BEFORE copying: if a copy fails
# midway, a rerun sees the manifest, uninstalls the partial state, retries.
mkdir -p "${MANIFEST%/*}" mkdir -p "${MANIFEST%/*}"
{ {
echo "source=$SRC" echo "source=$SRC"
echo "dest=$DEST" echo "dest=$DEST"
echo "cn" echo "cn"
printf '%s\n' "${entries[@]}" printf '%s\n' "${entries[@]}"
} > "$MANIFEST.tmp" } > "$MANIFEST"
run_in "$DEST" cp -r "$SRC/cn" "$DEST/cn" run_in "$DEST" cp -r "$SRC/cn" "$DEST/cn"
for rel in "${entries[@]}"; do for rel in "${entries[@]}"; do
run_in "$DEST" cp "$SRC/$rel" "$DEST/$rel" run_in "$DEST" cp "$SRC/$rel" "$DEST/$rel"
done done
mv "$MANIFEST.tmp" "$MANIFEST"
echo "OmarchyCN overlay installed into $DEST (${#entries[@]} commands)" echo "OmarchyCN overlay installed into $DEST (${#entries[@]} commands)"
echo "Verify: omarchy cn version" echo "Verify: omarchy cn version"
} }