diff --git a/docs/design/artboards/d215/cap/measure_after.js b/docs/design/artboards/d215/cap/measure_after.js index 9faaee66a..5adaf4e76 100644 --- a/docs/design/artboards/d215/cap/measure_after.js +++ b/docs/design/artboards/d215/cap/measure_after.js @@ -18,7 +18,7 @@ const fs = require('fs'); const HERE = __dirname; const TARGETS = path.join(HERE, '..', 'targets.json'); -const SURFACES = ['settings', 'agent-settings', 'agent-memory', 'board', 'connectors', 'chat', 'sidebar', 'byo', 'byo-handoff', 'firstrun-welcome', 'firstrun-waiting', 'firstrun-connected', 'firstrun-error', 'activity-queue', 'activity-empty', 'activity-error', 'profile-person', 'profile-empty', 'profile-error', 'taskrecord-log', 'taskrecord-empty', 'taskrecord-error', 'runtrace-done', 'runtrace-live', 'runtrace-error']; +const SURFACES = ['settings', 'agent-settings', 'agent-memory', 'board', 'connectors', 'chat', 'sidebar', 'byo', 'byo-handoff', 'firstrun-welcome', 'firstrun-waiting', 'firstrun-connected', 'firstrun-error', 'activity-queue', 'activity-empty', 'activity-error', 'profile-person', 'profile-empty', 'profile-error', 'taskrecord-log', 'taskrecord-empty', 'taskrecord-error', 'runtrace-done', 'runtrace-live', 'runtrace-error', 'artifacts-list', 'artifacts-empty', 'artifacts-error']; // byo-handoff is drawn but can't be captured on prod: reaching it issues a real key. The first-run // dialog is a latch-gated overlay, and the Scout welcome only exists in a brand-new pod, so neither is measured on prod. const PROD_SURFACES = SURFACES.filter(s => s !== 'byo-handoff' && !s.startsWith('firstrun-')); diff --git a/docs/design/artboards/d215/cap/measure_after.test.js b/docs/design/artboards/d215/cap/measure_after.test.js index 76f2c7205..98c37f259 100644 --- a/docs/design/artboards/d215/cap/measure_after.test.js +++ b/docs/design/artboards/d215/cap/measure_after.test.js @@ -29,7 +29,7 @@ test('--only with an unknown surface throws', () => { test('the committed targets.json passes its own validation', () => { const t = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'targets.json'), 'utf8')); - assert.strictEqual(Object.keys(t).length, 50); + assert.strictEqual(Object.keys(t).length, 56); validateTargets(t); }); @@ -39,7 +39,7 @@ test('an empty or partial measurement is refused', () => { const partial = { ...t }; delete partial['board-390']; assert.throws(() => validateTargets(partial), /missing board-390/); assert.throws(() => validateTargets({ ...t, 'chat-1440': { helperWords: NaN, innerRatio: 2 } }), /invalid chat-1440/); - assert.strictEqual(EXPECTED.length, 50); + assert.strictEqual(EXPECTED.length, 56); }); // A page whose SPA shell answers 200 and then redirects to `landsOn`. Its metrics would score diff --git a/docs/design/artboards/d215/index.html b/docs/design/artboards/d215/index.html index 61db35cd4..9d3179cb4 100644 --- a/docs/design/artboards/d215/index.html +++ b/docs/design/artboards/d215/index.html @@ -676,6 +676,44 @@ .v2-run-trace__turns h2 { margin: 0; font: 700 15px/1.2 var(--f-display); color: var(--ink); } .v2-run-trace__meta { margin: 0; font: 500 11.5px/1.5 var(--f-mono); color: var(--mu); } .v2-run-trace__turns .v2-run-trace__call { display: grid; gap: 4px; padding: 11px 14px; border-radius: 12px; background: var(--sf); box-shadow: inset 0 0 0 1px var(--d); } +/* artifacts: the live v2-artifacts__* names. A table of files; the ext chip is the icon; nothing is ink. */ +.v2-artifacts { width: 100%; max-width: 1040px; margin: 0 auto; display: flex; flex-direction: column; gap: 16px; min-width: 0; } +.v2-artifacts__controls { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; } +.v2-artifacts__seg button { min-height: 30px; font: 600 11px/16px var(--f-mono); } +.v2-artifacts__search { display: flex; align-items: center; gap: 8px; min-width: 220px; height: 36px; margin-left: auto; padding: 0 10px; border-radius: 9px; background: var(--sf); box-shadow: inset 0 0 0 1px var(--d); } +.v2-artifacts__field { flex: 1 1 auto; font-size: 13px; color: var(--ph); } +.v2-artifacts__search-key { font: 500 11px/16px var(--f-mono); color: var(--mu); } +.v2-artifacts__table-wrap { overflow: hidden; border-radius: 12px; background: var(--sf); box-shadow: inset 0 0 0 1px var(--d); } +.v2-artifacts__table { width: 100%; border-collapse: collapse; font-size: 13px; line-height: 18px; color: var(--ink); } +.v2-artifacts__table th { padding: 8px 12px; border-bottom: 1px solid var(--d); font: 500 11px/16px var(--f-mono); color: var(--mu); text-align: left; text-transform: lowercase; white-space: nowrap; } +.v2-artifacts__table td { height: 40px; padding: 4px 12px; border-bottom: 1px solid var(--d); vertical-align: middle; color: var(--se); } +.v2-artifacts__table tr:last-child td { border-bottom: 0; } +.v2-artifacts__file { display: flex; align-items: center; gap: 10px; min-width: 0; } +.v2-artifacts__ext { display: inline-flex; align-items: center; justify-content: center; min-width: 44px; height: 20px; padding: 0 5px; border-radius: 6px; box-shadow: inset 0 0 0 1px var(--b); font: 500 11px/14px var(--f-mono); letter-spacing: 0.02em; color: var(--se); } +.v2-artifacts__pod-line { display: none; font: 500 11px/16px var(--f-mono); color: var(--se); } +.v2-artifacts__name { all: unset; box-sizing: border-box; cursor: pointer; min-width: 0; font: 600 13px/18px var(--f-body); color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.v2-artifacts__mono { font: 500 11px/16px var(--f-mono); color: var(--se); white-space: nowrap; } +.v2-artifacts__foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; } +.v2-artifacts__more { all: unset; box-sizing: border-box; cursor: pointer; padding: 6px 4px; font: 600 12px/16px var(--f-body); color: var(--ink); text-decoration: underline; text-underline-offset: 3px; } +.v2-artifacts__empty { padding: 18px 20px; border-radius: 12px; box-shadow: inset 0 0 0 1px var(--d); background: var(--sf); font-size: 13.5px; line-height: 1.45; color: var(--se); } +.v2-artifacts__error { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px; border-radius: 12px; box-shadow: inset 0 0 0 1px var(--d); background: var(--sf); font-size: 13.5px; color: var(--ink); } +.app.m .v2-artifacts { gap: 12px; } +.app.m .v2-artifacts__controls { flex-direction: column; align-items: stretch; } +.app.m .v2-artifacts__seg button { flex: 1 1 0; min-height: 44px; justify-content: center; } +.app.m .v2-artifacts__search { margin-left: 0; height: 44px; } +.app.m .v2-artifacts__table { table-layout: fixed; } +.app.m .v2-artifacts__table th:nth-child(3), .app.m .v2-artifacts__table td:nth-child(3), +.app.m .v2-artifacts__table th:nth-child(4), .app.m .v2-artifacts__table td:nth-child(4), +.app.m .v2-artifacts__table th:nth-child(6), .app.m .v2-artifacts__table td:nth-child(6) { display: none; } +.app.m .v2-artifacts__table th:nth-child(2), .app.m .v2-artifacts__table td:nth-child(2) { width: 64px; } +.app.m .v2-artifacts__table th:nth-child(5), .app.m .v2-artifacts__table td:nth-child(5) { width: 52px; } +.app.m .v2-artifacts__table td { height: 44px; } +.app.m .v2-artifacts__file { flex-wrap: wrap; row-gap: 2px; } +.app.m .v2-artifacts__pod-line { display: block; flex: 1 1 100%; } +.app.m .v2-artifacts__name { white-space: normal; overflow-wrap: anywhere; } +.app.m .v2-artifacts__error { flex-direction: column; align-items: stretch; } +.app.m .v2-artifacts__error .b { height: 44px; } +.app.m .v2-artifacts__more { min-height: 44px; }

