@validate.qa/runner 1.0.65 → 1.0.66
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.
- package/dist/cli.js +51 -11
- package/dist/cli.mjs +51 -11
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -73624,6 +73624,7 @@ var require_inbox_tools = __commonJS({
|
|
|
73624
73624
|
exports2.buildInboxPromptBlock = buildInboxPromptBlock;
|
|
73625
73625
|
exports2.guardVerificationCodeFabrication = guardVerificationCodeFabrication;
|
|
73626
73626
|
exports2.hasRegisterIntent = hasRegisterIntent;
|
|
73627
|
+
exports2.hasSignupTestIntent = hasSignupTestIntent;
|
|
73627
73628
|
exports2.resolveInboxRegistration = resolveInboxRegistration;
|
|
73628
73629
|
exports2.applyInboxRegistrationIdentity = applyInboxRegistrationIdentity;
|
|
73629
73630
|
exports2.isThrowawayRegisterSeedEmail = isThrowawayRegisterSeedEmail;
|
|
@@ -74167,6 +74168,9 @@ This project asked to REGISTER a new account, but this runner CANNOT receive ema
|
|
|
74167
74168
|
const v = variableContext.allTestVariables?.DISCOVERY_SHOULD_REGISTER ?? variableContext.publicTestVariables?.DISCOVERY_SHOULD_REGISTER ?? "";
|
|
74168
74169
|
return String(v).trim().toLowerCase() === "true";
|
|
74169
74170
|
}
|
|
74171
|
+
function hasSignupTestIntent(variableContext) {
|
|
74172
|
+
return variableContext?.allTestVariables?.DISCOVERY_ALLOW_SIGNUP_TESTS !== "false";
|
|
74173
|
+
}
|
|
74170
74174
|
function resolveInboxRegistration(opts) {
|
|
74171
74175
|
const config = (0, verification_inbox_js_1.loadVerificationInboxConfig)(opts.env ?? process.env);
|
|
74172
74176
|
if (!config)
|
|
@@ -95115,6 +95119,8 @@ var require_discover_generator = __commonJS({
|
|
|
95115
95119
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
95116
95120
|
exports2.MIN_BUG_DESCRIPTION_LENGTH = exports2.VALID_PLAYWRIGHT_GETBY_METHODS = exports2.BLOCKED_MCP_TOOLS_SCENARIO_GEN = void 0;
|
|
95117
95121
|
exports2.scenarioLooksLikeRegistration = scenarioLooksLikeRegistration;
|
|
95122
|
+
exports2.signupFeatureTestingAllowed = signupFeatureTestingAllowed;
|
|
95123
|
+
exports2.scenarioTouchesSignupAuthSurface = scenarioTouchesSignupAuthSurface;
|
|
95118
95124
|
exports2.filterMcpToolsForScenarioGen = filterMcpToolsForScenarioGen;
|
|
95119
95125
|
exports2.detectScenarioSignals = detectScenarioSignals;
|
|
95120
95126
|
exports2.scenarioStepsCoverAuth = scenarioStepsCoverAuth;
|
|
@@ -95202,6 +95208,19 @@ EMIT (the code you put in finish_generate) \u2014 do NOT hardcode the throwaway
|
|
|
95202
95208
|
- Tag the test \`@email-verify\`. Emit EXACTLY ONE test() in this file (one registration per run).
|
|
95203
95209
|
- End with a DURABLE assertion of the post-verification signed-in state (e.g. a Logout control, an account/dashboard landmark) in your OWN test body \u2014 the helper call is not itself a proof.`;
|
|
95204
95210
|
}
|
|
95211
|
+
function signupFeatureTestingAllowed(credentials) {
|
|
95212
|
+
if (!(0, discovery_lint_flags_js_1.isTestgenEmailVerifyEnabled)() || !(0, verification_inbox_js_1.loadVerificationInboxConfig)())
|
|
95213
|
+
return false;
|
|
95214
|
+
return credentials?.DISCOVERY_ALLOW_SIGNUP_TESTS !== "false";
|
|
95215
|
+
}
|
|
95216
|
+
var SIGNUP_AUTH_ROUTE_RE = /\/(sign-?up|verify-?email|email-?verification|create-?account|confirm-?email)\b/i;
|
|
95217
|
+
function scenarioTouchesSignupAuthSurface(scenario, pages) {
|
|
95218
|
+
const routes = [scenario.entryRoute, ...scenario.targetPages ?? []].filter((r) => !!r);
|
|
95219
|
+
if (routes.some((r) => SIGNUP_AUTH_ROUTE_RE.test(r)))
|
|
95220
|
+
return true;
|
|
95221
|
+
const authRoutes = new Set(pages.filter((p) => (p.pageType ?? "").toUpperCase() === "AUTH").map((p) => p.route));
|
|
95222
|
+
return routes.some((r) => authRoutes.has(r));
|
|
95223
|
+
}
|
|
95205
95224
|
exports2.BLOCKED_MCP_TOOLS_SCENARIO_GEN = /* @__PURE__ */ new Set([
|
|
95206
95225
|
"browser_install",
|
|
95207
95226
|
"browser_close",
|
|
@@ -98313,9 +98332,16 @@ ${tailBlock}`;
|
|
|
98313
98332
|
extraAuthEvidence: !!opts?.recipe || hasConfiguredLoginCredentials(credentials)
|
|
98314
98333
|
});
|
|
98315
98334
|
const baseSkeletonHadRegression = tags.includes("@regression");
|
|
98335
|
+
const selfProvisioningSignupScenario = signupFeatureTestingAllowed(credentials) && scenarioLooksLikeRegistration(scenario) && scenarioTouchesSignupAuthSurface(scenario, siteMap.pages);
|
|
98336
|
+
if (selfProvisioningSignupScenario) {
|
|
98337
|
+
for (const prereqTag of ["@needs-auth", "@inline-login", "@auth-guarded"]) {
|
|
98338
|
+
const idx = tags.indexOf(prereqTag);
|
|
98339
|
+
if (idx !== -1)
|
|
98340
|
+
tags.splice(idx, 1);
|
|
98341
|
+
}
|
|
98342
|
+
}
|
|
98316
98343
|
const hasVerifiedRecipe = !!opts?.recipe && tags.includes("@needs-auth");
|
|
98317
|
-
const
|
|
98318
|
-
const inboxGenConfig = (0, discovery_lint_flags_js_1.isTestgenEmailVerifyEnabled)() && projectHasRegisterIntent && !hasVerifiedRecipe && scenarioLooksLikeRegistration(scenario) ? (0, verification_inbox_js_1.loadVerificationInboxConfig)() : null;
|
|
98344
|
+
const inboxGenConfig = selfProvisioningSignupScenario ? (0, verification_inbox_js_1.loadVerificationInboxConfig)() : null;
|
|
98319
98345
|
let genInboxState = null;
|
|
98320
98346
|
let genInboxCredentials = credentials;
|
|
98321
98347
|
let genInboxSecret = null;
|
|
@@ -99262,7 +99288,8 @@ Scenario: "${scenario.name}" (${scenario.type})`);
|
|
|
99262
99288
|
} catch {
|
|
99263
99289
|
}
|
|
99264
99290
|
const recipe = authRecipe;
|
|
99265
|
-
const
|
|
99291
|
+
const selfProvisioningSignupScenario = signupFeatureTestingAllowed(credentials) && scenarioLooksLikeRegistration(scenario) && scenarioTouchesSignupAuthSurface(scenario, siteMap.pages);
|
|
99292
|
+
const replayLogin = !selfProvisioningSignupScenario && shouldReplayAuthRecipe(scenario.targetPages, siteMap.pages, recipe);
|
|
99266
99293
|
let effectiveRecipe = null;
|
|
99267
99294
|
if (replayLogin && recipe) {
|
|
99268
99295
|
const planLeaks = findSensitiveLiteralLeaks(JSON.stringify(recipe.replayPlan ?? []), credentials);
|
|
@@ -99369,7 +99396,8 @@ Scenario: "${scenario.name}" (${scenario.type})`);
|
|
|
99369
99396
|
return;
|
|
99370
99397
|
}
|
|
99371
99398
|
let effectiveRecipe = null;
|
|
99372
|
-
|
|
99399
|
+
const selfProvisioningSignupScenario = signupFeatureTestingAllowed(credentials) && scenarioLooksLikeRegistration(scenario) && scenarioTouchesSignupAuthSurface(scenario, siteMap.pages);
|
|
99400
|
+
if (!selfProvisioningSignupScenario && shouldReplayAuthRecipe(scenario.targetPages, siteMap.pages, authRecipe) && authRecipe) {
|
|
99373
99401
|
const planLeaks = findSensitiveLiteralLeaks(JSON.stringify(authRecipe.replayPlan ?? []), credentials);
|
|
99374
99402
|
if (planLeaks.length > 0) {
|
|
99375
99403
|
scenarioLogs.push(` Warning: login replay plan contains literal credential value(s) for ${planLeaks.join(", ")} \u2014 falling back to model-authored login for "${scenario.name}"`);
|
|
@@ -335170,6 +335198,7 @@ var require_discover_agent = __commonJS({
|
|
|
335170
335198
|
var discover_ai_planner_js_1 = require_discover_ai_planner();
|
|
335171
335199
|
var discovery_lint_flags_js_1 = require_discovery_lint_flags();
|
|
335172
335200
|
var verification_inbox_js_1 = require_verification_inbox();
|
|
335201
|
+
var inbox_tools_js_1 = require_inbox_tools();
|
|
335173
335202
|
var sitemap_builder_js_1 = require_sitemap_builder();
|
|
335174
335203
|
Object.defineProperty(exports2, "buildInMemorySiteMap", { enumerable: true, get: function() {
|
|
335175
335204
|
return sitemap_builder_js_1.buildInMemorySiteMap;
|
|
@@ -335183,11 +335212,16 @@ var require_discover_agent = __commonJS({
|
|
|
335183
335212
|
var canvas_detector_js_1 = require_canvas_detector();
|
|
335184
335213
|
var auth_recipe_js_1 = require_auth_recipe();
|
|
335185
335214
|
function plannerEmailVerifyArmed(ctx) {
|
|
335186
|
-
if (!(0, discovery_lint_flags_js_1.isTestgenEmailVerifyEnabled)())
|
|
335187
|
-
return false;
|
|
335188
|
-
if (ctx.variableContext?.allTestVariables?.DISCOVERY_SHOULD_REGISTER !== "true")
|
|
335215
|
+
if (!(0, discovery_lint_flags_js_1.isTestgenEmailVerifyEnabled)() || !(0, verification_inbox_js_1.loadVerificationInboxConfig)())
|
|
335189
335216
|
return false;
|
|
335190
|
-
return (0,
|
|
335217
|
+
return (0, inbox_tools_js_1.hasSignupTestIntent)(ctx.variableContext);
|
|
335218
|
+
}
|
|
335219
|
+
var PLANNER_AUTH_NAME_RE = /\b(auth|authentication|log[\s-]?in|sign[\s-]?in|sign[\s-]?up|signup|account|password|verify[\s-]?email)\b/i;
|
|
335220
|
+
var PLANNER_AUTH_ROUTE_RE = /\/(auth|login|sign-?in|sign-?up|signup|verify-?email|create-?account)\b/i;
|
|
335221
|
+
function featureLooksLikeAuth(featureName, focusRoutes) {
|
|
335222
|
+
if (featureName && PLANNER_AUTH_NAME_RE.test(featureName))
|
|
335223
|
+
return true;
|
|
335224
|
+
return (focusRoutes ?? []).some((r) => PLANNER_AUTH_ROUTE_RE.test(r));
|
|
335191
335225
|
}
|
|
335192
335226
|
async function runCanvasPreflight(ctx, sharedBrowser, log2) {
|
|
335193
335227
|
const cached = ctx.appRenderType ?? null;
|
|
@@ -335839,6 +335873,11 @@ Explore complete: ${exploreResult.pagesDiscovered} pages, ${exploreResult.elemen
|
|
|
335839
335873
|
authRedirectRoute: (0, shared_1.parseBoolFlag)(process.env.AUTH_RECIPE_STAMP) ? ctx.authRecipe?.redirectRoute ?? void 0 : void 0,
|
|
335840
335874
|
// Email-verify capability — only for scenario-producing modes; a survey emits
|
|
335841
335875
|
// featureGroups (no scenarios), so keep its prompt free of the round-trip block.
|
|
335876
|
+
// This site serves survey + FULL mode. Full mode is app-wide (no single feature
|
|
335877
|
+
// identity here), so we deliberately do NOT apply the auth-feature scope: the
|
|
335878
|
+
// per-scenario generator gates (scenarioLooksLikeRegistration +
|
|
335879
|
+
// scenarioTouchesSignupAuthSurface) still isolate non-auth scenarios. The
|
|
335880
|
+
// auth-feature scope IS applied at the DEEP call site where ctx.featureName is known.
|
|
335842
335881
|
emailVerifyArmed: mode !== "survey" && plannerEmailVerifyArmed(ctx),
|
|
335843
335882
|
testBudget
|
|
335844
335883
|
}, {
|
|
@@ -336427,9 +336466,10 @@ Plan (reused): ${resumeSavedScenarios.length} scenarios from the paused run.`);
|
|
|
336427
336466
|
// Email-verify capability: when armed, let the planner plan the full
|
|
336428
336467
|
// register→verify and forgot-password→reset round trips to completion
|
|
336429
336468
|
// (see the planner's "## Verification Inbox Available" block). Armed on the
|
|
336430
|
-
// SAME project-level predicate the generator uses (flag +
|
|
336469
|
+
// SAME project-level predicate the generator uses (flag + consent +
|
|
336431
336470
|
// configured inbox), so the planner never promises what generation can't do.
|
|
336432
|
-
|
|
336471
|
+
// Scoped to AUTH features: a non-auth feature has no signup surface to test.
|
|
336472
|
+
emailVerifyArmed: plannerEmailVerifyArmed(ctx) && featureLooksLikeAuth(ctx.featureName, augmentedFeatureFocusAreas),
|
|
336433
336473
|
testBudget: featureTestBudget
|
|
336434
336474
|
}, {
|
|
336435
336475
|
modelOverride: ctx.planModel ?? ctx.generateModel,
|
|
@@ -351055,7 +351095,7 @@ var require_package4 = __commonJS({
|
|
|
351055
351095
|
"package.json"(exports2, module2) {
|
|
351056
351096
|
module2.exports = {
|
|
351057
351097
|
name: "@validate.qa/runner",
|
|
351058
|
-
version: "1.0.
|
|
351098
|
+
version: "1.0.66",
|
|
351059
351099
|
description: "validate local test runner - execute Playwright tests on your machine, connected to validate.qa cloud.",
|
|
351060
351100
|
bin: {
|
|
351061
351101
|
"validate-runner": "dist/cli.js"
|
package/dist/cli.mjs
CHANGED
|
@@ -73629,6 +73629,7 @@ var require_inbox_tools = __commonJS({
|
|
|
73629
73629
|
exports.buildInboxPromptBlock = buildInboxPromptBlock;
|
|
73630
73630
|
exports.guardVerificationCodeFabrication = guardVerificationCodeFabrication;
|
|
73631
73631
|
exports.hasRegisterIntent = hasRegisterIntent;
|
|
73632
|
+
exports.hasSignupTestIntent = hasSignupTestIntent;
|
|
73632
73633
|
exports.resolveInboxRegistration = resolveInboxRegistration;
|
|
73633
73634
|
exports.applyInboxRegistrationIdentity = applyInboxRegistrationIdentity;
|
|
73634
73635
|
exports.isThrowawayRegisterSeedEmail = isThrowawayRegisterSeedEmail;
|
|
@@ -74172,6 +74173,9 @@ This project asked to REGISTER a new account, but this runner CANNOT receive ema
|
|
|
74172
74173
|
const v = variableContext.allTestVariables?.DISCOVERY_SHOULD_REGISTER ?? variableContext.publicTestVariables?.DISCOVERY_SHOULD_REGISTER ?? "";
|
|
74173
74174
|
return String(v).trim().toLowerCase() === "true";
|
|
74174
74175
|
}
|
|
74176
|
+
function hasSignupTestIntent(variableContext) {
|
|
74177
|
+
return variableContext?.allTestVariables?.DISCOVERY_ALLOW_SIGNUP_TESTS !== "false";
|
|
74178
|
+
}
|
|
74175
74179
|
function resolveInboxRegistration(opts) {
|
|
74176
74180
|
const config = (0, verification_inbox_js_1.loadVerificationInboxConfig)(opts.env ?? process.env);
|
|
74177
74181
|
if (!config)
|
|
@@ -95120,6 +95124,8 @@ var require_discover_generator = __commonJS({
|
|
|
95120
95124
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
95121
95125
|
exports.MIN_BUG_DESCRIPTION_LENGTH = exports.VALID_PLAYWRIGHT_GETBY_METHODS = exports.BLOCKED_MCP_TOOLS_SCENARIO_GEN = void 0;
|
|
95122
95126
|
exports.scenarioLooksLikeRegistration = scenarioLooksLikeRegistration;
|
|
95127
|
+
exports.signupFeatureTestingAllowed = signupFeatureTestingAllowed;
|
|
95128
|
+
exports.scenarioTouchesSignupAuthSurface = scenarioTouchesSignupAuthSurface;
|
|
95123
95129
|
exports.filterMcpToolsForScenarioGen = filterMcpToolsForScenarioGen;
|
|
95124
95130
|
exports.detectScenarioSignals = detectScenarioSignals;
|
|
95125
95131
|
exports.scenarioStepsCoverAuth = scenarioStepsCoverAuth;
|
|
@@ -95207,6 +95213,19 @@ EMIT (the code you put in finish_generate) \u2014 do NOT hardcode the throwaway
|
|
|
95207
95213
|
- Tag the test \`@email-verify\`. Emit EXACTLY ONE test() in this file (one registration per run).
|
|
95208
95214
|
- End with a DURABLE assertion of the post-verification signed-in state (e.g. a Logout control, an account/dashboard landmark) in your OWN test body \u2014 the helper call is not itself a proof.`;
|
|
95209
95215
|
}
|
|
95216
|
+
function signupFeatureTestingAllowed(credentials) {
|
|
95217
|
+
if (!(0, discovery_lint_flags_js_1.isTestgenEmailVerifyEnabled)() || !(0, verification_inbox_js_1.loadVerificationInboxConfig)())
|
|
95218
|
+
return false;
|
|
95219
|
+
return credentials?.DISCOVERY_ALLOW_SIGNUP_TESTS !== "false";
|
|
95220
|
+
}
|
|
95221
|
+
var SIGNUP_AUTH_ROUTE_RE = /\/(sign-?up|verify-?email|email-?verification|create-?account|confirm-?email)\b/i;
|
|
95222
|
+
function scenarioTouchesSignupAuthSurface(scenario, pages) {
|
|
95223
|
+
const routes = [scenario.entryRoute, ...scenario.targetPages ?? []].filter((r) => !!r);
|
|
95224
|
+
if (routes.some((r) => SIGNUP_AUTH_ROUTE_RE.test(r)))
|
|
95225
|
+
return true;
|
|
95226
|
+
const authRoutes = new Set(pages.filter((p) => (p.pageType ?? "").toUpperCase() === "AUTH").map((p) => p.route));
|
|
95227
|
+
return routes.some((r) => authRoutes.has(r));
|
|
95228
|
+
}
|
|
95210
95229
|
exports.BLOCKED_MCP_TOOLS_SCENARIO_GEN = /* @__PURE__ */ new Set([
|
|
95211
95230
|
"browser_install",
|
|
95212
95231
|
"browser_close",
|
|
@@ -98318,9 +98337,16 @@ ${tailBlock}`;
|
|
|
98318
98337
|
extraAuthEvidence: !!opts?.recipe || hasConfiguredLoginCredentials(credentials)
|
|
98319
98338
|
});
|
|
98320
98339
|
const baseSkeletonHadRegression = tags.includes("@regression");
|
|
98340
|
+
const selfProvisioningSignupScenario = signupFeatureTestingAllowed(credentials) && scenarioLooksLikeRegistration(scenario) && scenarioTouchesSignupAuthSurface(scenario, siteMap.pages);
|
|
98341
|
+
if (selfProvisioningSignupScenario) {
|
|
98342
|
+
for (const prereqTag of ["@needs-auth", "@inline-login", "@auth-guarded"]) {
|
|
98343
|
+
const idx = tags.indexOf(prereqTag);
|
|
98344
|
+
if (idx !== -1)
|
|
98345
|
+
tags.splice(idx, 1);
|
|
98346
|
+
}
|
|
98347
|
+
}
|
|
98321
98348
|
const hasVerifiedRecipe = !!opts?.recipe && tags.includes("@needs-auth");
|
|
98322
|
-
const
|
|
98323
|
-
const inboxGenConfig = (0, discovery_lint_flags_js_1.isTestgenEmailVerifyEnabled)() && projectHasRegisterIntent && !hasVerifiedRecipe && scenarioLooksLikeRegistration(scenario) ? (0, verification_inbox_js_1.loadVerificationInboxConfig)() : null;
|
|
98349
|
+
const inboxGenConfig = selfProvisioningSignupScenario ? (0, verification_inbox_js_1.loadVerificationInboxConfig)() : null;
|
|
98324
98350
|
let genInboxState = null;
|
|
98325
98351
|
let genInboxCredentials = credentials;
|
|
98326
98352
|
let genInboxSecret = null;
|
|
@@ -99267,7 +99293,8 @@ Scenario: "${scenario.name}" (${scenario.type})`);
|
|
|
99267
99293
|
} catch {
|
|
99268
99294
|
}
|
|
99269
99295
|
const recipe = authRecipe;
|
|
99270
|
-
const
|
|
99296
|
+
const selfProvisioningSignupScenario = signupFeatureTestingAllowed(credentials) && scenarioLooksLikeRegistration(scenario) && scenarioTouchesSignupAuthSurface(scenario, siteMap.pages);
|
|
99297
|
+
const replayLogin = !selfProvisioningSignupScenario && shouldReplayAuthRecipe(scenario.targetPages, siteMap.pages, recipe);
|
|
99271
99298
|
let effectiveRecipe = null;
|
|
99272
99299
|
if (replayLogin && recipe) {
|
|
99273
99300
|
const planLeaks = findSensitiveLiteralLeaks(JSON.stringify(recipe.replayPlan ?? []), credentials);
|
|
@@ -99374,7 +99401,8 @@ Scenario: "${scenario.name}" (${scenario.type})`);
|
|
|
99374
99401
|
return;
|
|
99375
99402
|
}
|
|
99376
99403
|
let effectiveRecipe = null;
|
|
99377
|
-
|
|
99404
|
+
const selfProvisioningSignupScenario = signupFeatureTestingAllowed(credentials) && scenarioLooksLikeRegistration(scenario) && scenarioTouchesSignupAuthSurface(scenario, siteMap.pages);
|
|
99405
|
+
if (!selfProvisioningSignupScenario && shouldReplayAuthRecipe(scenario.targetPages, siteMap.pages, authRecipe) && authRecipe) {
|
|
99378
99406
|
const planLeaks = findSensitiveLiteralLeaks(JSON.stringify(authRecipe.replayPlan ?? []), credentials);
|
|
99379
99407
|
if (planLeaks.length > 0) {
|
|
99380
99408
|
scenarioLogs.push(` Warning: login replay plan contains literal credential value(s) for ${planLeaks.join(", ")} \u2014 falling back to model-authored login for "${scenario.name}"`);
|
|
@@ -335175,6 +335203,7 @@ var require_discover_agent = __commonJS({
|
|
|
335175
335203
|
var discover_ai_planner_js_1 = require_discover_ai_planner();
|
|
335176
335204
|
var discovery_lint_flags_js_1 = require_discovery_lint_flags();
|
|
335177
335205
|
var verification_inbox_js_1 = require_verification_inbox();
|
|
335206
|
+
var inbox_tools_js_1 = require_inbox_tools();
|
|
335178
335207
|
var sitemap_builder_js_1 = require_sitemap_builder();
|
|
335179
335208
|
Object.defineProperty(exports, "buildInMemorySiteMap", { enumerable: true, get: function() {
|
|
335180
335209
|
return sitemap_builder_js_1.buildInMemorySiteMap;
|
|
@@ -335188,11 +335217,16 @@ var require_discover_agent = __commonJS({
|
|
|
335188
335217
|
var canvas_detector_js_1 = require_canvas_detector();
|
|
335189
335218
|
var auth_recipe_js_1 = require_auth_recipe();
|
|
335190
335219
|
function plannerEmailVerifyArmed(ctx) {
|
|
335191
|
-
if (!(0, discovery_lint_flags_js_1.isTestgenEmailVerifyEnabled)())
|
|
335192
|
-
return false;
|
|
335193
|
-
if (ctx.variableContext?.allTestVariables?.DISCOVERY_SHOULD_REGISTER !== "true")
|
|
335220
|
+
if (!(0, discovery_lint_flags_js_1.isTestgenEmailVerifyEnabled)() || !(0, verification_inbox_js_1.loadVerificationInboxConfig)())
|
|
335194
335221
|
return false;
|
|
335195
|
-
return (0,
|
|
335222
|
+
return (0, inbox_tools_js_1.hasSignupTestIntent)(ctx.variableContext);
|
|
335223
|
+
}
|
|
335224
|
+
var PLANNER_AUTH_NAME_RE = /\b(auth|authentication|log[\s-]?in|sign[\s-]?in|sign[\s-]?up|signup|account|password|verify[\s-]?email)\b/i;
|
|
335225
|
+
var PLANNER_AUTH_ROUTE_RE = /\/(auth|login|sign-?in|sign-?up|signup|verify-?email|create-?account)\b/i;
|
|
335226
|
+
function featureLooksLikeAuth(featureName, focusRoutes) {
|
|
335227
|
+
if (featureName && PLANNER_AUTH_NAME_RE.test(featureName))
|
|
335228
|
+
return true;
|
|
335229
|
+
return (focusRoutes ?? []).some((r) => PLANNER_AUTH_ROUTE_RE.test(r));
|
|
335196
335230
|
}
|
|
335197
335231
|
async function runCanvasPreflight(ctx, sharedBrowser, log2) {
|
|
335198
335232
|
const cached = ctx.appRenderType ?? null;
|
|
@@ -335844,6 +335878,11 @@ Explore complete: ${exploreResult.pagesDiscovered} pages, ${exploreResult.elemen
|
|
|
335844
335878
|
authRedirectRoute: (0, shared_1.parseBoolFlag)(process.env.AUTH_RECIPE_STAMP) ? ctx.authRecipe?.redirectRoute ?? void 0 : void 0,
|
|
335845
335879
|
// Email-verify capability — only for scenario-producing modes; a survey emits
|
|
335846
335880
|
// featureGroups (no scenarios), so keep its prompt free of the round-trip block.
|
|
335881
|
+
// This site serves survey + FULL mode. Full mode is app-wide (no single feature
|
|
335882
|
+
// identity here), so we deliberately do NOT apply the auth-feature scope: the
|
|
335883
|
+
// per-scenario generator gates (scenarioLooksLikeRegistration +
|
|
335884
|
+
// scenarioTouchesSignupAuthSurface) still isolate non-auth scenarios. The
|
|
335885
|
+
// auth-feature scope IS applied at the DEEP call site where ctx.featureName is known.
|
|
335847
335886
|
emailVerifyArmed: mode !== "survey" && plannerEmailVerifyArmed(ctx),
|
|
335848
335887
|
testBudget
|
|
335849
335888
|
}, {
|
|
@@ -336432,9 +336471,10 @@ Plan (reused): ${resumeSavedScenarios.length} scenarios from the paused run.`);
|
|
|
336432
336471
|
// Email-verify capability: when armed, let the planner plan the full
|
|
336433
336472
|
// register→verify and forgot-password→reset round trips to completion
|
|
336434
336473
|
// (see the planner's "## Verification Inbox Available" block). Armed on the
|
|
336435
|
-
// SAME project-level predicate the generator uses (flag +
|
|
336474
|
+
// SAME project-level predicate the generator uses (flag + consent +
|
|
336436
336475
|
// configured inbox), so the planner never promises what generation can't do.
|
|
336437
|
-
|
|
336476
|
+
// Scoped to AUTH features: a non-auth feature has no signup surface to test.
|
|
336477
|
+
emailVerifyArmed: plannerEmailVerifyArmed(ctx) && featureLooksLikeAuth(ctx.featureName, augmentedFeatureFocusAreas),
|
|
336438
336478
|
testBudget: featureTestBudget
|
|
336439
336479
|
}, {
|
|
336440
336480
|
modelOverride: ctx.planModel ?? ctx.generateModel,
|
|
@@ -351060,7 +351100,7 @@ var require_package4 = __commonJS({
|
|
|
351060
351100
|
"package.json"(exports, module) {
|
|
351061
351101
|
module.exports = {
|
|
351062
351102
|
name: "@validate.qa/runner",
|
|
351063
|
-
version: "1.0.
|
|
351103
|
+
version: "1.0.66",
|
|
351064
351104
|
description: "validate local test runner - execute Playwright tests on your machine, connected to validate.qa cloud.",
|
|
351065
351105
|
bin: {
|
|
351066
351106
|
"validate-runner": "dist/cli.js"
|
package/package.json
CHANGED