From 5b7c9e93cb119ffaed9ed39408681d12066a4c54 Mon Sep 17 00:00:00 2001 From: Abdul Wahab Date: Fri, 14 Aug 2026 20:27:19 +0500 Subject: [PATCH 01/61] Fix uncaught ground-color drift on comp-led builds Sample the approved comp's ground and dominant-field hexes into the brief (visualize.md), judge the built page's ground by number against that record including the net value under textures (new-work.md), and make GROUND a mandatory fidelity-matrix row beside TYPE and MATERIAL (finish reviewer). Pre-comp palette chips are retired at approval. AI-assisted change (Cursor), prepared under maintainer direction. Co-authored-by: Cursor --- skill/agents/impeccable-finish-reviewer.md | 2 +- skill/reference/new-work.md | 2 +- skill/reference/visualize.md | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/skill/agents/impeccable-finish-reviewer.md b/skill/agents/impeccable-finish-reviewer.md index 5bf6857a2..1d07cd587 100644 --- a/skill/agents/impeccable-finish-reviewer.md +++ b/skill/agents/impeccable-finish-reviewer.md @@ -28,7 +28,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and warm-cream drift is the documented direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/skill/reference/new-work.md b/skill/reference/new-work.md index 15a3efdf4..9968fa037 100644 --- a/skill/reference/new-work.md +++ b/skill/reference/new-work.md @@ -90,7 +90,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. The page ground gets that comparison by number, not by eye: sample the build screenshot's field and set its hex against the comp value the brief records (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over the base token, measure the net on-screen value, because the eye files every warm drift under the same word cream and the number is what catches it. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/skill/reference/visualize.md b/skill/reference/visualize.md index 31cc3667b..736d61e7c 100644 --- a/skill/reference/visualize.md +++ b/skill/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground** and each dominant field's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. An adjective is a direction, not a record; cream and paper cover everything from near-white to beige, and the rendition prior fills that range from the warm end. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. From 8230426df82fc44ba7a9f18dd87534788b303028 Mon Sep 17 00:00:00 2001 From: Abdul Wahab Date: Fri, 14 Aug 2026 20:27:19 +0500 Subject: [PATCH 02/61] Add PR evidence images (cursor-control-8 ground drift) Co-authored-by: Cursor --- .../ground-drift-cursor-control-8/comp.jpg | Bin 0 -> 255896 bytes .../ground-drift-cursor-control-8/shipped.jpg | Bin 0 -> 115591 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/pr-evidence/ground-drift-cursor-control-8/comp.jpg create mode 100644 docs/pr-evidence/ground-drift-cursor-control-8/shipped.jpg diff --git a/docs/pr-evidence/ground-drift-cursor-control-8/comp.jpg b/docs/pr-evidence/ground-drift-cursor-control-8/comp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e78a0d80d90b1fb05b97eece711d14269741068 GIT binary patch literal 255896 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%0AQ`r4mqpoNchH0RnY1%#=h8rv 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�L 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

T(V>e_7K-03BL+mmC&n%Q5W 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⩔|aIZI9?6uDhr{~r@E;KRR7#L#Rzre2$xhTi7~ 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 Qy=6lI^G3u#Ak?yV-7_f5tE~rZbxr>wR2IK(X9M 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 literal 0 HcmV?d00001 From 9213bf1511f5b8a01e8888594eaffdc553486927 Mon Sep 17 00:00:00 2001 From: Abdul Wahab Date: Fri, 14 Aug 2026 21:26:08 +0500 Subject: [PATCH 03/61] Generalize color sampling beyond the cream-ground case Accents join the sampled record alongside ground and dominant fields, every recorded color (not only the ground) is compared by number during the build, and the light-ground-only rationale clauses become value-neutral so dark and saturated comps get the same protection. Rule anchor renamed to skill-color-by-number to match its scope. AI-assisted change (Cursor), prepared under maintainer direction. Co-authored-by: Cursor --- skill/agents/impeccable-finish-reviewer.md | 2 +- skill/reference/new-work.md | 2 +- skill/reference/visualize.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/skill/agents/impeccable-finish-reviewer.md b/skill/agents/impeccable-finish-reviewer.md index 1d07cd587..fa576cb91 100644 --- a/skill/agents/impeccable-finish-reviewer.md +++ b/skill/agents/impeccable-finish-reviewer.md @@ -28,7 +28,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and warm-cream drift is the documented direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior, warm cream on light grounds, is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/skill/reference/new-work.md b/skill/reference/new-work.md index 9968fa037..2bca74d6b 100644 --- a/skill/reference/new-work.md +++ b/skill/reference/new-work.md @@ -90,7 +90,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. The page ground gets that comparison by number, not by eye: sample the build screenshot's field and set its hex against the comp value the brief records (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over the base token, measure the net on-screen value, because the eye files every warm drift under the same word cream and the number is what catches it. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents and set each hex against the recorded comp value (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/skill/reference/visualize.md b/skill/reference/visualize.md index 736d61e7c..b53a6e13f 100644 --- a/skill/reference/visualize.md +++ b/skill/reference/visualize.md @@ -33,7 +33,7 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. -The record is sampled, never estimated: read the comp's page **ground** and each dominant field's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. An adjective is a direction, not a record; cream and paper cover everything from near-white to beige, and the rendition prior fills that range from the warm end. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. From d40274c47d0f1449e136f30139fe82b08acf180a Mon Sep 17 00:00:00 2001 From: Abdul Wahab Date: Fri, 14 Aug 2026 22:14:18 +0500 Subject: [PATCH 04/61] Remove evidence images from the diff; they live on the pr-evidence branch AI-assisted change (Cursor), prepared under maintainer direction. Co-authored-by: Cursor --- .../ground-drift-cursor-control-8/comp.jpg | Bin 255896 -> 0 bytes .../ground-drift-cursor-control-8/shipped.jpg | Bin 115591 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/pr-evidence/ground-drift-cursor-control-8/comp.jpg delete mode 100644 docs/pr-evidence/ground-drift-cursor-control-8/shipped.jpg diff --git a/docs/pr-evidence/ground-drift-cursor-control-8/comp.jpg b/docs/pr-evidence/ground-drift-cursor-control-8/comp.jpg deleted file mode 100644 index 6e78a0d80d90b1fb05b97eece711d14269741068..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255896 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%0AQ`r4mqpoNchH0RnY1%#=h8rv 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�L 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

