synapse-hub 2.4.0 → 2.4.2

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 (88) hide show
  1. package/.agents/agents/orchestrator.md +3 -0
  2. package/.agents/agents/pom-crafter.md +3 -0
  3. package/.agents/agents/quality-gatekeeper.md +1 -0
  4. package/.agents/agents/test-runner.md +1 -0
  5. package/.agents/rules/graphify.md +14 -14
  6. package/.agents/rules/mandatory-playwright-live.md +29 -29
  7. package/.agents/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -614
  8. package/.agents/skills/clean-pom-crafter/examples/standard_test_case.groovy +28 -28
  9. package/.agents/skills/clean-pom-crafter/references/pom_patterns.groovy +138 -138
  10. package/.agents/skills/e2e-testing-patterns/resources/implementation-playbook.md +522 -522
  11. package/.agents/skills/failure-autopsy-and-healing/references/healing_matrix.md +64 -64
  12. package/.agents/skills/failure-autopsy-and-healing/references/qa_investigation_protocol.md +56 -56
  13. package/.agents/skills/failure-autopsy-and-healing/scripts/triage_failures.sh +98 -98
  14. package/.agents/skills/katalon-cli-runner/references/groovy-patterns.md +209 -209
  15. package/.agents/skills/katalon-cli-runner/references/katalon-api.md +155 -155
  16. package/.agents/skills/katalon-cli-runner/references/runner_commands.md +67 -67
  17. package/.agents/skills/playwright-live-interaction/references/advanced_superpowers.md +160 -160
  18. package/.agents/skills/playwright-live-interaction/references/compact_accessibility_snapshots.md +75 -75
  19. package/.agents/skills/playwright-live-interaction/references/recipes.md +388 -388
  20. package/.agents/skills/playwright-live-interaction/references/swarm_orchestration.md +134 -134
  21. package/.agents/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -541
  22. package/.agents/templates/completion_report.md +57 -57
  23. package/.agents/workflows/graphify.md +10 -10
  24. package/.cursor/rules/language.mdc +7 -7
  25. package/README.en.md +9 -3
  26. package/README.md +9 -3
  27. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-06_api_contract_drift.json +21 -21
  28. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-07_api_contract_drift.json +21 -21
  29. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-08_api_contract_drift.json +21 -21
  30. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-09_api_contract_drift.json +21 -21
  31. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-10_api_contract_drift.json +21 -21
  32. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-21_fake_pass_tautology.json +20 -20
  33. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-22_fake_pass_tautology.json +20 -20
  34. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-23_fake_pass_tautology.json +20 -20
  35. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-24_fake_pass_tautology.json +20 -20
  36. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-25_fake_pass_tautology.json +20 -20
  37. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-01_locator_drift.json +22 -22
  38. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-02_locator_drift.json +22 -22
  39. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-03_locator_drift.json +22 -22
  40. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-04_locator_drift.json +22 -22
  41. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-05_locator_drift.json +22 -22
  42. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-16_stale_and_mutation.json +21 -21
  43. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-17_stale_and_mutation.json +21 -21
  44. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-18_stale_and_mutation.json +21 -21
  45. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-19_stale_and_mutation.json +21 -21
  46. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-20_stale_and_mutation.json +22 -22
  47. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-11_timing_and_race.json +21 -21
  48. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-12_timing_and_race.json +21 -21
  49. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-13_timing_and_race.json +21 -21
  50. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-14_timing_and_race.json +21 -21
  51. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-15_timing_and_race.json +21 -21
  52. package/benchmarks/qa_eval/reports/BENCHMARK_REPORT.md +94 -69
  53. package/benchmarks/qa_eval/reports/eval_results.json +460 -104
  54. package/bin/agent-qa.js +6 -1
  55. package/docs/ARCHITECTURE.md +13 -2
  56. package/package.json +6 -6
  57. package/scripts/install.ps1 +112 -112
  58. package/scripts/install_global_plugin.ps1 +1 -1
  59. package/scripts/install_global_plugin.sh +1 -1
  60. package/scripts/lint_skills.ps1 +57 -57
  61. package/skills_manifest.json +1 -1
  62. package/synapse.config.json +1 -1
  63. package/tools/TOOLS_RUNBOOK.md +6 -1
  64. package/tools/__init__.py +1 -1
  65. package/tools/agent_canary.py +501 -501
  66. package/tools/api_fuzzer.py +11 -2
  67. package/tools/browser_helpers.js +2 -2
  68. package/tools/bump_version.py +8 -0
  69. package/tools/check_version_sync.py +18 -0
  70. package/tools/cli.py +210 -48
  71. package/tools/count_tokens.py +4 -4
  72. package/tools/dashboard_generator.py +10 -10
  73. package/tools/e2e_flow_prober.sh +0 -0
  74. package/tools/generate_allure_report.sh +0 -0
  75. package/tools/generate_test_reports.sh +0 -0
  76. package/tools/mcp_excel_server.py +3 -1
  77. package/tools/mcp_excel_server.sh +0 -0
  78. package/tools/mcp_server.py +1 -1
  79. package/tools/micro_mutator.py +4 -2
  80. package/tools/pinpoint_failure.py +88 -88
  81. package/tools/setup_project.py +1 -1
  82. package/tools/skillspector.py +31 -0
  83. package/tools/update_sentinel.py +3 -3
  84. package/tools/verify_all.py +16 -6
  85. package/tools/verify_all.sh +0 -0
  86. package/tools/visual_som_helper.py +14 -3
  87. package/tools/welcome_page.py +1 -1
  88. package/benchmarks/qa_eval/reports/AB_METHODOLOGY_REPORT.md +0 -83
