* fix(#2352): tilde-expand SUMMARY.md key-files paths before deleted-file filter compute_file_scope's "Filter deleted files" step tested the literal `~/...` value from SUMMARY.md key-files entries with `[ -f "$file" ]`, which bash never tilde-expands (only a literal `~` in source text expands, not one arriving as an already-expanded variable value). Real files recorded with a `~/...` path were silently misclassified as deleted and dropped from REVIEW_FILES, and a phase whose every recorded file used a tilde path hit the empty-scope skip as a false negative. Adds a tilde-normalization loop as step 1 of post-processing (all tiers), before the deleted-file filter, rewriting a leading `~/` to `${HOME}/...` so downstream existence checks, the empty-scope short-circuit, and the FILES_TO_READ/CONFIG_FILES construction all see a real, openable path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * chore(#2352): regenerate fixtures + lint gate-prep * chore(#2352): add Fixed changeset fragment (pr 2419) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -247,7 +247,19 @@ fi
|
||||
|
||||
**Post-processing (all tiers):**
|
||||
|
||||
1. **Apply exclusions (per D-03):** Remove paths matching planning artifacts
|
||||
1. **Expand tilde paths:** SUMMARY.md `key-files` entries may record a `~/...`-prefixed path (e.g. `~/.claude/gsd-core/workflows/verify-phase.md`). Bash only tilde-expands a literal `~` written in source text, never one arriving as the value of an already-expanded variable, so every later `[ -f "$file" ]` check must see a real, expanded path or it misclassifies the file as deleted.
|
||||
```bash
|
||||
EXPANDED_FILES=()
|
||||
for file in "${REVIEW_FILES[@]}"; do
|
||||
case "$file" in
|
||||
"~/"*) file="${HOME}${file#\~}" ;;
|
||||
esac
|
||||
EXPANDED_FILES+=("$file")
|
||||
done
|
||||
REVIEW_FILES=("${EXPANDED_FILES[@]}")
|
||||
```
|
||||
|
||||
2. **Apply exclusions (per D-03):** Remove paths matching planning artifacts
|
||||
```bash
|
||||
FILTERED_FILES=()
|
||||
for file in "${REVIEW_FILES[@]}"; do
|
||||
@@ -265,7 +277,7 @@ done
|
||||
REVIEW_FILES=("${FILTERED_FILES[@]}")
|
||||
```
|
||||
|
||||
2. **Filter deleted files:** Remove paths that don't exist on disk
|
||||
3. **Filter deleted files:** Remove paths that don't exist on disk
|
||||
```bash
|
||||
EXISTING_FILES=()
|
||||
DELETED_COUNT=0
|
||||
@@ -283,7 +295,7 @@ if [ $DELETED_COUNT -gt 0 ]; then
|
||||
fi
|
||||
```
|
||||
|
||||
3. **Deduplicate:** Remove duplicate paths (portable — bash 3.2+ compatible, handles spaces in paths)
|
||||
4. **Deduplicate:** Remove duplicate paths (portable — bash 3.2+ compatible, handles spaces in paths)
|
||||
```bash
|
||||
DEDUPED=()
|
||||
while IFS= read -r line; do
|
||||
@@ -292,7 +304,7 @@ done < <(printf '%s\n' "${REVIEW_FILES[@]}" | sort -u)
|
||||
REVIEW_FILES=("${DEDUPED[@]}")
|
||||
```
|
||||
|
||||
4. **Sort:** Alphabetical sort for reproducible agent input (already sorted by sort -u above)
|
||||
5. **Sort:** Alphabetical sort for reproducible agent input (already sorted by sort -u above)
|
||||
|
||||
**Log final scope and warn if large:**
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user