Step 1: Detect backed-up patches
Check for local patches directory:
bash
# Global install (path templated at install time) PATCHES_DIR=~/.claude/df-local-patches # Local install fallback if [ ! -d "$PATCHES_DIR" ]; then PATCHES_DIR=./.claude/df-local-patches fi
Read backup-meta.json from the patches directory.
If no patches found:
code
No local patches found. Nothing to reapply. Local patches are automatically saved when you run /df:update after modifying any DevFlow workflow, command, or agent files.
Exit.
Step 2: Show patch summary
code
## Local Patches to Reapply
**Backed up from:** v{from_version}
**Current version:** {read VERSION file}
**Files modified:** {count}
| # | File | Status |
|---|------|--------|
| 1 | {file_path} | Pending |
| 2 | {file_path} | Pending |
Step 3: Merge each file
For each file in backup-meta.json:
- •
Read the backed-up version (user's modified copy from
df-local-patches/) - •
Read the newly installed version (current file after update)
- •
Compare and merge:
- •If the new file is identical to the backed-up file: skip (modification was incorporated upstream)
- •If the new file differs: identify the user's modifications and apply them to the new version
Merge strategy:
- •Read both versions fully
- •Identify sections the user added or modified (look for additions, not just differences from path replacement)
- •Apply user's additions/modifications to the new version
- •If a section the user modified was also changed upstream: flag as conflict, show both versions, ask user which to keep
- •
Write merged result to the installed location
- •
Report status:
- •
Merged— user modifications applied cleanly - •
Skipped— modification already in upstream - •
Conflict— user chose resolution
- •
Step 4: Update manifest
After reapplying, regenerate the file manifest so future updates correctly detect these as user modifications:
bash
# The manifest will be regenerated on next /df:update # For now, just note which files were modified
Step 5: Cleanup option
Ask user:
- •"Keep patch backups for reference?" → preserve
df-local-patches/ - •"Clean up patch backups?" → remove
df-local-patches/directory
Step 6: Report
code
## Patches Reapplied
| # | File | Status |
|---|------|--------|
| 1 | {file_path} | ✓ Merged |
| 2 | {file_path} | ○ Skipped (already upstream) |
| 3 | {file_path} | ⚠ Conflict resolved |
{count} file(s) updated. Your local modifications are active again.
<success_criteria>
- • All backed-up patches processed
- • User modifications merged into new version
- • Conflicts resolved with user input
- • Status reported for each file </success_criteria>