@bugzy-ai/bugzy 1.18.2 → 1.18.4

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 (61) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +273 -273
  3. package/dist/cli/index.cjs +295 -210
  4. package/dist/cli/index.cjs.map +1 -1
  5. package/dist/cli/index.js +294 -209
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/index.cjs +291 -206
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.js +291 -206
  10. package/dist/index.js.map +1 -1
  11. package/dist/subagents/index.cjs +115 -137
  12. package/dist/subagents/index.cjs.map +1 -1
  13. package/dist/subagents/index.js +115 -137
  14. package/dist/subagents/index.js.map +1 -1
  15. package/dist/subagents/metadata.cjs +12 -18
  16. package/dist/subagents/metadata.cjs.map +1 -1
  17. package/dist/subagents/metadata.js +12 -18
  18. package/dist/subagents/metadata.js.map +1 -1
  19. package/dist/tasks/index.cjs +142 -54
  20. package/dist/tasks/index.cjs.map +1 -1
  21. package/dist/tasks/index.js +142 -54
  22. package/dist/tasks/index.js.map +1 -1
  23. package/dist/templates/init/.bugzy/runtime/knowledge-base.md +61 -0
  24. package/dist/templates/init/.bugzy/runtime/knowledge-maintenance-guide.md +97 -0
  25. package/dist/templates/init/.bugzy/runtime/project-context.md +35 -0
  26. package/dist/templates/init/.bugzy/runtime/subagent-memory-guide.md +87 -0
  27. package/dist/templates/init/.bugzy/runtime/templates/test-plan-template.md +50 -0
  28. package/dist/templates/init/.bugzy/runtime/templates/test-result-schema.md +498 -0
  29. package/dist/templates/init/.bugzy/runtime/test-execution-strategy.md +535 -0
  30. package/dist/templates/init/.bugzy/runtime/testing-best-practices.md +632 -0
  31. package/dist/templates/init/.gitignore-template +25 -0
  32. package/package.json +95 -95
  33. package/templates/init/.bugzy/runtime/knowledge-base.md +61 -61
  34. package/templates/init/.bugzy/runtime/knowledge-maintenance-guide.md +97 -97
  35. package/templates/init/.bugzy/runtime/project-context.md +35 -35
  36. package/templates/init/.bugzy/runtime/subagent-memory-guide.md +87 -87
  37. package/templates/init/.bugzy/runtime/templates/event-examples.md +194 -194
  38. package/templates/init/.bugzy/runtime/templates/test-plan-template.md +50 -50
  39. package/templates/init/.bugzy/runtime/templates/test-result-schema.md +498 -498
  40. package/templates/init/.claude/settings.json +28 -28
  41. package/templates/init/.env.testdata +18 -18
  42. package/templates/init/.gitignore-template +24 -24
  43. package/templates/init/AGENTS.md +155 -155
  44. package/templates/init/CLAUDE.md +157 -157
  45. package/templates/init/test-runs/README.md +45 -45
  46. package/templates/init/tests/CLAUDE.md +193 -193
  47. package/templates/init/tests/docs/test-execution-strategy.md +535 -535
  48. package/templates/init/tests/docs/testing-best-practices.md +724 -724
  49. package/templates/playwright/BasePage.template.ts +190 -190
  50. package/templates/playwright/auth.setup.template.ts +89 -89
  51. package/templates/playwright/dataGenerators.helper.template.ts +148 -148
  52. package/templates/playwright/dateUtils.helper.template.ts +96 -96
  53. package/templates/playwright/pages.fixture.template.ts +50 -50
  54. package/templates/playwright/playwright.config.template.ts +97 -97
  55. package/templates/playwright/reporters/__tests__/bugzy-reporter-failure-classification.test.ts +299 -299
  56. package/templates/playwright/reporters/__tests__/bugzy-reporter-manifest-merge.test.ts +329 -329
  57. package/templates/playwright/reporters/__tests__/playwright.config.ts +5 -5
  58. package/templates/playwright/reporters/bugzy-reporter.ts +784 -784
  59. package/templates/init/.bugzy/runtime/handlers/messages/feedback.md +0 -178
  60. package/templates/init/.bugzy/runtime/handlers/messages/question.md +0 -122
  61. package/templates/init/.bugzy/runtime/handlers/messages/status.md +0 -146
