37 KiB
37 KiB
Tasks — Tess Interaction Agent
Mission:
tess-20260712· Issue: #706 · PRD requirements:TESS-*Orchestrator is sole writer. Workers must not modify this file.repocontains 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 targetsbase=mainand branches from freshorigin/main. Do NOT base onfeat/tess-interaction-agent— that is the STALE planning branch (merged via #712); basing on it yieldsmergeable=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. UPDATE 2026-07-13: did NOT ride in #730; Mos FOLDED this into TESS-M3-003 C4 (authz-error classification + RuntimeApprovalDeniedError→403 filter) — tracked there, land with M3-003. |
| 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 (now M3-003 window). Related cosmetic logged separately as TESS-M2-FUP-004. |
| TESS-M2-FUP-004 | not-started | Cosmetic: sourceLabel ?? 'tess' default literal @packages/agent/src/tmux-fleet-runtime-provider.ts:142 | #708 | — | packages/agent | — | — | 2K | NON-GATING cosmetic follow-up (pre-existing from #722/#724), logged per Mos 2026-07-13. Same class as TESS-M2-FUP-003 (name-as-config cosmetic; functional data path already generic). Low-priority — fold into a cosmetic-rename pass alongside M2-FUP-003. |
| TESS-M3-001 | done | 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. ROUND-1 REMEDIATED + pushed: new head 689d5b6870, CI pipeline 1736 GREEN. RE-ROR = REQUEST CHANGES (reviewer comment 16968 @689d5b68) — 2 residuals routed to coder4: (1) thread allowlist directionally fixed but REQUESTED regression test absent — add explicit 'message in thread of bound channel is ACCEPTED' test; (2) CORE BLOCKER: discord:approve still calls commandExecutor.createApproval (generic slash-command approval), NOT the M2 durable exact-action store — must call createRuntimeTerminationApproval writing agent::command-approval exact-action key (durable one-time consume, no replay), plus Discord one-shot tests: approval consumes exact action once + second attempt rejected, and denial-path rejection. Root-cause only (no aliasing generic path). coder4 remediating; head will move → re-ROR at new exact head after CI terminal green. ROUND-2 REMEDIATED + pushed: head moved (via 34b82bd2), CI green — but ROUND-3 RE-ROR = REQUEST CHANGES (reviewer comment 16973 @34b82bd257154ece2f51d29df698b01150cb9a2b, CI pipeline 1738 green). Progress: discord:approve now CALLS createRuntimeTerminationApproval — but STILL WRONG: it binds the approval to DISCORD_SERVICE_USER_ID + approval-message correlation/channel, making a Discord-SILO record NOT consumable by the CLI/runtime stop exact-action path. CORE M3 AC = ONE durable exact-action approval consumable cross-surface (Discord OR CLI OR runtime); exact-action KEY must be agent::command-approval for the specific pending command/termination action (same key CLI 'mosaic tess stop'/runtime-stop consumes); Discord actor + message correlation belong in METADATA, not the key. Routed to coder4 (round-3): re-key to agent+action; add tests (a) discord:approve happy consumes exact action, (b) SAME approval consumable cross-surface by CLI/runtime stop, (c) one-shot replay rejected, (d) denial rejects, (e) thread-under-parent accept. THIRD round on the same durable-approval seam (16951→16968→16973); reviewer holding cross-surface exact-action boundary firm. coder4 remediating; re-ROR at new exact head after CI terminal green. ROUND-3 REMEDIATED + pushed: head a4c70c5a71, CI pipeline 1739 GREEN — but ROUND-4 RE-ROR = REQUEST CHANGES (reviewer comment 16978 @a4c70c5a). coder4 OVER-CORRECTED: removed actor/tenant/channel/correlation from runtimeActionDigest/consume (WEAKENS command-authorization exactness — the merged M2 contract digests all 7 fields), still NO Discord-origin consume/terminate path for the minted approval, required Discord-path tests still absent (approve happy+denial, one-shot replay, thread-under-parent accept). ROUND-5 ROUTED to coder4 with the FROZEN merged contract extracted from origin/main:apps/gateway/src/commands/command-authorization.service.ts: runtimeActionDigest is sha256 over EXACTLY {providerId,sessionId,actorId,tenantId,channelId,correlationId,agentName} — do NOT modify/strip (revert round-4 change); consume also re-checks actorId+tenantId, requires approver role=admin, one-shot redis.del; store key interaction:command-approval::. Cross-surface = Discord mint and CLI/runtime stop present the SAME 7 fields of the TARGET pending termination (NOT the Discord message's own channel/correlation, NOT DISCORD_SERVICE_USER_ID); actorId = approving admin's resolved user id. Add the missing Discord-origin consume/terminate invocation (via runtime-approval-verifier.ts adapter) + 5 tests. FOURTH round same seam (16951→16968→16973→16978); reviewer holding boundary firm. coder4 remediating; re-ROR at new exact head after CI terminal green. ROUND-5: writer RE-ROUTED coder4→coder0 (Mos-dispatched follow-up; coder0 is original author of the M2 durable approval store, so the ideal lane to wire the Discord path to it — orchestrator did not have this re-route tracked, flagged to Mos for confirmation, single-writer stand-down requested from coder4). coder0 pushed head 6af68e76de (branch tip confirmed), CI Woodpecker pipeline 1742 = SUCCESS (terminal green). Scope: approve-gated stop command (provider/session/approval args), one-shot durable approval consumption, explicit stop authorization (Discord-origin consume/terminate path now present), 4 security regressions; command-authorization.service.ts UNCHANGED (frozen 7-field runtimeActionDigest preserved — round-4 field-stripping reverted). ROUND-5 ROR routed to reviewer (non-author) at exact head 6af68e76; prior round-4 REQUEST CHANGES 16978 void at old head. ROUND-5 RE-ROR = REQUEST CHANGES (reviewer comment 16986 @6af68e76, CI 1742 green). PROGRESS: 7-field digest preserved, thread routing + tests present, no live creds. RESIDUAL (actor-identity seam) routed to coder0 (round-6): (1) approval/stop still binds actorId = DISCORD_SERVICE_USER_ID (bot) — must be the RESOLVED APPROVING ADMIN's mosaic user id at both mint and consume (consume requires approval.actorId===action.actorId AND resolveRole(actorId)==='admin'; bot is not the approver); (2) stop consumes as service actor — must present the same approving-admin actorId bound at mint; (3) approve→stop tests share one fixture correlation, masking production separate-message flow — must model approval message + stop command as separate correlations resolving to the SAME target action 7-field identity (admin A approves T → stop consumes T once as A → replay rejected). Root-cause only (do not make the bot admin). FIFTH round on the seam (16951→16968→16973→16978→16986); reviewer holding actor boundary firm. coder0 remediating; re-ROR at new exact head after CI terminal green. ROUND-6 REMEDIATED + pushed: head 533e970259 (branch tip confirmed), CI Woodpecker pipeline 1743 = SUCCESS (terminal green). Scope: stable target correlation + real RuntimeProviderService consume coverage; approval agent binding matches MOSAIC_AGENT_NAME with explicit mismatch denial; command-authorization.service.ts unchanged. ROUND-6 ROR routed to reviewer (non-author) at exact head 533e9702; prior round-5 REQUEST CHANGES 16986 void at old head. ROUND-6 RE-ROR = APPROVE — canonical VERIFIED APPROVE reviewer-of-record [W-jarvis:reviewer] head 533e970259 (visible Gitea comment 16991, CI 1743 success). Reviewer verified: actorId mint+stop consume uses RESOLVED mosaic admin (not DISCORD_SERVICE_USER_ID, not bot-made-admin); RuntimeProviderService consumes via verifier adapter; separate ingress correlations map to stable target action + one-shot replay rejected; 7-field digest intact; thread-under-parent test present; no live creds. pr-review wrapper self-approve blocked → recorded as verified PR comment. Head confirmed UNCHANGED at ROR target 533e9702 + PR mergeable=true, base=main. SIX-round durable cross-surface exact-action approval seam CLOSED (16951→16968→16973→16978→16986→16991); writer re-routed coder4→coder0 (Mos-dispatched) mid-flight. #730 MERGEABLE (independent non-author ROR + green CI at exact head). HARD STOP — Mos owns merge. MERGED to main by Mos — squash commit 84d884b9, approved head 533e9702, branch feat/tess-discord deleted, independent Sonnet ROR APPROVE (16991). M3 BUILD PHASE CONVERGED (M3-001 #730 + M3-002 #731 both merged). Writer re-routed coder4→coder0 mid-flight (Mos-dispatched); coder0 confirmed stand-down cleanup (dropped superseded WIP stash), on clean main 84d884b9, idle. NOTE: M3-001 #730 scope was Discord binding + durable approval; TESS-M1-FUP-001 (execute() authz-error mapping) + TESS-M2-FUP-001/003 did NOT ride in this PR — they remain not-started follow-ups to schedule (flagged to Mos). TESS-M3-V (M3→M4 gate) now READY — Mos dispatching as Mos-owned independent Sonnet checkpoint against merged main; orchestrator tracks, no competing lane. |
| TESS-M3-002 | done | 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 TERMINAL GREEN (success) on de74e46a. ROR = APPROVE — canonical VERIFIED APPROVE reviewer-of-record [W-jarvis:reviewer] head de74e46a06 (visible Gitea comment 16959). Head confirmed unchanged at ROR target + mergeable=true. Reviewer verified generic mosaic interaction CLI verbs, --agent/MOSAIC_AGENT_NAME name-as-config, server-derived actor scope + required correlation, durable identity/recovery path, registry routing, exact-action approval stop, no live creds; no merge by reviewer (self-approve wrapper blocked → recorded as verified PR comment). MERGED to main by Mos — merge_commit 8246ee01 (independent Sonnet ROR 16959, all criteria + name-as-config Nova test verified). TESS-M3-002 DONE. TESS-M3-V (M3→M4 gate) advances once M3-001 #730 also merges — Mos-owned reviewer, no competing lane from orchestrator. |
| TESS-M3-003 | done | Cross-surface durable session integration + functional attach + denial/audit parity | #709 | coder0 | apps/gateway, plugins/discord, packages/mosaic, packages/agent | feat/tess-m3-integration | TESS-M3-001,TESS-M3-002 | 30K | Mos-DISPATCHED to coder0 (base=main, 2026-07-13) after M3-V gate = FAIL (integration unwired). Scope: C1 wire DurableSessionCoordinator.create into session-start + Discord resolves via durable snapshot + cross-surface E2E (AC-TESS-01); C2 expose streamSession over HTTP+CLI for functional attach + success test; C4 CLI denial spec + Discord mint-side durable audit + FOLD TESS-M1-FUP-001 (execute() authz-error classification) + RuntimeApprovalDeniedError→403 filter. PR-open-STOP, independent non-author ROR then Mos merges. M3-V RE-GATES after this lands. C1 design question raised by coder0 (origin/main has NO runtime-provider session-start/create op — only AgentService/Pi chat createSession, an LLM conversation, not a RuntimeProvider session carrying providerId/runtimeSessionId) — RESOLVED by Mos synthesis ruling (2026-07-13): conversationId is the durable handle; DurableSessionCoordinator.create happens at RUNTIME ENROLLMENT once providerId/runtimeSessionId are known; BOTH surfaces (Discord + CLI) snapshot it. coder0 PROCEEDING: C2/C4 in parallel now + implementing the C1 enrollment boundary per the ruling. PR-open-STOP; orchestrator serializes CI + routes independent non-author ROR at exact head; Mos merges. UPDATE 2026-07-13: PR #732 OPEN (base=main), head 451f7e04ec. coder0 stopped at PR creation, holding (no force-push). Local forced validation green (typecheck/lint/format:check/test: gateway 590 pass/11 skip, mosaic 640 pass), Codex code+security clean, command-authorization.service.ts byte-identical to origin/main. CI pipeline 1745 running — orchestrator serializing; on green-at-exact-head, independent non-author ROR routes to reviewer; HARD STOP for Mos merge. UPDATE 2026-07-13 (CI-GREEN): pipeline 1745 (event=pull_request, refs/pull/732/head, exact head 451f7e04) = SUCCESS; PR mergeable=true, head unmoved. Independent non-author ROR ROUTED to reviewer at exact head 451f7e04 (author coder0). Awaiting ROR verdict; HARD STOP for Mos merge; M3-V re-gates on merge. UPDATE 2026-07-13 (ROR round 1 = REQUEST CHANGES @ 451f7e04, Gitea comment 17007, CI 1745 green): ONE real blocker — Discord approve path UNREACHABLE in production. ChatGateway.handleDiscordApproval accepts only bare '/approve' (^/approve\s*$), but plugins/discord/src/index.ts routes to discord:approve only on startsWith('/approve ') — so bare /approve → normal message (dead), '/approve x' → gateway-rejected; AC-TESS-01 mint/cross-surface flow can't fire; tests bypass DiscordPlugin.handleDiscordMessage so they mask it (same integration-unwired class M3-V flagged). Positives HELD: command-authz byte-identical (hash a9f829e7), 7-field digest intact, actor=resolved admin (not DISCORD_SERVICE_USER_ID), durable/stream/denial/audit coverage present, no live creds. Root-cause routed to coder0: reconcile plugin-routing predicate ↔ gateway accept-grammar + add end-to-end test through real handleDiscordMessage (no bypass). Fix push MOVES head → invalidates ROR, re-serialize CI + re-ROR at new exact head. UPDATE 2026-07-13 (RESOLUTION — MERGED by Mos): before coder0's fix was pushed, Mos ran a combined M3-V re-review at the SAME head 451f7e04 ([W-jarvis:reviewer-sonnet], Gitea comment 17009 = VERIFIED APPROVE + M3-V GATE PASS) and MERGED #732 → main squash commit 0b621660 ("feat(tess): wire durable interaction surfaces"). Mos milestone signal: M3-001/002/003 done, M3-V PASS, M3 COMPLETE, advancing to M4. ⚠️ ORCHESTRATOR RECONCILIATION: the two independent ROR reads at 451f7e04 CONFLICT on one concrete mechanism — my reviewer (17007) flagged the Discord approve path unreachable; Mos's re-review (17009) validated the gateway handler + integration test but that test bypasses DiscordPlugin.handleDiscordMessage. Orchestrator VERIFIED against merged main 0b621660 (read-only git show/grep): the plugin-routing defect is STILL LIVE — see TESS-M3-FUP-005. Surfaced to Mos as a fast-follow; coder0's uncommitted fix held pending Mos disposition. |
| TESS-M3-V | pass | Discord+CLI same-session E2E, denial/approval tests, and operator-flow review | #709 | mos-sonnet | apps/gateway/src/tests/integration, plugins/discord, packages/mosaic/src | review/tess-m3 | TESS-M3-001,TESS-M3-002,TESS-M3-003 | 20K | Gate M4. FIRST RUN = FAIL (Mos-owned independent Sonnet checkpoint against merged main 84d884b9, 2026-07-13): integration UNWIRED — Discord/CLI not cross-surface functional against durable sessions; attach/denial/audit parity incomplete. Remediation = TESS-M3-003 (coder0). SECOND RUN = PASS (Mos-owned combined re-review+re-gate at head 451f7e04, [W-jarvis:reviewer-sonnet] Gitea comment 17009, 2026-07-13): C1 cross-surface durable session, C2 functional attach, C4 denial/audit parity all closed; hard constraint (command-authz byte-identical, 7-field digest untouched) intact; C3/C5 no regression. Mos MERGED #732 → main 0b621660 and declared M3 milestone COMPLETE, advancing to M4. ⚠️ CAVEAT (orchestrator-verified live defect, NON-GATING per Mos): the M3-V integration test does not exercise DiscordPlugin.handleDiscordMessage, so the production Discord approve-path routing defect survived the gate — logged as TESS-M3-FUP-005 (fast-follow, surfaced to Mos). M4 (#710) UNBLOCKED (dep TESS-M3-V met). |
| TESS-M3-FUP-005 | in-progress | Discord approve/stop production routing predicate mismatch — approve path unreachable | #709 | coder0 | plugins/discord, apps/gateway | feat/tess-m3-integration (rebased onto 0b621660) |
TESS-M3-003 | 8K | PR #733 OPEN (base=main), head ed1d985c90 (rebased onto merged main 0b621660 to clear a Gitea conflict, force-with-lease; supersedes pre-rebase a02f526d whose pipeline 1747 was killed). pr-diff confirms clean 2-file scope: plugins/discord/src/index.ts + tess-cross-surface.integration.test.ts. coder0: bare /approve now routes to discord:approve; E2E invokes the REAL DiscordPlugin.handleDiscordMessage proving approve→stop against the durable conversation handle; forced typecheck/lint/format + targeted 17/17 green; command-authz zero-diff from main. CI pipeline 1748 (pull_request, refs/pull/733/head, commit ed1d985c) = SUCCESS. Independent non-author ROR COMPLETE: reviewer [W-jarvis:reviewer] VERIFIED APPROVE at exact head ed1d985c (Gitea comment 17017) — command-authz byte-identical hash a9f829e7 + 7-field digest intact, bare /approve REAL DiscordPlugin route fixed, gateway uses durable getSnapshot(conversationId), anti-masking divergent test inputs present, no Tess literal, no live creds. Head UNMOVED (ed1d985c), base main, mergeable=true. MERGEABLE — HARD STOP for Mos merge (2026-07-13). On merge → FUP-005 done; makes the merged Discord approve surface functional end-to-end. |
| TESS-M4-001 | not-started | Implement Mos coordination handoff/observe/result contract with authority-boundary tests | #710 | coder0 | packages/coord, apps/gateway | feat/tess-mos-coordination | TESS-M3-V | 25K | TESS-MOS-001. Mos-DISPATCHED 2026-07-13 to coder0 DESIGN-FIRST (contract sketch + questions to Mos before build). Goes in-progress as PR opens; PR-open-STOP → orchestrator serializes CI + routes independent non-author ROR at exact head → Mos merges. ⚠️ LANE NOTE: coder0 currently holds the uncommitted TESS-M3-FUP-005 Discord-routing fix in its worktree — flagged to Mos to sequence (FUP-005 fast-follow PR off main 0b621660 vs start M4-001 first); coder0 cannot cleanly branch M4-001 on a dirty tree. Awaiting Mos routing. |
| TESS-M4-002 | not-started | Implement transitional Hermes runtime/capability adapter | #710 | coder3 | packages/agent, apps/gateway | feat/tess-hermes-adapter | TESS-M3-V | 40K | TESS-HRM-001; no legacy schema in core contracts. Mos-DISPATCHED 2026-07-13 to coder3 DESIGN-FIRST (contract sketch + questions to Mos before build). Goes in-progress as PR opens; PR-open-STOP → serialize CI + independent non-author ROR at exact head → Mos merges. |
| 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. Mos HELD 1 beat (2026-07-13) for a well-conditioned lane; not yet dispatched. |
| 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 |