Round 66: edebug-defun/all-defs/all-forms/eval-top-level/on-entry/cancel-on-entry, ert-run-tests/describe-test/results-timings/delete-all, buttercup-run-at-point, package-reinstall/recompile, flycheck-compile/explain-error/disable-checker/set-executable/copy-errors/buffer/clear

ober

a4b497c54edae61bc710db30e35dcfb5dd3b799d

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 5a2ad58..f031b4a 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -2578,6 +2578,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | all-the-icons-ibuffer-mode | :orange_circle: | Icons in ibuffer |
 | nerd-icons-dired-mode | :orange_circle: | Nerd font icons in dired |
 
+### Round 66 — Edebug, ERT, Flycheck & Package Tools
+
+| Feature | Status | Notes |
+|---|---|---|
+| edebug-defun | :orange_circle: | Instrument defun for debugging |
+| edebug-all-defs | :orange_circle: | Instrument all defs on eval |
+| edebug-all-forms | :orange_circle: | Instrument all forms on eval |
+| edebug-eval-top-level-form | :orange_circle: | Eval top-level form with edebug |
+| edebug-on-entry | :orange_circle: | Break on function entry |
+| edebug-cancel-on-entry | :orange_circle: | Cancel break on entry |
+| ert-run-tests-interactively | :orange_circle: | Run ERT tests interactively |
+| ert-describe-test | :orange_circle: | Describe ERT test |
+| ert-results-pop-to-timings | :orange_circle: | Show test timings |
+| ert-delete-all-tests | :orange_circle: | Delete all test definitions |
+| buttercup-run-at-point | :orange_circle: | Run Buttercup test at point |
+| package-reinstall | :orange_circle: | Reinstall a package |
+| package-recompile | :orange_circle: | Recompile a package |
+| flycheck-compile | :orange_circle: | Run checker as compilation |
+| flycheck-explain-error-at-point | :orange_circle: | Explain error at point |
+| flycheck-disable-checker | :orange_circle: | Disable a checker |
+| flycheck-set-checker-executable | :orange_circle: | Set checker executable path |
+| flycheck-copy-errors-as-kill | :orange_circle: | Copy errors to kill ring |
+| flycheck-buffer | :orange_circle: | Check current buffer |
+| flycheck-clear | :orange_circle: | Clear all errors |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index dbde78f..d798e84 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -11647,3 +11647,54 @@
     (if (mode-enabled? app 'nerd-icons-dired)
       (echo-message! echo "Nerd icons dired mode enabled")
       (echo-message! echo "Nerd icons dired mode disabled"))))