@@ -135,20 +135,20 @@ Example structure:
135
135
  {
136
136
  inline: true,
137
137
  title: "Generate All Manual Test Case Files",
138
- content: `Generate ALL manual test case markdown files in \`./test-cases/\` BEFORE invoking the test-code-generator agent.
138
+ content: `Generate ALL manual test case markdown files in \`./test-cases/\` BEFORE invoking the test-engineer agent.
139
139
 
140
140
  Create files using \`TC-XXX-feature-description.md\` format. Follow the format of existing test cases in the directory. If no existing cases exist, include:
141
141
  - Frontmatter with test case metadata (id, title, type, area, \`automated: true/false\`, \`automated_test:\` empty)
142
142
  - Clear test steps with expected results
143
143
  - Required test data references (use env var names, not values)`
144
144
  },
145
- // Step 11: Automate Test Cases (inline - detailed instructions for test-code-generator)
145
+ // Step 11: Automate Test Cases (inline - detailed instructions for test-engineer)
146
146
  {
147
147
  inline: true,
148
148
  title: "Automate Test Cases Area by Area",
149
149
  content: `**IMPORTANT**: Process each feature area separately to enable incremental, focused test creation.
150
150
 
151
- **For each area**, invoke the test-code-generator agent:
151
+ **For each area**, invoke the test-engineer agent:
152
152
 
153
153
  **Prepare Area Context:**
154
154
  Before invoking the agent, identify the test cases for the current area:
@@ -160,9 +160,9 @@ Before invoking the agent, identify the test cases for the current area:
160
160
  - Existing automated tests in ./tests/specs/
161
161
  - Existing Page Objects in ./tests/pages/
162
162
 
163
- **Invoke test-code-generator Agent:**
163
+ **Invoke test-engineer Agent:**
164
164
 
165
- {{INVOKE_TEST_CODE_GENERATOR}} for the current area with the following context:
165
+ {{INVOKE_TEST_ENGINEER}} for the current area with the following context:
166
166
 
167
167
  "Automate test cases for the [AREA_NAME] area.
168
168
 
@@ -176,7 +176,7 @@ Before invoking the agent, identify the test cases for the current area:
176
176
  - Existing page objects: [directory from ./tests/CLAUDE.md]
177
177
 
178
178
  **Knowledge Base Patterns (MUST APPLY):**
179
- Include ALL relevant testing patterns from the knowledge base that apply to this area. For example, if the KB documents timing behaviors (animation delays, loading states), selector gotchas, or recommended assertion approaches \u2014 list them here explicitly and instruct the agent to use the specific patterns described (e.g., specific assertion methods with specific timeouts). The test-code-generator does not have access to the knowledge base, so you MUST relay the exact patterns and recommended code approaches.
179
+ Include ALL relevant testing patterns from the knowledge base that apply to this area. For example, if the KB documents timing behaviors (animation delays, loading states), selector gotchas, or recommended assertion approaches \u2014 list them here explicitly and instruct the agent to use the specific patterns described (e.g., specific assertion methods with specific timeouts). The test-engineer does not have access to the knowledge base, so you MUST relay the exact patterns and recommended code approaches.
180
180
 
181
181
  **The agent should:**
182
182
  1. Read the manual test case files for this area
@@ -235,7 +235,7 @@ Move to the next area and repeat until all areas are complete.
235
235
  content: `Provide a summary of created artifacts: manual test cases (count, IDs), automated tests (count, spec files), page objects and supporting files, coverage by area, and command to run tests (from \`./tests/CLAUDE.md\`).`
236
236
  }
237
237
  ],
238
- requiredSubagents: ["browser-automation", "test-code-generator"],
238
+ requiredSubagents: ["browser-automation", "test-engineer"],
239
239
  optionalSubagents: ["documentation-researcher", "team-communicator"],
240
240
  dependentTasks: []
241
241
  };
