Files
stack/docs/tess/TASKS.md

19 KiB

Tasks — Tess Interaction Agent

Mission: tess-20260712 · Issue: #706 · PRD requirements: TESS-* Orchestrator is sole writer. Workers must not modify this file. repo contains one or more comma-separated repository-relative roots; every listed root must exist before dispatch. BASE CONVENTION (Mos-locked 2026-07-12): EVERY M1 dispatch targets base=main and branches from fresh origin/main. Do NOT base on feat/tess-interaction-agent — that is the STALE planning branch (merged via #712); basing on it yields mergeable=False + intervening-commit noise (cf. #723/SEC-005 re-base). Every dispatch brief must state base=main + branch-from-origin/main.

id status description issue agent repo branch depends_on estimate notes
TESS-PLAN-001 done Finalize PRD, architecture, authority boundary, threat model, migration inventory, and verification matrix #706 sonnet docs, packages/types, apps/gateway feat/tess-interaction-agent 22K Independent gate PASS after two remediation rounds; completion effective when planning PR merges
TESS-M1-SEC-001 done Enforce command scopes/roles and durable exact-action approval for privileged/destructive commands #707 codex apps/gateway fix/tess-command-authz TESS-PLAN-001 25K TESS-SEC-002; diskhygiene-terra; PR #718 head e3d98d73 MERGED (ROR 16829)
TESS-M1-SEC-002 done Enforce owner/tenant binding on session list/read/attach/send/terminate across REST and WS #707 codex apps/gateway fix/tess-session-ownership TESS-PLAN-001 30K TESS-SEC-003; coder0; PR #715 head 43ffbe7b MERGED (ROR 16808)
TESS-M1-SEC-003 done Bind MCP actor/tenant to authenticated context and add per-tool scopes #707 codex apps/gateway fix/tess-mcp-identity TESS-PLAN-001 22K TESS-SEC-004; coder1; PR #717 head 9ab776f9 MERGED (ROR 16819)
TESS-M1-SEC-004 done Add authenticated Discord service ingress, allowlists, correlation and replay protection #707 codex plugins/discord, apps/gateway fix/tess-discord-ingress TESS-PLAN-001 28K TESS-SEC-005; coder4; PR #716 head 55ae77b6 MERGED (ROR 16830)
TESS-M1-SEC-005 done Redact/classify secret and PII before persistence/egress; harden provider login flow #707 codex apps/gateway, packages/log fix/tess-redaction TESS-PLAN-001 28K TESS-SEC-006; coder1 (Mos-routed from blocked wrapfix-terra); mis-based #723 CLOSED superseded. MERGED to main: PR #725 head 726f7ab7 (ROR 16880). Verified chat persistence + egress redaction hooks; canary tests split-secret/private-key/overflow/persistence classification; provider login no auth URL/raw token in chat output
TESS-M1-SEC-006 done Scope session GC/retention or separate authorized global retention job #707 codex apps/gateway, packages/log fix/tess-session-gc-scope TESS-PLAN-001 18K TESS-SEC-009; coder4; PR #720 base=main. MERGED to main: head 37be090e (ROR 16861). Both blockers fixed: glob metachar sessionIds escaped+regression; durable approval survives GC pass (create→GC→key remains→authz succeeds); /gc disabled, per-session log demotion, no fullCollect/sweepOrphans entry, legacy repeatable GC schedule removed
TESS-M1-001 done Define AgentRuntimeProvider, capabilities, session tree, normalized stream events/errors, attach semantics #707 codex packages/types, packages/agent feat/tess-runtime-contract TESS-PLAN-001 25K TESS-ARP-001, TESS-TRN-001; wrapfix-terra; PR #719 head 5c42e67f MERGED (ROR 16813)
TESS-M1-002 done Implement provider registry/service with immutable actor scope, approval, audit and correlation boundaries #707 codex apps/gateway, packages/agent feat/tess-provider-registry TESS-M1-001,TESS-M1-SEC-001,TESS-M1-SEC-002,TESS-M1-SEC-003 30K TESS-SEC-001..004,007; coder0; PR #722 head c529022d MERGED (ROR 16849)
TESS-M1-003 done Implement tmux/fleet runtime provider and safe attach/message/terminate capability policy #707 codex packages/mosaic, packages/agent feat/tess-fleet-provider TESS-M1-002 30K TESS-FLT-001; coder0; PR #724 base=main. MERGED to main: head 355d814f (ROR 16868). HARD BOUNDARY verified: writes/control default-deny before tmux probing unless write authority permits; final exact-target authz after roster/socket/runtime verification; exact target/prefix/runtime-drift tests; read-only attach with immutable scope handles; empty-msg/default-deny/unverified-target tests; no credential material
TESS-M1-OBS-001 done Implement correlation propagation, structured runtime/provider/tool audit, health/readiness and safe effective-policy status #707 codex apps/gateway, packages/agent, packages/log feat/tess-observability-terra TESS-M1-002 24K TESS-OBS-001; SOLE owner=diskhygiene-terra. MERGED to main at REBASED head: PR #726 head 53f5414 (re-ROR comment 16886, prior 16881@adfa5c06 discarded after head move), CI 1723 green. Both @mosaicstack/log barrel exports coexist (redaction + runtime-audit), metadata-only/SHA-256 audit intact, fail-closed audit-before-side-effects intact, safe status/effective-policy/readiness
TESS-M1-V done Independent architecture/security review and complete contract/abuse-suite verification #707 mos-reviewer apps/gateway, packages/agent, packages/log, plugins/discord review/tess-m1 TESS-M1-SEC-001,TESS-M1-SEC-002,TESS-M1-SEC-003,TESS-M1-SEC-004,TESS-M1-SEC-005,TESS-M1-SEC-006,TESS-M1-003,TESS-M1-OBS-001 20K Gate M2 = PASS (Mos-owned independent non-author reviewer, 2026-07-12): all 5 priority seams verified live, 60+ tests green. M2 (#708) OPEN. Orchestrator did NOT run a competing lane (prior reviewer-lane dispatch recalled). Non-gating follow-up from this review captured as TESS-M1-FUP-001 (execute() authz-error mis-classification), scheduled to land before/with TESS-M3-001 — not now
TESS-M1-FUP-001 not-started RuntimeProviderService.execute() records provider-thrown authorization errors as failed/provider_error instead of denied/policy_denied #707 apps/gateway, packages/agent 6K NON-GATING follow-up from M1-V review (2026-07-12). Provider-thrown authz errors (e.g. FleetRuntimeProviderError 'forbidden' from M1-003 write-authority) mis-classify as outcome:'failed'/'provider_error' rather than 'denied'/'policy_denied'. Low-priority. Land BEFORE/WITH TESS-M3-001 fleet-provider registry wiring (#709), NOT now
TESS-M2-001 done Add Tess roster/profile/service pinned to GPT-5.6 Sol high with fail-fast config and observable effective policy #708 coder0 packages/mosaic feat/tess-pi-service TESS-M1-V 22K TESS-PI-001; AC-TESS-03. Mos-dispatched directly to coder0. MERGED to main by Mos (2026-07-12): PR #728 head c58e86e2, ROR comment 16905, CI 1728 green. NAME-AS-CONFIG invariant VERIFIED — identity via MOSAIC_AGENT_NAME/%i/roster data, no hardcoded tess identity in impl/service/schema/tool, Tess example-only; Nova distinct-name zero-code-change provisioning test; GPT-5.6 Sol high fail-fast; credential-safe effective-policy output; no live credential material
TESS-M2-002 done Implement durable session identity, inbox/outbox, approval, checkpoint, handoff, compaction and restart recovery #708 coder0 apps/gateway, packages/agent, packages/db feat/tess-durable-state TESS-M2-001 38K TESS-STA-001, TESS-SEC-007..008; recovery TDD. Mos-dispatched directly to coder0 (2026-07-12) — orchestrator tracks, no competing lane. Branch feat/tess-durable-state from fresh origin/main e3b5113b; first recovery TDD packages/agent/src/tess-durable-session.test.ts; reuses existing provider registry + durable approval store. base=main, PR-open-STOP, independent non-author ROR then Mos merges. Next gate after merge = TESS-M2-V (M2→M3 review). PR #729 OPEN (feat(tess): persist durable session state; base=main, mergeable=true, head 102a7b606b); coder0 pnpm turbo typecheck/lint/test --force 88/88 cold-cache + format green + Codex code/security remediated; scope = durable identity/inbox-outbox idempotency/immutable checkpoints/portable handoffs/PGlite close-reopen recovery/exact one-time approvals/sealed-redacted payloads/scoped dispatch. ROR routed to reviewer lane (non-author) at exact head 102a7b60. CHANGES REQUESTED (reviewer comment 16917 @102a7b60, CI pipeline 1730 RED) — 3 blockers routed to coder0: (1) CI red: gateway PGlite close/reopen durable recovery test TIMEOUT; (2) idempotency compares REDACTED payloads so distinct secrets collapse/collide — key must be over pre-redaction canonical identity; (3) durable schema/approval NAMESPACE hardcoded to tess, violates name-as-config — must derive from configured agent name (Nova zero-code-change). coder0 remediating; head will move → re-ROR required at new exact head. REMEDIATED + re-pushed: new head 444988d23b — (1) recovery suite uses one shared PGlite fixture, close/reopen AC completes ~0.5s (was 30s timeout); (2) pre-redaction SHA-256 payload digest added to idempotency conflict checks (distinct secrets no longer collapse); (3) hardcoded tess durable DB objects/approval prefix replaced with generic interaction naming + agent-bound approval namespace. push-hook typecheck/lint/format green; CI pipeline 1731 GREEN on new head 444988d2. Head confirmed unchanged at green SHA; re-ROR routed to reviewer (non-author) at exact head 444988d2 — prior REQUEST CHANGES 16917 void at old head. RE-ROR = REQUEST CHANGES (reviewer comment 16925 @444988d2; CI 1731 green + recovery test passes 1515ms not skipped). 2 residual payload-digest blockers routed to coder0: (1) CHECKPOINT idempotency still collapses — pre-redaction digest fix reached inbox/outbox but NOT checkpoint path; distinct sensitive checkpoint payloads under same sessionId+checkpointId collapse; needs pre-redaction digest column on checkpoint conflict check; (2) digest is UNKEYED plaintext SHA-256 over sensitive payloads → allows offline plaintext confirmation; switch to KEYED HMAC-SHA256 with config-sourced fail-fast secret (never hardcoded/logged), applied to inbox/outbox + checkpoint. coder0 remediating; head will move → re-ROR at new exact head. ROUND-2 REMEDIATED + pushed: new head cbdc38af95 — checkpoint now persists pre-redaction HMAC digest; inbox/outbox switched to VERSIONED HMAC; distinct-secret + delimiter-collision regressions added; migration safe for pre-existing checkpoint rows and legacy checkpoints FAIL CLOSED (cannot prove original payload); Codex security review no findings; format/diff green, PGlite recovery executes 1.765s. CI pipeline 1732 TERMINAL GREEN (success) on cbdc38af. RE-ROR = APPROVE — canonical VERIFIED APPROVE reviewer-of-record [W-jarvis:reviewer] head cbdc38af95 (visible Gitea comment 16933). Head confirmed unchanged at ROR target + PR mergeable=true. Reviewer verified checkpoint HMAC digest + collision regressions, recovery no-duplicate-side-effect, sealed/redacted at-rest payloads, scoped dispatch, agent-bound generic namespace; CI 1732 steps ci-postgres/install/sanitization/typecheck/lint/format/test all green; no merge by reviewer (pr-review wrapper self-approve blocked → recorded as verified PR comment). MERGED to main by Mos — merge_commit 99a2d0fc, final APPROVE at head cbdc38af (3-round reviewer loop 16917→16925→16933). M2 build phase CONVERGED (M2-001 #728 + M2-002 #729). TESS-M2-V (M2→M3 gate, AC-TESS-03/06) now running as Mos-owned independent Sonnet reviewer (same arrangement as M1-V) — orchestrator does NOT launch a competing review lane; Mos reports verdict. On M2-V PASS, M3 (#709) tasks TESS-M3-001/002 unblock.
TESS-M2-V done Clean-host Pi launch plus model/policy status and restart/compaction/duplicate-side-effect verification #708 mos-reviewer apps/gateway/src/tests/integration, packages/mosaic/src review/tess-m2 TESS-M2-002 18K Gate M3 = PASS (Mos-owned independent Sonnet reviewer at merged main 99a2d0fc, 2026-07-13). All 5 criteria verified with live test runs: model/policy fail-fast + credential-safe; restart recovery exactly-once; keyed-HMAC pre-redaction idempotency; compaction/handoff survival; name-as-config (interaction_* everywhere, Nova tests). Orchestrator did NOT run a competing lane (same as M1-V). M3 (#709) UNBLOCKED. Non-gating follow-ups from this review captured as TESS-M2-FUP-001/002/003 below.
TESS-M2-FUP-001 not-started Delete dead unkeyed-sha256 OR-branch in tess-durable-session.repository.ts matchesContentDigest (:417-422) to match strict matchesCheckpointDigest #708 apps/gateway 4K NON-GATING follow-up from M2-V review (2026-07-13). Dead OR-branch NOT exploitable (all writers hmac:v1:-prefixed, content_digest NOT NULL from migration 0012) but weakens exactness guarantee. Low-priority. SCHEDULE TO LAND WITH M3 work.
TESS-M2-FUP-002 not-started Add literal approval+compaction combined integration test #708 apps/gateway/src/tests/integration 4K NON-GATING follow-up from M2-V review (2026-07-13). Subsystems currently tested separately; what matters IS covered. OPTIONAL, low-priority.
TESS-M2-FUP-003 not-started Cosmetic rename pass: 'Tess' in class/file/log names (TessDurableSessionRepository etc.) so Nova deployment logs don't say Tess #708 apps/gateway, packages/agent 5K NON-GATING follow-up from M2-V review (2026-07-13). Cosmetic only — functional name-as-config already correct (interaction_* data path). Low-priority. SCHEDULE TO LAND WITH M3 work. Related pre-existing: sourceLabel??'tess' default @packages/agent/src/tmux-fleet-runtime-provider.ts:142 (from #722/#724, OUT OF SCOPE — not a Tess-mission row).
TESS-M3-001 in-progress Bind dedicated Tess Discord channel with streaming, threads, attachments, pairing/RBAC and approvals #709 coder4 plugins/discord, apps/gateway feat/tess-discord TESS-M2-V,TESS-M1-SEC-004 35K TESS-DSC-001. Mos DIRECT-DISPATCHED to coder4 on feat/tess-discord (base=main, 2026-07-13) — orchestrator is DYOR-loaded so Mos dispatched to avoid double-dispatch; orchestrator TRACKS only, no competing lane. PR-open-STOP, independent non-author ROR then Mos merges. Land TESS-M1-FUP-001 (execute() authz-error mapping) + TESS-M2-FUP-001/003 with this M3 work. PR #730 OPEN (feat(#709): add configured Discord interaction binding; base=main, mergeable=true, head 25ed3676550649d805737ddd97cec08d49873662; config-owned Discord bindings w/ pairing/RBAC, thread metadata, attachments, streaming correlation, authenticated ingress reuse). NOTE: coder4 did not report PR-open to orchestrator; picked up from reviewer ROR. CI pipeline 1734 GREEN on head. ROR = REQUEST CHANGES (reviewer comment 16951 @25ed3676) — 2 functional blockers routed to coder4: (1) THREAD/SUB-SESSION ROUTING: allowedChannelIds check tests the THREAD id before parent-channel binding resolution → thread messages in a bound channel are wrongly rejected; must resolve parent-channel binding FIRST then evaluate allowlist against bound parent + add bound-channel-thread test; (2) APPROVAL NOT WIRED TO M2 DURABLE STORE: Discord approval op defined but no path invokes the durable M2 exact-action approval store (only send wired) — must route Discord approval through the #729 durable exact-action approval surface (one-time/exact-action consume, no replay) + denial + exact-action approval tests. Root-cause fixes only (no allowlist-loosen, no approval stub). coder4 remediating; head will move → re-ROR required at new exact head after CI terminal green.
TESS-M3-002 in-progress Implement mosaic tess chat/status/sessions/tree/attach/send/stop/health/recover CLI #709 diskhygiene-terra packages/mosaic feat/tess-cli TESS-M2-V 30K TESS-CLI-001. Mos DIRECT-DISPATCHED to diskhygiene-terra on feat/tess-cli (base=main, 2026-07-13) — orchestrator TRACKS only, no competing lane. PR-open-STOP, independent non-author ROR then Mos merges. Intake initially blocked on wrapper (issue-view.sh bare positional → 'Unknown option: 709'); orchestrator relayed -i flag fix. PR #731 OPEN (feat(tess): add generic interaction CLI; base=main, mergeable=true, head de74e46a06, fresh origin/main base 99a2d0fc). Scope: generic mosaic interaction command chat/status/sessions/tree/attach/send/stop/health/recover (NO instance-specific literal); --agent/MOSAIC_AGENT_NAME + Nova name-as-config test; authenticated gateway durable/provider boundary — server-derived actor scope, required non-simple correlation header, identity binding, durable recovery, registry routing, exact-action approval stop; status/health safe. Terra: full cold-cache pnpm turbo typecheck/lint/test --force + gates green, Codex security clean after remediation. CI pipeline 1735 RUNNING on de74e46a; ROR routed to reviewer (non-author) at exact head — post only at terminal green.
TESS-M3-V not-started Discord+CLI same-session E2E, denial/approval tests, and operator-flow review #709 sonnet apps/gateway/src/tests/integration, plugins/discord, packages/mosaic/src review/tess-m3 TESS-M3-001,TESS-M3-002 20K Gate M4
TESS-M4-001 not-started Implement Mos coordination handoff/observe/result contract with authority-boundary tests #710 codex packages/coord, apps/gateway feat/tess-mos-coordination TESS-M3-V 25K TESS-MOS-001
TESS-M4-002 not-started Implement transitional Hermes runtime/capability adapter #710 codex packages/agent, apps/gateway feat/tess-hermes-adapter TESS-M3-V 40K TESS-HRM-001; no legacy schema in core contracts
TESS-M4-003 not-started Implement memory/retrieval, state/inbox, runtime bootstrap, fleet diagnostics and GitOps plugin foundations #710 codex packages/memory, packages/agent, packages/mosaic feat/tess-operator-plugins TESS-M3-V 40K TESS-MEM-001, TESS-PLG-001
TESS-M4-V not-started Cross-provider capability, privacy, authority and failure-path qualification #710 sonnet apps/gateway/src/tests/integration, packages/agent review/tess-m4 TESS-M4-001,TESS-M4-002,TESS-M4-003 22K Gate M5
TESS-M5-001 not-started Implement Matrix/native runtime provider behind common contracts and parity suite #711 codex packages/mosaic, packages/agent feat/tess-matrix-provider TESS-M4-V 30K TESS-TRN-001
TESS-M5-002 not-started Complete migration inventory, cutover, rollback, retention and deprecation evidence #711 sonnet docs/tess feat/tess-migration-docs TESS-M4-V 18K TESS-MIG-001
TESS-M5-003 not-started Complete OpenAPI, user/admin/developer/plugin/operations docs and checklist #711 codex docs feat/tess-docs TESS-M5-001,TESS-M5-002 22K Documentation hard gate
TESS-M5-V not-started Full baseline, contract, integration, Discord/CLI E2E, security review, recovery drill and rollback qualification #711 sonnet apps/gateway, packages/agent, plugins/discord, packages/mosaic review/tess-final TESS-M5-003 35K Maps AC-TESS-01..11 to evidence