Yeachan-Heo/oh-my-codex · error · UltragoalError

Completed task-scoped aggregate reconciliation is not allowe

Error message

Completed task-scoped aggregate reconciliation is not allowed while unresolved review_blocked parent goals exist; only the parent's designated resolver may continue through the clean final quality gate path.

What it means

You are completing a task-scoped aggregate reconciliation while one or more parent goals in the plan are in review_blocked state and unresolved. Only the parent's designated resolver goal (following the clean final quality gate path, per canUseCleanFinalResolverPathForReviewBlockedParent) may proceed in that situation.

Source

Thrown at src/ultragoal/artifacts.ts:1904

        requireComplete: !aggregateMode || (finalRunCheckpoint && !options.allowActiveFinalCodexGoal),
      },
    );
    if (!reconciliation.ok) {
      const completedTaskScopedAggregateSnapshot = snapshot?.available
        && snapshot.status === 'complete'
        && Boolean(snapshot.objective)
        && normalizeObjective(snapshot.objective ?? '') !== normalizeObjective(expectedObjective)
        && await canReconcileCompletedTaskScopedAggregateSnapshot(
          cwd,
          plan,
          goal,
          snapshot.objective ?? '',
          options.evidence,
        );
      if (completedTaskScopedAggregateSnapshot) {
        if (unresolvedReviewBlockedGoals(plan).length > 0) {
          if (!canUseCleanFinalResolverPathForReviewBlockedParent(plan, goal, finalRunCheckpoint, options.allowActiveFinalCodexGoal)) {
            throw new UltragoalError('Completed task-scoped aggregate reconciliation is not allowed while unresolved review_blocked parent goals exist; only the parent\'s designated resolver may continue through the clean final quality gate path.');
          }
        } else {
          aggregateCompletion = {
            status: 'complete',
            completedAt: now,
            evidence: assertNonEmpty(options.evidence, '--evidence'),
            codexGoal: options.codexGoal,
          };
        }
      } else {
        const taskScopedRequirement = aggregateMode && snapshot?.status === 'complete' && Boolean(snapshot.objective)
          ? ' Completed task-scoped aggregate reconciliation requires the checkpoint goal to be the active in-progress OMX goal, evidence that names that active OMX goal id, names .omx/ultragoal/goals.json or ledger.jsonl, includes completed implementation plus validation/review evidence, and a get_goal objective that maps to the ultragoal brief.'
          : '';
        const remediation = reconciliation.snapshot.available
          && reconciliation.snapshot.status === 'complete'
          && Boolean(reconciliation.snapshot.objective)
          && normalizeObjective(reconciliation.snapshot.objective ?? '') !== normalizeObjective(expectedObjective)
          ? ` ${buildCompletedLegacyGoalRemediation(goal)}`

View on GitHub (pinned to 3ad79a8a6f)

Solutions

  1. Follow the review-blocked flow: record final review blockers, which appends the designated resolver goal, then complete that resolver
  2. Complete or resolve the review_blocked parent goals before task-scoped aggregate completion
  3. Pass the correct options so canUseCleanFinalResolverPathForReviewBlockedParent recognizes this goal as the designated resolver
Defensive patterns

Strategy: validation

Validate before calling

if (unresolvedReviewBlockedGoals(plan).length > 0 && !canUseCleanFinalResolverPathForReviewBlockedParent(plan, goal, finalRunCheckpoint, allowActive)) { followResolverFlow(); }

Prevention

When it happens

Trigger: Recording a completed task-scoped aggregate snapshot checkpoint when unresolvedReviewBlockedGoals(plan).length > 0 and the current goal is not the designated resolver allowed via allowActiveFinalCodexGoal/clean final path.

Common situations: Multi-goal plans where final review blocked a parent goal and a sibling task-scoped goal completes before a resolver goal is appended; orchestration that skips the recordFinalReviewBlockers → resolver flow.

Related errors


AI-assisted analysis of Yeachan-Heo/oh-my-codex@3ad79a8a6f (2026-08-27). Data as JSON: /api/errors/f2d9e4dadacf0dab. Report an issue: GitHub.