@@ -422,10 +422,10 @@ After saving the test plan:
422
422
  var handleMessageTask = {
423
423
  slug: TASK_SLUGS.HANDLE_MESSAGE,
424
424
  name: "Handle Message",
425
- description: "Handle team responses and Slack communications, maintaining context for ongoing conversations (LLM-routed)",
425
+ description: "Handle team messages, maintaining context for ongoing conversations",
426
426
  frontmatter: {
427
- description: "Handle team responses and Slack communications, maintaining context for ongoing conversations",
428
- "argument-hint": "[slack thread context or team message]"
427
+ description: "Handle team messages, maintaining context for ongoing conversations",
428
+ "argument-hint": "[team thread context or message]"
429
429
  },
430
430
  steps: [
431
431
  // Step 1: Overview (inline)
@@ -434,7 +434,7 @@ var handleMessageTask = {
434
434
  title: "Handle Message Overview",
435
435
  content: `# Handle Message Command
436
436
 
437
- Process team responses from Slack threads and handle multi-turn conversations with the product team about testing clarifications, ambiguities, and questions.`
437
+ Process team messages and handle multi-turn conversations with the product team about testing clarifications, ambiguities, and questions.`
438
438
  },
439
439
  // Step 2: Security Notice (library)
440
440
  "security-notice",
@@ -448,19 +448,19 @@ Process team responses from Slack threads and handle multi-turn conversations wi
448
448
  "load-project-context",
449
449
  // Step 5: Knowledge Base Read (library)
450
450
  "read-knowledge-base",
451
- // Step 5: Detect Intent (inline - task-specific)
451
+ // Step 6: Detect Intent (inline - simplified, no handler file loading)
452
452
  {
453
453
  inline: true,
454
- title: "Detect Message Intent and Load Handler",
455
- content: `Before processing the message, identify the intent type to load the appropriate handler.
454
+ title: "Detect Message Intent",
455
+ content: `Identify the intent type from the event payload or message patterns:
456
456
 
457
- #### 0.1 Extract Intent from Event Payload
457
+ #### Extract Intent from Event Payload
458
458
 
459
459
  Check the event payload for the \`intent\` field provided by the LLM layer:
460
460
  - If \`intent\` is present, use it directly
461
461
  - Valid intent values: \`question\`, \`feedback\`, \`status\`
462
462
 
463
- #### 0.2 Fallback Intent Detection (if no intent provided)
463
+ #### Fallback Intent Detection (if no intent provided)
464
464
 
465
465
  If intent is not in the payload, detect from message patterns:
466
466
 
@@ -471,39 +471,125 @@ If intent is not in the payload, detect from message patterns:
471
471
  | Question words: "what", "which", "do we have", "is there" about tests/project | \`question\` |
472
472
  | Default (none of above) | \`feedback\` |
473
473
 
474
- #### 0.3 Load Handler File
474
+ Then follow the matching handler section below.`
475
+ },
476
+ // Step 7: Process by Intent (all three handlers consolidated)
477
+ {
478
+ inline: true,
479
+ title: "Process Message by Intent",
480
+ content: `Based on the detected intent, follow the appropriate section:
481
+
482
+ ---
483
+
484
+ ## If intent = "feedback"
485
+
486
+ ### Step 1: Parse Feedback
487
+
488
+ Extract the following from the message:
489
+
490
+ | Field | Description |
491
+ |-------|-------------|
492
+ | **Type** | \`bug_report\`, \`test_result\`, \`observation\`, \`suggestion\`, \`general\` |
493
+ | **Severity** | \`critical\`, \`high\`, \`medium\`, \`low\` |
494
+ | **Component** | Affected area (e.g., "login", "checkout") |
495
+ | **Description** | Core issue description |
496
+ | **Expected** | What should happen (if stated) |
497
+ | **Steps** | How to reproduce (if provided) |
498
+
499
+ **Type Detection**:
500
+ - \`bug_report\`: "bug", "broken", "doesn't work", "error", "crash"
501
+ - \`test_result\`: "test passed", "test failed", "ran tests", "testing showed"
502
+ - \`observation\`: "noticed", "observed", "found that", "saw that"
503
+ - \`suggestion\`: "should", "could we", "what if", "idea"
504
+ - \`general\`: Default for unclassified feedback
505
+
506
+ ### Step 2: Update Test Case Specifications
507
+
508
+ **CRITICAL**: When feedback requests changes to test behavior (e.g., "change the expected result", "update the test to check for X", "the test should verify Y instead"), you MUST update the test case markdown files to reflect the requested changes.
509
+
510
+ For each actionable feedback item:
511
+ 1. Identify which test case(s) are affected
512
+ 2. Read the test case markdown file
513
+ 3. Update the test steps, expected results, or assertions as requested
514
+ 4. Save the modified test case file
515
+
516
+ This step updates the **specification** (markdown test case files) only. The \`sync-automation-from-feedback\` step that follows handles syncing the **implementation** (automation code) to match.
517
+
518
+ ### Step 3: Acknowledge and Confirm
519
+
520
+ Respond confirming: feedback received, summary of what was captured, actions taken (including any test case updates), and follow-up questions if needed.
521
+
522
+ ---
523
+
524
+ ## If intent = "question"
525
+
526
+ ### Step 1: Classify Question Type
527
+
528
+ | Type | Indicators | Primary Context Sources |
529
+ |------|------------|------------------------|
530
+ | **Coverage** | "what tests", "do we have", "is there a test for" | test-cases/, test-plan.md |
531
+ | **Results** | "did tests pass", "what failed", "test results" | test-runs/ |
532
+ | **Knowledge** | "how does", "what is", "explain" | knowledge-base.md |
533
+ | **Plan** | "what's in scope", "test plan", "testing strategy" | test-plan.md |
534
+ | **Process** | "how do I", "when should", "what's the workflow" | project-context.md |
535
+
536
+ ### Step 2: Load Relevant Context
475
537
 
476
- Based on detected intent, load the handler from:
477
- \`.bugzy/runtime/handlers/messages/{intent}.md\`
538
+ Based on question type, load the appropriate files:
539
+ - **Coverage**: Read test-plan.md, list ./test-cases/, search for relevant keywords
540
+ - **Results**: List ./test-runs/ (newest first), read summary.json from relevant runs
541
+ - **Knowledge**: Read .bugzy/runtime/knowledge-base.md, search for relevant entries
542
+ - **Plan**: Read test-plan.md, extract relevant sections
543
+ - **Process**: Read .bugzy/runtime/project-context.md
478
544
 
479
- **Handler files:**
480
- - \`question.md\` - Questions about tests, coverage, project details
481
- - \`feedback.md\` - Bug reports, test observations, general information
482
- - \`status.md\` - Status checks on test runs, task progress
545
+ ### Step 3: Formulate Answer
483
546
 
484
- #### 0.4 Follow Handler Instructions
547
+ - Be specific: quote relevant sections from source files
548
+ - Cite sources: mention which files contain the information
549
+ - Quantify when possible: "We have 12 test cases covering login..."
550
+ - Acknowledge gaps if information is incomplete
551
+
552
+ ### Step 4: Offer Follow-up
553
+
554
+ End response with offer to provide more detail and suggest related information.
555
+
556
+ ---
485
557
 
486
- **IMPORTANT**: The handler file is authoritative for this intent type.
558
+ ## If intent = "status"
487
559
 
488
- 1. Read the handler file completely
489
- 2. Follow its processing steps in order
490
- 3. Apply its context loading requirements
491
- 4. Use its response guidelines
492
- 5. Perform any memory updates it specifies
560
+ ### Step 1: Identify Status Scope
493
561
 
494
- The handler file contains all necessary processing logic for the detected intent type. Each handler includes:
495
- - Specific processing steps for that intent
496
- - Context loading requirements
497
- - Response guidelines
498
- - Memory update instructions`
562
+ | Scope | Indicators | Data Sources |
563
+ |-------|------------|--------------|
564
+ | **Latest test run** | "last run", "recent tests", "how did tests go" | Most recent test-runs/ directory |
565
+ | **Specific test** | Test ID mentioned (TC-XXX) | test-runs/*/TC-XXX/, test-cases/TC-XXX.md |
566
+ | **Overall** | "overall", "all tests", "pass rate" | All test-runs/ summaries |
567
+ | **Task progress** | "is the task done", "what's happening with" | team-communicator memory |
568
+
569
+ ### Step 2: Gather Status Data
570
+
571
+ Based on scope, read the appropriate test-runs/ directories and summary files. Calculate aggregate statistics for overall status requests.
572
+
573
+ ### Step 3: Format Status Report
574
+
575
+ Present status clearly: lead with pass/fail summary, use bullet points, include timestamps, offer to drill down into specifics.
576
+
577
+ ### Step 4: Provide Context and Recommendations
578
+
579
+ For failing tests: suggest review, note if new or recurring. For declining trends: highlight causes. For good results: acknowledge healthy state.`
580
+ },
581
+ // Step 8: Sync automation from feedback (conditional on test-engineer)
582
+ {
583
+ stepId: "sync-automation-from-feedback",
584
+ conditionalOnSubagent: "test-engineer"
499
585
  },
500
- // Step 6: Post Response via Team Communicator
586
+ // Step 9: Post Response via Team Communicator
501
587
  {
502
588
  inline: true,
503
589
  title: "Post Response to Team",
504
590
  content: `## Post Response to the Team
505
591
 
506
- After processing the message through the handler and composing your response:
592
+ After processing the message and composing your response:
507
593
 
508
594
  {{INVOKE_TEAM_COMMUNICATOR}} to post the response back to the team.
509
595
 
@@ -518,13 +604,13 @@ After processing the message through the handler and composing your response:
518
604
  - Ask the user whether to post \u2014 the message came from the team, the response goes back to the team
519
605
  - Compose a draft without sending it`
520
606
  },
521
- // Step 7: Clarification Protocol (for ambiguous intents)
607
+ // Step 10: Clarification Protocol (for ambiguous intents)
522
608
  "clarification-protocol",
523
- // Step 8: Knowledge Base Update (library)
609
+ // Step 11: Knowledge Base Update (library)
524
610
  "update-knowledge-base"
525
611
  ],
526
612
  requiredSubagents: ["team-communicator"],
527
- optionalSubagents: [],
613
+ optionalSubagents: ["test-engineer"],
528
614
  dependentTasks: ["verify-changes"]
529
615
  };
530
616
 
@@ -1124,7 +1210,7 @@ If selected test cases have formatting issues:
1124
1210
 
1125
1211
  **Failure Handling**:
1126
1212
  - Test failures are automatically triaged (product bugs vs test issues)
1127
- - Test issues are automatically fixed by the test-debugger-fixer subagent
1213
+ - Test issues are automatically fixed by the test-engineer subagent
1128
1214
  - Product bugs are logged via issue tracker after triage
1129
1215
  - All results are analyzed for learning opportunities and team communication
1130
1216
  - Critical failures trigger immediate team notification
@@ -1141,7 +1227,7 @@ If selected test cases have formatting issues:
1141
1227
  conditionalOnSubagent: "team-communicator"
1142
1228
  }
1143
1229
  ],
1144
- requiredSubagents: ["browser-automation", "test-debugger-fixer"],
1230
+ requiredSubagents: ["browser-automation", "test-engineer"],
1145
1231
  optionalSubagents: ["issue-tracker", "team-communicator"],
1146
1232
  dependentTasks: []
1147
1233
  };
@@ -1421,7 +1507,7 @@ Generate summary of test selection based on description analysis:
1421
1507
  - **Execution strategy**: [smart selection | full suite | smoke tests | user-specified]
1422
1508
  \`\`\``
1423
1509
  },
1424
- // Step 7b: Create Tests for Coverage Gaps (conditional - test-code-generator)
1510
+ // Step 7b: Create Tests for Coverage Gaps (conditional - test-engineer)
1425
1511
  {
1426
1512
  inline: true,
1427
1513
  title: "Create Tests for Coverage Gaps",
@@ -1457,7 +1543,7 @@ If the Jira issue or PR references test accounts/data (e.g., TEST_PREMIUM_USER,
1457
1543
 
1458
1544
  ### Generate Automated Test Specs
1459
1545
 
1460
- {{INVOKE_TEST_CODE_GENERATOR}} to create automated test specs:
1546
+ {{INVOKE_TEST_ENGINEER}} to create automated test specs:
1461
1547
  - Read the manual test cases you just created
1462
1548
  - Explore the feature in the browser to discover selectors and flows
1463
1549
  - Create page objects in the directory specified by \`./tests/CLAUDE.md\`
@@ -1468,7 +1554,7 @@ If the Jira issue or PR references test accounts/data (e.g., TEST_PREMIUM_USER,
1468
1554
  ### If Tests Already Cover the Feature
1469
1555
 
1470
1556
  Skip this step \u2014 proceed directly to running existing tests.`,
1471
- conditionalOnSubagent: "test-code-generator"
1557
+ conditionalOnSubagent: "test-engineer"
1472
1558
  },
1473
1559
  // Step 8-11: Test Execution (library steps)
1474
1560
  "run-tests",
@@ -1657,8 +1743,8 @@ Post PR comment if GitHub context available.`,
1657
1743
  **If test execution fails:** report specific error, suggest troubleshooting, don't proceed with triage.`
1658
1744
  }
1659
1745
  ],
1660
- requiredSubagents: ["browser-automation", "test-debugger-fixer"],
1661
- optionalSubagents: ["documentation-researcher", "issue-tracker", "team-communicator", "changelog-historian", "test-code-generator"],
1746
+ requiredSubagents: ["browser-automation", "test-engineer"],
1747
+ optionalSubagents: ["documentation-researcher", "issue-tracker", "team-communicator", "changelog-historian"],
1662
1748
  dependentTasks: []
1663
1749
  };
1664
1750
 
@@ -1734,7 +1820,7 @@ This command orchestrates the complete test coverage workflow in a single execut
1734
1820
  },
1735
1821
  "generate-final-report"
1736
1822
  ],
1737
- requiredSubagents: ["browser-automation", "test-code-generator", "test-debugger-fixer"],
1823
+ requiredSubagents: ["browser-automation", "test-engineer"],
1738
1824
  optionalSubagents: ["documentation-researcher", "team-communicator", "issue-tracker"],
1739
1825
  dependentTasks: ["run-tests", "generate-test-cases"]
1740
1826
  };
@@ -1843,7 +1929,7 @@ This task is triggered automatically when test results are submitted to the Bugz
1843
1929
  "normalize-test-results",
1844
1930
  // Step 7: Triage Failures (existing library step)
1845
1931
  "triage-failures",
1846
- // Step 8: Fix Test Issues (library — uses test-debugger-fixer)
1932
+ // Step 8: Fix Test Issues (library — uses test-engineer)
1847
1933
  "fix-test-issues",
1848
1934
  // Step 9: Log Product Bugs (conditional — requires issue-tracker)
1849
1935
  {
@@ -1902,7 +1988,7 @@ Create a structured triage report as the task output. This report is stored in \
1902
1988
  Output this JSON as the final result of the task.`
1903
1989
  }
1904
1990
  ],
1905
- requiredSubagents: ["browser-automation", "test-debugger-fixer"],
1991
+ requiredSubagents: ["browser-automation", "test-engineer"],
1906
1992
  optionalSubagents: ["issue-tracker", "team-communicator"],
1907
1993
  dependentTasks: []
1908
1994
  };
@@ -1959,12 +2045,14 @@ This step helps correlate what the tests cover with what the application actuall
1959
2045
  {
1960
2046
  inline: true,
1961
2047
  title: "Commit Analysis Results",
1962
- content: `Commit all analysis artifacts to the project repository:
2048
+ content: `Commit analysis artifacts to the **parent project repository** (the workspace root).
1963
2049
 
1964
- 1. The test codebase analysis report (\`.bugzy/runtime/test-codebase-analysis.md\`)
1965
- 2. Any generated CLAUDE.md draft (if the external repo was missing one)
2050
+ **IMPORTANT \u2014 Do NOT stage the \`tests\` submodule.** The \`tests/\` directory is an external git submodule. Any changes made inside it (e.g., \`reporters/parse-results.ts\`, \`tests/CLAUDE.md\`) will be committed and pushed to the external repo automatically by the post-execution handler. Staging the submodule in the parent would record a local-only commit SHA that doesn't exist on the remote, causing a broken reference.
1966
2051
 
1967
- Use a clear commit message: "chore: analyze external test codebase"
2052
+ **What to commit in the parent repo:**
2053
+ 1. \`git add .bugzy/\` \u2014 the test codebase analysis report and runtime files
2054
+ 2. Do NOT run \`git add .\` or \`git add tests\` \u2014 this would stage the submodule pointer
2055
+ 3. \`git commit -m "chore: analyze external test codebase"\`
1968
2056
 
1969
2057
  These artifacts will be available to all future task executions for this project.`
1970
2058
  },