cbrowser 20.2.2 → 21.0.1

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 (311) hide show
  1. package/README.md +2 -2
  2. package/dist/analysis/accessibility-empathy.d.ts +29 -1
  3. package/dist/analysis/accessibility-empathy.d.ts.map +1 -1
  4. package/dist/analysis/accessibility-empathy.js +69 -35
  5. package/dist/analysis/accessibility-empathy.js.map +1 -1
  6. package/dist/browser.d.ts.map +1 -1
  7. package/dist/browser.js +11 -7
  8. package/dist/browser.js.map +1 -1
  9. package/dist/cif-score.d.ts +56 -5
  10. package/dist/cif-score.d.ts.map +1 -1
  11. package/dist/cif-score.js +595 -346
  12. package/dist/cif-score.js.map +1 -1
  13. package/dist/cli.js +10 -8
  14. package/dist/cli.js.map +1 -1
  15. package/dist/cognitive/default-traits.d.ts +14 -0
  16. package/dist/cognitive/default-traits.d.ts.map +1 -0
  17. package/dist/cognitive/default-traits.js +36 -0
  18. package/dist/cognitive/default-traits.js.map +1 -0
  19. package/dist/cognitive/emotions.d.ts.map +1 -1
  20. package/dist/cognitive/emotions.js +104 -174
  21. package/dist/cognitive/emotions.js.map +1 -1
  22. package/dist/cognitive/index.d.ts +28 -0
  23. package/dist/cognitive/index.d.ts.map +1 -1
  24. package/dist/cognitive/index.js +353 -287
  25. package/dist/cognitive/index.js.map +1 -1
  26. package/dist/cognitive/temporal.d.ts +0 -24
  27. package/dist/cognitive/temporal.d.ts.map +1 -1
  28. package/dist/cognitive/temporal.js +45 -35
  29. package/dist/cognitive/temporal.js.map +1 -1
  30. package/dist/data/ctc-reference-v2-2026-10-24.d.ts +16 -0
  31. package/dist/data/ctc-reference-v2-2026-10-24.d.ts.map +1 -0
  32. package/dist/data/ctc-reference-v2-2026-10-24.js +1004 -0
  33. package/dist/data/ctc-reference-v2-2026-10-24.js.map +1 -0
  34. package/dist/ideal-profiles-gap.d.ts +1 -0
  35. package/dist/ideal-profiles-gap.d.ts.map +1 -1
  36. package/dist/ideal-profiles-gap.js +9 -1
  37. package/dist/ideal-profiles-gap.js.map +1 -1
  38. package/dist/ideal-profiles.d.ts +8 -0
  39. package/dist/ideal-profiles.d.ts.map +1 -1
  40. package/dist/ideal-profiles.js +28 -24
  41. package/dist/ideal-profiles.js.map +1 -1
  42. package/dist/mcp-server-remote.d.ts.map +1 -1
  43. package/dist/mcp-server-remote.js +7 -8
  44. package/dist/mcp-server-remote.js.map +1 -1
  45. package/dist/mcp-tools/account-personas.d.ts.map +1 -1
  46. package/dist/mcp-tools/account-personas.js +3 -1
  47. package/dist/mcp-tools/account-personas.js.map +1 -1
  48. package/dist/mcp-tools/base/answer-provenance.d.ts +28 -0
  49. package/dist/mcp-tools/base/answer-provenance.d.ts.map +1 -0
  50. package/dist/mcp-tools/base/answer-provenance.js +32 -0
  51. package/dist/mcp-tools/base/answer-provenance.js.map +1 -0
  52. package/dist/mcp-tools/base/audit-tools.d.ts +0 -3
  53. package/dist/mcp-tools/base/audit-tools.d.ts.map +1 -1
  54. package/dist/mcp-tools/base/audit-tools.js +152 -84
  55. package/dist/mcp-tools/base/audit-tools.js.map +1 -1
  56. package/dist/mcp-tools/base/capture-tools.js +1 -1
  57. package/dist/mcp-tools/base/capture-tools.js.map +1 -1
  58. package/dist/mcp-tools/base/chain-values.d.ts +38 -0
  59. package/dist/mcp-tools/base/chain-values.d.ts.map +1 -0
  60. package/dist/mcp-tools/base/chain-values.js +85 -0
  61. package/dist/mcp-tools/base/chain-values.js.map +1 -0
  62. package/dist/mcp-tools/base/cognitive-tools.d.ts.map +1 -1
  63. package/dist/mcp-tools/base/cognitive-tools.js +126 -120
  64. package/dist/mcp-tools/base/cognitive-tools.js.map +1 -1
  65. package/dist/mcp-tools/base/gif-tools.d.ts.map +1 -1
  66. package/dist/mcp-tools/base/gif-tools.js +23 -5
  67. package/dist/mcp-tools/base/gif-tools.js.map +1 -1
  68. package/dist/mcp-tools/base/persona-comparison-tools.d.ts.map +1 -1
  69. package/dist/mcp-tools/base/persona-comparison-tools.js +229 -172
  70. package/dist/mcp-tools/base/persona-comparison-tools.js.map +1 -1
  71. package/dist/mcp-tools/base/site-familiarity.d.ts +31 -0
  72. package/dist/mcp-tools/base/site-familiarity.d.ts.map +1 -0
  73. package/dist/mcp-tools/base/site-familiarity.js +30 -0
  74. package/dist/mcp-tools/base/site-familiarity.js.map +1 -0
  75. package/dist/mcp-tools/base/site-knowledge-tools.js +1 -1
  76. package/dist/mcp-tools/base/site-knowledge-tools.js.map +1 -1
  77. package/dist/mcp-tools/base/story-narrative.d.ts +50 -0
  78. package/dist/mcp-tools/base/story-narrative.d.ts.map +1 -0
  79. package/dist/mcp-tools/base/story-narrative.js +88 -0
  80. package/dist/mcp-tools/base/story-narrative.js.map +1 -0
  81. package/dist/mcp-tools/base/values-tools.d.ts.map +1 -1
  82. package/dist/mcp-tools/base/values-tools.js +19 -5
  83. package/dist/mcp-tools/base/values-tools.js.map +1 -1
  84. package/dist/mcp-tools/base/visual-testing-tools.d.ts +5 -5
  85. package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -1
  86. package/dist/mcp-tools/base/visual-testing-tools.js +38 -11
  87. package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -1
  88. package/dist/mcp-tools/persona-creation-tools.js +6 -6
  89. package/dist/mcp-tools/persona-creation-tools.js.map +1 -1
  90. package/dist/mcp-tools/persona-lifecycle-tools.d.ts.map +1 -1
  91. package/dist/mcp-tools/persona-lifecycle-tools.js +5 -1
  92. package/dist/mcp-tools/persona-lifecycle-tools.js.map +1 -1
  93. package/dist/mcp-tools/tier-gate.js +1 -1
  94. package/dist/mcp-tools/tool-result-saver.d.ts +7 -0
  95. package/dist/mcp-tools/tool-result-saver.d.ts.map +1 -1
  96. package/dist/mcp-tools/tool-result-saver.js +11 -0
  97. package/dist/mcp-tools/tool-result-saver.js.map +1 -1
  98. package/dist/mcp-tools/trait-provenance.d.ts +109 -0
  99. package/dist/mcp-tools/trait-provenance.d.ts.map +1 -0
  100. package/dist/mcp-tools/trait-provenance.js +187 -0
  101. package/dist/mcp-tools/trait-provenance.js.map +1 -0
  102. package/dist/mcp-tools/ui-resources.d.ts +6 -7
  103. package/dist/mcp-tools/ui-resources.d.ts.map +1 -1
  104. package/dist/mcp-tools/ui-resources.js +162 -12
  105. package/dist/mcp-tools/ui-resources.js.map +1 -1
  106. package/dist/mcp-tools/widget-kit.d.ts +129 -3
  107. package/dist/mcp-tools/widget-kit.d.ts.map +1 -1
  108. package/dist/mcp-tools/widget-kit.js +507 -28
  109. package/dist/mcp-tools/widget-kit.js.map +1 -1
  110. package/dist/performance/metrics.d.ts.map +1 -1
  111. package/dist/performance/metrics.js +4 -1
  112. package/dist/performance/metrics.js.map +1 -1
  113. package/dist/persona-age.d.ts +59 -0
  114. package/dist/persona-age.d.ts.map +1 -0
  115. package/dist/persona-age.js +84 -0
  116. package/dist/persona-age.js.map +1 -0
  117. package/dist/persona-questionnaire.js +1 -1
  118. package/dist/persona-questionnaire.js.map +1 -1
  119. package/dist/personas.d.ts +3 -1
  120. package/dist/personas.d.ts.map +1 -1
  121. package/dist/personas.js +154 -119
  122. package/dist/personas.js.map +1 -1
  123. package/dist/recording/engine.d.ts.map +1 -1
  124. package/dist/recording/engine.js +5 -2
  125. package/dist/recording/engine.js.map +1 -1
  126. package/dist/recording/saliency-overlay.d.ts +8 -3
  127. package/dist/recording/saliency-overlay.d.ts.map +1 -1
  128. package/dist/recording/saliency-overlay.js +14 -5
  129. package/dist/recording/saliency-overlay.js.map +1 -1
  130. package/dist/recording/types.js +1 -1
  131. package/dist/testing/nl-test-suite.d.ts.map +1 -1
  132. package/dist/testing/nl-test-suite.js +2 -1
  133. package/dist/testing/nl-test-suite.js.map +1 -1
  134. package/dist/trait-reference.d.ts +19 -2
  135. package/dist/trait-reference.d.ts.map +1 -1
  136. package/dist/trait-reference.js +19 -2
  137. package/dist/trait-reference.js.map +1 -1
  138. package/dist/types.d.ts +32 -21
  139. package/dist/types.d.ts.map +1 -1
  140. package/dist/types.js +62 -52
  141. package/dist/types.js.map +1 -1
  142. package/dist/values/persona-completeness.js +1 -1
  143. package/dist/values/persona-completeness.js.map +1 -1
  144. package/dist/visual/ab-comparison.d.ts.map +1 -1
  145. package/dist/visual/ab-comparison.js +4 -1
  146. package/dist/visual/ab-comparison.js.map +1 -1
  147. package/dist/visual/attention-quality.d.ts +1 -1
  148. package/dist/visual/attention-quality.js +1 -1
  149. package/dist/visual/attention-transport.d.ts +74 -10
  150. package/dist/visual/attention-transport.d.ts.map +1 -1
  151. package/dist/visual/attention-transport.js +353 -193
  152. package/dist/visual/attention-transport.js.map +1 -1
  153. package/dist/visual/cognitive-models.d.ts +77 -55
  154. package/dist/visual/cognitive-models.d.ts.map +1 -1
  155. package/dist/visual/cognitive-models.js +231 -104
  156. package/dist/visual/cognitive-models.js.map +1 -1
  157. package/dist/visual/cognitive-transport-chain.d.ts +328 -30
  158. package/dist/visual/cognitive-transport-chain.d.ts.map +1 -1
  159. package/dist/visual/cognitive-transport-chain.js +576 -353
  160. package/dist/visual/cognitive-transport-chain.js.map +1 -1
  161. package/dist/visual/cognitive-transport.d.ts +446 -13
  162. package/dist/visual/cognitive-transport.d.ts.map +1 -1
  163. package/dist/visual/cognitive-transport.js +1085 -245
  164. package/dist/visual/cognitive-transport.js.map +1 -1
  165. package/dist/visual/cross-browser.d.ts.map +1 -1
  166. package/dist/visual/cross-browser.js +8 -6
  167. package/dist/visual/cross-browser.js.map +1 -1
  168. package/dist/visual/ctc-bands.d.ts +91 -0
  169. package/dist/visual/ctc-bands.d.ts.map +1 -0
  170. package/dist/visual/ctc-bands.js +117 -0
  171. package/dist/visual/ctc-bands.js.map +1 -0
  172. package/dist/visual/ctc-reference.d.ts +287 -0
  173. package/dist/visual/ctc-reference.d.ts.map +1 -0
  174. package/dist/visual/ctc-reference.js +376 -0
  175. package/dist/visual/ctc-reference.js.map +1 -0
  176. package/dist/visual/demand-laws.d.ts +145 -0
  177. package/dist/visual/demand-laws.d.ts.map +1 -0
  178. package/dist/visual/demand-laws.js +220 -0
  179. package/dist/visual/demand-laws.js.map +1 -0
  180. package/dist/visual/distance-metrics.d.ts +23 -1
  181. package/dist/visual/distance-metrics.d.ts.map +1 -1
  182. package/dist/visual/distance-metrics.js +49 -18
  183. package/dist/visual/distance-metrics.js.map +1 -1
  184. package/dist/visual/dro-bound.d.ts +220 -0
  185. package/dist/visual/dro-bound.d.ts.map +1 -0
  186. package/dist/visual/dro-bound.js +341 -0
  187. package/dist/visual/dro-bound.js.map +1 -0
  188. package/dist/visual/exact-w1.d.ts +60 -0
  189. package/dist/visual/exact-w1.d.ts.map +1 -0
  190. package/dist/visual/exact-w1.js +247 -0
  191. package/dist/visual/exact-w1.js.map +1 -0
  192. package/dist/visual/human-input.d.ts.map +1 -1
  193. package/dist/visual/human-input.js +45 -41
  194. package/dist/visual/human-input.js.map +1 -1
  195. package/dist/visual/index.d.ts +2 -0
  196. package/dist/visual/index.d.ts.map +1 -1
  197. package/dist/visual/index.js +2 -0
  198. package/dist/visual/index.js.map +1 -1
  199. package/dist/visual/law-times-report.d.ts +49 -0
  200. package/dist/visual/law-times-report.d.ts.map +1 -0
  201. package/dist/visual/law-times-report.js +38 -0
  202. package/dist/visual/law-times-report.js.map +1 -0
  203. package/dist/visual/model-provenance.d.ts +151 -0
  204. package/dist/visual/model-provenance.d.ts.map +1 -0
  205. package/dist/visual/model-provenance.js +335 -0
  206. package/dist/visual/model-provenance.js.map +1 -0
  207. package/dist/visual/normal-cdf.d.ts +14 -0
  208. package/dist/visual/normal-cdf.d.ts.map +1 -0
  209. package/dist/visual/normal-cdf.js +26 -0
  210. package/dist/visual/normal-cdf.js.map +1 -0
  211. package/dist/visual/perceptual-transport.d.ts +28 -4
  212. package/dist/visual/perceptual-transport.d.ts.map +1 -1
  213. package/dist/visual/perceptual-transport.js +66 -32
  214. package/dist/visual/perceptual-transport.js.map +1 -1
  215. package/dist/visual/provenance/age.d.ts +30 -0
  216. package/dist/visual/provenance/age.d.ts.map +1 -0
  217. package/dist/visual/provenance/age.js +28 -0
  218. package/dist/visual/provenance/age.js.map +1 -0
  219. package/dist/visual/provenance/attention.d.ts +55 -0
  220. package/dist/visual/provenance/attention.d.ts.map +1 -0
  221. package/dist/visual/provenance/attention.js +188 -0
  222. package/dist/visual/provenance/attention.js.map +1 -0
  223. package/dist/visual/provenance/chain.d.ts +41 -0
  224. package/dist/visual/provenance/chain.d.ts.map +1 -0
  225. package/dist/visual/provenance/chain.js +66 -0
  226. package/dist/visual/provenance/chain.js.map +1 -0
  227. package/dist/visual/provenance/cif.d.ts +42 -0
  228. package/dist/visual/provenance/cif.d.ts.map +1 -0
  229. package/dist/visual/provenance/cif.js +116 -0
  230. package/dist/visual/provenance/cif.js.map +1 -0
  231. package/dist/visual/provenance/ctc-reference.d.ts +36 -0
  232. package/dist/visual/provenance/ctc-reference.d.ts.map +1 -0
  233. package/dist/visual/provenance/ctc-reference.js +96 -0
  234. package/dist/visual/provenance/ctc-reference.js.map +1 -0
  235. package/dist/visual/provenance/distance.d.ts +10 -0
  236. package/dist/visual/provenance/distance.d.ts.map +1 -0
  237. package/dist/visual/provenance/distance.js +72 -0
  238. package/dist/visual/provenance/distance.js.map +1 -0
  239. package/dist/visual/provenance/dro.d.ts +10 -0
  240. package/dist/visual/provenance/dro.d.ts.map +1 -0
  241. package/dist/visual/provenance/dro.js +2 -0
  242. package/dist/visual/provenance/dro.js.map +1 -0
  243. package/dist/visual/provenance/emotion.d.ts +26 -0
  244. package/dist/visual/provenance/emotion.d.ts.map +1 -0
  245. package/dist/visual/provenance/emotion.js +99 -0
  246. package/dist/visual/provenance/emotion.js.map +1 -0
  247. package/dist/visual/provenance/human-input.d.ts +19 -0
  248. package/dist/visual/provenance/human-input.d.ts.map +1 -0
  249. package/dist/visual/provenance/human-input.js +84 -0
  250. package/dist/visual/provenance/human-input.js.map +1 -0
  251. package/dist/visual/provenance/journey-group.d.ts +15 -0
  252. package/dist/visual/provenance/journey-group.d.ts.map +1 -0
  253. package/dist/visual/provenance/journey-group.js +15 -0
  254. package/dist/visual/provenance/journey-group.js.map +1 -0
  255. package/dist/visual/provenance/journey-mcp.d.ts +24 -0
  256. package/dist/visual/provenance/journey-mcp.d.ts.map +1 -0
  257. package/dist/visual/provenance/journey-mcp.js +54 -0
  258. package/dist/visual/provenance/journey-mcp.js.map +1 -0
  259. package/dist/visual/provenance/journey.d.ts +34 -0
  260. package/dist/visual/provenance/journey.d.ts.map +1 -0
  261. package/dist/visual/provenance/journey.js +184 -0
  262. package/dist/visual/provenance/journey.js.map +1 -0
  263. package/dist/visual/provenance/laws.d.ts +38 -0
  264. package/dist/visual/provenance/laws.d.ts.map +1 -0
  265. package/dist/visual/provenance/laws.js +40 -0
  266. package/dist/visual/provenance/laws.js.map +1 -0
  267. package/dist/visual/provenance/page-metrics.d.ts +42 -0
  268. package/dist/visual/provenance/page-metrics.d.ts.map +1 -0
  269. package/dist/visual/provenance/page-metrics.js +79 -0
  270. package/dist/visual/provenance/page-metrics.js.map +1 -0
  271. package/dist/visual/provenance/perceptual.d.ts +63 -0
  272. package/dist/visual/provenance/perceptual.d.ts.map +1 -0
  273. package/dist/visual/provenance/perceptual.js +115 -0
  274. package/dist/visual/provenance/perceptual.js.map +1 -0
  275. package/dist/visual/provenance/persona-rates.d.ts +84 -0
  276. package/dist/visual/provenance/persona-rates.d.ts.map +1 -0
  277. package/dist/visual/provenance/persona-rates.js +108 -0
  278. package/dist/visual/provenance/persona-rates.js.map +1 -0
  279. package/dist/visual/provenance/personas.d.ts +122 -0
  280. package/dist/visual/provenance/personas.d.ts.map +1 -0
  281. package/dist/visual/provenance/personas.js +298 -0
  282. package/dist/visual/provenance/personas.js.map +1 -0
  283. package/dist/visual/provenance/profiles.d.ts +39 -0
  284. package/dist/visual/provenance/profiles.d.ts.map +1 -0
  285. package/dist/visual/provenance/profiles.js +37 -0
  286. package/dist/visual/provenance/profiles.js.map +1 -0
  287. package/dist/visual/provenance/temporal.d.ts +21 -0
  288. package/dist/visual/provenance/temporal.d.ts.map +1 -0
  289. package/dist/visual/provenance/temporal.js +56 -0
  290. package/dist/visual/provenance/temporal.js.map +1 -0
  291. package/dist/visual/provenance/visual-distance.d.ts +22 -0
  292. package/dist/visual/provenance/visual-distance.d.ts.map +1 -0
  293. package/dist/visual/provenance/visual-distance.js +30 -0
  294. package/dist/visual/provenance/visual-distance.js.map +1 -0
  295. package/dist/visual/regression.d.ts.map +1 -1
  296. package/dist/visual/regression.js +14 -9
  297. package/dist/visual/regression.js.map +1 -1
  298. package/dist/visual/responsive.d.ts.map +1 -1
  299. package/dist/visual/responsive.js +4 -1
  300. package/dist/visual/responsive.js.map +1 -1
  301. package/dist/visual/scope-prose.js +2 -2
  302. package/dist/visual/scope-prose.js.map +1 -1
  303. package/dist/visual/seeded-random.d.ts +16 -0
  304. package/dist/visual/seeded-random.d.ts.map +1 -0
  305. package/dist/visual/seeded-random.js +25 -0
  306. package/dist/visual/seeded-random.js.map +1 -0
  307. package/dist/visual/stored-accessibility-traits.d.ts +27 -0
  308. package/dist/visual/stored-accessibility-traits.d.ts.map +1 -0
  309. package/dist/visual/stored-accessibility-traits.js +35 -0
  310. package/dist/visual/stored-accessibility-traits.js.map +1 -0
  311. package/package.json +1 -1
