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
- Follow the review-blocked flow: record final review blockers, which appends the designated resolver goal, then complete that resolver
- Complete or resolve the review_blocked parent goals before task-scoped aggregate completion
- 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
- Always create the resolver goal via recordFinalReviewBlockers before continuing
- Never complete task-scoped aggregates while parents are review_blocked
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
- Blocked ultragoal checkpoint is only for a different complet
- Cannot record final review blockers for ${goal.id}; it is no
- Invalid --codex-goal-mode; expected aggregate or per-story.
- Invalid ${label}: ${message}
- Missing --kind for structured ultragoal steer.
AI-assisted analysis of Yeachan-Heo/oh-my-codex@3ad79a8a6f (2026-08-27).
Data as JSON: /api/errors/f2d9e4dadacf0dab.
Report an issue: GitHub.