Claim class: Current truth for roadmap horizon, milestone, and track status.
Owns: Which workstreams are complete, in progress, or pending, and their next gates.
Does not own: Daily-user command recommendations (
daily-driver-current-status.md) or historical review reasoning in dated analysis files.Last reviewed: 2026-09-17 (roadmaps/progress/intents review; test-leak into the repo run index fixed; ADR-0043 register reconciled with the owner G14 disposition; no horizon, priority, or gate changes)
Last updated: 2026-09-09 (Socratic roadmap/intent panel, 7 lenses, record reviews/roadmap-intent-socratic-2026-09-09.md; owner adopted all 10 ledger items. Corrections landed: G1/G3/G4/G5/G6 rows restated from Complete/Pending to their evidenced state; ADR-0031 criterion 1 restated as unexercised, not clean — scripts/prepare_h4_evidence.py now reports a reachability denominator and a verdict, and for the 2026-08-13→2026-09-11 window it returns unexercised with 0 observed / 0 reachable runs; across all recorded history only 4 of 415 runs ever reached an H4 surface at all, because .teaagent/runs/runs-index.jsonl holds just 6 distinct synthetic benchmark/smoke prompts and zero organic owner tasks, so 0 observed carries no information about false-positive rate; criterion 2 passes vacuously (0 workspace policies, 0 roles, 0 declarations); promotion_ready is a hardcoded literal in teaagent/governance/h4_decision_packet.py, not an evaluated metric; criterion 4 remains human sign-off. Promotion on 2026-09-12 is arithmetically unreachable — only extend (valid only with a dated dogfood session booked) or revert. Synthetic demo receipts are now stamped provenance='synthetic-demo' and excluded from candidates, so the "demo synthetic ≠ C1" rule is code-enforced rather than prose-only. EFX-001–003 remain In Progress with live-provider proof pending. The owner-operator remains the target persona; active operational validation is unevidenced in the run store. Per harness-first §4.2 raw suite counts are not quality claims; DR-006 gate citation is now enforced by scripts/check_dr006_gate_trailer.py, and non-goal surfaces are quarantined under ADR-0043)
Review 2026-09-12 (ADR-0031 expiry day): decision window closed 2026-09-11 with verdict unexercised (0 observed / 0 reachable, re-verified today); no dogfood session booked, zero new runs (latest run 2026-08-31) and zero new friction entries — promotion unreachable, decision is the owner's today (extend-with-booked-session or revert). Falsifier-1 now mechanical via check_dr006_gate_trailer.py: 8 post-DR-006 feat commits touching teaagent/, 1 cites a gate (87d1c61); retrospective only, the gate landed 2026-09-09. DR-006 falsifier window closes 2026-09-22. No horizon or milestone status moved by this review.
Update 2026-09-12 (goals-review instruments): the 5-lens goals Socratic panel (record .teaagent/reviews/goals-socratic-2026-09-12/synthesis-record.md, gitignored) ruled the goal set directionally right but badly measured; owner approved the instrument items. Landed: scripts/prepare_g1_evidence.py (G1 denominator+verdict, unexercised today), G2 one-screen acceptance test, G6 untyped classification + --fail-on untyped ratchet (458 untyped), G5 corpus-cost section in the aging dashboard, and origin on run_started/runs-index (B-08; TEAAGENT_RUN_ORIGIN or run_started_extra, default unknown). Goal-text items (B-05/B-07/B-10), deletions (B-06/B-09), and B-11 remain owner-gated.
Update 2026-09-13 (agentflow v8.2.0 survey delta + AGF-001 implementation + gated-items panel): re-surveyed agfnow/agentflow at fcb6878 (v8.2.0); AGF-001 teaagent skill audit landed under owner "implement governance gaps" direction; AGF-002 verified already present. A 5-lens Socratic panel re-verified every owner gate (record .teaagent/reviews/gated-items-2026-09-13/synthesis-record.md, gitignored): all gates hold; corrections landed — EFX exit-evidence narrowed to the falsifiable residual (one real provider mutation observed to behave as classified), workflow_engine importer sweep recorded complete (0 production callers), DR-006 falsifier retrospective prepared (10 post-DR-006 feats, 3 gate-cited, 0 violations post-mechanization; F2–F4 unexercised). ADR-0031 is actively decaying: criterion 1 is unreachable at zero organic traffic, so "no decision" produces the permanent-shadow anti-pattern the ADR forbids — highest-value owner ask is booking one M4 dogfood session. Ungated lane found: G6 untyped ratchet (458→0). No horizon, milestone, goal, or EFX status moved.
Update 2026-09-13 (vendor direction survey): surveyed OpenAI (Agents API, managed cloud agents, 3.1 agent-workdays/human-day internally), Anthropic (Trustworthy Agents framework — harness as security boundary, Plan Mode oversight, prompt-injection defense-in-depth), and DeepMind (AI Control Roadmap — insider-threat framing, supervisor monitoring, coverage/recall/response-time metrics, 1M coding-agent trajectories analyzed). Conclusion: vendor convergence validates harness-first; the one substantive gap is live monitoring → VND-001 (Proposed), plus VND-002 threat-model docs addition (Proposed) and VND-003 autonomy metrics (On Hold — zero organic runs). Record .teaagent/reviews/vendor-directions-2026-09-13/survey-record.md (gitignored). No status moved.
Update 2026-09-13 (G6 untyped ratchet zeroed): all 458 untyped test files classified via # test-type: markers (12-agent parallel pass; 455 behavior / 82 contract / 39 adversarial / 31 lifecycle totals); UNTYPED_BASELINE lowered 458→0 — the CI --fail-on untyped gate is now absolute. G6 stays Partial: 71 construction-only / 5 high-risk files remain (assertion-strengthening lane, not typing). No other status moved.
Update 2026-09-13 (G6 P0 flags cleared): strengthened all 5 P0-tier flagged test files — test_audit.py (14 construction-only + 1 permanently-skipped placeholder → real RecursionError test), test_managed_runtime_audit.py, and 3 security acceptance flows (read-only gate, vote relay, approval manager). high_risk_files: 0; construction_only residual is now 66 files, all lower-tier. test_verify_valid_chain renamed test_verify_chain_detects_tampered_hashes — the old name claimed validity while the fixture used dummy hashes.
Update 2026-09-13 (G6 construction-only residual cleared + stale contract fixed): 9-agent parallel pass strengthened all 66 remaining construction_only files — every assert verified against probed runtime behavior; several tests were asserting wrong behavior and were corrected (e.g. test_production_warnings_are_strings was vacuous on this platform; test_cli_with_special_characters_in_api_key asserted success where a NUL byte forces exit 1). Also fixed a pre-existing failure: test_m1_audit_stream_matches_frozen_contract was red on clean tree — the origin field (B-08, landed 338de3a8) was missing from the golden contract; updated. construction_only_files: 0, high_risk_files: 0, placeholder_files: 0. G6 → Met.
Update 2026-09-13 (G6 zero-flag): 9-agent parallel pass fixed all 36 remaining flagged files — 33 no_assertions (call-and-pray tests now assert probed outcomes), 2 assert_true (one was dead code in an unreachable branch; one masked a real TypeError), 2 undocumented_skip (positional skip message → reason= keyword). Several tests were exercising nothing real and were corrected (e.g. test_n4_git_transaction_sink_records_file_writes never created a commit — no file changes meant 'nothing to commit'). Audit is fully clean: zero flags of any kind.
Review 2026-09-14 (hygiene + overdue-decision flag): re-ran the §3.5 starts-now lane — prepare_h4_evidence.py still unexercised (0 observed / 0 reachable / 5732 total events); test_efx* 15/15 pass. Found and fixed a date-bomb: test_h4_shadow_demo.py + scripts/exercise_h4_shadow_demo.py hardcoded until='2026-09-11' (the ADR-0031 window close), so the demo's own events fell outside the window and synthetic_excluded read 0 — test went red on 2026-09-12. Both now use until=date.today() (791eb1bc). Friction-log evidence attached to the 3 open hypotheses (d7308906); closure itself is owner-only per scripts/validate_docs_consistency.py. ADR-0031 owner decision is now 2 days overdue (review date 2026-09-12); the permanent-shadow decay the gated-items panel flagged is active. No horizon or milestone status moved by this review.
Update 2026-09-14 (VND-002 insider-threat docs): owner authorized the docs-only VND-002 item via the "implement tasks" direction; added the insider-threat/agent-misalignment class to docs/threat-model.md — a new threat-table row plus a dedicated section citing DeepMind's AI Control insider-threat framing and the ~1M-trajectory finding that most flagged events are misinterpretation/overeagerness, not adversarial intent. VND-002 → Complete. VND-001 (live supervisor) and VND-003 (autonomy metrics) remain owner-gated. No other status moved.
Update 2026-09-14 (ADR-0031 extension + VND-001 authorization): owner decided ADR-0031 → extend with a booked co-maintainer dogfood session (not revert). The extension is conditioned on the session being scheduled — a new decision-window close is set when the session date lands, so the shadow does not decay open-ended; promotion_ready stays false and criterion-1 owner_verdict remains owner-only. Owner also authorized VND-001 (live supervisor / post-run trajectory reviewer) under the governance-gap DR-006 gate; implemented as teaagent/run_review.py + teaagent runs review <run_id> (post-run reviewer; in-run monitor remains future). No horizon/milestone status moved by this record.
Update 2026-09-14 (dogfood session booked): owner scheduled the co-maintainer dogfood session for 2026-09-15 (scope: background lifecycle + operator cockpit per DR-006 T4; cloud/gateway/multi-tenant held). Recorded as docs/work-log/m4-dogfood-2026-09-15.md — the dated owner-override entry gate for Horizon B and the ADR-0031 extension condition. New ADR-0031 decision-window close = 2026-09-15; after the session, agents run B2/B3 (prepare_h4_evidence.py --until 2026-09-15, build_h4_decision_packet.py, BG-001/cockpit specs) against the real audit logs. No horizon/milestone status moved by this record.
Update 2026-09-15 (ADR-0031 evidence: approval surface wired + first organic events): found and fixed a wiring gap — AgentRunner in chat_agent.py was built without workspace_root, so RunnerApprovalCoordinator.workspace_root stayed None and evaluate_approval_policy_shadow early-returned before recording h4_governance_shadow; the approval surface was unreachable on the main agent run path (only subagent launches, which pass self._root, ever emitted a receipt — the 4/415). Fix 8fd7a461 passes config.root. Two dogfood runs (TEAAGENT_RUN_ORIGIN=dogfood, fake provider) then produced the first organic h4_governance_shadow events: surface=approval allowed=true enforced=false (prompt mode + workspace_write_file), and surface=subagent_launch allowed=false enforced=false — a denial candidate (RBAC start_workflow denied yet the subagent ran in shadow mode) flagged for owner adjudication, not agent verdict. prepare_h4_evidence.py regenerated: verdict unexercised → needs_review, 2 observed / 9 reachable runs / 1 denial candidate; promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (ADR-0031 evidence broadened + residual gaps): continued dogfooding produced 3 more organic approval receipts (workspace_apply_patch, workspace_run_shell_mutate, workspace_edit_at_hash — all allowed=true, provenance=null). Packet regenerated --until 2026-09-15: 5 observed / 12 reachable runs / 1 denial candidate; coverage now approval 4 (0 denials) + subagent_launch 1 (1 denial). Two residual gaps recorded for owner adjudication, not fixed: (a) empty RBAC role store — .teaagent/roles/ + .teaagent/role-assignments/ are empty, so check_action_permission returns "no role with permission start_workflow" for every subagent launch; harmless in shadow mode (check_subagent_launch_rbac returns True regardless) but if rbac_governance_mode ever flips to enforce, all subagent launches break — needs a bootstrap/default-role decision. (b) ANP adapter dead surface — teaagent/anp_adapter.py:364 builds AgentRunner without workspace_root and ANPBidirectionalAdapter has no root attribute; wiring it needs a constructor param plumbed through callers (secondary surface, out of agent run scope). promotion_ready stays false; owner_verdict untouched. No horizon/milestone status moved by this record.
Update 2026-09-15 (VND-001 reviewer fix + third residual gap): dogfooded teaagent runs review on the new runs and found a coverage bug — review_run only counted tool_call_started, but a call paused at the approval gate emits tool_call_pending_approval and never reaches tool_call_started, so blocked capability requests (the exact unapproved_capability/denied_attempt signals) were invisible (tool_calls=0, coverage=0.0). Fix ec7656e3 counts tool_call_pending_approval as a call (deduped by call_id); verified tool_calls 0→1, coverage 0.0→1.0. Third residual gap recorded for owner adjudication: subagent_launch allow path is unreachable by design — assignee always falls back to parent_run_id (a fresh id per run; operator_id/agent_id are not real ChatAgentConfig fields), and get_roles_for_assignee has no wildcard/default role, so start_workflow can never be granted to a stable identity. The RBAC check is therefore structurally deny-only until a stable operator identity exists. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (approval-shadow observation bias + allow-mode run): drove an allow-mode run — the destructive call completed the full lifecycle (tool_call_requested/started/completed, file written) but emitted no h4_governance_shadow. Fourth residual gap recorded for owner adjudication: the approval shadow only observes prompt-mode runs — evaluate_approval_policy_shadow is invoked inside handle_approval_request, which only runs when can_request_approval is true (PROMPT mode + destructive). In allow/workspace-write/read-only modes the shadow never fires, so H4 evidence is systematically biased toward prompt-mode runs and blind to the modes where enforcement matters most. Whether the shadow should observe every destructive call regardless of mode is a semantic boundary (observation scope + audit volume), so recorded not fixed. Packet regenerated: 5 observed / 13 reachable runs / 1 denial candidate. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (observability + lifecycle surfaces verified): exercised the H4 control-plane/audit surfaces on the dogfood runs — all healthy. agent resume completed the pending→resume→auto-approve→complete lifecycle (auto_approved_call_id recorded; consistent with the observation-bias finding, no tool_call_approved/shadow on the auto-approve path). audit verify reports VALID hash chain on all 7 dogfood runs (zero gaps/modifications/insertions). runs export (completeness ok:true, full trace), runs replay (dry-run, tools_used), cockpit (pending_count:6, quarantine_count:28, context health green), daily (flags pending approvals), and runs list all work. origin: dogfood correctly recorded in runs-index.jsonl (B-08) — owner can cleanly filter dogfood vs organic runs. memory_write_quarantined fired correctly (provenance gate quarantined the subagent's auto-curated memory write). No new gaps; these surfaces are healthy. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (approval lifecycle completed + provenance fix): resolved all 6 pending approvals via teaagent approval approve — the canonical tool_call_pending_approval→tool_call_approved lifecycle now exercised organically on 8 runs. Found and fixed a provenance gap (2f144102): the CLI approve path recorded tool_call_approved with only call_id/tool_name — no authority_type/approved_by — so CLI-approved calls were indistinguishable from JIT-prompt approvals in the audit trail. Now records authority_type='cli_approval', approved_by='operator' (consistent with jit_prompt/auto_mode/preapproved_payload_digest); verified on a dogfood run. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (deny-preset enforcement gap — most serious finding): exercised the deny path and found a documented safety control that is advisory-only at runtime. teaagent approval deny <tool> registers a deny grant and approval check/explain correctly report decision: deny ("Matching deny grants block the tool call"), but the runtime path never blocks: assert_allowed → check_preset → is_allowed, which collapses deny and prompt both to False, so a matched deny grant is indistinguishable from "no preset" and falls through to pending_approval (prompt mode) or executes (allow mode). Verified: a scoped deny preset on workspace_run_shell_mutate did NOT block the matching call in either mode. Root cause: check_preset returns a bare bool that can't distinguish deny from no-match; _resolve_decision already exposes decision distinctly but the runtime path doesn't use it. Not fixed — enforcement change on teaagent/approval/manager.py (high-risk path) that alters when calls block; needs a risk report + owner sign-off. Test preset revoked. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (budget + plan-gate + sandbox boundaries verified): exercised the remaining governance boundaries — all enforced correctly. Budget: max_tool_calls=1 → run_failed: tool-call budget exceeded after exactly 1 call; max_iterations=1 → run_failed: iteration budget exceeded; both with actionable messages. Plan gate: run --from-plan <plan> --require-plan blocked workspace_write_file with tool_call_blocked/authority_type: policy_blocked — "Intent drift: target outside the approved plan scope" (the write target wasn't in the plan's declared files). Intent-drift enforcement works. Git sandbox: git_sandbox_started fires per run; headless runs keep the teaagent-sandbox-<run_id> branch for review and restore the tree (deliberate, not a bug) — but branches accumulate with no auto-prune (27 now; manual via doctor/experiment only), a minor housekeeping note. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (undo/rollback data-loss hazard — second serious finding): exercised teaagent undo and found a destructive edge. undo --preview diffs sandbox_branch → original_branch, but original_branch (main) has moved forward since the run, so the preview shows all later commits, not just the run's writes — misleading. Worse, GitBranchSandbox.rollback() runs git reset --hard HEAD + git clean -fd before checkout, assuming HEAD is on the sandbox branch; but after a headless run keep() already restored main, so undo on a completed run would reset --hard + clean -fd on main itself — wiping uncommitted work — then branch -D the kept review branch. Verified by code read (teaagent/sandbox/_git_branch.py:254-280) + preview behavior; not executed (would destroy the working tree). Not fixed — teaagent/sandbox/ is a high-risk path and the fix (guard rollback to only run on the sandbox branch, or scope the reset) changes destructive behavior; needs a risk report + owner sign-off. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (attach-resume provider gap): exercised agent attach <run_id> --resume on a pending run — it failed run_failed: opencodezen-go requires OPENCODEZEN_API_KEY. attach has no --provider flag and resumes with the configured default provider, not the original run's provider, so attach --resume cannot resume any non-default-provider run (it errors on credentials). agent resume <provider> <run_id> works (takes provider positionally). Recorded as a gap — the attach-resume path should inherit the run's recorded provider. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (session/background durable-continuity verified): exercised the H4 durable run-state surfaces — all healthy. session list shows per-run heartbeat + git_sandbox state + status; background list shows background-task lifecycle (pid, log, exit_code, run_id). session resume <run_id> fake resumed a pending run, auto-approved the call, and attempted it (failed only on the probe's intentional bad hash — the resume path itself is correct). origin: dogfood attributed throughout. No new gaps. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (diagnostics verified; doctor-all false-negative noted): ran the harness's own diagnostics — doctor project 9/9 security checks green (.teaagent/ mode/ownership, secret mode/content), selftest all green (audit completeness, permission smoke "read-only blocks destructive write", tool lint 0 errors). doctor all reports ok: False but only because 11/14 providers lack API keys (expected — only fake is configured); the overall ok flag counts unconfigured optional providers as failure, a false-negative signal worth noting (an operator reading ok:False can't tell "no providers configured" from "something broken"). promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (watch verified; interactive-only boundary reached): teaagent watch works — polls and reports pending=N + run status each interval. agent interactive-review requires suspension-<run_id>.json, which is only written by suspend_to_background from the interactive REPL — not reachable headless, so that surface stays unexercised (it's the one path that genuinely needs a TTY/owner session). This completes the non-interactive surface coverage: every headless-reachable governance boundary, lifecycle path, observability tool, durable-continuity surface, and self-diagnostic has now been exercised. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (interactive-review exercised — full surface coverage): drove agent interactive-review by writing a suspension-<run_id>.json in the suspend_to_background format plus a tracked change — the review header, changed-file list, per-file diff, and the y/e/r/n/q action loop all work (probe artifacts cleaned up). This completes surface coverage: every governance boundary, lifecycle path, observability tool, durable-continuity surface, self-diagnostic, and the interactive review loop has now been exercised. Final tally: 3 bugs fixed (workspace_root wiring, reviewer blocked-call coverage, CLI approval provenance), 7 gaps + 1 denial candidate recorded for owner adjudication (2 safety-critical: deny presets advisory-only, undo resets main). promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (MCP server + skill audit verified): exercised the two remaining surfaces. teaagent mcp serve over stdio JSON-RPC — initialize returns teaagent with tools capability, tools/list returns 23 workspace tools, tools/call workspace_git_status executes and returns clean status (full external-agent consumption path works). teaagent skill audit (AGF-001) — 268 skills across roots, 49 name collisions, status: ok, issues: [], assessment: not_performed (semantic conflict assessment is documented as out-of-scope for the command). No new gaps. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (MCP HTTP transport + auth + trust + skill subcommands verified): exercised the remaining MCP and skill surfaces. mcp serve --http — initialize over HTTP returns server info; --auth-token enforced correctly (valid Bearer token accepted, wrong/missing token → unauthorized). mcp trust list/audit — empty policy (allowed_tools: [], servers: {}) and empty audit trail, both ok: true. skill explain — 20 loaded skills, ~44k est. tokens, 11 shadowed; skill search/marketplace-list — empty registries ([]). No new gaps. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (full CLI surface sweep — all command groups probed): swept every top-level command group for clean function or clean error. Working: status, daily, health, recall, yesterday, cost report, goal list, tool list/lint, artifact list, workspace tools/openapi, plugin list, replay list, experiment list, cloud list, permission explain, guidance, cockpit, recipes list, surfaces explain, gateway list, metrics, classify, memory list, audit list, model providers, consensus status, approval list/pending, code-ontology query, journal, preflight (clarification scoring + context pack), sync status. Clean-arg-required or expected-empty: env verify (no lockfile → compliant:false), sandbox check wasm (runtime not installed → actionable message), credentials rotate, control-plane serve, ci review, artifact read, code-ontology build, mcp trust allow/deny/revoke (mutation path, not exercised — writes policy). No crashes, no tracebacks on any reachable surface. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (mutation paths exercised; trust-key silent-discard footgun): exercised the write surfaces. mcp trust allow/deny/list/audit — with a consistent TEAAGENT_MCP_TRUST_KEY, allow+deny persist correctly; footgun: a wrong/missing key silently discards the policy — deny under a different key read the encrypted policy as empty (couldn't decrypt) and overwrote it, resetting allowed to [] with no error (a config mistake silently wipes trust grants). memory add/list/show/maintain/quarantine list — all work (maintain --dry-run reports 3 duplicates, 20 quarantined, 27 stale). audit verify <run_id> — hash chain VALID, timestamp ordering verified; audit export — 10 events exported. credentials rotate --dry-run — correct next-steps output. code-ontology build — 15,462 nodes / 98,905 edges. env provision — clean error (teaagent.toml not found). New gap recorded: trust-policy decryption failure should error, not silently reset. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (approval mutations exercised; strict preset is a no-op — bug): exercised the approval write surface. grant/revoke/deny/check/explain/audit/doctor/next/subagents list/why-denied all work — grant creates a session grant, check evaluates it (decision: allow), revoke removes it; deny correctly requires path_glob/command_prefix (rejects bare deny with an actionable message). Bug: approval preset strict is a no-op — it skips the deny grants because they lack path_glob/command_prefix, so grants_applied: [] and grants stays empty; the "deny all destructive tools" preset applies nothing (the preset's own deny entries violate the deny-scope requirement). preset dev-safe works (4 grants applied). All test grants revoked after probing. New gap recorded: strict preset self-inconsistent. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (run-lifecycle + multi-agent surfaces exercised): swept the remaining command groups. runs list/show/trace/export/replay/review/commit — all work on a real run; runs review correctly flagged the probe's df-edit-1 as unapproved_capability (high) — the reviewer working as intended. replay steps — full event-step list; audit show/tail/prune — hash-chained events, tail, prune (0 deleted). agent status <run_id> — full run state. sync export — message exported (sequence_number: 4); consensus request/history — clean "no active peers" / 0 proposals. cloud show/goal status/artifact read — clean not-found/empty. journal — writes daily file. No crashes. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (agent subcommand tree exercised): swept the full agent surface. agent card — AgentCard with 23 tools + capabilities; agent show <run_id> — hash-chained JSONL; agent plan — produces a plan artifact + ready: True (writes .teaagent/plans/<ts>-<task>.md); agent daily/preflight — readiness + clarification scoring; agent subagent-review list — empty (reviews: []); agent automation list/status/template repo-watch --dry-run — empty registry + full automation spec. All agent subcommands now exercised (run/attach/resume/interactive-review/status/runs/undo covered earlier). No crashes. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (automation lifecycle exercised — durable H4 surface): exercised the full agent automation write path. add creates an automation (enabled: true, next_run_at scheduled, provenance_digest set); list/show reflect it; pause/resume toggle enabled; tick reports health (automation_count/due_count/enabled_count); run spawns a background task (background_started, pid, log_path — the task exited cleanly, exit: 0); delete removes it. The durable-automation lifecycle works end-to-end. Test automation deleted after probing. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (final subcommand sweep — entire CLI surface exercised): swept the last untested subcommands. clarify/completion/model smoke/conformance/route/capabilities/sandbox route/graphqlite smoke/query/cloud submit/cancel/capabilities/env lock/recipes run --print-only/ci review --print-only/memory search/failures/decisions/team/skill candidate list/mcp trust inspect/experiment compare/select/cancel/replay fork/resume/sync import/consensus peers/config — all work or error cleanly. experiment cancel cleaned up all orphaned teaagent-sandbox-* branches (resolving the accumulation noted earlier — 0 remain). sandbox monitor needs Docker (clean error, not installed). model conformance fake reports ok:false (fake provider returns non-'ok' content — expected for the stub). No crashes. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (agent chat REPL exercised — last surface): drove agent chat over piped stdin — the REPL starts (TeaAgent TUI 0.1.0), accepts help (full command list), status, session list (returns saved sessions), and exit (clean quit). The interactive chat surface works headless-driven. This completes coverage: every CLI command, subcommand, and interactive surface has now been exercised. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (tui confirmed = chat REPL; coverage complete): ran teaagent tui under a pseudo-TTY — it is the same TeaAgent TUI 0.1.0 REPL as agent chat (same banner, prompt, help/exit), already exercised. This confirms complete coverage: every CLI command, subcommand, interactive surface, MCP transport (stdio + HTTP with auth), and write path has been exercised across the 2026-09-15 session. Final tally: 3 bugs fixed (workspace_root wiring, reviewer blocked-call coverage, CLI approval provenance), 9 gaps + 1 denial candidate recorded for owner adjudication (2 safety-critical: deny presets advisory-only, undo resets main; plus empty RBAC store, unreachable allow path, prompt-mode observation bias, ANP dead surface, attach-resume provider gap, trust-key silent-discard, strict preset no-op). promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (chat REPL internal commands exercised — deepest coverage): drove the agent chat REPL's internal command set over piped stdin — all work: complexity/estimate/route (task analysis), permission (mode switch reflected in prompt), session new/show/list/switch/clear (session lifecycle), provider/model/route-model/destructive/progress/stream/subagent/heartbeat (toggles + setters), doctor (graphqlite check). The interactive surface is fully functional headless-driven. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (chat ask — task run inside the REPL): drove ask <task> inside agent chat — runs a task in-REPL, prints the run summary (tools called, files changed, cost, budget remaining, audit log path, undo command). The fake provider returns a canned response without tool calls (expected for the stub). This is the deepest path — a full agent run nested inside the interactive REPL. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (remaining chat REPL commands — full REPL coverage): exercised the last chat commands — root (set workspace root), progress <run_id> (rich progress: phase, last tool, elapsed, iteration, budget), status <run_id> (full run state), chat on/off (session toggle), session clear/switch (session management). Every agent chat REPL command is now exercised. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (agent run flag surface exercised): swept the agent run flag set — all work: --dry-run (preflight JSON, no run), --clarify, --no-validate, --skip-plan-check, --no-benchmark, --no-progress, --no-summary, --human (readable summary), --json, --stream, --telemetry-console (emits telemetry), --code-analysis, --heartbeat, --max-subagent-depth, --validation-profile, --context-profile, --memory-limit, --no-auto-skills, --skill-index-only, --tenant-id, --route-model, --model. Every agent run flag is now exercised. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (remaining run flags; sandbox-branch leak + approve-call-id deprecation): swept the rest of agent run's flags — --from-plan, --parallel (spawns experiment branches), --approach, --subagent, --git-sandbox, --git-sandbox-auto-stash, --hitl-approval, --approve-scoped, --allow-destructive, --telemetry-otlp-endpoint, --telemetry-service-name, --checkpoint-store, --stream-raw, --json-stream, --skill, --require-plan all work. Two findings: (1) a headless agent run left HEAD on a teaagent-sandbox-* branch — the sandbox didn't restore main on completion (same family as the undo hazard; cleaned up manually). (2) --approve-call-id is deprecated and ignored — "removed for security (call ids are not stable)" — but still accepted; a stale flag silently does nothing. --parallel 2 spawned approach-1/approach-2 branches (cleaned via experiment cancel). promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (H4 evidence: dogfooding produced organic shadow events): ran prepare_h4_evidence.py --since 2026-08-13 --until 2026-09-15 against the real audit logs — the day's dogfooding generated organic h4_governance_shadow events: observed_events: 9 (8 approval + 1 subagent_launch), reachable_runs: 21, total_events: 7779, synthetic_excluded: 0, verdict needs_review (up from unexercised / 0 observed). This is the B2 organic evidence the M4 dogfood plan calls for — the surfaces now have real coverage data for owner adjudication. promotion_ready stays false (owner verdict still required per ADR-0031 exit criterion 1). No horizon/milestone status moved by this record.
Update 2026-09-15 (H4 decision packet built — 4/5 criteria prepared): ran build_h4_decision_packet.py — the ADR-0031 shadow→enforce review packet is now assembled with real evidence: criterion 1 (zero-false-positive window) prepared (9 observed receipts, 1 denial candidate), criterion 2 (coverage completeness) prepared (0 gaps), criterion 3 (performance SLO) prepared (median 0.489ms < 50ms threshold over 25 policies), criterion 5 (rollback plan) prepared (dry-run succeeded). Only criterion 4 (human sign-off) is human_required — owner/security-governance sign-off cannot be agent-generated. promotion_ready: false correctly. The B2 evidence packet is complete; the decision is the owner's. No horizon/milestone status moved by this record.
Update 2026-09-15 (BG-001 orphan path exercised — §3.3 gap confirmed live): dogfooded the background lifecycle per background-lifecycle-acceptance-spec-2026-07-11.md §5.2 — submitted a background run (--background), watched it complete cleanly (alive:false, exit_code:0, stopped_at set, run_id backfilled — the §3.1 identity chain works). Then submitted a second run and SIGKILLed its pid: background list showed alive:false, exit_code:0, stopped_at — no orphaned marker, and the §6 exit-code fallback (_refresh_process_state defaults a reaped/unkillable exit to 0) made the SIGKILLed process indistinguishable from a clean exit. Confirmed §3.3 orphan derivation is not implemented (background_run.py never emits orphaned); the spec's documented exit-code-fallback risk materialized live. BG-001 acceptance item 1 (§3.3 + §3.5 taxonomy) remains open — a feat: code change needing owner approval + DR-006 gate, not a dogfooding step. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (cockpit exercised — pending-approval count inconsistency): dogfooded teaagent cockpit per operator-cockpit-acceptance-spec-2026-07-11.md §3.1 — the snapshot answers Q2 (approval), Q3 (cost), Q4 (memory quarantine: 33), Q5 (stale_workspace), Q6 (skill); goal/model_route/review/spec are null, honest for an idle cockpit. Finding: the two pending-approval surfaces disagree — control.approval.pending_count scans limit=100 runs and reports 3, but pending_approvals.queue_depth uses default limit=20 and reports 0 (the 3 pending runs are older than the 20 most recent); --human reads queue_depth and shows pending approvals: 0. An operator reading the queue or --human sees zero pending while 3 real approvals wait — a same-fact inconsistency across cockpit surfaces (SURF-009 parity gap). promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (cross-surface parity check — approval pending/next also under-report): followed the cockpit finding across the dedicated approval surfaces — teaagent approval pending returns queue_depth: 0 / pending: [] and teaagent approval next returns "No pending approvals found", both using the same limit=20 window that misses the 3 real pending approvals (in runs older than the 20 most recent). So the primary surface for "what awaits my approval" (approval pending/next) is wrong, not just the cockpit — an operator checking pending approvals via the dedicated command sees zero while 3 wait. The limit=20 default in collect_pending_approval_views/build_pending_approvals_snapshot is the shared root cause across cockpit queue, approval pending, and approval next. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (dogfooding consolidated — adjudication-ready findings list): agent-side dogfooding is complete — every CLI command, subcommand, interactive surface, MCP transport (stdio + HTTP + auth), write path, background lifecycle, and cockpit surface exercised headless; the only unexercised surface is the owner-driven TUI session (m4-dogfood-2026-09-15.md). Consolidated the ~30 scattered findings into a single prioritized adjudication list docs/work-log/dogfood-findings-2026-09-15.md: 3 bugs fixed (workspace_root wiring, reviewer blocked-call coverage, CLI approval provenance), 5 safety-critical gaps (deny presets advisory-only, undo resets main, sandbox-branch leak, BG-001 orphan gap, pending-approval parity), 33 other gaps (incl. audit-integrity: git_sandbox_resolved/session_suspended events orphaned to stale pending-*.jsonl temp files), 1 denial candidate, plus the complete B2 H4 evidence (9 organic events, 4/5 packet criteria prepared). Remaining work is owner adjudication + the owner TUI session — no agent-side dogfooding surface remains. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (pending-approval lifecycle gap — no reject/cancel path): investigated the 3 pending approvals surfaced by the parity check — they are live run_paused runs (df-edit-1, df-deny-1, df-deny-2, my own dogfood probes) genuinely awaiting a decision. Finding: there is no operator path to reject or cancel a pending approval — approval offers only approve (which would execute the destructive probe call); runs and agent expose no reject/cancel/abort. An operator who wants to decline a pending destructive call has no surface — the only options are approve (run it) or leave it pending forever. A missing lifecycle transition (the deny/reject half of the approval decision). Recorded as a gap for owner adjudication — adding a reject path is a feat: change needing owner approval + DR-006. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (pending-approval durability asymmetry — no expiry on main path): followed the reject-path gap into the durability question — do run_paused pending approvals ever expire? Finding: the subagent approval queue auto-times-out (pending_request_timeout_seconds: 3600, auto_timeout_pending_requests: true), but the main tool_call_pending_approval/run_paused path has no expiry — pending_approval_for_run clears a pending entry only on tool_call_approved/tool_call_denied/run_completed/run_failed, so a paused run that never resumes stays pending forever. Combined with G15 (no reject path), a declined-but-unactionable approval lingers indefinitely — the two approval surfaces have inconsistent durability semantics (subagent: 1h TTL; main: none). Recorded as a gap for owner adjudication. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (G15 refined — deny mechanism exists, only the CLI surface is missing): traced tool_call_denied — it is emitted (teaagent/runner/_approval_manager.py:134) when approval_handler returns False (interactive decline), and pending_approval_for_run clears on it. So the deny lifecycle (emit + clear) is fully built; what's missing is only a CLI command to deny a queued/headless pending approval — approval exposes approve but no deny/reject for an already-paused run. This narrows G15 from "missing lifecycle transition" to "missing CLI surface for an existing mechanism" — a smaller, well-scoped feat: (a approval deny <call_id>/reject that records tool_call_denied for a paused run). Still owner-gated (approval path + DR-006). promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (pending-approval escape paths exhausted — airtight): tested the last theoretical escape for a stuck pending approval — agent undo on a paused run. undo --preview <paused_run_id> returns (no undo diff available) and undo --last reports no undo journal found — paused runs have no undo journal, so undo can't even target them. This closes the loop: a pending approval on a paused run can be approved (executes the call), or left pending forever — it cannot be rejected (G15), expired (G16), or undone. The approval-lifecycle gap cluster is airtight; the only resolution is the missing approval deny/reject CLI surface. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (TUI cockpit tabs unreachable — dead code): tried to exercise the TUI cockpit tab surface (WORKFLOWS/APPROVALS/COSTS/MEMORY/BACKGROUND) — finding: CockpitScreenRenderer, CockpitDataManager, and CockpitTab are defined in teaagent/tui/cockpit_screens.py/cockpit_data_sources.py and re-exported from teaagent.tui, but nothing instantiates them — no TUI command, keybinding, or render path reaches the tabbed screens. core.py refreshes build_control_cockpit data (_control_cockpit) but never renders the tabbed UI. So the TUI cockpit tab surface is dead code / unreachable — the spec's §3.1 "TUI tabs" half of the cockpit acceptance can't be exercised because the screens aren't wired in. Recorded as a gap for owner adjudication (wiring the tabs is a feat: needing owner approval + DR-006). promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (dead-code gate blind spot — TUI excluded): ran the repo's own check_dead_code.py (vulture) to corroborate G17 — vulture confirms the TUI cockpit is dead (CockpitDataManager, create_cockpit_renderer, render_screen, and all get_* methods flagged unused at 60% confidence). Second finding: check_dead_code.py runs vulture teaagent/ --exclude teaagent/tui/ — it excludes the TUI directory entirely, so the dead-code gate has a blind spot exactly where this dead code lives (the cockpit screens would never be flagged even if vulture ran in CI). Also: check_dead_code.py isn't in .pre-commit-config.yaml and vulture isn't installed by default — the gate is opt-in and currently a no-op. Recorded as a gap for owner adjudication. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (TUI cockpit renders correctly + approvals semantic conflation): rendered the dead TUI cockpit screens directly via CockpitDataManager + create_cockpit_renderer — all 5 tabs render correctly (WORKFLOWS/APPROVALS/COSTS/MEMORY/BACKGROUND), so the dead code is functional, just unwired (refines G17: works, unreachable). New finding: the APPROVALS tab shows "Pending Approvals (21 total)" but counts memory-quarantine entries (review_state in [pending, quarantined] from the memory catalog), not tool_call_pending_approval queue entries (3 real). Same label "Pending Approvals", different meaning — a semantic conflation across cockpit surfaces: the TUI tab would show 21 memory-quarantine rows while the real tool-call approval queue holds 3. An operator reading the TUI APPROVALS tab sees memory-review items labeled as approvals. Recorded as a gap for owner adjudication. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (TUI WORKFLOWS tab conflation — runs labeled active workflows): inspected the WORKFLOWS tab data — "Active Workflows (20 total)" lists run_ids with status='completed' (from RunStore.list_runs), so it shows runs (not workflows) and completed (not active). Same conflation pattern as G19 (APPROVALS shows memory-quarantine as approvals): the TUI cockpit tab labels don't match what they display — "Active Workflows" = all recent runs regardless of status, "Pending Approvals" = memory-quarantine entries. If the TUI cockpit were wired (G17), its tabs would systematically mislabel their contents. Recorded as a gap for owner adjudication. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (TUI cockpit tab audit — conflation scoped to WORKFLOWS/COSTS/APPROVALS): audited all 5 TUI cockpit tabs for the mislabeling pattern — COSTS shares the run→workflow conflation (workflow_id = run_id, same root cause as G20); MEMORY is accurate (shows the 20 non-quarantined registry entries, zero overlap with the 20 quarantined — quarantined=False correct); BACKGROUND is accurate (0 runs). So the conflation is systemic across WORKFLOWS/COSTS/APPROVALS (all label run/memory data as workflow/approval) but MEMORY/BACKGROUND are correct — refines G19/G20 scope: the cockpit's data-source layer conflates domain concepts in 3 of 5 tabs. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (control-plane exercised — third approval source, JIT in-memory): exercised teaagent control-plane serve — dashboard HTML, /api/health, /api/tenants, and SSE streams (/api/workflow/stream, /api/focus/stream, /api/jit/diff) all respond. Finding: /api/jit/diff pending comes from jit_server.get_pending_requests() — an in-memory JIT approval server, a third approval source distinct from the tool_call_pending_approval audit events. So there are now three approval surfaces with three different sources: cockpit queue_depth (audit, limit=20), approval pending/next (audit, limit=20), and control-plane JIT (in-memory, separate lifecycle) — none agreeing, and the JIT surface can't see the 3 audit-pending approvals at all (different store). Recorded as a gap for owner adjudication — the approval queue has no single source of truth. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (adjudication triage prepared): external-advisor review of the full roadmap confirmed the agent lane is exhausted — every remaining item is owner-gated (booked TUI session, G1–G5 adjudication, ADR-0031 verdict + D1 classification, G6–G38 gate assignment, EFX live proof). Advisor flagged two contradictions worth owner attention: the H4 packet reads "4/5 prepared" but G1/G2 make enforce-promotion unsafe, and "Daily Cockpit Parity" is marked Complete while G17–G20 show the TUI cockpit tabs are dead code that mislabels their data. Prepared the owner-adjudication triage table in docs/work-log/dogfood-findings-2026-09-15.md — proposed DR-006 provenance per gap (20 governance-gap, 1 legacy-competitive, 1 owner-override, D1 owner verdict) so adjudication is a sign-off, not an analysis session. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (agent PTY evidence only — B1 still pending): an agent-driven TUI session ran under a real pseudo-TTY (transcript .teaagent/tui-dogfood-2026-09-15-pty.txt; run 9d2f7db87eaf4089b1f739088027126a). Exercised help, permission, daily, session list, approvals pending, ask, exit — all functional — but with the fake provider: 0 tool calls, 0 files changed, 0 new shadow receipts. This is partial evidence, not B1: B1 requires real coding with owner-observed testimony. Two residual failures recorded in docs/work-log/m4-dogfood-2026-09-15.md: the TUI launch crash (fixed in 8babc313) and an open show last REPL exit (unhandled exception kills the REPL, code 1). prepare_h4_evidence.py --until 2026-09-15 unchanged: 9 observed / 21 reachable. Packet 4/5 prepared; criterion 4 human_required — the owner session and sign-off plus D1 classification remain owner-only. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (G1–G22 implemented, re-dogfooded; show last fixed): owner-adjudicated fixes landed in 1611e71b (G1–G10, G15–G18, G21, G22; G14 quarantined; G11–G13 untouched per owner). Re-dogfood: approval check returns deny in default AND allow mode (G1 live); preset strict applies 2 wildcard deny grants (G6 live); an auto-stash dogfood run lands git_sandbox_resolved in the real run .jsonl with HEAD on main (G22 live); 154 pending-*.jsonl temps are pre-fix orphans, none new. The open show last REPL exit is now fixed (_cmd_show catches FileNotFoundError, prints error: run '<id>' not found, stays in REPL) with regression test tests/tui/test_tui_show_unknown_run.py. H4 still 9 observed / 21 reachable — fake-provider re-dogfood proves fixes, not new coverage. ADR-0031 close 2026-09-29. promotion_ready stays false. No horizon/milestone status moved by this record.
Update 2026-09-15 (G7/G8 enforce proof; TUI guard single-guarded): the G7/G8 allow path is now proven in both modes: TEAAGENT_H4_RBAC_MODE=enforce denies a role-less assignee (False, "no role with permission start_workflow") and allows the seeded default-operator via the operator role — the exact false-positive/true-positive pair criterion 1 needs, reproducible on demand. The TUI show last fix was promoted to a single handle_command guard covering dispatch + cockpit refresh (with logger.exception); _cmd_show narrows to (FileNotFoundError, OSError); the guard regression test now uses the sibling constructor form. Re-verified: H4 still 9 observed / 21 reachable, DR-006 trailer check passes on 1611e71b, verify_docs.sh green. The remaining lane is unchanged and owner-only: B1 owner session, ADR-0031 sign-off + D1 (close 2026-09-29), EFX live proof. promotion_ready stays false. No horizon/milestone status moved by this record.
Erratum 2026-09-15 (probe artifact polluted H4 count, corrected): the G7/G8 enforce proof was first run with RunStore('.'), which wrote a 2-event probe-enforce-reject-check.jsonl into the repo runs dir and inflated prepare_h4_evidence.py to 11 observed / 22 reachable. Artifact deleted; evidence is back to 9 / 21 (needs_review). The enforce allow/deny pair was re-proven in a throwaway /tmp workspace — zero repo audit writes — and stands: enforce denies role-less assignee, allows seeded operator. Lesson: verification probes must use scratch workspaces, never the repo runs dir.
Erratum 2026-09-15 (H4 count includes an orphan-sourced receipt — corrected reading): of the 9 observed receipts, 8 approval events live in real run .jsonl files, but the 1 subagent_launch receipt (the D1 denial candidate) lives only in pending-1061f13779524cb9b8763a9a2d130e7d.jsonl — a G22-class orphan temp whose parent run b15ffcfb… (which launched the 20b0978c… child subagent) completed without it. All 9 carry no provenance marker, and _is_synthetic_payload treats missing provenance as organic (teaagent/governance/h4_evidence.py:190-196), so the orphan counts as observed. Honest reading: 8 in-log receipts + 1 orphan-sourced D1 candidate, not "9 organic". The orphan is preserved (deleting it would destroy D1 evidence); criterion 1 must be read as 8 + 1-orphan, and the owner D1 verdict should note the receipt's provenance gap. synthetic_excluded: 0 is a filter output, not a cleanliness claim. (Parent id corrected 2026-09-15 per Socratic panel: receipt run_id is b15ffcfb…, not the child.)
Correction 2026-09-15 (DR-006 "2026-09-22" is not an authority date): the "falsifier window closes 2026-09-22" phrasing in roadmap/backlog prose (this doc line 15, backlog-priority.md:20, reviews/roadmap-intent-socratic-2026-09-09.md:11) is roadmap-invented — DR-006 itself (strategy/dr-006-owner-decision-2026-06-22.md:63) defines the falsifiers as a 3-month standing tripwire with no close date, and the 09-22 arithmetic (3 months from 06-22) appears only in plans/horizon-a-close-evidence-loop-2026-09-12.md:38 as a calendar review trigger ("~2026-09-22"), not an expiry of enforcement. Falsifier-1 (mechanical Gate: check) remains in force past 09-22; what the horizon-A plan schedules for ~09-22 is a review of the falsifier evidence, not a lapse of authority. Prose corrected here; the two other mentions stay as historical record of the misreading.
Correction 2026-09-15 ("no new friction entries" was imprecise): the friction log is not dormant — 5/5 owner entries (F2/F3/F6/F7/F8) are closed, and agent verification evidence was added 2026-09-14 on open hypotheses: approval --selector N closes call-id hunting (work-log/operator-friction-log.md:199), the run-id guard verified live with pinning tests (:217), and doctor config provenance verified live with pinning tests (:246). Precise state: no new owner-written entries since 2026-06-22; agent verification evidence added 2026-09-14; closure on the open hypotheses awaits owner validation. Prior "no new entries / dormancy" phrasing understated the agent verification work.
Review recorded 2026-09-16 (roadmap rethink; proposals only): Decision rationale and proposed plan preserves the evidence, corrected G34/G37 interpretations, G1–G22 owner dispositions, proposed triage for all G23–G38 findings, workflow acceptance criteria, and unchanged H4/EFX/quarantine gates. Recommendation: reconcile current status, prioritize bounded first-run/background and existing-contract repairs, then obtain owner-observed coding evidence; do not repeat broad command sweeps or reopen held expansion. The owner requested recording, not adoption: no implementation is scheduled, no owner verdict is supplied, and no horizon/milestone status changes here. Same-day docs reconciliation applied (execution plan header/§1 date, Horizon A/B status banners, held-spec index H4 expiry rows, findings owner-only list, backlog Proposed row, H1 exit-evidence caveat); a G23–G38 triage table (9 governance-gap, 6 owner-override, 1 legacy-competitive) was added to work-log/dogfood-findings-2026-09-15.md for one-batch adjudication. The H1 status/confidence columns and every G23–G38 gate assignment remain owner calls.
Update 2026-09-16 (G23–G38 adjudicated "Yes for all" and implemented): owner accepted the agent-proposed triage as written; fixes landed the same day under the cited gates (9 governance-gap: G26/G27/G28/G29/G31/G32/G33/G35/G36; 6 owner-override: G23/G24/G25/G30/G37/G38; G34 held under ADR-0043). Each finding carries a # test-type: behavior regression that failed pre-change (tests/test_dogfood_*_g*.py), and an integrated scratch journey proved the first-run path: headless init --provider fake (no prompt, gitignore: added) → committed scaffold → offline preflight ready: true → agent run fake with Safe git sandbox auto-enabled, completed, git status --porcelain empty; runs list arrays contain only runs; bare audit verify errors up front; MCP survives an unknown tools/call (-32602). Risk record reviews/dogfood-g23-g38-2026-09-16-risk.md; decisions and residuals in work-log/dogfood-findings-2026-09-15.md §"Owner decisions (2026-09-16)". H4 evidence unchanged (fake-provider probes make no governed tool calls); promotion_ready stays false; D1 still deferred; B1 owner session still pending. No horizon/milestone status moved by this record — the H1 caveat stands until an owner-observed journey (R4) lands.
Update 2026-09-17 (dogfood residuals closed; full suite verified): the last agent-completable residuals landed — automation promote/status resolve unique names (promote via a quarantine-aware selector over list_quarantined(); the active-store selector could never see quarantined specs), setup --no-gitignore opt-out, NUL-byte --api-key classified before any config write, and the dead unimported cli/_handlers/agent_automation.py (596 lines of pre-fix G36/G37 code) deleted. automation.py selectors extracted to _automation_selectors.py and the six commands' identical try/except → classified-error boilerplate dedup'd into a _classified_errors decorator — module back under the god-module gate at 759 lines. ultrawork start argv-forwarding deferred by design (deprecated command). Full suite re-verified sharded: 6295 passed / 0 failed / 23 skipped. promotion_ready stays false. No horizon/milestone status moved by this record.
Review 2026-09-17 (roadmaps, progress, intents): gates re-measured at HEAD 005f6049 — DR-006 falsifier 1 check_dr006_gate_trailer.py --base 3ff0fa24 exit 0 (5 post-2026-09-09 feat commits touching teaagent/, 5 cite a gate); H4 packet --since 2026-08-13 --until 2026-09-17 unchanged at 9 observed / 22 reachable / 1 candidate / needs_review; G1 unexercised (0 organic / 1216 synthetic / 322 unknown of 1538 runs). Only 11 runs landed after the dogfood close (2026-09-15T20:36 → 2026-09-16T17:45), all test leakage, not use: tests/test_tui.py::test_tui_ask_clarify_with_concrete_task_builds_spec built TeaAgentTUI without root=, so its fake-provider ask appended a real run to the repo's own .teaagent/runs index once per full-suite invocation (origin unknown, provider empty, 0 tool calls — 1,057 index rows carry that fixture prompt since 2026-05-08). Fixed in 21381c74 by isolating the test root to a tmp dir (reproduced 1538→1539, post-fix 1539→1539; probe artifact removed per the 2026-09-15 erratum precedent). No H4/G1 number moves: those rows never reached an approval surface and the prompt is already on the synthetic-fixture list — but the index will stop drifting between reviews. Docs reconciled: the owner's 2026-09-15 G14 decision ("quarantine per ADR-0043") had reached backlog-priority.md but not the ADR-0043 register — row added (register now 8 rows: 5 legacy-competitive incl. ANP, 1 M4 carve-out, 2 harness-migration). Intent envelope .teaagent/delivery/roadmap-rethink-2026-09-07/ (gitignored) remains status: unsigned / closed: false with a stale evidence ledger (suite 6681 at 66411a1; H4 2 observed / 2 candidates vs 9/22 now) — closing it is owner acceptance, not agent-updatable. Upcoming owner dates: 2026-09-22 DR-006 calendar review trigger (falsifiers F1–F4: F1 mechanical and clean, F2–F4 unexercised); 2026-09-29 ADR-0031 close — readiness checklist 0/8 signed, D1 verdict + criterion 4 sign-off + B1 owner-observed session still open; 2026-12-09 ADR-0043 quarantine disposition. Agent lane is exhausted: every remaining item is an owner verdict or an owner session. No horizon or milestone status moved by this review.
Review addendum 2026-09-17 (second pass; exit codes captured directly): DR-006 F1 --base 3ff0fa24 exit 0; H4 packet exit 0 at 9 / 22 / 1 needs_review; G1 exit 0 unexercised (0 / 1216 / 322 of 1538); verify_docs.sh exit 0 — all unchanged after 21381c74–89b60bd4. Three reconciliations: (1) ANP stays out of ADR-0043's context table (adr/0043:26-32) — that table is the 2026-09-09 panel's git log --diff-filter=A sweep (it also omits consensus/ and jit_approval_server.py), so the provenance lives only in the register row: teaagent/anp_adapter.py landed 2026-05-18 (ddcd61f5), before both direction decisions, and entered quarantine via owner disposition G14 on 2026-09-15. Owner flag, not agent-resolvable: ADR-0007 still reads "Accepted and Implemented — 2026-05-22" while ADR-0043 now brands its surface legacy-competitive; G14 authorized quarantine, not an ADR rewrite. Same standing pattern as ADR-0019/0020/0021 ("Accepted and Implemented (Beta)") whose consensus/control-plane surfaces sit in the same register — resolve all four together at the 2026-12-09 disposition. (2) ADR-0041 vs ADR-0043 on domain/workflow_engine.py is posture, not a live contradiction: ADR-0041 lists it among the five domain modules and reads Phase 2 as "thin rather than vanish" (adr/0041:86,232,285-287), ADR-0043 marks it "strongest deletion candidate" but defers deletion to 2026-12-09 — a deletion at that review must also amend ADR-0041's five-module scope and retire skills/builtin/workflow-orchestration/SKILL.md. (3) Suite-count discrepancy flagged, not edited: this file's 2026-09-17 update cites 6295 passed / 23 skipped while work-log/dogfood-findings-2026-09-15.md:282 cites 6752 passed for the same day; pytest --collect-only -q tests on this tree collects 6781, so 6295 cannot be a full-suite count of this tree and 6752 is consistent with it. Neither number is re-certified here — the local environment (pytest 9.0.3, no xdist) cannot reproduce CI's --random-order -n auto --dist worksteal run; certify on the next CI-matched run. No horizon or milestone status moved.
Review addendum 2026-09-17 (third pass; G17 propagation): the owner's G17 deletion (1611e71b, 2026-09-15: tui/cockpit_screens.py, tui/cockpit_data_sources.py, three test files) had not reached the docs that promise the tabs — the M4 cockpit acceptance spec (§1 TUI bullet, §3.1 Q1–Q4 "tabs", §4, §6), the held-spec index row, and the SCL-P2-001/CPP-P2-001 rows here. Reconciled with a dated amendment and row caveats; statuses unchanged (owner-directed deletion of unreachable code narrows the surface, it does not un-complete the item). Verified live: teaagent cockpit in a scratch repo returns {control, pending_approvals, schema_version, stale_workspace} with control.memory.quarantine_count present; the TUI [Control Cockpit] panel prints Memory: N entries only — so spec §3.1 Q4 has no TUI surface (data in the CLI snapshot only) — recorded for the owner's §5 walk-through, which alone determines whether the surviving panels satisfy Q1–Q4 (a panel line is feat: under DR-006, not done here). This removes the basis of the advisor's 2026-09-15 "Daily Cockpit Parity vs G17–G20" flag — the mislabeled tabs are gone and parity rests on the shared CockpitState/build_control_cockpit builders that survive — without supplying the acceptance verdict. CPP-P2-001's own acceptance ("one panel summarizes route, memory, review, skill, spec, goal, approval, and cost", plans/community-pain-points-response-plan-2026-06-05.md:48) is the surviving [Control Cockpit] panel, so its Complete needs no owner re-adjudication; SCL-P2-001 carries the caveat. No horizon or milestone status moved.
Update 2026-09-17 (advisor note internalized): the 2026-08-31 external-advisor hypothesis was cited from three committed docs by a path under .omx/artifacts/ that is excluded from git (.git/info/exclude) — evidence readable on one machine only. Internalized verbatim, with the prompt snapshot and an agent-prepared disposition table (extension taken bound to the booked session; revert not triggered; EFX live proof, ADR-0031 sign-off, DR-006 owner falsifier note, B1 owner session and the Horizon C fork all still open), at reviews/external-advisor-roadmap-hypothesis-2026-08-31.md; backlog-priority.md, this file's H4 row and plans/current-roadmap-execution-plan-2026-08-26.md §6.3 now cite it. No horizon or milestone status moved.
Prior update: 2026-08-31 (advisor: H4 extend only if dogfood scheduled for organic events else revert, 0 organic ≠ promotion, demo synthetic ≠ C1; EFX promote only on live proof; M4 dogfood is the only DR-006 lane that can generate organic events/friction/BG-001. Suite observation at bf07bc8: 6681 passed, 0 failed, 26 skipped via sharded pytest -n auto --dist worksteal, 6707 collected — recorded as a historical observation only, not a quality claim, per harness-first §4.2; see suite truncation analysis)
Canonical source of truth. All other status docs (
docs/security/risk-register-and-threat-model-2026-06-02.md,docs/analysis/defeat-scenarios-and-cascade-effects-2026-06-02.md,docs/analysis/active-findings-status-ledger-2026-06-06.md) defer to this document for overall completion status. Per-item test evidence lives in the risk register §9.
Direction note, 2026-06-14. Roadmap rows describe owner-operator harness work unless explicitly labeled future or aspirational. External adoption, hosted deployment, enterprise/team operations, and broad daily-driver claims are not current goals.
Provide a single source of truth for roadmap item status, ownership, confidence, and next gates. Every roadmap item should have exactly one owner surface and status.
As of 2026-08-26, EFX-001 through EFX-003 are the only newly known,
authorized, non-held code items. They entered through DR-006's
governance-gap lane after deterministic local probes reproduced ambiguous
mutating-tool dispatch, effectful-tool approval bypass, and reusable
argument-blind one-time approval. Runtime guards now exist on the existing
runner, registry, audit, and approval seams with focused tests and providerless
acceptance (tests/acceptance/test_efx_durable_effect_flow.py); live
GitHub/browser/provider proof is still required before Complete. They do not authorize an effect
platform, exactly-once claim, distributed outbox, fencing service, actor
supervisor, or second event/workflow framework.
H0-H6 remain status taxonomy, not sprint menus. Other new work starts only from cited owner friction, an independently proved governance gap, a dated owner override, qualifying M4 co-maintainer dogfood, or the existing dated decision queue. A trigger opens evaluation outside the proved governance-gap lane; it does not create implementation authority or prove completion.
| Horizon | Name | Target Outcome | Owner | Status | Confidence | Next Gate | Exit Evidence |
|---|---|---|---|---|---|---|---|
| H0 | Claim and risk hygiene | Public claims, risk register, docs gates, and tool warnings are owned | governance | Complete | High | H1 | H0 exit evidence met; all M0 checks pass |
| H1 | Daily operator loop | Setup, daily cockpit, plan, execute, approve, verify, recover, and remember are one coherent journey | governance | Complete | High | H2 | Journey acceptance tests pass across CLI/TUI baseline; acceptance tier snapshot 628 passed at 85109e4 (2026-06-10); 2026-09-16 caveat: this closure is the June implementation milestone, not current end-to-end verification — dogfood findings G23/G24/G29/G30/G31/G38 (first-run and background paths, 2026-09-15) are unadjudicated; see reviews/roadmap-rethink-2026-09-16.md §3.1 |
| H2 | Multi-surface continuity | CLI, TUI, IDE, dashboard, background, cloud, and gateway share one run-state contract | TBD | On Hold — M2 foundation complete | Medium | Owner-validated continuity need | M2 acceptance complete; full surface parity (IDE/dashboard/cloud) is external/future under harness-first |
| H4 | Durable owner/agent operations | Long-running owner-operator and co-maintainer-agent workflows have durable run-state continuity, control-plane views, policy, audit, and cost attribution. Run continuity does not imply exactly-once tool execution, external-effect settlement, business acceptance, or reversal; ADR-0042 remains binding | TBD | On Hold — shadow wiring exists; ADR-0031 evidence packet prepared 2026-08-27, refreshed 2026-08-31 and re-verified 2026-09-12 over the closed decision window 2026-08-13→2026-09-11 (0 observed / 0 reachable, verdict unexercised); extended window 2026-08-13→2026-09-15 after the booked 2026-09-15 M4 dogfood: 8 in-log approval receipts + 1 orphan-sourced D1 subagent_launch denial candidate across 22 reachable runs (21 at dogfood close + 1 hook-fixture run; no new organic receipts), verdict needs_review, packet 4/5 prepared (criterion 4 human sign-off human_required); promotion_ready=false is a hardcoded literal, not a metric; H4 demo scripts/exercise_h4_shadow_demo.py exercisable (2 synthetic candidates, must not launder into C1) and guarded (tests/test_h4_shadow_demo.py); 2026-09-12 expiry-day state: no dogfood session booked, zero new runs and zero new friction entries since review, so promotion is unreachable — owner decided 2026-09-14: extend with a booked co-maintainer dogfood session (new window close set on booking) |
Low | Dogfood session booked 2026-09-15 (background+cockpit, docs/work-log/m4-dogfood-2026-09-15.md) — new ADR-0031 window close 2026-09-15 (decision deadline 2026-09-29 per risk report — G1–G5 condition); EFX live-proof closure remains pending owner authorization | Policy/RBAC shadow-wired (WDA-002/003); EFX-001–003 runtime guards landed on existing seams with live-provider proof pending; EFX live-proof procedure docs/plans/efx-live-proof-procedure-2026-08-31.md and H4 demo scripts/exercise_h4_shadow_demo.py/tests/test_h4_shadow_demo.py ready for owner auth; generic external-effect reconciliation remains held; ADR-0029 Option D executed; ADR-0031 evidence packet at .teaagent/reviews/adr-0031/ (2026-08-27, refreshed 2026-08-31, re-verified 2026-09-12); advisor hypothesis (2026-08-31) internalized with its dated disposition at reviews/external-advisor-roadmap-hypothesis-2026-08-31.md (the original .omx/artifacts/ run artifact is local-only, not in git); 2026-09-15 M4 dogfood: ADR-0031 packet 4/5 prepared (criteria 1/2/3/5 prepared, criterion 4 human sign-off human_required), 9 observed h4_governance_shadow events (8 approval + 1 subagent_launch denial candidate) across 21 reachable runs, verdict needs_review, promotion_ready=false; 2026-09-15 window closed — next action is owner sign-off on the 4/5 packet + D1 classification by 2026-09-29 (extension conditioned on G1–G5 per risk report) |
| H6 | Owner packaging and local distribution | Desktop/client-server and local release channels have supply-chain, update, rollback, and support plans for owner-operated use | TBD | On Hold — local proof exists; daily CLI unwired | Low | Owner update friction + trust-boundary proof | Single-platform update proof is reproducible via scripts/prove_update_platform.py; update/* remains intentionally absent from the daily CLI; no desktop packaging/session-attach proof |
Owner-ratified harness goals from the Harness-First Direction §2. This table owns their current honest status; the identity document keeps the ratified wording. Adoption record: whole-project lens review.
| Goal | Ratified outcome | Status | Evidence / gate |
|---|---|---|---|
| G1 | Daily task without consulting docs | Unmeasured — no organic evidence | Friction log 5/5 owner entries closed, but no new owner-written entries since 2026-06-22 (2026-09-14 agent verification evidence added on open hypotheses); no doc-lookup metric exists; .teaagent/runs/runs-index.jsonl records 1528 runs as of 2026-09-16 with zero origin: owner runs (1206 synthetic, 322 unknown — of which 65 are origin: dogfood; 2026-09-09 audit's 415-run/6-prompt shape superseded). Absence of friction is dormancy evidence, not ergonomics evidence. scripts/prepare_g1_evidence.py (B-01, 2026-09-12) now reports the organic/synthetic denominator plus a verdict (unexercised today) so an empty log can no longer read as success |
| G2 | Any run explained from one artifact | Pending — surface measured in CI (owner field validation still open) | teaagent agent show <run> plus run evidence summary (tests/acceptance/test_run_evidence_summary_flow.py); one-screen acceptance asserted by test_run_receipt_answers_three_questions_within_one_screen (B-02, 2026-09-12): why-allowed/what-changed/how-undo within DEFAULT_PAGINATION_LINES (50), passing in CI (verified 2026-09-16, 12/12 in file). Owner field validation (real-run readability) still open |
| G3 | One event spine | Partial — rescoped by owner decision | M3 plan gate moved to a typed RunEvent spine interceptor cleanly; M4 approval/budget and M5 HookRegistry enforcement were assessed unsuitable for the spine/interceptor model and stay inline by owner-reviewed evidence (docs/work-log/m4-budget-stays-inline-2026-06-13.md, docs/work-log/m5-hooks-observability-only-2026-06-13.md). The spine's realized value is the observability read side, not wholesale relocation of mutating enforcement |
| G4 | Extensible by hooks, not forks | Partial — observability wired; enforcement bridge held | HookRegistry exists and emits typed audit events (TOOL_HOOK_PRE_MUTATION, TOOL_HOOK_POST_MUTATION, etc.) surfaced by the M2 reader; tests/acceptance/test_hook_lifecycle_flow.py passes. Pre/post tool hooks mutate in-flight args/results in teaagent/tools.py; moving enforcement to spine consumers is unsuitable (same runtime-coupling finding as M4). Six session-lifecycle hooks are defined but not wired to production callers — see m5-hooks-observability-only-2026-06-13.md |
| G5 | Docs corpus carries its weight | Partial — corpus cost signal live + constitution cap enforced | docs/generated/docs-aging-dashboard.md ## Corpus Cost (G5 Signal) reports total/live/archive counts and per-surface costs; scripts/report_docs_aging.py runs in CI. Current corpus: 667 Markdown files, 666 in docs-inventory.md (8 constitution, 369 working, 289 archive). Constitution-tier ≤ 12 enforced by check_docs_inventory (_CONSTITUTION_MAX_DOCS = 12, pinned by test_constitution_tier_cap_enforced_at_twelve); archive-tier discipline is manual, not automated |
| G6 | Tests prove behavior, not construction | Complete — typing complete, ratchet absolute, zero flags | 608 test files (as of 2026-09-15); all 458 backlog files classified 2026-09-13 (455 behavior / 82 contract / 39 adversarial / 31 lifecycle); UNTYPED_BASELINE = 0 — --fail-on untyped in CI now fails on any new untyped file (VND-001 test file typed 2026-09-15, re-verified 0 untyped). All 71 construction_only + all 36 no_assertions/assert_true/undocumented_skip files strengthened 2026-09-13 (every assert verified against probed runtime behavior). Audit fully clean: high_risk_files: 0, medium_risk_files: 0, construction_only_files: 0, placeholder_files: 0. Raw suite counts are not a quality claim per harness-first §4.2 |
These items do not reopen or renumber H0-H6. Promote is the scheduling
disposition under DR-006; implementation status is In Progress while focused
runtime and providerless acceptance evidence exists and live-provider proof is
still required for Complete.
| ID | Work Item | Implementation Status | Scheduling | Confidence | Required Exit Evidence |
|---|---|---|---|---|---|
| EFX-001 | Refuse blind redispatch after an unmatched mutating-tool start; surface the attempt as unconfirmed/UNKNOWN |
In Progress — runner sandwich + process-death test | Promote — P0 governance-gap |
High | tests/test_efx001_interrupted_dispatch.py; providerless tests/acceptance/test_efx_durable_effect_flow.py; live GitHub/browser/provider proof still required for Complete |
| EFX-002 | Inventory effectful tools and fail closed when local policy sees external mutation, regardless of misleading read-only/destructive hints | In Progress — local external_effect + fail-closed backends |
Promote — P0 governance-gap |
High | tests/test_efx002_effect_classification.py; providerless tests/acceptance/test_efx_durable_effect_flow.py; live GitHub/browser/provider proof still required for Complete |
| EFX-003 | Bind one-time approval to run, tool, canonical payload/effect intent, then consume or expire it before dispatch | In Progress — digest-bound consume-once JIT | Promote — P0 governance-gap |
High | tests/test_efx003_one_time_approval.py; providerless tests/acceptance/test_efx_durable_effect_flow.py; live GitHub/browser/provider proof still required for Complete |
| EFX-FUTURE | Provider-specific idempotency, settlement, and reconciliation beyond ADR-0042 | Absent | On Hold | Low | Local gaps closed, dated owner promise, provider-enforced identity/status contract, effect-specific fault evidence, and Human Review |
EFX exit-evidence clarification (2026-09-13 gated-items panel): the
providerless evidence already proves the guards — EFX-001 crash-consistency
is exercised by a real os._exit(73) mid-effect, EFX-002 classification is
static + tested, EFX-003 digest-binding is consume-once tested. The residual
that "live-provider proof" uniquely covers is narrow and falsifiable: one
real provider mutation observed to behave as classified (e.g. a GitHub
create_pr call passing through the approval/effect path against a real
provider), which requires owner-authorized credentials and target. The gate
holds; the wording is narrowed so it cannot sit unfalsifiably forever.
Evidence and adoption status: Durable-Effect Roadmap Socratic Review. Current execution sequence (non-authoritative): Current Roadmap Execution Plan.
Survey-derived candidates from the agentflow b2935f5→fcb6878 (v8.2.0)
delta review, 2026-09-13 (record:
.teaagent/reviews/agentflow-structures-2026-09-12/delta-2026-09-13-v8.2.0.md,
gitignored). These do not reopen or renumber H0-H6. Proposed means documented
and not accepted as implementation-ready; none is scheduled without owner
approval under DR-006. Mechanisms serving existing goals (suggested-default
questions → G1; qualifying-path review rule → EFX-002 conformance) are noted in
the delta record, not listed as rows.
| ID | Work Item | Implementation Status | Scheduling | Confidence | Required Exit Evidence |
|---|---|---|---|---|---|
| AGF-001 | Cross-host skill conflict audit: extend skill explain (or add skill audit --inventory) to enumerate foreign skill roots and Codex/Claude plugin caches read-only, plus a once-per-conflict semantic warning protocol (quote both clauses, name consequence, state which instruction wins) |
Complete — teaagent skill audit inventories active + foreign roots (.agents/skills, plugin caches), marks loadable, reports collisions, embeds SKILL_CONFLICT_PROTOCOL (teaagent/skill_loader.py, tests/test_skill_audit_inventory.py) |
Complete — implemented 2026-09-13 under owner "implement governance gaps" direction | Medium | Inventory acceptance test over fixture roots; conflict-warning text contract test; no execution of inspected skills |
| AGF-002 | Inline incident citations on the two uncited guards (check_dr006_gate_trailer, check_action_register_link), matching the cite-originating-failure convention of peer guards |
Complete — both guards carry Origin: paragraphs citing the 2026-09-09 review failure (landed 86fa25ea) |
Complete — verified 2026-09-13 | High | Guard comments cite originating failure; no behavior change |
| AGF-003 | Run-store retention/prune policy for completed inactive records (agentflow completion-cleanup analog: opt-in, Trash-equivalent, age-gated) |
Absent — no retention in run_store.py/run_logging.py |
On Hold — premature at zero organic delivery traffic; re-propose when organic runs exist | Low | Retention policy spec + prune acceptance test over fixture run store |
| AGF-004 | metadata.version (or equivalent) field in SKILL.md frontmatter as single per-skill version source |
Absent — frontmatter is name/description only |
On Hold — no consumer asks for per-skill versions; revisit if marketplace ships independently versioned skills | Low | Version field parsed + surfaced in skill explain |
Survey of OpenAI / Anthropic / Google DeepMind agent-and-governance
directions (record:
.teaagent/reviews/vendor-directions-2026-09-13/survey-record.md,
gitignored). Conclusion: all three vendors now treat the harness/environment
layer as the security boundary — validating harness-first. Rows below are
the only gaps the survey surfaced; none is scheduled without owner approval
under DR-006.
| ID | Work Item | Implementation Status | Scheduling | Confidence | Required Exit Evidence |
|---|---|---|---|---|---|
| VND-001 | Live supervisor/monitor lane: trusted reviewer pass over the run trajectory (post-run first, in-run later) classifying events against a threat taxonomy; acceptance shaped on DeepMind's coverage/recall/time-to-response metrics | Implemented — teaagent/run_review.py post-run reviewer classifies each tool call against the insider-threat taxonomy via teaagent runs review <run_id>; in-run live monitor remains future |
Complete — implemented 2026-09-14 under owner authorization + governance-gap DR-006 gate |
Medium | Post-run reviewer pass over fixture audit log; taxonomy-classified findings; coverage metric reported (tests/test_run_review.py, 7 tests) |
| VND-002 | Insider-threat/misalignment threat class in docs/threat-model.md — agents as potential insider threats (DeepMind AI Control framing), not only external attackers |
Complete — insider-threat class added to docs/threat-model.md (new threat-table row + dedicated section) |
Complete — implemented 2026-09-14 under owner "implement tasks" direction | High | Threat-model section added; no behavior change |
| VND-003 | Agent-autonomy metrics (check-in rate, interruption rate, pause-vs-assume calibration — Anthropic's measuring-agent-autonomy shape) | Absent — same zero-organic blocker as G1 | On Hold — no organic runs to measure; re-propose when M4 dogfood lands | Low | Metric definitions + instrumented run fields |
| Milestone | Target | Outcome | Owner | Status | Confidence | Next Gate | Exit Criteria |
|---|---|---|---|---|---|---|---|
| M0 | 1-2 weeks | Risk register operational, release claims traceable, tool lint warnings budgeted | governance | Complete | High | M1 complete | All 3 checks pass: validate_docs_consistency.py, refresh_competitive_docs.py --check, teaagent tool lint --root . |
| M1 | 2-6 weeks | Daily cockpit parity, run evidence summary, guided recovery | TBD | Complete | High | M2 complete | CLI/TUI cockpit parity acceptance, run evidence summary acceptance, guided recovery acceptance |
| M2 | 4-10 weeks | Long-session context health, hash-bound plans, scope creep measurement | TBD | Complete | High | M3 complete | Long-session context guard acceptance, scope budget acceptance, plan revision acceptance |
| M3 | 8-14 weeks | Extension activation explain, MCP trust onboarding, subagent review/merge | TBD | Complete | High | M4 complete | Extension activation explain acceptance, MCP trust onboarding acceptance, subagent review/merge acceptance |
| M4 | 12-22 weeks | Background/cloud durability, gateway task intake, control-plane operator cockpit | TBD | On Hold except DR-006 dogfood carve-out | Low | Dated BG-001/cockpit dogfood evidence | Only background lifecycle + operator cockpit are eligible under co-maintainer dogfood; cloud/SaaS/multi-tenant GTM remains held. Eligibility is not need or completion |
| M5 | Ongoing | Prompt/runtime/model/provider gating, repo-map benchmarking, release evidence bundles | TBD | Blocked — fixture corpus gated | Low | Funded non-advisory release profile + owner decision | Prompt/conversational regression suite and repo-map fixture corpus are in the release profile; model/provider regression evidence remains external |
| M6 | After M1-M4 | Desktop/client-server packaging for owner-operated trust, update, rollback, session attach | TBD | On Hold — no authorized owner demand | Low | Owner friction or dated override | Packaged launch smoke, signing/SBOM/update docs, and desktop session-attach acceptance remain future contracts |
| ID | Work Item | Owner | Status | Confidence | Next Gate | Risk |
|---|---|---|---|---|---|---|
| GOV-001 | Create canonical roadmap status table | TBD | Complete | High | GOV-002 | Medium |
| GOV-002 | Add risk-register schema | docs / governance | Complete | High | release audit | High |
| GOV-003 | Add claim-to-evidence matrix | docs / governance | Complete | High | release audit | High |
| GOV-004 | Define verification profiles | docs / governance | Complete | High | release audit | High |
| GOV-005 | Add warning-budget ownership | docs / governance | Complete | High | release audit | Medium |
| GOV-006 | Create release-channel source of truth | docs / governance | Complete | High | release audit | Medium |
| GOV-007 | Make competitive survey freshness a release checklist blocker | docs / governance | Complete | High | release audit | Medium |
| GOV-008 | Add decision expiry dates to ADRs | docs / governance | Complete | High | ADR review | Medium |
| GOV-009 | Add issue template for roadmap tasks | docs / governance | Complete | High | backlog refinement | Low |
| GOV-010 | Tag backlog items by user journey | docs / governance | Complete | High | backlog refinement | Low |
| GOV-011 | Create "do not claim" list | docs / governance | Complete | High | release audit | Medium |
| GOV-012 | Add release residual-risk summary | docs / governance | Complete | High | release audit | High |
| GOV-013 | Create curated documentation front door | docs | Complete | High | GOV-014 | Low |
| GOV-014 | Add doc-vs-HEAD guarded claim registry | docs / verification | Complete | High | release audit | High |
| GOV-015 | Audit High/Critical module risks for upward links | docs / module owners | Complete | High | GOV-016 | High |
The June 5 dynamic-skill research narrows the first H3 proof point: TeaAgent should not expand ecosystem breadth until generated skills, long results, and skill-output verification are testable against the RSS failure case. DSK-P0-001 through DSK-P0-007 (lifecycle state machine, write quarantine, offline RSS fixture, long-result envelope, output validators, explainability, and decision-visibility) form the first ecosystem-trust spine.
| ID | Work Item | Owner | Status | Confidence | Next Gate | Risk |
|---|---|---|---|---|---|---|
| DSK-P0-001 | Skill lifecycle state machine distinguishes loaded, activated, used, and verified. | skills / audit | Complete | High | lifecycle event tests | High |
| DSK-P0-002 | Direct active-skill writes are blocked, quarantined, or labeled unmanaged. | workspace tools / skill writer | Complete | High | protected path acceptance | High |
| DSK-P0-003 | Offline RSS fixture acceptance proves source-backed skill output. | tests / skills | Complete | High | fixture summary test | High |
| DSK-P0-004 | Long-result envelope preserves preview, full artifact, hash, and cursor. | tools / audit | Complete | High | large result fixture test | High |
| DSK-P0-005 | Output artifact validators for source-backed tasks. | tests / verifier | Complete | High | validator test suite | High |
| DSK-P0-006 | Unmanaged skill explainability state labels candidate, shadowed, and blocked skills. | skill loader / CLI | Complete | High | explainability state test | High |
| DSK-P0-007 | Invalid tool-decision failure is visible in skill flows, not silently successful. | chat agent / runner | Complete | High | invalid-decision test | High |
| DSK-P1-001 | Behavioral skill eval compares with-skill and without-skill results. | skill eval | Complete | High | deterministic eval harness | Medium |
| DSK-P1-002 | Skill invocation audit records activation cause and output artifact links. | audit / run store | Complete | High | run evidence integration | Medium |
| DSK-P1-003 | Explicit skill activation UX is available through CLI/task config first. | CLI / runner | Complete | High | explicit activation acceptance | Medium |
Current evidence package:
- Dynamic Skill Generation And Long Result Audit
- RSS Dynamic Skill Failure Case Study
- Agent Ecosystem Core Values
- Dynamic Skill Critical Questioning
- Dynamic Skill And Long Result Work Items
- Dynamic Skill Lifecycle And Result Flow
The June 5 competitor pass identifies seven control loops that should become TeaAgent's architecture and product governance model across H0-H5: spec-first direction, dynamic workflow breadth, loop/goal depth, model routing, synthesis review, precise memory, and human review gates. This track is cross-horizon because each loop touches multiple existing modules rather than a single roadmap horizon.
Complete below records the implementation state of the listed historical
items. It does not authorize follow-on work. This survey-derived
legacy-competitive track remains held unless a new item cites owner friction,
an independently proved governance gap, or a dated owner override.
| ID | Work Item | Owner | Status | Confidence | Next Gate | Risk |
|---|---|---|---|---|---|---|
| SCL-P0-001 | Bind high-risk runs to a spec or plan receipt. | plan gate / runner | Complete | High | failing high-risk no-spec test | High |
| SCL-P0-002 | Add repo-grounding checks before spec tasks execute. | plan gate / code map | Complete | High | stale-spec fixture test | High |
| SCL-P0-003 | Link dynamic skill lifecycle and long-result work as the H3 proof path. | skills / docs | Complete | High | DSK-P0 link audit | High |
| SCL-P0-004 | Define persisted goal records for loop state, evidence, and stop criteria. | runner / run store | Complete | High | goal record schema test | High |
| SCL-P0-005 | Add model-route receipts to audit and run evidence. | model routing / audit | Complete | High | deterministic route fixture | Medium |
| SCL-P0-006 | Define synthesis review artifacts for high-risk answers. | review / evidence | Complete | High | contradictory-source fixture | High |
| SCL-P0-007 | Define human review gate packets for irreversible actions. | approval / TUI | Complete | High | destructive action packet test | High |
| SCL-P1-001 | Add typed memory metadata: scope, source, confidence, TTL, supersession, owner. | memory | Complete | High | memory promotion tests | High |
| SCL-P1-002 | Add memory quarantine and promotion flow. | memory / review | Complete | High | unreviewed memory injection test | High |
| SCL-P1-003 | Add goal status and evidence inspection commands. | CLI / TUI | Complete | High | status command acceptance | Medium |
| SCL-P1-004 | Add role-aware model routing tests. | model routing | Complete | High | route matrix tests | Medium |
| SCL-P1-005 | Require synthesis review for source-backed high-risk research. | review / docs | Complete | High | review requirement validator | Medium |
| SCL-P1-006 | Add gate packets to skill install and memory promotion. | skills / memory / approval | Complete | High | gate packet acceptance | High |
| SCL-P2-001 | Build a TUI cockpit for spec, goal, route, review, memory, and approval state. | TUI | Complete — surface narrowed 2026-09-15: tabbed screens deleted per owner G17 (1611e71b); the status-view [Control Cockpit] panel (teaagent/tui/core.py:319-381) carries exactly these six sections |
High | cockpit prototype | Medium |
| SCL-P2-002 | Add release evidence bundle for all seven loops. | release / docs | Complete | High | release bundle check | Medium |
Current evidence package:
- Seven Control Loops Competitor Survey
- Seven Control Loops Product Direction
- Seven Control Loops TeaAgent Integration Map
- Seven Control Loops Critical Questioning
- Seven Control Loops Work Items
The June 5 community pass adds a user-pain overlay to the seven control loops. The work is deliberately receipt-oriented: make routing, memory, review, cost, skill/MCP, approval, goal, and proof-of-use behavior visible before widening autonomy.
Complete below records implementation that already landed; it is not evidence
of current community demand. Follow-on community-survey work is held unless it
passes the same DR-006 authority gate as any other hypothesis-derived item.
| ID | Work Item | Owner | Status | Confidence | Next Gate | Risk |
|---|---|---|---|---|---|---|
| CPP-P0-001 | Add route evidence panel to run summary. | model routing / run evidence | Complete | High | model route fixture | High |
| CPP-P0-002 | Add goal checkpoint receipt. | runner / run store | Complete | High | long-goal checkpoint test | High |
| CPP-P0-003 | Add memory write quarantine rule for agent-created project memory. | memory / approval | Complete | High | pending-memory test | High |
| CPP-P0-004 | Add review artifact minimum schema. | review / subagents | Complete | High | missing-evidence review test | High |
| CPP-P0-005 | Add approval authority receipt. | approval / audit | Complete | High | exact-scope authority test | High |
| CPP-P0-006 | Add dynamic asset provenance summary. | skills / MCP / audit | Complete | High | dynamic asset evidence test | High |
| CPP-P0-007 | Add proof-of-use requirement for skill-backed outputs. | skills / runner | Complete | High | skill-backed output test | High |
| CPP-P0-008 | Add intent-drift pre-write check for high-risk runs. | plan gate / policy | Complete | High | out-of-scope write test | High |
| CPP-P1-001 | Add review repeat suppression. | review / evidence | Complete | High | repeated finding state test | Medium |
| CPP-P1-002 | Add phase budget thresholds. | budget / model routing | Complete | High | phase budget test | Medium |
| CPP-P1-003 | Add context pressure score. | context bus / TUI | Complete | High | context score test | Medium |
| CPP-P1-004 | Add untrusted-source memory tests. | tests / memory | Complete | High | memory poisoning fixture | High |
| CPP-P1-005 | Add risk-adaptive spec exemption UX. | plan gate / CLI | Complete | High | low-risk exemption test | Medium |
| CPP-P2-001 | Add control-plane cockpit. | TUI | Complete — CLI teaagent cockpit snapshot + TUI status panels; tabbed TUI screens deleted 2026-09-15 per owner G17 (1611e71b); see the 2026-09-17 amendment in specs/operator-cockpit-acceptance-spec-2026-07-11.md |
High | cockpit acceptance test | Medium |
Current evidence package:
- Proposed: Item is documented and not yet accepted as implementation-ready
- Complete: Item is fully implemented and verified
- In Progress: Item is actively being worked on
- Pending: Item is not yet started
- Blocked: Item is blocked by dependencies
- On Hold: Item is intentionally deferred
- High: High confidence in approach and timeline
- Medium: Moderate confidence, some unknowns remain
- Low: Low confidence, significant unknowns or dependencies
| Item | Status | Completion % | Evidence Type | Owner | Notes |
|---|---|---|---|---|---|
| SEC-01 Audit HMAC persistence | Fixed | 100% | Code + passing tests | — | Key persisted at teaagent/audit.py:163; RISK-01 hardening: key-save OSError now logs warning (no silent pass); HMACKeySaveTests::test_chain_key_save_failure_logs_warning |
| SEC-17 ApprovalPolicy thread leak | Fixed | 100% | Code + passing tests | — | ENG-01: __del__ shuts down executor; ApprovalPolicyThreadLeakTests |
| SEC-18 Zero cost rates (fake/ollama/vllm) | Fixed | 100% | Code + passing tests | — | RISK-02: nominal non-zero rates; ProviderCostRateTests |
| SEC-19 JIT approval no timeout | Fixed | 100% | Code + passing tests | — | OPS-01: 60s default timeout, auto-deny; JITApprovalTimeoutTests |
| SEC-02 MCP trust expiry | Fixed | 100% | Code + passing test | — | teaagent/mcp_trust.py:286, teaagent/mcp_trust.py:343; test_server_trust_expiry() |
| SEC-04 Budget default | Fixed | 100% | Code + passing tests | — | Default 500 cents; test_budget_zero_cents_rejects_any_spend() |
| SEC-06 JIT isolation | Fixed | 100% | Code + passing tests | — | test_subagent_jit_approval_isolation_sec06() |
| SEC-07 Docker hardening | Fixed | 100% | Code + passing tests | — | teaagent/subagents/_isolation.py:347-365; test_docker_isolation_*() |
| SEC-10 Shell allowlist | Fixed | 100% | Code + passing tests | — | teaagent/workspace_tools/_shell.py:174; test_all_inspect_commands_classified_as_inspect() |
| DS-02 TUI controller routing | Fixed | 100% | Code + passing tests | — | teaagent/tui/core.py:996; controller-based cost/undo/task |
| DS-05 TUI undo via journal | Fixed | 100% | Code + passing tests | — | teaagent/tui/core.py:1057; test_tui_undo_uses_journal() |
| DS-09 Background UUID rejection | Fixed | 100% | Code + passing test | — | test_agent_run_background_rejects_known_run_or_suspension_id() |
| DS-12 Empty-path approval | Fixed | 100% | Code + passing tests | — | test_empty_path_globs_rejected_ds12() |
| DS-13 Budget zero semantics | Fixed | 100% | Code + passing tests | — | None=unlimited, 0=no-spend |
| DS-01 TUI cost accumulation | Fixed | 100% | Code + passing tests | — | TICKET-12; test_task003_cost_truth.py |
| DS-08 resume always errors | Fixed | 100% | Code + passing tests | — | TICKET-16 Phase 2; test_repl_suspend_resume_roundtrip |
| DS-11 Initial task dropped | Fixed | 100% | Code + passing tests | — | TASK-DD2-001; chat task forwarding tests |
| H0 Claim + risk hygiene | Complete | 100% | Code + docs | governance | All H0 items done; risk register has Owner/Due; M0 checks pass |
| M0 Risk register operational | Complete | 100% | Code + docs | governance | All 3 M0 checks verified passing |
Merge gate: python3 scripts/validate_docs_consistency.py must pass before any PR that updates roadmap or risk register status.
Unverified ecosystem claims: See docs/security/risk-register-and-threat-model-2026-06-02.md Appendix C for a full list of aspirational claims that must not be marked as shipped without test evidence.
- This document should be updated when roadmap items change status
- Every roadmap item should have exactly one owner surface
- Status changes should be traceable via git history
- This document is referenced by release checklist and docs validators
- Documentation-current-truth work is tracked in
docs/plans/documentation-optimization-master-plan-2026-06-04.mdanddocs/work-log/documentation-optimization-work-items-2026-06-04.md - Phase 0 governance closure evidence is tracked in
docs/work-log/phase-0-governance-closure-report-2026-06-04.md - Full pytest collection is expected to run from the development environment
declared in
pyproject.toml;hypothesisalready appears underproject.optional-dependencies.dev, so the June 11 collection failure was an environment provisioning gap rather than a missing dependency declaration.