Improve local verified draft recovery

ober

8efec58660caeed2a2b79f674364aacfa57194c7

diff --git a/src/jcode/core/verified-run.ss b/src/jcode/core/verified-run.ss
index 1cde819..e2adec0 100644
--- a/src/jcode/core/verified-run.ss
+++ b/src/jcode/core/verified-run.ss
@@ -41,7 +41,7 @@
 (def default-verified-history-keep-batches 3)
 (def default-local-verified-history-token-limit 24000)
 (def default-local-verified-history-keep-batches 2)
-(def default-local-verified-max-completion-tokens 4096)
+(def default-local-verified-max-completion-tokens 8192)
 (def default-local-verified-repair-max-completion-tokens 4096)
 
 (def (opt-get o key) (let ((p (assoc key o))) (and p (cdr p))))
@@ -374,7 +374,8 @@
        (not (current-rejected-ss-draft))
        (not (current-pending-ss-create-repair))
        (if (current-verified-local-model?)
-         (>= (current-pre-edit-inspection-count) 2)
+         (>= (current-pre-edit-inspection-count)
+             local-pre-edit-inspection-limit)
          (>= (pre-edit-inspection-total)
              remote-force-first-edit-inspection-count))
        (tool-specs-include? specs "edit")
@@ -4505,6 +4506,8 @@
               (string-append
                 (format "Jerboa syntax guard rejected ~a: delimiter balance failed: ~a"
                         path report)
+                (let ((excerpt (balance-report-excerpt content report)))
+                  (if excerpt (string-append "\n\n" excerpt) ""))
                 (or (minimal-balance-autoclose-syntax-hint content path)
                     (minimal-balance-suffix-hint content path)
                     (minimal-balance-autoclose-boundary-hint content path)
diff --git a/test/run.ss b/test/run.ss
index 270cd19..b24f9bf 100644
--- a/test/run.ss
+++ b/test/run.ss
@@ -3734,8 +3734,8 @@
 	    (check! "verified-run: local edit is automatically verified"
 	            result "VERIFIED: exit 0\n"))
 	  (let ([observed (reverse caps)])
-	    (check! "verified-run: local first-draft completion cap is 4k"
-	            (car observed) 4096)
+	    (check! "verified-run: local first-draft completion cap is 8k"
+	            (car observed) 8192)
 	    (check! "verified-run: local post-verifier repair cap is 4k"
 	            (cadr observed) 4096))
 	  (check! "verified-run: automatic verify avoids a provider round"
@@ -4025,8 +4025,8 @@
 	    (check! "verified-run: inspected rejected draft repair verifies"
 	            result "VERIFIED: exit 0\n"))
 	  (let ([observed (reverse caps)])
-	    (check! "verified-run: uninspected rejected draft keeps 4k cap"
-	            (cadr observed) 4096)
+	    (check! "verified-run: uninspected rejected draft keeps first-draft cap"
+	            (cadr observed) 8192)
 	    (check! "verified-run: inspected rejected draft repair uses 4k cap"
 	            (caddr observed) 4096))
 	  (check-pred! "verified-run: inspected missing draft keeps broad write"
@@ -7588,6 +7588,54 @@
 	            [else (loop (cdr ys))]))))
 	  (safe-delete-test-file! target-path)))
 
+	(let* ([vr-dir  "/tmp"]
+	       [target "jcode-verified-balance-guard-excerpt.ss"]
+	       [target-path (string-append vr-dir "/" target)]
+	       [bad "(import (jerboa prelude))\n(define (main)\n  (displayln \"draft\")))\n"]
+	       [good "(import (jerboa prelude))\n(define (main)\n  (displayln \"fixed\"))\n"]
+	       [tool-results '()])
+	  (safe-delete-test-file! target-path)
+	  (let* ([scope (parse-write-scope target)]
+	         [wf   (coding-workflow (string-append "grep -q fixed " target) vr-dir
+	                                (list (cons 'write-scope scope)
+	                                      (cons 'run-aliases? #t)))]
+	         [resp (scripted-responder
+	                 (list
+	                   (list
+	                     (make-wtool-call
+	                       "edit"
+	                       (list (cons "path" target)
+	                             (cons "content" bad))
+	                       #f))
+	                   (list
+	                     (make-wtool-call
+	                       "edit"
+	                       (list (cons "path" target)
+	                             (cons "content" good))
+	                       #f))
+	                   (list (make-wtool-call "verify" '() #f))
+	                   (list (make-wtool-call
+	                           "done" '(("summary" . "balance-excerpt-ok")) #f))))]
+	         [result (parameterize ((current-write-scope scope))
+	                   (run-workflow wf "balance guard includes rejected span" resp
+	                     (list (cons 'max-iterations 8)
+	                           (cons 'max-tool-errors 3)
+	                           (cons 'on-message
+	                             (lambda (m)
+	                               (when (equal? (message-role m) "tool")
+	                                 (set! tool-results
+	                                   (cons (message-content m) tool-results))))))))])
+	    (check! "verified-run: balance guard excerpt run verifies"
+	            result "balance-excerpt-ok")
+	    (check-pred! "verified-run: initial balance guard includes rejected draft excerpt"
+	      (reverse tool-results)
+	      (lambda (xs)
+	        (and (pair? xs)
+	             (str-contains? (car xs) "Jerboa syntax guard rejected")
+	             (str-contains? (car xs) "Rejected draft excerpt around line 3")
+	             (str-contains? (car xs) "3:   (displayln \"draft\")))")))))
+	  (safe-delete-test-file! target-path))
+
 	(let* ([vr-dir "/tmp"]
 	       [target "jcode-verified-rejected-draft-ranged-read.ss"]
 	       [target-path (string-append vr-dir "/" target)]