Round 581-590: FEM, computational geometry, information theory, lambda calculus, proof search, SAT solvers, model checking, abstract interpretation, program analysis, effects (200 commands)

ober

9875bf7535cbba6382034eab326b0afde66ca02e

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 21f7676..816cb3b 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4808,6 +4808,156 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | `cosmwasm-schema` | :orange_circle: Scaffolded | CosmWasm: schema |
 | `cosmwasm-optimize` | :orange_circle: Scaffolded | CosmWasm: optimize |
 
+### Round 581 — Finite Element Methods
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `fem-mesh` | :orange_circle: Scaffold | Generate mesh |
+| `fem-solve` | :orange_circle: Scaffold | Solve system |
+| `fem-refine` | :orange_circle: Scaffold | Refine mesh |
+| `fem-boundary` | :orange_circle: Scaffold | Boundary conditions |
+| `fem-assemble` | :orange_circle: Scaffold | Assemble stiffness |
+| `fem-plot` | :orange_circle: Scaffold | Plot results |
+| `fem-error` | :orange_circle: Scaffold | Error estimate |
+| `fem-adaptive` | :orange_circle: Scaffold | Adaptive refine |
+| `fem-export` | :orange_circle: Scaffold | Export mesh |
+| `fem-postprocess` | :orange_circle: Scaffold | Post-process |
+
+### Round 582 — Computational Geometry
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `convex-hull` | :orange_circle: Scaffold | Convex hull |
+| `voronoi-diagram` | :orange_circle: Scaffold | Voronoi diagram |
+| `delaunay-triangulate` | :orange_circle: Scaffold | Delaunay triangulation |
+| `polygon-clip` | :orange_circle: Scaffold | Polygon clipping |
+| `polygon-offset` | :orange_circle: Scaffold | Polygon offset |
+| `line-intersect` | :orange_circle: Scaffold | Line intersection |
+| `point-in-polygon` | :orange_circle: Scaffold | Point in polygon |
+| `polygon-area` | :orange_circle: Scaffold | Polygon area |
+| `polygon-centroid` | :orange_circle: Scaffold | Centroid |
+| `boolean-union` | :orange_circle: Scaffold | Boolean union |
+
+### Round 583 — Information Theory
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `entropy-compute` | :orange_circle: Scaffold | Compute entropy |
+| `mutual-info` | :orange_circle: Scaffold | Mutual information |
+| `kl-divergence` | :orange_circle: Scaffold | KL divergence |
+| `huffman-encode` | :orange_circle: Scaffold | Huffman encoding |
+| `arithmetic-encode` | :orange_circle: Scaffold | Arithmetic coding |
+| `lzw-compress` | :orange_circle: Scaffold | LZW compression |
+| `reed-solomon` | :orange_circle: Scaffold | Reed-Solomon |
+| `hamming-encode` | :orange_circle: Scaffold | Hamming code |
+| `channel-capacity` | :orange_circle: Scaffold | Channel capacity |
+| `source-code-theory` | :orange_circle: Scaffold | Source coding |
+
+### Round 584 — Lambda Calculus
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `lambda-reduce` | :orange_circle: Scaffold | Beta reduction |
+| `lambda-substitute` | :orange_circle: Scaffold | Substitution |
+| `lambda-church` | :orange_circle: Scaffold | Church numerals |
+| `lambda-scott` | :orange_circle: Scaffold | Scott encoding |
+| `lambda-cps` | :orange_circle: Scaffold | CPS transform |
+| `lambda-debruijn` | :orange_circle: Scaffold | De Bruijn indices |
+| `lambda-normalize` | :orange_circle: Scaffold | Normalize |
+| `lambda-abstract` | :orange_circle: Scaffold | Abstract |
+| `lambda-apply` | :orange_circle: Scaffold | Apply |
+| `lambda-eta` | :orange_circle: Scaffold | Eta reduction |
+
+### Round 585 — Proof Search (Tactics)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `proof-intro` | :orange_circle: Scaffold | Introduction |
+| `proof-apply` | :orange_circle: Scaffold | Apply lemma |
+| `proof-rewrite` | :orange_circle: Scaffold | Rewrite |
+| `proof-induction` | :orange_circle: Scaffold | Induction |
+| `proof-destruct` | :orange_circle: Scaffold | Destruct |
+| `proof-auto` | :orange_circle: Scaffold | Auto tactic |
+| `proof-split` | :orange_circle: Scaffold | Split goal |
+| `proof-exists` | :orange_circle: Scaffold | Exists witness |
+| `proof-absurd` | :orange_circle: Scaffold | Absurd |
+| `proof-unfold` | :orange_circle: Scaffold | Unfold definition |
+
+### Round 586 — SAT Solvers (DPLL, CDCL)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `sat-solve` | :orange_circle: Scaffold | Solve formula |
+| `sat-add-clause` | :orange_circle: Scaffold | Add clause |
+| `sat-unit-propagate` | :orange_circle: Scaffold | Unit propagation |
+| `sat-decide` | :orange_circle: Scaffold | Decide variable |
+| `sat-backjump` | :orange_circle: Scaffold | Backjump |
+| `sat-learn` | :orange_circle: Scaffold | Learn clause |
+| `sat-restart` | :orange_circle: Scaffold | Restart |
+| `sat-simplify` | :orange_circle: Scaffold | Simplify |
+| `sat-certify` | :orange_circle: Scaffold | Certify UNSAT |
+| `sat-incremental` | :orange_circle: Scaffold | Incremental solve |
+
+### Round 587 — Model Checking (LTL, CTL)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `modelcheck-ltl` | :orange_circle: Scaffold | LTL formula |
+| `modelcheck-ctl` | :orange_circle: Scaffold | CTL formula |
+| `modelcheck-buchi` | :orange_circle: Scaffold | Buchi automaton |
+| `modelcheck-fairness` | :orange_circle: Scaffold | Fairness |
+| `modelcheck-counterexample` | :orange_circle: Scaffold | Counterexample |
+| `modelcheck-abstract` | :orange_circle: Scaffold | Abstract |
+| `modelcheck-refine` | :orange_circle: Scaffold | Refine |
+| `modelcheck-compose` | :orange_circle: Scaffold | Compose |
+| `modelcheck-symmetry` | :orange_circle: Scaffold | Symmetry reduce |
+| `modelcheck-partial` | :orange_circle: Scaffold | Partial order |
+
+### Round 588 — Abstract Interpretation
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `absint-domain` | :orange_circle: Scaffold | Abstract domain |
+| `absint-widen` | :orange_circle: Scaffold | Widening |
+| `absint-narrow` | :orange_circle: Scaffold | Narrowing |
+| `absint-join` | :orange_circle: Scaffold | Join |
+| `absint-meet` | :orange_circle: Scaffold | Meet |
+| `absint-transfer` | :orange_circle: Scaffold | Transfer function |
+| `absint-fixpoint` | :orange_circle: Scaffold | Fixpoint |
+| `absint-trace` | :orange_circle: Scaffold | Trace |
+| `absint-refine` | :orange_circle: Scaffold | Refine |
+| `absint-concretize` | :orange_circle: Scaffold | Concretize |
+
+### Round 589 — Program Analysis (Dataflow)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `dataflow-reach` | :orange_circle: Scaffold | Reaching definitions |
+| `dataflow-liveness` | :orange_circle: Scaffold | Liveness analysis |
+| `dataflow-available` | :orange_circle: Scaffold | Available expressions |
+| `dataflow-dominator` | :orange_circle: Scaffold | Dominator tree |
+| `dataflow-ssa` | :orange_circle: Scaffold | SSA form |
+| `callgraph-build` | :orange_circle: Scaffold | Build call graph |
+| `callgraph-prune` | :orange_circle: Scaffold | Prune dead code |
+| `callgraph-inline` | :orange_circle: Scaffold | Inline decisions |
+| `callgraph-devirt` | :orange_circle: Scaffold | Devirtualize |
+| `callgraph-cycle` | :orange_circle: Scaffold | Detect cycles |
+
+### Round 590 — Effect Systems (Algebraic Effects)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `effect-infer` | :orange_circle: Scaffold | Infer effects |
+| `effect-handle` | :orange_circle: Scaffold | Handle effect |
+| `effect-resume` | :orange_circle: Scaffold | Resume |
+| `effect-mask` | :orange_circle: Scaffold | Mask effect |
+| `effect-compose` | :orange_circle: Scaffold | Compose |
+| `effect-lift` | :orange_circle: Scaffold | Lift |
+| `effect-row` | :orange_circle: Scaffold | Row type |
+| `effect-polymorphic` | :orange_circle: Scaffold | Polymorphic |
+| `effect-check` | :orange_circle: Scaffold | Check |
+| `effect-elaborate` | :orange_circle: Scaffold | Elaborate |
+
 ### Round 571 — ECS Game Engines
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 669dfd9..80ea083 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -34270,3 +34270,59 @@
 (def (cmd-namespace-enter app) (let* ((echo (app-state-echo app))) (echo-message! echo "Namespace: enter")))
 (def (cmd-seccomp-profile app) (let* ((echo (app-state-echo app))) (echo-message! echo "Seccomp: apply profile")))
 (def (cmd-overlay-mount app) (let* ((echo (app-state-echo app))) (echo-message! echo "OverlayFS: mount")))