Same look. Less said.

  • One screen firstRepeated blocks become a table; rare settings collapse.
  • @@ -1164,6 +1202,33 @@

    Same look. Less said.

    +
    +

    Artifacts

    /v2/artifacts
    helper words list – → 61empty – → 24scroll 390 – → 1.0×
    +
    +
    Shared files, newest first · 1440images, docs and pages

    Artifacts

    24 · every file and page shared in your pods
    FileKindPodShared byWhenSize
    northwind
    docnorthwindKai4m212 KB
    northwind
    imagenorthwindIvy38m1.4 MB
    docs
    docdocsIvy1h9.2 KB
    northwind
    pagenorthwindKai3h—
    support
    imagesupportDana6h380 KB
    northwind
    docnorthwindDana2d96 KB
    docs
    pagedocsIvy5d—
    7 of 24 · newest first
    +
    Nothing shared yet · 1440before the first attachment

    Artifacts

    0 · every file and page shared in your pods
    Nothing shared yet. Attach a file in any pod and it lands here.
    +
    +
    +
    Load failed · 1440list could not load

    Artifacts

    +
      +
    • One query, three filters. Kind, pod and search sit in one row above the table and write to the URL, so a link carries the filter. The pod control shows two pods, then more ▾.
    • +
    • The extension is the icon. Each file leads with a bordered mono chip of its own extension, never a colour square. The name is the open act: an image opens the lightbox, a page or doc opens in a new tab.
    • +
    • Nothing here is ink. The page has no primary act; 17 more is an underlined text key in the foot, and the ext chips share one width so names align.
    • +
    • At 390 the Pod, Shared by and Size columns drop. The pod folds under the name as a mono line, and rows and controls are 44px.
    • +

    Each state, one line

    + + + + +
    Shared filesNewest first, 50 at a time; the foot reads "7 of 24 · newest first" and offers the rest.
    Nothing shared yetThe head count reads 0, the controls stay, and one dashed box says where files come from.
    Nothing matchesSame box with "Nothing matches. Clear a filter or the search." Shown when any filter or search is set.
    Load failedThe head and controls stay. One line and Retry; the table does not render.
    +
    +
    +
    Shared files, newest first · 390

    Artifacts

    24
    FileKindPodShared byWhenSize
    northwind
    docnorthwindKai4m212 KB
    northwind
    imagenorthwindIvy38m1.4 MB
    docs
    docdocsIvy1h9.2 KB
    northwind
    pagenorthwindKai3h—
    support
    imagesupportDana6h380 KB
    northwind
    docnorthwindDana2d96 KB
    6 of 24 · newest first
    Pods
    3Needs you
    Team
    Settings
    +
    Nothing shared yet · 390

    Artifacts

    0
    Nothing shared yet. Attach a file in any pod and it lands here.
    Pods
    3Needs you
    Team
    Settings
    +
    Load failed · 390

    Artifacts

    Pods
    3Needs you
    Team
    Settings
    +
    +
    +

    Dark mode

    one dark value per token
    diff --git a/docs/design/artboards/d215/targets.json b/docs/design/artboards/d215/targets.json index 46d45d680..a82413914 100644 --- a/docs/design/artboards/d215/targets.json +++ b/docs/design/artboards/d215/targets.json @@ -198,5 +198,29 @@ "runtrace-error-390": { "helperWords": 0, "innerRatio": 1 + }, + "artifacts-list-1440": { + "helperWords": 61, + "innerRatio": 1 + }, + "artifacts-empty-1440": { + "helperWords": 24, + "innerRatio": 1 + }, + "artifacts-error-1440": { + "helperWords": 3, + "innerRatio": 1 + }, + "artifacts-list-390": { + "helperWords": 33, + "innerRatio": 1 + }, + "artifacts-empty-390": { + "helperWords": 16, + "innerRatio": 1 + }, + "artifacts-error-390": { + "helperWords": 3, + "innerRatio": 1 } }