Skip to content
<!-- e2e-coverage-matrix: v1 — machine-parsed; see the coverage-matrix skill of the e2e-coverage bot -->

E2E coverage matrix

The single feature×coverage inventory for iterion. One row per operator-observable promise, at the granularity a regression report would name it. Every row is terminal (covered-deterministic / covered-live / unit-only / excluded) or an honest uncovered gap with the plan.

A citation must be the test that would FAIL if the promise broke. The deterministic gate greps every reference, so it catches a citation that does not exist — it cannot catch one that exists but tests something else. Two adversarial audits sampled 70 rows and found 11 such mis-citations (mostly: a row citing the mechanics of a helper while the WIRING that invokes it went untested). When you touch a row, re-read the cited test and ask what its failure would actually mean.

This file supersedes the three partial coverage docs it reconciles:

  • docs/e2e_coverage.md — the iterion×claw-code-go live matrix + the deliberate claw-side gaps (folded into the backends, tools-mcp and observability families below).
  • docs/live-e2e-coverage.md — the opt-in real-LLM layer (how it works, the quality-judge panel, the per-bot targets). Still the reference for running the live layer; its bot/feature tables are mirrored here as covered-live rows.
  • e2e/SCENARIOS.md — the flagship-workflow stub-executor scenarios (folded into runtime and dsl).

Legend

StatusMeaning
covered-deterministicA CI-runnable, credential-free test drives the real seams and asserts observable outcomes
covered-liveOnly exercised in the opt-in live-tagged layer (needs a real model/credential)
unit-onlyDeliberately terminal at unit level — an e2e would only re-test the harness
excludedNot exercisable in this repo's harness (needs a third-party tenant / cloud control plane)
uncoveredReal gap — backlog

What "the front door" means per family

  • dsl — the front door is .bot source text: parse → compile → the diagnostic or IR an operator sees from iterion validate. Rows whose behaviour only shows at execution time cite a runtime/e2e test instead.
  • runtime — the public engine API (runtime.Engine.Run/Resume) against a real store.RunStore, asserting persisted status, checkpoint, artifacts and the event stream. e2e/ additionally enters through .bot fixtures.
  • clicli.Run* entry points with a real store and (where an LLM would be involved) a stub runtime.NodeExecutor injected at the documented seam.
  • server-api / cloudhttptest against the real wired handler.
  • studio-ui — Playwright (studio/e2e/, task test:e2e:ui) drives a real Chromium against the REAL server: the built iterion binary serving the embedded SPA over a throwaway store that studio/e2e/serve.mjs seeds with genuine artifacts — runs the engine actually executed (tool + compute fixtures, no LLM credential) and a board card created through the CLI. The suite asserts rendered content and interactions, never HTTP status codes. It is deliberately NOT wired into the blocking CI job yet (the browser download is opt-in; task test:e2e:ui skips cleanly without it).

Scope of the current campaign

Pass 1 built this inventory and closed the highest-value CLI quick wins (run --preset, run --max-*, secret, runs questions|answer, report). Pass 2 closed the remaining CLI quick wins: issue, diagram, skill, memory, run --recipe. Pass 3 closed the four CLI rows earlier passes had written off as needing a seam or a live model — the cli family is now terminal end to end. Each turned out to have a deterministic front door:

  • run --model/--backend — drive the REAL executor at fixtures whose backend/model cannot resolve; the failure text quotes whichever value won the resolution chain, offline.
  • run --auto-resume — the loop's only wait is the reset-aware USAGE_LIMIT_BLOCKED delay, and the run's own retry policy clamps it, so a 1ms horizon removes the sleep without a clock seam.
  • bench asymptote — the command re-runs nothing; stub-driven runs of a judge-in-a-loop fixture supply the exact events it parses.
  • dispatch — boot the daemon in-process on a loopback port, assert the served surface, stop it with SIGTERM.

Everything still uncovered is deliberate backlog for later scoped runs, family by family. What is left, and why it is not a quick win:

Pass 5 introduced the browser harness the studio-ui family was waiting on and closed its rows (see the family note above).

Pass 4 closed the three remaining cloud rows — dlq, migrate-blobs, valkey-state — which earlier passes had written off as needing a live Mongo/S3/Valkey. Each had a deterministic front door after all:

  • valkey-state — two servers built through the real New() wiring over one miniredis; each flow starts on replica A and finishes on replica B.
  • migrate-blobs — the walker between two real stores, plus the real AWS SDK against an in-process path-style S3 gateway.
  • dlq — the admin REST surface behind a narrow QueueBackend seam; the JetStream-side semantics split out as cloud.dlq-jetstream (excluded, no vendored broker).
