{"record":{"id":"19be4b6223a86921","repo":"can1357/oh-my-pi","slug":"commit-agent-did-not-provide-a-proposal","errorCode":null,"errorMessage":"Commit agent did not provide a proposal.","messagePattern":"Commit agent did not provide a proposal\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/coding-agent/src/commit/agentic/index.ts","lineNumber":242,"sourceCode":"\t\t}\n\t}\n\n\tif (commitState.proposal) {\n\t\tawait runSingleCommit(commitState.proposal, ctx);\n\t\treturn usedFallback;\n\t}\n\n\tif (commitState.splitProposal) {\n\t\tawait runSplitCommit(commitState.splitProposal, {\n\t\t\tcwd: ctx.cwd,\n\t\t\tdryRun: ctx.dryRun,\n\t\t\tpush: ctx.push,\n\t\t\tadditionalFiles: updatedChangelogFiles,\n\t\t});\n\t\treturn usedFallback;\n\t}\n\n\tthrow new Error(\"Commit agent did not provide a proposal.\");\n}\n\nasync function runSingleCommit(proposal: CommitProposal, ctx: CommitExecutionContext): Promise<void> {\n\tconst repo = vcs.requireGit(ctx.cwd);\n\tif (proposal.warnings.length > 0) {\n\t\tprocess.stdout.write(formatWarnings(proposal.warnings));\n\t}\n\tconst commitMessage = formatCommitMessage(proposal.analysis, proposal.summary);\n\tif (ctx.dryRun) {\n\t\tprocess.stdout.write(\"\\nGenerated commit message:\\n\");\n\t\tprocess.stdout.write(`${commitMessage}\\n`);\n\t\treturn;\n\t}\n\tprocess.stdout.write(\"● Creating commit...\\n\");\n\ttry {\n\t\tawait repo.commitCreate(commitMessage, {});\n\t} catch (error) {\n\t\tif (vcs.isVcsError(error)) abortOnGitFailure(\"Commit failed\", error);","sourceCodeStart":224,"sourceCodeEnd":260,"githubUrl":"https://github.com/can1357/oh-my-pi/blob/969062200754ea02cfac922e5ebb8c608c079e15/packages/coding-agent/src/commit/agentic/index.ts#L224-L260","documentation":"completeAgentCommitState() throws this when the commit agent's state ends up with neither a single CommitProposal nor a SplitCommitProposal, and the fallback path was disabled (PI_COMMIT_NO_FALLBACK=true) or did not run. Normally a missing proposal triggers generateFallbackProposal() from numstat; this error surfaces only when fallback is suppressed. It is a guard against proceeding with no commit content.","triggerScenarios":"The agent LLM returns no proposal/splitProposal (malformed output, parse failure) while PI_COMMIT_NO_FALLBACK=true, so line 195-201 cannot populate commitState.proposal and execution falls through to the throw at line 242.","commonSituations":"Running the agentic commit flow with fallback disabled in CI; the model produces unparseable or empty structured output for the proposal; a provider error mid-agent leaves the state partially filled (e.g. changelog only).","solutions":["Unset PI_COMMIT_NO_FALLBACK (or set it to anything other than \"true\") so generateFallbackProposal() can synthesize a commit from numstat","Re-run the commit; LLM proposal failures are often transient","Check the agent/provider logs for why no proposal was parsed (e.g. stopReason === \"error\" earlier in the run)","Commit manually with a conventional message if the automation keeps failing"],"exampleFix":"// before\nPI_COMMIT_NO_FALLBACK=true omp commit\n// after\nunset PI_COMMIT_NO_FALLBACK && omp commit","handlingStrategy":"fallback","validationCode":"if (!commitState.proposal && !commitState.splitProposal && process.env.PI_COMMIT_NO_FALLBACK === \"true\") {\n  throw new Error(\"No commit proposal and fallback disabled\");\n}","typeGuard":"function hasProposal(state: CommitAgentState): boolean {\n  return Boolean(state.proposal ?? state.splitProposal);\n}","tryCatchPattern":"try {\n  await runAgenticCommit(args);\n} catch (err) {\n  if (err.message.includes(\"did not provide a proposal\")) {\n    console.error(\"Agent produced no proposal; run with fallback enabled or commit manually.\");\n  } else throw err;\n}","preventionTips":["Do not set PI_COMMIT_NO_FALLBACK=true unless you specifically want hard failure","Monitor agent proposal-parse failures in logs","Retry transient LLM failures before disabling fallback"],"tags":["commit","agent","fallback-disabled","llm-output"],"backgroundTag":"agent-produced-no-output","analyzedSha":"969062200754ea02cfac922e5ebb8c608c079e15","analyzedAt":"2026-08-31T10:29:35.737Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}