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.goline 8488client/client.goline 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.golines 9267-9285
Fix Applied:
- Modified JavaScript to return JSON string using
JSON.stringify() - 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.golines 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
-
daemon/daemon.go
- Line 8488: Fixed
AxeCheckResult.Datatype - Lines 9267-9285: Fixed zoom test viewport parsing
- Lines 9536-9554: Fixed reflow test viewport parsing
- Line 8488: Fixed
-
client/client.go
- Line 3328: Fixed
AxeCheckResult.Datatype
- Line 3328: Fixed
-
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
- Re-deploy cremote daemon/MCP server with the fixed binary
- Resume comprehensive testing with all tools functional
- Complete site-wide crawl of all public pages
- Test all forms without submission
- 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
- Add integration tests for axe-core JSON parsing with various data types
- Add unit tests for viewport data parsing in zoom/reflow functions
- Consider CI/CD pipeline to catch these issues before deployment
- 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:
- Priority 1 (Critical): Add visible focus indicators to all interactive elements
- Priority 1 (Critical): Fix keyboard accessibility for form select dropdowns
- Priority 2 (High): Complete automated testing with axe-core after deployment
- 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