evolution: consolidate dead ends into comprehensive final table

Removed two inline 'Dead Ends and Reversals' tables scattered mid-document.
Added single comprehensive table at the end covering all reversals from all
phases — including hooks, event ring buffer, abstractions, namespace merges,
concurrent-by-default rejection, and every other thing that was built and
then killed.
This commit is contained in:
Levi Neely 2026-08-12 21:39:53 +02:00
parent 8ead5c29e1
commit 155e4fe97b
1 changed files with 67 additions and 50 deletions

View File

@ -364,25 +364,6 @@ the remote host may have different tools, package managers, or init systems.
Streaming via blocking reads. No polling.
7. **Security by default** — sandboxed execution with explicit bypass,
per-session identity.
## Dead Ends and Reversals
| What | Why it was removed |
|------|-------------------|
| MCP servers | Too heavyweight; scripts are simpler and faster |
| TUI frontend | Replaced by `o` — a tiny shell script (40 lines of tmux) |
| s/sh, s/bfg, s/bbg | Replaced by `generate`/`complete`/`route` 9P files |
| `pl/` planning namespace | Over-engineered; plan file is sufficient |
| Beads integration | External dependency for something a checklist file handles |
| SSH agent proxy | Attack surface not worth the convenience |
| Separate ollie-dbus daemon | Consolidated into olliesrv |
| FUSE mounts | Replaced by standalone 9P client binary |
| Tier routing (FAST/POWER) | Replaced by /route endpoint with real model discovery |
| call_tool / pipe | Replaced by native tool registry with tool_load |
| execute_code (multi-lang) | Simplified to shell-only; tool scripts handle language choice |
| chatwait | Reverted; acme tails chat directly |
| Header comment metadata | Replaced by .meta sidecar JSON; decouples metadata from language |
| `contrib/` directory | Renamed to `data/`; nothing was community-contributed |
| Script namespaces (s/, u/, x/) | Replaced by 9P request-response files |
| D-Bus adapter | 9P streaming is superior; no polling, no offset tracking, no frozen GUIs |
## Phase 13: 9P Streaming & D-Bus Removal (Jul 31)
The D-Bus adapter (`org.ollie.SessionManager`) is deleted. All clients now
@ -642,37 +623,6 @@ ollie/ ← single Go module
└── doc/ ← documentation
```
## Dead Ends and Reversals (updated)
| What | Why it was removed |
|------|-------------------|
| MCP servers | Too heavyweight; scripts are simpler and faster |
| TUI frontend | Replaced by `o` — a tiny shell script (40 lines of tmux) |
| s/sh, s/bfg, s/bbg | Replaced by `generate`/`complete`/`route` 9P files |
| `pl/` planning namespace | Over-engineered; plan file is sufficient |
| Beads integration | External dependency for something a checklist file handles |
| SSH agent proxy | Attack surface not worth the convenience |
| Separate ollie-dbus daemon | Consolidated into olliesrv |
| FUSE mounts | Replaced by standalone 9P client binary |
| Tier routing (FAST/POWER) | Replaced by /route endpoint with real model discovery |
| call_tool / pipe | Replaced by native tool registry with tool_load |
| execute_code (multi-lang) | Simplified to shell-only; tool scripts handle language choice |
| chatwait | Reverted; acme tails chat directly |
| Header comment metadata | Replaced by .meta sidecar JSON; decouples metadata from language |
| `contrib/` directory | Renamed to `data/`; nothing was community-contributed |
| Script namespaces (s/, u/, x/) | Replaced by 9P request-response files |
| D-Bus adapter | 9P streaming is superior; no polling, no offset tracking, no frozen GUIs |
| `fs/session/` sub-package | Flattened into `fs/` — no more sub-package indirection |
| `cmd/olliesrv/bypass_tree.go` | Bypass tree handlers moved to `fs/bypassfiles.go` |
| Per-session/agent timestamp IDs | Replaced by UUIDv4 — immutable `id` + mutable `name` |
| Single-step session creation | Split into `session/new` + `session/{name}/agent/new` |
| D-Bus-driven KDE frontends | Rewritten on pure 9P via plan9port `9p` binary |
| Plasmoid/tray KDE components | Deleted — not useful enough to maintain |
| Built-in tool handlers (shell, reasoning_think, tool_list, tool_load, tool_active) | Replaced by external scripts loaded via 9P `agent/{id}/tools` write |
| Go-compiled tool registry in `tools/builtin/` | Zero built-in tools — all tools are external scripts with `.meta` sidecars |
| Embedded tool scripts in `ollie-remote` | Remote uses `$OLLIE_TOOLS_PATH` from environment; tools deployed via tarball over SSH |
| SSH binary transfer (gzip+base64+hash-verify) | Replaced by simple `tar | ssh` tarball of `~/.config/ollie/` |
| `toolsrv.loaded` / `toolsrv.rev` 9P files | Removed — `tools` file handles both list and load |
## Phase 18: Zero Built-in Tools (Aug 2–3)
The most radical simplification yet: **zero tools compiled into the Go binary.** Every tool — including `shell` and `reasoning_think` — is now an external script loaded dynamically through the 9P filesystem.
@ -1379,3 +1329,70 @@ The turn state machine in `turn.go` was simplified.
Commit count: ~50 commits over 2 days. Net code change: approximately -800 lines.
The system does more with less.
---
## Dead Ends and Reversals
Everything that was built and then killed, in roughly chronological order.
| What | Why it was removed |
|------|-------------------|
| MCP servers (denote-mcp, 9beads-mcp) | Too heavyweight; scripts are simpler and faster |
| TUI frontend | Replaced by `o` — a tiny shell script (40 lines of tmux) |
| `pl/` planning namespace | Over-engineered; plan file is sufficient |
| Beads integration | External dependency for something a checklist file handles |
| `plan_create` / `plan_complete` / `task_add` / `task_check` tools | Five planning iterations before settling on a single markdown file |
| SSH agent proxy | Attack surface not worth the convenience |
| Separate ollie-dbus daemon (ollied) | Consolidated into olliesrv, then killed entirely |
| D-Bus adapter (`org.ollie.SessionManager`) | 9P streaming is superior; no polling, no offset tracking, no frozen GUIs |
| D-Bus-driven KDE frontends | Rewritten on pure 9P via plan9port `9p` binary |
| Plasmoid / tray KDE components | Not useful enough to maintain |
| FUSE mounts | Replaced by standalone 9P client binary; FUSE can't do blocking reads |
| Tier routing (FAST/POWER) | Replaced by `/route` endpoint with real model discovery |
| call_tool / pipe | Replaced by native tool registry with `tool_load` |
| execute_code (multi-language) | Simplified to shell-only; tool scripts handle language choice |
| chatwait | Reverted; acme tails `chat` directly |
| Header comment metadata (`ollie:prompt`, `ollie:tier`, `args_json:`) | Replaced by `.meta` sidecar JSON; decouples metadata from language |
| `contrib/` directory | Renamed to `data/`; nothing was community-contributed |
| Script namespaces (s/, u/, x/) | Replaced by 9P request-response files |
| s/sh, s/bfg, s/bbg | Replaced by `generate`/`complete`/`route` 9P files |
| `agent.Core` interface | Nobody else implemented it; just indirection |
| `Dispatcher` indirection in toolsrv | `toolsrv.Server` called directly |
| `execute/` package | Merged into `tools/`; 3 functions didn't need a package |
| `mgr/` package (Manager struct) | Replaced by package functions; `*fs.Tree` IS the collection |
| `fs/session/` sub-package (6 files, ~3,100 lines) | Flattened into `fs/` — no more sub-package indirection |
| `cmd/olliesrv/bypass_tree.go` | Bypass tree handlers moved to `fs/bypassfiles.go` |
| Per-session/agent timestamp IDs | Replaced by UUIDv4 — immutable `id` + mutable `name` |
| Single-step session creation | Split into `session/new` + `session/{name}/agent/new` |
| Imperative filesystem (stat/walk/read/write per node) | Replaced by declarative EDSL (`fsedsl/`) |
| Event ring buffer (100-slot circular buffer + sync.Cond) | Lasted one day; replaced by `pubsub` library. Off-by-one bugs, race conditions, panics. |
| Built-in tool handlers (shell, reasoning_think, tool_list, tool_load, tool_active) | Replaced by external scripts loaded via 9P `agent/{id}/tools` write |
| Go-compiled tool registry in `tools/builtin/` | Zero built-in tools — all tools are external scripts with `.meta` sidecars |
| Embedded tool scripts in `ollie-remote` | Remote uses `$OLLIE_TOOLS_PATH` from environment; tools deployed via tarball |
| SSH binary transfer (gzip+base64+hash-verify) | Replaced by simple `tar | ssh` of `~/.config/ollie/` |
| `toolsrv.loaded` / `toolsrv.rev` 9P files | Removed — `tools` file handles both list and load |
| `cmd/Ollie` (Acme frontend binary) | Replaced by `o` CLI composing acme |
| `mount/` package | FUSE mount replaced by `ollie-9p` direct 9P client |
| `ollie-watchdog` script | No FUSE stale mount issues with 9P client |
| `doc/experiments/` | Historical experiments; moved to git history |
| `doc/help.md` | Generated dynamically from `Doc()` strings in spec |
| Hooks system (agentSpawn, preTurn, postTurn, preTool, postTool, preCompact, postCompact, turnError) | Never solved real problems; prompt handles init, sandbox handles security, retry handles errors |
| `backend/noop.go` (test backend) | Never used; tests use real backends or mocks |
| `backend/oneshot.go` | Never used; `generate` file handles one-shot |
| `toolsrv/schema.go` (schema validation) | Never enabled |
| `data/tools/route.meta` (model routing tool) | Replaced by explicit `/model` commands |
| TaskState subsystem | Removed entirely (−246 lines); no use case survived |
| `fifo.in` + `fifo.out` | Merged to single `fifo` (write=enqueue, read=dequeue) |
| `cost` + `usage` + `ctxsz` files | Merged to `stats` (key=value lines) |
| `connection`, `context`, `tail`, `offset`, `prompt.prev` agent files | Removed or moved to ctl |
| AllowTools field | Tools loaded dynamically; static allowlists served no purpose |
| PRIME_* env vars | Replaced by typed `Platform` + `IsGitRepo` fields |
| `elevate` naming | Renamed to `bypass` throughout |
| In-process toolsrv (Go library) | Replaced by separate 9P server process with socket boundary |
| Binary ReadOnly/not tool batching | Replaced by scope-based conflict scheduling (read/write/global) |
| `AgentLog` / `SessionNode` / `RootState` abstractions in fs/ | Eliminated; state moved to where data lives (agent/, session/) |
| Named sandbox profiles (default, restricted, remote) | One config: `sandbox.yaml`. Multi-profile system was unused complexity |
| `TurnCtx` struct | Eliminated; loop functions became methods on `*Agent` |
| Bypass via custom Unix socket protocol | Replaced by bypass via 9P namespace |
| Concurrent-by-default tool execution | Rejected: turns one reasoning step into N generation cycles with partial info — sequential but slower and more expensive |