Round 63: magit-worktree-checkout/create/delete/status, magit-submodule-add/update/sync/remove, magit-notes-edit/remove, magit-cherry/cherry-apply, magit-reflog/reflog-head/reflog-other, magit-patch-create/apply, magit-bundle-create, magit-remote-prune

ober

ae3fb842628808ae387c7fa99659f8ba59ee8167

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index a690053..3c540cf 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -2505,6 +2505,30 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | org-agenda-follow-mode | :orange_circle: | Toggle follow mode |
 | org-agenda-columns | :orange_circle: | Toggle column view |
 
+### Round 63 — Magit: Worktrees, Submodules, Notes & Patches
+
+| Feature | Status | Notes |
+|---|---|---|
+| magit-worktree-checkout | :orange_circle: | Checkout branch in worktree |
+| magit-worktree-create | :orange_circle: | Create new worktree |
+| magit-worktree-delete | :orange_circle: | Delete worktree |
+| magit-worktree-status | :orange_circle: | Show worktree status |
+| magit-submodule-add | :orange_circle: | Add git submodule |
+| magit-submodule-update | :orange_circle: | Update submodules |
+| magit-submodule-sync | :orange_circle: | Sync submodule URLs |
+| magit-submodule-remove | :orange_circle: | Remove submodule |
+| magit-notes-edit | :orange_circle: | Edit git note on commit |
+| magit-notes-remove | :orange_circle: | Remove git note |
+| magit-cherry | :orange_circle: | Show cherry commits |
+| magit-cherry-apply | :orange_circle: | Apply cherry commit |
+| magit-reflog | :orange_circle: | Show reflog for ref |
+| magit-reflog-head | :orange_circle: | Show HEAD reflog |
+| magit-reflog-other | :orange_circle: | Show reflog for other ref |
+| magit-patch-create | :orange_circle: | Create patch from range |
+| magit-patch-apply | :orange_circle: | Apply patch file |
+| magit-bundle-create | :orange_circle: | Create git bundle |
+| magit-remote-prune | :orange_circle: | Prune stale remote branches |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 72c3db7..935fec0 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -11491,3 +11491,56 @@
     (if (mode-enabled? app 'org-agenda-columns)
       (echo-message! echo "Org agenda: column view enabled")
       (echo-message! echo "Org agenda: column view disabled"))))
+
+;; Round 63 — Magit cherry, reflog, patch (batch 2)
+(def (cmd-magit-cherry app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Cherry upstream: "
+      (lambda (upstream)
+        (echo-message! echo (str "Magit: showing cherry commits against " upstream))))))
+
+(def (cmd-magit-cherry-apply app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Cherry-apply commit: "
+      (lambda (rev)
+        (echo-message! echo (str "Magit: applied commit " rev))))))
+
+(def (cmd-magit-reflog app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Reflog for ref: "
+      (lambda (ref)
+        (echo-message! echo (str "Magit: showing reflog for " ref))))))
+
+(def (cmd-magit-reflog-head app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Magit: showing HEAD reflog")))
+
+(def (cmd-magit-reflog-other app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Show reflog for: "
+      (lambda (ref)
+        (echo-message! echo (str "Magit: showing reflog for " ref))))))
+
+(def (cmd-magit-patch-create app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Create patch from range: "
+      (lambda (range)
+        (echo-message! echo (str "Magit: created patch from " range))))))
+
+(def (cmd-magit-patch-apply app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Apply patch file: "
+      (lambda (file)
+        (echo-message! echo (str "Magit: applied patch " file))))))
+
+(def (cmd-magit-bundle-create app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Bundle output file: "
+      (lambda (file)
+        (echo-message! echo (str "Magit: created bundle " file))))))
+
+(def (cmd-magit-remote-prune app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Prune remote: "
+      (lambda (remote)
+        (echo-message! echo (str "Magit: pruned stale branches from " remote))))))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index bb1966d..5e6b0ad 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -12003,3 +12003,64 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Org agenda: restriction lock removed")))
 
+;; Round 63 — Magit worktree, submodule, notes (batch 1)
+(def (cmd-magit-worktree-checkout app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Checkout worktree branch: "
+      (lambda (branch)
+        (echo-read-string echo "Worktree path: "
+          (lambda (path)
+            (echo-message! echo (str "Magit: checked out worktree " branch " at " path))))))))
+
+(def (cmd-magit-worktree-create app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "New worktree path: "
+      (lambda (path)
+        (echo-read-string echo "Branch name: "
+          (lambda (branch)
+            (echo-message! echo (str "Magit: created worktree " branch " at " path))))))))
+
+(def (cmd-magit-worktree-delete app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Delete worktree: "
+      (lambda (path)
+        (echo-message! echo (str "Magit: deleted worktree at " path))))))
+
+(def (cmd-magit-worktree-status app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Magit: showing worktree status")))
+
+(def (cmd-magit-submodule-add app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Submodule URL: "
+      (lambda (url)
+        (echo-read-string echo "Submodule path: "
+          (lambda (path)
+            (echo-message! echo (str "Magit: added submodule " url " at " path))))))))
+
+(def (cmd-magit-submodule-update app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Magit: updating submodules")))
+
+(def (cmd-magit-submodule-sync app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Magit: syncing submodule URLs")))
+
+(def (cmd-magit-submodule-remove app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Remove submodule: "
+      (lambda (sub)
+        (echo-message! echo (str "Magit: removed submodule '" sub "'"))))))
+
+(def (cmd-magit-notes-edit app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Edit note for commit: "
+      (lambda (rev)
+        (echo-message! echo (str "Magit: editing note for " rev))))))
+
+(def (cmd-magit-notes-remove app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Remove note from commit: "
+      (lambda (rev)
+        (echo-message! echo (str "Magit: removed note from " rev))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 66d64fd..8060524 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -2764,4 +2764,24 @@
   (register-command! 'org-agenda-entry-text-mode cmd-org-agenda-entry-text-mode)
   (register-command! 'org-agenda-follow-mode cmd-org-agenda-follow-mode)
   (register-command! 'org-agenda-columns cmd-org-agenda-columns)
+  ;; Round 63
+  (register-command! 'magit-worktree-checkout cmd-magit-worktree-checkout)
+  (register-command! 'magit-worktree-create cmd-magit-worktree-create)
+  (register-command! 'magit-worktree-delete cmd-magit-worktree-delete)
+  (register-command! 'magit-worktree-status cmd-magit-worktree-status)
+  (register-command! 'magit-submodule-add cmd-magit-submodule-add)
+  (register-command! 'magit-submodule-update cmd-magit-submodule-update)
+  (register-command! 'magit-submodule-sync cmd-magit-submodule-sync)
+  (register-command! 'magit-submodule-remove cmd-magit-submodule-remove)
+  (register-command! 'magit-notes-edit cmd-magit-notes-edit)
+  (register-command! 'magit-notes-remove cmd-magit-notes-remove)
+  (register-command! 'magit-cherry cmd-magit-cherry)
+  (register-command! 'magit-cherry-apply cmd-magit-cherry-apply)
+  (register-command! 'magit-reflog cmd-magit-reflog)
+  (register-command! 'magit-reflog-head cmd-magit-reflog-head)
+  (register-command! 'magit-reflog-other cmd-magit-reflog-other)
+  (register-command! 'magit-patch-create cmd-magit-patch-create)
+  (register-command! 'magit-patch-apply cmd-magit-patch-apply)
+  (register-command! 'magit-bundle-create cmd-magit-bundle-create)
+  (register-command! 'magit-remote-prune cmd-magit-remote-prune)
 )