altitude-design 0.4.1 → 0.4.2
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/dist/guidance/components/AgentFleet/README.md +1 -1
- package/dist/guidance/components/InlineEdit/README.md +1 -1
- package/dist/guidance/index.json +3 -3
- package/dist/guidance/llms.txt +1 -1
- package/dist/guidance/manifest.json +9 -9
- package/dist/guidance/visual/ActionsInPlace.md +5 -5
- package/dist/guidance/visual/Distinctiveness.md +6 -2
- package/dist/guidance/visual/Research.md +14 -2
- package/dist/guidance/visual/Theming.md +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AgentFleet
|
|
2
2
|
|
|
3
|
-
Every agent working on one job, as a roster: grouped by what they need from you (needs you, working, done), each row saying the agent's state in words, what it's doing in one line, how long it has waited or run, where it is in its plan and what it has spent, with warnings for trouble that's coming (two agents changing one file, an agent making no progress). For supervising several agents at once; see [the research](https://github.com/richlaconte/altitude/blob/v0.4.
|
|
3
|
+
Every agent working on one job, as a roster: grouped by what they need from you (needs you, working, done), each row saying the agent's state in words, what it's doing in one line, how long it has waited or run, where it is in its plan and what it has spent, with warnings for trouble that's coming (two agents changing one file, an agent making no progress). For supervising several agents at once; see [the research](https://github.com/richlaconte/altitude/blob/v0.4.2/docs/research/agent-orchestration/README.md).
|
|
4
4
|
|
|
5
5
|
**Elevation: a record of agents, with live rows.**
|
|
6
6
|
- **Rows** are the record: flush at rest, lifting one level when pointed at because selecting one opens it. The open agent is selected, as a table's row is: `accent-soft`, raised one level, `aria-current`.
|
|
@@ -130,7 +130,7 @@ Optional labels are `editLabel` (default `Edit ${label}`), `saveLabel` (“Save
|
|
|
130
130
|
|
|
131
131
|
The canonical `InlineEdit` section in `build/previews.txt` renders a task title (in its heading font), a multiline description, the task's status (Select, on choose, with a rejected “Blocked”), assignee (Combobox, on choose) and estimate (a numeric Input), an independent filename table cell with this component, and “Ways to open”: a pencil and two fields on hover, with seams. A collapsed documentation harness selects deterministic fixtures before mounting, resets records and counters, delays validation, applies external updates, removes the filename consumer during work and opens a dialog comparison using the same validation and persistence adapter. Fixture controls and operation logs stay outside the product scene.
|
|
132
132
|
|
|
133
|
-
Run `node checks/inline-edit.mjs` from `build/` after generating preview fixtures. `ALT_FIXTURE_ROOT=test/react19` selects the React 19 source fixtures. The checks cover editing in place (the value's text doesn't move, the control takes its font, the pencil and the field move nothing on hover, the caret lands where clicked, the seam, the announcement that clears itself), multiline (newline on Enter, Ctrl/Cmd+Enter, IME, Escape, caret at the end, growth to `maxRows`, line breaks in read mode), custom editors (focus, Escape layering, on-choose saves and rejections, unchanged choices, numeric validation), lifecycle races, retained input, uncertainty reconciliation, conflict latching, keyboard/IME, focus, disabled behavior and the four-scheme responsive/accessibility matrix. Automated checks do not replace the human screen-reader, touch, magnification or formative comparisons recorded in [Actions in place validation](https://github.com/richlaconte/altitude/blob/v0.4.
|
|
133
|
+
Run `node checks/inline-edit.mjs` from `build/` after generating preview fixtures. `ALT_FIXTURE_ROOT=test/react19` selects the React 19 source fixtures. The checks cover editing in place (the value's text doesn't move, the control takes its font, the pencil and the field move nothing on hover, the caret lands where clicked, the seam, the announcement that clears itself), multiline (newline on Enter, Ctrl/Cmd+Enter, IME, Escape, caret at the end, growth to `maxRows`, line breaks in read mode), custom editors (focus, Escape layering, on-choose saves and rejections, unchanged choices, numeric validation), lifecycle races, retained input, uncertainty reconciliation, conflict latching, keyboard/IME, focus, disabled behavior and the four-scheme responsive/accessibility matrix. Automated checks do not replace the human screen-reader, touch, magnification or formative comparisons recorded in [Actions in place validation](https://github.com/richlaconte/altitude/blob/v0.4.2/project/ActionsInPlaceValidation.md).
|
|
134
134
|
|
|
135
135
|
<!-- example: generated from build/previews.txt by build/previews.mjs. Edit the preview, not this section. -->
|
|
136
136
|
## Example
|
package/dist/guidance/index.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"package": "altitude-design",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.2",
|
|
5
5
|
"entry": "README.md",
|
|
6
6
|
"design": "visual/README.md",
|
|
7
7
|
"patterns": [
|
|
@@ -1128,13 +1128,13 @@
|
|
|
1128
1128
|
"docs/framework/AGENT-SETUP.md": "57b4ba98719fce472e08226a5c784ed4b9eb20241904445825cb2287a84a0162",
|
|
1129
1129
|
"project/ActionsInPlace.md": "448046810f619210c2d378d97f072722828736c99247c3436ef01edebc3d8885",
|
|
1130
1130
|
"project/Charts.md": "9439a024d8123088f90bb49844f922ce50ba4f255d85e7e6324bb55eee07f287",
|
|
1131
|
-
"project/Distinctiveness.md": "
|
|
1131
|
+
"project/Distinctiveness.md": "d2933b1d4c53622c31906154beca9edd89d457baa94fb4be3ae0fb8d414e76ce",
|
|
1132
1132
|
"project/Elevation.md": "100532c631803e9a97018b9da5ffff60acf7d80559f9f162ba9e371f5510371f",
|
|
1133
1133
|
"project/Fundamentals.md": "65120fd170ff8ea9f50b1498bfedc8c45dbe1a616bfccc32664213e5404d3a32",
|
|
1134
1134
|
"project/Mobile.md": "511db58119a1653c2c00e2ccb34c6cf943de93f2184dec0faf3228f563e0b1b7",
|
|
1135
1135
|
"project/Motion.md": "7fa4e7501b710a5599c7a8c99e531f2b9b1b4dfeba6a6a4d9716685d45f33d31",
|
|
1136
1136
|
"project/README.md": "e6fe7ec7cb0a4290a8005daa0ff4db3654d1f1b4a69598f5c46b6722c86d737e",
|
|
1137
|
-
"project/Research.md": "
|
|
1137
|
+
"project/Research.md": "d77743a7292796b51cd7445c527936cd3889eb4b7446ee6208a3d0c954bb4c43",
|
|
1138
1138
|
"project/Theming.md": "74aef9d0e908fcd908fe7351f0c9248666772385582ef02b4c53f09ccd7634c5",
|
|
1139
1139
|
"project/components/AILabel/README.md": "0002447d340029fe28652ed26c474c91edf89a0e23be300d24c198afb7086646",
|
|
1140
1140
|
"project/components/Accordion/README.md": "b166e499eb3604ef84a375818db3aec91c5459870b5d6cd3133ecbdf36e145d6",
|
package/dist/guidance/llms.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Altitude 0.4.
|
|
1
|
+
# Altitude 0.4.2
|
|
2
2
|
|
|
3
3
|
> Altitude's guidance for this installed version of altitude-design: the design rules, the task patterns and every component's guide. Height is the interface: settled content sits on the ground, anything live rises above it, anything waiting to receive sinks below it.
|
|
4
4
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"files": {
|
|
5
5
|
"agent-setup.md": "57b4ba98719fce472e08226a5c784ed4b9eb20241904445825cb2287a84a0162",
|
|
6
6
|
"app-skeleton.md": "bc70896a86f4c1dbd3467620562eec62ccf99a9356ff72a7eab8621f492554d9",
|
|
7
7
|
"components/Accordion/README.md": "b166e499eb3604ef84a375818db3aec91c5459870b5d6cd3133ecbdf36e145d6",
|
|
8
|
-
"components/AgentFleet/README.md": "
|
|
8
|
+
"components/AgentFleet/README.md": "d43cd4f622f4004eb97eb02db3c5575ccd230bb5c247539f0b36920626e306df",
|
|
9
9
|
"components/AgentLanes/README.md": "247eb6e0ead0de5f15da920f083dbaa4150673723b081acf70e19026f982cd16",
|
|
10
10
|
"components/AgentRequests/README.md": "e7ac986cef68b09b5a7df7d1c11cf44ef8d417a3d22f9436f7cea1d8b4190c18",
|
|
11
11
|
"components/AILabel/README.md": "0002447d340029fe28652ed26c474c91edf89a0e23be300d24c198afb7086646",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"components/HoldButton/README.md": "bb81a002a2d37701a84a04123fbabd8cb820c52befaacaaf881de48d12f733f5",
|
|
58
58
|
"components/HoverCard/README.md": "23e6de1b79fa302b2ce168431fd15339b33132663911521594882f338c1ca366",
|
|
59
59
|
"components/InlineCitation/README.md": "b3f66c18bdf054f818525fbcf5f5db36535d121289f6d0451413ac0803bf8edd",
|
|
60
|
-
"components/InlineEdit/README.md": "
|
|
60
|
+
"components/InlineEdit/README.md": "d2f3d0d18894d4aa045a2db99934a1764a8abf1d66cd90c619e648f3e47f58fc",
|
|
61
61
|
"components/Input/README.md": "8b7df74399ce471bead1c81967e63ca1bb249aebd827abefd4fbf1a6a2a13e26",
|
|
62
62
|
"components/InputOTP/README.md": "e1a17bca55de012b26f25dca299d7ffe01b21248efde19bea63ebeac4e2625aa",
|
|
63
63
|
"components/ItemGroup/README.md": "87a1e6c3e124aec1012ef71dc69c3e5ab85feeb4735fa0b77db449a22692f6e8",
|
|
@@ -118,8 +118,8 @@
|
|
|
118
118
|
"components/Trace/README.md": "62c571b2d96a83e5515988eacecd47de3e2c1a2452476d00645d1a26d3cbae3d",
|
|
119
119
|
"components/Tree/README.md": "9fadf66c7d223653bd299362e997c814f06baf2a9c59f8ebc15ef9a0a24235e4",
|
|
120
120
|
"evidence.json": "71e9602167286fb714419d0e89a80d4765b632c910d51875d1b167fd1ee499d9",
|
|
121
|
-
"index.json": "
|
|
122
|
-
"llms.txt": "
|
|
121
|
+
"index.json": "9bf9dbe941aa6c26a25dc086845981256c5bc9f1c3d283c7ad5c396445a958dc",
|
|
122
|
+
"llms.txt": "76bca13eb63ad1c2e48ae8633c7fcf675eb595ba763703728af0445da81c1cbd",
|
|
123
123
|
"pattern.schema.json": "abcb37bd5de4a74f27ac079e587e5d288b23e491569a73971f1a31131a37d309",
|
|
124
124
|
"patterns/agent-action.json": "532915c25183d1a6093d9e14b929f3e49d29e400b116ef0612d933d70d49b09a",
|
|
125
125
|
"patterns/agent-action.md": "a11e9d98a84d8a0fae755bae3e618e7daa2608f1f853cfe88e2e58ee74cc01e7",
|
|
@@ -199,15 +199,15 @@
|
|
|
199
199
|
"references/project/components/src/settings.tsx": "957a04e37936746f2b6b4086d8e2f866ce71f7fb9dded8ba81fff56840206e01",
|
|
200
200
|
"references/scripts/build-framework-fixture.mjs": "1b4a2d7ece0459d2c4df2ec067d8d3b9d00110f2af1cef3be6042ab8f9ea90c9",
|
|
201
201
|
"rules.json": "552c8328f60adc9eef4aa9aeed098e3a5c617e993bd300781389da8ad0e402c9",
|
|
202
|
-
"visual/ActionsInPlace.md": "
|
|
202
|
+
"visual/ActionsInPlace.md": "f9d458aef8758eed83c11be10f5d166e6e60a6307bd14ae393d8c8bdd46e6dc2",
|
|
203
203
|
"visual/Charts.md": "9439a024d8123088f90bb49844f922ce50ba4f255d85e7e6324bb55eee07f287",
|
|
204
|
-
"visual/Distinctiveness.md": "
|
|
204
|
+
"visual/Distinctiveness.md": "b97cec51b48b46205d25401cdea77dc3529f87bbd3f8745bdc0f0852ee6fccf9",
|
|
205
205
|
"visual/Elevation.md": "50f2aeefd457e1a329cc80578b196c48cbf0c019a5f43d75901d92b4b4632c44",
|
|
206
206
|
"visual/Fundamentals.md": "65120fd170ff8ea9f50b1498bfedc8c45dbe1a616bfccc32664213e5404d3a32",
|
|
207
207
|
"visual/Mobile.md": "511db58119a1653c2c00e2ccb34c6cf943de93f2184dec0faf3228f563e0b1b7",
|
|
208
208
|
"visual/Motion.md": "7fa4e7501b710a5599c7a8c99e531f2b9b1b4dfeba6a6a4d9716685d45f33d31",
|
|
209
209
|
"visual/README.md": "08c3a9ef3ff53a0fb8f9f873240022edefc67739a16d1f50c3a47367f72fc9f9",
|
|
210
|
-
"visual/Research.md": "
|
|
211
|
-
"visual/Theming.md": "
|
|
210
|
+
"visual/Research.md": "24ed5d1c70232bfffad5b85ba9e69c1202bdb0665e978890737bfca1d5217e3c",
|
|
211
|
+
"visual/Theming.md": "98836bf391626d5132a18040e2b57390c8167c258c097d15670bd6971046d98a"
|
|
212
212
|
}
|
|
213
213
|
}
|
|
@@ -6,12 +6,12 @@ The application chooses that policy from its domain. A danger button does not im
|
|
|
6
6
|
|
|
7
7
|
## Try the same example in two views
|
|
8
8
|
|
|
9
|
-
- [Focused recovery preview](https://github.com/richlaconte/altitude/blob/v0.4.
|
|
10
|
-
- [Complete Files example](https://github.com/richlaconte/altitude/blob/v0.4.
|
|
11
|
-
- [InlineEdit comparison](https://github.com/richlaconte/altitude/blob/v0.4.
|
|
9
|
+
- [Focused recovery preview](https://github.com/richlaconte/altitude/blob/v0.4.2/project/components/ActionsInPlace/preview.html) — archive, Undo, and restore later from Archived.
|
|
10
|
+
- [Complete Files example](https://github.com/richlaconte/altitude/blob/v0.4.2/project/components/ActionsInPlace/preview.html#files) — rename with the exported InlineEdit, archive, recover, and permanently delete from Archived.
|
|
11
|
+
- [InlineEdit comparison](https://github.com/richlaconte/altitude/blob/v0.4.2/project/components/InlineEdit/preview.html) and [Dialog presentation comparison](https://github.com/richlaconte/altitude/blob/v0.4.2/project/components/Dialog/preview.html).
|
|
12
12
|
- Generated Storybook stories: `Patterns/ActionsInPlace`, `Inputs/InlineEdit`, and `Overlays/Dialog`.
|
|
13
13
|
|
|
14
|
-
Both Files views use the same source and service in [`build/previews.txt`](https://github.com/richlaconte/altitude/blob/v0.4.
|
|
14
|
+
Both Files views use the same source and service in [`build/previews.txt`](https://github.com/richlaconte/altitude/blob/v0.4.2/build/previews.txt). The default has no fixture toolbar in the product. Expand “Example fixtures and source” below the scene to select the deterministic service behavior, reset records/counters, simulate an external change, or inspect accepted requests. “Connection interrupted after save” commits at 100 ms and loses its response at 1,200 ms; the UI must reconcile that result before offering recovery or retry.
|
|
15
15
|
|
|
16
16
|
## Act and recover
|
|
17
17
|
|
|
@@ -458,6 +458,6 @@ Every state has text or an ARIA equivalent when motion and shadows are absent. N
|
|
|
458
458
|
|
|
459
459
|
## Verification and scope
|
|
460
460
|
|
|
461
|
-
[`build/checks/actions-in-place.mjs`](https://github.com/richlaconte/altitude/blob/v0.4.
|
|
461
|
+
[`build/checks/actions-in-place.mjs`](https://github.com/richlaconte/altitude/blob/v0.4.2/build/checks/actions-in-place.mjs) exercises the canonical fixture model and browser interactions under React 18 and 19: duplicate requests, revision conflicts, uncertain outcomes, ordered feedback, dismissed/replaced recovery, targeted deletion, pending Close, old/new dialog sessions, focus recovery, reduced motion, increased contrast, forced colors, and narrow layouts. [The validation record](https://github.com/richlaconte/altitude/blob/v0.4.2/project/ActionsInPlaceValidation.md) distinguishes engineering evidence from remaining assistive-technology and participant gates.
|
|
462
462
|
|
|
463
463
|
[EditRegion](../components/EditRegion/README.md) now edits several fields of one record in place with this guide's session rules (issue #12 proposed ItemGroup, PropertyList, DataTable row expansion and Board card editing as its multi-field consumers). ConfirmAction and a shared action hook remain deferred. These demos do not establish two independent real application needs for those abstractions, and they do not establish a measured usability benefit. Structural activation counts and proposed design intent are not participant results.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Interfaces built by agents now have a look people recognise and distrust: purple gradients, Inter, a centred hero, three icon cards, a sidebar and a grid of equal cards on every screen. Altitude is made for apps that agents write, so it can fall into that look twice: through its own defaults, and through what agents compose from them. This chapter says how it stays out, and how we keep checking, because the look keeps moving.
|
|
4
4
|
|
|
5
|
-
The evidence is in **Research** ("Generated interfaces converge"). Every tell, with its sources and where Altitude stands, is in [`tells.json`](https://github.com/richlaconte/altitude/blob/v0.4.
|
|
5
|
+
The evidence is in **Research** ("Generated interfaces converge"). Every tell, with its sources and where Altitude stands, is in [`tells.json`](https://github.com/richlaconte/altitude/blob/v0.4.2/project/tells.json). Looking generated is half the problem; the other half is breaking established rules (hierarchy, labelling, recovery, honesty), which [Fundamentals](Fundamentals.md) covers.
|
|
6
6
|
|
|
7
7
|
## Why it happens
|
|
8
8
|
|
|
@@ -37,7 +37,7 @@ A model writing an interface picks the likeliest choice, and the likeliest choic
|
|
|
37
37
|
|
|
38
38
|
## Where Altitude stands
|
|
39
39
|
|
|
40
|
-
The 2026-10-30 audit found 4 tells exposed; the two schemes and the landing page's labels were fixed the same day. The tells lint (#320) then found one the audit couldn't: Artifact and Terminal, added afterwards, had a coloured failure stripe. The rendered check (#321) then cleared LA6, and the stripe was removed (#374). The screen layout pattern (#323) moved LA5 from exposed to watch. That left 33 of 47 clear, 12 to watch, 2 unchecked and none exposed. On 2026-11-01 Fundamentals added five tells from research on the rules generated interfaces break (CP5, CP6, CM9, BH3, BH4): 34 of 52 are clear, 15 to watch, 2 unchecked and 1 exposed. Nothing was rendered for it: it read `tokens.json`, `bundle.css`, `build/previews.txt`, `components/src` and `site/` at commit `6d40bf2`, with a regex prototype for the `lint` tells and the rest by hand. On 2026-11-02 the previews were labelled (#394), clearing CM9: 35 of 52 are clear and none exposed.
|
|
40
|
+
The 2026-10-30 audit found 4 tells exposed; the two schemes and the landing page's labels were fixed the same day. The tells lint (#320) then found one the audit couldn't: Artifact and Terminal, added afterwards, had a coloured failure stripe. The rendered check (#321) then cleared LA6, and the stripe was removed (#374). The screen layout pattern (#323) moved LA5 from exposed to watch. That left 33 of 47 clear, 12 to watch, 2 unchecked and none exposed. On 2026-11-01 Fundamentals added five tells from research on the rules generated interfaces break (CP5, CP6, CM9, BH3, BH4): 34 of 52 are clear, 15 to watch, 2 unchecked and 1 exposed. Nothing was rendered for it: it read `tokens.json`, `bundle.css`, `build/previews.txt`, `components/src` and `site/` at commit `6d40bf2`, with a regex prototype for the `lint` tells and the rest by hand. On 2026-11-02 the previews were labelled (#394), clearing CM9: 35 of 52 are clear and none exposed. The same day, a blind model-judged pass (E161, #326) added thirteen tells from the reasons judges gave: 36 of 65 are clear, 17 to watch, 8 unchecked and 4 exposed.
|
|
41
41
|
|
|
42
42
|
**Clear.** No purple, gradient text, coloured stripes, glows, bounce, count-ups, emoji, sparkles or marketese anywhere in the library or previews. The content rules, the forbidden light glows, the rejected severity bars (E8) and Charts' "the data is the record" already rule most of the tells out.
|
|
43
43
|
|
|
@@ -47,6 +47,10 @@ The 2026-10-30 audit found 4 tells exposed; the two schemes and the landing page
|
|
|
47
47
|
|
|
48
48
|
**Measured.** The benchmark's first run ([report](https://github.com/richlaconte/altitude/blob/main/evals/distinctiveness/results/2026-10-31/REPORT.md), E154) found that building with Altitude doesn't yet move Claude's screens measurably away from what plain Claude or shadcn produce: beyond the noise between repeat builds of one prompt, they sit no further from the baselines than the baselines sit from each other, on any of the three distances. They do move toward Altitude's own previews, because agents start from the pattern fixtures. Up close (E155), the builds are no more distinct, and nearer to shadcn's builds than to the previews. On colour, Daylight and shadcn's neutral theme are the closest pair measured (CO8). The structure tells a different story (E160): Altitude builds set 78% of their text on the ground, where shadcn's builds put 92% inside outlined boxes, and the embeddings don't register that difference. The baseline so far is only Claude: v0 and Lovable builds are the next step.
|
|
49
49
|
|
|
50
|
+
**Judged blind (E161).** Models shown each screen without its source called plain Claude's builds "made with AI" 100% of the time, shadcn's 95% and Altitude's 57%, with less confidence for Altitude's. That's what models perceive, not people: the study with people (Research, item 7) is still unrun. The reasons became tells. Being boxed by default, every section in its own card (LA9), was the most-cited new cue for the baselines and was cited for 1 Altitude build. Altitude's elevation look splits judges: it's in 13 of the 23 "AI" answers for Altitude builds, but 9 of the 17 "designer" answers cite it too.
|
|
51
|
+
|
|
52
|
+
**Exposed: LA10, CP7, CP8, CP9.** Judges cited these in at least 20% of their "AI" answers for Altitude builds: sparse pages with dead space (LA10), the same fact shown twice (CP7), stock sample names such as Northwind and Acme (CP8), and a subtitle that restates the title (CP9). CP8 starts in the previews, which use Northwind throughout, and agents copy previews.
|
|
53
|
+
|
|
50
54
|
**Fixed in the previews: CM9, placeholders as labels.** `Field` gives every input a visible label, but several previews rendered a bare `Input` with only a placeholder, and agents copy previews. They now use `Field`, or an `aria-label` in the compact galleries ([#394](https://github.com/richlaconte/altitude/issues/394)).
|
|
51
55
|
|
|
52
56
|
**Watch:**
|
|
@@ -622,7 +622,7 @@ A measurement, then a design review ([#97](https://github.com/richlaconte/altitu
|
|
|
622
622
|
- **A pointer over the list holds the close.** A delayed close could move the next row under a pointer reaching for it. The close waits while a mouse is over the list, capped at `dur-settle`; touch has no hover, so it doesn't wait.
|
|
623
623
|
- **`dur-linger` is 2000ms by judgement.** About four words read in roughly a second (Nielsen's 1s flow limit) plus a second to act; the top of the "second or two" asked for.
|
|
624
624
|
|
|
625
|
-
Not yet tested with people: whether the close is noticeable enough at `dur-travel-3`, and whether waiting for the pointer to leave the list reads as lag. Both are open in [the validation record](https://github.com/richlaconte/altitude/blob/v0.4.
|
|
625
|
+
Not yet tested with people: whether the close is noticeable enough at `dur-travel-3`, and whether waiting for the pointer to leave the list reads as lag. Both are open in [the validation record](https://github.com/richlaconte/altitude/blob/v0.4.2/project/ActionsInPlaceValidation.md).
|
|
626
626
|
|
|
627
627
|
### E47 · Can a chart Altitude doesn't draw keep its rules?
|
|
628
628
|
|
|
@@ -1591,6 +1591,18 @@ On a 375px phone the agent harness set its answer 79px in from the screen's left
|
|
|
1591
1591
|
|
|
1592
1592
|
#383 asked whether Altitude's elevation reaches the apps agents build with it, since E155 found the builds no further from the generated centre than the baselines. The benchmark gained an elevation measure. It records what each character of text sits on: a raised, sunk, outlined or filled surface (from how the nearest surface of at least 120 × 60 draws), or the ground, with the Altitude tier where the tokens resolve. The 2026-10-31 builds were rebuilt from their saved source with the run's own package (every earlier measure reproduced to within 0.001) and measured again ([report](https://github.com/richlaconte/altitude/blob/main/evals/distinctiveness/results/2026-10-31/REPORT.md), *Elevation*). The premise didn't hold. Agents carry each frame's elevation from the fixture: settings raised on `elev-1` (0.87 of text in the preview, 0.72 in the builds), the report on the ground (1.00 and 0.98). Overall, Altitude builds set 78% of their text on the ground, against 8% for shadcn and 16% for plain Claude. shadcn puts 92% inside outlined boxes, plain Claude 68%, Altitude 4%. Set against the generated habit of boxing everything, the Altitude builds are the furthest of any system from the centre. Yet UIClip, whole-screen or tiled, places them nearest to shadcn. The visual distances don't register a screen's surface structure, so E154's "no further from the centre" is a statement about those embeddings, not about the structure. The gap between the previews and the builds is what remains in *Proportions*: builds hold about twice the content, more densely. Nothing in the guidance or components was changed, so the Altitude condition wasn't regenerated; a rerun would have measured the same inputs. Whether people see the difference is #326's question. Rejected: counting any `box-shadow` as raised (Tailwind's rings and Altitude's field lips compute as shadows), and comparing colours as strings (Tailwind 4 computes `oklch` and `oklab`, so they go through a canvas).
|
|
1593
1593
|
|
|
1594
|
+
### E161 · Models call Altitude builds generated less often, and say why
|
|
1595
|
+
|
|
1596
|
+
#326 asked whether people read Altitude screens as generated. A study with people needs about 80 paid participants and two commissioned designers, so this is the part an agent can run: a blind pass in which models judge and give reasons ([`evals/first-impression/model-judge/`](https://github.com/richlaconte/altitude/tree/main/evals/first-impression/model-judge), results under `results/2026-11-02/`). It measures what a model perceives, never what people do. 36 screens, cropped to the protocol's first view and renamed to random ids, were judged five times each: 8 briefs each for plain Claude, shadcn and Altitude from the 2026-10-31 benchmark run, Altitude's 4 previews, and 8 human-made screens from two MIT-licensed admin templates (Tabler 2018, AdminLTE 2020) with their brand names and years removed. There were five fresh judge sessions (three Opus 5.5, two Sonnet 5.5), each in its own random order, with no key and no proportions. Each answered "AI or designer?", gave a confidence and listed 2–6 concrete cues. A sixth session, also without the key, coded all 758 cues against `tells.json` or as new. A seventh coded a 20% sample: 81% exact agreement, κ 0.72 (CM6) and 0.81 (IC4), and 0.58 for "new".
|
|
1597
|
+
|
|
1598
|
+
P("ai") was 100% for plain Claude, 95% for shadcn (95% interval over briefs 88–100%) and 57% for Altitude (35–75%), with lower confidence for Altitude (2.2 of 4, against 2.8–2.9). The previews scored 60%. The two models disagreed most on Altitude: 75% from Opus, 31% from Sonnet. The anchor failed as calibration. Every human-made screen was called "designer", but the judges named what they saw ("AdminLTE-style", "Bootstrap 4", "classic admin template", "2018-era data"), so it separates a familiar older template from a 2026 build, not people from generators. d′ against it (2.0–2.9 for all builds) isn't a measure of telling origin. The relative order of the three built conditions stands.
|
|
1599
|
+
|
|
1600
|
+
The reasons are the result. For the baselines, the most-cited existing tells were LA7 (a row of headline stats, about half of both baselines' "ai" answers), IC4 (placeholder imagery and avatars), TY4 (all-caps labels, 35% for plain Claude) and CM6 (kit components unchanged, 29% for shadcn). The most-cited new cue was every section boxed in its own card: 45% for shadcn, 20% for plain Claude and 1 Altitude build, which matches E160's structure measure. Thirteen new tells were added (LA9–LA11, CO9, CM10–CM13, IC5, CP7–CP9, ST4). Each was cited in at least 20% of a built condition's "ai" answers, by at least 4 of the 5 sessions across both models, on 2 or more briefs. Four are exposed in Altitude builds: the same fact shown twice (CP7, 35%), sparse pages with dead space (LA10, 30%), stock sample names such as Northwind and Acme (CP8, 30%, which Altitude's previews use throughout) and a generic subtitle restating the title (CP9, 22%).
|
|
1601
|
+
|
|
1602
|
+
Some cues were cited only for Altitude, so they say more about Altitude's look than about generated interfaces in general, and weren't added as tells. Breadcrumbs and tabs drawn as raised chips was the most cited (39% of the "ai" answers for Altitude builds, 4 sessions). With glossy raised buttons and inset fields, the elevation look appears in 13 of 23 "ai" answers for Altitude builds. But 9 of the 17 "designer" answers for the same builds cite raised or inset depth as evidence of a designer. The look is distinctive and splits judges; it isn't read one way. In the previews, 7 of 12 "ai" answers cite a demo control left in view ("Make the next role change fail") in the records and settings patterns. Misalignment and unexplained gaps came from Opus sessions only.
|
|
1603
|
+
|
|
1604
|
+
Limits: models aren't people, and the builds and judges are all Claude. Each session saw all 36 screens, so later answers can lean on earlier ones. Judges ran in an agent harness that may load this repository's agent instructions. A first launch was discarded before analysis because the anchor's brand replacement had broken the AdminLTE logo into visible alt text. `anchor.mjs` now edits visible text only, and all five sessions were rerun on the corrected set.
|
|
1605
|
+
|
|
1594
1606
|
## What was rejected
|
|
1595
1607
|
|
|
1596
1608
|
- **Blur for de-emphasis.** Small blur isn't detected pre-attentively, large blur is unpleasant to read, and it destroys text contrast. Relevance uses shading polarity (raised vs sunk) instead.
|
|
@@ -1617,4 +1629,4 @@ Lab measurements show the cues are *present*. These studies would show they *wor
|
|
|
1617
1629
|
4. **Pending trust.** With 200ms, 800ms and 3s server latency, compare optimistic writes with pending/landed altitude against a spinner. Measure duplicate submissions and confidence ratings.
|
|
1618
1630
|
5. **Hold-to-commit.** Accidental-activation rate and completion time for destructive actions, HoldButton vs a confirmation dialog.
|
|
1619
1631
|
6. **Form completion.** A long form with some fields left empty: compare how often people submit with a required field missed, and how fast they find it, when empty fields are sunk wells versus all fields looking alike.
|
|
1620
|
-
7. **Made with AI? (#326).** Altitude screens mixed with default generated screens for the same tasks. Each is rated for appeal after 50ms (after Tuch et al.), then judged "made with AI or by a designer?" after 5s, with the reasons coded against `tells.json`. The [protocol](https://github.com/richlaconte/altitude/blob/main/evals/first-impression/PROTOCOL.md) is fixed, with preregistered hypotheses, a calibration set built by two designers, and the stimuli drawn from the benchmark (`evals/first-impression/`). It hasn't been run yet.
|
|
1632
|
+
7. **Made with AI? (#326).** Altitude screens mixed with default generated screens for the same tasks. Each is rated for appeal after 50ms (after Tuch et al.), then judged "made with AI or by a designer?" after 5s, with the reasons coded against `tells.json`. The [protocol](https://github.com/richlaconte/altitude/blob/main/evals/first-impression/PROTOCOL.md) is fixed, with preregistered hypotheses, a calibration set built by two designers, and the stimuli drawn from the benchmark (`evals/first-impression/`). It hasn't been run yet. A model-judged proxy of the reasons, not the perception, is E161.
|
|
@@ -165,7 +165,7 @@ That gets shadcn's components onto Altitude's colors and shadows. The elevation
|
|
|
165
165
|
|
|
166
166
|
### Charts
|
|
167
167
|
|
|
168
|
-
shadcn/ui's `Chart` is Recharts underneath (Tremor wraps Recharts too), so charts already built with it can take Altitude's colours and most of its chart rules without being rewritten. What they can't take is listed at the end. [`examples/shadcn-chart`](https://github.com/richlaconte/altitude/blob/v0.4.
|
|
168
|
+
shadcn/ui's `Chart` is Recharts underneath (Tremor wraps Recharts too), so charts already built with it can take Altitude's colours and most of its chart rules without being rewritten. What they can't take is listed at the end. [`examples/shadcn-chart`](https://github.com/richlaconte/altitude/blob/v0.4.2/examples/shadcn-chart) is this setup, checked in both schemes by `build/checks/shadcn-chart.mjs`.
|
|
169
169
|
|
|
170
170
|
**Map the palette.** Add the chart lines to the `@theme inline` block above, so Tailwind's `fill-chart-1` and the like are Altitude's slots:
|
|
171
171
|
|