altitude-design 0.2.0 → 0.3.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 +46 -8
- 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 +3165 -246
- package/dist/altitude.iife.js +33 -5
- package/dist/altitude.no-fonts.css +3165 -246
- 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 +19009 -1854
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +19009 -1854
- 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 +116 -5
- 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 +134 -22
- 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 +159 -14
- 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 +56 -15
- 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 +85 -0
- 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 +90 -9
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# App skeleton
|
|
2
|
+
|
|
3
|
+
Start from the task: [screen layout](patterns/screen-layout.md) chooses a screen's frame from what the person came to do. This skeleton is the records frame, for finding, comparing and acting on many similar records; a focused editor, a decision or a report is laid out differently.
|
|
4
|
+
|
|
5
|
+
A starting point for a records app, with Altitude's parts composed the way they're meant to be: copy it, then replace the data and the services. It's the Storybook preview "Patterns/AppSkeleton", and its source is `build/fixtures/patterns/app-skeleton.jsx` in the repository, type-checked against the public declarations.
|
|
6
|
+
|
|
7
|
+
## What it composes
|
|
8
|
+
|
|
9
|
+
- **The frame**: `AppShell` with a `Sidebar` of destinations (the current one on a raised pill) and a top bar with search. The shell is on the ground; nothing in it rises except what's pointed at.
|
|
10
|
+
- **A list page**: `PageHeader` with the view's one primary action ("Add customer") and a secondary one; a `FilterBar`; a `DataTable` with selection (a counted action for the selected rows) and server pagination. Follow the [async collection](patterns/async-collection.md) contract for loading, empty and failure states.
|
|
11
|
+
- **A record**: clicking a row opens it in a `Sheet` with a `PropertyList` whose values are edited in place. Closing the sheet returns focus to the row.
|
|
12
|
+
- **Settings**: `SettingsSection` and `SettingsRow`, fields saved together with the `SaveBar`, and a switch that applies immediately. See the [settings](patterns/settings.md) contract.
|
|
13
|
+
- **An empty view**: an `EmptyState` with its one action.
|
|
14
|
+
|
|
15
|
+
## Rules it keeps
|
|
16
|
+
|
|
17
|
+
One primary action per view (`ALT-VISUAL-002`); the single summit (only a dialog or sheet reaches the top level, one at a time); states that don't rise (`ALT-VISUAL-003`). `build/checks/app-skeleton.mjs` checks the composition in a browser: one primary per view, keyboard navigation through the sidebar, filtering, paging, selection, the sheet and its focus return, and the SaveBar. Replace its demo services with yours and keep those behaviours.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"sources": [
|
|
4
|
+
{
|
|
5
|
+
"id": "wcag22",
|
|
6
|
+
"authority": "normative-standard",
|
|
7
|
+
"title": "W3C WCAG 2.2",
|
|
8
|
+
"url": "https://www.w3.org/TR/WCAG22/",
|
|
9
|
+
"status": "published-standard",
|
|
10
|
+
"applicability": "Complete pages and processes; individual success criteria have distinct applicability and exceptions.",
|
|
11
|
+
"reviewed": "2026-10-23"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"id": "apg-dialog",
|
|
15
|
+
"authority": "contextual-pattern",
|
|
16
|
+
"title": "WAI-ARIA APG modal dialog",
|
|
17
|
+
"url": "https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/",
|
|
18
|
+
"status": "informative-guidance",
|
|
19
|
+
"applicability": "Modal dialogs; test supported browser and assistive-technology combinations.",
|
|
20
|
+
"reviewed": "2026-10-23"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "govuk-validation",
|
|
24
|
+
"authority": "contextual-pattern",
|
|
25
|
+
"title": "GOV.UK validation",
|
|
26
|
+
"url": "https://design-system.service.gov.uk/patterns/validation/",
|
|
27
|
+
"status": "practice-guidance",
|
|
28
|
+
"applicability": "Service forms; earlier validation requires task-specific justification.",
|
|
29
|
+
"reviewed": "2026-10-23"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "altitude-elevation",
|
|
33
|
+
"authority": "altitude-policy",
|
|
34
|
+
"title": "Altitude Elevation",
|
|
35
|
+
"url": "visual/Elevation.md",
|
|
36
|
+
"status": "implemented-policy",
|
|
37
|
+
"applicability": "Altitude visual language; not evidence of improved human performance.",
|
|
38
|
+
"reviewed": "2026-10-23"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "task-review",
|
|
42
|
+
"authority": "heuristic",
|
|
43
|
+
"title": "Task-context review",
|
|
44
|
+
"url": "principles.md",
|
|
45
|
+
"status": "expert-judgment",
|
|
46
|
+
"applicability": "Actual audience, terminology and consequences require review.",
|
|
47
|
+
"reviewed": "2026-10-23"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "hold-hypothesis",
|
|
51
|
+
"authority": "experimental-hypothesis",
|
|
52
|
+
"title": "Hold-to-confirm task benefit",
|
|
53
|
+
"url": "visual/Research.md",
|
|
54
|
+
"status": "unvalidated-hypothesis",
|
|
55
|
+
"applicability": "Scoped option only; no universal destructive-action mandate.",
|
|
56
|
+
"reviewed": "2026-10-23"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "nng-toggle",
|
|
60
|
+
"authority": "contextual-pattern",
|
|
61
|
+
"title": "Nielsen Norman Group: toggle-switch guidelines",
|
|
62
|
+
"url": "https://www.nngroup.com/articles/toggle-switch-guidelines/",
|
|
63
|
+
"status": "practice-guidance",
|
|
64
|
+
"applicability": "Binary settings that take effect immediately; settings saved with a form use checkboxes or other controls submitted together.",
|
|
65
|
+
"reviewed": "2026-10-30"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "owasp-auth",
|
|
69
|
+
"authority": "contextual-pattern",
|
|
70
|
+
"title": "OWASP Authentication Cheat Sheet",
|
|
71
|
+
"url": "https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html",
|
|
72
|
+
"status": "practice-guidance",
|
|
73
|
+
"applicability": "Authentication responses, error messages and rate limiting; implementation security remains the application's.",
|
|
74
|
+
"reviewed": "2026-10-30"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "altitude-fundamentals",
|
|
78
|
+
"authority": "altitude-policy",
|
|
79
|
+
"title": "Altitude Fundamentals",
|
|
80
|
+
"url": "visual/Fundamentals.md",
|
|
81
|
+
"status": "implemented-policy",
|
|
82
|
+
"applicability": "The established design laws generated interfaces break, and the Altitude rule that answers each; not evidence of improved human performance.",
|
|
83
|
+
"reviewed": "2026-11-01"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "deceptive-patterns-llm",
|
|
87
|
+
"authority": "heuristic",
|
|
88
|
+
"title": "Deceptive designs in LLM-generated interfaces (Chen et al., arXiv 2502.13499; Krauß et al., CHI 2025)",
|
|
89
|
+
"url": "https://arxiv.org/abs/2502.13499v1",
|
|
90
|
+
"status": "research-preprint",
|
|
91
|
+
"applicability": "Ecommerce and sign-up components generated by language models; prevalence findings, not a complete taxonomy.",
|
|
92
|
+
"reviewed": "2026-11-01"
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"package": "altitude-design",
|
|
4
|
+
"version": "0.3.0",
|
|
5
|
+
"entry": "README.md",
|
|
6
|
+
"patterns": [
|
|
7
|
+
{
|
|
8
|
+
"id": "agent-action",
|
|
9
|
+
"title": "Agent action",
|
|
10
|
+
"intents": [
|
|
11
|
+
"agent",
|
|
12
|
+
"ai assistant",
|
|
13
|
+
"assistant",
|
|
14
|
+
"tool approval",
|
|
15
|
+
"human in the loop",
|
|
16
|
+
"copilot",
|
|
17
|
+
"ai action"
|
|
18
|
+
],
|
|
19
|
+
"purpose": "Let an agent propose, wait for approval, run, recover and leave provenance, with each state drawn as one reading.",
|
|
20
|
+
"document": "patterns/agent-action.md",
|
|
21
|
+
"metadata": "patterns/agent-action.json",
|
|
22
|
+
"rules": [
|
|
23
|
+
"ALT-AGENT-001",
|
|
24
|
+
"ALT-ACTION-001",
|
|
25
|
+
"ALT-STATUS-001",
|
|
26
|
+
"ALT-VISUAL-003"
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "assistant-conversation",
|
|
31
|
+
"title": "Assistant conversation",
|
|
32
|
+
"intents": [
|
|
33
|
+
"chat",
|
|
34
|
+
"assistant",
|
|
35
|
+
"copilot",
|
|
36
|
+
"chatbot",
|
|
37
|
+
"agent conversation",
|
|
38
|
+
"ai chat"
|
|
39
|
+
],
|
|
40
|
+
"purpose": "Send, stream, stop, retry and recover in a conversation with an assistant, without losing the person's words or claiming an answer is complete before it is.",
|
|
41
|
+
"document": "patterns/assistant-conversation.md",
|
|
42
|
+
"metadata": "patterns/assistant-conversation.json",
|
|
43
|
+
"rules": [
|
|
44
|
+
"ALT-CONVO-001",
|
|
45
|
+
"ALT-AGENT-001",
|
|
46
|
+
"ALT-STATUS-001",
|
|
47
|
+
"ALT-VISUAL-003"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "async-collection",
|
|
52
|
+
"title": "Async collection",
|
|
53
|
+
"intents": [
|
|
54
|
+
"search",
|
|
55
|
+
"filter",
|
|
56
|
+
"browse",
|
|
57
|
+
"list",
|
|
58
|
+
"records",
|
|
59
|
+
"collection"
|
|
60
|
+
],
|
|
61
|
+
"purpose": "Find records while understanding loading, empty and failure states.",
|
|
62
|
+
"document": "patterns/async-collection.md",
|
|
63
|
+
"metadata": "patterns/async-collection.json",
|
|
64
|
+
"rules": [
|
|
65
|
+
"ALT-COLLECTION-001",
|
|
66
|
+
"ALT-STATUS-001",
|
|
67
|
+
"ALT-VISUAL-001"
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"id": "audit-log",
|
|
72
|
+
"title": "Audit log",
|
|
73
|
+
"intents": [
|
|
74
|
+
"audit log",
|
|
75
|
+
"audit",
|
|
76
|
+
"activity",
|
|
77
|
+
"history",
|
|
78
|
+
"events",
|
|
79
|
+
"security log"
|
|
80
|
+
],
|
|
81
|
+
"purpose": "Find who did what, to which resource, when and from where, and export it.",
|
|
82
|
+
"document": "patterns/audit-log.md",
|
|
83
|
+
"metadata": "patterns/audit-log.json",
|
|
84
|
+
"rules": [
|
|
85
|
+
"ALT-AUDIT-001",
|
|
86
|
+
"ALT-COLLECTION-001",
|
|
87
|
+
"ALT-STATUS-001",
|
|
88
|
+
"ALT-VISUAL-003"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "auth",
|
|
93
|
+
"title": "Auth",
|
|
94
|
+
"intents": [
|
|
95
|
+
"sign in",
|
|
96
|
+
"login",
|
|
97
|
+
"log in",
|
|
98
|
+
"sign up",
|
|
99
|
+
"signup",
|
|
100
|
+
"register",
|
|
101
|
+
"two-factor",
|
|
102
|
+
"2fa",
|
|
103
|
+
"mfa",
|
|
104
|
+
"reset password",
|
|
105
|
+
"forgot password",
|
|
106
|
+
"magic link",
|
|
107
|
+
"sso"
|
|
108
|
+
],
|
|
109
|
+
"purpose": "Sign in, sign up, verify, pass two-factor and reset a password without revealing whether an account exists.",
|
|
110
|
+
"document": "patterns/auth.md",
|
|
111
|
+
"metadata": "patterns/auth.json",
|
|
112
|
+
"rules": [
|
|
113
|
+
"ALT-AUTH-001",
|
|
114
|
+
"ALT-EDIT-002",
|
|
115
|
+
"ALT-STATUS-001"
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"id": "billing",
|
|
120
|
+
"title": "Billing",
|
|
121
|
+
"intents": [
|
|
122
|
+
"billing",
|
|
123
|
+
"change plan",
|
|
124
|
+
"upgrade",
|
|
125
|
+
"downgrade",
|
|
126
|
+
"usage",
|
|
127
|
+
"invoices",
|
|
128
|
+
"subscription",
|
|
129
|
+
"pricing"
|
|
130
|
+
],
|
|
131
|
+
"purpose": "Show usage against limits as readings and change plan with the cost reviewed before it's confirmed.",
|
|
132
|
+
"document": "patterns/billing.md",
|
|
133
|
+
"metadata": "patterns/billing.json",
|
|
134
|
+
"rules": [
|
|
135
|
+
"ALT-BILLING-001",
|
|
136
|
+
"ALT-REVIEW-001",
|
|
137
|
+
"ALT-ACTION-001",
|
|
138
|
+
"ALT-VISUAL-003"
|
|
139
|
+
]
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"id": "consequential-action",
|
|
143
|
+
"title": "Consequential action",
|
|
144
|
+
"intents": [
|
|
145
|
+
"delete",
|
|
146
|
+
"remove",
|
|
147
|
+
"revoke",
|
|
148
|
+
"publish",
|
|
149
|
+
"undo",
|
|
150
|
+
"recover",
|
|
151
|
+
"approve"
|
|
152
|
+
],
|
|
153
|
+
"purpose": "Complete a consequential operation with appropriate review or real recovery.",
|
|
154
|
+
"document": "patterns/consequential-action.md",
|
|
155
|
+
"metadata": "patterns/consequential-action.json",
|
|
156
|
+
"rules": [
|
|
157
|
+
"ALT-ACTION-001",
|
|
158
|
+
"ALT-STATUS-001",
|
|
159
|
+
"ALT-EXP-001"
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"id": "developer-settings",
|
|
164
|
+
"title": "Developer settings",
|
|
165
|
+
"intents": [
|
|
166
|
+
"api keys",
|
|
167
|
+
"api key",
|
|
168
|
+
"webhooks",
|
|
169
|
+
"webhook",
|
|
170
|
+
"integrations",
|
|
171
|
+
"developer settings",
|
|
172
|
+
"developers",
|
|
173
|
+
"oauth"
|
|
174
|
+
],
|
|
175
|
+
"purpose": "Create, roll and revoke API keys, manage webhooks and connect integrations without treating them as ordinary forms.",
|
|
176
|
+
"document": "patterns/developer-settings.md",
|
|
177
|
+
"metadata": "patterns/developer-settings.json",
|
|
178
|
+
"rules": [
|
|
179
|
+
"ALT-DEV-001",
|
|
180
|
+
"ALT-ACTION-001",
|
|
181
|
+
"ALT-STATUS-001"
|
|
182
|
+
]
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"id": "edit-record",
|
|
186
|
+
"title": "Edit record",
|
|
187
|
+
"intents": [
|
|
188
|
+
"edit",
|
|
189
|
+
"settings",
|
|
190
|
+
"form",
|
|
191
|
+
"save",
|
|
192
|
+
"record",
|
|
193
|
+
"profile"
|
|
194
|
+
],
|
|
195
|
+
"purpose": "Edit a durable record without losing work.",
|
|
196
|
+
"document": "patterns/edit-record.md",
|
|
197
|
+
"metadata": "patterns/edit-record.json",
|
|
198
|
+
"rules": [
|
|
199
|
+
"ALT-EDIT-001",
|
|
200
|
+
"ALT-EDIT-002",
|
|
201
|
+
"ALT-EDIT-003",
|
|
202
|
+
"ALT-STATUS-001",
|
|
203
|
+
"ALT-VISUAL-001"
|
|
204
|
+
]
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"id": "import",
|
|
208
|
+
"title": "Import",
|
|
209
|
+
"intents": [
|
|
210
|
+
"import",
|
|
211
|
+
"upload csv",
|
|
212
|
+
"csv",
|
|
213
|
+
"bulk import",
|
|
214
|
+
"map columns",
|
|
215
|
+
"spreadsheet upload"
|
|
216
|
+
],
|
|
217
|
+
"purpose": "Upload a file, map its columns, fix the rows with problems, review and import with a receipt.",
|
|
218
|
+
"document": "patterns/import.md",
|
|
219
|
+
"metadata": "patterns/import.json",
|
|
220
|
+
"rules": [
|
|
221
|
+
"ALT-IMPORT-001",
|
|
222
|
+
"ALT-REVIEW-001",
|
|
223
|
+
"ALT-STATUS-001"
|
|
224
|
+
]
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"id": "members",
|
|
228
|
+
"title": "Members",
|
|
229
|
+
"intents": [
|
|
230
|
+
"members",
|
|
231
|
+
"invite teammates",
|
|
232
|
+
"invite",
|
|
233
|
+
"roles",
|
|
234
|
+
"permissions",
|
|
235
|
+
"team"
|
|
236
|
+
],
|
|
237
|
+
"purpose": "Invite people, change roles and remove access without misdrawing invitations or breaking ownership.",
|
|
238
|
+
"document": "patterns/members.md",
|
|
239
|
+
"metadata": "patterns/members.json",
|
|
240
|
+
"rules": [
|
|
241
|
+
"ALT-MEMBERS-001",
|
|
242
|
+
"ALT-ACTION-001",
|
|
243
|
+
"ALT-STATUS-001",
|
|
244
|
+
"ALT-VISUAL-003"
|
|
245
|
+
]
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"id": "onboarding",
|
|
249
|
+
"title": "Onboarding",
|
|
250
|
+
"intents": [
|
|
251
|
+
"onboarding",
|
|
252
|
+
"getting started",
|
|
253
|
+
"setup checklist",
|
|
254
|
+
"product tour",
|
|
255
|
+
"tour",
|
|
256
|
+
"what's new",
|
|
257
|
+
"whats new",
|
|
258
|
+
"first run",
|
|
259
|
+
"empty state"
|
|
260
|
+
],
|
|
261
|
+
"purpose": "Get someone new to value with a stamped setup checklist, empty states before tours, and what's new.",
|
|
262
|
+
"document": "patterns/onboarding.md",
|
|
263
|
+
"metadata": "patterns/onboarding.json",
|
|
264
|
+
"rules": [
|
|
265
|
+
"ALT-ONBOARD-001",
|
|
266
|
+
"ALT-STATUS-001",
|
|
267
|
+
"ALT-VISUAL-003"
|
|
268
|
+
]
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"id": "review-submit",
|
|
272
|
+
"title": "Review and submit",
|
|
273
|
+
"intents": [
|
|
274
|
+
"review",
|
|
275
|
+
"submit",
|
|
276
|
+
"process",
|
|
277
|
+
"application",
|
|
278
|
+
"wizard",
|
|
279
|
+
"answers"
|
|
280
|
+
],
|
|
281
|
+
"purpose": "Review and correct answers before final commitment.",
|
|
282
|
+
"document": "patterns/review-submit.md",
|
|
283
|
+
"metadata": "patterns/review-submit.json",
|
|
284
|
+
"rules": [
|
|
285
|
+
"ALT-REVIEW-001",
|
|
286
|
+
"ALT-EDIT-001",
|
|
287
|
+
"ALT-EDIT-002",
|
|
288
|
+
"ALT-STATUS-001"
|
|
289
|
+
]
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"id": "screen-layout",
|
|
293
|
+
"title": "Screen layout",
|
|
294
|
+
"intents": [
|
|
295
|
+
"screen layout",
|
|
296
|
+
"page layout",
|
|
297
|
+
"new screen",
|
|
298
|
+
"new page",
|
|
299
|
+
"compose a screen",
|
|
300
|
+
"dashboard",
|
|
301
|
+
"focused editor",
|
|
302
|
+
"approve",
|
|
303
|
+
"approval",
|
|
304
|
+
"report",
|
|
305
|
+
"triage",
|
|
306
|
+
"inbox",
|
|
307
|
+
"setup flow"
|
|
308
|
+
],
|
|
309
|
+
"purpose": "Choose a screen's frame from the person's task, the one thing that leads and the one primary action, instead of inheriting a sidebar, a top bar and a grid of cards.",
|
|
310
|
+
"document": "patterns/screen-layout.md",
|
|
311
|
+
"metadata": "patterns/screen-layout.json",
|
|
312
|
+
"rules": [
|
|
313
|
+
"ALT-LAYOUT-001",
|
|
314
|
+
"ALT-VISUAL-002",
|
|
315
|
+
"ALT-VISUAL-003"
|
|
316
|
+
]
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"id": "settings",
|
|
320
|
+
"title": "Settings",
|
|
321
|
+
"intents": [
|
|
322
|
+
"settings",
|
|
323
|
+
"preferences",
|
|
324
|
+
"workspace settings",
|
|
325
|
+
"account settings",
|
|
326
|
+
"danger zone"
|
|
327
|
+
],
|
|
328
|
+
"purpose": "Change how a workspace or account behaves, deciding per section whether changes apply now or save together.",
|
|
329
|
+
"document": "patterns/settings.md",
|
|
330
|
+
"metadata": "patterns/settings.json",
|
|
331
|
+
"rules": [
|
|
332
|
+
"ALT-SETTINGS-001",
|
|
333
|
+
"ALT-EDIT-001",
|
|
334
|
+
"ALT-EDIT-002",
|
|
335
|
+
"ALT-ACTION-001",
|
|
336
|
+
"ALT-STATUS-001",
|
|
337
|
+
"ALT-VISUAL-003"
|
|
338
|
+
]
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"id": "sync",
|
|
342
|
+
"title": "Sync",
|
|
343
|
+
"intents": [
|
|
344
|
+
"autosave",
|
|
345
|
+
"offline",
|
|
346
|
+
"sync",
|
|
347
|
+
"conflict",
|
|
348
|
+
"session timeout",
|
|
349
|
+
"session expiry",
|
|
350
|
+
"local-first",
|
|
351
|
+
"optimistic"
|
|
352
|
+
],
|
|
353
|
+
"purpose": "Say truthfully what has reached the server, through offline queues, conflicts and expiring sessions.",
|
|
354
|
+
"document": "patterns/sync.md",
|
|
355
|
+
"metadata": "patterns/sync.json",
|
|
356
|
+
"rules": [
|
|
357
|
+
"ALT-SYNC-001",
|
|
358
|
+
"ALT-EDIT-001",
|
|
359
|
+
"ALT-STATUS-001"
|
|
360
|
+
]
|
|
361
|
+
}
|
|
362
|
+
],
|
|
363
|
+
"references": {
|
|
364
|
+
"build/checks/agent-action-pattern.mjs": "references/build/checks/agent-action-pattern.mjs",
|
|
365
|
+
"build/checks/agent-setup.mjs": "references/build/checks/agent-setup.mjs",
|
|
366
|
+
"build/checks/assistant-conversation-pattern.mjs": "references/build/checks/assistant-conversation-pattern.mjs",
|
|
367
|
+
"build/checks/audit-log-pattern.mjs": "references/build/checks/audit-log-pattern.mjs",
|
|
368
|
+
"build/checks/auth-pattern.mjs": "references/build/checks/auth-pattern.mjs",
|
|
369
|
+
"build/checks/billing-pattern.mjs": "references/build/checks/billing-pattern.mjs",
|
|
370
|
+
"build/checks/developer-settings-pattern.mjs": "references/build/checks/developer-settings-pattern.mjs",
|
|
371
|
+
"build/checks/guidance.mjs": "references/build/checks/guidance.mjs",
|
|
372
|
+
"build/checks/import-pattern.mjs": "references/build/checks/import-pattern.mjs",
|
|
373
|
+
"build/checks/members-pattern.mjs": "references/build/checks/members-pattern.mjs",
|
|
374
|
+
"build/checks/onboarding-pattern.mjs": "references/build/checks/onboarding-pattern.mjs",
|
|
375
|
+
"build/checks/pattern-types.mjs": "references/build/checks/pattern-types.mjs",
|
|
376
|
+
"build/checks/pattern-workflows.mjs": "references/build/checks/pattern-workflows.mjs",
|
|
377
|
+
"build/checks/primary-scope.mjs": "references/build/checks/primary-scope.mjs",
|
|
378
|
+
"build/checks/render-tells.mjs": "references/build/checks/render-tells.mjs",
|
|
379
|
+
"build/checks/screen-layout-pattern.mjs": "references/build/checks/screen-layout-pattern.mjs",
|
|
380
|
+
"build/checks/semantics.mjs": "references/build/checks/semantics.mjs",
|
|
381
|
+
"build/checks/settings-pattern.mjs": "references/build/checks/settings-pattern.mjs",
|
|
382
|
+
"build/checks/sync-pattern.mjs": "references/build/checks/sync-pattern.mjs",
|
|
383
|
+
"build/checks/tells-lint.mjs": "references/build/checks/tells-lint.mjs",
|
|
384
|
+
"build/fixtures/pattern-workflows.tsx": "references/build/fixtures/pattern-workflows.tsx",
|
|
385
|
+
"build/fixtures/patterns/agent-action.jsx": "references/build/fixtures/patterns/agent-action.jsx",
|
|
386
|
+
"build/fixtures/patterns/app-skeleton.jsx": "references/build/fixtures/patterns/app-skeleton.jsx",
|
|
387
|
+
"build/fixtures/patterns/assistant-conversation.jsx": "references/build/fixtures/patterns/assistant-conversation.jsx",
|
|
388
|
+
"build/fixtures/patterns/audit-log.jsx": "references/build/fixtures/patterns/audit-log.jsx",
|
|
389
|
+
"build/fixtures/patterns/auth.jsx": "references/build/fixtures/patterns/auth.jsx",
|
|
390
|
+
"build/fixtures/patterns/billing.jsx": "references/build/fixtures/patterns/billing.jsx",
|
|
391
|
+
"build/fixtures/patterns/developer-settings.jsx": "references/build/fixtures/patterns/developer-settings.jsx",
|
|
392
|
+
"build/fixtures/patterns/import.jsx": "references/build/fixtures/patterns/import.jsx",
|
|
393
|
+
"build/fixtures/patterns/members.jsx": "references/build/fixtures/patterns/members.jsx",
|
|
394
|
+
"build/fixtures/patterns/onboarding.jsx": "references/build/fixtures/patterns/onboarding.jsx",
|
|
395
|
+
"build/fixtures/patterns/screen-layout-decision.jsx": "references/build/fixtures/patterns/screen-layout-decision.jsx",
|
|
396
|
+
"build/fixtures/patterns/screen-layout-editor.jsx": "references/build/fixtures/patterns/screen-layout-editor.jsx",
|
|
397
|
+
"build/fixtures/patterns/screen-layout-report.jsx": "references/build/fixtures/patterns/screen-layout-report.jsx",
|
|
398
|
+
"build/fixtures/patterns/settings.jsx": "references/build/fixtures/patterns/settings.jsx",
|
|
399
|
+
"build/fixtures/patterns/sync.jsx": "references/build/fixtures/patterns/sync.jsx",
|
|
400
|
+
"project/components/src/pattern-async-collection.tsx": "references/project/components/src/pattern-async-collection.tsx",
|
|
401
|
+
"project/components/src/pattern-consequential-action.tsx": "references/project/components/src/pattern-consequential-action.tsx",
|
|
402
|
+
"project/components/src/pattern-edit-record.tsx": "references/project/components/src/pattern-edit-record.tsx",
|
|
403
|
+
"project/components/src/pattern-review-submit.tsx": "references/project/components/src/pattern-review-submit.tsx",
|
|
404
|
+
"project/components/src/settings.tsx": "references/project/components/src/settings.tsx",
|
|
405
|
+
"scripts/build-framework-fixture.mjs": "references/scripts/build-framework-fixture.mjs"
|
|
406
|
+
},
|
|
407
|
+
"sourceHashes": {
|
|
408
|
+
"build/checks/agent-action-pattern.mjs": "166f5765839d2f60e7bd84cda2a834100306b3d5a80b4b45b79f2c2d33fce1e7",
|
|
409
|
+
"build/checks/agent-setup.mjs": "670c0786bdfc5739fceae14bd234a2a2c9c6672fbe6fd4e72b15f85647f4a1dd",
|
|
410
|
+
"build/checks/assistant-conversation-pattern.mjs": "f289529c2ee594ad28269337da762f00ae1143f8bb217cf36b1596a5a5363618",
|
|
411
|
+
"build/checks/audit-log-pattern.mjs": "af7770e7bf08caa9e1875161e4fc39509e4f0a84e612cdf79cb547cb6046af74",
|
|
412
|
+
"build/checks/auth-pattern.mjs": "7406cfa7c29c3bb3ac9075c8af079c6f7fd0bc296e81fef1c62667ec245c660b",
|
|
413
|
+
"build/checks/billing-pattern.mjs": "75e1809769420bc4c714ba0ddb1298489af7152603018d980182e6131182edc2",
|
|
414
|
+
"build/checks/developer-settings-pattern.mjs": "946cf163177db4aa4dfa30dac754d0229bc4b703ef1eac17a17dc35d19e2f093",
|
|
415
|
+
"build/checks/guidance.mjs": "65bca118879294288c14f296db3ba225ed953fb295e4010487fb7bae16c1bf51",
|
|
416
|
+
"build/checks/import-pattern.mjs": "6b98c0533bb0d8584ba0d677e579a0fdfdbdb5bd4663f261ecbdfb39181c45f6",
|
|
417
|
+
"build/checks/members-pattern.mjs": "bd550c7315dd6298efc1d524364dcfb505884a2e32bb9ed7c4995b53cc61a2a5",
|
|
418
|
+
"build/checks/onboarding-pattern.mjs": "721ef5a202365d3597985bff9ade68bf3312c309687e846ce9a1669dcc00cae2",
|
|
419
|
+
"build/checks/pattern-types.mjs": "858431d8b622af096b8a41f35df1789343f96aa07433e8a98185b8740a1ded19",
|
|
420
|
+
"build/checks/pattern-workflows.mjs": "72e708399c0141c2b62ca94ab96382eb0e000df9d5a54045be814e261d9a9bdc",
|
|
421
|
+
"build/checks/primary-scope.mjs": "b70634020cd8480ca97e7ee6350fdc9231684888009a6bd8d9ed216505aa2349",
|
|
422
|
+
"build/checks/render-tells.mjs": "93eae3f005f2a93654e111627a343440a7d87fa4b11c7c9403283b627fc1834c",
|
|
423
|
+
"build/checks/screen-layout-pattern.mjs": "c744bb32b29da50e2a1d852c1005b42addc0e1d7a98297e168f8ce7d51e4ad93",
|
|
424
|
+
"build/checks/semantics.mjs": "2ee7689b0472dba2e782ff19304e01018ca470b252fe7137e82bb36a3e0042c0",
|
|
425
|
+
"build/checks/settings-pattern.mjs": "77a8d8e431e5e25e4f4af5c92e7be1e664dbab5aac9f587b7819bd9c196b3907",
|
|
426
|
+
"build/checks/sync-pattern.mjs": "2cf9f1ac96be6c48948dea0ffab0fda0a909b5ff19e3e3f9835b6d8bcdd7fbef",
|
|
427
|
+
"build/checks/tells-lint.mjs": "f254fa9166f65a085d78cecf7ca66145151cd8b7868c732c25c44bbec2c2deac",
|
|
428
|
+
"build/fixtures/pattern-workflows.tsx": "6781938d83aa85f48c63fff98f9eb5b45fcb5531b6a49f902ec9d497f6e65265",
|
|
429
|
+
"build/fixtures/patterns/agent-action.jsx": "96d07566b1eb498be16436b9ce1d8b4148c0841cb73b3d421c8ab240bd115559",
|
|
430
|
+
"build/fixtures/patterns/app-skeleton.jsx": "d2d8e7d5373ee4d65c2e0ecc69451f35d9dfd4bed9f04cf66405cbe9c9478825",
|
|
431
|
+
"build/fixtures/patterns/assistant-conversation.jsx": "fda1f5ce21a8eb2f0f5da730cad9eb0ab65c91c9e46d69a88f9f6715434eda8a",
|
|
432
|
+
"build/fixtures/patterns/audit-log.jsx": "ec1183de4c94c0309824b4187c082f7ea76d50a09953224e4164b4fc5fa70780",
|
|
433
|
+
"build/fixtures/patterns/auth.jsx": "1b41c43b734deb75acd8bfd34dae445e627381884abd23512e37bfb1d644eabe",
|
|
434
|
+
"build/fixtures/patterns/billing.jsx": "8f56ab9e6d09d73f1ae9ad5d690ff20372f9279d23010d6db7ef5e2a79d0100a",
|
|
435
|
+
"build/fixtures/patterns/developer-settings.jsx": "7803d792f516b5a1ee823436c505802954865720f7c8dbae0742a1adc0b2d490",
|
|
436
|
+
"build/fixtures/patterns/import.jsx": "3b4148a99bf90a477ae01a0905cae75200bc53427ea197cc2bcda0a9c2469ca2",
|
|
437
|
+
"build/fixtures/patterns/members.jsx": "2b25e2f0734a273b6d7366c746573a906b90d613164b7003fe6fd3e426496286",
|
|
438
|
+
"build/fixtures/patterns/onboarding.jsx": "3ae1325880efa862b84b5d9bcc0691bf6029e1f1ac031bb99adb6c0527c498a9",
|
|
439
|
+
"build/fixtures/patterns/screen-layout-decision.jsx": "409d5ce48ddef3ca5de3427155e901f06d142938474894e9eabbc167c910c47a",
|
|
440
|
+
"build/fixtures/patterns/screen-layout-editor.jsx": "a93c41d7590fd98fae48403c49e4d4e793b4e92e4cf5b8cc66e30ed0aa55ba68",
|
|
441
|
+
"build/fixtures/patterns/screen-layout-report.jsx": "5de2691104456175ef51d2e1d11c85b4075341457e8acd3d5495615c2fbeb0a9",
|
|
442
|
+
"build/fixtures/patterns/settings.jsx": "92b9b472351f9a8a3479ab04f7890b1b3cbc356cf81926ff0c280f1bdbf0c435",
|
|
443
|
+
"build/fixtures/patterns/sync.jsx": "8474f762f7c63c4bd99fd337b080df1a788b4b92b2ced7fac5aaa1379b1a1eaf",
|
|
444
|
+
"docs/framework/AGENT-SETUP.md": "5b300079b150d6416b6dd00280a42110559c85d50b84a13ac6cf9e0329be9a21",
|
|
445
|
+
"project/Elevation.md": "100532c631803e9a97018b9da5ffff60acf7d80559f9f162ba9e371f5510371f",
|
|
446
|
+
"project/Fundamentals.md": "65120fd170ff8ea9f50b1498bfedc8c45dbe1a616bfccc32664213e5404d3a32",
|
|
447
|
+
"project/Research.md": "ca9931eb15547b86cff525126cba2a09e6e0751ad2739a60f453c83ed8d84216",
|
|
448
|
+
"project/components/src/pattern-async-collection.tsx": "9e4df2265d1de6f269278eb4a42d8d63b3ef74a881a455eb17102be477ecbf4d",
|
|
449
|
+
"project/components/src/pattern-consequential-action.tsx": "ffe49b7a9fa978e9177c6f3d839d311bdd3da913a6eeedc241800b10fc3287f7",
|
|
450
|
+
"project/components/src/pattern-edit-record.tsx": "7e83cfdfdb85f6927667dae58f7392c1738dd05ff7a53c75209a875779c9db9d",
|
|
451
|
+
"project/components/src/pattern-review-submit.tsx": "b452f90e7a160774678aa886626aa48dea535211bc367a17d628ac84bed5ee58",
|
|
452
|
+
"project/components/src/settings.tsx": "957a04e37936746f2b6b4086d8e2f866ce71f7fb9dded8ba81fff56840206e01",
|
|
453
|
+
"project/framework/README.md": "2b37096e2c13fbff4578c53ebbc38329f49a4050b9d1757125a42ab778785125",
|
|
454
|
+
"project/framework/app-skeleton.md": "bc70896a86f4c1dbd3467620562eec62ccf99a9356ff72a7eab8621f492554d9",
|
|
455
|
+
"project/framework/evidence.json": "ac99cfcca61219a4a25c75adf84c89f6c3e47b3713a8fb8209180c824d565b1b",
|
|
456
|
+
"project/framework/pattern.schema.json": "abcb37bd5de4a74f27ac079e587e5d288b23e491569a73971f1a31131a37d309",
|
|
457
|
+
"project/framework/patterns/agent-action.json": "532915c25183d1a6093d9e14b929f3e49d29e400b116ef0612d933d70d49b09a",
|
|
458
|
+
"project/framework/patterns/agent-action.md": "a11e9d98a84d8a0fae755bae3e618e7daa2608f1f853cfe88e2e58ee74cc01e7",
|
|
459
|
+
"project/framework/patterns/assistant-conversation.json": "63d7321b87e90f0bbeaf75f12dcb6ffd5cee40dccd769b2b2062932f0b40f226",
|
|
460
|
+
"project/framework/patterns/assistant-conversation.md": "41fa199f874b1849b3afe19d5c6cc498ddfd20c7cae198b4a2a1feac6747849d",
|
|
461
|
+
"project/framework/patterns/async-collection.json": "b004d1edd6d9b5f03f4db5092bcd896914d66c8575da9efde47c9654ca3b83e6",
|
|
462
|
+
"project/framework/patterns/async-collection.md": "4bcb8612436af5b730999d5a31e1f25eaad2ded4862c7639136a2f83b11cac4a",
|
|
463
|
+
"project/framework/patterns/audit-log.json": "661471f05d07fae8ae0b920c5e1e674906e98829a3e6eed4f01b39c8d053d58a",
|
|
464
|
+
"project/framework/patterns/audit-log.md": "2d245c2537fd874e09a44004c11a57a6a6b9504330df86263842a84afb0541af",
|
|
465
|
+
"project/framework/patterns/auth.json": "c9439ecf8196750d887d7a99b135de89d926b365acfecc9a6f7b66d2bbb8c679",
|
|
466
|
+
"project/framework/patterns/auth.md": "aba431dd58284485f6ae8472056342f72c643eeb7d77edd1eb92336f5bf1d5da",
|
|
467
|
+
"project/framework/patterns/billing.json": "8a72249c29ebb5b5eefbd98294e3fcfe45b5ddcebf4f7f7e8aa409388bc882e5",
|
|
468
|
+
"project/framework/patterns/billing.md": "9b9c639d868a0735d8be88d030fdec1db1f43e2bedb9dcb014e39ca79c1fe5bf",
|
|
469
|
+
"project/framework/patterns/consequential-action.json": "e5a61a89753efed1408cf0b1a5826b607b19c3fbbabf7d3f0b1b2586df24b506",
|
|
470
|
+
"project/framework/patterns/consequential-action.md": "f4efb5000325416d1b44c7f2ea906420cf8c1fd7b330e7754fac0ba5025c1fc4",
|
|
471
|
+
"project/framework/patterns/developer-settings.json": "54443991d65410c20b2285caa2265b1662d60188b084969cad3dc6fe6a681fa1",
|
|
472
|
+
"project/framework/patterns/developer-settings.md": "22eb20642649ad872a53771fd56bfd8051d18bb8cdf4756ccb6581c886db319b",
|
|
473
|
+
"project/framework/patterns/edit-record.json": "7d4249bbbd1c0c09afc8e4f3d1e6e688d2404db29e17db44cd5445427c570537",
|
|
474
|
+
"project/framework/patterns/edit-record.md": "a999de3810380ac20ae4045e5cb2dc3fae9d4d654f55a8d7da2fea4dfc3e746f",
|
|
475
|
+
"project/framework/patterns/import.json": "d1a47a24a15bee87d177b173327d0ba4f9791b7345e3d33f3c97aa960816761f",
|
|
476
|
+
"project/framework/patterns/import.md": "c44373f9639707b7b8e4ededdf3c3426dc3a75cd5e2b62577fdac4853c3cbaa1",
|
|
477
|
+
"project/framework/patterns/members.json": "f2567081cd05f65c64f92890a79afd64864992ec66903755a20a7c1d4411702a",
|
|
478
|
+
"project/framework/patterns/members.md": "b2a42c5f470ce8fd6d96d9630b5c6be452716053f9085cbc6ce87372087d5a43",
|
|
479
|
+
"project/framework/patterns/onboarding.json": "e831f904db32cb01a48f11cba9ef77704d986e0adb8d53a139a54bd4124704ba",
|
|
480
|
+
"project/framework/patterns/onboarding.md": "6948c0d7bc99334af1132d41f28b6ea9399b7491115160d5e664280131bad4c4",
|
|
481
|
+
"project/framework/patterns/review-submit.json": "79b15332acc57fb48b0b99ba98a195d5f913e7875293b0acb6aa42f5425a982b",
|
|
482
|
+
"project/framework/patterns/review-submit.md": "6a9d1886a48cad9e82da5c8b04d179425ec4fa925105d6f9ee50d4605dab3d87",
|
|
483
|
+
"project/framework/patterns/screen-layout.json": "199ca3f20a7af1983bc7211406bbf87e43328e3d57c48d29524191de86507782",
|
|
484
|
+
"project/framework/patterns/screen-layout.md": "7a6dd92249e1b8acbb5ab16afb15f5d3aa25e46fedf8d59eb40a4d892b22310e",
|
|
485
|
+
"project/framework/patterns/settings.json": "9ae72e95cb61b5f41a22053d408c2a634c18746661fa1c2e41e98a5ef2b6e08f",
|
|
486
|
+
"project/framework/patterns/settings.md": "dea76175e2b1b4347414c3716f0ff61fd584bf10b8fd45548449694c86027bbf",
|
|
487
|
+
"project/framework/patterns/sync.json": "e127992aaba5ad797a0c27ff0f7903619511e9a02379b6932c66084d3690660e",
|
|
488
|
+
"project/framework/patterns/sync.md": "9b6c6928fe19c6f28b88bd092997c0c0645aedddf02a25327a1c7c60969e3729",
|
|
489
|
+
"project/framework/principles.md": "1c57c684c4b0029012a79d6a38b26b8821abf75852b14db2b18b7e7f6d364b32",
|
|
490
|
+
"project/framework/rules.json": "607eed605aa834ab2e6557b44df0899a3851b684060566c73fbe1639df4575ae",
|
|
491
|
+
"scripts/build-framework-fixture.mjs": "1b4a2d7ece0459d2c4df2ec067d8d3b9d00110f2af1cef3be6042ab8f9ea90c9"
|
|
492
|
+
}
|
|
493
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Altitude 0.3.0
|
|
2
|
+
|
|
3
|
+
Read README.md, then only the relevant contract.
|
|
4
|
+
|
|
5
|
+
- [Agent action](patterns/agent-action.md): Let an agent propose, wait for approval, run, recover and leave provenance, with each state drawn as one reading.
|
|
6
|
+
- [Assistant conversation](patterns/assistant-conversation.md): Send, stream, stop, retry and recover in a conversation with an assistant, without losing the person's words or claiming an answer is complete before it is.
|
|
7
|
+
- [Async collection](patterns/async-collection.md): Find records while understanding loading, empty and failure states.
|
|
8
|
+
- [Audit log](patterns/audit-log.md): Find who did what, to which resource, when and from where, and export it.
|
|
9
|
+
- [Auth](patterns/auth.md): Sign in, sign up, verify, pass two-factor and reset a password without revealing whether an account exists.
|
|
10
|
+
- [Billing](patterns/billing.md): Show usage against limits as readings and change plan with the cost reviewed before it's confirmed.
|
|
11
|
+
- [Consequential action](patterns/consequential-action.md): Complete a consequential operation with appropriate review or real recovery.
|
|
12
|
+
- [Developer settings](patterns/developer-settings.md): Create, roll and revoke API keys, manage webhooks and connect integrations without treating them as ordinary forms.
|
|
13
|
+
- [Edit record](patterns/edit-record.md): Edit a durable record without losing work.
|
|
14
|
+
- [Import](patterns/import.md): Upload a file, map its columns, fix the rows with problems, review and import with a receipt.
|
|
15
|
+
- [Members](patterns/members.md): Invite people, change roles and remove access without misdrawing invitations or breaking ownership.
|
|
16
|
+
- [Onboarding](patterns/onboarding.md): Get someone new to value with a stamped setup checklist, empty states before tours, and what's new.
|
|
17
|
+
- [Review and submit](patterns/review-submit.md): Review and correct answers before final commitment.
|
|
18
|
+
- [Screen layout](patterns/screen-layout.md): Choose a screen's frame from the person's task, the one thing that leads and the one primary action, instead of inheriting a sidebar, a top bar and a grid of cards.
|
|
19
|
+
- [Settings](patterns/settings.md): Change how a workspace or account behaves, deciding per section whether changes apply now or save together.
|
|
20
|
+
- [Sync](patterns/sync.md): Say truthfully what has reached the server, through offline queues, conflicts and expiring sessions.
|