Public: anyone can read this; the crew can change it.

The plan map at /:owner/:name/map speaks the home page's language #9767

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

The plan map's side column is now two headed lists of rows on the page's one background. Nothing in it sits in a card box, a bordered canvas frame or a badge any more. `tsc` and `bun scripts/design-lint.ts` are clean. I ran `test/map-page.test.ts`, `map-page-timing`, `map-layout-budget`, `design-map`, `map`, `map-first`, `map-held`, `map-speed` and `map-open-only` together: 42 pass, 0 fail.

shipped production is serving it deploy 3d07d6f

opened this

The plan map's side column is now two headed lists of rows on the page's one background. Nothing in it sits in a card box, a bordered canvas frame or a badge any more. tsc and bun scripts/design-lint.ts are clean. I ran test/map-page.test.ts, map-page-timing, map-layout-budget, design-map, map, map-first, map-held, map-speed and map-open-only together: 42 pass, 0 fail.

What changed

  • Lists: Ready now and By pillar are .card.bare lists (.card.bare is an existing class), with no frame around them. Ready now now comes first in the side column, then By pillar, then Blocked on.
  • Pillar rows: each pillar's counts are muted text instead of a bordered badge.
  • Words in rows: a Ready now row reads #N · ready · holds nothing up. A Blocked on row reads #N · <word> · waits for N · holds up N, so the word and what stands in front of an issue are on the row. The pillar still comes from the pillar row.
  • Canvas: .map-canvas has no border or radius, so the drawing sits on the page.
  • Unchanged: the First button is still a plain POST form with its same-origin check. The 390px single column is untouched. The layout code and the SQL statements are the same, so the layout budget holds.
  • Docs: docs/design/areas/map.md has a new section saying this. No new component class.

Tests

  • test/map-page.test.ts gains two tests. The first asserts that the side column has no boxed card or badge, that Ready now comes before Blocked on, that the ready words are present, that the POST form is still there and that the canvas has no border. It fails on the old markup. The second asserts the Blocked on row shape.
  • I did not run the new test against the old markup. It fails there because the old markup had class="card" and class="badge" in that column.

Left out

  • I did not redraw the SVG cards or their state colours. They are the drawing, not boxes around rows.
  • The counts line under the drawing keeps its word badges. They are the legend for the drawing.
  • Whether each row's pillar name is repeated on it is also not done. By pillar still names it separately.
  • Blocked on lists the blockers. Its waits for N is therefore usually 0, and the number that matters is holds up N.

Try it: open /<owner>/<name>/map on a preview. I did not look at it at 390px; the fit follows from the single-column rule being unchanged.

🤖 Generated with Claude Code

Closes #9760

commented

The plan map's side column is now two headed lists of rows on the page's one background. Nothing in it sits in a card box, a bordered canvas frame or a badge any more. tsc and bun scripts/design-lint.ts are clean. I ran test/map-page.test.ts, map-page-timing, map-layout-budget, design-map, map, map-first, map-held, map-speed and map-open-only together: 42 pass, 0 fail.

What changed

  • Lists: Ready now and By pillar are .card.bare lists (.card.bare is an existing class), with no frame around them. Ready now now comes first in the side column, then By pillar, then Blocked on.
  • Pillar rows: each pillar's counts are muted text instead of a bordered badge.
  • Words in rows: a Ready now row reads #N · ready · holds nothing up. A Blocked on row reads #N · <word> · waits for N · holds up N, so the word and what stands in front of an issue are on the row. The pillar still comes from the pillar row.
  • Canvas: .map-canvas has no border or radius, so the drawing sits on the page.
  • Unchanged: the First button is still a plain POST form with its same-origin check. The 390px single column is untouched. The layout code and the SQL statements are the same, so the layout budget holds.
  • Docs: docs/design/areas/map.md has a new section saying this. No new component class.

Tests

  • test/map-page.test.ts gains two tests. The first asserts that the side column has no boxed card or badge, that Ready now comes before Blocked on, that the ready words are present, that the POST form is still there and that the canvas has no border. It fails on the old markup. The second asserts the Blocked on row shape.
  • I did not run the new test against the old markup. It fails there because the old markup had class="card" and class="badge" in that column.

Left out

  • I did not redraw the SVG cards or their state colours. They are the drawing, not boxes around rows.
  • The counts line under the drawing keeps its word badges. They are the legend for the drawing.
  • Whether each row's pillar name is repeated on it is also not done. By pillar still names it separately.
  • Blocked on lists the blockers. Its waits for N is therefore usually 0, and the number that matters is holds up N.

Try it: open /<owner>/<name>/map on a preview. I did not look at it at 390px; the fit follows from the single-column rule being unchanged.

🤖 Generated with Claude Code

commented

I pushed a new commit to the branch that carries the Try: line the gate asked for. The rule failed because no commit message on the pull had one. I haven't seen the forge's re-run of the check yet, so whether it now passes is unconfirmed.

The new commit changes no files. It is an empty commit whose message says: Try: open /<owner>/<name>/map on the preview; Ready now comes first and its rows have no card box. The code and tests are the same as in the first push, and they passed locally.

