AI-assisted root-cause analysis for QA test failures. Supports Playwright, pytest, Jest/Vitest, and Cypress/WebdriverIO. Call `analyze` for the full ten-phase flow, or call individual phase tools (`collect_failures`, `scan_git_history`, etc.) for fine-grained control.
Server has 9 tools with complete schemas and descriptions, but quality is uneven. Most tools follow verb_noun naming (collect_failures, scan_logs_tool, form_hypotheses_tool) but three tools have '_tool' suffix (scan_git_history_tool, scan_logs_tool, scan_config_tool) which is redundant and violates naming conventions. Descriptions are present (avg ~120 chars) but lack actionable context for LLM selection, they state WHAT but not WHEN or WHY. Parameters have types and descriptions, but many lack constraints (enums, ranges). Error handling is minimal; most tools return dicts without recovery guidance. Output schemas are documented in code but not formally declared in tool registration. create_github_issue has a dry_run default (true) which is safe, but other tools lack confirmation patterns for destructive operations.
Parse a test results file and return normalized failures (Phase 1).
Build a correlation matrix and failure clusters (Phase 6). ``failures`` should be the list of failure dicts from ``collect_failures``.
Create a GitHub issue from a hypothesis. Either pass a ``hypothesis`` dict (preferred — full evidence chain included) or override with ``title`` + ``body_md``. ``repo`` defaults to ``GITHUB_REPOSITORY``. ``dry_run=True`` (default) returns what would be created without hitting GitHub.
Produce ranked hypotheses with confidence scores (Phase 7).
Read a spec file to extract the developer's intent (Phase 2). Returns the file's contents plus any inline comments around ``line``.
Render the final report (Phase 8). ``format`` is ``markdown`` or ``json``.
Three tools have redundant '_tool' suffix (scan_git_history_tool, scan_logs_tool, scan_config_tool). Naming should be verb_noun without suffix. LLMs parse tool names to infer intent, '_tool' adds no semantic value and violates production naming conventions.
Descriptions lack WHEN/WHY context. E.g., 'Scan application logs for error-level lines' does not explain when to call this vs. other evidence tools, or what the LLM should do with the results. Descriptions should guide tool selection and downstream reasoning.
Parameters lack constraints. 'framework' in collect_failures accepts 'auto' or named frameworks but no enum is declared. 'format' in render_report accepts 'markdown' or 'json' but no enum constraint. Free-form strings invite hallucinated values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Scan environment and configuration files (Phase 5).
Collect recent git commits with risk flags (Phase 3).
Scan application logs for error-level lines (Phase 4).
Error handling is minimal. Tools return dicts with 'evidence' field but no recovery guidance. E.g., read_test_intent returns {'available': False, 'reason': '...'} but does not suggest next steps (e.g., 'Try a different file path' or 'List available spec files').
Output schemas are documented in docstrings but not formally declared in tool registration. LLMs cannot see the structure of 'failures', 'clusters', 'matrix' fields without explicit schema documentation in the tool definition.