@bugzy-ai/bugzy 1.13.1 → 1.14.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.
package/dist/index.js CHANGED
@@ -34,31 +34,6 @@ var MCP_SERVERS = {
34
34
  }
35
35
  }
36
36
  },
37
- playwright: {
38
- provider: "playwright",
39
- name: "Playwright",
40
- description: "Playwright MCP server for browser automation",
41
- requiresCredentials: false,
42
- npmPackages: ["@playwright/mcp"],
43
- config: {
44
- command: "playwright-mcp",
45
- args: [
46
- "--browser",
47
- "chromium",
48
- "--secrets",
49
- ".env",
50
- "--no-sandbox",
51
- "--viewport-size",
52
- "1280x720"
53
- ]
54
- },
55
- containerExtensions: {
56
- args: ["--headless"],
57
- env: {
58
- PLAYWRIGHT_BROWSERS_PATH: "/opt/ms-playwright"
59
- }
60
- }
61
- },
62
37
  notion: {
63
38
  provider: "notion",
64
39
  name: "Notion",
@@ -1609,6 +1584,40 @@ The input format determines the trigger source and context extraction strategy.`
1609
1584
  Store the detected trigger for use in output routing:
1610
1585
  - Set variable: \`TRIGGER_SOURCE\` = [GITHUB_PR | SLACK_MESSAGE | CI_CD | MANUAL]
1611
1586
  - This determines output formatting and delivery channel`
1587
+ },
1588
+ // Step 5c: Coverage Gap vs. Ambiguity (inline)
1589
+ {
1590
+ inline: true,
1591
+ title: "Coverage Gap vs. Ambiguity",
1592
+ content: `### Coverage Gap vs. Ambiguity
1593
+
1594
+ When the trigger indicates a feature has been implemented and is ready for testing (Jira "Ready to Test", PR merged, CI/CD pipeline):
1595
+
1596
+ **Missing test coverage for the referenced feature is a COVERAGE GAP, not an ambiguity.**
1597
+
1598
+ - The developer/team is asserting the feature exists and is ready for testing
1599
+ - "Not yet explored" or "out of scope" in the test plan means the QA team hasn't tested it yet \u2014 it does NOT mean the feature doesn't exist
1600
+ - Do NOT classify as CRITICAL based on stale documentation or knowledge base gaps
1601
+ - If project-context.md or the Jira issue references the feature, assume it exists until browser exploration proves otherwise
1602
+ - Coverage gaps are handled in the "Create Tests for Coverage Gaps" step below \u2014 do NOT block here
1603
+
1604
+ ### If You Browse the App and Cannot Find the Referenced Feature
1605
+
1606
+ Apply the Clarification Protocol's **"Execution Obstacle vs. Requirement Ambiguity"** principle:
1607
+
1608
+ This is an **execution obstacle**, NOT a requirement ambiguity \u2014 because the authoritative trigger source (Jira issue, PR, team request) asserts the feature exists. Common causes for not finding it:
1609
+ - **Missing role/tier**: You're logged in as a basic user but the feature requires admin/premium access
1610
+ - **Missing test data**: Required test accounts or data haven't been configured in \`.env.testdata\`
1611
+ - **Feature flags**: The feature is behind a flag not enabled in the test environment
1612
+ - **Environment config**: The feature requires specific environment variables or deployment settings
1613
+
1614
+ **Action: PROCEED to "Create Tests for Coverage Gaps".** Do NOT BLOCK.
1615
+ - Create test cases and specs that reference the feature as described in the trigger
1616
+ - Add placeholder env vars to \`.env.testdata\` for any missing credentials
1617
+ - Notify the team (via team-communicator) about the access obstacle and what needs to be configured
1618
+ - Tests may fail until the obstacle is resolved \u2014 this is expected and acceptable
1619
+
1620
+ **Only classify as CRITICAL (and BLOCK) if NO authoritative trigger source claims the feature exists** \u2014 e.g., a vague manual request with no Jira/PR backing.`
1612
1621
  },
1613
1622
  // Step 6: Clarification Protocol (library)
1614
1623
  "clarification-protocol",