+
+;; Round 582: Computational Geometry (Convex Hull, Voronoi)
+(def (cmd-convex-hull app) (let* ((echo (app-state-echo app))) (echo-message! echo "CompGeom: convex hull")))
+(def (cmd-voronoi-diagram app) (let* ((echo (app-state-echo app))) (echo-message! echo "CompGeom: Voronoi diagram")))
+(def (cmd-delaunay-triangulate app) (let* ((echo (app-state-echo app))) (echo-message! echo "CompGeom: Delaunay")))
+(def (cmd-polygon-clip app) (let* ((echo (app-state-echo app))) (echo-message! echo "CompGeom: polygon clip")))
+(def (cmd-polygon-offset app) (let* ((echo (app-state-echo app))) (echo-message! echo "CompGeom: polygon offset")))
+(def (cmd-line-intersect app) (let* ((echo (app-state-echo app))) (echo-message! echo "CompGeom: line intersect")))
+(def (cmd-point-in-polygon app) (let* ((echo (app-state-echo app))) (echo-message! echo "CompGeom: point in polygon")))
+(def (cmd-polygon-area app) (let* ((echo (app-state-echo app))) (echo-message! echo "CompGeom: polygon area")))
+(def (cmd-polygon-centroid app) (let* ((echo (app-state-echo app))) (echo-message! echo "CompGeom: centroid")))
+(def (cmd-boolean-union app) (let* ((echo (app-state-echo app))) (echo-message! echo "CompGeom: boolean union")))
+;; Round 584: Lambda Calculus (Reduction, Church encoding)
+(def (cmd-lambda-reduce app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lambda: beta reduce")))
+(def (cmd-lambda-substitute app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lambda: substitute")))
+(def (cmd-lambda-church app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lambda: Church numeral")))
+(def (cmd-lambda-scott app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lambda: Scott encoding")))
+(def (cmd-lambda-cps app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lambda: CPS transform")))
+(def (cmd-lambda-debruijn app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lambda: de Bruijn index")))
+(def (cmd-lambda-normalize app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lambda: normalize")))
+(def (cmd-lambda-abstract app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lambda: abstract")))
+(def (cmd-lambda-apply app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lambda: apply")))
+(def (cmd-lambda-eta app) (let* ((echo (app-state-echo app))) (echo-message! echo "Lambda: eta reduce")))
+;; Round 586: SAT Solvers (DPLL, CDCL)
+(def (cmd-sat-solve app) (let* ((echo (app-state-echo app))) (echo-message! echo "SAT: solve formula")))
+(def (cmd-sat-add-clause app) (let* ((echo (app-state-echo app))) (echo-message! echo "SAT: add clause")))
+(def (cmd-sat-unit-propagate app) (let* ((echo (app-state-echo app))) (echo-message! echo "SAT: unit propagate")))
+(def (cmd-sat-decide app) (let* ((echo (app-state-echo app))) (echo-message! echo "SAT: decide variable")))
+(def (cmd-sat-backjump app) (let* ((echo (app-state-echo app))) (echo-message! echo "SAT: backjump")))
+(def (cmd-sat-learn app) (let* ((echo (app-state-echo app))) (echo-message! echo "SAT: learn clause")))
+(def (cmd-sat-restart app) (let* ((echo (app-state-echo app))) (echo-message! echo "SAT: restart")))
+(def (cmd-sat-simplify app) (let* ((echo (app-state-echo app))) (echo-message! echo "SAT: simplify")))
+(def (cmd-sat-certify app) (let* ((echo (app-state-echo app))) (echo-message! echo "SAT: certify UNSAT")))
+(def (cmd-sat-incremental app) (let* ((echo (app-state-echo app))) (echo-message! echo "SAT: incremental solve")))
+;; Round 588: Abstract Interpretation (Domains, Widening)
+(def (cmd-absint-domain app) (let* ((echo (app-state-echo app))) (echo-message! echo "AbsInt: domain")))
+(def (cmd-absint-widen app) (let* ((echo (app-state-echo app))) (echo-message! echo "AbsInt: widen")))
+(def (cmd-absint-narrow app) (let* ((echo (app-state-echo app))) (echo-message! echo "AbsInt: narrow")))
+(def (cmd-absint-join app) (let* ((echo (app-state-echo app))) (echo-message! echo "AbsInt: join")))
+(def (cmd-absint-meet app) (let* ((echo (app-state-echo app))) (echo-message! echo "AbsInt: meet")))
+(def (cmd-absint-transfer app) (let* ((echo (app-state-echo app))) (echo-message! echo "AbsInt: transfer function")))
+(def (cmd-absint-fixpoint app) (let* ((echo (app-state-echo app))) (echo-message! echo "AbsInt: fixpoint")))
+(def (cmd-absint-trace app) (let* ((echo (app-state-echo app))) (echo-message! echo "AbsInt: trace")))
+(def (cmd-absint-refine app) (let* ((echo (app-state-echo app))) (echo-message! echo "AbsInt: refine")))
+(def (cmd-absint-concretize app) (let* ((echo (app-state-echo app))) (echo-message! echo "AbsInt: concretize")))
+;; Round 590: Effect Systems (Algebraic Effects)
+(def (cmd-effect-infer app) (let* ((echo (app-state-echo app))) (echo-message! echo "Effects: infer")))
+(def (cmd-effect-handle app) (let* ((echo (app-state-echo app))) (echo-message! echo "Effects: handle")))
+(def (cmd-effect-resume app) (let* ((echo (app-state-echo app))) (echo-message! echo "Effects: resume")))
+(def (cmd-effect-mask app) (let* ((echo (app-state-echo app))) (echo-message! echo "Effects: mask")))
+(def (cmd-effect-compose app) (let* ((echo (app-state-echo app))) (echo-message! echo "Effects: compose")))
+(def (cmd-effect-lift app) (let* ((echo (app-state-echo app))) (echo-message! echo "Effects: lift")))
+(def (cmd-effect-row app) (let* ((echo (app-state-echo app))) (echo-message! echo "Effects: row type")))
+(def (cmd-effect-polymorphic app) (let* ((echo (app-state-echo app))) (echo-message! echo "Effects: polymorphic")))
+(def (cmd-effect-check app) (let* ((echo (app-state-echo app))) (echo-message! echo "Effects: check")))
+(def (cmd-effect-elaborate app) (let* ((echo (app-state-echo app))) (echo-message! echo "Effects: elaborate")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index bc86470..c68575f 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -33494,3 +33494,59 @@
 (def (cmd-cbor-sequence app) (let* ((echo (app-state-echo app))) (echo-message! echo "CBOR: sequence")))
 (def (cmd-cbor-map app) (let* ((echo (app-state-echo app))) (echo-message! echo "CBOR: map inspect")))
 (def (cmd-asn1-encode app) (let* ((echo (app-state-echo app))) (echo-message! echo "ASN.1: encode")))
+
+;; Round 581: Finite Element Methods
+(def (cmd-fem-mesh app) (let* ((echo (app-state-echo app))) (echo-message! echo "FEM: generate mesh")))
+(def (cmd-fem-solve app) (let* ((echo (app-state-echo app))) (echo-message! echo "FEM: solve system")))
+(def (cmd-fem-refine app) (let* ((echo (app-state-echo app))) (echo-message! echo "FEM: refine mesh")))
+(def (cmd-fem-boundary app) (let* ((echo (app-state-echo app))) (echo-message! echo "FEM: boundary conditions")))
+(def (cmd-fem-assemble app) (let* ((echo (app-state-echo app))) (echo-message! echo "FEM: assemble stiffness")))
+(def (cmd-fem-plot app) (let* ((echo (app-state-echo app))) (echo-message! echo "FEM: plot results")))
+(def (cmd-fem-error app) (let* ((echo (app-state-echo app))) (echo-message! echo "FEM: error estimate")))
+(def (cmd-fem-adaptive app) (let* ((echo (app-state-echo app))) (echo-message! echo "FEM: adaptive refine")))
+(def (cmd-fem-export app) (let* ((echo (app-state-echo app))) (echo-message! echo "FEM: export mesh")))
+(def (cmd-fem-postprocess app) (let* ((echo (app-state-echo app))) (echo-message! echo "FEM: post-process")))
+;; Round 583: Information Theory (Entropy, Coding)
+(def (cmd-entropy-compute app) (let* ((echo (app-state-echo app))) (echo-message! echo "InfoTheory: entropy")))
+(def (cmd-mutual-info app) (let* ((echo (app-state-echo app))) (echo-message! echo "InfoTheory: mutual info")))
+(def (cmd-kl-divergence app) (let* ((echo (app-state-echo app))) (echo-message! echo "InfoTheory: KL divergence")))
+(def (cmd-huffman-encode app) (let* ((echo (app-state-echo app))) (echo-message! echo "InfoTheory: Huffman encode")))
+(def (cmd-arithmetic-encode app) (let* ((echo (app-state-echo app))) (echo-message! echo "InfoTheory: arithmetic code")))
+(def (cmd-lzw-compress app) (let* ((echo (app-state-echo app))) (echo-message! echo "InfoTheory: LZW compress")))
+(def (cmd-reed-solomon app) (let* ((echo (app-state-echo app))) (echo-message! echo "InfoTheory: Reed-Solomon")))
+(def (cmd-hamming-encode app) (let* ((echo (app-state-echo app))) (echo-message! echo "InfoTheory: Hamming code")))
+(def (cmd-channel-capacity app) (let* ((echo (app-state-echo app))) (echo-message! echo "InfoTheory: channel capacity")))
+(def (cmd-source-code-theory app) (let* ((echo (app-state-echo app))) (echo-message! echo "InfoTheory: source coding")))
+;; Round 585: Proof Search (Tactics, Induction)
+(def (cmd-proof-intro app) (let* ((echo (app-state-echo app))) (echo-message! echo "Proof: introduction")))
+(def (cmd-proof-apply app) (let* ((echo (app-state-echo app))) (echo-message! echo "Proof: apply lemma")))
+(def (cmd-proof-rewrite app) (let* ((echo (app-state-echo app))) (echo-message! echo "Proof: rewrite")))
+(def (cmd-proof-induction app) (let* ((echo (app-state-echo app))) (echo-message! echo "Proof: induction")))
+(def (cmd-proof-destruct app) (let* ((echo (app-state-echo app))) (echo-message! echo "Proof: destruct")))
+(def (cmd-proof-auto app) (let* ((echo (app-state-echo app))) (echo-message! echo "Proof: auto tactic")))
+(def (cmd-proof-split app) (let* ((echo (app-state-echo app))) (echo-message! echo "Proof: split goal")))
+(def (cmd-proof-exists app) (let* ((echo (app-state-echo app))) (echo-message! echo "Proof: exists witness")))
+(def (cmd-proof-absurd app) (let* ((echo (app-state-echo app))) (echo-message! echo "Proof: absurd")))
+(def (cmd-proof-unfold app) (let* ((echo (app-state-echo app))) (echo-message! echo "Proof: unfold definition")))
+;; Round 587: Model Checking (LTL, CTL, Buchi)
+(def (cmd-modelcheck-ltl app) (let* ((echo (app-state-echo app))) (echo-message! echo "ModelCheck: LTL formula")))
+(def (cmd-modelcheck-ctl app) (let* ((echo (app-state-echo app))) (echo-message! echo "ModelCheck: CTL formula")))
+(def (cmd-modelcheck-buchi app) (let* ((echo (app-state-echo app))) (echo-message! echo "ModelCheck: Buchi automaton")))
+(def (cmd-modelcheck-fairness app) (let* ((echo (app-state-echo app))) (echo-message! echo "ModelCheck: fairness")))
+(def (cmd-modelcheck-counterexample app) (let* ((echo (app-state-echo app))) (echo-message! echo "ModelCheck: counterexample")))
+(def (cmd-modelcheck-abstract app) (let* ((echo (app-state-echo app))) (echo-message! echo "ModelCheck: abstract")))
+(def (cmd-modelcheck-refine app) (let* ((echo (app-state-echo app))) (echo-message! echo "ModelCheck: refine")))
+(def (cmd-modelcheck-compose app) (let* ((echo (app-state-echo app))) (echo-message! echo "ModelCheck: compose")))
+(def (cmd-modelcheck-symmetry app) (let* ((echo (app-state-echo app))) (echo-message! echo "ModelCheck: symmetry reduce")))
+(def (cmd-modelcheck-partial app) (let* ((echo (app-state-echo app))) (echo-message! echo "ModelCheck: partial order")))
+;; Round 589: Program Analysis (Dataflow, Call Graph)
+(def (cmd-dataflow-reach app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dataflow: reaching defs")))
+(def (cmd-dataflow-liveness app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dataflow: liveness")))
+(def (cmd-dataflow-available app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dataflow: available exprs")))
+(def (cmd-dataflow-dominator app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dataflow: dominators")))
+(def (cmd-dataflow-ssa app) (let* ((echo (app-state-echo app))) (echo-message! echo "Dataflow: SSA form")))
+(def (cmd-callgraph-build app) (let* ((echo (app-state-echo app))) (echo-message! echo "CallGraph: build")))
+(def (cmd-callgraph-prune app) (let* ((echo (app-state-echo app))) (echo-message! echo "CallGraph: prune dead")))
+(def (cmd-callgraph-inline app) (let* ((echo (app-state-echo app))) (echo-message! echo "CallGraph: inline")))
+(def (cmd-callgraph-devirt app) (let* ((echo (app-state-echo app))) (echo-message! echo "CallGraph: devirtualize")))
+(def (cmd-callgraph-cycle app) (let* ((echo (app-state-echo app))) (echo-message! echo "CallGraph: detect cycles")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 0cf9880..684346f 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -12925,4 +12925,35 @@
   ;; Round 580: Container Runtimes
   (register-command! 'oci-build cmd-oci-build) (register-command! 'oci-inspect cmd-oci-inspect) (register-command! 'oci-manifest cmd-oci-manifest) (register-command! 'cgroup-create cmd-cgroup-create) (register-command! 'cgroup-limit cmd-cgroup-limit)
   (register-command! 'cgroup-stat cmd-cgroup-stat) (register-command! 'namespace-create cmd-namespace-create) (register-command! 'namespace-enter cmd-namespace-enter) (register-command! 'seccomp-profile cmd-seccomp-profile) (register-command! 'overlay-mount cmd-overlay-mount)
+
+  ;; Round 581: Finite Element Methods
+  (register-command! 'fem-mesh cmd-fem-mesh) (register-command! 'fem-solve cmd-fem-solve) (register-command! 'fem-refine cmd-fem-refine) (register-command! 'fem-boundary cmd-fem-boundary) (register-command! 'fem-assemble cmd-fem-assemble)
+  (register-command! 'fem-plot cmd-fem-plot) (register-command! 'fem-error cmd-fem-error) (register-command! 'fem-adaptive cmd-fem-adaptive) (register-command! 'fem-export cmd-fem-export) (register-command! 'fem-postprocess cmd-fem-postprocess)
+  ;; Round 582: Computational Geometry
+  (register-command! 'convex-hull cmd-convex-hull) (register-command! 'voronoi-diagram cmd-voronoi-diagram) (register-command! 'delaunay-triangulate cmd-delaunay-triangulate) (register-command! 'polygon-clip cmd-polygon-clip) (register-command! 'polygon-offset cmd-polygon-offset)
+  (register-command! 'line-intersect cmd-line-intersect) (register-command! 'point-in-polygon cmd-point-in-polygon) (register-command! 'polygon-area cmd-polygon-area) (register-command! 'polygon-centroid cmd-polygon-centroid) (register-command! 'boolean-union cmd-boolean-union)
+  ;; Round 583: Information Theory
+  (register-command! 'entropy-compute cmd-entropy-compute) (register-command! 'mutual-info cmd-mutual-info) (register-command! 'kl-divergence cmd-kl-divergence) (register-command! 'huffman-encode cmd-huffman-encode) (register-command! 'arithmetic-encode cmd-arithmetic-encode)
+  (register-command! 'lzw-compress cmd-lzw-compress) (register-command! 'reed-solomon cmd-reed-solomon) (register-command! 'hamming-encode cmd-hamming-encode) (register-command! 'channel-capacity cmd-channel-capacity) (register-command! 'source-code-theory cmd-source-code-theory)
+  ;; Round 584: Lambda Calculus
+  (register-command! 'lambda-reduce cmd-lambda-reduce) (register-command! 'lambda-substitute cmd-lambda-substitute) (register-command! 'lambda-church cmd-lambda-church) (register-command! 'lambda-scott cmd-lambda-scott) (register-command! 'lambda-cps cmd-lambda-cps)
+  (register-command! 'lambda-debruijn cmd-lambda-debruijn) (register-command! 'lambda-normalize cmd-lambda-normalize) (register-command! 'lambda-abstract cmd-lambda-abstract) (register-command! 'lambda-apply cmd-lambda-apply) (register-command! 'lambda-eta cmd-lambda-eta)
+  ;; Round 585: Proof Search
+  (register-command! 'proof-intro cmd-proof-intro) (register-command! 'proof-apply cmd-proof-apply) (register-command! 'proof-rewrite cmd-proof-rewrite) (register-command! 'proof-induction cmd-proof-induction) (register-command! 'proof-destruct cmd-proof-destruct)
+  (register-command! 'proof-auto cmd-proof-auto) (register-command! 'proof-split cmd-proof-split) (register-command! 'proof-exists cmd-proof-exists) (register-command! 'proof-absurd cmd-proof-absurd) (register-command! 'proof-unfold cmd-proof-unfold)
+  ;; Round 586: SAT Solvers
+  (register-command! 'sat-solve cmd-sat-solve) (register-command! 'sat-add-clause cmd-sat-add-clause) (register-command! 'sat-unit-propagate cmd-sat-unit-propagate) (register-command! 'sat-decide cmd-sat-decide) (register-command! 'sat-backjump cmd-sat-backjump)
+  (register-command! 'sat-learn cmd-sat-learn) (register-command! 'sat-restart cmd-sat-restart) (register-command! 'sat-simplify cmd-sat-simplify) (register-command! 'sat-certify cmd-sat-certify) (register-command! 'sat-incremental cmd-sat-incremental)
+  ;; Round 587: Model Checking
+  (register-command! 'modelcheck-ltl cmd-modelcheck-ltl) (register-command! 'modelcheck-ctl cmd-modelcheck-ctl) (register-command! 'modelcheck-buchi cmd-modelcheck-buchi) (register-command! 'modelcheck-fairness cmd-modelcheck-fairness) (register-command! 'modelcheck-counterexample cmd-modelcheck-counterexample)
+  (register-command! 'modelcheck-abstract cmd-modelcheck-abstract) (register-command! 'modelcheck-refine cmd-modelcheck-refine) (register-command! 'modelcheck-compose cmd-modelcheck-compose) (register-command! 'modelcheck-symmetry cmd-modelcheck-symmetry) (register-command! 'modelcheck-partial cmd-modelcheck-partial)
+  ;; Round 588: Abstract Interpretation
+  (register-command! 'absint-domain cmd-absint-domain) (register-command! 'absint-widen cmd-absint-widen) (register-command! 'absint-narrow cmd-absint-narrow) (register-command! 'absint-join cmd-absint-join) (register-command! 'absint-meet cmd-absint-meet)
+  (register-command! 'absint-transfer cmd-absint-transfer) (register-command! 'absint-fixpoint cmd-absint-fixpoint) (register-command! 'absint-trace cmd-absint-trace) (register-command! 'absint-refine cmd-absint-refine) (register-command! 'absint-concretize cmd-absint-concretize)
+  ;; Round 589: Program Analysis
+  (register-command! 'dataflow-reach cmd-dataflow-reach) (register-command! 'dataflow-liveness cmd-dataflow-liveness) (register-command! 'dataflow-available cmd-dataflow-available) (register-command! 'dataflow-dominator cmd-dataflow-dominator) (register-command! 'dataflow-ssa cmd-dataflow-ssa)
+  (register-command! 'callgraph-build cmd-callgraph-build) (register-command! 'callgraph-prune cmd-callgraph-prune) (register-command! 'callgraph-inline cmd-callgraph-inline) (register-command! 'callgraph-devirt cmd-callgraph-devirt) (register-command! 'callgraph-cycle cmd-callgraph-cycle)
+  ;; Round 590: Effect Systems
+  (register-command! 'effect-infer cmd-effect-infer) (register-command! 'effect-handle cmd-effect-handle) (register-command! 'effect-resume cmd-effect-resume) (register-command! 'effect-mask cmd-effect-mask) (register-command! 'effect-compose cmd-effect-compose)
+  (register-command! 'effect-lift cmd-effect-lift) (register-command! 'effect-row cmd-effect-row) (register-command! 'effect-polymorphic cmd-effect-polymorphic) (register-command! 'effect-check cmd-effect-check) (register-command! 'effect-elaborate cmd-effect-elaborate)
 )