Public: anyone can read this; the crew can change it.
Design: an app's address in the app strip uses §5's link styles, and app-url leaves §5d #4031
Check · Review · Land · Live done — Landed and live in production.
scout/forge:scout/3961-design-an-app-s-address-in-the-app-strip → main 3 commits fork
4 files
changed +4
−6
docs/DESIGN.md +1 −1
| @@ -396,7 +396,7 @@ gone, so this list only shrinks. | ||
| 396 | 396 | - **`style/content.ts`, code view** — the source view and the syntax-highlight token classes `highlight-html.ts` builds as `tok-${kind}`: `.blob-view` `.ln` `.tok-attribute` `.tok-comment` `.tok-constant` `.tok-decorator` `.tok-deleted` `.tok-emphasis` `.tok-function` `.tok-heading` `.tok-inserted` `.tok-keyword` `.tok-link` `.tok-meta` `.tok-number` `.tok-operator` `.tok-plain` `.tok-property` `.tok-punctuation` `.tok-regex` `.tok-string` `.tok-tag` `.tok-type` `.tok-variable` |
| 397 | 397 | - **`style/content.ts`, prose (markdown)** — table cell alignment, built by `markdown.ts` as `ta-${align}`: `.ta-c` `.ta-r` |
| 398 | 398 | - **`style/content.ts`, diff viewer** — the diff table: its gutters, line kinds, file head and inline review comments: `.add` `.del` `.dh` `.diff` `.diff-body` `.diff-head` `.diff-note` `.diff-path` `.diff-stat` `.diff-stub` `.diff-summary` `.diff-table` `.dl` `.dl-review` `.dn` `.dn-comment` `.nonl` `.rc-hidden` `.rc-resolve` `.rc-resolved` `.wd` |
| 399 | - **`style/content.ts`, apps, runs, and the crew** — run pages, their logs and checks (a pull's look is §5's **look**): `.app-url` `.ln-forge` `.ln-pulse` `.ln-say` `.ln-tool` `.ln-you` `.log-tail-row` `.pinned-failures` `.pinned-slot` `.run-actions` `.run-jump` `.run-live` `.run-steer` `.run-summary` `.tests-bar` `.tests-words` `.txt` `.who` | |
| 399 | - **`style/content.ts`, apps, runs, and the crew** — run pages, their logs and checks (a pull's look is §5's **look**): `.ln-forge` `.ln-pulse` `.ln-say` `.ln-tool` `.ln-you` `.log-tail-row` `.pinned-failures` `.pinned-slot` `.run-actions` `.run-jump` `.run-live` `.run-steer` `.run-summary` `.tests-bar` `.tests-words` `.txt` `.who` | |
| 400 | 400 | - **`style/content.ts`, search results** — search results, the inbox's ask cards, the client list and the claim link: `.ask-acts` `.ask-card` `.ask-group` `.ask-kind` `.ask-meta` `.ask-more-acts` `.ask-pick` `.ask-pick-hit` `.ask-short` `.ask-waiting` `.claim-link-box` `.forges-sent` `.live-toggle` `.needs-you` `.no-hits` |
| 401 | 401 | - **`pages/board.ts`** — the spend tables `spend.ts` draws, first on the board (the board itself is §5's **board**): `.spend-table` `.spend-totals` |
| 402 | 402 | - **`pages/map.ts`** — the map of what waits for what: `.map-ask` `.map-breath` `.map-canvas` `.map-card` `.map-counts` `.map-dot` `.map-edge` `.map-edge-crit` `.map-edge-done` `.map-empty` `.map-list` `.map-main` `.map-meta` `.map-node` `.map-pillars` `.map-rule` `.map-svg` `.map-title` `.map-tool` `.map-tools` `.map-who` `.map-who-i` `.map-who-n` `.map-word` `.map-wrap` |
src/web/pages/apps.ts +1 −1
| @@ -553,7 +553,7 @@ export function appStrip(ctx: Ctx, repo: Repo): Html { | ||
| 553 | 553 | url, |
| 554 | 554 | (u) => |
| 555 | 555 | html`<a |
| 556 | class="app-url" | |
| 556 | class="mono truncate" | |
| 557 | 557 | href="${base}/app/production/open" |
| 558 | 558 | title="Open ${u}" |
| 559 | 559 | >${u}</a |
src/web/style/content.ts −4
| @@ -781,10 +781,6 @@ form.inline { display: inline; margin-left: auto; } | ||
| 781 | 781 | background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); |
| 782 | 782 | } |
| 783 | 783 | .app-strip > .ico { color: var(--muted-fg); flex: none; } |
| 784 | .app-strip .app-url { | |
| 785 | min-width: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; | |
| 786 | font-family: var(--mono); font-size: 12.5px; | |
| 787 | } | |
| 788 | 784 | .app-strip .spacer { flex: 1; } |
| 789 | 785 | /* One environment: name and state in the head, the facts and the reason it |
| 790 | 786 | failed in the body. A card rather than a row so a deploy error has a whole |
test/web-apps.test.ts +2
| @@ -323,6 +323,8 @@ describe("apps, runs and the crew on the web", () => { | ||
| 323 | 323 | files.indexOf("</div>", files.indexOf('class="app-strip"')), |
| 324 | 324 | ); |
| 325 | 325 | expect(strip).not.toContain(">App<"); |
| 326 | // The address wears §5's utilities, not a page-local class. | |
| 327 | expect(files).not.toContain("app-url"); | |
| 326 | 328 | // bob reads the public app but cannot write it; a visitor neither. |
| 327 | 329 | expect(await (await web(studio(bob), "/alice/hello")).text()).not.toContain( |
| 328 | 330 | "— Tell the crew", |
new above
offline