Files
cremote/BUG_FIXES_AND_TESTING_REPORT.md
Josh at WLTechBlog 0898f36260 bump
2025-10-02 12:48:12 -05:00

9.7 KiB

Cremote ADA Testing - Bug Fixes and Assessment Report

Date: 2025-10-02
Site Tested: https://visionleadership.org
Assessment Type: WCAG 2.1 Level AA Compliance
Status: ⚠️ PARTIAL - Critical bugs fixed, requires re-deployment


Executive Summary

During comprehensive ADA Level AA accessibility testing of visionleadership.org, three critical bugs were discovered in the cremote MCP tools that prevented complete automated testing. All bugs have been identified, fixed, and verified in the codebase. The fixes require re-deployment of the cremote daemon/MCP server to take effect.

Critical Bugs Found and Fixed

Bug Tool Impact Status
#1 web_run_axe_cremotemcp JSON parsing error - blocks ~57% of WCAG testing FIXED
#2 web_zoom_test_cremotemcp Viewport data parsing error - blocks WCAG 1.4.4 testing FIXED
#3 web_reflow_test_cremotemcp Viewport data parsing error - blocks WCAG 1.4.10 testing FIXED

Bug Details and Fixes

Bug #1: Axe-Core JSON Parsing Error

Error Message:

json: cannot unmarshal string into Go struct field AxeCheckResult.passes.nodes.any.data of type map[string]interface {}

Root Cause: The Data field in AxeCheckResult struct was defined as map[string]interface{}, but axe-core sometimes returns this field as a string instead of an object, causing JSON unmarshaling to fail.

Location:

  • daemon/daemon.go line 8488
  • client/client.go line 3328

Fix Applied: Changed the Data field type from map[string]interface{} to json.RawMessage to handle both string and object types:

// Before:
type AxeCheckResult struct {
    ID      string                 `json:"id"`
    Impact  string                 `json:"impact"`
    Message string                 `json:"message"`
    Data    map[string]interface{} `json:"data"`
}

// After:
type AxeCheckResult struct {
    ID      string          `json:"id"`
    Impact  string          `json:"impact"`
    Message string          `json:"message"`
    Data    json.RawMessage `json:"data"` // Can be string or object, use RawMessage
}

Impact:

  • Blocks automated WCAG testing covering ~57% of WCAG 2.1 Level AA criteria
  • Prevents detection of critical issues like missing alt text, improper ARIA, form label problems
  • This is the PRIMARY automated accessibility testing tool

Bug #2: Zoom Test Viewport Parsing Error

Error Message:

failed to parse viewport data: invalid character 'm' looking for beginning of value

Root Cause: The code was using originalViewport.Value.String() which returns a formatted string representation (e.g., "map[width:1280 height:800]") instead of valid JSON. Additionally, the JavaScript wasn't returning a JSON string.

Location:

  • daemon/daemon.go lines 9267-9285

Fix Applied:

  1. Modified JavaScript to return JSON string using JSON.stringify()
  2. Changed Go code to use .Str() instead of .String() to get the JSON string value
// Before:
originalViewport, err := page.Eval(`() => {
    return {
        width: window.innerWidth,
        height: window.innerHeight
    };
}`)
// ...
err = json.Unmarshal([]byte(originalViewport.Value.String()), &viewportData)

// After:
originalViewport, err := page.Eval(`() => {
    return JSON.stringify({
        width: window.innerWidth,
        height: window.innerHeight
    });
}`)
// ...
err = json.Unmarshal([]byte(originalViewport.Value.Str()), &viewportData)

Impact:

  • Blocks WCAG 1.4.4 (Resize Text - Level AA) testing
  • Cannot verify content remains functional at 200% and 400% zoom
  • Critical for users with low vision who rely on browser zoom

Bug #3: Reflow Test Viewport Parsing Error

Error Message:

failed to parse viewport data: invalid character 'm' looking for beginning of value

Root Cause: Identical to Bug #2 - using String() instead of Str() and not returning JSON from JavaScript.

Location:

  • daemon/daemon.go lines 9536-9554

Fix Applied: Same fix as Bug #2:

// Before:
originalViewport, err := page.Eval(`() => {
    return {
        width: window.innerWidth,
        height: window.innerHeight
    };
}`)
// ...
err = json.Unmarshal([]byte(originalViewport.Value.String()), &viewportData)

// After:
originalViewport, err := page.Eval(`() => {
    return JSON.stringify({
        width: window.innerWidth,
        height: window.innerHeight
    });
}`)
// ...
err = json.Unmarshal([]byte(originalViewport.Value.Str()), &viewportData)

Impact:

  • Blocks WCAG 1.4.10 (Reflow - Level AA) testing
  • Cannot verify responsive design at 320px and 1280px widths
  • Critical for mobile users and users who need to zoom content

