@tablation/crew 0.54.2 → 0.54.3

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.
Files changed (2) hide show
  1. package/dist/cli.js +13 -2
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -10507,7 +10507,7 @@ var isolateCap = (o) => o.repo.release.isolateFailures?.maxCandidates ?? DEFAULT
10507
10507
  async function isolateAndRetry(o, name, output, merged, preMerge, decision, fresh, releaseBranch) {
10508
10508
  const applied = merged.filter((c) => c.sha && c.branch);
10509
10509
  const cap = isolateCap(o);
10510
- if (o.dryRun || !preMerge || applied.length < 2 || cap === 0) return null;
10510
+ if (o.dryRun || !preMerge || applied.length < 1 || cap === 0) return null;
10511
10511
  const head = headSha(o.cwd);
10512
10512
  const withFiles = applied.map((c) => ({
10513
10513
  c,
@@ -10520,6 +10520,17 @@ async function isolateAndRetry(o, name, output, merged, preMerge, decision, fres
10520
10520
  if (byFile) {
10521
10521
  o.emit.warn(`${name} failed; its output names files only ${byFile.c.branch} changed \u2014 treating it as the culprit`, { ticket: byFile.c.ticket.issue_id });
10522
10522
  culprits.push({ c: byFile.c, how: "files", tail: lastLines(output, HOOK_FAILURE_TAIL_LINES) });
10523
+ } else if (applied.length === 1) {
10524
+ const only = applied[0];
10525
+ gitOk(o.cwd, ["reset", "--hard", preMerge]);
10526
+ const baseRun = await hook(o, name);
10527
+ if (baseRun && baseRun.code !== 0) {
10528
+ o.emit.warn(`${name} fails on the base without ${only.branch} \u2014 not blaming the branch`, { ticket: only.ticket.issue_id });
10529
+ gitOk(o.cwd, ["reset", "--hard", head]);
10530
+ return null;
10531
+ }
10532
+ o.emit.warn(`${name} failed with only ${only.branch} merged and passes without it \u2014 treating it as the culprit`, { ticket: only.ticket.issue_id });
10533
+ culprits.push({ c: only, how: "solo", tail: lastLines(output, HOOK_FAILURE_TAIL_LINES) });
10523
10534
  } else if (applied.length > cap) {
10524
10535
  o.emit.warn(`${name} failed with ${applied.length} branches merged, over release.isolateFailures.maxCandidates (${cap}) \u2014 not isolating`);
10525
10536
  return null;
@@ -10708,7 +10719,7 @@ async function mergeAndRelease(o, decision, fresh, releaseBranch, isolated = fal
10708
10719
  if (o.repo.hooks.build) {
10709
10720
  if (o.dryRun) {
10710
10721
  o.emit.emit(`would run: ${hookLabel(o.repo, "build")}`);
10711
- if (applied > 1) {
10722
+ if (applied >= 1) {
10712
10723
  o.emit.emit(
10713
10724
  `if it fails, would find the one of ${applied} merged branches that broke it (by the files it names, else by building each alone, up to ${isolateCap(o)}), hand that back to the dev lane and ship the rest`
10714
10725
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tablation/crew",
3
- "version": "0.54.2",
3
+ "version": "0.54.3",
4
4
  "description": "A standing team of headless agents that picks work off a Tablation board, does it on a machine you control, and reports back.",
5
5
  "type": "module",
6
6
  "license": "MIT",