tmux capture-pane strips the ⬇ (U+2B07) character; grep on it always
returns empty. Switch to case-insensitive text matching on actual
LLM response content (hello, hi, greeting, hey).
Also: reorder tests (cascade-parsing, eval-command, status-bar first
to warm the TUI; agent-responds last), increase handshake timeout
to 60s, increase agent poll timeout to 90s.
TUI integration: 5/5 pass (was 4/5 with false-negative on agent-responds)
- TUI agent-responds: hardened to detect and FAIL on cascade/exhausted
responses (previously a separate WARN-only test that let real
cascade failures slip through)
- New TUI cascade-parsing test: /eval *provider-cascade* on screen,
checks for clean keywords (no cl-dotenv quote artifacts)
- Pre-warm step: sbcl --eval '(ql:quickload :passepartout/tui)'
before launching tmux, cuts TUI startup from ~120s to ~10s
- Removed test_agent_not_cascade_failure (absorbed into agent-responds)
- New integration test: test-provider-cascade-parsing verifies
PROVIDER_CASCADE entries are keywords without quotes, matching
registered backends — catches the exact cl-dotenv quote bug
- Fixed stop-daemon ghost symbol (removed export) and paren bug
- Contract section updated with numbered Phase 2/3 items
cl-dotenv preserves surrounding quotes in .env values (unlike bash).
PROVIDER_CASCADE="deepseek,..." resulted in keywords like :"DEEPSEEK
instead of :DEEPSEEK, causing all cascade lookups to fail silently.
Fixes:
- .env.example: remove quotes from PROVIDER_CASCADE
- provider-cascade-initialize: add #" and #' to string-trim chars
- system-model-router: same fix for LOCAL_BACKENDS parsing
- repl: test-repl-list-vars used wrong keyword (REPL-SENSOR→PASSEPARTOUT),
test-repl-inspect-found expected nonexistent 'function' substring
- literate: test-extract-lisp-blocks had ~% as literal chars (→format nil),
test-block-balance-check-valid had broken path merging
- diagnostics: test-diagnostics-env-fail used fragile (setf uiop:getenv),
test-diagnostics-dependency-success included missing 'sbcl' binary
- llm-gateway: test-provider-rejects-bad-keyword made real HTTP request
- reason: test-backend-cascade-no-backends lacked isolation from backends,
test-loop-gate-reason-sets-status called real LLM
- context: delete-file cleanup error now ignore-errors'd
- messaging: *gateway-registry* unbound in jailed package; use symbol-value
4 remaining failures are test-registration issues from jailed packages
(FiveAM suite state conflicts across skill package boundaries).
84% reduction in failures (16→4).
- skill-package-forms-strip: only strip (in-package :passepartout),
preserving test-package declarations. This allows embedded test code
to evaluate in the correct package, fixing 7 previously-unreachable
test suites (vault, perms, policy, validator, lisp, org, archivist).
- Remove security-dispatcher from skill-topological-sort exclusion:
dispatcher was never loaded (neither via ASDF nor skill system).
Test package was previously NIL; now loads properly.
Test results: 146 pass, 16 fail (was 80P 1F).
Remaining failures are pre-existing test code bugs (variable access
across jailed packages, cleanup errors) now exposed by the fix.
Eliminates COMMON-LISP-USER::DEFSKILL and other package-related
STYLE-WARNINGs during compilation. Files affected:
- gateway-messaging, programming-repl, programming-standards,
system-memory, system-archivist
Remaining warnings are cross-skill references (vault functions)
and minor same-file forward refs — category 2 per ROADMAP.
Root cause: config inner cond had )))) (4 closes) but needed ))) (3).
The 4th ) prematurely closed the outer cond config clause, making
(t (cond ...)) a bare function call to T instead of the cond default.
Also fixed chat-render coordinate bug (:y 1 :x y -> :y y :x 1)
Added backtrace diag (handler-bind all errors, sb-debug to stderr)
Added asdf central-registry push + :force t for stale-cache prevention
- 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
- handler-case had (log-message ...) and t as malformed clauses instead of return value
- This caused the error clause to fall outside handler-case, making c undefined
- Wrapped success path in progn: write-file + log-message + return t
- Error clause (error (c) ...) now properly inside handler-case
- Both bugs fixed by same structural change
- Separated test code from programming-lisp.org and programming-org.org into tests/ directory (was tangled to main lisp/, causing LOADER ERROR because export hadn't run yet)
- Added eval-when to load fiveam before test defpackage
- Renamed t→tag in lambda parameters in system-archivist, programming-org
- Renamed t→obj-type in let binding in system-memory
- Fixed missing lambda close paren in org-privacy-tag-p (SOME called with 1 arg)
proto-get was using getf which does eq comparison, so :EXPLANATION
from the LLM response didn't match :explanation in the policy gate.
Now iterates the plist and compares uppercased strings.
Two more naming drifts in the think() function. Added aliases:
- context-assemble-global-awareness → context-awareness-assemble
- context-get-system-logs → context-logs
Both are called from think() in core-loop-reason but had the wrong names.