jj: note push tracking limits and stale divergent copies
Assisted-by: Claude Opus 5.5 via Claude Code
change trnunkxqrkuvtkpsrvwouykyynsomwuq
commit 65a962f4851aadc01124873306fc50fedf0ca96a
author Alpha Chen <alpha@kejadlen.dev>
date
parent tyxurynl
diff --git a/ai/skills/jj/SKILL.md b/ai/skills/jj/SKILL.md
index ad723f2c..ab6d7b23 100644
--- a/ai/skills/jj/SKILL.md
+++ b/ai/skills/jj/SKILL.md
@@ -211,7 +211,9 @@ There is no `--allow-new` on 0.45 — reaching for it is a git habit. 0.45
 auto-tracks on `-b` instead ("If a bookmark isn't tracking anything yet, the
 remote bookmark will be tracked automatically"); older versions refused with
 "Refusing to create new remote bookmark", which is the error `--allow-new`
-looks like it would fix.
+looks like it would fix. The auto-track covers only a bookmark that tracks
+nothing: on 0.46, `-b main --remote <new>` still refuses when `main` already
+tracks another remote, so run `jj bookmark track main@<new>` first.
 
 `-c` derives the name from the change ID (`push-<short-change-id>`).
 `jj git push --dry-run` exists and is cheap; `jj absorb --dry-run` does not.
diff --git a/ai/skills/resolve-conflicts/SKILL.md b/ai/skills/resolve-conflicts/SKILL.md
index 38d696d6..e680396a 100644
--- a/ai/skills/resolve-conflicts/SKILL.md
+++ b/ai/skills/resolve-conflicts/SKILL.md
@@ -52,6 +52,24 @@ not sweep. Confirm `jj bookmark list` first: abandoning drops a bookmark
 pointing at the commit, and a later bare `jj git push` then tries to delete
 that branch on the remote.
 
+**Conflicted `(divergent)` commits may be a stale copy of a branch another
+machine already fixed.** When the other machine rebases and pushes a branch,
+`jj git fetch` brings in its clean commits. The local auto-rebase then
+rewrites the old local copies too, so every change exists twice: `/0` is the
+local copy and conflicted, `/1` came from the remote and is clean. The
+bookmark goes conflicted as well. Diff each pair. If the only difference is
+conflict markers, there is nothing to merge:
+
+```
+jj diff --from <change>/1 --to <change>/0 --stat   # markers only = stale copy
+jj bookmark set <bookmark> -r <bookmark>@origin    # take the remote tip
+jj rebase -s mm -o <other-parent> -o <bookmark>    # repoint the megamerge
+jj abandon <commit ids of the /0 copies>           # commit IDs: change IDs are ambiguous
+```
+
+Collect the `/0` commit IDs up front with `jj log --no-graph -r
+'trunk()..<tip>/0' -T 'commit_id.short() ++ "\n"'`.
+
 ## Step 1 — Pick the revision and the mechanism
 
 If `$ARGUMENTS` contains a change ID, use it as the conflicted revision.