@@ -2286,7 +2295,7 @@ var CONTENT = `You are an expert automated test execution specialist with deep e
2286
2295
 
2287
2296
  3. **Environment Setup**: Before test execution:
2288
2297
  - Read \`.env.testdata\` to get non-secret environment variable values (TEST_BASE_URL, TEST_OWNER_EMAIL, etc.)
2289
- - For secrets, variable names will be passed to Playwright MCP which reads them from .env at runtime
2298
+ - For secrets, variable names are available as environment variables (playwright-cli inherits the process environment)
2290
2299
 
2291
2300
  4. **Test Case Parsing**: You will receive a test case file path. Parse the test case to extract:
2292
2301
  - Test steps and actions to perform
@@ -2294,16 +2303,16 @@ var CONTENT = `You are an expert automated test execution specialist with deep e
2294
2303
  - Test data and input values (replace any \${TEST_*} or $TEST_* variables with actual values from .env)
2295
2304
  - Preconditions and setup requirements
2296
2305
 
2297
- 5. **Browser Automation Execution**: Using the Playwright MCP server:
2298
- - Launch a browser instance with appropriate configuration
2299
- - Execute each test step sequentially
2306
+ 5. **Browser Automation Execution**: Using playwright-cli (CLI-based browser automation):
2307
+ - Launch a browser: \`playwright-cli open <url>\`
2308
+ - Execute each test step sequentially using CLI commands: \`click\`, \`fill\`, \`select\`, \`hover\`, etc.
2309
+ - Use \`snapshot\` to inspect page state and find element references (@e1, @e2, etc.)
2300
2310
  - Handle dynamic waits and element interactions intelligently
2301
2311
  - Manage browser state between steps
2302
2312
  - **IMPORTANT - Environment Variable Handling**:
2303
2313
  - When test cases contain environment variables:
2304
2314
  - For non-secrets (TEST_BASE_URL, TEST_OWNER_EMAIL): Read actual values from .env.testdata and use them directly
2305
- - For secrets (TEST_OWNER_PASSWORD, API keys): Pass variable name to Playwright MCP for runtime substitution
2306
- - Playwright MCP automatically reads .env for secrets and injects them at runtime
2315
+ - For secrets (TEST_OWNER_PASSWORD, API keys): playwright-cli inherits environment variables from the process
2307
2316
  - Example: Test says "Navigate to TEST_BASE_URL/login" \u2192 Read TEST_BASE_URL from .env.testdata, use the actual URL
2308
2317
 
2309
2318
  6. **Evidence Collection at Each Step**:
@@ -2328,7 +2337,7 @@ var CONTENT = `You are an expert automated test execution specialist with deep e
2328
2337
  - \`steps.json\`: Structured steps with timestamps, video time synchronization, and detailed descriptions (see schema)
2329
2338
 
2330
2339
  Video handling:
2331
- - Playwright automatically saves videos to \`.playwright-mcp/\` folder
2340
+ - Videos are automatically saved to \`.playwright-mcp/\` folder via PLAYWRIGHT_MCP_SAVE_VIDEO env var
2332
2341
  - Find the latest video: \`ls -t .playwright-mcp/*.webm 2>/dev/null | head -1\`
2333
2342
  - Store ONLY the filename in summary.json: \`{ "video": { "filename": "basename.webm" } }\`
2334
2343
  - Do NOT copy, move, or delete video files - external service handles uploads
@@ -2367,8 +2376,7 @@ var CONTENT = `You are an expert automated test execution specialist with deep e
2367
2376
  - Identify all TEST_* variable references (e.g., TEST_BASE_URL, TEST_OWNER_EMAIL, TEST_OWNER_PASSWORD)
2368
2377
  - Read .env.testdata to get actual values for non-secret variables
2369
2378
  - For non-secrets (TEST_BASE_URL, TEST_OWNER_EMAIL, etc.): Use actual values from .env.testdata directly in test execution
2370
- - For secrets (TEST_OWNER_PASSWORD, API keys, etc.): Pass variable names to Playwright MCP for runtime injection from .env
2371
- - Playwright MCP will read .env and inject secret values during browser automation
2379
+ - For secrets (TEST_OWNER_PASSWORD, API keys, etc.): playwright-cli inherits env vars from the process environment
2372
2380
  - If a required variable is not found in .env.testdata, log a warning but continue
2373
2381
 
2374
2382
  5. Extract execution ID from the execution environment:
@@ -2382,7 +2390,7 @@ var CONTENT = `You are an expert automated test execution specialist with deep e
2382
2390
  - Describe what action will be performed (communicate to user)
2383
2391
  - Log the step being executed with timestamp
2384
2392
  - Calculate elapsed time from test start (for videoTimeSeconds)
2385
- - Execute the action using Playwright's robust selectors
2393
+ - Execute the action using playwright-cli commands (click, fill, select, etc. with element refs)
2386
2394
  - Wait for page stability
2387
2395
  - Validate expected behavior
2388
2396
  - Record findings and actual behavior
@@ -2457,12 +2465,11 @@ var CONTENT = `You are an expert automated test execution specialist with deep e
2457
2465
  **Environment Variable Handling:**
