@validate.qa/runner 1.0.61 → 1.0.63

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 (3) hide show
  1. package/dist/cli.js +145 -14
  2. package/dist/cli.mjs +145 -14
  3. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -73455,6 +73455,7 @@ var require_inbox_tools = __commonJS({
73455
73455
  legacyEmail,
73456
73456
  tag,
73457
73457
  usePlusTag: email !== baseEmail,
73458
+ allowPlainFallback: opts.allowPlainFallback ?? true,
73458
73459
  passwordKey: opts.passwordKey ?? "TEST_USER_PASSWORD",
73459
73460
  provisioned: false,
73460
73461
  // Floor reads at run start so a verification email from a PRIOR run (the
@@ -73617,6 +73618,9 @@ var require_inbox_tools = __commonJS({
73617
73618
  const { state: state2 } = ctx;
73618
73619
  const plain = args.plain === true || args.plain === "true";
73619
73620
  const restore = args.plain === false || args.plain === "false";
73621
+ if (plain && !state2.allowPlainFallback) {
73622
+ return err("The bare inbox address is unavailable for this brokered run because it is shared across projects. Keep using the project-scoped +tag address; if the app rejects plus-addressing, report email verification as blocked.");
73623
+ }
73620
73624
  if (plain && state2.usePlusTag) {
73621
73625
  state2.email = state2.baseEmail;
73622
73626
  state2.usePlusTag = false;
@@ -75458,7 +75462,10 @@ ${existingScreens.slice(0, 100).map((s) => `- ${s.screenId}${s.name ? ` "${s.nam
75458
75462
  } else if (registerRequested && ctx.inboxBroker?.address && ctx.inboxBrokerRead) {
75459
75463
  inboxState = (0, inbox_tools_js_1.createInboxRunState)({ address: ctx.inboxBroker.address }, {
75460
75464
  tagSeed: targetAppId ?? ctx.projectId,
75461
- projectScope: ctx.projectId
75465
+ projectScope: ctx.projectId,
75466
+ // A user-controlled local runner must never read the shared bare inbox:
75467
+ // only the project-scoped +tag is an authorization boundary.
75468
+ allowPlainFallback: false
75462
75469
  });
75463
75470
  inboxReader = new brokered_inbox_reader_js_1.BrokeredInboxReader(ctx.inboxBrokerRead);
75464
75471
  await (0, inbox_tools_js_1.applyAndPersistInboxIdentity)({
@@ -320223,6 +320230,9 @@ var require_survey_link_frontier = __commonJS({
320223
320230
  exports2.markLinkNavigationAttempt = markLinkNavigationAttempt;
320224
320231
  exports2.getFinishBlockingFrontier = getFinishBlockingFrontier;
320225
320232
  exports2.describeBlockingRoutes = describeBlockingRoutes;
320233
+ exports2.isTransientLanding = isTransientLanding;
320234
+ exports2.getAdaptiveDebtRoutes = getAdaptiveDebtRoutes;
320235
+ exports2.listTransientDebtSuppressions = listTransientDebtSuppressions;
320226
320236
  var exploration_state_js_1 = require_exploration_state();
320227
320237
  var exploration_parser_js_1 = require_exploration_parser();
320228
320238
  exports2.MAX_FINISH_REDIRECTS = 2;
@@ -320582,6 +320592,132 @@ var require_survey_link_frontier = __commonJS({
320582
320592
  function describeBlockingRoutes(items, max = 3) {
320583
320593
  return items.slice(0, max).map((i) => i.label ? `${i.label} (${i.route})` : i.route).join(", ");
320584
320594
  }
320595
+ function isOpaqueToken(v) {
320596
+ if (!v)
320597
+ return false;
320598
+ if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v))
320599
+ return true;
320600
+ if (v.length >= 20 && /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(v))
320601
+ return true;
320602
+ if (v.length >= 20 && !/[\s_-]/.test(v) && /[A-Za-z]/.test(v) && /\d/.test(v))
320603
+ return true;
320604
+ if (v.length >= 24 && /^[A-Za-z0-9+/=]+$/.test(v) && /\d/.test(v))
320605
+ return true;
320606
+ return false;
320607
+ }
320608
+ var FLASH_QUERY_KEYS = /* @__PURE__ */ new Set(["toast", "flash", "snackbar"]);
320609
+ var SESSION_TOKEN_QUERY_KEYS = /* @__PURE__ */ new Set([
320610
+ "sid",
320611
+ "sess",
320612
+ "sessid",
320613
+ "session",
320614
+ "sessionid",
320615
+ "jsessionid",
320616
+ "phpsessid"
320617
+ ]);
320618
+ var ONE_TIME_TOKEN_QUERY_KEYS = /* @__PURE__ */ new Set([
320619
+ "token",
320620
+ "oobcode",
320621
+ "confirmation_token",
320622
+ "reset_token",
320623
+ "reset_password_token",
320624
+ "verification_token",
320625
+ "activation_token",
320626
+ "invitation_token",
320627
+ "unsubscribe_token"
320628
+ ]);
320629
+ var ERROR_PATH_RE = /^\/(?:404|500|503|403|401|error|not[-_]?found|maintenance|oops|unauthorized|forbidden)(?:\/|$)/i;
320630
+ var OAUTH_CALLBACK_PATH_RE = /(?:^|\/)(?:oauth2?\/callback|auth\/callback|sso\/callback|oidc\/callback|signin[-_]oidc|auth\/response)(?:\/|$)/i;
320631
+ var ONE_TIME_PATH_PREFIX_RE = /^\/(?:verify|verify[-_]email|confirm|confirmation|activate|activation|reset[-_]password|password[-_]reset|magic[-_]?link|invitation|invite|unsubscribe|email[-_]confirm)\/([^/?#]+)/i;
320632
+ var INFRA_PATH_RE = /^\/(?:cdn-cgi|__\/auth|\.well-known|_next\/(?:static|data|image)|_nuxt|_vercel)(?:\/|$)/i;
320633
+ var DOWNLOAD_PATH_RE = /(?:^|\/)(?:download|export)\/([^/?#]+)$/i;
320634
+ function isTransientLanding(route2, depth = 0) {
320635
+ if (!route2 || route2 === "/" || depth > 4)
320636
+ return false;
320637
+ let url;
320638
+ try {
320639
+ url = new URL(route2, "http://transient.invalid");
320640
+ } catch {
320641
+ return false;
320642
+ }
320643
+ const path = url.pathname;
320644
+ const params = url.searchParams;
320645
+ if (url.hash.startsWith("#/") && isTransientLanding(url.hash.slice(1), depth + 1))
320646
+ return true;
320647
+ if (ERROR_PATH_RE.test(path))
320648
+ return true;
320649
+ if (INFRA_PATH_RE.test(path))
320650
+ return true;
320651
+ if (OAUTH_CALLBACK_PATH_RE.test(path))
320652
+ return true;
320653
+ if (isOpaqueToken(params.get("code")) && isOpaqueToken(params.get("state")))
320654
+ return true;
320655
+ if (params.has("error") && isOpaqueToken(params.get("state")))
320656
+ return true;
320657
+ if (/[#&?](?:access_token|id_token)=/.test(url.hash) || params.has("access_token") || params.has("id_token")) {
320658
+ return true;
320659
+ }
320660
+ for (const key of params.keys()) {
320661
+ if (FLASH_QUERY_KEYS.has(key.toLowerCase()))
320662
+ return true;
320663
+ }
320664
+ const otPath = ONE_TIME_PATH_PREFIX_RE.exec(path);
320665
+ if (otPath) {
320666
+ let seg = otPath[1];
320667
+ try {
320668
+ seg = decodeURIComponent(seg);
320669
+ } catch {
320670
+ }
320671
+ if (isOpaqueToken(seg))
320672
+ return true;
320673
+ }
320674
+ for (const [key, value] of params) {
320675
+ if (ONE_TIME_TOKEN_QUERY_KEYS.has(key.toLowerCase()) && isOpaqueToken(value))
320676
+ return true;
320677
+ }
320678
+ const dl = DOWNLOAD_PATH_RE.exec(path);
320679
+ if (dl && (/\.[a-z0-9]{2,5}$/i.test(dl[1]) || /\d/.test(dl[1])))
320680
+ return true;
320681
+ for (const [key, value] of params) {
320682
+ if (SESSION_TOKEN_QUERY_KEYS.has(key.toLowerCase()) && isOpaqueToken(value))
320683
+ return true;
320684
+ }
320685
+ return false;
320686
+ }
320687
+ function getAdaptiveDebtRoutes(state2) {
320688
+ const excluded = (r) => {
320689
+ if (r === "/")
320690
+ return true;
320691
+ const item = state2.frontier.get(r);
320692
+ if (item?.source === "link-seen" && item.attempted === true)
320693
+ return true;
320694
+ if (visitedSatisfies(state2, r))
320695
+ return true;
320696
+ if (item?.source !== "link-seen" && isTransientLanding(r))
320697
+ return true;
320698
+ return false;
320699
+ };
320700
+ const ranked = (0, exploration_state_js_1.getRankedFrontier)(state2, { preferShallow: true }).filter((r) => !excluded(r));
320701
+ const rankedSet = new Set(ranked);
320702
+ const navigatedUncaptured = [];
320703
+ for (const r of state2.frontier.keys()) {
320704
+ if (!rankedSet.has(r) && !excluded(r))
320705
+ navigatedUncaptured.push(r);
320706
+ }
320707
+ return ranked.concat(navigatedUncaptured);
320708
+ }
320709
+ function listTransientDebtSuppressions(state2) {
320710
+ const out = [];
320711
+ for (const [r, item] of state2.frontier) {
320712
+ if (r === "/" || item.source === "link-seen")
320713
+ continue;
320714
+ if (visitedSatisfies(state2, r))
320715
+ continue;
320716
+ if (isTransientLanding(r))
320717
+ out.push(r);
320718
+ }
320719
+ return out;
320720
+ }
320585
320721
  }
320586
320722
  });
320587
320723
 
@@ -324659,21 +324795,16 @@ ${inboxPromptBlock}`;
324659
324795
  let discoveryCreditedThrough = 0;
324660
324796
  let adaptiveLastDiscoveryIteration = Number.NEGATIVE_INFINITY;
324661
324797
  let adaptiveDiscoveryLeaseUsed = false;
324798
+ let loggedTransientDebtSuppression = false;
324662
324799
  const adaptiveDebtRoutes = () => {
324663
- const isAttemptedLinkEntry = (r) => {
324664
- const item = state2.frontier.get(r);
324665
- return item?.source === "link-seen" && item.attempted === true;
324666
- };
324667
- const isSatisfied = (r) => (0, survey_link_frontier_js_1.visitedSatisfies)(state2, r);
324668
- const ranked = (0, exploration_state_js_1.getRankedFrontier)(state2, { preferShallow: true }).filter((r) => r !== "/" && !isAttemptedLinkEntry(r) && !isSatisfied(r));
324669
- const rankedSet = new Set(ranked);
324670
- const navigatedUncaptured = [];
324671
- for (const r of state2.frontier.keys()) {
324672
- if (r !== "/" && !rankedSet.has(r) && !isAttemptedLinkEntry(r) && !isSatisfied(r)) {
324673
- navigatedUncaptured.push(r);
324800
+ if (!loggedTransientDebtSuppression) {
324801
+ const suppressed = (0, survey_link_frontier_js_1.listTransientDebtSuppressions)(state2);
324802
+ if (suppressed.length > 0) {
324803
+ loggedTransientDebtSuppression = true;
324804
+ logs2.push(` [debt-hygiene] excluded ${suppressed.length} transient landing(s) from adaptive debt: ${suppressed.slice(0, 6).join(", ")}${suppressed.length > 6 ? ` \u2026+${suppressed.length - 6}` : ""}`);
324674
324805
  }
324675
324806
  }
324676
- return ranked.concat(navigatedUncaptured);
324807
+ return (0, survey_link_frontier_js_1.getAdaptiveDebtRoutes)(state2);
324677
324808
  };
324678
324809
  const describeRankedRoutes = (routes, max) => routes.slice(0, max).map((r) => {
324679
324810
  const label = state2.frontier.get(r)?.label;
@@ -350727,7 +350858,7 @@ var require_package4 = __commonJS({
350727
350858
  "package.json"(exports2, module2) {
350728
350859
  module2.exports = {
350729
350860
  name: "@validate.qa/runner",
350730
- version: "1.0.61",
350861
+ version: "1.0.63",
350731
350862
  description: "validate local test runner - execute Playwright tests on your machine, connected to validate.qa cloud.",
350732
350863
  bin: {
350733
350864
  "validate-runner": "dist/cli.js"
package/dist/cli.mjs CHANGED
@@ -73460,6 +73460,7 @@ var require_inbox_tools = __commonJS({
73460
73460
  legacyEmail,
73461
73461
  tag,
73462
73462
  usePlusTag: email !== baseEmail,
73463
+ allowPlainFallback: opts.allowPlainFallback ?? true,
73463
73464
  passwordKey: opts.passwordKey ?? "TEST_USER_PASSWORD",
73464
73465
  provisioned: false,
73465
73466
  // Floor reads at run start so a verification email from a PRIOR run (the
@@ -73622,6 +73623,9 @@ var require_inbox_tools = __commonJS({
73622
73623
  const { state: state2 } = ctx;
73623
73624
  const plain = args.plain === true || args.plain === "true";
73624
73625
  const restore = args.plain === false || args.plain === "false";
73626
+ if (plain && !state2.allowPlainFallback) {
73627
+ return err("The bare inbox address is unavailable for this brokered run because it is shared across projects. Keep using the project-scoped +tag address; if the app rejects plus-addressing, report email verification as blocked.");
73628
+ }
73625
73629
  if (plain && state2.usePlusTag) {
73626
73630
  state2.email = state2.baseEmail;
73627
73631
  state2.usePlusTag = false;
@@ -75463,7 +75467,10 @@ ${existingScreens.slice(0, 100).map((s) => `- ${s.screenId}${s.name ? ` "${s.nam
75463
75467
  } else if (registerRequested && ctx.inboxBroker?.address && ctx.inboxBrokerRead) {
75464
75468
  inboxState = (0, inbox_tools_js_1.createInboxRunState)({ address: ctx.inboxBroker.address }, {
75465
75469
  tagSeed: targetAppId ?? ctx.projectId,
75466
- projectScope: ctx.projectId
75470
+ projectScope: ctx.projectId,
75471
+ // A user-controlled local runner must never read the shared bare inbox:
75472
+ // only the project-scoped +tag is an authorization boundary.
75473
+ allowPlainFallback: false
75467
75474
  });
75468
75475
  inboxReader = new brokered_inbox_reader_js_1.BrokeredInboxReader(ctx.inboxBrokerRead);
75469
75476
  await (0, inbox_tools_js_1.applyAndPersistInboxIdentity)({
@@ -320228,6 +320235,9 @@ var require_survey_link_frontier = __commonJS({
320228
320235
  exports.markLinkNavigationAttempt = markLinkNavigationAttempt;
320229
320236
  exports.getFinishBlockingFrontier = getFinishBlockingFrontier;
320230
320237
  exports.describeBlockingRoutes = describeBlockingRoutes;
320238
+ exports.isTransientLanding = isTransientLanding;
320239
+ exports.getAdaptiveDebtRoutes = getAdaptiveDebtRoutes;
320240
+ exports.listTransientDebtSuppressions = listTransientDebtSuppressions;
320231
320241
  var exploration_state_js_1 = require_exploration_state();
320232
320242
  var exploration_parser_js_1 = require_exploration_parser();
320233
320243
  exports.MAX_FINISH_REDIRECTS = 2;
@@ -320587,6 +320597,132 @@ var require_survey_link_frontier = __commonJS({
320587
320597
  function describeBlockingRoutes(items, max = 3) {
320588
320598
  return items.slice(0, max).map((i) => i.label ? `${i.label} (${i.route})` : i.route).join(", ");
320589
320599
  }
320600
+ function isOpaqueToken(v) {
320601
+ if (!v)
320602
+ return false;
320603
+ if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v))
320604
+ return true;
320605
+ if (v.length >= 20 && /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(v))
320606
+ return true;
320607
+ if (v.length >= 20 && !/[\s_-]/.test(v) && /[A-Za-z]/.test(v) && /\d/.test(v))
320608
+ return true;
320609
+ if (v.length >= 24 && /^[A-Za-z0-9+/=]+$/.test(v) && /\d/.test(v))
320610
+ return true;
320611
+ return false;
320612
+ }
320613
+ var FLASH_QUERY_KEYS = /* @__PURE__ */ new Set(["toast", "flash", "snackbar"]);
320614
+ var SESSION_TOKEN_QUERY_KEYS = /* @__PURE__ */ new Set([
320615
+ "sid",
320616
+ "sess",
320617
+ "sessid",
320618
+ "session",
320619
+ "sessionid",
320620
+ "jsessionid",
320621
+ "phpsessid"
320622
+ ]);
320623
+ var ONE_TIME_TOKEN_QUERY_KEYS = /* @__PURE__ */ new Set([
320624
+ "token",
320625
+ "oobcode",
320626
+ "confirmation_token",
320627
+ "reset_token",
320628
+ "reset_password_token",
320629
+ "verification_token",
320630
+ "activation_token",
320631
+ "invitation_token",
320632
+ "unsubscribe_token"
320633
+ ]);
320634
+ var ERROR_PATH_RE = /^\/(?:404|500|503|403|401|error|not[-_]?found|maintenance|oops|unauthorized|forbidden)(?:\/|$)/i;
320635
+ var OAUTH_CALLBACK_PATH_RE = /(?:^|\/)(?:oauth2?\/callback|auth\/callback|sso\/callback|oidc\/callback|signin[-_]oidc|auth\/response)(?:\/|$)/i;
320636
+ var ONE_TIME_PATH_PREFIX_RE = /^\/(?:verify|verify[-_]email|confirm|confirmation|activate|activation|reset[-_]password|password[-_]reset|magic[-_]?link|invitation|invite|unsubscribe|email[-_]confirm)\/([^/?#]+)/i;
320637
+ var INFRA_PATH_RE = /^\/(?:cdn-cgi|__\/auth|\.well-known|_next\/(?:static|data|image)|_nuxt|_vercel)(?:\/|$)/i;
320638
+ var DOWNLOAD_PATH_RE = /(?:^|\/)(?:download|export)\/([^/?#]+)$/i;
320639
+ function isTransientLanding(route2, depth = 0) {
320640
+ if (!route2 || route2 === "/" || depth > 4)
320641
+ return false;
320642
+ let url;
320643
+ try {
320644
+ url = new URL(route2, "http://transient.invalid");
320645
+ } catch {
320646
+ return false;
320647
+ }
320648
+ const path = url.pathname;
320649
+ const params = url.searchParams;
320650
+ if (url.hash.startsWith("#/") && isTransientLanding(url.hash.slice(1), depth + 1))
320651
+ return true;
320652
+ if (ERROR_PATH_RE.test(path))
320653
+ return true;
320654
+ if (INFRA_PATH_RE.test(path))
320655
+ return true;
320656
+ if (OAUTH_CALLBACK_PATH_RE.test(path))
320657
+ return true;
320658
+ if (isOpaqueToken(params.get("code")) && isOpaqueToken(params.get("state")))
320659
+ return true;
320660
+ if (params.has("error") && isOpaqueToken(params.get("state")))
320661
+ return true;
320662
+ if (/[#&?](?:access_token|id_token)=/.test(url.hash) || params.has("access_token") || params.has("id_token")) {
320663
+ return true;
320664
+ }
320665
+ for (const key of params.keys()) {
320666
+ if (FLASH_QUERY_KEYS.has(key.toLowerCase()))
320667
+ return true;
320668
+ }
320669
+ const otPath = ONE_TIME_PATH_PREFIX_RE.exec(path);
320670
+ if (otPath) {
320671
+ let seg = otPath[1];
320672
+ try {
320673
+ seg = decodeURIComponent(seg);
320674
+ } catch {
320675
+ }
320676
+ if (isOpaqueToken(seg))
320677
+ return true;
320678
+ }
320679
+ for (const [key, value] of params) {
320680
+ if (ONE_TIME_TOKEN_QUERY_KEYS.has(key.toLowerCase()) && isOpaqueToken(value))
320681
+ return true;
320682
+ }
320683
+ const dl = DOWNLOAD_PATH_RE.exec(path);
320684
+ if (dl && (/\.[a-z0-9]{2,5}$/i.test(dl[1]) || /\d/.test(dl[1])))
320685
+ return true;
320686
+ for (const [key, value] of params) {
320687
+ if (SESSION_TOKEN_QUERY_KEYS.has(key.toLowerCase()) && isOpaqueToken(value))
320688
+ return true;
320689
+ }
320690
+ return false;
320691
+ }
320692
+ function getAdaptiveDebtRoutes(state2) {
320693
+ const excluded = (r) => {
320694
+ if (r === "/")
320695
+ return true;
320696
+ const item = state2.frontier.get(r);
320697
+ if (item?.source === "link-seen" && item.attempted === true)
320698
+ return true;
320699
+ if (visitedSatisfies(state2, r))
320700
+ return true;
320701
+ if (item?.source !== "link-seen" && isTransientLanding(r))
320702
+ return true;
320703
+ return false;
320704
+ };
320705
+ const ranked = (0, exploration_state_js_1.getRankedFrontier)(state2, { preferShallow: true }).filter((r) => !excluded(r));
320706
+ const rankedSet = new Set(ranked);
320707
+ const navigatedUncaptured = [];
320708
+ for (const r of state2.frontier.keys()) {
320709
+ if (!rankedSet.has(r) && !excluded(r))
320710
+ navigatedUncaptured.push(r);
320711
+ }
320712
+ return ranked.concat(navigatedUncaptured);
320713
+ }
320714
+ function listTransientDebtSuppressions(state2) {
320715
+ const out = [];
320716
+ for (const [r, item] of state2.frontier) {
320717
+ if (r === "/" || item.source === "link-seen")
320718
+ continue;
320719
+ if (visitedSatisfies(state2, r))
320720
+ continue;
320721
+ if (isTransientLanding(r))
320722
+ out.push(r);
320723
+ }
320724
+ return out;
320725
+ }
320590
320726
  }
320591
320727
  });
320592
320728
 
@@ -324664,21 +324800,16 @@ ${inboxPromptBlock}`;
324664
324800
  let discoveryCreditedThrough = 0;
324665
324801
  let adaptiveLastDiscoveryIteration = Number.NEGATIVE_INFINITY;
324666
324802
  let adaptiveDiscoveryLeaseUsed = false;
324803
+ let loggedTransientDebtSuppression = false;
324667
324804
  const adaptiveDebtRoutes = () => {
324668
- const isAttemptedLinkEntry = (r) => {
324669
- const item = state2.frontier.get(r);
324670
- return item?.source === "link-seen" && item.attempted === true;
324671
- };
324672
- const isSatisfied = (r) => (0, survey_link_frontier_js_1.visitedSatisfies)(state2, r);
324673
- const ranked = (0, exploration_state_js_1.getRankedFrontier)(state2, { preferShallow: true }).filter((r) => r !== "/" && !isAttemptedLinkEntry(r) && !isSatisfied(r));
324674
- const rankedSet = new Set(ranked);
324675
- const navigatedUncaptured = [];
324676
- for (const r of state2.frontier.keys()) {
324677
- if (r !== "/" && !rankedSet.has(r) && !isAttemptedLinkEntry(r) && !isSatisfied(r)) {
324678
- navigatedUncaptured.push(r);
324805
+ if (!loggedTransientDebtSuppression) {
324806
+ const suppressed = (0, survey_link_frontier_js_1.listTransientDebtSuppressions)(state2);
324807
+ if (suppressed.length > 0) {
324808
+ loggedTransientDebtSuppression = true;
324809
+ logs2.push(` [debt-hygiene] excluded ${suppressed.length} transient landing(s) from adaptive debt: ${suppressed.slice(0, 6).join(", ")}${suppressed.length > 6 ? ` \u2026+${suppressed.length - 6}` : ""}`);
324679
324810
  }
324680
324811
  }
324681
- return ranked.concat(navigatedUncaptured);
324812
+ return (0, survey_link_frontier_js_1.getAdaptiveDebtRoutes)(state2);
324682
324813
  };
324683
324814
  const describeRankedRoutes = (routes, max) => routes.slice(0, max).map((r) => {
324684
324815
  const label = state2.frontier.get(r)?.label;
@@ -350732,7 +350863,7 @@ var require_package4 = __commonJS({
350732
350863
  "package.json"(exports, module) {
350733
350864
  module.exports = {
350734
350865
  name: "@validate.qa/runner",
350735
- version: "1.0.61",
350866
+ version: "1.0.63",
350736
350867
  description: "validate local test runner - execute Playwright tests on your machine, connected to validate.qa cloud.",
350737
350868
  bin: {
350738
350869
  "validate-runner": "dist/cli.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@validate.qa/runner",
3
- "version": "1.0.61",
3
+ "version": "1.0.63",
4
4
  "description": "validate local test runner - execute Playwright tests on your machine, connected to validate.qa cloud.",
5
5
  "bin": {
6
6
  "validate-runner": "dist/cli.js"