+
+;; Round 66 — Buttercup, package, Flycheck (batch 2)
+(def (cmd-buttercup-run-at-point app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Buttercup: running test at point")))
+
+(def (cmd-package-reinstall app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Reinstall package: "
+      (lambda (pkg)
+        (echo-message! echo (str "Package: reinstalling " pkg))))))
+
+(def (cmd-package-recompile app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Recompile package: "
+      (lambda (pkg)
+        (echo-message! echo (str "Package: recompiling " pkg))))))
+
+(def (cmd-flycheck-compile app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Flycheck: running checker as compilation")))
+
+(def (cmd-flycheck-explain-error-at-point app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Flycheck: explaining error at point")))
+
+(def (cmd-flycheck-disable-checker app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Disable checker: "
+      (lambda (checker)
+        (echo-message! echo (str "Flycheck: disabled checker '" checker "'"))))))
+
+(def (cmd-flycheck-set-checker-executable app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Checker: "
+      (lambda (checker)
+        (echo-read-string echo "Executable path: "
+          (lambda (path)
+            (echo-message! echo (str "Flycheck: set " checker " executable to " path))))))))
+
+(def (cmd-flycheck-copy-errors-as-kill app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Flycheck: copied errors to kill ring")))
+
+(def (cmd-flycheck-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Flycheck: checking current buffer")))
+
+(def (cmd-flycheck-clear app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Flycheck: cleared all errors")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 48484b7..2bafeaa 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -12176,3 +12176,58 @@
       (lambda (dir)
         (echo-message! echo (str "Neotree: opened " dir))))))
 
+;; Round 66 — Edebug, ERT, Flycheck (batch 1)
+(def (cmd-edebug-defun app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Edebug: instrumenting current defun")))
+
+(def (cmd-edebug-all-defs app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'edebug-all-defs)
+    (if (mode-enabled? app 'edebug-all-defs)
+      (echo-message! echo "Edebug: instrumenting all definitions on eval")
+      (echo-message! echo "Edebug: normal eval (no instrumentation)"))))
+
+(def (cmd-edebug-all-forms app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'edebug-all-forms)
+    (if (mode-enabled? app 'edebug-all-forms)
+      (echo-message! echo "Edebug: instrumenting all forms on eval")
+      (echo-message! echo "Edebug: normal form eval"))))
+
+(def (cmd-edebug-eval-top-level-form app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Edebug: evaluated top-level form")))
+
+(def (cmd-edebug-on-entry app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Edebug on entry to function: "
+      (lambda (fn)
+        (echo-message! echo (str "Edebug: will break on entry to " fn))))))
+
+(def (cmd-edebug-cancel-on-entry app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Cancel edebug on entry for: "
+      (lambda (fn)
+        (echo-message! echo (str "Edebug: cancelled break on entry to " fn))))))
+
+(def (cmd-ert-run-tests-interactively app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Run ERT tests matching: "
+      (lambda (pat)
+        (echo-message! echo (str "ERT: running tests matching '" pat "'"))))))
+
+(def (cmd-ert-describe-test app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Describe test: "
+      (lambda (test)
+        (echo-message! echo (str "ERT: describing test '" test "'"))))))
+
+(def (cmd-ert-results-pop-to-timings app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "ERT: showing test timings")))
+
+(def (cmd-ert-delete-all-tests app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "ERT: deleted all test definitions")))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 09b9f11..b1e29c9 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -2825,4 +2825,25 @@
   (register-command! 'all-the-icons-dired-mode cmd-all-the-icons-dired-mode)
   (register-command! 'all-the-icons-ibuffer-mode cmd-all-the-icons-ibuffer-mode)
   (register-command! 'nerd-icons-dired-mode cmd-nerd-icons-dired-mode)
+  ;; Round 66
+  (register-command! 'edebug-defun cmd-edebug-defun)
+  (register-command! 'edebug-all-defs cmd-edebug-all-defs)
+  (register-command! 'edebug-all-forms cmd-edebug-all-forms)
+  (register-command! 'edebug-eval-top-level-form cmd-edebug-eval-top-level-form)
+  (register-command! 'edebug-on-entry cmd-edebug-on-entry)
+  (register-command! 'edebug-cancel-on-entry cmd-edebug-cancel-on-entry)
+  (register-command! 'ert-run-tests-interactively cmd-ert-run-tests-interactively)
+  (register-command! 'ert-describe-test cmd-ert-describe-test)
+  (register-command! 'ert-results-pop-to-timings cmd-ert-results-pop-to-timings)
+  (register-command! 'ert-delete-all-tests cmd-ert-delete-all-tests)
+  (register-command! 'buttercup-run-at-point cmd-buttercup-run-at-point)
+  (register-command! 'package-reinstall cmd-package-reinstall)
+  (register-command! 'package-recompile cmd-package-recompile)
+  (register-command! 'flycheck-compile cmd-flycheck-compile)
+  (register-command! 'flycheck-explain-error-at-point cmd-flycheck-explain-error-at-point)
+  (register-command! 'flycheck-disable-checker cmd-flycheck-disable-checker)
+  (register-command! 'flycheck-set-checker-executable cmd-flycheck-set-checker-executable)
+  (register-command! 'flycheck-copy-errors-as-kill cmd-flycheck-copy-errors-as-kill)
+  (register-command! 'flycheck-buffer cmd-flycheck-buffer)
+  (register-command! 'flycheck-clear cmd-flycheck-clear)
 )