@@ -0,0 +1,298 @@
1
+ import { BUILTIN_PERSONAS, ACCESSIBILITY_PERSONAS, EMOTIONAL_PERSONAS } from "../../personas.js";
2
+ import { TRAIT_DEFINITIONS } from "../../trait-reference.js";
3
+ // From normal-cdf.ts, not cognitive-models.ts: that file imports
4
+ // model-provenance.ts, which imports this catalogue (an import cycle).
5
+ import { normalCDF as Phi } from "../normal-cdf.js";
6
+ import { LAW_PROVENANCE } from "./laws.js";
7
+ /**
8
+ * Stage C (21.0): traits the CTC chain asks a law time of whole, so their value
9
+ * reads as a tolerated reference time on Stage B's scale, tau c / (1 - c), or a
10
+ * slowdown k = (1 - c) / c against the reference user on that channel
11
+ * (research/stage-c-design.md, 4.3 and 4.5).
12
+ */
13
+ const TOLERATED_TIME = {
14
+ comprehension: { channel: "choosing", reference: "Cockburn, Gutwin & Greenberg's (2007) novice searchers, competent computer users on unfamiliar menus" },
15
+ workingMemory: { channel: "choosing", reference: "Cockburn, Gutwin & Greenberg's (2007) novice searchers, competent computer users on unfamiliar menus" },
16
+ informationForaging: { channel: "choosing", reference: "Cockburn, Gutwin & Greenberg's (2007) novice searchers, competent computer users on unfamiliar menus" },
17
+ transferLearning: { channel: "choosing", reference: "Cockburn, Gutwin & Greenberg's (2007) novice searchers, competent computer users on unfamiliar menus" },
18
+ patience: { channel: "reading", reference: "Brysbaert's (2019) reference reader, 238 words per minute" },
19
+ };
20
+ const TAU = (() => {
21
+ const e = LAW_PROVENANCE.find((x) => x.id === "law.timeBudget");
22
+ if (!e)
23
+ throw new Error("personas provenance: law.timeBudget is not registered");
24
+ return e.value;
25
+ })();
26
+ /** The persona tables this catalogue covers, by the name personas.ts exports them under. */
27
+ export const PERSONA_TABLES = { BUILTIN_PERSONAS, ACCESSIBILITY_PERSONAS, EMOTIONAL_PERSONAS };
28
+ /** The two trait groups whose numeric values are catalogued. */
29
+ export const TRAIT_GROUPS = ["cognitiveTraits", "accessibilityTraits"];
30
+ /** Traits measured in their own units rather than on a 0-1 scale. */
31
+ const UNIT_TRAITS = {
32
+ visualSpan: "characters per fixation",
33
+ contrastSensitivity: "a multiplier of the normal contrast threshold (1-5x)",
34
+ };
35
+ /** Per trait: the measure that would place a population on the trait's scale. */
36
+ const MEASURES = {
37
+ // Cognitive traits (scale anchors in trait-reference.ts)
38
+ patience: "time to abandonment under injected load delays and repeated failures in a usability task",
39
+ riskTolerance: "the rate of clicking unlabelled or ambiguous controls in a usability task, or a risk-taking scale such as DOSPERT",
40
+ comprehension: "a UI-convention recognition test (what icons, menus and gestures do)",
41
+ persistence: "retries of the same approach before switching or abandoning on a task with a failing step",
42
+ curiosity: "the share of actions spent on elements off the task path, or a trait scale such as the Curiosity and Exploration Inventory",
43
+ workingMemory: "a complex span task (e.g. operation span) or n-back",
44
+ readingTendency: "the eye-tracked share of body text fixated before acting",
45
+ resilience: "the Brief Resilience Scale",
46
+ selfEfficacy: "a computer self-efficacy scale",
47
+ satisficing: "the Maximization Scale (reverse-scored), or options inspected before choosing",
48
+ trustCalibration: "acceptance of true versus false claims in a web-credibility judgement task",
49
+ interruptRecovery: "resumption lag after a scripted interruption",
50
+ informationForaging: "link-choice accuracy on information-scent navigation tasks",
51
+ changeBlindness: "the miss rate in a flicker change-detection task on interface screenshots",
52
+ anchoringBias: "the anchoring effect size in an estimation or price-judgement task",
53
+ timeHorizon: "a delay-discounting rate (e.g. the Monetary Choice Questionnaire)",
54
+ attributionStyle: "the internality dimension of an attributional-style questionnaire, applied to technology failures",
55
+ metacognitivePlanning: "the planning subscale of the Metacognitive Awareness Inventory, or planning time before a multi-step task",
56
+ proceduralFluency: "step-order errors on a scripted multi-step procedure",
57
+ transferLearning: "time saved on a second, unfamiliar interface after learning a first",
58
+ authoritySensitivity: "choice shift toward official-looking cues in a controlled choice task",
59
+ emotionalContagion: "the Emotional Contagion Scale",
60
+ fearOfMissingOut: "the Fear of Missing Out scale, or choice shift under scarcity and urgency cues",
61
+ socialProofSensitivity: "choice shift toward review counts and ratings in a controlled choice task",
62
+ mentalModelFlexibility: "a task-switching cost, or perseverative errors in a card-sorting task",
63
+ // Accessibility traits (scales documented on AccessibilityTraits in types.ts)
64
+ motorControl: "pointing throughput on an ISO 9241-411 multi-directional tapping task",
65
+ reachability: "the share of screen area reachable in a reach test on the persona's device",
66
+ visionLevel: "visual acuity (logMAR), mapped to the scale's anchors (0 blind, 0.5 low vision, 1 sighted)",
67
+ contrastSensitivity: "Pelli-Robson contrast sensitivity, expressed as the ratio of the sample's contrast threshold to the normal-vision threshold",
68
+ processingSpeed: "a processing-speed test such as the Symbol Digit Modalities Test",
69
+ attentionSpan: "a continuous performance test of sustained attention",
70
+ orthographicFluency: "sight-word reading efficiency (e.g. TOWRE)",
71
+ phonologicalDecoding: "nonword decoding efficiency (e.g. TOWRE phonemic decoding)",
72
+ visualSpan: "a visual-span profile from letter-trigram recognition",
73
+ vocabularyBreadth: "a receptive vocabulary test",
74
+ crowdingSensitivity: "critical spacing for letter crowding relative to typical readers",
75
+ fatigueSusceptibility: "the performance decrement across a long session (time-on-task slope)",
76
+ };
77
+ /**
78
+ * Per persona: the population a test sample would be drawn from. An archetype
79
+ * is defined by the behaviour its traits describe, so it is marked as such
80
+ * with the screening criterion that would turn it into a population.
81
+ */
82
+ const POPULATIONS = {
83
+ "power-user": { population: "expert daily web users (e.g. professional developers) aged 25-45" },
84
+ "first-timer": { population: "adults using the interface under test for the first time" },
85
+ "mobile-user": { population: "smartphone-primary web users aged 18-45" },
86
+ "screen-reader-user": { population: "blind adults who use a screen reader daily" },
87
+ "elderly-user": { population: "adults aged 65 and over" },
88
+ "impatient-user": { archetype: "users in the top quartile of observed abandonment rate" },
89
+ "distracted-user": { archetype: "users in the top quartile of observed task switching" },
90
+ "careful-reader": { archetype: "users in the top quartile of reading time before acting" },
91
+ "explorer": { archetype: "users in the top quartile of off-path clicks" },
92
+ "task-focused": { archetype: "users in the bottom quartile of off-path clicks" },
93
+ "motor-impairment-tremor": { population: "adults aged 40-65 with essential tremor" },
94
+ "low-vision-magnified": { population: "adults aged 45-75 with low vision who use about 3x screen magnification" },
95
+ "cognitive-adhd": { population: "adults aged 18-45 diagnosed with ADHD" },
96
+ "dyslexic-user": { population: "adults aged 18-55 diagnosed with dyslexia" },
97
+ "deaf-user": { population: "deaf adults" },
98
+ "elderly-low-vision": { population: "adults aged 75 and over with age-related low vision" },
99
+ "color-blind-deuteranopia": { population: "adults with confirmed deuteranopia" },
100
+ "autism-spectrum": { population: "autistic adults aged 18-45 without intellectual disability, the group the persona's spectrum note describes" },
101
+ "intellectual-disability": { population: "adults aged 18-55 with mild intellectual disability" },
102
+ "aphasia-receptive": { population: "adults aged 35-75 with receptive aphasia" },
103
+ "dyscalculia": { population: "adults aged 18-55 with diagnosed dyscalculia" },
104
+ "anxious-user": { population: "adults high in trait anxiety on the State-Trait Anxiety Inventory, the instrument the persona names" },
105
+ "confident-user": { population: "adults high in computer self-efficacy" },
106
+ "emotional-user": { population: "adults high on the Affect Intensity Measure, the instrument the persona names" },
107
+ "stoic-user": { population: "adults high in cognitive reappraisal (e.g. on the Emotion Regulation Questionnaire)" },
108
+ };
109
+ /** Persona-level research notes in personas.ts. They support the persona's design, not a trait value. */
110
+ const PERSONA_NOTES = {
111
+ "motor-impairment-tremor": "essential tremor prevalence 0.4-5.6% (npj Digital Medicine 2019) and 1-15 Hz tremor filtering",
112
+ "cognitive-adhd": "75-81% of ADHD cases showing central-executive working-memory impairment (Kofler et al. 2020, Neuropsychology, PMC7483636; children aged 8-13)",
113
+ "dyslexic-user": "students with dyslexia reading 184.63 vs 243.64 words per minute silently (Callens, Tops & Brysbaert 2012, PLoS ONE 7(6), e38081, Table 5); adults with dyslexia 178.09 vs 248.18, medians (Franzen, Stark & Johnson 2021, Scientific Reports 11, 6449)",
114
+ "elderly-low-vision": "memory loss in over a third of people over 70 (ScienceDaily 2025), faster decline after 70 (Nature Communications 2026) and an unnamed PMC review on inhibitory control",
115
+ "autism-spectrum": "Yaneva et al. eye tracking (2018, Behaviour & Information Technology; 2020, W4A) and the AASPIRE guidelines (Raymaker/Nicolaidis 2019)",
116
+ "intellectual-disability": "Karreman, van der Geest & Buursink (2007), Rocha et al. (2015, PMC4467236) and the W3C COGA Down Syndrome module",
117
+ "aphasia-receptive": "the W3C COGA aphasia module, Brandenburg et al. (PMC12336571) and Roper's usability testing",
118
+ "dyscalculia": "the W3C COGA dyscalculia module, the UK Government Design System (2022), the UK Accessibility Blog (2025) and a 3-7% prevalence (Butterworth 2005, Science)",
119
+ "anxious-user": "the State-Trait Anxiety Inventory (Spielberger 1983) and Grupe & Nitschke (2013)",
120
+ "confident-user": "Self-Efficacy Theory (Bandura 1977)",
121
+ "emotional-user": "the Affect Intensity Measure (Larsen & Diener 1987)",
122
+ "stoic-user": "emotion regulation (Gross 2002) and Pigliucci (2017)",
123
+ };
124
+ const READING_TRAITS = ["orthographicFluency", "phonologicalDecoding", "visualSpan", "vocabularyBreadth", "crowdingSensitivity"];
125
+ const readingProfile = (persona, cite, claim) => Object.fromEntries(READING_TRAITS.map((t) => [`${persona}.${t}`, {
126
+ cite,
127
+ claim: `${claim}; the five reading values are the ones getReadingProfile returned for this persona by name before they became traits`,
128
+ }]));
129
+ const DYSLEXIA_COMPENSATION = "the compensation literature cited at dyslexic-user.patience (Annals of Dyslexia, 10.1007/s11881-020-00195-w)";
130
+ /**
131
+ * Citations personas.ts places beside a single value, keyed `<persona>.<trait>`.
132
+ * Only comments that name a source are listed; construct tags such as
133
+ * "(Bandura)" and claims marked "documented" with no source are not.
134
+ */
135
+ const VALUE_CITATIONS = {
136
+ "screen-reader-user.riskTolerance": {
137
+ cite: "Information Wayfinding of Screen Reader Users (ASSETS 2024, 10.1145/3663548.3688539) and Context-Aware Guidance for Screen Reader Users (CHI 2026, 10.1145/3772318.3790661)",
138
+ claim: "cautious exploration to avoid disorientation, the low end of this scale",
139
+ direction: "low",
140
+ },
141
+ "elderly-user.proceduralFluency": {
142
+ cite: "Fisk et al. 2009, Designing for Older Adults",
143
+ claim: "a speed-accuracy tradeoff that shifts toward accuracy with age; personas.ts calls 0.5 a reasoned midpoint",
144
+ },
145
+ "motor-impairment-tremor.selfEfficacy": { cite: "Lorig et al. 2001 (Chronic Disease Self-Management)", claim: "motor impairment and self-efficacy" },
146
+ "motor-impairment-tremor.satisficing": { cite: "Kool et al. 2010 (effort discounting)", claim: "physical effort increasing satisficing", direction: "high" },
147
+ "motor-impairment-tremor.interruptRecovery": {
148
+ cite: "Mark's interruption research",
149
+ claim: "motor issues making resumption harder, with adaptation helping",
150
+ direction: "low",
151
+ note: "until 21.0 the value was 0.6, on the opposite side from the cited direction",
152
+ },
153
+ ...readingProfile("low-vision-magnified", "Legge et al. 2007", "central scotoma and crowding"),
154
+ "low-vision-magnified.selfEfficacy": {
155
+ cite: "Brody et al. 2002 (AMD and depression)",
156
+ claim: "reduced vision correlating with lower confidence in task completion",
157
+ direction: "low",
158
+ note: "until 21.0 the value was 0.6, on the opposite side from the cited direction",
159
+ },
160
+ "low-vision-magnified.satisficing": {
161
+ cite: "Pachur & Hertwig 2006 (J Exp Psychol Learn Mem Cogn 32(5):983-1002)",
162
+ claim: "limited information access increasing satisficing",
163
+ direction: "high",
164
+ note: "the paper studies recognition-based inference, which is faster and more prevalent under time pressure; it is not a study of low vision or of satisficing, so it supports the direction only by analogy. Until 21.0 the value was 0.4, on the opposite side from the cited direction",
165
+ },
166
+ "low-vision-magnified.trustCalibration": { cite: "Brody 2002", claim: "vision impairment increasing caution", direction: "low" },
167
+ "low-vision-magnified.interruptRecovery": { cite: "Mark's interruption research", claim: "a limited visible area making context recovery harder", direction: "low" },
168
+ ...readingProfile("cognitive-adhd", "Dhar et al. 2010", "intact decoding with reduced sustained attention"),
169
+ ...readingProfile("dyslexic-user", "Perry, Zorzi & Ziegler 2019 (Psychological Science)", "the dyslexic reading profile"),
170
+ "dyslexic-user.workingMemory": { cite: "de Jong 2006 and an n-back fNIRS study (PMC3496727)", claim: "a working-memory deficit that persists into adulthood", direction: "low" },
171
+ "dyslexic-user.patience": { cite: "Annals of Dyslexia, 10.1007/s11881-020-00195-w", claim: "slower reading as a compensatory mechanism", direction: "high" },
172
+ "dyslexic-user.persistence": { cite: DYSLEXIA_COMPENSATION, claim: "compensatory strategies built and sustained across schooling", direction: "high" },
173
+ "dyslexic-user.informationForaging": { cite: DYSLEXIA_COMPENSATION, claim: "text-structure use as a compensator", direction: "high" },
174
+ "dyslexic-user.resilience": {
175
+ cite: "Kapur & Agrawal 2026",
176
+ claim: "secondary anxiety in dyslexia pulling the value down from 0.6, held at neutral by the compensation literature",
177
+ note: "until 21.0 the value was 0.6, the value the comment says it was pulled down from",
178
+ direction: "mid",
179
+ },
180
+ "dyslexic-user.selfEfficacy": { cite: "PMC11488781 (Nigerian undergraduate cohort)", claim: "dyslexia predicting lower academic self-efficacy", direction: "low" },
181
+ "dyslexic-user.attributionStyle": { cite: "Kapur & Agrawal 2026", claim: "psychoeducation reducing self-blame, which places the untreated baseline above neutral", direction: "high" },
182
+ "elderly-low-vision.vocabularyBreadth": {
183
+ cite: "Rayner et al. 2006",
184
+ claim: "vocabulary growing across the lifespan, so the elderly reading profile's value is kept over low vision's",
185
+ },
186
+ "elderly-low-vision.workingMemory": { cite: "an unnamed PMC review (the persona note)", claim: "inhibitory-control decline limiting working memory", direction: "low" },
187
+ "color-blind-deuteranopia.changeBlindness": { cite: "MDPI 13/2/53 (a simulated-interface study)", claim: "a state change signalled by colour alone being invisible without a second cue", direction: "high" },
188
+ "dyscalculia.workingMemory": { cite: "PMC8946289 (numerical activities of daily living)", claim: "working memory underpinning number processing, with math anxiety reducing it further", direction: "low" },
189
+ };
190
+ /** Norm-anchored values, keyed `<persona>.<trait>`. */
191
+ export const NORM_ANCHORS = {
192
+ "cognitive-adhd.workingMemory": {
193
+ cite: "Wilson AC 2024, Cognitive profile in autism and ADHD: a meta-analysis of performance on the WAIS-IV and WISC-V, Arch Clin Neuropsychol 39(4):498-515, doi 10.1093/arclin/acad073, PMC11110614",
194
+ reported: "Table 5, adults with ADHD on the WAIS-IV (scored to a norm of mean 100, SD 15): Working Memory Index mean 95.2, 95% CI 92.5-98.0; five samples, mean age 29",
195
+ z: (95.2 - 100) / 15,
196
+ zLo: (92.5 - 100) / 15,
197
+ zHi: (98.0 - 100) / 15,
198
+ replaced: "0.3, cited to Kofler et al. 2020 (Neuropsychology 34(6):686-698, PMC7483636; d = 1.63-2.03), whose 172 participants are children aged 8-13; that study now gives the direction only",
199
+ note: "two of the five adult rows in Wilson's Table 3 (Baggio et al. 2020, Shepler & Callan 2022, n = 66 each) are identical in every cell and may be one sample counted twice. The Working Memory Index is Digit Span plus Arithmetic, so it also loads on arithmetic",
200
+ },
201
+ "autism-spectrum.workingMemory": {
202
+ cite: "Habib A, Harris L, Pollick F, Melville C 2019, A meta-analysis of working memory in individuals with autism spectrum disorders, PLoS One 14(4):e0216198, doi 10.1371/journal.pone.0216198, PMC6490940",
203
+ reported: "Table 6, visuospatial working-memory accuracy, adult subgroup: k = 4, SMD -0.47, 95% CI -0.91 to -0.03, against typically developed controls matched on age and IQ, every participant at IQ 70 or above",
204
+ z: -0.47,
205
+ zLo: -0.91,
206
+ zHi: -0.03,
207
+ replaced: "0.6, cited to Happé & Frith 2006 for detail-oriented processing (\"working memory often good\"), which both of Habib's adult estimates exclude",
208
+ note: "the adult phonological estimate is lower (Table 3: d = -0.79, 95% CI -1.53 to -0.04, value 0.21), and the smaller deficit is used. Wilson 2024 (Table 5) puts autistic adults at a WAIS-IV Working Memory Index of 92.9 (95% CI 83.5-102.3), which is also 0.32, but its pool includes a sample with mean FSIQ 51.3, outside this persona's population",
209
+ },
210
+ };
211
+ function sourceFor(persona, trait, value) {
212
+ const parts = [];
213
+ const unit = UNIT_TRAITS[trait];
214
+ const anchor = NORM_ANCHORS[`${persona}.${trait}`];
215
+ if (anchor) {
216
+ const f = (x) => x.toFixed(3);
217
+ parts.push(`${persona}.${trait} = ${value}, norm-anchored (paper section 3.1.1): the percentile, in the instrument's typical reference, of this persona population's mean.`);
218
+ parts.push(`Source: ${anchor.cite}. ${anchor.reported}. That is z = ${f(anchor.z)} (95% CI ${f(anchor.zLo)} to ${f(anchor.zHi)}), so Phi(z) = ${f(Phi(anchor.z))}, interval ${f(Phi(anchor.zLo))}-${f(Phi(anchor.zHi))}.`);
219
+ parts.push(`Still a hypothesis: the source measured this population on its instrument, and that the instrument measures ${trait} as trait-reference.ts defines it is cbrowser's mapping${anchor.note ? `; ${anchor.note}` : ""}.`);
220
+ parts.push(`Until 21.0 the value was ${anchor.replaced}.`);
221
+ }
222
+ else {
223
+ parts.push(`${persona}.${trait} = ${value}, set by hand${unit ? ` in ${unit}` : " on a 0-1 scale no instrument defines"}.`);
224
+ }
225
+ const timed = TOLERATED_TIME[trait];
226
+ if (timed) {
227
+ const f = (x) => x.toFixed(1);
228
+ const tolerated = value >= 1 ? "any amount of" : `${f((TAU * value) / (1 - value))} s of`;
229
+ const slowdown = value <= 0 ? "no bound on" : `${((1 - value) / value).toFixed(2)} times`;
230
+ parts.push(`In the CTC chain (21.0) the ${timed.channel} demand asks this value whole, so it reads as tolerated reference ${timed.channel} time: ${tolerated} reference work against the ${TAU} s budget (law.timeBudget), i.e. ${slowdown} the time of ${timed.reference}. That reading is a hypothesis; no rate was measured for this persona on this channel.${anchor ? " The value is a norm percentile, and a percentile and a rate ratio agree only at the median (0.5), so reading it as a time mixes the two scales." : ""}`);
231
+ }
232
+ const construct = TRAIT_DEFINITIONS[trait]?.research;
233
+ if (construct)
234
+ parts.push(`The scale's construct source in trait-reference.ts is ${construct}; it defines the scale, not this persona's place on it.`);
235
+ const cited = VALUE_CITATIONS[`${persona}.${trait}`];
236
+ if (cited) {
237
+ parts.push(`Cited beside the value in personas.ts: ${cited.cite}, for ${cited.claim}. That is a finding about direction, not a measurement of ${value}${cited.note ? `; ${cited.note}` : ""}.`);
238
+ }
239
+ const note = PERSONA_NOTES[persona];
240
+ if (note)
241
+ parts.push(`The persona's research note cites ${note}; that supports the persona's design, not this value.`);
242
+ const who = POPULATIONS[persona];
243
+ const measure = MEASURES[trait];
244
+ const compare = unit ? "compared directly in that unit" : "as the sample's mean percentile against a general-population norm";
245
+ if ("population" in who) {
246
+ parts.push(`What would test it: ${measure}, in a sample of ${who.population}, ${compare}.`);
247
+ }
248
+ else {
249
+ parts.push(`This persona is a behavioural archetype with no population yet; a screening criterion (e.g. ${who.archetype}) would define one. What would then test it: ${measure}, in that sample, ${compare}.`);
250
+ }
251
+ return parts.join(" ");
252
+ }
253
+ /**
254
+ * Build one entry per numeric trait value in the given persona tables. A value
255
+ * whose persona or trait name this file has no population or measure for is
256
+ * reported as uncovered instead of registered, so the test fails rather than
257
+ * the module.
258
+ */
259
+ export function cataloguePersonaTraits(tables) {
260
+ const entries = [];
261
+ const uncovered = [];
262
+ const seen = new Set();
263
+ for (const table of Object.values(tables)) {
264
+ for (const [persona, def] of Object.entries(table)) {
265
+ for (const group of TRAIT_GROUPS) {
266
+ const traits = def[group];
267
+ if (!traits)
268
+ continue;
269
+ for (const [trait, value] of Object.entries(traits)) {
270
+ if (typeof value !== "number")
271
+ continue;
272
+ const id = `persona.${persona}.${trait}`;
273
+ if (seen.has(id) || !POPULATIONS[persona] || !MEASURES[trait]) {
274
+ uncovered.push(id);
275
+ continue;
276
+ }
277
+ seen.add(id);
278
+ entries.push({ id, value, status: "hypothesis", source: sourceFor(persona, trait, value) });
279
+ }
280
+ }
281
+ }
282
+ }
283
+ return { entries, uncovered };
284
+ }
285
+ const CATALOGUE = cataloguePersonaTraits(PERSONA_TABLES);
286
+ export const PERSONA_PROVENANCE = CATALOGUE.entries;
287
+ /** Numeric traits in personas.ts this file cannot describe yet. Must be empty; the test says which. */
288
+ export const PERSONA_PROVENANCE_UNCOVERED = CATALOGUE.uncovered;
289
+ /** The keys of the hand-written tables above, so the test can catch a stale one. */
290
+ export const PERSONA_PROVENANCE_KEYS = {
291
+ populations: Object.keys(POPULATIONS),
292
+ notes: Object.keys(PERSONA_NOTES),
293
+ valueCitations: Object.keys(VALUE_CITATIONS),
294
+ citedDirections: Object.fromEntries(Object.entries(VALUE_CITATIONS).filter(([, c]) => c.direction).map(([k, c]) => [k, c.direction])),
295
+ normAnchors: Object.keys(NORM_ANCHORS),
296
+ measures: Object.keys(MEASURES),
297
+ };
298
+ //# sourceMappingURL=personas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personas.js","sourceRoot":"","sources":["../../../src/visual/provenance/personas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Provenance for the pointing and reading profiles in
3
+ * src/visual/cognitive-models.ts: the throughputs the profiles do not take
4
+ * from a measured rate, and the fixation model's text-independent per-word
5
+ * terms with the two reading-profile values they read. See
6
+ * ../model-provenance.ts for the statuses.
7
+ *
8
+ * WHY THESE. Motor and reading capacity are rate ratios,
9
+ * c = r_p / (r_p + r_ref) (demand-laws.ts, rateCapacity). A built-in persona's
10
+ * rate is registered with the persona (provenance/persona-rates.ts); a custom
11
+ * persona's comes from these profiles: a pointing profile's throughput, and a
12
+ * reading profile's per-word time base + (1 - phonological) x phonologicalMs +
13
+ * (normalSpan / visualSpan - 1) x spanMs, taken as a ratio to the neurotypical
14
+ * profile's. The readability audit (computeReadingDifficulty) reads the same
15
+ * terms. Most are not supported by the sources the code cites;
16
+ * research/stage-b-persona-rates.md compares them with the measured rates.
17
+ *
18
+ * Three throughputs are not here. Two are measured: the neurotypical profile
19
+ * points at law.rate.pointing.reference, and the tremor profile at the
20
+ * motion-impaired rate measured against its own controls
21
+ * (law.rate.pointing.motionImpaired / motionImpairedControls), rescaled to that
22
+ * reference. The ADHD profile points at the reference too: no throughput for
23
+ * adults with ADHD was found, so no measured difference
24
+ * (personaRate.cognitive-adhd.pointing says why).
25
+ *
26
+ * READ THROUGH param() by cognitive-models.ts, at the point of use (the
27
+ * profile tables are getters), so an override reaches every profile and
28
+ * tests/demand-laws.test.ts can perturb each id and see its output move.
29
+ *
30
+ * Citations named "per the source check" were not retrieved for this registry
31
+ * (the publisher pages were behind a bot wall); what is said about them is the
32
+ * finding of the 2026-10-22 source check, not a reading of the paper.
33
+ *
34
+ * @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
35
+ * @license MIT
36
+ */
37
+ import type { ProvenanceEntry } from "../model-provenance.js";
38
+ export declare const PROFILE_PROVENANCE: ProvenanceEntry[];
39
+ //# sourceMappingURL=profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../../src/visual/provenance/profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAU9D,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAiC/C,CAAC"}
@@ -0,0 +1,37 @@
1
+ const h = (id, value, source) => ({ id: `profile.${id}`, value, status: "hypothesis", source });
2
+ const SCALE = "a hand-set value on a 0-1 scale that no instrument defines";
3
+ const LEGGE_2007 = "Legge, G. E., Cheung, S.-H., Yu, D., Chung, S. T. L., Lee, H.-W. & Owens, D. P. (2007). The case for the visual span as a sensory bottleneck in reading. Journal of Vision 7(2):9, doi:10.1167/7.2.9";
4
+ const RAYNER_2009 = "Rayner, K. (2009). Eye movements and attention in reading, scene perception, and visual search. QJEP 62(8), 1457-1506, doi:10.1080/17470210902816461";
5
+ export const PROFILE_PROVENANCE = [
6
+ // ── The pointing throughput not taken from a measured rate (KNOWN_POINTING_PROFILES), bits/s ──
7
+ h("pointing.elderly.throughput", 3.2, "Fitts throughput of the elderly profile, bits/s. No measured ISO mouse throughput for adults 65+ was found, so the value has no source. Cited to Chaparro et al. (1999) and Ketcham et al. (2002). Chaparro, Bohan, Fernandez, Kattel & Choi (1999), Is the trackball a better input device for the older computer user? J Occup Rehabil 9(1), 33-43, abstract: \"older adults took longer to complete movements than younger adults and did so to a greater extent for large amplitude movements, but that their movements were less variable\"; no throughput. Ketcham et al. (2002) used a tablet, per the source check. An ISO 9241-9 mouse study of adults 65+ would set it."),
8
+ // Endpoint dispersion (sigma, rho): the hit-probability audit only. motorCapacity does not
9
+ // read it (ISO throughput already carries accuracy). Registered so the audit traces too.
10
+ h("pointing.neurotypical.sigma", 4, "Endpoint dispersion SD, px, of the neurotypical pointing profile, the same on both axes: the spread of selection endpoints the hit-probability audit (motorAccessibility, computeHitProbability) integrates a target over. Hand-set; no source in the code measured it. The SD of selection endpoints of the population on ISO 9241-9 targets (the SDx that ISO throughput turns into We = 4.133 SDx) would set it."),
11
+ h("pointing.neurotypical.rho", 0, "Correlation of the x and y endpoint spread of the neurotypical pointing profile, read by the hit-probability audit. Hand-set; no source measured it. The correlation of selection endpoints across axes in the same ISO 9241-9 data would set it."),
12
+ h("pointing.tremor.sigma", 12, "Endpoint dispersion SD, px, of the tremor pointing profile, the same on both axes: the spread of selection endpoints the hit-probability audit (motorAccessibility, computeHitProbability) integrates a target over. Hand-set; no source in the code measured it. It is also the low anchor the dispersion interpolation runs toward. The SD of selection endpoints of the population on ISO 9241-9 targets (the SDx that ISO throughput turns into We = 4.133 SDx) would set it."),
13
+ h("pointing.tremor.rho", 0.3, "Correlation of the x and y endpoint spread of the tremor pointing profile, read by the hit-probability audit. Hand-set; no source measured it. The correlation of selection endpoints across axes in the same ISO 9241-9 data would set it."),
14
+ h("pointing.elderly.sigma", 7.2, "Endpoint dispersion SD, px, of the elderly pointing profile, the same on both axes: the spread of selection endpoints the hit-probability audit (motorAccessibility, computeHitProbability) integrates a target over. Hand-set; no source in the code measured it. The SD of selection endpoints of the population on ISO 9241-9 targets (the SDx that ISO throughput turns into We = 4.133 SDx) would set it."),
15
+ h("pointing.elderly.rho", 0.1, "Correlation of the x and y endpoint spread of the elderly pointing profile, read by the hit-probability audit. Hand-set; no source measured it. The correlation of selection endpoints across axes in the same ISO 9241-9 data would set it."),
16
+ h("pointing.adhd.sigma", 5.5, "Endpoint dispersion SD, px, of the adhd pointing profile, the same on both axes: the spread of selection endpoints the hit-probability audit (motorAccessibility, computeHitProbability) integrates a target over. Hand-set; no source in the code measured it. The SD of selection endpoints of the population on ISO 9241-9 targets (the SDx that ISO throughput turns into We = 4.133 SDx) would set it."),
17
+ h("pointing.adhd.rho", 0, "Correlation of the x and y endpoint spread of the adhd pointing profile, read by the hit-probability audit. Hand-set; no source measured it. The correlation of selection endpoints across axes in the same ISO 9241-9 data would set it."),
18
+ h("pointing.precision.proceduralFluencyWeight", 0.6, "Weight of proceduralFluency in motorPrecision = 0.6 proceduralFluency + 0.4 patience, the axis getPointingProfile interpolates endpoint dispersion on for a persona with no named profile (from the neurotypical toward the tremor profile). Throughput no longer interpolates (Stage B); dispersion still does. Dispositions are not motor measures and no source maps them to endpoint spread; a regression of measured endpoint SD on the two dispositions would set it, or show it should go."),
19
+ h("pointing.precision.patienceWeight", 0.4, "Weight of patience in the same motorPrecision composite. The same regression would set it, or show it should go."),
20
+ // ── Fixation model, text-independent terms (computeReadingDifficulty) ──
21
+ h("fixation.baseMs", 250, `Base time per word, ms, before any deficit penalty. The code calls it a per-word time and cites Rayner (2009). ${RAYNER_2009}, Table 1 and text: "the average fixation duration in reading is on the order of 225–250 ms" (silent reading 225–250 ms). That is a duration per fixation, not per word: readers skip some words and refixate others. As a per-word time 250 ms is 240 wpm, close to Brysbaert's 238 wpm (252 ms per word), but the neurotypical profile's own phonological penalty adds 20 ms (222 wpm). A per-word silent reading time of fluent adults, or the fixation count per word times Rayner's duration, would set it.`),
22
+ h("fixation.phonologicalMs", 100, "Milliseconds added per word at phonological 0: the penalty is (1 - phonological) x 100. Cited to Perry, Zorzi & Ziegler (2019), which models reading accuracy in children and gives no milliseconds, per the source check. A regression of adult per-word reading time on a measured phonological decoding score would set it."),
23
+ h("fixation.spanMs", 80, `Milliseconds added per word per unit of (normalSpan / visualSpan - 1). No source in the code. The term is additive and not clamped, so a visualSpan above normalSpan subtracts time. ${LEGGE_2007}, abstract: "an increase in the visual span by one letter is associated with a 39% increase in reading speed" (RSVP), a multiplicative relation this term does not have. Legge et al.'s span-to-speed relation, converted to per-word time on the same visual-span scale, would set or replace it.`),
24
+ h("fixation.normalSpan", 7, `Visual span, in letters, of a normal reader, against which a profile's span is compared (the span penalty, and readingCapacityOf's visualSpan / 7). Cited to Legge et al. (2007), which gives about 9: ${LEGGE_2007}, Introduction: "Applying Bouma's factor to the upper bound on the size of the visual span of 36 ... we arrive at an estimate of 9, close to empirical estimates for the size of the visual span under optimal viewing conditions." Rayner (2009), Table 1, gives 7-9 letters, but as mean saccade length in silent reading, a different quantity. A trigram visual-span measurement of fluent adult readers at text size would set it.`),
25
+ // ── Reading-profile values the text-independent terms read (KNOWN_READING_PROFILES) ──
26
+ h("reading.neurotypical.phonological", 0.8, `Phonological decoding of the neurotypical reading profile, ${SCALE}. Cited to Rayner (2009) as a typical college reader; Rayner reports eye movements, not a decoding score. A phonological decoding test of fluent adults, mapped to this scale, would set it.`),
27
+ h("reading.neurotypical.visualSpan", 7, `Visual span, letters, of the neurotypical reading profile. Same value and evidence as profile.fixation.normalSpan: Legge et al. (2007) estimate about 9. A trigram visual-span measurement of fluent adult readers would set it.`),
28
+ h("reading.dyslexic.phonological", 0.35, `Phonological decoding of the dyslexic reading profile, ${SCALE}. Cited to Perry, Zorzi & Ziegler (2019), which models accuracy in children, per the source check. With visualSpan 4 it makes the profile 1.39x slower per word than the neurotypical one; adults with dyslexia measured 1.32x slower (law.rate.reading.dyslexiaAdults against law.rate.reading.dyslexiaControls, Callens et al. 2012). A phonological decoding test of adults with dyslexia, mapped to this scale, would set it.`),
29
+ h("reading.dyslexic.visualSpan", 4, `Visual span, letters, of the dyslexic reading profile. Cited to Perry, Zorzi & Ziegler (2019), per the source check a model of accuracy in children with no span measurement. A trigram visual-span measurement of adults with dyslexia would set it.`),
30
+ h("reading.lowVision.phonological", 0.75, `Phonological decoding of the low-vision reading profile, ${SCALE}. Low vision is not a decoding deficit; the measured effect is on rate. A decoding test of low-vision adults would set it, and law.rate.reading.lowVisionCentralLoss / lowVisionIntactFields (Legge et al. 1985, peak 25 and 130 wpm) would replace the rate it feeds.`),
31
+ h("reading.lowVision.visualSpan", 3, `Visual span, letters, of the low-vision reading profile. Cited to Legge et al. (2007), whose subjects had normal vision (Methods: "Five young adults (18 to 32 years of age) with corrected-to-normal vision participated"), the span varied by character size and contrast. A trigram visual-span measurement of low-vision readers at their magnified text size would set it.`),
32
+ h("reading.adhd.phonological", 0.75, `Phonological decoding of the ADHD reading profile, ${SCALE}. Cited to Dhar et al. (2010) as intact decoding (not retrieved). No measured silent-reading rate for adults with ADHD was found: adults with ADHD read more slowly, per the source check, but no numbers were retrieved. A silent-reading rate of adults with ADHD against matched controls would set the rate this feeds.`),
33
+ h("reading.adhd.visualSpan", 6, `Visual span, letters, of the ADHD reading profile. No source in the code for a reduced span in ADHD. A trigram visual-span measurement of adults with ADHD would set it.`),
34
+ h("reading.elderly.phonological", 0.65, `Phonological decoding of the elderly reading profile, ${SCALE}. Cited to Rayner et al. (2006) on aging and eye movements (not retrieved). No silent-reading norm for adults 65+ was found: Brysbaert (2019) reports that "several authors have reported lower silent reading rates in old adults than in young adults" and that "This drop, however, is not expected to occur before the age of 60–65 in healthy participants", with no rate. A silent-reading rate of adults 65+ against young adults would set the rate this feeds.`),
35
+ h("reading.elderly.visualSpan", 5, `Visual span, letters, of the elderly reading profile. No source in the code for the value. A trigram visual-span measurement of adults 65+ would set it.`),
36
+ ];
37
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../../src/visual/provenance/profiles.ts"],"names":[],"mappings":"AAsCA,MAAM,CAAC,GAAG,CAAC,EAAU,EAAE,KAAa,EAAE,MAAc,EAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AAEzI,MAAM,KAAK,GAAG,4DAA4D,CAAC;AAE3E,MAAM,UAAU,GAAG,sMAAsM,CAAC;AAE1N,MAAM,WAAW,GAAG,sJAAsJ,CAAC;AAE3K,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,iGAAiG;IACjG,CAAC,CAAC,6BAA6B,EAAE,GAAG,EAAE,mpBAAmpB,CAAC;IAC1rB,2FAA2F;IAC3F,yFAAyF;IACzF,CAAC,CAAC,6BAA6B,EAAE,CAAC,EAAE,qZAAqZ,CAAC;IAC1b,CAAC,CAAC,2BAA2B,EAAE,CAAC,EAAE,mPAAmP,CAAC;IACtR,CAAC,CAAC,uBAAuB,EAAE,EAAE,EAAE,mdAAmd,CAAC;IACnf,CAAC,CAAC,qBAAqB,EAAE,GAAG,EAAE,6OAA6O,CAAC;IAC5Q,CAAC,CAAC,wBAAwB,EAAE,GAAG,EAAE,gZAAgZ,CAAC;IAClb,CAAC,CAAC,sBAAsB,EAAE,GAAG,EAAE,8OAA8O,CAAC;IAC9Q,CAAC,CAAC,qBAAqB,EAAE,GAAG,EAAE,6YAA6Y,CAAC;IAC5a,CAAC,CAAC,mBAAmB,EAAE,CAAC,EAAE,2OAA2O,CAAC;IACtQ,CAAC,CAAC,4CAA4C,EAAE,GAAG,EAAE,meAAme,CAAC;IACzhB,CAAC,CAAC,mCAAmC,EAAE,GAAG,EAAE,kHAAkH,CAAC;IAE/J,0EAA0E;IAC1E,CAAC,CAAC,iBAAiB,EAAE,GAAG,EAAE,kHAAkH,WAAW,kfAAkf,CAAC;IAC1oB,CAAC,CAAC,yBAAyB,EAAE,GAAG,EAAE,gUAAgU,CAAC;IACnW,CAAC,CAAC,iBAAiB,EAAE,EAAE,EAAE,wLAAwL,UAAU,oSAAoS,CAAC;IAChgB,CAAC,CAAC,qBAAqB,EAAE,CAAC,EAAE,0MAA0M,UAAU,yaAAya,CAAC;IAE1pB,wFAAwF;IACxF,CAAC,CAAC,mCAAmC,EAAE,GAAG,EAAE,8DAA8D,KAAK,8LAA8L,CAAC;IAC9S,CAAC,CAAC,iCAAiC,EAAE,CAAC,EAAE,kOAAkO,CAAC;IAC3Q,CAAC,CAAC,+BAA+B,EAAE,IAAI,EAAE,0DAA0D,KAAK,maAAma,CAAC;IAC5gB,CAAC,CAAC,6BAA6B,EAAE,CAAC,EAAE,uPAAuP,CAAC;IAC5R,CAAC,CAAC,gCAAgC,EAAE,IAAI,EAAE,4DAA4D,KAAK,wQAAwQ,CAAC;IACpX,CAAC,CAAC,8BAA8B,EAAE,CAAC,EAAE,iXAAiX,CAAC;IACvZ,CAAC,CAAC,2BAA2B,EAAE,IAAI,EAAE,sDAAsD,KAAK,6TAA6T,CAAC;IAC9Z,CAAC,CAAC,yBAAyB,EAAE,CAAC,EAAE,0KAA0K,CAAC;IAC3M,CAAC,CAAC,8BAA8B,EAAE,IAAI,EAAE,yDAAyD,KAAK,ycAAyc,CAAC;IAChjB,CAAC,CAAC,4BAA4B,EAAE,CAAC,EAAE,0JAA0J,CAAC;CAC/L,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Provenance entries for the time-of-day model (src/cognitive/temporal.ts).
3
+ * See ../model-provenance.ts for the statuses.
4
+ *
5
+ * The model turns the persona's local hour and weekday into a circadian
6
+ * energy on 0-1, trait deltas (patience, working memory, curiosity,
7
+ * metacognitive planning) and an ambient distraction rate and duration. It
8
+ * cites Borbely's two-process model and Folkard & Tucker (2003) on the
9
+ * post-lunch dip for its shape; neither states these coefficients, and none
10
+ * was fitted, so every model entry is a `hypothesis`. The data that would set
11
+ * most of them: performance or alertness measured across the day (e.g. the
12
+ * psychomotor vigilance task, or task times on a fixed web task) in the
13
+ * population the persona stands for. The weekday and clock encodings are
14
+ * definitions.
15
+ *
16
+ * @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
17
+ * @license MIT
18
+ */
19
+ import type { ProvenanceEntry } from "../model-provenance.js";
20
+ export declare const TEMPORAL_PROVENANCE: ProvenanceEntry[];
21
+ //# sourceMappingURL=temporal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal.d.ts","sourceRoot":"","sources":["../../../src/visual/provenance/temporal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAW9D,eAAO,MAAM,mBAAmB,EAAE,eAAe,EAqDhD,CAAC"}
@@ -0,0 +1,56 @@
1
+ const h = (id, value, source) => ({ id: `temporal.${id}`, value, status: "hypothesis", source });
2
+ const d = (id, value, source) => ({ id: `temporal.${id}`, value, status: "definition", source });
3
+ const ALERTNESS = "Alertness or performance measured across the day (psychomotor vigilance, or task times on a fixed web task), in the population the persona stands for, would set it.";
4
+ const TRAIT_SHIFT = (trait) => `Hand-set shift in ${trait}. The trait's measure (provenance/personas.ts) taken at different hours and days, in the same people, would set it.`;
5
+ const INTERRUPTION = "Self-interruption and external-interruption logs of people working on a computer (when they occur and how long they last) would set it.";
6
+ export const TEMPORAL_PROVENANCE = [
7
+ d("hoursPerDay", 24, "Hours per day: the period of the circadian cosine, and the hour Intl reports for midnight in some locales."),
8
+ // ── Circadian energy ──
9
+ h("circadian.mean", 0.5, `Hand-set mean of the 24-hour energy cosine. ${ALERTNESS}`),
10
+ h("circadian.amplitude", 0.45, `Hand-set amplitude of the 24-hour energy cosine. ${ALERTNESS}`),
11
+ h("circadian.peakHour", 14, `Hand-set hour at which the 24-hour cosine peaks (the comment's "morning peak ~10-11am" comes from subtracting the dip). ${ALERTNESS}`),
12
+ h("circadian.dipHour", 14, `Hand-set hour at which the post-lunch dip is deepest. ${ALERTNESS}`),
13
+ h("circadian.dipAmplitude", 0.1, `Hand-set depth of the post-lunch dip. ${ALERTNESS}`),
14
+ h("circadian.dipPeriodHours", 6, `Hand-set period, hours, of the dip's cosine. The file's header calls the dip a secondary ~12-hour rhythm; the code's period is 6 hours. ${ALERTNESS}`),
15
+ h("lateNight.startHour", 23, `Hand-set hour from which late-night sleep pressure lowers energy and the description says "late night". ${ALERTNESS}`),
16
+ h("night.endHour", 6, `Hand-set hour at which the night ends: sleep pressure stops, the phase becomes morning and the late-night patience penalty lifts. ${ALERTNESS}`),
17
+ h("lateNight.energyPenalty", 0.2, `Hand-set energy lost to sleep pressure during the night. ${ALERTNESS}`),
18
+ h("energy.floor", 0.05, `Hand-set lowest energy. ${ALERTNESS}`),
19
+ // ── Phases and descriptions ──
20
+ h("phase.middayStart", 12, "Hand-set hour at which the morning phase ends. How people describe the parts of their day would set the phase edges."),
21
+ h("phase.eveningStart", 17, "Hand-set hour at which the midday phase ends and the evening begins. The same descriptions would set it."),
22
+ h("phase.nightStart", 21, "Hand-set hour at which the evening ends and the night begins. The same descriptions would set it."),
23
+ h("label.earlyMorningEnd", 9, "Hand-set hour before which a morning is described as easing into the day. The same descriptions would set it."),
24
+ h("label.lunchEnd", 14, "Hand-set hour before which midday is described as lunchtime. The same descriptions would set it."),
25
+ d("clockHalfDay", 12, "Hours in half a day, for the 12-hour clock in the description (am/pm, and 0 h shown as 12)."),
26
+ // ── Trait deltas ──
27
+ h("energy.typical", 0.7, "Hand-set energy at which the time of day shifts no trait (typical waking). The energy reading at which measured traits equal their daily mean would set it."),
28
+ h("patience.gain", 0.3, TRAIT_SHIFT("patience per unit of energy away from typical")),
29
+ h("friday.hour", 16, TRAIT_SHIFT("patience on Friday afternoons: the hour from which it applies")),
30
+ h("friday.patienceDrop", 0.1, TRAIT_SHIFT("patience on Friday afternoons")),
31
+ h("lateNight.patienceHour", 22, TRAIT_SHIFT("patience late at night: the hour from which it applies (one hour before the energy penalty)")),
32
+ h("lateNight.patienceDrop", 0.15, TRAIT_SHIFT("patience late at night")),
33
+ h("workingMemory.gain", 0.3, TRAIT_SHIFT("working memory per unit of energy away from typical")),
34
+ h("curiosity.weekendEvening", 0.12, TRAIT_SHIFT("curiosity on weekend evenings")),
35
+ h("curiosity.weekdayEveningDrop", 0.05, TRAIT_SHIFT("curiosity (a drop) on weekday evenings")),
36
+ h("curiosity.weekdayMorningDrop", 0.1, TRAIT_SHIFT("curiosity (a drop) on weekday mornings")),
37
+ h("metacognition.collapseEnergy", 0.4, TRAIT_SHIFT("metacognitive planning: the energy below which it collapses")),
38
+ h("metacognition.collapse", -0.2, TRAIT_SHIFT("metacognitive planning when energy is very low")),
39
+ h("metacognition.gain", 0.2, TRAIT_SHIFT("metacognitive planning per unit of energy away from typical")),
40
+ h("deltaClamp", 0.4, "Hand-set largest shift the time of day may make to any trait. The largest within-person daily swing of each trait's measure would set it."),
41
+ h("satisfaction.base", 0.7, "Hand-set satisfaction multiplier at zero energy, carried on TemporalModulators. Nothing in cbrowser applies it. Satisfaction ratings of the same interface at different hours would set it."),
42
+ h("satisfaction.gain", 0.4, "Hand-set rise in that multiplier per unit of energy. Nothing in cbrowser applies it. The same ratings would set it."),
43
+ // ── Ambient distraction ──
44
+ h("distraction.floor", 0.03, `Hand-set lowest chance per step of an ambient distraction. ${INTERRUPTION}`),
45
+ h("distraction.atZeroEnergy", 0.3, `Hand-set chance per step of a distraction at zero energy. ${INTERRUPTION}`),
46
+ h("distraction.energyGain", 0.3, `Hand-set fall in that chance per unit of energy. ${INTERRUPTION}`),
47
+ h("distraction.shortShare", 0.7, `Hand-set share of distractions that are short glances. ${INTERRUPTION}`),
48
+ h("distraction.shortMinMs", 3000, `Hand-set shortest short distraction, ms. ${INTERRUPTION}`),
49
+ h("distraction.shortSpanMs", 7000, `Hand-set spread of short distractions, ms (uniform). ${INTERRUPTION}`),
50
+ h("distraction.mediumCumShare", 0.95, `Hand-set cumulative share of distractions that are short or medium. ${INTERRUPTION}`),
51
+ h("distraction.mediumMinMs", 10000, `Hand-set shortest medium distraction, ms. ${INTERRUPTION}`),
52
+ h("distraction.mediumSpanMs", 20000, `Hand-set spread of medium distractions, ms. ${INTERRUPTION}`),
53
+ h("distraction.longMinMs", 30000, `Hand-set shortest long distraction, ms. ${INTERRUPTION}`),
54
+ h("distraction.longSpanMs", 30000, `Hand-set spread of long distractions, ms. ${INTERRUPTION}`),
55
+ ];
56
+ //# sourceMappingURL=temporal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal.js","sourceRoot":"","sources":["../../../src/visual/provenance/temporal.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,GAAG,CAAC,EAAU,EAAE,KAAa,EAAE,MAAc,EAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1I,MAAM,CAAC,GAAG,CAAC,EAAU,EAAE,KAAa,EAAE,MAAc,EAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AAE1I,MAAM,SAAS,GAAG,sKAAsK,CAAC;AACzL,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE,CACpC,qBAAqB,KAAK,qHAAqH,CAAC;AAClJ,MAAM,YAAY,GAChB,yIAAyI,CAAC;AAE5I,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,4GAA4G,CAAC;IAElI,yBAAyB;IACzB,CAAC,CAAC,gBAAgB,EAAE,GAAG,EAAE,+CAA+C,SAAS,EAAE,CAAC;IACpF,CAAC,CAAC,qBAAqB,EAAE,IAAI,EAAE,oDAAoD,SAAS,EAAE,CAAC;IAC/F,CAAC,CAAC,oBAAoB,EAAE,EAAE,EAAE,2HAA2H,SAAS,EAAE,CAAC;IACnK,CAAC,CAAC,mBAAmB,EAAE,EAAE,EAAE,yDAAyD,SAAS,EAAE,CAAC;IAChG,CAAC,CAAC,wBAAwB,EAAE,GAAG,EAAE,yCAAyC,SAAS,EAAE,CAAC;IACtF,CAAC,CAAC,0BAA0B,EAAE,CAAC,EAAE,2IAA2I,SAAS,EAAE,CAAC;IACxL,CAAC,CAAC,qBAAqB,EAAE,EAAE,EAAE,2GAA2G,SAAS,EAAE,CAAC;IACpJ,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE,qIAAqI,SAAS,EAAE,CAAC;IACvK,CAAC,CAAC,yBAAyB,EAAE,GAAG,EAAE,4DAA4D,SAAS,EAAE,CAAC;IAC1G,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,2BAA2B,SAAS,EAAE,CAAC;IAE/D,gCAAgC;IAChC,CAAC,CAAC,mBAAmB,EAAE,EAAE,EAAE,sHAAsH,CAAC;IAClJ,CAAC,CAAC,oBAAoB,EAAE,EAAE,EAAE,0GAA0G,CAAC;IACvI,CAAC,CAAC,kBAAkB,EAAE,EAAE,EAAE,mGAAmG,CAAC;IAC9H,CAAC,CAAC,uBAAuB,EAAE,CAAC,EAAE,+GAA+G,CAAC;IAC9I,CAAC,CAAC,gBAAgB,EAAE,EAAE,EAAE,kGAAkG,CAAC;IAC3H,CAAC,CAAC,cAAc,EAAE,EAAE,EAAE,6FAA6F,CAAC;IAEpH,qBAAqB;IACrB,CAAC,CAAC,gBAAgB,EAAE,GAAG,EAAE,6JAA6J,CAAC;IACvL,CAAC,CAAC,eAAe,EAAE,GAAG,EAAE,WAAW,CAAC,+CAA+C,CAAC,CAAC;IACrF,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,WAAW,CAAC,+DAA+D,CAAC,CAAC;IAClG,CAAC,CAAC,qBAAqB,EAAE,GAAG,EAAE,WAAW,CAAC,+BAA+B,CAAC,CAAC;IAC3E,CAAC,CAAC,wBAAwB,EAAE,EAAE,EAAE,WAAW,CAAC,6FAA6F,CAAC,CAAC;IAC3I,CAAC,CAAC,wBAAwB,EAAE,IAAI,EAAE,WAAW,CAAC,wBAAwB,CAAC,CAAC;IACxE,CAAC,CAAC,oBAAoB,EAAE,GAAG,EAAE,WAAW,CAAC,qDAAqD,CAAC,CAAC;IAChG,CAAC,CAAC,0BAA0B,EAAE,IAAI,EAAE,WAAW,CAAC,+BAA+B,CAAC,CAAC;IACjF,CAAC,CAAC,8BAA8B,EAAE,IAAI,EAAE,WAAW,CAAC,wCAAwC,CAAC,CAAC;IAC9F,CAAC,CAAC,8BAA8B,EAAE,GAAG,EAAE,WAAW,CAAC,wCAAwC,CAAC,CAAC;IAC7F,CAAC,CAAC,8BAA8B,EAAE,GAAG,EAAE,WAAW,CAAC,6DAA6D,CAAC,CAAC;IAClH,CAAC,CAAC,wBAAwB,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,gDAAgD,CAAC,CAAC;IAChG,CAAC,CAAC,oBAAoB,EAAE,GAAG,EAAE,WAAW,CAAC,6DAA6D,CAAC,CAAC;IACxG,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,2IAA2I,CAAC;IACjK,CAAC,CAAC,mBAAmB,EAAE,GAAG,EAAE,6LAA6L,CAAC;IAC1N,CAAC,CAAC,mBAAmB,EAAE,GAAG,EAAE,qHAAqH,CAAC;IAElJ,4BAA4B;IAC5B,CAAC,CAAC,mBAAmB,EAAE,IAAI,EAAE,8DAA8D,YAAY,EAAE,CAAC;IAC1G,CAAC,CAAC,0BAA0B,EAAE,GAAG,EAAE,6DAA6D,YAAY,EAAE,CAAC;IAC/G,CAAC,CAAC,wBAAwB,EAAE,GAAG,EAAE,oDAAoD,YAAY,EAAE,CAAC;IACpG,CAAC,CAAC,wBAAwB,EAAE,GAAG,EAAE,0DAA0D,YAAY,EAAE,CAAC;IAC1G,CAAC,CAAC,wBAAwB,EAAE,IAAI,EAAE,4CAA4C,YAAY,EAAE,CAAC;IAC7F,CAAC,CAAC,yBAAyB,EAAE,IAAI,EAAE,wDAAwD,YAAY,EAAE,CAAC;IAC1G,CAAC,CAAC,4BAA4B,EAAE,IAAI,EAAE,uEAAuE,YAAY,EAAE,CAAC;IAC5H,CAAC,CAAC,yBAAyB,EAAE,KAAK,EAAE,6CAA6C,YAAY,EAAE,CAAC;IAChG,CAAC,CAAC,0BAA0B,EAAE,KAAK,EAAE,+CAA+C,YAAY,EAAE,CAAC;IACnG,CAAC,CAAC,uBAAuB,EAAE,KAAK,EAAE,2CAA2C,YAAY,EAAE,CAAC;IAC5F,CAAC,CAAC,wBAAwB,EAAE,KAAK,EAAE,6CAA6C,YAAY,EAAE,CAAC;CAChG,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Provenance for the sliced Wasserstein image distance (distance-metrics.ts):
3
+ * the projection seed and the number of projections. See ../model-provenance.ts
4
+ * for the statuses.
5
+ *
6
+ * Read through param() at call time by computeWassersteinDistance and
7
+ * analyzePerceptualTransport, never at module load: perceptual-transport.ts
8
+ * imports distance-metrics.ts, and the registry imports perceptual-transport.ts
9
+ * through provenance/perceptual.ts, so a static import of the registry from
10
+ * either file would close an import cycle.
11
+ *
12
+ * Both are approximation choices with no claim about people or pages, hence
13
+ * `definition`. The sliced distance averages one-dimensional Wasserstein
14
+ * distances over random directions; the seed fixes which directions, and the
15
+ * count sets how closely the average approaches its expectation.
16
+ *
17
+ * @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
18
+ * @license MIT
19
+ */
20
+ import type { ProvenanceEntry } from "../model-provenance.js";
21
+ export declare const VISUAL_DISTANCE_PROVENANCE: ProvenanceEntry[];
22
+ //# sourceMappingURL=visual-distance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual-distance.d.ts","sourceRoot":"","sources":["../../../src/visual/provenance/visual-distance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,eAAO,MAAM,0BAA0B,EAAE,eAAe,EA+BvD,CAAC"}
@@ -0,0 +1,30 @@
1
+ export const VISUAL_DISTANCE_PROVENANCE = [
2
+ {
3
+ id: "visualDistance.projectionSeed",
4
+ value: 2654435769,
5
+ status: "definition",
6
+ source: "Seed of the generator (mulberry32) that draws the sliced Wasserstein projection directions, so the same two images always "
7
+ + "give the same distance. Until 2026-10-22 the directions came from unseeded Math.random() and identical inputs scored "
8
+ + "differently on every call (low-vision-magnified's perceptual score 74-78 on one screenshot). Any seed draws from the same "
9
+ + "uniform distribution of directions; this one (2^32 / golden ratio) carries no claim, and changing it moves a distance "
10
+ + "within the spread that numProjections allows.",
11
+ },
12
+ {
13
+ id: "visualDistance.numProjections",
14
+ value: 64,
15
+ status: "definition",
16
+ source: "Number of projection directions the visual regression distance averages over (computeWassersteinDistance's default; "
17
+ + "performWassersteinAnalysis and the smart-baseline comparison use it). An approximation budget, not a finding: more "
18
+ + "directions bring the sliced estimate closer to its expectation at linear cost. The verdict lines in "
19
+ + "VISUAL_DISTANCE_THRESHOLDS (regression.ts) were measured at 64.",
20
+ },
21
+ {
22
+ id: "visualDistance.perceptualNumProjections",
23
+ value: 32,
24
+ status: "definition",
25
+ source: "Number of projection directions analyzePerceptualTransport averages over when it measures what a persona's perceptual "
26
+ + "filter removes from a screenshot (the information-loss term of empathy_audit's perceptual score). Half the visual "
27
+ + "regression budget, set for speed; an approximation choice, not a finding.",
28
+ },
29
+ ];
30
+ //# sourceMappingURL=visual-distance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual-distance.js","sourceRoot":"","sources":["../../../src/visual/provenance/visual-distance.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D;QACE,EAAE,EAAE,+BAA+B;QACnC,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,YAAY;QACpB,MAAM,EACJ,4HAA4H;cAC1H,uHAAuH;cACvH,4HAA4H;cAC5H,wHAAwH;cACxH,+CAA+C;KACpD;IACD;QACE,EAAE,EAAE,+BAA+B;QACnC,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,YAAY;QACpB,MAAM,EACJ,sHAAsH;cACpH,qHAAqH;cACrH,sGAAsG;cACtG,iEAAiE;KACtE;IACD;QACE,EAAE,EAAE,yCAAyC;QAC7C,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,YAAY;QACpB,MAAM,EACJ,wHAAwH;cACtH,oHAAoH;cACpH,2EAA2E;KAChF;CACF,CAAC"}