can1357/oh-my-pi · error · Error

Commit agent did not provide changelog entries.

Error message

Commit agent did not provide changelog entries.

What it means

When the agentic commit flow is configured to update the changelog (changelog targets exist and no fallback or no-changelog opt-out), the commit agent's final state must include a changelogProposal. If the agent finished without producing entries, completeAgentCommitState throws to prevent silently skipping the required changelog update.

Source

Thrown at packages/coding-agent/src/commit/agentic/index.ts:206

	ctx: CommitExecutionContext & {
		noChangelog: boolean;
		changelogTargets: string[];
		numstat: NumstatEntry[];
	},
): Promise<boolean> {
	let usedFallback = false;
	if (!commitState.proposal && !commitState.splitProposal) {
		if ($env.PI_COMMIT_NO_FALLBACK?.toLowerCase() !== "true") {
			process.stdout.write("● Agent did not provide proposal, using fallback...\n");
			commitState.proposal = generateFallbackProposal(ctx.numstat);
			usedFallback = true;
		}
	}

	let updatedChangelogFiles: string[] = [];
	if (!ctx.noChangelog && ctx.changelogTargets.length > 0 && !usedFallback) {
		if (!commitState.changelogProposal) {
			throw new Error("Commit agent did not provide changelog entries.");
		}
		process.stdout.write("● Applying changelog entries...\n");
		const updated = await applyChangelogProposals({
			cwd: ctx.cwd,
			proposals: commitState.changelogProposal.entries,
			dryRun: ctx.dryRun,
			onProgress: message => {
				process.stdout.write(`  ├─ ${message}\n`);
			},
		});
		updatedChangelogFiles = updated.map(filePath => path.relative(ctx.cwd, filePath));
		if (updated.length > 0) {
			for (const filePath of updated) {
				process.stdout.write(`  └─ ${filePath}\n`);
			}
		} else {
			process.stdout.write("  └─ (no changes)\n");
		}

View on GitHub (pinned to 9690622007)

Solutions

  1. Re-run the agentic commit (often a transient model omission) and inspect the agent's final message for changelog output
  2. Pass the no-changelog opt-out for the commit if entries genuinely are not needed, so the requirement is explicitly waived
  3. Verify the repo's changelog targets are correct (the requirement only triggers when targets exist) and that the agent prompt/tooling version matches the expected proposal schema

Example fix

// before (agent produced no proposal for a repo that requires changelog updates)
throw new Error("Commit agent did not provide changelog entries.")
// after (explicitly waive when no entries are warranted)
omp commit --no-changelog
Defensive patterns

Strategy: try-catch

Validate before calling

if (!ctx.noChangelog && ctx.changelogTargets.length > 0 && !usedFallback && !commitState.changelogProposal) {
  throw new Error('Agent finished without changelog entries; re-run or pass --no-changelog.');
}

Type guard

function hasChangelogProposal(state) {
  return !!state?.changelogProposal && Array.isArray(state.changelogProposal.entries);
}

Try / catch

try {
  await runAgenticCommit(ctx);
} catch (err) {
  if (err instanceof Error && err.message.includes('changelog entries')) {
    logger.warn('Commit agent omitted changelog entries; retrying or falling back to manual edit');
    // retry once, or update CHANGELOG.md by hand before committing
  } else throw err;
}

Prevention

When it happens

Trigger: The commit agent's response omitted the changelog proposal (model returned no entries or malformed final output) while the repo has CHANGELOG targets and the run did not set noChangelog or use the fallback path.

Common situations: Model under-following structured-output instructions; a repo requiring changelog updates whose CHANGELOG.md exists but the agent decided nothing changed; prompt/agent-version drift changing the proposal schema.

Related errors


AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31). Data as JSON: /api/errors/b36b5e1f48bdfdf9. Report an issue: GitHub.