Skip to content

fix(dag): status shows unresolved_reviews for ACCEPTed diff reviews — compiled synthesize lacks the review binding #304

Closed

Description

@LeXwDeX

Discovered by live end-to-end testing on v1.0.21 (harness smoke DAG dag_fe5ff550b327CGm6EzUOUNwBex).

Problem Statement

After a diff review settles ACCEPT and the whole graph completes, workflow(action="status") still reports unresolved_reviews: ["decision"]. The field meant to surface actionable REJECT verdicts becomes false-positive noise exactly on the clean path — the loudness signal #294 added now cries wolf on success.

Root Cause

reviewAccepted (review-lifecycle) requires, besides verdict ACCEPT, a completed final gate from finalReviewGates: a required node that depends on the review, maps its output in input_mapping, and carries a condition accepting the verdict. The block compiler emits the synthesize (report) node without any input_mapping, so no final gate is ever found for block-compiled routes → the ACCEPTed review counts as unresolved forever.

This is the third instance of one pattern: block contracts promise dependency-evidence binding in prose while the compiler emits no mechanical input_mapping (verify before #299; now synthesize).

Deeper Implication

validateFinalReviewGate rejects the same shape in deep mode ("deep diff review must feed a required final gate conditioned on verdict ACCEPT"). A block route with implementation-review → synthesize therefore compiles in standard mode but should fail portable validation in deep mode — a mode-dependent cliff for the same authoring shape.

Proposed Fix (from analysis, not yet implemented)

When a synthesize block depends on a review, bind the review's output into the synthesize node's input_mapping (the synthesize condition is already <review>.output.verdict == "ACCEPT"). That satisfies finalReviewGates on all three axes (required ✓, mapping ✓, verdict-accepting condition ✓), making status clean after ACCEPT and the deep-mode shape valid. Add regression tests: ACCEPTed route → no unresolved_reviews; deep-mode block route with report validates.

Out of Scope

  • Changing unresolvedReviewOutcomes semantics for REJECT/skipped shapes (correct today).

Activity

  1. added
    bugSomething isn't working
    ready-for-agentFully specified and ready for an agent
    on Aug 16, 2026
  2. LeXwDeX commented on Aug 16, 2026

    @LeXwDeX
    OwnerAuthor

    Fixed in PR #306 (dev) and promoted via PR #307; shipped in v1.0.22 (merge 9939cfa). Synthesize following a review now binds the review output, satisfying finalReviewGates; status no longer reports false unresolved_reviews after ACCEPT.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions