merge-steward 0.5.4 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -136,7 +136,7 @@ function summarizeCheckNames(checks, limit = 3) {
136
136
  return `${names.slice(0, limit).join(", ")} +${names.length - limit} more`;
137
137
  }
138
138
  async function performBranchRefresh(ctx, entry, baseSha) {
139
- emit(ctx, entry, "rebase_started", { baseSha });
139
+ emit(ctx, entry, "rebase_started", { baseSha, detail: `refreshing ${entry.branch} with ${ctx.baseBranch}` });
140
140
  const result = await ctx.git.mergeBaseInto(entry.branch, ref(ctx, ctx.baseBranch));
141
141
  if (!result.success) {
142
142
  emit(ctx, entry, "rebase_conflict", { baseSha, conflictFiles: result.conflictFiles });
@@ -164,7 +164,7 @@ async function performBranchRefresh(ctx, entry, baseSha) {
164
164
  return;
165
165
  }
166
166
  await ctx.git.push(entry.branch, false);
167
- emit(ctx, entry, "rebase_succeeded", { baseSha });
167
+ emit(ctx, entry, "rebase_succeeded", { baseSha, detail: `refreshed ${entry.branch} with ${ctx.baseBranch}` });
168
168
  // Build speculative branch for downstream entries.
169
169
  let specBranch = null;
170
170
  let specSha = null;
@@ -186,7 +186,7 @@ async function performBranchRefresh(ctx, entry, baseSha) {
186
186
  ctx.store.transition(entry.id, "validating", {
187
187
  headSha, baseSha, ciRunId: runId, lastFailedBaseSha: null,
188
188
  specBranch, specSha, specBasedOn: null,
189
- }, `rebase onto ${baseSha.slice(0, 8)}, CI ${runId}`);
189
+ }, `refreshed with ${ctx.baseBranch} @ ${baseSha.slice(0, 8)}, CI ${runId}`);
190
190
  }
191
191
  // ─── Non-head entry: speculative branch ─────────────────────────
192
192
  async function prepareSpeculative(ctx, entry, prevEntry) {
package/dist/service.js CHANGED
@@ -222,6 +222,10 @@ export class MergeStewardService {
222
222
  updateHeadByPR(prNumber, headSha) {
223
223
  const entry = this.store.getEntryByPR(this.config.repoId, prNumber);
224
224
  if (entry) {
225
+ if (entry.headSha === headSha) {
226
+ this.logger.debug({ prNumber, entryId: entry.id, headSha }, "Ignoring synchronize webhook for unchanged head");
227
+ return;
228
+ }
225
229
  this.store.updateHead(entry.id, headSha);
226
230
  this.logger.info({ prNumber, entryId: entry.id, headSha }, "PR head updated via webhook");
227
231
  }
@@ -76,7 +76,7 @@ export function nextStepLabel(status) {
76
76
  case "queued":
77
77
  return "waiting for head-of-line turn";
78
78
  case "preparing_head":
79
- return "rebasing onto latest main";
79
+ return "refreshing branch with latest main";
80
80
  case "validating":
81
81
  return "waiting for CI result";
82
82
  case "merging":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "merge-steward",
3
- "version": "0.5.4",
3
+ "version": "0.5.5",
4
4
  "description": "Serial merge queue for GitHub — rebase, CI-gate, and merge PRs one at a time",
5
5
  "type": "module",
6
6
  "repository": {