@tangle-network/browser-agent-driver 0.30.0 → 0.32.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.
Files changed (252) hide show
  1. package/dist/brain/index.d.ts +12 -0
  2. package/dist/brain/index.d.ts.map +1 -1
  3. package/dist/brain/index.js +36 -8
  4. package/dist/brain/index.js.map +1 -1
  5. package/dist/cli-ack-patch.d.ts +39 -0
  6. package/dist/cli-ack-patch.d.ts.map +1 -0
  7. package/dist/cli-ack-patch.js +47 -0
  8. package/dist/cli-ack-patch.js.map +1 -0
  9. package/dist/cli-design-audit.d.ts +12 -0
  10. package/dist/cli-design-audit.d.ts.map +1 -1
  11. package/dist/cli-design-audit.js +78 -0
  12. package/dist/cli-design-audit.js.map +1 -1
  13. package/dist/cli-jobs.d.ts +13 -0
  14. package/dist/cli-jobs.d.ts.map +1 -0
  15. package/dist/cli-jobs.js +253 -0
  16. package/dist/cli-jobs.js.map +1 -0
  17. package/dist/cli-patterns.d.ts +26 -0
  18. package/dist/cli-patterns.d.ts.map +1 -0
  19. package/dist/cli-patterns.js +49 -0
  20. package/dist/cli-patterns.js.map +1 -0
  21. package/dist/cli-reports.d.ts +12 -0
  22. package/dist/cli-reports.d.ts.map +1 -0
  23. package/dist/cli-reports.js +97 -0
  24. package/dist/cli-reports.js.map +1 -0
  25. package/dist/cli.js +29 -1
  26. package/dist/cli.js.map +1 -1
  27. package/dist/design/audit/attribution/aggregate.d.ts +16 -0
  28. package/dist/design/audit/attribution/aggregate.d.ts.map +1 -0
  29. package/dist/design/audit/attribution/aggregate.js +81 -0
  30. package/dist/design/audit/attribution/aggregate.js.map +1 -0
  31. package/dist/design/audit/attribution/store.d.ts +36 -0
  32. package/dist/design/audit/attribution/store.d.ts.map +1 -0
  33. package/dist/design/audit/attribution/store.js +108 -0
  34. package/dist/design/audit/attribution/store.js.map +1 -0
  35. package/dist/design/audit/attribution/types.d.ts +13 -0
  36. package/dist/design/audit/attribution/types.d.ts.map +1 -0
  37. package/dist/design/audit/attribution/types.js +10 -0
  38. package/dist/design/audit/attribution/types.js.map +1 -0
  39. package/dist/design/audit/build-result.d.ts +68 -0
  40. package/dist/design/audit/build-result.d.ts.map +1 -0
  41. package/dist/design/audit/build-result.js +243 -0
  42. package/dist/design/audit/build-result.js.map +1 -0
  43. package/dist/design/audit/classify-ensemble.d.ts +46 -0
  44. package/dist/design/audit/classify-ensemble.d.ts.map +1 -0
  45. package/dist/design/audit/classify-ensemble.js +207 -0
  46. package/dist/design/audit/classify-ensemble.js.map +1 -0
  47. package/dist/design/audit/ethics/check.d.ts +59 -0
  48. package/dist/design/audit/ethics/check.d.ts.map +1 -0
  49. package/dist/design/audit/ethics/check.js +137 -0
  50. package/dist/design/audit/ethics/check.js.map +1 -0
  51. package/dist/design/audit/ethics/loader.d.ts +21 -0
  52. package/dist/design/audit/ethics/loader.d.ts.map +1 -0
  53. package/dist/design/audit/ethics/loader.js +207 -0
  54. package/dist/design/audit/ethics/loader.js.map +1 -0
  55. package/dist/design/audit/ethics/rules/finance.yaml +37 -0
  56. package/dist/design/audit/ethics/rules/kids.yaml +37 -0
  57. package/dist/design/audit/ethics/rules/legal.yaml +35 -0
  58. package/dist/design/audit/ethics/rules/medical.yaml +36 -0
  59. package/dist/design/audit/evaluate.d.ts.map +1 -1
  60. package/dist/design/audit/evaluate.js +4 -1
  61. package/dist/design/audit/evaluate.js.map +1 -1
  62. package/dist/design/audit/first-principles-mode.d.ts +42 -0
  63. package/dist/design/audit/first-principles-mode.d.ts.map +1 -0
  64. package/dist/design/audit/first-principles-mode.js +77 -0
  65. package/dist/design/audit/first-principles-mode.js.map +1 -0
  66. package/dist/design/audit/modality/android.d.ts +14 -0
  67. package/dist/design/audit/modality/android.d.ts.map +1 -0
  68. package/dist/design/audit/modality/android.js +18 -0
  69. package/dist/design/audit/modality/android.js.map +1 -0
  70. package/dist/design/audit/modality/html.d.ts +22 -0
  71. package/dist/design/audit/modality/html.d.ts.map +1 -0
  72. package/dist/design/audit/modality/html.js +51 -0
  73. package/dist/design/audit/modality/html.js.map +1 -0
  74. package/dist/design/audit/modality/index.d.ts +8 -0
  75. package/dist/design/audit/modality/index.d.ts.map +1 -0
  76. package/dist/design/audit/modality/index.js +15 -0
  77. package/dist/design/audit/modality/index.js.map +1 -0
  78. package/dist/design/audit/modality/ios.d.ts +16 -0
  79. package/dist/design/audit/modality/ios.d.ts.map +1 -0
  80. package/dist/design/audit/modality/ios.js +19 -0
  81. package/dist/design/audit/modality/ios.js.map +1 -0
  82. package/dist/design/audit/modality/types.d.ts +9 -0
  83. package/dist/design/audit/modality/types.d.ts.map +1 -0
  84. package/dist/design/audit/modality/types.js +9 -0
  85. package/dist/design/audit/modality/types.js.map +1 -0
  86. package/dist/design/audit/patches/generate.d.ts +45 -0
  87. package/dist/design/audit/patches/generate.d.ts.map +1 -0
  88. package/dist/design/audit/patches/generate.js +161 -0
  89. package/dist/design/audit/patches/generate.js.map +1 -0
  90. package/dist/design/audit/patches/index.d.ts +8 -0
  91. package/dist/design/audit/patches/index.d.ts.map +1 -0
  92. package/dist/design/audit/patches/index.js +5 -0
  93. package/dist/design/audit/patches/index.js.map +1 -0
  94. package/dist/design/audit/patches/parse.d.ts +29 -0
  95. package/dist/design/audit/patches/parse.d.ts.map +1 -0
  96. package/dist/design/audit/patches/parse.js +153 -0
  97. package/dist/design/audit/patches/parse.js.map +1 -0
  98. package/dist/design/audit/patches/render.d.ts +20 -0
  99. package/dist/design/audit/patches/render.d.ts.map +1 -0
  100. package/dist/design/audit/patches/render.js +55 -0
  101. package/dist/design/audit/patches/render.js.map +1 -0
  102. package/dist/design/audit/patches/severity-enforcement.d.ts +23 -0
  103. package/dist/design/audit/patches/severity-enforcement.d.ts.map +1 -0
  104. package/dist/design/audit/patches/severity-enforcement.js +42 -0
  105. package/dist/design/audit/patches/severity-enforcement.js.map +1 -0
  106. package/dist/design/audit/patches/validate.d.ts +40 -0
  107. package/dist/design/audit/patches/validate.d.ts.map +1 -0
  108. package/dist/design/audit/patches/validate.js +60 -0
  109. package/dist/design/audit/patches/validate.js.map +1 -0
  110. package/dist/design/audit/patterns/match.d.ts +24 -0
  111. package/dist/design/audit/patterns/match.d.ts.map +1 -0
  112. package/dist/design/audit/patterns/match.js +48 -0
  113. package/dist/design/audit/patterns/match.js.map +1 -0
  114. package/dist/design/audit/patterns/mine.d.ts +31 -0
  115. package/dist/design/audit/patterns/mine.d.ts.map +1 -0
  116. package/dist/design/audit/patterns/mine.js +35 -0
  117. package/dist/design/audit/patterns/mine.js.map +1 -0
  118. package/dist/design/audit/patterns/store.d.ts +14 -0
  119. package/dist/design/audit/patterns/store.d.ts.map +1 -0
  120. package/dist/design/audit/patterns/store.js +53 -0
  121. package/dist/design/audit/patterns/store.js.map +1 -0
  122. package/dist/design/audit/patterns/types.d.ts +53 -0
  123. package/dist/design/audit/patterns/types.d.ts.map +1 -0
  124. package/dist/design/audit/patterns/types.js +13 -0
  125. package/dist/design/audit/patterns/types.js.map +1 -0
  126. package/dist/design/audit/pipeline.d.ts +12 -0
  127. package/dist/design/audit/pipeline.d.ts.map +1 -1
  128. package/dist/design/audit/pipeline.js +81 -5
  129. package/dist/design/audit/pipeline.js.map +1 -1
  130. package/dist/design/audit/rubric/anchor-loader.d.ts +44 -0
  131. package/dist/design/audit/rubric/anchor-loader.d.ts.map +1 -0
  132. package/dist/design/audit/rubric/anchor-loader.js +210 -0
  133. package/dist/design/audit/rubric/anchor-loader.js.map +1 -0
  134. package/dist/design/audit/rubric/anchors/blog.yaml +33 -0
  135. package/dist/design/audit/rubric/anchors/dashboard.yaml +35 -0
  136. package/dist/design/audit/rubric/anchors/docs.yaml +35 -0
  137. package/dist/design/audit/rubric/anchors/ecommerce.yaml +33 -0
  138. package/dist/design/audit/rubric/anchors/marketing.yaml +34 -0
  139. package/dist/design/audit/rubric/anchors/saas-app.yaml +38 -0
  140. package/dist/design/audit/rubric/anchors/social.yaml +33 -0
  141. package/dist/design/audit/rubric/anchors/tool.yaml +33 -0
  142. package/dist/design/audit/rubric/anchors/utility.yaml +33 -0
  143. package/dist/design/audit/rubric/fragments/audience-clinician.md +42 -0
  144. package/dist/design/audit/rubric/fragments/audience-developer.md +40 -0
  145. package/dist/design/audit/rubric/fragments/audience-kids.md +35 -0
  146. package/dist/design/audit/rubric/fragments/audience-vulnerability-minor-facing.md +37 -0
  147. package/dist/design/audit/rubric/fragments/first-principles.md +65 -0
  148. package/dist/design/audit/rubric/fragments/modality-mobile.md +39 -0
  149. package/dist/design/audit/rubric/fragments/modality-tablet.md +35 -0
  150. package/dist/design/audit/rubric/fragments/regulatory-coppa.md +32 -0
  151. package/dist/design/audit/rubric/fragments/regulatory-gdpr.md +33 -0
  152. package/dist/design/audit/rubric/fragments/regulatory-hipaa.md +36 -0
  153. package/dist/design/audit/rubric/loader.d.ts +26 -6
  154. package/dist/design/audit/rubric/loader.d.ts.map +1 -1
  155. package/dist/design/audit/rubric/loader.js +45 -26
  156. package/dist/design/audit/rubric/loader.js.map +1 -1
  157. package/dist/design/audit/rubric/rollup-weights.d.ts +25 -0
  158. package/dist/design/audit/rubric/rollup-weights.d.ts.map +1 -0
  159. package/dist/design/audit/rubric/rollup-weights.js +51 -0
  160. package/dist/design/audit/rubric/rollup-weights.js.map +1 -0
  161. package/dist/design/audit/score-types.d.ts +431 -0
  162. package/dist/design/audit/score-types.d.ts.map +1 -0
  163. package/dist/design/audit/score-types.js +26 -0
  164. package/dist/design/audit/score-types.js.map +1 -0
  165. package/dist/design/audit/score.d.ts +49 -0
  166. package/dist/design/audit/score.d.ts.map +1 -0
  167. package/dist/design/audit/score.js +211 -0
  168. package/dist/design/audit/score.js.map +1 -0
  169. package/dist/design/audit/types.d.ts +28 -0
  170. package/dist/design/audit/types.d.ts.map +1 -1
  171. package/dist/discover/index.d.ts +16 -0
  172. package/dist/discover/index.d.ts.map +1 -0
  173. package/dist/discover/index.js +25 -0
  174. package/dist/discover/index.js.map +1 -0
  175. package/dist/discover/wayback.d.ts +49 -0
  176. package/dist/discover/wayback.d.ts.map +1 -0
  177. package/dist/discover/wayback.js +123 -0
  178. package/dist/discover/wayback.js.map +1 -0
  179. package/dist/jobs/anti-bot.d.ts +19 -0
  180. package/dist/jobs/anti-bot.d.ts.map +1 -0
  181. package/dist/jobs/anti-bot.js +64 -0
  182. package/dist/jobs/anti-bot.js.map +1 -0
  183. package/dist/jobs/cost-estimate.d.ts +12 -0
  184. package/dist/jobs/cost-estimate.d.ts.map +1 -0
  185. package/dist/jobs/cost-estimate.js +21 -0
  186. package/dist/jobs/cost-estimate.js.map +1 -0
  187. package/dist/jobs/cost-history.d.ts +19 -0
  188. package/dist/jobs/cost-history.d.ts.map +1 -0
  189. package/dist/jobs/cost-history.js +42 -0
  190. package/dist/jobs/cost-history.js.map +1 -0
  191. package/dist/jobs/index.d.ts +31 -0
  192. package/dist/jobs/index.d.ts.map +1 -0
  193. package/dist/jobs/index.js +37 -0
  194. package/dist/jobs/index.js.map +1 -0
  195. package/dist/jobs/orchestrator.d.ts +42 -0
  196. package/dist/jobs/orchestrator.d.ts.map +1 -0
  197. package/dist/jobs/orchestrator.js +282 -0
  198. package/dist/jobs/orchestrator.js.map +1 -0
  199. package/dist/jobs/queue.d.ts +45 -0
  200. package/dist/jobs/queue.d.ts.map +1 -0
  201. package/dist/jobs/queue.js +114 -0
  202. package/dist/jobs/queue.js.map +1 -0
  203. package/dist/jobs/retry.d.ts +36 -0
  204. package/dist/jobs/retry.d.ts.map +1 -0
  205. package/dist/jobs/retry.js +77 -0
  206. package/dist/jobs/retry.js.map +1 -0
  207. package/dist/jobs/store.d.ts +31 -0
  208. package/dist/jobs/store.d.ts.map +1 -0
  209. package/dist/jobs/store.js +92 -0
  210. package/dist/jobs/store.js.map +1 -0
  211. package/dist/jobs/types.d.ts +106 -0
  212. package/dist/jobs/types.d.ts.map +1 -0
  213. package/dist/jobs/types.js +13 -0
  214. package/dist/jobs/types.js.map +1 -0
  215. package/dist/reports/aggregate.d.ts +38 -0
  216. package/dist/reports/aggregate.d.ts.map +1 -0
  217. package/dist/reports/aggregate.js +145 -0
  218. package/dist/reports/aggregate.js.map +1 -0
  219. package/dist/reports/index.d.ts +21 -0
  220. package/dist/reports/index.d.ts.map +1 -0
  221. package/dist/reports/index.js +15 -0
  222. package/dist/reports/index.js.map +1 -0
  223. package/dist/reports/narrate.d.ts +19 -0
  224. package/dist/reports/narrate.d.ts.map +1 -0
  225. package/dist/reports/narrate.js +40 -0
  226. package/dist/reports/narrate.js.map +1 -0
  227. package/dist/reports/templates.d.ts +43 -0
  228. package/dist/reports/templates.d.ts.map +1 -0
  229. package/dist/reports/templates.js +200 -0
  230. package/dist/reports/templates.js.map +1 -0
  231. package/dist/reports/tokens.d.ts +69 -0
  232. package/dist/reports/tokens.d.ts.map +1 -0
  233. package/dist/reports/tokens.js +74 -0
  234. package/dist/reports/tokens.js.map +1 -0
  235. package/dist/reports/tools.d.ts +76 -0
  236. package/dist/reports/tools.d.ts.map +1 -0
  237. package/dist/reports/tools.js +205 -0
  238. package/dist/reports/tools.js.map +1 -0
  239. package/dist/reports/types.d.ts +51 -0
  240. package/dist/reports/types.d.ts.map +1 -0
  241. package/dist/reports/types.js +9 -0
  242. package/dist/reports/types.js.map +1 -0
  243. package/dist/run-state.d.ts +36 -1
  244. package/dist/run-state.d.ts.map +1 -1
  245. package/dist/run-state.js +36 -1
  246. package/dist/run-state.js.map +1 -1
  247. package/dist/runner/runner.d.ts.map +1 -1
  248. package/dist/runner/runner.js +73 -3
  249. package/dist/runner/runner.js.map +1 -1
  250. package/dist/types.d.ts +7 -0
  251. package/dist/types.d.ts.map +1 -1
  252. package/package.json +5 -1