2458
2466
  - Read .env.testdata at the start of execution to get non-secret environment variables
2459
2467
  - For non-secrets (TEST_BASE_URL, TEST_OWNER_EMAIL, etc.): Use actual values from .env.testdata directly
2460
- - For secrets (TEST_OWNER_PASSWORD, API keys): Pass variable names to Playwright MCP for runtime injection
2461
- - Playwright MCP reads .env for secrets and injects them during browser automation
2468
+ - For secrets (TEST_OWNER_PASSWORD, API keys): playwright-cli inherits env vars from the process environment
2462
2469
  - DO NOT read .env yourself (security policy - it contains only secrets)
2463
2470
  - DO NOT make up fake values or fallbacks
2464
2471
  - If a variable is missing from .env.testdata, log a warning
2465
- - If Playwright MCP reports a secret is missing/empty, that indicates .env is misconfigured
2472
+ - If a secret env var is missing/empty, that indicates .env is misconfigured
2466
2473
  - Document which environment variables were used in the test run summary
2467
2474
 
2468
2475
  When you encounter ambiguous test steps, make intelligent decisions based on common testing patterns and document your interpretation. Always prioritize capturing evidence over speed of execution. Your goal is to create a complete, reproducible record of the test execution that another tester could use to understand exactly what happened.`;
@@ -2509,7 +2516,7 @@ var CONTENT2 = `You are an expert Playwright test automation engineer specializi
2509
2516
  - Update the manual test case file with the automated_test reference
2510
2517
  - Create supporting artifacts: Page Objects, fixtures, helpers, components, types
2511
2518
 
2512
- 5. **Mandatory Application Exploration**: NEVER generate Page Objects without exploring the live application first using Playwright MCP tools:
2519
+ 5. **Mandatory Application Exploration**: NEVER generate Page Objects without exploring the live application first using playwright-cli:
2513
2520
  - Navigate to pages, authenticate, inspect elements
2514
2521
  - Capture screenshots for documentation
2515
2522
  - Document exact role names, labels, text, URLs
@@ -2540,7 +2547,7 @@ var CONTENT2 = `You are an expert Playwright test automation engineer specializi
2540
2547
 
2541
2548
  **STEP 2: Build Missing Infrastructure** (if needed)
2542
2549
 
2543
- - **Explore feature under test**: Use Playwright MCP tools to:
2550
+ - **Explore feature under test**: Use playwright-cli to:
2544
2551
  * Navigate to the feature's pages
2545
2552
  * Inspect elements and gather selectors (role, label, text)
2546
2553
  * Document actual URLs from the browser
@@ -2747,8 +2754,8 @@ var CONTENT2 = `You are an expert Playwright test automation engineer specializi
2747
2754
  - Create test interdependencies - tests must be independent
2748
2755
 
2749
2756
  \u2705 **ALWAYS**:
2750
- - Explore application using Playwright MCP before generating code
2751
- - Verify selectors in live browser using browser_select tool
2757
+ - Explore application using playwright-cli before generating code
2758
+ - Verify selectors in live browser using playwright-cli snapshot
2752
2759
  - Document actual URLs from browser address bar
2753
2760
  - Take screenshots for documentation
2754
2761
  - Use role-based selectors as first priority
@@ -2820,7 +2827,7 @@ var CONTENT3 = `You are an expert Playwright test debugger and fixer with deep e
2820
2827
  - Brittle selectors (CSS classes, IDs that change)
2821
2828
 
2822
2829
  4. **Debug Using Browser**: When needed, explore the application manually:
2823
- - Use Playwright MCP to open browser
2830
+ - Use playwright-cli to open browser (\`playwright-cli open <url>\`)
2824
2831
  - Navigate to the relevant page
2825
2832
  - Inspect elements to find correct selectors
2826
2833
  - Manually perform test steps to understand actual behavior
@@ -2930,7 +2937,7 @@ var CONTENT3 = `You are an expert Playwright test debugger and fixer with deep e
2930
2937
  - Check for screenshot/trace file references
2931
2938
 
2932
2939
  **Step 3: Reproduce and Debug**
