@tangle-network/browser-agent-driver 0.29.0 → 0.31.0
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/dist/brain/index.d.ts +15 -1
- package/dist/brain/index.d.ts.map +1 -1
- package/dist/brain/index.js +67 -5
- package/dist/brain/index.js.map +1 -1
- package/dist/cli-ack-patch.d.ts +39 -0
- package/dist/cli-ack-patch.d.ts.map +1 -0
- package/dist/cli-ack-patch.js +47 -0
- package/dist/cli-ack-patch.js.map +1 -0
- package/dist/cli-design-audit.d.ts +16 -0
- package/dist/cli-design-audit.d.ts.map +1 -1
- package/dist/cli-design-audit.js +232 -7
- package/dist/cli-design-audit.js.map +1 -1
- package/dist/cli-jobs.d.ts +13 -0
- package/dist/cli-jobs.d.ts.map +1 -0
- package/dist/cli-jobs.js +262 -0
- package/dist/cli-jobs.js.map +1 -0
- package/dist/cli-patterns.d.ts +26 -0
- package/dist/cli-patterns.d.ts.map +1 -0
- package/dist/cli-patterns.js +49 -0
- package/dist/cli-patterns.js.map +1 -0
- package/dist/cli-reports.d.ts +12 -0
- package/dist/cli-reports.d.ts.map +1 -0
- package/dist/cli-reports.js +97 -0
- package/dist/cli-reports.js.map +1 -0
- package/dist/cli-ui.d.ts.map +1 -1
- package/dist/cli-ui.js +5 -1
- package/dist/cli-ui.js.map +1 -1
- package/dist/cli.js +52 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/design/audit/attribution/aggregate.d.ts +16 -0
- package/dist/design/audit/attribution/aggregate.d.ts.map +1 -0
- package/dist/design/audit/attribution/aggregate.js +81 -0
- package/dist/design/audit/attribution/aggregate.js.map +1 -0
- package/dist/design/audit/attribution/store.d.ts +36 -0
- package/dist/design/audit/attribution/store.d.ts.map +1 -0
- package/dist/design/audit/attribution/store.js +108 -0
- package/dist/design/audit/attribution/store.js.map +1 -0
- package/dist/design/audit/attribution/types.d.ts +13 -0
- package/dist/design/audit/attribution/types.d.ts.map +1 -0
- package/dist/design/audit/attribution/types.js +10 -0
- package/dist/design/audit/attribution/types.js.map +1 -0
- package/dist/design/audit/classify-ensemble.d.ts +46 -0
- package/dist/design/audit/classify-ensemble.d.ts.map +1 -0
- package/dist/design/audit/classify-ensemble.js +207 -0
- package/dist/design/audit/classify-ensemble.js.map +1 -0
- package/dist/design/audit/ethics/check.d.ts +59 -0
- package/dist/design/audit/ethics/check.d.ts.map +1 -0
- package/dist/design/audit/ethics/check.js +137 -0
- package/dist/design/audit/ethics/check.js.map +1 -0
- package/dist/design/audit/ethics/loader.d.ts +21 -0
- package/dist/design/audit/ethics/loader.d.ts.map +1 -0
- package/dist/design/audit/ethics/loader.js +207 -0
- package/dist/design/audit/ethics/loader.js.map +1 -0
- package/dist/design/audit/ethics/rules/finance.yaml +37 -0
- package/dist/design/audit/ethics/rules/kids.yaml +37 -0
- package/dist/design/audit/ethics/rules/legal.yaml +35 -0
- package/dist/design/audit/ethics/rules/medical.yaml +36 -0
- package/dist/design/audit/evaluate.d.ts +69 -0
- package/dist/design/audit/evaluate.d.ts.map +1 -1
- package/dist/design/audit/evaluate.js +417 -55
- package/dist/design/audit/evaluate.js.map +1 -1
- package/dist/design/audit/first-principles-mode.d.ts +42 -0
- package/dist/design/audit/first-principles-mode.d.ts.map +1 -0
- package/dist/design/audit/first-principles-mode.js +77 -0
- package/dist/design/audit/first-principles-mode.js.map +1 -0
- package/dist/design/audit/modality/android.d.ts +14 -0
- package/dist/design/audit/modality/android.d.ts.map +1 -0
- package/dist/design/audit/modality/android.js +18 -0
- package/dist/design/audit/modality/android.js.map +1 -0
- package/dist/design/audit/modality/html.d.ts +22 -0
- package/dist/design/audit/modality/html.d.ts.map +1 -0
- package/dist/design/audit/modality/html.js +51 -0
- package/dist/design/audit/modality/html.js.map +1 -0
- package/dist/design/audit/modality/index.d.ts +8 -0
- package/dist/design/audit/modality/index.d.ts.map +1 -0
- package/dist/design/audit/modality/index.js +15 -0
- package/dist/design/audit/modality/index.js.map +1 -0
- package/dist/design/audit/modality/ios.d.ts +16 -0
- package/dist/design/audit/modality/ios.d.ts.map +1 -0
- package/dist/design/audit/modality/ios.js +19 -0
- package/dist/design/audit/modality/ios.js.map +1 -0
- package/dist/design/audit/modality/types.d.ts +9 -0
- package/dist/design/audit/modality/types.d.ts.map +1 -0
- package/dist/design/audit/modality/types.js +9 -0
- package/dist/design/audit/modality/types.js.map +1 -0
- package/dist/design/audit/patches/index.d.ts +8 -0
- package/dist/design/audit/patches/index.d.ts.map +1 -0
- package/dist/design/audit/patches/index.js +5 -0
- package/dist/design/audit/patches/index.js.map +1 -0
- package/dist/design/audit/patches/parse.d.ts +29 -0
- package/dist/design/audit/patches/parse.d.ts.map +1 -0
- package/dist/design/audit/patches/parse.js +153 -0
- package/dist/design/audit/patches/parse.js.map +1 -0
- package/dist/design/audit/patches/render.d.ts +20 -0
- package/dist/design/audit/patches/render.d.ts.map +1 -0
- package/dist/design/audit/patches/render.js +55 -0
- package/dist/design/audit/patches/render.js.map +1 -0
- package/dist/design/audit/patches/severity-enforcement.d.ts +23 -0
- package/dist/design/audit/patches/severity-enforcement.d.ts.map +1 -0
- package/dist/design/audit/patches/severity-enforcement.js +42 -0
- package/dist/design/audit/patches/severity-enforcement.js.map +1 -0
- package/dist/design/audit/patches/validate.d.ts +34 -0
- package/dist/design/audit/patches/validate.d.ts.map +1 -0
- package/dist/design/audit/patches/validate.js +53 -0
- package/dist/design/audit/patches/validate.js.map +1 -0
- package/dist/design/audit/patterns/match.d.ts +24 -0
- package/dist/design/audit/patterns/match.d.ts.map +1 -0
- package/dist/design/audit/patterns/match.js +48 -0
- package/dist/design/audit/patterns/match.js.map +1 -0
- package/dist/design/audit/patterns/mine.d.ts +31 -0
- package/dist/design/audit/patterns/mine.d.ts.map +1 -0
- package/dist/design/audit/patterns/mine.js +35 -0
- package/dist/design/audit/patterns/mine.js.map +1 -0
- package/dist/design/audit/patterns/store.d.ts +14 -0
- package/dist/design/audit/patterns/store.d.ts.map +1 -0
- package/dist/design/audit/patterns/store.js +53 -0
- package/dist/design/audit/patterns/store.js.map +1 -0
- package/dist/design/audit/patterns/types.d.ts +53 -0
- package/dist/design/audit/patterns/types.d.ts.map +1 -0
- package/dist/design/audit/patterns/types.js +13 -0
- package/dist/design/audit/patterns/types.js.map +1 -0
- package/dist/design/audit/pipeline.d.ts +26 -0
- package/dist/design/audit/pipeline.d.ts.map +1 -1
- package/dist/design/audit/pipeline.js +131 -4
- package/dist/design/audit/pipeline.js.map +1 -1
- package/dist/design/audit/rubric/anchor-loader.d.ts +44 -0
- package/dist/design/audit/rubric/anchor-loader.d.ts.map +1 -0
- package/dist/design/audit/rubric/anchor-loader.js +210 -0
- package/dist/design/audit/rubric/anchor-loader.js.map +1 -0
- package/dist/design/audit/rubric/anchors/blog.yaml +33 -0
- package/dist/design/audit/rubric/anchors/dashboard.yaml +35 -0
- package/dist/design/audit/rubric/anchors/docs.yaml +35 -0
- package/dist/design/audit/rubric/anchors/ecommerce.yaml +33 -0
- package/dist/design/audit/rubric/anchors/marketing.yaml +34 -0
- package/dist/design/audit/rubric/anchors/saas-app.yaml +38 -0
- package/dist/design/audit/rubric/anchors/social.yaml +33 -0
- package/dist/design/audit/rubric/anchors/tool.yaml +33 -0
- package/dist/design/audit/rubric/anchors/utility.yaml +33 -0
- package/dist/design/audit/rubric/fragments/audience-clinician.md +42 -0
- package/dist/design/audit/rubric/fragments/audience-developer.md +40 -0
- package/dist/design/audit/rubric/fragments/audience-kids.md +35 -0
- package/dist/design/audit/rubric/fragments/audience-vulnerability-minor-facing.md +37 -0
- package/dist/design/audit/rubric/fragments/first-principles.md +65 -0
- package/dist/design/audit/rubric/fragments/modality-mobile.md +39 -0
- package/dist/design/audit/rubric/fragments/modality-tablet.md +35 -0
- package/dist/design/audit/rubric/fragments/regulatory-coppa.md +32 -0
- package/dist/design/audit/rubric/fragments/regulatory-gdpr.md +33 -0
- package/dist/design/audit/rubric/fragments/regulatory-hipaa.md +36 -0
- package/dist/design/audit/rubric/fragments/universal-product-intent.md +48 -0
- package/dist/design/audit/rubric/loader.d.ts +26 -6
- package/dist/design/audit/rubric/loader.d.ts.map +1 -1
- package/dist/design/audit/rubric/loader.js +77 -27
- package/dist/design/audit/rubric/loader.js.map +1 -1
- package/dist/design/audit/rubric/rollup-weights.d.ts +25 -0
- package/dist/design/audit/rubric/rollup-weights.d.ts.map +1 -0
- package/dist/design/audit/rubric/rollup-weights.js +51 -0
- package/dist/design/audit/rubric/rollup-weights.js.map +1 -0
- package/dist/design/audit/types.d.ts +28 -0
- package/dist/design/audit/types.d.ts.map +1 -1
- package/dist/design/audit/v2/build-result.d.ts +47 -0
- package/dist/design/audit/v2/build-result.d.ts.map +1 -0
- package/dist/design/audit/v2/build-result.js +163 -0
- package/dist/design/audit/v2/build-result.js.map +1 -0
- package/dist/design/audit/v2/score.d.ts +49 -0
- package/dist/design/audit/v2/score.d.ts.map +1 -0
- package/dist/design/audit/v2/score.js +211 -0
- package/dist/design/audit/v2/score.js.map +1 -0
- package/dist/design/audit/v2/types.d.ts +431 -0
- package/dist/design/audit/v2/types.d.ts.map +1 -0
- package/dist/design/audit/v2/types.js +26 -0
- package/dist/design/audit/v2/types.js.map +1 -0
- package/dist/discover/index.d.ts +16 -0
- package/dist/discover/index.d.ts.map +1 -0
- package/dist/discover/index.js +25 -0
- package/dist/discover/index.js.map +1 -0
- package/dist/discover/wayback.d.ts +49 -0
- package/dist/discover/wayback.d.ts.map +1 -0
- package/dist/discover/wayback.js +123 -0
- package/dist/discover/wayback.js.map +1 -0
- package/dist/jobs/anti-bot.d.ts +19 -0
- package/dist/jobs/anti-bot.d.ts.map +1 -0
- package/dist/jobs/anti-bot.js +64 -0
- package/dist/jobs/anti-bot.js.map +1 -0
- package/dist/jobs/cost-estimate.d.ts +12 -0
- package/dist/jobs/cost-estimate.d.ts.map +1 -0
- package/dist/jobs/cost-estimate.js +21 -0
- package/dist/jobs/cost-estimate.js.map +1 -0
- package/dist/jobs/cost-history.d.ts +19 -0
- package/dist/jobs/cost-history.d.ts.map +1 -0
- package/dist/jobs/cost-history.js +42 -0
- package/dist/jobs/cost-history.js.map +1 -0
- package/dist/jobs/index.d.ts +31 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +37 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/orchestrator.d.ts +42 -0
- package/dist/jobs/orchestrator.d.ts.map +1 -0
- package/dist/jobs/orchestrator.js +282 -0
- package/dist/jobs/orchestrator.js.map +1 -0
- package/dist/jobs/queue.d.ts +45 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +114 -0
- package/dist/jobs/queue.js.map +1 -0
- package/dist/jobs/retry.d.ts +36 -0
- package/dist/jobs/retry.d.ts.map +1 -0
- package/dist/jobs/retry.js +77 -0
- package/dist/jobs/retry.js.map +1 -0
- package/dist/jobs/store.d.ts +31 -0
- package/dist/jobs/store.d.ts.map +1 -0
- package/dist/jobs/store.js +92 -0
- package/dist/jobs/store.js.map +1 -0
- package/dist/jobs/types.d.ts +106 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/types.js +13 -0
- package/dist/jobs/types.js.map +1 -0
- package/dist/provider-defaults.d.ts +1 -1
- package/dist/provider-defaults.d.ts.map +1 -1
- package/dist/provider-defaults.js +8 -0
- package/dist/provider-defaults.js.map +1 -1
- package/dist/reports/aggregate.d.ts +38 -0
- package/dist/reports/aggregate.d.ts.map +1 -0
- package/dist/reports/aggregate.js +145 -0
- package/dist/reports/aggregate.js.map +1 -0
- package/dist/reports/index.d.ts +21 -0
- package/dist/reports/index.d.ts.map +1 -0
- package/dist/reports/index.js +15 -0
- package/dist/reports/index.js.map +1 -0
- package/dist/reports/narrate.d.ts +19 -0
- package/dist/reports/narrate.d.ts.map +1 -0
- package/dist/reports/narrate.js +40 -0
- package/dist/reports/narrate.js.map +1 -0
- package/dist/reports/templates.d.ts +43 -0
- package/dist/reports/templates.d.ts.map +1 -0
- package/dist/reports/templates.js +200 -0
- package/dist/reports/templates.js.map +1 -0
- package/dist/reports/tokens.d.ts +77 -0
- package/dist/reports/tokens.d.ts.map +1 -0
- package/dist/reports/tokens.js +88 -0
- package/dist/reports/tokens.js.map +1 -0
- package/dist/reports/tools.d.ts +76 -0
- package/dist/reports/tools.d.ts.map +1 -0
- package/dist/reports/tools.js +205 -0
- package/dist/reports/tools.js.map +1 -0
- package/dist/reports/types.d.ts +51 -0
- package/dist/reports/types.d.ts.map +1 -0
- package/dist/reports/types.js +9 -0
- package/dist/reports/types.js.map +1 -0
- package/dist/supervisor/critic.d.ts +1 -1
- package/dist/supervisor/critic.d.ts.map +1 -1
- package/dist/supervisor/critic.js +50 -5
- package/dist/supervisor/critic.js.map +1 -1
- package/dist/telemetry/client.d.ts +42 -0
- package/dist/telemetry/client.d.ts.map +1 -0
- package/dist/telemetry/client.js +203 -0
- package/dist/telemetry/client.js.map +1 -0
- package/dist/telemetry/hash.d.ts +4 -0
- package/dist/telemetry/hash.d.ts.map +1 -0
- package/dist/telemetry/hash.js +7 -0
- package/dist/telemetry/hash.js.map +1 -0
- package/dist/telemetry/index.d.ts +6 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +5 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/schema.d.ts +85 -0
- package/dist/telemetry/schema.d.ts.map +1 -0
- package/dist/telemetry/schema.js +13 -0
- package/dist/telemetry/schema.js.map +1 -0
- package/dist/telemetry/sink.d.ts +46 -0
- package/dist/telemetry/sink.d.ts.map +1 -0
- package/dist/telemetry/sink.js +97 -0
- package/dist/telemetry/sink.js.map +1 -0
- package/dist/types.d.ts +5 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -1
|
@@ -15,6 +15,199 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { impactToSeverity } from './measure/index.js';
|
|
17
17
|
import { annotateRoi } from './roi.js';
|
|
18
|
+
export const DEFAULT_NO_BS_RULES = [
|
|
19
|
+
'If the page is pretty but the product purpose or primary action is unclear, say that and cap the score at 6.',
|
|
20
|
+
'If the page is mostly empty states, skeletons, generic cards, or copy explaining the UI, judge it as unfinished unless it previews the real product state clearly.',
|
|
21
|
+
'If multiple actions have equal visual weight but unequal user importance, flag action hierarchy.',
|
|
22
|
+
'If important trust details are missing before a user commits money, data, identity, deployment, or medical/legal decisions, flag it as major or critical.',
|
|
23
|
+
'If the page could belong to any startup after swapping nouns, call out lack of product specificity.',
|
|
24
|
+
'Do not write soft feedback like "could benefit from." State the defect and the fix.',
|
|
25
|
+
];
|
|
26
|
+
export const DEFAULT_CONSERVATIVE_WEIGHTS = { min: 0.65, mean: 0.35 };
|
|
27
|
+
export const DEFAULT_DEEP_PASSES_BY_TYPE = {
|
|
28
|
+
marketing: ['product', 'visual', 'content'],
|
|
29
|
+
ecommerce: ['product', 'visual', 'trust'],
|
|
30
|
+
'saas-app': ['product', 'visual', 'workflow'],
|
|
31
|
+
dashboard: ['product', 'visual', 'workflow'],
|
|
32
|
+
docs: ['product', 'content', 'visual'],
|
|
33
|
+
social: ['product', 'visual', 'workflow'],
|
|
34
|
+
tool: ['product', 'workflow', 'visual'],
|
|
35
|
+
blog: ['content', 'visual', 'product'],
|
|
36
|
+
utility: ['workflow', 'visual', 'product'],
|
|
37
|
+
unknown: ['product', 'visual', 'trust'],
|
|
38
|
+
default: ['product', 'visual', 'trust'],
|
|
39
|
+
};
|
|
40
|
+
export const PASS_DEFINITIONS = {
|
|
41
|
+
standard: {
|
|
42
|
+
id: 'standard',
|
|
43
|
+
title: 'Integrated product and design audit',
|
|
44
|
+
goal: 'Audit the product clarity, workflow quality, and visual design quality of this page',
|
|
45
|
+
instructions: 'Run the full integrated review. Balance product intent, primary action, trust, IA, visual craft, and interaction quality.',
|
|
46
|
+
systemOpener: 'You are a principal product-design auditor. You review with the precision of a typographer and the ruthlessness of a design director, balanced against whether the screen actually helps the real audience finish the real job.',
|
|
47
|
+
primaryCategory: 'ux',
|
|
48
|
+
},
|
|
49
|
+
product: {
|
|
50
|
+
id: 'product',
|
|
51
|
+
title: 'Product intent and usefulness audit',
|
|
52
|
+
goal: 'Audit whether the page makes the product, audience, job, and next action obvious',
|
|
53
|
+
instructions: 'Focus on product specificity, audience, job-to-be-done, primary action, useful state, real domain objects, and whether the screen would help a human complete the actual product task. Penalize generic dashboard filler, vague empty states, and copy that explains itself instead of showing the product.',
|
|
54
|
+
systemOpener: 'You are a head of product reviewing whether this screen is doing its job. You do not care if the page is pretty. You care whether the audience, primary action, and product state are obvious within five seconds. Decorative cleanliness without product specificity is a defect.',
|
|
55
|
+
primaryCategory: 'ux',
|
|
56
|
+
},
|
|
57
|
+
visual: {
|
|
58
|
+
id: 'visual',
|
|
59
|
+
title: 'Visual system and craft audit',
|
|
60
|
+
goal: 'Audit the visual design system, layout, typography, spacing, color, and component craft',
|
|
61
|
+
instructions: 'Focus on hierarchy, density, rhythm, typography, color tokens, surfaces, component coherence, visual bugs, and whether the page has a deliberate design language rather than default UI kit assembly. Do not spend findings on product strategy unless it directly damages visual hierarchy.',
|
|
62
|
+
systemOpener: 'You are a principal design engineer who has shipped design systems at Linear, Stripe, and Vercel. You review with the precision of a typographer: count the type sizes, measure the rhythm, name the radii. Generic component-library assembly without intentional decisions is a defect.',
|
|
63
|
+
primaryCategory: 'spacing',
|
|
64
|
+
},
|
|
65
|
+
trust: {
|
|
66
|
+
id: 'trust',
|
|
67
|
+
title: 'Trust, risk, and commitment audit',
|
|
68
|
+
goal: 'Audit whether users can trust the page before committing money, identity, data, deployment, or operational changes',
|
|
69
|
+
instructions: 'Focus on risk communication, provenance, verification, permissions, fees, irreversible actions, security posture, operator/source identity, and confidence before commitment. Treat missing trust details as major when the UI asks users to pay, connect a wallet, deploy, register, run jobs, or share sensitive data.',
|
|
70
|
+
systemOpener: 'You are a senior trust-and-safety reviewer. The job is to catch what users would lose money, data, identity, or operational reputation over. Missing fees, missing provenance, ambiguous destructive actions, and unverifiable parties are the defects you look for first.',
|
|
71
|
+
primaryCategory: 'ux',
|
|
72
|
+
},
|
|
73
|
+
workflow: {
|
|
74
|
+
id: 'workflow',
|
|
75
|
+
title: 'Workflow and interaction audit',
|
|
76
|
+
goal: 'Audit whether the page supports the end-to-end workflow without confusion or dead ends',
|
|
77
|
+
instructions: 'Focus on sequencing, state transitions, disabled/loading/error/empty states, navigation, progressive disclosure, action hierarchy, and whether the user can recover from failure. Flag buttons, tabs, dropdowns, and CTAs that appear interactive but do not clarify outcome.',
|
|
78
|
+
systemOpener: 'You are a senior interaction designer. You evaluate sequences, not snapshots: what happens after click, what state recovery looks like, where the user gets stuck. Dead-end controls and unrecoverable error paths are the defects you call out first.',
|
|
79
|
+
primaryCategory: 'ux',
|
|
80
|
+
},
|
|
81
|
+
content: {
|
|
82
|
+
id: 'content',
|
|
83
|
+
title: 'Content and information architecture audit',
|
|
84
|
+
goal: 'Audit copy, labels, information architecture, and screen-level communication',
|
|
85
|
+
instructions: 'Focus on plain language, labels, headings, table/card structure, data naming, unnecessary meta-copy, vague marketing language, and whether the page says exactly what users need at the moment they need it.',
|
|
86
|
+
systemOpener: 'You are a senior content designer. You read the page like a user under time pressure. Meta-copy that explains the UI, vague marketing language, and labels that hide their meaning are the defects you call out first.',
|
|
87
|
+
primaryCategory: 'typography',
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Pass-specific few-shot examples. Each example uses a CONCRETE finding shape
|
|
92
|
+
* for that pass's focus — no fake CSS, no vague meta-findings. The example
|
|
93
|
+
* sets the *shape* of every output the model produces, so we keep them
|
|
94
|
+
* realistic and category-appropriate.
|
|
95
|
+
*/
|
|
96
|
+
export const DEFAULT_FEW_SHOT_EXAMPLES = {
|
|
97
|
+
standard: `{
|
|
98
|
+
"category": "spacing",
|
|
99
|
+
"severity": "major",
|
|
100
|
+
"description": "Hero section has 64px top padding but 16px bottom — inconsistent vertical rhythm breaks the 8px grid",
|
|
101
|
+
"location": "Hero → first feature row",
|
|
102
|
+
"suggestion": "Use 48px or 64px consistently for major section transitions",
|
|
103
|
+
"cssSelector": "main > section:first-child",
|
|
104
|
+
"cssFix": "padding-bottom: 48px",
|
|
105
|
+
"impact": 6,
|
|
106
|
+
"effort": 1,
|
|
107
|
+
"blast": "page"
|
|
108
|
+
}`,
|
|
109
|
+
product: `{
|
|
110
|
+
"category": "ux",
|
|
111
|
+
"severity": "major",
|
|
112
|
+
"description": "First viewport shows six equal-weight outline buttons (Create project, Invite member, Edit billing, Change password, Configure SSO, Browse templates) with no dominant primary; nothing tells a returning user what to do next",
|
|
113
|
+
"location": "Workspace home, action grid below the welcome heading",
|
|
114
|
+
"suggestion": "Pick one primary action for this page state (likely Create project) and render it as a filled button; demote the rest to a secondary toolbar or settings section",
|
|
115
|
+
"cssSelector": "main .actions",
|
|
116
|
+
"cssFix": "/* structural: keep one filled primary, demote the rest to text/icon-only */",
|
|
117
|
+
"impact": 8,
|
|
118
|
+
"effort": 3,
|
|
119
|
+
"blast": "page"
|
|
120
|
+
}`,
|
|
121
|
+
visual: `{
|
|
122
|
+
"category": "typography",
|
|
123
|
+
"severity": "major",
|
|
124
|
+
"description": "Five distinct font sizes visible (12, 13, 14, 15, 22) with no apparent scale — body sizes drift by 1px between cards instead of stepping on a defined ramp",
|
|
125
|
+
"location": "Card grid in the Overview section",
|
|
126
|
+
"suggestion": "Collapse to a 3-step type scale (12, 14, 22) and pin card body to 14px",
|
|
127
|
+
"cssSelector": ".card .label, .card .value, .card .delta",
|
|
128
|
+
"cssFix": "font-size: 14px",
|
|
129
|
+
"impact": 5,
|
|
130
|
+
"effort": 2,
|
|
131
|
+
"blast": "system"
|
|
132
|
+
}`,
|
|
133
|
+
trust: `{
|
|
134
|
+
"category": "ux",
|
|
135
|
+
"severity": "critical",
|
|
136
|
+
"description": "Order summary shows a single $120.00 line and a Pay now button — no fees, taxes, or merchant identity are surfaced before the user commits payment",
|
|
137
|
+
"location": "Confirm payment card, summary rows above the Pay now button",
|
|
138
|
+
"suggestion": "Add fee, tax, and total breakdown rows; show merchant logo + verified domain near the heading; require payment method confirmation before enabling Pay now",
|
|
139
|
+
"cssSelector": ".wrap .row.total",
|
|
140
|
+
"cssFix": "/* structural: insert fee + tax rows above .total; render merchant identity + payment method block */",
|
|
141
|
+
"impact": 9,
|
|
142
|
+
"effort": 4,
|
|
143
|
+
"blast": "page"
|
|
144
|
+
}`,
|
|
145
|
+
workflow: `{
|
|
146
|
+
"category": "ux",
|
|
147
|
+
"severity": "major",
|
|
148
|
+
"description": "Empty inbox shows a Got it button as the only call to action; clicking it doesn't move the user toward any next step in the product",
|
|
149
|
+
"location": "Empty state, action below the illustration",
|
|
150
|
+
"suggestion": "Replace Got it with a concrete next step (Compose first message / Connect inbox / Invite a teammate) and preview a sample row above it",
|
|
151
|
+
"cssSelector": "main .empty button",
|
|
152
|
+
"cssFix": "/* structural: replace generic ack button with a real next-step CTA + sample preview */",
|
|
153
|
+
"impact": 7,
|
|
154
|
+
"effort": 3,
|
|
155
|
+
"blast": "page"
|
|
156
|
+
}`,
|
|
157
|
+
content: `{
|
|
158
|
+
"category": "typography",
|
|
159
|
+
"severity": "major",
|
|
160
|
+
"description": "Body copy describes what the Reports page is supposed to do (\\"From here you can view reports about your data\\") instead of helping the user act; this is meta-copy, not product copy",
|
|
161
|
+
"location": "Reports page intro paragraph",
|
|
162
|
+
"suggestion": "Replace the descriptive paragraph with a real first row (most-recent report, sample report, or a one-line filter helper) and a single CTA",
|
|
163
|
+
"cssSelector": "main p",
|
|
164
|
+
"cssFix": "/* structural: remove descriptive paragraphs, render real or starter content */",
|
|
165
|
+
"impact": 6,
|
|
166
|
+
"effort": 2,
|
|
167
|
+
"blast": "page"
|
|
168
|
+
}`,
|
|
169
|
+
};
|
|
170
|
+
export function resolveAuditPasses(value, options) {
|
|
171
|
+
if (Array.isArray(value))
|
|
172
|
+
return normalizeAuditPasses(value);
|
|
173
|
+
if (typeof value === 'number')
|
|
174
|
+
return auditPassesForCount(value);
|
|
175
|
+
const raw = value?.trim().toLowerCase();
|
|
176
|
+
if (!raw || raw === 'standard' || raw === 'single' || raw === 'default')
|
|
177
|
+
return ['standard'];
|
|
178
|
+
// Layer 1 — `auto` is the new default for the v2 path: classification-aware
|
|
179
|
+
// selection mirroring `deep`. The pipeline runs the ensemble classifier
|
|
180
|
+
// first, then this picks the focused pass bundle for that page type.
|
|
181
|
+
if (raw === 'auto' || raw === 'deep' || raw === 'parallel' || raw === 'full') {
|
|
182
|
+
return deepPassesForClassification(options?.classification, options?.overrides);
|
|
183
|
+
}
|
|
184
|
+
if (raw === 'max' || raw === 'exhaustive')
|
|
185
|
+
return ['product', 'visual', 'trust', 'workflow', 'content'];
|
|
186
|
+
if (/^\d+$/.test(raw))
|
|
187
|
+
return auditPassesForCount(Number(raw));
|
|
188
|
+
return normalizeAuditPasses(raw.split(',').map(part => part.trim()));
|
|
189
|
+
}
|
|
190
|
+
/** Pick the deep-mode bundle that fits the page's classification. */
|
|
191
|
+
function deepPassesForClassification(classification, overrides) {
|
|
192
|
+
const map = { ...DEFAULT_DEEP_PASSES_BY_TYPE, ...(overrides?.deepPassesByPageType ?? {}) };
|
|
193
|
+
if (!classification)
|
|
194
|
+
return map.default ?? DEFAULT_DEEP_PASSES_BY_TYPE.default;
|
|
195
|
+
return map[classification.type] ?? map.default ?? DEFAULT_DEEP_PASSES_BY_TYPE.default;
|
|
196
|
+
}
|
|
197
|
+
function normalizeAuditPasses(passes) {
|
|
198
|
+
const valid = new Set(['standard', 'product', 'visual', 'trust', 'workflow', 'content']);
|
|
199
|
+
const normalized = passes.filter((pass) => valid.has(pass));
|
|
200
|
+
return Array.from(new Set(normalized.length > 0 ? normalized : ['standard']));
|
|
201
|
+
}
|
|
202
|
+
function auditPassesForCount(count) {
|
|
203
|
+
if (count <= 1)
|
|
204
|
+
return ['standard'];
|
|
205
|
+
const ordered = ['product', 'visual', 'trust', 'workflow', 'content'];
|
|
206
|
+
return ordered.slice(0, Math.min(Math.max(count, 1), ordered.length));
|
|
207
|
+
}
|
|
208
|
+
function resolvePassDefinition(passId, overrides) {
|
|
209
|
+
return overrides?.passDefinitions?.[passId] ?? PASS_DEFINITIONS[passId];
|
|
210
|
+
}
|
|
18
211
|
/**
|
|
19
212
|
* Build the LLM prompt for visual evaluation. Includes:
|
|
20
213
|
* - The composed rubric (only fragments matching the classification)
|
|
@@ -32,8 +225,33 @@ const UNIVERSAL_DIMENSIONS = [
|
|
|
32
225
|
'accessibility',
|
|
33
226
|
'polish',
|
|
34
227
|
];
|
|
35
|
-
function
|
|
36
|
-
const
|
|
228
|
+
export function inferAuditMode(classification) {
|
|
229
|
+
const domain = classification.domain.toLowerCase();
|
|
230
|
+
if (/(crypto|defi|web3|wallet|payments?|finance|fintech|banking)/.test(domain)) {
|
|
231
|
+
return 'High-trust transactional product. Judge transaction clarity, trust, risk, provenance, verification, and whether users understand what they are committing to before they act.';
|
|
232
|
+
}
|
|
233
|
+
if (/(devtools?|developer|infrastructure|api|sdk|cloud|hosting|deploy|database|observability)/.test(domain)) {
|
|
234
|
+
return 'Developer/operator product. Judge whether the UI exposes real operational objects, status, logs, source, commands, deploy paths, and debugging affordances instead of generic dashboard filler.';
|
|
235
|
+
}
|
|
236
|
+
if (/(ai|ml|llm|agent|model|inference|training)/.test(domain)) {
|
|
237
|
+
return 'AI/ML product. Judge whether model capability, latency/cost, job state, inputs/outputs, safety limits, and failure recovery are concrete and usable.';
|
|
238
|
+
}
|
|
239
|
+
if (/(health|medical|clinical|legal|insurance)/.test(domain)) {
|
|
240
|
+
return 'High-stakes professional product. Judge clarity, safety, auditability, error prevention, and whether the UI avoids ambiguous or decorative communication.';
|
|
241
|
+
}
|
|
242
|
+
if (classification.type === 'ecommerce') {
|
|
243
|
+
return 'Commerce product. Judge product comprehension, comparison, price/fees, checkout confidence, inventory/delivery signals, and purchase path clarity.';
|
|
244
|
+
}
|
|
245
|
+
if (classification.type === 'docs') {
|
|
246
|
+
return 'Documentation product. Judge information scent, quickstart path, examples, API/reference scanability, versioning, and whether readers can get unstuck quickly.';
|
|
247
|
+
}
|
|
248
|
+
if (classification.type === 'marketing') {
|
|
249
|
+
return 'Marketing/conversion product. Judge whether the page makes the offer, audience, proof, differentiation, and next step obvious without vague hype.';
|
|
250
|
+
}
|
|
251
|
+
return 'General product surface. Judge whether the page makes its audience, purpose, state, and next action obvious, then evaluate visual craft in service of that job.';
|
|
252
|
+
}
|
|
253
|
+
export function buildEvalPrompt(input, pass) {
|
|
254
|
+
const { classification, rubric, measurements, overrides } = input;
|
|
37
255
|
const measurementSummary = [
|
|
38
256
|
`CONTRAST (already measured by deterministic math, do not re-evaluate):`,
|
|
39
257
|
` - ${measurements.contrast.totalChecked} text elements checked`,
|
|
@@ -65,9 +283,12 @@ function buildEvalPrompt(input) {
|
|
|
65
283
|
const dimensionExample = allDimensions
|
|
66
284
|
.map(d => ` "${d}": 7`)
|
|
67
285
|
.join(',\n');
|
|
68
|
-
|
|
286
|
+
const auditMode = (overrides?.inferAuditMode ?? inferAuditMode)(classification);
|
|
287
|
+
const fewShot = overrides?.fewShotExamples?.[pass.id] ?? DEFAULT_FEW_SHOT_EXAMPLES[pass.id];
|
|
288
|
+
const noBsRules = overrides?.noBsRules ?? DEFAULT_NO_BS_RULES;
|
|
289
|
+
return `${pass.systemOpener}
|
|
69
290
|
|
|
70
|
-
You are evaluating a page that has been pre-classified and pre-measured.
|
|
291
|
+
You are evaluating a page that has been pre-classified and pre-measured. Contrast and axe-core accessibility findings have already been counted deterministically — DO NOT invent them. They will be merged with your output. Everything else (product clarity, action hierarchy, trust, IA, visual craft, interaction quality) is yours to judge.
|
|
71
292
|
|
|
72
293
|
PAGE CLASSIFICATION:
|
|
73
294
|
- Type: ${classification.type}
|
|
@@ -78,6 +299,15 @@ PAGE CLASSIFICATION:
|
|
|
78
299
|
- Intent: ${classification.intent}
|
|
79
300
|
- Classifier confidence: ${classification.confidence}
|
|
80
301
|
|
|
302
|
+
AUDIT MODE:
|
|
303
|
+
${auditMode}
|
|
304
|
+
|
|
305
|
+
AUDIT PASS:
|
|
306
|
+
${pass.title}
|
|
307
|
+
|
|
308
|
+
PASS-SPECIFIC FOCUS:
|
|
309
|
+
${pass.instructions}
|
|
310
|
+
|
|
81
311
|
DETERMINISTIC MEASUREMENTS:
|
|
82
312
|
${measurementSummary}
|
|
83
313
|
|
|
@@ -86,13 +316,18 @@ EVALUATION RUBRIC (composed from fragments matching this page):
|
|
|
86
316
|
${rubric.body}
|
|
87
317
|
|
|
88
318
|
YOUR JOB:
|
|
89
|
-
1.
|
|
90
|
-
2.
|
|
91
|
-
3.
|
|
92
|
-
4. Do NOT produce
|
|
93
|
-
5.
|
|
94
|
-
6.
|
|
95
|
-
7.
|
|
319
|
+
1. First infer the page's product job-to-be-done from screenshot + classification. Judge the screen against that job before judging surface polish.
|
|
320
|
+
2. Apply the pass-specific focus above, then score this page 1-10 against the rubric. Use the calibration anchors strictly. Do not grade on a curve.
|
|
321
|
+
3. Produce findings ONLY for things you can SEE in the screenshot: product clarity, action hierarchy, trust/risk communication, information architecture, visual hierarchy, typography choices, spacing rhythm, component coherence, polish details.
|
|
322
|
+
4. Do NOT produce contrast findings — they've been measured.
|
|
323
|
+
5. Do NOT produce accessibility findings — axe has been run.
|
|
324
|
+
6. Be specific. Reference exact visible elements, wording, layout relationships, and interaction surfaces.
|
|
325
|
+
7. Prefer findings that would actually move the product outcome, not tiny decorative nits.
|
|
326
|
+
8. For each finding include a concrete CSS fix in the cssFix field when CSS can help. If the real fix is content/IA/component structure, put the smallest honest structural hint in cssFix as a comment.
|
|
327
|
+
9. For each finding ALSO include impact, effort, and blast — these drive the ROI ranking.
|
|
328
|
+
|
|
329
|
+
NO-BS REVIEW RULES:
|
|
330
|
+
${noBsRules.map((r) => `- ${r}`).join('\n')}
|
|
96
331
|
|
|
97
332
|
ROI FIELDS — score each finding on:
|
|
98
333
|
- impact (1-10): how much this hurts the user. 1 = nitpick, 10 = breaks the experience.
|
|
@@ -108,24 +343,13 @@ A high-blast / low-effort fix has massive ROI. Use this scale honestly — the u
|
|
|
108
343
|
RESPOND WITH ONLY a JSON object:
|
|
109
344
|
{
|
|
110
345
|
"score": 7,
|
|
111
|
-
"summary": "One-sentence assessment of the
|
|
346
|
+
"summary": "One-sentence assessment of whether the page helps the inferred audience complete the inferred job, plus design-system quality",
|
|
112
347
|
"strengths": [
|
|
113
348
|
"Specific evidence-based strength",
|
|
114
349
|
"Another measured strength"
|
|
115
350
|
],
|
|
116
351
|
"findings": [
|
|
117
|
-
{
|
|
118
|
-
"category": "spacing",
|
|
119
|
-
"severity": "major",
|
|
120
|
-
"description": "Hero section has 64px top padding but only 16px bottom — inconsistent vertical rhythm breaks the 8px grid",
|
|
121
|
-
"location": "Hero section → features grid transition",
|
|
122
|
-
"suggestion": "Use 48px or 64px consistently for all major section transitions",
|
|
123
|
-
"cssSelector": "main > section:first-child",
|
|
124
|
-
"cssFix": "padding-bottom: 48px",
|
|
125
|
-
"impact": 6,
|
|
126
|
-
"effort": 1,
|
|
127
|
-
"blast": "page"
|
|
128
|
-
}
|
|
352
|
+
${fewShot}
|
|
129
353
|
],
|
|
130
354
|
"designSystemScore": {
|
|
131
355
|
${dimensionExample}
|
|
@@ -243,35 +467,33 @@ export function measurementsToFindings(measurements) {
|
|
|
243
467
|
* Returns a PageAuditResult with merged findings (deterministic + LLM visual).
|
|
244
468
|
*/
|
|
245
469
|
export async function evaluatePage(brain, input) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
if (parsed.designSystemScore && typeof parsed.designSystemScore === 'object') {
|
|
264
|
-
designSystemScore = {};
|
|
265
|
-
for (const [k, v] of Object.entries(parsed.designSystemScore)) {
|
|
266
|
-
if (typeof v === 'number')
|
|
267
|
-
designSystemScore[k] = v;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
catch {
|
|
273
|
-
// fall through with defaults
|
|
470
|
+
const passIds = resolveAuditPasses(input.auditPasses, {
|
|
471
|
+
classification: input.classification,
|
|
472
|
+
overrides: input.overrides,
|
|
473
|
+
});
|
|
474
|
+
const passes = passIds.map(id => resolvePassDefinition(id, input.overrides));
|
|
475
|
+
// Run independent subjective passes concurrently. Deterministic findings are
|
|
476
|
+
// still merged once below; this only broadens the LLM review surface.
|
|
477
|
+
const passResults = await Promise.allSettled(passes.map(async (pass) => ({
|
|
478
|
+
pass,
|
|
479
|
+
result: await brain.auditDesign(input.state, pass.goal, [], buildEvalPrompt(input, pass)),
|
|
480
|
+
})));
|
|
481
|
+
const fulfilled = passResults
|
|
482
|
+
.filter((r) => r.status === 'fulfilled')
|
|
483
|
+
.map(r => r.value);
|
|
484
|
+
if (fulfilled.length === 0) {
|
|
485
|
+
const reason = passResults.find((r) => r.status === 'rejected')?.reason;
|
|
486
|
+
throw reason instanceof Error ? reason : new Error(String(reason ?? 'All audit passes failed'));
|
|
274
487
|
}
|
|
488
|
+
// Parse summary/strengths/designSystemScore from raw LLM response
|
|
489
|
+
const parsedPasses = fulfilled.map(({ pass, result }) => ({
|
|
490
|
+
pass,
|
|
491
|
+
result,
|
|
492
|
+
parsed: parseAuditResponse(result.raw),
|
|
493
|
+
}));
|
|
494
|
+
const summary = buildMergedSummary(parsedPasses);
|
|
495
|
+
const strengths = mergeStrengths(parsedPasses.flatMap(p => p.parsed.strengths));
|
|
496
|
+
let designSystemScore = mergeDesignSystemScores(parsedPasses.map(p => p.parsed.designSystemScore));
|
|
275
497
|
// Filter LLM findings to only the categories we expect from the visual layer
|
|
276
498
|
// (the LLM should not be producing contrast/accessibility findings, but be defensive)
|
|
277
499
|
const visualCategories = new Set([
|
|
@@ -282,7 +504,7 @@ export async function evaluatePage(brain, input) {
|
|
|
282
504
|
'typography',
|
|
283
505
|
'ux',
|
|
284
506
|
]);
|
|
285
|
-
const visualFindings = result.findings.filter(f => visualCategories.has(f.category));
|
|
507
|
+
const visualFindings = dedupeFindings(fulfilled.flatMap(({ result }) => result.findings.filter(f => visualCategories.has(f.category))));
|
|
286
508
|
// Merge: deterministic measurements first (they're ground truth), then visual
|
|
287
509
|
const measurementFindings = measurementsToFindings(input.measurements);
|
|
288
510
|
const mergedFindings = [...measurementFindings, ...visualFindings];
|
|
@@ -299,7 +521,7 @@ export async function evaluatePage(brain, input) {
|
|
|
299
521
|
// Only hard-cap the overall score in catastrophic cases (broken contrast on
|
|
300
522
|
// most text). Otherwise trust the LLM's visual judgment and let the
|
|
301
523
|
// accessibility dimension carry the measurement story.
|
|
302
|
-
let finalScore = result.score;
|
|
524
|
+
let finalScore = conservativeScore(fulfilled.map(p => p.result.score), input.overrides?.conservativeWeights);
|
|
303
525
|
const contrastFailRate = 1 - input.measurements.contrast.summary.aaPassRate;
|
|
304
526
|
const trueCriticalA11y = input.measurements.a11y.violations.filter(v => v.impact === 'critical').length;
|
|
305
527
|
if (contrastFailRate > 0.5 && trueCriticalA11y >= 3) {
|
|
@@ -316,9 +538,149 @@ export async function evaluatePage(brain, input) {
|
|
|
316
538
|
measurements: input.measurements,
|
|
317
539
|
designSystemScore: designSystemScore,
|
|
318
540
|
screenshotPath: input.screenshotPath,
|
|
319
|
-
tokensUsed: result.tokensUsed,
|
|
541
|
+
tokensUsed: fulfilled.reduce((sum, p) => sum + (p.result.tokensUsed ?? 0), 0),
|
|
320
542
|
};
|
|
321
543
|
}
|
|
544
|
+
function parseAuditResponse(raw) {
|
|
545
|
+
try {
|
|
546
|
+
let text = raw.trim();
|
|
547
|
+
if (text.startsWith('```')) {
|
|
548
|
+
text = text.replace(/^```(?:json)?\n?/, '').replace(/\n?```$/, '');
|
|
549
|
+
}
|
|
550
|
+
const start = text.indexOf('{');
|
|
551
|
+
const end = text.lastIndexOf('}');
|
|
552
|
+
if (start < 0 || end <= start)
|
|
553
|
+
return { summary: '', strengths: [] };
|
|
554
|
+
const parsed = JSON.parse(text.slice(start, end + 1));
|
|
555
|
+
const designSystemScore = {};
|
|
556
|
+
if (parsed.designSystemScore && typeof parsed.designSystemScore === 'object') {
|
|
557
|
+
for (const [k, v] of Object.entries(parsed.designSystemScore)) {
|
|
558
|
+
if (typeof v === 'number')
|
|
559
|
+
designSystemScore[k] = v;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
return {
|
|
563
|
+
summary: typeof parsed.summary === 'string' ? parsed.summary : '',
|
|
564
|
+
strengths: Array.isArray(parsed.strengths)
|
|
565
|
+
? parsed.strengths.filter((s) => typeof s === 'string')
|
|
566
|
+
: [],
|
|
567
|
+
designSystemScore: Object.keys(designSystemScore).length > 0 ? designSystemScore : undefined,
|
|
568
|
+
};
|
|
569
|
+
}
|
|
570
|
+
catch {
|
|
571
|
+
return { summary: '', strengths: [] };
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
function buildMergedSummary(passes) {
|
|
575
|
+
if (passes.length === 1)
|
|
576
|
+
return passes[0]?.parsed.summary ?? '';
|
|
577
|
+
const summaries = passes
|
|
578
|
+
.filter(p => p.parsed.summary)
|
|
579
|
+
.map(p => `${p.pass.id}: ${p.parsed.summary}`);
|
|
580
|
+
return summaries.slice(0, 3).join(' ');
|
|
581
|
+
}
|
|
582
|
+
function mergeStrengths(strengths) {
|
|
583
|
+
const seen = new Set();
|
|
584
|
+
const merged = [];
|
|
585
|
+
for (const strength of strengths) {
|
|
586
|
+
const key = strength.toLowerCase().replace(/\s+/g, ' ').trim();
|
|
587
|
+
if (!key || seen.has(key))
|
|
588
|
+
continue;
|
|
589
|
+
seen.add(key);
|
|
590
|
+
merged.push(strength);
|
|
591
|
+
if (merged.length >= 6)
|
|
592
|
+
break;
|
|
593
|
+
}
|
|
594
|
+
return merged;
|
|
595
|
+
}
|
|
596
|
+
function mergeDesignSystemScores(scores) {
|
|
597
|
+
const buckets = new Map();
|
|
598
|
+
for (const score of scores) {
|
|
599
|
+
if (!score)
|
|
600
|
+
continue;
|
|
601
|
+
for (const [dimension, value] of Object.entries(score)) {
|
|
602
|
+
const bucket = buckets.get(dimension) ?? [];
|
|
603
|
+
bucket.push(value);
|
|
604
|
+
buckets.set(dimension, bucket);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
if (buckets.size === 0)
|
|
608
|
+
return undefined;
|
|
609
|
+
const merged = {};
|
|
610
|
+
for (const [dimension, values] of buckets) {
|
|
611
|
+
const average = values.reduce((sum, value) => sum + value, 0) / values.length;
|
|
612
|
+
merged[dimension] = Math.round(average * 10) / 10;
|
|
613
|
+
}
|
|
614
|
+
return merged;
|
|
615
|
+
}
|
|
616
|
+
function dedupeFindings(findings) {
|
|
617
|
+
const byKey = new Map();
|
|
618
|
+
for (const finding of findings) {
|
|
619
|
+
const key = `${finding.category}|${canonicalFindingTopic(finding)}`;
|
|
620
|
+
const existing = byKey.get(key);
|
|
621
|
+
if (!existing) {
|
|
622
|
+
byKey.set(key, finding);
|
|
623
|
+
continue;
|
|
624
|
+
}
|
|
625
|
+
if (shouldReplaceFinding(existing, finding)) {
|
|
626
|
+
byKey.set(key, finding);
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
return [...byKey.values()].slice(0, 18);
|
|
630
|
+
}
|
|
631
|
+
function canonicalFindingTopic(finding) {
|
|
632
|
+
const text = `${finding.description} ${finding.location} ${finding.suggestion}`
|
|
633
|
+
.toLowerCase()
|
|
634
|
+
.replace(/[“”"']/g, '')
|
|
635
|
+
.replace(/\s+/g, ' ')
|
|
636
|
+
.trim();
|
|
637
|
+
const topicRules = [
|
|
638
|
+
[/\b(primary|product)\s+(job|purpose)|next action|first viewport|what.+(doing|for)|product model|5 seconds/, 'product-clarity'],
|
|
639
|
+
[/equal[- ]weight|action hierarchy|button|cta|control set|peer controls|dominant primary|visually compete/, 'action-hierarchy'],
|
|
640
|
+
[/wallet|trust|pricing|price|cost|commit|authorize|approval|payment|identity|permission|network|chain|funds|fees/, 'trust-commitment'],
|
|
641
|
+
[/blueprint root|internal.+term|jargon|implementation term|leaked.+system|object name/, 'jargon-leak'],
|
|
642
|
+
[/what you buy|what you need|what you monitor|domain object|generic heading|abstract heading|abstract bucket|actual product/, 'domain-content'],
|
|
643
|
+
[/typography|type hierarchy|heading system|title|subtitle|information hierarchy/, 'type-hierarchy'],
|
|
644
|
+
[/spacing|rhythm|dead air|whitespace|vertical flow|gaps/, 'spacing-rhythm'],
|
|
645
|
+
[/layout|content frame|two-column|grid|alignment|grouped information|reviewable transaction/, 'layout-structure'],
|
|
646
|
+
[/label|grammatical|naming|button labels|language hierarchy|copy hierarchy/, 'label-consistency'],
|
|
647
|
+
[/console|marketing\/setup stub|operational product|component library|visual language|assembled ui/, 'product-surface-maturity'],
|
|
648
|
+
];
|
|
649
|
+
for (const [pattern, topic] of topicRules) {
|
|
650
|
+
if (pattern.test(text))
|
|
651
|
+
return topic;
|
|
652
|
+
}
|
|
653
|
+
return text.slice(0, 140);
|
|
654
|
+
}
|
|
655
|
+
function shouldReplaceFinding(existing, candidate) {
|
|
656
|
+
const severityDiff = severityRank(candidate.severity) - severityRank(existing.severity);
|
|
657
|
+
if (severityDiff < 0)
|
|
658
|
+
return true;
|
|
659
|
+
if (severityDiff > 0)
|
|
660
|
+
return false;
|
|
661
|
+
const candidateImpact = candidate.impact ?? 0;
|
|
662
|
+
const existingImpact = existing.impact ?? 0;
|
|
663
|
+
if (candidateImpact !== existingImpact)
|
|
664
|
+
return candidateImpact > existingImpact;
|
|
665
|
+
const candidateText = `${candidate.description} ${candidate.suggestion}`;
|
|
666
|
+
const existingText = `${existing.description} ${existing.suggestion}`;
|
|
667
|
+
return candidateText.length > existingText.length;
|
|
668
|
+
}
|
|
669
|
+
export function conservativeScore(scores, weights = DEFAULT_CONSERVATIVE_WEIGHTS) {
|
|
670
|
+
if (scores.length === 0)
|
|
671
|
+
return 5;
|
|
672
|
+
if (scores.length === 1)
|
|
673
|
+
return scores[0];
|
|
674
|
+
const min = Math.min(...scores);
|
|
675
|
+
const average = scores.reduce((sum, score) => sum + score, 0) / scores.length;
|
|
676
|
+
const total = weights.min + weights.mean;
|
|
677
|
+
const wMin = total > 0 ? weights.min / total : 0.65;
|
|
678
|
+
const wMean = total > 0 ? weights.mean / total : 0.35;
|
|
679
|
+
return Math.round((min * wMin + average * wMean) * 10) / 10;
|
|
680
|
+
}
|
|
681
|
+
function severityRank(severity) {
|
|
682
|
+
return severity === 'critical' ? 0 : severity === 'major' ? 1 : 2;
|
|
683
|
+
}
|
|
322
684
|
/**
|
|
323
685
|
* Translate raw measurement data into a 1-10 accessibility score.
|
|
324
686
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../src/design/audit/evaluate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../src/design/audit/evaluate.ts"],"names":[],"mappings":"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"}
|