@12ui/design 0.2.56 → 0.2.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +1 -1
- package/dist/branch-client.d.ts +2 -0
- package/dist/branch-client.d.ts.map +1 -1
- package/dist/branch-client.js +1 -0
- package/dist/branch-client.js.map +1 -1
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +1 -0
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli-convert-command.d.ts.map +1 -1
- package/dist/cli-convert-command.js +110 -15
- package/dist/cli-convert-command.js.map +1 -1
- package/dist/cli-corpus-command.d.ts.map +1 -1
- package/dist/cli-corpus-command.js +5 -2
- package/dist/cli-corpus-command.js.map +1 -1
- package/dist/cli-corpus-evidence.d.ts.map +1 -1
- package/dist/cli-corpus-evidence.js +2 -1
- package/dist/cli-corpus-evidence.js.map +1 -1
- package/dist/cli-corpus-reference-downloads.d.ts +1 -0
- package/dist/cli-corpus-reference-downloads.d.ts.map +1 -1
- package/dist/cli-corpus-reference-downloads.js +13 -3
- package/dist/cli-corpus-reference-downloads.js.map +1 -1
- package/dist/cli-corpus-types.d.ts +2 -0
- package/dist/cli-corpus-types.d.ts.map +1 -1
- package/dist/cli-help/design.d.ts +1 -1
- package/dist/cli-help/design.d.ts.map +1 -1
- package/dist/cli-help/design.js +6 -2
- package/dist/cli-help/design.js.map +1 -1
- package/dist/cli-help/index.d.ts +1 -1
- package/dist/cli-improve-command.d.ts.map +1 -1
- package/dist/cli-improve-command.js +68 -5
- package/dist/cli-improve-command.js.map +1 -1
- package/dist/cli-usage.js +2 -2
- package/dist/concept-input.d.ts +21 -0
- package/dist/concept-input.d.ts.map +1 -1
- package/dist/concept-input.js +32 -10
- package/dist/concept-input.js.map +1 -1
- package/dist/conversion-client.d.ts +39 -1
- package/dist/conversion-client.d.ts.map +1 -1
- package/dist/conversion-client.js +205 -3
- package/dist/conversion-client.js.map +1 -1
- package/dist/corpus-client.d.ts +7 -1
- package/dist/corpus-client.d.ts.map +1 -1
- package/dist/corpus-client.js +6 -2
- package/dist/corpus-client.js.map +1 -1
- package/dist/corpus-reference-download-retry.d.ts +68 -0
- package/dist/corpus-reference-download-retry.d.ts.map +1 -0
- package/dist/corpus-reference-download-retry.js +123 -0
- package/dist/corpus-reference-download-retry.js.map +1 -0
- package/dist/corpus-request-error.d.ts +17 -0
- package/dist/corpus-request-error.d.ts.map +1 -0
- package/dist/corpus-request-error.js +21 -0
- package/dist/corpus-request-error.js.map +1 -0
- package/dist/draft-run.d.ts +9 -0
- package/dist/draft-run.d.ts.map +1 -1
- package/dist/draft-run.js +22 -5
- package/dist/draft-run.js.map +1 -1
- package/dist/draft-workspace.d.ts +2 -1
- package/dist/draft-workspace.d.ts.map +1 -1
- package/dist/draft-workspace.js.map +1 -1
- package/dist/hosted-draft-identity.d.ts +1 -0
- package/dist/hosted-draft-identity.d.ts.map +1 -1
- package/dist/hosted-draft-identity.js +1 -0
- package/dist/hosted-draft-identity.js.map +1 -1
- package/dist/improve-added-specs.d.ts +9 -0
- package/dist/improve-added-specs.d.ts.map +1 -1
- package/dist/improve-added-specs.js +28 -7
- package/dist/improve-added-specs.js.map +1 -1
- package/dist/improve-bootstrap-secret.d.ts +35 -0
- package/dist/improve-bootstrap-secret.d.ts.map +1 -0
- package/dist/improve-bootstrap-secret.js +61 -0
- package/dist/improve-bootstrap-secret.js.map +1 -0
- package/dist/improve-capture-redirect.d.ts +46 -0
- package/dist/improve-capture-redirect.d.ts.map +1 -0
- package/dist/improve-capture-redirect.js +68 -0
- package/dist/improve-capture-redirect.js.map +1 -0
- package/dist/improve-concept.d.ts +14 -1
- package/dist/improve-concept.d.ts.map +1 -1
- package/dist/improve-concept.js +29 -8
- package/dist/improve-concept.js.map +1 -1
- package/dist/improve-conversion-attempts.d.ts +9 -5
- package/dist/improve-conversion-attempts.d.ts.map +1 -1
- package/dist/improve-conversion-attempts.js +6 -1
- package/dist/improve-conversion-attempts.js.map +1 -1
- package/dist/improve-conversion-stage.d.ts +7 -0
- package/dist/improve-conversion-stage.d.ts.map +1 -1
- package/dist/improve-conversion-stage.js +188 -171
- package/dist/improve-conversion-stage.js.map +1 -1
- package/dist/improve-convert-progress.d.ts +36 -0
- package/dist/improve-convert-progress.d.ts.map +1 -0
- package/dist/improve-convert-progress.js +43 -0
- package/dist/improve-convert-progress.js.map +1 -0
- package/dist/improve-convert-resilience.d.ts +44 -53
- package/dist/improve-convert-resilience.d.ts.map +1 -1
- package/dist/improve-convert-resilience.js +51 -58
- package/dist/improve-convert-resilience.js.map +1 -1
- package/dist/improve-delivery-stages.d.ts.map +1 -1
- package/dist/improve-delivery-stages.js +4 -0
- package/dist/improve-delivery-stages.js.map +1 -1
- package/dist/improve-generation-stages.d.ts.map +1 -1
- package/dist/improve-generation-stages.js +32 -3
- package/dist/improve-generation-stages.js.map +1 -1
- package/dist/improve-icon-svg.d.ts +47 -0
- package/dist/improve-icon-svg.d.ts.map +1 -0
- package/dist/improve-icon-svg.js +83 -0
- package/dist/improve-icon-svg.js.map +1 -0
- package/dist/improve-kit-ignore.d.ts +32 -0
- package/dist/improve-kit-ignore.d.ts.map +1 -0
- package/dist/improve-kit-ignore.js +111 -0
- package/dist/improve-kit-ignore.js.map +1 -0
- package/dist/improve-kit-readme.d.ts.map +1 -1
- package/dist/improve-kit-readme.js +101 -11
- package/dist/improve-kit-readme.js.map +1 -1
- package/dist/improve-kit-stall.d.ts +48 -2
- package/dist/improve-kit-stall.d.ts.map +1 -1
- package/dist/improve-kit-stall.js +167 -15
- package/dist/improve-kit-stall.js.map +1 -1
- package/dist/improve-kit-status.d.ts +36 -0
- package/dist/improve-kit-status.d.ts.map +1 -1
- package/dist/improve-kit-status.js +74 -4
- package/dist/improve-kit-status.js.map +1 -1
- package/dist/improve-options.d.ts +6 -0
- package/dist/improve-options.d.ts.map +1 -1
- package/dist/improve-options.js +3 -0
- package/dist/improve-options.js.map +1 -1
- package/dist/improve-plan-annotated-render.d.ts +13 -1
- package/dist/improve-plan-annotated-render.d.ts.map +1 -1
- package/dist/improve-plan-annotated-render.js +21 -0
- package/dist/improve-plan-annotated-render.js.map +1 -1
- package/dist/improve-plan-annotator.d.ts +5 -0
- package/dist/improve-plan-annotator.d.ts.map +1 -1
- package/dist/improve-plan-annotator.js +1 -0
- package/dist/improve-plan-annotator.js.map +1 -1
- package/dist/improve-run-summary.d.ts.map +1 -1
- package/dist/improve-run-summary.js +51 -5
- package/dist/improve-run-summary.js.map +1 -1
- package/dist/improve-stage-shared.d.ts +39 -1
- package/dist/improve-stage-shared.d.ts.map +1 -1
- package/dist/improve-stage-shared.js +80 -3
- package/dist/improve-stage-shared.js.map +1 -1
- package/dist/improve-terminal-event.d.ts.map +1 -1
- package/dist/improve-terminal-event.js +7 -1
- package/dist/improve-terminal-event.js.map +1 -1
- package/dist/improve-token-patch.d.ts +2 -0
- package/dist/improve-token-patch.d.ts.map +1 -1
- package/dist/improve-token-patch.js +23 -5
- package/dist/improve-token-patch.js.map +1 -1
- package/dist/improve-workspace.d.ts +84 -7
- package/dist/improve-workspace.d.ts.map +1 -1
- package/dist/improve-workspace.js +16 -1
- package/dist/improve-workspace.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +123 -0
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/mcp-tool-definitions.js +1 -1
- package/dist/mcp-tool-definitions.js.map +1 -1
- package/dist/mcp-tool-handler.d.ts.map +1 -1
- package/dist/mcp-tool-handler.js +3 -0
- package/dist/mcp-tool-handler.js.map +1 -1
- package/dist/redesign-capture.d.ts +1 -0
- package/dist/redesign-capture.d.ts.map +1 -1
- package/dist/redesign-capture.js +6 -0
- package/dist/redesign-capture.js.map +1 -1
- package/dist/responsive-alternative-materializer.d.ts +19 -0
- package/dist/responsive-alternative-materializer.d.ts.map +1 -0
- package/dist/responsive-alternative-materializer.js +76 -0
- package/dist/responsive-alternative-materializer.js.map +1 -0
- package/open-design.json +2 -2
- package/package.json +1 -1
- package/skills/12ui-design/SKILL.md +7 -1
- package/skills/12ui-design/improve.md +20 -5
- package/skills/12ui-design/inspire.md +1 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Icon SVGs a lane can actually ship (F30).
|
|
3
|
+
*
|
|
4
|
+
* The corpus glyph a LayerDoc carries in `iconSvg` paints with
|
|
5
|
+
* `currentColor`, which resolves against the *referencing* document. Written
|
|
6
|
+
* to `plan/assets/` and used the way the kit README tells a lane to use an
|
|
7
|
+
* asset — an external `<img>`, a `background-image`, a `url()` — there is no
|
|
8
|
+
* inherited colour, so every planned accent collapsed to black: two wave-2
|
|
9
|
+
* lanes shipped black icons on a dark rail before catching it at the
|
|
10
|
+
* screenshot step, and both invented CSS masks independently.
|
|
11
|
+
*
|
|
12
|
+
* The colour is not a guess: the icon layer declares it (`color`), so the
|
|
13
|
+
* plan writes that colour into an `<img>`-safe file and keeps the
|
|
14
|
+
* `currentColor` original beside it as `-inline.svg` for the inline and mask
|
|
15
|
+
* uses where inheriting is the point. When the design declares no colour
|
|
16
|
+
* there is nothing to plumb, so only the inline variant is written and the
|
|
17
|
+
* spec says so rather than shipping a file that renders black.
|
|
18
|
+
*/
|
|
19
|
+
/** The declared colour of an icon layer, or nothing when none is usable. */
|
|
20
|
+
export declare const improveDeclaredIconColor: (value: unknown) => string | undefined;
|
|
21
|
+
export type ImproveIconSvgFile = {
|
|
22
|
+
/** File name inside `plan/assets/`. */
|
|
23
|
+
name: string;
|
|
24
|
+
svg: string;
|
|
25
|
+
/** `img` is safe as an external file; `inline` needs a colour at the call site. */
|
|
26
|
+
usage: 'img' | 'inline';
|
|
27
|
+
};
|
|
28
|
+
export type ImproveIconSvgVariants = {
|
|
29
|
+
files: ImproveIconSvgFile[];
|
|
30
|
+
/** The file the Added spec names as the asset. */
|
|
31
|
+
primary: ImproveIconSvgFile;
|
|
32
|
+
/** The `currentColor` sibling, when one was written. */
|
|
33
|
+
inline?: ImproveIconSvgFile;
|
|
34
|
+
color?: string;
|
|
35
|
+
/** One sentence for the spec and the plan: which file goes where. */
|
|
36
|
+
note: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* The files to write for one icon layer. `stem` is the asset name without its
|
|
40
|
+
* extension, e.g. `added-014-user`.
|
|
41
|
+
*/
|
|
42
|
+
export declare const improveIconSvgVariants: (args: {
|
|
43
|
+
svg: string;
|
|
44
|
+
color: unknown;
|
|
45
|
+
stem: string;
|
|
46
|
+
}) => ImproveIconSvgVariants;
|
|
47
|
+
//# sourceMappingURL=improve-icon-svg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-icon-svg.d.ts","sourceRoot":"","sources":["../src/improve-icon-svg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAaH,4EAA4E;AAC5E,eAAO,MAAM,wBAAwB,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,SAKlE,CAAC;AAMF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,mFAAmF;IACnF,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,kDAAkD;IAClD,OAAO,EAAE,kBAAkB,CAAC;IAC5B,wDAAwD;IACxD,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,KAAG,sBAsCH,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Icon SVGs a lane can actually ship (F30).
|
|
3
|
+
*
|
|
4
|
+
* The corpus glyph a LayerDoc carries in `iconSvg` paints with
|
|
5
|
+
* `currentColor`, which resolves against the *referencing* document. Written
|
|
6
|
+
* to `plan/assets/` and used the way the kit README tells a lane to use an
|
|
7
|
+
* asset — an external `<img>`, a `background-image`, a `url()` — there is no
|
|
8
|
+
* inherited colour, so every planned accent collapsed to black: two wave-2
|
|
9
|
+
* lanes shipped black icons on a dark rail before catching it at the
|
|
10
|
+
* screenshot step, and both invented CSS masks independently.
|
|
11
|
+
*
|
|
12
|
+
* The colour is not a guess: the icon layer declares it (`color`), so the
|
|
13
|
+
* plan writes that colour into an `<img>`-safe file and keeps the
|
|
14
|
+
* `currentColor` original beside it as `-inline.svg` for the inline and mask
|
|
15
|
+
* uses where inheriting is the point. When the design declares no colour
|
|
16
|
+
* there is nothing to plumb, so only the inline variant is written and the
|
|
17
|
+
* spec says so rather than shipping a file that renders black.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Hex, functional, or a bare CSS ident. The pattern excludes quotes, angle
|
|
21
|
+
* brackets and ampersands, so a value that passes is safe in an attribute.
|
|
22
|
+
*/
|
|
23
|
+
const COLOR_FORM = /^(?:#[0-9a-f]{3,8}|(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([-0-9a-z%.,/ ]*\)|[a-z]{3,20})$/iu;
|
|
24
|
+
/** Names that inherit or paint nothing: they cannot colour a standalone file. */
|
|
25
|
+
const UNUSABLE = new Set([
|
|
26
|
+
'currentcolor', 'inherit', 'initial', 'unset', 'revert', 'revert-layer', 'transparent', 'none',
|
|
27
|
+
]);
|
|
28
|
+
/** The declared colour of an icon layer, or nothing when none is usable. */
|
|
29
|
+
export const improveDeclaredIconColor = (value) => {
|
|
30
|
+
if (typeof value !== 'string')
|
|
31
|
+
return undefined;
|
|
32
|
+
const trimmed = value.trim();
|
|
33
|
+
if (!trimmed || !COLOR_FORM.test(trimmed))
|
|
34
|
+
return undefined;
|
|
35
|
+
return UNUSABLE.has(trimmed.toLowerCase()) ? undefined : trimmed;
|
|
36
|
+
};
|
|
37
|
+
/** Separate literals: a `/g/` regex carries `lastIndex` between `test` calls. */
|
|
38
|
+
const HAS_CURRENT_COLOR = /currentcolor/iu;
|
|
39
|
+
const EVERY_CURRENT_COLOR = /currentcolor/giu;
|
|
40
|
+
/**
|
|
41
|
+
* The files to write for one icon layer. `stem` is the asset name without its
|
|
42
|
+
* extension, e.g. `added-014-user`.
|
|
43
|
+
*/
|
|
44
|
+
export const improveIconSvgVariants = (args) => {
|
|
45
|
+
const svg = args.svg.trim();
|
|
46
|
+
const color = improveDeclaredIconColor(args.color);
|
|
47
|
+
const imgName = `${args.stem}.svg`;
|
|
48
|
+
const inlineName = `${args.stem}-inline.svg`;
|
|
49
|
+
if (!HAS_CURRENT_COLOR.test(svg)) {
|
|
50
|
+
const primary = { name: imgName, svg, usage: 'img' };
|
|
51
|
+
return {
|
|
52
|
+
files: [primary],
|
|
53
|
+
primary,
|
|
54
|
+
...(color ? { color } : {}),
|
|
55
|
+
note: `\`${imgName}\` carries its own colours: it is safe as an \`<img>\`, a`
|
|
56
|
+
+ ' `background-image`, or inlined.',
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (!color) {
|
|
60
|
+
const primary = { name: inlineName, svg, usage: 'inline' };
|
|
61
|
+
return {
|
|
62
|
+
files: [primary],
|
|
63
|
+
primary,
|
|
64
|
+
inline: primary,
|
|
65
|
+
note: `The design declares no colour for this icon, so only \`${inlineName}\` is written and`
|
|
66
|
+
+ ' it paints with `currentColor`. Inline it, or use it as a `mask-image` with a token'
|
|
67
|
+
+ ' colour — as an external `<img>` it renders black.',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const img = { name: imgName, svg: svg.replace(EVERY_CURRENT_COLOR, color), usage: 'img' };
|
|
71
|
+
const inline = { name: inlineName, svg, usage: 'inline' };
|
|
72
|
+
return {
|
|
73
|
+
files: [img, inline],
|
|
74
|
+
primary: img,
|
|
75
|
+
inline,
|
|
76
|
+
color,
|
|
77
|
+
note: `Use \`${imgName}\` for an external \`<img>\`, \`background-image\`, or \`url()\`:`
|
|
78
|
+
+ ` its fill and stroke are the design's declared \`${color}\`. Use \`${inlineName}\``
|
|
79
|
+
+ ' (`currentColor`) only inlined in the markup or as a `mask-image` where the call site'
|
|
80
|
+
+ ' sets the colour.',
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=improve-icon-svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-icon-svg.js","sourceRoot":"","sources":["../src/improve-icon-svg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;GAGG;AACH,MAAM,UAAU,GAAG,qGAAqG,CAAC;AAEzH,iFAAiF;AACjF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACvB,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM;CAC/F,CAAC,CAAC;AAEH,4EAA4E;AAC5E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAc,EAAsB,EAAE;IAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AACnE,CAAC,CAAC;AAEF,iFAAiF;AACjF,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAC3C,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAqB9C;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAItC,EAA0B,EAAE;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,MAAM,CAAC;IACnC,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,IAAI,aAAa,CAAC;IAC7C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,OAAO,GAAuB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACzE,OAAO;YACL,KAAK,EAAE,CAAC,OAAO,CAAC;YAChB,OAAO;YACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,IAAI,EAAE,KAAK,OAAO,2DAA2D;kBACzE,kCAAkC;SACvC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,OAAO,GAAuB,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC/E,OAAO;YACL,KAAK,EAAE,CAAC,OAAO,CAAC;YAChB,OAAO;YACP,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,0DAA0D,UAAU,mBAAmB;kBACzF,qFAAqF;kBACrF,oDAAoD;SACzD,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAuB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC9G,MAAM,MAAM,GAAuB,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC9E,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,GAAG;QACZ,MAAM;QACN,KAAK;QACL,IAAI,EAAE,SAAS,OAAO,mEAAmE;cACrF,oDAAoD,KAAK,aAAa,UAAU,IAAI;cACpF,uFAAuF;cACvF,mBAAmB;KACxB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare const IMPROVE_GITIGNORE_PATTERN = ".improve/";
|
|
2
|
+
export declare const IMPROVE_GITIGNORE_COMMENT = "# 12ui improve kits: candidates, captures and targets are not source";
|
|
3
|
+
export type ImproveKitIgnoreState =
|
|
4
|
+
/** This run appended the rule to the repository root `.gitignore`. */
|
|
5
|
+
'ignored'
|
|
6
|
+
/** Some pattern already ignored the out-dir; nothing was written. */
|
|
7
|
+
| 'already-ignored'
|
|
8
|
+
/** Inside a repository, not ignored, and not a kit directory this may claim. */
|
|
9
|
+
| 'not-ignored';
|
|
10
|
+
export type ImproveKitIgnore = {
|
|
11
|
+
state: ImproveKitIgnoreState;
|
|
12
|
+
/** The out-dir relative to the repository root, in POSIX form. */
|
|
13
|
+
relativeOutDir: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Decide, and where it is safe, act. Returns `undefined` when the out-dir is not
|
|
17
|
+
* inside a git working tree — the common case, and the one where the CLI has
|
|
18
|
+
* nothing to say.
|
|
19
|
+
*
|
|
20
|
+
* Only the repository ROOT `.gitignore` is ever written, only by appending, and
|
|
21
|
+
* only when the out-dir is named `.improve` or lives under one. Anything else
|
|
22
|
+
* gets the advisory line instead: guessing a pattern for an arbitrary directory
|
|
23
|
+
* could ignore a lane's source.
|
|
24
|
+
*/
|
|
25
|
+
export declare const ensureImproveKitIgnored: (args: {
|
|
26
|
+
outDir: string;
|
|
27
|
+
}) => Promise<ImproveKitIgnore | undefined>;
|
|
28
|
+
/** The one line a run prints when the kit is committable and nobody said so. */
|
|
29
|
+
export declare const improveKitIgnoreNote: (kit: ImproveKitIgnore | undefined) => string | undefined;
|
|
30
|
+
/** The same fact, in the kit's own status block. */
|
|
31
|
+
export declare const improveKitIgnoreStatusLine: (kit: ImproveKitIgnore | undefined) => string | undefined;
|
|
32
|
+
//# sourceMappingURL=improve-kit-ignore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-kit-ignore.d.ts","sourceRoot":"","sources":["../src/improve-kit-ignore.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,yBAAyB,cAAc,CAAC;AACrD,eAAO,MAAM,yBAAyB,yEACkC,CAAC;AAEzE,MAAM,MAAM,qBAAqB;AAC/B,sEAAsE;AACpE,SAAS;AACX,qEAAqE;GACnE,iBAAiB;AACnB,gFAAgF;GAC9E,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,qBAAqB,CAAC;IAC7B,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAmDF;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,GAAU,MAAM;IAClD,MAAM,EAAE,MAAM,CAAC;CAChB,KAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAmBvC,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,oBAAoB,GAAI,KAAK,gBAAgB,GAAG,SAAS,KAAG,MAAM,GAAG,SAKjF,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,0BAA0B,GAAI,KAAK,gBAAgB,GAAG,SAAS,KAAG,MAAM,GAAG,SAMvF,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { readFile, stat, writeFile } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { promisify } from 'node:util';
|
|
5
|
+
/**
|
|
6
|
+
* Keep the kit out of the repository's history (F17).
|
|
7
|
+
*
|
|
8
|
+
* `--out-dir .improve/<surface>` puts winner PNGs, every candidate, the capture
|
|
9
|
+
* sources and the whole target asset tree inside the repo being improved — about
|
|
10
|
+
* 100 MB of paid artifacts. Nothing said not to commit them, so one wave-2 lane's
|
|
11
|
+
* `git add -A` swept 102 kit files (100.8 MiB) into a seed commit, and the other
|
|
12
|
+
* three lanes each invented the same `.gitignore` rule for themselves. A rule
|
|
13
|
+
* four readers have to invent is a rule the tool owes them.
|
|
14
|
+
*
|
|
15
|
+
* The kit stays advisory: it appends one line when the out-dir is unambiguously a
|
|
16
|
+
* kit directory, says so plainly when it is not, and never fails the run.
|
|
17
|
+
*/
|
|
18
|
+
const execFileAsync = promisify(execFile);
|
|
19
|
+
/** The directory name that makes an out-dir unambiguously a kit, not source. */
|
|
20
|
+
const IMPROVE_KIT_DIRECTORY = '.improve';
|
|
21
|
+
export const IMPROVE_GITIGNORE_PATTERN = '.improve/';
|
|
22
|
+
export const IMPROVE_GITIGNORE_COMMENT = '# 12ui improve kits: candidates, captures and targets are not source';
|
|
23
|
+
const exists = async (file) => (stat(file).then(() => true).catch(() => false));
|
|
24
|
+
/**
|
|
25
|
+
* The repository the out-dir actually sits in, which is not necessarily
|
|
26
|
+
* `--repo`: a lane can point `--repo` at a package and write the kit above it.
|
|
27
|
+
* A `.git` file (worktree, submodule) counts exactly like a `.git` directory.
|
|
28
|
+
*/
|
|
29
|
+
const repositoryRoot = async (from) => {
|
|
30
|
+
let directory = path.resolve(from);
|
|
31
|
+
for (;;) {
|
|
32
|
+
if (await exists(path.join(directory, '.git')))
|
|
33
|
+
return directory;
|
|
34
|
+
const parent = path.dirname(directory);
|
|
35
|
+
if (parent === directory)
|
|
36
|
+
return undefined;
|
|
37
|
+
directory = parent;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const LITERAL_PATTERNS = new Set(['.improve', '.improve/', '/.improve', '/.improve/']);
|
|
41
|
+
/** The fallback when git cannot be run at all: does the root file say it already? */
|
|
42
|
+
const literallyIgnored = async (gitignore) => {
|
|
43
|
+
const text = await readFile(gitignore, 'utf8').catch(() => '');
|
|
44
|
+
return text.split('\n').some((line) => LITERAL_PATTERNS.has(line.trim()));
|
|
45
|
+
};
|
|
46
|
+
/** `true`/`false` from git itself; `undefined` when git could not answer. */
|
|
47
|
+
const gitIgnores = async (root, relative) => {
|
|
48
|
+
try {
|
|
49
|
+
await execFileAsync('git', ['check-ignore', '-q', '--', relative], { cwd: root });
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
return error.code === 1 ? false : undefined;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const appendRule = async (gitignore) => {
|
|
57
|
+
const existing = await readFile(gitignore, 'utf8').catch(() => undefined);
|
|
58
|
+
const separator = existing === undefined || existing.length === 0
|
|
59
|
+
? ''
|
|
60
|
+
: existing.endsWith('\n') ? '\n' : '\n\n';
|
|
61
|
+
await writeFile(gitignore, `${existing ?? ''}${separator}${IMPROVE_GITIGNORE_COMMENT}\n${IMPROVE_GITIGNORE_PATTERN}\n`, 'utf8');
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Decide, and where it is safe, act. Returns `undefined` when the out-dir is not
|
|
65
|
+
* inside a git working tree — the common case, and the one where the CLI has
|
|
66
|
+
* nothing to say.
|
|
67
|
+
*
|
|
68
|
+
* Only the repository ROOT `.gitignore` is ever written, only by appending, and
|
|
69
|
+
* only when the out-dir is named `.improve` or lives under one. Anything else
|
|
70
|
+
* gets the advisory line instead: guessing a pattern for an arbitrary directory
|
|
71
|
+
* could ignore a lane's source.
|
|
72
|
+
*/
|
|
73
|
+
export const ensureImproveKitIgnored = async (args) => {
|
|
74
|
+
try {
|
|
75
|
+
const outDir = path.resolve(args.outDir);
|
|
76
|
+
const root = await repositoryRoot(outDir);
|
|
77
|
+
if (!root || root === outDir)
|
|
78
|
+
return undefined;
|
|
79
|
+
const relative = path.relative(root, outDir).split(path.sep).join('/');
|
|
80
|
+
if (!relative || relative.startsWith('../'))
|
|
81
|
+
return undefined;
|
|
82
|
+
const gitignore = path.join(root, '.gitignore');
|
|
83
|
+
const ignored = await gitIgnores(root, relative) ?? await literallyIgnored(gitignore);
|
|
84
|
+
if (ignored)
|
|
85
|
+
return { state: 'already-ignored', relativeOutDir: relative };
|
|
86
|
+
if (!relative.split('/').includes(IMPROVE_KIT_DIRECTORY)) {
|
|
87
|
+
return { state: 'not-ignored', relativeOutDir: relative };
|
|
88
|
+
}
|
|
89
|
+
await appendRule(gitignore);
|
|
90
|
+
return { state: 'ignored', relativeOutDir: relative };
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// Advisory work never sinks a run that has already spent money.
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
/** The one line a run prints when the kit is committable and nobody said so. */
|
|
98
|
+
export const improveKitIgnoreNote = (kit) => (kit?.state === 'not-ignored'
|
|
99
|
+
? 'The kit is inside the repository and is not git-ignored;'
|
|
100
|
+
+ ` add ${kit.relativeOutDir}/ to .gitignore before committing.`
|
|
101
|
+
: undefined);
|
|
102
|
+
/** The same fact, in the kit's own status block. */
|
|
103
|
+
export const improveKitIgnoreStatusLine = (kit) => {
|
|
104
|
+
if (!kit)
|
|
105
|
+
return undefined;
|
|
106
|
+
return kit.state === 'not-ignored'
|
|
107
|
+
? `Kit: not git-ignored — see the note; add \`${kit.relativeOutDir}/\` to .gitignore`
|
|
108
|
+
+ ' before committing.'
|
|
109
|
+
: 'Kit: git-ignored via .gitignore.';
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=improve-kit-ignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-kit-ignore.js","sourceRoot":"","sources":["../src/improve-kit-ignore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"improve-kit-readme.d.ts","sourceRoot":"","sources":["../src/improve-kit-readme.ts"],"names":[],"mappings":"AAGA,OAAO,EAOL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"improve-kit-readme.d.ts","sourceRoot":"","sources":["../src/improve-kit-readme.ts"],"names":[],"mappings":"AAGA,OAAO,EAOL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAOL,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAgB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAwT7F,eAAO,MAAM,mBAAmB,GAAI,MAAM;IACxC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,oBAAoB,CAAC;CAC7B,KAAG,MAmBQ,CAAC;AAEb,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,aAAa,EACrB,UAAS;IAAE,WAAW,CAAC,EAAE,YAAY,CAAA;CAAO,KAC3C,OAAO,CAAC,MAAM,CAQhB,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { writeFile } from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { IMPROVE_ASSET_ROLE_COPY, IMPROVE_SCRIM_MAX_OPACITY_PCT, improveFrameMappingLine, readImproveKitAssets, } from './improve-kit-assets.js';
|
|
4
|
-
import { IMPROVE_NO_APPROXIMATION_RULE, improveRecoveryLine, improveStageStatusLine, readImproveKitStatus, } from './improve-kit-status.js';
|
|
4
|
+
import { IMPROVE_AWAITING_PICK_RULE, IMPROVE_NO_APPROXIMATION_RULE, improveAwaitingPick, improveRecoveryLine, improveStageStatusLine, readImproveKitStatus, } from './improve-kit-status.js';
|
|
5
|
+
import { improveCapturedUrlLine } from './improve-capture-redirect.js';
|
|
6
|
+
import { improveKitIgnoreStatusLine } from './improve-kit-ignore.js';
|
|
5
7
|
import { improveAbandonedLines } from './improve-reset.js';
|
|
6
8
|
import { improvePaths } from './improve-workspace.js';
|
|
7
9
|
/**
|
|
@@ -20,10 +22,33 @@ const ROLE_GLOSSARY = [
|
|
|
20
22
|
{ role: 'upscaled-region', pattern: 'upscaled-region-N' },
|
|
21
23
|
{ role: 'source-crop', pattern: 'crop-N' },
|
|
22
24
|
];
|
|
25
|
+
/**
|
|
26
|
+
* One sentence, wherever a resolved `plan/STALL.md` sits under this README.
|
|
27
|
+
*
|
|
28
|
+
* Freshdesk shipped a settled plan whose README said "settled" and whose
|
|
29
|
+
* STALL.md said "INCOMPLETE — no plan"; nothing in the kit said which was
|
|
30
|
+
* current (F21). The file is replaced when the stage settles, and the README
|
|
31
|
+
* says what it now is instead of pointing at it as a live stall.
|
|
32
|
+
*/
|
|
33
|
+
const improveResolvedStallLines = (status) => (status.present.stallResolved
|
|
34
|
+
? ['', '`plan/STALL.md` records an earlier stall in this kit that has since resolved.'
|
|
35
|
+
+ ' The plan and target here are current.']
|
|
36
|
+
: []);
|
|
23
37
|
const statusSection = (args) => {
|
|
24
38
|
const lines = ['## Status', ''];
|
|
25
39
|
lines.push(...args.status.stages.map((stage) => `- ${improveStageStatusLine(stage)}`));
|
|
26
40
|
lines.push(`- Target: ${args.status.targetMode}`);
|
|
41
|
+
// The page this kit is actually about, whenever it is not the page that was
|
|
42
|
+
// asked for (F27). It goes in the status block, above everything a reader
|
|
43
|
+
// would otherwise act on, because every artifact below describes it.
|
|
44
|
+
const captured = improveCapturedUrlLine(args.record);
|
|
45
|
+
if (captured)
|
|
46
|
+
lines.push(`- ${captured}`);
|
|
47
|
+
// Where the kit sits relative to the repository being improved, because a
|
|
48
|
+
// committed kit is 100 MB of paid artifacts in someone's history (F17).
|
|
49
|
+
const ignore = improveKitIgnoreStatusLine(args.record.kitIgnore);
|
|
50
|
+
if (ignore)
|
|
51
|
+
lines.push(`- ${ignore}`);
|
|
27
52
|
lines.push(...improveAbandonedLines(args.record));
|
|
28
53
|
if (args.status.complete) {
|
|
29
54
|
lines.push('', ...(args.status.gateBlocked
|
|
@@ -31,12 +56,32 @@ const statusSection = (args) => {
|
|
|
31
56
|
+ ' and `token-patch.css`. Read `plan/GATE.md` before touching code; the target, its assets'
|
|
32
57
|
+ ' and the raster layers it names are all still here.']
|
|
33
58
|
: args.record.convert?.layout === 'fixed'
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
59
|
+
// The event, not just the outcome (F8): a lane that watched a silent
|
|
60
|
+
// wait needs the kit to confirm the responsive export stalled, and
|
|
61
|
+
// `plan/STALL.md` is where the timings and the collect-it-later
|
|
62
|
+
// command live.
|
|
63
|
+
? ['Responsive export stalled; the plan was built from the fixed-layout fallback.'
|
|
64
|
+
+ ' The target HTML is fixed-layout, not responsive, and the LayerDoc and its assets'
|
|
65
|
+
+ ' are the full-quality source of truth.',
|
|
66
|
+
...(args.status.present.stall
|
|
67
|
+
? ['', 'See `plan/STALL.md` for what stalled, how long it waited, and how to collect'
|
|
68
|
+
+ ' the responsive export later if it completes.']
|
|
69
|
+
: [])]
|
|
70
|
+
// A complete kit that still has a STALL.md stalled once and then
|
|
71
|
+
// settled. Saying only "the kit is complete" left the reader to
|
|
72
|
+
// adjudicate this README against a file that said INCOMPLETE (F21).
|
|
73
|
+
: ['Every requested stage settled. The kit is complete.',
|
|
74
|
+
...improveResolvedStallLines(args.status)]), '');
|
|
37
75
|
return lines;
|
|
38
76
|
}
|
|
39
|
-
lines.push('', `This kit is INCOMPLETE: ${args.status.missing.join(', ')}.`, ...(args.status.present.stall
|
|
77
|
+
lines.push('', `This kit is INCOMPLETE: ${args.status.missing.join(', ')}.`, ...(args.status.present.stall && !args.status.present.stallResolved
|
|
78
|
+
? ['', 'See `plan/STALL.md` for what the run was waiting on.']
|
|
79
|
+
: improveResolvedStallLines(args.status)), '',
|
|
80
|
+
// A never-picked kit has one recovery, and it is not a resume: heading it
|
|
81
|
+
// "the first resumes" over a single `--from pick` line reads as a stall.
|
|
82
|
+
...(improveAwaitingPick(args.record)
|
|
83
|
+
? [IMPROVE_AWAITING_PICK_RULE, '', 'Recovery — pick a candidate; convert and plan run from there:']
|
|
84
|
+
: ['Recovery, in order — the first resumes and replays every settled stage:']), '', ...args.status.recovery.map(improveRecoveryLine), '', IMPROVE_NO_APPROXIMATION_RULE, '');
|
|
40
85
|
return lines;
|
|
41
86
|
};
|
|
42
87
|
const startHere = (args) => {
|
|
@@ -62,9 +107,11 @@ const startHere = (args) => {
|
|
|
62
107
|
? []
|
|
63
108
|
: [args.status.gateBlocked
|
|
64
109
|
? 'Run the recovery above first: the steps below assume a target this kit has not finished.'
|
|
65
|
-
:
|
|
66
|
-
? '
|
|
67
|
-
:
|
|
110
|
+
: improveAwaitingPick(args.record)
|
|
111
|
+
? 'Pick a candidate first (command above); steps 2 to 4 need the target that the pick produces.'
|
|
112
|
+
: hasAssets
|
|
113
|
+
? 'Run the recovery above first: steps 3 and 4 need a plan this kit does not have yet.'
|
|
114
|
+
: 'Run the recovery above first: steps 2 to 4 need a target this kit does not have yet.', '']),
|
|
68
115
|
// The frame a bound belongs to, before the first step that places anything:
|
|
69
116
|
// a lane read these percentages as `winner.png` pixels and placed short.
|
|
70
117
|
improveFrameMappingLine({
|
|
@@ -72,9 +119,14 @@ const startHere = (args) => {
|
|
|
72
119
|
...(args.index.canvas ? { design: args.index.canvas } : {}),
|
|
73
120
|
}),
|
|
74
121
|
'',
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
122
|
+
// A never-picked kit has no winner, so `design` is the capture. Calling
|
|
123
|
+
// that "the design" is the same wrong turn the recovery block used to make.
|
|
124
|
+
improveAwaitingPick(args.record)
|
|
125
|
+
? '1. Open the candidate PNGs in `candidates/` and pick one (command above).'
|
|
126
|
+
+ ' `capture/source.png` is the page as it is today, not the design.'
|
|
127
|
+
: args.status.designKind === 'layerdoc'
|
|
128
|
+
? `1. Open \`${design}\`. The supplied target document is the design.`
|
|
129
|
+
: `1. Open \`${design}\`. It is the design.`,
|
|
78
130
|
'2. Copy the files the assets table below marks ship into the repository;'
|
|
79
131
|
+ ' the rest are references and alternates.',
|
|
80
132
|
...planSteps,
|
|
@@ -103,6 +155,12 @@ const assetsSection = (args) => {
|
|
|
103
155
|
...ROLE_GLOSSARY.map(({ role, pattern }) => `- ${IMPROVE_ASSET_ROLE_COPY[role].label}`
|
|
104
156
|
+ ` (\`${pattern}\`): ${IMPROVE_ASSET_ROLE_COPY[role].instruction}`),
|
|
105
157
|
`- \`${design}\`: ${IMPROVE_ASSET_ROLE_COPY.design.instruction}`,
|
|
158
|
+
// F30: the single `currentColor` file the plan used to write rendered black
|
|
159
|
+
// in every external form this README recommends.
|
|
160
|
+
'- Icons (`plan/assets/added-*.svg`): reference `<name>.svg` — it carries the design\'s'
|
|
161
|
+
+ ' declared colour and is safe as an `<img>`, `background-image`, or `url()`; its'
|
|
162
|
+
+ ' `<name>-inline.svg` sibling paints with `currentColor` and is for inlining in the markup'
|
|
163
|
+
+ ' or masking with a token colour.',
|
|
106
164
|
'',
|
|
107
165
|
];
|
|
108
166
|
if (args.index.assets.length === 0) {
|
|
@@ -156,8 +214,39 @@ const anatomy = (record) => [
|
|
|
156
214
|
'',
|
|
157
215
|
'- Apply the plan in the owning repository, then verify behavior and screenshots there. This kit never applies code.',
|
|
158
216
|
'- Re-run from `pick` with another `--pick` slot to reuse capture and candidates; settled paid stages replay.',
|
|
217
|
+
// A magic-link triple is a live credential and this file sits in the working
|
|
218
|
+
// tree (F31), so the kit says what it holds and what a re-capture needs.
|
|
219
|
+
...(record.bootstrap.length > 0
|
|
220
|
+
? ['- This kit captured with `--bootstrap`. `improve.json` keeps only the redacted triple'
|
|
221
|
+
+ ` (${record.bootstrap.map((value) => `\`${value}\``).join(', ')}) and its sha256 — the live`
|
|
222
|
+
+ ' value, session token included, is stored nowhere. A re-capture needs `--bootstrap` passed'
|
|
223
|
+
+ ' again.']
|
|
224
|
+
: []),
|
|
159
225
|
'',
|
|
160
226
|
];
|
|
227
|
+
/**
|
|
228
|
+
* The design's font, and whose job it is to load it (F23).
|
|
229
|
+
*
|
|
230
|
+
* `plan/token-patch.css` used to open with a hosted Google Fonts `@import`,
|
|
231
|
+
* and this README makes applying that patch step 3 of "Start here" — so the
|
|
232
|
+
* one step a lane is told to apply wholesale was also the step that added a
|
|
233
|
+
* third-party network dependency to a repository that declared none. The patch
|
|
234
|
+
* names the family; loading it is the repository's own decision.
|
|
235
|
+
*/
|
|
236
|
+
const fontsSection = (record) => {
|
|
237
|
+
const fonts = record.plan?.fonts ?? [];
|
|
238
|
+
if (fonts.length === 0)
|
|
239
|
+
return [];
|
|
240
|
+
return [
|
|
241
|
+
'## Fonts',
|
|
242
|
+
'',
|
|
243
|
+
...fonts.map(({ family, weights }) => (`- ${family} (weights ${weights.join(', ')}). \`plan/token-patch.css\` declares it as a`
|
|
244
|
+
+ ' token and imports nothing. Load the family the way this repository already loads fonts'
|
|
245
|
+
+ ' — self-host it, or add it to the existing loader — or keep the current family and skip'
|
|
246
|
+
+ ' the token.')),
|
|
247
|
+
'',
|
|
248
|
+
];
|
|
249
|
+
};
|
|
161
250
|
const fixedLayoutSection = (record) => (record.convert?.layout === 'fixed'
|
|
162
251
|
? [
|
|
163
252
|
'## Fixed-layout target',
|
|
@@ -183,6 +272,7 @@ export const renderImproveReadme = (args) => [
|
|
|
183
272
|
...startHere(args),
|
|
184
273
|
...assetsSection(args),
|
|
185
274
|
...guardrails(),
|
|
275
|
+
...fontsSection(args.record),
|
|
186
276
|
...fixedLayoutSection(args.record),
|
|
187
277
|
...anatomy(args.record),
|
|
188
278
|
].join('\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"improve-kit-readme.js","sourceRoot":"","sources":["../src/improve-kit-readme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,EACvB,oBAAoB,GAIrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,GAErB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAyC,MAAM,wBAAwB,CAAC;AAE7F;;;;;;;GAOG;AAEH,yFAAyF;AACzF,MAAM,aAAa,GAAuD;IACxE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE;IAC3C,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;IACvC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,EAAE;IACvD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,EAAE;IACzD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE;CAC3C,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAyD,EAAY,EAAE;IAC5F,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACvF,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CACR,EAAE,EACF,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW;YACzB,CAAC,CAAC,CAAC,0FAA0F;sBACzF,0FAA0F;sBAC1F,qDAAqD,CAAC;YAC1D,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO;gBACvC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"improve-kit-readme.js","sourceRoot":"","sources":["../src/improve-kit-readme.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,26 @@ import { type ImproveKitStatus } from './improve-kit-status.js';
|
|
|
3
3
|
import { type ImproveResumeConversion } from './improve-convert-resilience.js';
|
|
4
4
|
import { type RunJournalEntry } from './run-journal.js';
|
|
5
5
|
import { type ImproveRecord, type ImproveStage } from './improve-workspace.js';
|
|
6
|
-
/**
|
|
7
|
-
|
|
6
|
+
/**
|
|
7
|
+
* A run that ran out of patience, a run somebody killed, and a run that
|
|
8
|
+
* recovered read differently.
|
|
9
|
+
*
|
|
10
|
+
* `fallback` is the third: the responsive export stalled and improve derived
|
|
11
|
+
* fixed-layout HTML free from the settled LayerDoc, so the kit is complete and
|
|
12
|
+
* the plan was built — but something DID stall, and F8 (wave-2, 2026-09-03)
|
|
13
|
+
* found that nothing said so anywhere a lane looks. No STALL.md exists in any
|
|
14
|
+
* of the six wave-2 kits, including the two that fell back. A recovered run is
|
|
15
|
+
* not a clean run, and this file is where the difference gets written down.
|
|
16
|
+
*/
|
|
17
|
+
export type ImproveStallKind = 'stalled' | 'stopped' | 'fallback';
|
|
8
18
|
export type ImproveStallFacts = {
|
|
9
19
|
stage: ImproveStage;
|
|
10
20
|
kind: ImproveStallKind;
|
|
11
21
|
hostedRunId?: string;
|
|
12
22
|
waitedSeconds?: number;
|
|
13
23
|
typicalSeconds?: number;
|
|
24
|
+
/** The published bound the wait ran against, when the caller knows it. */
|
|
25
|
+
boundSeconds?: number;
|
|
14
26
|
serviceStage?: string;
|
|
15
27
|
/** The conversion the first recovery command will attach to, if the kit knows one. */
|
|
16
28
|
resume?: ImproveResumeConversion;
|
|
@@ -51,6 +63,40 @@ export declare const renderImproveStall: (args: {
|
|
|
51
63
|
status: ImproveKitStatus;
|
|
52
64
|
index: ImproveKitAssetIndex;
|
|
53
65
|
}) => string;
|
|
66
|
+
/**
|
|
67
|
+
* The same file, for the run that recovered.
|
|
68
|
+
*
|
|
69
|
+
* The facts come off the durable record rather than out of an error, because
|
|
70
|
+
* there is no error: the responsive export stalled, the free derivation took
|
|
71
|
+
* over, and the run went on to build a plan. A kit written before
|
|
72
|
+
* `responsiveStall` existed records the fallback but not its timings, so this
|
|
73
|
+
* writes what it has and never invents a number.
|
|
74
|
+
*/
|
|
75
|
+
export declare const writeImproveFallbackStall: (args: {
|
|
76
|
+
record: ImproveRecord;
|
|
77
|
+
requestedTo?: ImproveStage;
|
|
78
|
+
}) => Promise<string | undefined>;
|
|
79
|
+
/**
|
|
80
|
+
* The stall this kit recorded is over, so the file that recorded it stops
|
|
81
|
+
* saying the kit is INCOMPLETE (F21).
|
|
82
|
+
*
|
|
83
|
+
* Freshdesk's `--from convert` resume settled at 18:56:41Z and wrote a whole
|
|
84
|
+
* plan; the `plan/STALL.md` from 18:48:17Z survived beside it, still saying
|
|
85
|
+
* "this run was stopped", "no plan", and "resume or convert first" — directly
|
|
86
|
+
* contradicting the README above it, which said the plan was settled. A reader
|
|
87
|
+
* opening that kit cold got two mutually exclusive statuses and no way to tell
|
|
88
|
+
* which was current.
|
|
89
|
+
*
|
|
90
|
+
* The file is REPLACED rather than deleted: it is the durable record that this
|
|
91
|
+
* kit stalled once, which is worth keeping, and a README that links to it must
|
|
92
|
+
* not link to nothing. Its mtime is when the stall was written, which is the
|
|
93
|
+
* one timestamp neither the record nor the journal keeps.
|
|
94
|
+
*/
|
|
95
|
+
export declare const resolveImproveStall: (args: {
|
|
96
|
+
record: ImproveRecord;
|
|
97
|
+
status: ImproveKitStatus;
|
|
98
|
+
now?: Date;
|
|
99
|
+
}) => Promise<string | undefined>;
|
|
54
100
|
/**
|
|
55
101
|
* Write `plan/STALL.md`, creating `plan/` when the plan stage never ran.
|
|
56
102
|
* Returns the file so the caller can journal it as an artifact.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"improve-kit-stall.d.ts","sourceRoot":"","sources":["../src/improve-kit-stall.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwB,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,
|
|
1
|
+
{"version":3,"file":"improve-kit-stall.d.ts","sourceRoot":"","sources":["../src/improve-kit-stall.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwB,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAML,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAgB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAe7F;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAElE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAU,MAAM;IACnD,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,KAAG,OAAO,CAAC,iBAAiB,CAgC5B,CAAC;AA6EF,eAAO,MAAM,kBAAkB,GAAI,MAAM;IACvC,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,oBAAoB,CAAC;CAC7B,KAAG,MAoEH,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,GAAU,MAAM;IACpD,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAyB7B,CAAC;AAMF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,mBAAmB,GAAU,MAAM;IAC9C,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAgC7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAU,MAAM;IAClD,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,KAAG,OAAO,CAAC,MAAM,CAoBjB,CAAC"}
|