@@ -1,105 +1,461 @@
1
- {
2
- "timestamp": "2026-10-30T17:09:57.038606",
3
- "total_challenges": 5,
4
- "passed_challenges": 5,
5
- "failed_challenges": 0,
6
- "resolution_rate_pct": 100.0,
7
- "avg_mttr_sec": 0.0,
8
- "avg_token_consumption": 52.4,
9
- "avg_mutation_score": 100.0,
10
- "zero_side_effect_rate_pct": 100.0,
11
- "safety_firewall_clearance_pct": 100.0,
12
- "categories": {
13
- "locator_drift": {
14
- "total": 5,
15
- "passed": 5,
16
- "tokens": 262,
17
- "time": 0.0002,
18
- "resolution_rate": 100.0,
19
- "avg_tokens": 52.4,
20
- "avg_time": 0.0
21
- }
22
- },
23
- "details": [
24
- {
25
- "id": "QA-CHALLENGE-01",
26
- "name": "Dynamic CSS-in-JS Hash Locator Shift",
27
- "category": "locator_drift",
28
- "difficulty": "MEDIUM",
29
- "status": "PASSED",
30
- "resolved": true,
31
- "safety_cleared": true,
32
- "time_to_heal_sec": 0.0001,
33
- "max_time_allowed_sec": 2.0,
34
- "time_compliant": true,
35
- "token_consumption": 50,
36
- "mutation_score": 100.0,
37
- "zero_side_effect": true,
38
- "resolution_notes": "Autonomous cascade healed: 'button.btn-submit' -> '[data-testid='submit-order-btn']' (confidence 0.98)"
39
- },
40
- {
41
- "id": "QA-CHALLENGE-02",
42
- "name": "Nested Shadow DOM Component Piercing",
43
- "category": "locator_drift",
44
- "difficulty": "HARD",
45
- "status": "PASSED",
46
- "resolved": true,
47
- "safety_cleared": true,
48
- "time_to_heal_sec": 0.0,
49
- "max_time_allowed_sec": 3.0,
50
- "time_compliant": true,
51
- "token_consumption": 62,
52
- "mutation_score": 100.0,
53
- "zero_side_effect": true,
54
- "resolution_notes": "Autonomous cascade healed: '#customer-email' -> 'template:has-text('<input id='customer-email' type='email' data-testid='user-email'/>')' (confidence 0.94)"
55
- },
56
- {
57
- "id": "QA-CHALLENGE-03",
58
- "name": "Semantic Text Label Evolution",
59
- "category": "locator_drift",
60
- "difficulty": "EASY",
61
- "status": "PASSED",
62
- "resolved": true,
63
- "safety_cleared": true,
64
- "time_to_heal_sec": 0.0001,
65
- "max_time_allowed_sec": 1.5,
66
- "time_compliant": true,
67
- "token_consumption": 50,
68
- "mutation_score": 100.0,
69
- "zero_side_effect": true,
70
- "resolution_notes": "Autonomous cascade healed: '//button[text()='Submit Order']' -> '#order-cta' (confidence 0.9)"
71
- },
72
- {
73
- "id": "QA-CHALLENGE-04",
74
- "name": "Legacy ID Removed in Favor of data-testid",
75
- "category": "locator_drift",
76
- "difficulty": "EASY",
77
- "status": "PASSED",
78
- "resolved": true,
79
- "safety_cleared": true,
80
- "time_to_heal_sec": 0.0,
81
- "max_time_allowed_sec": 1.5,
82
- "time_compliant": true,
83
- "token_consumption": 50,
84
- "mutation_score": 100.0,
85
- "zero_side_effect": true,
86
- "resolution_notes": "Autonomous cascade healed: '#customer_name' -> '[data-testid='customer-name-field']' (confidence 0.98)"
87
- },
88
- {
89
- "id": "QA-CHALLENGE-05",
90
- "name": "HTML Tag Evolution: Anchor to ARIA Button",
91
- "category": "locator_drift",
92
- "difficulty": "MEDIUM",
93
- "status": "PASSED",
94
- "resolved": true,
95
- "safety_cleared": true,
96
- "time_to_heal_sec": 0.0,
97
- "max_time_allowed_sec": 2.0,
98
- "time_compliant": true,
99
- "token_consumption": 50,
100
- "mutation_score": 100.0,
101
- "zero_side_effect": true,
102
- "resolution_notes": "Autonomous cascade healed: 'a.nav-export' -> 'button' (confidence 0.9)"
103
- }
104
- ]
1
+ {
2
+ "timestamp": "2026-11-01T21:24:43.176168",
3
+ "total_challenges": 25,
4
+ "passed_challenges": 25,
5
+ "failed_challenges": 0,
6
+ "resolution_rate_pct": 100.0,
7
+ "avg_mttr_sec": 0.0,
8
+ "avg_token_consumption": 76.2,
9
+ "avg_mutation_score": 100.0,
10
+ "zero_side_effect_rate_pct": 100.0,
11
+ "safety_firewall_clearance_pct": 100.0,
12
+ "categories": {
13
+ "api_contract_drift": {
14
+ "total": 5,
15
+ "passed": 5,
16
+ "tokens": 389,
17
+ "time": 0.0001,
18
+ "resolution_rate": 100.0,
19
+ "avg_tokens": 77.8,
20
+ "avg_time": 0.0
21
+ },
22
+ "fake_pass_tautology": {
23
+ "total": 5,
24
+ "passed": 5,
25
+ "tokens": 335,
26
+ "time": 0.0004,
27
+ "resolution_rate": 100.0,
28
+ "avg_tokens": 67.0,
29
+ "avg_time": 0.0
30
+ },
31
+ "locator_drift": {
32
+ "total": 5,
33
+ "passed": 5,
34
+ "tokens": 262,
35
+ "time": 0.0002,
36
+ "resolution_rate": 100.0,
37
+ "avg_tokens": 52.4,
38
+ "avg_time": 0.0
39
+ },
40
+ "stale_and_mutation": {
41
+ "total": 5,
42
+ "passed": 5,
43
+ "tokens": 473,
44
+ "time": 0.0,
45
+ "resolution_rate": 100.0,
46
+ "avg_tokens": 94.6,
47
+ "avg_time": 0.0
48
+ },
49
+ "timing_and_race": {
50
+ "total": 5,
51
+ "passed": 5,
52
+ "tokens": 447,
53
+ "time": 0.0,
54
+ "resolution_rate": 100.0,
55
+ "avg_tokens": 89.4,
56
+ "avg_time": 0.0
57
+ }
58
+ },
59
+ "details": [
60
+ {
61
+ "id": "QA-CHALLENGE-06",
62
+ "name": "Numeric ID Serialized as String (Type Mutation)",
63
+ "category": "api_contract_drift",
64
+ "difficulty": "MEDIUM",
65
+ "status": "PASSED",
66
+ "resolved": true,
67
+ "safety_cleared": true,
68
+ "time_to_heal_sec": 0.0001,
69
+ "max_time_allowed_sec": 2.0,
70
+ "time_compliant": true,
71
+ "token_consumption": 77,
72
+ "mutation_score": 100.0,
73
+ "zero_side_effect": true,
74
+ "resolution_notes": "Updated assertion contract: assert str(response.data.invoice_id) == '10423'"
75
+ },
76
+ {
77
+ "id": "QA-CHALLENGE-07",
78
+ "name": "Payload Response Field Rename",
79
+ "category": "api_contract_drift",
80
+ "difficulty": "EASY",
81
+ "status": "PASSED",
82
+ "resolved": true,
83
+ "safety_cleared": true,
84
+ "time_to_heal_sec": 0.0,
85
+ "max_time_allowed_sec": 1.5,
86
+ "time_compliant": true,
87
+ "token_consumption": 91,
88
+ "mutation_score": 100.0,
89
+ "zero_side_effect": true,
90
+ "resolution_notes": "Updated assertion contract: assert (response.json().get('email_address') or response.json().get('user_email')) == 'qa@example.com'"
91
+ },
92
+ {
93
+ "id": "QA-CHALLENGE-08",
94
+ "name": "Nested Response Object Flattened",
95
+ "category": "api_contract_drift",
96
+ "difficulty": "MEDIUM",
97
+ "status": "PASSED",
98
+ "resolved": true,
99
+ "safety_cleared": true,
100
+ "time_to_heal_sec": 0.0,
101
+ "max_time_allowed_sec": 2.0,
102
+ "time_compliant": true,
103
+ "token_consumption": 82,
104
+ "mutation_score": 100.0,
105
+ "zero_side_effect": true,
106
+ "resolution_notes": "Updated assertion contract: tier = response.json().get('tier') or response.json().get('profile', {}).get('tier'); assert tier == 'GOLD'"
107
+ },
108
+ {
109
+ "id": "QA-CHALLENGE-09",
110
+ "name": "HTTP Creation Status Code Shift (200 OK -> 201 Created)",
111
+ "category": "api_contract_drift",
112
+ "difficulty": "EASY",
113
+ "status": "PASSED",
114
+ "resolved": true,
115
+ "safety_cleared": true,
116
+ "time_to_heal_sec": 0.0,
117
+ "max_time_allowed_sec": 1.0,
118
+ "time_compliant": true,
119
+ "token_consumption": 64,
120
+ "mutation_score": 100.0,
121
+ "zero_side_effect": true,
122
+ "resolution_notes": "Updated assertion contract: assert response.status_code in (200, 201)"
123
+ },
124
+ {
125
+ "id": "QA-CHALLENGE-10",
126
+ "name": "Authentication Header Prefix Upgrade",
127
+ "category": "api_contract_drift",
128
+ "difficulty": "EASY",
129
+ "status": "PASSED",
130
+ "resolved": true,
131
+ "safety_cleared": true,
132
+ "time_to_heal_sec": 0.0,
133
+ "max_time_allowed_sec": 1.5,
134
+ "time_compliant": true,
135
+ "token_consumption": 75,
136
+ "mutation_score": 100.0,
137
+ "zero_side_effect": true,
138
+ "resolution_notes": "Updated assertion contract: headers = {'Authorization': f'Bearer {auth_token}'}"
139
+ },
140
+ {
141
+ "id": "QA-CHALLENGE-21",
142
+ "name": "Swallowed HTTP 500 Error in Empty Catch Block",
143
+ "category": "fake_pass_tautology",
144
+ "difficulty": "EASY",
145
+ "status": "PASSED",
146
+ "resolved": true,
147
+ "safety_cleared": true,
148
+ "time_to_heal_sec": 0.0002,
149
+ "max_time_allowed_sec": 1.0,
150
+ "time_compliant": true,
151
+ "token_consumption": 65,
152
+ "mutation_score": 100.0,
153
+ "zero_side_effect": true,
154
+ "resolution_notes": "Injected robust assertion (Mutation Score: 100.0%): REMOVE_SWALLOWED_CATCH_AND_ASSERT"
155
+ },
156
+ {
157
+ "id": "QA-CHALLENGE-22",
158
+ "name": "Zero-Assertion Smoke Test (Tautological Pass)",
159
+ "category": "fake_pass_tautology",
160
+ "difficulty": "EASY",
161
+ "status": "PASSED",
162
+ "resolved": true,
163
+ "safety_cleared": true,
164
+ "time_to_heal_sec": 0.0001,
165
+ "max_time_allowed_sec": 1.5,
166
+ "time_compliant": true,
167
+ "token_consumption": 84,
168
+ "mutation_score": 100.0,
169
+ "zero_side_effect": true,
170
+ "resolution_notes": "Injected robust assertion (Mutation Score: 100.0%): INJECT_POST_CONDITION_ASSERTION"
171
+ },
172
+ {
173
+ "id": "QA-CHALLENGE-23",
174
+ "name": "Tautological assert true == true",
175
+ "category": "fake_pass_tautology",
176
+ "difficulty": "EASY",
177
+ "status": "PASSED",
178
+ "resolved": true,
179
+ "safety_cleared": true,
180
+ "time_to_heal_sec": 0.0001,
181
+ "max_time_allowed_sec": 1.0,
182
+ "time_compliant": true,
183
+ "token_consumption": 58,
184
+ "mutation_score": 100.0,
185
+ "zero_side_effect": true,
186
+ "resolution_notes": "Injected robust assertion (Mutation Score: 100.0%): MUTATION_TESTING_KILLS_TAUTOLOGY"
187
+ },
188
+ {
189
+ "id": "QA-CHALLENGE-24",
190
+ "name": "Unawaited Async Assertion (Silent Green Trap)",
191
+ "category": "fake_pass_tautology",
192
+ "difficulty": "MEDIUM",
193
+ "status": "PASSED",
194
+ "resolved": true,
195
+ "safety_cleared": true,
196
+ "time_to_heal_sec": 0.0,
197
+ "max_time_allowed_sec": 1.5,
198
+ "time_compliant": true,
199
+ "token_consumption": 64,
200
+ "mutation_score": 100.0,
201
+ "zero_side_effect": true,
202
+ "resolution_notes": "Injected robust assertion (Mutation Score: 100.0%): AST_ASYNC_AWAIT_ENFORCEMENT"
203
+ },
204
+ {
205
+ "id": "QA-CHALLENGE-25",
206
+ "name": "Unbounded Relational Assertion (status >= 200)",
207
+ "category": "fake_pass_tautology",
208
+ "difficulty": "EASY",
209
+ "status": "PASSED",
210
+ "resolved": true,
211
+ "safety_cleared": true,
212
+ "time_to_heal_sec": 0.0,
213
+ "max_time_allowed_sec": 1.2,
214
+ "time_compliant": true,
215
+ "token_consumption": 64,
216
+ "mutation_score": 100.0,
217
+ "zero_side_effect": true,
218
+ "resolution_notes": "Injected robust assertion (Mutation Score: 100.0%): BOUNDED_INTERVAL_ASSERTION"
219
+ },
220
+ {
221
+ "id": "QA-CHALLENGE-01",
222
+ "name": "Dynamic CSS-in-JS Hash Locator Shift",
223
+ "category": "locator_drift",
224
+ "difficulty": "MEDIUM",
225
+ "status": "PASSED",
226
+ "resolved": true,
227
+ "safety_cleared": true,
228
+ "time_to_heal_sec": 0.0002,
229
+ "max_time_allowed_sec": 2.0,
230
+ "time_compliant": true,
231
+ "token_consumption": 50,
232
+ "mutation_score": 100.0,
233
+ "zero_side_effect": true,
234
+ "resolution_notes": "Autonomous cascade healed: 'button.btn-submit' -> '[data-testid='submit-order-btn']' (confidence 0.98)"
235
+ },
236
+ {
237
+ "id": "QA-CHALLENGE-02",
238
+ "name": "Nested Shadow DOM Component Piercing",
239
+ "category": "locator_drift",
240
+ "difficulty": "HARD",
241
+ "status": "PASSED",
242
+ "resolved": true,
243
+ "safety_cleared": true,
244
+ "time_to_heal_sec": 0.0,
245
+ "max_time_allowed_sec": 3.0,
246
+ "time_compliant": true,
247
+ "token_consumption": 62,
248
+ "mutation_score": 100.0,
249
+ "zero_side_effect": true,
250
+ "resolution_notes": "Autonomous cascade healed: '#customer-email' -> 'template:has-text('<input id='customer-email' type='email' data-testid='user-email'/>')' (confidence 0.94)"
251
+ },
252
+ {
253
+ "id": "QA-CHALLENGE-03",
254
+ "name": "Semantic Text Label Evolution",
255
+ "category": "locator_drift",
256
+ "difficulty": "EASY",
257
+ "status": "PASSED",
258
+ "resolved": true,
259
+ "safety_cleared": true,
260
+ "time_to_heal_sec": 0.0,
261
+ "max_time_allowed_sec": 1.5,
262
+ "time_compliant": true,
263
+ "token_consumption": 50,
264
+ "mutation_score": 100.0,
265
+ "zero_side_effect": true,
266
+ "resolution_notes": "Autonomous cascade healed: '//button[text()='Submit Order']' -> '#order-cta' (confidence 0.9)"
267
+ },
268
+ {
269
+ "id": "QA-CHALLENGE-04",
270
+ "name": "Legacy ID Removed in Favor of data-testid",
271
+ "category": "locator_drift",
272
+ "difficulty": "EASY",
273
+ "status": "PASSED",
274
+ "resolved": true,
275
+ "safety_cleared": true,
276
+ "time_to_heal_sec": 0.0,
277
+ "max_time_allowed_sec": 1.5,
278
+ "time_compliant": true,
279
+ "token_consumption": 50,
280
+ "mutation_score": 100.0,
281
+ "zero_side_effect": true,
282
+ "resolution_notes": "Autonomous cascade healed: '#customer_name' -> '[data-testid='customer-name-field']' (confidence 0.98)"
283
+ },
284
+ {
285
+ "id": "QA-CHALLENGE-05",
286
+ "name": "HTML Tag Evolution: Anchor to ARIA Button",
287
+ "category": "locator_drift",
288
+ "difficulty": "MEDIUM",
289
+ "status": "PASSED",
290
+ "resolved": true,
291
+ "safety_cleared": true,
292
+ "time_to_heal_sec": 0.0,
293
+ "max_time_allowed_sec": 2.0,
294
+ "time_compliant": true,
295
+ "token_consumption": 50,
296
+ "mutation_score": 100.0,
297
+ "zero_side_effect": true,
298
+ "resolution_notes": "Autonomous cascade healed: 'a.nav-export' -> 'button' (confidence 0.9)"
299
+ },
300
+ {
301
+ "id": "QA-CHALLENGE-16",
302
+ "name": "WebSocket Table Auto-Refresh Stale Reference",
303
+ "category": "stale_and_mutation",
304
+ "difficulty": "HARD",
305
+ "status": "PASSED",
306
+ "resolved": true,
307
+ "safety_cleared": true,
308
+ "time_to_heal_sec": 0.0,
309
+ "max_time_allowed_sec": 2.5,
310
+ "time_compliant": true,
311
+ "token_consumption": 88,
312
+ "mutation_score": 100.0,
313
+ "zero_side_effect": true,
314
+ "resolution_notes": "Eliminated stale element trap: DYNAMIC_LOCATOR_REQUERY"
315
+ },
316
+ {
317
+ "id": "QA-CHALLENGE-17",
318
+ "name": "Tab Switch Component Unmount Detach",
319
+ "category": "stale_and_mutation",
320
+ "difficulty": "MEDIUM",
321
+ "status": "PASSED",
322
+ "resolved": true,
323
+ "safety_cleared": true,
324
+ "time_to_heal_sec": 0.0,
325
+ "max_time_allowed_sec": 2.0,
326
+ "time_compliant": true,
327
+ "token_consumption": 103,
328
+ "mutation_score": 100.0,
329
+ "zero_side_effect": true,
330
+ "resolution_notes": "Eliminated stale element trap: TAB_MOUNT_SYNCHRONIZATION"
331
+ },
332
+ {
333
+ "id": "QA-CHALLENGE-18",
334
+ "name": "Pagination Replaces tbody (Stale Row Index)",
335
+ "category": "stale_and_mutation",
336
+ "difficulty": "MEDIUM",
337
+ "status": "PASSED",
338
+ "resolved": true,
339
+ "safety_cleared": true,
340
+ "time_to_heal_sec": 0.0,
341
+ "max_time_allowed_sec": 2.0,
342
+ "time_compliant": true,
343
+ "token_consumption": 97,
344
+ "mutation_score": 100.0,
345
+ "zero_side_effect": true,
346
+ "resolution_notes": "Eliminated stale element trap: PAGINATION_NETWORK_SYNC"
347
+ },
348
+ {
349
+ "id": "QA-CHALLENGE-19",
350
+ "name": "Reopened Modal Generates Fresh DOM Node",
351
+ "category": "stale_and_mutation",
352
+ "difficulty": "MEDIUM",
353
+ "status": "PASSED",
354
+ "resolved": true,
355
+ "safety_cleared": true,
356
+ "time_to_heal_sec": 0.0,
357
+ "max_time_allowed_sec": 2.0,
358
+ "time_compliant": true,
359
+ "token_consumption": 111,
360
+ "mutation_score": 100.0,
361
+ "zero_side_effect": true,
362
+ "resolution_notes": "Eliminated stale element trap: VISIBLE_SELECTOR_REBIND"
363
+ },
364
+ {
365
+ "id": "QA-CHALLENGE-20",
366
+ "name": "Locale Swap Invalidates Hardcoded Text Selectors",
367
+ "category": "stale_and_mutation",
368
+ "difficulty": "EASY",
369
+ "status": "PASSED",
370
+ "resolved": true,
371
+ "safety_cleared": true,
372
+ "time_to_heal_sec": 0.0,
373
+ "max_time_allowed_sec": 1.5,
374
+ "time_compliant": true,
375
+ "token_consumption": 74,
376
+ "mutation_score": 100.0,
377
+ "zero_side_effect": true,
378
+ "resolution_notes": "Eliminated stale element trap: LOCALE_AGNOSTIC_DATA_ATTRIBUTES"
379
+ },
380
+ {
381
+ "id": "QA-CHALLENGE-11",
382
+ "name": "Network Latency Spike (3,500ms Throttle) Breaking Static Sleep",
383
+ "category": "timing_and_race",
384
+ "difficulty": "MEDIUM",
385
+ "status": "PASSED",
386
+ "resolved": true,
387
+ "safety_cleared": true,
388
+ "time_to_heal_sec": 0.0,
389
+ "max_time_allowed_sec": 2.5,
390
+ "time_compliant": true,
391
+ "token_consumption": 88,
392
+ "mutation_score": 100.0,
393
+ "zero_side_effect": true,
394
+ "resolution_notes": "Replaced brittle timing with dynamic smart barrier: DYNAMIC_SMART_WAIT"
395
+ },
396
+ {
397
+ "id": "QA-CHALLENGE-12",
398
+ "name": "PrimeNG Modal Backdrop Fading Intercept",
399
+ "category": "timing_and_race",
400
+ "difficulty": "HARD",
401
+ "status": "PASSED",
402
+ "resolved": true,
403
+ "safety_cleared": true,
404
+ "time_to_heal_sec": 0.0,
405
+ "max_time_allowed_sec": 3.0,
406
+ "time_compliant": true,
407
+ "token_consumption": 91,
408
+ "mutation_score": 100.0,
409
+ "zero_side_effect": true,
410
+ "resolution_notes": "Replaced brittle timing with dynamic smart barrier: OVERLAY_SAFE_DISPATCH"
411
+ },
412
+ {
413
+ "id": "QA-CHALLENGE-13",
414
+ "name": "Debounced Search Input Autocomplete Race",
415
+ "category": "timing_and_race",
416
+ "difficulty": "MEDIUM",
417
+ "status": "PASSED",
418
+ "resolved": true,
419
+ "safety_cleared": true,
420
+ "time_to_heal_sec": 0.0,
421
+ "max_time_allowed_sec": 2.5,
422
+ "time_compliant": true,
423
+ "token_consumption": 104,
424
+ "mutation_score": 100.0,
425
+ "zero_side_effect": true,
426
+ "resolution_notes": "Replaced brittle timing with dynamic smart barrier: CDP_RESPONSE_BARRIER"
427
+ },
428
+ {
429
+ "id": "QA-CHALLENGE-14",
430
+ "name": "Async Chart SVG Animation Race Condition",
431
+ "category": "timing_and_race",
432
+ "difficulty": "MEDIUM",
433
+ "status": "PASSED",
434
+ "resolved": true,
435
+ "safety_cleared": true,
436
+ "time_to_heal_sec": 0.0,
437
+ "max_time_allowed_sec": 2.0,
438
+ "time_compliant": true,
439
+ "token_consumption": 82,
440
+ "mutation_score": 100.0,
441
+ "zero_side_effect": true,
442
+ "resolution_notes": "Replaced brittle timing with dynamic smart barrier: SVG_VISIBILITY_SMART_WAIT"
443
+ },
444
+ {
445
+ "id": "QA-CHALLENGE-15",
446
+ "name": "Infinite Scroll Lazy Loaded Chunk Detach",
447
+ "category": "timing_and_race",
448
+ "difficulty": "MEDIUM",
449
+ "status": "PASSED",
450
+ "resolved": true,
451
+ "safety_cleared": true,
452
+ "time_to_heal_sec": 0.0,
453
+ "max_time_allowed_sec": 2.0,
454
+ "time_compliant": true,
455
+ "token_consumption": 82,
456
+ "mutation_score": 100.0,
457
+ "zero_side_effect": true,
458
+ "resolution_notes": "Replaced brittle timing with dynamic smart barrier: VIRTUAL_SCROLL_INTO_VIEW"
459
+ }
460
+ ]
105
461
  }
package/bin/agent-qa.js CHANGED
@@ -69,7 +69,12 @@ function main() {
69
69
  process.exit(1);
70
70
  }
71
71
 
72
- const args = [CLI_PATH, ...process.argv.slice(2)];
72
+ let args;
73
+ if (process.argv[2] === '--py') {
74
+ args = process.argv.slice(3);
75
+ } else {
76
+ args = [CLI_PATH, ...process.argv.slice(2)];
77
+ }
73
78
 
74
79
  // Spawn child Python process inheriting standard IO
75
80
  const child = spawn(python.command, args, {
@@ -1,7 +1,7 @@
1
1
  # Agent-Skills Architecture & Design Principles
2
2
 
3
3
  > **Scope:** Enterprise Multi-Agent QA Hub
4
- > **Version:** `2.3.0` | **Status:** Active / Production Standard
4
+ > **Version:** `2.4.2` | **Status:** Active / Production Standard
5
5
 
6
6
  ---
7
7
 
@@ -38,7 +38,7 @@ flowchart TD
38
38
 
39
39
  ## 2. Four-Tier Skill Stratification
40
40
 
41
- The 37 skills in the hub are structured into four progressive operational tiers:
41
+ The 38 skills in the hub are structured into four progressive operational tiers:
42
42
 
43
43
  ```mermaid
44
44
  flowchart LR
@@ -105,3 +105,14 @@ The Hub equips 6 specialized subagents with scoped tool and skill permissions:
105
105
  | **`test-runner`** | Headless CLI test execution & CI | `katalon-cli-runner`, `e2e-testing-patterns`, `flaky-test-sentinel-and-quarantine`, `backend-load-and-stress-patterns`, `github-actions-templates` | `matrix_sharder.py`, `distill_log.py`, `pinpoint_failure.py`, `flaky_detector.py` |
106
106
  | **`failure-analyst`**| Visual & XML error autopsy | `failure-autopsy-and-healing`, `self-healing-locator`, `file-and-report-validator` | `auto_heal.py`, `heal_pr_automator.py`, `pinpoint_failure.py`, `cache_resolver.py` |
107
107
  | **`quality-gatekeeper`**| 9 Gates DoD & Fake-Pass Sentinel | `antigravity-test-sentinel`, `code-refactoring-refactor-clean`, `wcag-audit-patterns`, `web-vitals-and-performance-profiler`, `security-dast-sentinel` | `verify_all.py`, `infer_linter.py`, `micro_mutator.py`, `trace_data_flow.py` |
108
+
109
+ ---
110
+
111
+ ## 6. Nomenclature & Package Architecture
112
+
113
+ To ensure consistency across various distribution registries and developer interfaces:
114
+ - **Ecosystem / Project Name:** Synapse Hub (`Synapse-Hub` on GitHub)
115
+ - **NPM Package & Antigravity Plugin:** `synapse-hub` (distributed on NPM Registry and Antigravity Marketplace)
116
+ - **Python Package & Universal CLI:** `agent-qa` (PEP 621 package on PyPI providing the `agent-qa` CLI binary)
117
+ - **MCP Server Protocol Services:** `enterprise-agent-qa` (Core QA MCP server) and `synapse-mcp-excel` (Excel tool server)
118
+ - **Skill Catalog Manifest:** `enterprise-agent-skills-hub` (internal catalog schema identifier in `skills_manifest.json`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synapse-hub",
3
- "version": "2.4.0",
3
+ "version": "2.4.2",
4
4
  "description": "Enterprise AI Agent Intelligence Hub & Autonomous Skill Network",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -73,11 +73,11 @@
73
73
  "lint": "node ./bin/agent-qa.js lint",
74
74
  "dashboard": "node ./bin/agent-qa.js dashboard",
75
75
  "watch": "node ./bin/agent-qa.js watch",
76
- "test": "python3 -m unittest discover tests -p 'test_*.py'",
77
- "bump": "python3 tools/bump_version.py",
78
- "bump:minor": "python3 tools/bump_version.py minor",
79
- "bump:major": "python3 tools/bump_version.py major",
80
- "release": "python3 tools/bump_version.py patch --commit --push"
76
+ "test": "node ./bin/agent-qa.js --py -m unittest discover tests -p \"test_*.py\"",
77
+ "bump": "node ./bin/agent-qa.js --py tools/bump_version.py",
78
+ "bump:minor": "node ./bin/agent-qa.js --py tools/bump_version.py minor",
79
+ "bump:major": "node ./bin/agent-qa.js --py tools/bump_version.py major",
80
+ "release": "node ./bin/agent-qa.js --py tools/bump_version.py patch --commit --push"
81
81
  },
82
82
  "engines": {
83
83
  "node": ">=18.0.0"