cbrowser 20.2.2 → 21.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/analysis/accessibility-empathy.d.ts +29 -1
- package/dist/analysis/accessibility-empathy.d.ts.map +1 -1
- package/dist/analysis/accessibility-empathy.js +69 -35
- package/dist/analysis/accessibility-empathy.js.map +1 -1
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +11 -7
- package/dist/browser.js.map +1 -1
- package/dist/cif-score.d.ts +56 -5
- package/dist/cif-score.d.ts.map +1 -1
- package/dist/cif-score.js +595 -346
- package/dist/cif-score.js.map +1 -1
- package/dist/cli.js +10 -8
- package/dist/cli.js.map +1 -1
- package/dist/cognitive/default-traits.d.ts +14 -0
- package/dist/cognitive/default-traits.d.ts.map +1 -0
- package/dist/cognitive/default-traits.js +36 -0
- package/dist/cognitive/default-traits.js.map +1 -0
- package/dist/cognitive/emotions.d.ts.map +1 -1
- package/dist/cognitive/emotions.js +104 -174
- package/dist/cognitive/emotions.js.map +1 -1
- package/dist/cognitive/index.d.ts +28 -0
- package/dist/cognitive/index.d.ts.map +1 -1
- package/dist/cognitive/index.js +353 -287
- package/dist/cognitive/index.js.map +1 -1
- package/dist/cognitive/temporal.d.ts +0 -24
- package/dist/cognitive/temporal.d.ts.map +1 -1
- package/dist/cognitive/temporal.js +45 -35
- package/dist/cognitive/temporal.js.map +1 -1
- package/dist/data/ctc-reference-v2-2026-10-24.d.ts +16 -0
- package/dist/data/ctc-reference-v2-2026-10-24.d.ts.map +1 -0
- package/dist/data/ctc-reference-v2-2026-10-24.js +1004 -0
- package/dist/data/ctc-reference-v2-2026-10-24.js.map +1 -0
- package/dist/ideal-profiles-gap.d.ts +1 -0
- package/dist/ideal-profiles-gap.d.ts.map +1 -1
- package/dist/ideal-profiles-gap.js +9 -1
- package/dist/ideal-profiles-gap.js.map +1 -1
- package/dist/ideal-profiles.d.ts +8 -0
- package/dist/ideal-profiles.d.ts.map +1 -1
- package/dist/ideal-profiles.js +28 -24
- package/dist/ideal-profiles.js.map +1 -1
- package/dist/mcp-server-remote.d.ts.map +1 -1
- package/dist/mcp-server-remote.js +7 -8
- package/dist/mcp-server-remote.js.map +1 -1
- package/dist/mcp-tools/account-personas.d.ts.map +1 -1
- package/dist/mcp-tools/account-personas.js +3 -1
- package/dist/mcp-tools/account-personas.js.map +1 -1
- package/dist/mcp-tools/base/answer-provenance.d.ts +28 -0
- package/dist/mcp-tools/base/answer-provenance.d.ts.map +1 -0
- package/dist/mcp-tools/base/answer-provenance.js +32 -0
- package/dist/mcp-tools/base/answer-provenance.js.map +1 -0
- package/dist/mcp-tools/base/audit-tools.d.ts +0 -3
- package/dist/mcp-tools/base/audit-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/audit-tools.js +152 -84
- package/dist/mcp-tools/base/audit-tools.js.map +1 -1
- package/dist/mcp-tools/base/capture-tools.js +1 -1
- package/dist/mcp-tools/base/capture-tools.js.map +1 -1
- package/dist/mcp-tools/base/chain-values.d.ts +38 -0
- package/dist/mcp-tools/base/chain-values.d.ts.map +1 -0
- package/dist/mcp-tools/base/chain-values.js +85 -0
- package/dist/mcp-tools/base/chain-values.js.map +1 -0
- package/dist/mcp-tools/base/cognitive-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/cognitive-tools.js +126 -120
- package/dist/mcp-tools/base/cognitive-tools.js.map +1 -1
- package/dist/mcp-tools/base/gif-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/gif-tools.js +23 -5
- package/dist/mcp-tools/base/gif-tools.js.map +1 -1
- package/dist/mcp-tools/base/persona-comparison-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/persona-comparison-tools.js +229 -172
- package/dist/mcp-tools/base/persona-comparison-tools.js.map +1 -1
- package/dist/mcp-tools/base/site-familiarity.d.ts +31 -0
- package/dist/mcp-tools/base/site-familiarity.d.ts.map +1 -0
- package/dist/mcp-tools/base/site-familiarity.js +30 -0
- package/dist/mcp-tools/base/site-familiarity.js.map +1 -0
- package/dist/mcp-tools/base/site-knowledge-tools.js +1 -1
- package/dist/mcp-tools/base/site-knowledge-tools.js.map +1 -1
- package/dist/mcp-tools/base/story-narrative.d.ts +50 -0
- package/dist/mcp-tools/base/story-narrative.d.ts.map +1 -0
- package/dist/mcp-tools/base/story-narrative.js +88 -0
- package/dist/mcp-tools/base/story-narrative.js.map +1 -0
- package/dist/mcp-tools/base/values-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/values-tools.js +19 -5
- package/dist/mcp-tools/base/values-tools.js.map +1 -1
- package/dist/mcp-tools/base/visual-testing-tools.d.ts +5 -5
- package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/visual-testing-tools.js +38 -11
- package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -1
- package/dist/mcp-tools/persona-creation-tools.js +6 -6
- package/dist/mcp-tools/persona-creation-tools.js.map +1 -1
- package/dist/mcp-tools/persona-lifecycle-tools.d.ts.map +1 -1
- package/dist/mcp-tools/persona-lifecycle-tools.js +5 -1
- package/dist/mcp-tools/persona-lifecycle-tools.js.map +1 -1
- package/dist/mcp-tools/tier-gate.js +1 -1
- package/dist/mcp-tools/tool-result-saver.d.ts +7 -0
- package/dist/mcp-tools/tool-result-saver.d.ts.map +1 -1
- package/dist/mcp-tools/tool-result-saver.js +11 -0
- package/dist/mcp-tools/tool-result-saver.js.map +1 -1
- package/dist/mcp-tools/trait-provenance.d.ts +109 -0
- package/dist/mcp-tools/trait-provenance.d.ts.map +1 -0
- package/dist/mcp-tools/trait-provenance.js +187 -0
- package/dist/mcp-tools/trait-provenance.js.map +1 -0
- package/dist/mcp-tools/ui-resources.d.ts +6 -7
- package/dist/mcp-tools/ui-resources.d.ts.map +1 -1
- package/dist/mcp-tools/ui-resources.js +162 -12
- package/dist/mcp-tools/ui-resources.js.map +1 -1
- package/dist/mcp-tools/widget-kit.d.ts +129 -3
- package/dist/mcp-tools/widget-kit.d.ts.map +1 -1
- package/dist/mcp-tools/widget-kit.js +507 -28
- package/dist/mcp-tools/widget-kit.js.map +1 -1
- package/dist/performance/metrics.d.ts.map +1 -1
- package/dist/performance/metrics.js +4 -1
- package/dist/performance/metrics.js.map +1 -1
- package/dist/persona-questionnaire.js +1 -1
- package/dist/persona-questionnaire.js.map +1 -1
- package/dist/personas.d.ts.map +1 -1
- package/dist/personas.js +133 -82
- package/dist/personas.js.map +1 -1
- package/dist/recording/engine.d.ts.map +1 -1
- package/dist/recording/engine.js +5 -2
- package/dist/recording/engine.js.map +1 -1
- package/dist/recording/saliency-overlay.d.ts +8 -3
- package/dist/recording/saliency-overlay.d.ts.map +1 -1
- package/dist/recording/saliency-overlay.js +14 -5
- package/dist/recording/saliency-overlay.js.map +1 -1
- package/dist/recording/types.js +1 -1
- package/dist/testing/nl-test-suite.d.ts.map +1 -1
- package/dist/testing/nl-test-suite.js +2 -1
- package/dist/testing/nl-test-suite.js.map +1 -1
- package/dist/trait-reference.d.ts +19 -2
- package/dist/trait-reference.d.ts.map +1 -1
- package/dist/trait-reference.js +19 -2
- package/dist/trait-reference.js.map +1 -1
- package/dist/types.d.ts +32 -21
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +62 -52
- package/dist/types.js.map +1 -1
- package/dist/values/persona-completeness.js +1 -1
- package/dist/values/persona-completeness.js.map +1 -1
- package/dist/visual/ab-comparison.d.ts.map +1 -1
- package/dist/visual/ab-comparison.js +4 -1
- package/dist/visual/ab-comparison.js.map +1 -1
- package/dist/visual/attention-quality.d.ts +1 -1
- package/dist/visual/attention-quality.js +1 -1
- package/dist/visual/attention-transport.d.ts +74 -10
- package/dist/visual/attention-transport.d.ts.map +1 -1
- package/dist/visual/attention-transport.js +353 -193
- package/dist/visual/attention-transport.js.map +1 -1
- package/dist/visual/cognitive-models.d.ts +77 -55
- package/dist/visual/cognitive-models.d.ts.map +1 -1
- package/dist/visual/cognitive-models.js +231 -104
- package/dist/visual/cognitive-models.js.map +1 -1
- package/dist/visual/cognitive-transport-chain.d.ts +328 -30
- package/dist/visual/cognitive-transport-chain.d.ts.map +1 -1
- package/dist/visual/cognitive-transport-chain.js +576 -353
- package/dist/visual/cognitive-transport-chain.js.map +1 -1
- package/dist/visual/cognitive-transport.d.ts +446 -13
- package/dist/visual/cognitive-transport.d.ts.map +1 -1
- package/dist/visual/cognitive-transport.js +1085 -245
- package/dist/visual/cognitive-transport.js.map +1 -1
- package/dist/visual/cross-browser.d.ts.map +1 -1
- package/dist/visual/cross-browser.js +8 -6
- package/dist/visual/cross-browser.js.map +1 -1
- package/dist/visual/ctc-bands.d.ts +91 -0
- package/dist/visual/ctc-bands.d.ts.map +1 -0
- package/dist/visual/ctc-bands.js +117 -0
- package/dist/visual/ctc-bands.js.map +1 -0
- package/dist/visual/ctc-reference.d.ts +287 -0
- package/dist/visual/ctc-reference.d.ts.map +1 -0
- package/dist/visual/ctc-reference.js +376 -0
- package/dist/visual/ctc-reference.js.map +1 -0
- package/dist/visual/demand-laws.d.ts +145 -0
- package/dist/visual/demand-laws.d.ts.map +1 -0
- package/dist/visual/demand-laws.js +220 -0
- package/dist/visual/demand-laws.js.map +1 -0
- package/dist/visual/distance-metrics.d.ts +23 -1
- package/dist/visual/distance-metrics.d.ts.map +1 -1
- package/dist/visual/distance-metrics.js +49 -18
- package/dist/visual/distance-metrics.js.map +1 -1
- package/dist/visual/dro-bound.d.ts +220 -0
- package/dist/visual/dro-bound.d.ts.map +1 -0
- package/dist/visual/dro-bound.js +341 -0
- package/dist/visual/dro-bound.js.map +1 -0
- package/dist/visual/exact-w1.d.ts +60 -0
- package/dist/visual/exact-w1.d.ts.map +1 -0
- package/dist/visual/exact-w1.js +247 -0
- package/dist/visual/exact-w1.js.map +1 -0
- package/dist/visual/human-input.d.ts.map +1 -1
- package/dist/visual/human-input.js +45 -41
- package/dist/visual/human-input.js.map +1 -1
- package/dist/visual/index.d.ts +2 -0
- package/dist/visual/index.d.ts.map +1 -1
- package/dist/visual/index.js +2 -0
- package/dist/visual/index.js.map +1 -1
- package/dist/visual/law-times-report.d.ts +49 -0
- package/dist/visual/law-times-report.d.ts.map +1 -0
- package/dist/visual/law-times-report.js +38 -0
- package/dist/visual/law-times-report.js.map +1 -0
- package/dist/visual/model-provenance.d.ts +151 -0
- package/dist/visual/model-provenance.d.ts.map +1 -0
- package/dist/visual/model-provenance.js +334 -0
- package/dist/visual/model-provenance.js.map +1 -0
- package/dist/visual/normal-cdf.d.ts +14 -0
- package/dist/visual/normal-cdf.d.ts.map +1 -0
- package/dist/visual/normal-cdf.js +26 -0
- package/dist/visual/normal-cdf.js.map +1 -0
- package/dist/visual/perceptual-transport.d.ts +28 -4
- package/dist/visual/perceptual-transport.d.ts.map +1 -1
- package/dist/visual/perceptual-transport.js +66 -32
- package/dist/visual/perceptual-transport.js.map +1 -1
- package/dist/visual/provenance/attention.d.ts +55 -0
- package/dist/visual/provenance/attention.d.ts.map +1 -0
- package/dist/visual/provenance/attention.js +188 -0
- package/dist/visual/provenance/attention.js.map +1 -0
- package/dist/visual/provenance/chain.d.ts +41 -0
- package/dist/visual/provenance/chain.d.ts.map +1 -0
- package/dist/visual/provenance/chain.js +66 -0
- package/dist/visual/provenance/chain.js.map +1 -0
- package/dist/visual/provenance/cif.d.ts +42 -0
- package/dist/visual/provenance/cif.d.ts.map +1 -0
- package/dist/visual/provenance/cif.js +116 -0
- package/dist/visual/provenance/cif.js.map +1 -0
- package/dist/visual/provenance/ctc-reference.d.ts +36 -0
- package/dist/visual/provenance/ctc-reference.d.ts.map +1 -0
- package/dist/visual/provenance/ctc-reference.js +96 -0
- package/dist/visual/provenance/ctc-reference.js.map +1 -0
- package/dist/visual/provenance/distance.d.ts +10 -0
- package/dist/visual/provenance/distance.d.ts.map +1 -0
- package/dist/visual/provenance/distance.js +72 -0
- package/dist/visual/provenance/distance.js.map +1 -0
- package/dist/visual/provenance/dro.d.ts +10 -0
- package/dist/visual/provenance/dro.d.ts.map +1 -0
- package/dist/visual/provenance/dro.js +2 -0
- package/dist/visual/provenance/dro.js.map +1 -0
- package/dist/visual/provenance/emotion.d.ts +26 -0
- package/dist/visual/provenance/emotion.d.ts.map +1 -0
- package/dist/visual/provenance/emotion.js +99 -0
- package/dist/visual/provenance/emotion.js.map +1 -0
- package/dist/visual/provenance/human-input.d.ts +19 -0
- package/dist/visual/provenance/human-input.d.ts.map +1 -0
- package/dist/visual/provenance/human-input.js +84 -0
- package/dist/visual/provenance/human-input.js.map +1 -0
- package/dist/visual/provenance/journey-group.d.ts +15 -0
- package/dist/visual/provenance/journey-group.d.ts.map +1 -0
- package/dist/visual/provenance/journey-group.js +15 -0
- package/dist/visual/provenance/journey-group.js.map +1 -0
- package/dist/visual/provenance/journey-mcp.d.ts +24 -0
- package/dist/visual/provenance/journey-mcp.d.ts.map +1 -0
- package/dist/visual/provenance/journey-mcp.js +54 -0
- package/dist/visual/provenance/journey-mcp.js.map +1 -0
- package/dist/visual/provenance/journey.d.ts +34 -0
- package/dist/visual/provenance/journey.d.ts.map +1 -0
- package/dist/visual/provenance/journey.js +184 -0
- package/dist/visual/provenance/journey.js.map +1 -0
- package/dist/visual/provenance/laws.d.ts +38 -0
- package/dist/visual/provenance/laws.d.ts.map +1 -0
- package/dist/visual/provenance/laws.js +40 -0
- package/dist/visual/provenance/laws.js.map +1 -0
- package/dist/visual/provenance/page-metrics.d.ts +42 -0
- package/dist/visual/provenance/page-metrics.d.ts.map +1 -0
- package/dist/visual/provenance/page-metrics.js +79 -0
- package/dist/visual/provenance/page-metrics.js.map +1 -0
- package/dist/visual/provenance/perceptual.d.ts +63 -0
- package/dist/visual/provenance/perceptual.d.ts.map +1 -0
- package/dist/visual/provenance/perceptual.js +115 -0
- package/dist/visual/provenance/perceptual.js.map +1 -0
- package/dist/visual/provenance/persona-rates.d.ts +84 -0
- package/dist/visual/provenance/persona-rates.d.ts.map +1 -0
- package/dist/visual/provenance/persona-rates.js +112 -0
- package/dist/visual/provenance/persona-rates.js.map +1 -0
- package/dist/visual/provenance/personas.d.ts +122 -0
- package/dist/visual/provenance/personas.d.ts.map +1 -0
- package/dist/visual/provenance/personas.js +298 -0
- package/dist/visual/provenance/personas.js.map +1 -0
- package/dist/visual/provenance/profiles.d.ts +39 -0
- package/dist/visual/provenance/profiles.d.ts.map +1 -0
- package/dist/visual/provenance/profiles.js +37 -0
- package/dist/visual/provenance/profiles.js.map +1 -0
- package/dist/visual/provenance/temporal.d.ts +21 -0
- package/dist/visual/provenance/temporal.d.ts.map +1 -0
- package/dist/visual/provenance/temporal.js +56 -0
- package/dist/visual/provenance/temporal.js.map +1 -0
- package/dist/visual/provenance/visual-distance.d.ts +22 -0
- package/dist/visual/provenance/visual-distance.d.ts.map +1 -0
- package/dist/visual/provenance/visual-distance.js +30 -0
- package/dist/visual/provenance/visual-distance.js.map +1 -0
- package/dist/visual/regression.d.ts.map +1 -1
- package/dist/visual/regression.js +14 -9
- package/dist/visual/regression.js.map +1 -1
- package/dist/visual/responsive.d.ts.map +1 -1
- package/dist/visual/responsive.js +4 -1
- package/dist/visual/responsive.js.map +1 -1
- package/dist/visual/scope-prose.js +2 -2
- package/dist/visual/scope-prose.js.map +1 -1
- package/dist/visual/seeded-random.d.ts +16 -0
- package/dist/visual/seeded-random.d.ts.map +1 -0
- package/dist/visual/seeded-random.js +25 -0
- package/dist/visual/seeded-random.js.map +1 -0
- package/dist/visual/stored-accessibility-traits.d.ts +27 -0
- package/dist/visual/stored-accessibility-traits.d.ts.map +1 -0
- package/dist/visual/stored-accessibility-traits.js +35 -0
- package/dist/visual/stored-accessibility-traits.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
const h = (id, value, source) => ({ id: `journey.${id}`, value, status: "hypothesis", source });
|
|
2
|
+
const d = (id, value, source) => ({ id: `journey.${id}`, value, status: "definition", source });
|
|
3
|
+
const p = (id, value, source) => ({ id: `journey.${id}`, value, status: "published", source });
|
|
4
|
+
// Read for this registry: the paper, pages 398-399, Figure 1 ("The Operators of
|
|
5
|
+
// the Keystroke Model"). Every K value in it is a time per keystroke "as
|
|
6
|
+
// determined by standard one-minute typing tests" (section 3.1), measured on
|
|
7
|
+
// 1980 keyboards; the journey's use of them is its own claim.
|
|
8
|
+
const KLM_1980 = "Card, S. K., Moran, T. P. & Newell, A. (1980). The keystroke-level model for user performance time with interactive systems. Communications of the ACM 23(7), 396-410, Figure 1";
|
|
9
|
+
// What would set an abandonment limit: time-to-abandon and the state reported
|
|
10
|
+
// in the step before abandoning, for people of measured trait level working
|
|
11
|
+
// through tasks with scripted failures.
|
|
12
|
+
const ABANDON = (what) => `Hand-set ${what}. The level reached in the step before people abandon a task, for people of measured trait level working through scripted failures, would set it.`;
|
|
13
|
+
const BAND = (side, trait, value) => h(`band.${side}.${trait}`, value, `Hand-set ${side === "low" ? "upper" : "lower"} edge of the ${side} band of ${trait} (${side === "low" ? "below" : "above"} ${value}), where the journey switches to its ${side}-${trait} rule or label. The scale has no anchor until ${trait}'s measure (provenance/personas.ts) is mapped onto it; the percentile of that measure where the behaviour changes would set it.`);
|
|
14
|
+
const PAGE_WAIT = (what) => `Hand-set ${what}. The distribution of the time it takes across a reference set of real pages would set it (a high percentile, so a slow page is not mistaken for a broken one).`;
|
|
15
|
+
const SHOWN = (what) => `Hand-set ${what}. How often the goal-relevant item falls beyond the cut, across journeys on a reference set of real pages, would set it.`;
|
|
16
|
+
export const JOURNEY_PROVENANCE = [
|
|
17
|
+
// ── Persona defaults ──
|
|
18
|
+
h("defaultTrait", 0.5, "Hand-set value of a trait a persona does not set (the scale's midpoint), used when a caller overrides some traits and wherever a missing trait falls back. The population median on the trait's measure (provenance/personas.ts) would place it once the 0-1 scale is anchored to that measure."),
|
|
19
|
+
h("defaultTrait.changeBlindness", 0.3, "Hand-set default changeBlindness when a caller overrides some traits, below the midpoint the other traits default to. Detection rates in a flicker change-detection task, mapped onto the trait's scale, would set it."),
|
|
20
|
+
h("initialConfidence", 0.5, "Hand-set confidence a journey starts with. The autonomous journey never changes it; cognitive_journey_update_state moves it. A pre-task confidence rating would set it."),
|
|
21
|
+
h("input.motorPrecisionFloor", 0.1, "Hand-set lowest motor precision handed to the human-input timing (proceduralFluency x motorControl, clamped). Click-error rates of the most motor-impaired users, mapped onto the scale, would set it."),
|
|
22
|
+
// ── Trait bands ──
|
|
23
|
+
BAND("low", "comprehension", 0.4), BAND("high", "comprehension", 0.7),
|
|
24
|
+
BAND("low", "patience", 0.3), BAND("high", "patience", 0.7),
|
|
25
|
+
BAND("low", "persistence", 0.3), BAND("high", "persistence", 0.7),
|
|
26
|
+
BAND("low", "riskTolerance", 0.3), BAND("high", "riskTolerance", 0.7),
|
|
27
|
+
BAND("low", "readingTendency", 0.3), BAND("high", "readingTendency", 0.7),
|
|
28
|
+
// ── Abandonment thresholds ──
|
|
29
|
+
h("abandon.patienceFloor", 0.1, ABANDON("patience below which the persona gives up (also the floor cognitive_journey_update_state applies)")),
|
|
30
|
+
h("abandon.confusionLimit", 0.9, ABANDON("confusion above which a persona of ordinary comprehension gives up")),
|
|
31
|
+
h("abandon.confusionLimit.lowComprehension", 0.75, ABANDON("confusion above which a low-comprehension persona gives up")),
|
|
32
|
+
h("abandon.frustrationLimit", 0.95, ABANDON("frustration above which a persona of ordinary patience gives up")),
|
|
33
|
+
h("abandon.frustrationLimit.lowPatience", 0.8, ABANDON("frustration above which an impatient persona gives up")),
|
|
34
|
+
h("abandon.noProgressSteps", 15, ABANDON("number of steps without progress after which a persona of ordinary persistence gives up")),
|
|
35
|
+
h("abandon.noProgressSteps.highPersistence", 20, ABANDON("number of steps without progress after which a persistent persona gives up")),
|
|
36
|
+
h("abandon.timeLimitSeconds", 120, ABANDON("time limit, in seconds, of a persona of ordinary patience")),
|
|
37
|
+
h("abandon.timeLimitSeconds.highPatience", 180, ABANDON("time limit, in seconds, of a patient persona")),
|
|
38
|
+
h("abandon.timeLimitSeconds.lowPatience", 60, ABANDON("time limit, in seconds, of an impatient persona")),
|
|
39
|
+
h("abandon.fatigueLimit", 0.85, ABANDON("decision fatigue above which a persona of ordinary persistence gives up")),
|
|
40
|
+
h("abandon.fatigueLimit.highPersistence", 0.95, ABANDON("decision fatigue above which a persistent persona gives up")),
|
|
41
|
+
h("abandon.fatigueLimit.lowPersistence", 0.7, ABANDON("decision fatigue above which a persona of low persistence gives up")),
|
|
42
|
+
h("emotionalAbandon.anxiety", 0.85, ABANDON("anxiety above which, with high frustration and low patience, the persona gives up from stress")),
|
|
43
|
+
h("emotionalAbandon.frustration", 0.8, ABANDON("frustration above which, with high anxiety and low patience, the persona gives up from stress")),
|
|
44
|
+
h("emotionalAbandon.patience", 0.3, ABANDON("patience below which high anxiety and frustration make the persona give up")),
|
|
45
|
+
h("emotionalAbandon.modifier", 1.3, ABANDON("emotional abandonment modifier (the multiplier on the patience floor) above which a raised floor ends the journey")),
|
|
46
|
+
// ── The persona's reported state becomes triggers ──
|
|
47
|
+
h("signal.changeThreshold", 0.05, "Hand-set change in the model's reported confusion or frustration below which the journey treats it as no change. The smallest change in self-reported confusion people make deliberately would set it."),
|
|
48
|
+
h("severity.error", 1.2, "Hand-set severity of the error trigger when the model reports an error message (1 = the trigger table's effect). The size of self-reported reactions to a shown error relative to a silent failure would set it."),
|
|
49
|
+
h("severity.actionThrew", 1.3, "Hand-set severity of the error trigger when the action itself throws. The same reaction-size comparison would set it."),
|
|
50
|
+
h("severity.signalFloor", 0.5, "Hand-set smallest severity of a confusion-onset or setback trigger fired by the model's reported increase. The relation between reported change and the next step's self-report would set it, with the gain."),
|
|
51
|
+
h("severity.signalGain", 2, "Hand-set gain from the model's reported increase in confusion or frustration to the trigger's severity (severity = max(floor, delta x gain)). The same relation would set it."),
|
|
52
|
+
h("severity.clarity", 0.8, "Hand-set severity of the clarity trigger when the model reports less confusion. The size of self-reported relief when a confusing step resolves would set it."),
|
|
53
|
+
h("severity.timePressure", 0.8, "Hand-set severity of the time-pressure trigger. The rise in self-reported anxiety as a time limit nears would set it."),
|
|
54
|
+
h("severity.success", 0.8, "Hand-set severity of the success trigger after an action that succeeds without advancing the goal. Self-reported satisfaction after a neutral success would set it."),
|
|
55
|
+
h("severity.progress", 1.2, "Hand-set severity of the progress trigger after an action that advances the goal. Self-reported satisfaction after progress relative to a neutral success would set it."),
|
|
56
|
+
h("timePressure.patience", 0.3, "Hand-set patience below which a step with no other trigger fires time pressure. The patience level at which people start to report hurrying would set it."),
|
|
57
|
+
// ── Evidence-gated goal progress ──
|
|
58
|
+
h("progress.inPageCap", 0.05, "Hand-set most goal progress the journey accepts from the model in one step without a navigation. The share of task completion people credit to an in-page action, against observed completion, would set it."),
|
|
59
|
+
h("progress.madeLevel", 0.1, "Hand-set goal progress above which the journey counts progress as made (the progress trigger, and the no-progress rule). The completion level observers agree is real progress would set it."),
|
|
60
|
+
h("fallback.progress", 0.9, "Hand-set goal progress at or above which a final \"found it\" thought counts as achieving the goal. The share of such claims that observers verify, by progress level, would set it."),
|
|
61
|
+
// ── Decision fatigue ──
|
|
62
|
+
h("fatigue.gain", 0.05, "Hand-set decision fatigue per decision, 0.05 x ln(options + 1), after Baumeister's ego-depletion account, which gives no such function. Default-taking or choice deferral as a function of the number and size of earlier decisions in a session would set it."),
|
|
63
|
+
h("fatigue.options.fill", 5, "Hand-set number of options a form fill is counted as considering. A count of the options people weigh on a form field (from think-aloud protocols) would set it."),
|
|
64
|
+
h("fatigue.options.navigate", 8, "Hand-set number of options a navigation or search is counted as considering. The number of links people weigh before choosing (eye-tracked fixations on candidates) would set it."),
|
|
65
|
+
h("fatigue.options.other", 3, "Hand-set number of options any other action (click, scroll) is counted as considering. The same eye-tracked count would set it."),
|
|
66
|
+
h("fatigue.defaultsLevel", 0.7, "Hand-set fatigue above which the persona starts choosing defaults. The fatigue level at which default-taking rises would set it."),
|
|
67
|
+
// ── Dual process ──
|
|
68
|
+
h("dualProcess.system1ErrorLimit", 3, "Hand-set number of fast-mode errors that forces slow, deliberate mode. The autonomous journey never counts these errors, so only a caller of shouldSwitchToSystem2 reaches it. Error runs before people slow down (response-time change after errors) would set it."),
|
|
69
|
+
h("dualProcess.returnConfusion", 0.2, "Hand-set confusion below which, after a success, the persona returns to fast mode. The confusion level at which response times recover would set it."),
|
|
70
|
+
h("dualProcess.switchThreshold", 0.6, "Hand-set confusion above which a persona of ordinary comprehension switches to slow mode. Response-time slowing against self-reported confusion would set it."),
|
|
71
|
+
h("dualProcess.switchThreshold.lowComprehension", 0.4, "Hand-set confusion above which a low-comprehension persona switches to slow mode. The same slowing curve for low-comprehension users would set it."),
|
|
72
|
+
// ── Tunnel vision under load ──
|
|
73
|
+
h("scan.severeLoad", 0.8, "Hand-set cognitive load (mean of confusion and frustration) above which the scanned width falls to its severe value. Eye-tracked horizontal fixation spread against measured load would set the three cut points and widths."),
|
|
74
|
+
h("scan.highLoad", 0.7, "Hand-set load above which the scanned width falls to its high-load value. The same fixation-spread curve would set it."),
|
|
75
|
+
h("scan.moderateLoad", 0.5, "Hand-set load above which the scanned width narrows. The same fixation-spread curve would set it."),
|
|
76
|
+
h("scan.severeWidth", 0.2, "Hand-set share of the viewport width scanned under severe load. The same fixation-spread curve would set it."),
|
|
77
|
+
h("scan.highWidth", 0.3, "Hand-set share of the viewport width scanned under high load. The same fixation-spread curve would set it."),
|
|
78
|
+
h("scan.moderateWidth", 0.6, "Hand-set share of the viewport width scanned under moderate load. The same fixation-spread curve would set it."),
|
|
79
|
+
d("percentScale", 100, "Percent per unit: the scanned width is reported as a percentage of the viewport."),
|
|
80
|
+
// ── Stress narrows the peripheral field ──
|
|
81
|
+
h("peripheral.severeArousal", 0.8, "Hand-set arousal (the larger of frustration and confusion) above which the visual field narrows most, after the Yerkes-Dodson and Easterbrook accounts, which give no field sizes. Useful-field-of-view tests under induced stress would set the cut points and factors."),
|
|
82
|
+
h("peripheral.moderateArousal", 0.6, "Hand-set arousal above which the field narrows moderately. The same field-of-view measurements would set it."),
|
|
83
|
+
h("peripheral.slightArousal", 0.4, "Hand-set arousal above which the field narrows slightly. The same field-of-view measurements would set it."),
|
|
84
|
+
h("peripheral.severeWidth", 0.3, "Hand-set horizontal field factor under severe arousal. The same field-of-view measurements would set it."),
|
|
85
|
+
h("peripheral.severeHeight", 0.4, "Hand-set vertical field factor under severe arousal. The same field-of-view measurements would set it."),
|
|
86
|
+
h("peripheral.moderateWidth", 0.5, "Hand-set horizontal field factor under moderate arousal. The same field-of-view measurements would set it."),
|
|
87
|
+
h("peripheral.moderateHeight", 0.6, "Hand-set vertical field factor under moderate arousal. The same field-of-view measurements would set it."),
|
|
88
|
+
h("peripheral.slightWidth", 0.75, "Hand-set horizontal field factor under slight arousal. The same field-of-view measurements would set it."),
|
|
89
|
+
h("peripheral.slightHeight", 0.8, "Hand-set vertical field factor under slight arousal. The same field-of-view measurements would set it."),
|
|
90
|
+
// ── Banner blindness ──
|
|
91
|
+
h("habituation.exposures", 3, "Hand-set number of sightings of a UI pattern (cookie banner, newsletter prompt) after which a persona of ordinary comprehension ignores it. Fixation rates on repeated banner-like elements across page views would set it."),
|
|
92
|
+
h("habituation.exposures.highComprehension", 5, "Hand-set sightings before a high-comprehension persona ignores a pattern. The same fixation-rate curve, by user expertise, would set it."),
|
|
93
|
+
h("habituation.exposures.lowComprehension", 2, "Hand-set sightings before a low-comprehension persona ignores a pattern. The same fixation-rate curve would set it."),
|
|
94
|
+
h("habituation.comprehensionBase", 0.5, "Hand-set share of the blindness threshold a persona with no comprehension keeps, in calculateHabituationVisibility. The same fixation-rate curve, by expertise, would set it."),
|
|
95
|
+
h("habituation.comprehensionGain", 0.5, "Hand-set extra share of the blindness threshold per unit of comprehension. The same fixation-rate curve would set it."),
|
|
96
|
+
h("habituation.nearBlindVisibility", 0.1, "Hand-set visibility of a pattern seen as often as the threshold. The fixation rate on a banner after habituation would set it."),
|
|
97
|
+
h("habituation.visibilityRange", 0.9, "Hand-set fall in visibility from the first sighting to the threshold. The same fixation-rate curve would set it."),
|
|
98
|
+
// ── Gaze leads the mouse ──
|
|
99
|
+
p("gazeLag.mean", 700, "Gaze-to-cursor lag, ms, added before a pointer action: the time by which the cursor follows the eyes to where they look. Huang, J., White, R. W. & Buscher, G. (2012). User see, user point: gaze and cursor alignment in Web search. CHI '12, 1341-1350: \"they lag their cursor behind their gaze by at least 250 ms and on average by 700 ms\"; \"shifting the cursor positions 700 ms into the future minimizes the RMSE. This means mouse cursor lags behind eye gaze by about 700 ms\". 36 adults aged 26-60 (M = 45.5) on 32 web search tasks, Tobii x50 eye tracker; the per-person lag ran from 250 ms to over one second, and age had no significant relation to gaze-cursor distance (rho = 0.22, p = 0.18). One average for every persona is the journey's use; the study gives no age function."),
|
|
100
|
+
// ── Motor timing (Fitts) ──
|
|
101
|
+
h("fitts.tremorGain", 0.1, "Hand-set rise in movement time per unit of the tremor modifier. Movement times of users with tremor against their measured jitter would set it."),
|
|
102
|
+
h("fitts.ageOnset", 40, "Hand-set age, in years, after which movement slows. Fitts-task movement times by age would set it, with the slope."),
|
|
103
|
+
h("fitts.agePerSlowdown", 50, "Hand-set years of age per doubling of movement time after the onset (1 + (age - 40) / 50: 1.5x at 65). Fitts-task movement times by age would set it."),
|
|
104
|
+
h("fitts.jitterScale", 10, "Hand-set divisor from a persona's mouse jitter (px) to the tremor modifier. Movement times against measured cursor jitter would set it."),
|
|
105
|
+
h("fitts.unlocatedDistancePx", 300, "Hand-set pointer travel, px, charged to a click or hover whose element the journey cannot find in its list of clickables (by #N, selector or text match) or finds without a box, so its distance cannot be measured; a found element is timed from the centre of the screen it is seen on to its own centre (Stage B's pointer start, with full-page tiling for an element off the current screen). Scrolls, typed URLs, back, tab, enter, wait and find move no pointer and are charged no pointing time. The distribution of cursor travel to clicked targets on real pages would set it, and finding the element (the page's own locator) would replace it."),
|
|
106
|
+
h("fitts.unlocatedTargetWidthPx", 80, "Hand-set target width, px, charged to a click or hover whose element the journey cannot find in its list of clickables or finds without a box; a found element enters Fitts' law with the smaller of its width and height (SMALLER-OF, as Stage B measures pointing). The distribution of clicked-target sizes on real pages would set it, and the element's measured box would replace it."),
|
|
107
|
+
// ── Typing (keystroke-level model) ──
|
|
108
|
+
p("klm.keystrokeExpert", 120, `Keystroke time, ms, at the journey's expert end of typing skill (expertise 1). ${KLM_1980}, row K: "Good typist (90 wpm) .12" sec. The same figure's fastest row is "Best typist (135 wpm) .08"; taking the good typist as the expert end is the journey's choice.`),
|
|
109
|
+
p("klm.keystrokeNovice", 500, `Keystroke time, ms, at the journey's slow end of typing skill (expertise 0, the oldest personas). ${KLM_1980}, row K: "Typing random letters .50" sec. The code comment calls this end a hunt-and-peck typist; the figure's row for that is "Worst typist (unfamiliar with keyboard) 1.20" sec, and the journey uses the random-letters time instead. Which row the slow end stands for is the journey's choice; replacing it with 1.20 would slow every typed field of a persona with low typing expertise.`),
|
|
110
|
+
p("klm.keystrokeAverage", 280, `Keystroke time, ms, of an average typist, carried on KLM_OPERATORS; nothing in cbrowser reads it. ${KLM_1980}, row K: "Average non-secretary typist (40 wpm) .28" sec (footnote b: "the average typing rate of the nonsecretary subjects in the experiment described in Section 4.1").`),
|
|
111
|
+
p("klm.pointing", 1100, `Pointing time, ms, carried on KLM_OPERATORS; nothing in cbrowser reads it (the journey times pointing with Fitts' law). ${KLM_1980}, row P: "Pointing to a target on a display with a mouse ... The time ranges from .8 to 1.5 sec, with 1.1 being an average time. This operator does not include the button press that often follows (.2 sec)." 1.10 sec.`),
|
|
112
|
+
p("klm.homing", 400, `Homing time, ms, carried on KLM_OPERATORS; nothing in cbrowser reads it. ${KLM_1980}, row H: "Homing the hand(s) on the keyboard or other device. .40" sec.`),
|
|
113
|
+
h("klm.mentalFamiliar", 600, "Hand-set mental-preparation time, ms, for an expert on a familiar task. The keystroke-level model gives one M operator; this lower value has no source. Pre-typing pauses of experts on a routine form would set it."),
|
|
114
|
+
h("klm.button", 100, `Mouse-button time, ms, carried on KLM_OPERATORS; nothing in cbrowser reads it. No source read for this registry states 0.1 s: ${KLM_1980} gives the button press that follows pointing as ".2 sec" (row P). The 1983 book's button operator would set its status.`),
|
|
115
|
+
h("typing.defaultExpertise", 0.5, "Hand-set typing expertise (0 hunt-and-peck, 1 expert) when no age is known, and calculateTypingTime's default. Measured typing speed of the general population, mapped onto the keystroke range, would set it."),
|
|
116
|
+
// ── Returning visits ──
|
|
117
|
+
h("familiarity.visitScale", 4, "Hand-set visit count over which siteFamiliarity closes 63% of the gap to 1 (1 - exp(-visits / 4)). Task times on repeated visits to the same site (a learning curve) would set it."),
|
|
118
|
+
// ── The loop ──
|
|
119
|
+
h("maxSteps", 50, "Hand-set step limit of a journey when the caller sets none. The step count by which nearly all real users have finished or abandoned a task would set it."),
|
|
120
|
+
h("stepPauseMs", 500, "Hand-set pause between steps, ms. The time people take between one action's result and the next action, on real pages, would set it."),
|
|
121
|
+
h("summary.secondsPerFriction", 2, "Hand-set seconds of confusion counted per friction point in the journey summary (timeInConfusion). The time people stay confused after a friction event would set it."),
|
|
122
|
+
h("friction.level", 0.4, "Hand-set confusion or frustration above which a step the model describes as frictional is recorded as a friction point. Agreement with observers' friction coding would set it."),
|
|
123
|
+
h("friction.defaultIncrease", 0.1, "Hand-set frustration increase recorded for a friction point when the model reports no frustration. The median reported increase at friction points would set it."),
|
|
124
|
+
// ── Goal evidence ──
|
|
125
|
+
h("evidence.pageChars", 5000, SHOWN("number of characters of page text a claimed goal's evidence is checked against")),
|
|
126
|
+
h("evidence.minWordChars", 3, "Hand-set word length a word of the evidence must exceed to be checked. The share of matched short words that are stop words, across real claims, would set it."),
|
|
127
|
+
h("evidence.verifiedShare", 0.3, "Hand-set share of the evidence's words that must appear on the page for the claim to be marked verified. Agreement with human checks of claimed evidence would set it."),
|
|
128
|
+
h("finalEval.pageChars", 3000, SHOWN("number of characters of the final page the closing evaluation is shown")),
|
|
129
|
+
h("quoteChars", 200, SHOWN("number of characters of page text or monologue quoted in evidence and failure reasons")),
|
|
130
|
+
// ── What the model is shown ──
|
|
131
|
+
d("llm.maxTokens", 2000, "Response-token ceiling of the live model call; a ceiling on the reply, not a claim about the persona."),
|
|
132
|
+
d("llm.retryMaxTokens", 8000, "Response-token ceiling of the one re-ask after a reply was cut off at llm.maxTokens: thinking counts against the ceiling, so the second ask gets room for the thinking and the JSON together (20.1.2). A ceiling on the reply, not a claim about the persona."),
|
|
133
|
+
h("content.lookaheadShare", 0.4, SHOWN("share of a viewport height below the fold whose text is shown as coming up")),
|
|
134
|
+
h("content.aboveViewportPx", 50, SHOWN("distance, px, above the viewport within which an element's text still counts as visible")),
|
|
135
|
+
h("content.minWidthPx", 20, SHOWN("smallest width, px, of an element whose text is shown")),
|
|
136
|
+
h("content.minHeightPx", 8, SHOWN("smallest height, px, of an element whose text is shown")),
|
|
137
|
+
h("content.minChars", 3, SHOWN("smallest text length of an element whose text is shown")),
|
|
138
|
+
h("content.maxChars", 220, SHOWN("number of characters of one element's text shown before it is cut")),
|
|
139
|
+
h("content.maxLines", 30, SHOWN("number of visible text lines shown")),
|
|
140
|
+
h("prompt.changedElementsShown", 5, SHOWN("number of appeared and disappeared clickables named in the prompt")),
|
|
141
|
+
h("prompt.headings", 6, SHOWN("number of visible headings named in the prompt")),
|
|
142
|
+
h("prompt.scrollReportPx", 10, "Hand-set scroll distance, px, below which the prompt does not report a scroll. The smallest scroll people notice would set it."),
|
|
143
|
+
h("prompt.scrollLoop", 4, "Hand-set number of consecutive scrolls after which the prompt warns of a loop. How often journeys that scroll this many times in a row then succeed by scrolling, on real pages, would set it."),
|
|
144
|
+
h("prompt.failedRun", 2, "Hand-set number of consecutive failed actions after which the prompt suggests a different element. The same success-after-retry rate would set it."),
|
|
145
|
+
// ── Page waits and retries ──
|
|
146
|
+
h("healthCheckMs", 5000, PAGE_WAIT("time, ms, a trivial in-page evaluation may take before the renderer is judged frozen")),
|
|
147
|
+
h("screenshot.scrollPx", 100, "Hand-set scroll distance, px, after which a step captures a new screenshot. The scroll distance at which the visible content changes enough to matter would set it."),
|
|
148
|
+
h("nav.attempts", 4, "Hand-set number of attempts at the start URL on a transient network error. The share of transient errors that clear by each retry would set it."),
|
|
149
|
+
h("nav.backoffMs", 2500, "Hand-set wait, ms, multiplied by the attempt number, between start-URL attempts. The recovery time of transient network errors would set it."),
|
|
150
|
+
h("click.scrollSettleMs", 150, PAGE_WAIT("time, ms, allowed for an instant scroll to an off-screen target to settle")),
|
|
151
|
+
h("action.navigationWaitMs", 800, PAGE_WAIT("time, ms, allowed after a coordinate click or Enter for a navigation to start")),
|
|
152
|
+
h("action.linkVisibleMs", 1500, PAGE_WAIT("time, ms, a link matched by text may take to become visible")),
|
|
153
|
+
h("action.buttonVisibleMs", 1000, PAGE_WAIT("time, ms, a button matched by text may take to become visible")),
|
|
154
|
+
h("action.clickTimeoutMs", 3000, PAGE_WAIT("time, ms, a click on a matched element may take")),
|
|
155
|
+
h("action.clickSettleMs", 1000, PAGE_WAIT("time, ms, allowed after a text click for its navigation to start")),
|
|
156
|
+
h("action.gotoTimeoutMs", 10000, PAGE_WAIT("time, ms, a followed link or a back navigation may take to reach DOMContentLoaded")),
|
|
157
|
+
h("action.focusScrollMs", 2000, PAGE_WAIT("time, ms, scrolling a field into view may take")),
|
|
158
|
+
h("action.scrollPx", 400, "Hand-set scroll distance, px, of one scroll action (about one wheel flick of several notches). The distribution of wheel-scroll distances in recorded sessions would set it."),
|
|
159
|
+
h("action.scrollSettleMs", 300, PAGE_WAIT("time, ms, allowed for a smooth scroll to finish")),
|
|
160
|
+
h("action.scrollMovedPx", 5, "Hand-set scroll distance, px, above which a scroll counts as having moved the page. A tolerance for sub-pixel scroll snapping; the snapping observed on real pages would set it."),
|
|
161
|
+
h("action.backSettleMs", 500, PAGE_WAIT("time, ms, allowed after a back navigation")),
|
|
162
|
+
h("action.findSettleMs", 500, PAGE_WAIT("time, ms, allowed for a find-on-page scroll to finish")),
|
|
163
|
+
h("action.maxTabs", 10, "Hand-set most Tab presses one action may make. The number of Tab presses keyboard users make before re-orienting would set it."),
|
|
164
|
+
h("action.tabIntervalMs", 150, "Hand-set interval, ms, between Tab presses. Inter-key intervals of keyboard navigation users would set it."),
|
|
165
|
+
h("action.expandSettleMs", 400, PAGE_WAIT("time, ms, allowed for an accordion or tab panel to open")),
|
|
166
|
+
h("action.dismissTimeoutMs", 3000, PAGE_WAIT("time, ms, finding and closing an overlay may take")),
|
|
167
|
+
h("action.waitDefaultMs", 1000, "Hand-set wait, ms, of a wait action that names no duration. How long people wait for a loading page before acting would set it."),
|
|
168
|
+
// ── The live viewer ──
|
|
169
|
+
d("live.screenWidth", 1920, "Width, px, of the live viewer's virtual screen (Xvfb), which the window and the page fill."),
|
|
170
|
+
d("live.screenHeight", 1080, "Height, px, of the live viewer's virtual screen and window."),
|
|
171
|
+
d("live.pageHeight", 995, "Height, px, of the page area in the live viewer: the screen height less the 85 px of browser chrome, so the in-page attention overlay matches the stream."),
|
|
172
|
+
h("live.navigationTimeoutMs", 60000, PAGE_WAIT("navigation budget, ms, of a live-viewer journey (heavy sites with many third-party scripts)")),
|
|
173
|
+
d("live.bannerChars", 120, "Most characters of the action banner shown in the live viewer; a display length."),
|
|
174
|
+
// ── Text-click matching ──
|
|
175
|
+
h("clickMatch.exact", 1000, "Hand-set score of an exact text match when a click names an element by text; with the prefix and contains scores and the distance cap it sets which match wins. How often each rule picks the element people meant, on labelled clicks, would set it."),
|
|
176
|
+
h("clickMatch.prefix", 500, "Hand-set score of a prefix match. The same labelled-click accuracy would set it."),
|
|
177
|
+
h("clickMatch.contains", 100, "Hand-set score of a contains match. The same labelled-click accuracy would set it."),
|
|
178
|
+
// ── Verbose logging ──
|
|
179
|
+
d("log.arousalChange", 0.2, "Change in arousal above which a verbose run reports the peripheral field; a reporting cut."),
|
|
180
|
+
// ── Units ──
|
|
181
|
+
d("msPerSecond", 1000, "Milliseconds per second."),
|
|
182
|
+
d("msPerDay", 86400000, "Milliseconds per day (1000 x 60 x 60 x 24)."),
|
|
183
|
+
];
|
|
184
|
+
//# sourceMappingURL=journey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journey.js","sourceRoot":"","sources":["../../../src/visual/provenance/journey.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provenance entries for the published laws that turn a page into seconds of
|
|
3
|
+
* work (src/visual/demand-laws.ts). See ../model-provenance.ts for the
|
|
4
|
+
* statuses.
|
|
5
|
+
*
|
|
6
|
+
* Stage B grounds four demands in laws measured on people: pointing (Fitts),
|
|
7
|
+
* choosing (Cockburn, Gutwin & Greenberg's menu model: novice linear search,
|
|
8
|
+
* with Hick-Hyman as its expert limit), reading (Brysbaert's silent reading
|
|
9
|
+
* rate) and procedure (the keystroke-level model's mental preparation). It
|
|
10
|
+
* puts all four on one time scale against one budget, and states persona
|
|
11
|
+
* capacities as rate ratios against the same reference rates.
|
|
12
|
+
*
|
|
13
|
+
* `published` means a source read for this registry states the number; the
|
|
14
|
+
* entry names the paper and the table, figure or section, and quotes it.
|
|
15
|
+
* Every published law was measured on a narrow condition (a mouse on a 1992
|
|
16
|
+
* Macintosh, menus of 2 to 12 items, English non-fiction, 1980 text editors),
|
|
17
|
+
* and each entry says which. Applying it to a web page is the model's claim,
|
|
18
|
+
* not the source's.
|
|
19
|
+
*
|
|
20
|
+
* The `law.rate.*` entries are measured rates of the populations the built-in
|
|
21
|
+
* personas stand for. They are registered here, with their sources, so a
|
|
22
|
+
* persona capacity can be set from them by id; research/stage-b-persona-rates.md
|
|
23
|
+
* compares them with the values the personas carry today. Where no measured
|
|
24
|
+
* rate was found (adults 65+, adults with ADHD), there is no entry here: the
|
|
25
|
+
* persona's current value is catalogued in provenance/profiles.ts as a
|
|
26
|
+
* hypothesis that says so.
|
|
27
|
+
*
|
|
28
|
+
* Every id is read through param() by demand-laws.ts;
|
|
29
|
+
* tests/demand-laws.test.ts fails on an id that is registered and never read,
|
|
30
|
+
* on one that is read and moves no output, and on any other numeric literal
|
|
31
|
+
* in demand-laws.ts.
|
|
32
|
+
*
|
|
33
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
34
|
+
* @license MIT
|
|
35
|
+
*/
|
|
36
|
+
import type { ProvenanceEntry } from "../model-provenance.js";
|
|
37
|
+
export declare const LAW_PROVENANCE: ProvenanceEntry[];
|
|
38
|
+
//# sourceMappingURL=laws.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"laws.d.ts","sourceRoot":"","sources":["../../../src/visual/provenance/laws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAgB9D,eAAO,MAAM,cAAc,EAAE,eAAe,EAoC3C,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const p = (id, value, source) => ({ id: `law.${id}`, value, status: "published", source });
|
|
2
|
+
const d = (id, value, source) => ({ id: `law.${id}`, value, status: "definition", source });
|
|
3
|
+
const h = (id, value, source) => ({ id: `law.${id}`, value, status: "hypothesis", source });
|
|
4
|
+
const MACKENZIE_BUXTON = "MacKenzie, I. S. & Buxton, W. (1992). Extending Fitts' law to two-dimensional tasks. CHI '92, 219-226, Figure 6 (Shannon formulation), row SMALLER-OF: \"SMALLER-OF 1.58 5.04 .9501 64 230 166 6.0\", i.e. ID range 1.58-5.04 bits, r = .9501, SE 64 ms, intercept 230 ms, slope 166 ms/bit, n = 78 conditions. \"Twelve computer literate subjects\", \"An Apple Macintosh II was used with the standard mouse for input. The C-D gain was set to 0.53\". Above 5.04 bits the regression is extrapolated.";
|
|
5
|
+
const COCKBURN = "Cockburn, A., Gutwin, C. & Greenberg, S. (2007). A predictive model of menu performance. CHI '07, 627-636, doi:10.1145/1240624.1240723, Calibration Study Results.";
|
|
6
|
+
const BRYSBAERT = "Brysbaert, M. (2019). How many words do we read per minute? A review and meta-analysis of reading rate. Journal of Memory and Language 109, 104047, doi:10.1016/j.jml.2019.104047";
|
|
7
|
+
const WEBSTER = "Webster, J., Morris, J., Howard, D. & Garraffa, M. (2018). Reading for meaning: what influences paragraph understanding in aphasia? American Journal of Speech-Language Pathology 27(1S), 423-437, doi:10.1044/2017_AJSLP-16-0213 (authors' accepted manuscript, Newcastle University repository, CC BY-NC-ND). 75 people with aphasia after a single stroke and 87 age-matched controls (mean age 62.9; the reading-impaired group 68.5) read narrative paragraphs silently, the paragraph was removed and comprehension questions followed (\"Participants read the paragraph silently, the paragraph was removed and then a series of written questions were presented\"). The 35 people whose comprehension accuracy fell below the controls' 5th percentile form the reading-impaired group (PWA: RI); the other 40 (PWA: NRI) took 55 seconds. Reading with the text removed afterwards is reading for later recall, slower than Brysbaert's reading for comprehension for both groups, so only the same-study ratio is used.";
|
|
8
|
+
export const LAW_PROVENANCE = [
|
|
9
|
+
// ── Pointing: Fitts' law, Shannon form, SMALLER-OF width ──
|
|
10
|
+
p("fitts.intercept", 0.23, `Movement-time intercept a, in seconds. ${MACKENZIE_BUXTON}`),
|
|
11
|
+
p("fitts.slope", 0.166, `Movement-time slope b, in seconds per bit of ID = log2(D/W + 1). ${MACKENZIE_BUXTON}`),
|
|
12
|
+
d("fitts.minWidth", 1, "Smallest target width, in CSS px, that enters ID = log2(D/W + 1): ID is undefined at W = 0, and a laid-out box only rounds to 0 below half a pixel. A choice of floor, not a measurement."),
|
|
13
|
+
// ── Choosing: Cockburn, Gutwin & Greenberg's menu model ──
|
|
14
|
+
p("search.intercept", 0.3, `Novice (linear visual search) intercept, seconds per choice group. ${COCKBURN} Random menus, where items moved on every posting: "Tdsi=Tvsi=0.08n+0.3, R2=0.99, giving values of 0.08s/item for bvs and 0.30s for avs." Eight participants, mouse, menus of 2, 4, 8 and 12 items; larger groups are extrapolation.`),
|
|
15
|
+
p("search.slope", 0.08, `Novice (linear visual search) slope, seconds per item in the group. ${COCKBURN} "Tdsi=Tvsi=0.08n+0.3, R2=0.99, giving values of 0.08s/item for bvs and 0.30s for avs." Eight participants, menus of 2 to 12 items.`),
|
|
16
|
+
p("hick.intercept", 0.24, `Expert (Hick-Hyman) intercept, seconds per choice group: the menu model's limit for an item the user knows. Since 21.0 (Stage C) the cognitiveLoad abilities' demand reads it at the run's siteFamiliarity e by their Eq. 4, "Tdsi = (1 - ei)Tvsi + ei Thhi ... where ei is the user's expertise with that item, from 0 (complete novice) to 1 (complete expert)"; at e = 0 (every first visit, and the reference curve) it moves no score. ${COCKBURN} Static, familiar menus, block 1 removed: "Tdsi=Thhi=0.08log2(n)+0.24, R2=0.98, giving values of 0.08s/bit for bhh and 0.24s for ahh."`),
|
|
17
|
+
p("hick.slope", 0.08, `Expert (Hick-Hyman) slope, seconds per bit of log2(n). ${COCKBURN} "Tdsi=Thhi=0.08log2(n)+0.24, R2=0.98, giving values of 0.08s/bit for bhh and 0.24s for ahh."`),
|
|
18
|
+
// ── Reading: Brysbaert's silent reading rate ──
|
|
19
|
+
p("reading.wpm", 238, `Silent reading rate of English non-fiction, words per minute, for adults 18-60. ${BRYSBAERT}, abstract: "Based on the analysis of 190 studies (18,573 participants), we estimate that the average silent reading rate for adults in English is 238 words per minute (wpm) for non-fiction". It is also the reference rate a persona's reading rate is a ratio against.`),
|
|
20
|
+
p("reading.lettersPerWord", 4.6, `Mean word length, in letters, of the non-fiction the 238 wpm was measured on, so 238 x 4.6 letters per minute is a letter rate that carries over to text of any word length. ${BRYSBAERT}, Conclusions: "Expected reading rate text = 238 * 4.6/average word length text." Derived for English; the paper notes that each language needs its own equation.`),
|
|
21
|
+
p("reading.abjadWpm", 181, `Silent reading rate of Arabic, words per minute, used for abjad words. ${BRYSBAERT}, "Reading rates in different languages": "We found 15 studies on Arabic: 10 with silent reading and 5 with reading aloud. Mean silent reading rate was 181 wpm"; Table 5, row Arabic: 673 participants in the silent studies. Hebrew in the same table reads 224 wpm (5 studies, 168 participants); the raw measurement records the script, not the language, so Arabic (the larger sample) stands for both.`),
|
|
22
|
+
p("reading.cjkWpm", 260, `Silent reading rate of Chinese, words per minute, used for CJK characters. ${BRYSBAERT}, "Reading rates in different languages": "In Chinese we found 26 studies coming from 23 articles: 18 on silent reading and 8 on reading aloud. Mean reading rates were respectively 260 wpm and 152 wpm." Table 5, row Chinese: 786 participants in the silent studies. Japanese is not in the table and Korean (226 wpm) counts space-separated words; reading both at the Chinese character rate is an assumption the reading function states.`),
|
|
23
|
+
p("reading.cjkCharsPerWord", 1.5, `Characters per Chinese word, the conversion Brysbaert used to turn character counts into the 260 wpm, so 260 x 1.5 recovers his characters per minute. ${BRYSBAERT}, "Reading rates in different languages": "When we had to do so, we used the conversion 1.5 characters for 1 word." He calls it a language-industry rule of thumb. Not pageMetrics.cjk.charsPerWord (1.8, a hypothesis feeding avgWordLength).`),
|
|
24
|
+
h("reading.labelFirstRead", 0.13, `Seconds to read one menu label for the first time, charged per grouped link with visible text (groupedLinksWithText: a link in a nav or composite group whose drawn text holds a letter or digit; an icon-only link has nothing to read) in place of reading the labels' prose at the rates above; the novice search the choosing law charges leaves it out. ${COCKBURN} The search fit excludes block 1, "presumably because there is an additional cost in reading the menu labels for the first time. To avoid incorporating this one-off cost in the calibration of visual search we removed block 1 from the visual search analysis" (F2,14=4.9, p<.05; eight participants). The value is read by eye, +-0.02 s, off Figure 2 ("Mean decision/search time for the three menu conditions across blocks of trials (based on the mean of all menu lengths per block)"): random condition, block 1 about 0.97 s against block 2 about 0.84 s. A block is n selections over a menu's n labels, so the block-1 excess per selection is also the excess per label. An upper bound: block 1 also carries familiarisation with the task. Context: the static+familiar condition (labels from Microsoft Office's File menu) shows about 0.07 s (0.545 s against 0.48 s). Read off a figure rather than stated, hence a hypothesis; first-read times per label measured on web navigation would set it.`),
|
|
25
|
+
// ── Procedure: the keystroke-level model ──
|
|
26
|
+
p("klm.mentalPreparation", 1.35, "Mental preparation operator M, in seconds, charged once per entry step. Card, S. K., Moran, T. P. & Newell, A. (1980). The keystroke-level model for user performance time with interactive systems. CACM 23(7), 396-410. Figure 1: \"M Mentally preparing for executing physical actions. 1.35\"; section 4.2.1: \"The result was tM = 1.35 sec (R2 = .84, standard error of estimate = .11 sec ...). A rough estimate of the SD of tM is 1.1 sec\". Estimated on their own 28 users and 1980 editors. One M per field is this registry's placement, not KLM's (Figure 2 places M by rules applied to a task method)."),
|
|
27
|
+
// ── The budget every law time is judged against ──
|
|
28
|
+
h("timeBudget", 12.4, "Seconds of reference-user work at which a demand reads 0.5 (d = T / (T + tau)), one value for every channel so a second of reading costs what a second of pointing costs. The number is published: Weinreich, H., Obendorf, H., Herder, E. & Mayer, M. (2008). Not quite the average: an empirical study of Web use. ACM TWEB 2(1), 5:1-5:31, section 4.4: \"only first time page visits were considered ... nearly 50% were shown for less than 12 seconds and 11.6% were displayed for more than 2 minutes (median: 12.4s)\", 25 participants. Using it as the budget is the hypothesis, and the authors note that \"the attention times per page were definitely shorter than the stay times we recorded\". Time-to-abandon on first visits to the reference page set, against each page's law times, would set it or replace it."),
|
|
29
|
+
// ── Rates the capacities are ratios of ──
|
|
30
|
+
p("rate.pointing.reference", 4.9, "ISO 9241-9 mouse throughput, bits/s, of regular mouse users: the reference rate a persona's pointing throughput is a ratio against. MacKenzie, I. S., Kauppinen, T. & Silfverberg, M. (2001). Accuracy measures for evaluating computer pointing devices. CHI 2001, 9-16, Throughput and Error Rates: \"The throughput was 4.9 bps for the mouse\" (twelve participants, \"All participants were regular users of a GUI and mouse\"). It is the top of the ISO mouse range in Soukoreff & MacKenzie (2004), IJHCS 61, 751-789, section 4.2: \"All of the throughputs fall in the range [3.7–4.9]\". The pointing profiles in cognitive-models.ts cite MacKenzie (1992) for this value; that paper does not report it."),
|
|
31
|
+
p("rate.pointing.motionImpaired", 1.77, "ISO 9241-9 mouse throughput, bits/s, of motion-impaired users. Read in Soukoreff, R. W. & MacKenzie, I. S. (2004). Towards a standard for pointing device evaluation. IJHCS 61, 751-789, Table 4 (\"Survey of nine studies that used the ISO9241-9 standard\"), row Keates, Hwang, Langdon, Clarkson & Robinson 2002: \"Shannon Mean Circular Serial No Yes — 1.77 69 Mouse (motion impared [sic])\", i.e. 1.77 bits/s at a 69% error rate. Origin: Keates et al. (2002), Cursor measures for motion-impaired computer users, ASSETS 2002, 135-142 (not retrieved; the number is the table's). The group is motion-impaired users in general, not tremor specifically."),
|
|
32
|
+
p("rate.pointing.motionImpairedControls", 4.88, "ISO 9241-9 mouse throughput, bits/s, of the able-bodied group measured with the same method as law.rate.pointing.motionImpaired, so the ratio of the two is within one study. Soukoreff & MacKenzie (2004), IJHCS 61, Table 4, row Keates et al. 2002: \"Shannon Mean Circular Serial No Yes — 4.88 11 Mouse (able-bodied)\". Within 0.4% of law.rate.pointing.reference."),
|
|
33
|
+
p("rate.reading.dyslexiaAdults", 184.63, "Silent text reading rate, words per minute, of students in higher education with dyslexia. Callens, M., Tops, W. & Brysbaert, M. (2012). Cognitive profile of students who enter higher education with an indication of dyslexia. PLoS ONE 7(6), e38081, doi:10.1371/journal.pone.0038081, Table 5, row \"Silent text reading (Tekenbeet)\", \"Words per minute\": 184.63 (SD 59.25) for students with dyslexia, 243.64 (SD 57.59) without, d = 1.13. \"a group of 100 Dutch-speaking students diagnosed with dyslexia with a control group of 100 students without learning disabilities\". Dutch text; students are the more able end of adult dyslexia."),
|
|
34
|
+
p("rate.reading.dyslexiaControls", 243.64, "Silent text reading rate, words per minute, of the control group in Callens, Tops & Brysbaert (2012), PLoS ONE 7(6), e38081, Table 5, row \"Silent text reading (Tekenbeet)\", \"Words per minute\": 243.64 (SD 57.59) for students without dyslexia, the same-study comparison for law.rate.reading.dyslexiaAdults. Within 2.4% of law.reading.wpm."),
|
|
35
|
+
p("rate.reading.aphasiaReadingImpairedSeconds", 71, `Silent reading time, seconds, of the reading-impaired group of people with aphasia for one paragraph of about 100 words (paragraph 14). ${WEBSTER} Results: "PWA: RI taking 71 seconds (SD = 71.43, range 22.09 to 224.29)".`),
|
|
36
|
+
p("rate.reading.aphasiaControlsSeconds", 30, `Silent reading time, seconds, of the age-matched control group for the same paragraph, the same-study comparison for law.rate.reading.aphasiaReadingImpairedSeconds. ${WEBSTER} Results: "On average, the control participants took 30 seconds to read approximately 100 words (SD = 10.87, range 10.96 to 73.23 seconds) (paragraph 14)". About 200 words per minute under the recall condition.`),
|
|
37
|
+
p("rate.reading.lowVisionCentralLoss", 25, "Peak reading rate, words per minute, of low-vision observers with central-field loss. Legge, G. E., Rubin, G. S., Pelli, D. G. & Schleske, M. M. (1985). Psychophysics of reading II. Low vision. Vision Research 25(2), 253-265, abstract: \"Peak reading rates for observers with central-field loss were very low (median 25 words/minute)\", 16 low-vision observers. A peak rate at the optimal character size on text drifted across a monitor, not silent reading of a page; the same-method normal-vision rate (Legge et al. 1985, part I) was not retrieved, so a ratio against law.reading.wpm crosses methods."),
|
|
38
|
+
p("rate.reading.lowVisionIntactFields", 130, "Peak reading rate, words per minute, of low-vision observers with intact central fields. Legge, Rubin, Pelli & Schleske (1985), Vision Research 25(2), 253-265, abstract: \"peak reading rates for observers with intact central fields were at least 90 words/minute (median 130 words/minute)\". Same method and caveat as law.rate.reading.lowVisionCentralLoss."),
|
|
39
|
+
];
|
|
40
|
+
//# sourceMappingURL=laws.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"laws.js","sourceRoot":"","sources":["../../../src/visual/provenance/laws.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provenance entries for the page-metric extractor's constants
|
|
3
|
+
* (extractPageMetrics in cognitive-transport.ts). See ../model-provenance.ts
|
|
4
|
+
* for the statuses.
|
|
5
|
+
*
|
|
6
|
+
* These turn raw page counts (characters of text, colours, images, links,
|
|
7
|
+
* running animations, word and sentence lengths) into the 0-1 page features
|
|
8
|
+
* the cognitive transport chain reads as demand. Every midpoint, weight,
|
|
9
|
+
* threshold and cap was set by hand, so each is a `hypothesis`. The data that
|
|
10
|
+
* would set most of them is the same: the distribution of the raw count across
|
|
11
|
+
* a reference set of real pages (a crawl stratified by site type and script),
|
|
12
|
+
* with a midpoint placed where it would sit on that distribution (for a
|
|
13
|
+
* value/(value + midpoint) curve, the median makes 0.5 the typical page). The
|
|
14
|
+
* script-family detection and word-length thresholds would be set against
|
|
15
|
+
* hand-labelled pages and tokenised corpora per script. The only `definition`
|
|
16
|
+
* is the area unit text density is expressed in.
|
|
17
|
+
*
|
|
18
|
+
* extractPageMetrics is measurePageRaw then deriveMetrics (cognitive-transport.ts).
|
|
19
|
+
* The ids in PAGE_METRICS_MEASURE_IDS decide what is counted at all, so
|
|
20
|
+
* measurePageRaw reads them in Node and hands them to the page (the browser
|
|
21
|
+
* side cannot call param()); a stored raw measurement cannot be re-derived
|
|
22
|
+
* under another value of one of them. Every other id is applied by
|
|
23
|
+
* deriveMetrics to the raw counts and length histograms, so a stored
|
|
24
|
+
* measurement (the CTC reference set) re-derives under a changed value.
|
|
25
|
+
* tests/page-metrics-no-literals.test.ts fails on any other numeric literal in
|
|
26
|
+
* those functions, and tests/page-metrics-golden.test.ts proves the outputs did
|
|
27
|
+
* not move when the literals became entries, nor when the extractor was split.
|
|
28
|
+
*
|
|
29
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
30
|
+
* @license MIT
|
|
31
|
+
*/
|
|
32
|
+
import type { ProvenanceEntry } from "../model-provenance.js";
|
|
33
|
+
export declare const PAGE_METRICS_PROVENANCE: ProvenanceEntry[];
|
|
34
|
+
/**
|
|
35
|
+
* The ids measurePageRaw applies while measuring: they decide what is counted
|
|
36
|
+
* (the lazy-load walk, the colour sample, the prose filter, script detection)
|
|
37
|
+
* or what a raw record keeps. A stored measurement carries their effect and
|
|
38
|
+
* cannot be re-derived under another value; everything else in
|
|
39
|
+
* PAGE_METRICS_PROVENANCE is applied by deriveMetrics.
|
|
40
|
+
*/
|
|
41
|
+
export declare const PAGE_METRICS_MEASURE_IDS: readonly string[];
|
|
42
|
+
//# sourceMappingURL=page-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-metrics.d.ts","sourceRoot":"","sources":["../../../src/visual/provenance/page-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAe9D,eAAO,MAAM,uBAAuB,EAAE,eAAe,EA2DpD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAYpD,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
const h = (id, value, source) => ({ id: `pageMetrics.${id}`, value, status: "hypothesis", source });
|
|
2
|
+
const d = (id, value, source) => ({ id: `pageMetrics.${id}`, value, status: "definition", source });
|
|
3
|
+
// What would place a value/(value + midpoint) midpoint.
|
|
4
|
+
const MIDPOINT = (raw, feature) => `Hand-set midpoint at which ${feature} reads 0.5 (value / (value + midpoint)). The distribution of ${raw} across a reference set of real pages would set it; at its median, 0.5 means a typical page.`;
|
|
5
|
+
const SCRIPT = (what) => `Hand-set ${what}. Agreement with hand-labelled script families on a set of real pages in Latin, CJK and abjad scripts (including partly translated ones) would set it.`;
|
|
6
|
+
const TOKENS = (what, script) => `Hand-set ${what} for ${script} text. Word-length and sentence-length distributions of a tokenised ${script} corpus of web text, set against reading difficulty ratings, would place it.`;
|
|
7
|
+
export const PAGE_METRICS_PROVENANCE = [
|
|
8
|
+
// ── Lazy-load walk (full_page scope) ──
|
|
9
|
+
h("walk.maxSteps", 5, "Hand-set number of screens scrolled before a full_page measurement, to trigger lazy content. The share of lazily loaded elements that appear after each additional step, across a reference set of long pages, would set it."),
|
|
10
|
+
h("walk.settleMs", 300, "Hand-set wait after each scroll step (and after returning to the top) for lazy content to load. The time to the last lazy insertion after a scroll, across a reference set of pages, would set it."),
|
|
11
|
+
// ── Density and complexity ──
|
|
12
|
+
h("text.nestedShare", 0.4, "Hand-set share kept of the summed innerText of every text element, because nested elements count the same text more than once. The ratio of de-duplicated visible text (leaf text nodes) to that sum, across a reference set of real pages, would set it."),
|
|
13
|
+
h("informationDensity.midpoint", 5000, MIDPOINT("de-duplicated visible characters per measured area", "informationDensity")),
|
|
14
|
+
h("visual.colourWeight", 3, "Hand-set weight of each distinct colour in the visual-complexity count (colours x 3 + images x 2 + visible elements x 0.5). Regressing rated visual complexity of a reference set of pages on the three counts would fit it."),
|
|
15
|
+
h("visual.imageWeight", 2, "Hand-set weight of each image in the visual-complexity count. The same regression of rated visual complexity on the three counts would fit it."),
|
|
16
|
+
h("visual.elementWeight", 0.5, "Hand-set weight of each visible element in the visual-complexity count. The same regression of rated visual complexity on the three counts would fit it."),
|
|
17
|
+
h("visual.colourSample", 50, "Hand-set number of visible elements (in document order) whose colours are sampled, bounding the getComputedStyle cost. The distinct-colour count as a function of sample size, across a reference set of pages, would show where it saturates."),
|
|
18
|
+
h("visual.midpoint", 200, MIDPOINT("the weighted colour-image-element count", "visualComplexity")),
|
|
19
|
+
d("textDensity.areaUnit", 0.001, "Expresses the measured area in thousands of square pixels, so text density is characters per 1,000 px^2; a choice of units."),
|
|
20
|
+
h("textDensity.midpoint", 3, MIDPOINT("characters per 1,000 px^2", "textDensity")),
|
|
21
|
+
h("animation.carouselCount", 3, "Hand-set number of running animations a carousel counts as. Rated distraction (or measured reading slowdown) on pages with a carousel against pages with n running animations would set it."),
|
|
22
|
+
h("animation.saturation", 10, "Hand-set animation count at which animationLevel reaches 1 (a linear ramp, capped). Rated distraction against running-animation count across a reference set of pages would set the ramp."),
|
|
23
|
+
h("choiceCap", 100, "Hand-set cap on the reported choiceCount (the uncapped count is reported beside it as choiceCountRaw). Since Stage B no demand reads choiceCount: the decision demand is choosing seconds (lawSecondsOf). The distribution of choice counts across a reference set of real pages would show how often it binds (it does on the CU Denver homepage at full_page)."),
|
|
24
|
+
// ── Readability: which text counts ──
|
|
25
|
+
h("prose.lengthAbove", 5, "Hand-set: a prose element counts only when its text is longer than this many characters, to skip labels and stray glyphs. The share of such short elements that are labels rather than prose, on a hand-labelled reference set, would set it."),
|
|
26
|
+
// ── Script detection ──
|
|
27
|
+
h("script.minChars", 5, SCRIPT("minimum count of CJK (or abjad) characters before a page can be classed as that script, so a stray glyph or emoji does not flip it")),
|
|
28
|
+
h("script.textShare", 0.3, SCRIPT("share of visible characters in the script above which the page is classed as that script")),
|
|
29
|
+
h("script.keyShare", 0.2, SCRIPT("share of the h1 and nav characters in the script above which the page is classed as that script (catches partial translation)")),
|
|
30
|
+
// ── Abjad (Arabic, Hebrew, Persian, Urdu) ──
|
|
31
|
+
h("abjad.lengthScale", 1.6, TOKENS("multiplier that maps an abjad word's character count to a Latin-equivalent length (short root-based stems carry more per character)", "abjad")),
|
|
32
|
+
h("abjad.longWordMin", 5, TOKENS("character count from which an abjad word is long (read as 8+ Latin characters)", "abjad")),
|
|
33
|
+
h("abjad.techWordMin", 6, TOKENS("character count from which an abjad word counts as technical", "abjad")),
|
|
34
|
+
h("abjad.sentenceLengthAbove", 5, TOKENS("character length a split abjad fragment must exceed to count as a sentence", "abjad")),
|
|
35
|
+
// ── Latin (alphabetic pages, and Latin words on abjad pages) ──
|
|
36
|
+
h("latin.longWordMin", 7, TOKENS("letter count from which a word is long", "Latin-script")),
|
|
37
|
+
h("latin.techWordMin", 10, TOKENS("letter count from which a word counts as technical or compound", "Latin-script")),
|
|
38
|
+
h("alphabetic.sentenceLengthAbove", 10, TOKENS("character length a split fragment must exceed to count as a sentence", "alphabetic")),
|
|
39
|
+
// ── CJK ──
|
|
40
|
+
h("cjk.charsPerWord", 1.8, TOKENS("characters per word used to estimate a CJK word count (Chinese about 1.5, Japanese and Korean about 2)", "CJK")),
|
|
41
|
+
h("cjk.latinEquivalentLength", 6, TOKENS("Latin-equivalent length assigned to each estimated CJK word", "CJK")),
|
|
42
|
+
h("cjk.longRunMin", 3, TOKENS("run of CJK characters from which a compound counts as a long word", "CJK")),
|
|
43
|
+
h("cjk.techRunMin", 4, TOKENS("run of CJK characters from which a compound counts as technical", "CJK")),
|
|
44
|
+
h("cjk.latinTechWordMin", 8, TOKENS("length from which a Latin word inside CJK text counts as technical", "CJK")),
|
|
45
|
+
h("cjk.sentenceLengthAbove", 3, TOKENS("character length a split CJK fragment must exceed to count as a sentence", "CJK")),
|
|
46
|
+
// ── Normalisation to 0-1 ──
|
|
47
|
+
h("wordLength.offset", 3, "Hand-set average word length (in Latin-equivalent characters) that maps to 0 (avgWordLength = (length - 3) / 7.5, so 4 -> 0.13, 6 -> 0.4, 10.5 -> 1). The distribution of average word length across a reference set of real pages, against rated reading difficulty, would set it."),
|
|
48
|
+
h("wordLength.span", 7.5, "Hand-set span of average word length over which avgWordLength rises from 0 to 1. The same word-length distribution and difficulty ratings would set it."),
|
|
49
|
+
h("sentenceLength.saturation", 40, "Hand-set average words per sentence at which avgSentenceLength reaches 1 (a linear ramp, capped). The distribution of sentence length across a reference set of real pages, against rated reading difficulty, would set it."),
|
|
50
|
+
h("lexicalDiversity.window", 100, "Hand-set word count the type-token ratio is computed over at most (unique words / min(words, 100)), since the raw ratio falls with text length. The type-token curve of a reference corpus of web text would set the window."),
|
|
51
|
+
// ── Storage bounds of a raw measurement (measurePageRaw) ──
|
|
52
|
+
// No PageMetrics field reads these; they bound what a RawPageMeasurement
|
|
53
|
+
// keeps, and the uncapped totals are kept beside each list.
|
|
54
|
+
d("raw.lengthBins", 32, "Resolution of the run-length and sentence-fragment-length histograms in a raw page measurement: lengths at or above it share one bin. A storage choice, not a model claim; a sentence or run threshold must sit below it for deriveMetrics to re-derive a stored measurement, and it refuses otherwise."),
|
|
55
|
+
d("raw.maxBoxes", 300, "Interactive elements whose box a raw page measurement keeps, in document order (the count is kept uncapped). A storage bound, not a model claim: it covers the 95th percentile at viewport scope (139) and about the 90th at full_page (300) on the 2026-10-22 reference crawl."),
|
|
56
|
+
d("raw.maxTextBlocks", 128, "Prose blocks whose size and typography a raw page measurement keeps, in document order (the count is kept uncapped). A storage bound, not a model claim."),
|
|
57
|
+
d("raw.maxChoiceGroups", 64, "Choice groups (nav lists, selects, radio and checkbox groups, menus) a raw page measurement keeps, in document order (the count is kept uncapped). A storage bound, not a model claim."),
|
|
58
|
+
];
|
|
59
|
+
/**
|
|
60
|
+
* The ids measurePageRaw applies while measuring: they decide what is counted
|
|
61
|
+
* (the lazy-load walk, the colour sample, the prose filter, script detection)
|
|
62
|
+
* or what a raw record keeps. A stored measurement carries their effect and
|
|
63
|
+
* cannot be re-derived under another value; everything else in
|
|
64
|
+
* PAGE_METRICS_PROVENANCE is applied by deriveMetrics.
|
|
65
|
+
*/
|
|
66
|
+
export const PAGE_METRICS_MEASURE_IDS = Object.freeze([
|
|
67
|
+
"pageMetrics.walk.maxSteps",
|
|
68
|
+
"pageMetrics.walk.settleMs",
|
|
69
|
+
"pageMetrics.visual.colourSample",
|
|
70
|
+
"pageMetrics.prose.lengthAbove",
|
|
71
|
+
"pageMetrics.script.minChars",
|
|
72
|
+
"pageMetrics.script.textShare",
|
|
73
|
+
"pageMetrics.script.keyShare",
|
|
74
|
+
"pageMetrics.raw.lengthBins",
|
|
75
|
+
"pageMetrics.raw.maxBoxes",
|
|
76
|
+
"pageMetrics.raw.maxTextBlocks",
|
|
77
|
+
"pageMetrics.raw.maxChoiceGroups",
|
|
78
|
+
]);
|
|
79
|
+
//# sourceMappingURL=page-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-metrics.js","sourceRoot":"","sources":["../../../src/visual/provenance/page-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provenance catalogue for the perceptual profiles (perceptual-transport.ts:
|
|
3
|
+
* PERCEPTUAL_PROFILES and DEFAULT_PROFILE): each profile's barrier weights and
|
|
4
|
+
* the numeric fields of its visual filter. See ../model-provenance.ts for the
|
|
5
|
+
* statuses.
|
|
6
|
+
*
|
|
7
|
+
* CATALOGUED, NOT READ THROUGH param(), for the reason personas.ts gives: the
|
|
8
|
+
* profiles are readable tables, and rewriting them to read each number by id
|
|
9
|
+
* would bury them. It is also forced here: this file must import the profiles
|
|
10
|
+
* to describe them, so perceptual-transport.ts importing the registry would
|
|
11
|
+
* close an import cycle. The entries are built FROM the profile objects at
|
|
12
|
+
* module load, so a value here is the value the tools run on and cannot drift
|
|
13
|
+
* from it; the registry adds the status and the source. No code reads a
|
|
14
|
+
* `perceptual.` id through param(), so a check for registered ids that are
|
|
15
|
+
* never read must leave this prefix out. tests/perceptual-provenance.test.ts
|
|
16
|
+
* fails if a numeric field has no entry, if a value differs, or if a profile,
|
|
17
|
+
* barrier key or filter field appears that this file has no description for.
|
|
18
|
+
*
|
|
19
|
+
* Every built-in profile value is a `hypothesis`: set by hand, with comments in
|
|
20
|
+
* perceptual-transport.ts explaining the direction (e.g. "has full vision")
|
|
21
|
+
* and none measuring the number. A barrier weight multiplies the points a
|
|
22
|
+
* barrier deducts in empathy_audit; a filter field shapes the attention map
|
|
23
|
+
* (attentionMode, processingSpeed) or the perceptual score. DEFAULT_PROFILE,
|
|
24
|
+
* which a name nothing recognises falls back to, is all `definition`: weight 1
|
|
25
|
+
* charges a barrier at face value and the filter is the identity, a neutral
|
|
26
|
+
* profile that models no one rather than a claim about anyone.
|
|
27
|
+
*
|
|
28
|
+
* What would test a built-in value: the measure named below, in a sample of
|
|
29
|
+
* the profile's population, compared with a general-population sample on the
|
|
30
|
+
* same pages or task. impatient-user is a behavioural archetype and needs a
|
|
31
|
+
* screening criterion before it has a population.
|
|
32
|
+
*
|
|
33
|
+
* Not covered: the numbers in synthesizePerceptualProfile (how accessibility
|
|
34
|
+
* traits map to a filter for a custom persona) and in calculatePerceptualScore
|
|
35
|
+
* and analyzePerceptualTransport are inline literals, still unregistered.
|
|
36
|
+
*
|
|
37
|
+
* @copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com https://cbrowser.ai
|
|
38
|
+
* @license MIT
|
|
39
|
+
*/
|
|
40
|
+
import type { ProvenanceEntry } from "../model-provenance.js";
|
|
41
|
+
import { type PerceptualProfile } from "../perceptual-transport.js";
|
|
42
|
+
export interface PerceptualCatalogue {
|
|
43
|
+
entries: ProvenanceEntry[];
|
|
44
|
+
/** Ids of numeric fields that could not be described (unknown profile, barrier key or filter field, or a duplicate). */
|
|
45
|
+
uncovered: string[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Build one entry per numeric barrier weight and visual-filter field. A value
|
|
49
|
+
* whose profile, barrier key or field this file has no description for is
|
|
50
|
+
* reported as uncovered instead of registered, so the test fails rather than
|
|
51
|
+
* the module.
|
|
52
|
+
*/
|
|
53
|
+
export declare function cataloguePerceptualProfiles(profiles: Record<string, PerceptualProfile>, defaultProfile: PerceptualProfile): PerceptualCatalogue;
|
|
54
|
+
export declare const PERCEPTUAL_PROVENANCE: ProvenanceEntry[];
|
|
55
|
+
/** Numeric fields in the profiles this file cannot describe yet. Must be empty; the test says which. */
|
|
56
|
+
export declare const PERCEPTUAL_PROVENANCE_UNCOVERED: readonly string[];
|
|
57
|
+
/** The keys of the hand-written tables above, so the test can catch a stale one. */
|
|
58
|
+
export declare const PERCEPTUAL_PROVENANCE_KEYS: {
|
|
59
|
+
barriers: string[];
|
|
60
|
+
filterFields: string[];
|
|
61
|
+
populations: string[];
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=perceptual.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perceptual.d.ts","sourceRoot":"","sources":["../../../src/visual/provenance/perceptual.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAgD1G,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,wHAAwH;IACxH,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAwBD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC3C,cAAc,EAAE,iBAAiB,GAChC,mBAAmB,CAiCrB;AAID,eAAO,MAAM,qBAAqB,EAAE,eAAe,EAAsB,CAAC;AAE1E,wGAAwG;AACxG,eAAO,MAAM,+BAA+B,EAAE,SAAS,MAAM,EAAwB,CAAC;AAEtF,oFAAoF;AACpF,eAAO,MAAM,0BAA0B;;;;CAItC,CAAC"}
|