Files
passepartout/CHANGELOG.org
Amr Gharbeia 7fca4189b9 v0.7.2: release — TDD
All 14 v0.7.2 items wired, tested, and documented.

Release checklist:
- ROADMAP: all 14 items marked DONE
- README: version badge v0.7.1 → v0.7.2
- CHANGELOG: v0.7.2 entry with feature summaries
- core-transport: make-hello-message 0.7.1 → 0.7.2
- .env.example: TAG_CATEGORIES, SELF_BUILD_MODE
- /help list: all 16 commands documented

Phase 1 (wire deferred):
- call-with-tool-timeout in action-tool-execute
- dispatcher-privacy-severity in dispatcher-check
- Ctrl+G gate-trace toggle, Ctrl+F search placeholder

Phase 2 (finish features):
- /audit verify, /resume <n>, /help <topic>

Core: 88/88  TUI Main: 85/86 (1 pre-existing flake)
2026-05-08 19:54:07 -04:00

12 KiB

Passepartout Changelog

All notable changes to Passepartout, extracted from ROADMAP.org DONE items with LOGBOOK timestamps.

  • State "RELEASED" from "DONE" [2026-05-08 Fri 23:00]

v0.7.2 — Gate Trace, HITL, Identity, Search + Maturation

Gate Trace Visualization

Gate-trace-lines wired into view-chat. Renders colored entries below agent messages (green passed, red blocked, yellow approval). Ctrl+G toggles collapse per message. Default: visible.

HITL Inline Panels

/approve and /deny parsed as structured events in on-key. on-daemon-msg detects :approval-required and renders styled system messages with :panel flag and :hitl theme color.

Identity File

load-identity-file reads ~/memex/IDENTITY.org on startup. agent-identity injects into think() IDENTITY section. /identity opens in $EDITOR, auto-reloads.

Safe-Tool Allowlist

read-only-p slot on cognitive-tool struct. tool-read-only-p registry lookup. Read-only tools auto-pass dispatcher-check. 7 tools marked read-only (search, find, read, list, eval, tests, org-find).

Message Search

/search <query> performs case-insensitive substring search across message history. Shows match count and context previews.

Context Visibility

/context shows message count, focus, token estimate, and last 5 message summaries. /context why <id> shows memory object info.

Session Rewind

/rewind <n> restores memory to snapshot n-1 via rollback-memory. /sessions lists last 10 snapshots with timestamps and object counts. Auto-snapshot at turn boundaries in think().

Undo/Redo

Operation-level memory undo/redo. undo-snapshot before destructive tool execution. /undo and /redo TUI commands restore memory state.

Tool Hardening

Per-tool timeouts (shell=300s, search-files=30s, eval-form=10s). call-with-tool-timeout wraps tool execution with sb-ext:with-timeout. verify-write re-reads after write-file and compares content.

Tag Stack

TAG_CATEGORIES env var parses severity tiers (@tag:block, :warn, :log). dispatcher-privacy-severity wired into dispatcher-check vector 5. /tags TUI command lists configured categories.

Merkle Audit

audit-node exposes memory object lineage (type, hash, scope, version). /audit <id> TUI command. /audit verify counts objects and snapshots.

Self-Help

/why shows most recent gate trace from message history.

Agent Identity Injection

assemble-config-section builds live CONFIG from provider-cascade, tokenizer-context-limit, gate count, and hitl-pending. Injected into all three system-prompt assembly paths via fboundp guard.

v0.7.1 — Streaming + Markdown Rendering

  • Released [2026-05-08 Fri]

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

  • Released [2026-05-08 Fri]

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 <Tab> subcommand completion, /focus <Tab> directory completion
  • @path<Tab> 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

  • Released [2026-05-08 Thu]

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

  • Released [2026-05-08 Thu]
  • 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

  • Released [2026-05-08 Thu]

File Reorganization (self-repair criterion)

  • Extracted core-contextsymbolic-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-inputchannel-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.orglisp/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.orglisp/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.orglisp/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

  • Released [2026-05-07 Thu]
  • 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)

  • Released [2026-05-07 Thu]
  • 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

  • Released [2026-05-07 Thu]
  • 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

  • Released [2026-05-06 Wed 20:56]
  • 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 <name> 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