literate: add org sources for orphan test files, update README

- Create org/integration-tests.org (15 blocks, per-test prose)
- Add Markdown tests section to org/markdown-renderer.org (11 test blocks)
- Delete deprecated src/components/input-tests.lisp stub
- Update README.org: tree diagram, literate programming section,
  development commands, remove stale test counts

All 13 test suites pass at 100%. Zero .lisp files without org origin.
This commit is contained in:
Hermes Agent
2026-05-12 19:01:22 +00:00
parent 29f99a576d
commit a9670a5cd7
6 changed files with 923 additions and 77 deletions

View File

@@ -309,7 +309,7 @@ Result is cached in ~*detected-backend*~.
* Development
#+BEGIN_SRC bash
# Run all tests (483 checks, 13 suites)
# Run all tests
sbcl --script run-all-tests.lisp
# Run interactive demo
@@ -317,13 +317,18 @@ sbcl --script demo.lisp
# Tangle org files (regenerate .lisp from .org sources)
python3 ~/.hermes/skills/software-development/org-babel-tangle/scripts/tangle.py org/*.org
# Verify syntax of all tangled files
for f in src/**/*.lisp tests/*.lisp; do
sbcl --eval "(with-open-file (s \"$f\") (loop for e = (read s nil s) until (eq e s)))" \
--eval "(format t \"~a: OK~%\" \"$f\")" --quit 2>/dev/null
done
#+END_SRC
Literate programming: ~.org~ files in ~org/~ are the source of truth for
the input system, scrollbox/tabbar, dialog, mouse, select, slot,
framebuffer, and markdown modules. The backend (~modern.lisp~,
~simple.lisp~) and basic components (~box.lisp~, ~text.lisp~, ~render.lisp~,
~theme.lisp~, ~dirty.lisp~) are written directly.
Literate programming: every ~.lisp~ file in ~src/~ and ~tests/~ is a generated
artifact from an ~.org~ file in ~org/~. The org files are the source of truth.
Each function has its own code block with prose explaining the design reasoning.
Delete every ~.lisp~ file and they can all be regenerated by tangling the org files.
Project structure:
@@ -332,46 +337,51 @@ cl-tty/
├── cl-tty.asd # ASDF system definition
├── demo.lisp # Interactive demo
├── run-all-tests.lisp # Test runner
├── src/backend/ # Backend protocol + implementations
│ ├── package.lisp
│ ├── classes.lisp # Generic definitions
│ ├── simple.lisp # ASCII fallback backend
│ ├── modern.lisp # Truecolor escape backend
│ └── detection.lisp # Auto-detect backend from env
├── src/layout/ # Flexbox layout engine
│ └── layout.lisp
├── src/
│ ├── rendering/ # Framebuffer backend + diff + flush
│ ├── backend/ # Backend protocol + implementations
│ │ ├── package.lisp, classes.lisp
│ │ ├── simple.lisp, modern.lisp
│ │ └── detection.lisp
│ ├── layout/ # Flexbox layout engine
│ │ └── layout.lisp
│ ├── rendering/ # Framebuffer diffing pipeline
│ │ └── framebuffer.lisp
│ └── components/ # Widgets
│ ├── box.lisp, text.lisp, render.lisp, theme.lisp
│ ├── dirty.lisp, input-package.lisp, input.lisp
│ └── components/ # Widget library
│ ├── package.lisp, dirty.lisp, render.lisp, theme.lisp
│ ├── box.lisp, text.lisp
│ ├── input-package.lisp, input.lisp
│ ├── text-input.lisp, textarea.lisp, keybindings.lisp
│ ├── scrollbox.lisp, tabbar.lisp, container-package.lisp
│ ├── select.lisp, select-package.lisp
│ ├── markdown.lisp, markdown-package.lisp
│ ├── dialog.lisp, dialog-package.lisp
│ ├── mouse.lisp, mouse-package.lisp
│ └── slot.lisp, slot-package.lisp
├── tests/ # Test files
├── org/ # Literate source files
│ ├── container-package.lisp, scrollbox.lisp, tabbar.lisp
│ ├── select-package.lisp, select.lisp
│ ├── markdown-package.lisp, markdown.lisp
│ ├── dialog-package.lisp, dialog.lisp
│ ├── mouse-package.lisp, mouse.lisp
│ └── slot-package.lisp, slot.lisp
├── tests/ # FiveAM test files
│ ├── input-tests.lisp, scrollbox-tabbar-tests.lisp
│ ├── select-tests.lisp, markdown-tests.lisp
│ ├── dialog-tests.lisp, mouse-tests.lisp, slot-tests.lisp
│ ├── framebuffer-tests.lisp, integration-tests.lisp
│ ├── box-tests.lisp, dirty-tests.lisp, render-tests.lisp
│ └── theme-tests.lisp
├── org/ # Literate source (all .lisp files come from here)
│ ├── package.org, dirty.org, render.org, theme.org
│ ├── box-renderable.org
│ ├── text-input.org
│ ├── scrollbox.org
│ ├── tabbar.org
│ ├── container-package.org
│ ├── scrollbox.org, tabbar.org, container-package.org
│ ├── select.org
│ ├── markdown-renderer.org
│ ├── dialog.org
│ ├── mouse.org
│ ├── select.org
│ ├── slot.org
│ ├── backend-protocol.org, modern-backend.org, detection.org
│ ├── layout-engine.org
│ ├── framebuffer.org
── markdown-renderer.org
│ ├── detection.org
│ ├── modern-backend.org
── box-renderable.org
│ └── layout-engine.org
└── docs/
├── ROADMAP.org # Versioned roadmap
└── ARCHITECTURE.org # Design docs
── integration-tests.org
├── docs/
│ ├── ROADMAP.org
── ARCHITECTURE.org
└── demo/ # Demo assets (optional)
#+END_EXAMPLE
* License