Files Modified

  1. daemon/daemon.go

    • Line 8488: Fixed AxeCheckResult.Data type
    • Lines 9267-9285: Fixed zoom test viewport parsing
    • Lines 9536-9554: Fixed reflow test viewport parsing
  2. client/client.go

    • Line 3328: Fixed AxeCheckResult.Data type
  3. mcp/cremote-mcp (binary)

    • Rebuilt successfully at 2025-10-02 12:43
    • Size: 9.8M
    • Ready for deployment

Verification Status

Code Changes: All fixes applied and verified in source code
Build Status: MCP binary rebuilt successfully
⚠️ Runtime Testing: Requires re-deployment to test fixes
Deployment: Pending (user indicated container should not be restarted during development)


Partial Assessment Results

Testing was conducted with the working tools before bugs were discovered:

Tools Successfully Tested

web_contrast_check_cremotemcp - Working perfectly
web_keyboard_test_cremotemcp - Working perfectly
get_accessibility_tree_cremotemcp - Working perfectly
web_screenshot_cremotemcp - Working perfectly (with zoom_level and viewport parameters)
web_navigate_cremotemcp - Working perfectly
web_page_info_cremotemcp - Working perfectly
web_viewport_info_cremotemcp - Working perfectly

Tools Blocked by Bugs

web_run_axe_cremotemcp - Bug #1 (JSON parsing)
web_zoom_test_cremotemcp - Bug #2 (viewport parsing)
web_reflow_test_cremotemcp - Bug #3 (viewport parsing)


Preliminary Findings (visionleadership.org)

Based on limited testing with working tools:

Homepage (/)

WCAG 2.4.7 Focus Visible (Level AA) - CRITICAL FAILURE

  • Issue: 32 of 32 interactive elements lack visible focus indicators
  • Impact: Keyboard-only users cannot see where focus is
  • Elements Affected: All links, buttons, form inputs
  • Severity: HIGH - Blocks keyboard navigation for users with motor disabilities

WCAG 1.4.3 Contrast Minimum (Level AA) - PASS

  • Body text: 5.74:1 contrast ratio (requires 4.5:1)
  • Colors: rgb(102, 102, 102) on rgb(255, 255, 255)

WCAG 1.4.6 Contrast Enhanced (Level AAA) - ⚠️ FAIL

  • Body text: 5.74:1 contrast ratio (requires 7:1 for AAA)
  • Note: AAA is not required for Level AA compliance

About Page (/about/)

WCAG 2.4.7 Focus Visible (Level AA) - CRITICAL FAILURE

  • Issue: 11 of 11 interactive elements lack visible focus indicators
  • Severity: HIGH

Contact Page (/contact-us/)

WCAG 2.4.7 Focus Visible (Level AA) - CRITICAL FAILURE

  • Issue: 21 of 21 interactive elements lack visible focus indicators
  • Severity: HIGH

WCAG 2.1.1 Keyboard (Level A) - FAILURE

  • Issue: 1 select dropdown not keyboard focusable
  • Element: #forminator-form-31560__field--select-1_68deb726bf325
  • Severity: HIGH - Form cannot be completed with keyboard only

Form Accessibility - PARTIAL PASS

  • All form fields have proper labels
  • ARIA attributes present
  • reCAPTCHA present (may need manual verification)

Next Steps

Immediate Actions Required

  1. Re-deploy cremote daemon/MCP server with the fixed binary
  2. Resume comprehensive testing with all tools functional
  3. Complete site-wide crawl of all public pages
  4. Test all forms without submission
  5. Generate final comprehensive report

Testing Checklist (Post-Deployment)

  • Verify axe-core integration works (Bug #1 fix)
  • Verify zoom testing works at 100%, 200%, 400% (Bug #2 fix)
  • Verify reflow testing works at 320px, 1280px (Bug #3 fix)
  • Complete homepage assessment
  • Test all navigation pages
  • Test all service pages
  • Test all forms (contact, application, etc.)
  • Test calendar/events pages
  • Test partner/sponsor pages
  • Generate final report with WCAG compliance matrix

Recommendations

For Cremote Development

  1. Add integration tests for axe-core JSON parsing with various data types
  2. Add unit tests for viewport data parsing in zoom/reflow functions
  3. Consider CI/CD pipeline to catch these issues before deployment
  4. Document Rod library quirks (.Str() vs .String(), JSON.stringify requirements)

For visionleadership.org

Based on preliminary findings, the site has critical accessibility issues that should be addressed:

  1. Priority 1 (Critical): Add visible focus indicators to all interactive elements
  2. Priority 1 (Critical): Fix keyboard accessibility for form select dropdowns
  3. Priority 2 (High): Complete automated testing with axe-core after deployment
  4. Priority 3 (Medium): Test zoom and reflow functionality after deployment

Conclusion

Three critical bugs in cremote MCP tools were discovered during ADA testing. All bugs have been successfully fixed in the codebase and the MCP binary has been rebuilt. The fixes are ready for deployment.

Once deployed, comprehensive WCAG 2.1 Level AA testing can proceed with full tool coverage (~70% automated testing capability).

Status: Bugs Fixed - Awaiting Deployment - 🔄 Testing Incomplete