altitude-design 0.2.1 → 0.3.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.
- package/README.md +42 -7
- package/dist/adapters/codemirror.cjs +88 -0
- package/dist/adapters/codemirror.cjs.map +7 -0
- package/dist/adapters/codemirror.js +67 -0
- package/dist/adapters/codemirror.js.map +7 -0
- package/dist/adapters/react-flow.css +102 -0
- package/dist/adapters/tiptap.css +71 -0
- package/dist/altitude.css +3121 -244
- package/dist/altitude.iife.js +33 -5
- package/dist/altitude.no-fonts.css +3121 -244
- package/dist/chart-themes.cjs +195 -0
- package/dist/chart-themes.cjs.map +7 -0
- package/dist/chart-themes.js +165 -0
- package/dist/chart-themes.js.map +7 -0
- package/dist/cli/altitude.mjs +134 -0
- package/dist/guidance/README.md +32 -0
- package/dist/guidance/agent-setup.md +22 -0
- package/dist/guidance/app-skeleton.md +17 -0
- package/dist/guidance/evidence.json +95 -0
- package/dist/guidance/index.json +493 -0
- package/dist/guidance/llms.txt +20 -0
- package/dist/guidance/manifest.json +92 -0
- package/dist/guidance/pattern.schema.json +181 -0
- package/dist/guidance/patterns/agent-action.json +77 -0
- package/dist/guidance/patterns/agent-action.md +39 -0
- package/dist/guidance/patterns/assistant-conversation.json +77 -0
- package/dist/guidance/patterns/assistant-conversation.md +50 -0
- package/dist/guidance/patterns/async-collection.json +71 -0
- package/dist/guidance/patterns/async-collection.md +29 -0
- package/dist/guidance/patterns/audit-log.json +75 -0
- package/dist/guidance/patterns/audit-log.md +27 -0
- package/dist/guidance/patterns/auth.json +86 -0
- package/dist/guidance/patterns/auth.md +29 -0
- package/dist/guidance/patterns/billing.json +80 -0
- package/dist/guidance/patterns/billing.md +29 -0
- package/dist/guidance/patterns/consequential-action.json +76 -0
- package/dist/guidance/patterns/consequential-action.md +27 -0
- package/dist/guidance/patterns/developer-settings.json +79 -0
- package/dist/guidance/patterns/developer-settings.md +29 -0
- package/dist/guidance/patterns/edit-record.json +74 -0
- package/dist/guidance/patterns/edit-record.md +51 -0
- package/dist/guidance/patterns/import.json +77 -0
- package/dist/guidance/patterns/import.md +31 -0
- package/dist/guidance/patterns/members.json +77 -0
- package/dist/guidance/patterns/members.md +27 -0
- package/dist/guidance/patterns/onboarding.json +78 -0
- package/dist/guidance/patterns/onboarding.md +31 -0
- package/dist/guidance/patterns/review-submit.json +72 -0
- package/dist/guidance/patterns/review-submit.md +27 -0
- package/dist/guidance/patterns/screen-layout.json +79 -0
- package/dist/guidance/patterns/screen-layout.md +40 -0
- package/dist/guidance/patterns/settings.json +78 -0
- package/dist/guidance/patterns/settings.md +32 -0
- package/dist/guidance/patterns/sync.json +77 -0
- package/dist/guidance/patterns/sync.md +31 -0
- package/dist/guidance/principles.md +23 -0
- package/dist/guidance/references/build/checks/agent-action-pattern.mjs +57 -0
- package/dist/guidance/references/build/checks/agent-setup.mjs +78 -0
- package/dist/guidance/references/build/checks/assistant-conversation-pattern.mjs +49 -0
- package/dist/guidance/references/build/checks/audit-log-pattern.mjs +63 -0
- package/dist/guidance/references/build/checks/auth-pattern.mjs +67 -0
- package/dist/guidance/references/build/checks/billing-pattern.mjs +63 -0
- package/dist/guidance/references/build/checks/developer-settings-pattern.mjs +76 -0
- package/dist/guidance/references/build/checks/guidance.mjs +71 -0
- package/dist/guidance/references/build/checks/import-pattern.mjs +69 -0
- package/dist/guidance/references/build/checks/members-pattern.mjs +71 -0
- package/dist/guidance/references/build/checks/onboarding-pattern.mjs +54 -0
- package/dist/guidance/references/build/checks/pattern-types.mjs +13 -0
- package/dist/guidance/references/build/checks/pattern-workflows.mjs +226 -0
- package/dist/guidance/references/build/checks/primary-scope.mjs +49 -0
- package/dist/guidance/references/build/checks/render-tells.mjs +72 -0
- package/dist/guidance/references/build/checks/screen-layout-pattern.mjs +111 -0
- package/dist/guidance/references/build/checks/semantics.mjs +72 -0
- package/dist/guidance/references/build/checks/settings-pattern.mjs +73 -0
- package/dist/guidance/references/build/checks/sync-pattern.mjs +62 -0
- package/dist/guidance/references/build/checks/tells-lint.mjs +164 -0
- package/dist/guidance/references/build/fixtures/pattern-workflows.tsx +83 -0
- package/dist/guidance/references/build/fixtures/patterns/agent-action.jsx +60 -0
- package/dist/guidance/references/build/fixtures/patterns/app-skeleton.jsx +94 -0
- package/dist/guidance/references/build/fixtures/patterns/assistant-conversation.jsx +79 -0
- package/dist/guidance/references/build/fixtures/patterns/audit-log.jsx +81 -0
- package/dist/guidance/references/build/fixtures/patterns/auth.jsx +150 -0
- package/dist/guidance/references/build/fixtures/patterns/billing.jsx +96 -0
- package/dist/guidance/references/build/fixtures/patterns/developer-settings.jsx +95 -0
- package/dist/guidance/references/build/fixtures/patterns/import.jsx +102 -0
- package/dist/guidance/references/build/fixtures/patterns/members.jsx +106 -0
- package/dist/guidance/references/build/fixtures/patterns/onboarding.jsx +70 -0
- package/dist/guidance/references/build/fixtures/patterns/screen-layout-decision.jsx +74 -0
- package/dist/guidance/references/build/fixtures/patterns/screen-layout-editor.jsx +56 -0
- package/dist/guidance/references/build/fixtures/patterns/screen-layout-report.jsx +42 -0
- package/dist/guidance/references/build/fixtures/patterns/settings.jsx +73 -0
- package/dist/guidance/references/build/fixtures/patterns/sync.jsx +78 -0
- package/dist/guidance/references/project/components/src/pattern-async-collection.tsx +57 -0
- package/dist/guidance/references/project/components/src/pattern-consequential-action.tsx +77 -0
- package/dist/guidance/references/project/components/src/pattern-edit-record.tsx +127 -0
- package/dist/guidance/references/project/components/src/pattern-review-submit.tsx +47 -0
- package/dist/guidance/references/project/components/src/settings.tsx +79 -0
- package/dist/guidance/references/scripts/build-framework-fixture.mjs +20 -0
- package/dist/guidance/rules.json +653 -0
- package/dist/guidance/visual/Elevation.md +194 -0
- package/dist/guidance/visual/Fundamentals.md +83 -0
- package/dist/guidance/visual/Research.md +1620 -0
- package/dist/index.cjs +18795 -1925
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +18795 -1925
- package/dist/index.js.map +4 -4
- package/dist/tokens.css +84 -84
- package/dist/tokens.json +301 -128
- package/dist/types/adapter-codemirror.d.ts +13 -0
- package/dist/types/agent-fleet.d.ts +166 -0
- package/dist/types/ai-label.d.ts +30 -0
- package/dist/types/app-shell.d.ts +83 -0
- package/dist/types/area-chart.d.ts +80 -0
- package/dist/types/artifact.d.ts +65 -0
- package/dist/types/bar-chart.d.ts +83 -0
- package/dist/types/bar-list.d.ts +35 -0
- package/dist/types/breadcrumb.d.ts +62 -0
- package/dist/types/chart-brush.d.ts +35 -0
- package/dist/types/chart-themes.d.ts +229 -0
- package/dist/types/chart.d.ts +570 -0
- package/dist/types/checklist.d.ts +71 -0
- package/dist/types/code-block.d.ts +32 -0
- package/dist/types/collections.d.ts +111 -4
- package/dist/types/color-picker.d.ts +38 -0
- package/dist/types/command.d.ts +6 -3
- package/dist/types/comment-thread.d.ts +48 -0
- package/dist/types/confirmation.d.ts +60 -0
- package/dist/types/context-menu.d.ts +17 -0
- package/dist/types/controls.d.ts +100 -17
- package/dist/types/conversation.d.ts +130 -0
- package/dist/types/copy-button.d.ts +19 -0
- package/dist/types/core.d.ts +139 -10
- package/dist/types/data-grid.d.ts +76 -0
- package/dist/types/date-picker.d.ts +96 -0
- package/dist/types/diff-view.d.ts +54 -0
- package/dist/types/dot-plot.d.ts +54 -0
- package/dist/types/edit-region.d.ts +121 -0
- package/dist/types/feature-gate.d.ts +22 -0
- package/dist/types/filter-bar.d.ts +65 -0
- package/dist/types/formatted-number.d.ts +38 -0
- package/dist/types/heatmap.d.ts +64 -0
- package/dist/types/in-place.d.ts +24 -0
- package/dist/types/index.d.ts +158 -15
- package/dist/types/inline-citation.d.ts +35 -0
- package/dist/types/inline-edit.d.ts +71 -0
- package/dist/types/input-otp.d.ts +37 -0
- package/dist/types/item-group.d.ts +104 -0
- package/dist/types/line-chart.d.ts +116 -0
- package/dist/types/link.d.ts +11 -0
- package/dist/types/markdown.d.ts +88 -0
- package/dist/types/meter.d.ts +43 -0
- package/dist/types/modal-state.d.ts +62 -0
- package/dist/types/nav.d.ts +8 -1
- package/dist/types/notifications.d.ts +42 -0
- package/dist/types/number-input.d.ts +30 -0
- package/dist/types/overlays.d.ts +51 -17
- package/dist/types/page-header.d.ts +27 -0
- package/dist/types/pagination.d.ts +29 -0
- package/dist/types/palette.d.ts +64 -0
- package/dist/types/password-input.d.ts +22 -0
- package/dist/types/pattern-assistant-conversation.d.ts +55 -0
- package/dist/types/pattern-async-collection.d.ts +34 -0
- package/dist/types/pattern-consequential-action.d.ts +53 -0
- package/dist/types/pattern-edit-record.d.ts +72 -0
- package/dist/types/pattern-review-submit.d.ts +43 -0
- package/dist/types/permission-matrix.d.ts +34 -0
- package/dist/types/plan-picker.d.ts +40 -0
- package/dist/types/prompt-input.d.ts +106 -0
- package/dist/types/property-list.d.ts +67 -0
- package/dist/types/question.d.ts +64 -0
- package/dist/types/relative-time.d.ts +21 -0
- package/dist/types/removal-receipt.d.ts +1180 -0
- package/dist/types/resizable.d.ts +48 -0
- package/dist/types/roving.d.ts +44 -0
- package/dist/types/save-bar.d.ts +38 -0
- package/dist/types/saved-views.d.ts +72 -0
- package/dist/types/scatter-chart.d.ts +60 -0
- package/dist/types/schedule.d.ts +80 -0
- package/dist/types/secret-field.d.ts +33 -0
- package/dist/types/select.d.ts +44 -2
- package/dist/types/separator.d.ts +11 -0
- package/dist/types/settings.d.ts +39 -0
- package/dist/types/sheet.d.ts +1 -1
- package/dist/types/sparkline.d.ts +46 -0
- package/dist/types/split-button.d.ts +21 -0
- package/dist/types/stat.d.ts +54 -0
- package/dist/types/stepper.d.ts +6 -3
- package/dist/types/suggestions.d.ts +29 -0
- package/dist/types/suspense.d.ts +12 -1
- package/dist/types/sync-indicator.d.ts +24 -0
- package/dist/types/tag-input.d.ts +65 -0
- package/dist/types/terminal.d.ts +33 -0
- package/dist/types/thread-list.d.ts +58 -0
- package/dist/types/time-input.d.ts +33 -0
- package/dist/types/timeline.d.ts +38 -0
- package/dist/types/toggle.d.ts +46 -0
- package/dist/types/toolbar.d.ts +34 -0
- package/dist/types/tour.d.ts +23 -0
- package/dist/types/trace.d.ts +65 -0
- package/dist/types/tree.d.ts +71 -0
- package/dist/types-cjs/adapter-codemirror.d.cts +13 -0
- package/dist/types-cjs/agent-fleet.d.cts +166 -0
- package/dist/types-cjs/ai-label.d.cts +30 -0
- package/dist/types-cjs/app-shell.d.cts +83 -0
- package/dist/types-cjs/area-chart.d.cts +80 -0
- package/dist/types-cjs/artifact.d.cts +65 -0
- package/dist/types-cjs/bar-chart.d.cts +83 -0
- package/dist/types-cjs/bar-list.d.cts +35 -0
- package/dist/types-cjs/breadcrumb.d.cts +62 -0
- package/dist/types-cjs/chart-brush.d.cts +35 -0
- package/dist/types-cjs/chart-themes.d.cts +229 -0
- package/dist/types-cjs/chart.d.cts +570 -0
- package/dist/types-cjs/checklist.d.cts +71 -0
- package/dist/types-cjs/code-block.d.cts +32 -0
- package/dist/types-cjs/collections.d.cts +246 -0
- package/dist/types-cjs/color-picker.d.cts +38 -0
- package/dist/types-cjs/command.d.cts +66 -0
- package/dist/types-cjs/comment-thread.d.cts +48 -0
- package/dist/types-cjs/confirmation.d.cts +60 -0
- package/dist/types-cjs/context-menu.d.cts +17 -0
- package/dist/types-cjs/controls.d.cts +360 -0
- package/dist/types-cjs/conversation.d.cts +130 -0
- package/dist/types-cjs/copy-button.d.cts +19 -0
- package/dist/types-cjs/core.d.cts +256 -0
- package/dist/types-cjs/data-grid.d.cts +76 -0
- package/dist/types-cjs/date-picker.d.cts +96 -0
- package/dist/types-cjs/diff-view.d.cts +54 -0
- package/dist/types-cjs/dot-plot.d.cts +54 -0
- package/dist/types-cjs/edit-region.d.cts +121 -0
- package/dist/types-cjs/empty.d.cts +24 -0
- package/dist/types-cjs/feature-gate.d.cts +22 -0
- package/dist/types-cjs/filter-bar.d.cts +65 -0
- package/dist/types-cjs/formatted-number.d.cts +38 -0
- package/dist/types-cjs/heatmap.d.cts +64 -0
- package/dist/types-cjs/in-place.d.cts +24 -0
- package/dist/types-cjs/index.d.cts +154 -0
- package/dist/types-cjs/inline-citation.d.cts +35 -0
- package/dist/types-cjs/inline-edit.d.cts +71 -0
- package/dist/types-cjs/input-otp.d.cts +37 -0
- package/dist/types-cjs/item-group.d.cts +104 -0
- package/dist/types-cjs/line-chart.d.cts +116 -0
- package/dist/types-cjs/link.d.cts +11 -0
- package/dist/types-cjs/markdown.d.cts +88 -0
- package/dist/types-cjs/meter.d.cts +43 -0
- package/dist/types-cjs/modal-state.d.cts +62 -0
- package/dist/types-cjs/nav.d.cts +25 -0
- package/dist/types-cjs/notifications.d.cts +42 -0
- package/dist/types-cjs/number-input.d.cts +30 -0
- package/dist/types-cjs/overlays.d.cts +170 -0
- package/dist/types-cjs/page-header.d.cts +27 -0
- package/dist/types-cjs/pagination.d.cts +29 -0
- package/dist/types-cjs/palette.d.cts +64 -0
- package/dist/types-cjs/password-input.d.cts +22 -0
- package/dist/types-cjs/pattern-assistant-conversation.d.cts +55 -0
- package/dist/types-cjs/pattern-async-collection.d.cts +34 -0
- package/dist/types-cjs/pattern-consequential-action.d.cts +53 -0
- package/dist/types-cjs/pattern-edit-record.d.cts +72 -0
- package/dist/types-cjs/pattern-review-submit.d.cts +43 -0
- package/dist/types-cjs/permission-matrix.d.cts +34 -0
- package/dist/types-cjs/pile.d.cts +27 -0
- package/dist/types-cjs/plan-picker.d.cts +40 -0
- package/dist/types-cjs/prompt-input.d.cts +106 -0
- package/dist/types-cjs/property-list.d.cts +67 -0
- package/dist/types-cjs/question.d.cts +64 -0
- package/dist/types-cjs/relative-time.d.cts +21 -0
- package/dist/types-cjs/removal-receipt.d.cts +1180 -0
- package/dist/types-cjs/resizable.d.cts +48 -0
- package/dist/types-cjs/roving.d.cts +44 -0
- package/dist/types-cjs/save-bar.d.cts +38 -0
- package/dist/types-cjs/saved-views.d.cts +72 -0
- package/dist/types-cjs/scatter-chart.d.cts +60 -0
- package/dist/types-cjs/schedule.d.cts +80 -0
- package/dist/types-cjs/secret-field.d.cts +33 -0
- package/dist/types-cjs/select.d.cts +109 -0
- package/dist/types-cjs/separator.d.cts +11 -0
- package/dist/types-cjs/settings.d.cts +39 -0
- package/dist/types-cjs/sheet.d.cts +27 -0
- package/dist/types-cjs/sparkline.d.cts +46 -0
- package/dist/types-cjs/split-button.d.cts +21 -0
- package/dist/types-cjs/stat.d.cts +54 -0
- package/dist/types-cjs/stepper.d.cts +26 -0
- package/dist/types-cjs/suggestions.d.cts +29 -0
- package/dist/types-cjs/suspense.d.cts +85 -0
- package/dist/types-cjs/sync-indicator.d.cts +24 -0
- package/dist/types-cjs/tag-input.d.cts +65 -0
- package/dist/types-cjs/terminal.d.cts +33 -0
- package/dist/types-cjs/thread-list.d.cts +58 -0
- package/dist/types-cjs/time-input.d.cts +33 -0
- package/dist/types-cjs/timeline.d.cts +38 -0
- package/dist/types-cjs/toggle.d.cts +46 -0
- package/dist/types-cjs/toolbar.d.cts +34 -0
- package/dist/types-cjs/tour.d.cts +23 -0
- package/dist/types-cjs/trace.d.cts +65 -0
- package/dist/types-cjs/tree.d.cts +71 -0
- package/package.json +89 -9
|
@@ -0,0 +1,653 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"rules": [
|
|
4
|
+
{
|
|
5
|
+
"id": "ALT-SEM-001",
|
|
6
|
+
"title": "Interactive controls have keyboard semantics",
|
|
7
|
+
"authority": "normative-standard",
|
|
8
|
+
"diagnosticClass": "deterministic",
|
|
9
|
+
"applicability": "Focusable actions and navigation.",
|
|
10
|
+
"exceptions": [
|
|
11
|
+
"Use links for navigation and buttons for actions; specialized widgets follow their own keyboard model."
|
|
12
|
+
],
|
|
13
|
+
"maturity": "supported",
|
|
14
|
+
"evidenceStatus": "engineering-tested",
|
|
15
|
+
"sources": [
|
|
16
|
+
"wcag22"
|
|
17
|
+
],
|
|
18
|
+
"repair": "Use native semantics; test activation, names and disabled states.",
|
|
19
|
+
"verification": [
|
|
20
|
+
"build/checks/semantics.mjs"
|
|
21
|
+
],
|
|
22
|
+
"criteria": [
|
|
23
|
+
"https://www.w3.org/TR/WCAG22/#keyboard",
|
|
24
|
+
"https://www.w3.org/TR/WCAG22/#name-role-value"
|
|
25
|
+
],
|
|
26
|
+
"reviewedAt": "2026-10-23",
|
|
27
|
+
"owner": "Altitude maintainers"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "ALT-EDIT-001",
|
|
31
|
+
"title": "Retain edits and report persistence truthfully",
|
|
32
|
+
"authority": "contextual-pattern",
|
|
33
|
+
"diagnosticClass": "application-integration",
|
|
34
|
+
"applicability": "Forms that save through an asynchronous service.",
|
|
35
|
+
"exceptions": [
|
|
36
|
+
"A queued write may say queued, never persisted; explicit discard may clear data."
|
|
37
|
+
],
|
|
38
|
+
"maturity": "provisional",
|
|
39
|
+
"evidenceStatus": "requires-application-validation",
|
|
40
|
+
"sources": [
|
|
41
|
+
"govuk-validation"
|
|
42
|
+
],
|
|
43
|
+
"repair": "Keep draft and committed data separate; reject stale responses; retry rejected writes without clearing input.",
|
|
44
|
+
"verification": [
|
|
45
|
+
"build/checks/pattern-workflows.mjs"
|
|
46
|
+
],
|
|
47
|
+
"criteria": [],
|
|
48
|
+
"reviewedAt": "2026-10-23",
|
|
49
|
+
"owner": "Altitude maintainers"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "ALT-EDIT-002",
|
|
53
|
+
"title": "Errors identify and link to the relevant field",
|
|
54
|
+
"authority": "normative-standard",
|
|
55
|
+
"diagnosticClass": "deterministic",
|
|
56
|
+
"applicability": "Detected input errors.",
|
|
57
|
+
"exceptions": [
|
|
58
|
+
"A summary is a contextual implementation, not itself a WCAG requirement; sensitive error detail may be withheld."
|
|
59
|
+
],
|
|
60
|
+
"maturity": "supported",
|
|
61
|
+
"evidenceStatus": "engineering-tested",
|
|
62
|
+
"sources": [
|
|
63
|
+
"wcag22",
|
|
64
|
+
"govuk-validation"
|
|
65
|
+
],
|
|
66
|
+
"repair": "Use one error model for inline messages and summary links; preserve valid description IDs and focus the linked control.",
|
|
67
|
+
"verification": [
|
|
68
|
+
"build/checks/pattern-workflows.mjs",
|
|
69
|
+
"build/checks/semantics.mjs"
|
|
70
|
+
],
|
|
71
|
+
"criteria": [
|
|
72
|
+
"https://www.w3.org/TR/WCAG22/#error-identification",
|
|
73
|
+
"https://www.w3.org/TR/WCAG22/#error-suggestion",
|
|
74
|
+
"https://www.w3.org/TR/WCAG22/#info-and-relationships"
|
|
75
|
+
],
|
|
76
|
+
"reviewedAt": "2026-10-23",
|
|
77
|
+
"owner": "Altitude maintainers"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "ALT-EDIT-003",
|
|
81
|
+
"title": "Choose validation and unsaved-work policy deliberately",
|
|
82
|
+
"authority": "heuristic",
|
|
83
|
+
"diagnosticClass": "contextual-review",
|
|
84
|
+
"applicability": "Editing and attempted cancellation or navigation.",
|
|
85
|
+
"exceptions": [
|
|
86
|
+
"Do not block navigation for pristine forms; autosave requires its own truthful operation model."
|
|
87
|
+
],
|
|
88
|
+
"maturity": "provisional",
|
|
89
|
+
"evidenceStatus": "requires-application-validation",
|
|
90
|
+
"sources": [
|
|
91
|
+
"govuk-validation",
|
|
92
|
+
"task-review"
|
|
93
|
+
],
|
|
94
|
+
"repair": "Document submit/blur timing and connect requestLeave to cancel, router Back and navigation; explain browser unload limits.",
|
|
95
|
+
"verification": [
|
|
96
|
+
"manual: exercise cancel, Back, reload and route change with unsaved data"
|
|
97
|
+
],
|
|
98
|
+
"criteria": [],
|
|
99
|
+
"reviewedAt": "2026-10-23",
|
|
100
|
+
"owner": "Altitude maintainers"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "ALT-COLLECTION-001",
|
|
104
|
+
"title": "Distinguish collection states and retain identity",
|
|
105
|
+
"authority": "contextual-pattern",
|
|
106
|
+
"diagnosticClass": "application-integration",
|
|
107
|
+
"applicability": "Asynchronously loaded collections.",
|
|
108
|
+
"exceptions": [
|
|
109
|
+
"First-use empty and no-results apply only when the application knows the distinction; offline/cache may add states."
|
|
110
|
+
],
|
|
111
|
+
"maturity": "provisional",
|
|
112
|
+
"evidenceStatus": "requires-application-validation",
|
|
113
|
+
"sources": [
|
|
114
|
+
"task-review"
|
|
115
|
+
],
|
|
116
|
+
"repair": "Render loading, refreshing, empty, filtered empty and failure accurately; use stable keys and an explicit selection policy.",
|
|
117
|
+
"verification": [
|
|
118
|
+
"build/checks/pattern-workflows.mjs"
|
|
119
|
+
],
|
|
120
|
+
"criteria": [],
|
|
121
|
+
"reviewedAt": "2026-10-23",
|
|
122
|
+
"owner": "Altitude maintainers"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": "ALT-ACTION-001",
|
|
126
|
+
"title": "Confirm intent separately from operation completion",
|
|
127
|
+
"authority": "contextual-pattern",
|
|
128
|
+
"diagnosticClass": "application-integration",
|
|
129
|
+
"applicability": "Actions with significant consequences.",
|
|
130
|
+
"exceptions": [
|
|
131
|
+
"Direct actions are suitable when real recovery exists; confirmation is not universal."
|
|
132
|
+
],
|
|
133
|
+
"maturity": "provisional",
|
|
134
|
+
"evidenceStatus": "requires-application-validation",
|
|
135
|
+
"sources": [
|
|
136
|
+
"wcag22",
|
|
137
|
+
"task-review"
|
|
138
|
+
],
|
|
139
|
+
"repair": "Name target and consequence; delay success until execute resolves; wire real undo or appropriate review, and logical focus.",
|
|
140
|
+
"verification": [
|
|
141
|
+
"build/checks/pattern-workflows.mjs"
|
|
142
|
+
],
|
|
143
|
+
"criteria": [
|
|
144
|
+
"https://www.w3.org/TR/WCAG22/#error-prevention-legal-financial-data"
|
|
145
|
+
],
|
|
146
|
+
"reviewedAt": "2026-10-23",
|
|
147
|
+
"owner": "Altitude maintainers"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"id": "ALT-REVIEW-001",
|
|
151
|
+
"title": "Allow correction and preserve a truthful receipt",
|
|
152
|
+
"authority": "contextual-pattern",
|
|
153
|
+
"diagnosticClass": "application-integration",
|
|
154
|
+
"applicability": "Processes with a review step before final commitment.",
|
|
155
|
+
"exceptions": [
|
|
156
|
+
"Not every short form needs a separate review screen; redundant-entry and error-prevention criteria have scoped exceptions."
|
|
157
|
+
],
|
|
158
|
+
"maturity": "provisional",
|
|
159
|
+
"evidenceStatus": "requires-application-validation",
|
|
160
|
+
"sources": [
|
|
161
|
+
"wcag22"
|
|
162
|
+
],
|
|
163
|
+
"repair": "Retain applicable answers through correction and failed submission; show a service-issued receipt and a durable destination.",
|
|
164
|
+
"verification": [
|
|
165
|
+
"build/checks/pattern-workflows.mjs"
|
|
166
|
+
],
|
|
167
|
+
"criteria": [
|
|
168
|
+
"https://www.w3.org/TR/WCAG22/#redundant-entry",
|
|
169
|
+
"https://www.w3.org/TR/WCAG22/#error-prevention-legal-financial-data"
|
|
170
|
+
],
|
|
171
|
+
"reviewedAt": "2026-10-23",
|
|
172
|
+
"owner": "Altitude maintainers"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"id": "ALT-STATUS-001",
|
|
176
|
+
"title": "Status is perceivable without moving focus unnecessarily",
|
|
177
|
+
"authority": "normative-standard",
|
|
178
|
+
"diagnosticClass": "deterministic",
|
|
179
|
+
"applicability": "Status messages that do not receive focus.",
|
|
180
|
+
"exceptions": [
|
|
181
|
+
"Urgent errors may use alerts; avoid announcing every keystroke or repeated decorative status."
|
|
182
|
+
],
|
|
183
|
+
"maturity": "supported",
|
|
184
|
+
"evidenceStatus": "engineering-tested",
|
|
185
|
+
"sources": [
|
|
186
|
+
"wcag22"
|
|
187
|
+
],
|
|
188
|
+
"repair": "Use an appropriate live region and concise meaningful messages; test feedback with assistive technology.",
|
|
189
|
+
"verification": [
|
|
190
|
+
"build/checks/pattern-workflows.mjs"
|
|
191
|
+
],
|
|
192
|
+
"criteria": [
|
|
193
|
+
"https://www.w3.org/TR/WCAG22/#status-messages"
|
|
194
|
+
],
|
|
195
|
+
"reviewedAt": "2026-10-23",
|
|
196
|
+
"owner": "Altitude maintainers"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"id": "ALT-VISUAL-001",
|
|
200
|
+
"title": "Height has an equivalent non-depth signal",
|
|
201
|
+
"authority": "altitude-policy",
|
|
202
|
+
"diagnosticClass": "contextual-review",
|
|
203
|
+
"applicability": "All meaning carried by elevation.",
|
|
204
|
+
"exceptions": [
|
|
205
|
+
"Decorative depth carries no required semantic meaning."
|
|
206
|
+
],
|
|
207
|
+
"maturity": "provisional",
|
|
208
|
+
"evidenceStatus": "requires-application-validation",
|
|
209
|
+
"sources": [
|
|
210
|
+
"altitude-elevation"
|
|
211
|
+
],
|
|
212
|
+
"repair": "Pair depth with text, state or border and inspect forced colors/reduced motion.",
|
|
213
|
+
"verification": [
|
|
214
|
+
"manual: forced colors, reduced motion, zoom and RTL review"
|
|
215
|
+
],
|
|
216
|
+
"criteria": [],
|
|
217
|
+
"reviewedAt": "2026-10-23",
|
|
218
|
+
"owner": "Altitude maintainers"
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"id": "ALT-EXP-001",
|
|
222
|
+
"title": "Hold-to-confirm remains a scoped hypothesis",
|
|
223
|
+
"authority": "experimental-hypothesis",
|
|
224
|
+
"diagnosticClass": "contextual-review",
|
|
225
|
+
"applicability": "Considering hold gestures for consequential actions.",
|
|
226
|
+
"exceptions": [
|
|
227
|
+
"Never require a hold as the sole accessible way to complete a task."
|
|
228
|
+
],
|
|
229
|
+
"maturity": "provisional",
|
|
230
|
+
"evidenceStatus": "requires-application-validation",
|
|
231
|
+
"sources": [
|
|
232
|
+
"hold-hypothesis"
|
|
233
|
+
],
|
|
234
|
+
"repair": "Choose review or real recovery from task consequences; evaluate hold benefits with representative users.",
|
|
235
|
+
"verification": [
|
|
236
|
+
"manual: task-based human evaluation"
|
|
237
|
+
],
|
|
238
|
+
"criteria": [],
|
|
239
|
+
"reviewedAt": "2026-10-23",
|
|
240
|
+
"owner": "Altitude maintainers"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"id": "ALT-SETUP-001",
|
|
244
|
+
"title": "Installed guidance and setup versions agree",
|
|
245
|
+
"authority": "altitude-policy",
|
|
246
|
+
"diagnosticClass": "deterministic",
|
|
247
|
+
"applicability": "Projects using the explicit CLI adapter.",
|
|
248
|
+
"exceptions": [
|
|
249
|
+
"Projects may read local guidance directly without configuring an agent."
|
|
250
|
+
],
|
|
251
|
+
"maturity": "supported",
|
|
252
|
+
"evidenceStatus": "engineering-tested",
|
|
253
|
+
"sources": [
|
|
254
|
+
"task-review"
|
|
255
|
+
],
|
|
256
|
+
"repair": "Reinstall/build the matching package and rerun altitude init for configured clients.",
|
|
257
|
+
"verification": [
|
|
258
|
+
"build/checks/guidance.mjs",
|
|
259
|
+
"build/checks/agent-setup.mjs"
|
|
260
|
+
],
|
|
261
|
+
"criteria": [],
|
|
262
|
+
"reviewedAt": "2026-10-23",
|
|
263
|
+
"owner": "Altitude maintainers"
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"id": "ALT-VISUAL-002",
|
|
267
|
+
"title": "One primary action per view",
|
|
268
|
+
"authority": "altitude-policy",
|
|
269
|
+
"diagnosticClass": "deterministic",
|
|
270
|
+
"applicability": "Any view: a page, and each Dialog, Sheet and Popover. Independent parts (cards on a dashboard) can be scoped with PrimaryScope.",
|
|
271
|
+
"exceptions": [
|
|
272
|
+
"A dashboard of independent cards, each with its own task, wrapped in PrimaryScope."
|
|
273
|
+
],
|
|
274
|
+
"maturity": "supported",
|
|
275
|
+
"evidenceStatus": "engineering-tested",
|
|
276
|
+
"sources": [
|
|
277
|
+
"altitude-elevation"
|
|
278
|
+
],
|
|
279
|
+
"repair": "Keep one Button variant=\"primary\" per view (PageHeader's primary slot on a page); make the rest secondary or ghost, or put them in an overflow menu.",
|
|
280
|
+
"verification": [
|
|
281
|
+
"build/checks/primary-scope.mjs"
|
|
282
|
+
],
|
|
283
|
+
"criteria": [],
|
|
284
|
+
"reviewedAt": "2026-10-29",
|
|
285
|
+
"owner": "Altitude maintainers"
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"id": "ALT-VISUAL-003",
|
|
289
|
+
"title": "Persistent states don't rise",
|
|
290
|
+
"authority": "altitude-policy",
|
|
291
|
+
"diagnosticClass": "contextual-review",
|
|
292
|
+
"applicability": "States that feel important but persist: unread, invited (awaiting someone else), recommended or most popular, current plan or item, locked behind a plan, an app-wide mode, proposed by an agent, streaming text.",
|
|
293
|
+
"exceptions": [
|
|
294
|
+
"A state that is live right now (a write in flight, something in a hand, an action being asked for) uses its own signal from Elevation.md."
|
|
295
|
+
],
|
|
296
|
+
"maturity": "provisional",
|
|
297
|
+
"evidenceStatus": "requires-application-validation",
|
|
298
|
+
"sources": [
|
|
299
|
+
"altitude-elevation"
|
|
300
|
+
],
|
|
301
|
+
"repair": "Say the state in words, a plate, a dot, weight or an ARIA state, and keep the thing at its own level: unread is a dot and weight 600; invited is a plate, not pending; recommended is a plate with only its CTA at level 2; current is the word and aria-current; locked stays live and opens the upgrade; a mode is a strip and a viewport border; an agent's proposal is raised, asking; streaming text stays on the ground and settles once. See Elevation.md, \"States that don't rise\".",
|
|
302
|
+
"verification": [
|
|
303
|
+
"manual:review the screen against Elevation.md, \"States that don't rise\""
|
|
304
|
+
],
|
|
305
|
+
"criteria": [],
|
|
306
|
+
"reviewedAt": "2026-10-29",
|
|
307
|
+
"owner": "Altitude maintainers"
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"id": "ALT-SETTINGS-001",
|
|
311
|
+
"title": "Each settings section applies now or saves together, and destructive actions sit in a final danger zone",
|
|
312
|
+
"authority": "contextual-pattern",
|
|
313
|
+
"diagnosticClass": "contextual-review",
|
|
314
|
+
"applicability": "Settings pages that combine standalone preferences, records saved together and destructive actions.",
|
|
315
|
+
"exceptions": [
|
|
316
|
+
"A page with only one mode needs only that mode; a single destructive action outside settings follows the consequential-action contract alone."
|
|
317
|
+
],
|
|
318
|
+
"maturity": "provisional",
|
|
319
|
+
"evidenceStatus": "requires-application-validation",
|
|
320
|
+
"sources": [
|
|
321
|
+
"nng-toggle",
|
|
322
|
+
"task-review"
|
|
323
|
+
],
|
|
324
|
+
"repair": "Give each section one mode: apply-now controls report their own write (pending, committed, failed with the control restored); fields that form one record join one draft saved once. Move delete, transfer and similar actions to a final section titled Danger zone, at the same height as the others, each named by its outcome with its consequence in words.",
|
|
325
|
+
"verification": [
|
|
326
|
+
"build/checks/settings-pattern.mjs"
|
|
327
|
+
],
|
|
328
|
+
"criteria": [],
|
|
329
|
+
"reviewedAt": "2026-10-30",
|
|
330
|
+
"owner": "Altitude maintainers"
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
"id": "ALT-MEMBERS-001",
|
|
334
|
+
"title": "Invitations are settled records, and guards are said where the action would be",
|
|
335
|
+
"authority": "altitude-policy",
|
|
336
|
+
"diagnosticClass": "contextual-review",
|
|
337
|
+
"applicability": "Member lists with invitations, roles and removal.",
|
|
338
|
+
"exceptions": [
|
|
339
|
+
"Products without invitations or roles apply only the guard requirement."
|
|
340
|
+
],
|
|
341
|
+
"maturity": "provisional",
|
|
342
|
+
"evidenceStatus": "requires-application-validation",
|
|
343
|
+
"sources": [
|
|
344
|
+
"altitude-elevation",
|
|
345
|
+
"task-review"
|
|
346
|
+
],
|
|
347
|
+
"repair": "Draw an invitation awaiting acceptance on the ground with an Invited plate, its role and sent date; hover only while sending. Replace an action a person may not take (removing the last owner, demoting yourself out of the last admin role) with the reason in words, and enforce the same guard on the server.",
|
|
348
|
+
"verification": [
|
|
349
|
+
"build/checks/members-pattern.mjs"
|
|
350
|
+
],
|
|
351
|
+
"criteria": [],
|
|
352
|
+
"reviewedAt": "2026-10-30",
|
|
353
|
+
"owner": "Altitude maintainers"
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"id": "ALT-BILLING-001",
|
|
357
|
+
"title": "Usage is a reading, a plan change is reviewed with its cost, and a downgrade lists what's lost",
|
|
358
|
+
"authority": "contextual-pattern",
|
|
359
|
+
"diagnosticClass": "contextual-review",
|
|
360
|
+
"applicability": "Billing pages with usage limits and plan changes.",
|
|
361
|
+
"exceptions": [
|
|
362
|
+
"Prices and proration are the billing service's; the interface shows what the service quotes and never computes a charge itself."
|
|
363
|
+
],
|
|
364
|
+
"maturity": "provisional",
|
|
365
|
+
"evidenceStatus": "requires-application-validation",
|
|
366
|
+
"sources": [
|
|
367
|
+
"wcag22",
|
|
368
|
+
"altitude-elevation",
|
|
369
|
+
"task-review"
|
|
370
|
+
],
|
|
371
|
+
"repair": "Draw each quota as a Meter with its state in words, never Progress; mark the rest of the cycle as projected; review a plan change with the quoted proration as a sentence before confirming, and claim it only after the service confirms; list what a downgrade removes and name its button by the outcome.",
|
|
372
|
+
"verification": [
|
|
373
|
+
"build/checks/billing-pattern.mjs"
|
|
374
|
+
],
|
|
375
|
+
"criteria": [
|
|
376
|
+
"https://www.w3.org/TR/WCAG22/#error-prevention-legal-financial-data"
|
|
377
|
+
],
|
|
378
|
+
"reviewedAt": "2026-10-30",
|
|
379
|
+
"owner": "Altitude maintainers"
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"id": "ALT-AUTH-001",
|
|
383
|
+
"title": "Auth copy reveals nothing, fields carry autocomplete tokens, and nothing is submitted for the person",
|
|
384
|
+
"authority": "contextual-pattern",
|
|
385
|
+
"diagnosticClass": "contextual-review",
|
|
386
|
+
"applicability": "Sign-in, sign-up, verification, two-factor and reset screens.",
|
|
387
|
+
"exceptions": [
|
|
388
|
+
"Products that delegate authentication to a hosted provider apply this to the parts they render."
|
|
389
|
+
],
|
|
390
|
+
"maturity": "provisional",
|
|
391
|
+
"evidenceStatus": "requires-application-validation",
|
|
392
|
+
"sources": [
|
|
393
|
+
"owasp-auth",
|
|
394
|
+
"wcag22"
|
|
395
|
+
],
|
|
396
|
+
"repair": "Use responses that hold whether or not the account exists; state rate limits with the wait; give every field its autocomplete token and allow paste; keep Verify and Sign in as buttons the person presses; keep the email across steps; offer a path that isn't a cognitive test.",
|
|
397
|
+
"verification": [
|
|
398
|
+
"build/checks/auth-pattern.mjs"
|
|
399
|
+
],
|
|
400
|
+
"criteria": [
|
|
401
|
+
"https://www.w3.org/TR/WCAG22/#accessible-authentication-minimum",
|
|
402
|
+
"https://www.w3.org/TR/WCAG22/#identify-input-purpose"
|
|
403
|
+
],
|
|
404
|
+
"reviewedAt": "2026-10-30",
|
|
405
|
+
"owner": "Altitude maintainers"
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
"id": "ALT-AUDIT-001",
|
|
409
|
+
"title": "Audit entries are flush sentences that expand to their change, and export is a job",
|
|
410
|
+
"authority": "altitude-policy",
|
|
411
|
+
"diagnosticClass": "contextual-review",
|
|
412
|
+
"applicability": "Audit logs and activity feeds.",
|
|
413
|
+
"exceptions": [
|
|
414
|
+
"Entries that link somewhere may lift when pointed at; nothing else does."
|
|
415
|
+
],
|
|
416
|
+
"maturity": "provisional",
|
|
417
|
+
"evidenceStatus": "requires-application-validation",
|
|
418
|
+
"sources": [
|
|
419
|
+
"altitude-elevation",
|
|
420
|
+
"task-review"
|
|
421
|
+
],
|
|
422
|
+
"repair": "Render each entry as a flush row that reads as one sentence with its actor, exact time and origin; expand it to the before and after; keep the workspace log and a record's feed apart; run export as a task with progress, then offer the download and log the export.",
|
|
423
|
+
"verification": [
|
|
424
|
+
"build/checks/audit-log-pattern.mjs"
|
|
425
|
+
],
|
|
426
|
+
"criteria": [],
|
|
427
|
+
"reviewedAt": "2026-10-30",
|
|
428
|
+
"owner": "Altitude maintainers"
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
"id": "ALT-IMPORT-001",
|
|
432
|
+
"title": "Mapping shows what's left, invalid cells sink with their problem, and the import ends with a receipt",
|
|
433
|
+
"authority": "altitude-policy",
|
|
434
|
+
"diagnosticClass": "contextual-review",
|
|
435
|
+
"applicability": "File imports with mapping and row validation.",
|
|
436
|
+
"exceptions": [
|
|
437
|
+
"Imports with a fixed format skip mapping; the fix, review and receipt still apply."
|
|
438
|
+
],
|
|
439
|
+
"maturity": "provisional",
|
|
440
|
+
"evidenceStatus": "requires-application-validation",
|
|
441
|
+
"sources": [
|
|
442
|
+
"altitude-elevation",
|
|
443
|
+
"task-review"
|
|
444
|
+
],
|
|
445
|
+
"repair": "Give each source column a Select that fills when mapped and list unmapped required fields in words; show invalid cells as trenches with their problem in the cell's description and announce the count as it changes; review in one sentence of consequences; run the import as a job with progress, cancellation where supported, and a receipt of imported, skipped and failed rows.",
|
|
446
|
+
"verification": [
|
|
447
|
+
"build/checks/import-pattern.mjs"
|
|
448
|
+
],
|
|
449
|
+
"criteria": [],
|
|
450
|
+
"reviewedAt": "2026-10-30",
|
|
451
|
+
"owner": "Altitude maintainers"
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"id": "ALT-SYNC-001",
|
|
455
|
+
"title": "Nothing is saved until the server says so, queued work is visible, and no edit is dropped silently",
|
|
456
|
+
"authority": "contextual-pattern",
|
|
457
|
+
"diagnosticClass": "application-integration",
|
|
458
|
+
"applicability": "Autosaving, optimistic and local-first work, and expiring sessions.",
|
|
459
|
+
"exceptions": [
|
|
460
|
+
"Automatic merges need no prompt; only conflicts the merge strategy can't resolve ask the person."
|
|
461
|
+
],
|
|
462
|
+
"maturity": "provisional",
|
|
463
|
+
"evidenceStatus": "requires-application-validation",
|
|
464
|
+
"sources": [
|
|
465
|
+
"task-review",
|
|
466
|
+
"wcag22"
|
|
467
|
+
],
|
|
468
|
+
"repair": "Keep each change pending until acknowledged and say Saved only when the queue is empty; show offline changes as waiting with a count; show unresolved conflicts with both versions, the other in its author's presence colour and name, and say where the version not kept went; warn before a session expires, offer to extend it and keep drafts across re-authentication.",
|
|
469
|
+
"verification": [
|
|
470
|
+
"build/checks/sync-pattern.mjs"
|
|
471
|
+
],
|
|
472
|
+
"criteria": [
|
|
473
|
+
"https://www.w3.org/TR/WCAG22/#timing-adjustable"
|
|
474
|
+
],
|
|
475
|
+
"reviewedAt": "2026-10-30",
|
|
476
|
+
"owner": "Altitude maintainers"
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
"id": "ALT-DEV-001",
|
|
480
|
+
"title": "A secret is shown once behind an acknowledgement, listed masked, and its roll or revocation says what happens",
|
|
481
|
+
"authority": "contextual-pattern",
|
|
482
|
+
"diagnosticClass": "contextual-review",
|
|
483
|
+
"applicability": "API keys, signing secrets and integrations.",
|
|
484
|
+
"exceptions": [
|
|
485
|
+
"Products that deliberately allow revealing a stored secret offer it on demand, masked by default."
|
|
486
|
+
],
|
|
487
|
+
"maturity": "provisional",
|
|
488
|
+
"evidenceStatus": "requires-application-validation",
|
|
489
|
+
"sources": [
|
|
490
|
+
"task-review"
|
|
491
|
+
],
|
|
492
|
+
"repair": "Show a new secret in full once, in a dialog that closes only after the person confirms they saved it; list secrets masked with their last use; say a roll's overlap window before and after; name what breaks before revoking or disconnecting; show a retry as a pending write with its attempt.",
|
|
493
|
+
"verification": [
|
|
494
|
+
"build/checks/developer-settings-pattern.mjs"
|
|
495
|
+
],
|
|
496
|
+
"criteria": [],
|
|
497
|
+
"reviewedAt": "2026-10-30",
|
|
498
|
+
"owner": "Altitude maintainers"
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
"id": "ALT-AGENT-001",
|
|
502
|
+
"title": "Each agent state is one reading, approval scales with consequence, and changes keep their provenance",
|
|
503
|
+
"authority": "altitude-policy",
|
|
504
|
+
"diagnosticClass": "contextual-review",
|
|
505
|
+
"applicability": "Embedded agents that act on someone's behalf.",
|
|
506
|
+
"exceptions": [
|
|
507
|
+
"Steps with a real undo may run without approval; the application decides which."
|
|
508
|
+
],
|
|
509
|
+
"maturity": "provisional",
|
|
510
|
+
"evidenceStatus": "requires-application-validation",
|
|
511
|
+
"sources": [
|
|
512
|
+
"altitude-elevation",
|
|
513
|
+
"task-review"
|
|
514
|
+
],
|
|
515
|
+
"repair": "Draw a proposal as raised and asking, never pending; hover only once approved and executing; land on the runtime's confirmation; sink failures with Retry; require a Confirmation for external or irreversible steps and a hold or stationary dialog for the most severe; put an AI label and the approver on every change; announce step changes politely and never token by token.",
|
|
516
|
+
"verification": [
|
|
517
|
+
"build/checks/agent-action-pattern.mjs"
|
|
518
|
+
],
|
|
519
|
+
"criteria": [],
|
|
520
|
+
"reviewedAt": "2026-10-30",
|
|
521
|
+
"owner": "Altitude maintainers"
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
"id": "ALT-ONBOARD-001",
|
|
525
|
+
"title": "Setup tasks are stamped when they happen, progress is a reading, and tours wait to be asked",
|
|
526
|
+
"authority": "altitude-policy",
|
|
527
|
+
"diagnosticClass": "contextual-review",
|
|
528
|
+
"applicability": "First-run setup, empty states, tours and release notes.",
|
|
529
|
+
"exceptions": [
|
|
530
|
+
"A tour may be offered once after a change to existing UI; it still never starts on every visit."
|
|
531
|
+
],
|
|
532
|
+
"maturity": "provisional",
|
|
533
|
+
"evidenceStatus": "requires-application-validation",
|
|
534
|
+
"sources": [
|
|
535
|
+
"altitude-elevation",
|
|
536
|
+
"task-review"
|
|
537
|
+
],
|
|
538
|
+
"repair": "Stamp a setup task done from the application event, not a click on the item; show progress as a Meter; open each empty region with its one action; offer tours rather than starting them, keep them short and never dim the page; count only unseen changes; make every onboarding surface dismissible and re-findable from Help.",
|
|
539
|
+
"verification": [
|
|
540
|
+
"build/checks/onboarding-pattern.mjs"
|
|
541
|
+
],
|
|
542
|
+
"criteria": [],
|
|
543
|
+
"reviewedAt": "2026-10-30",
|
|
544
|
+
"owner": "Altitude maintainers"
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
"id": "ALT-LAYOUT-001",
|
|
548
|
+
"title": "A screen's frame is chosen from its task, with one lead and one primary action named first",
|
|
549
|
+
"authority": "altitude-policy",
|
|
550
|
+
"diagnosticClass": "contextual-review",
|
|
551
|
+
"applicability": "Any new screen or app: its frame, what leads and where the primary action sits.",
|
|
552
|
+
"exceptions": [
|
|
553
|
+
"An existing product keeps its navigation frame; the view inside it still names its task and lead."
|
|
554
|
+
],
|
|
555
|
+
"maturity": "provisional",
|
|
556
|
+
"evidenceStatus": "requires-application-validation",
|
|
557
|
+
"sources": [
|
|
558
|
+
"altitude-elevation",
|
|
559
|
+
"task-review"
|
|
560
|
+
],
|
|
561
|
+
"repair": "Write down the task, the one thing that leads, the one primary action and what comes next; choose the frame from the task (records, list and detail, focused editor, guided flow, decision, report) instead of the sidebar-and-cards default; put the lead first after the title and make it the largest region; then check that every stated choice is visible on the screen.",
|
|
562
|
+
"verification": [
|
|
563
|
+
"build/checks/screen-layout-pattern.mjs",
|
|
564
|
+
"build/checks/render-tells.mjs"
|
|
565
|
+
],
|
|
566
|
+
"criteria": [],
|
|
567
|
+
"reviewedAt": "2026-10-30",
|
|
568
|
+
"owner": "Altitude maintainers"
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
"id": "ALT-CONVO-001",
|
|
572
|
+
"title": "A conversation never loses the person's words, completes only when the stream does, and says each failure in words",
|
|
573
|
+
"authority": "altitude-policy",
|
|
574
|
+
"diagnosticClass": "contextual-review",
|
|
575
|
+
"applicability": "Conversations with an assistant: chat, copilots, agent conversations.",
|
|
576
|
+
"exceptions": [
|
|
577
|
+
"What persists across reloads, and for how long, is the application's decision."
|
|
578
|
+
],
|
|
579
|
+
"maturity": "provisional",
|
|
580
|
+
"evidenceStatus": "requires-application-validation",
|
|
581
|
+
"sources": [
|
|
582
|
+
"altitude-elevation",
|
|
583
|
+
"task-review",
|
|
584
|
+
"wcag22"
|
|
585
|
+
],
|
|
586
|
+
"repair": "Guard against double submits; ignore events from a superseded turn; keep the partial answer on Stop as \"Stopped\"; settle an answer only when the stream says it's complete and show an unfinished one after a reload as \"Interrupted\" with Retry; keep the message when sending fails; say offline, rate limited (with when), context full, refused and outage as distinct states with what to do; announce each answer once, never token by token.",
|
|
587
|
+
"verification": [
|
|
588
|
+
"build/checks/assistant-conversation-pattern.mjs",
|
|
589
|
+
"build/checks/pattern-workflows.mjs"
|
|
590
|
+
],
|
|
591
|
+
"criteria": [],
|
|
592
|
+
"reviewedAt": "2026-10-30",
|
|
593
|
+
"owner": "Altitude maintainers"
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
"id": "ALT-SEM-002",
|
|
597
|
+
"title": "Links, buttons, fields, images and headings name what they are",
|
|
598
|
+
"authority": "normative-standard",
|
|
599
|
+
"diagnosticClass": "contextual-review",
|
|
600
|
+
"applicability": "Every link, button (including icon-only ones), form field, informative image and heading in a view.",
|
|
601
|
+
"exceptions": [
|
|
602
|
+
"A decorative image takes an empty alt and needs no name.",
|
|
603
|
+
"Repeated links in a list (\"Edit\") are acceptable when their accessible name adds the object (\"Edit invoice 1043\")."
|
|
604
|
+
],
|
|
605
|
+
"maturity": "provisional",
|
|
606
|
+
"evidenceStatus": "requires-application-validation",
|
|
607
|
+
"sources": [
|
|
608
|
+
"wcag22",
|
|
609
|
+
"altitude-fundamentals"
|
|
610
|
+
],
|
|
611
|
+
"repair": "Name links by destination, not \"Learn more\" or \"Click here\"; name buttons by verb and object; give every field a visible label, never a placeholder alone; describe what an image shows or mark it decorative; make each heading describe its section, with one h1 per view, no skipped levels, and header, nav and main landmarks.",
|
|
612
|
+
"verification": [
|
|
613
|
+
"build/checks/tells-lint.mjs",
|
|
614
|
+
"manual: read the view's links, buttons and headings out of context with a screen reader's rotor or list"
|
|
615
|
+
],
|
|
616
|
+
"criteria": [
|
|
617
|
+
"https://www.w3.org/TR/WCAG22/#link-purpose-in-context",
|
|
618
|
+
"https://www.w3.org/TR/WCAG22/#headings-and-labels",
|
|
619
|
+
"https://www.w3.org/TR/WCAG22/#label-in-name",
|
|
620
|
+
"https://www.w3.org/TR/WCAG22/#non-text-content",
|
|
621
|
+
"https://www.w3.org/TR/WCAG22/#labels-or-instructions",
|
|
622
|
+
"https://www.w3.org/TR/WCAG22/#info-and-relationships"
|
|
623
|
+
],
|
|
624
|
+
"reviewedAt": "2026-11-01",
|
|
625
|
+
"owner": "Altitude maintainers"
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
"id": "ALT-HONEST-001",
|
|
629
|
+
"title": "Emphasis serves the person's task: no false urgency, hidden terms, pre-selected costs or traps",
|
|
630
|
+
"authority": "altitude-policy",
|
|
631
|
+
"diagnosticClass": "contextual-review",
|
|
632
|
+
"applicability": "Sign-up, subscription, upgrade, checkout, discount, newsletter, consent and cancellation flows, and any overlay that asks for a decision.",
|
|
633
|
+
"exceptions": [
|
|
634
|
+
"A real deadline (a trial end, a session timeout) is stated with its time.",
|
|
635
|
+
"A recommendation is shown as a plate or a sentence, not with extra height or size."
|
|
636
|
+
],
|
|
637
|
+
"maturity": "provisional",
|
|
638
|
+
"evidenceStatus": "requires-application-validation",
|
|
639
|
+
"sources": [
|
|
640
|
+
"altitude-fundamentals",
|
|
641
|
+
"altitude-elevation",
|
|
642
|
+
"deceptive-patterns-llm"
|
|
643
|
+
],
|
|
644
|
+
"repair": "Remove countdowns and scarcity claims with no real limit; in offers the product makes, make declining at least a secondary button, as findable as accepting, named plainly and never shaming; pre-select nothing that costs money, shares data or subscribes; let every overlay close with Escape, and give anything that blocks the page a visible close or Cancel; put prices and terms beside their action at body size; let people leave in no more steps than they joined; show only real reviews and counts, saying how they were chosen.",
|
|
645
|
+
"verification": [
|
|
646
|
+
"manual: review revenue, retention and data-collection flows for each deceptive pattern type, comparing the steps to accept and to decline"
|
|
647
|
+
],
|
|
648
|
+
"criteria": [],
|
|
649
|
+
"reviewedAt": "2026-11-01",
|
|
650
|
+
"owner": "Altitude maintainers"
|
|
651
|
+
}
|
|
652
|
+
]
|
|
653
|
+
}
|