@@ -0,0 +1,431 @@
1
+ /**
2
+ * design audit — type contract for the 8-layer architecture.
3
+ *
4
+ * RFC: docs/rfc/design-audit-world-class.md
5
+ *
6
+ * This file is the stable contract that every layer's implementation
7
+ * builds against. It exists to let parallel implementation work proceed
8
+ * without diverging interfaces. Editing this file mid-build is a coordinated
9
+ * change; layers must update in lockstep.
10
+ *
11
+ * Invariants enforced by this contract:
12
+ * - Every score is a `DimensionScore` with `range` + `confidence`. No bare numbers.
13
+ * - Every finding with `severity in ['major','critical']` MUST have ≥1 `Patch`.
14
+ * - Every patch has both `target` (what changes) and `testThatProves` (how we verify).
15
+ * - Every classification carries explicit `ensembleConfidence` and `signalsAgreed`.
16
+ * - Every audit run can write a `PatchApplication` event for post-hoc attribution.
17
+ * - Pattern, ethics, modality types compose cleanly via shared `AppliesWhen`.
18
+ */
19
+ import type { PageClassification, PageType, Maturity, DesignSystemTag, AppliesWhen as BaseAppliesWhen, MeasurementBundle, DesignFinding as DesignFindingBase } from './types.js';
20
+ export type { PageClassification, PageType, Maturity, DesignSystemTag, MeasurementBundle };
21
+ /**
22
+ * The five universal dimensions. Every audit produces a DimensionScore for
23
+ * each. The rollup is computed from these via per-page-type weights.
24
+ */
25
+ export type Dimension = 'product_intent' | 'visual_craft' | 'trust_clarity' | 'workflow' | 'content_ia';
26
+ export declare const DIMENSIONS: readonly Dimension[];
27
+ export type ConfidenceLevel = 'high' | 'medium' | 'low';
28
+ export interface DimensionScore {
29
+ /** 1-10 integer score on the dimension. */
30
+ score: number;
31
+ /** Self-reported uncertainty range. `range[0] <= score <= range[1]`. */
32
+ range: [number, number];
33
+ /** Auditor's confidence in the score. */
34
+ confidence: ConfidenceLevel;
35
+ /** One-sentence assessment grounded in observable evidence. */
36
+ summary: string;
37
+ /** Stable ids of top findings driving this score. References `DesignFinding.id`. */
38
+ primaryFindings: string[];
39
+ }
40
+ export interface RollupScore {
41
+ /** Weighted aggregate of `Record<Dimension, DimensionScore>`. 1-10 number, can be fractional. */
42
+ score: number;
43
+ /** Aggregate uncertainty range. */
44
+ range: [number, number];
45
+ /** Aggregate confidence. Conservative — `low` if any dim is `low`. */
46
+ confidence: ConfidenceLevel;
47
+ /** Human-readable formula, e.g. "saas-app: product*0.35 + workflow*0.30 + ...". */
48
+ rule: string;
49
+ /** Per-dimension weight that produced this rollup. Must sum to 1.0 ± 1e-6. */
50
+ weights: Record<Dimension, number>;
51
+ }
52
+ export type ClassifierSource = 'url-pattern' | 'dom-heuristic' | 'llm';
53
+ export interface ClassifierSignal {
54
+ source: ClassifierSource;
55
+ type: PageType;
56
+ /** 0..1, source-specific. */
57
+ confidence: number;
58
+ /** Why this signal voted this type. Logged for debugging. */
59
+ rationale: string;
60
+ }
61
+ export interface EnsembleClassification extends PageClassification {
62
+ /** Every signal that voted on this classification. */
63
+ signals: ClassifierSignal[];
64
+ /** True if all signals agreed on `type`. */
65
+ signalsAgreed: boolean;
66
+ /** Aggregated 0..1 confidence after ensemble vote. */
67
+ ensembleConfidence: number;
68
+ /** Signals that disagreed with the final type, if any. */
69
+ dissent?: {
70
+ source: ClassifierSource;
71
+ type: PageType;
72
+ }[];
73
+ /** True if Layer 3 (first-principles) mode was triggered. */
74
+ firstPrinciplesMode: boolean;
75
+ }
76
+ /**
77
+ * DOM-derived signals used by the heuristic classifier. Captured once during
78
+ * the page-load phase, fed to the ensemble vote, and emitted into telemetry.
79
+ */
80
+ export interface DomHeuristics {
81
+ formCount: number;
82
+ inputCount: number;
83
+ tableRowCount: number;
84
+ chartCount: number;
85
+ navItems: number;
86
+ hasFooterLinks: boolean;
87
+ hasHeroSection: boolean;
88
+ hasSidebar: boolean;
89
+ paragraphCount: number;
90
+ codeBlockCount: number;
91
+ }
92
+ /**
93
+ * Where a patch applies. At least one of `cssSelector | filePath | componentName`
94
+ * MUST be set. The combination determines how an agent applies it.
95
+ */
96
+ export interface PatchTarget {
97
+ /** Source file path when known via component scan. */
98
+ filePath?: string;
99
+ /** Component name when known (e.g. 'Sidebar', 'PrimaryButton'). */
100
+ componentName?: string;
101
+ /** CSS selector — fallback when filePath unknown. */
102
+ cssSelector?: string;
103
+ /** Patch scope. Determines applicability check. */
104
+ scope: 'tsx' | 'jsx' | 'css' | 'tailwind' | 'module-css' | 'styled-component' | 'structural' | 'html';
105
+ }
106
+ export interface PatchDiff {
107
+ /**
108
+ * Exact substring being replaced. Validators MUST verify `before` is a
109
+ * substring of the page snapshot or source file at apply time. If `before`
110
+ * is not found, the patch is rejected (no fuzzy apply).
111
+ */
112
+ before: string;
113
+ /** Replacement text. */
114
+ after: string;
115
+ /**
116
+ * When `target.filePath` is known, the unified diff format an agent can
117
+ * pipe to `git apply`. Optional; `before`/`after` is the canonical form.
118
+ */
119
+ unifiedDiff?: string;
120
+ }
121
+ export type PatchTestKind = 'storybook' | 'a11y-rule' | 'visual-snapshot' | 'unit' | 'rerun-audit' | 'manual';
122
+ export interface PatchTest {
123
+ kind: PatchTestKind;
124
+ /** Human-readable description of what proves the patch worked. */
125
+ description: string;
126
+ /** Optional CLI command an agent can invoke to verify (e.g. `pnpm vitest <name>`). */
127
+ command?: string;
128
+ }
129
+ export type PatchRollbackKind = 'git-revert' | 'css-disable' | 'manual';
130
+ export interface PatchRollback {
131
+ kind: PatchRollbackKind;
132
+ /** Optional human-readable rollback instruction. */
133
+ instruction?: string;
134
+ }
135
+ /**
136
+ * A `Patch` is the agent-actionable unit. Layer 2 mandates ≥1 patch on every
137
+ * major/critical finding. Findings without patches downgrade to minor.
138
+ */
139
+ export interface Patch {
140
+ /** Stable id derived from finding hash + target. Same patch across tenants → same id. */
141
+ patchId: string;
142
+ /** The finding this patch fixes. */
143
+ findingId: string;
144
+ /** Patch scope — page/section/component/system, drives ROI weighting. */
145
+ scope: 'page' | 'section' | 'component' | 'system';
146
+ target: PatchTarget;
147
+ diff: PatchDiff;
148
+ testThatProves: PatchTest;
149
+ rollback: PatchRollback;
150
+ /** The dimension the auditor predicts this patch will move + by how much. */
151
+ estimatedDelta: {
152
+ dim: Dimension;
153
+ delta: number;
154
+ };
155
+ /**
156
+ * Confidence in `estimatedDelta`, calibrated against fleet outcomes (Layer 4).
157
+ * 'untested' means no fleet data yet; 'high' means N≥30 with replication ≥0.7.
158
+ */
159
+ estimatedDeltaConfidence: ConfidenceLevel | 'untested';
160
+ /**
161
+ * If this patch matches a known fleet pattern (Layer 5), the matched pattern
162
+ * id. Surfaced by the auditor so agents prefer evidence-backed patches.
163
+ */
164
+ matchedPatternId?: string;
165
+ }
166
+ /**
167
+ * Updated `DesignFinding` shape — extends v1 with stable id, dimension link,
168
+ * mandatory patches for major/critical, optional pattern match.
169
+ */
170
+ export interface DesignFinding extends DesignFindingBase {
171
+ /** Stable id, used by `DimensionScore.primaryFindings`. */
172
+ id: string;
173
+ /** Which dimension this finding affects. */
174
+ dimension: Dimension;
175
+ /** Agent-actionable patches. Required (≥1) when severity is major or critical. */
176
+ patches: Patch[];
177
+ /**
178
+ * Discriminator for finding kind. `polish` findings cap at impact 6;
179
+ * `job` findings can go to 10; `measurement` findings come from axe/contrast.
180
+ * Set this so ROI ranking auto-prioritizes job over polish.
181
+ */
182
+ kind: 'polish' | 'job' | 'measurement';
183
+ }
184
+ /**
185
+ * Triggered when ensemble confidence is low or no fixture matches the page
186
+ * structure. Auditor scores against 5 universal principles and emits a
187
+ * novel-pattern record for fleet mining.
188
+ */
189
+ export interface NovelPatternObservation {
190
+ observationId: string;
191
+ capturedAt: string;
192
+ /** What was distinctive about this page structurally. */
193
+ observed: string;
194
+ /** Closest existing classification, with low confidence. */
195
+ closestType: PageType;
196
+ closestConfidence: number;
197
+ /** Page snapshot reference for later mining. */
198
+ snapshotKey?: string;
199
+ /** URL or fixture id. */
200
+ pageRef: string;
201
+ }
202
+ /**
203
+ * One application of a patch. Emitted by the `bad design-audit ack-patch`
204
+ * subcommand or auto-detected by the `--evolve` loop.
205
+ */
206
+ export interface PatchApplication {
207
+ applicationId: string;
208
+ patchId: string;
209
+ /** `sha256(diff.before + '\n---\n' + diff.after + '\n---\n' + scope).slice(0, 16)` */
210
+ patchHash: string;
211
+ appliedAt: string;
212
+ appliedBy: string;
213
+ /** The audit run that proposed the patch. */
214
+ preAuditRunId: string;
215
+ /** The audit run after the patch was applied. May be null until re-audit. */
216
+ postAuditRunId?: string;
217
+ /** Auditor's prediction at apply time. */
218
+ predicted: {
219
+ dim: Dimension;
220
+ delta: number;
221
+ };
222
+ /** Measured delta after re-audit. Populated when postAuditRunId resolves. */
223
+ observed?: {
224
+ dim: Dimension;
225
+ delta: number;
226
+ };
227
+ /**
228
+ * Agreement metric: 1.0 = perfect prediction, 0 = orthogonal, negative = wrong direction.
229
+ * `(observed.delta * predicted.delta) / max(|observed.delta|, |predicted.delta|, 1)`
230
+ */
231
+ agreementScore?: number;
232
+ }
233
+ /**
234
+ * Aggregated reliability across all applications of a patch (joined on
235
+ * `patchHash = hash(diff.before, diff.after, scope)`). Surfaces in audit
236
+ * output as `Patch.estimatedDeltaConfidence` upgrade.
237
+ */
238
+ export interface PatchReliability {
239
+ patchHash: string;
240
+ applications: number;
241
+ meanPredictedDelta: number;
242
+ meanObservedDelta: number;
243
+ /** % of applications where observed >= 0.5 * predicted. */
244
+ replicationRate: number;
245
+ recommendation: 'recommended' | 'neutral' | 'antipattern';
246
+ /** Distinct tenant count. Below 5 → 'untested' confidence. */
247
+ sampleTenants: number;
248
+ }
249
+ /**
250
+ * A curated known-good design pattern, mined from accumulated PatchApplication
251
+ * data once N≥30 across ≥5 distinct tenants with ≥0.7 replication.
252
+ */
253
+ export interface Pattern {
254
+ patternId: string;
255
+ /** Free-form category name, e.g. 'leaderboard', 'empty-state', 'pricing-table'. */
256
+ category: string;
257
+ classification: {
258
+ type: PageType;
259
+ tags: string[];
260
+ };
261
+ scaffold: PatternScaffold;
262
+ scores: {
263
+ whenFollowed: Record<Dimension, number>;
264
+ };
265
+ fleetEvidence: PatternFleetEvidence;
266
+ /** Fixture ids that exemplify this pattern. */
267
+ fixtures: string[];
268
+ }
269
+ export interface PatternScaffold {
270
+ description: string;
271
+ referenceTsx?: string;
272
+ referenceCss?: string;
273
+ /** Concrete decisions that make the pattern work, e.g. 'criterion in header'. */
274
+ keyDecisions: string[];
275
+ }
276
+ export interface PatternFleetEvidence {
277
+ applications: number;
278
+ /** % where adopting this pattern delivered the predicted dim delta. */
279
+ successRate: number;
280
+ medianDimDelta: Record<Dimension, number>;
281
+ /** Distinct tenants. ≥5 required for promotion to 'recommended'. */
282
+ sampleTenants: number;
283
+ }
284
+ export interface PatternQuery {
285
+ category?: string;
286
+ pageType?: PageType;
287
+ /** "I'm scoring 4 on product_intent — show me patterns that lift it." */
288
+ weakDimension?: Dimension;
289
+ minApplications?: number;
290
+ minSuccessRate?: number;
291
+ }
292
+ export interface PatternMatch {
293
+ pattern: Pattern;
294
+ matchConfidence: number;
295
+ expectedDelta: Record<Dimension, number>;
296
+ /** How to adapt this pattern to the current page. */
297
+ applicationGuidance: string;
298
+ }
299
+ export type AudienceTag = 'developer' | 'clinician' | 'analyst' | 'consumer' | 'admin' | 'kids' | 'enterprise-buyer' | 'creator';
300
+ export type ModalityTag = 'desktop' | 'tablet' | 'mobile' | 'tv' | 'kiosk';
301
+ export type RegulatoryContextTag = 'hipaa' | 'gdpr' | 'sox' | 'pci-dss' | 'coppa' | 'wcag-aaa';
302
+ export type AudienceVulnerabilityTag = 'patient-facing' | 'minor-facing' | 'high-stakes-financial' | 'crisis-context';
303
+ /**
304
+ * Predicate set composed by the rubric loader. Extends the base predicate
305
+ * with audience/modality/regulatoryContext/audienceVulnerability so a
306
+ * pediatric medical app on tablet for clinicians loads multiple fragments
307
+ * simultaneously.
308
+ */
309
+ export interface AppliesWhen extends BaseAppliesWhen {
310
+ audience?: AudienceTag[];
311
+ modality?: ModalityTag[];
312
+ regulatoryContext?: RegulatoryContextTag[];
313
+ audienceVulnerability?: AudienceVulnerabilityTag[];
314
+ }
315
+ export type EthicsCategory = 'medical' | 'kids' | 'finance' | 'legal' | 'accessibility' | 'crisis';
316
+ export type EthicsSeverity = 'critical-floor' | 'major-floor';
317
+ export interface EthicsRule {
318
+ ruleId: string;
319
+ category: EthicsCategory;
320
+ severity: EthicsSeverity;
321
+ appliesWhen: AppliesWhen;
322
+ detector: EthicsDetector;
323
+ remediation: string;
324
+ /** Citation to regulation or standard, e.g. 'FDA 21 CFR 201.57'. */
325
+ citation?: string;
326
+ }
327
+ export type EthicsDetector = {
328
+ kind: 'pattern-absent';
329
+ pattern: string;
330
+ } | {
331
+ kind: 'pattern-present';
332
+ pattern: string;
333
+ } | {
334
+ kind: 'llm-classifier';
335
+ llmCheck: string;
336
+ };
337
+ export interface EthicsViolation {
338
+ ruleId: string;
339
+ detected: true;
340
+ severity: EthicsSeverity;
341
+ /** Rollup ceiling enforced by this violation. critical-floor → 4; major-floor → 6. */
342
+ rollupCap: number;
343
+ remediation: string;
344
+ citation?: string;
345
+ }
346
+ export type Modality = 'html' | 'ios' | 'android' | 'terminal' | 'voice';
347
+ export interface ModalityInput {
348
+ /** Modality-specific entry point — URL for HTML, app bundle for iOS, etc. */
349
+ entryPoint: string;
350
+ /** Optional flow specification when capturing multiple surfaces. */
351
+ flow?: string[];
352
+ }
353
+ /**
354
+ * Per-modality measurement bundle — analogous to the existing HTML
355
+ * MeasurementBundle (axe + contrast). Modality-specific implementations
356
+ * provide their own a11y/contrast equivalents.
357
+ */
358
+ export interface SurfaceMeasurements {
359
+ modality: Modality;
360
+ /** A11y violations — modality-specific shape. */
361
+ a11y?: unknown;
362
+ /** Contrast or readability check — modality-specific. */
363
+ contrast?: unknown;
364
+ /** Modality-specific measurements (haptic, latency, etc.). */
365
+ extra?: Record<string, unknown>;
366
+ }
367
+ export interface SurfaceRecord {
368
+ /** URL for HTML; screen name for native; turn id for voice. */
369
+ identifier: string;
370
+ measurements: SurfaceMeasurements;
371
+ snapshot: string;
372
+ screenshot?: string;
373
+ }
374
+ export interface Evidence {
375
+ modality: Modality;
376
+ surfaces: SurfaceRecord[];
377
+ /** Roll-up of per-surface measurements for backwards compat with v1 pipeline. */
378
+ measurements: MeasurementBundle;
379
+ /** Concatenated snapshot for LLM consumption. */
380
+ snapshot: string;
381
+ screenshot?: string;
382
+ }
383
+ export interface ModalityAdapter {
384
+ modality: Modality;
385
+ capture(input: ModalityInput): Promise<Evidence>;
386
+ }
387
+ export interface AuditResult {
388
+ /** Run id for telemetry / attribution correlation. */
389
+ runId: string;
390
+ /** Page reference (URL for HTML; bundle id for native; etc.). */
391
+ pageRef: string;
392
+ classification: EnsembleClassification;
393
+ /** Per-dimension scores, ALWAYS all 5 dimensions. */
394
+ scores: Record<Dimension, DimensionScore>;
395
+ rollup: RollupScore;
396
+ /** Findings + patches. Includes deterministic measurements (axe, contrast). */
397
+ findings: DesignFinding[];
398
+ /** Top-N findings ranked by ROI. References `findings[*].id`. */
399
+ topFixes: string[];
400
+ measurements: MeasurementBundle;
401
+ ethicsViolations: EthicsViolation[];
402
+ /** Patterns matched against the page (Layer 5). May be empty. */
403
+ matchedPatterns: PatternMatch[];
404
+ /** When first-principles mode triggered (Layer 3). May be undefined. */
405
+ novelPattern?: NovelPatternObservation;
406
+ /** Modality (Layer 8). HTML for v1 compat. */
407
+ modality: Modality;
408
+ /** Provenance. */
409
+ evaluatedAt: string;
410
+ promptHash: string;
411
+ rubricHash: string;
412
+ /** LLM token usage across passes. */
413
+ tokensUsed?: number;
414
+ /** Ensemble of audit passes that ran (deep / max / single). */
415
+ passes: string[];
416
+ error?: string;
417
+ }
418
+ /**
419
+ * Operator-supplied hints. None override the classifier outright; they bias
420
+ * the ensemble toward a result. If a hint disagrees with the classifier's
421
+ * final type with high confidence, a warning surfaces.
422
+ */
423
+ export interface AuditRuntimeHints {
424
+ rubricHint?: PageType;
425
+ audience?: AudienceTag[];
426
+ modality?: ModalityTag[];
427
+ regulatoryContext?: RegulatoryContextTag[];
428
+ /** Tenant id for cross-tenant attribution + ethics rule overrides. */
429
+ tenantId?: string;
430
+ }
431
+ //# sourceMappingURL=score-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score-types.d.ts","sourceRoot":"","sources":["../../../src/design/audit/score-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * design audit — type contract for the 8-layer architecture.
3
+ *
4
+ * RFC: docs/rfc/design-audit-world-class.md
5
+ *
6
+ * This file is the stable contract that every layer's implementation
7
+ * builds against. It exists to let parallel implementation work proceed
8
+ * without diverging interfaces. Editing this file mid-build is a coordinated
9
+ * change; layers must update in lockstep.
10
+ *
11
+ * Invariants enforced by this contract:
12
+ * - Every score is a `DimensionScore` with `range` + `confidence`. No bare numbers.
13
+ * - Every finding with `severity in ['major','critical']` MUST have ≥1 `Patch`.
14
+ * - Every patch has both `target` (what changes) and `testThatProves` (how we verify).
15
+ * - Every classification carries explicit `ensembleConfidence` and `signalsAgreed`.
16
+ * - Every audit run can write a `PatchApplication` event for post-hoc attribution.
17
+ * - Pattern, ethics, modality types compose cleanly via shared `AppliesWhen`.
18
+ */
19
+ export const DIMENSIONS = [
20
+ 'product_intent',
21
+ 'visual_craft',
22
+ 'trust_clarity',
23
+ 'workflow',
24
+ 'content_ia',
25
+ ];
26
+ //# sourceMappingURL=score-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score-types.js","sourceRoot":"","sources":["../../../src/design/audit/score-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA4BH,MAAM,CAAC,MAAM,UAAU,GAAyB;IAC9C,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,UAAU;IACV,YAAY;CACJ,CAAA"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Multi-dimensional scoring — prompt builder, parser, and rollup.
3
+ *
4
+ * Pure functions. No I/O, no Brain dependency. The pipeline supplies the
5
+ * inputs (classification, rubric, anchor, measurements) and persists the
6
+ * resulting `Record<Dimension, DimensionScore> + RollupScore`.
7
+ */
8
+ import { type Dimension, type DimensionScore, type RollupScore } from './score-types.js';
9
+ import type { PageType } from './types.js';
10
+ import type { CalibrationAnchor } from './rubric/anchor-loader.js';
11
+ export interface BuildPromptInput {
12
+ pageType: PageType;
13
+ rubricBody: string;
14
+ anchor?: CalibrationAnchor;
15
+ /** Concise text summary of deterministic measurements (axe, contrast). */
16
+ measurementSummary: string;
17
+ /** Optional auditor framing override. */
18
+ systemOpener?: string;
19
+ /** Page intent line surfaced from classification. */
20
+ intent?: string;
21
+ }
22
+ /**
23
+ * Build the evaluation prompt. Demands per-dim DimensionScore output with
24
+ * range + confidence. Does NOT request the rollup — the rollup is computed
25
+ * deterministically from the per-dim scores using rollup-weights.
26
+ */
27
+ export declare function buildEvalPrompt(input: BuildPromptInput): string;
28
+ export interface ParsedDimensionScores {
29
+ scores: Record<Dimension, DimensionScore>;
30
+ summary: string;
31
+ strengths: string[];
32
+ }
33
+ /**
34
+ * Parse the LLM response. Throws when scores are missing, ranges violate
35
+ * `range[0] <= score <= range[1]`, or score is outside 1..10. The pipeline
36
+ * catches the throw and falls back to v1 mean-of-passes.
37
+ */
38
+ export declare function parseAuditResponse(raw: string): ParsedDimensionScores;
39
+ /**
40
+ * Compute the rollup from per-dimension scores using per-page-type weights.
41
+ * Conservative confidence rule: rollup confidence = lowest dim confidence.
42
+ */
43
+ export declare function computeRollup(scores: Record<Dimension, DimensionScore>, pageType: PageType): RollupScore;
44
+ /**
45
+ * Aggregate per-dim scores from N independent passes (mean). Used when the
46
+ * audit runs deep mode and we want one DimensionScore per dimension.
47
+ */
48
+ export declare function mergeDimensionScoresAcrossPasses(perPass: Array<Record<Dimension, DimensionScore>>): Record<Dimension, DimensionScore>;
49
+ //# sourceMappingURL=score.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../../../src/design/audit/score.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAKlE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,0EAA0E;IAC1E,kBAAkB,EAAE,MAAM,CAAA;IAC1B,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CA6C/D;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CA4BrE;AAoCD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAgCxG;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,GAChD,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CA6BnC"}