Things found along the way that we are not dealing with right away. This keeps the ROADMAP focused on planned work and the ADRs focused on decisions, while making sure incidental findings aren't lost.
How to use: when you discover something out of scope for the current task, add a line here instead of expanding the task. Each item: a short title, one line of context, where it was found, and a rough priority (P1 = soon / P2 = eventually / P3 = nice-to-have). Pull items into the ROADMAP when they're ready to be scheduled; delete them when done or obsolete.
Larger deferred concerns already tracked live in the ROADMAP's open-question β slice map and in the ADRs; this file is for the smaller stuff that doesn't have a home there yet.
- Starlette/httpx TestClient deprecation warning β tests emit "Using
httpxwithstarlette.testclientis deprecated; installhttpx2instead." Harmless, but noisy. Pin/upgrade once the ecosystem settles. (Slice 1, P3) - CI doesn't type-check
tests/βmypy -p panopticoncovers the package only. Consider addingmypy tests(needs path/namespace config). (Slice 1, P3) -
advanced_byis declared but not engine-enforced β a state'sadvanced_by(USER/AGENT) is queryable metadata; the engine doesn't yet use it to decide who may trigger a transition, nor is there a per-transition auto-advance flag. Wire it when the agent runtime needs it (around the parity workflow, Slice 4). (Slice 1, P2) - No schema migrations β the SQLAlchemy adapter creates tables with
metadata.create_all; there's no versioning/upgrade path. Add Alembic (or equivalent) before the schema ships anywhere with data to preserve. (Slice 1, P2)
- Runnable task-service entrypoint β there's no
uvicorn-runnable server + config (host/interface, DB path, artifact root, workflow path). Tests drivecreate_appin-process. Needed before Slice 2/3 can run for real. (Slice 1, P1) - Workflow path-based registration β workflows are injected as a dict today; ADR 0004/0006 specify loading from a registered path at startup (ROADMAP Slice 7). (Slice 1, P2)
- MCP server implementation β only the surface contract (
taskservice/mcp.py) exists; the running server lands when real containers connect (ROADMAP Slice 2). (Slice 1, P2) - Liveness staleness/expiry β registrations track
last_seenbut nothing expires stale ones or detects a lost container (heartbeat timeout/TTL). Needs a small design. (Slice 1, P2) - Registrations are in-memory β lost on task-service restart; no reconciliation with live containers on reconnect (relates to ADR 0008 failure-handling). (Slice 1, P2)
- Slug-addressable artifacts β once a task has a
slug, bothtasks/{task_id}/artifacts/{name}andtasks/{slug}/artifacts/{name}should resolve to the same artifact (slug as an alias for the id on the artifact routes). (Slice 1, P3)
- Artifact concurrency / drift detection β ADR 0003 / ROADMAP open-questions.
- At-rest secret protection & remote delivery β ADR 0007 / M5.
- Runner registration/discovery, inter-process auth, restart reconciliation β ADR 0008 / M5.
- Image matrix, registry storage, rebuild triggers, layer order β ADR 0005 / M5.