@alwaysmeticulous/cli 2.297.1 → 2.298.0

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.
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="8ab59c0a-1e32-51df-a4a5-0bf5ab020386")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d8b778e1-44b3-59b9-a626-bfa7dc38a059")}catch(e){}}();
3
3
 
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.jsCoverageCommand = void 0;
@@ -41,7 +41,11 @@ const handler = async ({ apiToken, replayId, testRunId, commitSha, screenshotNam
41
41
  // or, when neither is given, from the local checkout's HEAD. Either way the
42
42
  // run must have finished for coverage to exist.
43
43
  if (testRunId != null) {
44
- await (0, resolve_test_run_from_commit_1.throwIfTestRunCoverageNotReady)(client, testRunId);
44
+ // Coverage only exists once a run has finished with a verdict; guard an
45
+ // explicitly passed testRunId, mirroring the check for runs resolved from
46
+ // a commit.
47
+ const { status } = await (0, client_1.getTestRun)({ client, testRunId });
48
+ (0, resolve_test_run_from_commit_1.assertTestRunComplete)(testRunId, status, { resultName: "coverage" });
45
49
  await printTestRunCoverage(client, testRunId, json);
46
50
  }
47
51
  else {
@@ -51,13 +55,11 @@ const handler = async ({ apiToken, replayId, testRunId, commitSha, screenshotNam
51
55
  }
52
56
  };
53
57
  // Resolves a commit to a test run for coverage. Coverage only exists once a run
54
- // has finished, so an in-progress run is reported as not-yet-available rather
55
- // than queried.
58
+ // has finished with a usable verdict, so an unfinished or failed run is
59
+ // reported as not-yet-available rather than queried.
56
60
  const resolveCompletedTestRunIdForCommit = async (client, apiToken, commitSha) => {
57
61
  const { testRunId, status } = await (0, resolve_test_run_from_commit_1.resolveTestRunForCommitOrThrow)(client, apiToken, commitSha);
58
- if ((0, resolve_test_run_from_commit_1.isTestRunInProgress)(status)) {
59
- throw new cli_user_error_1.CliUserError(`Test run ${testRunId} for this commit is still in progress (status: ${status}); coverage is not available yet.`);
60
- }
62
+ (0, resolve_test_run_from_commit_1.assertTestRunComplete)(testRunId, status, { resultName: "coverage" });
61
63
  return testRunId;
62
64
  };
63
65
  const printReplayCoverage = async (client, apiToken, { replayId, screenshotName, testRunId, commitSha, json, }) => {
@@ -81,8 +83,9 @@ const printReplayCoverage = async (client, apiToken, { replayId, screenshotName,
81
83
  // original (actionable "pass testRunId") error unchanged.
82
84
  if (effectiveTestRunId == null && isAmbiguousTestRunError(error)) {
83
85
  const fallback = await (0, resolve_test_run_from_commit_1.tryResolveTestRunForCommit)(client, apiToken, undefined);
84
- // Only retry against a finished run an in-progress one has no coverage.
85
- if (fallback != null && !(0, resolve_test_run_from_commit_1.isTestRunInProgress)(fallback.status)) {
86
+ // Only retry against a run that finished with a verdict an unfinished
87
+ // or failed one has no usable coverage.
88
+ if (fallback != null && (0, resolve_test_run_from_commit_1.isTestRunComplete)(fallback.status)) {
86
89
  try {
87
90
  const result = await (0, client_1.getReplayJsCoverage)(client, replayId, {
88
91
  screenshotName,
@@ -165,4 +168,4 @@ exports.jsCoverageCommand = {
165
168
  handler: (0, sentry_utils_1.wrapHandler)(handler),
166
169
  };
167
170
  //# sourceMappingURL=js-coverage.command.js.map
168
- //# debugId=8ab59c0a-1e32-51df-a4a5-0bf5ab020386
171
+ //# debugId=d8b778e1-44b3-59b9-a626-bfa7dc38a059
@@ -1 +1 @@
1
- {"version":3,"file":"js-coverage.command.js","sources":["../../../src/commands/agent/js-coverage.command.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAAA,qDAQkC;AAClC,qDAAsD;AAEtD,mEAA+D;AAC/D,+DAA0D;AAC1D,+EAA0E;AAC1E,2FAKkD;AAWlD,MAAM,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAEhF,MAAM,OAAO,GAAG,KAAK,EAAE,EACrB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,cAAc,EACd,IAAI,GACI,EAAiB,EAAE;IAC3B,IAAA,mBAAU,GAAE,CAAC;IAEb,IAAI,cAAc,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC/C,MAAM,IAAI,6BAAY,CAAC,8CAA8C,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,IAAA,iCAAwB,EAAC;QAC/C,QAAQ;QACR,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IAErD,4EAA4E;IAC5E,6EAA6E;IAC7E,uEAAuE;IACvE,+BAA+B;IAC/B,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE;YAC3C,QAAQ;YACR,cAAc;YACd,SAAS;YACT,SAAS;YACT,IAAI;SACL,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YAC3C,MAAM,IAAI,6BAAY,CACpB,mDAAmD,CACpD,CAAC;QACJ,CAAC;QACD,4EAA4E;QAC5E,4EAA4E;QAC5E,gDAAgD;QAChD,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,MAAM,IAAA,6DAA8B,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,MAAM,iBAAiB,GAAG,MAAM,kCAAkC,CAChE,MAAM,EACN,SAAS,EACT,SAAS,CACV,CAAC;YACF,MAAM,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,gFAAgF;AAChF,8EAA8E;AAC9E,gBAAgB;AAChB,MAAM,kCAAkC,GAAG,KAAK,EAC9C,MAAwB,EACxB,QAAgB,EAChB,SAA6B,EACZ,EAAE;IACnB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,6DAA8B,EAChE,MAAM,EACN,QAAQ,EACR,SAAS,CACV,CAAC;IACF,IAAI,IAAA,kDAAmB,EAAC,MAAM,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,6BAAY,CACpB,YAAY,SAAS,kDAAkD,MAAM,mCAAmC,CACjH,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,KAAK,EAC/B,MAAwB,EACxB,QAAgB,EAChB,EACE,QAAQ,EACR,cAAc,EACd,SAAS,EACT,SAAS,EACT,IAAI,GAOL,EACc,EAAE;IACjB,yEAAyE;IACzE,+DAA+D;IAC/D,MAAM,kBAAkB,GACtB,SAAS;QACT,CAAC,SAAS,IAAI,IAAI;YAChB,CAAC,CAAC,MAAM,kCAAkC,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;YACvE,CAAC,CAAC,SAAS,CAAC,CAAC;IAEjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAmB,EAAC,MAAM,EAAE,QAAQ,EAAE;YACzD,cAAc;YACd,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC;QACH,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4EAA4E;QAC5E,0EAA0E;QAC1E,0EAA0E;QAC1E,0DAA0D;QAC1D,IAAI,kBAAkB,IAAI,IAAI,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,MAAM,QAAQ,GAAG,MAAM,IAAA,yDAA0B,EAC/C,MAAM,EACN,QAAQ,EACR,SAAS,CACV,CAAC;YACF,0EAA0E;YAC1E,IAAI,QAAQ,IAAI,IAAI,IAAI,CAAC,IAAA,kDAAmB,EAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAmB,EAAC,MAAM,EAAE,QAAQ,EAAE;wBACzD,cAAc;wBACd,SAAS,EAAE,QAAQ,CAAC,SAAS;qBAC9B,CAAC,CAAC;oBACH,sEAAsE;oBACtE,kEAAkE;oBAClE,GAAG,CACD,gFAAgF,QAAQ,CAAC,SAAS,yBAAyB,CAC5H,CAAC;oBACF,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBAChC,OAAO;gBACT,CAAC;gBAAC,MAAM,CAAC;oBACP,oEAAoE;oBACpE,qEAAqE;oBACrE,6DAA6D;oBAC7D,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,MAAgC,EAChC,IAAa,EACP,EAAE;IACR,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,6EAA6E;IAC7E,6CAA6C;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAA,6CAAoB,EAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,wBAAwB,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,KAAK,EAChC,MAAwB,EACxB,SAAiB,EACjB,IAAa,EACE,EAAE;IACjB,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAoB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAE7D,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,kFAAkF;IAClF,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAA,6CAAoB,EAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,KAAc,EAAW,EAAE,CAC1D,IAAA,qBAAY,EAAC,KAAK,CAAC;IAClB,KAAK,CAAC,QAAQ,EAAE,IAAwC,EAAE,MAAM;QAC/D,oBAAoB,CAAC;AAEZ,QAAA,iBAAiB,GAAoC;IAChE,OAAO,EAAE,aAAa;IACtB,QAAQ,EACN,iGAAiG;IACnG,OAAO,EAAE;QACP,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QAC/D,QAAQ,EAAE;YACR,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,8PAA8P;SACjQ;QACD,SAAS,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,iQAAiQ;SACpQ;QACD,SAAS,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,8NAA8N;SACjO;QACD,cAAc,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,4GAA4G;SAC/G;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,0CAA0C;YACvD,OAAO,EAAE,KAAK;SACf;KACF;IACD,OAAO,EAAE,IAAA,0BAAW,EAAC,OAAO,CAAC;CAC9B,CAAC","debugId":"8ab59c0a-1e32-51df-a4a5-0bf5ab020386"}
1
+ {"version":3,"file":"js-coverage.command.js","sources":["../../../src/commands/agent/js-coverage.command.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAAA,qDASkC;AAClC,qDAAsD;AAEtD,mEAA+D;AAC/D,+DAA0D;AAC1D,+EAA0E;AAC1E,2FAKkD;AAWlD,MAAM,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAEhF,MAAM,OAAO,GAAG,KAAK,EAAE,EACrB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,cAAc,EACd,IAAI,GACI,EAAiB,EAAE;IAC3B,IAAA,mBAAU,GAAE,CAAC;IAEb,IAAI,cAAc,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC/C,MAAM,IAAI,6BAAY,CAAC,8CAA8C,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,IAAA,iCAAwB,EAAC;QAC/C,QAAQ;QACR,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IAErD,4EAA4E;IAC5E,6EAA6E;IAC7E,uEAAuE;IACvE,+BAA+B;IAC/B,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE;YAC3C,QAAQ;YACR,cAAc;YACd,SAAS;YACT,SAAS;YACT,IAAI;SACL,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YAC3C,MAAM,IAAI,6BAAY,CACpB,mDAAmD,CACpD,CAAC;QACJ,CAAC;QACD,4EAA4E;QAC5E,4EAA4E;QAC5E,gDAAgD;QAChD,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,wEAAwE;YACxE,0EAA0E;YAC1E,YAAY;YACZ,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,mBAAU,EAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3D,IAAA,oDAAqB,EAAC,SAAS,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;YACrE,MAAM,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,MAAM,iBAAiB,GAAG,MAAM,kCAAkC,CAChE,MAAM,EACN,SAAS,EACT,SAAS,CACV,CAAC;YACF,MAAM,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,gFAAgF;AAChF,wEAAwE;AACxE,qDAAqD;AACrD,MAAM,kCAAkC,GAAG,KAAK,EAC9C,MAAwB,EACxB,QAAgB,EAChB,SAA6B,EACZ,EAAE;IACnB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,6DAA8B,EAChE,MAAM,EACN,QAAQ,EACR,SAAS,CACV,CAAC;IACF,IAAA,oDAAqB,EAAC,SAAS,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IACrE,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,KAAK,EAC/B,MAAwB,EACxB,QAAgB,EAChB,EACE,QAAQ,EACR,cAAc,EACd,SAAS,EACT,SAAS,EACT,IAAI,GAOL,EACc,EAAE;IACjB,yEAAyE;IACzE,+DAA+D;IAC/D,MAAM,kBAAkB,GACtB,SAAS;QACT,CAAC,SAAS,IAAI,IAAI;YAChB,CAAC,CAAC,MAAM,kCAAkC,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;YACvE,CAAC,CAAC,SAAS,CAAC,CAAC;IAEjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAmB,EAAC,MAAM,EAAE,QAAQ,EAAE;YACzD,cAAc;YACd,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC;QACH,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4EAA4E;QAC5E,0EAA0E;QAC1E,0EAA0E;QAC1E,0DAA0D;QAC1D,IAAI,kBAAkB,IAAI,IAAI,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,MAAM,QAAQ,GAAG,MAAM,IAAA,yDAA0B,EAC/C,MAAM,EACN,QAAQ,EACR,SAAS,CACV,CAAC;YACF,wEAAwE;YACxE,wCAAwC;YACxC,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAA,gDAAiB,EAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3D,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAmB,EAAC,MAAM,EAAE,QAAQ,EAAE;wBACzD,cAAc;wBACd,SAAS,EAAE,QAAQ,CAAC,SAAS;qBAC9B,CAAC,CAAC;oBACH,sEAAsE;oBACtE,kEAAkE;oBAClE,GAAG,CACD,gFAAgF,QAAQ,CAAC,SAAS,yBAAyB,CAC5H,CAAC;oBACF,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBAChC,OAAO;gBACT,CAAC;gBAAC,MAAM,CAAC;oBACP,oEAAoE;oBACpE,qEAAqE;oBACrE,6DAA6D;oBAC7D,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,MAAgC,EAChC,IAAa,EACP,EAAE;IACR,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,6EAA6E;IAC7E,6CAA6C;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAA,6CAAoB,EAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,wBAAwB,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,KAAK,EAChC,MAAwB,EACxB,SAAiB,EACjB,IAAa,EACE,EAAE;IACjB,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAoB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAE7D,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,kFAAkF;IAClF,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAA,6CAAoB,EAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,KAAc,EAAW,EAAE,CAC1D,IAAA,qBAAY,EAAC,KAAK,CAAC;IAClB,KAAK,CAAC,QAAQ,EAAE,IAAwC,EAAE,MAAM;QAC/D,oBAAoB,CAAC;AAEZ,QAAA,iBAAiB,GAAoC;IAChE,OAAO,EAAE,aAAa;IACtB,QAAQ,EACN,iGAAiG;IACnG,OAAO,EAAE;QACP,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QAC/D,QAAQ,EAAE;YACR,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,8PAA8P;SACjQ;QACD,SAAS,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,iQAAiQ;SACpQ;QACD,SAAS,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,8NAA8N;SACjO;QACD,cAAc,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,4GAA4G;SAC/G;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,0CAA0C;YACvD,OAAO,EAAE,KAAK;SACf;KACF;IACD,OAAO,EAAE,IAAA,0BAAW,EAAC,OAAO,CAAC;CAC9B,CAAC","debugId":"d8b778e1-44b3-59b9-a626-bfa7dc38a059"}
@@ -4,8 +4,11 @@ interface Options {
4
4
  testRunId: string | undefined;
5
5
  commitSha: string | undefined;
6
6
  waitForTestRunToComplete: boolean;
7
- includeMatches: boolean;
8
7
  includeReplayIds: boolean;
8
+ includeDomDiffIds: boolean;
9
+ includeAllDiffs: boolean;
10
+ includeMatches: boolean;
11
+ orderByReplayDiffs: boolean;
9
12
  verbose: boolean;
10
13
  }
11
14
  export declare const testRunDiffsCommand: CommandModule<unknown, Options>;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="799834e7-f63d-5e41-94e9-921895a4d6a9")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5321980a-12dc-57c6-bf03-3ca418b37962")}catch(e){}}();
3
3
 
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.testRunDiffsCommand = void 0;
@@ -8,10 +8,12 @@ const common_1 = require("@alwaysmeticulous/common");
8
8
  const sentry_utils_1 = require("../../command-utils/sentry.utils");
9
9
  const cli_user_error_1 = require("../../utils/cli-user-error");
10
10
  const resolve_test_run_from_commit_1 = require("../../utils/resolve-test-run-from-commit");
11
+ const test_run_diffs_utils_1 = require("./test-run-diffs.utils");
11
12
  const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
12
- const fmtMismatch = (v) => v != null ? v.toFixed(5) : "";
13
+ /** Give up polling the diffs summary after this long, rather than forever. */
14
+ const SUMMARY_POLL_TIMEOUT_MS = 10 * 60_000;
13
15
  const log = (...args) => process.stderr.write(args.join(" ") + "\n");
14
- const handler = async ({ apiToken, testRunId, commitSha, waitForTestRunToComplete, includeMatches, includeReplayIds, verbose, }) => {
16
+ const handler = async ({ apiToken, testRunId, commitSha, waitForTestRunToComplete, includeReplayIds, includeDomDiffIds, includeAllDiffs, includeMatches, orderByReplayDiffs, verbose, }) => {
15
17
  (0, common_1.initLogger)();
16
18
  if (testRunId != null && commitSha != null) {
17
19
  throw new cli_user_error_1.CliUserError("Pass either --testRunId or --commitSha, not both.");
@@ -34,32 +36,49 @@ const handler = async ({ apiToken, testRunId, commitSha, waitForTestRunToComplet
34
36
  resolvedTestRunId = run.testRunId;
35
37
  status = run.status;
36
38
  }
37
- // Diffs are only meaningful once the run has finished. If it is still running
38
- // and the caller didn't opt to wait, report it and stop — regardless of how
39
- // the run was selected.
40
- if ((0, resolve_test_run_from_commit_1.isTestRunInProgress)(status) && !waitForTestRunToComplete) {
41
- log(`Test run ${resolvedTestRunId} is still in progress (status: ${status}); ` +
42
- "pass --waitForTestRunToComplete to block until it finishes and then show diffs.");
43
- return;
39
+ // Diffs are only meaningful once the run has finished with a verdict
40
+ // (Success/Failure). Wait if asked and the run is still in progress, then
41
+ // classify the resulting status.
42
+ if (waitForTestRunToComplete && (0, resolve_test_run_from_commit_1.isTestRunInProgress)(status)) {
43
+ status = await (0, resolve_test_run_from_commit_1.awaitTestRunCompletion)(client, resolvedTestRunId);
44
44
  }
45
- if (waitForTestRunToComplete) {
46
- await (0, resolve_test_run_from_commit_1.awaitTestRunCompletion)(client, resolvedTestRunId);
45
+ if ((0, resolve_test_run_from_commit_1.isTestRunInProgress)(status)) {
46
+ // Reached only when the caller didn't wait (waiting resolves in-progress
47
+ // above), so the hint is always worth showing. Diffs aren't available yet,
48
+ // so report and stop rather than error out.
49
+ log(`Test run ${resolvedTestRunId} is not complete (status: ${status}). ` +
50
+ "Pass --waitForTestRunToComplete to block until it finishes and then show diffs.");
51
+ return;
47
52
  }
53
+ // Reject fatal failures (Aborted/ExecutionError) and session-pool bases
54
+ // (Partial, which never finish on their own and aren't tied to a change).
55
+ (0, resolve_test_run_from_commit_1.assertTestRunComplete)(resolvedTestRunId, status, { resultName: "diffs" });
48
56
  const t0 = performance.now();
49
57
  log(`Fetching diffs summary for test run ${resolvedTestRunId}...`);
50
- let response = await (0, client_1.getTestRunDiffsSummary)(client, resolvedTestRunId, {
58
+ // --includeMatches implies --includeAllDiffs (matches are never part of the
59
+ // selected subset, so they only make sense alongside the full set). Use the
60
+ // effective value for both the request and the isSelected column.
61
+ const allDiffs = (0, test_run_diffs_utils_1.resolveIncludeAllDiffs)({ includeAllDiffs, includeMatches });
62
+ const diffsSummaryOptions = {
51
63
  includeReplayIds,
64
+ includeDomDiffIds,
65
+ includeAllDiffs: allDiffs,
52
66
  includeMatches,
53
- });
54
- // Poll until complete
67
+ orderByReplayDiffs,
68
+ };
69
+ let response = await (0, client_1.getTestRunDiffsSummary)(client, resolvedTestRunId, diffsSummaryOptions);
70
+ // Poll until complete (or give up after the timeout, rather than forever).
71
+ const summaryDeadline = performance.now() + SUMMARY_POLL_TIMEOUT_MS;
55
72
  while (response.status === "pending" || response.status === "processing") {
56
73
  if (verbose)
57
74
  log(`Status: ${response.status}`);
75
+ if (performance.now() >= summaryDeadline) {
76
+ log(`Diffs summary for test run ${resolvedTestRunId} did not complete within 10 minutes ` +
77
+ `(status: ${response.status}). Something may have gone wrong — try again later.`);
78
+ process.exit(1);
79
+ }
58
80
  await sleep(2000);
59
- response = await (0, client_1.getTestRunDiffsSummary)(client, resolvedTestRunId, {
60
- includeReplayIds,
61
- includeMatches,
62
- });
81
+ response = await (0, client_1.getTestRunDiffsSummary)(client, resolvedTestRunId, diffsSummaryOptions);
63
82
  }
64
83
  if (response.status !== "complete") {
65
84
  log(`Error: unexpected status "${response.status}"`);
@@ -70,38 +89,22 @@ const handler = async ({ apiToken, testRunId, commitSha, waitForTestRunToComplet
70
89
  log("No replay diffs found for this test run.");
71
90
  return;
72
91
  }
73
- // Print TSV header
74
- const headerFields = [
75
- "replayDiffId",
76
- "screenshotName",
77
- "index",
78
- "total",
79
- "outcome",
80
- "mismatch",
81
- "domDiffIds",
82
- ];
83
- if (includeReplayIds)
84
- headerFields.push("baseReplayId", "headReplayId");
85
- console.log(headerFields.join("\t"));
92
+ // The backend sets `index` to the priority rank by default, or the
93
+ // within-replay position (with `total`) when orderByReplayDiffs is set.
94
+ const rows = (0, test_run_diffs_utils_1.flattenDiffRows)(data, orderByReplayDiffs);
95
+ const columns = {
96
+ orderByReplayDiffs,
97
+ includeDomDiffIds,
98
+ includeAllDiffs: allDiffs,
99
+ includeReplayIds,
100
+ };
101
+ console.log((0, test_run_diffs_utils_1.buildDiffsSummaryHeader)(columns).join("\t"));
86
102
  let totalDiffScreenshots = 0;
87
- for (const rd of data) {
88
- for (const s of rd.screenshots) {
89
- if (s.userVisibleOutcome === "difference") {
90
- totalDiffScreenshots++;
91
- }
92
- const fields = [
93
- rd.replayDiffId,
94
- s.screenshotName,
95
- s.index,
96
- s.total,
97
- s.outcome,
98
- fmtMismatch(s.mismatchFraction),
99
- s.domDiffIds,
100
- ];
101
- if (includeReplayIds)
102
- fields.push(rd.baseReplayId ?? "", rd.headReplayId ?? "");
103
- console.log(fields.join("\t"));
103
+ for (const row of rows) {
104
+ if (row.screenshot.userVisibleOutcome === "difference") {
105
+ totalDiffScreenshots++;
104
106
  }
107
+ console.log((0, test_run_diffs_utils_1.formatDiffRow)(row, columns).join("\t"));
105
108
  }
106
109
  const tEnd = performance.now();
107
110
  log(`${data.length} replay diff(s), ${totalDiffScreenshots} screenshot diff(s), total ${((tEnd - t0) / 1000).toFixed(1)}s`);
@@ -124,14 +127,29 @@ exports.testRunDiffsCommand = {
124
127
  default: false,
125
128
  description: "If the test run is still in progress, block until it finishes before fetching diffs (otherwise an in-progress run is reported and the command exits).",
126
129
  },
130
+ includeReplayIds: {
131
+ boolean: true,
132
+ description: "Include base and head replay IDs per replay diff",
133
+ default: false,
134
+ },
135
+ includeDomDiffIds: {
136
+ boolean: true,
137
+ description: "Add a domDiffIds column grouping screenshots by structural DOM change",
138
+ default: false,
139
+ },
140
+ includeAllDiffs: {
141
+ boolean: true,
142
+ description: "Return every diff instead of only the selected representative subset; adds an isSelected column",
143
+ default: false,
144
+ },
127
145
  includeMatches: {
128
146
  boolean: true,
129
- description: "Include all screenshots (matches, known flakes), not just differences",
147
+ description: "Include matching screenshots (matches, known flakes), not just differences. Implies --includeAllDiffs.",
130
148
  default: false,
131
149
  },
132
- includeReplayIds: {
150
+ orderByReplayDiffs: {
133
151
  boolean: true,
134
- description: "Include base and head replay IDs per replay diff",
152
+ description: "Order rows by replay diff then event index (instead of by selection priority) and include the index/total columns",
135
153
  default: false,
136
154
  },
137
155
  verbose: {
@@ -143,4 +161,4 @@ exports.testRunDiffsCommand = {
143
161
  handler: (0, sentry_utils_1.wrapHandler)(handler),
144
162
  };
145
163
  //# sourceMappingURL=test-run-diffs.command.js.map
146
- //# debugId=799834e7-f63d-5e41-94e9-921895a4d6a9
164
+ //# debugId=5321980a-12dc-57c6-bf03-3ca418b37962
@@ -1 +1 @@
1
- {"version":3,"file":"test-run-diffs.command.js","sources":["../../../src/commands/agent/test-run-diffs.command.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"799834e7-f63d-5e41-94e9-921895a4d6a9"}
1
+ {"version":3,"file":"test-run-diffs.command.js","sources":["../../../src/commands/agent/test-run-diffs.command.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"5321980a-12dc-57c6-bf03-3ca418b37962"}
@@ -0,0 +1,43 @@
1
+ import { DiffsSummaryReplayDiff, DiffsSummaryScreenshot } from "@alwaysmeticulous/client";
2
+ /** A single (replay diff, screenshot) pair — one row of the TSV output. */
3
+ export interface DiffRow {
4
+ replayDiff: DiffsSummaryReplayDiff;
5
+ screenshot: DiffsSummaryScreenshot;
6
+ }
7
+ /** Which optional columns the TSV output includes. */
8
+ export interface DiffsSummaryColumns {
9
+ /** Order by replay diff then event index; adds the index/total columns. */
10
+ orderByReplayDiffs: boolean;
11
+ /** Add the domDiffIds column. */
12
+ includeDomDiffIds: boolean;
13
+ /**
14
+ * Effective "all diffs" — true when --includeAllDiffs or --includeMatches is
15
+ * set (see {@link resolveIncludeAllDiffs}); adds the isSelected column.
16
+ */
17
+ includeAllDiffs: boolean;
18
+ /** Add the base/head replay ID columns. */
19
+ includeReplayIds: boolean;
20
+ }
21
+ /**
22
+ * --includeMatches implies --includeAllDiffs: matches are never part of the
23
+ * selected representative subset, so they only make sense alongside the full
24
+ * set of diffs.
25
+ */
26
+ export declare const resolveIncludeAllDiffs: ({ includeAllDiffs, includeMatches, }: {
27
+ includeAllDiffs: boolean;
28
+ includeMatches: boolean;
29
+ }) => boolean;
30
+ /**
31
+ * Flattens replay diffs into one list of rows. By default the backend's `index`
32
+ * is a flat cross-replay-diff priority rank, so we sort by it (a flat order the
33
+ * grouped response can't express). With orderByReplayDiffs the backend already
34
+ * returns rows grouped by replay diff in event order, which we preserve.
35
+ */
36
+ export declare const flattenDiffRows: (data: DiffsSummaryReplayDiff[], orderByReplayDiffs: boolean) => DiffRow[];
37
+ /**
38
+ * Builds the TSV header. index/total are only meaningful with orderByReplayDiffs;
39
+ * by default rows are already in priority order, so the index is omitted.
40
+ */
41
+ export declare const buildDiffsSummaryHeader: (columns: DiffsSummaryColumns) => string[];
42
+ /** Formats a single row's fields, gated by the same columns as the header. */
43
+ export declare const formatDiffRow: ({ replayDiff, screenshot }: DiffRow, columns: DiffsSummaryColumns) => (string | number)[];
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="745a03e3-8218-5e27-8e96-123d2cacb50e")}catch(e){}}();
3
+
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.formatDiffRow = exports.buildDiffsSummaryHeader = exports.flattenDiffRows = exports.resolveIncludeAllDiffs = void 0;
6
+ const fmtMismatch = (v) => v != null ? v.toFixed(5) : "";
7
+ /**
8
+ * --includeMatches implies --includeAllDiffs: matches are never part of the
9
+ * selected representative subset, so they only make sense alongside the full
10
+ * set of diffs.
11
+ */
12
+ const resolveIncludeAllDiffs = ({ includeAllDiffs, includeMatches, }) => includeAllDiffs || includeMatches;
13
+ exports.resolveIncludeAllDiffs = resolveIncludeAllDiffs;
14
+ /**
15
+ * Flattens replay diffs into one list of rows. By default the backend's `index`
16
+ * is a flat cross-replay-diff priority rank, so we sort by it (a flat order the
17
+ * grouped response can't express). With orderByReplayDiffs the backend already
18
+ * returns rows grouped by replay diff in event order, which we preserve.
19
+ */
20
+ const flattenDiffRows = (data, orderByReplayDiffs) => {
21
+ const rows = data.flatMap((replayDiff) => replayDiff.screenshots.map((screenshot) => ({ replayDiff, screenshot })));
22
+ if (!orderByReplayDiffs) {
23
+ rows.sort((a, b) => a.screenshot.index - b.screenshot.index);
24
+ }
25
+ return rows;
26
+ };
27
+ exports.flattenDiffRows = flattenDiffRows;
28
+ /**
29
+ * Builds the TSV header. index/total are only meaningful with orderByReplayDiffs;
30
+ * by default rows are already in priority order, so the index is omitted.
31
+ */
32
+ const buildDiffsSummaryHeader = (columns) => {
33
+ const fields = ["replayDiffId", "screenshotName"];
34
+ if (columns.orderByReplayDiffs)
35
+ fields.push("index", "total");
36
+ fields.push("outcome", "mismatch");
37
+ if (columns.includeDomDiffIds)
38
+ fields.push("domDiffIds");
39
+ if (columns.includeAllDiffs)
40
+ fields.push("isSelected");
41
+ if (columns.includeReplayIds)
42
+ fields.push("baseReplayId", "headReplayId");
43
+ return fields;
44
+ };
45
+ exports.buildDiffsSummaryHeader = buildDiffsSummaryHeader;
46
+ /** Formats a single row's fields, gated by the same columns as the header. */
47
+ const formatDiffRow = ({ replayDiff, screenshot }, columns) => {
48
+ const fields = [
49
+ replayDiff.replayDiffId,
50
+ screenshot.screenshotName,
51
+ ];
52
+ if (columns.orderByReplayDiffs)
53
+ fields.push(screenshot.index, screenshot.total ?? "");
54
+ fields.push(screenshot.outcome, fmtMismatch(screenshot.mismatchFraction));
55
+ if (columns.includeDomDiffIds)
56
+ fields.push(screenshot.domDiffIds ?? "");
57
+ if (columns.includeAllDiffs)
58
+ fields.push(String(screenshot.isSelected ?? false));
59
+ if (columns.includeReplayIds)
60
+ fields.push(replayDiff.baseReplayId ?? "", replayDiff.headReplayId ?? "");
61
+ return fields;
62
+ };
63
+ exports.formatDiffRow = formatDiffRow;
64
+ //# sourceMappingURL=test-run-diffs.utils.js.map
65
+ //# debugId=745a03e3-8218-5e27-8e96-123d2cacb50e
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-run-diffs.utils.js","sources":["../../../src/commands/agent/test-run-diffs.utils.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AA0BA,MAAM,WAAW,GAAG,CAAC,CAAgB,EAAU,EAAE,CAC/C,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAEhC;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,CAAC,EACrC,eAAe,EACf,cAAc,GAIf,EAAW,EAAE,CAAC,eAAe,IAAI,cAAc,CAAC;AANpC,QAAA,sBAAsB,0BAMc;AAEjD;;;;;GAKG;AACI,MAAM,eAAe,GAAG,CAC7B,IAA8B,EAC9B,kBAA2B,EAChB,EAAE;IACb,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CACvC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CACzE,CAAC;IACF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAXW,QAAA,eAAe,mBAW1B;AAEF;;;GAGG;AACI,MAAM,uBAAuB,GAAG,CACrC,OAA4B,EAClB,EAAE;IACZ,MAAM,MAAM,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,kBAAkB;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACnC,IAAI,OAAO,CAAC,iBAAiB;QAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,OAAO,CAAC,eAAe;QAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,gBAAgB;QAAE,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAVW,QAAA,uBAAuB,2BAUlC;AAEF,8EAA8E;AACvE,MAAM,aAAa,GAAG,CAC3B,EAAE,UAAU,EAAE,UAAU,EAAW,EACnC,OAA4B,EACP,EAAE;IACvB,MAAM,MAAM,GAAwB;QAClC,UAAU,CAAC,YAAY;QACvB,UAAU,CAAC,cAAc;KAC1B,CAAC;IACF,IAAI,OAAO,CAAC,kBAAkB;QAC5B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,iBAAiB;QAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,eAAe;QACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC;IACtD,IAAI,OAAO,CAAC,gBAAgB;QAC1B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,IAAI,EAAE,EAAE,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAC5E,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAjBW,QAAA,aAAa,iBAiBxB","debugId":"745a03e3-8218-5e27-8e96-123d2cacb50e"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="01396d98-db6c-5229-a055-4321c4a9ed86")}catch(e){}}();
3
+
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ const vitest_1 = require("vitest");
6
+ const test_run_diffs_utils_1 = require("./test-run-diffs.utils");
7
+ const screenshot = (overrides) => ({
8
+ index: 0,
9
+ outcome: "different",
10
+ userVisibleOutcome: "difference",
11
+ mismatchFraction: 0.1,
12
+ ...overrides,
13
+ });
14
+ const replayDiff = (overrides) => ({
15
+ screenshots: [],
16
+ ...overrides,
17
+ });
18
+ const NO_COLUMNS = {
19
+ orderByReplayDiffs: false,
20
+ includeDomDiffIds: false,
21
+ includeAllDiffs: false,
22
+ includeReplayIds: false,
23
+ };
24
+ (0, vitest_1.describe)("resolveIncludeAllDiffs", () => {
25
+ (0, vitest_1.test)("is false when neither flag is set", () => {
26
+ (0, vitest_1.expect)((0, test_run_diffs_utils_1.resolveIncludeAllDiffs)({ includeAllDiffs: false, includeMatches: false })).toBe(false);
27
+ });
28
+ (0, vitest_1.test)("--includeAllDiffs alone enables it", () => {
29
+ (0, vitest_1.expect)((0, test_run_diffs_utils_1.resolveIncludeAllDiffs)({ includeAllDiffs: true, includeMatches: false })).toBe(true);
30
+ });
31
+ (0, vitest_1.test)("--includeMatches implies --includeAllDiffs", () => {
32
+ (0, vitest_1.expect)((0, test_run_diffs_utils_1.resolveIncludeAllDiffs)({ includeAllDiffs: false, includeMatches: true })).toBe(true);
33
+ });
34
+ });
35
+ (0, vitest_1.describe)("flattenDiffRows", () => {
36
+ const data = [
37
+ replayDiff({
38
+ replayDiffId: "rd-1",
39
+ screenshots: [
40
+ screenshot({ screenshotName: "a", index: 2 }),
41
+ screenshot({ screenshotName: "b", index: 0 }),
42
+ ],
43
+ }),
44
+ replayDiff({
45
+ replayDiffId: "rd-2",
46
+ screenshots: [screenshot({ screenshotName: "c", index: 1 })],
47
+ }),
48
+ ];
49
+ (0, vitest_1.test)("sorts by priority index across replay diffs by default", () => {
50
+ const rows = (0, test_run_diffs_utils_1.flattenDiffRows)(data, false);
51
+ (0, vitest_1.expect)(rows.map((r) => r.screenshot.screenshotName)).toEqual([
52
+ "b",
53
+ "c",
54
+ "a",
55
+ ]);
56
+ });
57
+ (0, vitest_1.test)("preserves replay-diff grouping order with orderByReplayDiffs", () => {
58
+ const rows = (0, test_run_diffs_utils_1.flattenDiffRows)(data, true);
59
+ (0, vitest_1.expect)(rows.map((r) => r.screenshot.screenshotName)).toEqual([
60
+ "a",
61
+ "b",
62
+ "c",
63
+ ]);
64
+ });
65
+ });
66
+ (0, vitest_1.describe)("buildDiffsSummaryHeader", () => {
67
+ (0, vitest_1.test)("emits only the base columns by default", () => {
68
+ (0, vitest_1.expect)((0, test_run_diffs_utils_1.buildDiffsSummaryHeader)(NO_COLUMNS)).toEqual([
69
+ "replayDiffId",
70
+ "screenshotName",
71
+ "outcome",
72
+ "mismatch",
73
+ ]);
74
+ });
75
+ (0, vitest_1.test)("adds index/total only with orderByReplayDiffs", () => {
76
+ (0, vitest_1.expect)((0, test_run_diffs_utils_1.buildDiffsSummaryHeader)({ ...NO_COLUMNS, orderByReplayDiffs: true })).toEqual([
77
+ "replayDiffId",
78
+ "screenshotName",
79
+ "index",
80
+ "total",
81
+ "outcome",
82
+ "mismatch",
83
+ ]);
84
+ });
85
+ (0, vitest_1.test)("gates the optional columns independently", () => {
86
+ (0, vitest_1.expect)((0, test_run_diffs_utils_1.buildDiffsSummaryHeader)({
87
+ orderByReplayDiffs: true,
88
+ includeDomDiffIds: true,
89
+ includeAllDiffs: true,
90
+ includeReplayIds: true,
91
+ })).toEqual([
92
+ "replayDiffId",
93
+ "screenshotName",
94
+ "index",
95
+ "total",
96
+ "outcome",
97
+ "mismatch",
98
+ "domDiffIds",
99
+ "isSelected",
100
+ "baseReplayId",
101
+ "headReplayId",
102
+ ]);
103
+ });
104
+ });
105
+ (0, vitest_1.describe)("formatDiffRow", () => {
106
+ const row = {
107
+ replayDiff: replayDiff({
108
+ replayDiffId: "rd-1",
109
+ baseReplayId: "base-1",
110
+ headReplayId: "head-1",
111
+ }),
112
+ screenshot: screenshot({
113
+ screenshotName: "home",
114
+ index: 3,
115
+ total: 7,
116
+ outcome: "different",
117
+ mismatchFraction: 0.12345678,
118
+ domDiffIds: "d1,d2",
119
+ isSelected: true,
120
+ }),
121
+ };
122
+ (0, vitest_1.test)("emits the base columns and formats the mismatch fraction", () => {
123
+ (0, vitest_1.expect)((0, test_run_diffs_utils_1.formatDiffRow)(row, NO_COLUMNS)).toEqual([
124
+ "rd-1",
125
+ "home",
126
+ "different",
127
+ "0.12346",
128
+ ]);
129
+ });
130
+ (0, vitest_1.test)("renders a null mismatch fraction as an empty string", () => {
131
+ const withNull = {
132
+ ...row,
133
+ screenshot: { ...row.screenshot, mismatchFraction: null },
134
+ };
135
+ (0, vitest_1.expect)((0, test_run_diffs_utils_1.formatDiffRow)(withNull, NO_COLUMNS)).toEqual([
136
+ "rd-1",
137
+ "home",
138
+ "different",
139
+ "",
140
+ ]);
141
+ });
142
+ (0, vitest_1.test)("includes the gated columns in header order when enabled", () => {
143
+ (0, vitest_1.expect)((0, test_run_diffs_utils_1.formatDiffRow)(row, {
144
+ orderByReplayDiffs: true,
145
+ includeDomDiffIds: true,
146
+ includeAllDiffs: true,
147
+ includeReplayIds: true,
148
+ })).toEqual([
149
+ "rd-1",
150
+ "home",
151
+ 3,
152
+ 7,
153
+ "different",
154
+ "0.12346",
155
+ "d1,d2",
156
+ "true",
157
+ "base-1",
158
+ "head-1",
159
+ ]);
160
+ });
161
+ (0, vitest_1.test)("falls back when optional screenshot fields are absent", () => {
162
+ const sparse = {
163
+ replayDiff: replayDiff({ replayDiffId: "rd-1" }),
164
+ screenshot: screenshot({ screenshotName: "home", index: 1 }),
165
+ };
166
+ (0, vitest_1.expect)((0, test_run_diffs_utils_1.formatDiffRow)(sparse, {
167
+ orderByReplayDiffs: true,
168
+ includeDomDiffIds: true,
169
+ includeAllDiffs: true,
170
+ includeReplayIds: true,
171
+ })).toEqual([
172
+ "rd-1",
173
+ "home",
174
+ 1,
175
+ "",
176
+ "different",
177
+ "0.10000",
178
+ "",
179
+ "false",
180
+ "",
181
+ "",
182
+ ]);
183
+ });
184
+ });
185
+ //# sourceMappingURL=test-run-diffs.utils.spec.js.map
186
+ //# debugId=01396d98-db6c-5229-a055-4321c4a9ed86
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-run-diffs.utils.spec.js","sources":["../../../src/commands/agent/test-run-diffs.utils.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"01396d98-db6c-5229-a055-4321c4a9ed86"}
@@ -2,7 +2,6 @@ import { CommandModule } from "yargs";
2
2
  interface Options {
3
3
  apiToken?: string | null | undefined;
4
4
  commitSha: string | undefined;
5
- waitForTestRunToComplete: boolean;
6
5
  json: boolean;
7
6
  }
8
7
  export declare const testRunForCommitCommand: CommandModule<unknown, Options>;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6ee01030-17bf-51f5-8c85-eb1bd6a1fb1e")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9b5efc00-2af5-5751-ad68-276a1fc64308")}catch(e){}}();
3
3
 
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.testRunForCommitCommand = void 0;
@@ -10,7 +10,7 @@ const cli_user_error_1 = require("../../utils/cli-user-error");
10
10
  const resolve_project_identifier_1 = require("../../utils/resolve-project-identifier");
11
11
  const resolve_test_run_from_commit_1 = require("../../utils/resolve-test-run-from-commit");
12
12
  const log = (...args) => process.stderr.write(args.join(" ") + "\n");
13
- const handler = async ({ apiToken, commitSha, waitForTestRunToComplete, json, }) => {
13
+ const handler = async ({ apiToken, commitSha, json, }) => {
14
14
  (0, common_1.initLogger)();
15
15
  // Default to the current checkout's HEAD so the command can be run with no
16
16
  // arguments to auto-infer the test run for the working tree.
@@ -26,16 +26,9 @@ const handler = async ({ apiToken, commitSha, waitForTestRunToComplete, json, })
26
26
  // the project chosen via `meticulous auth set-project`.
27
27
  const { projectId } = (0, resolve_project_identifier_1.resolveProjectIdentifier)(apiToken_);
28
28
  const client = (0, client_1.createClient)({ apiToken: apiToken_ });
29
- let result = await (0, client_1.getTestRunForCommit)(client, resolvedCommitSha, {
29
+ const result = await (0, client_1.getTestRunForCommit)(client, resolvedCommitSha, {
30
30
  projectId,
31
31
  });
32
- if (result.testRunId != null &&
33
- result.status != null &&
34
- waitForTestRunToComplete &&
35
- (0, resolve_test_run_from_commit_1.isTestRunInProgress)(result.status)) {
36
- const status = await (0, resolve_test_run_from_commit_1.awaitTestRunCompletion)(client, result.testRunId);
37
- result = { ...result, status };
38
- }
39
32
  if (json) {
40
33
  console.log(JSON.stringify(result, null, 2));
41
34
  return;
@@ -45,9 +38,11 @@ const handler = async ({ apiToken, commitSha, waitForTestRunToComplete, json, })
45
38
  return;
46
39
  }
47
40
  console.log(result.testRunId);
48
- if (result.status != null && (0, resolve_test_run_from_commit_1.isTestRunInProgress)(result.status)) {
49
- log(`Test run is still in progress (status: ${result.status}); ` +
50
- "pass --waitForTestRunToComplete to block until it finishes.");
41
+ if (result.status != null && !(0, resolve_test_run_from_commit_1.isTestRunComplete)(result.status)) {
42
+ // Surface in-progress/Partial/failed runs so the caller knows the run isn't
43
+ // a finished verdict yet. Commands that consume the results (test-run-diffs,
44
+ // js-coverage) each have their own --waitForTestRunToComplete to block on it.
45
+ log(`Test run is not complete (status: ${result.status}).`);
51
46
  }
52
47
  };
53
48
  exports.testRunForCommitCommand = {
@@ -59,11 +54,6 @@ exports.testRunForCommitCommand = {
59
54
  string: true,
60
55
  description: "Commit SHA to look up. Defaults to the current git HEAD when omitted.",
61
56
  },
62
- waitForTestRunToComplete: {
63
- boolean: true,
64
- default: false,
65
- description: "If the matched test run is still in progress, block until it finishes before returning.",
66
- },
67
57
  json: {
68
58
  boolean: true,
69
59
  description: "Output the raw response as JSON",
@@ -73,4 +63,4 @@ exports.testRunForCommitCommand = {
73
63
  handler: (0, sentry_utils_1.wrapHandler)(handler),
74
64
  };
75
65
  //# sourceMappingURL=test-run-for-commit.command.js.map
76
- //# debugId=6ee01030-17bf-51f5-8c85-eb1bd6a1fb1e
66
+ //# debugId=9b5efc00-2af5-5751-ad68-276a1fc64308
@@ -1 +1 @@
1
- {"version":3,"file":"test-run-for-commit.command.js","sources":["../../../src/commands/agent/test-run-for-commit.command.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"6ee01030-17bf-51f5-8c85-eb1bd6a1fb1e"}
1
+ {"version":3,"file":"test-run-for-commit.command.js","sources":["../../../src/commands/agent/test-run-for-commit.command.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AAAA,qDAIkC;AAClC,qDAAoE;AAEpE,mEAA+D;AAC/D,+DAA0D;AAC1D,uFAAkF;AAClF,2FAA6E;AAQ7E,MAAM,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAEhF,MAAM,OAAO,GAAG,KAAK,EAAE,EACrB,QAAQ,EACR,SAAS,EACT,IAAI,GACI,EAAiB,EAAE;IAC3B,IAAA,mBAAU,GAAE,CAAC;IAEb,2EAA2E;IAC3E,6DAA6D;IAC7D,MAAM,iBAAiB,GAAG,MAAM,IAAA,qBAAY,EAAC,SAAS,CAAC,CAAC;IACxD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,6BAAY,CACpB,oFAAoF,CACrF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,IAAA,iCAAwB,EAAC;QAC/C,QAAQ;QACR,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IACH,6EAA6E;IAC7E,wDAAwD;IACxD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,qDAAwB,EAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAmB,EAAC,MAAM,EAAE,iBAAiB,EAAE;QAClE,SAAS;KACV,CAAC,CAAC;IAEH,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,GAAG,CAAC,gCAAgC,iBAAiB,EAAE,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,IAAA,gDAAiB,EAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,4EAA4E;QAC5E,6EAA6E;QAC7E,8EAA8E;QAC9E,GAAG,CAAC,qCAAqC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC,CAAC;AAEW,QAAA,uBAAuB,GAAoC;IACtE,OAAO,EAAE,qBAAqB;IAC9B,QAAQ,EACN,6EAA6E;IAC/E,OAAO,EAAE;QACP,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,sBAAsB,EAAE;QAC/D,SAAS,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,WAAW,EACT,uEAAuE;SAC1E;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,iCAAiC;YAC9C,OAAO,EAAE,KAAK;SACf;KACF;IACD,OAAO,EAAE,IAAA,0BAAW,EAAC,OAAO,CAAC;CAC9B,CAAC","debugId":"9b5efc00-2af5-5751-ad68-276a1fc64308"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="670125cd-0035-5dbc-b189-75c3b23d6689")}catch(e){}}();
3
+
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ const vitest_1 = require("vitest");
6
+ const cli_user_error_1 = require("../cli-user-error");
7
+ const resolve_test_run_from_commit_1 = require("../resolve-test-run-from-commit");
8
+ (0, vitest_1.describe)("isTestRunComplete", () => {
9
+ vitest_1.test.each([
10
+ ["Success", true],
11
+ ["Failure", true],
12
+ ["Running", false],
13
+ ["Partial", false],
14
+ ["Aborted", false],
15
+ ["ExecutionError", false],
16
+ ])("%s -> %s", (status, expected) => {
17
+ (0, vitest_1.expect)((0, resolve_test_run_from_commit_1.isTestRunComplete)(status)).toBe(expected);
18
+ });
19
+ });
20
+ (0, vitest_1.describe)("isTestRunFailed", () => {
21
+ vitest_1.test.each([
22
+ ["Aborted", true],
23
+ ["ExecutionError", true],
24
+ ["Success", false],
25
+ ["Failure", false],
26
+ ["Partial", false],
27
+ ["Running", false],
28
+ ])("%s -> %s", (status, expected) => {
29
+ (0, vitest_1.expect)((0, resolve_test_run_from_commit_1.isTestRunFailed)(status)).toBe(expected);
30
+ });
31
+ });
32
+ (0, vitest_1.describe)("isTestRunPartial", () => {
33
+ vitest_1.test.each([
34
+ ["Partial", true],
35
+ ["Success", false],
36
+ ["Failure", false],
37
+ ["Running", false],
38
+ ["Aborted", false],
39
+ ["ExecutionError", false],
40
+ ])("%s -> %s", (status, expected) => {
41
+ (0, vitest_1.expect)((0, resolve_test_run_from_commit_1.isTestRunPartial)(status)).toBe(expected);
42
+ });
43
+ });
44
+ (0, vitest_1.describe)("assertTestRunComplete", () => {
45
+ vitest_1.test.each(["Success", "Failure"])("does not throw for %s", (status) => {
46
+ (0, vitest_1.expect)(() => (0, resolve_test_run_from_commit_1.assertTestRunComplete)("tr-1", status)).not.toThrow();
47
+ });
48
+ vitest_1.test.each(["Aborted", "ExecutionError"])("throws 'finished unsuccessfully' for %s", (status) => {
49
+ (0, vitest_1.expect)(() => (0, resolve_test_run_from_commit_1.assertTestRunComplete)("tr-1", status)).toThrow(cli_user_error_1.CliUserError);
50
+ (0, vitest_1.expect)(() => (0, resolve_test_run_from_commit_1.assertTestRunComplete)("tr-1", status)).toThrow(/finished unsuccessfully/);
51
+ });
52
+ (0, vitest_1.test)("throws 'not complete' for Running", () => {
53
+ (0, vitest_1.expect)(() => (0, resolve_test_run_from_commit_1.assertTestRunComplete)("tr-1", "Running")).toThrow(cli_user_error_1.CliUserError);
54
+ (0, vitest_1.expect)(() => (0, resolve_test_run_from_commit_1.assertTestRunComplete)("tr-1", "Running")).toThrow(/is not complete/);
55
+ });
56
+ (0, vitest_1.test)("throws 'session-pool base run' for Partial", () => {
57
+ (0, vitest_1.expect)(() => (0, resolve_test_run_from_commit_1.assertTestRunComplete)("tr-1", "Partial")).toThrow(cli_user_error_1.CliUserError);
58
+ (0, vitest_1.expect)(() => (0, resolve_test_run_from_commit_1.assertTestRunComplete)("tr-1", "Partial")).toThrow(/session-pool base run/);
59
+ });
60
+ (0, vitest_1.test)("uses the resultName in the not-yet-available message", () => {
61
+ (0, vitest_1.expect)(() => (0, resolve_test_run_from_commit_1.assertTestRunComplete)("tr-1", "Running", { resultName: "coverage" })).toThrow(/coverage not yet available/);
62
+ });
63
+ });
64
+ //# sourceMappingURL=resolve-test-run-from-commit.spec.js.map
65
+ //# debugId=670125cd-0035-5dbc-b189-75c3b23d6689
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-test-run-from-commit.spec.js","sources":["../../../src/utils/__tests__/resolve-test-run-from-commit.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"670125cd-0035-5dbc-b189-75c3b23d6689"}
@@ -6,6 +6,28 @@ export interface ResolvedTestRun {
6
6
  }
7
7
  /** Whether a status means the run is still running (not yet usable). */
8
8
  export declare const isTestRunInProgress: (status: TestRunStatus) => boolean;
9
+ /** Whether the run has finished with a usable verdict (results are ready). */
10
+ export declare const isTestRunComplete: (status: TestRunStatus) => boolean;
11
+ /** Whether the run failed fatally (results are unavailable/unreliable). */
12
+ export declare const isTestRunFailed: (status: TestRunStatus) => boolean;
13
+ /**
14
+ * Whether the run is a session-pool base: it executes sessions on demand for
15
+ * other PRs (lazy session execution) rather than representing a specific
16
+ * change, and never finishes on its own — it stays `Partial` until some future
17
+ * PR requests more of its sessions. So it isn't a proper test run with a
18
+ * comparable set of diffs.
19
+ */
20
+ export declare const isTestRunPartial: (status: TestRunStatus) => boolean;
21
+ /**
22
+ * Asserts a resolved run has finished with a usable verdict (Success/Failure),
23
+ * for commands that need finished results and can't wait for them (e.g.
24
+ * coverage). Throws a `CliUserError` otherwise, distinguishing fatal failures
25
+ * (`Aborted`/`ExecutionError`) and session-pool bases (`Partial`, which never
26
+ * finish on their own) from runs that simply aren't finished yet (in-progress).
27
+ */
28
+ export declare const assertTestRunComplete: (testRunId: string, status: TestRunStatus, { resultName }?: {
29
+ resultName?: string;
30
+ }) => void;
9
31
  /**
10
32
  * Resolves the latest test run (including one in progress) from a commit (an
11
33
  * explicit `commitSha`, or the local checkout's HEAD when omitted), throwing a
@@ -18,16 +40,11 @@ export declare const resolveTestRunForCommitOrThrow: (client: MeticulousClient,
18
40
  * run matches, so the caller can fall back to its original behaviour.
19
41
  */
20
42
  export declare const tryResolveTestRunForCommit: (client: MeticulousClient, apiToken: string, commitSha: string | undefined) => Promise<ResolvedTestRun | null>;
21
- /**
22
- * Throws a `CliUserError` if the given test run is still in progress, since
23
- * coverage only exists once a run has finished. Used to guard an explicitly
24
- * passed `testRunId`, mirroring the in-progress check applied to runs resolved
25
- * from a commit.
26
- */
27
- export declare const throwIfTestRunCoverageNotReady: (client: MeticulousClient, testRunId: string) => Promise<void>;
28
43
  /**
29
44
  * Polls a (possibly in-progress) test run until it reaches a terminal status,
30
- * logging each transition. Throws a `CliUserError` if the run finishes
31
- * unsuccessfully (`ExecutionError`/`Aborted`). Returns the final status.
45
+ * logging once when it starts waiting (no per-poll output — this runs for
46
+ * agents, where per-poll lines are just noisy context). Throws a `CliUserError`
47
+ * if the run finishes unsuccessfully (`ExecutionError`/`Aborted`) or doesn't
48
+ * reach a terminal status within `POLL_TIMEOUT_MS`. Returns the final status.
32
49
  */
33
50
  export declare const awaitTestRunCompletion: (client: MeticulousClient, testRunId: string) => Promise<TestRunStatus>;
@@ -1,17 +1,61 @@
1
1
  "use strict";
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="caa70eb2-71ac-5c1c-ada9-44e904ea061a")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="99beba91-0321-5113-a18b-9d79c35ca712")}catch(e){}}();
3
3
 
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.awaitTestRunCompletion = exports.throwIfTestRunCoverageNotReady = exports.tryResolveTestRunForCommit = exports.resolveTestRunForCommitOrThrow = exports.isTestRunInProgress = void 0;
5
+ exports.awaitTestRunCompletion = exports.tryResolveTestRunForCommit = exports.resolveTestRunForCommitOrThrow = exports.assertTestRunComplete = exports.isTestRunPartial = exports.isTestRunFailed = exports.isTestRunComplete = exports.isTestRunInProgress = void 0;
6
6
  const client_1 = require("@alwaysmeticulous/client");
7
7
  const common_1 = require("@alwaysmeticulous/common");
8
8
  const cli_user_error_1 = require("./cli-user-error");
9
9
  const resolve_project_identifier_1 = require("./resolve-project-identifier");
10
10
  const POLL_INTERVAL_MS = 10_000;
11
+ /** Give up waiting for a run after this long, rather than polling forever. */
12
+ const POLL_TIMEOUT_MS = 10 * 60_000;
11
13
  const log = (...args) => process.stderr.write(args.join(" ") + "\n");
12
14
  /** Whether a status means the run is still running (not yet usable). */
13
15
  const isTestRunInProgress = (status) => client_1.IN_PROGRESS_TEST_RUN_STATUS.includes(status);
14
16
  exports.isTestRunInProgress = isTestRunInProgress;
17
+ /**
18
+ * Statuses where the run has finished with a usable verdict, so diffs/coverage
19
+ * are available. "Failure" just means notable differences were found — the run
20
+ * itself completed successfully.
21
+ */
22
+ const COMPLETE_TEST_RUN_STATUS = ["Success", "Failure"];
23
+ /** Whether the run has finished with a usable verdict (results are ready). */
24
+ const isTestRunComplete = (status) => COMPLETE_TEST_RUN_STATUS.includes(status);
25
+ exports.isTestRunComplete = isTestRunComplete;
26
+ /** Statuses where the run failed fatally and won't produce usable results. */
27
+ const FAILED_TEST_RUN_STATUS = ["Aborted", "ExecutionError"];
28
+ /** Whether the run failed fatally (results are unavailable/unreliable). */
29
+ const isTestRunFailed = (status) => FAILED_TEST_RUN_STATUS.includes(status);
30
+ exports.isTestRunFailed = isTestRunFailed;
31
+ /**
32
+ * Whether the run is a session-pool base: it executes sessions on demand for
33
+ * other PRs (lazy session execution) rather than representing a specific
34
+ * change, and never finishes on its own — it stays `Partial` until some future
35
+ * PR requests more of its sessions. So it isn't a proper test run with a
36
+ * comparable set of diffs.
37
+ */
38
+ const isTestRunPartial = (status) => status === "Partial";
39
+ exports.isTestRunPartial = isTestRunPartial;
40
+ /**
41
+ * Asserts a resolved run has finished with a usable verdict (Success/Failure),
42
+ * for commands that need finished results and can't wait for them (e.g.
43
+ * coverage). Throws a `CliUserError` otherwise, distinguishing fatal failures
44
+ * (`Aborted`/`ExecutionError`) and session-pool bases (`Partial`, which never
45
+ * finish on their own) from runs that simply aren't finished yet (in-progress).
46
+ */
47
+ const assertTestRunComplete = (testRunId, status, { resultName = "results" } = {}) => {
48
+ if ((0, exports.isTestRunFailed)(status)) {
49
+ throw new cli_user_error_1.CliUserError(`Test run ${testRunId} finished unsuccessfully (status: ${status}).`);
50
+ }
51
+ if ((0, exports.isTestRunPartial)(status)) {
52
+ throw new cli_user_error_1.CliUserError(`Test run ${testRunId} is a session-pool base run (status: Partial), not a test run for a specific change, so it has no complete ${resultName} available.`);
53
+ }
54
+ if (!(0, exports.isTestRunComplete)(status)) {
55
+ throw new cli_user_error_1.CliUserError(`Test run ${testRunId} is not complete (status: ${status}); ${resultName} not yet available.`);
56
+ }
57
+ };
58
+ exports.assertTestRunComplete = assertTestRunComplete;
15
59
  /**
16
60
  * Resolves the latest test run (including one in progress) from a commit (an
17
61
  * explicit `commitSha`, or the local checkout's HEAD when omitted), throwing a
@@ -29,7 +73,12 @@ const resolveTestRunForCommitOrThrow = async (client, apiToken, commitSha) => {
29
73
  if (testRunId == null || status == null) {
30
74
  throw new cli_user_error_1.CliUserError(`No test run found for commit ${sha}.`);
31
75
  }
32
- log(`Resolved test run ${testRunId} for commit ${sha} (status: ${status}).`);
76
+ // Mention the status only when it's not a normal completed verdict:
77
+ // "Success"/"Failure" just indicate whether diffs were found (and "Failure"
78
+ // reads alarmingly), whereas in-progress/Aborted/ExecutionError/Partial are
79
+ // worth surfacing — those usually mean we exit here or the run is unreliable.
80
+ const statusSuffix = status === "Success" || status === "Failure" ? "" : ` (status: ${status})`;
81
+ log(`Resolved test run ${testRunId} for commit ${sha}${statusSuffix}.`);
33
82
  return { testRunId, status };
34
83
  };
35
84
  exports.resolveTestRunForCommitOrThrow = resolveTestRunForCommitOrThrow;
@@ -48,9 +97,7 @@ const tryResolveTestRunForCommit = async (client, apiToken, commitSha) => {
48
97
  const { testRunId, status } = await (0, client_1.getTestRunForCommit)(client, sha, {
49
98
  projectId,
50
99
  });
51
- return testRunId != null && status != null
52
- ? { testRunId, status }
53
- : null;
100
+ return testRunId != null && status != null ? { testRunId, status } : null;
54
101
  }
55
102
  catch (error) {
56
103
  // A CliUserError (e.g. no project selected for an OAuth caller) is an
@@ -63,39 +110,32 @@ const tryResolveTestRunForCommit = async (client, apiToken, commitSha) => {
63
110
  }
64
111
  };
65
112
  exports.tryResolveTestRunForCommit = tryResolveTestRunForCommit;
66
- /**
67
- * Throws a `CliUserError` if the given test run is still in progress, since
68
- * coverage only exists once a run has finished. Used to guard an explicitly
69
- * passed `testRunId`, mirroring the in-progress check applied to runs resolved
70
- * from a commit.
71
- */
72
- const throwIfTestRunCoverageNotReady = async (client, testRunId) => {
73
- const testRun = await (0, client_1.getTestRun)({ client, testRunId });
74
- if ((0, exports.isTestRunInProgress)(testRun.status)) {
75
- throw new cli_user_error_1.CliUserError(`Test run ${testRunId} is still in progress (status: ${testRun.status}); coverage is not available yet.`);
76
- }
77
- };
78
- exports.throwIfTestRunCoverageNotReady = throwIfTestRunCoverageNotReady;
79
113
  /**
80
114
  * Polls a (possibly in-progress) test run until it reaches a terminal status,
81
- * logging each transition. Throws a `CliUserError` if the run finishes
82
- * unsuccessfully (`ExecutionError`/`Aborted`). Returns the final status.
115
+ * logging once when it starts waiting (no per-poll output — this runs for
116
+ * agents, where per-poll lines are just noisy context). Throws a `CliUserError`
117
+ * if the run finishes unsuccessfully (`ExecutionError`/`Aborted`) or doesn't
118
+ * reach a terminal status within `POLL_TIMEOUT_MS`. Returns the final status.
83
119
  */
84
120
  const awaitTestRunCompletion = async (client, testRunId) => {
85
121
  let testRun = await (0, client_1.getTestRun)({ client, testRunId });
86
122
  if ((0, exports.isTestRunInProgress)(testRun.status)) {
87
123
  log(`Waiting for test run ${testRunId} to complete...`);
88
124
  }
125
+ const deadline = performance.now() + POLL_TIMEOUT_MS;
89
126
  while ((0, exports.isTestRunInProgress)(testRun.status)) {
127
+ if (performance.now() >= deadline) {
128
+ throw new cli_user_error_1.CliUserError(`Test run ${testRunId} did not complete within 10 minutes (status: ${testRun.status}). ` +
129
+ "Something may have gone wrong — try again later.");
130
+ }
90
131
  await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
91
132
  testRun = await (0, client_1.getTestRun)({ client, testRunId });
92
- log(`Test run status: ${testRun.status}`);
93
133
  }
94
- if (testRun.status === "ExecutionError" || testRun.status === "Aborted") {
134
+ if ((0, exports.isTestRunFailed)(testRun.status)) {
95
135
  throw new cli_user_error_1.CliUserError(`Test run ${testRunId} finished unsuccessfully (status: ${testRun.status}).`);
96
136
  }
97
137
  return testRun.status;
98
138
  };
99
139
  exports.awaitTestRunCompletion = awaitTestRunCompletion;
100
140
  //# sourceMappingURL=resolve-test-run-from-commit.js.map
101
- //# debugId=caa70eb2-71ac-5c1c-ada9-44e904ea061a
141
+ //# debugId=99beba91-0321-5113-a18b-9d79c35ca712
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-test-run-from-commit.js","sources":["../../src/utils/resolve-test-run-from-commit.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AACA,qDAKkC;AAClC,qDAAwD;AACxD,qDAAgD;AAChD,6EAAwE;AAExE,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAOhF,wEAAwE;AACjE,MAAM,mBAAmB,GAAG,CAAC,MAAqB,EAAW,EAAE,CACpE,oCAA2B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AADlC,QAAA,mBAAmB,uBACe;AAE/C;;;;GAIG;AACI,MAAM,8BAA8B,GAAG,KAAK,EACjD,MAAwB,EACxB,QAAgB,EAChB,SAA6B,EACH,EAAE;IAC5B,MAAM,GAAG,GAAG,MAAM,IAAA,qBAAY,EAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,6BAAY,CACpB,oGAAoG,CACrG,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,qDAAwB,EAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,4BAAmB,EAAC,MAAM,EAAE,GAAG,EAAE;QACnE,SAAS;KACV,CAAC,CAAC;IACH,IAAI,SAAS,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,6BAAY,CAAC,gCAAgC,GAAG,GAAG,CAAC,CAAC;IACjE,CAAC;IACD,GAAG,CAAC,qBAAqB,SAAS,eAAe,GAAG,aAAa,MAAM,IAAI,CAAC,CAAC;IAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC,CAAC;AApBW,QAAA,8BAA8B,kCAoBzC;AAEF;;;;GAIG;AACI,MAAM,0BAA0B,GAAG,KAAK,EAC7C,MAAwB,EACxB,QAAgB,EAChB,SAA6B,EACI,EAAE;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAA,qBAAY,EAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,qDAAwB,EAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,4BAAmB,EAAC,MAAM,EAAE,GAAG,EAAE;YACnE,SAAS;SACV,CAAC,CAAC;QACH,OAAO,SAAS,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;YACxC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE;YACvB,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sEAAsE;QACtE,0EAA0E;QAC1E,yEAAyE;QACzE,IAAI,KAAK,YAAY,6BAAY,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AA1BW,QAAA,0BAA0B,8BA0BrC;AAEF;;;;;GAKG;AACI,MAAM,8BAA8B,GAAG,KAAK,EACjD,MAAwB,EACxB,SAAiB,EACF,EAAE;IACjB,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAU,EAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACxD,IAAI,IAAA,2BAAmB,EAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,6BAAY,CACpB,YAAY,SAAS,kCAAkC,OAAO,CAAC,MAAM,mCAAmC,CACzG,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAVW,QAAA,8BAA8B,kCAUzC;AAEF;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,KAAK,EACzC,MAAwB,EACxB,SAAiB,EACO,EAAE;IAC1B,IAAI,OAAO,GAAG,MAAM,IAAA,mBAAU,EAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACtD,IAAI,IAAA,2BAAmB,EAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,GAAG,CAAC,wBAAwB,SAAS,iBAAiB,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,IAAA,2BAAmB,EAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACtE,OAAO,GAAG,MAAM,IAAA,mBAAU,EAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAClD,GAAG,CAAC,oBAAoB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACxE,MAAM,IAAI,6BAAY,CACpB,YAAY,SAAS,qCAAqC,OAAO,CAAC,MAAM,IAAI,CAC7E,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC,CAAC;AAnBW,QAAA,sBAAsB,0BAmBjC","debugId":"caa70eb2-71ac-5c1c-ada9-44e904ea061a"}
1
+ {"version":3,"file":"resolve-test-run-from-commit.js","sources":["../../src/utils/resolve-test-run-from-commit.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"99beba91-0321-5113-a18b-9d79c35ca712"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwaysmeticulous/cli",
3
- "version": "2.297.1",
3
+ "version": "2.298.0",
4
4
  "description": "The Meticulous CLI",
5
5
  "license": "ISC",
6
6
  "main": "dist/index.js",
@@ -24,17 +24,17 @@
24
24
  "tar": "^7.5.8",
25
25
  "yargs": "^17.5.1",
26
26
  "@alwaysmeticulous/api": "2.297.0",
27
- "@alwaysmeticulous/client": "2.297.1",
28
- "@alwaysmeticulous/common": "2.293.0",
29
- "@alwaysmeticulous/debug-workspace": "2.297.1",
30
- "@alwaysmeticulous/downloading-helpers": "2.297.1",
31
- "@alwaysmeticulous/record": "2.297.0",
32
- "@alwaysmeticulous/remote-replay-launcher": "2.297.1",
27
+ "@alwaysmeticulous/client": "2.298.0",
28
+ "@alwaysmeticulous/common": "2.298.0",
29
+ "@alwaysmeticulous/debug-workspace": "2.298.0",
30
+ "@alwaysmeticulous/downloading-helpers": "2.298.0",
31
+ "@alwaysmeticulous/record": "2.298.0",
32
+ "@alwaysmeticulous/remote-replay-launcher": "2.298.0",
33
33
  "@alwaysmeticulous/replay-debugger-ui": "2.283.1",
34
- "@alwaysmeticulous/replay-orchestrator-launcher": "2.297.1",
34
+ "@alwaysmeticulous/replay-orchestrator-launcher": "2.298.0",
35
35
  "@alwaysmeticulous/sdk-bundles-api": "2.297.0",
36
- "@alwaysmeticulous/sentry": "2.293.0",
37
- "@alwaysmeticulous/tunnels-client": "2.293.0"
36
+ "@alwaysmeticulous/sentry": "2.298.0",
37
+ "@alwaysmeticulous/tunnels-client": "2.298.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/cli-progress": "^3.11.5",