agharsallah
feat: add Fishbowl UI ADR and implementation plan for Gradio presenter layer
a13e4e8
|
Raw
History Blame Contribute Delete
4.28 kB
# Roadmap
> **Reprioritization:** a senior-architect review of the current tree β€”
> [next-steps/architecture-review-and-next-steps.md](next-steps/architecture-review-and-next-steps.md) β€”
> argues for a short correctness + observability sprint (real cross-agent
> visibility, tool/causality events) *before* resuming the reach-oriented phases
> below. To add a world, see [scenario-authoring.md](scenario-authoring.md).
Legend: βœ… done Β· ◐ foundations built, depth remaining Β· β—‹ planned
## Phase 0: Foundation βœ…
Gradio shell, in-memory append-only ledger, deterministic tiny agents, docs spine
(vision, ADR-0001–0004, schema, runbooks), build-journal automation.
## Phase 1: Memory + Second Scenario βœ…
EpisodicMemory, ContextBuilder, Governor (call caps), OpenAI-compatible provider,
Mystery Roots scenario, two-scenario Gradio UI, ADR-0005–0008.
## Phase 2: Reflection + Structured Output βœ…
- `ReflectionTracker` wired into `ManifestAgent.act()` β€” emits `agent.reflected`.
- `agent.reflected` is a first-class kind; rendered as a belief in the projection.
- JSON constraint block in every agent prompt; `_raw_fallback` rate shown in stats.
- All shipped agents converted from `Agent` to manifest-driven config.
- `output_extra_fields` shapes per-scenario payloads.
## Phase 3: Persistence + Memory ◐
- βœ… `SQLiteLedger` (WAL, idempotent, `snapshot_to`, `from_file`, `tail`).
- βœ… `Conductor.restore()` + `snapshot_every`; `scripts/resume_run.py`.
- β—‹ Embedding-based relevance in `SalienceMemory` (still keyword overlap).
- β—‹ pgvector upgrade path for episodic retrieval at scale.
## Phase 4: Declarative Config + Tools βœ… (live MCP β—‹)
- βœ… YAML manifests + scenario configs + `models.yaml` under `config/`.
- βœ… `src/core/registry.py`: loader, cast resolution, handler binding.
- βœ… `WorldConfig` + `validate_world/agent/scenario` (UI/LLM-generatable, ADR-0011).
- βœ… Capability-checked `ToolRegistry` + `oracle` tool + `oracle-grove` scenario (ADR-0012).
- βœ… `tests/test_modularity.py`: new agent + scenario, zero engine edits.
- β—‹ Live MCP servers (image-gen, web-fetch) behind the same tool contract.
## Phase 5: Long-Running + Durable Execution ◐
- βœ… Token-aware Governor (`max_total_tokens`, `hourly_budget_usd`); per-agent
token metering (ADR-0013).
- βœ… Two-clock `step(n_ticks=N)`; ledger-as-checkpoint resume.
- ◐ Serverless deploy: `modal_app.py` (scheduled run on a persistent volume).
- β—‹ Wall-clock cron + episode export (`scripts/export_episode.py`).
- β—‹ Temporal / Inngest durable wrapper; OpenTelemetry tracing; cost telemetry hook.
## Phase 6: Illustrated Serial (Third Scenario) β—‹
Draft→critique→revise creative loop on a wall-clock cadence; Artist agent backed by
an image-gen MCP tool; episode gallery. Proves modularity across a third
structurally different scenario. (`oracle-grove` already proves a tool-using cast.)
## Phase 7: Submission Package β—‹
UI polish, frozen demo seed + recorded run, social post, Codex judge rubric pass,
`_raw_fallback` < 10% with a live model, submit.
The UI-polish track is the **Fishbowl** redesign β€” a two-tab `gr.HTML` theater over the
ledger (Lab + Show, with the say-vs-think MindCard): see
[ADR-0021](../adr/0021-fishbowl-ui-gradio-presenter.md) and
[next-steps/fishbowl-ui.md](next-steps/fishbowl-ui.md).
---
## What is built right now
The four stable contracts are realized **and exercised**: open event schema,
ledger API (memory + SQLite), declarative agent manifest, capability tool
contract. Per-agent small-model routing, declarative validatable config, the
modularity-invariant test, and long-running foundations (resume, snapshot, token
budget, two-clock) are all in and green.
## Architecture stability guarantee
The four contracts are frozen; additions only:
1. **Event schema** (`src/core/events.py`) β€” new kinds are additive by construction.
2. **Ledger API** (`src/core/ledger.py`) β€” interface, not implementation.
3. **Agent manifest** (`src/core/manifest.py`) β€” backward-compatible additions only.
4. **Tool contract** (`src/tools/registry.py`) β€” capability contract, not implementation.
Everything else β€” scenarios, agents, models, UI, persistence backend, tools β€” is
hot-swappable via `config/`.