2933
- - Open browser via Playwright MCP if needed
2940
+ - Open browser via playwright-cli if needed (\`playwright-cli open <url>\`)
2934
2941
  - Navigate to relevant page
2935
2942
  - Manually execute test steps
2936
2943
  - Identify discrepancy between test expectations and actual behavior
@@ -3053,13 +3060,14 @@ var CONTENT3 = `You are an expert Playwright test debugger and fixer with deep e
3053
3060
  - NEVER read \`.env\` file (contains secrets only)
3054
3061
  - If test needs new environment variable, update \`.env.testdata\`
3055
3062
 
3056
- 9. **Using Playwright MCP for Debugging**:
3057
- - You have direct access to Playwright MCP
3058
- - Open browser: Request to launch Playwright
3059
- - Navigate: Go to URLs relevant to failing test
3060
- - Inspect elements: Find correct selectors
3061
- - Execute test steps manually: Understand actual behavior
3062
- - Close browser when done
3063
+ 9. **Using playwright-cli for Debugging**:
3064
+ - You have direct access to playwright-cli via Bash
3065
+ - Open browser: \`playwright-cli open <url>\`
3066
+ - Take snapshot: \`playwright-cli snapshot\` to get element refs (@e1, @e2, etc.)
3067
+ - Navigate: \`playwright-cli navigate <url>\`
3068
+ - Inspect elements: Use \`snapshot\` to find correct selectors and element refs
3069
+ - Execute test steps manually: Use \`click\`, \`fill\`, \`select\` commands
3070
+ - Close browser: \`playwright-cli close\`
3063
3071
 
3064
3072
  10. **Test Stability Best Practices**:
3065
3073
  - Replace all \`waitForTimeout()\` with specific waits
@@ -3354,6 +3362,24 @@ var CONTENT5 = `You are a Team Communication Specialist who communicates like a
3354
3362
 
3355
3363
  **Key Principle:** If it takes more than 30 seconds to read, it's too long.
3356
3364
 
3365
+ ## CRITICAL: Always Post Messages
3366
+
3367
+ When you are invoked, your job is to POST a message to Slack \u2014 not just compose one.
3368
+
3369
+ **You MUST call \`slack_post_message\` or \`slack_post_rich_message\`** to deliver the message. Composing a message as text output without posting is NOT completing your task.
3370
+
3371
+ **NEVER:**
3372
+ - Return a draft without posting it
3373
+ - Ask "should I post this?" \u2014 if you were invoked, the answer is yes
3374
+ - Compose text and wait for approval before posting
3375
+
3376
+ **ALWAYS:**
3377
+ 1. Identify the correct channel (from project-context.md or the invocation context)
3378
+ 2. Compose the message following the guidelines below
3379
+ 3. Call the Slack API tool to POST the message
3380
+ 4. If a thread reply is needed, post main message first, then reply in thread
3381
+ 5. Report back: channel name, message timestamp, and confirmation it was posted
3382
+
3357
3383
  ## Message Type Detection
3358
3384
 
3359
3385
  Before composing, identify the message type:
@@ -5792,7 +5818,7 @@ var INTEGRATIONS = {
5792
5818
  id: "playwright",
5793
5819
  name: "Playwright",
5794
5820
  provider: "playwright",
5795
- requiredMCP: "mcp__playwright__*",
5821
+ // No requiredMCP — uses playwright-cli (CLI tool), not MCP server
5796
5822
  isLocal: true,
5797
5823
  // Playwright runs locally, no external connector needed
5798
5824
  integrationType: "local"
@@ -6244,7 +6270,9 @@ If the Clarification Protocol determined project maturity, adjust exploration de
6244
6270
  - **Growing project**: Use requirement clarity as-is (standard protocol)
6245
6271
  - **Mature project**: Trust knowledge base \u2014 can stay at suggested depth or go one level shallower if KB covers the feature
6246
6272
 
6247
- **Always verify features exist before testing them.** If exploration reveals that a referenced page or feature does not exist in the application, this is CRITICAL severity \u2014 escalate via the Clarification Protocol regardless of maturity level. Do NOT silently adapt or work around the missing feature.
6273
+ **Always verify features exist before testing them.** If exploration reveals that a referenced page or feature does not exist in the application, apply the Clarification Protocol's "Execution Obstacle vs. Requirement Ambiguity" principle:
6274
+ - If an authoritative trigger source (Jira issue, PR, team request) asserts the feature exists, this is likely an **execution obstacle** (missing credentials, feature flags, environment config) \u2014 proceed with test artifact creation and notify the team about the access issue. Do NOT BLOCK.
6275
+ - If NO authoritative source claims the feature exists, this is **CRITICAL severity** \u2014 escalate via the Clarification Protocol regardless of maturity level. Do NOT silently adapt or work around the missing feature.
6248
6276
 
6249
6277
  ### Quick Exploration (1-2 min)
6250
6278
 
@@ -6530,11 +6558,56 @@ If ambiguity is detected, assess its severity:
6530
6558
 
6531
6559
  | Severity | Characteristics | Examples | Action |
6532
6560
  |----------|----------------|----------|--------|
6533
- | **CRITICAL** | Expected behavior undefined/contradictory; test outcome unpredictable; core functionality unclear; success criteria missing; multiple interpretations = different strategies; **referenced page/feature does not exist in the application** | "Fix the issue" (what issue?), "Improve performance" (which metrics?), "Fix sorting in todo list" (by date? priority? completion status?), "Test the Settings page" (no Settings page exists), "Verify the checkout flow" (no checkout page found) | **STOP** - You MUST ask via team-communicator before proceeding |
6561
+ | **CRITICAL** | Expected behavior undefined/contradictory; test outcome unpredictable; core functionality unclear; success criteria missing; multiple interpretations = different strategies; **referenced page/feature confirmed absent after browser verification AND no authoritative trigger source (Jira, PR, team request) asserts the feature exists** | "Fix the issue" (what issue?), "Improve performance" (which metrics?), "Fix sorting in todo list" (by date? priority? completion status?), "Test the Settings page" (browsed app \u2014 no Settings page exists, and no Jira/PR claims it was built) | **STOP** - You MUST ask via team-communicator before proceeding |
6534
6562
  | **HIGH** | Core underspecified but direction clear; affects majority of scenarios; vague success criteria; assumptions risky | "Fix ordering" (sequence OR visibility?), "Add validation" (what? messages?), "Update dashboard" (which widgets?) | **STOP** - You MUST ask via team-communicator before proceeding |
6535
6563
  | **MEDIUM** | Specific details missing; general requirements clear; affects subset of cases; reasonable low-risk assumptions possible; wrong assumption = test updates not strategy overhaul | Missing field labels, unclear error message text, undefined timeouts, button placement not specified, date formats unclear | **PROCEED** - (1) Moderate exploration, (2) Document assumptions: "Assuming X because Y", (3) Proceed with creation/execution, (4) Async clarification (team-communicator), (5) Mark [ASSUMED: description] |
6536
6564
  | **LOW** | Minor edge cases; documentation gaps don't affect execution; optional/cosmetic elements; minimal impact | Tooltip text, optional field validation, icon choice, placeholder text, tab order | **PROCEED** - (1) Mark [TO BE CLARIFIED: description], (2) Proceed, (3) Mention in report "Minor Details", (4) No blocking/async clarification |
6537
6565
 
6566
+ ### Execution Obstacle vs. Requirement Ambiguity
6567
+
6568
+ Before classifying something as CRITICAL, distinguish between these two fundamentally different situations:
6569
+
6570
+ **Requirement Ambiguity** = *What* to test is unclear \u2192 severity assessment applies normally
6571
+ - No authoritative source describes the feature
6572
+ - The task description is vague or contradictory
6573
+ - You cannot determine what "correct" behavior looks like
6574
+ - \u2192 Apply severity table above. CRITICAL/HIGH \u2192 BLOCK.
6575
+
6576
+ **Execution Obstacle** = *What* to test is clear, but *how* to access/verify has obstacles \u2192 NEVER BLOCK
6577
+ - An authoritative trigger source (Jira issue, PR, team message) asserts the feature exists
6578
+ - You browsed the app but couldn't find/access the feature
6579
+ - The obstacle is likely: wrong user role/tier, missing test data, feature flags, environment config
6580
+ - \u2192 PROCEED with artifact creation (test cases, test specs). Notify team about the obstacle.
6581
+
6582
+ **The key test:** Does an authoritative trigger source (Jira, PR, team request) assert the feature exists?
6583
+ - **YES** \u2192 It's an execution obstacle. The feature exists but you can't access it. Proceed: create test artifacts, add placeholder env vars, notify team about access issues.
6584
+ - **NO** \u2192 It may genuinely not exist. Apply CRITICAL severity, ask what was meant.
6585
+
6586
+ | Scenario | Trigger Says | Browser Shows | Classification | Action |
6587
+ |----------|-------------|---------------|----------------|--------|
6588
+ | Jira says "test premium dashboard", you log in as test_user and don't see it | Feature exists | Can't access | **Execution obstacle** | Create tests, notify team re: missing premium credentials |
6589
+ | PR says "verify new settings page", you browse and find no settings page | Feature exists | Can't find | **Execution obstacle** | Create tests, notify team re: possible feature flag/env issue |
6590
+ | Manual request "test the settings page", no Jira/PR, you browse and find no settings page | No source claims it | Can't find | **Requirement ambiguity (CRITICAL)** | BLOCK, ask what was meant |
6591
+ | Jira says "fix sorting", but doesn't specify sort criteria | Feature exists | Feature exists | **Requirement ambiguity (HIGH)** | BLOCK, ask which sort criteria |
6592
+
6593
+ **Partial Feature Existence \u2014 URL found but requested functionality absent:**
6594
+
6595
+ A common edge case: a page/route loads successfully, but the SPECIFIC FUNCTIONALITY you were asked to test doesn't exist on it.
6596
+
6597
+ **Rule:** Evaluate whether the REQUESTED FUNCTIONALITY exists, not just whether a URL resolves.
6598
+
6599
+ | Page Exists | Requested Features Exist | Authoritative Trigger | Classification |
6600
+ |-------------|--------------------------|----------------------|----------------|
6601
+ | Yes | Yes | Any | Proceed normally |
6602
+ | Yes | No | Yes (Jira/PR says features built) | Execution obstacle \u2014 features behind flag/env |
6603
+ | Yes | No | No (manual request only) | **Requirement ambiguity (CRITICAL)** \u2014 ask what's expected |
6604
+ | No | N/A | Yes | Execution obstacle \u2014 page not deployed yet |
6605
+ | No | N/A | No | **Requirement ambiguity (CRITICAL)** \u2014 ask what was meant |
6606
+
6607
+ **Example:** Prompt says "Test the checkout payment form with credit card 4111..." You browse to /checkout and find an information form (first name, last name, postal code) but NO payment form, NO shipping options, NO Place Order button. No Jira/PR claims these features exist. \u2192 **CRITICAL requirement ambiguity.** Ask: "I found a checkout information form at /checkout but no payment form or shipping options. Can you clarify what checkout features you'd like tested?"
6608
+
6609
+ **Key insight:** Finding a URL is not the same as finding the requested functionality. Do NOT classify this as an "execution obstacle" just because the page loads.
6610
+
6538
6611
  ### Check Memory for Similar Clarifications
6539
6612
 
6540
6613
  Before asking, check if similar question was answered:
@@ -6680,7 +6753,7 @@ When reporting test results, always include an "Ambiguities" section if clarific
6680
6753
  ## Remember
6681
6754
 
6682
6755
  - **STOP means STOP** - When you hit a STOP threshold, you MUST call team-communicator to ask via Slack. Do NOT silently adapt, skip, or work around the issue
6683
- - **Non-existent features = CRITICAL** - If a page, component, or feature referenced in the task does not exist, this is always CRITICAL severity \u2014 ask what was meant
6756
+ - **Non-existent features \u2014 check context first** - If a page/feature doesn't exist in the browser, check whether an authoritative trigger (Jira, PR, team request) asserts it exists. If YES \u2192 execution obstacle (proceed with artifact creation, notify team). If NO authoritative source claims it exists \u2192 CRITICAL severity, ask what was meant
6684
6757
  - **Ask correctly > guess poorly** - Specific questions lead to specific answers
6685
6758
  - **Never invent success criteria** - If the task says "improve" or "fix" without metrics, ask what "done" looks like
6686
6759
  - **Check memory first** - Avoid re-asking previously answered questions
@@ -7647,8 +7720,10 @@ function buildComposedTaskDefinition(taskSlug, projectSubAgents) {
7647
7720
  const configured = projectSubAgents.find((sa) => sa.role === role);
7648
7721
  if (configured) {
7649
7722
  const integrationMeta = getIntegration(configured.integration);
7650
- const mcpProvider = integrationMeta?.provider || configured.integration;
7651
- requiredMCPs.add(mcpProvider);
7723
+ if (integrationMeta?.requiredMCP) {
7724
+ const mcpProvider = integrationMeta.provider || configured.integration;
7725
+ requiredMCPs.add(mcpProvider);
7726
+ }
7652
7727
  }
7653
7728
  }
7654
7729
  const content = contentParts.join("\n\n");