#+TITLE: Passepartout Changelog #+AUTHOR: Passepartout #+FILETAGS: :changelog:release: All notable changes to Passepartout, extracted from [[file:docs/ROADMAP.org][ROADMAP.org]] DONE items with LOGBOOK timestamps. * v0.7.1 — Streaming + Markdown Rendering :LOGBOOK: - Released [2026-05-08 Fri] :END: ** Streaming (SSE + TUI) - ~provider-openai-stream~: SSE streaming via Dexador ~:want-stream t~, parses ~data:~ lines - ~parse-sse-line~: extracts content from SSE lines, returns ~:done~ for ~[DONE]~ - ~cascade-stream~: streaming cascade called from ~think()~ via ~fboundp~ guard - TUI ~on-daemon-msg~ handles ~:stream-chunk~ frames: appends live, stamps time on final chunk - Esc during streaming: appends ~[interrupted]~, finalizes message, sends cancel event - ~[streaming]~ indicator in status bar when ~:streaming-text~ is non-nil - SSE cancel infrastructure: ~*stream-cancel*~ check in read loop (thread-safe for v0.7.2) ** Watchdog - 30s stall detection via Dexador ~read-timeout~; injects ~[Response stalled]~ message on timeout ** Markdown Rendering - ~parse-markdown-spans~: detects ~**bold**~, ~*italic*~, ~`code`~, ~https://~ URLs — returns (text . attrs) segments - ~parse-markdown-blocks~: splits text at ~```~ boundaries, extracts language tag + content - ~render-styled~: renders styled segments to Croatoan window with ~:bold~, ~:underline~, ~:bgcolor~ - ~syntax-highlight~: colors Lisp code — strings green, comments dim, keywords purple, function calls peach - ~view-chat~ wired: agent messages render markdown, others remain plain - Tab-to-activate URLs: Tab on empty input extracts URL from last agent message; second Tab confirms ** Bug Fixes - Fixed 7 pre-existing TUI test failures: ~first~→~aref~ (car on vectors), ~nil~→~zerop~ (empty vector) - Fixed ~add-msg~ extra argument STYLE-WARNING in ~/theme~ handler ** Test Suite - Core: 65/65 (100%) - Neuro-provider: 13/13 (100%) - TUI View: 22/22 (100%) - TUI Main: 65/65 (100%) - Total: 165 tests, 0 failures * v0.7.0 — TUI Essentials: Terminal Parity :LOGBOOK: - Released [2026-05-08 Fri] :END: ** TDD from Contract Every item followed contract → RED test → GREEN implementation → recorded. ** Unicode Width Awareness - ~char-width~: ASCII/CJK/emoji/combining marks/tab/null. 30 lines, pure Lisp - 6 TDD tests, 11 assertions ** Readline/Ctrl Key Bindings - Ctrl+D quit, Ctrl+U clear line, Ctrl+W delete word, Ctrl+A/E home/end - Ctrl+L redraw, Ctrl+X+E external editor (~$EDITOR~ fallback), Ctrl+C interrupt - 6 TDD tests, all pass ** Status Bar Fix - Timestamp right-aligned at ~(- w 12)~ on line 2, focus info at ~:x 1~ — no overlap ** Scroll Notification - ~:scroll-at-bottom~ and ~:scroll-notify~ state flags - ~add-msg~ sets ~:scroll-notify~ when user is scrolled up on new message - 2 TDD tests ** Deeper Autocomplete - ~/theme ~ subcommand completion, ~/focus ~ directory completion - ~@path~ file path completion from ~memex/projects/~ (Org + Lisp files) - 2 TDD tests ** Test Suite - Core: 135/135 (100%) - TUI: 39/46 (7 pre-existing failures fixed in v0.7.1) * v0.6.0 — Time Awareness :LOGBOOK: - Released [2026-05-08 Thu] :END: ** Temporal Memory Filtering (symbolic-time-memory skill) - ~memory-objects-since(timestamp)~ — hash-table walk returning objects with ~version >= timestamp~ - ~memory-objects-in-range(since until)~ — version between two timestamps (inclusive) - ~context-query-with-time~ — extended query with ~:since~ / ~:until~ parameters - 6 tests, 100% pass. Pure Lisp, sub-millisecond, 0 LLM tokens ** Sensor-Time Skill - ~format-time-for-llm~ — TIME: section for system prompt, iso/natural format - ~session-duration~ — session start tracking, included in TIME section - ~sensor-time-tick~ — deadline scanning via cron (~:reflex~ tier), 0 LLM tokens - ~TIME_AWARENESS~ / ~TIME_FORMAT~ / ~DEADLINE_WARNING_MINUTES~ env vars - 13 tests, 100% pass ** System Prompt - TIME section injected at top of ~think()~ via ~fboundp~ guard in ~core-reason.lisp~ - Falls back gracefully when sensor-time skill not loaded * v0.5.1 — Compilation Hardening :LOGBOOK: - Released [2026-05-08 Thu] :END: - Fixed ~defvar~ missing opening paren in ~security-vault.lisp~ - Updated 19 CFFI struct references in ~embedding-native.lisp~ (deprecation fix) - Fixed heartbeat variable scope in ~symbolic-events.lisp~ (~passepartout::~ prefix) - Suppressed ~100 harmless cross-skill STYLE-WARNINGs via bash script filter - ROADMAP: two false errors documented (~symbolic-memory~ lambda, ~gateway-messaging~ deleted) - Test suite: 116/116 (100%) * v0.5.0 — File Reorganization & Token Economics :LOGBOOK: - Released [2026-05-08 Thu] :END: ** File Reorganization (self-repair criterion) - Extracted ~core-context~ → ~symbolic-awareness~ (skill, hot-reloadable) - Extracted heartbeat generation → ~symbolic-events~ (skill) - Relocated 6 utility fragments to correct files - Renamed 6 core files (core-defpackage → core-package, core-communication → core-transport, core-loop → core-pipeline, core-loop-perceive → core-perceive, core-loop-reason → core-reason, core-loop-act → core-act) - Renamed 13 system-* files (system-config → symbolic-config, system-model-provider → neuro-provider, system-actuator-shell → channel-shell, etc.) - Deleted ~system-model.lisp~ (dead code) - Renamed 4 gateway-* files → channel-* - Split ~gateway-messaging.lisp~ (411 lines) → 4 channel-{telegram,signal,discord,slack} files - Deleted ~gateway-messaging.org/.lisp~, renamed 13 ~defskill~/~defpackage~ names to match - Renamed ~gateway-cli-input~ → ~channel-cli-input~ (function + exports) - Removed ~core-context~ filter from ~core-skills.lisp~ - Documented the self-repair criterion in ARCHITECTURE.org, DESIGN_DECISIONS.org, and AGENTS.md - Added hard rule in AGENTS.md: no core additions without permission ** Token Economics (skills, not core) - ~org/tokenizer.org~ → ~lisp/tokenizer.lisp~: ~count-tokens~, ~model-token-ratio~, ~token-cost~, ~provider-token-cost~ — char-ratio heuristic per model family with per-provider pricing (11 tests) - ~org/cost-tracker.org~ → ~lisp/cost-tracker.lisp~: ~cost-track-call~, ~cost-session-total~, ~cost-by-provider~, ~cost-format-budget-status~ — per-call cost logged as ~COST TRACKER: DEEPSEEK call: 0.0002 USD~ (6 tests) - ~org/token-economics.org~ → ~lisp/token-economics.lisp~: ~prompt-prefix-cached~ (sxhash-based IDENTITY+TOOLS caching), ~context-assemble-cached~ (skip heartbeat/delegation, cache on unchanged foveal/scope/memory), ~enforce-token-budget~ (L1→L2→L3 progressive trimming, CONTEXT_MAX_TOKENS env var) (9 tests) - All three loaded as skills via ~skill-initialize-all~, ~fboundp~-guarded in ~think()~ - Full test suite: 116/116 (100%) ** Bug Fixes - Fixed DeepSeek 400 error: removed malformed ~tools~ parameter from cascade requests - Fixed ~UNDEFINED-FUNCTION~ crash in ~think()~ when ~symbolic-awareness~ skill not loaded (~fboundp~ guards) - Fixed gate-trace duplication in TUI responses (~setf~ replaces ~list*~ in ~cognitive-verify~) - Tightened dexador ~connect-timeout~ from 10s → 5s for faster cascade failover * v0.4.3 — Shell Sandboxing & Safety Classification :LOGBOOK: - Released [2026-05-07 Thu] :END: - Added ~bwrap~ sandbox to shell actuator (~--unshare-net~, ~--unshare-ipc~, read-only system bindings) - Fallback to regex-only safety when ~bwrap~ unavailable - Shell safety severity classification: ~:catastrophic~ → ~:dangerous~ → ~:moderate~ → ~:harmless~ - ~:catastrophic~ always HITL regardless of approval count; ~:harmless~ allowed by default - Severity tier feeds into rule learning engine (v0.7.2) * v0.4.2 — Structured Output (LLM → JSON → plist) :LOGBOOK: - Released [2026-05-07 Thu] :END: - Function-calling / tool-use API in ~provider-openai-request~ - LLM returns guaranteed-valid JSON → deterministic ~json-alist-to-plist~ conversion at boundary - ~think()~ wired to use structured tool calls from the LLM - Raw ~read-from-string~ plist parsing kept as fallback for streaming/local models * v0.4.1 — Design Cleanup :LOGBOOK: - Released [2026-05-07 Thu] :END: - Removed ~system-prompt-augment~ mechanism from skill struct and ~defskill~ - Introduced ~*standing-mandates*~ (list of function → string generators) as replacement - Fixed false token-overhead claims in DESIGN_DECISIONS and ROADMAP (3,000-8,000 → ~40) - Updated security vector count 9→10 in README, ARCHITECTURE.org, dispatcher docstring - Rewrote README: added "What is an agent?" section, moved cost claims to DESIGN_DECISIONS - Registered 10 cognitive tools (~search-files~, ~find-files~, ~read-file~, ~write-file~, ~list-directory~, ~run-shell~, ~eval-form~, ~run-tests~, ~org-find-headline~, ~org-modify-file~) - Enforced NO-HARDCODED-CONSTANTS standard with ~.env.example~ entries * v0.4.0 — Production Hardening :LOGBOOK: - Released [2026-05-06 Wed 20:56] :END: - Activated semantic retrieval: wired ~:foveal-vector~ into context assembly; replaced SHA-256 hashing default with trigram Jaccard similarity for offline semantic retrieval - Self-build safety boundary: ~core-*~ path protection; ~SELF_BUILD_MODE~ env var; HITL Flight Plan for core modifications - TUI differentiator visualization: gate trace per action (pass/block/approval), focus map in status bar, rule counter - Expanded theme system: 25-color layered system, ~/theme ~ command (dark/light/solarized/gruvbox) - Gateway QA: Telegram + Signal integration tests; Discord + Slack gateways - Emacs bridge: ~passepartout.el~ over framed TCP protocol, ~M-x passepartout-send-region~, ~M-x passepartout-focus~ - Native embedding inference: CFFI binding to llama.cpp, nomic-embed-text-v1.5 (768-dim), ~EMBEDDING_PROVIDER=native~