resolve-conflicts: cover symlink type conflicts in place
Assisted-by: Claude Opus 5 via pi
change trynpnyxvnplnxrpnylksynyyokoonux
commit 5598e3266ffb42bc081f2c7b60c07c11b32d6b49
author Alpha Chen <alpha@kejadlen.dev>
date
parent kxxyrszy
diff --git a/ai/skills/resolve-conflicts/SKILL.md b/ai/skills/resolve-conflicts/SKILL.md
index 8eebd664..c88952e1 100644
--- a/ai/skills/resolve-conflicts/SKILL.md
+++ b/ai/skills/resolve-conflicts/SKILL.md
@@ -76,6 +76,14 @@ Read the sides off the materialized markers first (`jj file show -r <rev>
 <path>`) to learn which number is which: the `+++++++ <change-id>` labelled
 `(rebased revision)` is your own commit's side.
 
+**No merge tool takes a type conflict**, `:ours` and `:theirs` included — a
+side that adds a symlink fails with "Only conflicts that involve normal files
+(not symlinks, etc.) are supported." Recreate the winning side in the working
+copy per step 3, then land it in the conflicted ancestor with `jj squash --into
+<rev> <path>`; the fileset keeps unrelated working-copy edits out, and jj
+rebases the descendants and reports `Existing conflicts were resolved or
+abandoned from N commits`.
+
 For a file needing real merge judgment, resolve it as a temp file and hand
 that to `cp` as a merge tool — the same in-place rewrite, but with content
 you wrote:
@@ -187,6 +195,11 @@ intent from `jj diff --git -r <side> <path>` instead, where the mode change
 winning side by hand — `rm <path> && ln -s <target> <path>`. The Edit tool
 cannot write a symlink.
 
+On the conflicted revision that diff prints the `Conflict:` description rather
+than a mode change, so the symlink target isn't in it. Get the target from the
+pre-rebase commit — `jj evolog -r <rev>` names it, and `jj diff --git -r
+<old-commit-id> <path>` on that hidden commit shows the real change.
+
 For each text file still listed by `jj resolve --list -r @-`:
 
 1. Read the file to see its conflict markers. jj's format differs from