Files
tai/research/INDEX.md
T
retoorandClaude Sonnet 5 9dbd1fe667 Add plexer subsystem, container test infra, and last-resort opencode box backend
- Plexer: always-active terminal multiplexing. NativePlexerController/
  TmuxPlexerController share one interface, chosen by which env var is
  already set (TAI_PLEXER_SOCKET vs TMUX_PANE); NativePlexerBackend is
  the pty.fork()-based wrapper (raw mode, SIGWINCH resize forwarding,
  a Unix-socket control protocol, continuous session logging, a
  Ctrl+A prefix key distinct from tmux's own Ctrl+B). Auto-wraps new
  interactive shells via a .bashrc hook mirroring the existing
  command-not-found install pattern, gated on $TMUX/$TAI_PLEXER_ACTIVE/
  a $HOME/.tai-no-plexer bypass. New plexer_send/read/type/status
  tools, env-gated on a detected controller.
- tests/container.py + docker-compose.yml + tests/docker/Dockerfile:
  a disposable podman/docker image for the tests that must never touch
  a real machine (installing the plexer hook into a real ~/.bashrc, a
  live tmux session). Required suite (test_seal.py, test_tai.py,
  tests/plexer.py, tests/bashrc.py) gates the result; tests/rag.py
  runs as best-effort since its real-LLM dependency can't be satisfied
  inside a disposable container with no nested engine.
- tests/bashrc.py: real end-to-end hook install + bash -i auto-wrap,
  anti-recursion, tmux-active skip, non-interactive skip, a live
  TmuxPlexerController test, and an install/uninstall round-trip.
- tests/plexer.py: NativePlexerBackend under a real pty, plus a
  dedicated robustness pass (file permissions, >64KB payload framing,
  a malformed control request, a genuine self-deadlock fix in the
  write-to-child path).
- tai_test.py: the shared async process-driving framework (pipe/pty
  transport, group-wide kill-and-reap, a StdinBridge for --interactive)
  both test files build on.
- ChatClient last-resort backend: when there's no local opencode CLI
  but the sandbox box is already running, install opencode into it
  (official Node tarball, not apt -- apt's nodejs/npm pull in
  webpack/babel/jest as transitive deps) and route through it instead
  of giving up. Only reachable after the first retry round already
  failed everything else; never creates the box itself. TmuxPlexerController.status()
  fixed to use `list-panes` instead of `display-message -p`, which
  silently fell back to the default pane instead of erroring against
  a dead target.
- Fix 4 pre-existing test_tai.py bugs surfaced by running it in a
  clean environment for the first time: two stale mock signatures
  (subprocess.run's stdout= kwarg, Chat.complete's deadline= kwarg),
  one $TMUX-dependent catalog assertion, one tty-dependent color
  assertion.
- research/: a sourced research archive (Source Dossier/Citation
  Card/Conclusion tiers) backing the above design decisions, with its
  own audit.py consistency checker.
- .gitignore: fix a blanket *.md rule that was about to silently drop
  the entire research/ archive from version control; add __pycache__/
  and the one-off debug transcript this session started from.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-10 04:36:05 +02:00

4.9 KiB

Research Archive Index

Molodetz Institute — Research & Retrieval Division. This is the living registry of every subject in research/. It is updated in the same pass as any new research, per the standing rule in README.md §4. Never edit a subject's documents without also updating its row here.

Global statistics

Metric Value
Subjects 4
Total source documents 225
— Tier 1 (Source Dossier, independently analyzed) 84
— Tier 2 (Source Citation Card, listed only) 141
Total conclusion documents 4
Archive opened 2026-10-09
Last updated 2026-10-09

Subjects

Subject Sources (T1 / T2) Conclusions Opened Last updated Driving task
sqlite-rag-hybrid-search 32 (10 / 22) 1 2026-10-09 2026-10-09 Designing tmux-log export + chunked retrieval; settled on BM25-only, no vector DB
agent-memory-recency-tracking 63 (16 / 47) 1 2026-10-09 2026-10-09 Designing an LRU-style last-used/use-count tracker for vault records and chunks
async-pty-process-testing 59 (20 / 39) 1 2026-10-09 2026-10-09 Designing tai_test.py (pty vs. pipes, non-blocking stdin, process-group cleanup, test-framework shape) — backfilled after it was initially skipped, see activity log
shell-multiplexer-auto-attach 71 (38 / 33) 1 2026-10-09 2026-10-09 Designing a tai-managed terminal multiplexer + bashrc auto-attach: tmux-as-substrate recommendation, interactive-vs-automation shell detection

Recent activity log

Date Subject Event
2026-10-09 — Archive created: specification (README.md), index (this file), and both subjects above backfilled from the day's research in full, per explicit instruction to retroactively capture every source consulted that day.
2026-10-09 sqlite-rag-hybrid-search 32 sources (10 Tier 1 / 22 Tier 2) + 1 conclusion recorded (the conclusion: pure SQLite FTS5/BM25 chunked search, deliberately no embeddings/vector DB — see conclusions/). Counts verified directly against the written files, not taken from the authoring agent's self-report.
2026-10-09 — Spec change: Tier split into its own standalone metadata row (1 / 2 / N/A) instead of a parenthetical inside Document type, so it's directly filterable. All 97 existing documents across both subjects backfilled to match in the same pass; counts re-verified afterward (unchanged: 26 Tier 1, 69 Tier 2, 2 Conclusions).
2026-10-09 agent-memory-recency-tracking 63 sources (16 Tier 1 / 47 Tier 2) + 1 conclusion recorded (the conclusion: last_used/use_count tracking proposal for records and chunks, throttled-write pattern, no eviction policy yet — see conclusions/). One source (glama-code-index-mcp-bm25-hybrid.md) was promoted from the originally-planned Tier 2 to Tier 1 by the authoring agent mid-task because it contained specific attributable numeric findings — exactly the judgment call §3 of README.md calls for, logged here rather than silently absorbed. Counts verified directly against the written files.
2026-10-09 async-pty-process-testing New subject, opened as a correction: the eight WebSearch calls behind tai_test.py's design (pty vs. pipes, non-blocking stdin, process-group cleanup, test-framework patterns) were initially skipped from the archive under the reasoning "informal engineering reference, not a design decision" — a silent, unilateral exception to the Research Rule, and wrong (see README.md §4's added "no exception, ever" paragraph). Backfilled: 59 sources (20 Tier 1 / 39 Tier 2) + 1 conclusion (conclusions/tai-test-framework-design.md). Counts verified directly against the written files via research/audit.py, not taken from the authoring agent's self-report alone. A PostToolUse/WebSearch hook (.claude/settings.json) was also added the same day specifically to stop this from recurring.
2026-10-09 shell-multiplexer-auto-attach 71 sources (38 Tier 1 / 33 Tier 2) + 1 conclusion recorded (the conclusion: build on tmux as a substrate rather than a from-scratch multiplexer; reliable human-vs-automation shell detection has no single solution, only a combination of weaker signals plus a safety-file escape hatch). Counts verified directly against the written files via research/audit.py. Hook fired correctly for all 8 underlying WebSearch calls during this task.

How to use this index

  • Before starting new research, search this table for an existing subject before opening a new one (see README.md §2, "one subject, one home").
  • Every subject folder is self-contained: its sources live flat inside it, its conclusions live in its conclusions/ subfolder.
  • Tier 1 vs Tier 2 is a statement about how deeply a source was actually read, not about its importance — see README.md §3 for the exact distinction.