From 4d840553d6073b01b46f30154493c9fa4735ed4f Mon Sep 17 00:00:00 2001 From: Alejandro Lembke Barrientos Date: Wed, 5 Aug 2026 01:49:59 +0000 Subject: [PATCH] Phase 6.4.27: re-measure g5-08-reparacion-grises to complete gate 5 full on v2b-NVFP4 g5-08 was pending since it fell mid-run when Penpot's plugin disconnected ("No Penpot plugin instances are currently connected"). Re-run in isolation via GATE5_ONLY, per the established pattern: score 64.7, clean veto, no placeholder greys. Gate 5 full mode on v2b-NVFP4 is now complete (10/10): mean score 28.2 (threshold 65), clean veto 6/10, prompts>=60 2/10, pizzeria landing 47.8 (threshold 60) -- verdict: DOES NOT APPROVE. --- data/gate5_paginas_v2b-nvfp4-full.json | 65 +++ .../g5-08-reparacion-grises.png | Bin 0 -> 72320 bytes data/gate5_results_v2b-nvfp4-full.json | 437 +++++++++++++++++- 3 files changed, 485 insertions(+), 17 deletions(-) create mode 100644 data/gate5_paginas_v2b-nvfp4-full.json create mode 100644 data/gate5_png_v2b-nvfp4-full/g5-08-reparacion-grises.png diff --git a/data/gate5_paginas_v2b-nvfp4-full.json b/data/gate5_paginas_v2b-nvfp4-full.json new file mode 100644 index 0000000..cdd2e3c --- /dev/null +++ b/data/gate5_paginas_v2b-nvfp4-full.json @@ -0,0 +1,65 @@ +{ + "total": 109, + "nombres": [ + "gate5/prod-baseline/g5-01-boton-primario/20260730T172916Z", + "gate5/prod-baseline/g5-01-boton-primario/20260730T173054Z", + "gate5/prod-baseline/g5-02-navbar-flex/20260730T173154Z", + "gate5/prod-baseline/g5-03-card-producto/20260730T173348Z", + "gate5/prod-baseline/g5-04-tokens-biblioteca/20260730T173445Z", + "gate5/prod-baseline/g5-01-boton-primario/20260730T175220Z", + "gate5/prod-baseline/g5-02-navbar-flex/20260730T175644Z", + "gate5/prod-baseline/g5-03-card-producto/20260730T175753Z", + "gate5/prod-baseline/g5-04-tokens-biblioteca/20260730T175855Z", + "gate5/prod-baseline/g5-05-grid-tres-diferenciales/20260730T175957Z", + "gate5/prod-baseline/g5-06-landing-pizzeria/20260730T180102Z", + "gate5/prod-baseline/g5-06-landing-pizzeria/20260730T180102Z", + "gate5/prod-baseline/g5-07-onboarding-mobile/20260730T180525Z", + "gate5/prod-baseline/g5-08-reparacion-grises/20260730T180627Z", + "gate5/prod-baseline/g5-01-boton-primario/20260730T182503Z", + "gate5/prod-baseline/g5-02-navbar-flex/20260730T182608Z", + "gate5/prod-baseline/g5-03-card-producto/20260730T182706Z", + "gate5/prod-baseline/g5-04-tokens-biblioteca/20260730T182804Z", + "gate5/prod-baseline/g5-05-grid-tres-diferenciales/20260730T182903Z", + "gate5/prod-baseline/g5-06-landing-pizzeria/20260730T183005Z", + "gate5/prod-baseline/g5-06-landing-pizzeria/20260730T184056Z", + "gate5/prod-baseline/g5-07-onboarding-mobile/20260730T184149Z", + "gate5/prod-baseline/g5-08-reparacion-grises/20260730T184315Z", + "gate5/prod-baseline/g5-09-brief-ambiguo-escuela/20260730T184430Z", + "gate5/prod-baseline/g5-10-brief-ambiguo-notaria/20260730T184545Z", + "gate5/prod-baseline/g5-01-boton-primario/20260730T185500Z", + "gate5/prod-baseline/g5-02-navbar-flex/20260730T185524Z", + "gate5/prod-baseline/g5-03-card-producto/20260730T185644Z", + "gate5/prod-baseline/g5-01-boton-primario/20260730T185903Z", + "gate5/prod-baseline/g5-02-navbar-flex/20260730T190011Z", + "gate5/prod-baseline/g5-03-card-producto/20260730T190118Z", + "gate5/prod-baseline/g5-04-tokens-biblioteca/20260730T190325Z", + "gate5/prod-baseline/g5-05-grid-tres-diferenciales/20260730T190422Z", + "gate5/prod-baseline/g5-06-landing-pizzeria/20260730T195152Z", + "gate5/prod-baseline/g5-07-onboarding-mobile/20260730T195316Z", + "gate5/prod-baseline/g5-01-boton-primario/20260730T202853Z", + "gate5/prod-baseline/g5-02-navbar-flex/20260730T202941Z", + "gate5/prod-baseline/g5-03-card-producto/20260730T203050Z", + "gate5/prod-baseline/g5-04-tokens-biblioteca/20260730T203125Z", + "gate5/prod-baseline/g5-05-grid-tres-diferenciales/20260730T203222Z", + "gate5/prod-baseline/g5-06-landing-pizzeria/20260730T203242Z", + "gate5/prod-baseline/g5-07-onboarding-mobile/20260730T203420Z", + "gate5/prod-baseline/g5-08-reparacion-grises/20260730T203514Z", + "gate5/prod-baseline/g5-09-brief-ambiguo-escuela/20260730T203547Z", + "gate5/prod-baseline/g5-10-brief-ambiguo-notaria/20260730T203756Z", + "gate5/prod-baseline-r2/g5-01-boton-primario/20260730T203937Z", + "gate5/prod-baseline-r2/g5-02-navbar-flex/20260730T204044Z", + "gate5/prod-baseline-r2/g5-03-card-producto/20260730T204125Z", + "gate5/prod-baseline-r2/g5-04-tokens-biblioteca/20260730T204133Z", + "gate5/prod-baseline-r2/g5-05-grid-tres-diferenciales/20260730T204253Z", + "gate5/prod-baseline-r2/g5-06-landing-pizzeria/20260730T204311Z", + "gate5/prod-baseline-r2/g5-07-onboarding-mobile/20260730T204324Z", + "gate5/prod-baseline-r2/g5-08-reparacion-grises/20260730T204441Z", + "gate5/prod-baseline-r2/g5-09-brief-ambiguo-escuela/20260730T204538Z", + "gate5/prod-baseline-r2/g5-10-brief-ambiguo-notaria/20260730T204614Z", + "gate5/prod-baseline-r3/g5-01-boton-primario/20260730T205024Z", + "gate5/prod-baseline-r3/g5-02-navbar-flex/20260730T205152Z", + "gate5/prod-baseline-r3/g5-03-card-producto/20260730T205252Z", + "gate5/prod-baseline-r3/g5-04-tokens-biblioteca/20260730T205306Z", + "gate5/prod-baseline-r3/g5-05-grid-tres-diferenciales/20260730T205413Z" + ] +} \ No newline at end of file diff --git a/data/gate5_png_v2b-nvfp4-full/g5-08-reparacion-grises.png b/data/gate5_png_v2b-nvfp4-full/g5-08-reparacion-grises.png new file mode 100644 index 0000000000000000000000000000000000000000..2a9310bd6fa70709dc96988d2aba49e32f47d837 GIT binary patch literal 72320 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

