metis-desk/.artifacts/server-runtime-security/root-check.log
David c863cc6d96 feat: add unpublished share component and publication operation summary
- Introduced `UnpublishedShare` component for displaying empty state with actions for assigning and viewing history.
- Added `PublicationOperationSummary` component to summarize publication context and actions based on the current state.
- Implemented `CompanyNetworkShareDetail` to manage and display network share details for companies.
- Created `NetworkShareResourceTitle` for collapsible display of resource names with accessibility features.
- Developed `ResourceDetailActions` for managing resource actions like edit, activate/deactivate, and delete.
- Added `ResourceRevisionHistory` to display the history of resource revisions with detailed information.
- Implemented a comprehensive audit script for network share detail UI, including accessibility checks and error handling.
2026-10-26 18:45:30 +01:00

1380 lines
76 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

$ biome check .
.agents/skills/shadcn/assets/showcase/color-pair.tsx:81:17 lint/style/noNegationElse FIXABLE ━━━━━━━━━━
! Invert blocks when performing a negation test.
79 │ }, [])
80 │
> 81 │ const level = !info
│ ^^^^^
> 82 │ ? ""
...
> 88 │ ? "AA Large"
> 89 │ : "Fail"
│ ^^^^^^^^
90 │
91 │ return (
i Safe fix: Invert the condition and the blocks.
79 79 │ }, [])
80 80 │
81 │ - ··const·level·=·!info
82 │ - ····?·""
83 │ - ····:·info.ratio·>=·7
81 │ + ··const·level·=·info
82 │ + ····?·info.ratio·>=·7
84 83 │ ? "AAA"
85 84 │ : info.ratio >= 4.5
······· │
87 86 │ : info.ratio >= 3
88 87 │ ? "AA Large"
89 │ - ··········:·"Fail"
88 │ + ··········:·"Fail"
89 │ + ····:·""
90 90 │
91 91 │ return (
.agents/skills/shadcn/assets/showcase/color-pair.tsx:98:7 assist/source/useSortedAttributes FIXABLE ━━━━━━━━━━
× The attributes are not sorted.
96 │ )}
97 │ >
> 98 │ <div
│ ^^^^
> 99 │ ref={ref}
...
> 104 │ className="flex h-24 items-end justify-between p-4"
> 105 │ >
│ ^
106 │ <span className="text-2xl font-medium">Aa</span>
107 │ {info && (
i Safe fix: Sort the JSX props.
97 97 │ >
98 98 │ <div
99 │ - ········ref={ref}
100 │ - ········style={{
101 │ - ··········backgroundColor:·`var(--${background})`,
102 │ - ··········color:·`var(--${foreground})`,
103 │ - ········}}
104 │ - ········className="flex·h-24·items-end·justify-between·p-4"
99 │ + ········className="flex·h-24·items-end·justify-between·p-4"
100 │ + ········ref={ref}
101 │ + ········style={{
102 │ + ··········backgroundColor:·`var(--${background})`,
103 │ + ··········color:·`var(--${foreground})`,
104 │ + ········}}
105 105 │ >
106 106 │ <span className="text-2xl font-medium">Aa</span>
.agents/skills/shadcn/assets/showcase/color-pair.tsx format ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Formatter would have printed the following content:
1 │ - import·*·as·React·from·"react"
1 │ + import·*·as·React·from·"react";
2 2 │
3 │ - import·{·cn·}·from·"@/lib/utils"
3 │ + import·{·cn·}·from·"@/lib/utils";
4 4 │
5 5 │ // Resolves any CSS color (hex, rgb, oklch, color-mix) to sRGB by painting one pixel.
6 6 │ // Translucent colors are composited over the backdrop, as the browser would.
7 7 │ function toRgb(color: string, backdrop = "#fff") {
8 │ - ··const·canvas·=·document.createElement("canvas")
9 │ - ··canvas.width·=·canvas.height·=·1
10 │ - ··const·context·=·canvas.getContext("2d",·{·willReadFrequently:·true·})
8 │ + ··const·canvas·=·document.createElement("canvas");
9 │ + ··canvas.width·=·canvas.height·=·1;
10 │ + ··const·context·=·canvas.getContext("2d",·{·willReadFrequently:·true·});
11 11 │ if (!context) {
12 │ - ····return·null
12 │ + ····return·null;
13 13 │ }
14 │ - ··context.fillStyle·=·backdrop
15 │ - ··context.fillRect(0,·0,·1,·1)
16 │ - ··context.fillStyle·=·color
17 │ - ··context.fillRect(0,·0,·1,·1)
18 │ - ··const·[r,·g,·b]·=·context.getImageData(0,·0,·1,·1).data
19 │ - ··return·[r,·g,·b]
14 │ + ··context.fillStyle·=·backdrop;
15 │ + ··context.fillRect(0,·0,·1,·1);
16 │ + ··context.fillStyle·=·color;
17 │ + ··context.fillRect(0,·0,·1,·1);
18 │ + ··const·[r,·g,·b]·=·context.getImageData(0,·0,·1,·1).data;
19 │ + ··return·[r,·g,·b];
20 20 │ }
21 21 │
22 22 │ function toHex(rgb: number[]) {
23 │ - ··return·`#${rgb.map((value)·=>·value.toString(16).padStart(2,·"0")).join("")}`
23 │ + ··return·`#${rgb.map((value)·=>·value.toString(16).padStart(2,·"0")).join("")}`;
24 24 │ }
25 25 │
26 26 │ function luminance([r, g, b]: number[]) {
27 27 │ const [R, G, B] = [r, g, b].map((value) => {
28 │ - ····const·channel·=·value·/·255
29 │ - ····return·channel·<=·0.03928
30 │ - ······?·channel·/·12.92
31 │ - ······:·((channel·+·0.055)·/·1.055)·**·2.4
32 │ - ··})
33 │ - ··return·0.2126·*·R·+·0.7152·*·G·+·0.0722·*·B
28 │ + ····const·channel·=·value·/·255;
29 │ + ····return·channel·<=·0.03928·?·channel·/·12.92·:·((channel·+·0.055)·/·1.055)·**·2.4;
30 │ + ··});
31 │ + ··return·0.2126·*·R·+·0.7152·*·G·+·0.0722·*·B;
34 32 │ }
35 33 │
36 34 │ function contrast(a: number[], b: number[]) {
37 │ - ··const·[light,·dark]·=·[luminance(a),·luminance(b)].sort((x,·y)·=>·y·-·x)
38 │ - ··return·(light·+·0.05)·/·(dark·+·0.05)
35 │ + ··const·[light,·dark]·=·[luminance(a),·luminance(b)].sort((x,·y)·=>·y·-·x);
36 │ + ··return·(light·+·0.05)·/·(dark·+·0.05);
39 37 │ }
40 38 │
······· │
45 43 │ className,
46 44 │ }: {
47 │ - ··name:·string
48 │ - ··background:·string
49 │ - ··foreground:·string
50 │ - ··className?:·string
45 │ + ··name:·string;
46 │ + ··background:·string;
47 │ + ··foreground:·string;
48 │ + ··className?:·string;
51 49 │ }) {
52 │ - ··const·ref·=·React.useRef<HTMLDivElement>(null)
53 │ - ··const·[info,·setInfo]·=·React.useState<{·ratio:·number;·bg:·string·}·|·null>(
54 │ - ····null
55 │ - ··)
50 │ + ··const·ref·=·React.useRef<HTMLDivElement>(null);
51 │ + ··const·[info,·setInfo]·=·React.useState<{·ratio:·number;·bg:·string·}·|·null>(null);
56 52 │
57 53 │ React.useEffect(() => {
58 │ - ····const·element·=·ref.current
54 │ + ····const·element·=·ref.current;
59 55 │ if (!element) {
60 │ - ······return
56 │ + ······return;
61 57 │ }
62 58 │ // Re-measure when the theme class on <html> changes.
63 59 │ const measure = () => {
64 │ - ······const·style·=·getComputedStyle(element)
65 │ - ······const·page·=·getComputedStyle(document.body).backgroundColor
66 │ - ······const·bg·=·toRgb(style.backgroundColor,·page)
60 │ + ······const·style·=·getComputedStyle(element);
61 │ + ······const·page·=·getComputedStyle(document.body).backgroundColor;
62 │ + ······const·bg·=·toRgb(style.backgroundColor,·page);
67 63 │ if (!bg) {
68 │ - ········return
64 │ + ········return;
69 65 │ }
70 │ - ······const·fg·=·toRgb(style.color,·toHex(bg))
66 │ + ······const·fg·=·toRgb(style.color,·toHex(bg));
71 67 │ if (fg) {
72 │ - ········setInfo({·ratio:·contrast(bg,·fg),·bg:·toHex(bg)·})
68 │ + ········setInfo({·ratio:·contrast(bg,·fg),·bg:·toHex(bg)·});
73 69 │ }
74 │ - ····}
75 │ - ····measure()
76 │ - ····const·observer·=·new·MutationObserver(measure)
77 │ - ····observer.observe(document.documentElement,·{·attributes:·true·})
78 │ - ····return·()·=>·observer.disconnect()
79 │ - ··},·[])
70 │ + ····};
71 │ + ····measure();
72 │ + ····const·observer·=·new·MutationObserver(measure);
73 │ + ····observer.observe(document.documentElement,·{·attributes:·true·});
74 │ + ····return·()·=>·observer.disconnect();
75 │ + ··},·[]);
80 76 │
81 77 │ const level = !info
······· │
87 83 │ : info.ratio >= 3
88 84 │ ? "AA Large"
89 │ - ··········:·"Fail"
85 │ + ··········:·"Fail";
90 86 │
91 87 │ return (
92 │ - ····<div
93 │ - ······className={cn(
94 │ - ········"flex·flex-col·overflow-hidden·rounded-xl·border",
95 │ - ········className
96 │ - ······)}
97 │ - ····>
88 │ + ····<div·className={cn("flex·flex-col·overflow-hidden·rounded-xl·border",·className)}>
98 89 │ <div
99 90 │ ref={ref}
······· │
116 107 │ --{background} / --{foreground}
117 108 │ </span>
118 │ - ········{info·&&·(
119 │ - ··········<span·className="font-mono·text-xs·text-muted-foreground">
120 │ - ············{info.bg}
121 │ - ··········</span>
122 │ - ········)}
109 │ + ········{info·&&·<span·className="font-mono·text-xs·text-muted-foreground">{info.bg}</span>}
123 110 │ </div>
124 111 │ </div>
125 │ - ··)
112 │ + ··);
126 113 │ }
127 114 │
.agents/skills/shadcn/assets/showcase/preview-states.css format ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Formatter would have printed the following content:
11 11 │ }
12 12 │ }
13 │ - @custom-variant·focus-visible·(&:focus-visible,·&[data-preview~="focus"]);
14 │ - @custom-variant·active·(&:active,·&[data-preview~="active"]);
13 │ + @custom-variant·focus-visible·(&:focus-visible,
14 │ + &[data-preview~="focus"]);
15 │ + @custom-variant·active·(&:active,
16 │ + &[data-preview~="active"]);
15 17 │
.agents/skills/shadcn/assets/showcase/state-matrix.tsx:31:15 assist/source/useSortedAttributes FIXABLE ━━━━━━━━━━
× The attributes are not sorted.
29 │ <th />
30 │ {states.map((state) => (
> 31 │ <th
│ ^^^
> 32 │ key={state}
> 33 │ scope="col"
> 34 │ className="text-left font-mono text-xs font-normal text-muted-foreground"
> 35 │ >
│ ^
36 │ {state}
37 │ </th>
i Safe fix: Sort the JSX props.
30 30 │ {states.map((state) => (
31 31 │ <th
32 │ - ················key={state}
33 │ - ················scope="col"
34 │ - ················className="text-left·font-mono·text-xs·font-normal·text-muted-foreground"
32 │ + ················className="text-left·font-mono·text-xs·font-normal·text-muted-foreground"
33 │ + ················key={state}
34 │ + ················scope="col"
35 35 │ >
36 36 │ {state}
.agents/skills/shadcn/assets/showcase/state-matrix.tsx:44:15 assist/source/useSortedAttributes FIXABLE ━━━━━━━━━━
× The attributes are not sorted.
42 │ {rows.map((row) => (
43 │ <tr key={row}>
> 44 │ <th
│ ^^^
> 45 │ scope="row"
> 46 │ className="pr-4 text-left font-mono text-xs font-normal text-muted-foreground"
> 47 │ >
│ ^
48 │ {row}
49 │ </th>
i Safe fix: Sort the JSX props.
43 43 │ <tr key={row}>
44 44 │ <th
45 │ - ················scope="row"
46 │ - ················className="pr-4·text-left·font-mono·text-xs·font-normal·text-muted-foreground"
45 │ + ················className="pr-4·text-left·font-mono·text-xs·font-normal·text-muted-foreground"
46 │ + ················scope="row"
47 47 │ >
48 48 │ {row}
.agents/skills/shadcn/assets/showcase/state-matrix.tsx:1:8 lint/style/useImportType FIXABLE ━━━━━━━━━━
× All these imports are only used as types.
> 1 │ import * as React from "react"
│ ^^^^^^^^^^^^^^^^^^^^^^^
2 │
3 │ import { cn } from "@/lib/utils"
i Importing the types with import type ensures that they are removed by the compilers and avoids loading unnecessary modules.
i Safe fix: Use import type.
1 │ import·type·*·as·React·from·"react"
│ +++++
.agents/skills/shadcn/assets/showcase/state-matrix.tsx format ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Formatter would have printed the following content:
1 │ - import·*·as·React·from·"react"
1 │ + import·*·as·React·from·"react";
2 2 │
3 │ - import·{·cn·}·from·"@/lib/utils"
3 │ + import·{·cn·}·from·"@/lib/utils";
4 4 │
5 │ - const·defaultStates·=·[
6 │ - ··"default",
7 │ - ··"hover",
8 │ - ··"focus",
9 │ - ··"active",
10 │ - ··"disabled",
11 │ - ]·as·const
5 │ + const·defaultStates·=·["default",·"hover",·"focus",·"active",·"disabled"]·as·const;
12 6 │
13 7 │ export function StateMatrix<Row extends string>({
····· │
17 11 │ className,
18 12 │ }: {
19 │ - ··rows:·readonly·Row[]
20 │ - ··states?:·readonly·string[]
21 │ - ··render:·(row:·Row,·state:·string)·=>·React.ReactNode
22 │ - ··className?:·string
13 │ + ··rows:·readonly·Row[];
14 │ + ··states?:·readonly·string[];
15 │ + ··render:·(row:·Row,·state:·string)·=>·React.ReactNode;
16 │ + ··className?:·string;
23 17 │ }) {
24 18 │ return (
····· │
56 50 │ </table>
57 51 │ </div>
58 │ - ··)
52 │ + ··);
59 53 │ }
60 54 │
····· │
62 56 │ export function previewState(state: string) {
63 57 │ if (state === "disabled") {
64 │ - ····return·{·disabled:·true·}
58 │ + ····return·{·disabled:·true·};
65 59 │ }
66 60 │
67 61 │ if (["hover", "focus", "active"].includes(state)) {
68 │ - ····return·{·"data-preview":·state·}
62 │ + ····return·{·"data-preview":·state·};
69 63 │ }
70 64 │
71 │ - ··return·{}
65 │ + ··return·{};
72 66 │ }
73 67 │
.agents/skills/shadcn/scripts/showcase-coverage.mjs:4:1 assist/source/organizeImports FIXABLE ━━━━━━━━━━
× The imports and exports are not sorted.
2 │ // Lists installed UI components that no file in the showcase imports.
3 │ // Usage: node showcase-coverage.mjs <ui-dir> <showcase-dir...>
> 4 │ import { readdirSync, readFileSync, statSync } from "node:fs"
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5 │ import { basename, extname, join, resolve } from "node:path"
6 │
i Safe fix: Organize Imports (Biome)
1 1 │ #!/usr/bin/env node
2 │ +
2 3 │ // Lists installed UI components that no file in the showcase imports.
3 4 │ // Usage: node showcase-coverage.mjs <ui-dir> <showcase-dir...>
4 │ - import·{·readdirSync,·readFileSync,·statSync·}·from·"node:fs"
5 │ + import·{·readFileSync,·readdirSync,·statSync·}·from·"node:fs"
5 6 │ import { basename, extname, join, resolve } from "node:path"
6 7 │
.agents/skills/shadcn/scripts/showcase-coverage.mjs format ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Formatter would have printed the following content:
2 2 │ // Lists installed UI components that no file in the showcase imports.
3 3 │ // Usage: node showcase-coverage.mjs <ui-dir> <showcase-dir...>
4 │ - import·{·readdirSync,·readFileSync,·statSync·}·from·"node:fs"
5 │ - import·{·basename,·extname,·join,·resolve·}·from·"node:path"
4 │ + import·{·readdirSync,·readFileSync,·statSync·}·from·"node:fs";
5 │ + import·{·basename,·extname,·join,·resolve·}·from·"node:path";
6 6 │
7 │ - const·[uiArg,·...roots]·=·process.argv.slice(2)
7 │ + const·[uiArg,·...roots]·=·process.argv.slice(2);
8 8 │
9 9 │ if (!uiArg || roots.length === 0) {
10 │ - ··console.error("Usage:·node·showcase-coverage.mjs·<ui-dir>·<showcase-dir...>")
11 │ - ··process.exit(1)
10 │ + ··console.error("Usage:·node·showcase-coverage.mjs·<ui-dir>·<showcase-dir...>");
11 │ + ··process.exit(1);
12 12 │ }
13 13 │
14 │ - const·uiDir·=·resolve(uiArg)
14 │ + const·uiDir·=·resolve(uiArg);
15 15 │
16 16 │ const components = readdirSync(uiDir)
17 17 │ .filter((file) => [".tsx", ".ts"].includes(extname(file)))
18 │ - ··.map((file)·=>·basename(file,·extname(file)))
18 │ + ··.map((file)·=>·basename(file,·extname(file)));
19 19 │
20 20 │ function walk(path) {
21 21 │ if (statSync(path).isFile()) {
22 │ - ····return·[path]
22 │ + ····return·[path];
23 23 │ }
24 24 │
25 25 │ return readdirSync(path).flatMap((entry) => {
26 │ - ····const·child·=·join(path,·entry)
26 │ + ····const·child·=·join(path,·entry);
27 27 │ // Skip the ui directory so components don't count as using each other.
28 28 │ if (entry === "node_modules" || child === uiDir) {
29 │ - ······return·[]
29 │ + ······return·[];
30 30 │ }
31 │ - ····return·walk(child)
32 │ - ··})
31 │ + ····return·walk(child);
32 │ + ··});
33 33 │ }
34 34 │
····· │
38 38 │ .filter((file) => /\.(tsx?|jsx?)$/.test(file))
39 39 │ .map((file) => readFileSync(file, "utf8"))
40 │ - ··.join("\n")
40 │ + ··.join("\n");
41 41 │
42 │ - const·missing·=·components.filter(
43 │ - ··(name)·=>·!new·RegExp(`/ui/${name}["']`).test(source)
44 │ - )
42 │ + const·missing·=·components.filter((name)·=>·!new·RegExp(`/ui/${name}["']`).test(source));
45 43 │
46 │ - console.log(
47 │ - ··`${components.length·-·missing.length}/${components.length}·components·shown.`
48 │ - )
44 │ + console.log(`${components.length·-·missing.length}/${components.length}·components·shown.`);
49 45 │
50 46 │ if (missing.length > 0) {
51 │ - ··console.log(`Missing:·${missing.join(",·")}`)
52 │ - ··process.exit(1)
47 │ + ··console.log(`Missing:·${missing.join(",·")}`);
48 │ + ··process.exit(1);
53 49 │ }
54 50 │
.agents/skills/ui-ux-pro-max/data/data-provenance.json format ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Formatter would have printed the following content:
17 17 │ "verifiedAt": "2026-08-12",
18 18 │ "sla": "needs-review",
19 │ - ······"appliesTo":·[
20 │ - ········"design-system"
21 │ - ······],
19 │ + ······"appliesTo":·["design-system"],
22 20 │ "confidence": 0.88,
23 21 │ "sources": [
········· │
42 40 │ "verifiedAt": "2026-08-12",
43 41 │ "sla": "needs-review",
44 │ - ······"appliesTo":·[
45 │ - ········"design-system"
46 │ - ······],
42 │ + ······"appliesTo":·["design-system"],
47 43 │ "confidence": 0.92,
48 44 │ "sources": [
········· │
67 63 │ "verifiedAt": "2026-08-12",
68 64 │ "sla": "needs-review",
69 │ - ······"appliesTo":·[
70 │ - ········"design-system"
71 │ - ······],
65 │ + ······"appliesTo":·["design-system"],
72 66 │ "confidence": 0.93,
73 67 │ "sources": [
········· │
92 86 │ "verifiedAt": "2026-08-12",
93 87 │ "sla": "needs-review",
94 │ - ······"appliesTo":·[
95 │ - ········"design-system"
96 │ - ······],
88 │ + ······"appliesTo":·["design-system"],
97 89 │ "confidence": 0.93,
98 90 │ "sources": [
········· │
117 109 │ "verifiedAt": "2026-08-12",
118 110 │ "sla": "needs-review",
119 │ - ······"appliesTo":·[
120 │ - ········"design-system"
121 │ - ······],
111 │ + ······"appliesTo":·["design-system"],
122 112 │ "confidence": 0.94,
123 113 │ "sources": [
········· │
142 132 │ "verifiedAt": "2026-08-12",
143 133 │ "sla": "needs-review",
144 │ - ······"appliesTo":·[
145 │ - ········"design-system"
146 │ - ······],
134 │ + ······"appliesTo":·["design-system"],
147 135 │ "confidence": 0.91,
148 136 │ "sources": [
········· │
167 155 │ "verifiedAt": "2026-08-12",
168 156 │ "sla": "needs-review",
169 │ - ······"appliesTo":·[
170 │ - ········"design-system"
171 │ - ······],
157 │ + ······"appliesTo":·["design-system"],
172 158 │ "confidence": 0.93,
173 159 │ "sources": [
········· │
192 178 │ "verifiedAt": "2026-08-12",
193 179 │ "sla": "needs-review",
194 │ - ······"appliesTo":·[
195 │ - ········"design-system"
196 │ - ······],
180 │ + ······"appliesTo":·["design-system"],
197 181 │ "confidence": 0.9,
198 182 │ "sources": [
········· │
217 201 │ "verifiedAt": "2026-08-12",
218 202 │ "sla": "needs-review",
219 │ - ······"appliesTo":·[
220 │ - ········"design-system"
221 │ - ······],
203 │ + ······"appliesTo":·["design-system"],
222 204 │ "confidence": 0.89,
223 205 │ "sources": [
········· │
242 224 │ "verifiedAt": "2026-08-12",
243 225 │ "sla": "needs-review",
244 │ - ······"appliesTo":·[
245 │ - ········"design-system"
246 │ - ······],
226 │ + ······"appliesTo":·["design-system"],
247 227 │ "confidence": 0.93,
248 228 │ "sources": [
········· │
267 247 │ "verifiedAt": "2026-08-12",
268 248 │ "sla": "needs-review",
269 │ - ······"appliesTo":·[
270 │ - ········"design-system"
271 │ - ······],
249 │ + ······"appliesTo":·["design-system"],
272 250 │ "confidence": 0.9,
273 251 │ "sources": [
········· │
292 270 │ "verifiedAt": "2026-08-12",
293 271 │ "sla": "needs-review",
294 │ - ······"appliesTo":·[
295 │ - ········"design-system"
296 │ - ······],
272 │ + ······"appliesTo":·["design-system"],
297 273 │ "confidence": 0.92,
298 274 │ "sources": [
········· │
317 293 │ "verifiedAt": "2026-08-12",
318 294 │ "sla": "needs-review",
319 │ - ······"appliesTo":·[
320 │ - ········"design-system"
321 │ - ······],
295 │ + ······"appliesTo":·["design-system"],
322 296 │ "confidence": 0.88,
323 297 │ "sources": [
········· │
342 316 │ "verifiedAt": "2026-08-12",
343 317 │ "sla": "needs-review",
344 │ - ······"appliesTo":·[
345 │ - ········"design-system"
346 │ - ······],
318 │ + ······"appliesTo":·["design-system"],
347 319 │ "confidence": 0.93,
348 320 │ "sources": [
········· │
367 339 │ "verifiedAt": "2026-08-12",
368 340 │ "sla": "needs-review",
369 │ - ······"appliesTo":·[
370 │ - ········"design-system"
371 │ - ······],
341 │ + ······"appliesTo":·["design-system"],
372 342 │ "confidence": 0.91,
373 343 │ "sources": [
········· │
392 362 │ "verifiedAt": "2026-08-12",
393 363 │ "sla": "needs-review",
394 │ - ······"appliesTo":·[
395 │ - ········"design-system"
396 │ - ······],
364 │ + ······"appliesTo":·["design-system"],
397 365 │ "confidence": 0.95,
398 366 │ "sources": [
········· │
417 385 │ "verifiedAt": "2026-08-12",
418 386 │ "sla": "needs-review",
419 │ - ······"appliesTo":·[
420 │ - ········"design-system"
421 │ - ······],
387 │ + ······"appliesTo":·["design-system"],
422 388 │ "confidence": 0.92,
423 389 │ "sources": [
········· │
442 408 │ "verifiedAt": "2026-08-12",
443 409 │ "sla": "needs-review",
444 │ - ······"appliesTo":·[
445 │ - ········"design-system"
446 │ - ······],
410 │ + ······"appliesTo":·["design-system"],
447 411 │ "confidence": 0.93,
448 412 │ "sources": [
········· │
467 431 │ "verifiedAt": "2026-08-12",
468 432 │ "sla": "needs-review",
469 │ - ······"appliesTo":·[
470 │ - ········"design-system"
471 │ - ······],
433 │ + ······"appliesTo":·["design-system"],
278 more lines truncated
.agents/skills/ui-ux-pro-max/scripts/tests/fixtures/catalogs/google-api.json format ━━━━━━━━━━━━━━━━
× Formatter would have printed the following content:
29 29 │ "category": "sans-serif",
30 30 │ "kind": "webfonts#webfont",
31 │ - ······"axes":·[
32 │ - ········{"tag":·"wght",·"start":·100,·"end":·900}
33 │ - ······]
31 │ + ······"axes":·[{·"tag":·"wght",·"start":·100,·"end":·900·}]
34 32 │ }
35 33 │ ]
.agents/skills/ui-ux-pro-max/scripts/tests/fixtures/catalogs/google-catalog.json format ━━━━━━━━━━━━
× Formatter would have printed the following content:
3 3 │ "familyMetadataList": [
4 4 │ {
5 │ - ······"family":·"Zeta·Serif",·"displayName":·null,·"category":·"Serif",·"stroke":·"Serif",
6 │ - ······"classifications":·["Display"],·"size":·1000,·"subsets":·["menu",·"latin-ext",·"latin"],
5 │ + ······"family":·"Zeta·Serif",
6 │ + ······"displayName":·null,
7 │ + ······"category":·"Serif",
8 │ + ······"stroke":·"Serif",
9 │ + ······"classifications":·["Display"],
10 │ + ······"size":·1000,
11 │ + ······"subsets":·["menu",·"latin-ext",·"latin"],
7 12 │ "fonts": {
8 │ - ········"400":·{"thickness":·5,·"slant":·1,·"width":·7,·"lineHeight":·1.2},
9 │ - ········"700":·{"thickness":·7,·"slant":·1,·"width":·7,·"lineHeight":·1.2},
10 │ - ········"700i":·{"thickness":·7,·"slant":·4,·"width":·7,·"lineHeight":·1.2}
11 │ - ······},·"axes":·[],·"designers":·["Zeta·Studio"],
12 │ - ······"lastModified":·"2025-06-02",·"dateAdded":·"2018-04-09",·"popularity":·90,
13 │ - ······"trending":·11,·"defaultSort":·9,·"androidFragment":·null,·"isNoto":·false,
14 │ - ······"colorCapabilities":·[],·"primaryScript":·"",·"primaryLanguage":·"",·"isOpenSource":·true,
15 │ - ······"isBrandFont":·false,·"languages":·[]
13 │ + ········"400":·{·"thickness":·5,·"slant":·1,·"width":·7,·"lineHeight":·1.2·},
14 │ + ········"700":·{·"thickness":·7,·"slant":·1,·"width":·7,·"lineHeight":·1.2·},
15 │ + ········"700i":·{·"thickness":·7,·"slant":·4,·"width":·7,·"lineHeight":·1.2·}
16 │ + ······},
17 │ + ······"axes":·[],
18 │ + ······"designers":·["Zeta·Studio"],
19 │ + ······"lastModified":·"2025-06-02",
20 │ + ······"dateAdded":·"2018-04-09",
21 │ + ······"popularity":·90,
22 │ + ······"trending":·11,
23 │ + ······"defaultSort":·9,
24 │ + ······"androidFragment":·null,
25 │ + ······"isNoto":·false,
26 │ + ······"colorCapabilities":·[],
27 │ + ······"primaryScript":·"",
28 │ + ······"primaryLanguage":·"",
29 │ + ······"isOpenSource":·true,
30 │ + ······"isBrandFont":·false,
31 │ + ······"languages":·[]
16 32 │ },
17 33 │ {
18 │ - ······"family":·"Alpha·Sans",·"displayName":·null,·"category":·"Sans·Serif",·"stroke":·"Sans·Serif",
19 │ - ······"classifications":·["Geometric"],·"size":·2000,·"subsets":·["menu",·"vietnamese",·"latin"],
34 │ + ······"family":·"Alpha·Sans",
35 │ + ······"displayName":·null,
36 │ + ······"category":·"Sans·Serif",
37 │ + ······"stroke":·"Sans·Serif",
38 │ + ······"classifications":·["Geometric"],
39 │ + ······"size":·2000,
40 │ + ······"subsets":·["menu",·"vietnamese",·"latin"],
20 41 │ "fonts": {
21 │ - ········"400":·{"thickness":·5,·"slant":·1,·"width":·7,·"lineHeight":·1.2},
22 │ - ········"400i":·{"thickness":·5,·"slant":·4,·"width":·7,·"lineHeight":·1.2},
23 │ - ········"500":·{"thickness":·6,·"slant":·1,·"width":·7,·"lineHeight":·1.2}
42 │ + ········"400":·{·"thickness":·5,·"slant":·1,·"width":·7,·"lineHeight":·1.2·},
43 │ + ········"400i":·{·"thickness":·5,·"slant":·4,·"width":·7,·"lineHeight":·1.2·},
44 │ + ········"500":·{·"thickness":·6,·"slant":·1,·"width":·7,·"lineHeight":·1.2·}
24 45 │ },
25 │ - ······"axes":·[{"tag":·"wght",·"min":·100.0,·"max":·900.0,·"defaultValue":·400.0}],
26 │ - ······"designers":·["Ada·Type",·"Binh·Fonts"],·"lastModified":·"2025-01-03",
27 │ - ······"dateAdded":·"2020-02-20",·"popularity":·42,·"trending":·7,·"defaultSort":·4,
28 │ - ······"androidFragment":·null,·"isNoto":·false,·"colorCapabilities":·[],·"primaryScript":·"",
29 │ - ······"primaryLanguage":·"",·"isOpenSource":·true,·"isBrandFont":·false,·"languages":·[]
46 │ + ······"axes":·[{·"tag":·"wght",·"min":·100.0,·"max":·900.0,·"defaultValue":·400.0·}],
47 │ + ······"designers":·["Ada·Type",·"Binh·Fonts"],
48 │ + ······"lastModified":·"2025-01-03",
49 │ + ······"dateAdded":·"2020-02-20",
50 │ + ······"popularity":·42,
51 │ + ······"trending":·7,
52 │ + ······"defaultSort":·4,
53 │ + ······"androidFragment":·null,
54 │ + ······"isNoto":·false,
55 │ + ······"colorCapabilities":·[],
56 │ + ······"primaryScript":·"",
57 │ + ······"primaryLanguage":·"",
58 │ + ······"isOpenSource":·true,
59 │ + ······"isBrandFont":·false,
60 │ + ······"languages":·[]
30 61 │ }
31 62 │ ],
.agents/skills/ui-ux-pro-max/scripts/tests/fixtures/catalogs/phosphor-core.json format ━━━━━━━━━━━━━
× Formatter would have printed the following content:
15 │ ····"alias":·{·"name":·"back-arrow",·"pascal_name":·"BackArrow"·},
│ + +
.agents/skills/ui-ux-pro-max/scripts/tests/fixtures/relevance-cases.json format ━━━━━━━━━━━━━━━━━━━━
× Formatter would have printed the following content:
9 9 │ "globalNegativeApplicability": {
10 10 │ "tag": "hard-negative",
11 │ - ····"domains":·["style",·"color",·"chart",·"landing",·"product",·"ux",·"typography",·"icons",·"gsap",·"react",·"web",·"google-fonts"],
12 │ - ····"stacks":·["react",·"nextjs",·"vue",·"svelte",·"astro",·"swiftui",·"react-native",·"flutter",·"nuxtjs",·"nuxt-ui",·"html-tailwind",·"shadcn",·"jetpack-compose",·"threejs",·"angular",·"laravel",·"javafx",·"wpf",·"winui",·"avalonia",·"uno",·"uwp"],
11 │ + ····"domains":·[
12 │ + ······"style",
13 │ + ······"color",
14 │ + ······"chart",
15 │ + ······"landing",
16 │ + ······"product",
17 │ + ······"ux",
18 │ + ······"typography",
19 │ + ······"icons",
20 │ + ······"gsap",
21 │ + ······"react",
22 │ + ······"web",
23 │ + ······"google-fonts"
24 │ + ····],
25 │ + ····"stacks":·[
26 │ + ······"react",
27 │ + ······"nextjs",
28 │ + ······"vue",
29 │ + ······"svelte",
30 │ + ······"astro",
31 │ + ······"swiftui",
32 │ + ······"react-native",
33 │ + ······"flutter",
34 │ + ······"nuxtjs",
35 │ + ······"nuxt-ui",
36 │ + ······"html-tailwind",
37 │ + ······"shadcn",
38 │ + ······"jetpack-compose",
39 │ + ······"threejs",
40 │ + ······"angular",
41 │ + ······"laravel",
42 │ + ······"javafx",
43 │ + ······"wpf",
44 │ + ······"winui",
45 │ + ······"avalonia",
46 │ + ······"uno",
47 │ + ······"uwp"
48 │ + ····],
13 49 │ "interpretation": "Run every hard-negative case against all registered domains and stacks. Any returned row is an implicit grade-0 false positive; aggregate reporting may cap this cross-product separately."
14 50 │ },
15 51 │ "cases": [
16 │ - ····{"id":"domain-style-glassmorphism","split":"calibration","mode":"domain","query":"frosted·glass·transparent·blurred·layered·UI","domain":"style","judgments":[{"identity":{"Style·Category":"Glassmorphism"},"grade":2}],"tags":["exact-intent","domain-positive"],"notes":"Canonical·visual·treatment,·expressed·through·its·descriptive·attributes."},
17 │ - ····{"id":"domain-style-accessible-paraphrase","split":"held_out","mode":"domain","query":"inclusive·high·contrast·interface·with·keyboard·nav·and·screen·readers","domain":"style","judgments":[{"identity":{"Style·Category":"Accessible·&·Ethical"},"grade":2},{"identity":{"Style·Category":"Inclusive·Design"},"grade":1}],"tags":["paraphrase","domain-positive"],"notes":"A·style·request,·not·an·individual·UX·rule."},
18 │ - ····{"id":"domain-color-spa","split":"calibration","mode":"domain","query":"beauty·spa·wellness·soft·pink·lavender·palette","domain":"color","judgments":[{"identity":{"Product·Type":"Beauty/Spa/Wellness·Service"},"grade":2}],"tags":["product-palette","domain-positive"],"notes":"Uses·the·public·Product·Type·as·the·stable·palette·identity."},
19 │ - ····{"id":"domain-color-cyber-typo","split":"held_out","mode":"domain","query":"cybersecurty·threat·dashboard·matrix·green·dark·pallete","domain":"color","judgments":[{"identity":{"Product·Type":"Cybersecurity·Platform"},"grade":2}],"tags":["typo","domain-positive"],"notes":"Deliberately·misspells·cybersecurity·and·palette."},
20 │ - ····{"id":"domain-chart-time-series","split":"calibration","mode":"domain","query":"trend·over·time·growth·timeline·line·chart","domain":"chart","judgments":[{"identity":{"Data·Type":"Trend·Over·Time"},"grade":2},{"identity":{"Data·Type":"Time-Series·Forecast"},"grade":1}],"tags":["exact-intent","domain-positive"],"notes":"Forecasting·is·acceptable·only·as·a·secondary·interpretation."},
21 │ - ····{"id":"domain-chart-correlation-paraphrase","split":"held_out","mode":"domain","query":"show·whether·two·measures·move·together·using·dots·and·bubbles","domain":"chart","judgments":[{"identity":{"Data·Type":"Correlation·/·Distribution"},"grade":2}],"tags":["paraphrase","domain-positive"],"notes":"Avoids·the·canonical·words·scatter·and·correlation."},
22 │ - ····{"id":"domain-landing-pricing","split":"calibration","mode":"domain","query":"pricing·plans·tiers·comparison·landing·CTA","domain":"landing","judgments":[{"identity":{"Pattern·Name":"Pricing·Page·+·CTA"},"grade":2},{"identity":{"Pattern·Name":"Pricing-Focused·Landing"},"grade":2},{"identity":{"Pattern·Name":"Comparison·Table·+·CTA"},"grade":1}],"tags":["multi-acceptable","domain-positive"],"notes":"Both·dedicated·pricing·patterns·are·equally·valid."},
23 │ - ····{"id":"domain-landing-enterprise-typo","split":"held_out","mode":"domain","query":"enterprise·credibilty·trust·authority·conversion·page","domain":"landing","judgments":[{"identity":{"Pattern·Name":"Trust·&·Authority·+·Conversion"},"grade":2},{"identity":{"Pattern·Name":"Enterprise·Gateway"},"grade":1}],"tags":["typo","domain-positive"],"notes":"Misspells·credibility·while·preserving·the·enterprise·intent."},
24 │ - ····{"id":"domain-product-spa","split":"calibration","mode":"domain","query":"salon·massage·skincare·booking·and·wellness·service","domain":"product","judgments":[{"identity":{"Product·Type":"Beauty/Spa/Wellness·Service"},"grade":2},{"identity":{"Product·Type":"Booking·&·Appointment·App"},"grade":1}],"tags":["multi-acceptable","domain-positive"],"notes":"The·industry·is·primary;·booking·is·a·supporting·capability."},
25 │ - ····{"id":"domain-product-security-paraphrase","split":"held_out","mode":"domain","query":"platform·for·monitoring·digital·threats·and·protecting·systems","domain":"product","judgments":[{"identity":{"Product·Type":"Cybersecurity·Platform"},"grade":2}],"tags":["paraphrase","domain-positive"],"notes":"Avoids·the·exact·keyword·cyber."},
26 │ - ····{"id":"domain-ux-keyboard-focus","split":"calibration","mode":"domain","query":"visible·focus·and·complete·keyboard·navigation·for·web·users","domain":"ux","judgments":[{"identity":{"Category":"Accessibility","Issue":"Keyboard·Navigation","Platform":"Web"},"grade":2},{"identity":{"Category":"Interaction","Issue":"Focus·States","Platform":"All"},"grade":2}],"tags":["multi-acceptable","domain-positive"],"notes":"Both·navigation·coverage·and·visible·focus·are·explicitly·requested."},
27 │ - ····{"id":"domain-ux-motion-paraphrase","split":"held_out","mode":"domain","query":"stop·animations·making·people·sick·and·honor·their·motion·preference","domain":"ux","judgments":[{"identity":{"Category":"Animation","Issue":"Reduced·Motion","Platform":"All"},"grade":2},{"identity":{"Category":"Animation","Issue":"Excessive·Motion","Platform":"All"},"grade":1}],"tags":["paraphrase","accessibility","domain-positive"],"notes":"Preference·support·is·stronger·than·generic·excessive-motion·advice."},
28 │ - ····{"id":"domain-typography-luxury","split":"calibration","mode":"domain","query":"elegant·luxury·serif·heading·with·clean·readable·body·font","domain":"typography","judgments":[{"identity":{"Font·Pairing·Name":"Classic·Elegant"},"grade":2},{"identity":{"Font·Pairing·Name":"Luxury·Serif"},"grade":2},{"identity":{"Font·Pairing·Name":"Luxury·Minimalist"},"grade":1}],"tags":["multi-acceptable","domain-positive"],"notes":"Several·curated·pairs·directly·satisfy·this·intentionally·broad·mood."},
29 │ - ····{"id":"domain-typography-accessible-typo","split":"held_out","mode":"domain","query":"dyslexia·frendly·hyperlegible·inclusive·type·pairing","domain":"typography","judgments":[{"identity":{"Font·Pairing·Name":"Accessibility·First"},"grade":2},{"identity":{"Font·Pairing·Name":"Academic/Research"},"grade":1}],"tags":["typo","accessibility","domain-positive"],"notes":"Misspells·friendly;·the·all-Atkinson·pairing·is·the·direct·answer."},
30 │ - ····{"id":"domain-icons-search","split":"calibration","mode":"domain","query":"find·lookup·search·icon·for·a·query·field","domain":"icons","judgments":[{"identity":{"Category":"Action","Icon·Name":"magnifying-glass","Library":"Phosphor"},"grade":2},{"identity":{"Category":"Action","Icon·Name":"funnel","Library":"Phosphor"},"grade":1}],"tags":["exact-intent","domain-positive"],"notes":"Filter·is·useful·but·not·equivalent·to·search."},
31 │ - ····{"id":"domain-icons-warning-typo","split":"held_out","mode":"domain","query":"warnng·caution·danger·status·symbol","domain":"icons","judgments":[{"identity":{"Category":"Status","Icon·Name":"warning","Library":"Phosphor"},"grade":2},{"identity":{"Category":"Status","Icon·Name":"warning-circle","Library":"Phosphor"},"grade":1}],"tags":["typo","domain-positive"],"notes":"Misspells·warning·and·allows·the·circled·variant·as·secondary."},
32 │ - ····{"id":"domain-gsap-scroll-reveal","split":"calibration","mode":"domain","query":"GSAP·reveal·elements·when·they·enter·the·viewport·on·scroll","domain":"gsap","judgments":[{"identity":{"Category":"Scroll·Reveal","Intensity·Tier":"Subtle","Trigger":"scroll·(viewport·enter)"},"grade":2},{"identity":{"Category":"Scroll·Reveal","Intensity·Tier":"Standard","Trigger":"scroll·(viewport·enter)"},"grade":2},{"identity":{"Category":"Scroll·Reveal","Intensity·Tier":"Complex","Trigger":"scroll·(continuous·scrub)"},"grade":1}],"tags":["multi-acceptable","domain-positive"],"notes":"Viewport-entry·variants·are·direct;·continuous·scrub·is·related·but·stronger."},
33 │ - ····{"id":"domain-gsap-skeleton-typo","split":"held_out","mode":"domain","query":"skeletn·shimmer·loader·while·async·content·waits","domain":"gsap","judgments":[{"identity":{"Category":"Loading·/·Skeleton","Intensity·Tier":"Subtle","Trigger":"on·mount·/·async·wait"},"grade":2},{"identity":{"Category":"Loading·/·Skeleton","Intensity·Tier":"Standard","Trigger":"on·mount·/·async·wait"},"grade":1}],"tags":["typo","domain-positive"],"notes":"Misspells·skeleton;·subtle·shimmer·is·the·most·exact·row."},
34 │ - ····{"id":"domain-react-parallel-promises","split":"calibration","mode":"domain","query":"React·Promise.all·parallel·concurrent·requests·instead·of·waterfall","domain":"react","judgments":[{"identity":{"Category":"Async·Waterfall","Issue":"Promise.all·Parallel","Platform":"React/Next.js"},"grade":2},{"identity":{"Category":"Async·Waterfall","Issue":"Dependency·Parallelization","Platform":"React/Next.js"},"grade":1}],"tags":["exact-intent","domain-positive"],"notes":"The·first·row·exactly·names·Promise.all."},
35 │ - ····{"id":"domain-react-dynamic-import-paraphrase","split":"held_out","mode":"domain","query":"load·a·heavy·JavaScript·chunk·only·when·the·component·is·needed","domain":"react","judgments":[{"identity":{"Category":"Bundle·Size","Issue":"Dynamic·Imports","Platform":"React/Next.js"},"grade":2},{"identity":{"Category":"Bundle·Size","Issue":"Conditional·Loading","Platform":"React/Next.js"},"grade":1}],"tags":["paraphrase","domain-positive"],"notes":"Avoids·the·canonical·term·lazy·in·the·main·clause."},
36 │ - ····{"id":"domain-web-icon-label","split":"calibration","mode":"domain","query":"accessible·name·for·an·icon-only·mobile·button","domain":"web","judgments":[{"identity":{"Category":"Accessibility","Issue":"Icon·Button·Labels","Platform":"iOS/Android/React·Native"},"grade":2}],"tags":["accessibility","domain-positive"],"notes":"App-interface·guidance·uses·the·public·web·domain·key."},
37 │ - ····{"id":"domain-web-virtual-list-paraphrase","split":"held_out","mode":"domain","query":"keep·a·very·long·mobile·list·smooth·without·rendering·every·row","domain":"web","judgments":[{"identity":{"Category":"Performance","Issue":"Virtualize·Long·Lists","Platform":"iOS/Android/React·Native"},"grade":2}],"tags":["paraphrase","domain-positive"],"notes":"Describes·virtualization·without·naming·FlatList."},
38 │ - ····{"id":"domain-google-fonts-inter","split":"calibration","mode":"domain","query":"Inter·variable·sans·serif·Google·font·family","domain":"google-fonts","judgments":[{"identity":{"Family":"Inter"},"grade":2},{"identity":{"Family":"Inter·Tight"},"grade":1}],"tags":["exact-entity","domain-positive"],"notes":"Exact·family·is·preferred·over·its·related·Tight·family."},
39 │ - ····{"id":"domain-google-fonts-atkinson-paraphrase","split":"held_out","mode":"domain","query":"hyperlegible·accessible·sans·typeface·for·easier·reading","domain":"google-fonts","judgments":[{"identity":{"Family":"Atkinson·Hyperlegible"},"grade":2},{"identity":{"Family":"Atkinson·Hyperlegible·Next"},"grade":1}],"tags":["paraphrase","accessibility","domain-positive"],"notes":"The·established·family·is·locked;·its·newer·related·family·is·acceptable."},
52 │ + ····{
53 │ + ······"id":·"domain-style-glassmorphism",
54 │ + ······"split":·"calibration",
55 │ + ······"mode":·"domain",
56 │ + ······"query":·"frosted·glass·transparent·blurred·layered·UI",
57 │ + ······"domain":·"style",
58 │ + ······"judgments":·[{·"identity":·{·"Style·Category":·"Glassmorphism"·},·"grade":·2·}],
59 │ + ······"tags":·["exact-intent",·"domain-positive"],
60 │ + ······"notes":·"Canonical·visual·treatment,·expressed·through·its·descriptive·attributes."
61 │ + ····},
62 │ + ····{
63 │ + ······"id":·"domain-style-accessible-paraphrase",
64 │ + ······"split":·"held_out",
65 │ + ······"mode":·"domain",
66 │ + ······"query":·"inclusive·high·contrast·interface·with·keyboard·nav·and·screen·readers",
67 │ + ······"domain":·"style",
68 │ + ······"judgments":·[
69 │ + ········{·"identity":·{·"Style·Category":·"Accessible·&·Ethical"·},·"grade":·2·},
70 │ + ········{·"identity":·{·"Style·Category":·"Inclusive·Design"·},·"grade":·1·}
71 │ + ······],
72 │ + ······"tags":·["paraphrase",·"domain-positive"],
73 │ + ······"notes":·"A·style·request,·not·an·individual·UX·rule."
74 │ + ····},
75 │ + ····{
76 │ + ······"id":·"domain-color-spa",
77 │ + ······"split":·"calibration",
78 │ + ······"mode":·"domain",
79 │ + ······"query":·"beauty·spa·wellness·soft·pink·lavender·palette",
80 │ + ······"domain":·"color",
81 │ + ······"judgments":·[{·"identity":·{·"Product·Type":·"Beauty/Spa/Wellness·Service"·},·"grade":·2·}],
82 │ + ······"tags":·["product-palette",·"domain-positive"],
83 │ + ······"notes":·"Uses·the·public·Product·Type·as·the·stable·palette·identity."
84 │ + ····},
85 │ + ····{
86 │ + ······"id":·"domain-color-cyber-typo",
87 │ + ······"split":·"held_out",
88 │ + ······"mode":·"domain",
89 │ + ······"query":·"cybersecurty·threat·dashboard·matrix·green·dark·pallete",
90 │ + ······"domain":·"color",
91 │ + ······"judgments":·[{·"identity":·{·"Product·Type":·"Cybersecurity·Platform"·},·"grade":·2·}],
92 │ + ······"tags":·["typo",·"domain-positive"],
93 │ + ······"notes":·"Deliberately·misspells·cybersecurity·and·palette."
94 │ + ····},
95 │ + ····{
96 │ + ······"id":·"domain-chart-time-series",
97 │ + ······"split":·"calibration",
98 │ + ······"mode":·"domain",
99 │ + ······"query":·"trend·over·time·growth·timeline·line·chart",
100 │ + ······"domain":·"chart",
101 │ + ······"judgments":·[
102 │ + ········{·"identity":·{·"Data·Type":·"Trend·Over·Time"·},·"grade":·2·},
103 │ + ········{·"identity":·{·"Data·Type":·"Time-Series·Forecast"·},·"grade":·1·}
104 │ + ······],
105 │ + ······"tags":·["exact-intent",·"domain-positive"],
106 │ + ······"notes":·"Forecasting·is·acceptable·only·as·a·secondary·interpretation."
107 │ + ····},
108 │ + ····{
109 │ + ······"id":·"domain-chart-correlation-paraphrase",
110 │ + ······"split":·"held_out",
111 │ + ······"mode":·"domain",
112 │ + ······"query":·"show·whether·two·measures·move·together·using·dots·and·bubbles",
113 │ + ······"domain":·"chart",
114 │ + ······"judgments":·[{·"identity":·{·"Data·Type":·"Correlation·/·Distribution"·},·"grade":·2·}],
115 │ + ······"tags":·["paraphrase",·"domain-positive"],
116 │ + ······"notes":·"Avoids·the·canonical·words·scatter·and·correlation."
117 │ + ····},
118 │ + ····{
119 │ + ······"id":·"domain-landing-pricing",
120 │ + ······"split":·"calibration",
121 │ + ······"mode":·"domain",
122 │ + ······"query":·"pricing·plans·tiers·comparison·landing·CTA",
123 │ + ······"domain":·"landing",
124 │ + ······"judgments":·[
125 │ + ········{·"identity":·{·"Pattern·Name":·"Pricing·Page·+·CTA"·},·"grade":·2·},
126 │ + ········{·"identity":·{·"Pattern·Name":·"Pricing-Focused·Landing"·},·"grade":·2·},
127 │ + ········{·"identity":·{·"Pattern·Name":·"Comparison·Table·+·CTA"·},·"grade":·1·}
128 │ + ······],
129 │ + ······"tags":·["multi-acceptable",·"domain-positive"],
130 │ + ······"notes":·"Both·dedicated·pricing·patterns·are·equally·valid."
131 │ + ····},
132 │ + ····{
1440 more lines truncated
.agents/skills/ui-ux-pro-max/scripts/tests/fixtures/relevance-thresholds.json format ━━━━━━━━━━━━━━━
× Formatter would have printed the following content:
14 14 │ "tolerancePolicy": "A 1e-12 numeric tolerance permits floating-point representation only. Current known failures remain visible in relevance-baseline.json; the gate prevents regressions and does not claim final quality targets are met.",
15 15 │ "metrics": {
16 │ - ····"routingAccuracy":·{"floor":·0.875,·"tolerance":·1e-12},
17 │ - ····"precisionAt1":·{"floor":·0.7631578947368421,·"tolerance":·1e-12},
18 │ - ····"precisionAt3":·{"floor":·0.3815789473684211,·"tolerance":·1e-12},
19 │ - ····"mrrAt3":·{"floor":·0.8355263157894737,·"tolerance":·1e-12},
20 │ - ····"ndcgAt3":·{"floor":·0.8366350964266653,·"tolerance":·1e-12},
21 │ - ····"negativeAbstention":·{"floor":·0.9117647058823529,·"tolerance":·1e-12},
22 │ - ····"typoRecoveryAt3":·{"floor":·1.0,·"tolerance":·1e-12},
23 │ - ····"designSystemCoherence":·{"floor":·0.71875,·"tolerance":·1e-12}
16 │ + ····"routingAccuracy":·{·"floor":·0.875,·"tolerance":·1e-12·},
17 │ + ····"precisionAt1":·{·"floor":·0.7631578947368421,·"tolerance":·1e-12·},
18 │ + ····"precisionAt3":·{·"floor":·0.3815789473684211,·"tolerance":·1e-12·},
19 │ + ····"mrrAt3":·{·"floor":·0.8355263157894737,·"tolerance":·1e-12·},
20 │ + ····"ndcgAt3":·{·"floor":·0.8366350964266653,·"tolerance":·1e-12·},
21 │ + ····"negativeAbstention":·{·"floor":·0.9117647058823529,·"tolerance":·1e-12·},
22 │ + ····"typoRecoveryAt3":·{·"floor":·1.0,·"tolerance":·1e-12·},
23 │ + ····"designSystemCoherence":·{·"floor":·0.71875,·"tolerance":·1e-12·}
24 24 │ },
25 25 │ "sampleMinimums": {
······· │
46 46 │ "calibration": {
47 47 │ "metrics": {
48 │ - ········"routingAccuracy":·{"floor":·0.8,·"tolerance":·1e-12},
49 │ - ········"precisionAt1":·{"floor":·0.8974358974358975,·"tolerance":·1e-12},
50 │ - ········"precisionAt3":·{"floor":·0.40170940170940167,·"tolerance":·1e-12},
51 │ - ········"mrrAt3":·{"floor":·0.9230769230769231,·"tolerance":·1e-12},
52 │ - ········"ndcgAt3":·{"floor":·0.9103072109232644,·"tolerance":·1e-12},
53 │ - ········"negativeAbstention":·{"floor":·0.9411764705882353,·"tolerance":·1e-12},
54 │ - ········"typoRecoveryAt3":·{"floor":·0.0,·"tolerance":·1e-12},
55 │ - ········"designSystemCoherence":·{"floor":·0.6875,·"tolerance":·1e-12}
48 │ + ········"routingAccuracy":·{·"floor":·0.8,·"tolerance":·1e-12·},
49 │ + ········"precisionAt1":·{·"floor":·0.8974358974358975,·"tolerance":·1e-12·},
50 │ + ········"precisionAt3":·{·"floor":·0.40170940170940167,·"tolerance":·1e-12·},
51 │ + ········"mrrAt3":·{·"floor":·0.9230769230769231,·"tolerance":·1e-12·},
52 │ + ········"ndcgAt3":·{·"floor":·0.9103072109232644,·"tolerance":·1e-12·},
53 │ + ········"negativeAbstention":·{·"floor":·0.9411764705882353,·"tolerance":·1e-12·},
54 │ + ········"typoRecoveryAt3":·{·"floor":·0.0,·"tolerance":·1e-12·},
55 │ + ········"designSystemCoherence":·{·"floor":·0.6875,·"tolerance":·1e-12·}
56 56 │ },
57 │ - ······"sampleMinimums":·{"cases":·46,·"retrieval":·39,·"routing":·5,·"negativeChecks":·102,·"typo":·0,·"designSystem":·4}
57 │ + ······"sampleMinimums":·{
58 │ + ········"cases":·46,
59 │ + ········"retrieval":·39,
60 │ + ········"routing":·5,
61 │ + ········"negativeChecks":·102,
62 │ + ········"typo":·0,
63 │ + ········"designSystem":·4
64 │ + ······}
58 65 │ },
59 66 │ "held_out": {
60 67 │ "metrics": {
61 │ - ········"routingAccuracy":·{"floor":·1.0,·"tolerance":·1e-12},
62 │ - ········"precisionAt1":·{"floor":·0.6216216216216216,·"tolerance":·1e-12},
63 │ - ········"precisionAt3":·{"floor":·0.36036036036036034,·"tolerance":·1e-12},
64 │ - ········"mrrAt3":·{"floor":·0.7432432432432432,·"tolerance":·1e-12},
65 │ - ········"ndcgAt3":·{"floor":·0.7589807054707906,·"tolerance":·1e-12},
66 │ - ········"negativeAbstention":·{"floor":·0.8823529411764706,·"tolerance":·1e-12},
67 │ - ········"typoRecoveryAt3":·{"floor":·1.0,·"tolerance":·1e-12},
68 │ - ········"designSystemCoherence":·{"floor":·0.75,·"tolerance":·1e-12}
68 │ + ········"routingAccuracy":·{·"floor":·1.0,·"tolerance":·1e-12·},
69 │ + ········"precisionAt1":·{·"floor":·0.6216216216216216,·"tolerance":·1e-12·},
70 │ + ········"precisionAt3":·{·"floor":·0.36036036036036034,·"tolerance":·1e-12·},
71 │ + ········"mrrAt3":·{·"floor":·0.7432432432432432,·"tolerance":·1e-12·},
72 │ + ········"ndcgAt3":·{·"floor":·0.7589807054707906,·"tolerance":·1e-12·},
73 │ + ········"negativeAbstention":·{·"floor":·0.8823529411764706,·"tolerance":·1e-12·},
74 │ + ········"typoRecoveryAt3":·{·"floor":·1.0,·"tolerance":·1e-12·},
75 │ + ········"designSystemCoherence":·{·"floor":·0.75,·"tolerance":·1e-12·}
69 76 │ },
70 │ - ······"sampleMinimums":·{"cases":·44,·"retrieval":·37,·"routing":·3,·"negativeChecks":·102,·"typo":·5,·"designSystem":·4}
77 │ + ······"sampleMinimums":·{
78 │ + ········"cases":·44,
79 │ + ········"retrieval":·37,
80 │ + ········"routing":·3,
81 │ + ········"negativeChecks":·102,
82 │ + ········"typo":·5,
83 │ + ········"designSystem":·4
84 │ + ······}
71 85 │ }
72 86 │ },
73 87 │ "lockedCases": {
74 │ - ····"domain-style-glassmorphism":·{"withinTop":·1,·"minimumGrade":·2},
75 │ - ····"domain-color-spa":·{"withinTop":·1,·"minimumGrade":·2},
76 │ - ····"domain-chart-time-series":·{"withinTop":·1,·"minimumGrade":·2},
77 │ - ····"domain-landing-pricing":·{"withinTop":·1,·"minimumGrade":·2},
78 │ - ····"domain-product-spa":·{"withinTop":·1,·"minimumGrade":·2},
79 │ - ····"domain-ux-keyboard-focus":·{"withinTop":·1,·"minimumGrade":·2},
80 │ - ····"domain-typography-luxury":·{"withinTop":·1,·"minimumGrade":·2},
81 │ - ····"domain-icons-search":·{"withinTop":·1,·"minimumGrade":·2},
82 │ - ····"domain-gsap-scroll-reveal":·{"withinTop":·1,·"minimumGrade":·2},
83 │ - ····"domain-react-parallel-promises":·{"withinTop":·1,·"minimumGrade":·2},
84 │ - ····"domain-web-icon-label":·{"withinTop":·1,·"minimumGrade":·2},
85 │ - ····"domain-google-fonts-inter":·{"withinTop":·1,·"minimumGrade":·2},
86 │ - ····"stack-swiftui-navigation":·{"withinTop":·1,·"minimumGrade":·2},
87 │ - ····"stack-threejs-orbitcontrols":·{"withinTop":·1,·"minimumGrade":·2},
88 │ - ····"stack-uwp-migration":·{"withinTop":·1,·"minimumGrade":·2},
89 │ - ····"stack-winui-dispatcherqueue":·{"withinTop":·1,·"minimumGrade":·2}
88 │ + ····"domain-style-glassmorphism":·{·"withinTop":·1,·"minimumGrade":·2·},
89 │ + ····"domain-color-spa":·{·"withinTop":·1,·"minimumGrade":·2·},
90 │ + ····"domain-chart-time-series":·{·"withinTop":·1,·"minimumGrade":·2·},
91 │ + ····"domain-landing-pricing":·{·"withinTop":·1,·"minimumGrade":·2·},
92 │ + ····"domain-product-spa":·{·"withinTop":·1,·"minimumGrade":·2·},
93 │ + ····"domain-ux-keyboard-focus":·{·"withinTop":·1,·"minimumGrade":·2·},
94 │ + ····"domain-typography-luxury":·{·"withinTop":·1,·"minimumGrade":·2·},
95 │ + ····"domain-icons-search":·{·"withinTop":·1,·"minimumGrade":·2·},
96 │ + ····"domain-gsap-scroll-reveal":·{·"withinTop":·1,·"minimumGrade":·2·},
97 │ + ····"domain-react-parallel-promises":·{·"withinTop":·1,·"minimumGrade":·2·},
98 │ + ····"domain-web-icon-label":·{·"withinTop":·1,·"minimumGrade":·2·},
99 │ + ····"domain-google-fonts-inter":·{·"withinTop":·1,·"minimumGrade":·2·},
100 │ + ····"stack-swiftui-navigation":·{·"withinTop":·1,·"minimumGrade":·2·},
101 │ + ····"stack-threejs-orbitcontrols":·{·"withinTop":·1,·"minimumGrade":·2·},
102 │ + ····"stack-uwp-migration":·{·"withinTop":·1,·"minimumGrade":·2·},
103 │ + ····"stack-winui-dispatcherqueue":·{·"withinTop":·1,·"minimumGrade":·2·}
90 104 │ },
91 105 │ "proposedFinalTargets": {
.artifacts/resources-global-operating-systems-closure/closure-results.json format ━━━━━━━━━━━━━━━━━━
× Formatter would have printed the following content:
8 8 │ "id": "DB-SO-01",
9 9 │ "result": "pass",
10 │ - ······"http":·[
11 │ - ········201
12 │ - ······]
10 │ + ······"http":·[201]
13 11 │ },
14 12 │ {
15 13 │ "id": "DB-SO-02",
16 14 │ "result": "pass",
17 │ - ······"http":·[
18 │ - ········201
19 │ - ······]
15 │ + ······"http":·[201]
20 16 │ },
21 17 │ {
22 18 │ "id": "DB-SO-03",
23 19 │ "result": "pass",
24 │ - ······"http":·[
25 │ - ········409
26 │ - ······]
20 │ + ······"http":·[409]
27 21 │ },
28 22 │ {
29 23 │ "id": "DB-SO-04",
30 24 │ "result": "pass",
31 │ - ······"http":·[
32 │ - ········201
33 │ - ······]
25 │ + ······"http":·[201]
34 26 │ },
35 27 │ {
36 28 │ "id": "DB-SO-05",
37 29 │ "result": "pass",
38 │ - ······"http":·[
39 │ - ········201
40 │ - ······]
30 │ + ······"http":·[201]
41 31 │ },
42 32 │ {
43 33 │ "id": "DB-SO-06",
44 34 │ "result": "pass",
45 │ - ······"http":·[
46 │ - ········201
47 │ - ······]
35 │ + ······"http":·[201]
48 36 │ },
49 37 │ {
50 38 │ "id": "DB-SO-07",
51 39 │ "result": "pass",
52 │ - ······"http":·[
53 │ - ········201,
54 │ - ········200
55 │ - ······]
40 │ + ······"http":·[201,·200]
56 41 │ },
57 42 │ {
58 43 │ "id": "DB-SO-08",
59 44 │ "result": "pass",
60 │ - ······"http":·[
61 │ - ········200
62 │ - ······]
45 │ + ······"http":·[200]
63 46 │ },
64 47 │ {
65 48 │ "id": "DB-SO-09",
66 49 │ "result": "pass",
67 │ - ······"http":·[
68 │ - ········404
69 │ - ······]
50 │ + ······"http":·[404]
70 51 │ },
71 52 │ {
72 53 │ "id": "DB-SO-10",
73 54 │ "result": "pass",
74 │ - ······"http":·[
75 │ - ········404
76 │ - ······]
55 │ + ······"http":·[404]
77 56 │ },
78 57 │ {
79 58 │ "id": "DB-SO-11",
80 59 │ "result": "pass",
81 │ - ······"http":·[
82 │ - ········200
83 │ - ······]
60 │ + ······"http":·[200]
84 61 │ },
85 62 │ {
86 63 │ "id": "DB-SO-12",
87 64 │ "result": "pass",
88 │ - ······"http":·[
89 │ - ········409
90 │ - ······]
65 │ + ······"http":·[409]
91 66 │ },
92 67 │ {
93 68 │ "id": "DB-SO-13",
94 69 │ "result": "pass",
95 │ - ······"http":·[
96 │ - ········200,
97 │ - ········200
98 │ - ······]
70 │ + ······"http":·[200,·200]
99 71 │ },
100 72 │ {
101 73 │ "id": "DB-SO-14",
102 74 │ "result": "pass",
103 │ - ······"http":·[
104 │ - ········200,
105 │ - ········200
106 │ - ······]
75 │ + ······"http":·[200,·200]
107 76 │ },
108 77 │ {
109 78 │ "id": "DB-SO-15",
110 79 │ "result": "pass",
111 │ - ······"http":·[
112 │ - ········409
113 │ - ······]
80 │ + ······"http":·[409]
114 81 │ },
115 82 │ {
116 83 │ "id": "DB-SO-16",
117 84 │ "result": "pass",
118 │ - ······"http":·[
119 │ - ········200,
120 │ - ········200
121 │ - ······]
85 │ + ······"http":·[200,·200]
122 86 │ },
123 87 │ {
124 88 │ "id": "DB-SO-17",
125 89 │ "result": "pass",
126 │ - ······"http":·[
127 │ - ········200
128 │ - ······]
90 │ + ······"http":·[200]
129 91 │ },
130 92 │ {
131 93 │ "id": "DB-SO-18",
132 94 │ "result": "pass",
133 │ - ······"http":·[
134 │ - ········200,
135 │ - ········200
136 │ - ······]
95 │ + ······"http":·[200,·200]
137 96 │ },
138 97 │ {
139 98 │ "id": "DB-SO-19",
87 more lines truncated
.artifacts/resources-global-operating-systems-closure/legacy-evolution.json format ━━━━━━━━━━━━━━━━━
× Formatter would have printed the following content:
99 99 │ "customizationPreserved": true,
100 100 │ "availabilityPreserved": true
101 │ - }
101 │ + }
102 │ +
.artifacts/resources-global-operating-systems-unblock/mariadb/closure-results.json format ━━━━━━━━━━
× Formatter would have printed the following content:
8 8 │ "id": "DB-SO-01",
9 9 │ "result": "pass",
10 │ - ······"http":·[
11 │ - ········201
12 │ - ······]
10 │ + ······"http":·[201]
13 11 │ },
14 12 │ {
15 13 │ "id": "DB-SO-02",
16 14 │ "result": "pass",
17 │ - ······"http":·[
18 │ - ········201
19 │ - ······]
15 │ + ······"http":·[201]
20 16 │ },
21 17 │ {
22 18 │ "id": "DB-SO-03",
23 19 │ "result": "pass",
24 │ - ······"http":·[
25 │ - ········409
26 │ - ······]
20 │ + ······"http":·[409]
27 21 │ },
28 22 │ {
29 23 │ "id": "DB-SO-04",
30 24 │ "result": "pass",
31 │ - ······"http":·[
32 │ - ········201
33 │ - ······]
25 │ + ······"http":·[201]
34 26 │ },
35 27 │ {
36 28 │ "id": "DB-SO-05",
37 29 │ "result": "pass",
38 │ - ······"http":·[
39 │ - ········201
40 │ - ······]
30 │ + ······"http":·[201]
41 31 │ },
42 32 │ {
43 33 │ "id": "DB-SO-06",
44 34 │ "result": "pass",
45 │ - ······"http":·[
46 │ - ········201
47 │ - ······]
35 │ + ······"http":·[201]
48 36 │ },
49 37 │ {
50 38 │ "id": "DB-SO-07",
51 39 │ "result": "pass",
52 │ - ······"http":·[
53 │ - ········201,
54 │ - ········200
55 │ - ······]
40 │ + ······"http":·[201,·200]
56 41 │ },
57 42 │ {
58 43 │ "id": "DB-SO-08",
59 44 │ "result": "pass",
60 │ - ······"http":·[
61 │ - ········200
62 │ - ······]
45 │ + ······"http":·[200]
63 46 │ },
64 47 │ {
65 48 │ "id": "DB-SO-09",
66 49 │ "result": "pass",
67 │ - ······"http":·[
68 │ - ········404
69 │ - ······]
50 │ + ······"http":·[404]
70 51 │ },
71 52 │ {
72 53 │ "id": "DB-SO-10",
73 54 │ "result": "pass",
74 │ - ······"http":·[
75 │ - ········404
76 │ - ······]
55 │ + ······"http":·[404]
77 56 │ },
78 57 │ {
79 58 │ "id": "DB-SO-11",
80 59 │ "result": "pass",
81 │ - ······"http":·[
82 │ - ········200
83 │ - ······]
60 │ + ······"http":·[200]
84 61 │ },
85 62 │ {
86 63 │ "id": "DB-SO-12",
87 64 │ "result": "pass",
88 │ - ······"http":·[
89 │ - ········409
90 │ - ······]
65 │ + ······"http":·[409]
91 66 │ },
92 67 │ {
93 68 │ "id": "DB-SO-13",
94 69 │ "result": "pass",
95 │ - ······"http":·[
96 │ - ········200,
97 │ - ········200
98 │ - ······]
70 │ + ······"http":·[200,·200]
99 71 │ },
100 72 │ {
101 73 │ "id": "DB-SO-14",
102 74 │ "result": "pass",
103 │ - ······"http":·[
104 │ - ········200,
105 │ - ········200
106 │ - ······]
75 │ + ······"http":·[200,·200]
107 76 │ },
108 77 │ {
109 78 │ "id": "DB-SO-15",
110 79 │ "result": "pass",
111 │ - ······"http":·[
112 │ - ········409
113 │ - ······]
80 │ + ······"http":·[409]
114 81 │ },
115 82 │ {
116 83 │ "id": "DB-SO-16",
117 84 │ "result": "pass",
118 │ - ······"http":·[
119 │ - ········200,
120 │ - ········200
121 │ - ······]
85 │ + ······"http":·[200,·200]
122 86 │ },
123 87 │ {
124 88 │ "id": "DB-SO-17",
125 89 │ "result": "pass",
126 │ - ······"http":·[
127 │ - ········200
128 │ - ······]
90 │ + ······"http":·[200]
129 91 │ },
130 92 │ {
131 93 │ "id": "DB-SO-18",
132 94 │ "result": "pass",
133 │ - ······"http":·[
134 │ - ········200,
135 │ - ········200
136 │ - ······]
95 │ + ······"http":·[200,·200]
137 96 │ },
138 97 │ {
139 98 │ "id": "DB-SO-19",
87 more lines truncated
.artifacts/resources-global-operating-systems/global-operating-systems-results.json format ━━━━━━━━━━
× Formatter would have printed the following content:
10 10 │ "contract": 3,
11 11 │ "gatesEnabledOnlyInDisposableTest": true
12 │ - }
12 │ + }
13 │ +
The number of diagnostics exceeds the limit allowed. Use --max-diagnostics to increase it.
Diagnostics not shown: 159.
Checked 2262 files in 1170ms. No fixes applied.
Found 173 errors.
Found 1 warning.
Found 5 infos.
check ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Some errors were emitted while running checks.
[ELIFECYCLE] Command failed with exit code 1.