What changed

  • On the plan map at /:owner/:name/map, the Ready now and By pillar lists are rows on the page background, with no card box and no badge.
  • Ready now comes first in the side column, and the map canvas no longer has a border.
  • Each row names its word (ready, blocked, waiting and so on), what it waits for and what it holds up.
  • The First button is still a plain POST form with the same-origin check, and the page still works with JavaScript off.
  • docs/design/areas/map.md has a new section describing this, and no new component class was added.
  • test/map-page.test.ts has two new tests for the row shape.

What I left out

  • I did not redraw the SVG cards or their state colours, since they are the drawing and not a box around rows.
  • The counts line under the drawing keeps its word badges, as the legend.
  • I did not check the page at 390px. The fit follows from the single-column rule being unchanged.

How to try it: open /<owner>/<name>/map on the preview.

🤖 Generated with Claude Code

commented

I fixed the failing pillars test and pushed it to the branch. I haven't seen the forge's re-run yet.

The failing test was test/pillars.test.ts, "the map counts open work by pillar…". It still expected the bordered badge around the "no pillar" row's counts. This pull turned those counts into plain muted text, so the test was out of date, not the code. I changed its assertion on line 404 to look for class="muted small" and nothing else. test/pillars.test.ts passes locally (14 pass, 0 fail) and tsc is clean. I did not re-run the other test files from the earlier push.

What changed in the pull

  • On the plan map (/:owner/:name/map), the Ready now and By pillar lists are now plain rows with no card box or badge. Ready now comes first.
  • The map canvas has no border. Each row names its word and what it waits for or holds up.
  • Pillar counts, such as "3 open · 2 ready · 1 blocked", read as muted text.
  • The First button is still a plain POST form with the same-origin check, so it works with JavaScript off.
  • docs/design/areas/map.md describes this, and test/map-page.test.ts has two new tests for the row shape.

Left out

  • I did not redraw the SVG cards or their state colours, since they are the drawing and not a box around rows.
  • The counts line under the drawing keeps its word badges, as the legend.
  • I did not check the page at 390px. The single-column rule is unchanged, so the fit should hold.

How to try it: open /<owner>/<name>/map on the preview.

🤖 Generated with Claude Code

Changes requested — before the latest push

Changes needed:

  1. Box 4 is not met: the rows no longer say their pillar. The issue asks that every issue still shows its pillar, and neither the Ready now rows nor the Blocked on rows in src/web/pages/map.ts name one. The PR description says this was left out. Put the pillar name in each row's meta, or in the leading words (e.g. ready · <pillar> · holds nothing up).
  1. Principle 8, plain words: the Blocked on meta ready · waits for 0 · holds up 1 is noise. This list holds the blockers, so waits for 0 is nearly always shown, and the PR description admits it. Show waits for N only when N > 0, and say it plainly, e.g. ready · holds up 1. Update the second new test to match.
  1. Clean: data-rows="ranked" and data-rows="pillars" are added in map.ts, but no CSS, JS or test reads them. Remove them as dead markup, or assert on them.
  1. Test: the first new test's border check (css.slice(0, css.indexOf("}")) not containing 1px solid) is fragile. Assert on the .map-canvas rule itself. The pillar-row test should also assert that the badge is gone from the By pillar rows, and should cover the pillar name once item 1 lands.
  1. Both doors and the 390px fit were not checked: the PR description says the 390px fit was not looked at. Confirm it, and confirm that the TUI plan screen is unaffected.

The rest is fine. The First button stays a same-origin POST form, Ready now comes first, there is no new class, and docs/design/areas/map.md is updated.

commented

I've pushed changes for items 1–4 and checked the TUI plan screen. I did not check the 390px fit.

What changed

  • Pillar on each row (1): rows in the side column now name their pillar. A Ready now row reads #N · ready · <pillar> · holds nothing up. A Blocked on row reads #N · <word> · <pillar> · holds up N. A repo with no pillars shows no pillar name, and a "no pillar" issue shows none either.
  • Plain words (2): waits for N shows only when N is above 0, so a typical blocker row reads ready · holds up 1.
  • Dead markup (3): the data-rows attributes are gone.
  • Tests (4):

- The border check now reads the .map-canvas rule itself. - The second new test asserts that waits for is absent. - test/pillars.test.ts now asserts there is no badge in the By pillar rows and that a Ready now row leads with its pillar name.

  • Gates: tsc and bun scripts/design-lint.ts are clean. The pillars, map-page, map-page-timing, map-layout-budget, map and design-map tests all pass (42 pass, 0 fail).

Item 5

  • TUI plan screen: it imports only marksFor from src/web/pages/map.ts, and I did not touch that function. test/tui-plan.test.ts and test/tui-limbs-replanned.test.ts pass (6 pass).
  • 390px fit: I cannot render a 390px viewport in this sandbox. The side column is still one column under 860px and the rows wrap, as before. This is unchanged from the earlier push.

Still out

  • The SVG cards and the counts-line badges are unchanged. They are the drawing and its legend.

Try: open /<owner>/<name>/map on the preview.

🤖 Generated with Claude Code

Approved

Ready now comes first and the side lists are rows on the page background. The pillar and the word are on each row, waits for N shows only when N is above 0, and the First POST form is unchanged. The pull is green. I could not open this pull's map on the preview: the one path I tried returned 404, so the 390px fit is judged from the unchanged single-column rule. Next: (1) the counts line under the drawing still uses bordered badges, so move it to muted text if it is not needed as a legend. (2) Add a 390px check to the layout test.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs