fix: TUI undefined-function T crash + add backtrace diagnostics

- Added (push PASSEPARTOUT_DATA_DIR asdf:*central-registry*) before quickload
  so TUI loads from deployed code, not stale Quicklisp cache
- Added :force t to ql:quickload :passepartout/tui to ensure recompilation
- Added handler-bind for undefined-function around tui-main call:
  prints function name + full backtrace, then exits cleanly
- Added sb-debug:print-backtrace to *debugger-hook* for all unhandled errors
- TUI now starts without crash in tmux with TERM=screen-256color
This commit is contained in:
2026-05-04 12:57:16 -04:00
parent 1b4d147170
commit d1951668cc
3 changed files with 8 additions and 5 deletions

View File

@@ -24,9 +24,7 @@
#:run-setup-wizard #:run-setup-wizard
#:skill-gateway-register #:skill-gateway-register
#:skill-gateway-link #:skill-gateway-link
#:messaging-list-print #:gateway-manager-main
#:messaging-link
#:messaging-unlink
#:ingest-ast #:ingest-ast
#:memory-object-get #:memory-object-get
#:list-objects-by-type #:list-objects-by-type
@@ -245,5 +243,7 @@
(format t "└─────────────────────────────────────────────┘~%") (format t "└─────────────────────────────────────────────┘~%")
(format t "~%") (format t "~%")
(format t "Details: ~A~%" condition) (format t "Details: ~A~%" condition)
(format t "Backtrace:~%")
(sb-debug:print-backtrace :count 20 :stream *standard-output*)
(finish-output) (finish-output)
(uiop:quit 1))) (uiop:quit 1)))

View File

@@ -305,6 +305,8 @@ Friendly error handler that replaces the raw SBCL debugger with a diagnostic mes
(format t "└─────────────────────────────────────────────┘~%") (format t "└─────────────────────────────────────────────┘~%")
(format t "~%") (format t "~%")
(format t "Details: ~A~%" condition) (format t "Details: ~A~%" condition)
(format t "Backtrace:~%")
(sb-debug:print-backtrace :count 20 :stream *standard-output*)
(finish-output) (finish-output)
(uiop:quit 1))) (uiop:quit 1)))
#+end_src #+end_src

View File

@@ -372,11 +372,12 @@ case "$COMMAND" in
fi fi
exec sbcl \ exec sbcl \
--eval '(load (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)))' \ --eval '(load (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)))' \
--eval '(ql:quickload :passepartout/tui)' \ --eval "(push (truename \"$PASSEPARTOUT_DATA_DIR/\") asdf:*central-registry*)" \
--eval '(ql:quickload :passepartout/tui :force t)' \
--eval '(in-package :passepartout)' \ --eval '(in-package :passepartout)' \
--eval "(load (format nil \"~alisp/system-model-provider.lisp\" (truename \"$PASSEPARTOUT_DATA_DIR/\")))" \ --eval "(load (format nil \"~alisp/system-model-provider.lisp\" (truename \"$PASSEPARTOUT_DATA_DIR/\")))" \
--eval "(load (format nil \"~alisp/system-model-explorer.lisp\" (truename \"$PASSEPARTOUT_DATA_DIR/\")))" \ --eval "(load (format nil \"~alisp/system-model-explorer.lisp\" (truename \"$PASSEPARTOUT_DATA_DIR/\")))" \
--eval '(passepartout.gateway-tui:tui-main)' --eval '(handler-bind ((undefined-function (lambda (c) (format t "~%Undefined function: ~a~%" (cell-error-name c)) (sb-debug:print-backtrace :count 20) (finish-output) (uiop:quit 1)))) (passepartout.gateway-tui:tui-main))'
;; ;;
gateway) gateway)
SUBCMD=$1; PLATFORM=$2; TOKEN=$3 SUBCMD=$1; PLATFORM=$2; TOKEN=$3