Files
stack/docs/TASKS.md
Jason Woltje cfdd2b679c
Some checks failed
ci/woodpecker/push/ci Pipeline failed
chore: M1 + M2 milestones complete — 18/65 tasks done (#307)
Co-authored-by: Jason Woltje <jason@diversecanvas.com>
Co-committed-by: Jason Woltje <jason@diversecanvas.com>
2026-03-21 21:21:20 +00:00

15 KiB

Tasks — Harness Foundation

Single-writer: orchestrator only. Workers read but never modify.

agent column values: codex | sonnet | haiku | glm-5 | opus | (auto/default) Pipeline crons pick the cheapest capable model. Override with a specific value when a task genuinely needs it.

id status agent milestone description pr notes
M1-001 done sonnet M1: Persistence Wire ChatGateway.handleMessage() → ConversationsRepo.addMessage() for user messages #292 #224 closed
M1-002 done sonnet M1: Persistence Wire agent event relay → ConversationsRepo.addMessage() for assistant responses (text, tool calls, thinking) #292 #225 closed
M1-003 done sonnet M1: Persistence Store message metadata: model used, provider, token counts, tool call details, timestamps #292 #226 closed
M1-004 done sonnet M1: Persistence On session resume, load message history from DB and inject into Pi session context #301 #227 closed
M1-005 done sonnet M1: Persistence Context window management: summarize older messages when history exceeds 80% of model context #301 #228 closed
M1-006 done sonnet M1: Persistence Conversation search: full-text search on messages table via /api/conversations/search #299 #229 closed
M1-007 done sonnet M1: Persistence TUI: /history command to display conversation message count and context usage #297 #230 closed
M1-008 done sonnet M1: Persistence Verify: send messages → kill TUI → resume with -c → agent references prior context #304 #231 closed — 20 integration tests
M2-001 done sonnet M2: Security Audit InsightsRepo: add userId filter to searchByEmbedding() vector search #290 #232 closed
M2-002 done sonnet M2: Security Audit InsightsRepo: add userId filter to findByUser(), decayOldInsights() #290 #233 closed
M2-003 done sonnet M2: Security Audit PreferencesRepo: verify all queries filter by userId #294 #234 closed — already scoped
M2-004 done sonnet M2: Security Audit agent memory tools: verify memorysearch, memory_save, memoryget scope to session user #294 #235 closed — FIXED userId injection
M2-005 done sonnet M2: Security Audit ConversationsRepo: verify ownership check on findById, update, delete, addMessage, findMessages #293 #236 closed
M2-006 done sonnet M2: Security Audit AgentsRepo: verify findAccessible() returns only user's agents + system agents #293 #237 closed
M2-007 done sonnet M2: Security Integration test: create two users, populate data, verify cross-user isolation on every query path #305 #238 closed — 28 integration tests
M2-008 done sonnet M2: Security Audit Valkey keys: verify session keys include userId or are not enumerable across users #298 #239 closed — SCAN replaces KEYS, /gc admin-only
M3-001 not-started opus M3: Providers Refactor ProviderService into IProviderAdapter pattern: register(), listModels(), healthCheck(), createClient() #240 Verify Pi SDK compat
M3-002 not-started sonnet M3: Providers Anthropic adapter: @anthropic-ai/sdk, Claude Sonnet 4.6 + Opus 4.6 + Haiku 4.5, OAuth + API key #241
M3-003 not-started sonnet M3: Providers OpenAI adapter: openai SDK, Codex gpt-5.4, OAuth + API key #242
M3-004 not-started sonnet M3: Providers OpenRouter adapter: OpenAI-compatible client, API key, dynamic model list from /api/v1/models #243
M3-005 not-started sonnet M3: Providers Z.ai GLM adapter: GLM-5, API key, research API format #244
M3-006 not-started sonnet M3: Providers Ollama adapter: refactor existing integration into adapter pattern, add embedding model support #245
M3-007 not-started sonnet M3: Providers Provider health check: periodic probe, configurable interval, status per provider, /api/providers/health #246
M3-008 done sonnet M3: Providers Model capability matrix: per-model metadata (tier, context window, tool support, vision, streaming, embedding) #303 #247 closed
M3-009 not-started sonnet M3: Providers Refactor EmbeddingService: provider-agnostic interface, Ollama default (nomic-embed-text or mxbai-embed-large) #248 Dim migration
M3-010 not-started sonnet M3: Providers OAuth token storage: persist provider tokens per user in DB (encrypted), refresh flow #249
M3-011 not-started sonnet M3: Providers Provider config UI support: /api/providers CRUD for user-scoped provider credentials #250
M3-012 not-started haiku M3: Providers Verify: each provider connects, lists models, completes chat request, handles errors #251
M4-001 not-started opus M4: Routing Define routing rule schema: RoutingRule { name, priority, conditions[], action } stored in DB #252 DB migration
M4-002 not-started opus M4: Routing Condition types: taskType, complexity, domain, costTier, requiredCapabilities #253
M4-003 not-started opus M4: Routing Action types: routeTo { provider, model, agentConfigId?, systemPromptOverride?, toolAllowlist? } #254
M4-004 not-started sonnet M4: Routing Default routing rules seed data: coding→Opus, Q&A→Sonnet, summarization→GLM-5, research→Codex, offline→Ollama #255
M4-005 not-started opus M4: Routing Task classification: infer taskType + complexity from user message (regex/keyword first, LLM-assisted later) #256
M4-006 not-started opus M4: Routing Routing decision pipeline: classify → match rules → check health → fallback chain → return result #257
M4-007 not-started sonnet M4: Routing Routing override: /model forces specific model regardless of routing rules #258
M4-008 not-started sonnet M4: Routing Routing transparency: include routing decision in session:info event (model + reason) #259
M4-009 not-started sonnet M4: Routing Routing rules CRUD: /api/routing/rules — list, create, update, delete, reorder priority #260
M4-010 not-started sonnet M4: Routing Per-user routing overrides: users customize default rules for their sessions #261
M4-011 not-started sonnet M4: Routing Agent specialization: agents declare capabilities in config (domains, preferred models, tool sets) #262
M4-012 not-started sonnet M4: Routing Routing integration: wire into ChatGateway — every message triggers routing before agent dispatch #263
M4-013 not-started haiku M4: Routing Verify: coding→Opus, summarize→GLM-5, simple→Haiku, override via /model works #264
M5-001 not-started sonnet M5: Sessions Wire ChatGateway: on session create, load agent config from DB (system prompt, model, provider, tools, skills) #265
M5-002 not-started sonnet M5: Sessions /model command: end-to-end wiring — TUI → socket → gateway switches provider/model → new messages use it #266
M5-003 not-started sonnet M5: Sessions /agent command: switch agent config mid-session — loads new system prompt, tools, default model #267
M5-004 not-started sonnet M5: Sessions Session ↔ conversation binding: persist sessionId on conversation record, resume via conversationId #268
M5-005 not-started sonnet M5: Sessions Session info broadcast: on model/agent switch, emit session:info with updated state #269
M5-006 not-started sonnet M5: Sessions Agent creation from TUI: /agent new command creates agent config via gateway API #270
M5-007 not-started sonnet M5: Sessions Session metrics: per-session token usage, model switches, duration — persist in DB #271
M5-008 not-started haiku M5: Sessions Verify: /model switches model, /agent switches agent, session resume loads config #272
M6-001 not-started sonnet M6: Jobs Add BullMQ dependency, configure with Valkey connection #273 Test compat first
M6-002 not-started sonnet M6: Jobs Create queue service: typed job definitions, worker registration, error handling with exponential backoff #274
M6-003 not-started sonnet M6: Jobs Migrate summarization cron → BullMQ repeatable job #275
M6-004 not-started sonnet M6: Jobs Migrate GC (session cleanup) → BullMQ repeatable job #276
M6-005 not-started sonnet M6: Jobs Migrate tier management (log archival) → BullMQ repeatable job #277
M6-006 not-started sonnet M6: Jobs Admin jobs API: GET /api/admin/jobs — list, status, retry, pause/resume queues #278
M6-007 not-started sonnet M6: Jobs Job event logging: emit job start/complete/fail events to agent_logs #279
M6-008 not-started haiku M6: Jobs Verify: jobs execute on schedule, failure retries with backoff, admin endpoint shows history #280
M7-001 not-started opus M7: Channel Design Define IChannelAdapter interface: lifecycle, message flow, identity mapping #281 Architecture
M7-002 not-started opus M7: Channel Design Define channel message protocol: canonical format all adapters translate to/from #282 Architecture
M7-003 not-started opus M7: Channel Design Design Matrix integration: appservice, room↔conversation, space↔team, agent ghosts, power levels #283 Architecture
M7-004 not-started opus M7: Channel Design Design conversation multiplexing: same conversation from TUI+WebUI+Matrix, real-time sync #284 Architecture
M7-005 not-started opus M7: Channel Design Design remote auth bridging: Matrix/Discord auth → Mosaic identity (token linking, OAuth bridge) #285 Architecture
M7-006 not-started opus M7: Channel Design Design agent-to-agent communication via Matrix rooms: room per agent pair, human observation #286 Architecture
M7-007 not-started opus M7: Channel Design Design multi-user isolation in Matrix: space-per-team, room visibility, encryption, admin access #287 Architecture
M7-008 not-started haiku M7: Channel Design Publish docs/architecture/channel-protocol.md — reviewed and approved #288