T(V>e_7K-03BL+mmC&n%Q5W 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⩔|aIZI9?6uDhr{~r@E;KRR7#L#Rzre2$xhTi7~ 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 Qy=6lI^G3u#Ak?yV-7_f5tE~rZbxr>wR2IK(X9M zP5O@$*NiSpkkvLlDEu9m*@Gp;q_vCIH6T2GV3T=|d<(?I)bCvm<$XAoWn5VyP{FZk zL>pJp_CCwhaOShe+c01Hx{16`PG_dFkzdcU%~`BQ$~`OFJSUp5frE<5eDT3}{{2Tv zbH~iuI@G=d81g z>oiM&&@>;amZZXM!u!XPHkq&;pAGk>B(N-JFQnxr zu^@rO345g0#5+#FUrT7Ye)RZG%j(62rM4d=l`Q5BI1&RjA)(e!7;bZ>lb(n?(u>TU>r3Q7OGxnd!Oa?`YQ3~SGsmkZkyDLb()Wo z{$O<*D4Ej*)n;3 zP~L8EOVRR!LO-jzL%8cUNo|oF4@nV|) z?#=Q2_7PHBqZ|fYqXzU-4VrbTQBh)3dIxs z>g3PIP+gStKEsx3&M`Bm&|lZubp#LkLEjzM=H_U=y&!<}1CkfI?O5eJ~&Z{X` zyFQ5*vh`V-xOa@`_AoS)C?5o z_~b7~iS9uJYj+xUhkXGbj}b_$&g>*!0YmnLb~(pcd9c_>wP1Mp{lc|TeT&u3Z;iRP zntJ(5=3^C%@=3i^hQ7&nlu56uv9XWsd9n7gy(blSlr5(*#LHZy#N6N1-brKcrX8K>R<|tl$?3B1w3USC3D2_bvdTpFpvxB_^V8Wz1l{^2di7=BTt(7TGethT*2K&#~yP;j=ayp7R~2F)G%NgyMz531_jrf5yn(>vC|(u5{;Q zcc^lSZ>n08o3Ry0qt-j`EUS^>c^qb?}wj$ee?x4`Nn zfsOa2RV7Pj*8{$LUQ=HdpOd1PR6VJK@hmf{`DF&>;#eRm#p#Fp9e) z+!>B_(rstKXZ=2FlA0KuuhAn~$$r0*4Qwo=pUCUE?{r-0yuhO6jtI%uuICD=MSAz2yEKi!||}IF;;bXKYQ~& zp?O+hvD(G3c_6!H>6kc>7ZgdLpY6iRqqyh}QKZ{_r2Ra;yt}aqy9qTj5nGn2GFR8s z6y@|53%Av&gP}2s_L3>Ie*ukL_l>(7Nhn%2v2S9fKjlJ-pT1m^-5g-ofOI+un4_mj zN3~%}%l^ZsuteECH1YZ^D5yldt_d9a!Q&kd?iwcUkGkG*G5+U%A|1hTIM)9&Rnwgd z6*vp1JU`>?+{Lc?6F!oIQ(Wlq%! zTM*lhKRe4Oj<$MpHT^w8v@W`ZO5{T3FMxzk-lKAIxW@5zja`ZGc4=xp#8)E>dp3Gl zu!n`W5m7knqu@mH?h?Z-v(otoBHwmb3qgw~YDHr%T*tJ_cA_hf#IQ6@Z z#}vE8$vtdylU~;BU*xOkaKjwN9qz^h=I)b5{ut=nbD)L<@$bfAbB1+Guz|(Y5SMjQ zwk$>9yl)TP zKUne%7b|zF7wIw(7MoG@0vac$qV?N+l%v_rre_bqP1~DJ0qoJ&PN*m4u!iPynh$sF zr-v8uJ{G&H=>DhMOKa8SZcfu`@*q@-`!_T%L(~Zzn`sq4zp+o()o`y-&hgdO_4i+~ z8^*$uAG){=HkeswEd!?p?qUybOJ_<)yM|P6?6+T>wzc1GT`q*(IBZ+}1w7{6nA8rk z|0vV-JNHGPjI(yu@An@@gFt~5$JQ#2QlH)o9sa9H?h|yp_N`kr7NoiJy!grC&6ZEl zkAvE$c3U#tz%$Ix54B0bD~5A#hW@Ju#4C9cvZp}-SA*ZH9_<@!P*r@7ghu~TpqRhX zMr)@9#l>FC40Ue@z4}Lh@M3OgV>>+HYUIC#WB=82pJ4a_eD{SFn=EXoG+3}Y{|r00 ze|qwN9wYquUjrpaQtbt^SNzO}97LeyVaxaNx>ld{HAm)-vr}-{qxcPU!&Ce zAL7ja)*kmsX?*w4_2s`Q@qf0>j1`FdKWZonUU|KG>;B=5wETJT)^)&f>ZSO{$)BYch%Y`_%ito|$m;EIJ zSNT!@$Clt5$L%+#eVw;EmkV!i9If2`_vbjT{~-JvE8y|p#?EibljyuVI$HcMWB$jU zV~x4^Z{svvxV-sLz44FZ#J&2D4{+FaJMH?HXTAM5FZ++eY7(XKAvJ^NM{jb>uRkfc zJa!8BvuNOU=MiwECOdyQaCo!%Kh6KAq4vY?4YPj)o-x9PihTvE6aI09|7iYyOjPC8 zc76UY`!oLs`(k_O zwHR8gURM82FN6P&N%7x$EV%nOrT%Y+IsKng?!~`%R{?9Me|&f2A4mR=GxW{BB>wjt z{>QBUm#hD$32o(=x#T)T^L?MYt3jzz(^=B$|HT~zPd>cocWcMKVgB)0!jr1_?|)hh zy8jt>{CUtRwterVe9_Ydp8%aD(V3?8=@6<=XNM z@SOT=ndJnQW~qHngWbhkeE;YuhUVmO2>A7$@1Vi0(b(WBts2Yz`zBakYwjGtL#t|u&bJ3kBIecQY9E2~AkB{C zT=5TrE(O!WuGM9s#TmiK?ZlcvaJd8rYO0I6#Kv|d$O88e2+~P|Gi>c zsFH&jo&KEelEN$0RY{4T=FO=pA^f#&Y3a2g&EXx_oNJ!ktb+N<^8JNZ4mQ`4j~ufb z%~2%|37h4}fq~I)qGWHKYs=S}e9_Pk7OmH*1F@Lk6uo3o0Z7rsB*1XA3O^z6Wjosv za@8=gYNDu~_qlCqYSrKbOKNH&m?ORiFLPXitno?iaf$B1!Q2*iMSb09I#PvS1Y?aV z|59{F(iyU`LH#3m-koX6L255WP1Wy;VJ^lf)$~X+gK|$5ZS=DYfGjia`RM2{*5=;W z=#VCumS7Se+vt8;A1erjtuuhU`A5qtT2Z;B{;gI~ZNdnLmV6S}0U`@D*TkW`mYU~G z&B6*Kg+;Ztd6qp?l8ld(u7l7Le7$NQn3mTZXp{zbRl$$P0LR7AaIlF{{4mRg$1TrC z)U~<}#`U;xfur=ZIbE_RtRStBm~^t=g>re^&AD7=^_>LYs`=DxeTPTnk0Y8vsHOCv zo<>TQ1fxa;_T>Au;#~-mjQHBBlWAYMx||_1&~K(W_^1D^U2{E+&5zoH3P^eS3K|$^ zAW*jc17ymhWi+Y#=?|lXXoN?V1lq6?VQpvX3f^IWhwP^yjx!dkzu>TcY?I!S=ziW= zG2{Efq>^N(a(qIdg3HECuK<6*scRrMmQwO(f+b0sjn~F@Z17t zcLXP<4Zc2lAz|?RPv&Nu?-DoW4X^HLNAg#J?gfcaQ-@NS3m6Vb%Y>!Rj@1jRr|;pv zgTs_6bSsh{73o(=L=!Bs7y0j2fE0BlSjvpAUq5fJcPVk+wl>j3mQO$Z%56V2W16a) z?ShtF1n$j=gup~>o z5CKoHOHAnL$h)R4vv zSVHa1p^j)Cq*7?0XF@gm@3dMYsr88K7!^Uf0H?Te#k-!H!XnPTcN zt2JNvfSYAVCgoljDDg@wnAZ*a@}v{FOEP)b_gbYQvt;og)hG)Bx7JO6@It1hG4$)A zf3xfDJtlFgqKdR-TTXOsJaA37FYftrIf#tsAKA@F`WQB9`2x?Rt{2!ZMw*!P7hfPWM6DKL}H*J*-=0b zOBe761ne@qY}4ZpX57kSS($v~WhI_NqoE3Q>o(Bash{O%;ixkup^ws!saeA>RzMy= z!|f!Bd$gAM0U_%O4o^gg1TC!Vx@+FON@@{3QM9#gd6-RM z{1P86D1lfW$|}6UCcfCX=rO2E2-rxdgglU1ViMk;P8qCDpBKzK*`L_+y?f3d3w=PD zj*RpX>l`%z)(7(2r?&=6d{C_oYPU$Z)yCfP9Xpn-bkYu9oJ6Q~ubXs_n7x;FJNZOv+X{`ZWAk>hM)jo-R|m7i_CGs7T;nV-9PZZg}!fAc!XIb2VdO@U+(|p z31J1c@_yQwQZSbKP%_c&VvLAp-_dW*zq-8HZuB1j>QCk!F~@mmLj!_WQY%a#ye9E~ z0UH|$@J5A$jl+abf8PBCNSFR;e0+yLndq6b?Cdr=oqqhjmOJtyE211hILphbt1%# zgNP$crKA1=a`(SUpP&;`$N3)15gN}NrU`>w9L;~<1>`fC^XTY;358}B7FfWNHC)rP z-c_X*B({rdgQATk`I$)twV>8L&bco+c@iq`IVHdn;Lk4Z_w|>n=Y@hNPie&u4|_+0 zl-v1^%XjA*Y%^e~`t{z7XjU`SK>*{U?^%c`K^GDjS8;<>2+9+XsHN@Uz=ZU)Hc_*k!@3 zMB%E2yf;mtVAY3xt`^Fw`Qofg`3 z8bQ``H@a~LId;s%I_E^wNd)xdPul-t>#d{W3ZAXe8Qfh01Q?t_6C8pL5SSs@;BJB7 z?gWAd3GPgAcXthLA-Fq1g9j%hZ+`c_`>ple_x?V;s{2&c%<1Z`y?4!D@};Ace*k*I z8yIyMF-MPmc|UKtTEaRsgK(l;}a@{tQ`uzbJl*jaH^T3#pgy_NMjw6q}Q? zOCRuwF@-F+>KL%EkK9eGM> z^}^5QdT5XHs@z)uYGu}xEH?V)s-h52O8GZGN^hNP%})Fa-r7+KzZ2N? zzt0iOSFr!PbAl)H{A7&TZId%S@I3SaS80y34D;)_RDRsoo@oHDhWDRfGKpj)_56A?z#nWS_ zxRw4hnaorRFdnN^hcI;9B>%J4{+mt($6Mk57$x~Hqpf(wI{{rCU;0h*gPx+DS$Z0N zrTqhN*j=mrX9*Ff8$$;=X>&We39BZpJ;0DENZVm1@*$xt9v0T$QXO&evYKhx^53)@ zOf7yiS;i(Bk@*S^0Xu&%TU8fT|AKR-A;MEX0PTnt^=d9#9@fmJe}Jq1YsG`aOwFHM z95EJt&-e2FB}29>UCKQV-s90c_`8?<$?KWw|6kS}IrEIsTALtkPFJZt@~C&@Tk72b z9e->8wU*`NKXN-d3rpO3}>e}Y_ZbV|4Jr~b7 zd$+Z(9_Oq6Qq2DYJiht|XstjAu~4h_W&Q8rqu#OWCypLI{wj=-v`tS@wPH==ID6s9 z4_e@f)8`z+i>u=QlW>UtjvbSOyO!B-^RLg^p#(t|ak`fT7%TzA0q1c{ybUg;gT?LJ z%s;Q6OjaEb=_3}FSH~q*@d93CtlOkM=;(INr`W=)Ex(xg(5 z=bZk~dr{p&T8(tKPVO_;WytfEpD8of+A${QN7L{T3Ya2lYCO>1)8SJ(;YW7IpX?Xw zw?r}=6C@tn7T!ViweVc!ps(5;wTh$%p}-_d!^5fpM9zCi?#c{Vd}4u_pRHfsxKB_!6lYdhA^}iN#bqy*a1odf zM{fym>Z7&MHXNitji9`h<9-haO>v#wCd1OKY*}AV+Xg~K8-QgL9OD+(-u-LVIQTc9 z6`UY!3KnQCL!{u1LRmg*kTh)2i*hVxHQT=p1cl-f z$;@hQs%BzAl5&Yj-={1WeadCOBQ_y=vhr>N5`pE z$+dMLP}9tk=?MjJB?ps5hZJuGq^E5s>pIs)NCPZe_unRvbR>8HQBb+(Gg#Mq39Uav zwavM6>7~kvs<5?!YpQNA*NNB*6S3>gUa@QEj4WpTC4$H2*%2u)74kq7wsl>E?;u4u zXlR?mAK`dKmSSNv$YbkfMgT0fWX``11^xJRM5Sr&m|5A*i?uXr9@eF>rL*yiKozyh5h(#Ro^qISa5DbjbjJZPsk2Y^H{N6A_d^L;!nXxM)Y{@%ndeo@-pnYN$mC3)x#j{Rps!f%i3^# zRkB~Z7op$%z-(SL^zKL*x`EBsr(CQ+L3C!5gpm2Tv714@;H09_%dYMS(U*TdNF`lH zVTh^)E6-rkFMvXU7WYD3vG;QETWZ3a?W;Sv(rqZW;)E~AjJ#vTcZdj{37tO+DUXO< zaWv%-6w-v44IpXRh`88&#`a7lE+8_0n2uW7893fVw8Z^gqEN4!%HF*Q#0l(*BLDr7 zk#4jO78lr4k8)4Ky@tlF|9x!6uhRSD1-dCbq0Kn?BZ!D_tMri@xAn3mZip>U_I_Fs zCA2g;B;fr=5HAOc>weo7;7+y(rY=S+@H-TYmW2{mNN+FA2eWtjM3fUMdjKGDx;+aF z&03DQ425I6-Ae;DL?82muJ*da4`xq7@%NdHAb;E+Yax#IiXc}hECvo7At|Brd!;?NZ)}*^VI>V_zeEFWnyY z4?sD*jm92g4n#_={lns1AyglSF`d? zQ@2WkdiBY{lx)&wLE67;Hob|^ZJ3XhTVhO60D!ft_5dOrf@aiSIfqYqwP3GJf9CV$3wpVYl5w1CqQo-KtHDXmB`@#b&e zi$b=TE}>39@xuCXCm@%=Z~!w9h*w}q)axQ z9*aU9<0rjJkDRP)l8fUdfJWDZqyGLQLsFW5>YMtHjHw=m00NoK%W&%GrPyD8Od)w- z?Plfxhdi=)8FXgX*2tdVo|MbT3>|Dhwo%muU@Wu{k(@BpzmDF7Y8O(vleJMAYy8LQ zp??#=B7KgeqI7hT9%Edw0{xy{MrCMaCPsb*stcF&Oi70}u`(QrO%+`3rGd~1nS~9M zjXL}!kVFxQU)N{^T!u=eYxQr0C=}!8-7lj2pOoEN2L0RUg<&LwsKs9;tqp9YwSMpz zm)e1aT1wQ6|WOT}F2v9v5PU0w>JuA{M^&l>HXF!E~n;W|_M<)Wk<5)}V&pFz#= z?M457O%1v6N8mC$ua}f#DUY;LUffCJk){qEqeeFEfNiL)B=3dcDuD^N=V5T=^JR?H z=XhW%8lrry>LM7$sp@q6gn=)iyVvB)yFBwdsKgXIl93@$xqB^lEr7T5DL*P3TU&|d z(4DUJWB=tpz*00bP<;xoF#Bbf`k;}RFWdpu%n#ao?}h$DomszXymUfB=RJ4x*Iy8l zBCb_NX<><#VcXL3o#E5p3fKW7ItuG~r%twhlGSE-crIB&2^=*%sjgfPeLukuZ3lwR5*i%}X3Gbh|{g9y~O=TQ*;OcGae5!Y2Y%&Z7#IMM( z2-tWcjKcs+XHh0~NYsc0y*eIXiTQfQzTGQtZx9|BT3GCJN~^omTi%Cx0$x2q0T5t z=dwy$Ps2QcX|Y@{4afJu9Y%z`M%D!Mqe1nfQ4q49HS<0Wd17ciux?oLxqW2>fi4u; z7A-^>soNR?t43Ub$>%WeqArEbn|4)2OptSXSWDE}$fyr1#Szg@;Nz+J7R zFREr%ermm%WX^N%IO5mq)66PSg1;J6z?>`5?iaui_-df2pI8LYLa@U%zus-24}NiX zQkqPf$Nzlo7eDAOq&CD_-N7};r|&{*ZKDJn<}ZoWWPwgSjJ@UGI^?m-|+`NvzDBt#T~C1iL;NBSWSs@(rSp@NG=hX?sl_7Ymc3Z`fz& z8wx|!MLGkX78cR?4^KKYH;w(Bm;NxS@l?gac$kSHdV&R z`}kr)-St;76}r={2ULqD?81N9i?7=e*HWdz<{o~LX^%RWA9-M@gJ}L-X6_n=TC9|u zd@*w<7~4L`{^klFaWpTdw`Rd1iOu~IruW0fhMMimhb=9MY4pw)KVXx|Pw$t)*_J&i zQgiwnSN0s^$Bt`$yh`GjTgm1w^EU%A)OBW~>35BG5P2^DCW9JQYArc=dDpX z-z9YW)N&S^viR%T!))KvPgG($Zy&*5L9D+>DFeb$&Bm1WP}8h5``? zTKQon@5q^XK8EoSdA4Gq4NpP%@-4$k7C+(KD`UQqU2Y8o{)AFvWs5LPGD&R(O-TFJ z*_lJxDZu`~QaA2J6Vp|Ek;d0-M=jdKTg`oxEo(xgQpBCk5~d9Por!bo`xKD zfJkB@j^flB?Iq_d2kyJIhl7UhY(KZ*6ev#C>j^?VIpif_lK(KKT;-+8Wr_;1vlj|k zfuGUqMqjJzz$5hOzolnPh513?K&y2teR+N^mZQS<;^0&Y9$|J~-Tm?wnbZ2+j3@^x zKeobc{Q^=Y%?V>Jyf6}YJ@etd6U0%_3rc)H( zT{sG=%PMn_HS6GBULfoL(LHOf<*_)>&;G8=rZA7eOLr0_xk*p>H>SI7(e>+9l|j$* z2Ez{uS;jL<#Z*2vX?yy%a-(AcBvT(a)=miuKo z=+TRyg&(?EBv|RPR4Pjvd z($v^O^U`z+&v##BZPw8)1C}2Z9AYcr1)}c?G>gbzf3|b%Ubbx`z>loHuxwsPmfV}S+9r0ub_YWDuQv5CaF zpDAy(%9^ofPFn*TbJ8Oo>=>r)3XNxkpus|-I^W2Lvt;#&Ew}+EH zRKD_9xn|_@MyA!MlFaD=^aSGA(zRKW?@H)hN^K9fZ;NQ9oO|RZC&^L-(+SZXX60j= z!GyPXPeMFOo==VLpm%cYkYK0~Rf{bH3I%Yj!aMH0^xLcuL&D^()~8@xc}qeq3}+Er z`f4h0Oj4&%IA(1HFuv4{@)i<~qy|s}Y@zpD_pUvk&V3O9$327)J9^&Bq5Wmlm>hV@gYo(mBHSp$LBQo7hZMKcL2!ZJj^Zla zrIE6Mo+|2V@6fnt?<6Bai%f!@#`@5ybo3+PasGKQ_H{mhjU6UkYCyQ4^X2aQL$#-;+&w8#%An(a%c98RvFM~8{%F}Qk8d-ur zw5-WXy!u{}C75H) z9^60*BKvvu!z7g9xZcmDNSPYTotsz$VjJ+axz&U-kgy&n>|3{i zTT35M5sZdLJh_QQ76lzoj}dn|i3sN2PuRiZP(H&^Bf$uDlB~fhHDCcG2G2ZwCc^B)0%VbvypkjWm5cv&{T)C|Mvm0B+1&rbF!qK? z23g$d8tQ>)E{WLDYaF2GDE|O*GVZH_qdoW%@!y)PM61?s8|9gqNpj;wOFx33D1()b zc@GPBa?E7Mgg-7KlWDB6&ZMy9UC@qpoX7~2-Xj$i6l8!lu*UkNlGRW-Bet-r;v6jJ z5J$S4d7`3Mym>gV@F&7ha%9k|ZqGu}j2y;K3&EiB^&BL(-6V-1?qYh|BdGWmEy)R& zKA*tID`Y3#9HC2u2(U&<#~ES2^f;3|q&n|{NjYH&)dK8lc6w3k{e;BjbET2^eC4~f zxKIt&1q!Vn3>Q&tZn$TX#86Q2x3@omE92ehRLuBW_p4sz1e)B&j)x&&5RyJWZJQWn zAO_GwmQy^fNNS0TH+o)s8-X*Xnkg+YO<+lb`bkcnIeAZ=eiT`i@6}?rp&}UuUT@p? z53DX@k>;TVZ2)_w3GL#(NiuB{6{h)ImjNiX_V^v&yAnv^WdIC@*Y}W+6!TH} z$hmC#lU{T*lkaR(4n)gxfxPQ>2J-~rqZs`%lca0_z@FJfAW?Jhv9|m|Je<(wS?xgm zUfPRo8vyXa&Gx*PmyVa2@+Q6r!tu|KF5(d0bqXamMIY_)raLrGJ_A$kzYUqkWc(hR zx`z^Nj?KC)j$U;V-ZXn}(RnNx;aGj(4Ep`7{tm6w)0KGrF&B!X$YkU%g=N?^{9u9= zMdjDUwoY~;nq!C~w$O!1V70qU#Fs+4z<|^9+8bbG5N%4kfVzxgHuQ7ZI3E!#s&Gi??NP12L$G+DA< zlX^m;l|Z4U5o(3H5YHf`;W#at;$pkU%nP$!L7w82^b(;+I3)aQZ>;9d_9C_M?;nH9 z51r^5gZ(xdq@3=pf197}-;bW6xc=HE#)e81#_o<0qyo@!9Z$|~-r_fYuT^h0(E3(S z4z(%C9whfXoUu)luBUbT&e>I&gFF1bc;x2k%aI=PP8xHyj~tLfBJ;AbX}~S}><8?V+eo3P8$^@D6_sI2*St{dMU+9Sarj6?h@=E>)7l{B* z#8rd6`m&7-mq(O+qGsV4yOc=GQH2W&O=xmR>D*a&OJIq;gR{5=(c2~G!ldL#*q(1r zIA@cPfk!5bac)0pi}BAJOC8on8-Md#FB@+aMC3|;l6Q3sXM_Le|Da(DLfYYpA z!PvfwN(~mJZI12+qVv zPq_EIh`)<8_%iPVG;;}HJ28Wd#byFWwPP&5_`*&OFt<4Zm_Jd#Ka@5!vD(;A&K`4h z&Sblou{BdBqoHUv1dPF<>r^pr)*>J9)O4$~U(<4=y!8ib2x2eaW|~dqxm)TdlT^gW z$96K{>E4O;A`G*&yUz{Ld4B5O(Z{^N`>crn^~d%y&ad>o1m(gxI+qM2NBRy6v4~n_ zlm^Q@Tcz?)6q4Bon}|*5D5TJ{L3MexY4q(S+Oxo1(JDVXO#AB*j0Vct=3*ufl}1Z0 zQg9AW)qCroAqO;7aE)uG<wB#tN1$i*3T+%R{{%2KFp%g4sGRvG%_)c&oj zvN7*{iIE_(Bx`VP@wp#BS%>Z95|Ri%Zp(&&N_?fa1nFAKTAiS0IQM-bDW!+5v8ExP zvH=lb?0Q%nzW3wS9#repT%fDPcMC;DE09q$pEpbT{^+`|%nk-chn?&6m=v?jDOf$m;QxIU z${tAewInLA>sbwmpQ2j^2EV+C%2t_F!cfE94>}1uzI(Yy7vrxsip@SnMCjQgC(Wx( zBN5*FXVovaa9=CR?@pRIi%YRPH~NVo5SwBw*LztC3t&mrBtJW#D_h0_A}h4qzHP+C zYX-9od}JhBOYmd9n0sOjQZcV{Sw67)rWMrI^;yCJ*OGY+?CV^+ctG^cuO^*t2LvcV zQ2-K=bD>b0s$3`rYZjfsPdD5{%suKP(Vn)@^pmrWThEc$!FPat3s*t$L|%f*p`kHx z0k%ynHI;HGTWb~wB|i1fbehId_dQbBQBe3ztYY&4Bh-R`b_#o~~nL`@Q5K)|cvs%>*0nqR-d+Jn~J1`Okn zI`nCXAMh^bID1~*^Vh#~+);B3kG_wr+&-GQR$TTh(;cEzYi@e81?*DX_@HZn-RdFV zA7nZ01S9L`AV|K{RfXg*4tV4An&@vd3{GUz!92=2bRJ*!M;rUkr zY5%(6<5-8%KzqA*>2wlnF^nKt8JfBM5pMM>#TRvn5Pv7soWs4}O!-G%AzK4`alen& z%0IwIj;`1<;#ob94d|ZJ7dFEs7w$3}95oj934VH@_irs_M@fe=ktFnM>VYK=Kl~jV zy>j0=e_@&)y$pOYwlWYCz&RFW8@hs$l@XJ#;7(VO!)d(VQ#VrLxq&{1{1=*w=g(!BAr zt~0vPR-j>CPb}tLi@M8gG0`jo4o-?k7|L0OY@`czbDKsh1M1EdTJcvt_tU<@Ej?kyKE| z{>g3HFhRbx3UtTzR0JAI2?Ys{J9W}+C+e&4)Fp#a1zlGLTs5lLCwvbfV!@6GQB>?} zrJ=@`K#e{^=r#+sFN-UJB_ep8|Mz$n?lF>^o>rG?$jys4Sr=>Q;!dX0M{b!_s@IMD zSXuTgRvW=L@38ol6k=;X$@I%HuR)H z$h1NnJ#UK$2q!k zKlIC7e|_QdY;Tx1M64_j*Bwf{xNIzb{Y|j^OEbMjVk^ z=cY-Ll$Ntr>TOq>F(>mr043jNbN5AgiAJhsZU$C!K0)}_${K@KRgeqp<@rBAJ7Dvm zl)&pBV4a94sMx?DW&*D&s^$aA%Hdq`-p0d+fqC)qe5(o1&Uwr<@zKAPr8FdSBmFoKCI|L6t@VK#cXNWDN-Fj;p8<~i<=h4%<noivnn zK^=NY{kZi`JkpfncZ37F45&27RXK38Gn)vtOjJ==;*Jr}twzwb&lJianw+1|N+S9C z-FJbs$HXg=zbdr?T9%ewHFjs+X;F}R66|TvovlP27mq?fD%&P8?#!L=Hp;FMc~789 zcWW3G6hy+kjhz9-0i)cmnFXi#?X$H(04}U|YE941z?nM$QvDN8%`4jX`2r=dwXFrO z-OrqzEKWl1Z2a~W5M!Y$VizbQw%6?R0u9&(dq9HsWngZc_wqE(lv3~1aBVuhjTzJx zXL=tQl0Or-u3drr@?@M3Jr2xH8>OWyV(e9(6}PxRO}2U>d`Xt* z2l7;TGFT@<3j@EI^PBZP;LiV;!O$3$eB7B>rtRvg3@*}4H_$>u`-!a?GRmC13Fo#8 zTN{>3t@fyE*?-z$s14)RMl0RaLUq76bzi3`u41-Trhgq}+;@6Pe513UnWb!N2yU3S zO0yYgCd$_`4NbmvE8jvxHTRk>IrVK)=|i&ha(?x!04tUDfJM1hgNBW4Y%q*;VDgjZ z@nirrj>n-pEDF#bD5p=m=bf(BtF^N#0irhs-Zt^D zCtwgqvvHDD5{5~tr;`fmaLf%AFEp}9mpSEf0bBKdq6kuKFj3`MaKTtFey+}!6dP1d z%b2RI&3H;_HUIR4m(Vy#5HN>;Yl z>+YHF$uJGOEJcdWSF_KDN$t1ya`Qex81Vz%i^SUt9B>mZk)Mr4K4rqTNibOsDloydOVz^3esA*XucyfnHJW0zkzu0OfI*eH&g-5p#)qT|f;1zS(oE%*9 zO-P(C#$WwF$J$jlHHBZfv~G_?1H>{EGwY0h7frhb(W+#~gnzQ-ze?0HVH^0Nsy?fk zoRV5u)Eu8eUa$QN<|EAjM~fjIOidu*pPu(akba!jdT83!$c z!ib3d(Du7eE&QV^lx(^e#J)Ln1_qLswIO9*1$iL&-1V@dfj2Pz9Nr2d@k)VV<4c(O zyqGbEfwm$=-J96_+t)|%%Py@ysuDbQj&1t3wk{2yl^A5WgjS+Cx*C`{Mnp$J2aOKF ze6-kT7udUaxel)Jifay)%FwPpd>YP1-|=+M>gP8^)uq2RUkmdcXDFOwuWfl~V^auy zU(zn%>DZmB+?kO19HTAs_-j1T+*P)wynTg#bi6Z+l02Vp2@EofLFp)PW)hPTCBYVt zYsU$14!d4{!UT*#<-FI|v$J2+eIb03Rdwlwe_Wt1Ztf8#*l| zJC96d5)ZAinj|FCmZPyN%;?=xxdnfgjbaOcqzEG)eRVAmp!>_6w8S%B>7#4m z(R~h)Q5%u5KxL=$R?x-^#6(b z#Q2|Cb}g4$=fOYn%it;5gqmrbDj&H-_ptFTC%TPg^dc`N>=Lt;Zb7!gH9R%Puph}) zmF77!D&K&D9u*fe@nKAPL^RPpz{&76M4CFe)X0)%=WC;BgQjgeS3xS^p=CCA91G zhwh3H043QjKvq=~Y<1w=c3>@*dPrm)B{Y3WHY9;aEYlJX3*SFLd`)1sN=b3x;Fd^Z znG%2m&*i6BQEZZxKFQQ*y&9C)%6OWi_LUuF$w^Z3|Cpbn_-+|eQ;{|ofQ{<%y1O4F zLT=`aRjal*tm|jzV#;ktZgV|2*G58B)ojVv)Betfr@W&^g|WWKhcuRjr8(Nc(iy;O z&Vzm}iYyJW`gNOaHCwJ0*G8krKcKnf4^jm42RLW@QcKJe$Qg8L4iN<`R~munKgC5W;1?(9`5)Qk#SbhLPC?3mxKWQjW^P=gDbL$O8AW99B?=?f=`x!#(YN`-3G zuqB5Dn&iYW4Q*lP+N8pi*OCzjX6vvLZo#`S!+;f;I=F(F?B`60X)U$HAWVr}hjNvv ztQ2`B;x|HTRgx-}v}V@Ad|_M%Zr?fF(NNP%KyM8;KiVso?mRXV#uu4W+weCc#l4kb z&GFR@Rm$nkbO)~ZB0T)_Y-%`24mvKMlrIuYh5=Bw%Cc?tEsy5kl}sX_;KC3~-9Y(s zb6ygyO3gHy#w(&B zwa~T|++n4y3D-|bhs&tyh9^z~@YV~K(TJg-S??O3t>XRv+<^&cY`v zh?QC71j34h-ui*{W}QU}$sLL3JfhHI8B-miLR&MDdWb}1Fql>fv=v-Oo5JqRJ{%g8 zV&*PTtRe5fMe4fbu~yQM=7DV5Qbo0%7i7*AWHqMPS6|tlc*-ZYYBuxp&Uw#(4s8!Q z1JJv_8}{hLhTbVK$^B}eAx;~jtWabQ@7?`W8<9+su)i5+;q#Ce>}0n8$bAw>uE;|- z1An{q#`w^2sA2$l?S1UZQZIWy` z-9*d2SCBFp0%&IaH0j$1r@@yQ<{OtcfLd|Yv_KZQHIw1P8M3@4cB_$serZ#gkM+6< zUiz3B&UU{dK3JYE`}9EW`l;O68flc{+*Qh&P*80scFj;C*p_;127>$_X3>jNQqvv?L2((I42SjQGH^y7q{F9~M!m_qN4S=)mkO zOo_XYgc^E{`%F~Jp0VuqJQD{SAeP`x4tQ|<6C4z^p_1q{R~XdY|BNWHFiX1XxDYR<3X~{)!W#j+Pt*{04$gEE^iAC!m-NZw9811E5yQZ)#IQ{ zw3Lr7MlRKQ;siUnn zAa5*nu9d(JsL*b_Tpi3dJJsY)R^NppTyCzlmK5vqhjpptD#$3;qp804m^55R4ti`5-#Ak+#L_) z_%gLeq{PF3l=k}ReDOg{c)ToF`R{G8=w44f11vy?tAglJf+M)C%*~WufmiHBb0Gez z{M}ijG!1AOKV(N@sus*>YowrKFdH+}U0TXkH0H3te9w->ESQV!pzky$F)h}7ny)4S z@MByGlj8W`?a%o1o6C<;SYWd79fMqeNjH`Qx}08p!i32(UNJG^p5p5F=%@FdH1*OhG z@j;}c!k>@f+;@dJ(sz(S_6Nh(Qy&PKUn33+zIZpC?oa}v?QSD{ z5f-5)cU{}c&wb}PKq@{~m1{IHdwv3TH6y6#547R=$Q2gM=f4jR}emQ+inU&p`t z{kfeZ((1l3{tZp9A`Y9B=bV`Y1K_st6lvne~yLe6SW#FkKfr3I!pGnab;ZL7Y$GGegakBF@SqwlTe>!5AlcNm_gZjIf1Ys(L zh!FbR(+^lXw$U?Wk0%wsx$+$KWE5dDA**oBT$I4NHng+u!*m^65hd!mwfF+9y${7J zP`7d=Tc|#-dEvg|1aOC!nios0B2Ia$%w~;A)8;F^YPMr8D@(wgKoJ8}$sXZ?F_E&0(}(SeY^l)#@YNSW}g~@ls=9l5r9awOwg}X62|!{+d>+ z%n-gP94AQ;{a~3&CmY9(A!|ME#h-#pwsF^exPsYKot--8pD^)cbhuRMGc#)?vM2Is ztoAyDx4esw4nkCt;qX?jb(%qithEXUZZEu~&{9m(cH!tvE66RBwggGk%&r64Koa2< zbQWK2?Fnbn&>g4?LVuPKs#aT&3X0r_yx}QCN2vZQ3Pf--=RgI~0<_-WR);mROuT*HIhY`}qS@)!nN zf@i_r7v2%p;(vfT%DWb9t?x0@2=1o3*i4&!bG=QNS0!b)sess-lmNzJa#FyQ_%&VW z*2mY=q*OYGBH;<5VUjz0bl<>56D(R3CJ*}Uvqk$K0&bi1$CUh=_SDfr3N2Oz4^vu1 zWAe>xQw35PV#kFmcpSHdt% zY+VsjpDLg75yd>!E4aeewVzRKSv)t>W0-hc6d{2l@hV&L-40BNV(QoSH4brhvmTzc zD|VWmwJ&cZ)%PYEr^q2^R-`FPu$lq(FS+N80+aK;{0<#daGT1OPy^Qz<-X($8`}!E ztBOqi$|71nTc6=k2k9bda6C$DUBgPZ=H!BrP^_0S{gi!pn)U2 zN-P(CrWp@G3BR$Vz(En*7&{gyX;&M!puWgN*nXh>(E@#klpvTaTEtmVNCwr6^eHyWH|;Z3#S-J-5hKU!-_S z*QWJdX2$hnNJN=#W&*EP;SZRmO%nFx#9GC-p*7`^cEzdakQ#TrITu-h6Afto9|SzZ zNSUCDzy7M+RsBn3SC;3pnwA|i?SbMxZJw#{?dCM*2R?6#45N&M_ahVh94(fJOniY9 z#&dzc+Qp>)N|sQZT2MmXVymBpfpRbWjp#sY9N}vwrckhMh6iC%afbak!;y|$)2f4A z{an6)DVV)=z0y*xE!8jf5HUyw#gk!@4Jc#&ZtK%RmlAJqL?|A9VhC6Fi$@e6gze5M z^@HarXhxV6A9(Az(D@^sEkEIpD0bj775;LoYPuvm zr7)^wQcG zW)>_``gq-*1-pj`PZ{@Puv$%(+KgI|tG_eEGRB@I@TQfYv5X9*7WH9M{CU#Ll z_e1{}6wS)=VQ+y{kf(8O-9(q#otuCNLtZF*S-Jjd;T0Zk-S_-iAykvzl$bR0%;f7K zD#x$mf?xDh(@UrtZ)~7uja{A)s7BzXTvM74WxGw+Ktp341-l)7rnQz>f%?_*LZQZ$ zdwtF^&iD3V*N2#xW4$S?qR`7h%9pI=)O5$R4~eI5rtE9w}*Sl(~6 zRGx^>7iZK3^R;(lO~+Q#Wr8cI;0N`vsKO9VD9`OW0YMRv~ieGceEZo zc`8W$1vHO2&N<6JGhe*_!obaygFzXD##O~Y+h7SikaI7r9B32Ha(fAXHSb3_bzpU+ zWmh9I5n7>~QngWq?#R*aN|NAOklRW#62m!zSuDYCI-An&KJ+rPT=VDqS)rMCCmqV2 zWCRAcqo(*CRAn?D|UeRJ&vd{t@)^8j~!1A-GW;j>^S^^&3- zrVLq_oZ>i$GH2_Q<0Hk|s@Ls&+6q3A-tZpK~?yIB`Hm|2w?6@-6weJbGazX(lUd_OLnaA1% z(0NY;^kSm$_9$z7UnhS_oj+PC*hh+Q4{^`L2GQ2%jZvkaXCIF;# z{Nh&>3bp}(i9E?D?vz?J$AJl!3F*nPR33DtZbv;_wE%q}gS7sN{_U;Y@n8d4&{1SM z5weeF3oaOrHGVG{j|Rw-M~h}_$1--DwDVQy2H~t>61>I6QLaHuy#vrn>trPddi`y{ z{aWIdU3dN&TUb%W9FzYtGQ|chMndWZ5Pqjwv5$5(E$wFx{#Cj^mu(k5QAC6#d^ts! z4P*|$?t1uRiq6A;#bHzrbj`1jX_u*`q?0^k&{osx5*rYjD&D&K?qm<(^@l0G6zC-Q zfs_VeS5{XUbgm0;@T4-YV7u|T&pg^PMCqhWE}pJa zSJyQj7cAL2j8ggN`OJoC8OcVeGvL;ptgHkAo9<)Gk=M&Rc=FKYcPT1*uF$G7xQ&M= zONYpBYi1jNH{3NBiK&?Z1h#T(W4uo11@$wLSc+9wY^Ot^ZN`LUMC~n4b!#yTn+^Q8 z<}E9Y%U+m}5e!~kglzt+5bD_Z>t;(nX7M7b`jkTbkCdX}DhHRO+&2wyyQT~Uw))AD ztMDCeQKE7>QH5756v@FM+9~zU%6+osU9zK#T*Vk#J8IgSN&A*g+b|@mg9VmBI>#!n z=f>xH6=~f{t(V@4ZUcAwlA+c5az%eS8ObRxEYZ-u?r8fp!#9jYgS&$#CA-SbPEG!# zFqk`!k~*R~HMBr-OyNEI+8v?0&+MEib(=!kC~S_;C)~=2!1Ch%q3ApV*?PMG9($D% zn^Ge}(#D=uidqRVV$YVMjlI<@O6?+vO>4!Tu@$w|Y-?{dTf1n@w*NQpw|q$MeeONE z_dd_L=lp){zDW+N)Ac&6>{hvjlZN-82XR?OQtpsY>q$aB9}B=Zl79Hh?o)xE&w}c` z;-Kods{Z9|y~1v9yktibKH8dxL{^cIM6rQ(#JTP)K8EO^UHKamglJR{Dq9qV4h+S3 zRUz=VXkj%4&DQkA#<7_@6I?#@EbH5*I*z@r8^*;r+r`p`k6kdRqGsjSN_kA^4*q?? zRGIe-%Sg%k&2GdJ%Bi2%h`>67D=Q%kB1KRlukooCcQDM2AL%;yig_H-d@z>j z2er3wK^QmI3aCzyruw)4s7>dz=8=Z8v#+@u8l005V*g1yx4)U( z|E2l8*a?EWxQ9B!pnlvMQ`p+q9VWmHIWZ{J$-!%m-^KNvwy#L-+gcWgFtD#_GNO;6 zsCmmJO@}IL+kU2k1bm!kh^C8`>>>R(M~F$hsg}6=_lm%=HuqJo%%L-Uw-PiY0+r?#_Ff_z(>qLZOCvT6j}tq7GBbtgH1 z#+PC6IyJPdt9eQy8bM>oIcc)lE^)^$0XjW$kj5Ja0sq=O{XEgSb+hMI+&F81k}Nd= zHeLW|W+k!?8;n!U?SPGMGWeFfb#e^-5N5{-yuFjTc`2%GvS!pHc*1bgTZiHV>xj#* zv~6< zOe}t~pv(UNH}w@2!R8gH6K+ZO$!(_lOOxJHNfgyX*^vSwz}v_FTH&CnV%5 zy2OSq17Vg&E-Z;DE~Dc%&%1Ue-Z~6`g#lLYR6PpGnkjd-!rb4L%^V)uSDL1z1f{}L z8A347so}gVSn;g|9k((%55x!OIxcG$_A^DDvX&>Fa{SO2x-%TbFofq7-0w>yTdHfD zs+U0jQCnAbW4*{cKVkylf%F?KT}o818ELB0lHj=YX43k-35Td*;u*H#G=XqrAap&- zwCYWFIg|=(%(d zwUa6)hjgQe)B4l)!pt#in*BkW*Q+67nep#K!Q3aG-MlOL;~gEq5Q3925&_r!jquVd z7)nWF4ryb?RV=W$t8@5IV-8xv_ znywvbjkHFvyT$~ySm{t3E&~&Xj0!b2VP%Ju)vD#Qm~vV0o@+f^%K$vLH831=N0qu& zL50shylrw*g})$9b_7#bv;;juY0bR0r}%V2a63pcl4;6rOp-VUqlpg>39BnkXGgsU z1MT@2mO$L^_=AcCmE%^XJ?&@ELpjG%ph>Z%?x~H~BaxC()$*_p#C(6nde{7T`35=i zJ|QVGWP?~ro%Gefc6Lnco1n3sTT>~E8CEAF)s3Ok(1_Sn^{!n-==n&DmyyFO4xeN( zy3GfF(FYIG*`|!!vdPExhyA|ac_nXZ;FAZZg4MjNxQUXMhHLJE3RDt!0~l$~Y%l)7 zqFiin_KSzA6-e1mF;V=O;bNJD^yt3VKtfcRVkX0E{<6=*T3(80to8#EamGuN!^Sm& zX{o6?deuCUB}dT}t7uyC;~B*I3$zcZVLJ*?KUOegLLI)Nzs`Lsmt-N+6f}*)0-Z}n zL_6Axre`SI=Y+c5c^ocm$cDcg0V)pdy`dqCcN_;H7^rPAz+JsY1p$ATlc`dvH{qDx{*@<-*IgCXQnpav#PQLg^-z}ckl zzwYB=t3;D1jLhuojohjWN+(`U3@`@^D6L*gXAj_Ya02x#@aB2V2V`Y)g>Op5uyOe* zT$HdWV(ElSq0K>!V2pf*(qH=qnU}I}48tMuij%+MxFXR$*al{Pm%Z6V)>IyoG~cpl z3T|wMe_ebrLTY;*YLwI!l3%le< zILhYU*%_(dM~-eUSy<5PdP~J#FV|@(3WIS&npgMB@1w`Qk)cqz``;Imsc4=-vIi7t z5a7aJ%VSA?d%QqCr($%`Q2V6h_wtHThOU#52v5vp}S3d+cb7DVGM5rUt`=oxVrKhbv1Om zr{&&cY4{qb&Rn@ls!|0;~+3e-1t2r2I9v)HyU zMIlT(7U`1BUz_lY4CnPq2S#@_4a*w;2QZuk>bnrDPp<#btWZ9oof0bH4g|Ut%;pAe zi7*$g{9`=+BPvnG+8kmDQSF3n439FPfk@+4tctN`?XMUU6t}v!NGv@BPJE}CHJ=zRba9pIAasyMoPKepxIQGN zl5)6BmCyv|l;VLC@-ZeC1FYXQWBDB|-WawI=`sC4tXCMP(Gy!b$N%L1 zH21gZ%M*Rx6*33Pos$y|@kt7+xAx$i2Blfn8f`7*xoZF?(+YecLw9r>5nc?|EcqgP zq#jkiY_wxDP;`b9Pv)(OF`}9BVJUl>C?km>D69cu^0LJ+Y=YID!(wNu z%2l<;?&s5L%L=N=aWrRl`*N1=1`eUC0(EH6^tct82B*Ww6xXWK@mAS&PD=ZNut|@R zFXdcIfjfm_dyR0%hdV!;VEDS?k;b%o>8&$|yE5B56ZJJ`c~2f1mOQP1@eEpHOYu#0 z`^nOeeIZqy{8Ko5%e}P0RmQ5UQ%Mny-W|e4 zSC8$pTLP$UqQeaUfa>$f^JGgihABtTcSkFntBzjlCiXsVN2lV+JLB8R0!pMQn(-=v zso|<4qTDM?!@AB^PMJ=YSrUBX{J2r&lId?k8fG4siXypv!r$h1tE<^@2b}QYD~`0% z<^}A2P_&D0#-k{?&S5j4`?E!D!L&c>RHRjs;qL+jpIBSi4@yWhxXL{k%VB0oM}U^@ zOXlQpgSQ)M(Vz(5oY;{xT3>b81wHpGaBYxfHljhoFyOH*RDF(>KQ zgOHzkj-Weu^&hS(A8UX;Ny1L@==N;qS71KF()ylCE;`8THN$X%o26_>~K{wq<6%%PrhKQ zoT)>pEUrOS!@y-l7a%<{Yz|_UaQ~?0>N9VxlD6=VH{GSuDSHygESkV7@}oCCi>uO` zMmG5+Zn>C(H18^@c2{vd#U}{`IQiHN?1|j8!47YvjNomZ-~GswI!Ythx?Skl*gAq> z;B`LpX!@n1ncjJRjsRK(^}Ki9HGLz#ZF9?l_o7xBOC=yGl-<@#xej)4%2|^RRtAQr z()z_5gbi|DAt_2jh!nxdTk=-DlrR`1w5+BLtE1+xuh~!L&=i-UH86S&6mi))Hxm;} zRd;X;g7Nz2pUNeNYIeWIF$6||bxU9VGl;v7PmCtb(ebxfFa?fcCRa5_Fn*8asQBjm zx~~f7zg;V0u|80&o5y(9^k{#%I&AhZ)qnhHfnC{}UGPv%6!{YgUM$5u@&!JoO`4}C z&wpxg6^|y3!DYJ$&qrx7#%WZ9?TIuBQmmUO_2fOJXp!UfUxqxX4k!a$f#frFKpKUx z%1g#uK?x=iD_)=GyT|gy97V!BFM8orsRlj2ED6tNq(D;@?~Qaq5#$hOSBoZVMpb=M z*o(qMCUurL=O@FiS&+a~*(LB6Rb&H|UJG=*dbq27sEen$r2C)eB*0K$@dwOPRXm-J z))A=r_SYE!H9iXUJCl+u>7kgT29)i0b!+8ERtBE`ztxC`H8?HIuZwX+t?E8S-0CB1 zwIr9k;E<-f9M&H(VXvZ~jI>DyiXW|w>;Ald2hhyrq(NydO)+SdmRH}zt{q*Ax3$v$~de{tOP zm}1sS)lfLgS}^E+P|A>9uK0HSOv55q2A*s3xEep)?o6%Y6YU1NQUg*W%r3i0U2n_( z8hY;6y^>vz{J<Q_QG%V-G;JWZP z1LL0^(B%>@@%~k5#7^3tu@C=VA4k0&l-GOHOa@LBnxXOFADu2-(Kw#5^4Iyt@S{jB zqHgP8s)3osGGuIIIt}t&Cx99s8A21?qhmj(GpZUdu~7C2-u%S`jMZQHi|OfFmIxgxy|B?6A zk_oBshJkK2M8Y*94F6#Cn<1~OkHlJm0YMvu2xA$8-zvaex>mrG&|i;q$*b74SKkF( z_5mX?54X-5p?=`erdD^NK8%_y4HWJQP&z;F?ySbwerPJ4qR$>CZ>2uD?C)|pZ@T6K zU~4`kOL({f>*N;u{6BIS7cTW8FEa%OFHAqQsxY>)V9Vw{ZjwL`NHsUBlLzS!VBbj< zRN2`0tm5jzN%(%iYPUn|6sbYnPFp4?@$nirDi!}23j$H9KDMTp-2e!U9Qj=`CMBEW zos+eXb4<|oCW96_^I&@lK<)Z{1?CfCr(Z;HwBh;TRsH(~EBc;x|9#dt{hfSB= zmeCz&Ip4$iElpFsKBQju=5R;8*Z3#i<0uQl{;>+SXV=U*_Q)n@0Yoy`dt5%?@V%!; zl~s4HmZ5RPrhOznY!b6>HTl$_+)S22@T1%ylU`If5OrHJbcdtti52Lgci!4|G3X%rAS<6T54*`{7Vb4)a>8 z$jv&OoM9X%=R~!}1f~2|F1&Nmml*eevFj-{3EQ`W?fR~hSBc6F0im4|`nt2Uqnp?L z%8!XDuftbI;Q|qI+Qz6Lgsq*$nq#RkMa_o0%CBS&Z~7jZ^|3zNp}6LsVuw+Y%cw1n z;^L11tCOLr6i~gnQw5)8OI@0vj>MaqdNJ9tzQb44OYV4tRxITPP_tUU3^KS4p3k-l zg57UVW4R2scRrT=xo33G%V?`yF?rSdACIM-hOCYRulgsz;&wh&k#?&^(+zl4@up}n zYe?Q(+xSmK8^36UHlnnzL0dm{2T)o)SMRA&+jUazbX$L`?cUv0-FdG)t#-(tJb~&- z*V}B9N~vh%ptR+HrE`XmNm_Qpr^h*f+1YZ-wS* zvwNPf3nv)1j2cgV9NCVobTc|tjxV_IR-QETfW&<8{yOOS} zxp@Pr!ArHg<$5-2GF^=6YBR>=e14dx40esZAsOJba0h%m^{Ro`D>{uI?GrJR2%c>yG$CytTxD2K=ol7y{*##?0C7~5S<%8#p27Ns0t@~X8_ zh8C$dh%gf)0wy*DGBgh-(JSCv(WZbO(#tR%GG*o#2% zKwb1{wbvwB2c1BGJ$0)JM70*CD#U&l0se+-xp*T5?48~%ed`!?IWsMO?RlH*g*E#t zA$YNiu;{BJEG^pGYV?W1WT(nJ!Q-cYvM8P229bw39M57w|`zk4)xgsek ze0ovrJJg#%m+tQFY-{49_l84flt#2wm7k{TR0Z6Z8r_35Zc{TtTX>DJVJX^;pOBt*UnV>uLN|LE~+{|EHb&pc`0#IekrMx*~8@t zU?KLuwl?#ukjqgCWxM5k3=R?O#ubTq&T7Oncw^)(xlK0U&OGafli26r8c;j=y|n^|NVA+ zm~8sqH}LnEON{41G;wWgRXVk`Tj|y|SHerJOUQ-L<9kCU3mYwO&KSH71fjjgIS}YH zqjaMvog=FF;8Eb{e}HXjI|R0_qqx;@eFiL=fWG5*+*u%**i4oz$$y`PLO|E@wCdG% zvhQ8Y)~g<&n;SBHV`~aVnO5aIyWSoujhD6{Li$G`IQDOhSeOke^b0*yH~B!p>py^h zp8af59E2sPNis`GxxX4wfo~DKe^wx>TTU}kH@{kli!5^MC7*y4jch;=bWJo)l|HVb zPPXq#!vhBmRIK8VM<^l~@PzGKyNM(m+L9{Kek~3A^_bQ=RbbMU`?!JcMqs2f{>MB5 zUS6?{u*E`u^?4^L%I+Ct@OoKTsR;kX`H}@Do7ap0Y*+76>riBsetPX8`1EBX6@e5z zi8k!W0liuP-3T15kB_W;R6UAR8P0(wd+PTBd)(2405%NKWCc`+%ma6pvs1_1d6_J>u86)RQmo z0p7jPZ|C01lFqpTwUPZpOZed;ygc4-(mT?<2q8XNTkj)9kydyPwyj0K@Ct|Q98(Jm zPqzXXXy8Zdl=|iV3w~mobT24C&HR3}sCK1=Mc8p?3CCpd+0v)&)3ZH{{g3?H7u{M9 zN5aEt>PCEL=fu-d(~}P4hxf#G9aOKN8V@)%ADvDeC8U8!cF4LDOU=V-;{@BcdbQ0f z()c|NOvOe8LceH$wG*xcc}a=~7BPVK*sE`N1q?~u7}!R#HT)kml^~KR*|e13uH?NL@wUx>H%M z>qq}KFyhtLzooq-W0U#y@Q}7}xywtuJb=uRd`;HKEyRs|PYa03x1-T3r&WWmhuX_@ z&#&#{!&A;F3Up<+u-qr>=k{|O$P``;xn+j+Otj85JO z(sHw6Ll}bh%^8wy3a0m7z8cQ!bSu_r#8?r+uDPahbP2~iIa-s1#aK49GKiT;gkP?X z{h@TSi-slV2@F2CWZKUSzbRglc}z;XXKu?;proy%tKc-*!oCf*p+&y#DGDaZWE86| z0+!AA$9wWBr}kx*a>+$nRU2^^nB7C_i-r!4us!GY+A11ZdM57bR}P0j`Ov`u<>18@ zkDPe{eyA)6sNmwYmjvC6kbW<7!lUKZbW4U1ze@bQ@QI(S74xWoe@Us+9e3-3x{Q?l zPiiCaq}TaBCJHGpe~jmwO1QQ>u3*_A&mFk^xit&)c|zZBVvak_C?8qdOqb``enD6K zM0A};VP<=((r_v?rd=4##%WAM`S5}U-ek&4WaX8ZmN&L52{LZZ{tOxXYMxSR`rf)1 znowK=KWc5?_?p|u(`?cz7nS#oV_f8yu2*~z)1g{~*}ML;-&azWn9`5Zn~_DbqoQJE za0||51|fdolgUE)p(hYf!j|Fj$6i(ye2_Kwi=01vCyEKhSMw9&E;8lxS=p>lcs^yj zPe4ayG&98e&x~Td=yc2dwCNCJub~F_5sW|@y^BRKbji=KgH!ge3!5SP1*`766r=#c zp~k%?|GmiL@n&FjTPU4JN&?V#RyoemU^R_-gjhnWnZ5Vb1*T=>$BpIM4UQ}RZkzh+ z&+~Yf8=m~BdoR-?V5WJQ8MS)rL)Lc0*MiHedX=mVWLn=JMhA!ds^guRjOFI#3^g_{9WvKP#10P00xIr)%Q@O8vViU>tjAvsSClay_LzfDSaQ*%Z*G>h!R%WWsI6`NAEPy zv=DCjxR`e&UbQixBP(fWw-1+wUlzjM>^@{2FvOG#xcB^ZUp6Dsoss1;*f``D|bFb zmYjc%`pF<)`i(Q!?!n9>N+U+j+PYn1Vj*J`QU;V^@NiHn1!p4%NJtUd1)wJ<+w=sf}k7@g0uOqZA3EaWCevx(Rijj-$>t5lE40kc#lRwV0_K>j)JuY{7+LPQ(!(E{{hrS(x;s2Pv1go z?6a$?2H0yWN9KgU58@CpHm+q>=hUWFe-Cl#2PCa;r$Oe?qWy25sxpA)>Hi6UKd95o zDSK|_<(cAl^C0N|0CT?E_5~KDAN12hZ+G>NwWN=fDX%@nyQpxglH&?wnrP1XWF%&3_pmq^qzeFQ)V2J?)Tw|rb!$r>B zLRw>%N@s1Zltki1V1RYzSqk*EE_dVN#O{^vVq*?kq&W!Vo zQ;u!ADm?(u`g&&@7eytSkRR0NAJX^B!+~S>vV%ZqsrW|dg z@veDYh>zLDiR|(6d;^t1eJ6}%@9zUkyg3zNbbK8EbNxYj2leTe^Mpo2w9dCE2{)lm7;;x+Yh|STvET-^kH8kOIY zdw)eoSR9lrdy;N9ax|UMV!?N)#a7EK#yNqQesM+}yv6qO8r6lLCVgAX!$s(sfSX(n zxeGOsy5k}h=v1ez>OJLmYb$t!3MsL#{S9MftIqjL+vE%fvGS4bSSwqp)N~sFxHo-FC}yRw3jI(GfL^q_E93+dp^_A_vd0FzpP~g+$ut-)BhS0Cy|`}p zX(LRq9`F8ra>>~bRs6?DKE71XzFC3nip{f-BSDZ-w`0;?`=)yO)!&r{B70D=vx_+@ zET2p+m_x78w{t|;kXOs<4E%fvJ6)TZ>XvCwjcUcK$*GZhb;LSC+|lcqR3AK1XiH^I z4Tu!$la`EbTKOR^5{|ogcgX*s?{egyd5oGWIRzkKp18xE_t}65r+!Dah_ITKeEQbi zTR8I9pF1B>Lny%g*D4j3**=!*CGyk>F#h&kL&>z?jyrVIUV@&+nYqECoUQb!xaY9KkP3ORG=+)iS`<_lgO$H2@7#&BBQ{Dahj*OLQtms7wo4 z2-xrBuRU~wa4?*q`1ak~Qw}Rxw+z8^ilX>xAr~*Z?x4PmM&--u*<}TdntSsrg6uQj zE0|fi5{nv=2r;Smn|t9eFpF=Trd7$0D2H@jb6q-QaGy`5n7EhFUzR zg%a6IbUXE}>`gUpY>kI?lRH?^gB4}(_xzG^cpaoNQ`)9jPBnm3yV-=vQ|uYN>intW ze!~n`6Ux~OKg()j4;K|K6LmlsYz(US5T#=@osE+sPyfb`qKeIt?tyzni6w6IBd~7A zOlCSm3s>@J>jG0b@SI8YOAUdo(!-i$!;017h;l~~096PqtR!X8 zv`QGlzm{u<)Upd?x@44I)AmF$aPcjJGPP67elYb1Dt35bliI;V;0WMRGWsBAHz zH%pm*(|(v;M~m!FsBqCVmn;=*f98ewDs_7Asfn!muNhSng*4r-tcbc&wDrhtC1*BRRveQK+_2mip$fvhH{<5kW)J z^%R@Ad~Q^ea_pL(`zPUWY^K7;gx$#^=gMNpz{$$1!0FVYE*#L>Y~#bdoT((Rc@K@L za22prbM|)g)7sS?X-1{N27R8J3@)D)ICR# zU`#vHANAU<>Rzy!H!{&o&Y%PqN2{UQ24>4(e6ZY8?+2_T$qH=X2Bb0Y4J_SoP;jNJLbZY6IWsHi>EWY{%Ps`Zm%V1GC8@o0r}sX-djaAzldiB9EKdpMj2`D)`jYEJOY6USXV*1*~bQRfREO>YJhnw?i zYQcmE7mWlfz7n=oDL*1f&TS#iY)(=3nyz1`RuTClJU4&!oLwPld?Vzc#%P7)`!oST%3PTw9t+#XavsgvB*_O0VO+aU5EE# zy`a#qvZyMtP?e@l<KJDWWk7`=QT17ajDz*G0;J zi_UodCOE8Vv${ zK53Mk85pPBYpy`Z=^*DBaCg)*;5-$#pl&Ovs~@@0e>B`B{2byl8Q5opVc-`fzi;v4 z5U&ymSnnX^|G7x*hLIim9*{Il&m4TGZycpFkrzJziM<_HnkRzOzDDWN3Giu8n< z#>U|il7#S>_s^7lNwPPtSnXA~w9=4E2G42iuG3JNR%J6;RzK2p4rMWm03kaabAa>x zoMkMhL&?N0p#qC~^6CPw=2RSxFEz8>mwLT$re$79f72wfCHxGxg@Rz{O)A`=nRnb# zZnQ7jm+k@BnqCx_bepGUf8$<-PKr{V*TWR#pmDTFwa^&6<8$jkoWQvBb-V$>BQr&{ z6);bi*}0g0Kev~|Xq!fEd;aCPPF?8^m(eHmJwFlD2vF4|0^I#GSuHNoLHuBEr+D@f zRh(HGRc>boYs%rDej?|(oU^7aHUGe}NIj)QPhTGyCpVv^J32}mIMDdbOJPEX8<+4y zIu4Cly(LWVW?5F@hOjRX$?j+{icQCskLXmuv%(FDORa4S5-Qz=D&qS&-j15NAIDQd z&rL_GM|FpFCkh4ts(b8dvqz$|(T&9PH}AQ452|%Mi}BCcSPsF6*I;zAfHU$GmlMNS zoa)H48DclJ#Ef3BR?>8`^Z1Hx5}G#M+H46SH7@Lx%qNY8sACHCnzvnk5^Ok4g1H25 z8$zb`N;)>Nc$z(*g1TW5=*`Bg8j7OY+fSA(LR@`1y+`r^1F%!*y zzZ~KzQWg=M2Mb=5yz?x4TcQwMV(;#ZTnyg63UFjg>?Rt4)xHqN!^?h$I{CqCg0m(M zQsEZzGYohOsiPx%R<6LEi85|n;{y)}^yln(yiCxwwjT7VS!7Ifwtb#W7XzW?Cihx{A}cx>g5XgEtH(*m z5y(-4Vyp_kYX5e#%i`dP$cH<{b|sQuzdzq~F|NgQY*m)2z2j^Ua=BTF?*UQJy(pyr z)r@@7hiR>d-4=Co2ir_8#%J+Ce^{EzKm>!dsME95e%cc*cfxYat{D6^uBW%^pN&F+ z!1ZRU+vTbaGil|foXEpq%bl+tVohy`gfvclp{!C}IerP*uRfKQr%i~HMUJh z{unLv-JbntWrpo-7ywfklh>WaKTR@GzZ*xQZgk-zNIkuLS>WQ`uTV(m#h#kSi{Fm^ zIf4p_y!oTU9W54_k`s!va=w*d*MSe;_b#6|)l#ga8O{kk5_ytKuQxmjm-i`VeDknZ zk$e32HMxdsP3{gfqee;T;VFJ6aZ}R8ix%C2K)AEc{LXTP55E@?_9ez;j@2zJDRQN( z#qjYD>)iei_h__*;4gu9xUTZ~dtZt7O*c2d^l)D1#ZR&vrKEr>FT9#_l#mU%`{rC2 z74Bj9HhU)4ar&WIEY_?n#yU$EOQ3ZXp`2apjQ}~$sKB0b?`96=`a?AQ)6`2F6b#bc zF;heud<>)MDNl<+p$` zmGQ`zrc4>Je^49niwA#RDF1}0vBgUsR4N%#8$Pf0f*8(Nz&WdA1hzao%$_^o8c}BY z##?9O6=|mmUPFv59JHtiHkHF$vy{t}xqpM+F=kZS?OLiIZ1s4jW1=Zf519i43T>)oE|E6E*3 zfKIXFxR*l?g<~t_*Ml$O2VHEb#<-%lF#N-VffWN`ske{;x^U_CLdQA{L-X+v+41ZF5fHcKwP!+yOkv!jmNu%va?6YPv_C0?k1zGKgnh2foJt}OS33*DP$D`X$5 z>~pT{yj)u8dv@~Li0hNzKx zcJ7w9yk+-6uByOhdpat$2~_0`NhOEm4B(8bjVLB*@pBCp)lQKD6br$`IWwi^goB}}D+o*(LPgm3imwrw5azHPHbdK2L^5jfw z&>yvd;aX7mh|$Q0ZVc)CbG7MbNo@I&7m$PAkE90q%e_SJ z$EZ!Sh%N}`#fGcRc>9tKp3pwdzFuAVqvQpw`JxTTJKqFAd;4?927i`2Qg>+{7jCaLm=A{OyLKcM0{ckS~ zs)eO=M_jUel$DfvSs|#9rOZ5~I=G9GTu%R6a?#u^xWV$f{pB85MfbMF5!qZj+bEfO zl@G{ek5Pnv@Rz{K+=V)Vz~~(jb_r1#_fA{u3#i~X1ngB_szgl4M^r((p_9GK9wgwQ zpV6%x`~e1s(B)dj!o(igvrn7&&lU6yBG5U-!-DfZC*-8)hj-TYFOY-J!qDP;3*qDt zxu1W%knr|eNB5P(wOjeF9{b$+6rziQa`~|UYer3*?;qA~`7qw6zEgej#sW1S>HWHU zmDw008tMs=B0p}ra5;H%7{+%M)6PhU7L)goJWRhnx=PfmJf#{7{ldqBVo?PB`PmH; zdG{4MXXDm~L>erhf*MoYRO$G1fS*60{N zz_m3d;UA+!945En78XakCS6h?vU20$4PQCkA zC$y_|=*iiCfLMPHl;e!|ov`nL`^!^v0Gpkz{fPCxop3;#g8uj`2g^dt?6Zr71kanB zq9v-W652+u8!u&p?_GeJCV+5k!<>en(_D)@OpFGB>DjX1{L>yP${gN!&eVxO7oc!>WTa$oJcCv82? zY|A8HG%NEW--SkDc_Pn*?p@+J?03g?Pb-Mu_Bje(e`>vR+_rhnxPs@|8Hz6aGP!W~ z7|Zi*OyM|615$@~^4kXg%~AeV_s{q~-3CIh`FCHEA9(OS5{A9hPyRz38*PbBB#`Cm z<6nN_PU-gdzgq`bvML^W-oE!oV0tpEz(L4d|=2q)hn2*x@Sr8_h zAf;`G9-r+3tk1O_N1O1cR+yeVIzPHue`<5C*CO0Xcf(igLkqYd`4vlGDPbXDc=XMQ zhj-o)mDx%%6hRChG0ZHTs8;j$9Dx0bn9pplgmkdpEpgnjnE`7|(#?-Je?B@~X_=xU z{jEcVydA~DvLh_fy6(khpCKCQT3Y-6|DEt~73&kJ{CSt{+rjJh>}IrvR8Kfc+}U2S zhc^{Q;3Z|ouH;s>8E)25}@b;_gznn803l&c!5-zFq=Magg>5jep!Fj?|uA;n>dSI2Lc7Q})jA zMYa*elU`l2{{ZgW|1zQYhTz`~WP^79k9B2P0;vj>l`22{hNE6OeKd}Lj$po{Z@W{f z!@V|mcdJ?Z?EQZLbK>Qd(0VOh5tT5RkiPi7~JtCTcBp4EZO?W_lJ)f$l{S9 z@#pJNBv)IT_Wz|I0AVBV5EBYEi?61FQ2xBt_#Olq3XIYDUEy;Wb7FGUF75yK|(sQoMNwb7L=6K&wPC7eH-6K^y)_d-H|wJpJ(ZvUmzh zydC%F3bc)+f4|*qkWAPGTL)OJlW4bV4E!TQ3RV#1+F;*t^SzUiKSgsagZ{xaZ4`q_Pl?@OZexL>fQuOG@Q=j+6G=OLI zm!<%)ST^l1yFSCIPBJB>#%c8uklsT^P&m3&g^-0S z^$3t6Qx_qRxEO~GP9`C**dwzI>gj43 zqqy=42U{gEmjcL*wD)P<=V<{z3}vd3Bw+o_g*KnnwTx;&cn!c?byUZ5&if;lc6?_) z^qgqA5&WsG)Tdt}ym|(tv^`Zvk?*##{R~%yd}ZVF82uR=wGBQuoU@{riQy+C_Jh#9 zy?jg%3vw%okL#eDf-24RjI@|uCRH{vk?&=Z)OX{R?sBlWKvZ_vg^9vqMg%qTFh_+n zjIoW#{Ers4nUy>5|6*gI*WrD)f_*ZX{}B`7Bp+>-H@5$}OdjDMbn_e8GG_WuB!kK}sqd8t-~m#x=cFWn0#oo!0k7FZcFr!hyojnn(kv&KNH zmo+faymk;JC;{O1>^gQZ5U-b;?CaqyD=BG2d)hboeiD%}5~|0oZ+Tl$ z)WU?@ft_8Mp7b4u)GL6p(m;dnF9CS2{{`1KD9GQlVY^R^5_?t_^nSQdut>}fW5&bn z!W!i1s=NorAO(O2M1#zaj8j-fM@#qyADcU*j7mgj3xnD>zosDOI}kK+5_ z1nUAp^KLkC`e6wR7XXzV;?}pS9H=*If;a+5_rxe9>YI1iKoDjY79epyVGa^PG$fuH zY4k+62?1HJ%PcSOV5ce5h#we$ie7CFyf44m1qjLszNgUzAp~67$DAI*j^KO+{g42) z!8aqkYY?eK6o8^Pg;>E*0VerUt@bbyq>-w?JHFaQ0%o#-Qd7HmHXaa@^gM`EF(fE?ySaQJ z0*Oja;yDo%5f&TLGjP5K&FYV}u)zsW1DJO}siIeh2tKS!R3X(^hjM{Q1*&I33yKMVS!CP$Eeh|Po zy?9+1kpf-Srcswu)-GW!rE1REIt6YK+{oY$JuEGMTydXG&W#&P+YZ(CeT(*Zic;Rg zO%>*;%!a^yFNYD?vCK5qI^jmEn5tsOi_yoVcGK|BO1i$mwyju{#WSdFMpCgT%32}8 zE}4|vB?$#8Xq$oo3KqGJWx*XT_O*;>>!_{tg_gkSl9=k{+o;kTc+4b~Uny;aY`H+! z@q~5HM!ty{=8dL% zOhq1ExkZ*;PP}B9Qx3Sd5|vGxPm4YEQX zO5bg!z_CFbd6{qCel5$yuvXm)V0#cxWuf3OB-mU`V z#^&kmx14{oeZF8UD}{05FeMVNAlj!U-IZn57*eKOL3w$QqhzEDfyywvXZsddm7S2` z)ZyG+J5a`QWv8B`PfjH?*=4w!%y~Hi=pkViSK$Qft*x^5!O=fxTW;F^#IZIhrqQS5 zXw=Cmd{r*w)zI^Ze5zm|TeOu0Tnml%;TvxcQmBbl5M#X&w#~MUuvhl0gdE0l*q%~G znKLg)#%;+Zwk79?DPhEvww%ei&y`6g$=pO>7L`%++SnUP03nx-j+D-4E zJLA>C9U3vNAL-?bHnld~huoD;QEbbpxu9RnSYZO~+fLJJYHsz422+|q-G9ZKs?C$%Q-02{EO1F4To5L3TejGs9H#|1YdQGe9PHi>|tV> zHqF%KGO~oo}IcLCJJ7k=eGdcttERw2ins)52?Hlbcg=W{ppo6V8v5 zrP7C`x`a&i00ib8hXONZ;dse<0`w=wJs&oWT*Ua{ns9Z>f04)u8J@g?rG+?8WLrd} zdSb&3bZzMYA=4qvu}?|il(RWH7@F$l4w7A3Sh`!@7u6v=eCwFgbW2Ji340jECh6CU zHbK*O65;$$T5@}4tkgV#aw=i4B%4wYL&;K77D`T}5^f5(+Aa1|(x+;b-h=yG#?$z| zVrLZ5s*;lQ`iiC43SqUafS?i^%5D~|;O~sb8Ggs*dup8^Hp7T<5@aRt_9Lge@*MMT z^^eQW=a*AXDZ5+?HsV#T-ILA8 zN@9#RF2t&2Dx{^i5Xn7Kf~{=S{k$vQorn;vce#bT|#eFTF#i(kOy`9cinyOAV@1pz&r zrAb%uBj}+w(4jzcvc1vA71KWns%MCa4guziZq(b~1FTTqlYZ~j6;e8}ax9+kN3s=X zI5q@#o1bKGHZJ>+6g#i_pyeDh0mzGcVMUW`0)LCIs6@)88{}9Vi)8&UC|21vvXm|P zUl@fXi{;Fl_rkae)0XQ-x6Fjw*$j<25pD_izzdk2ECBpcn_JZmvty|#A8zPnSdcgI zwZtNZMPAuQ03ZX_SY^*~-eC>YtwImXeURx3AA(Py!8w#X%)0T`AP^}dP&MuY-w@ec zQlrR`?}!SnZc}^w-ne3{+kjC$@lX_mgQ^pl_Y3_niYZNoQGQu|Fw0V#vVgtF1vWfQ zxELxqje$-1T%T+}5tJvD_!IGidnBC4cRkP&97gr{fe9lJO*1=jIBy zLub~);Bz*H1o)m?y|AHVBFh=|JUB%m6r;|=iMSC0hVV^?+ng~V4$FT!cl{8#i-9E~ z!1#+mqc)%cBi3O`fKfTod+T)wmp8Uk=)REp<>f`R*YMN+W6 zEq?ud(Mv8;c%RMqKnw<-gcZi)f2Q#YE;K3}Z-0y_DqiF++wYK(^hDJ;%(`L zO2W4ln|?A#`d|X4^Anp(cYDErP=?Kt08#GvLy?${**wLdm1N^{%!r%8NZ)nR2OE^c zY+XvsTd+Nxw%uXB(|D*B6l@#-_?VegPn@DR>wk1mC9`h=`>qA_;RG@QGUYZN5fl^^ zp-=V2qU(e?*owdL@7uoDvp;YxM}kUaF)myRlFgRNEf@pa@2s0Z0)|U6l)@C+7D+6F&fx^L!#8 zD30B)!qwF>ulXyk@#l4XV5JS+0L0lG1`CN~p0@6|}3b$~)Pz1GNO^&_Rf`pV>z=Ani0&b;w=HO~A z{{Xfs<{59C4;y=;kW~xo)r~hu9S!^p zB9qz*wu5l6_g)<*HNtFt9|$^y9Y6z~m-R#_sR;ZlB=3RMAOw-FmKQM;;R?Nihvxht zn{+Kbl-}FUPyzKtAT$~a+l`K&L=3??1f54OaE5S@3W@+8hyej&`GxPw{>Xp>F;TvV z^xha|79d~K6HsnK0Pi0N3RYzKsJC|r6mo6|DL3K9DTO2w2v?y8-3;24pllK>Vkvnv z%b1jTOAk@I|E09LuQ>eL%WFy&qnT;q;%o)Uyi})g4Es=ZStEoSTv--UhVgCQ zsKRMGYr!>)5lzKw#F7-s9P*aaQx#X!DfiT&`ulNnVx1SZ1YKeYYN#kd<<6 zVUP-zge0ijhM;qVG!IX!2SD0MHsNdk0J9RwPh=z>S`Tz%3~f6KrbdM2Lb*?)%+{sa znUa#IPPWVM2NDWGP*e(zw$l2=DLty;S^c3^uuBz21|z0Qu{kj)w}4SYy?V)(B0v*bDn00oGg;c=mn~I9#QcUwET&l$74qquY1ls%~ z(3HfKY5F27aaL(LtmL;!J=m@IH zvtOuF8>+QW^0r-4nqBM?q$q`|$x^#F8AbO-w6aN`B`60}q<>TsRV>^^Q{-O3{yqLQt!-BD$-SkS#+@TvJav3w&Hi8 zMHjM##lhAfJzF3W1%ZeF0OzqDsPR{gu=8oVmHKmN^52s)E@=RHU-&)m{4eBr-O)y; zk8srzUTOM{Bc#*iWu`ol=VoVHZ7n^N9<60W1g^v!r&|zV0Qd5wD%-Tw?z9rhPU|bU z>*|blue5wChgz0$tBPpU)~1^eOPR^$S`Q$Q0+3Xpm=Zv^<|EIfZEp_MCov?v#M@M~ zQ0l0pJpDoD*=g6-(@vxzMC)+!KpV;72w=<<)`cV`DenRm4WMh4BwKxidANfb;rt|& zuD4#L(NLt7g;XaSU=)G@J+%!1Qbqg6IHyd;_J<4aiJ8etgDy11 zh0b*)WG2H?a~>Wi+s*{SSV4?SH;JjUG--+UDb3DFPB!yudDl|d8IruVNmgYW_EMD- zx)8}GaHJt7;>Uo5uuuZP9d0fo%lopRs$OmHmua0`pH^mE@}yaS;0kX!&DqQplAGG$ zLfhh#`1cG-R$HSziRlbg*1o9}_orG+!qz}gNI_O&Y(cOah&*B>%6nZ}NbJ}Hq%dhg zNw*E=+Q*6ab%u^27=2idlk)HxzDx4Pyr*^V)n?7RUD54;7iEom!4LtmlfVx9d?GI~ zC$@X-2E{_-Gogen;~A3;9o0YO$^l8;Vbgb`-WRHt4&f$oZ9_(B40edk+~ z^F>7zEkI>bO}Ts^1g-NLr70wv0(}u+ zjl5u#Y@S1D6$+y1I7)ehKHSXXBr7VfloTW=<~H0eV^H^y*eXaQ*&vQtK!cSDAdmr! zFJ(Jf!+T`F(%8EUzWdZEhhAxyrdjHWi*6~k8xe2{l5Klwz(y&x?v;2CVwKryEp}?7 zH&%93&n`}rAi1^6%7Q_C+@r9IgQ?{WE@A}QO}+sKg`g0P2m^kRrt!Z^J)K~TGllEF zD$Lgz#O)X95|l|r%}q`=04h>i0^lb0R%;M+wZXP^vkj-=?XTeJEK`MQB7ToFRFt?| zDOy&OWg%%gr9g`iVAD!qNtN|UP|)8^*Z9EdiZ>x3ZrlWGeX{h2!Mg~TrkqbPIOOd~ zYebzonJB55nT(?9DQ!Fe-c6&)mFaP^$M#Il(UpmtmBS9qDoi@_4t2s|AeAy&12%gk zn_G6fwSuOmrUavH^(no8LiOG)3{nDyR3xW~NwFU^V%s>{br)+G0+Ea;Pq>;bNeXgZ zb8Uu}QkAI&;FE1qeG#s9r_(!T+aSfWSaP{JQJAPnHrurYQzRUjW#4xvdPq@?NyAnFW9OG;Ri z+qk*719gs?#7kp<8HTrwPl|d~?Ars0g;#4eN^H9`4@w!gaNS7DDb}1VxDfDQwy>3? zi={+qz8h!VDz;^{JV7l*!#Ij&r%;(%nrwWHI?H*3OLr=rag?DXp{EE6P`*=Z#nV>! z5{<4JHn=ywqT@(CQ=HfQlkR{rxuQr=Pc0&KearPmNo-hPpUM&(c>6DIU{{U7R*?|NkpHI3f zaL94o*1T}w^5Jlc|$J7p_VXj0BWVPj~a zg7zDGb-Dzc*R86iv%PNAZ54F5!EG14lLV7#WtaeDKm76J|BGncuJij!}QhC+7C@K zl3Z$S=fa<|O}ennh15w<-ZQ*cvfNvYacPna=jDH?lW1mXE;9cB zR^eDAzSt^gEhHrNjf8ZvlbG2+0677qM5#H6O@ZC5kBnVxno-Uj7&bj#!8o>dxml%F zDGB)oQj8j_&QsklEv2nQwuvT^klJr#t;5zF#1H@xZ9TBeM(z>XyG+p7@~WmdX1ygQ zU1cJvB+{hZEfoSnLd!0ImF4Yu)&}v@Ln#D-bKGI`t0nRa4j*9+Ze&5sKeYZN#MAE8 z<}i9F(lsn=Osp#p%)KnNOG``3mfU&Jg(;$?CvN-Zq(9@{*JQcx$K812V7O%SeuLqeCh3b-$kW-f}+$t6uR}$>fw5_Pk zJx;^tsmb8V^OBc-8>KQePoe7^<;=-oorNKU1dlQ?m+FWC?LD+CKGm$qr1cEER!cbr|X? z&4@`ZmQ#kRbq$_ROs-wY>6|ziLgsp=y0jrd#@39XI$bFQ*lQawB|~}>e)W7I5VZ{p zU=hgQ=@BZeu#!0wYTXs_Rw>$^D|VY@VM(cBiRtPyC_6fn56a;xwKjEv>u$3s?9}USqE!HpvJ%N! zGo)B$HX`CJS=e4V!#i!C#!{4a>$px&5w`S>7hBCGN@Y?~^6IEGwKxY_*H>hr!VQwL zHBcw53XkGz=zy0(3A#=E1U0dx8iQ(^Fr3F5PoUJ7MVG14Wbpl3QA?R9Qd^jRsY^g5 zX7^G40QOmt+$qX<(d)XG%09GQ1z4q>_3mY-!QO;t|IFRODRiCH;cyMQS= zt6fF=45*Q&L4J1jLnUfJ-k-Ok3buqv#K)snHm+c-chu7>6p6}&l_pi03bjg^*3Nk& z>UGA@C0Pt18BRnkz@n@6(h@cFAJ_&h{jYI6<5+U1J5rs+v|8(QO2qv+Q;#z!;~jB5 zKyFpFsST(Eg&Twn#^%x4Dp}LClWt?-2$h?Zl_VYi0Bs`ljA=(H?KfxpL0taT8KB^2 zYO+|znS&I$sr*Ak zd02_bnRE(QQzi!W5d5b+lB!0R%koc25T!v_ufHdl}T0J|A(LQn)CsN9tf?tZ8tB|2SSH~!dbl6A}AFYbg= za+9KbH9pA6q7YJV+9uYu_xdddQUJ7; z$c_?{1+Do(KKKBOn;--HTf|r+OsPmbfPf$eaVFgCk?eqwkWQz(Sa12EKy4%^h}VG9 zDgu=qKqtFM0tAA+$HVL*055O}9pith3KXCS2>^HTh0aQk-p7djQAiW2wMg&o^+JZg z1cPqzZ*(qa4X~+CWz15mTKTlT z^Bv?=q^#YvfOw@>`b06-#H4yai>~d#G}!sAv)mnsx;a()JL8;ZLaetzrqC)9H3Z1X zu4USL&pi9B2OB^tNm5=%4e29zji=F@0d293k~=?yDs;RNFI&VFI>D#nic;Q~>Rwtp zk`k4tCWu)hyhm!NSx0&B++wbE5ps+C(Ox9*8erk>kegcCF2dCyVxXh&1h>;5F+OSY+4%#Lj96bLacQetZZ&0e-)5>MHVK*?Pw&DYzj|!jMZGIDyA91 z`)|S1b$YfIn0kJwT*N0Lqa%~w`N4cCraZVp= z6i#9%Cw}RYWaY5~a~-KMMyLc$A#Q*!^7E-pgLGv|Nq|#NCh{^YwtOJ5T@3!B=_3>$fD$gyVg^vL#hJ6xPWclx&2gl zi*(Z^00hc0{{WUDRZf)`w3`?I0J9LVE(&*ovC73jLs>p(P*sMpW@IGNo0(RB^1=Ed zCYvgCGP2gU2F2lET&XSSyn~kTU??F3jQ~6>BHeW9Pz|M-Qi#xXX%Rk0ltMrf%nNW* zN3IqH$`A;!zWpvC)GkLJ^JunBHdKoVDPnhMg!|!4gsK4j=*KM@1jVo}^cN(7;zTvu zwxuNah_e*gLVvMk@5>@!c?_Wb<(9thF)**MI`CD8(qT=qfEJEg5pSj~#X40x zhxgK35`5@xVvwfF1EjRK@)Ha4e4_VC%Z)Yr z*nta$1dO&8@5&&C$^jsreVcpY+*9QN7n7I%LShQ*du?K4WVFMq^Ky5M&qZd3Ug<;&2l%J+vtl#$VsT!Nz4BLAV4w_mMZc_6K)+? zg@JaZX52vUvG+s*%DG6(%#D7Cw)r|t+xMimKQTV|2Aw7~@@5I-8y5Nx(+dLV49Yh} z$lOAH5Q<38=G&RK!Yz|ZlfBCgcy&YF4vJi*kMCJ?-_@oiid>`>jn~xMNChW(P)+sK zLMWPapxq|N{#c4)pD1_AGCUBNSQm-Pl=LKUG%Hr{R`%`y_JAck~ecl}#lP3O4FMrGs-U{U@(2|fy-Ek8tLJjP$WhoJEWF@WQ{@i6M=S^CC*KfLWYRyeWpBu(KKNJ_$<&Ur#CQB+ zpKM%`R5=gV3-WZI_#~%yWj^?crpb_hd9V+11S|^aDmE5BIE3>}ib=WUc%|}WpttWv z0Pjj-Dw`&SGK&sYKIpbxE>hPLj2nJRVFZ+s{^OV5 zZCenqFBO=OY;Fzozq$(7eGdNde`H!3bfGp9a^UkQ5X{O;G@!QS*h15wSV#nVZwmsp zQfxpG;PvZLbT~F<(f$FDpZSiqz^brA1)Z>85#we)*RG z1a*nZZbxffFQJW6r+FQYhnJjYdRe)NXVWn*>O$LfvXv!iBH)4vxbKUEuET)zZjYaI z+-q5*?0;kwT19B#EH+uJGgz6MuDwb^DvZo578NwpE-A5`ytdiOkfel-a)3tDcE66A zz<6~NIHIX9i{-F4%Kd1pJxFS5XEO3U)Vd|hvyTvjl``N%X&b=INa@kDI*$6O)n#bX zGgGs(4a!K$vZvpgc|k3<+CeH(iQE7Llfo)XO}6?Qb&{8*+(23#LV-yKaT@a0ID>Bc zNOK!daevEr)}ctI&Ftx!%sC}Xm@UgzryptYG?I`AeB3sIjdCS zXEf@qRaE?DnpJXEpqEv8Oq9Dr9hv0; zX$MVp0Z9P-#KR>?Hz7ev=cm3n(wS4lcvGU7+I;pt#xv7(N;@sh%lTql>fUl~2usZ^ z%*mEYP)b&?lVp;+6(nC6liMC3mDzUHq#VYxQf8A~!|RZ!NYYGVX3jOkKR zn4inm`@T-<5N6v<$t0}_QBcfD%W^I<#f^U-Vs@|ymZ0Ld=CD8A!<5ExEk?BLs8ujY zg@CGp5aWqQl;&(a0VgOZIH!(I*G}CXaD=^8`sG!^+s@AczQpJX&NvcobIhxHzw@;#NLkbxes2V{@9_{{XH5Py?`_IqMwLvb;x&>icSUXSG@S zsAB@oPfyLyDdpO$D=-14CB^<2N?vpn{xq_0cu;tpQqpNT5lT==8MWtl zWacTkQNI2Ay>N4)U`aRU z@qna)G+DSjZhf!->k_MGQcrehVzF!76Q=XKSX=5YvwLo~?_59u7wZ-Lqpz+2YlUvg zd{iMWZ>iUPl63Y%Cf2beTXp{cTpYOwC3gA!@c^aOgP}ifOcWInbt~t$+t&n;T-1|& z27})aC-)L<*L z2cK^OBAQdKp}TX?dm^KGZDK4>;@jZ@kQAh7Y_9Y1k3BeooMmQag-%gYvdb;L@O>o> zEN@DcdnAjE4>Q)Vz+c}V8gX7J#(O!T?dGD=9G}1#zZBLm+|y}r{_~z`#JtnR zCqbDm<+$DwtL{zu(MG-|YH)p!m3=c!CDz?btt?$DLh~g+>Ifj~6#)TOD(!s{!qQu3 z$Fs9&!I*0kOW>M*5!uw9AnV_fZeevNO9@r3;j&r)yvTNs9BG2fuCv(vZ$1 zG<8ggM-odx;Nfen%X{P`b%0;ZA|u0SDw8@?uPD9r?<3g&x;GUiKgNy`JtcOTf+}+~ zijFFh#s;sm8N6pJKQAELUnb3>Ro76E5Nx*Yfo%GaL|^C9zTm2pvQo9I>aE{yW*+C7esS-GQi3dV5t#2Et}1^R{k<{B(McfNF7Qt4 z{9>ifYuw+)6@ig@Ipq0*HGMT@Pap6QO`|%VkNiS zs?Y-UdL#>JxC6V@81$Y1rAlK-+*SMO>eSS~lJ&C_D{%}n*(J7+bZjW0DppmiTA`3ZGKii2n7}z+!6Ud2t`<``H8m+4|D)mV4l%X z1Zp$y5#nOZ9ZJVkUy~}WDd|5bmzv0z3J!K2L(Q9mxGl7scSp2?F(wnH;@No?YD}rdXfZ zdjoH5OvK*mH|9zA!U1AM#m1xqxIxNIwMjg|_`rregf@Lf!Bf?#=>ah9MzHvpo}HYS zTkkwloTyG^5<(C(N=Aa_!&u1_Y&_#`clbmC*SPz9@TFiYLXbPx4do(2$RsS=@>P3% z5WwX&D(}?%VOCR^5QN!V$WZseNGkjwp5R8lxB+wAXy%81+VDlfdnBvVcw`%=v#)+{ zj48UZ+;QWtwg8%)>d@#SEh_{Y+8{{^zG6q>{-F_8Dg=ZLH)b#bC14#+yt$aD5*)R_ zS8=h3Zk}Jth)RGZAZfs;>ktH@!1l7Jca0$uNLBNC{xHf=2^LS%eXvq&GXQLR_r(DK z4Fn&`j1Dx0AhHB z6X}h3?!d4F&K1NsVR&Lm+7*7FtZjf)S)o2S? zEtLeNYDl=Ufr~8&HKsG@(X$<)OVL@xm^z(SO&x?v$d|#)%PI3)3JL_Iekr)$&NGK_ ztJ0Jl7fh!!U6gi4qtvBEPs_LpR@P#oQiTJkNdtEw8GR#XxO# z9cwNj%k_y+SvLx~xHlTdiL;K4TQk`mb?VL&!V(lpo6VMt+c}irK{qK$Q8_^)P%RrE zU0bXV=Mw}gLzz9R^S`zlpD_X(f(CorcE1q~b$&Sc&%Po~Z9v`Vv_DvXDj`Z`Sy#Wu zLkROKd0>f`SQfRAl-T#`lNB?gb<#z?+Cj<=;4XM&;Q(8iH$b?be*3p0>Ok^Wf=}=F zhw)qbv38(P1&Hvmge6*8Aa@Vd2?esH-A(@hst=D8qe1+LDUewig!A34NeM>1`XVk? zf>Jc?aWD#00MR$^zq%3%0#Rn;%O1DpH}xSzi-CGhOa$|@e^M?wwTq0Y0P#t;vKc8k zLP~dVCy&h*L26`NY~RaX7vYt^sSITvO}~D=JMy>nBIRkg1hk#k)DLtnWo0KI(|x~G zB!#-AA5qeFW9Ddo>4h?HsMt@xrtxO}tX&|fHYrZNm<3J~Y@m(y%ze<1TA3&F04Jt3 z{FeT#Ln87&yJkHpXnP{)sb_j_Ip#3Uk`3%`e=B@h1*eg`E_}LUF*@kq)qo{m&7}Ot z%-_|E<8!GB7UWKm303zj_X7z9lBFFY-d_Hk!+%yMk-Sr3J2P(J-_?tv@%$iCe10%N zxdz7k!T7|H1*eeAe}+ulZqdK13M8gcua``YdN=iA^r>5bSRb5y@eS-e;CbBM5>nJj zJg@HAj{d`cRsfTKHN3uK!z+6K0J9fq7QNG(yzlkI16zdHj^SuYAhhxq_nG;hLJ{>~ z85f56>7SXsKiP}2;`Aog8_mopSyF&i?msFLAfTxUg&wxK6zpDVsypW&Y&*}LH`muIRh4QGL7Pr13 zQc^8&4fiWU2?em0bc^|H$E67RklsY*zrWw-xgSz4J0`}%&>?~dNjCuZB*IEs2}iC^ zm%KlU-_(d@of`Rj`E#mJ()nA{yUd63 zHxjSx*U9ffJ*bMI3P?8t)B2)ha9KeJC%b>q2?e_3T(~Kme&>CIe^LpMa@oAO>kcI? z{Ybb%N^=4?o_`2ni=d9FHXQ!|R9PWvB_6f>wd3e->O?Y+DK_%ygZx(Q{{YJu0{5_O zAaJ+pfSZzg8u#833u7kzvWfS?j_n)zund#ne`icz!N02)YjMl&8jdPH=$CK{Wz&#Z z_d-Ew<4K=C@o1%Z`**Yf#; z=x^%7c_Z9s-?`p0wmaJurL&dj9~k5JK0W7eeG} z6mP_n?|=cgI;%~}H-wb6RGZ`bx?p$YYwE#Ni{$?RXUyrz4gFZUuqw7&cmWWt%Mbv) zv;@LQ1*ed{NA`Trq#$4Ym?@Hcq*``h{{R)gs}Jqt7PuU^6A1;Gl9_D( z0B62<`K^6esMMp#SW%jF)cz}pMUTvoeQ|I?O~z8I>1z#raW&TIQSQ^<2?E%Q-$D7X cxs~|C`6e6?ELC*!&HCYb&&o&gjAW<(*;zj9fdBvi From 886cd669ef3f54c951d5d6c10a61edca1af665c9 Mon Sep 17 00:00:00 2001 From: Abdul Wahab <32850166+abdulwahabone@users.noreply.github.com> Date: Sat, 15 Aug 2026 04:15:01 +0500 Subject: [PATCH 05/61] Fix: compile closest() selectors once per document in the static scanner (#575) (#595) StaticElement.closest() handed the raw selector string to css-select's is() on every ancestor step, recompiling the same selector N times for an element N levels deep. StaticDocument now caches one compiled matcher per selector (failed compiles cached as rethrowers so bad selectors still return null). Findings are byte-identical across the fixture corpus; scan time drops to ~62% on the fixtures and ~7x faster on deep-DOM pages. Prepared with AI assistance (Cursor agent), directed by @abdulwahabone. Co-authored-by: Cursor --- .../engines/static-html/css-cascade.mjs | 20 ++++++++- .../engines/static-html/detect-html.mjs | 2 +- tests/detect-antipatterns.test.js | 44 +++++++++++++++++++ 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/cli/engine/engines/static-html/css-cascade.mjs b/cli/engine/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/cli/engine/engines/static-html/css-cascade.mjs +++ b/cli/engine/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/cli/engine/engines/static-html/detect-html.mjs b/cli/engine/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/cli/engine/engines/static-html/detect-html.mjs +++ b/cli/engine/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/tests/detect-antipatterns.test.js b/tests/detect-antipatterns.test.js index a61fa6e6d..2c7141365 100644 --- a/tests/detect-antipatterns.test.js +++ b/tests/detect-antipatterns.test.js @@ -10,6 +10,10 @@ import { buildImportGraph, resolveImport, detectFrameworkConfig, isPortListening, FRAMEWORK_CONFIGS, } from '../cli/engine/detect-antipatterns.mjs'; +import * as htmlparser2 from 'htmlparser2'; +import * as cssSelect from 'css-select'; +import * as domutils from 'domutils'; +import { StaticDocument } from '../cli/engine/engines/static-html/css-cascade.mjs'; import { filterByScopes } from '../cli/engine/registry/antipatterns.mjs'; import { checkColors, @@ -1236,6 +1240,46 @@ describe('detectHtml — static HTML/CSS engine', () => { }); }); +describe('StaticDocument.closest — compiled selector cache', () => { + test('compiles each selector once per document', () => { + let compileCount = 0; + const compile = (sel) => { + compileCount++; + return cssSelect.compile(sel); + }; + const root = htmlparser2.parseDocument( + '

', + ); + const doc = new StaticDocument(root, { + selectAll: cssSelect.selectAll, + selectOne: cssSelect.selectOne, + compile, + domutils, + }); + const deep = doc.querySelectorAll('span')[0]; + const deep2 = doc.querySelectorAll('span')[1]; + expect(deep.closest('.target-ancestor').node.attribs.class).toBe('target-ancestor'); + deep.closest('.target-ancestor'); + deep2.closest('.target-ancestor'); + expect(compileCount).toBe(1); + }); + + test('invalid selector returns null on repeat calls', () => { + const root = htmlparser2.parseDocument('

x

'); + const doc = new StaticDocument(root, { + selectAll: cssSelect.selectAll, + selectOne: cssSelect.selectOne, + compile: cssSelect.compile, + domutils, + }); + const p = doc.querySelector('p'); + expect(p.closest('p:has-invalid(')).toBeNull(); + expect(p.closest('p:has-invalid(')).toBeNull(); + }); +}); + // --------------------------------------------------------------------------- // Side-tab as absolutely-positioned pseudo-element stripe // --------------------------------------------------------------------------- From 7b646bafd60b9dd9828ce5c4c1a25691702c9e92 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 14 Aug 2026 23:15:40 +0000 Subject: [PATCH 06/61] Sync generated provider output --- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- .../engines/static-html/css-cascade.mjs | 20 +++++++++++++++++-- .../engines/static-html/detect-html.mjs | 2 +- 32 files changed, 304 insertions(+), 48 deletions(-) diff --git a/.agents/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.agents/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.agents/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.agents/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.agents/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.agents/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.agents/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.agents/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.claude/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.claude/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.claude/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.claude/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.claude/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.claude/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.claude/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.claude/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.cursor/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.cursor/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.cursor/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.cursor/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.cursor/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.cursor/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.cursor/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.cursor/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.gemini/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.gemini/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.gemini/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.gemini/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.gemini/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.gemini/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.gemini/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.gemini/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.github/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.github/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.github/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.github/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.github/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.github/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.github/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.github/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.grok/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.grok/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.grok/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.grok/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.grok/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.grok/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.grok/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.grok/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.hermes/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.hermes/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.hermes/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.hermes/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.hermes/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.hermes/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.hermes/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.hermes/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.kiro/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.kiro/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.kiro/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.kiro/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.kiro/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.kiro/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.kiro/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.kiro/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.opencode/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.opencode/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.opencode/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.opencode/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.opencode/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.opencode/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.opencode/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.opencode/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.pi/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.pi/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.pi/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.pi/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.pi/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.pi/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.pi/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.pi/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.qoder/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.qoder/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.qoder/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.qoder/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.qoder/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.qoder/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.qoder/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.qoder/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.rovodev/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.rovodev/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.rovodev/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.rovodev/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.rovodev/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.rovodev/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.rovodev/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.rovodev/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.trae-cn/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.trae-cn/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.trae-cn/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.trae-cn/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.trae-cn/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.trae-cn/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.trae-cn/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.trae-cn/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.trae/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.trae/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.trae/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.trae/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.trae/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.trae/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.trae/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.trae/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/.vibe/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/.vibe/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/.vibe/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/.vibe/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/.vibe/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/.vibe/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/.vibe/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/.vibe/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; diff --git a/plugin/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs b/plugin/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs index caf4aff44..e5f53b69a 100644 --- a/plugin/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +++ b/plugin/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs @@ -835,10 +835,11 @@ class StaticElement { } } closest(selector) { + const matcher = this._doc.matcherFor(selector); let cur = this.node; while (cur && cur.type === 'tag') { try { - if (this._doc.is(cur, selector)) return this._doc.wrap(cur); + if (matcher(cur)) return this._doc.wrap(cur); } catch { return null; } @@ -862,9 +863,10 @@ class StaticDocument { this.root = root; this.selectAll = modules.selectAll; this.selectOne = modules.selectOne; - this.is = modules.is; + this.compile = modules.compile; this.domutils = modules.domutils; this._wrappers = new WeakMap(); + this._compiledSelectors = new Map(); this._styleMap = new WeakMap(); this._hoverStyleMap = new WeakMap(); this._accentDashPseudo = new WeakSet(); @@ -882,6 +884,20 @@ class StaticDocument { } return wrapped; } + matcherFor(selector) { + let matcher = this._compiledSelectors.get(selector); + if (!matcher) { + try { + matcher = this.compile(selector); + } catch (err) { + // Cache the failure as a rethrower so a bad selector still reaches + // closest()'s catch on every call, first and repeat alike. + matcher = () => { throw err; }; + } + this._compiledSelectors.set(selector, matcher); + } + return matcher; + } querySelectorAll(selector) { try { return this.selectAll(selector, this.root.children || []).map(node => this.wrap(node)); diff --git a/plugin/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs b/plugin/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs index 9e7a429a2..b4efa84ac 100644 --- a/plugin/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +++ b/plugin/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs @@ -134,7 +134,7 @@ async function detectHtml(filePath, options = {}) { parseDocument: htmlparser2.parseDocument, selectAll: cssSelect.selectAll, selectOne: cssSelect.selectOne, - is: cssSelect.is, + compile: cssSelect.compile, csstree, domutils, }; From 36457e191ffbfaefd8f31c70318d048e3881cd6b Mon Sep 17 00:00:00 2001 From: Paul Bakaus Date: Sat, 15 Aug 2026 22:03:18 -0400 Subject: [PATCH 07/61] Bump skill-behavior test lineup: gemini-3.7-flash (#598) * Bump skill-behavior google lineup to gemini-3.7-flash gemini-3.7-flash replaces gemini-3.6-flash in DEFAULT_MODELS. The README notes that the recorded gemini baseline cells were measured on 3.6-flash (or 3.5-flash where marked) and count as unmeasured on 3.7 per the suite's own cross-version rule, to be re-run on the next Setup or routing change. AI-assisted change. Co-Authored-By: Claude Fable 5 * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Claude Fable 5 Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- tests/skill-behavior/README.md | 6 ++++++ tests/skill-behavior/providers.mjs | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/skill-behavior/README.md b/tests/skill-behavior/README.md index 01054e417..c9bb5038a 100644 --- a/tests/skill-behavior/README.md +++ b/tests/skill-behavior/README.md @@ -90,6 +90,12 @@ Against the current default lineup, two cells are the known floor: `redesign replaces DESIGN` is flaky on every model, and `critique closes` is flaky on gemini-3.6-flash. A regression is a failure beyond those two. +The Google slot in `DEFAULT_MODELS` moved to `gemini-3.7-flash` on 2026-08-15. +Every Gemini cell in the tables below was measured on 3.6-flash (or 3.5-flash +where marked), and per the cross-version rule further down, those results are +unmeasured on 3.7, not inherited. Re-run the sweep on the next Setup or routing +change and update the tables to the new column. + **Read any failure against the clock before calling it behavior.** The suite ran at a 300s per-test timeout until 2026-08-13, and for the workflow-contract scenarios that cap was below the runtime of a correct run. `initialized natural diff --git a/tests/skill-behavior/providers.mjs b/tests/skill-behavior/providers.mjs index d6bf0dc8b..9d31e4acf 100644 --- a/tests/skill-behavior/providers.mjs +++ b/tests/skill-behavior/providers.mjs @@ -127,7 +127,7 @@ export function getProviderOptions(modelId) { * its own floor: * IMPECCABLE_SKILL_BEHAVIOR_MODELS=gpt-5.6-luna,deepseek-v4-flash */ -export const DEFAULT_MODELS = ['claude-sonnet-5', 'gpt-5.6-terra', 'gemini-3.6-flash']; +export const DEFAULT_MODELS = ['claude-sonnet-5', 'gpt-5.6-terra', 'gemini-3.7-flash']; export function resolveModelList() { const override = process.env.IMPECCABLE_SKILL_BEHAVIOR_MODELS; From 79c648a9ab5a4da22aa1d89340f51901592b770d Mon Sep 17 00:00:00 2001 From: Abdul Wahab Date: Sun, 16 Aug 2026 12:50:46 +0500 Subject: [PATCH 08/61] Resolve bot review: code-led GROUND authority, sampling rules, tolerance GROUND no longer lapses silently on code-led builds: with no comp to sample, the authority is the colors OWN-WORLD and the quality bar name, and no invented target beyond them. Non-uniform fields get sampling rules (interior pixel, patch average for texture, both ends of a gradient, never an edge), and the numeric comparison gets tolerance semantics so render noise never fails a faithful build. The hunt hint names the dark-ground prior beside the light one. AI-assisted change (Cursor), prepared under maintainer direction. Co-authored-by: Cursor --- skill/agents/impeccable-finish-reviewer.md | 2 +- skill/reference/new-work.md | 2 +- skill/reference/visualize.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/skill/agents/impeccable-finish-reviewer.md b/skill/agents/impeccable-finish-reviewer.md index fa576cb91..349307a00 100644 --- a/skill/agents/impeccable-finish-reviewer.md +++ b/skill/agents/impeccable-finish-reviewer.md @@ -28,7 +28,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior, warm cream on light grounds, is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND does not lapse either: with no comp to sample, judge the page field's value and temperature against the colors OWN-WORLD and the quality bar name, and where neither names one, hold the ground to the world's internal coherence rather than a target you invent. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/skill/reference/new-work.md b/skill/reference/new-work.md index 2bca74d6b..7f0df334c 100644 --- a/skill/reference/new-work.md +++ b/skill/reference/new-work.md @@ -90,7 +90,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents and set each hex against the recorded comp value (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents and set each hex against the recorded comp value (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/skill/reference/visualize.md b/skill/reference/visualize.md index b53a6e13f..4c80b32fc 100644 --- a/skill/reference/visualize.md +++ b/skill/reference/visualize.md @@ -33,7 +33,7 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. -The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. From e9c62278c1abb33c11ef3752b1e73eb49c5d3ee7 Mon Sep 17 00:00:00 2001 From: Abdul Wahab Date: Sun, 16 Aug 2026 13:39:57 +0500 Subject: [PATCH 09/61] Make the code-led GROUND fallback deterministic, compare like for like The quality bar leaves the color-authority chain (it arrives as card image paths and never governs composition). With no comp, a color OWN-WORLD names is the target; when it names none, the review states there is no GROUND authority instead of inventing a target. The build side of the numeric comparison now samples the same way each record was taken: patch average against patch average, gradient ends against gradient ends. AI-assisted change (Cursor), prepared under maintainer direction. Co-authored-by: Cursor --- skill/agents/impeccable-finish-reviewer.md | 2 +- skill/reference/new-work.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/skill/agents/impeccable-finish-reviewer.md b/skill/agents/impeccable-finish-reviewer.md index 349307a00..97025c63e 100644 --- a/skill/agents/impeccable-finish-reviewer.md +++ b/skill/agents/impeccable-finish-reviewer.md @@ -28,7 +28,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND does not lapse either: with no comp to sample, judge the page field's value and temperature against the colors OWN-WORLD and the quality bar name, and where neither names one, hold the ground to the world's internal coherence rather than a target you invent. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/skill/reference/new-work.md b/skill/reference/new-work.md index 7f0df334c..094032a2e 100644 --- a/skill/reference/new-work.md +++ b/skill/reference/new-work.md @@ -90,7 +90,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents and set each hex against the recorded comp value (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. From 9ce0350054b0199bfd0ebbde95d9fd70c7c91741 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 08:52:46 +0000 Subject: [PATCH 10/61] Sync generated provider output --- .../skills/impeccable/agents/impeccable_finish_reviewer.toml | 2 +- .agents/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .agents/skills/impeccable/reference/new-work.md | 2 +- .agents/skills/impeccable/reference/visualize.md | 2 ++ .claude/agents/impeccable-finish-reviewer.md | 2 +- .claude/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .claude/skills/impeccable/reference/new-work.md | 2 +- .claude/skills/impeccable/reference/visualize.md | 2 ++ .cursor/agents/impeccable-finish-reviewer.md | 2 +- .cursor/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .cursor/skills/impeccable/reference/new-work.md | 2 +- .cursor/skills/impeccable/reference/visualize.md | 2 ++ .gemini/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .gemini/skills/impeccable/reference/new-work.md | 2 +- .gemini/skills/impeccable/reference/visualize.md | 2 ++ .github/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .github/skills/impeccable/reference/new-work.md | 2 +- .github/skills/impeccable/reference/visualize.md | 2 ++ .grok/agents/impeccable-finish-reviewer.md | 2 +- .grok/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .grok/skills/impeccable/reference/new-work.md | 2 +- .grok/skills/impeccable/reference/visualize.md | 2 ++ .hermes/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .hermes/skills/impeccable/reference/new-work.md | 2 +- .hermes/skills/impeccable/reference/visualize.md | 2 ++ .kiro/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .kiro/skills/impeccable/reference/new-work.md | 2 +- .kiro/skills/impeccable/reference/visualize.md | 2 ++ .../skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .opencode/skills/impeccable/reference/new-work.md | 2 +- .opencode/skills/impeccable/reference/visualize.md | 2 ++ .pi/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .pi/skills/impeccable/reference/new-work.md | 2 +- .pi/skills/impeccable/reference/visualize.md | 2 ++ .qoder/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .qoder/skills/impeccable/reference/new-work.md | 2 +- .qoder/skills/impeccable/reference/visualize.md | 2 ++ .../skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .rovodev/skills/impeccable/reference/new-work.md | 2 +- .rovodev/skills/impeccable/reference/visualize.md | 2 ++ .../skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .trae-cn/skills/impeccable/reference/new-work.md | 2 +- .trae-cn/skills/impeccable/reference/visualize.md | 2 ++ .trae/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .trae/skills/impeccable/reference/new-work.md | 2 +- .trae/skills/impeccable/reference/visualize.md | 2 ++ .vibe/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- .vibe/skills/impeccable/reference/new-work.md | 2 +- .vibe/skills/impeccable/reference/visualize.md | 2 ++ plugin/agents/impeccable-finish-reviewer.md | 2 +- plugin/skills/impeccable/reference/degraded/finish-reviewer.md | 2 +- plugin/skills/impeccable/reference/new-work.md | 2 +- plugin/skills/impeccable/reference/visualize.md | 2 ++ 53 files changed, 69 insertions(+), 37 deletions(-) diff --git a/.agents/skills/impeccable/agents/impeccable_finish_reviewer.toml b/.agents/skills/impeccable/agents/impeccable_finish_reviewer.toml index cc39c52db..20700526e 100644 --- a/.agents/skills/impeccable/agents/impeccable_finish_reviewer.toml +++ b/.agents/skills/impeccable/agents/impeccable_finish_reviewer.toml @@ -19,7 +19,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.agents/skills/impeccable/reference/degraded/finish-reviewer.md b/.agents/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.agents/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.agents/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.agents/skills/impeccable/reference/new-work.md b/.agents/skills/impeccable/reference/new-work.md index c723c9e91..32cd133a4 100644 --- a/.agents/skills/impeccable/reference/new-work.md +++ b/.agents/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.agents/skills/impeccable/reference/visualize.md b/.agents/skills/impeccable/reference/visualize.md index 155aec227..eb6ed5125 100644 --- a/.agents/skills/impeccable/reference/visualize.md +++ b/.agents/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.claude/agents/impeccable-finish-reviewer.md b/.claude/agents/impeccable-finish-reviewer.md index 512e28ac6..2dc8d1850 100644 --- a/.claude/agents/impeccable-finish-reviewer.md +++ b/.claude/agents/impeccable-finish-reviewer.md @@ -22,7 +22,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.claude/skills/impeccable/reference/degraded/finish-reviewer.md b/.claude/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.claude/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.claude/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.claude/skills/impeccable/reference/new-work.md b/.claude/skills/impeccable/reference/new-work.md index 9fefa623a..dc5a4501c 100644 --- a/.claude/skills/impeccable/reference/new-work.md +++ b/.claude/skills/impeccable/reference/new-work.md @@ -88,7 +88,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.claude/skills/impeccable/reference/visualize.md b/.claude/skills/impeccable/reference/visualize.md index f7dc0fd96..115ba308b 100644 --- a/.claude/skills/impeccable/reference/visualize.md +++ b/.claude/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.cursor/agents/impeccable-finish-reviewer.md b/.cursor/agents/impeccable-finish-reviewer.md index 4a94a95d1..15540154a 100644 --- a/.cursor/agents/impeccable-finish-reviewer.md +++ b/.cursor/agents/impeccable-finish-reviewer.md @@ -21,7 +21,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.cursor/skills/impeccable/reference/degraded/finish-reviewer.md b/.cursor/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.cursor/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.cursor/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.cursor/skills/impeccable/reference/new-work.md b/.cursor/skills/impeccable/reference/new-work.md index 0afbdab2e..1dc1f0dfa 100644 --- a/.cursor/skills/impeccable/reference/new-work.md +++ b/.cursor/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.cursor/skills/impeccable/reference/visualize.md b/.cursor/skills/impeccable/reference/visualize.md index c9b4e48af..dba945fa9 100644 --- a/.cursor/skills/impeccable/reference/visualize.md +++ b/.cursor/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.gemini/skills/impeccable/reference/degraded/finish-reviewer.md b/.gemini/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.gemini/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.gemini/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.gemini/skills/impeccable/reference/new-work.md b/.gemini/skills/impeccable/reference/new-work.md index d6af1d041..2c39b4625 100644 --- a/.gemini/skills/impeccable/reference/new-work.md +++ b/.gemini/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.gemini/skills/impeccable/reference/visualize.md b/.gemini/skills/impeccable/reference/visualize.md index 4e32349ad..3238f675d 100644 --- a/.gemini/skills/impeccable/reference/visualize.md +++ b/.gemini/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.github/skills/impeccable/reference/degraded/finish-reviewer.md b/.github/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.github/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.github/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.github/skills/impeccable/reference/new-work.md b/.github/skills/impeccable/reference/new-work.md index 97e113fa8..1723b0531 100644 --- a/.github/skills/impeccable/reference/new-work.md +++ b/.github/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.github/skills/impeccable/reference/visualize.md b/.github/skills/impeccable/reference/visualize.md index 1f70ec6e0..094058a0b 100644 --- a/.github/skills/impeccable/reference/visualize.md +++ b/.github/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.grok/agents/impeccable-finish-reviewer.md b/.grok/agents/impeccable-finish-reviewer.md index 512e28ac6..2dc8d1850 100644 --- a/.grok/agents/impeccable-finish-reviewer.md +++ b/.grok/agents/impeccable-finish-reviewer.md @@ -22,7 +22,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.grok/skills/impeccable/reference/degraded/finish-reviewer.md b/.grok/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.grok/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.grok/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.grok/skills/impeccable/reference/new-work.md b/.grok/skills/impeccable/reference/new-work.md index 8ed1a6673..eef08b8a8 100644 --- a/.grok/skills/impeccable/reference/new-work.md +++ b/.grok/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.grok/skills/impeccable/reference/visualize.md b/.grok/skills/impeccable/reference/visualize.md index 863213349..3da88516f 100644 --- a/.grok/skills/impeccable/reference/visualize.md +++ b/.grok/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.hermes/skills/impeccable/reference/degraded/finish-reviewer.md b/.hermes/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.hermes/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.hermes/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.hermes/skills/impeccable/reference/new-work.md b/.hermes/skills/impeccable/reference/new-work.md index 413f56212..adea4d7e6 100644 --- a/.hermes/skills/impeccable/reference/new-work.md +++ b/.hermes/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.hermes/skills/impeccable/reference/visualize.md b/.hermes/skills/impeccable/reference/visualize.md index 50a060011..5191dc5d4 100644 --- a/.hermes/skills/impeccable/reference/visualize.md +++ b/.hermes/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.kiro/skills/impeccable/reference/degraded/finish-reviewer.md b/.kiro/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.kiro/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.kiro/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.kiro/skills/impeccable/reference/new-work.md b/.kiro/skills/impeccable/reference/new-work.md index a021797b6..6823fae0a 100644 --- a/.kiro/skills/impeccable/reference/new-work.md +++ b/.kiro/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.kiro/skills/impeccable/reference/visualize.md b/.kiro/skills/impeccable/reference/visualize.md index c7b8141a4..c31910d84 100644 --- a/.kiro/skills/impeccable/reference/visualize.md +++ b/.kiro/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.opencode/skills/impeccable/reference/degraded/finish-reviewer.md b/.opencode/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.opencode/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.opencode/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.opencode/skills/impeccable/reference/new-work.md b/.opencode/skills/impeccable/reference/new-work.md index 32f5b9bb0..5f1b58971 100644 --- a/.opencode/skills/impeccable/reference/new-work.md +++ b/.opencode/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.opencode/skills/impeccable/reference/visualize.md b/.opencode/skills/impeccable/reference/visualize.md index f8d733328..6c16d3ace 100644 --- a/.opencode/skills/impeccable/reference/visualize.md +++ b/.opencode/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.pi/skills/impeccable/reference/degraded/finish-reviewer.md b/.pi/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.pi/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.pi/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.pi/skills/impeccable/reference/new-work.md b/.pi/skills/impeccable/reference/new-work.md index 7f572166a..4737fcdbe 100644 --- a/.pi/skills/impeccable/reference/new-work.md +++ b/.pi/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.pi/skills/impeccable/reference/visualize.md b/.pi/skills/impeccable/reference/visualize.md index f99dc97aa..0d806a396 100644 --- a/.pi/skills/impeccable/reference/visualize.md +++ b/.pi/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.qoder/skills/impeccable/reference/degraded/finish-reviewer.md b/.qoder/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.qoder/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.qoder/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.qoder/skills/impeccable/reference/new-work.md b/.qoder/skills/impeccable/reference/new-work.md index 8ac54a407..5cf840949 100644 --- a/.qoder/skills/impeccable/reference/new-work.md +++ b/.qoder/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.qoder/skills/impeccable/reference/visualize.md b/.qoder/skills/impeccable/reference/visualize.md index 756f6b926..eed4cdfe7 100644 --- a/.qoder/skills/impeccable/reference/visualize.md +++ b/.qoder/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.rovodev/skills/impeccable/reference/degraded/finish-reviewer.md b/.rovodev/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.rovodev/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.rovodev/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.rovodev/skills/impeccable/reference/new-work.md b/.rovodev/skills/impeccable/reference/new-work.md index 501645e7d..3631f7834 100644 --- a/.rovodev/skills/impeccable/reference/new-work.md +++ b/.rovodev/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.rovodev/skills/impeccable/reference/visualize.md b/.rovodev/skills/impeccable/reference/visualize.md index a2213cd45..c8e346108 100644 --- a/.rovodev/skills/impeccable/reference/visualize.md +++ b/.rovodev/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.trae-cn/skills/impeccable/reference/degraded/finish-reviewer.md b/.trae-cn/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.trae-cn/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.trae-cn/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.trae-cn/skills/impeccable/reference/new-work.md b/.trae-cn/skills/impeccable/reference/new-work.md index 6e47a77c5..9e970406b 100644 --- a/.trae-cn/skills/impeccable/reference/new-work.md +++ b/.trae-cn/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.trae-cn/skills/impeccable/reference/visualize.md b/.trae-cn/skills/impeccable/reference/visualize.md index 9b22bfcce..e0e18d841 100644 --- a/.trae-cn/skills/impeccable/reference/visualize.md +++ b/.trae-cn/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.trae/skills/impeccable/reference/degraded/finish-reviewer.md b/.trae/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.trae/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.trae/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.trae/skills/impeccable/reference/new-work.md b/.trae/skills/impeccable/reference/new-work.md index fdade3806..fae51c7d1 100644 --- a/.trae/skills/impeccable/reference/new-work.md +++ b/.trae/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.trae/skills/impeccable/reference/visualize.md b/.trae/skills/impeccable/reference/visualize.md index 1a325bab6..9aaf31685 100644 --- a/.trae/skills/impeccable/reference/visualize.md +++ b/.trae/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/.vibe/skills/impeccable/reference/degraded/finish-reviewer.md b/.vibe/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/.vibe/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/.vibe/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/.vibe/skills/impeccable/reference/new-work.md b/.vibe/skills/impeccable/reference/new-work.md index d9561a45f..9a1c30a3a 100644 --- a/.vibe/skills/impeccable/reference/new-work.md +++ b/.vibe/skills/impeccable/reference/new-work.md @@ -86,7 +86,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/.vibe/skills/impeccable/reference/visualize.md b/.vibe/skills/impeccable/reference/visualize.md index 0c97bb519..b3f5ea376 100644 --- a/.vibe/skills/impeccable/reference/visualize.md +++ b/.vibe/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. diff --git a/plugin/agents/impeccable-finish-reviewer.md b/plugin/agents/impeccable-finish-reviewer.md index 512e28ac6..2dc8d1850 100644 --- a/plugin/agents/impeccable-finish-reviewer.md +++ b/plugin/agents/impeccable-finish-reviewer.md @@ -22,7 +22,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/plugin/skills/impeccable/reference/degraded/finish-reviewer.md b/plugin/skills/impeccable/reference/degraded/finish-reviewer.md index 5b9331217..e2a4fd130 100644 --- a/plugin/skills/impeccable/reference/degraded/finish-reviewer.md +++ b/plugin/skills/impeccable/reference/degraded/finish-reviewer.md @@ -17,7 +17,7 @@ Expect: the original request; the confirmed user answers; the artifact path(s); 0. **Evidence.** Before any other check, verify the required captures exist and every capture is valid. Required: the platform's full viewport set (web: `desktop.png` and `mobile.png`; native: one capture per shipped device class), plus every capture the calling brief names as required, a reported user viewport (`user-.png`) included. Valid: no black or blank regions, content matching what the filename claims (a visit capture showing the About section is invalid), the document top visible where the file claims a full page, dimensions that make sense for the named viewport. A required capture that is absent fails exactly like one that is malformed: a viewport nobody captured is a viewport nobody inspected, and it cannot ship. When any capture fails, the whole review changes shape: return `disposition: recapture` as the first line, then one section, `recapture`, listing each missing or invalid file and what a valid capture of it shows, and stop. Never build a matrix on malformed evidence; a verdict derived from a broken capture launders the breakage into an approval, and the parent owes you a full re-review on valid captures, not a scoring round. 1. **Persistence.** PRODUCT.md exists. On a comp-led build, `.impeccable/review/hero-repro.png` exists: the hero reproduction checkpoint's capture at the comp's own dimensions; its absence means the reproduction phase ran unproven, a material finding. When DESIGN.md predates this build (an extension or redesign), it matches the built world; on a new world it is written after this review by the documenter, so its absence here is not a finding. When comp-round comps exist under `.impeccable/mocks/`, an approval record exists too: the surface brief naming the approved comp, or an `approved` flag in its sidecar. Comp-round comps with no recorded pick mean the approval point was skipped, a material finding. Files under `.impeccable/mocks/decision/` are exempt: they are the direction round's dealt hand, produced before any comp round, and imply no approval whatever the build path; a code-led build has no comp round at all. -2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Two rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. +2. **Fidelity.** Against your own element inventory of the approved comp, never against the contract's summary of it: topology, reading order, focal scale, overlaps and z-order, density, signature geometry, the primary action's treatment (a CTA the comp physically works, dissolves, or stamps is a signature element; its plain-rectangle rendition is contradicted), navigation items and icons, headline levels and scale relationships. Classify every salient element: match, acceptable adaptation, missing, contradicted, or added without approval. Three rows are mandatory in every matrix. TYPE: the display lettering's character, compression, width, weight, contrast, terminals, against the comp's; a face of a different character is contradicted however the layout matches. MATERIAL: an element rendered as flat CSS or clean vector where the comp shows painted, textured, dimensional, or photographic material is contradicted regardless of placement; medium is part of the promise. GROUND: the page field's value and temperature against the comp's, sampled from pixels on both sides when tooling allows rather than judged from memory, and read as the net on-screen result where a texture or tile paints over the base color; a ground warmer or cooler than the comp's is contradicted however faithfully the layout matches, and drift toward the rendition prior (warm cream on light grounds, blue-black slate on dark) is the direction to hunt. With no approved comp, TYPE and MATERIAL do not lapse: judge them against the contract's OWN-WORLD and the world's real materials, and treat faked physicality (CSS bevels, embossing, stamped-metal or chalk effects imitating a material the page never renders) as contradicted on its face; imitation material is the single most reliable mark of machine-made design. GROUND narrows rather than lapses: with no comp to sample, a color OWN-WORLD names is the target and the same warmer-or-cooler judgment applies; when OWN-WORLD names none, there is no GROUND authority, and the review says so in place of a verdict, because a target the reviewer invents turns the check into taste. A critique-reference comp on such a build is provocation, not spec: no element matrix, no adaptation citations, no asset obligations; its one contribution is what the image dared that the build did not, and dares worth adopting enter material_fixes as ordinary ordered fixes. An adaptation counts as intentional only when it cites the user answer, surface brief, accessibility need, or product truth that forced it; an uncited deviation is a defect. A missing signature element, a changed topology, or content added without approval fails fidelity and outranks every craft point in material_fixes. When MATERIAL is contradicted on the focal element, or contradiction is the page rather than the exception, stop ordering repairs: make the first material fix a rebuild directive naming the comp regions to re-derive and the assets to produce; a list of patches against a rejected page launders the rejection into an approval. A fix that requires producing an asset says so explicitly ("produce: as a raster asset"), never phrased as a style adjustment the parent will answer with CSS. The comp is the spec for composition, topology, element inventory, density, lettering character, and material; it is not a pixel spec for semantics, accessibility, or responsive reflow, and that allowance covers translation, never replacement. 3. **Ceiling.** Against the QUALITY BAR card: name the world's native devices the build left unused, frame, depth, lettering treatment, ornament density, motion. The card governs commitment and finish, never composition. 4. **Contract, promise by promise.** First verify FORM carries the seed key the concept roll printed; a contract with no seed key, or one the parent cannot corroborate, means the roll was skipped, a material fix ahead of any craft point. Then, for each of the five blocks: does the render keep the promise? Apply the memory test to the first viewport. 5. **Truth.** Demonstration data authored and labeled synthetic; no invented commercial claims; unanswered claims present as marked placeholders, not omissions. Every image-native region of the approved comp shipped as a real asset, not a gradient standing in for one, and every produced asset visibly present in the screenshots; an asset applied at near-zero opacity or buried behind other paint is a compliance token, not a shipped material. diff --git a/plugin/skills/impeccable/reference/new-work.md b/plugin/skills/impeccable/reference/new-work.md index 9fefa623a..dc5a4501c 100644 --- a/plugin/skills/impeccable/reference/new-work.md +++ b/plugin/skills/impeccable/reference/new-work.md @@ -88,7 +88,7 @@ For `shape`, return the selected direction to [shape.md](shape.md) and stop befo ## 6. Build with full commitment -When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. +When an approved comp exists, the comp is king, and the build happens in phases. The comp is a spatial contract, not a mood board: only the user can downgrade its authority, in explicit words, and difficulty never infers a downgrade. Phase one is reproduction: rebuild the comp at its own breakpoint until a screenshot at the comp's width and height overlaps it near pixel-perfectly, materials, components, elevation, assets, and implied design language included. Exactly three concessions exist: fonts (the closest obtainable face), icons (exact match unless the user already chose an icon library), and genuine defects in the generated comp such as spelling errors. Everything else must match, and models systematically believe their HTML, CSS, and SVG recreation succeeded when it did not, so the overlap comparison is the authority, never your conviction: set the screenshot beside the freshly reopened comp image at identical dimensions after every region, never beside your memory of it, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. The comp also outranks every written record of it: when the recorded brief or inventory commits to less than the comp shows, a softer texture, a sparser field, a sculpted plate reduced to flat CSS, correct the record upward to the comp; qualifiers like subtle, restrained, and low-contrast, and counts rounded down to a comfortable fraction, are how approved materials die between approval and build. A produced material must then survive to the screen: a texture buried under a nearly opaque color wash ships the wash, not the material, so judge every material by the screenshot beside the comp, never by the stylesheet. Every color the brief records gets that comparison by number, not by eye: sample the build screenshot's ground, dominant fields, and accents the same way each record was taken (an interior patch average where the record is an average, both end colors where the record is a gradient) and set each value against its recorded counterpart (sampled from the comp itself when the brief lacks one), and when a texture or tile paints over a base token, measure the net on-screen value, because the eye files a drifted color under the same color word and the number is what catches it. Judge the gap like a colorist, not a diff tool: a difference with a color name (warmer, grayer, darker than the record) is drift to fix, while a few digits of render and compression noise are the same color. Only when reproduction holds does phase two begin: static regions that should live become animated or interactive, reveals and motion are added, then responsiveness across the surface's devices. Where the comp does not cover the whole surface, continue building the remainder inside the comp's recorded world and design language; a component the comp never shows inherits the recorded system's corner language, line weights, and materials, and may not introduce container styles, border weights, or chrome the comp never uses. Build the assigned direction, not a safer interpretation of it. The form supplies structure, reading order, component conventions, and native motion; the product supplies every fact. Commit every atom: nav, buttons, inputs, and links are rebuilt in the form's vocabulary, and a stock component inside a committed form is a lapse. Land the first build fully committed; committing is the hard part, and the passes that follow exist to make the committed thing clear and effective, never to dilute it. In unattended work, the safe rendition is the known risk. diff --git a/plugin/skills/impeccable/reference/visualize.md b/plugin/skills/impeccable/reference/visualize.md index f7dc0fd96..115ba308b 100644 --- a/plugin/skills/impeccable/reference/visualize.md +++ b/plugin/skills/impeccable/reference/visualize.md @@ -33,6 +33,8 @@ After approval, record the choice where tools can find it: the approved comp's p Before building, read the approved comp as a design system and record it in the brief: component grammar, corner language, line weights, elevation treatment, and the type ramp. Everything the comp does not show gets built from this record; without it the fallback is the model's stock kit of square boxes, 1px grids, bento cells, and hard shadows. Then inventory the comp's major visible ingredients in writing (a short table in the surface brief or working notes; the finish reviewer audits shipped assets against it) and choose an implementation medium for each: semantic HTML/CSS/SVG, existing project asset, generated raster, sourced raster, icon library, canvas/WebGL, or accepted omission. The same inventory names the comp's compositional commitments: navigation items and icons, headline levels and their scale relationship, signature geometry such as seams, masks, and overlaps, and each section's arrangement and density. The primary action gets its own row with its own medium: when the comp dissolves, stamps, erodes, or otherwise physically works the main CTA, that treatment is signature material on the page's most important element, and shrinking it to a border trick is the compliance-token version of commitment. An element never written down is the element the build silently drops; the direction contract's 150 words cannot carry this list, so it lives here. +The record is sampled, never estimated: read the comp's page **ground**, each dominant field, and each accent's actual hex from its pixels (ImageMagick, Python with PIL, any pixel-reading tool on the machine) and write the values into the same record. Take a flat field from any interior pixel, a textured or grainy one as the average of an interior patch (crop a swatch, scale it to one pixel), and a gradient as its two end colors; never sample an edge, where antialiasing blends neighbors into colors the design never chose. An adjective is a direction, not a record: cream covers everything from near-white to beige, charcoal a third of the value scale, and wherever no number pins a color, the rendition prior picks the spot. Sampled values supersede the palette chips on the decision and composition cards: those were authored before this comp existed, and a chip that disagrees with the comp's pixels is a draft the approval retired. + The medium column is where an approved design most often dies, so it obeys a gate: the medium is decided by what the comp region shows, never by what feels buildable in the current stack. A human figure, a product object, machinery, or any material with lighting and depth is raster whatever the stack; so is any texture by name alone: woven cloth, paper grain, fabric, leather, brushed metal need no depth argument, because a CSS gradient is not a texture medium and "layered CSS textures" is not a medium at all. Writing "silhouette" for a photographic figure, or "CSS" for a sculpted panel's finish, is not a medium choice; it is the quiet deletion of the approved design, and it is how a comp full of physical material becomes a flat page with the same section order. Style does not move this boundary: a comp region with perspective, shading, figure drawing, or dense mechanical detail is illustration however line-drawn it looks, and no build session can author illustration as vectors, so it regenerates as raster like any photograph. Authored SVG covers what a session can specify exactly (diagrams with countable elements, controls, flat shape systems) and ends where drawing skill begins; an instruction-manual world keeps its illustrations as line-art illustrations, not diagrams. Produce such regions by regenerating them cleanly, with the approved comp and its embedded prompt as the reference for a fresh render at asset resolution; never crop pixels out of the comp itself, whose effective resolution sits far below asset grade. Dropping an image-native region is a scope decision the user makes at the approval point, never a silent flattening after it. Generated imagery is a material, not a claim: evidence rules bind assertions, specs, testimonials, and photographs presented as real, never render fidelity; "no photography on hand" forbids fake proof, not an illustrated hero. The gate runs both ways: precise geometry, hard-edged shape systems, diagrams, expressive motion, shaders, and anything interactive are vector and GPU territory (SVG, canvas, WebGL), where a raster flattens what should move, scale, and respond. A field or texture built from many small elements carries a quantity commitment either way: write down its approximate density and coverage ("thousands of glyphs over two-thirds of the fold, dense at the top fading into the path"), because a field rebuilt at a tenth of its density passes every checklist and still is not the design. TYPE rows carry the same discipline: name the face's compression class, and render one headline word against the comp before building on it; a visibly wider or lighter silhouette means the face is wrong, and every section built on it inherits the miss. Raster is for what the world paints; code is for what the world draws, animates, or reacts with, and choosing code there is ambition, not economy. Every `produce` entry is produced before the build ships, through the asset producer or in the current thread; an inventory with unproduced entries is an unfinished build, and this gate is where imagery-free pages come from when it is skipped. From 21ad321a979e30c8261079ae16e6239d96139797 Mon Sep 17 00:00:00 2001 From: Paul Bakaus Date: Sun, 16 Aug 2026 17:24:31 -0400 Subject: [PATCH 11/61] Centralize surface route normalization (#600) Consolidate explicit and inferred surface route canonicalization behind one private rule, with characterization coverage for equivalent and invalid inputs.\n\nAI assistance: OpenAI Codex prepared this change under pbakaus's scheduled architecture-simplification authorization. --- skill/scripts/lib/surface-briefs.mjs | 20 +++++++++----------- tests/surface-brief.test.mjs | 8 ++++++++ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/skill/scripts/lib/surface-briefs.mjs b/skill/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/skill/scripts/lib/surface-briefs.mjs +++ b/skill/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/tests/surface-brief.test.mjs b/tests/surface-brief.test.mjs index 35aa128f8..346bce86f 100644 --- a/tests/surface-brief.test.mjs +++ b/tests/surface-brief.test.mjs @@ -6,6 +6,7 @@ import path from 'node:path'; import { listSurfaceBriefs, + normalizeSurfaceTarget, resolveSurfaceBrief, writeSurfaceBrief, } from '../skill/scripts/lib/surface-briefs.mjs'; @@ -69,6 +70,13 @@ describe('surface briefs', () => { assert.equal(result.brief?.primaryTarget, 'route:/pricing'); }); + it('canonicalizes explicit and inferred route identifiers consistently', () => { + assert.equal(normalizeSurfaceTarget('route:/docs//intro/?from=nav#top', { projectRoot: cwd }), 'route:/docs/intro'); + assert.equal(normalizeSurfaceTarget('/docs//intro/?from=nav#top', { projectRoot: cwd }), 'route:/docs/intro'); + assert.equal(normalizeSurfaceTarget('route:/docs/../admin', { projectRoot: cwd }), null); + assert.equal(normalizeSurfaceTarget('/docs/../admin', { projectRoot: cwd }), null); + }); + it('supports the root route even though the filesystem root exists', () => { const filePath = writeSurfaceBrief({ projectRoot: cwd, From 5050b66dbdbf0a9b74e9bb7cae72c878e583b054 Mon Sep 17 00:00:00 2001 From: Paul Bakaus Date: Sun, 16 Aug 2026 17:25:06 -0400 Subject: [PATCH 12/61] Simplify hook manifest builders (#596) Centralize the shared Claude-compatible PostToolUse and Stop schema while preserving every provider-specific matcher, path, notice, and timeout.\n\nAI assistance: Codex prepared this behavior-preserving refactor under pbakaus's scheduled architecture-simplification authorization. --- scripts/lib/transformers/hooks.js | 123 +++++++++++------------------- 1 file changed, 43 insertions(+), 80 deletions(-) diff --git a/scripts/lib/transformers/hooks.js b/scripts/lib/transformers/hooks.js index ad4212eeb..e0fc046d6 100644 --- a/scripts/lib/transformers/hooks.js +++ b/scripts/lib/transformers/hooks.js @@ -46,6 +46,7 @@ function stopEntry(command) { ], }; } + const CLAUDE_PROJECT_HOOK = '${CLAUDE_PROJECT_DIR}/.claude/skills/impeccable/scripts/hook.mjs'; // The Node major the hook runtime requires, kept equal to the engines floor in // package.json. The probe and the notice both derive from it so they cannot @@ -85,6 +86,27 @@ const guardedNode = (hookPath, notice = '') => { : `! ${NODE_PROBE}`; return `[ ! -f "${hookPath}" ] || ${probe} || node "${hookPath}"`; }; + +function buildClaudeCompatibleHooks(matcher, hookPath, notice = '') { + const command = guardedNode(hookPath, notice); + return { + PostToolUse: [ + { + matcher, + hooks: [ + { + type: 'command', + command, + timeout: TIMEOUT_SECONDS, + statusMessage: STATUS_MESSAGE, + }, + ], + }, + ], + Stop: [stopEntry(command)], + }; +} + // The message says `on PATH` deliberately: the common cause is a hook shell // whose PATH misses the version manager, so a user already running Node 22 // needs to know the hook's PATH is at issue and not their install. Apostrophes @@ -116,22 +138,11 @@ const GROK_PROJECT_HOOK = '.grok/skills/impeccable/scripts/hook.mjs'; export function buildClaudeSettingsManifest() { return { description: 'Impeccable design detector: immediate-tier checks after Edit/Write/MultiEdit on UI files, full-rule deep pass on Stop.', - hooks: { - PostToolUse: [ - { - matcher: 'Edit|Write|MultiEdit', - hooks: [ - { - type: 'command', - command: guardedNode(CLAUDE_PROJECT_HOOK, SYSTEM_MESSAGE_NOTICE), - timeout: TIMEOUT_SECONDS, - statusMessage: STATUS_MESSAGE, - }, - ], - }, - ], - Stop: [stopEntry(guardedNode(CLAUDE_PROJECT_HOOK, SYSTEM_MESSAGE_NOTICE))], - }, + hooks: buildClaudeCompatibleHooks( + 'Edit|Write|MultiEdit', + CLAUDE_PROJECT_HOOK, + SYSTEM_MESSAGE_NOTICE, + ), }; } @@ -143,22 +154,11 @@ export function buildClaudeSettingsManifest() { // than `hooks`, failing the whole manifest (issue #330). export function buildClaudePluginHooksManifest() { return { - hooks: { - PostToolUse: [ - { - matcher: 'Edit|Write|MultiEdit', - hooks: [ - { - type: 'command', - command: guardedNode(CLAUDE_PLUGIN_HOOK, SYSTEM_MESSAGE_NOTICE), - timeout: TIMEOUT_SECONDS, - statusMessage: STATUS_MESSAGE, - }, - ], - }, - ], - Stop: [stopEntry(guardedNode(CLAUDE_PLUGIN_HOOK, SYSTEM_MESSAGE_NOTICE))], - }, + hooks: buildClaudeCompatibleHooks( + 'Edit|Write|MultiEdit', + CLAUDE_PLUGIN_HOOK, + SYSTEM_MESSAGE_NOTICE, + ), }; } @@ -167,22 +167,11 @@ export function buildClaudePluginHooksManifest() { // instead of relying on its Claude compatibility alias. export function buildCodexPluginHooksManifest() { return { - hooks: { - PostToolUse: [ - { - matcher: 'Edit|Write|apply_patch', - hooks: [ - { - type: 'command', - command: guardedNode(CODEX_PLUGIN_HOOK, SYSTEM_MESSAGE_NOTICE), - timeout: TIMEOUT_SECONDS, - statusMessage: STATUS_MESSAGE, - }, - ], - }, - ], - Stop: [stopEntry(guardedNode(CODEX_PLUGIN_HOOK, SYSTEM_MESSAGE_NOTICE))], - }, + hooks: buildClaudeCompatibleHooks( + 'Edit|Write|apply_patch', + CODEX_PLUGIN_HOOK, + SYSTEM_MESSAGE_NOTICE, + ), }; } @@ -192,22 +181,11 @@ export function buildCodexPluginHooksManifest() { export function buildCodexHooksManifest(skillDir = '.codex') { const hookPath = codexProjectHook(skillDir); return { - hooks: { - PostToolUse: [ - { - matcher: 'Edit|Write|apply_patch', - hooks: [ - { - type: 'command', - command: guardedNode(hookPath, SYSTEM_MESSAGE_NOTICE), - timeout: TIMEOUT_SECONDS, - statusMessage: STATUS_MESSAGE, - }, - ], - }, - ], - Stop: [stopEntry(guardedNode(hookPath, SYSTEM_MESSAGE_NOTICE))], - }, + hooks: buildClaudeCompatibleHooks( + 'Edit|Write|apply_patch', + hookPath, + SYSTEM_MESSAGE_NOTICE, + ), }; } @@ -259,22 +237,7 @@ export function buildGitHubHooksManifest() { // https://docs.x.ai/build/features/hooks export function buildGrokHooksManifest() { return { - hooks: { - PostToolUse: [ - { - matcher: 'Edit|Write|MultiEdit', - hooks: [ - { - type: 'command', - command: guardedNode(GROK_PROJECT_HOOK), - timeout: TIMEOUT_SECONDS, - statusMessage: STATUS_MESSAGE, - }, - ], - }, - ], - Stop: [stopEntry(guardedNode(GROK_PROJECT_HOOK))], - }, + hooks: buildClaudeCompatibleHooks('Edit|Write|MultiEdit', GROK_PROJECT_HOOK), }; } From 3fcfa7eedf7ff36773b136bdf282033c5a17ccd3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 16 Aug 2026 21:25:33 +0000 Subject: [PATCH 13/61] Sync generated provider output --- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- .../impeccable/scripts/lib/surface-briefs.mjs | 20 +++++++++---------- 16 files changed, 144 insertions(+), 176 deletions(-) diff --git a/.agents/skills/impeccable/scripts/lib/surface-briefs.mjs b/.agents/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.agents/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.agents/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.claude/skills/impeccable/scripts/lib/surface-briefs.mjs b/.claude/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.claude/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.claude/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.cursor/skills/impeccable/scripts/lib/surface-briefs.mjs b/.cursor/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.cursor/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.cursor/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.gemini/skills/impeccable/scripts/lib/surface-briefs.mjs b/.gemini/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.gemini/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.gemini/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.github/skills/impeccable/scripts/lib/surface-briefs.mjs b/.github/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.github/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.github/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.grok/skills/impeccable/scripts/lib/surface-briefs.mjs b/.grok/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.grok/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.grok/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.hermes/skills/impeccable/scripts/lib/surface-briefs.mjs b/.hermes/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.hermes/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.hermes/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.kiro/skills/impeccable/scripts/lib/surface-briefs.mjs b/.kiro/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.kiro/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.kiro/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.opencode/skills/impeccable/scripts/lib/surface-briefs.mjs b/.opencode/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.opencode/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.opencode/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.pi/skills/impeccable/scripts/lib/surface-briefs.mjs b/.pi/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.pi/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.pi/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.qoder/skills/impeccable/scripts/lib/surface-briefs.mjs b/.qoder/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.qoder/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.qoder/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.rovodev/skills/impeccable/scripts/lib/surface-briefs.mjs b/.rovodev/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.rovodev/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.rovodev/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.trae-cn/skills/impeccable/scripts/lib/surface-briefs.mjs b/.trae-cn/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.trae-cn/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.trae-cn/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.trae/skills/impeccable/scripts/lib/surface-briefs.mjs b/.trae/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.trae/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.trae/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/.vibe/skills/impeccable/scripts/lib/surface-briefs.mjs b/.vibe/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/.vibe/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/.vibe/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); diff --git a/plugin/skills/impeccable/scripts/lib/surface-briefs.mjs b/plugin/skills/impeccable/scripts/lib/surface-briefs.mjs index f83416f69..83783517f 100644 --- a/plugin/skills/impeccable/scripts/lib/surface-briefs.mjs +++ b/plugin/skills/impeccable/scripts/lib/surface-briefs.mjs @@ -8,6 +8,12 @@ export function getSurfaceBriefDir(projectRoot) { return path.join(projectRoot, '.impeccable', 'surfaces'); } +function normalizeRouteTarget(route) { + if (!route.startsWith('/') || route.includes('..')) return null; + const normalized = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; + return `route:${normalized}`; +} + export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = {}) { if (!target || typeof target !== 'string' || !target.trim()) return null; const trimmed = target.trim(); @@ -21,21 +27,13 @@ export function normalizeSurfaceTarget(target, { projectRoot = process.cwd() } = return null; } } - if (/^route:/i.test(trimmed)) { - const route = trimmed.slice(trimmed.indexOf(':') + 1).trim(); - if (!route.startsWith('/') || route.includes('..')) return null; - const normalizedRoute = route.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } - if (trimmed === '/') return 'route:/'; + if (/^route:/i.test(trimmed)) return normalizeRouteTarget(trimmed.slice(trimmed.indexOf(':') + 1).trim()); + if (trimmed === '/') return normalizeRouteTarget(trimmed); if (trimmed.startsWith('/')) { const absolute = path.resolve(trimmed); const relativeToProject = path.relative(projectRoot, absolute); const isProjectFile = relativeToProject && !relativeToProject.startsWith('..') && !path.isAbsolute(relativeToProject); - if (!isProjectFile && !fs.existsSync(absolute) && !trimmed.includes('..')) { - const normalizedRoute = trimmed.split(/[?#]/, 1)[0].replace(/\/{2,}/g, '/').replace(/\/$/, '') || '/'; - return `route:${normalizedRoute}`; - } + if (!isProjectFile && !fs.existsSync(absolute)) return normalizeRouteTarget(trimmed); } const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(projectRoot, trimmed); const rel = path.relative(projectRoot, abs); From 3c6f53406be2ba441a2ca9fb611738859528c591 Mon Sep 17 00:00:00 2001 From: Abdul Wahab <32850166+abdulwahabone@users.noreply.github.com> Date: Mon, 17 Aug 2026 02:26:02 +0500 Subject: [PATCH 14/61] Fix: stop the direction page hanging forever after a re-roll (#469) (#530) * Fix: stop the direction page hanging forever after a re-roll (#469) The re-roll leg of the decision-page protocol was documented only in serve-question.mjs's own header, so agents never ran --update and the open tab polled a round that could never arrive. Compounding failure modes: the page poll swallowed every error, the daemon's --timeout was an absolute guillotine that killed the server under a still-open tab, a choice posted to a dead server confirmed nothing, and refresh or Reload on an unresolved round resurrected heartbeats that held the daemon alive indefinitely. - new-work.md documents the re-roll leg: rerun concept-seed with --from/--reroll, deliver with --update on the same key, never --start a second server. - The page poll terminates and says why: eight consecutive fetch failures means the server is gone; the delivery deadline (the server's own --idle-grace, inlined into the page) passing means the hand never arrived. Both stop heartbeating. - The daemon's --timeout bounds only the wait for a page to open; once the page heartbeats, the server lives while the page does and exits after --idle-grace (default 600s) without a beat, including under --timeout 0. - Build this and Re-roll against a dead server fail loudly instead of silently swallowing the click. - The server tracks the window between a collected re-roll answer and the --update that replaces the round, and serves the page in waiting mode there, so a native refresh re-enters the same bounded wait instead of resurrecting dead cards; the in-page Reload button only revives a delivered hand. - --update is exempt from the headless gate and its liveness probe trusts a fresh heartbeat over a failed kill probe (sandbox EPERM is not death). Squash of the six review-round commits on this branch, rebased onto main after the decision-page revamp. AI assistance: prepared with an AI agent operating under maintainer instruction (abdulwahabone). Co-authored-by: Cursor * Fix review findings: persist the replacement deadline, refuse unloadable hands A browser-native refresh of the waiting page re-entered the bounded wait with a fresh delivery deadline and an immediate heartbeat, so refreshing before each deadline expired could hold the daemon alive and keep --wait on WAITING indefinitely. The server now records when the re-roll or followup answer was collected, each served waiting page inherits only what remains of that one allowance, and a page served after the deadline renders stalled immediately and never starts its heartbeat. And a next hand the round could not load used to reload-loop the tab: GET /'s catch kept the file on disk, so /next-status stayed ready:true forever. --update now refuses a payload without a non-empty options array at the sender, and GET / discards an unloadable next file so the bounded wait resumes. AI-assisted (Cursor agent) under maintainer instruction. Co-authored-by: Cursor * Fix review finding: a stalled page recovers a late hand without a click The stall silenced heartbeats so the idle grace could reclaim the daemon, but that silence read as a closed tab: after a late --update, --wait saw the stale beat and reported PAGE CLOSED while the user sat on the Reload screen, so the agent abandoned the browser path the recovery UI exists for. The stall screen now keeps a beat-free /next-status watch that reloads into a delivered hand on its own (GET never beats, so an abandoned flow is still reclaimed), and --wait no longer concludes closure from a stale beat while an undelivered next hand sits on disk. AI-assisted (Cursor agent) under maintainer instruction. Co-authored-by: Cursor * Fix review finding: a delivered hand must not mask a closed page The mid-delivery suppression keyed on the next file existing, but a closed tab never claims that file, so an unconsumed delivery held --wait on WAITING indefinitely instead of reporting the closed flow. The suppression is now age-bound: a stalled page's watch reclaims a delivered hand within seconds, so a file still unclaimed after a 10s grace means no page is coming back and the stale beat reads as the closed page it is. AI-assisted (Cursor agent) under maintainer instruction. Co-authored-by: Cursor * Fix review finding: stamp the delivery clock at --update, not the copy --wait's mid-delivery grace reads the next file's mtime, but copyFileSync's timestamp behavior is the platform's business: a copy that preserves the source payload's older mtime would start the grace already spent and report PAGE CLOSED under a live stalled tab. --update now touches the delivered file itself, so delivery time is delivery time everywhere. AI-assisted (Cursor agent) under maintainer instruction. Co-authored-by: Cursor * Fix review findings: disable canon during the wait, validate --timeout The waiting and stall screens disabled only the re-roll buttons; the footer canon action stayed clickable, and a canon pick posted after --wait had consumed the re-roll could never be collected: it overwrote the answer, marked the table closed, and exited the daemon under the agent. Both disable sites now take the canon exit down with the re-roll buttons; a delivered hand reloads the page and serves it live again. And --timeout reached the lifetime timer unvalidated: NaN or a negative value disarmed the no-page exit and the daemon leaked. It now takes the default unless the value is a finite non-negative number, keeping 0 as the explicit wait-forever. AI-assisted (Cursor agent) under maintainer instruction. Co-authored-by: Cursor * Fix review finding: a second click must not renew the delivery deadline dealAgain left the re-roll and canon controls live through the answer POST and the 700ms fly-out, so a second click posted another re-roll and the server restamped awaitingNextSince, renewing the deadline this PR made non-renewable on refresh and on the stall screen. The controls now go quiet at the click itself, in dealAgain and in answer(), and the server stamps the allowance only on the transition into the wait, so a duplicate answer racing the disable keeps the first stamp. Regression coverage on both sides: the unit deadline test posts a duplicate re-roll mid-allowance and asserts the budget shrank instead of resetting, and the e2e stall test asserts both controls are disabled immediately after the click, before the fly-out. AI-assisted (Cursor agent) under maintainer instruction. Co-authored-by: Cursor * Fix review finding: a late delivery must survive its claim window --update could land a replacement hand after the stalled page went silent but moments before the daemon's idle deadline: the daemon exited before the page's 1.5s watch could claim the hand, orphaning a delivery --update had confirmed, and the next --wait reported a server failure. The idle exit now defers while an unclaimed next hand is younger than the claim grace --wait already reads (extracted as one shared constant), so the page's watch deals it and heartbeats resume; a file unclaimed past the grace still ends the daemon, bounded as before. Regression test: deliver at idle-deadline-minus-a-beat, assert the daemon survives past the deadline and serves the late hand. AI-assisted (Cursor agent) under maintainer instruction. Co-authored-by: Cursor * Fix review finding: the claim itself must hold the daemon The idle-exit hold read only the next file's freshness, but GET / deletes that file when it serves the claimed round, before the reloading page can post its first heartbeat: a lifetime tick in that gap saw no pending hand and a stale beat, and exited under the hand just claimed. GET / now stamps the claim when it consumes a pending hand, and the idle exit honors the same bounded grace from that stamp, so the reloading page gets its seconds to beat while an abandoned claim still ends the daemon at the grace. The claim-window regression test now also fetches after the claim, past another lifetime tick, and asserts the daemon survived the gap; verified it fails on the previous commit. AI-assisted (Cursor agent) under maintainer instruction. Co-authored-by: Cursor * Fix review finding: --wait must ride out the claim gap too The claim deletes the next file --wait's mid-delivery grace watches, and the reloading page has not beat yet, so --wait in that gap read the stale beat as PAGE CLOSED while the daemon was alive serving the dealt round, and the agent abandoned a browser session that had just recovered. GET / now persists the claim stamp into the per-key state file, and --wait's suppression honors it under the same bounded grace: a fresh claim stays WAITING, a claim nobody followed with a beat still reads as the closed page it is. Regression test drives --wait through the gap (claim with a stale beat: WAITING, not exit 4) and past it (backdated claim stamp: exit 4); verified it fails on the previous commit. AI-assisted (Cursor agent) under maintainer instruction. Co-authored-by: Cursor --------- Co-authored-by: Cursor Co-authored-by: Paul Bakaus --- skill/reference/new-work.md | 2 +- skill/scripts/serve-question.mjs | 274 +++++++++++++++++++--- tests/new-work-e2e.test.mjs | 179 ++++++++++++++ tests/serve-question.test.mjs | 388 ++++++++++++++++++++++++++++++- 4 files changed, 804 insertions(+), 39 deletions(-) diff --git a/skill/reference/new-work.md b/skill/reference/new-work.md index e247d2f56..7fbdd96a5 100644 --- a/skill/reference/new-work.md +++ b/skill/reference/new-work.md @@ -46,7 +46,7 @@ The script deals three of your structures; the dice pick which three reach the u 4. Run `node {{scripts_path}}/concept-seed.mjs --scope direction --mode ` and follow what it prints. No substitute, no skip: on a new or replacement world, writing artifact code before this script has run and its assignment is acknowledged is a contract violation, whatever the harness, the model, or the time pressure; the roll is what keeps every run from converging on the category default. The script assigns the direction to build and deals catalog challengers. Fuse each challenger before judging it: the challenger supplies the form and its system grammar, the product supplies every fact, clarity wins conflicts. Weigh fused challengers against the assigned direction on exactly two axes, audience identification and product clarity. Losing to strong grounded material is a valid outcome; beating a thin or tool-monoculture list is the point. Close with a verdict per challenger, decided before any borrowing: wins (beats the assigned direction on both axes; becomes the build candidate), competitive (holds one axis; stays a full alternate), or declined (loses both). A declined challenger is not spent: name the one discipline of its system the assigned direction lacks, and raise the assigned direction to match before presenting it. A donation transfers ambition and system discipline (a palette's total commitment, a grid's density courage, a form's structural honesty), never the challenger's clothes; a lifted motif is a costume note, not a raise, and one world owns the page. Write each raise into the presented direction as its own line, named for its donor; a raise nobody can read did not happen. 5. Present one direction, fully committed and already raised by the hand it beat, raises visible as named lines: world, first viewport, visitor path, signature interaction, cross-surface reach, honest risk. Route each challenger by verdict: winning and competitive challengers are full alternates with their QUALITY BAR cards and one-line case; declined challengers render demoted, compact and quiet, each carrying its verdict and what the direction kept from it, never full-size, never silently dropped, still adoptable on request. The verdict informs the user's choice, never pre-empts it; the demoted row is the hand's proof of judgment. A hand holds at most three full-card challengers: when the roll deals more, the three strongest join and the rest wait in the re-roll pool, noted in one line; dropping a challenger from the hand itself takes a named product-truth failure, disclosed. Add one card for your own top-ranked grounded candidate when it is not the assigned direction, kicker IMPECCABLE’S PICK, same anatomy as every card, with an honest risk line naming its familiarity when true: the strongest grounded direction is often where most runs in this category land, and the user deciding that trade is the point of showing it. Familiar and effective is a legitimate destination, not a failure of nerve; the pick card and the standing exit serve it at two depths. One pick card, never two, never a ranked list: a lineup of your candidates hands selection back to a taste function and invites the safest card. The pick never takes the lead position; when the dice assign your top candidate there is no pick card, and the assigned card notes it topped your list. Add re-roll with an optional one-line steer, in three registers: plain (a fresh hand, same spread), safer (your remaining conventional grounded candidates plus the canon against named competitors), bolder (foreign forms only, at full commitment). The register is the user's steering on the familiar-to-bold axis, never yours to pre-select; when the answer carries one, re-run the seed with `--register ` and the next `--reroll` round, and follow what it prints. A user saying "bolder" or "safer" while a direction round is open means these registers, never the bolder or harden commands. The two channels share this structure and differ only in richness: cards and boards on the decision page, names and one-liners through the structured tool, whose option list carries the assigned direction, the pick, the winning and competitive challengers, and the standing exit last; declined challengers fold into the assigned option's description as their kept lines, so the raise survives the text channel. -The standing exit: every direction round offers one quiet, permanent alternative, the category standard, played straight. It is the user's door, never yours: never recommend it, never weigh it against the roll, never let it soften the dealt directions; the counterweights bind the unchosen default, not the chosen one. When the user takes it (the canon action, a safer-steer, or plain words asking for the familiar or competitor-like path), convention becomes the commitment: ask once for two or three products this should sit alongside, make their craft level the bar, and execute the canon at full fidelity, without irony or smuggled quirk. Record a standing preference as a brand commitment in PRODUCT.md. Re-roll eliminates every direction already shown, grounded and challenger alike; after two consecutive re-rolls, ask what quality is missing. Re-roll on your own only on named factual grounds, when the assigned direction cannot carry the product's truth or task; taste is never grounds. The user may re-roll freely, and a user- or brief-pinned direction beats the roll, always. Present the decision visually: write an options payload with the assigned direction leading, its raised lines included; the pick card when one exists; the dealt challengers as alternates with their QUALITY BAR cards, verdicts, and kept lines; re-roll with its safer and bolder registers; steer; canon enabled; and `buildPath` carrying the recorded default with `toggle: true` whenever image generation exists (details in the build-path paragraph below). A degraded roll with no challengers still uses the page, as a single text-only card with re-roll. Give every card the same anatomy: thesis, palette, materials, first viewport, honest risk, and the challengers' case lines (`--schema` prints the exact shape); the page renders identity from these fields, demotes declined challengers to their row on its own, and a challenger's catalog image rides as labeled inspiration, never the promise of the build. Author `canonCard` too: the category standard as one honest card, same anatomy; the page keeps it subordinate, and the counterweights still bind you. Run `node {{scripts_path}}/serve-question.mjs --start --payload ` (`--schema` first for the payload shape). It daemonizes, prints the page URL and a key, and exits; open that URL for the user, in-app browser first, then the system opener, then showing the URL. Collect the choice with `--wait --key `, repeating while it exits 3; the ANSWER prints as JSON. Exit 4 means the page closed unanswered: re-present once through the structured question tool, and with no answer there either, proceed unattended with the assigned direction and state the assumptions. A harness that can leave a shell blocked in the background may run the script without `--start` and let it auto-open and block. Never predict the fallback: run the script, and only exit code 2 from starting it routes the decision to the structured tool; that exit is the fallback, never an error to retry. +The standing exit: every direction round offers one quiet, permanent alternative, the category standard, played straight. It is the user's door, never yours: never recommend it, never weigh it against the roll, never let it soften the dealt directions; the counterweights bind the unchosen default, not the chosen one. When the user takes it (the canon action, a safer-steer, or plain words asking for the familiar or competitor-like path), convention becomes the commitment: ask once for two or three products this should sit alongside, make their craft level the bar, and execute the canon at full fidelity, without irony or smuggled quirk. Record a standing preference as a brand commitment in PRODUCT.md. Re-roll eliminates every direction already shown, grounded and challenger alike; after two consecutive re-rolls, ask what quality is missing. Re-roll on your own only on named factual grounds, when the assigned direction cannot carry the product's truth or task; taste is never grounds. The user may re-roll freely, and a user- or brief-pinned direction beats the roll, always. Present the decision visually: write an options payload with the assigned direction leading, its raised lines included; the pick card when one exists; the dealt challengers as alternates with their QUALITY BAR cards, verdicts, and kept lines; re-roll with its safer and bolder registers; steer; canon enabled; and `buildPath` carrying the recorded default with `toggle: true` whenever image generation exists (details in the build-path paragraph below). A degraded roll with no challengers still uses the page, as a single text-only card with re-roll. Give every card the same anatomy: thesis, palette, materials, first viewport, honest risk, and the challengers' case lines (`--schema` prints the exact shape); the page renders identity from these fields, demotes declined challengers to their row on its own, and a challenger's catalog image rides as labeled inspiration, never the promise of the build. Author `canonCard` too: the category standard as one honest card, same anatomy; the page keeps it subordinate, and the counterweights still bind you. Run `node {{scripts_path}}/serve-question.mjs --start --payload ` (`--schema` first for the payload shape). It daemonizes, prints the page URL and a key, and exits; open that URL for the user, in-app browser first, then the system opener, then showing the URL. Collect the choice with `--wait --key `, repeating while it exits 3; the ANSWER prints as JSON. An ANSWER of `{"optionId":"reroll"}` keeps the server alive and the page open on a loading hand: rerun concept-seed with the same `--scope` and `--mode` plus `--from --reroll ` (1 on the first re-roll, counting up), build the next payload, deliver it with `--update --key --payload `, then return to `--wait` on that key. Never `--start` a second server or fall back to chat here: either strands the open tab on a hand that never arrives. Exit 4 means the page closed unanswered: re-present once through the structured question tool, and with no answer there either, proceed unattended with the assigned direction and state the assumptions. A harness that can leave a shell blocked in the background may run the script without `--start` and let it auto-open and block. Never predict the fallback: run the script, and only exit code 2 from starting it routes the decision to the structured tool; that exit is the fallback, never an error to retry. When image generation exists, every card also declares a `comp` path under `.impeccable/mocks/decision/`, the canon card included. Where the harness sandboxes its shell, start the page through the least-sandboxed command path it offers: a sandboxed shell cannot bind the board's port, and the first-attempt failure costs a retry every session. Serve the page first, then produce the comps; the page shimmer-waits per slot and the user may answer before they land. Each card's image is that direction's north-star comp at full fidelity under [visualize.md](visualize.md)'s comp discipline: the requested surface's first viewport, structure-led prompt, real product name and real content, no invented commercial claims, in that card's own palette, type character, and material world, committed all the way. Generation takes the same time at any fidelity, so an unfinished draft pays comp cost for draft quality; fairness between cards is equal fidelity in each card's own grammar, one surface, one aspect, never shared unfinishedness. The frame's aspect is the surface's own: portrait at device viewport for a native app or mobile-first surface, landscape for desktop web; the decision page adapts to either, and a phone screen comped landscape is a broken frame, not a neutral default. Produce in reading order, the assigned card, then the pick, then the full-card hand, then canon, each file written with its prompt sidecar the moment it is done, so a re-roll's spend front-loads onto the cards read first; declined challengers get no comp, their catalog thumb is their face. With parallel subagents, fan out one agent per card: each spawn is the shipped asset producer with a single-comp packet, that card's fields, PRODUCT.md, the shared frame, and the card's declared path, up to four in flight. Regenerate inline any slot still empty when its agent returns; drop without ceremony any slot still empty when the user answers. No other supervision is owed. Without parallel subagents, generate in the main thread after serving, same order, and let the harness's own generation display carry the progress; the wait for the answer follows the last file. The chosen card's comp is not spent by the choice: comp-led, it enters the comp round as compositional option one; code-led, it returns at the finish review as the critique reference, what the image dared that the build did not. Unchosen comps stay in `.impeccable/mocks/decision/` as the round's spent hand; they carry no approval and imply none. With no image generation, cards carry their identity in palette chips and facts, and that page is complete, not a lesser version; the page then also demotes every challenger's catalog art to a labeled thumbnail on its own, because salience must encode the verdict, never the accident of which cards have images. diff --git a/skill/scripts/serve-question.mjs b/skill/scripts/serve-question.mjs index 4e80b0027..7c4ff0812 100644 --- a/skill/scripts/serve-question.mjs +++ b/skill/scripts/serve-question.mjs @@ -95,9 +95,16 @@ * --stop --key K kill a daemonized question. * --update --key K --payload F deliver the next hand after a re-roll: the * live page swaps to loading cards when the user re-rolls, and - * reloads into this new payload the moment it lands. + * reloads into this new payload the moment it lands. Always the + * same key the round started with; a second --start serves a new + * URL and strands the open tab on a hand that never arrives. * - * node serve-question.mjs --payload question.json [--timeout 900] [--no-open] [--port 0] + * --timeout bounds the wait for a page to arrive, never the user's decision: + * once the page heartbeats, the server lives while the page does, and exits + * only after --idle-grace seconds (default 600) pass with no beat, wide + * enough to survive a closed laptop lid mid-decision. + * + * node serve-question.mjs --payload question.json [--timeout 900] [--idle-grace 600] [--no-open] [--port 0] */ import http from 'node:http'; import fs from 'node:fs'; @@ -120,11 +127,13 @@ if (process.env.IMPECCABLE_QUESTION_DISABLED) { } // Headless self-detection, applied only where a browser is actually wanted. // --no-open means the caller opens the URL itself, and --wait / --stop / -// --schema never open anything: --wait polls a daemon whose browser question -// was already settled at --start, --stop kills one, --schema prints text. A -// spurious exit 2 from those breaks the documented loop, which polls --wait -// while it exits 3 and reads --schema before building a payload. -const wantsBrowser = !hasFlag('no-open') && !hasFlag('wait') && !hasFlag('stop') && !hasFlag('schema'); +// --schema / --update never open anything: --wait polls a daemon whose +// browser question was already settled at --start, --stop kills one, +// --schema prints text, and --update hands the next round to a page that is +// already open. A spurious exit 2 from those breaks the documented loop, +// which polls --wait while it exits 3, reads --schema before building a +// payload, and delivers re-rolled hands with --update. +const wantsBrowser = !hasFlag('no-open') && !hasFlag('wait') && !hasFlag('stop') && !hasFlag('schema') && !hasFlag('update'); if (wantsBrowser && !process.env.IMPECCABLE_QUESTION_FORCE) { const headless = process.env.CI || @@ -176,7 +185,20 @@ function printAnswer(raw) { } const payloadPath = arg('payload'); -const timeoutSec = Number(arg('timeout', '900')); +// --timeout bounds only the wait for a page to open; 0 is the explicit +// wait-forever. A negative or unparseable value takes the default, so a +// typo cannot disarm the no-page exit and leak the daemon. +const timeoutArg = Number(arg('timeout', '900')); +const timeoutSec = Number.isFinite(timeoutArg) && timeoutArg >= 0 ? timeoutArg : 900; +// How long the server (and the page's own delivery deadline) outlive the +// last heartbeat; a zero, negative, or unparseable value takes the default. +const idleGraceArg = Number(arg('idle-grace', '600')); +const idleGraceMs = (Number.isFinite(idleGraceArg) && idleGraceArg > 0 ? idleGraceArg : 600) * 1000; +// How long a delivered next hand may sit unclaimed before it means no page +// is coming back: --wait reads it to keep a stalled page from counting as +// closed mid-delivery, and the daemon reads it to survive until the page's +// watch claims a hand delivered moments before the idle deadline. +const NEXT_CLAIM_GRACE_MS = 10000; const portArg = Number(arg('port', '0')); const QUESTION_DIR = path.join(process.cwd(), '.impeccable', 'questions'); const stateFile = (key) => path.join(QUESTION_DIR, `${key}.state.json`); @@ -243,7 +265,19 @@ if (hasFlag('wait')) { } try { const state = JSON.parse(fs.readFileSync(stateFile(key), 'utf8')); - if (state.lastBeat && Date.now() - state.lastBeat > 15000) { sawClose = true; break; } + // A silent page is not a closed one while a freshly delivered next + // hand sits unclaimed: a stalled page stops beating by design and its + // watch reloads, beating again, within seconds of the file landing. + // The suppression is age-bound because a closed tab never claims the + // hand: a file still there after the grace means no page is coming. + const midDelivery = (() => { + try { if (Date.now() - fs.statSync(path.join(QUESTION_DIR, `${key}.next.json`)).mtimeMs < NEXT_CLAIM_GRACE_MS) return true; } + catch { /* nothing delivered */ } + // The claim deletes that file before the reloaded page can beat: the + // claim stamp the server persisted covers the same bounded gap. + return Boolean(state.claimedAt) && Date.now() - state.claimedAt < NEXT_CLAIM_GRACE_MS; + })(); + if (!midDelivery && state.lastBeat && Date.now() - state.lastBeat > 15000) { sawClose = true; break; } } catch { /* state mid-write */ } await new Promise((r) => setTimeout(r, 1000)); } @@ -280,10 +314,33 @@ if (hasFlag('stop')) { if (hasFlag('update')) { const key = arg('key'); if (!key || !payloadPath) { console.error('serve-question: --update needs --key and --payload'); process.exit(1); } - JSON.parse(fs.readFileSync(payloadPath, 'utf8')); - try { process.kill(JSON.parse(fs.readFileSync(stateFile(key), 'utf8')).pid, 0); } - catch { console.error('serve-question: no live question server for that key'); process.exit(2); } - fs.copyFileSync(payloadPath, path.join(QUESTION_DIR, `${key}.next.json`)); + // A hand the server cannot load must fail here, at the sender: delivered + // anyway, the page would see ready:true for a round that never renders. + const nextRound = JSON.parse(fs.readFileSync(payloadPath, 'utf8')); + if (!nextRound || !Array.isArray(nextRound.options) || nextRound.options.length === 0) { + console.error('serve-question: --update payload needs an options array; nothing was delivered. Fix the payload and rerun --update on the same key.'); + process.exit(1); + } + // Liveness mirrors --wait: a fresh page heartbeat is the primary proof, the + // kill probe is secondary, and EPERM means a sandbox blocked the signal, + // never a dead server. This is the documented re-roll delivery step, so a + // false "no live server" here strands the page mid-shuffle. + const live = (() => { + try { + const state = JSON.parse(fs.readFileSync(stateFile(key), 'utf8')); + if (state.lastBeat && Date.now() - state.lastBeat < 12000) return true; + try { process.kill(state.pid, 0); return true; } + catch (err) { return err.code === 'EPERM'; } + } catch { return false; } + })(); + if (!live) { console.error('serve-question: no live question server for that key; the page it served is gone too. Re-present the round with --start and a fresh key, or fall back to the structured question tool.'); process.exit(2); } + const deliveredFile = path.join(QUESTION_DIR, `${key}.next.json`); + fs.copyFileSync(payloadPath, deliveredFile); + // The file's mtime is the delivery clock --wait's grace reads: stamp it + // here, because a copy that preserves the source payload's older mtime + // would start the grace already spent. + const deliveredAt = new Date(); + fs.utimesSync(deliveredFile, deliveredAt, deliveredAt); console.log('next round delivered; the page reloads itself'); process.exit(0); } @@ -301,7 +358,8 @@ if (hasFlag('start')) { const logFd = fs.openSync(logFile, 'a'); const child = spawn(process.execPath, [ fileURLToPath(import.meta.url), '--payload', payloadPath, '--detached-serve', '--key', key, - '--timeout', String(timeoutSec), ...(hasFlag('open') ? [] : ['--no-open']), + '--timeout', String(timeoutSec), ...(arg('idle-grace') ? ['--idle-grace', arg('idle-grace')] : []), + ...(hasFlag('open') ? [] : ['--no-open']), ], { detached: true, stdio: ['ignore', logFd, logFd] }); child.unref(); fs.closeSync(logFd); @@ -338,6 +396,13 @@ let localImages = []; // even when the round never rendered a toggle. let buildPathDefault = null; let liveBuildPath = null; +// True between a collected re-roll or followup answer and the --update that +// replaces the round: the window where GET / must serve the wait, not the +// answered cards. The timestamp anchors the delivery deadline server-side, +// so a native refresh re-enters the wait with the time already spent, never +// with a fresh allowance. +let awaitingNext = false; +let awaitingNextSince = 0; function loadRound(json) { const parsed = JSON.parse(json); @@ -387,6 +452,9 @@ function loadRound(json) { ? { value: parsed.buildPath.value, toggle: parsed.buildPath.toggle === true } : null; liveBuildPath = buildPathDefault?.value ?? null; + // Last: a round that failed to load anywhere above must leave the waiting + // window open, never resurrect the answered cards. + awaitingNext = false; } try { loadRound(raw); } catch (error) { console.error(`serve-question: ${error.message}`); process.exit(1); } const detachedKey = hasFlag('detached-serve') ? arg('key') : null; @@ -394,7 +462,11 @@ const nextFile = () => detachedKey ? path.join(QUESTION_DIR, `${detachedKey}.nex const esc = (s) => String(s ?? '').replace(/[&<>"]/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"' }[c])); -function page() { +function page(waiting = false) { + // The delivery deadline survives refreshes: a waiting page gets whatever + // remains of the original allowance, so reloading cannot renew it. Spent + // means the page renders already stalled and never starts a heartbeat. + const waitBudgetMs = waiting ? Math.max(0, awaitingNextSince + idleGraceMs - Date.now()) : idleGraceMs; const flipChip = (label) => ``; const expandChip = ``; // Structured anatomy: chips and one-line facts render when the payload @@ -866,6 +938,7 @@ function page() { not a recommendation. */ #canon { align-self: center; padding: 0 4px; font-family: var(--ks-mono); font-size: .66rem; letter-spacing: .08em; text-transform: uppercase; color: inherit; opacity: .45; background: transparent; border: none; border-bottom: 1px dotted currentColor; cursor: pointer; transition: opacity .2s ease; } #canon:hover { opacity: .85; } + #canon[disabled] { opacity: .18; cursor: default; } .card.skeleton .media { background: var(--ks-graphite); } .shimmer { width: 100%; height: 100%; background: linear-gradient(100deg, var(--ks-graphite) 35%, var(--ks-graphite-2) 50%, var(--ks-graphite) 65%); background-size: 220% 100%; animation: shimmer 1.4s linear infinite; } .card.skeleton .line { height: 11px; border-radius: 4px; background: linear-gradient(100deg, var(--ks-graphite) 35%, var(--ks-graphite-2) 50%, var(--ks-graphite) 65%); background-size: 220% 100%; animation: shimmer 1.4s linear infinite; } @@ -877,6 +950,8 @@ function page() { @keyframes shimmer { from { background-position: 120% 0; } to { background-position: -80% 0; } } @media (prefers-reduced-motion: reduce) { .shimmer, .card.skeleton .line { animation: none; } } .done { display: flex; flex-direction: column; align-items: center; gap: 1rem; padding: 7rem 1rem; font-family: var(--ks-font-display); font-size: 1.4rem; color: var(--ks-champagne); text-align: center; } + .stall { width: 100%; display: flex; flex-direction: column; align-items: center; gap: 1.2rem; padding: 4.5rem 1rem; font-family: var(--ks-font-display); font-size: 1.4rem; color: var(--ks-champagne); text-align: center; } + .stall .choose { align-self: center; margin-top: 0; } @@ -945,11 +1020,22 @@ ${buildPath?.toggle ? `