From e15d8e122f6ce4d95ca3846646da7f82430a29a6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 4 Aug 2026 18:30:42 +0000 Subject: [PATCH] Sync generated provider output --- .../skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .../skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .../skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .../skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .../skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .grok/skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .kiro/skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .../skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .pi/skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .../skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .../skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .../skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .trae/skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .vibe/skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- .../skills/impeccable/reference/new-work.md | 2 +- .../impeccable/scripts/lib/roll-selection.mjs | 45 +++++++++++-------- 30 files changed, 405 insertions(+), 300 deletions(-) diff --git a/.agents/skills/impeccable/reference/new-work.md b/.agents/skills/impeccable/reference/new-work.md index fa1fb24dd..755d734e3 100644 --- a/.agents/skills/impeccable/reference/new-work.md +++ b/.agents/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.agents/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.agents/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.agents/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.claude/skills/impeccable/reference/new-work.md b/.claude/skills/impeccable/reference/new-work.md index 0ea9a6d21..5161d25cb 100644 --- a/.claude/skills/impeccable/reference/new-work.md +++ b/.claude/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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.claude/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.claude/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.claude/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.cursor/skills/impeccable/reference/new-work.md b/.cursor/skills/impeccable/reference/new-work.md index 0158637bd..99ed558b5 100644 --- a/.cursor/skills/impeccable/reference/new-work.md +++ b/.cursor/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.cursor/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.cursor/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.cursor/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.gemini/skills/impeccable/reference/new-work.md b/.gemini/skills/impeccable/reference/new-work.md index a09b2e68a..77ec7396f 100644 --- a/.gemini/skills/impeccable/reference/new-work.md +++ b/.gemini/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.gemini/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.gemini/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.gemini/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.github/skills/impeccable/reference/new-work.md b/.github/skills/impeccable/reference/new-work.md index a897e92d2..a249c27ad 100644 --- a/.github/skills/impeccable/reference/new-work.md +++ b/.github/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.github/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.github/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.github/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.grok/skills/impeccable/reference/new-work.md b/.grok/skills/impeccable/reference/new-work.md index 98a628227..45027be6e 100644 --- a/.grok/skills/impeccable/reference/new-work.md +++ b/.grok/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.grok/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.grok/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.grok/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.kiro/skills/impeccable/reference/new-work.md b/.kiro/skills/impeccable/reference/new-work.md index d716b4359..479e37b10 100644 --- a/.kiro/skills/impeccable/reference/new-work.md +++ b/.kiro/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.kiro/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.kiro/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.kiro/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.opencode/skills/impeccable/reference/new-work.md b/.opencode/skills/impeccable/reference/new-work.md index 531bd490c..290c53138 100644 --- a/.opencode/skills/impeccable/reference/new-work.md +++ b/.opencode/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.opencode/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.opencode/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.opencode/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.pi/skills/impeccable/reference/new-work.md b/.pi/skills/impeccable/reference/new-work.md index 4964ab781..57437e7ba 100644 --- a/.pi/skills/impeccable/reference/new-work.md +++ b/.pi/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.pi/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.pi/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.pi/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.qoder/skills/impeccable/reference/new-work.md b/.qoder/skills/impeccable/reference/new-work.md index fb8ddb923..983ce2b96 100644 --- a/.qoder/skills/impeccable/reference/new-work.md +++ b/.qoder/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.qoder/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.qoder/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.qoder/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.rovodev/skills/impeccable/reference/new-work.md b/.rovodev/skills/impeccable/reference/new-work.md index 6a62f6715..9b3edee90 100644 --- a/.rovodev/skills/impeccable/reference/new-work.md +++ b/.rovodev/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.rovodev/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.rovodev/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.rovodev/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.trae-cn/skills/impeccable/reference/new-work.md b/.trae-cn/skills/impeccable/reference/new-work.md index 8115cd9d9..f47a72b20 100644 --- a/.trae-cn/skills/impeccable/reference/new-work.md +++ b/.trae-cn/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.trae-cn/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.trae-cn/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.trae-cn/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.trae/skills/impeccable/reference/new-work.md b/.trae/skills/impeccable/reference/new-work.md index 1d8c11bac..f70c82584 100644 --- a/.trae/skills/impeccable/reference/new-work.md +++ b/.trae/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.trae/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.trae/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.trae/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/.vibe/skills/impeccable/reference/new-work.md b/.vibe/skills/impeccable/reference/new-work.md index 620301c57..bda245059 100644 --- a/.vibe/skills/impeccable/reference/new-work.md +++ b/.vibe/skills/impeccable/reference/new-work.md @@ -84,7 +84,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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/.vibe/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/.vibe/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/.vibe/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /** diff --git a/plugin/skills/impeccable/reference/new-work.md b/plugin/skills/impeccable/reference/new-work.md index 0ea9a6d21..5161d25cb 100644 --- a/plugin/skills/impeccable/reference/new-work.md +++ b/plugin/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. 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 comp at identical dimensions after every region, and when a region keeps losing that comparison, stop recreating it in code and produce it as a rendered asset composited into the page. 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. 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. 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/scripts/lib/roll-selection.mjs b/plugin/skills/impeccable/scripts/lib/roll-selection.mjs index e3c9efbb8..6fab19396 100644 --- a/plugin/skills/impeccable/scripts/lib/roll-selection.mjs +++ b/plugin/skills/impeccable/scripts/lib/roll-selection.mjs @@ -96,31 +96,38 @@ function* rank(items, input, idFor = item => item.id) { .map(entry => entry.item); } -// Two independent exclusions, and either one is enough to hold a world back. -// Rating grades quality: a 3-star earns a second ticket, a 1-star marginal keep -// leaves the pool. Breadth says whether a world can serve an arbitrary build at -// all, so a niche world leaves however good it is, keeping its approval for -// direct briefs. Breadth was split out of rating because the only way to hold a -// narrow world back used to be calling it marginal, which made "excellent but -// narrow" unrecordable and corrupted ratings as a calibration signal. +// Rating sets how many tickets a world holds; breadth decides whether it draws +// at all. A niche world leaves the pool however good it is, keeping its approval +// for direct briefs. Breadth was split out of rating because the only way to +// hold a narrow world back used to be calling it marginal, which made "excellent +// but narrow" unrecordable and corrupted ratings as a calibration signal. +// +// Two tickets for a 3-star, one for everything else, was too sharp. Measured +// against the catalog as it stood: 3-star worlds absorbed 57% of the graphic +// draw from 65 of 163 eligible worlds, 46% of atmosphere from 13 of 43, and +// 75% of interaction from 15 of 25. The reviewer's complaint, that the same +// worlds keep coming back, is what a rating multiplier does to a pool whose +// thinnest tier holds 25 worlds. +// +// So a 3-star no longer outdraws a 2-star, and a 1-star draws at half rather +// than not at all. A marginal keep is still worth showing sometimes: the +// judgement it records is "narrow or unexceptional", not "wrong", and excluding +// it entirely made a rating do a job breadth already does properly. +const RATING_TICKETS = { 1: 1, 2: 2, 3: 2 }; +const ticketsForRating = rating => RATING_TICKETS[rating] ?? 2; + function challengerTickets(pool) { return pool.flatMap(concept => { - const rating = concept.review?.rating; - if (rating === 1 || concept.review?.breadth === 'niche') return []; - return rating === 3 - ? [{ concept, ticket: 0 }, { concept, ticket: 1 }] - : [{ concept, ticket: 0 }]; + if (concept.review?.breadth === 'niche') return []; + return Array.from({ length: ticketsForRating(concept.review?.rating) }, + (_, ticket) => ({ concept, ticket })); }); } function compositionTickets(pool) { - return pool.flatMap(composition => { - const rating = composition.review?.rating; - if (rating === 1) return []; - return rating === 3 - ? [{ composition, ticket: 0 }, { composition, ticket: 1 }] - : [{ composition, ticket: 0 }]; - }); + return pool.flatMap(composition => Array.from( + { length: ticketsForRating(composition.review?.rating) }, + (_, ticket) => ({ composition, ticket }))); } /**