fix(merger): build commit messages from actual content, not branch range
The merge commit message was built from `commitLog`/`diffStat` computed against `merge-base(branch, main)`. Under squash-merge workflows, when an earlier task is squash-merged onto main first, branches that forked off the pre-squash main no longer share ancestry with it — `merge-base` resolves to a point before the earlier task, and the message describes work already merged via the prior squash. FN-2952's commit body claimed 11 files / 557 insertions when the actual diff was 2 files / 55 lines. Subject was also a generic `merge <branch>` regardless of content. - packages/engine/src/merger.ts: new `computeActualMergeCommitContext` helper that derives commitLog/diffStat from the actual integration delta (`git diff --cached <integrationTarget> --stat`), filtering branch commits by patch-id against the target's recent history to drop already-squashed siblings. Wired into both commit-finalization sites (`commitOrAmendMergeWithFixes` uses `preAttemptHeadSha`; the final amend in `runMergeAttempt` uses `HEAD~1`). Agent-context use of the wide range is unchanged. - packages/engine/src/merger.ts: `buildDeterministicMergeMessage` now generates subject and body in parallel via `Promise.all`. Subject is composed as `feat(taskId): <ai summary>`, capped at 72 chars, with fallback to the legacy `merge <branch>` form on any AI failure. - packages/core/src/ai-summarize.ts: new `summarizeCommitSubject` and `sanitizeCommitSubject` mirroring the body summarizer's structure. Same title-summarizer lane, 15s timeout. Sanitizer strips quotes, bullets, re-added conventional-commit prefixes, and trailing periods; hard-caps at 60 chars. - packages/core/src/__tests__/ai-summarize.test.ts: 9 tests covering the sanitizer's behavior. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -185,11 +185,16 @@ export type {
|
||||
export {
|
||||
summarizeTitle,
|
||||
summarizeCommitBody,
|
||||
summarizeCommitSubject,
|
||||
sanitizeCommitSubject,
|
||||
checkRateLimit,
|
||||
getRateLimitResetTime,
|
||||
validateDescription,
|
||||
SUMMARIZE_SYSTEM_PROMPT,
|
||||
COMMIT_BODY_SYSTEM_PROMPT,
|
||||
COMMIT_SUBJECT_SYSTEM_PROMPT,
|
||||
MAX_COMMIT_SUBJECT_LENGTH,
|
||||
DEFAULT_COMMIT_SUBJECT_TIMEOUT_MS,
|
||||
MAX_DESCRIPTION_LENGTH,
|
||||
MIN_DESCRIPTION_LENGTH,
|
||||
MAX_TITLE_LENGTH,
|
||||
|
||||
Reference in New Issue
Block a user