n4wMdEP5$FxiLI&o*c)zMO#Z= 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 z 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 65", "ok": false, - "valor": "24.1" + "valor": "28.2" }, { "condicion": "veto limpio en 10/10", "ok": false, - "valor": "5/10" + "valor": "6/10" }, { "condicion": ">= 6/10 prompts >= 60", "ok": false, - "valor": "1/10" + "valor": "2/10" }, { "condicion": "landing de pizzeria >= 60", @@ -3227,8 +3225,413 @@ }, { "id": "g5-08-reparacion-grises", - "score": null, - "error": "PluginNotConnected: Tool execution failed: Error: No Penpot plugin instances are currently connected. Please ensure the plugin is running and connected." + "dificultad": "alta", + "prompt": "Este board está hecho enteramente de rectángulos grises y no tiene una sola línea de texto. Auditalo, definí una paleta y una escala tipográfica, y rehacelo hasta que sea una pantalla de verdad, con contenido legible y jerarquía visual.", + "pageId": "d8a0770f-2625-809b-8008-6f284f31eb13", + "pageName": "gate5/v2b-nvfp4-full/g5-08-reparacion-grises/20260805T013644Z", + "pageId_auditado": "d8a0770f-2625-809b-8008-6f284f31eb13", + "seedBoardId": "d8a0770f-2625-809b-8008-6f284f39bbeb", + "turnos_usados": 6, + "finish_reason": "stop", + "mensaje_final": "", + "auditoria": { + "explicitFillShare": 0.6875, + "shapesWithFill": 16, + "shapesWithExplicitFill": 11, + "onlyDefaultColors": false, + "chromaticFills": 1, + "chromaticSamples": [ + { + "hex": "#F59E0B", + "s": 92, + "l": 50 + } + ], + "meanChromaticSaturation": 92, + "neutralFills": 0, + "hueSeparation": 0, + "paletteStructured": false, + "shapeCount": 16, + "distinctFillColors": 3, + "fillColors": [ + "#F59E0B", + "#111827", + "#E2E8F0" + ], + "placeholderGreys": 0, + "greySamples": [], + "textsTotal": 13, + "textsWithCharacters": 13, + "distinctFontSizes": 7, + "maxFontSize": 700, + "textFillShare": 1, + "fontIdBoundShare": 1, + "boards": 0, + "boardsWithLayout": 0, + "layoutChildren": 0, + "layoutChildrenSized": 0, + "layoutChildSizingShare": 0, + "containmentViolations": 0, + "containmentSamples": [], + "containmentError": null, + "nestingDepth": 1, + "sectionCount": 0, + "radiusCount": 0, + "shadowCount": 3, + "gradientCount": 0, + "styleRichness": 3, + "mainBoardId": "d8a0770f-2625-809b-8008-6f286d4e4756", + "rootHeightMismatch": null, + "cssLength": 1019, + "markupLength": 1962, + "renderError": null, + "renderSkipped": false + }, + "metricas_crudas": { + "shapeCount": 16, + "distinctFillColors": 3, + "placeholderGreys": 0, + "textsWithCharacters": 13, + "typeScale": [ + 7, + 700 + ], + "textFillShare": 1, + "layoutBoards": 0, + "layoutChildSizingShare": 0, + "containmentViolations": 0, + "structure": [ + 1, + 0 + ], + "styleRichness": 3, + "rootHeightMismatch": 1000000, + "exportBeforeFinal": false, + "forbiddenBehavior": 0, + "exceptionRate": 0.6, + "explicitFillShare": 0.6875, + "onlyDefaultColors": false, + "chromaticFills": 1, + "meanChromaticSaturation": 92, + "paletteStructured": false, + "finalMessageListsHex": false, + "fontIdBoundShare": 1, + "rendersOk": true + }, + "execute_code_calls": 5, + "execute_code_excepciones": 3, + "code_payloads": [ + { + "turno": 1, + "code": "const page = penpotUtils.getPageById('d8a0770f-2625-809b-8008-6f284f31eb13');\nif (!page) { throw new Error('pagina no encontrada'); }\nconst board = penpotUtils.findShapeById('d8a0770f-2625-809b-8008-6f284f39bbeb');\nif (!board) { throw new Error('board no encontrado'); }\nconst fills = board.fills ? board.fills.map(f => f.color) : [];\nconst shapes = penpotUtils.findShapes(() => true, board);\nconst tipos = [...new Set(shapes.map(s => s.type))];\nconst textos = shapes.filter(s => s.type === 'text');\nconst paleta = [...new Set(fills)];\nreturn { boardName: board.name, boardType: board.type, boardWidth: board.width, boardHeight: board.height, fills: paleta, shapeCount: shapes.length, shapeTypes: tipos, textCount: textos.length, structure: penpotUtils.shapeStructure(board, 3) };" + }, + { + "turno": 2, + "code": "const P = { bg:'#F7F8FA', surface:'#FFFFFF', ink:'#111827', brand:'#2563EB', accent:'#F59E0B', line:'#E2E8F0' };\nconst T = { display:'40', heading:'24', body:'16', small:'13' };\nconst S = { xs:4, sm:8, md:16, lg:24, xl:32, xxl:48 };\nconst board = penpotUtils.findShapeById('d8a0770f-2625-809b-8008-6f284f39bbeb');\nif (!board) { throw new Error('board no encontrado'); }\nboard.fills = [{ fillColor: P.bg, fillOpacity: 1 }];\nboard.resize(960, 640);\nconst rects = penpotUtils.findShapes(s => s.type === 'rectangle', board);\nrects.forEach(r => r.remove());\nconst mk = (name, w, h, fill, fs, size, weight, lh) => {\n const s = penpot.createText(name);\n if (!s) throw new Error('createText devolvio null');\n s.characters = '';\n s.fontFamily = 'Inter';\n s.fontSize = size;\n s.fontWeight = weight;\n s.lineHeight = lh;\n s.growType = 'auto-width';\n s.fills = [{ fillColor: fill, fillOpacity: 1 }];\n s.strokes = [];\n s.shadows = [];\n board.insertChild(board.children.length, s);\n return s;\n};\nconst header = mk('header', 960, 64, P.surface, T.heading, '600', '1.3');\nheader.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\nconst hero = mk('hero', 960, 280, P.brand, T.display, '700', '1.15');\nhero.fills = [{ fillColor: P.accent, fillOpacity: 1 }];\nconst cards = [\n { name:'card-1', title:'Analisis en tiempo real', body:'Monitoreo continuo de métricas con alertas automáticas.' },\n { name:'card-2', title:'Integraciones', body:'Conecta con Slack, Jira y GitHub en dos clicks.' },\n { name:'card-3', title:'Escalabilidad', body:'Arquitectura multi-tenant que crece con tu equipo.' }\n];\nconst cardEls = cards.map(c => {\n const card = penpot.createRectangle();\n card.name = c.name;\n card.fills = [{ fillColor: P.surface, fillOpacity: 1 }];\n card.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\n card.shadows = [{ style: 'drop-shadow', offsetX: 0, offsetY: 4, blur: 12, spread: 0, color: { color: P.ink, opacity: 0.08 } }];\n card.resize(280, 200);\n board.insertChild(board.children.length, card);\n const t = mk(c.name + '-title', 240, 32, P.ink, T.body, '600', '1.4');\n const b = mk(c.name + '-body', 240, 64, P.ink, T.small, '400', '1.5');\n b.fills = [{ fillColor: P.line, fillOpacity: 1 }];\n card.insertChild(card.children.length, t);\n card.insertChild(card.children.length, b);\n return { card, title: t, body: b };\n});\nconst footer = mk('footer', 960, 64, P.surface, T.small, '400', '1.5');\nfooter.fills = [{ fillColor: P.line, fillOpacity: 1 }];\nconst shapes = penpotUtils.findShapes(() => true, board);\nconst textos = shapes.filter(s => s.type === 'text');\nconst fills = shapes.filter(s => s.fills && s.fills.length > 0);\nconst unique = new Set(fills.map(f => f.fills ? f.fills[0].fillColor : null));\nreturn { boardName: board.name, boardWidth: board.width, boardHeight: board.height, shapeCount: shapes.length, textCount: textos.length, fillCount: fills.length, fontSizes: [...new Set(textos.map(t => t.fontSize))], colorsUsed: [...unique], cardLayouts: cardEls.map(c => ({ card: c.card.name, titleX: c.title.parentX, bodyX: c.body.parentX, titleY: c.title.parentY, bodyY: c.body.parentY })) };" + }, + { + "turno": 3, + "code": "const P = { bg:'#F7F8FA', surface:'#FFFFFF', ink:'#111827', brand:'#2563EB', accent:'#F59E0B', line:'#E2E8F0' };\nconst T = { display:'40', heading:'24', body:'16', small:'13' };\nconst S = { xs:4, sm:8, md:16, lg:24, xl:32, xxl:48 };\nconst board = penpotUtils.findShapeById('d8a0770f-2625-809b-8008-6f284f39bbeb');\nif (!board) { throw new Error('board no encontrado'); }\nboard.fills = [{ fillColor: P.bg, fillOpacity: 1 }];\nboard.resize(960, 640);\nconst rects = penpotUtils.findShapes(s => s.type === 'rectangle', board);\nrects.forEach(r => r.remove());\nconst mk = (name, text, fill, size, weight, lh) => {\n const s = penpot.createText(name);\n if (!s) throw new Error('createText devolvio null');\n s.characters = text;\n s.fontFamily = 'Inter';\n s.fontSize = size;\n s.fontWeight = weight;\n s.lineHeight = lh;\n s.growType = 'auto-width';\n s.fontColor = fill;\n s.strokes = [];\n s.shadows = [];\n board.insertChild(board.children.length, s);\n return s;\n};\nconst header = mk('header', 'Dashboard', P.ink, T.heading, '600', '1.3');\nheader.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\nconst hero = mk('hero', 'Analitica unificada para equipos de producto', P.surface, T.display, '700', '1.15');\nhero.fills = [{ fillColor: P.accent, fillOpacity: 1 }];\nconst cards = [\n { name:'card-1', title:'Analisis en tiempo real', body:'Monitoreo continuo de métricas con alertas automáticas.' },\n { name:'card-2', title:'Integraciones', body:'Conecta con Slack, Jira y GitHub en dos clicks.' },\n { name:'card-3', title:'Escalabilidad', body:'Arquitectura multi-tenant que crece con tu equipo.' }\n];\nconst cardEls = cards.map(c => {\n const card = penpot.createRectangle();\n card.name = c.name;\n card.fills = [{ fillColor: P.surface, fillOpacity: 1 }];\n card.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\n card.shadows = [{ style: 'drop-shadow', offsetX: 0, offsetY: 4, blur: 12, spread: 0, color: { color: P.ink, opacity: 0.08 } }];\n card.resize(280, 200);\n board.insertChild(board.children.length, card);\n const t = mk(c.name + '-title', c.title, P.ink, T.body, '600', '1.4');\n const b = mk(c.name + '-body', c.body, P.line, T.small, '400', '1.5');\n card.insertChild(card.children.length, t);\n card.insertChild(card.children.length, b);\n penpotUtils.setParentXY(t, S.md, S.md);\n penpotUtils.setParentXY(b, S.md, 100);\n t.layoutChild = { rowSpan: 1, columnSpan: 1, horizontalAlignment: 'start', verticalAlignment: 'start' };\n b.layoutChild = { rowSpan: 1, columnSpan: 1, horizontalAlignment: 'start', verticalAlignment: 'start' };\n return { card, title: t, body: b };\n});\nconst footer = mk('footer', '© 2026 Acme Inc.', P.line, T.small, '400', '1.5');\nconst shapes = penpotUtils.findShapes(() => true, board);\nconst textos = shapes.filter(s => s.type === 'text');\nconst fills = shapes.filter(s => s.fills && s.fills.length > 0);\nconst unique = new Set(fills.map(f => f.fills ? f.fills[0].fillColor : null));\nreturn { boardName: board.name, boardWidth: board.width, boardHeight: board.height, shapeCount: shapes.length, textCount: textos.length, fillCount: fills.length, fontSizes: [...new Set(textos.map(t => t.fontSize))], colorsUsed: [...unique], cardLayouts: cardEls.map(c => ({ card: c.card.name, titleX: c.title.parentX, bodyX: c.body.parentX, titleY: c.title.parentY, bodyY: c.body.parentY })) };" + }, + { + "turno": 4, + "code": "const P = { bg:'#F7F8FA', surface:'#FFFFFF', ink:'#111827', brand:'#2563EB', accent:'#F59E0B', line:'#E2E8F0' };\nconst T = { display:'40', heading:'24', body:'16', small:'13' };\nconst S = { xs:4, sm:8, md:16, lg:24, xl:32, xxl:48 };\nconst board = penpotUtils.findShapeById('d8a0770f-2625-809b-8008-6f284f39bbeb');\nif (!board) { throw new Error('board no encontrado'); }\nboard.fills = [{ fillColor: P.bg, fillOpacity: 1 }];\nboard.resize(960, 640);\nconst rects = penpotUtils.findShapes(s => s.type === 'rectangle', board);\nrects.forEach(r => r.remove());\nconst mk = (name, text, fill, size, weight, lh) => {\n const s = penpot.createText(name);\n if (!s) throw new Error('createText devolvio null');\n s.characters = text;\n s.fontFamily = 'Inter';\n s.fontSize = size;\n s.fontWeight = weight;\n s.lineHeight = lh;\n s.growType = 'auto-width';\n s.fills = [{ fillColor: fill, fillOpacity: 1 }];\n s.strokes = [];\n s.shadows = [];\n board.insertChild(board.children.length, s);\n return s;\n};\nconst header = mk('header', 'Dashboard', P.ink, T.heading, '600', '1.3');\nheader.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\nconst hero = mk('hero', 'Analitica unificada para equipos de producto', P.surface, T.display, '700', '1.15');\nhero.fills = [{ fillColor: P.accent, fillOpacity: 1 }];\nconst cards = [\n { name:'card-1', title:'Analisis en tiempo real', body:'Monitoreo continuo de metrics con alertas automaticas.' },\n { name:'card-2', title:'Integraciones', body:'Conecta con Slack, Jira y GitHub en dos clicks.' },\n { name:'card-3', title:'Escalabilidad', body:'Arquitectura multi-tenant que crece con tu equipo.' }\n];\nconst cardEls = cards.map(c => {\n const card = penpot.createRectangle();\n card.name = c.name;\n card.fills = [{ fillColor: P.surface, fillOpacity: 1 }];\n card.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\n card.shadows = [{ style: 'drop-shadow', offsetX: 0, offsetY: 4, blur: 12, spread: 0, color: { color: P.ink, opacity: 0.08 } }];\n card.resize(280, 200);\n board.insertChild(board.children.length, card);\n const t = mk(c.name + '-title', c.title, P.ink, T.body, '600', '1.4');\n const b = mk(c.name + '-body', c.body, P.line, T.small, '400', '1.5');\n card.insertChild(card.children.length, t);\n card.insertChild(card.children.length, b);\n penpotUtils.setParentXY(t, S.md, S.md);\n penpotUtils.setParentXY(b, S.md, 100);\n return { card, title: t, body: b };\n});\nconst footer = mk('footer', '© 2026 Acme Inc.', P.line, T.small, '400', '1.5');\nconst shapes = penpotUtils.findShapes(() => true, board);\nconst textos = shapes.filter(s => s.type === 'text');\nconst fills = shapes.filter(s => s.fills && s.fills.length > 0);\nconst unique = new Set(fills.map(f => f.fills ? f.fills[0].fillColor : null));\nreturn { boardName: board.name, boardWidth: board.width, boardHeight: board.height, shapeCount: shapes.length, textCount: textos.length, fillCount: fills.length, fontSizes: [...new Set(textos.map(t => t.fontSize))], colorsUsed: [...unique], cardLayouts: cardEls.map(c => ({ card: c.card.name, titleX: c.title.parentX, bodyX: c.body.parentX, titleY: c.title.parentY, bodyY: c.body.parentY })) };" + }, + { + "turno": 5, + "code": "try {\n const P = { bg:'#F7F8FA', surface:'#FFFFFF', ink:'#111827', brand:'#2563EB', accent:'#F59E0B', line:'#E2E8F0' };\n const T = { display:'40', heading:'24', body:'16', small:'13' };\n const S = { xs:4, sm:8, md:16, lg:24, xl:32, xxl:48 };\n const board = penpotUtils.findShapeById('d8a0770f-2625-809b-8008-6f284f39bbeb');\n if (!board) { throw new Error('board no encontrado'); }\n board.fills = [{ fillColor: P.bg, fillOpacity: 1 }];\n board.resize(960, 640);\n const rects = penpotUtils.findShapes(s => s.type === 'rectangle', board);\n rects.forEach(r => r.remove());\n const mk = (name, text, fill, size, weight, lh) => {\n const s = penpot.createText(name);\n if (!s) { throw new Error('createText devolvio null'); }\n s.characters = text;\n s.fontFamily = 'Inter';\n s.fontSize = size;\n s.fontWeight = weight;\n s.lineHeight = lh;\n s.growType = 'auto-width';\n s.fills = [{ fillColor: fill, fillOpacity: 1 }];\n s.strokes = [];\n s.shadows = [];\n board.insertChild(board.children.length, s);\n return s;\n };\n const header = mk('header', 'Dashboard', P.ink, T.heading, '600', '1.3');\n header.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\n const hero = mk('hero', 'Analitica unificada para equipos de producto', P.surface, T.display, '700', '1.15');\n hero.fills = [{ fillColor: P.accent, fillOpacity: 1 }];\n const cards = [\n { name:'card-1', title:'Analisis en tiempo real', body:'Monitoreo continuo de metrics con alertas automaticas.' },\n { name:'card-2', title:'Integraciones', body:'Conecta con Slack, Jira y GitHub en dos clicks.' },\n { name:'card-3', title:'Escalabilidad', body:'Arquitectura multi-tenant que crece con tu equipo.' }\n ];\n const cardEls = cards.map(c => {\n const card = penpot.createRectangle();\n card.name = c.name;\n card.fills = [{ fillColor: P.surface, fillOpacity: 1 }];\n card.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\n card.shadows = [{ style: 'drop-shadow', offsetX: 0, offsetY: 4, blur: 12, spread: 0, color: { color: P.ink, opacity: 0.08 } }];\n card.resize(280, 200);\n board.insertChild(board.children.length, card);\n const t = mk(c.name + '-title', c.title, P.ink, T.body, '600', '1.4');\n const b = mk(c.name + '-body', c.body, P.line, T.small, '400', '1.5');\n card.insertChild(card.children.length, t);\n card.insertChild(card.children.length, b);\n penpotUtils.setParentXY(t, S.md, S.md);\n penpotUtils.setParentXY(b, S.md, 100);\n return { card, title: t, body: b };\n });\n const footer = mk('footer', '© 2026 Acme Inc.', P.line, T.small, '400', '1.5');\n const shapes = penpotUtils.findShapes(() => true, board);\n const textos = shapes.filter(s => s.type === 'text');\n const fills = shapes.filter(s => s.fills && s.fills.length > 0);\n const unique = new Set(fills.map(f => f.fills ? f.fills[0].fillColor : null));\n return { boardName: board.name, boardWidth: board.width, boardHeight: board.height, shapeCount: shapes.length, textCount: textos.length, fillCount: fills.length, fontSizes: [...new Set(textos.map(t => t.fontSize))], colorsUsed: [...unique], cardLayouts: cardEls.map(c => ({ card: c.card.name, titleX: c.title.parentX, bodyX: c.body.parentX, titleY: c.title.parentY, bodyY: c.body.parentY })) };\n} catch (e) {\n return { error: e.message, stack: e.stack };\n}" + } + ], + "export_shape_calls": [], + "veto_hits": [], + "otros_patrones": [], + "png": "data/gate5_png_v2b-nvfp4-full/g5-08-reparacion-grises.png", + "turnos": [ + { + "turno": 1, + "finish_reason": "tool_calls", + "content": "", + "reasoning": "Primero leo el board tal como está: fills, children, y la estructura.\n", + "tool_calls": [ + { + "name": "execute_code", + "arguments": { + "code": "const page = penpotUtils.getPageById('d8a0770f-2625-809b-8008-6f284f31eb13');\nif (!page) { throw new Error('pagina no encontrada'); }\nconst board = penpotUtils.findShapeById('d8a0770f-2625-809b-8008-6f284f39bbeb');\nif (!board) { throw new Error('board no encontrado'); }\nconst fills = board.fills ? board.fills.map(f => f.color) : [];\nconst shapes = penpotUtils.findShapes(() => true, board);\nconst tipos = [...new Set(shapes.map(s => s.type))];\nconst textos = shapes.filter(s => s.type === 'text');\nconst paleta = [...new Set(fills)];\nreturn { boardName: board.name, boardType: board.type, boardWidth: board.width, boardHeight: board.height, fills: paleta, shapeCount: shapes.length, shapeTypes: tipos, textCount: textos.length, structure: penpotUtils.shapeStructure(board, 3) };" + }, + "result_preview": "{\n \"result\": {\n \"boardName\": \"Wireframe sin disenar\",\n \"boardType\": \"board\",\n \"boardWidth\": 960.0000381469727,\n \"boardHeight\": 640.0000095367432,\n \"fills\": [\n null\n ],\n \"shapeCount\": 7,\n \"shapeTypes\": [\n \"board\",\n \"rectangle\"\n ],\n \"textCount\": 0,\n \"structure\": {\n \"id\": \"d8a0770f-2625-809b-8008-6f284f39bbeb\",\n \"name\": \"Wireframe sin disenar" + } + ] + }, + { + "turno": 2, + "finish_reason": "tool_calls", + "content": "", + "reasoning": "El board tiene 6 rectángulos, 0 textos, y su fill es null (transparente): no tiene color de fondo ni una sola línea de texto. Es un wireframe estructural sin paleta. Voy a definir una paleta y una escala tipográfica, y reescribir el board con fills, textos y jerarquía.\n\nPaleta:\n- bg #F7F8FA, surface #FFFFFF, ink #111827, brand #2563EB, accent #F59E0B, line #E2E8F0\n\nEscala: display 40 / heading 24 / body 16 / small 13, pesos 700/600/400/400.\n\nTodo en un solo execute_code: leo el board, borro los 6 rectángulos grises, creo la estructura con insertChild en orden z, y devuelvo el resultado.\n", + "tool_calls": [ + { + "name": "execute_code", + "arguments": { + "code": "const P = { bg:'#F7F8FA', surface:'#FFFFFF', ink:'#111827', brand:'#2563EB', accent:'#F59E0B', line:'#E2E8F0' };\nconst T = { display:'40', heading:'24', body:'16', small:'13' };\nconst S = { xs:4, sm:8, md:16, lg:24, xl:32, xxl:48 };\nconst board = penpotUtils.findShapeById('d8a0770f-2625-809b-8008-6f284f39bbeb');\nif (!board) { throw new Error('board no encontrado'); }\nboard.fills = [{ fillColor: P.bg, fillOpacity: 1 }];\nboard.resize(960, 640);\nconst rects = penpotUtils.findShapes(s => s.type === 'rectangle', board);\nrects.forEach(r => r.remove());\nconst mk = (name, w, h, fill, fs, size, weight, lh) => {\n const s = penpot.createText(name);\n if (!s) throw new Error('createText devolvio null');\n s.characters = '';\n s.fontFamily = 'Inter';\n s.fontSize = size;\n s.fontWeight = weight;\n s.lineHeight = lh;\n s.growType = 'auto-width';\n s.fills = [{ fillColor: fill, fillOpacity: 1 }];\n s.strokes = [];\n s.shadows = [];\n board.insertChild(board.children.length, s);\n return s;\n};\nconst header = mk('header', 960, 64, P.surface, T.heading, '600', '1.3');\nheader.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\nconst hero = mk('hero', 960, 280, P.brand, T.display, '700', '1.15');\nhero.fills = [{ fillColor: P.accent, fillOpacity: 1 }];\nconst cards = [\n { name:'card-1', title:'Analisis en tiempo real', body:'Monitoreo continuo de métricas con alertas automáticas.' },\n { name:'card-2', title:'Integraciones', body:'Conecta con Slack, Jira y GitHub en dos clicks.' },\n { name:'card-3', title:'Escalabilidad', body:'Arquitectura multi-tenant que crece con tu equipo.' }\n];\nconst cardEls = cards.map(c => {\n const card = penpot.createRectangle();\n card.name = c.name;\n card.fills = [{ fillColor: P.surface, fillOpacity: 1 }];\n card.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\n card.shadows = [{ style: 'drop-shadow', offsetX: 0, offsetY: 4, blur: 12, spread: 0, color: { color: P.ink, opacity: 0.08 } }];\n card.resize(280, 200);\n board.insertChild(board.children.length, card);\n const t = mk(c.name + '-title', 240, 32, P.ink, T.body, '600', '1.4');\n const b = mk(c.name + '-body', 240, 64, P.ink, T.small, '400', '1.5');\n b.fills = [{ fillColor: P.line, fillOpacity: 1 }];\n card.insertChild(card.children.length, t);\n card.insertChild(card.children.length, b);\n return { card, title: t, body: b };\n});\nconst footer = mk('footer', 960, 64, P.surface, T.small, '400', '1.5');\nfooter.fills = [{ fillColor: P.line, fillOpacity: 1 }];\nconst shapes = penpotUtils.findShapes(() => true, board);\nconst textos = shapes.filter(s => s.type === 'text');\nconst fills = shapes.filter(s => s.fills && s.fills.length > 0);\nconst unique = new Set(fills.map(f => f.fills ? f.fills[0].fillColor : null));\nreturn { boardName: board.name, boardWidth: board.width, boardHeight: board.height, shapeCount: shapes.length, textCount: textos.length, fillCount: fills.length, fontSizes: [...new Set(textos.map(t => t.fontSize))], colorsUsed: [...unique], cardLayouts: cardEls.map(c => ({ card: c.card.name, titleX: c.title.parentX, bodyX: c.body.parentX, titleY: c.title.parentY, bodyY: c.body.parentY })) };" + }, + "result_preview": "Tool execution failed: Error: Error handling task: Cannot read properties of undefined (reading 'length')" + } + ] + }, + { + "turno": 3, + "finish_reason": "tool_calls", + "content": "", + "reasoning": "El error es `Cannot read properties of undefined (reading 'length')` — `fills` es undefined en al menos un shape. `ShapeBase.fills` es `Fill[] | undefined`, y el array destructuring `const { fillColor } = fill` sobre `undefined` lanza. La corrección es no asumir que `fills` existe: `const fills = shapes.filter(s => s.fills && s.fills.length > 0);` y luego `s.fills[0].fillColor` con guard.\n\nAdemás, el código anterior intentaba `s.fills = [...]` sobre los textos. `Text` no tiene `fills` como array writable: el color de texto se setea en `s.fontColor` (string), y `s.fills` es `undefined` en `Text`. Si lo intento escribir, el runtime lo deja en `undefined` y el filtro posterior lo excluye de `fills`, inflando artificialmente el conteo de shapes sin fill. La corrección es: para los textos, setear `fontColor` y **no** tocar `s.fills`; para los rectángulos, sí setear `fills`.\n\nY sobre el layout de las cards: `card.insertChild(card.children.length, child)` no posiciona — solo agrega al array. Sin `penpotUtils.setParentXY` los hijos quedan en `(0,0)` y se superponen. Lo correcto es `penpotUtils.setParentXY(child, 20, 20)` para el título y `penpotUtils.setParentXY(child, 20, 100)` para el cuerpo, con `card.layoutChild` en `auto`.\n\nVoy a reescribir todo en una sola ejecución limpia, con los dos guards y el `fontColor` correcto.\n", + "tool_calls": [ + { + "name": "execute_code", + "arguments": { + "code": "const P = { bg:'#F7F8FA', surface:'#FFFFFF', ink:'#111827', brand:'#2563EB', accent:'#F59E0B', line:'#E2E8F0' };\nconst T = { display:'40', heading:'24', body:'16', small:'13' };\nconst S = { xs:4, sm:8, md:16, lg:24, xl:32, xxl:48 };\nconst board = penpotUtils.findShapeById('d8a0770f-2625-809b-8008-6f284f39bbeb');\nif (!board) { throw new Error('board no encontrado'); }\nboard.fills = [{ fillColor: P.bg, fillOpacity: 1 }];\nboard.resize(960, 640);\nconst rects = penpotUtils.findShapes(s => s.type === 'rectangle', board);\nrects.forEach(r => r.remove());\nconst mk = (name, text, fill, size, weight, lh) => {\n const s = penpot.createText(name);\n if (!s) throw new Error('createText devolvio null');\n s.characters = text;\n s.fontFamily = 'Inter';\n s.fontSize = size;\n s.fontWeight = weight;\n s.lineHeight = lh;\n s.growType = 'auto-width';\n s.fontColor = fill;\n s.strokes = [];\n s.shadows = [];\n board.insertChild(board.children.length, s);\n return s;\n};\nconst header = mk('header', 'Dashboard', P.ink, T.heading, '600', '1.3');\nheader.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\nconst hero = mk('hero', 'Analitica unificada para equipos de producto', P.surface, T.display, '700', '1.15');\nhero.fills = [{ fillColor: P.accent, fillOpacity: 1 }];\nconst cards = [\n { name:'card-1', title:'Analisis en tiempo real', body:'Monitoreo continuo de métricas con alertas automáticas.' },\n { name:'card-2', title:'Integraciones', body:'Conecta con Slack, Jira y GitHub en dos clicks.' },\n { name:'card-3', title:'Escalabilidad', body:'Arquitectura multi-tenant que crece con tu equipo.' }\n];\nconst cardEls = cards.map(c => {\n const card = penpot.createRectangle();\n card.name = c.name;\n card.fills = [{ fillColor: P.surface, fillOpacity: 1 }];\n card.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\n card.shadows = [{ style: 'drop-shadow', offsetX: 0, offsetY: 4, blur: 12, spread: 0, color: { color: P.ink, opacity: 0.08 } }];\n card.resize(280, 200);\n board.insertChild(board.children.length, card);\n const t = mk(c.name + '-title', c.title, P.ink, T.body, '600', '1.4');\n const b = mk(c.name + '-body', c.body, P.line, T.small, '400', '1.5');\n card.insertChild(card.children.length, t);\n card.insertChild(card.children.length, b);\n penpotUtils.setParentXY(t, S.md, S.md);\n penpotUtils.setParentXY(b, S.md, 100);\n t.layoutChild = { rowSpan: 1, columnSpan: 1, horizontalAlignment: 'start', verticalAlignment: 'start' };\n b.layoutChild = { rowSpan: 1, columnSpan: 1, horizontalAlignment: 'start', verticalAlignment: 'start' };\n return { card, title: t, body: b };\n});\nconst footer = mk('footer', '© 2026 Acme Inc.', P.line, T.small, '400', '1.5');\nconst shapes = penpotUtils.findShapes(() => true, board);\nconst textos = shapes.filter(s => s.type === 'text');\nconst fills = shapes.filter(s => s.fills && s.fills.length > 0);\nconst unique = new Set(fills.map(f => f.fills ? f.fills[0].fillColor : null));\nreturn { boardName: board.name, boardWidth: board.width, boardHeight: board.height, shapeCount: shapes.length, textCount: textos.length, fillCount: fills.length, fontSizes: [...new Set(textos.map(t => t.fontSize))], colorsUsed: [...unique], cardLayouts: cardEls.map(c => ({ card: c.card.name, titleX: c.title.parentX, bodyX: c.body.parentX, titleY: c.title.parentY, bodyY: c.body.parentY })) };" + }, + "result_preview": "Tool execution failed: Error: Error handling task: Cannot add property fontColor, object is not extensible" + } + ] + }, + { + "turno": 4, + "finish_reason": "tool_calls", + "content": "", + "reasoning": "El error 'Cannot add property fontColor, object is not extensible' es un error de runtime de JavaScript, no de la API de Penpot. Ocurre cuando se intenta asignar una propiedad a un objeto congelado con Object.freeze().\n\nEn el código de la primera ejecución, la función `mk` devolvía `s` y luego se le asignaba `s.fontColor = fill`. Si `s` fuera un objeto congelado, esa asignación fallaría con ese mensaje exacto.\n\nPero hay algo más importante: la primera ejecución YA TENÍA ESE MISMO CÓDIGO y devolvió el mismo error. La segunda ejecución repite exactamente la misma línea. No es un bug de la API que se corrija con otro intento.\n\nLa causa real es otra: `penpot.createText()` devuelve un objeto `Text`, y `Text` no tiene la propiedad `fontColor`. Esa propiedad no existe en el tipo `Text` de la API de Penpot. La propiedad para el color del texto es `fills`, un array de objetos `Fill`. Al intentar asignar `fontColor` a un objeto `Text` que no la tiene, el runtime de JavaScript lanza un TypeError.\n\nLa corrección es simple: usar `s.fills = [{ fillColor: fill, fillOpacity: 1 }]` en lugar de `fontColor`. Y no hay que olvidar que `fontColor` es una propiedad legendaria de Figma que no existe en Penpot.\n\nAdemás, las cards usan `card.insertChild(card.children.length, ...)` para los textos, pero el board no tiene flex layout, así que `parentX` y `parentY` quedan en 0 y los textos se apilan en la esquina. Necesito `penpotUtils.setParentXY` para cada texto dentro de su card.\n\nY sobre el orden de children: `board.insertChild(board.children.length, s)` es correcto porque no hay z-order inverso en un board sin flex layout. El orden inverso solo aplica cuando el board tiene flex con `dir='column'` o `dir='row'`.\n\nVoy a reescribir `mk` con `fills` y agregar los `setParentXY` dentro del mapeo de cards.\n", + "tool_calls": [ + { + "name": "execute_code", + "arguments": { + "code": "const P = { bg:'#F7F8FA', surface:'#FFFFFF', ink:'#111827', brand:'#2563EB', accent:'#F59E0B', line:'#E2E8F0' };\nconst T = { display:'40', heading:'24', body:'16', small:'13' };\nconst S = { xs:4, sm:8, md:16, lg:24, xl:32, xxl:48 };\nconst board = penpotUtils.findShapeById('d8a0770f-2625-809b-8008-6f284f39bbeb');\nif (!board) { throw new Error('board no encontrado'); }\nboard.fills = [{ fillColor: P.bg, fillOpacity: 1 }];\nboard.resize(960, 640);\nconst rects = penpotUtils.findShapes(s => s.type === 'rectangle', board);\nrects.forEach(r => r.remove());\nconst mk = (name, text, fill, size, weight, lh) => {\n const s = penpot.createText(name);\n if (!s) throw new Error('createText devolvio null');\n s.characters = text;\n s.fontFamily = 'Inter';\n s.fontSize = size;\n s.fontWeight = weight;\n s.lineHeight = lh;\n s.growType = 'auto-width';\n s.fills = [{ fillColor: fill, fillOpacity: 1 }];\n s.strokes = [];\n s.shadows = [];\n board.insertChild(board.children.length, s);\n return s;\n};\nconst header = mk('header', 'Dashboard', P.ink, T.heading, '600', '1.3');\nheader.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\nconst hero = mk('hero', 'Analitica unificada para equipos de producto', P.surface, T.display, '700', '1.15');\nhero.fills = [{ fillColor: P.accent, fillOpacity: 1 }];\nconst cards = [\n { name:'card-1', title:'Analisis en tiempo real', body:'Monitoreo continuo de metrics con alertas automaticas.' },\n { name:'card-2', title:'Integraciones', body:'Conecta con Slack, Jira y GitHub en dos clicks.' },\n { name:'card-3', title:'Escalabilidad', body:'Arquitectura multi-tenant que crece con tu equipo.' }\n];\nconst cardEls = cards.map(c => {\n const card = penpot.createRectangle();\n card.name = c.name;\n card.fills = [{ fillColor: P.surface, fillOpacity: 1 }];\n card.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\n card.shadows = [{ style: 'drop-shadow', offsetX: 0, offsetY: 4, blur: 12, spread: 0, color: { color: P.ink, opacity: 0.08 } }];\n card.resize(280, 200);\n board.insertChild(board.children.length, card);\n const t = mk(c.name + '-title', c.title, P.ink, T.body, '600', '1.4');\n const b = mk(c.name + '-body', c.body, P.line, T.small, '400', '1.5');\n card.insertChild(card.children.length, t);\n card.insertChild(card.children.length, b);\n penpotUtils.setParentXY(t, S.md, S.md);\n penpotUtils.setParentXY(b, S.md, 100);\n return { card, title: t, body: b };\n});\nconst footer = mk('footer', '© 2026 Acme Inc.', P.line, T.small, '400', '1.5');\nconst shapes = penpotUtils.findShapes(() => true, board);\nconst textos = shapes.filter(s => s.type === 'text');\nconst fills = shapes.filter(s => s.fills && s.fills.length > 0);\nconst unique = new Set(fills.map(f => f.fills ? f.fills[0].fillColor : null));\nreturn { boardName: board.name, boardWidth: board.width, boardHeight: board.height, shapeCount: shapes.length, textCount: textos.length, fillCount: fills.length, fontSizes: [...new Set(textos.map(t => t.fontSize))], colorsUsed: [...unique], cardLayouts: cardEls.map(c => ({ card: c.card.name, titleX: c.title.parentX, bodyX: c.body.parentX, titleY: c.title.parentY, bodyY: c.body.parentY })) };" + }, + "result_preview": "Tool execution failed: Error: Error handling task: Cannot read properties of undefined (reading 'length')" + } + ] + }, + { + "turno": 5, + "finish_reason": "tool_calls", + "content": "", + "reasoning": "El error 'Cannot read properties of undefined (reading \"length\")' vuelve a aparecer, y esta vez no puedo adivinar de qué es undefined: podría ser board, board.fills, board.children, o cualquier fill de un shape. Necesito aislarlo con un try/catch que diga exactamente dónde falla.\n", + "tool_calls": [ + { + "name": "execute_code", + "arguments": { + "code": "try {\n const P = { bg:'#F7F8FA', surface:'#FFFFFF', ink:'#111827', brand:'#2563EB', accent:'#F59E0B', line:'#E2E8F0' };\n const T = { display:'40', heading:'24', body:'16', small:'13' };\n const S = { xs:4, sm:8, md:16, lg:24, xl:32, xxl:48 };\n const board = penpotUtils.findShapeById('d8a0770f-2625-809b-8008-6f284f39bbeb');\n if (!board) { throw new Error('board no encontrado'); }\n board.fills = [{ fillColor: P.bg, fillOpacity: 1 }];\n board.resize(960, 640);\n const rects = penpotUtils.findShapes(s => s.type === 'rectangle', board);\n rects.forEach(r => r.remove());\n const mk = (name, text, fill, size, weight, lh) => {\n const s = penpot.createText(name);\n if (!s) { throw new Error('createText devolvio null'); }\n s.characters = text;\n s.fontFamily = 'Inter';\n s.fontSize = size;\n s.fontWeight = weight;\n s.lineHeight = lh;\n s.growType = 'auto-width';\n s.fills = [{ fillColor: fill, fillOpacity: 1 }];\n s.strokes = [];\n s.shadows = [];\n board.insertChild(board.children.length, s);\n return s;\n };\n const header = mk('header', 'Dashboard', P.ink, T.heading, '600', '1.3');\n header.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\n const hero = mk('hero', 'Analitica unificada para equipos de producto', P.surface, T.display, '700', '1.15');\n hero.fills = [{ fillColor: P.accent, fillOpacity: 1 }];\n const cards = [\n { name:'card-1', title:'Analisis en tiempo real', body:'Monitoreo continuo de metrics con alertas automaticas.' },\n { name:'card-2', title:'Integraciones', body:'Conecta con Slack, Jira y GitHub en dos clicks.' },\n { name:'card-3', title:'Escalabilidad', body:'Arquitectura multi-tenant que crece con tu equipo.' }\n ];\n const cardEls = cards.map(c => {\n const card = penpot.createRectangle();\n card.name = c.name;\n card.fills = [{ fillColor: P.surface, fillOpacity: 1 }];\n card.strokes = [{ strokeColor: P.line, strokeWidth: 1, strokeStyle: 'solid', strokeOpacity: 1 }];\n card.shadows = [{ style: 'drop-shadow', offsetX: 0, offsetY: 4, blur: 12, spread: 0, color: { color: P.ink, opacity: 0.08 } }];\n card.resize(280, 200);\n board.insertChild(board.children.length, card);\n const t = mk(c.name + '-title', c.title, P.ink, T.body, '600', '1.4');\n const b = mk(c.name + '-body', c.body, P.line, T.small, '400', '1.5');\n card.insertChild(card.children.length, t);\n card.insertChild(card.children.length, b);\n penpotUtils.setParentXY(t, S.md, S.md);\n penpotUtils.setParentXY(b, S.md, 100);\n return { card, title: t, body: b };\n });\n const footer = mk('footer', '© 2026 Acme Inc.', P.line, T.small, '400', '1.5');\n const shapes = penpotUtils.findShapes(() => true, board);\n const textos = shapes.filter(s => s.type === 'text');\n const fills = shapes.filter(s => s.fills && s.fills.length > 0);\n const unique = new Set(fills.map(f => f.fills ? f.fills[0].fillColor : null));\n return { boardName: board.name, boardWidth: board.width, boardHeight: board.height, shapeCount: shapes.length, textCount: textos.length, fillCount: fills.length, fontSizes: [...new Set(textos.map(t => t.fontSize))], colorsUsed: [...unique], cardLayouts: cardEls.map(c => ({ card: c.card.name, titleX: c.title.parentX, bodyX: c.body.parentX, titleY: c.title.parentY, bodyY: c.body.parentY })) };\n} catch (e) {\n return { error: e.message, stack: e.stack };\n}" + }, + "result_preview": "{\n \"result\": {\n \"error\": \"Cannot read properties of undefined (reading 'length')\",\n \"stack\": \"TypeError: Cannot read properties of undefined (reading 'length')\\n at eval (eval at (eval at e$t (https://penpot.p-lao.com/js/libs.js?version=2.16.2-1782909569:1:1)), :47:36)\\n at Array.map ()\\n at eval (eval at (eval at e$t (https://penpot.p-lao.co" + } + ] + }, + { + "turno": 6, + "finish_reason": "stop", + "content": "", + "reasoning": "El stack apunta a la linea 47, dentro del `rects.forEach(r => r.remove())`. El error es `Cannot read properties of undefined (reading 'length')` — no es un `null` sino `undefined`, y ocurre dentro de un `forEach` sobre el resultado de `findShapes`.\n\n`penpotUtils.findShapes` devuelve `Shape[]`. Si devuelve `[]`, el `forEach` no se ejecuta y no hay error. Si devuelve `null`, el `forEach` ni siquiera se ejecuta (no es un array) y el error seria `Cannot read properties of null (reading 'forEach')`, no este.\n\nAsi que el error ocurre cuando `findShapes` devuelve un array no vacio y algun elemento del array es `undefined`. `findShapes` filtra sobre los shapes de un parent, y el parent es `board`.\n\n`board` es un `Board` (type 'board'), que es un contenedor. Los contenedores tienen `children`. `findShapes` recorre el arbol de hijos. Si el arbol tiene un hijo que es `undefined` (no `null`), `findShapes` lo devuelve tal cual en el array, y el `forEach` lo itera: `r.remove()` sobre `undefined` lanza `Cannot read properties of undefined (reading 'length')` porque `remove()` accede a `this.children.length` en su interior.\n\nEso significa que el board ya tiene un hijo `undefined` en su arbol de children. No es un error de mi codigo: es un estado corrupto del board.\n\nLa causa mas probable: en una ejecucion previa, `board.insertChild(board.children.length, shape)` se ejecuto con `board.children.length` evaluado antes de que el insert se completara, y el runtime devolvio `undefined` en lugar de un shape. O bien, `board.insertChild` se ejecuto con un indice que no corresponde a ningun hijo existente, y el runtime inserto `undefined` en ese slot.\n\nNo puedo arreglar esto con `board.insertChild` de nuevo. Necesito un remedio mas fuerte.\n\nOpcion A: `board.children = []`. `board` es un `Board`, y `children` es un getter de solo lectura segun la documentacion. Intentarlo lanzaria un TypeError de readonly, y no liberaria el `undefined`.\n\nOpcion B: `board.remove()`. `remove()` destruye la shape permanentemente. Si lo hago sobre el board, lo borro de la pagina. No es lo que quiero.\n\nOpcion C: crear un board nuevo. `const nuevo = penpot.createBoard();` — `createBoard` no recibe id, asi que el runtime le asigna uno nuevo. Lo inserto en la pagina, y ahi el arbol de children empieza limpio.\n\nOpcion D: `board.children = board.children.filter(s => s !== undefined)`. Esto no borra el `undefined` del arbol: lo copia a un array nuevo, y el `undefined` sigue en `board.children` original.\n\nOpcion E: `board.children.splice(0, board.children.length)`. `splice` muta el array in-place, asi que si el `undefined` esta en el array, lo borra del array. Pero `board.children` es un getter de solo lectura, asi que `board.children.splice` probablemente ni siquiera existe.\n\nOpcion F: `board.insertChild(0, penpot.createRectangle())` y despues `board.remove()`. No, `remove()` borra el board.\n\nLa opcion C es la mas limpia: creo un board nuevo, limpio, y listo.\n\nPero antes de decidir, necesito confirmar que el board realmente tiene un hijo `undefined`. Voy a leer `board.children` y ver si algun elemento es `undefined`.\n\n\n\n\nconst board = penpotUtils.findShapeById('d8a0770f-2625-8008-6f284f39bbeb');\nif (!board) { throw new Error('board no encontrado'); }\nconst children = board.children;\nconst undefineds = children.filter(c => c === undefined);\nconst nulls = children.filter(c => c === null);\nconst types = children.map(c => c ? c.type : 'undefined');\nreturn { boardName: board.name, boardType: board.type, childrenCount: children.length, undefinedCount: undefineds.length, nullCount: nulls.length, childTypes: types, childNames: children.map(c => c ? c.name : 'undefined') };\n\n\n", + "tool_calls": [] + } + ], + "score": 64.7, + "pasadas": 11, + "aplicables": 17, + "veto_violado": [], + "metricas": [ + { + "metrica": "shapeCount", + "etiqueta": "conteo de shapes", + "valor": 16, + "umbral": 8, + "aplica": true, + "pasa": true + }, + { + "metrica": "distinctFillColors", + "etiqueta": "fillColor distintos (sin blanco/negro puros)", + "valor": 3, + "umbral": 4, + "aplica": true, + "pasa": false + }, + { + "metrica": "explicitFillShare", + "etiqueta": "share de shapes con fill NO-default", + "valor": 0.6875, + "umbral": 0.8, + "aplica": true, + "pasa": false + }, + { + "metrica": "onlyDefaultColors", + "etiqueta": "la paleta son SOLO los 3 defaults de Penpot [VETO]", + "valor": false, + "umbral": false, + "aplica": true, + "pasa": true + }, + { + "metrica": "chromaticFills", + "etiqueta": "fills cromaticos (sat HSL >= 45, L 15-85)", + "valor": 1, + "umbral": null, + "aplica": false, + "pasa": null + }, + { + "metrica": "meanChromaticSaturation", + "etiqueta": "saturacion media de los fills cromaticos", + "valor": 92, + "umbral": null, + "aplica": false, + "pasa": null + }, + { + "metrica": "paletteStructured", + "etiqueta": "paleta estructurada (marca + acento + neutrales)", + "valor": false, + "umbral": null, + "aplica": false, + "pasa": null + }, + { + "metrica": "finalMessageListsHex", + "etiqueta": "el mensaje final enumera los hex elegidos", + "valor": false, + "umbral": null, + "aplica": false, + "pasa": null + }, + { + "metrica": "placeholderGreys", + "etiqueta": "grises de placeholder [VETO]", + "valor": 0, + "umbral": 0, + "aplica": true, + "pasa": true + }, + { + "metrica": "textsWithCharacters", + "etiqueta": "textos con characters no vacio", + "valor": 13, + "umbral": 5, + "aplica": true, + "pasa": true + }, + { + "metrica": "typeScale", + "etiqueta": "fontSize distintos y maximo", + "valor": [ + 7, + 700 + ], + "umbral": [ + 3, + 24 + ], + "aplica": true, + "pasa": true + }, + { + "metrica": "textFillShare", + "etiqueta": "share de textos con fill", + "valor": 1, + "umbral": 1.0, + "aplica": true, + "pasa": true + }, + { + "metrica": "layoutBoards", + "etiqueta": "boards con flex/grid", + "valor": 0, + "umbral": null, + "aplica": false, + "pasa": null + }, + { + "metrica": "layoutChildSizingShare", + "etiqueta": "share de hijos con layoutChild.horizontalSizing", + "valor": 0, + "umbral": null, + "aplica": false, + "pasa": null + }, + { + "metrica": "containmentViolations", + "etiqueta": "violaciones de contencion", + "valor": 0, + "umbral": 0, + "aplica": true, + "pasa": true + }, + { + "metrica": "structure", + "etiqueta": "profundidad de anidamiento y secciones", + "valor": [ + 1, + 0 + ], + "umbral": [ + 2, + 2 + ], + "aplica": true, + "pasa": false + }, + { + "metrica": "styleRichness", + "etiqueta": "riqueza de estilo (radios/sombras/gradientes)", + "valor": 3, + "umbral": 3, + "aplica": true, + "pasa": true + }, + { + "metrica": "rootHeightMismatch", + "etiqueta": "desajuste de altura root vs contenido", + "valor": 1000000, + "umbral": 32, + "aplica": true, + "pasa": false + }, + { + "metrica": "exportBeforeFinal", + "etiqueta": "export_shape antes del mensaje final", + "valor": false, + "umbral": true, + "aplica": true, + "pasa": false + }, + { + "metrica": "forbiddenBehavior", + "etiqueta": "comportamiento prohibido [VETO]", + "valor": 0, + "umbral": 0, + "aplica": true, + "pasa": true + }, + { + "metrica": "exceptionRate", + "etiqueta": "tasa de excepciones de execute_code", + "valor": 0.6, + "umbral": 0.34, + "aplica": true, + "pasa": false + }, + { + "metrica": "fontIdBoundShare", + "etiqueta": "binding tipografico real (fontId)", + "valor": 1, + "umbral": 1.0, + "aplica": true, + "pasa": true + }, + { + "metrica": "rendersOk", + "etiqueta": "el arbol renderiza (generateStyle/generateMarkup)", + "valor": true, + "umbral": true, + "aplica": true, + "pasa": true + } + ] }, { "id": "g5-09-brief-ambiguo-escuela",