diff --git a/docs/ROADMAP.org b/docs/ROADMAP.org index 5e67c86..2b3d4c6 100644 --- a/docs/ROADMAP.org +++ b/docs/ROADMAP.org @@ -1187,7 +1187,10 @@ The TUI is the main UI for v1.0.0. Competitive analysis of Claude Code, OpenCode *** TODO TUI-based setup wizard — deferred to v0.8.0 -*** TODO Pads for chat scrolling — deferred to v0.7.2 (needs Croatoan terminal for testing) +*** DONE Pads for chat scrolling — Page Up/Down by 10 lines +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: ** v0.7.1: TUI — Streaming + Markdown Rendering :LOGBOOK: @@ -1243,10 +1246,16 @@ Replace literal markdown syntax with styled text using Croatoan attributes: Implementation: a ~render-styled~ wrapper that takes a list of ~(text . plist-of-attributes)~ segments and emits sequential ~add-string~ calls at correct x positions. ~50 lines. The markdown parser is ~80 lines of regex-based block/span detection. Total: ~130 lines. ** v0.7.2: TUI — Gate Trace + HITL + Search +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: Gate trace data is already stored per-message (~:gate-trace~ field in ~add-msg~) but never rendered. HITL approval requires typing raw text that happens to match ~/approve~ — no TUI-internal command handling. Context visibility and session control close the audit trail: the user can inspect what the LLM sees and undo what went wrong. These are Passepartout's architectural differentiators that remain invisible to users. *** DONE Gate trace visualization +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-gate-trace :CREATED: [2026-05-08 Fri] @@ -1262,6 +1271,9 @@ Render gate trace lines below each agent message in dim: Gate trace data format (already in messages): ~(:gate-trace ((:gate "dispatcher-path" :result :passed) (:gate "dispatcher-shell" :result :blocked :reason "rm -rf pattern") (:gate "dispatcher-network" :result :approval)))~. ~50 lines. *** DONE HITL inline command handling +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-hitl-inline :CREATED: [2026-05-08 Fri] @@ -1277,6 +1289,9 @@ Gate trace data format (already in messages): ~(:gate-trace ((:gate "dispatcher- ~60 lines. *** DONE Message search (/search or Ctrl+F) +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-search :CREATED: [2026-05-08 Fri] @@ -1289,6 +1304,9 @@ Gate trace data format (already in messages): ~(:gate-trace ((:gate "dispatcher- ~80 lines. *** DONE Context visibility command (~/context~) +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-context :CREATED: [2026-05-08 Fri] @@ -1304,6 +1322,9 @@ Show the user exactly what the agent sees — the assembled system prompt trimme - ~40 lines. *** DONE Session rewind, fork, and resume — Merkle-root-based +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-session-rewind :CREATED: [2026-05-08 Fri] @@ -1322,6 +1343,9 @@ Passepartout's Merkle tree makes session control more powerful than Claude Code' - ~200 lines total (~30 daemon snapshot-at-turn, ~150 TUI commands + confirmation dialogs, ~20 session registry persistence). *** DONE Safe-tool allowlist — read-only operations auto-approve +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-safe-tools :CREATED: [2026-05-08 Fri] @@ -1336,6 +1360,9 @@ Claude Code and Hermes both have safe-tool allowlists that skip HITL for read-on - This is Claude Code's ~isAutoModeAllowlistedTool()~ pattern — 20 lines in ~security-dispatcher.lisp~ *** DONE Agent identity file — ~/memex/IDENTITY.org~ +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-identity :CREATED: [2026-05-08 Fri] @@ -1351,6 +1378,9 @@ Claude Code has ~CLAUDE.md~ (always-loaded instructions hierarchy). OpenClaw has ~30 lines in ~core-reason.lisp~ + ~20 lines TUI command. *** DONE Undo/redo per operation — ~/undo~, ~/redo~ +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-undo :CREATED: [2026-05-08 Fri] @@ -1365,6 +1395,9 @@ Session rewind (above) restores the Merkle root to a prior turn boundary. This i ~20 lines on top of existing Merkle snapshot infrastructure. *** DONE Expand /context debugging — similarity trace + dropped nodes +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-context-debug :CREATED: [2026-05-08 Fri] @@ -1377,6 +1410,9 @@ The ~/context~ command (above) shows what the model sees. Add two deeper views: ~60 lines of rendering on existing data. *** DONE Tool execution hardening — timeouts + write verification +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-tool-hardening :CREATED: [2026-05-08 Fri] @@ -1390,6 +1426,9 @@ Existing tools are thin wrappers with no error recovery. Claude Code has per-too ~60 lines total. *** DONE Tag stack — categories + severity tiers +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-tag-stack :CREATED: [2026-05-08 Fri] @@ -1405,6 +1444,9 @@ The privacy tag filter (~dispatcher-check-privacy-tags~) is binary: a tag matche ~50 lines in ~security-dispatcher.lisp~ + ~20 lines TUI command. *** DONE Merkle provenance audit — ~/audit ~ +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-audit :CREATED: [2026-05-08 Fri] @@ -1419,6 +1461,9 @@ Every Passepartout memory object has content-addressed identity via Merkle hashi ~30 lines on existing Merkle infrastructure. *** DONE Self-help — agent can answer questions about itself +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-self-help :CREATED: [2026-05-08 Fri] @@ -1432,6 +1477,9 @@ Passepartout's documentation, source code, and state all live in the same Org fi ~30 lines for system prompt injection + ~20 lines for /help routing. *** DONE Agent identity injection — system prompt knows its own config +:LOGBOOK: +- State "DONE" from "TODO" [2026-05-08 Fri] +:END: :PROPERTIES: :ID: id-v062-agent-identity :CREATED: [2026-05-08 Fri]