{ "ok": false, "strict": false, "browserSkipped": false, "lint": { "ok": true, "errorCount": 0, "warningCount": 11, "infoCount": 0, "findings": [ { "code": "duplicate_media_discovery_risk", "severity": "warning", "message": "Detected 7 matching img entries with the same source/start/duration.", "selector": "[data-composition-id]", "dataAttributes": {}, "sourceFile": "/root/simbiot-harness/video/carousel-ai-future/index.html", "bbox": { "x": 0, "y": 0, "width": 0, "height": 0 }, "time": 0, "fixHint": "Avoid duplicated media nodes that can be discovered twice during compilation." }, { "code": "timeline_track_too_dense", "severity": "warning", "message": "Track 1 has 8 timed elements in this HTML file. Smaller sub-compositions keep timelines easier to read, iterate on, and diff.", "selector": "[data-composition-id]", "dataAttributes": {}, "sourceFile": "/root/simbiot-harness/video/carousel-ai-future/index.html", "bbox": { "x": 0, "y": 0, "width": 0, "height": 0 }, "time": 0, "fixHint": "Move coherent scene groups into separate .html files under compositions/ and mount them from the parent with data-composition-src so the timeline stays easier to inspect, revise, and validate." }, { "code": "nested_structure_needs_subcomposition", "severity": "warning", "message": "
is a timeline element that contains nested
. The timeline shows one row per top-level element, and the root composition is built only from sub-compositions.", "selector": "#bg", "dataAttributes": {}, "sourceFile": "/root/simbiot-harness/video/carousel-ai-future/index.html", "bbox": { "x": 0, "y": 0, "width": 0, "height": 0 }, "time": 0, "fixHint": "Move
and its contents into a sub-composition file and mount it with data-composition-src." }, { "code": "nested_structure_needs_subcomposition", "severity": "warning", "message": "
is a timeline element that contains nested
. The timeline shows one row per top-level element, and the root composition is built only from sub-compositions.", "selector": "#s1", "dataAttributes": {}, "sourceFile": "/root/simbiot-harness/video/carousel-ai-future/index.html", "bbox": { "x": 0, "y": 0, "width": 0, "height": 0 }, "time": 0, "fixHint": "Move
and its contents into a sub-composition file and mount it with data-composition-src." }, { "code": "nested_structure_needs_subcomposition", "severity": "warning", "message": "
is a timeline element that contains nested
. The timeline shows one row per top-level element, and the root composition is built only from sub-compositions.", "selector": "#s2", "dataAttributes": {}, "sourceFile": "/root/simbiot-harness/video/carousel-ai-future/index.html", "bbox": { "x": 0, "y": 0, "width": 0, "height": 0 }, "time": 0, "fixHint": "Move
and its contents into a sub-composition file and mount it with data-composition-src." }, { "code": "nested_structure_needs_subcomposition", "severity": "warning", "message": "
is a timeline element that contains nested
. The timeline shows one row per top-level element, and the root composition is built only from sub-compositions.", "selector": "#s3", "dataAttributes": {}, "sourceFile": "/root/simbiot-harness/video/carousel-ai-future/index.html", "bbox": { "x": 0, "y": 0, "width": 0, "height": 0 }, "time": 0, "fixHint": "Move
and its contents into a sub-composition file and mount it with data-composition-src." }, { "code": "nested_structure_needs_subcomposition", "severity": "warning", "message": "
is a timeline element that contains nested
. The timeline shows one row per top-level element, and the root composition is built only from sub-compositions.", "selector": "#s4", "dataAttributes": {}, "sourceFile": "/root/simbiot-harness/video/carousel-ai-future/index.html", "bbox": { "x": 0, "y": 0, "width": 0, "height": 0 }, "time": 0, "fixHint": "Move
and its contents into a sub-composition file and mount it with data-composition-src." }, { "code": "nested_structure_needs_subcomposition", "severity": "warning", "message": "
is a timeline element that contains nested
. The timeline shows one row per top-level element, and the root composition is built only from sub-compositions.", "selector": "#s5", "dataAttributes": {}, "sourceFile": "/root/simbiot-harness/video/carousel-ai-future/index.html", "bbox": { "x": 0, "y": 0, "width": 0, "height": 0 }, "time": 0, "fixHint": "Move
and its contents into a sub-composition file and mount it with data-composition-src." }, { "code": "nested_structure_needs_subcomposition", "severity": "warning", "message": "
is a timeline element that contains nested
. The timeline shows one row per top-level element, and the root composition is built only from sub-compositions.", "selector": "#s6", "dataAttributes": {}, "sourceFile": "/root/simbiot-harness/video/carousel-ai-future/index.html", "bbox": { "x": 0, "y": 0, "width": 0, "height": 0 }, "time": 0, "fixHint": "Move
and its contents into a sub-composition file and mount it with data-composition-src." }, { "code": "nested_structure_needs_subcomposition", "severity": "warning", "message": "
is a timeline element that contains nested
. The timeline shows one row per top-level element, and the root composition is built only from sub-compositions.", "selector": "#s7", "dataAttributes": {}, "sourceFile": "/root/simbiot-harness/video/carousel-ai-future/index.html", "bbox": { "x": 0, "y": 0, "width": 0, "height": 0 }, "time": 0, "fixHint": "Move
and its contents into a sub-composition file and mount it with data-composition-src." }, { "code": "nested_structure_needs_subcomposition", "severity": "warning", "message": "
is a timeline element that contains nested
. The timeline shows one row per top-level element, and the root composition is built only from sub-compositions.", "selector": "#s8", "dataAttributes": {}, "sourceFile": "/root/simbiot-harness/video/carousel-ai-future/index.html", "bbox": { "x": 0, "y": 0, "width": 0, "height": 0 }, "time": 0, "fixHint": "Move
and its contents into a sub-composition file and mount it with data-composition-src." } ], "filesScanned": 1 }, "runtime": { "ok": true, "errorCount": 0, "warningCount": 0, "infoCount": 0, "findings": [] }, "layout": { "ok": false, "errorCount": 1, "warningCount": 0, "infoCount": 2, "findings": [ { "code": "content_overlap", "severity": "error", "time": 8.916, "selector": "#s3-ring > div:nth-of-type(6)", "message": "Two text blocks overlap and may render unreadable.", "rect": { "left": 494.81, "top": 1115.5, "right": 585.17, "bottom": 1144.5, "width": 90.36, "height": 29 }, "containerSelector": "#s3-sub", "text": "memory", "fixHint": "Give each block its own zone, or put data-layout-allow-overlap on the text or on a container inside the scene. A marker on the scene root does not apply.", "dataAttributes": {}, "sourceFile": "index.html", "bbox": { "x": 494.81, "y": 1115.5, "width": 90.36, "height": 29 }, "firstSeen": 8.916, "lastSeen": 10.48, "occurrences": 11, "heldMs": 1564, "times": [ 8.916, 9.073, 9.229, 9.385, 9.542, 9.698, 9.855, 10.011, 10.168, 10.324, 10.48 ] }, { "code": "container_overflow", "severity": "info", "time": 1.556, "selector": "#s1-photo", "message": "Element extends outside a clipping layout container.", "rect": { "left": -10.75, "top": -13.43, "right": 1090.75, "bottom": 1363.43, "width": 1101.49, "height": 1376.86 }, "containerSelector": "#s1", "fixHint": "Resize/reposition the child or container, or mark intentional overflow with data-layout-allow-overflow.", "containerRect": { "left": 0, "top": 0, "right": 1080, "bottom": 1350, "width": 1080, "height": 1350 }, "overflow": { "left": 10.75, "right": 10.75, "top": 13.43, "bottom": 13.43 }, "dataAttributes": {}, "sourceFile": "index.html", "bbox": { "x": -10.75, "y": -13.43, "width": 1101.49, "height": 1376.86 }, "firstSeen": 1.556, "lastSeen": 1.556, "occurrences": 1, "heldMs": 0, "times": [ 1.556 ] }, { "code": "container_overflow", "severity": "info", "time": 10.889, "selector": "#s4-photo", "message": "Element extends outside a clipping layout container.", "rect": { "left": -38.34, "top": -22.72, "right": 1118.34, "bottom": 662.72, "width": 1156.68, "height": 685.44 }, "containerSelector": "#s4", "fixHint": "Resize/reposition the child or container, or mark intentional overflow with data-layout-allow-overflow.", "containerRect": { "left": 0, "top": 0, "right": 1080, "bottom": 1350, "width": 1080, "height": 1350 }, "overflow": { "left": 38.34, "right": 38.34, "top": 22.72 }, "dataAttributes": {}, "sourceFile": "index.html", "bbox": { "x": -38.34, "y": -22.72, "width": 1156.68, "height": 685.44 }, "firstSeen": 10.889, "lastSeen": 10.889, "occurrences": 1, "heldMs": 0, "times": [ 10.889 ] } ], "duration": 28, "samples": [ 1.556, 4.667, 7.778, 10.889, 14, 17.111, 20.222, 23.333, 26.444 ], "transitionSamples": [], "transitionSamplesDropped": 0, "tolerance": 2, "totalIssueCount": 3, "truncated": false }, "motion": { "ok": true, "errorCount": 0, "warningCount": 0, "infoCount": 0, "findings": [], "enabled": false, "samples": 0 }, "contrast": { "ok": true, "errorCount": 0, "warningCount": 2, "infoCount": 0, "findings": [ { "code": "contrast_aa_failure", "severity": "warning", "message": "Contrast is 1.89:1; WCAG AA requires 4.5:1.", "text": "06 / 08", "fg": "rgb(168,162,151)", "bg": "rgb(222,222,222)", "ratio": 1.89, "requiredRatio": 4.5, "suggestedColor": "rgb(102,98,92)", "large": false, "selector": "div > section:nth-of-type(6) > div:nth-of-type(3) > div", "dataAttributes": {}, "sourceFile": "index.html", "bbox": { "x": 895.859375, "y": 69.5, "width": 120.140625, "height": 29 }, "time": 20.222, "times": [ 20.222 ] }, { "code": "contrast_aa_failure", "severity": "warning", "message": "Contrast is 1.17:1; WCAG AA requires 3:1.", "text": "06", "fg": "rgb(236,230,218)", "bg": "rgb(214,214,214)", "ratio": 1.17, "requiredRatio": 3, "suggestedColor": "rgb(123,120,114)", "large": true, "selector": "div > section:nth-of-type(6) > div:nth-of-type(3) > div > b", "dataAttributes": {}, "sourceFile": "index.html", "bbox": { "x": 895.859375, "y": 69.5, "width": 34.328125, "height": 29 }, "time": 20.222, "times": [ 20.222 ] } ], "enabled": true, "samples": [ 1.556, 7.778, 14, 20.222, 26.444 ], "checked": 33, "passed": 31 }, "hdr": { "autoPromotion": null, "inspection": "available" }, "snapshots": { "enabled": false, "files": [], "times": [], "findingFiles": [] } }