@@ -7,7 +7,8 @@ ROOT="$(cd "$(dirname "$0")/.." && pwd)"
77MANIFEST=" $ROOT /scripts/payload-manifest.json"
88PAYLOAD_DIR=" $ROOT /skills/python-project-workflow"
99CI_MODE=false
10- declare -a MANIFEST_FILES MANIFEST_SCRIPTS
10+ MANIFEST_FILES=()
11+ MANIFEST_SCRIPTS=()
1112
1213[ " ${1:- } " = " --ci" ] && CI_MODE=true
1314
@@ -48,9 +49,10 @@ sys.stdout.write(value if isinstance(value, str) else "")
4849PY
4950}
5051
51- # Portable newline-delimited read (compatible with bash 3.2 on macOS)
52- while IFS= read -r item; do MANIFEST_FILES+=(" $item " ); done < <( manifest_entries files)
53- while IFS= read -r item; do MANIFEST_SCRIPTS+=(" $item " ); done < <( manifest_entries scripts)
52+ # Portable newline-delimited read (compatible with bash 3.2 on macOS).
53+ # The ;echo guarantees at least one line so arrays are never empty under set -u.
54+ while IFS= read -r item; do MANIFEST_FILES+=(" $item " ); done < <( manifest_entries files; echo)
55+ while IFS= read -r item; do MANIFEST_SCRIPTS+=(" $item " ); done < <( manifest_entries scripts; echo)
5456REF_MODE=" $( manifest_scalar references) "
5557
5658mode_matches () {
@@ -94,14 +96,17 @@ sync_file() {
9496
9597is_covered () {
9698 local rel=" $1 "
99+ local f s
97100 # Authored-in-place files (written directly in payload, not copied)
98101 case " $rel " in
99102 SKILL.md) return 0 ;;
100103 esac
101104 for f in " ${MANIFEST_FILES[@]} " ; do
105+ [ -z " $f " ] && continue
102106 [ " $rel " = " $f " ] && return 0
103107 done
104108 for s in " ${MANIFEST_SCRIPTS[@]} " ; do
109+ [ -z " $s " ] && continue
105110 [ " $rel " = " scripts/$s " ] && return 0
106111 done
107112 if [ " $REF_MODE " = " *" ]; then
@@ -114,13 +119,15 @@ is_covered() {
114119
115120# Files
116121for f in " ${MANIFEST_FILES[@]} " ; do
122+ [ -z " $f " ] && continue
117123 source=" $ROOT /$f "
118124 target=" $PAYLOAD_DIR /$f "
119125 sync_file " $source " " $target " " $f "
120126done
121127
122128# Scripts
123129for s in " ${MANIFEST_SCRIPTS[@]} " ; do
130+ [ -z " $s " ] && continue
124131 source=" $ROOT /scripts/$s "
125132 target=" $PAYLOAD_DIR /scripts/$s "
126133 mode=644
0 commit comments