Skip to content

orchestration: /plan confirm gives no user-visible signal when verification judges plan output incomplete #6265

Description

@bug-ops

Description

Live-tested the newly merged deterministic ensemble-merge PlanVerifier (spec 073, #6232, commit
e55727a9) end-to-end via /plan <goal>/plan confirm/status (CI-1380, closing the
Scenario 12 gap left open by CI-1377). The ensemble mechanism itself works correctly (see coverage
update below), but the test surfaced a separate, pre-existing UX gap in zeph-core/src/agent/plan.rs:
when per-task or whole-plan verification determines the output is incomplete/low-confidence, and no
replan gap-tasks end up injected, the CLI user receives no indication whatsoever that anything
was flagged.

Both run_whole_plan_verify (plan.rs:491-578) and the per-task ensemble/verify branch
(scheduler_loop.rs:540-656) only ever call tracing::debug!/tracing::warn! on an incomplete
verdict or a failed/empty replan — neither path has a single self.channel.send(...) call for this
case. finalize_plan_execution (plan.rs:666-720) only branches user-visible messages on
GraphStatus (Completed/Failed/Paused/Canceled), which reflects task execution outcome, not
the verifier's completeness judgment — a plan whose only task technically "completed" (produced some
output) is reported to the user as an unqualified success even when verification confidently judged
that output wrong.

Reproduction Steps

  1. Enable [orchestration] verify_completeness = true and a valid 3-member [orchestration.ensemble]
    config (enabled = true, verify = true).
  2. /plan <goal that a subagent will answer poorly> then /plan confirm.
  3. In this session's repro, the assigned subagent (rust-architect persona) attempted an unrelated
    write tool call instead of directly answering, got blocked by the confirmation gate, and returned
    "The write tool requires confirmation..." as its final task output.
  4. Debug log confirms both verifiers caught it: ensemble per-task verification result task_id=0 complete=false confidence=0.283 agreement_ratio=1.0 and later whole-plan verification result complete=false confidence=0.0 gaps=1 threshold=0.7.
  5. Observe the CLI transcript: after "Confirmed. Executing plan (1 tasks)..." and the sub-agent's
    non-answer, the only further output is from the separately-issued /status command. No
    "plan verification found gaps" / "low confidence" / "replan attempted and failed" message is ever
    shown. /status's "Ensemble verify:" section shows aggregate EMA scores per member but does not
    flag that a specific task/plan was judged incomplete.

Expected Behavior

When verification (per-task or whole-plan) judges output incomplete/low-confidence and does not
result in a successful replan, the user should get some visible signal — even a low-key one line —
that the plan's output may not fully satisfy the goal, rather than silence that reads identically to
a plan verification never having run at all.

Actual Behavior

Silent. The only observable trace is in debug-level logs.

Environment

Logs / Evidence

  • crates/zeph-core/src/agent/plan.rs:544-577 (run_whole_plan_verify) — no channel.send on
    incomplete verdict
  • crates/zeph-core/src/agent/scheduler_loop.rs:610-656 — same for the per-task path
  • crates/zeph-core/src/agent/plan.rs:666-720 (finalize_plan_execution) — branches only on
    GraphStatus, not verifier completeness
  • Live repro this cycle (CI-1380): .local/testing/config/ensemble-live-test.toml,
    .local/testing/journal/ci-1380.md

Coverage note (positive result, not a defect)

This same session confirmed the ensemble merge/quorum mechanism itself works correctly end-to-end for
the first time live: all 3 configured members (aliased to local Ollama qwen2.5:7b, since cloud
providers were quota-exhausted this session) were independently queried
(orchestration.ensemble.verify_member spans per member), merged with unanimous
agreement_ratio=1.0, and /status rendered the documented "Ensemble verify:" block with correct
per-member EMA scores. This closes the CI-1377 "Scenario 12" live-verification gap for #6247.

Metadata

Metadata

Assignees

Labels

P3Research — medium-high complexityenhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions