@tangle-network/browser-agent-driver 0.30.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.
Files changed (235) hide show
  1. package/dist/cli-ack-patch.d.ts +39 -0
  2. package/dist/cli-ack-patch.d.ts.map +1 -0
  3. package/dist/cli-ack-patch.js +47 -0
  4. package/dist/cli-ack-patch.js.map +1 -0
  5. package/dist/cli-design-audit.d.ts +12 -0
  6. package/dist/cli-design-audit.d.ts.map +1 -1
  7. package/dist/cli-design-audit.js +88 -0
  8. package/dist/cli-design-audit.js.map +1 -1
  9. package/dist/cli-jobs.d.ts +13 -0
  10. package/dist/cli-jobs.d.ts.map +1 -0
  11. package/dist/cli-jobs.js +262 -0
  12. package/dist/cli-jobs.js.map +1 -0
  13. package/dist/cli-patterns.d.ts +26 -0
  14. package/dist/cli-patterns.d.ts.map +1 -0
  15. package/dist/cli-patterns.js +49 -0
  16. package/dist/cli-patterns.js.map +1 -0
  17. package/dist/cli-reports.d.ts +12 -0
  18. package/dist/cli-reports.d.ts.map +1 -0
  19. package/dist/cli-reports.js +97 -0
  20. package/dist/cli-reports.js.map +1 -0
  21. package/dist/cli.js +29 -1
  22. package/dist/cli.js.map +1 -1
  23. package/dist/design/audit/attribution/aggregate.d.ts +16 -0
  24. package/dist/design/audit/attribution/aggregate.d.ts.map +1 -0
  25. package/dist/design/audit/attribution/aggregate.js +81 -0
  26. package/dist/design/audit/attribution/aggregate.js.map +1 -0
  27. package/dist/design/audit/attribution/store.d.ts +36 -0
  28. package/dist/design/audit/attribution/store.d.ts.map +1 -0
  29. package/dist/design/audit/attribution/store.js +108 -0
  30. package/dist/design/audit/attribution/store.js.map +1 -0
  31. package/dist/design/audit/attribution/types.d.ts +13 -0
  32. package/dist/design/audit/attribution/types.d.ts.map +1 -0
  33. package/dist/design/audit/attribution/types.js +10 -0
  34. package/dist/design/audit/attribution/types.js.map +1 -0
  35. package/dist/design/audit/classify-ensemble.d.ts +46 -0
  36. package/dist/design/audit/classify-ensemble.d.ts.map +1 -0
  37. package/dist/design/audit/classify-ensemble.js +207 -0
  38. package/dist/design/audit/classify-ensemble.js.map +1 -0
  39. package/dist/design/audit/ethics/check.d.ts +59 -0
  40. package/dist/design/audit/ethics/check.d.ts.map +1 -0
  41. package/dist/design/audit/ethics/check.js +137 -0
  42. package/dist/design/audit/ethics/check.js.map +1 -0
  43. package/dist/design/audit/ethics/loader.d.ts +21 -0
  44. package/dist/design/audit/ethics/loader.d.ts.map +1 -0
  45. package/dist/design/audit/ethics/loader.js +207 -0
  46. package/dist/design/audit/ethics/loader.js.map +1 -0
  47. package/dist/design/audit/ethics/rules/finance.yaml +37 -0
  48. package/dist/design/audit/ethics/rules/kids.yaml +37 -0
  49. package/dist/design/audit/ethics/rules/legal.yaml +35 -0
  50. package/dist/design/audit/ethics/rules/medical.yaml +36 -0
  51. package/dist/design/audit/evaluate.d.ts.map +1 -1
  52. package/dist/design/audit/evaluate.js +4 -1
  53. package/dist/design/audit/evaluate.js.map +1 -1
  54. package/dist/design/audit/first-principles-mode.d.ts +42 -0
  55. package/dist/design/audit/first-principles-mode.d.ts.map +1 -0
  56. package/dist/design/audit/first-principles-mode.js +77 -0
  57. package/dist/design/audit/first-principles-mode.js.map +1 -0
  58. package/dist/design/audit/modality/android.d.ts +14 -0
  59. package/dist/design/audit/modality/android.d.ts.map +1 -0
  60. package/dist/design/audit/modality/android.js +18 -0
  61. package/dist/design/audit/modality/android.js.map +1 -0
  62. package/dist/design/audit/modality/html.d.ts +22 -0
  63. package/dist/design/audit/modality/html.d.ts.map +1 -0
  64. package/dist/design/audit/modality/html.js +51 -0
  65. package/dist/design/audit/modality/html.js.map +1 -0
  66. package/dist/design/audit/modality/index.d.ts +8 -0
  67. package/dist/design/audit/modality/index.d.ts.map +1 -0
  68. package/dist/design/audit/modality/index.js +15 -0
  69. package/dist/design/audit/modality/index.js.map +1 -0
  70. package/dist/design/audit/modality/ios.d.ts +16 -0
  71. package/dist/design/audit/modality/ios.d.ts.map +1 -0
  72. package/dist/design/audit/modality/ios.js +19 -0
  73. package/dist/design/audit/modality/ios.js.map +1 -0
  74. package/dist/design/audit/modality/types.d.ts +9 -0
  75. package/dist/design/audit/modality/types.d.ts.map +1 -0
  76. package/dist/design/audit/modality/types.js +9 -0
  77. package/dist/design/audit/modality/types.js.map +1 -0
  78. package/dist/design/audit/patches/index.d.ts +8 -0
  79. package/dist/design/audit/patches/index.d.ts.map +1 -0
  80. package/dist/design/audit/patches/index.js +5 -0
  81. package/dist/design/audit/patches/index.js.map +1 -0
  82. package/dist/design/audit/patches/parse.d.ts +29 -0
  83. package/dist/design/audit/patches/parse.d.ts.map +1 -0
  84. package/dist/design/audit/patches/parse.js +153 -0
  85. package/dist/design/audit/patches/parse.js.map +1 -0
  86. package/dist/design/audit/patches/render.d.ts +20 -0
  87. package/dist/design/audit/patches/render.d.ts.map +1 -0
  88. package/dist/design/audit/patches/render.js +55 -0
  89. package/dist/design/audit/patches/render.js.map +1 -0
  90. package/dist/design/audit/patches/severity-enforcement.d.ts +23 -0
  91. package/dist/design/audit/patches/severity-enforcement.d.ts.map +1 -0
  92. package/dist/design/audit/patches/severity-enforcement.js +42 -0
  93. package/dist/design/audit/patches/severity-enforcement.js.map +1 -0
  94. package/dist/design/audit/patches/validate.d.ts +34 -0
  95. package/dist/design/audit/patches/validate.d.ts.map +1 -0
  96. package/dist/design/audit/patches/validate.js +53 -0
  97. package/dist/design/audit/patches/validate.js.map +1 -0
  98. package/dist/design/audit/patterns/match.d.ts +24 -0
  99. package/dist/design/audit/patterns/match.d.ts.map +1 -0
  100. package/dist/design/audit/patterns/match.js +48 -0
  101. package/dist/design/audit/patterns/match.js.map +1 -0
  102. package/dist/design/audit/patterns/mine.d.ts +31 -0
  103. package/dist/design/audit/patterns/mine.d.ts.map +1 -0
  104. package/dist/design/audit/patterns/mine.js +35 -0
  105. package/dist/design/audit/patterns/mine.js.map +1 -0
  106. package/dist/design/audit/patterns/store.d.ts +14 -0
  107. package/dist/design/audit/patterns/store.d.ts.map +1 -0
  108. package/dist/design/audit/patterns/store.js +53 -0
  109. package/dist/design/audit/patterns/store.js.map +1 -0
  110. package/dist/design/audit/patterns/types.d.ts +53 -0
  111. package/dist/design/audit/patterns/types.d.ts.map +1 -0
  112. package/dist/design/audit/patterns/types.js +13 -0
  113. package/dist/design/audit/patterns/types.js.map +1 -0
  114. package/dist/design/audit/pipeline.d.ts +12 -0
  115. package/dist/design/audit/pipeline.d.ts.map +1 -1
  116. package/dist/design/audit/pipeline.js +65 -3
  117. package/dist/design/audit/pipeline.js.map +1 -1
  118. package/dist/design/audit/rubric/anchor-loader.d.ts +44 -0
  119. package/dist/design/audit/rubric/anchor-loader.d.ts.map +1 -0
  120. package/dist/design/audit/rubric/anchor-loader.js +210 -0
  121. package/dist/design/audit/rubric/anchor-loader.js.map +1 -0
  122. package/dist/design/audit/rubric/anchors/blog.yaml +33 -0
  123. package/dist/design/audit/rubric/anchors/dashboard.yaml +35 -0
  124. package/dist/design/audit/rubric/anchors/docs.yaml +35 -0
  125. package/dist/design/audit/rubric/anchors/ecommerce.yaml +33 -0
  126. package/dist/design/audit/rubric/anchors/marketing.yaml +34 -0
  127. package/dist/design/audit/rubric/anchors/saas-app.yaml +38 -0
  128. package/dist/design/audit/rubric/anchors/social.yaml +33 -0
  129. package/dist/design/audit/rubric/anchors/tool.yaml +33 -0
  130. package/dist/design/audit/rubric/anchors/utility.yaml +33 -0
  131. package/dist/design/audit/rubric/fragments/audience-clinician.md +42 -0
  132. package/dist/design/audit/rubric/fragments/audience-developer.md +40 -0
  133. package/dist/design/audit/rubric/fragments/audience-kids.md +35 -0
  134. package/dist/design/audit/rubric/fragments/audience-vulnerability-minor-facing.md +37 -0
  135. package/dist/design/audit/rubric/fragments/first-principles.md +65 -0
  136. package/dist/design/audit/rubric/fragments/modality-mobile.md +39 -0
  137. package/dist/design/audit/rubric/fragments/modality-tablet.md +35 -0
  138. package/dist/design/audit/rubric/fragments/regulatory-coppa.md +32 -0
  139. package/dist/design/audit/rubric/fragments/regulatory-gdpr.md +33 -0
  140. package/dist/design/audit/rubric/fragments/regulatory-hipaa.md +36 -0
  141. package/dist/design/audit/rubric/loader.d.ts +26 -6
  142. package/dist/design/audit/rubric/loader.d.ts.map +1 -1
  143. package/dist/design/audit/rubric/loader.js +45 -26
  144. package/dist/design/audit/rubric/loader.js.map +1 -1
  145. package/dist/design/audit/rubric/rollup-weights.d.ts +25 -0
  146. package/dist/design/audit/rubric/rollup-weights.d.ts.map +1 -0
  147. package/dist/design/audit/rubric/rollup-weights.js +51 -0
  148. package/dist/design/audit/rubric/rollup-weights.js.map +1 -0
  149. package/dist/design/audit/types.d.ts +28 -0
  150. package/dist/design/audit/types.d.ts.map +1 -1
  151. package/dist/design/audit/v2/build-result.d.ts +47 -0
  152. package/dist/design/audit/v2/build-result.d.ts.map +1 -0
  153. package/dist/design/audit/v2/build-result.js +163 -0
  154. package/dist/design/audit/v2/build-result.js.map +1 -0
  155. package/dist/design/audit/v2/score.d.ts +49 -0
  156. package/dist/design/audit/v2/score.d.ts.map +1 -0
  157. package/dist/design/audit/v2/score.js +211 -0
  158. package/dist/design/audit/v2/score.js.map +1 -0
  159. package/dist/design/audit/v2/types.d.ts +431 -0
  160. package/dist/design/audit/v2/types.d.ts.map +1 -0
  161. package/dist/design/audit/v2/types.js +26 -0
  162. package/dist/design/audit/v2/types.js.map +1 -0
  163. package/dist/discover/index.d.ts +16 -0
  164. package/dist/discover/index.d.ts.map +1 -0
  165. package/dist/discover/index.js +25 -0
  166. package/dist/discover/index.js.map +1 -0
  167. package/dist/discover/wayback.d.ts +49 -0
  168. package/dist/discover/wayback.d.ts.map +1 -0
  169. package/dist/discover/wayback.js +123 -0
  170. package/dist/discover/wayback.js.map +1 -0
  171. package/dist/jobs/anti-bot.d.ts +19 -0
  172. package/dist/jobs/anti-bot.d.ts.map +1 -0
  173. package/dist/jobs/anti-bot.js +64 -0
  174. package/dist/jobs/anti-bot.js.map +1 -0
  175. package/dist/jobs/cost-estimate.d.ts +12 -0
  176. package/dist/jobs/cost-estimate.d.ts.map +1 -0
  177. package/dist/jobs/cost-estimate.js +21 -0
  178. package/dist/jobs/cost-estimate.js.map +1 -0
  179. package/dist/jobs/cost-history.d.ts +19 -0
  180. package/dist/jobs/cost-history.d.ts.map +1 -0
  181. package/dist/jobs/cost-history.js +42 -0
  182. package/dist/jobs/cost-history.js.map +1 -0
  183. package/dist/jobs/index.d.ts +31 -0
  184. package/dist/jobs/index.d.ts.map +1 -0
  185. package/dist/jobs/index.js +37 -0
  186. package/dist/jobs/index.js.map +1 -0
  187. package/dist/jobs/orchestrator.d.ts +42 -0
  188. package/dist/jobs/orchestrator.d.ts.map +1 -0
  189. package/dist/jobs/orchestrator.js +282 -0
  190. package/dist/jobs/orchestrator.js.map +1 -0
  191. package/dist/jobs/queue.d.ts +45 -0
  192. package/dist/jobs/queue.d.ts.map +1 -0
  193. package/dist/jobs/queue.js +114 -0
  194. package/dist/jobs/queue.js.map +1 -0
  195. package/dist/jobs/retry.d.ts +36 -0
  196. package/dist/jobs/retry.d.ts.map +1 -0
  197. package/dist/jobs/retry.js +77 -0
  198. package/dist/jobs/retry.js.map +1 -0
  199. package/dist/jobs/store.d.ts +31 -0
  200. package/dist/jobs/store.d.ts.map +1 -0
  201. package/dist/jobs/store.js +92 -0
  202. package/dist/jobs/store.js.map +1 -0
  203. package/dist/jobs/types.d.ts +106 -0
  204. package/dist/jobs/types.d.ts.map +1 -0
  205. package/dist/jobs/types.js +13 -0
  206. package/dist/jobs/types.js.map +1 -0
  207. package/dist/reports/aggregate.d.ts +38 -0
  208. package/dist/reports/aggregate.d.ts.map +1 -0
  209. package/dist/reports/aggregate.js +145 -0
  210. package/dist/reports/aggregate.js.map +1 -0
  211. package/dist/reports/index.d.ts +21 -0
  212. package/dist/reports/index.d.ts.map +1 -0
  213. package/dist/reports/index.js +15 -0
  214. package/dist/reports/index.js.map +1 -0
  215. package/dist/reports/narrate.d.ts +19 -0
  216. package/dist/reports/narrate.d.ts.map +1 -0
  217. package/dist/reports/narrate.js +40 -0
  218. package/dist/reports/narrate.js.map +1 -0
  219. package/dist/reports/templates.d.ts +43 -0
  220. package/dist/reports/templates.d.ts.map +1 -0
  221. package/dist/reports/templates.js +200 -0
  222. package/dist/reports/templates.js.map +1 -0
  223. package/dist/reports/tokens.d.ts +77 -0
  224. package/dist/reports/tokens.d.ts.map +1 -0
  225. package/dist/reports/tokens.js +88 -0
  226. package/dist/reports/tokens.js.map +1 -0
  227. package/dist/reports/tools.d.ts +76 -0
  228. package/dist/reports/tools.d.ts.map +1 -0
  229. package/dist/reports/tools.js +205 -0
  230. package/dist/reports/tools.js.map +1 -0
  231. package/dist/reports/types.d.ts +51 -0
  232. package/dist/reports/types.d.ts.map +1 -0
  233. package/dist/reports/types.js +9 -0
  234. package/dist/reports/types.js.map +1 -0
  235. package/package.json +2 -1
@@ -0,0 +1,431 @@
1
+ /**
2
+ * Design audit v2 — 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 AppliesWhenV1, MeasurementBundle, DesignFinding as DesignFindingV1 } 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 DesignFindingV1 {
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
+ * v2 predicate set. Extends v1 with audience/modality/regulatoryContext/
305
+ * audienceVulnerability so a pediatric medical app on tablet for clinicians
306
+ * loads multiple fragments simultaneously.
307
+ */
308
+ export interface AppliesWhen extends AppliesWhenV1 {
309
+ audience?: AudienceTag[];
310
+ modality?: ModalityTag[];
311
+ regulatoryContext?: RegulatoryContextTag[];
312
+ audienceVulnerability?: AudienceVulnerabilityTag[];
313
+ }
314
+ export type EthicsCategory = 'medical' | 'kids' | 'finance' | 'legal' | 'accessibility' | 'crisis';
315
+ export type EthicsSeverity = 'critical-floor' | 'major-floor';
316
+ export interface EthicsRule {
317
+ ruleId: string;
318
+ category: EthicsCategory;
319
+ severity: EthicsSeverity;
320
+ appliesWhen: AppliesWhen;
321
+ detector: EthicsDetector;
322
+ remediation: string;
323
+ /** Citation to regulation or standard, e.g. 'FDA 21 CFR 201.57'. */
324
+ citation?: string;
325
+ }
326
+ export type EthicsDetector = {
327
+ kind: 'pattern-absent';
328
+ pattern: string;
329
+ } | {
330
+ kind: 'pattern-present';
331
+ pattern: string;
332
+ } | {
333
+ kind: 'llm-classifier';
334
+ llmCheck: string;
335
+ };
336
+ export interface EthicsViolation {
337
+ ruleId: string;
338
+ detected: true;
339
+ severity: EthicsSeverity;
340
+ /** Rollup ceiling enforced by this violation. critical-floor → 4; major-floor → 6. */
341
+ rollupCap: number;
342
+ remediation: string;
343
+ citation?: string;
344
+ }
345
+ export type Modality = 'html' | 'ios' | 'android' | 'terminal' | 'voice';
346
+ export interface ModalityInput {
347
+ /** Modality-specific entry point — URL for HTML, app bundle for iOS, etc. */
348
+ entryPoint: string;
349
+ /** Optional flow specification when capturing multiple surfaces. */
350
+ flow?: string[];
351
+ }
352
+ /**
353
+ * Per-modality measurement bundle — analogous to the existing HTML
354
+ * MeasurementBundle (axe + contrast). Modality-specific implementations
355
+ * provide their own a11y/contrast equivalents.
356
+ */
357
+ export interface SurfaceMeasurements {
358
+ modality: Modality;
359
+ /** A11y violations — modality-specific shape. */
360
+ a11y?: unknown;
361
+ /** Contrast or readability check — modality-specific. */
362
+ contrast?: unknown;
363
+ /** Modality-specific measurements (haptic, latency, etc.). */
364
+ extra?: Record<string, unknown>;
365
+ }
366
+ export interface SurfaceRecord {
367
+ /** URL for HTML; screen name for native; turn id for voice. */
368
+ identifier: string;
369
+ measurements: SurfaceMeasurements;
370
+ snapshot: string;
371
+ screenshot?: string;
372
+ }
373
+ export interface Evidence {
374
+ modality: Modality;
375
+ surfaces: SurfaceRecord[];
376
+ /** Roll-up of per-surface measurements for backwards compat with v1 pipeline. */
377
+ measurements: MeasurementBundle;
378
+ /** Concatenated snapshot for LLM consumption. */
379
+ snapshot: string;
380
+ screenshot?: string;
381
+ }
382
+ export interface ModalityAdapter {
383
+ modality: Modality;
384
+ capture(input: ModalityInput): Promise<Evidence>;
385
+ }
386
+ export interface AuditResult_v2 {
387
+ schemaVersion: 2;
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=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/design/audit/v2/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Design audit v2 — 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=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/design/audit/v2/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,16 @@
1
+ /**
2
+ * Discoverers — turn a job's `discover` spec into a flat list of audit targets.
3
+ *
4
+ * Two sources:
5
+ * list — explicit URLs (passthrough).
6
+ * wayback — expand each URL into N historical snapshots via the CDX API.
7
+ */
8
+ import type { DiscoverSpec, JobTarget } from '../jobs/types.js';
9
+ export { discoverWaybackSnapshots, expandWaybackTargets, snapshotUrl, sampleEvenly, parseCdxRows, cdxStampToIso } from './wayback.js';
10
+ export type { WaybackOptions } from './wayback.js';
11
+ export interface DiscoverOptions {
12
+ /** Injected fetch (tests). */
13
+ fetch?: typeof fetch;
14
+ }
15
+ export declare function discoverTargets(spec: DiscoverSpec, opts?: DiscoverOptions): Promise<JobTarget[]>;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discover/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAG/D,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACrI,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CACrB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAc1G"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Discoverers — turn a job's `discover` spec into a flat list of audit targets.
3
+ *
4
+ * Two sources:
5
+ * list — explicit URLs (passthrough).
6
+ * wayback — expand each URL into N historical snapshots via the CDX API.
7
+ */
8
+ import { expandWaybackTargets } from './wayback.js';
9
+ export { discoverWaybackSnapshots, expandWaybackTargets, snapshotUrl, sampleEvenly, parseCdxRows, cdxStampToIso } from './wayback.js';
10
+ export async function discoverTargets(spec, opts = {}) {
11
+ if (spec.source === 'list') {
12
+ return spec.urls.map(url => ({ url }));
13
+ }
14
+ if (spec.source === 'wayback') {
15
+ const wb = {
16
+ count: spec.snapshotsPerUrl,
17
+ since: spec.since,
18
+ until: spec.until,
19
+ fetch: opts.fetch,
20
+ };
21
+ return expandWaybackTargets(spec.urls, wb);
22
+ }
23
+ throw new Error(`discover: unsupported source "${spec.source}"`);
24
+ }
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discover/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,oBAAoB,EAAuB,MAAM,cAAc,CAAA;AAExE,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAQrI,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAkB,EAAE,OAAwB,EAAE;IAClF,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IACxC,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAmB;YACzB,KAAK,EAAE,IAAI,CAAC,eAAe;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAA;QACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC5C,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,iCAAkC,IAAqB,CAAC,MAAM,GAAG,CAAC,CAAA;AACpF,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Wayback Machine snapshot discoverer (CDX API).
3
+ *
4
+ * Uses archive.org's CDX server to list captures of a URL, then samples
5
+ * `count` snapshots evenly across the time range. The CDX API is rate-limited
6
+ * (~15 req/s) but for the small N we use here we never approach the cap.
7
+ *
8
+ * CDX response shape:
9
+ * [["urlkey","timestamp","original","mimetype","statuscode","digest","length"],
10
+ * ["com,stripe)/", "20100101120000", "https://stripe.com/", "text/html", "200", "...", "1234"],
11
+ * ...]
12
+ *
13
+ * Snapshot URL = `https://web.archive.org/web/<timestamp>/<original>`.
14
+ */
15
+ import type { JobTarget } from '../jobs/types.js';
16
+ export interface WaybackOptions {
17
+ /** Snapshots per URL. Default 5. */
18
+ count?: number;
19
+ /** Lower-bound capture date (ISO 8601 — e.g. "2010-01-01"). */
20
+ since?: string;
21
+ /** Upper-bound capture date. */
22
+ until?: string;
23
+ /** Limit only HTTP 200 captures. Default true — 4xx/5xx snapshots aren't auditable. */
24
+ status200Only?: boolean;
25
+ /** Injected fetch (tests). Defaults to globalThis.fetch (Node 18+). */
26
+ fetch?: typeof fetch;
27
+ }
28
+ interface CdxRow {
29
+ urlkey: string;
30
+ timestamp: string;
31
+ original: string;
32
+ mimetype: string;
33
+ statuscode: string;
34
+ digest: string;
35
+ length: string;
36
+ }
37
+ /** Convert CDX timestamp "20100101120000" to ISO datetime. */
38
+ export declare function cdxStampToIso(stamp: string): string;
39
+ export declare function snapshotUrl(timestamp: string, original: string): string;
40
+ /** Sample `count` evenly-spaced rows from a sorted list. Always includes first and last. */
41
+ export declare function sampleEvenly<T>(rows: T[], count: number): T[];
42
+ /** Parse the CDX JSON response (first row is a header). */
43
+ export declare function parseCdxRows(json: unknown): CdxRow[];
44
+ /** Discover N evenly-spaced wayback snapshots for a URL. */
45
+ export declare function discoverWaybackSnapshots(url: string, opts?: WaybackOptions): Promise<JobTarget[]>;
46
+ /** Expand a list of seed URLs into wayback targets, in parallel. */
47
+ export declare function expandWaybackTargets(urls: string[], opts?: WaybackOptions): Promise<JobTarget[]>;
48
+ export {};
49
+ //# sourceMappingURL=wayback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wayback.d.ts","sourceRoot":"","sources":["../../src/discover/wayback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIjD,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uFAAuF;IACvF,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CACrB;AAED,UAAU,MAAM;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAcD,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASnD;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAU7D;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAkBpD;AAED,4DAA4D;AAC5D,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAmC3G;AAED,oEAAoE;AACpE,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAG1G"}