IDFeatureFamilyStatusTestsNotes
dsl.node-agentagent node: LLM node with structured I/O executes and publishesdslcovered-deterministicTestSingleModel_HappyPath (e2e/e2e_test.go)
dsl.node-judgejudge node: verdict-producing LLM nodedslcovered-deterministicTestSingleModel_HappyPath (e2e/e2e_test.go)
dsl.node-tooltool node: direct shell command, no LLMdslcovered-deterministicTestExecutorToolNodeShellCommand (pkg/backend/model/executor_test.go), TestToolNodeShellMaterializesSecret (pkg/backend/model/secrets_materialize_test.go)the shell path needs the REAL executor: the e2e scenario stub replaces every node — agent and tool alike — so a tool node rerouted through the LLM path would still pass there
dsl.node-computecompute node: deterministic expression outputdslcovered-deterministicTestToolAndComputePublishArtifact (pkg/runtime/engine_test.go)
dsl.node-humanhuman node: pause/resume with interaction recorddslcovered-deterministicTestCompliance_HumanGate (e2e/e2e_test.go)
dsl.node-subbotsubbot node: nested child run, outputs read backdslcovered-deterministicTestRunSubbotsPersistNestedLineage (pkg/cli/run_subbot_test.go)
dsl.node-emit-waitemit/wait: in-bot event pair with mandatory timeoutdslcovered-deterministicTestEventsEmitWait (e2e/events_emit_wait_test.go)
dsl.node-await-answersawait_answers node parks its branch until answers landdslcovered-deterministicTestAwaitAnswersReleasedByAnswer (e2e/async_interaction_test.go)
dsl.node-donedone terminal node ends the run finisheddslcovered-deterministicTestSingleModel_HappyPath (e2e/e2e_test.go)
dsl.node-failfail terminal node ends the run non-resumable faileddslcovered-deterministicTestFailNode (pkg/runtime/engine_test.go)
dsl.router-fan-out-allrouter fan_out_all spawns parallel branchesdslcovered-deterministicTestDualParallel_HappyPath (e2e/e2e_test.go)
dsl.router-fan-out-eachrouter fan_out_each: per-item branches with a dep DAGdslcovered-deterministicTestFanOutEach_DAG_DiamondOrderingAndParallelism (pkg/runtime/fan_out_each_test.go)
dsl.router-conditionrouter condition mode picks the matching edgedslcovered-deterministicpkg/dsl/ir/validate_test.go, TestElseEdge_Routing (pkg/runtime/else_edge_test.go)
dsl.router-round-robinrouter round_robin alternates targets across iterationsdslcovered-deterministicpkg/runtime/round_robin_test.go
dsl.router-llmrouter llm mode: model picks the routedslcovered-deterministicTestLLMRouterSelectsOtherRoute (pkg/runtime/llm_router_test.go)
dsl.edges-conditionaledge when / when not conditions on a boolean output fielddslcovered-deterministicTestSingleModel_RefineLoop (e2e/e2e_test.go)
dsl.edges-elseedge else fires only when no sibling when matcheddslcovered-deterministicTestElseEdge_PreferredOverStrayUnconditional (pkg/runtime/else_edge_test.go)
dsl.edges-loopbounded loop edge as name(n)dslcovered-deterministicTestBoundedLoop (pkg/runtime/engine_test.go)
dsl.edges-loop-templated-caploop cap templated from an upstream outputdslcovered-deterministicTestLoopTemplatedCap_FromOutput (pkg/runtime/engine_test.go)
dsl.edges-data-mappingedge with {…} data mapping and reference interpolationdslcovered-deterministicTestResolveMapping_InterpolatesSurroundingLiterals (pkg/runtime/engine_resolve_mapping_test.go)
dsl.refsreference syntax: input/vars/outputs/artifacts substitutiondslcovered-deterministicpkg/dsl/ir/ref_test.go
dsl.vars-defaultsvars: defaults applied when no override is supplieddslcovered-deterministicpkg/dsl/ir/validate_var_default_test.go
dsl.vars-enumvars: enum constraint rejects an out-of-set value at launchdslcovered-deterministicTestRunRejectsInvalidEnumVar (pkg/runtime/engine_var_enum_test.go)
dsl.presetsin-source presets: block resolves named value setsdslcovered-deterministicpkg/dsl/ir/presets_test.goCLI wiring covered by cli.run-preset
dsl.promptsprompt <name>: blocks and prompt includesdslcovered-deterministicpkg/dsl/ir/prompt_include_test.go
dsl.schemasschema <name>: typed node output contractsdslcovered-deterministicpkg/backend/model/schema_test.go
dsl.cursorscursor <name>: calibration fragments reach the system promptdslcovered-deterministicTestBuildSystemPromptCursorsOnly (pkg/backend/delegate/cursors_test.go), pkg/backend/model/cursors_test.go, pkg/dsl/ir/cursor_resolve_test.go
dsl.attachmentsattachments: block: files resolved and passed to nodesdslcovered-deterministicpkg/dsl/ir/attachments_test.go, pkg/runtime/attachment_path_test.go
dsl.skills-fieldskills: field pulls library skills into the run mirrordslcovered-deterministicpkg/dsl/ir/validate_skills_test.go, pkg/runtime/library_skills_test.go
dsl.mcp-server-blockmcp_server: block declares stdio/http/sse MCP serversdslcovered-deterministicTestMCPServer_SSETransport (pkg/dsl/parser/parser_mcp_test.go)
dsl.capabilitiescapabilities: list opens the board tool surfacedslcovered-deterministicpkg/dsl/ir/validate_capabilities_test.go, TestBoardDispatcher_E2E_CapabilityGate (e2e/board_dispatcher_test.go)
dsl.supervisor-blocksupervisor <name>: declaration compiles and spawns a coordinatordslcovered-deterministicpkg/dsl/ir/compile_supervisors_test.go, pkg/supervise/coordinator_test.go
dsl.compress-fieldcompress: precedence (CLI → node → workflow → env → default)dslcovered-deterministicTestResolveWithDefault (pkg/backend/rewrite/rewrite_test.go), TestResolveWithDefaultSourced (pkg/backend/rewrite/rewrite_test.go), pkg/dsl/ir/compress_test.go
dsl.auto-memory-fieldauto_memory: per-node MEMORY.md switch, off by defaultdslcovered-deterministicpkg/dsl/ir/auto_memory_test.go, pkg/backend/model/executor_auto_memory_test.go
dsl.permission-fieldpermission: mode + allow/ask/deny rule listsdslcovered-deterministicpkg/dsl/ir/permission_test.go, pkg/backend/permission/permission_test.go
dsl.budget-blockbudget: block fields compile onto the workflowdslcovered-deterministicpkg/dsl/ir/budget_ceiling_test.go
dsl.sandbox-blocksandbox: block (image/build/network/host_state) compilesdslcovered-deterministicpkg/dsl/ir/sandbox_test.go, pkg/dsl/parser/parser_sandbox_test.go
dsl.worktree-fieldworktree: mode default resolutiondslcovered-deterministicpkg/dsl/ir/worktree_default_test.go
dsl.session-modessession modes (fresh / inherit / artifacts_only)dslcovered-deterministicTestSessionInherit (pkg/runtime/session_test.go), TestSessionFork (pkg/runtime/session_test.go), TestSessionInheritIfAvailable_FallsBackToFreshWhenNoSession (pkg/runtime/session_test.go)the modes are a RUNTIME behaviour; pkg/backend/model/session_test.go is the session store (persistence + compaction), a different contract
dsl.secrets-blocksecrets: declarations + optional-secret semanticsdslcovered-deterministicpkg/dsl/ir/secrets_test.go, pkg/dsl/ir/optional_secret_test.go
dsl.memory-blockmemory: block scopes/visibility validationdslcovered-deterministicpkg/dsl/ir/memory_visibility_test.go
dsl.verified-actionVerified Action quad (goal/postcondition/policy/recovery)dslcovered-deterministicTestVerifiedActionEngineEmitsAndStrips (e2e/verified_action_test.go)
dsl.groups-iterationgroup: expansion / iteration sugardslcovered-deterministicpkg/dsl/ir/expand_groups_test.go, pkg/dsl/ir/foreach_test.go
dsl.diagnosticscompile diagnostics C001–C2xx codes and severitiesdslcovered-deterministicpkg/dsl/ir/diag_codes_test.go, TestValidate_Invalid (pkg/cli/cli_test.go)
dsl.unparse-roundtripIR → .bot serialization round-tripsdslcovered-deterministicpkg/dsl/unparse/roundtrip_test.go
dsl.ast-jsonAST JSON encode/decode (MarshalFile/UnmarshalFile)dslcovered-deterministicpkg/dsl/ast/jsonenc_test.go
dsl.exprexpression evaluator for compute nodes and when conditionsdslunit-onlypkg/dsl/expr/expr_test.go, pkg/dsl/expr/overflow_test.gopure evaluator, exhaustively asserted at unit level; its e2e effect is already covered by dsl.node-compute — an extra pipeline test would re-assert a pure function
dsl.parser-fuzzlexer/parser robustness on malformed inputdslunit-onlypkg/dsl/parser/fuzz_test.gofuzzing is by nature a unit-level property test; the operator-visible surface (a diagnostic, not a panic) is dsl.diagnostics
runtime.linear-executionsequential node execution to a terminal noderuntimecovered-deterministicTestLinearPath (pkg/runtime/engine_test.go)
runtime.await-wait-allconvergence await: wait_all waits for every branchruntimecovered-deterministicTestDualParallel_HappyPath (e2e/e2e_test.go)
runtime.await-best-effortconvergence await: best_effort proceeds on partial branchesruntimecovered-deterministicTestChaos_FailMidFanOut_BestEffort (pkg/runtime/chaos_test.go)
runtime.local-looplocal loop re-executes and versions artifactsruntimecovered-deterministicTestSingleModel_RefineLoop (e2e/e2e_test.go)
runtime.global-reloopglobal reloop restarts the recipe from an upstream noderuntimecovered-deterministicTestSingleModel_GlobalReloop (e2e/e2e_test.go)
runtime.loop-exhaustionloop cap exhaustion fails the run with LOOP_EXHAUSTEDruntimecovered-deterministicTestCIFix_LoopExhaustion (e2e/e2e_test.go), TestLoopExhaustionRuntimeError (pkg/runtime/hardening_test.go)
runtime.budget-costmax_cost_usd exceeded stops the run and emits budget_exceededruntimecovered-deterministicTestBudgetCostExceeded (pkg/runtime/budget_test.go)
runtime.budget-tokensmax_tokens exceeded stops the runruntimecovered-deterministicTestBudgetTokensExceeded (pkg/runtime/budget_test.go)
runtime.budget-durationmax_duration exceeded stops the runruntimecovered-deterministicTestBudgetDurationExceeded (pkg/runtime/budget_test.go)
runtime.budget-warningbudget warning event at the soft threshold, advisory onlyruntimecovered-deterministicTestBudgetWarningEmitted (pkg/runtime/budget_test.go), TestWarnTokensAdvisoryNeverBlocks (pkg/runtime/budget_test.go)
runtime.budget-sharedbudget accounting shared across parallel branchesruntimecovered-deterministicTestBudgetSharedFirstComeFirstServed (pkg/runtime/budget_test.go)
runtime.max-parallel-branchesmax_parallel_branches semaphore bounds concurrencyruntimecovered-deterministicTestFanOutEach_DAG_BoundedParallelism (pkg/runtime/fan_out_each_test.go)
runtime.workspace-safetyonly one mutating branch may run concurrentlyruntimecovered-deterministicTestWorkspaceSafetyRejectsDualMutation (pkg/runtime/budget_test.go)
runtime.checkpointa checkpoint is saved after every successful noderuntimecovered-deterministicTestCheckpointPreservesUpstreamOutputs (pkg/runtime/engine_test.go)
runtime.resume-failedresume from failed_resumable restarts at the failing noderuntimecovered-deterministicTestResumeFromFailed (pkg/runtime/engine_test.go), TestResumeDoesNotReplayUpstream (pkg/runtime/engine_test.go)
runtime.resume-hash-guardresume refuses a changed .bot unless --forceruntimecovered-deterministicTestForceResumeBypassesHashCheck (pkg/runtime/engine_test.go), pkg/runview/service_resume_hash_test.go
runtime.resume-humanresume a paused_waiting_human run with answersruntimecovered-deterministicTestHumanPauseAndResume (pkg/runtime/engine_test.go), TestResume_Success (pkg/cli/cli_test.go)
runtime.cancelcancellation produces a cancelled status with a checkpointruntimecovered-deterministicTestCancelProducesCancelledStatus (pkg/runtime/hardening_test.go)
runtime.timeoutouter deadline produces a TIMEOUT failureruntimecovered-deterministicTestTimeoutProducesFailedStatus (pkg/runtime/hardening_test.go)
runtime.interaction-modeshuman interaction: llm / llm_or_human / async escalationruntimecovered-deterministicTestInteractionLLMOrHumanEscalation (pkg/runtime/engine_test.go), TestInteractionLLMAutoRespond (pkg/runtime/engine_test.go)
runtime.ask-user-conversationask_user relays prior Q/A and persists the conversationruntimecovered-deterministicTestInteractionAskUserPersistsConversation (pkg/runtime/engine_test.go)
runtime.worktree-finalizeworktree: auto creates a branch and fast-forwards the checkoutruntimecovered-deterministicpkg/runtime/worktree_test.go
runtime.rewinditerion rewind re-anchors a run and invalidates downstream stateruntimecovered-deterministicTestRewindThenResume_SkipsUpstreamNodes (e2e/rewind_resume_test.go)
runtime.rewind-workspacerewind restores workspace files for non-worktree runs, scoped to what the run recorded changing (issue #380)runtimecovered-deterministicTestRewindRestoresWorkspaceEndToEnd (e2e/rewind_workspace_test.go)
runtime.rewind-workspace-failed-nodea node that dies mid-execution still has its debris undone, via the fail: boundaryruntimecovered-deterministicTestRewindScopeCoversAFailedNodesDebris (e2e/rewind_workspace_test.go)
runtime.rewind-workspace-stop-windowedits made while a run is stopped (fail → triage → resume, a human gate, a delegate ask_user pause) are not attributed to the runruntimecovered-deterministicTestRewindAfterResumeKeepsTriageEdits, TestRewindScopeAfterHumanGatePause, TestRewindScopeAfterDelegatePause (e2e/rewind_workspace_test.go)
runtime.forkfork a run at a prior LLM turn into a resumable child runruntimecovered-deterministicpkg/runview/fork_test.go
runtime.event-streamevent sequence coherence (ordering, pairing, monotonic seq)runtimecovered-deterministicTestEventSequenceCoherence (e2e/e2e_test.go)
runtime.artifact-versioningrepeated node executions version their artifactsruntimecovered-deterministicTestSingleModel_GlobalReloop (e2e/e2e_test.go)
runtime.publish-gateonly a publish:-declared node leaves an artifactruntimecovered-deterministicTestOnlyAPublishedNodeLeavesAnArtifact (e2e/handoff_publish_test.go)
runtime.skills-mirrorbundle/plugin/library skills mirrored into .claude/skills/runtimecovered-deterministicTestMirrorBundleSkills_CopiesIntoClaudeSkills (pkg/runtime/bundle_test.go)
runtime.devbox-provisiona bot's/target's devbox.json is installed and put on PATHruntimecovered-deterministicTestEngineRun_HostDevbox_RepoProjectInstallsInPlace (pkg/runtime/devbox_host_test.go)
runtime.subbot-depth-guardnested subbot recursion depth guardruntimecovered-deterministicTestSubbotRunnerForCLI_RecursionDepthGuard (pkg/cli/subbot_nested_test.go)
runtime.supervisorsupervisor steers a watched node via the message inboxruntimecovered-liveTestLive_Feat_Supervisor (e2e/live_feat_supervisor_test.go)the composed steer decision is LLM-driven (Coordinator → GenerateObjectDirect), so only the live layer exercises the full watch→decide→inject path; the bricks are unit-tested (pkg/supervise/coordinator_test.go, pkg/backend/model/inbox_test.go)
runtime.recovery-dispatchadaptive recovery ladder for verified action nodesruntimecovered-deterministicTestVerifiedActionEngineEmitsAndStrips (e2e/verified_action_test.go), pkg/backend/model/executor_verified_action_test.go
runtime.privacy-redactionsecret/PII redaction across the run pipelineruntimecovered-deterministicTestE2E_PrivacyPipeline (e2e/privacy_test.go)
persistence.run-jsonrun.json metadata, status transitions, format versionpersistencecovered-deterministicTestFormatVersionPersisted (pkg/runtime/hardening_test.go), pkg/store/store_test.go
persistence.events-jsonlevents.jsonl append + monotonic seq + replaypersistencecovered-deterministicpkg/store/store_test.go
persistence.artifactsversioned per-node artifacts under artifacts/persistencecovered-deterministicpkg/store/store_test.go
persistence.interactionsinteraction records (questions/answers) persisted per runpersistencecovered-deterministicTestAwaitAnswersAlreadyAnswered (e2e/async_interaction_test.go), pkg/store/store_test.go
persistence.child-runsparent/child run lineage for subbotspersistencecovered-deterministicTestRunSubbotsPersistNestedLineage (pkg/cli/run_subbot_test.go)
persistence.workspace-versioningcontent-addressed workspace snapshots + restorepersistencecovered-deterministicpkg/workspacetrack/native_test.go
persistence.store-anchoringstore dir resolution (project .iterion vs $ITERION_HOME/projects)persistencecovered-deterministicTestStoreAnchorDir_BotInsideProjectResolvesProjectStore (pkg/cli/storeanchor_test.go)
persistence.mongo-storecloud Mongo-backed run store conformancepersistencecovered-deterministicTestConformance_Mongo (pkg/store/mongo/conformance_test.go)CI job mongo-conformance; skips without a Mongo endpoint. The board (kanban) Mongo store is a different contract — see dispatcher.native-tracker
cli.validateiterion validate parses, compiles and reports diagnosticsclicovered-deterministicTestValidate_Valid (pkg/cli/cli_test.go), TestValidate_Invalid (pkg/cli/cli_test.go)
cli.validate-bundleiterion validate cross-checks a bundle manifest (C2xx)clicovered-deterministicTestRunValidate_BundleVarTypoWarns (pkg/cli/validate_bundle_test.go)
cli.runiterion run executes a .bot and persists the runclicovered-deterministicTestRun_Success (pkg/cli/cli_test.go)
cli.run-varsiterion run --var key=value overrides workflow varsclicovered-deterministicTestRun_WithVars (pkg/cli/cli_test.go)
cli.run-presetiterion run --preset applies an in-source preset, --var wins over itclicovered-deterministicTestRunPresetAppliesValuesAndVarWins (e2e/cli_launch_overrides_test.go)
cli.run-budget-overrideiterion run --max-* re-budgets the workflow for this runclicovered-deterministicTestRunBudgetOverrideCapsTheRun (e2e/cli_budget_override_test.go)
cli.run-model-backend-overrideiterion run --model/--backend selector=… re-target nodesclicovered-deterministicTestRunBackendOverrideRetargetsNodes (e2e/cli_model_backend_override_test.go), TestRunModelOverrideRetargetsNodes (e2e/cli_model_backend_override_test.go)drives the REAL ClawExecutor (no stub) against fixtures whose backend/model cannot resolve, so the resolved value is readable from the failure text — credential-free and offline (unknown backend dies at registry lookup, unknown provider inside claw's spec parse)
cli.run-human-pauseiterion run returns at a human pause (--no-interactive)clicovered-deterministicTestRun_HumanPause (pkg/cli/cli_test.go)
cli.run-json--json machine output mode for runclicovered-deterministicTestRun_SuccessJSON (pkg/cli/cli_test.go)
cli.run-recipeiterion run --recipe <file> applies a recipe overlayclicovered-deterministicTestRunRecipeAppliesPresetVarsAndVarStillWins (e2e/cli_recipe_test.go), TestRunRecipeBudgetOverridesTheWorkflowBudget (e2e/cli_recipe_test.go), TestRunRecipeRefusesAMismatchedWorkflow (e2e/cli_recipe_test.go), TestRunRecipeRefusesAnUnloadableFile (e2e/cli_recipe_test.go)preset vars reaching the run, --var precedence over the recipe, workflow_ref.path resolving the .bot, the recipe budget changing the run outcome, and the mismatch/unloadable refusals
cli.run-auto-resume--auto-resume N re-drives a retryable failed_resumable runclicovered-deterministicTestRunAutoResumeRecoversRetryableFailure (e2e/cli_auto_resume_test.go), TestRunAutoResumeStaysOffByDefault (e2e/cli_auto_resume_test.go), TestRunAutoResumeRefusesNonRetryableCause (e2e/cli_auto_resume_test.go), TestRunAutoResumeStopsAtTheAttemptBudget (e2e/cli_auto_resume_test.go)no clock seam needed: a USAGE_LIMIT_BLOCKED cause takes the reset-aware wait, which the run's own Retry policy (the field iterion schedule sets) clamps — a 1ms horizon collapses it, so the whole suite runs in <0.5s
cli.resumeiterion resume continues a paused/failed/cancelled runclicovered-deterministicTestResume_Success (pkg/cli/cli_test.go)
cli.resume-answers-fileiterion resume --answers-file / --answer @fileclicovered-deterministicTestResolveFileAnswerFlags_AttachesLocalFile (pkg/cli/resume_file_answers_test.go), TestParseAnswersFile (pkg/cli/cli_test.go)
cli.resume-subbotresume a run that owns subbot childrenclicovered-deterministicTestResume_RunWithSubbot (pkg/cli/resume_subbot_test.go)
cli.inspectiterion inspect lists runs and shows a run's stateclicovered-deterministicTestInspect_ListRuns (pkg/cli/cli_test.go), TestInspect_SingleRun (pkg/cli/cli_test.go)
cli.inspect-eventsiterion inspect --events renders the stored event streamclicovered-deterministicTestInspect_WithEvents (pkg/cli/cli_test.go)
cli.inspect-nodeiterion inspect --node per-node trace/artifacts/log sectionsclicovered-deterministicTestInspect_SectionTrace (pkg/cli/cli_test.go), TestInspect_SectionArtifactsIncludesBody (pkg/cli/cli_test.go)
cli.reportiterion report renders a run's chronological markdown reportclicovered-deterministicTestReportRendersChronologicalRunReport (e2e/cli_report_test.go), TestReportHonoursOutputPathAndJSON (e2e/cli_report_test.go)
cli.diagramiterion diagram emits a Mermaid graph for a .botclicovered-deterministicTestDiagramRendersEveryNodeAndEdgeOfTheWorkflow (e2e/cli_diagram_test.go), TestDiagramViewsDifferAndUnknownViewIsRefused (e2e/cli_diagram_test.go), TestDiagramJSONCarriesTheRenderedGraph (e2e/cli_diagram_test.go)every node + edge of e2e/testdata/diagram_mini.bot, the condition/loop/mapping labels, the compact↔detailed↔full deltas, and the typo'd --view refusal
cli.runs-pruneiterion runs prune age/status/keep-last retention + dry-runclicovered-deterministicTestRunPrune_AgeFiltering (pkg/cli/runs_prune_test.go), TestRunPrune_DryRunDeletesNothing (pkg/cli/runs_prune_test.go)
cli.runs-async-questionsiterion runs questions / runs answer drive an async question to deliveryclicovered-deterministicTestRunsQuestionsThenAnswerReleasesAwaitGate (e2e/cli_async_questions_test.go), TestRunsAnswerRejectsBadInput (e2e/cli_async_questions_test.go)
cli.forkiterion fork creates a resumable fork at a prior turnclicovered-deterministicpkg/runview/fork_test.goCLI layer is a thin wrapper over runview.Service.Fork
cli.rewinditerion rewind (incl. --auto bot-diff targeting)clicovered-deterministicTestRewind_RefusesRunningRun_E2E (e2e/rewind_resume_test.go)
cli.importiterion import lowers a Claude-Code workflow script to a draft .botclicovered-deterministicTestRunImport_WritesDraft (pkg/cli/import_test.go)
cli.bots-listiterion bots list discovers .bot/.botz bundlesclicovered-deterministicTestBotsList_Bundle (pkg/cli/bots_test.go)
cli.bots-createiterion bots create scaffolds a discoverable bundleclicovered-deterministicTestBotsCreate_ProducesDiscoverableBundle (pkg/cli/bots_create_test.go)
cli.bots-regen-catalogiterion bots regen-catalog regenerates Nexie's catalog skillclicovered-deterministicbots/catalog_freshness_test.go
cli.bundle-packiterion bundle pack produces a loadable .botzclicovered-deterministicTestBundle_SecAuditSource_PackOpenCompile (e2e/bundle_sec_audit_source_test.go)
cli.marketplaceiterion marketplace submit/install/uninstall (bot + plugin kinds)clicovered-deterministicTestMarketplaceCLI_SubmitInstallUninstall_KindAware (pkg/cli/marketplace_test.go)
cli.pluginiterion plugin list/enable/disable/install/uninstall/configclicovered-deterministicpkg/plugin/install_test.go, pkg/plugin/config_test.go
cli.skill-libraryiterion skill list/show/add/rm/export (layered global/project)clicovered-deterministicTestSkillLibraryAddListShowExportRemove (e2e/cli_skill_test.go), TestSkillLibraryProjectScopeShadowsGlobal (e2e/cli_skill_test.go)round-trip against an isolated ITERION_HOME, cross-checked through the same skilllib.LocalStoreForProject().Resolve the runtime mirror calls. skill import (git URL) is covered as plugins.install
cli.secretiterion secret set/list/rm local sealed-secret lifecycleclicovered-deterministicTestSecretSetListRemoveRoundTrip (e2e/cli_secret_test.go), TestSecretProjectScopeOverridesGlobal (e2e/cli_secret_test.go)
cli.memoryiterion memory export/import/duclicovered-deterministicTestMemoryExportImportRoundTripsASpace (cmd/iterion/memory_test.go), TestMemoryImportStrategyDecidesWhoWinsOnConflict (cmd/iterion/memory_test.go), TestMemoryDuReportsTheSpaceUsageAndQuota (cmd/iterion/memory_test.go), TestMemoryRefusesAnUnaddressableSpace (cmd/iterion/memory_test.go)archive round-trip into a different space, the skip/overwrite conflict strategies, usage/quota reporting, and the unaddressable-space refusal — all through the real rootCmd against an isolated ITERION_HOME
cli.modelsiterion models resolves capabilities and their sourceclicovered-deterministicTestRunModels_JSONSingleModel (pkg/cli/models_test.go)
cli.openapiiterion openapi emits this build's OpenAPI 3.1 spec offlineclicovered-deterministicpkg/server/openapi_test.go
cli.scheduleiterion schedule add/list/remove/install/uninstall crontab manifestclicovered-deterministicTestRunScheduleAddListRemove (pkg/cli/schedule_test.go), TestRunScheduleInstallUninstall_SeamRoundTrip (pkg/cli/schedule_test.go)
cli.schedule-gateschedule overlap policy + pre-launch guard + tick auditclicovered-deterministicTestScheduleRun_OverlapSkipsAndAuditsBlockingRun (pkg/cli/schedule_gate_test.go), TestScheduleRun_GuardNonZeroBlocks (pkg/cli/schedule_gate_test.go)
cli.issueiterion issue create/list/show/move/update/close/boardclicovered-deterministicTestIssueCLILifecycleCreateMoveUpdateClose (e2e/cli_issue_test.go), TestIssueCloseRefusesABoardWithNoTerminalState (e2e/cli_issue_test.go)create → list/show → move → update → close read back through a fresh native.Store, plus the events.jsonl audit trail
cli.issue-importiterion issue import pulls forge issues onto the boardclicovered-deterministicTestRunIssueImport_CreatesCardsAndIsIdempotent (e2e/cli_issue_import_test.go), TestRunIssueImport_RejectsUnsupportedForge (e2e/cli_issue_import_test.go)drives the real CLI against a fake forge, then re-opens the board through a FRESH store: the cards that landed are the oracle, and a re-import proves idempotence
security.disable-auth-switchITERION_DISABLE_AUTH bypasses authentication on every /api/* endpointserver-apicovered-deterministicTestDisableAuthSwitchGovernsEveryProtectedRoute (pkg/server/disable_auth_switch_test.go)both positions asserted as one contract — only the PAIR is meaningful, since pinning one alone passes for a switch welded shut
cli.sandbox-doctoriterion sandbox doctor [--strict] host/run pre-flight diagnosisclicovered-deterministicTestRunSandboxDoctorStrictNoSandbox (pkg/cli/sandbox_strict_test.go), TestRunNetworkStrictChecks (pkg/cli/sandbox_strict_test.go)
cli.studioiterion studio boots the server and reports its portclicovered-deterministicTestRunStudio_OnReady_RandomPort (pkg/cli/studio_test.go), TestIsLoopbackBindHost (pkg/cli/studio_bind_test.go)
cli.serveriterion server boots the HTTP server without the studio launcherclicovered-deterministicTestServerCommandBootsLocalModeAndShutsDownOnSignal (e2e/cli_server_boot_test.go), TestServerCommandFailsLoudlyOnBusyPort (e2e/cli_server_boot_test.go)spawns the built binary as a subprocess and signals THAT child (not the test binary), so the daemon-SIGTERM aliasing of cli.dispatch is not reproduced
cli.runneriterion runner boots a cloud runner pod from its configclicovered-deterministicTestRunnerCommandRefusesLocalMode (e2e/cli_server_boot_test.go), TestRunnerCommandRefusesBrokenConfig (e2e/cli_server_boot_test.go)the entry-point posture (mode gate + config loader) is what is deterministic; the claim/execute loop IS a NATS/Mongo/S3 consumer and is covered by cloud.runner-pod
cli.bots-templatesiterion bots templates lists the templates bots create acceptsclicovered-deterministicTestBotsTemplates_MatchesStudioGallery (pkg/cli/bots_create_test.go)pins the CLI list against botscaffold.Templates(), the same source the studio gallery renders
bots.installbot bundle install from a git URL or local path (layout validation, name override, existing-needs-force)botscovered-deterministicTestInstall_SingleBundleRoot (pkg/botinstall/install_test.go), TestInstall_MalformedRejected (pkg/botinstall/install_test.go), TestInstall_ExistingNeedsForce (pkg/botinstall/install_test.go)iterion bots install and the studio install endpoint are both thin wrappers over this core
plugins.lifecycle-runiterion plugin run <name> <phase> executes a plugin's lifecycle commandpluginscovered-deterministicTestRunLifecycle (pkg/plugin/lifecycle_test.go), pkg/server/plugins_routes_test.go
cli.dispatchiterion dispatch daemon boots from a config with the bot catalogueclicovered-deterministicTestDispatchDaemonBootsServesAndStopsOnSignal (e2e/cli_dispatch_daemon_test.go), TestDispatchDaemonFailsLoudlyOnABusyPort (e2e/cli_dispatch_daemon_test.go), TestDispatchDaemonRejectsAnInvalidConfig (e2e/cli_dispatch_daemon_test.go)in-process boot on a temp store + loopback port: asserts /healthz, the server-info advertisement, the started actor's state and the YAML it runs, the mounted native-board routes, then the SIGTERM clean exit and the non-zero exit on a bind failure
cli.migrate-to-clouditerion migrate to-cloud local store → Mongo/S3clicovered-deterministicTestMigrateToCloud_TransfersEveryVersionAndIsIdempotent (cmd/iterion/migrate_to_cloud_test.go), TestMigrateToCloud_DryRunWritesNothing (cmd/iterion/migrate_to_cloud_test.go), TestMigrateToCloud_MissingRunIsAnError (cmd/iterion/migrate_to_cloud_test.go), pkg/cli/migrate_orgs_test.go, pkg/cli/migrate_run_paths_test.gothe command's own walker between two real stores (every artifact version, --dry-run writes nothing, re-runs don't duplicate, an unknown run is an error), plus the sibling migrate orgs backfill and run-path rewrite. The S3 upload half is cloud.migrate-blobs
cli.mcp-serveriterion mcp operator MCP server (local_/remote_ tools)clicovered-deterministicTestMCPServer_DetachedRunSurvivesServerExit (e2e/mcp_server_test.go), pkg/operatormcp/tools_local_test.go
cli.superviseiterion supervise attaches to a managed run or a raw claude sessionclicovered-deterministicpkg/supervise/coordinator_test.go, pkg/supervise/transcript_test.go
cli.remoteiterion remote typed subcommands against a cloud instanceclicovered-deterministicTestRemoteRunsLaunch_SendsSourceAndVars (pkg/cli/remote_test.go), TestRemoteRunsFollow_CursorAndTerminal (pkg/cli/remote_test.go)
cli.remote-loginbrowser loopback CLI-auth token mint + persistenceclicovered-deterministicTestResolveRemoteConfig_EnvMode (pkg/cli/remote_test.go), pkg/server/auth_routes_test.go
cli.versioniterion version [--commit]clicovered-deterministiccmd/iterion/version_test.go
cli.bench-asymptoteiterion bench asymptote convergence benchmarkclicovered-deterministicTestBenchAsymptoteMeasuresTheConvergenceCurve (e2e/cli_bench_asymptote_test.go), TestBenchAsymptoteComparesTwoGroups (e2e/cli_bench_asymptote_test.go), TestBenchAsymptoteWritesTheMarkdownReport (e2e/cli_bench_asymptote_test.go), TestBenchAsymptoteRefusesAnIncompleteRequest (e2e/cli_bench_asymptote_test.go)the command re-runs nothing — it derives the curve from what past runs persisted — so real stub-driven runs of a judge-in-a-loop fixture supply the same events an operator's runs would
backends.selection-explicitnode backend: / workflow default_backend: selects the delegatebackendscovered-deterministicpkg/backend/model/resolve_backend_test.go
backends.autodetectcredential probing picks a backend when none is declaredbackendscovered-deterministicpkg/backend/detect/detect_test.go, pkg/backend/model/resolve_backend_test.golive variant: TestLive_Feat_BackendAutodetect
backends.clawclaw in-process client: generation, retry, cache observabilitybackendscovered-deterministicpkg/backend/model/claw_backend_test.go, pkg/backend/model/generation_test.goreal-provider behaviour: covered-live by TestLive_Lite_ClawComprehensive
backends.claude-codeclaude_code CLI delegate: append-system-prompt, setting sourcesbackendscovered-deterministicpkg/backend/delegate/claude_code_cred_test.go
backends.pipi delegate incl. the RPC session + embedded extensionbackendscovered-deterministicpkg/backend/delegate/pi_rpc_test.go, pkg/backend/delegate/pi_mcp_test.go
backends.kimikimi CLI delegate through the generic CLI-agent seambackendscovered-deterministicpkg/backend/delegate/cliagent_test.go
backends.grokgrok CLI delegate through the generic CLI-agent seambackendscovered-deterministicpkg/backend/delegate/grok_test.go
backends.codex-legacylegacy codex delegate (frozen, C030 diagnostic)backendscovered-deterministicpkg/dsl/ir/compile_test.godeprecated surface: kept compiling + diagnosed, not extended
backends.system-prompt-compositionper-backend SystemPromptMode (Standalone/Append/AuthoredBase)backendscovered-deterministicpkg/backend/delegate/delegate_test.go
backends.reasoning-effortreasoning_effort propagation and wire remappingbackendscovered-deterministicpkg/backend/model/effort_test.go
backends.ultracodeultracode mode: xhigh + orchestration prerogative + C089backendscovered-deterministicpkg/dsl/ir/ultracode_test.go, pkg/backend/model/effort_test.golive behaviour on 4.8: TestLive_Feat_Ultracode
backends.retry-classificationtransient vs fatal backend errors, retry + feedbackbackendscovered-deterministicpkg/backend/model/executor_retry_classification_test.go, pkg/backend/model/network_retry_test.go
backends.cost-accountingper-call cost/token accounting reaching the run totalsbackendscovered-deterministicTestMetricsEmitter_delegateFinished_costReachesRunTotals (pkg/runner/metrics_test.go), TestMetricsEmitter_clawCostIsNotCountedTwice (pkg/runner/metrics_test.go), TestRunBudgetOverrideCapsTheRun (e2e/cli_budget_override_test.go), pkg/backend/cost/cost_test.go, pkg/backend/model/executor_hooks_cost_test.gothe whole money path: the delegate prices a call, the executor carries it on the event, the emitter accumulates it into RunTotals (and does NOT double-charge claw, which emits both a step and a delegation total), and the accumulated cost is what trips the run's own budget cap
backends.oauth-forfaitsubscription OAuth paths (Anthropic auth token, ChatGPT codex)backendscovered-deterministicpkg/backend/model/openai_forfait_ctx_test.go, pkg/secrets/subscription_oauth_test.gocredential resolution is deterministic; a real forfait call is excluded (needs a live subscription)
backends.bedrock-vertex-foundryAWS Bedrock / GCP Vertex / Azure Foundry providersbackendsexcludedneeds real cloud credentials for AWS/GCP/Azure; claw's SDK paths are unit-tested with mocked clients and iterion adds no logic of its own
backends.model-qualityreal model output quality / value-for-money gradingbackendscovered-livee2e/live_quality_test.gothe essence of the feature IS the live model; the judge panel is report-only by default
tools-mcp.tool-registrytool registry + per-node allow lists (claw-native names)tools-mcpcovered-deterministicpkg/backend/tool/registry_test.go
tools-mcp.claw-builtinsclaw built-in tools (read/write/bash/glob/grep/edit/web_fetch)tools-mcpcovered-deterministicpkg/backend/tool/claw_builtins_test.golive variant: TestLive_Lite_ClawBuiltinTools
tools-mcp.mcp-lifecycleMCP server startup, health check and --skip-mcp-healthtools-mcpcovered-deterministicpkg/backend/mcp/config_test.go, TestSkipMCPHealthFromEnv (pkg/cli/run_skipmcp_test.go)
tools-mcp.mcp-transportsMCP stdio / streamable-http / legacy-sse transportstools-mcpcovered-deterministicpkg/backend/mcp/config_test.go, pkg/backend/delegate/pi_mcp_test.go
tools-mcp.mcp-oauthMCP OAuth broker / PKCE wiringtools-mcpcovered-deterministicpkg/backend/mcp/oauth_test.goa real third-party OAuth consent flow is excluded (see integrations.third-party-oauth)
tools-mcp.board-toolsboard capability tools over stdio, HTTP and in-process clawtools-mcpcovered-deterministicTestBoardDispatcher_E2E_BotCreatesAndDispatches (e2e/board_dispatcher_test.go), pkg/backend/tool/claw_board_tools_test.go
tools-mcp.ask-userask_user / ask_user_async / await_answers MCP surfacetools-mcpcovered-deterministicpkg/askusermcp/http_test.go, TestAwaitAnswersReleasedByAnswer (e2e/async_interaction_test.go)
tools-mcp.permission-gatepermission gate blocks/asks on a non-allow-listed tool calltools-mcpcovered-deterministicpkg/backend/model/permission_gate_test.go, pkg/backend/permission/permission_test.golive variants: TestLive_Feat_Permission_Deny / _Ask
tools-mcp.secret-guardsecret placeholders never leak into tool input/outputtools-mcpcovered-deterministicpkg/backend/model/hooks_secretguard_test.go, pkg/backend/model/secretguard_binding_hosts_test.go
tools-mcp.computer-useread_image / screenshot / computer_use dispatchtools-mcpcovered-deterministicpkg/backend/tool/claw_builtins_test.goheadless-unavailable propagation is the deterministic half; live use is TestLive_Lite_ClawReadImage
tools-mcp.tool-displayhuman-readable rendering of tool calls in console/reporttools-mcpunit-onlypkg/backend/tooldisplay/display_test.gopure formatter over an event payload; an e2e would assert string shape through the whole stack without adding risk coverage
observability.report-generationreport.md chronological rendering from events + artifactsobservabilitycovered-deterministicTestReportRendersChronologicalRunReport (e2e/cli_report_test.go)the artifact table lifts each artifact's conventional summary: field; node outputs without one are intentionally not inlined
observability.metricsbenchmark.CollectMetrics over a finished runobservabilitycovered-deterministicTestCIFix_HappyPath (e2e/e2e_test.go), pkg/benchmark/benchmark_test.go
observability.alertsstall/budget/failure alerting + liveness heartbeatobservabilitycovered-deterministicpkg/alert/manager_test.go
observability.completion-webhooksrun-completion webhooks behind the SSRF guardobservabilitycovered-deterministicpkg/notify/completion_test.go, pkg/secure/httpdial/httpdial_test.go
observability.user-notificationsrun-outcome web-push notifications with per-episode dedupobservabilitycovered-deterministicpkg/usernotify/dispatcher_test.go
observability.otlp-tracingOTLP exporter wiring for runs/serverobservabilitycovered-deterministicpkg/cloud/tracing/tracing_test.go, pkg/benchmark/otlp_test.goan end-to-end span assertion needs a real collector; setup/shutdown/no-endpoint paths are asserted here
sandbox.docker-driverdocker driver: container lifecycle, workspace bind-mountsandboxcovered-livee2e/live_feat_sandbox_net_test.goneeds a container runtime; the deterministic half is spec construction (pkg/sandbox/spec_test.go)
sandbox.spec-resolutionsandbox spec resolution (auto / devcontainer / image / none)sandboxcovered-deterministicpkg/sandbox/spec_test.go, pkg/sandbox/factory_test.go
sandbox.network-policynetwork: allowlist/denylist CONNECT proxy enforcementsandboxcovered-deterministicTestSandboxNetworkAllowlist_DeclarationStartsAnEnforcingProxy (pkg/runtime/sandbox_network_policy_test.go), TestSandboxNetworkDenylist_BlocksOnlyTheListedHosts (pkg/runtime/sandbox_network_policy_test.go), TestSandboxNetworkOpen_StartsNoProxy (pkg/runtime/sandbox_network_policy_test.go), pkg/sandbox/netproxy/proxy_test.go, e2e/live_feat_sandbox_net_test.gothe proxy runs on the HOST, so the whole wire is deterministic after all: the declaration compiled from real .bot source starts an enforcing proxy, an allowed host tunnels to a loopback echo server, a host outside the policy is refused AND emits the network_blocked event the operator sees, an un-tokened client is refused (not an open relay), and network: open / no block at all start no proxy. Forcing ResolveNetworkPolicy to open turns both policy tests red. Only the container-side half — the sandboxed process actually routing its egress through the injected HTTPS_PROXY — still needs the live layer
sandbox.host-statehost_state: auto / none mounts of ~/.iterion and ~/.claudesandboxcovered-deterministicTestApplyHostStateMounts_ClaudeConfigFile (pkg/runtime/sandbox_mounts_test.go), TestApplyHostStateMounts_HomeNestedBindParentsWritable (pkg/runtime/sandbox_mounts_test.go)pkg/sandbox/spec_test.go only validates the enum string; the mounts themselves are asserted in the runtime tests cited here
sandbox.kubernetes-driverkubernetes driver: capabilities, pod/network manifests, mounts, GC, orphan sweepsandboxcovered-deterministicTestPodManifestStructure (pkg/sandbox/kubernetes/driver_test.go), TestBuildNetworkPolicyShape (pkg/sandbox/kubernetes/driver_test.go), TestValidateSpecMatchesPrepare (pkg/sandbox/kubernetes/validate_test.go), pkg/sandbox/kubernetes/gc_test.go, pkg/sandbox/kubernetes/mounts_test.gothe manifest/spec/GC half is deterministic (57 unit tests, same shape as the docker driver); only the real pod lifecycle needs a cluster — see sandbox.kubernetes-pod-lifecycle
sandbox.kubernetes-pod-lifecyclea k8s sandbox pod is actually created, executed against and torn downsandboxexcludedneeds a live cluster + registry; no fake apiserver harness exists in this repo. The manifest/spec/GC half is covered — see sandbox.kubernetes-driver
sandbox.buildkitsandbox.build: via docker buildx on the local driversandboxexcludedneeds a Docker daemon with BuildKit; rejected by design on the k8s driver
plugins.registryplugin discovery, enable state, builtin embeddingpluginscovered-deterministicpkg/plugin/plugin_test.go, pkg/plugin/inspect_test.go
plugins.installplugin install from a git URL or path (incl. bare skills repos)pluginscovered-deterministicpkg/plugin/install_test.go, pkg/plugin/skilllib_test.go
plugins.rewritersrewriter chain rewrites shell commands (rtk compression)pluginscovered-deterministicpkg/plugin/plugin_test.go, pkg/dsl/ir/compress_test.golive end-to-end with the rtk binary: TestLive_Feat_Compress
plugins.contributed-skillsplugin skills/commands/agents mirrored into the workspacepluginscovered-deterministicTestMirrorInjectedPluginFiles_WritesEachKind (pkg/runtime/contributions_test.go)
plugins.hooks-mergeplugin hook fragments idempotently merged into settings.jsonpluginscovered-deterministicTestMergePluginHooks_InjectIdempotentRemove (pkg/runtime/plugin_hooks_test.go), pkg/backend/model/settings_hooks_test.go
plugins.private-sourceteam-scoped private plugin source binding (git + secret ref)pluginscovered-deterministicpkg/pluginsource/pluginsource_test.go
server-api.run-consolerun console REST: run detail, events, log, node sectionsserver-apicovered-deterministicpkg/server/runs_test.go, pkg/runview/service_test.go
server-api.run-launchlaunch a run over HTTP with vars/overridesserver-apicovered-deterministicpkg/runview/service_launch_budget_test.go, pkg/runview/service_launch_dispatch_fields_test.go, pkg/runview/service_launch_pause_test.go, pkg/runview/service_launch_operator_resume_test.go, pkg/server/runs_test.gobudget overrides (local + forwarded on the cloud path) and invalid durations, dispatch fields, the paused-launch and operator-resume shapes, and the HTTP surface itself
server-api.run-controlpause / cancel / resume / rewind / bump-loop / raise-budgetserver-apicovered-deterministicpkg/runview/service_commands_test.go
server-api.run-wslive run WebSocket streamserver-apicovered-deterministicpkg/server/runs_ws_test.go
server-api.review-scopereview scope + diff since the previous human gateserver-apicovered-deterministicpkg/server/runs_review_scope_test.go
server-api.run-filesrun workspace file browse/read/write with path containmentserver-apicovered-deterministicpkg/server/runs_files_test.go
server-api.run-commitsper-run commit list + commit detailserver-apicovered-deterministicpkg/server/runs_commits_test.go
server-api.preview-proxyrun preview proxy behind the SSRF guardserver-apicovered-deterministicpkg/server/runs_preview_test.go
server-api.answer-humananswer a human gate / async question over HTTPserver-apicovered-deterministicpkg/server/runs_answer_uploads_test.go
server-api.queued-messagesoperator chat messages queued into a running node's inboxserver-apicovered-deterministicpkg/backend/model/inbox_test.go, pkg/server/runs_steer_test.go
server-api.botsbot catalog listing + per-bot metadata over HTTPserver-apicovered-deterministicpkg/server/bots_routes_test.go, pkg/botregistry/registry_test.go
server-api.boardnative kanban REST (CRUD, transitions, labels, views)server-apicovered-deterministicpkg/dispatcher/native/http_test.go, pkg/dispatcher/native/store_test.go
server-api.dispatcher-dashboarddispatcher state/refresh/cancel HTTP surfaceserver-apicovered-deterministicTestDispatcherE2E_HTTPSurface (e2e/dispatcher_test.go), pkg/dispatcher/http_test.go
server-api.server-info/api/server/info capability flags gate the SPA featuresserver-apicovered-deterministicTestServerInfo (pkg/server/runs_uploads_test.go), TestServerInfo_SkillsEnabledLocal (pkg/server/local_skills_routes_test.go), TestMarketplace_ServerInfoFlag (pkg/server/marketplace_routes_test.go), TestMarketplace_ServerInfoFlagFalseWhenNil (pkg/server/marketplace_routes_test.go), pkg/server/backends_routes_test.goeach flag is asserted against the wiring that decides it — present when the store/feature is wired, false when it is nil
server-api.openapigenerated OpenAPI 3.1 spec matches the wired routesserver-apicovered-deterministicpkg/server/openapi_test.go
server-api.pipeline-board/api/v1/pipeline-board/* control centre (columns, folding, actions, bulk ops)server-apicovered-deterministicTestPipelineBoardColumnBucketing (pkg/server/pipeline_boards_test.go), TestPipelineBoardFoldsDescendantsAndCollectsReviews (pkg/server/pipeline_boards_test.go), pkg/server/pipeline_board_actions_test.gothe REST layer behind studio-ui.pipelines
server-api.limits-cost/api/v1/limits/cost + /override admin cost-cap surfaceserver-apicovered-deterministicTestCostCapStatusDisabledByDefault (pkg/server/limits_test.go), TestCostCapStatusAndOverride (pkg/server/limits_test.go)
server-api.backends-detect/api/backends/detect credential auto-detection the toolbar readsserver-apicovered-deterministicTestBackendsDetectRouteShape (pkg/server/backends_routes_test.go), TestBackendsDetect_NoSensitiveLeak (pkg/server/backends_routes_test.go)the no-leak assertion is the one that matters: the endpoint reports availability, never a credential
server-api.effort-capabilities/api/effort-capabilities per-backend/model effort lookupserver-apicovered-deterministicTestEffortCapabilities_ClawOpus48 (pkg/server/effort_test.go), TestEffortCapabilities_UltracodeOnlyOnOpus48 (pkg/server/effort_test.go), TestEffortCapabilities_UnknownModel (pkg/server/effort_test.go)also covers the sibling /api/resolve-effort. The ultracode-only-on-4.8 case is the one that would catch a capability table drifting
server-api.editor-endpoints/api/parse, /api/unparse, /api/validate DSL round-trip surfaceserver-apicovered-deterministicTestUnparse_RoundTripIsSemanticallyStable (pkg/server/server_dsl_test.go), TestValidate_UnknownNodeReferenceIsC001 (pkg/server/server_dsl_test.go), TestParse_UnparseableSource (pkg/server/server_dsl_test.go)round-trip fidelity (parse -> unparse -> parse is byte-identical) and the diagnostic CODE, not the message text
server-api.local-secrets/api/local/secrets desktop/CLI secret surfaceserver-apicovered-deterministicTestLocalSecrets_CreateListDeleteSealsAndNeverEchoesTheValue (pkg/server/local_secrets_routes_test.go), TestLocalSecrets_RenameOntoAnExistingNameIsRefused (pkg/server/local_secrets_routes_test.go)the real routes on a New()-built local-mode server with the sealed store FILE as the oracle: create → the plaintext is absent from disk and from every response (only name/last4/fingerprint), list, re-post rotates in place without duplicating or widening the egress lock, delete removes it from both API and file; rename collision 409 leaves both records intact, unknown id 404. The previous citation (local_skills_routes_test.go) was a mis-citation — it holds no secrets coverage
server-api.run-shell/api/ws/runs/{id}/shell post-mortem PTY shell in a preserved worktreeserver-apicovered-deterministicTestRunShell_Gates (pkg/server/runs_shell_test.go), TestShellEligible (pkg/server/runs_shell_test.go)the gate (which runs may be shelled into) is the part that matters; the PTY itself is Unix-only with a Windows stub
cloud.oauth-connections/api/me/oauth/* connect / authorize / refresh a subscription credential for cloud runscloudcovered-deterministicTestOAuthConnections_SealsAndNeverEchoesTheCredential (pkg/server/oauth_routes_test.go)the store is the oracle: the persisted payload must not contain the plaintext token, no response may echo it, and a second account is isolated from the first one's credential
server-api.static-spaembedded studio SPA served from the binaryserver-apicovered-deterministicpkg/server/spa_test.go
dispatcher.poll-dispatchpoll a tracker and dispatch one run per eligible issuedispatchercovered-deterministicTestDispatcherE2E_DispatchAndRelease (e2e/dispatcher_test.go)
dispatcher.retryretry with backoff after a failed run, give up at max attemptsdispatchercovered-deterministicTestDispatcherE2E_RetryAfterFailure (e2e/dispatcher_test.go), TestDispatcherGivesUpAfterMaxAttempts (pkg/dispatcher/dispatcher_test.go)
dispatcher.cancelcancel an in-flight dispatched rundispatchercovered-deterministicTestDispatcherE2E_CancelInFlight (e2e/dispatcher_test.go)
dispatcher.state-transitionsissue state transitions around dispatch + revert on failuredispatchercovered-deterministicTestDispatch_TransitionsToInProgress (pkg/dispatcher/loop_state_test.go), TestDispatcherE2E_RespectsTerminalStateChange (e2e/dispatcher_test.go)
dispatcher.hookshook mechanics (script, env, timeout, failure, validation) + the before_remove hook FIRESdispatchercovered-deterministicpkg/dispatcher/hooks_test.go, TestCleanupWorkspace_RunsBeforeRemoveBeforeDeletingDir (pkg/dispatcher/cleanup_workspace_test.go)
dispatcher.hooks-lifecycle-firingthe after_create / before_run / after_run hooks actually FIRE at their lifecycle pointdispatchercovered-deterministicTestRunWorker_FiresLifecycleHooksInOrder (pkg/dispatcher/hooks_lifecycle_test.go), TestRunWorker_AfterRunFiresEvenWhenRunnerFails (pkg/dispatcher/hooks_lifecycle_test.go)every phase appends to one shared order log, so the assertion is the ORDER of what actually fired — deleting any of the three Run() calls turns it red
dispatcher.per-ticket-botper-ticket bot override + assignee routingdispatchercovered-deterministicTestBuildSpec_PerTicketBotSetsRouteKey (pkg/dispatcher/loop_bot_override_test.go)
dispatcher.concurrencyper-state concurrency caps + claim conflict handlingdispatchercovered-deterministicTestDispatcherRespectsClaimConflict (pkg/dispatcher/dispatcher_test.go), TestDispatch_SlotCountedFromClaimTime (pkg/dispatcher/loop_setup_offload_test.go)
dispatcher.cost-capdaily cost cap gate blocks further dispatchdispatchercovered-deterministicTestRefreshCostCapGatesWhenExceeded (pkg/dispatcher/cost_cap_test.go)
dispatcher.workspace-cleanupper-run workspace/worktree teardown policiesdispatchercovered-deterministicTestCleanupWorkspace_RemovesLinkedWorktreeRegistration (pkg/dispatcher/cleanup_workspace_test.go)
dispatcher.native-trackernative filesystem kanban tracker (board.json/issues/events)dispatchercovered-deterministicpkg/dispatcher/native/store_test.go, TestNativeStore_Conformance (pkg/dispatcher/boardmongo/conformance_test.go)
dispatcher.github-trackerGitHub Issues tracker adapterdispatchercovered-deterministicpkg/dispatcher/tracker/github_test.goreal GitHub API is stubbed at the HTTP boundary
dispatcher.forgejo-trackerForgejo/Gitea tracker adapterdispatchercovered-deterministicpkg/dispatcher/tracker/forgejo_test.goreal Forgejo API is stubbed at the HTTP boundary
triggers.subscription-registrysubscription CRUD through the REST surfacetriggerscovered-deterministicpkg/server/triggers_routes_test.gomatching/mode semantics: pkg/trigger/subscription_test.go
triggers.subscription-querysubscription query by repo / by bot (tenant-scoped; by-repo also returns the workspace-wide ones)triggerscovered-deterministicTestSubscriptionStoreQueries (pkg/trigger/store_query_test.go)
triggers.evaluatorevaluator matches an event to subscriptions and launchestriggerscovered-deterministicpkg/trigger/evaluator_test.go
triggers.board-sourceboard transition promotes a card / direct-launches a bottriggerscovered-deterministicpkg/trigger/board_integration_test.go, TestIssueTriageTrigger_E2E_ConsumeAndLaunch (e2e/issue_triage_trigger_test.go)
triggers.consume-labelsconsume_labels strips the matcher labels atomically pre-launchtriggerscovered-deterministicpkg/trigger/consume_labels_test.go, TestIssueTriageTrigger_E2E_ConsumeAndLaunch (e2e/issue_triage_trigger_test.go)
triggers.run-outcomerun completion events chain the next bottriggerscovered-deterministicTestEvaluatorRunCompletionChaining (pkg/trigger/evaluator_test.go), pkg/runview/trigger_emit_test.go, pkg/trigger/runoutcome_test.gothe chaining itself (a finished run's event matches a direct-mode subscription and launches the next bot), the emitter that publishes it from runview, and the envelope/episode-id builder shared with the runner
triggers.schedulerschedule-kind subscriptions tick on their crontriggerscovered-deterministicpkg/trigger/scheduler_test.go, pkg/trigger/scheduler_gate_test.go
triggers.eventbus-inprocin-process event bus deliverytriggerscovered-deterministicpkg/eventbus/inproc_test.go
triggers.eventbus-natsNATS event bus on the separate ITERION_EVENTS streamtriggerscovered-deterministicpkg/eventbus/nats_test.goneeds a NATS endpoint; skips cleanly without one
triggers.cloudschedcloud recurring-bot scheduler with a multi-replica CAS tickertriggerscovered-deterministicpkg/cloudsched/cloudsched_test.go
triggers.retry-policyusage_window retry policy resolution across all layerstriggerscovered-deterministicpkg/retrypolicy/policy_test.go
webhooks.gitlabGitLab MR open/reopen + /revi note re-review launcheswebhookscovered-deterministicpkg/server/webhooks_gitlab_test.go, pkg/webhooks/webhooks_test.go
webhooks.githubGitHub PR events launch the configured botwebhookscovered-deterministicpkg/server/webhooks_github_test.go
webhooks.forgejoForgejo/Gitea PR events launch the configured botwebhookscovered-deterministicpkg/server/webhooks_forgejo_test.go
webhooks.genericgeneric JSON inbound triggerwebhookscovered-deterministicTestGenericWebhook_HappyPath_VarsPrecedence (pkg/server/webhooks_generic_test.go), TestGenericWebhook_MissingBotIs400 (pkg/server/webhooks_generic_test.go), TestGenericWebhook_BodyHashIdempotency (pkg/server/webhooks_generic_test.go), pkg/webhooks/generic/generic_test.go, pkg/webhooks/router_test.gothe endpoint itself: var precedence on launch, 400 without a bot, body-hash idempotency, oversized-var refusal; the parser in pkg/webhooks/generic and the command routing in router_test.go
webhooks.authiwh_ token / HMAC admission, rate limits, idempotent deliverywebhookscovered-deterministicpkg/webhooks/match_test.go, pkg/server/webhooks_routes_test.go
webhooks.handoffproduces/consumes hand-off stamps the next run's launch varswebhookscovered-deterministicpkg/server/webhooks_handoff_test.go, bots/handoff_declarations_test.go
webhooks.merge-gateRevi posts a deterministic revi/review commit statuswebhookscovered-deterministicTestForgePublishReview_GatePostedEvenWhenTheReviewFails (pkg/server/forge_publish_test.go), pkg/server/forge_gate_relaunch_test.go, pkg/server/forge_gate_autofix_test.gopkg/forge/reviews_test.go is a PR-URL parser + markdown folder — orthogonal to the gate
forge.connectionsforge connection / repo-integration / OAuth-app storesforgecovered-deterministicpkg/forge/oauth_app_store_test.go
forge.admin-clientsper-provider admin clients (repos, hooks, permissions)forgecovered-deterministicpkg/forge/forgelive_test.go, pkg/forge/command_map_test.goprovider APIs stubbed at the HTTP boundary
forge.github-appGitHub App manifest flow + installation-token mintingforgecovered-deterministicpkg/server/forge_app_resolution_test.gothe interactive App-creation consent screen is excluded (needs a real GitHub org)
forge.orchestratorprovision/deprovision: webhook + secret + bindings + schedulesforgecovered-deterministicpkg/forge/orchestrator_test.go
forge.token-refreshbackground token refresh workerforgecovered-deterministicpkg/forge/refresh_test.go
forge.config-shareshared-config read/write under a synthetic share grantforgecovered-deterministicpkg/configshare/configshare_test.go
cloud.auth-sessionlogin / logout / refresh / session cookies + JWT claimscloudcovered-deterministicpkg/auth/service_test.go, pkg/server/auth_routes_test.go
cloud.sso-oidcOIDC SSO providers + domain verificationcloudcovered-deterministicpkg/auth/oidc/generic_test.go, pkg/server/org_sso_routes_test.goa real IdP consent round-trip is excluded (see integrations.third-party-oauth)
cloud.password-resetpassword reset request/confirm + mail delivery fallbackcloudcovered-deterministicpkg/auth/password_reset_test.go, pkg/mail/mail_test.go
cloud.orgs-teamstwo-level tenancy: org membership, team scoping, context switchcloudcovered-deterministicpkg/identity/team_test.go, pkg/server/auth_teams_test.go
cloud.invitationsteam/org invitations: create, lookup, acceptcloudcovered-deterministicTestInvitations_AdminIssuesAnonymousLookupAcceptGrantsMembership (pkg/server/invitations_e2e_test.go), TestInvitations_DeletingAPendingInviteKillsItsToken (pkg/server/invitations_e2e_test.go), TestInvitationFlow (pkg/auth/service_test.go)the whole grant path over real HTTP: a plain member is refused (403, nothing created), an admin's token is looked up ANONYMOUSLY (the invitee has no session yet), accepting creates the membership — proven by the outsider's 403 on the team turning into a 200 that lists them at the invited role — and the token is single-use, login-gated, and dead once the admin deletes the invitation. The previous citation (auth_views_test.go) holds only an org-tree test
cloud.patpersonal access tokens (iap_ bearers)cloudcovered-deterministicTestPATBearer_AuthenticatesProgrammaticClientsThroughTheRealServer (pkg/server/pat_bearer_e2e_test.go), TestPATBearer_DiesWithTheMembershipItResolvesThrough (pkg/server/pat_bearer_e2e_test.go), pkg/server/pat_routes_test.go, pkg/pat/pat_test.gothe promise is programmatic access, and it lives in the auth MIDDLEWARE: the token is minted over real HTTP and then presented as a bearer to a server built by the real New() wiring — identity + pinned team served back, a protected endpoint reachable, cross-team read 403, unknown iap_ failing closed (never falling through to JWT parsing), revoke and membership removal each turning the next call into a 401 while the JWT session survives. Deleting the iap_ branch from requireAuth leaves the store and handler tests green and turns these red
cloud.audit-logtenant + platform audit log of control-plane mutationscloudcovered-deterministicTestAuditEndToEnd (pkg/server/audit_routes_test.go), pkg/audit/audit_test.goa control-plane mutation through the routes leaves the row an operator reads back on /api/teams/{id}/audit; the store half (TTL, filters) in pkg/audit
cloud.quotasper-org monthly run/cost counters gate the launchcloudcovered-deterministicpkg/orgusage/orgusage_test.go, pkg/server/launch_gate_test.go
cloud.queue-dispatchNATS work queue: enqueue, claim, schema-version handlingcloudcovered-deterministicpkg/queue/types_test.go, TestSchemaVersionMismatchIsATypedTransientError (pkg/queue/schema_version_transient_test.go)
cloud.runner-podrunner claims a queued run, executes, reports status backcloudcovered-deterministicpkg/runner/loop_test.go
cloud.runner-credentialscredential injection + sealing into a runner podcloudcovered-deterministicpkg/runner/git_credentials_test.go, pkg/secrets/run_secrets_test.go
cloud.credential-poolpledge/lease broker as the fourth credential tiercloudcovered-deterministicpkg/credpool/broker_test.go, pkg/server/cloudpublisher/credpool_tier_test.go, pkg/server/credpool_routes_test.go
cloud.secrets-sealingAES-256-GCM sealing + BYOK/generic/bot-binding domainscloudcovered-deterministicpkg/secrets/sealer_test.go, pkg/secrets/run_secrets_test.go
cloud.bot-sourcesteam-authored bot bundles (fork a catalog bot, author a new one)cloudcovered-deterministicpkg/botsource/botsource_test.go, pkg/server/bot_sources_routes_test.go
cloud.marketplacehosted registry entries (bot + plugin), moderation, visibilitycloudcovered-deterministicTestMarketplace_SubmitListGetInstall (pkg/server/marketplace_routes_test.go), TestMarketplace_InstallThenUninstall (pkg/server/marketplace_routes_test.go), pkg/marketplace/moderation_test.go, pkg/marketplace/visibility_test.go, pkg/marketplace/jsonstore_test.go, pkg/cli/marketplace_test.gosubmit → list → get → install/uninstall over the REST surface (plus the disabled/404/malformed-bundle refusals), with moderation status and visibility scope asserted at store level and the CLI half in pkg/cli
cloud.memory-storecloud MemoryStore adapter + quotacloudcovered-deterministicpkg/knowledge/scope_test.go, pkg/memory/space_test.go, pkg/server/memory_routes_test.go
cloud.dlqdead-letter queue show/replay/delete (admin REST surface)cloudcovered-deterministicTestDLQAdmin_ListPeekReplayLeavesAuditTrail (pkg/server/dlq_admin_routes_test.go), TestDLQAdmin_NonSuperAdminCannotReplayOrDiscard (pkg/server/dlq_admin_routes_test.go)the endpoints behind iterion remote admin dlq: super-admin gate (an unprivileged caller never reaches the queue), list/peek/replay/discard state transitions, the platform audit row naming the replayed run, and 400/404/502 mapping. Driven through the real New()/routes()/auth middleware with an in-process QueueBackend double (the seam added for it); the broker-side half is cloud.dlq-jetstream
cloud.dlq-jetstreamDLQ transport semantics: park with headers, paged list over deleted holes, replay with a salted Nats-Msg-Idcloudexcludedlives entirely inside JetStream (pkg/queue/nats/dlq.go): every operation is a stream Get/Publish/DeleteMsg. Needs a live broker — nats-server/v2 is not vendored and vendoring an embedded broker is a heavy test dependency this repo has deliberately not taken (see the coverage note at the top of pkg/queue/nats/nats_test.go)
cloud.migrate-blobsmigrate to-cloud artifact/blob upload to S3cloudcovered-deterministicTestMigrateToCloud_TransfersEveryVersionAndIsIdempotent (cmd/iterion/migrate_to_cloud_test.go), TestMigrateToCloud_DryRunWritesNothing (cmd/iterion/migrate_to_cloud_test.go), TestS3Client_ArtifactUploadRoundTripAndLayout (pkg/store/blob/s3_roundtrip_test.go), TestS3Client_DeleteRunSweepsOnlyThatRunsPrefix (pkg/store/blob/s3_roundtrip_test.go)both halves of the one-way door: the walker (migrateRun between two real stores — every artifact VERSION, events, interactions, --dry-run writes nothing, re-runs don't duplicate) and the S3 upload driven by the REAL AWS SDK against an in-process path-style gateway (canonical key layout on the wire, byte round-trip, ErrArtifactNotFound mapping, prefix-scoped DeleteRun). Not covered: the Mongo store's own WriteArtifact→blob glue, which needs a live Mongo (mongo-conformance CI job)
cloud.desktop-exchangedesktop auth token exchange endpointcloudcovered-deterministicpkg/server/desktop_sso_test.go
cloud.valkey-stateephemeral cross-replica state (OAuth/CSRF, board tokens, rate buckets)cloudcovered-deterministicTestValkeyCrossReplica_ForgeOAuthStartedOnACompletesOnB (pkg/server/valkey_cross_replica_test.go), TestValkeyCrossReplica_BoardTokenMintedOnAAuthorizesWriteOnB (pkg/server/valkey_cross_replica_test.go), TestValkeyCrossReplica_LoginRateBudgetIsSharedNotPerPod (pkg/server/valkey_cross_replica_test.go), pkg/server/valkey_stores_test.gotwo servers built through the real New() wiring over ONE miniredis: each flow starts on replica A and finishes on replica B (OAuth connect → callback creates the connection, board token → board write, login burst → 429). Give each replica its own Valkey and all three fail. store-level TTL/GETDEL/write-failure surfacing in valkey_stores_test.go. Not covered: valkey.New's Sentinel-HA topology (needs a real Sentinel quorum; the single-node client is what miniredis speaks)
bots.catalog-universalitycatalog bots stay repo- and stack-agnosticbotscovered-deterministicbots/catalog_universality_test.go
bots.catalog-compilesevery catalog bot parses + compiles cleanbotscovered-deterministicbots/catalog_parse_compile_test.go, bots/catalog_typing_test.go
bots.catalog-freshnessthe generated bot-catalog skill matches the manifestsbotscovered-deterministicbots/catalog_freshness_test.go
bots.golden-replaybot golden replay revalidates frozen LLM outputsbotscovered-deterministicTestGoldens (pkg/botreplay/goldens_test.go)
bots.feature-devfeature-dev (Featurly): campaign + gate convergencebotscovered-deterministicTestVibeFeatureDev_ConvergesFirstPass (e2e/feature_dev_test.go), TestVibeFeatureDev_RedVerifyRoutesBackToCampaign (e2e/feature_dev_test.go)
bots.whole-improve-loopwhole-improve-loop (Willy)botscovered-deterministicTestWholeImproveLoop_ContinuesUntilComplete (e2e/whole_improve_loop_test.go)
bots.branch-improve-loopbranch-improve-loop (Billy)botscovered-deterministicTestBranchImproveLoop_ContinuesUntilClean (e2e/branch_improve_loop_test.go)
bots.docs-refreshdocs-refresh (Doki)botscovered-deterministicTestDocsRefresh_ConvergesFirstPass (e2e/docs_refresh_test.go)
bots.whats-nextwhats-next (Nexie) chat loop + dispatchbotscovered-deterministicTestWhatsNextV2_ChatLoop_PauseResumeClose (e2e/whats_next_loop_test.go)
bots.secured-renovacysecured-renovacy (Renovacy) patch/minor/fix-loop pathsbotscovered-deterministicTestSecuredRenovacy_PatchFastTrack (e2e/secured_renovacy_test.go)
bots.sec-audit-sourcesec-audit-source (Seki): cap_findings + scan_health gatesbotscovered-deterministicTestSecAuditSource_ScanHealth_GuardsAgainstFacade (e2e/sec_audit_scan_health_test.go), TestSecAuditSource_CapFindings_BoundsScannerOutput (e2e/sec_audit_cap_findings_test.go)
bots.sec-audit-depssec-audit-deps (Depsy): per-ecosystem + generic CVE heuristicsbotscovered-deterministicTestSecAuditDeps_GenericHeuristic_DetectsMalwareSignals (e2e/sec_audit_deps_heuristics_test.go)
bots.e2e-coveragee2e-coverage (Endy): matrix gate + continuation loopbotscovered-deterministicTestE2ECoverage_ContinuesUntilComplete (e2e/e2e_coverage_bot_test.go), bots/e2e_coverage_matrix_gate_test.go
bots.review-prreview-pr (Revi): finding ids, stale anchors, gate statusbotscovered-deterministicbots/review_pr_finding_id_test.go, bots/review_pr_stale_anchor_test.go
bots.dep-update-guarddep-update-guard (Vetty): prepare/gate/automerge routingbotscovered-deterministicbots/dep_update_guard_gate_test.go, bots/dep_update_guard_automerge_test.go
bots.feed-watchfeed-watch: state machine, routing, SSRF-safe fetchbotscovered-deterministicTestFeedWatch_ScriptsStateMachine (e2e/feed_watch_test.go), TestFeedWatch_FetchRejectsSSRF (e2e/feed_watch_test.go)
bots.issue-triageissue-triage (Triagy): author trust gate + label consumptionbotscovered-deterministicTestIssueTriageTrigger_E2E_ConsumeAndLaunch (e2e/issue_triage_trigger_test.go)
bots.golden-master-syncthe golden-master bot and its oracle harness stay in sync (same functions, same report fields)botscovered-deterministicbots/golden_master_harness_sync_test.go
bots.review-topologymono/dual review topology injected only into opting-in botsbotscovered-deterministicTestReviewTopology_MonoClaudeSingleFamily (e2e/review_topology_test.go)
bots.verify-gatethe deterministic verify_build/verify_run gate resists driftbotscovered-deterministicbots/verify_run_drift_test.go, bots/verify_probe_wiring_test.go
bots.live-covered-catalogthe catalog bots that HAVE a live test (evolve, adr-cartograph, adr-rechallenge, rgaa-audit, bmady, devbox-setup, revi-converse, feature-gap-fill, test-coverage)botscovered-livee2e/live_bot_adr_cartograph_test.go, e2e/live_bot_adr_rechallenge_test.go, e2e/live_bot_evolve_test.go, e2e/live_bot_rgaa_audit_test.go, e2e/live_bot_bmady_test.go, e2e/live_bot_devbox_setup_test.go, e2e/live_bot_revi_converse_test.go, e2e/live_bot_feature_gap_fill_test.go, e2e/live_bot_test_coverage_test.gothese bots' value IS the LLM work product (a review, an ADR map, an accessibility audit); they have no deterministic graph gate to assert against, so the live layer + quality panel is the honest coverage. Their graphs are compile-checked by bots.catalog-compiles
bots.uncovered-catalogthe catalog bots with NO test beyond parse+compile (modernize, wiki-gen, app-dev, supply-shield, supply-shield-cve, smoke)botsuncoveredplan: one e2e/live_bot_<name>_test.go each, on the runBotLive harness, with the quality panel — same shape as the live-covered row. Compile-only coverage (bots.catalog-compiles) is NOT coverage of what these bots produce
studio-ui.run-consolerun console view: timeline, node detail, diffs, chatstudio-uicovered-deterministicstudio/e2e/specs/run-console.spec.tsPlaywright against the real server: the seeded run's IR graph (node ids, kinds, per-node status incl. the never-reached fail), its declared budget, its replayed edge-selection log lines and a published artifact's real payload all render. Chat needs a live agent — out of this row's deterministic reach
studio-ui.launch-modalLaunch modal: bot picker, vars, overrides, target repostudio-uicovered-deterministicstudio/e2e/specs/launch.spec.tsPlaywright: ?bot= resolves through the catalog to the workflow, the vars: block splits into required primaries vs defaulted Bot options, missing-required validation blocks the launch, and Engine options offers the workflow's own agent node for model retargeting. The "target repo" attach needs a forge connection (covered at REST level by the forge rows). The same spec found a REAL BUG — preview-cost answers nodes: null for a workflow with NO agent/judge node and CostPreviewChip dereferenced it, dropping the whole view into its error boundary — fixed in 457374dd; the test now asserts the positive contract (such a workflow still renders a launchable view)
studio-ui.board/board kanban with drag-and-dropstudio-uicovered-deterministicstudio/e2e/specs/board.spec.tsPlaywright: the native board's real columns + the CLI-seeded card render, and moving the card through the UI is asserted against the native store's REST read AND a reload (an optimistic-only client update fails). The move uses the selection toolbar rather than an HTML5 drag gesture — same mutation, same endpoint, no synthetic-DnD flake
studio-ui.pipelines/pipelines control-center board + concurrency capstudio-uicovered-deterministicstudio/e2e/specs/pipelines.spec.tsPlaywright: the banner renders the cap the server actually booted with (--max-concurrent-pipelines, read back from /api/server/info — changing one side alone turns it red), and the seeded finished runs land as Closed cards linking to their own run console
studio-ui.dispatcher/dispatcher live dashboardstudio-uicovered-deterministicstudio/e2e/specs/dispatcher.spec.tsPlaywright drives the whole lifecycle: Start refused without a config, settings saved, dispatcher started, then the dashboard asserted against THAT instance's real settings (name, tracker, poll interval, slots) and lane counters, then stopped through its confirm dialog. A second test asserts the server's own config-validation error reaches the dialog. Poll pinned to 1h so the actor never claims the seeded card mid-test
studio-ui.bots-gallery/bots gallery, per-bot home, guided builder /bots/newstudio-uicovered-deterministicstudio/e2e/specs/bots-gallery.spec.tsPlaywright: the gallery lists what botregistry discovered on disk (and its search filters that set), the per-bot home renders the manifest fields + "declares no vars", and the guided builder is driven end to end — the assertion is the bundle it WRITES (main.bot + manifest.yaml under bots/scaffold-probe/) and the registry picking it up, not a toast
studio-ui.editorworkflow editor + /api/parse round-tripstudio-uicovered-deterministicstudio/e2e/specs/editor.spec.tsPlaywright: the canvas + inspector are asserted against what the Go parser produced (node kinds, the tool node's command, entry node, budget) plus the real compiler diagnostic (C128), and an inspector edit is followed through save into the REWRITTEN .bot source on disk and back out through a fresh parse
studio-ui.secrets-viewSecrets view gated on server_info.secrets_enabledstudio-uicovered-deterministicstudio/e2e/specs/secrets.spec.tsPlaywright: the gate flag is asserted, then add → list → delete is driven through the UI with the SEALED store file on disk as the oracle (name + last4 present, plaintext absent). ITERION_HOME/HOME/ITERION_SECRETS_KEY are redirected into the throwaway workspace so the operator's own store and keychain are never touched
studio-ui.browser-paneBrowser pane / preview attachstudio-uicovered-deterministicstudio/e2e/specs/browser-pane.spec.tsPlaywright: a fixture tool node prints [iterion] preview_url=…, the runtime turns it into a preview_url_available event, and the pane auto-reveals carrying exactly that URL (bar + open link). The negative case — a run that published none has no Browser tab — pins the trigger. The URL is the suite's own loopback origin, so the iframe never leaves the test server. Live CDP attach needs a real Chromium session and stays out of the deterministic layer
desktop.wails-appWails desktop wrapper (window, runtime bridge, packaging)desktopunit-onlystudio/src/tests/desktopBridge.test.tsthe Go half is cgo + build-tagged (desktop,webkit2_41) and excluded from lint/CI; an e2e needs a GUI session — the bridge contract is the testable seam
integrations.third-party-oauthreal third-party OAuth consent flows (GitHub App, IdP, MCP OAuth)integrationsexcludedneeds a real provider tenant and a human consent screen; iterion's side (state/PKCE, callback handling, token storage) is covered by cloud.sso-oidc, forge.github-app and tools-mcp.mcp-oauth
integrations.claude-md-autoloadclaw TUI CLAUDE.md auto-loadintegrationsexcludeda claw-code-go TUI-boot behaviour with no iterion workflow surface; iterion uses its own command registry (carried over from docs/e2e_coverage.md)
integrations.claw-lifecycle-hooksclaw lifecycle hooks / ctx propagation into hook handlersintegrationsexcludediterion installs no lifehooks.Runner on its claw client, so there is no iterion-level behaviour to exercise; wiring one is a separate feature (carried over from docs/e2e_coverage.md)
integrations.permission-modes-autoclaw permission modes auto / dontAskintegrationsexcludediterion runs headless (workflow mode) and never surfaces these modes; the two it does use are covered by tools-mcp.permission-gate
</content> </invoke>