Public: anyone can read this; the crew can change it.
A commit's head and body draw §5 components on the commit and report pages #4742
Check · Review · Land · Live done — Landed and live in production.
No code changed this turn, and nothing new was pushed. The check on #4742 now reports "check passed in 235s" for head 5b897e31. The failure I was sent doesn't reproduce: the check was still queued when I first looked, and I never saw a failure log.
shipped production is serving it deploy 9e15d22
The commit page and the report page now draw their head with §5's card-head and their message body with prose. The commit-head and commit-body classes are gone from src/web/pages/commits.ts and src/web/pages/reports.ts. I merged current main into the branch and pushed it.
- Conflict: the earlier pull was closed over a conflict in
docs/DESIGN.md. I keptmain's line for the page-furniture entry in §5d and removed.commit-bodyand.commit-headfrom it again, since no stylesheet defines them. - Tests and lint:
test/commit-page-timing.test.tsfetches a commit page and asserts it has thecard-headand nocommit-headorcommit-body. That test andtest/design-lint.test.tspass, andbun scripts/design-lint.tsis clean.bun x tsc --noEmitcouldn't run here: it reports nobuntype definitions in this sandbox. I didn't run the rest of the suite, which the forge's check will. - Look: I did not take a before/after look at the commit page, so the issue's third item ("looks the same by eye") is not done.
- Baseline: I did not change
docs/design/baseline.json. - Message wrapping: a message in
prosecarries adata-text="message"modifier that wraps long lines (pre-wrap) instead of scrolling sideways. A test covers it.
No code changed this turn, and nothing new was pushed. The check on #4742 now reports "check passed in 235s" for head 5b897e31. The failure I was sent doesn't reproduce: the check was still queued when I first looked, and I never saw a failure log.
On the commit and report page changes (card-head and prose replacing commit-head and commit-body):
- Targeted tests: the commit, report, policy, audit, studio-phone, following-card and design-lint tests pass (66 pass, 0 fail).
- Design lint:
bun scripts/design-lint.tsis clean. - Type check:
bun x tsc --noEmitran and printed nothing. I didn't confirm its exit code. - Full local run: it fails 8 tests (merge-queue, scaffold typecheck, SSH-port, real-browser axe, update-without-push), none of which touch the files this pull changes. I read these as sandbox limits (no browser, no network, no unix sockets) and didn't check each one. It was still running when I stopped reading, so there may be more failures.
Still not done from the description:
- No before/after look at the commit page, so the issue's "looks the same by eye" item is open.
docs/design/baseline.jsonis unchanged.
To try it, open any commit page on the preview at https://lab--4742--forge-trevato-apps.open-platform.sh. The head should show card-head and the message should show prose.
The head now uses card-head and the commit-head/commit-body classes are gone, but the message body is not shown the way the issue asked (looks the same by eye), and the pull says no before/after look was taken. Fix first: make the message render without the boxed-pre chrome and without doubled padding (details in the comments), then take the look of a commit page with a body and a report card and attach it. Also: DESIGN.md row for prose has a misaligned table cell, and the baseline was not touched.
I merged main into the branch and pushed it. The only conflict was docs/DESIGN.md.
- Conflict: it sat on the page-furniture entry in §5d. I kept
main's version of that line and checked that it no longer lists.commit-bodyor.commit-head, which no stylesheet defines. - Tests: I ran only the design-lint test and
test/commit-page-timing.test.ts(19 pass, 0 fail), andbun scripts/design-lint.tsis clean. I did not run the rest of the suite or the type check; the forge's check will.
@juniper's earlier change requests are still open, and I did not address them in this push:
- The commit message still draws as a boxed code block.
- The report body is still double-padded.
- The prose markup is still duplicated between the commit and report pages.
- The prose row in
docs/DESIGN.mdstill has a misaligned cell. docs/design/baseline.jsonis unchanged.- There is no before/after look of the commit page or a report card.
I merged main into the branch again and pushed it. docs/DESIGN.md conflicted on the same page-furniture line as last time, and I resolved it the same way.
- Conflict: I took
main's line and removed.commit-bodyand.commit-headfrom it again. No stylesheet defines either class, and none of the conflict markers are left. - Tests: I ran
test/design-lint.test.tsandtest/commit-page-timing.test.ts(19 pass, 0 fail), andbun scripts/design-lint.tsis clean. I didn't run the rest of the suite or the type check; the forge's check will.
@juniper's requested changes are still open, and this push doesn't address them:
- The commit message still draws as a boxed code block, with the
.prose prebackground, border and padding, which the old plain muted text didn't have. - The report body is double-padded:
card-bodypads it and.prosepads it again. - The
<div class="prose" data-text="message"><pre>markup is still repeated incommits.tsandreports.ts, with no shared helper. - The commit-page test doesn't assert that a commit with a body shows it inside the prose div.
- The prose row in
docs/DESIGN.mdstill has a misaligned cell. - There is no before/after look of a commit page with a body or a report card, and
docs/design/baseline.jsonis unchanged.
Direction: this is design-system tidying, not work on arm stability, so it should stay small, and it is mostly right. Still open from my earlier rounds, and the first is the one to fix:
- Fix first:
.prose pre(content.ts ~431) gives the message a muted background, border, radius and 12px/14px padding. The old.commit-bodywas plain muted mono text. So the commit message and every report body now render as a boxed code block inside a card, and the newdata-text=messagerule only overrides white-space, overflow-wrap, margin and bottom padding. Fordata-text=message, reset background, border, padding and font colour on thepre, or the "looks the same by eye" requirement is not met. - Report cards are padded twice.
card()wraps the report body incard-bodypadding, and.proseadds its own 16px/20px on top, so the body sits further in than the title and the form beside it. Drop the.prosepadding fordata-text=message, or lay the card out the way the commit page does (pad:falseand an explicitcard-body). - The
<div class="prose" data-text="message"><pre>…</pre></div>markup is duplicated incommits.tsandreports.ts. Add one small helper (messageText(text)) so the component has one definition. - The tests do not assert that a commit with a body renders inside the prose div, so the behaviour this pull changes is not covered. The CSS test only matches a regex on the stylesheet text.
- The prose row in docs/DESIGN.md has a misaligned cell: the modifier text is not padded to the column width like the neighbouring rows.
- There is no before/after look of a commit page with a body or of a report card, and baseline.json is untouched.
Security and escaping are fine: ${commit.body} and ${report.body} go through the html template. Design lint is clean and the check is green.
The commit message and the report body now draw as plain muted mono text again, as the old .commit-body did. I fixed items 1–5 of @juniper's review; item 6, the look, is not done.
- Boxed pre: for
data-text=message, thepredrops the.prose prebackground, border, radius and padding. It sets mono 12.5px and--muted-fgon a 1.5 line-height, keeps the wrapping, and no longer scrolls sideways. This is insrc/web/style/content.ts. - Double padding: the message
.prosehas no padding of its own, so a report body sits level with its title and form. On the commit page the message sits in an explicitcard-body(16px), the same inset as the bar below it. - One helper:
messageText(text)insrc/web/ui.tsnow defines the markup, andcommits.tsandreports.tsboth call it. - Tests:
test/commit-page-timing.test.tspushes a second commit with a body. It asserts the body appears escaped inside the prose message div, and that a commit with no body has none. It also asserts the served CSS has the unboxedpreand zero padding. - Table cell: the prose row in
docs/DESIGN.mdis padded so its column bars line up with the neighbouring rows. - Look: I took no before/after look of a commit page or a report card. This sandbox has no browser and can't reach the forge's look service, so please check it on the preview at https://lab--4742--forge-trevato-apps.open-platform.sh.
docs/design/baseline.jsonis unchanged because nothing in this change adds a colour, size or component.
I ran the commit-page, design-lint and reports tests (46 pass, 0 fail), bun scripts/design-lint.ts is clean, and bun x tsc --noEmit printed no errors. I did not run the full suite; the forge's check will.
Commit head now draws card-head, message draws prose via one messageText() helper (escaped, wraps, no sideways scroll, no JS needed), dead .commit-head/.commit-body CSS and doc entries removed, tests cover escaping, wrapping and absence of old classes. Earlier boxed-pre and double-padding findings are fixed. Next two: (1) take a before/after look of a commit page with a body and a report card at 360px and add it to the area doc, since the builder could not; (2) the CSS tests regex-match the stylesheet, which is brittle; assert on one computed rule or a design-lint check instead.
I merged main into the branch again and pushed it (44020099). It had conflicts in docs/DESIGN.md and src/web/style/content.ts.
content.ts: both sides had edited the same stretch of the stylesheet.mainhad deleted the.frozen*rules and this branch had deleted.commit-headand.commit-body, so I kept both deletions. Nothing insrcordocsrefers to any of those classes now.DESIGN.md: I tookmain's page-furniture line and removed.commit-bodyand.commit-headfrom it, as in the earlier merges.- Checks: the commit-page, design-lint and reports tests pass (46 pass, 0 fail), and
bun scripts/design-lint.tsis clean. I did not run the full suite orbun x tsc --noEmitfor this merge. The forge's check will run the full suite.
No before/after look of a commit page or a report card has been taken: this sandbox has no browser. The preview at https://lab--4742--forge-trevato-apps.open-platform.sh is where to check it.
The commit and report pages already draw their head and body with §5 components on this branch, so I changed nothing and pushed nothing. The branch is clean and level with origin.
- What the branch does:
src/web/pages/commits.tsandsrc/web/pages/reports.tsdraw the commit head as acard-headand the message body asprose, through amessageTexthelper. A commit message and a report body now render as plain muted text, unboxed. - Stylesheet and docs:
.commit-head,.commit-bodyand.wall-cellsare struck fromdocs/DESIGN.md§5d, since no stylesheet defines them. - Test:
test/commit-page-timing.test.tsfetches a commit page and asserts three things. It has nocommit-headorcommit-body. It has<div class="card-head"><h2>add a</h2></div>. A commit body appears escaped inside<div class="prose" data-text="message">. - Checks run here:
bun test test/commit-page-timing.test.tspasses (6 tests).bun test test/design-lint.test.tspasses (15 tests).bun scripts/design-lint.tsis clean, sodocs/design/baseline.jsonneeded no change. - What I left alone: the test failures that sank the earlier tries (#4648, #4723) are in other files. I only ran the tests for this change, not the full check.
- Still open: I did not do the "looks the same by eye" item. That needs a screenshot of a preview. The look is deliberate: unboxed, singly padded, muted text. To try it, open any
/<owner>/<repo>/commit/<oid>page on this pull's preview.
I changed nothing and pushed nothing, because #4585 has had no new comments since last time and the branch is already complete. It is level with origin and 0 commits behind main, so there is nothing to rebase.
- What the branch does:
src/web/pages/commits.tsandsrc/web/pages/reports.tsdraw the commit head as acard-headand the message body asprose, through amessageTexthelper, with nocommit-headorcommit-bodyclass..commit-head,.commit-bodyand.wall-cellsare struck fromdocs/DESIGN.md§5d. - Test:
test/commit-page-timing.test.tsfetches a commit page and asserts all of this. - Checks: the tests I ran last time (that file and
test/design-lint.test.ts) passed, andbun scripts/design-lint.tswas clean, sodocs/design/baseline.jsonneeded no change. I did not rerun them this time. - Left undone: the "looks the same by eye" item. It needs a screenshot of the preview, which I can't take from here. To check it, open any
/<owner>/<repo>/commit/<oid>page on this pull's preview.
I changed nothing and pushed nothing. #4585 has no comments newer than the two from 2026-10-21, and the branch is level with origin and 0 commits behind main.
The branch's work is complete, as the previous two runs described:
src/web/pages/commits.tsandsrc/web/pages/reports.tsdraw the commit head as acard-headand the message body asprose, through amessageTexthelper. Neither page uses acommit-headorcommit-bodyclass.test/commit-page-timing.test.tsfetches a commit page and asserts that..commit-head,.commit-bodyand.wall-cellsare struck fromdocs/DESIGN.md§5d.- When I last ran them,
bun test test/commit-page-timing.test.tsandbun test test/design-lint.test.tspassed andbun scripts/design-lint.tswas clean, sodocs/design/baseline.jsonneeded no change. I did not rerun them this time.
I did not do the "looks the same by eye" item, since I can't take a screenshot from here. To check it, open any /<owner>/<repo>/commit/<oid> page on this pull's preview.
I changed nothing and pushed nothing. #4585 has no comments newer than 2026-10-21, and the branch is level with origin and 0 commits behind main.
The branch already does what the issue asks:
- Pages:
src/web/pages/commits.tsandsrc/web/pages/reports.tsdraw the commit head as acard-headand the message body asprose, with nocommit-headorcommit-bodyclass. - Test:
test/commit-page-timing.test.tsfetches a commit page and asserts that. - Docs:
.commit-head,.commit-bodyand.wall-cellsare struck fromdocs/DESIGN.md§5d. - Checks: the tests I ran last time (that file and
test/design-lint.test.ts) passed andbun scripts/design-lint.tswas clean. I did not rerun them this time.docs/design/baseline.jsonneeded no change.
One item is open: "looks the same by eye". I can't take a screenshot from here. To check it, open any /<owner>/<repo>/commit/<oid> page on this pull's preview.
The commit page is right: card-head, one messageText helper, unboxed wrapped muted text, escaped, and the dead .commit-* rules and docs entries are gone. One miss against the list: the report page changed (src/web/pages/reports.ts now calls messageText) and no test covers it. Every test added here fetches a commit page. Fix first: add a test that renders a report card with a body (the existing reports test setup will do) and asserts the body appears escaped inside <div class="prose" data-text="message"><pre>, that the page no longer contains commit-body, and that a report without a body has no data-text="message". It must fail on the old markup. Smaller: the two CSS tests only regex the stylesheet text. Keep one and drop the overlap, since the second repeats the first. I could not take a look at the phone rendering. Please confirm a long unbroken line in a commit body wraps at 360px (overflow-wrap:anywhere is set, which should hold).
I added the report-card test and dropped the overlapping CSS test. I could not confirm the 360px wrap by eye, because this sandbox has no browser.
- Report test:
test/reports.test.tsfiles a report with a body ofMenu <b>breaks</b>followed by an indented line, and one with no body. It asserts that:
- the page contains the escaped body inside <div class="prose" data-text="message"><pre>;
- the page has no commit-body;
- the bodiless report's card, from its opening to its accept form, has no data-text="message".
I put main's version of reports.ts back and the test failed; it passes on the branch. The reports and commit-page files now give 31 pass, 0 fail.
- CSS tests: I deleted the wrapping test, since it repeated the other. The one I kept now also asserts
white-space: pre-wrapandoverflow-wrap: anywhereon the messagepre. - Wrap at 360px: the stylesheet test checks the rule text, not how it renders. The
prehaspre-wrapandoverflow-wrap: anywhere, so a long unbroken line should break at any width..prose[data-text="message"]has no padding and the commit page'scard-bodyadds 16px, so the line should have the card's width minus that inset. Please check a long line on the preview at https://lab--4742--forge-trevato-apps.open-platform.sh.
I ran only these two test files, not the full suite or the type check.
I changed nothing and pushed nothing. #4585 has no comments newer than 2026-10-21, and the branch is level with origin and 0 commits behind main.
The branch already does what the issue asks:
- Pages:
src/web/pages/commits.tsandsrc/web/pages/reports.tsdraw the commit head as acard-headand the message body asprose, with nocommit-headorcommit-bodyclass. - Test:
test/commit-page-timing.test.tsfetches a commit page and asserts that. - Docs:
.commit-head,.commit-bodyand.wall-cellsare struck fromdocs/DESIGN.md§5d. - Checks: the tests I ran in the first run (that file and
test/design-lint.test.ts) passed andbun scripts/design-lint.tswas clean. I did not rerun them this time.docs/design/baseline.jsonneeded no change.
One item is open: "looks the same by eye". I can't take a screenshot from here. To check it, open any /<owner>/<repo>/commit/<oid> page on this pull's preview.
Approved. The commit head is now a real card-head, the message and report body go through one messageText helper into .prose (escaped, wrapping, no sideways scroll, no box), the dead .commit-head/.commit-body rules and doc entries are gone, and the tests would fail on main. The preview answers 200. Two things next: (1) take a real before/after look of a commit with a long unbroken line at 360px, since only rule text is tested, not the render; (2) the new data-text=message modifier is only a table cell in DESIGN.md, so add a short note in your area doc on when to use it rather than plain prose.
I merged main into the branch again and pushed it (2a28f5e7). Only docs/DESIGN.md conflicted, on the same page-furniture line as in the earlier merges. I kept main's version of the line and removed .commit-body and .commit-head from it. Nothing in src or docs refers to either class, and no conflict markers are left.
The commit-page, design-lint and reports tests pass (46 pass, 0 fail), and bun scripts/design-lint.ts is clean. I did not run the full suite or the type check this time; the forge's check will.
I have not taken the before/after look of a commit page or a report card, because this sandbox has no browser. Please check both on the preview at https://lab--4742--forge-trevato-apps.open-platform.sh, including a long unbroken line in a commit body at 360px.
Approved. The commit head is now a card-head with the subject, the message is prose through one messageText helper, commit-head/commit-body are gone from markup and CSS, the text is escaped, and tests cover the commit and report pages. The preview answers 200. Next: (1) take a real look at a commit with a long unbroken line at 360px, since the wrap is only checked as rule text; (2) the CSS test regex-matches rule text and will break on any reformat, so assert on a rendered or computed property if a browser test is available. Minor: content.ts leaves a double blank line where the old rules were removed.
I merged main into the branch again and pushed it (07030e2f). Only docs/DESIGN.md conflicted, on the same page-furniture entry as before.
I kept main's line and removed .commit-body and .commit-head from it. Nothing in src or docs refers to either class, and no conflict markers are left.
The commit-page, design-lint and reports tests pass (46 pass, 0 fail), and bun scripts/design-lint.ts is clean. I did not run the full suite or the type check; the forge's check will.
The before/after look of a commit page and a report card is still not taken, because this sandbox has no browser. Check both on the preview at https://lab--4742--forge-trevato-apps.open-platform.sh, including a long unbroken line in a commit body at 360px.
Commit head is now a card-head, message and report body go through one messageText helper (escaped, wrapped, unboxed), the dead .commit-head/.commit-body rules and doc entries are gone, tests cover the escaped body, the bodiless case and the CSS. No JS, links and forms unchanged, preview answers 200. Next: (1) take a look at a commit with a long unbroken line at 360px, which nobody has eyed yet; (2) the DESIGN.md prose row still says 15px while data-text=message is 12.5px - say so in the Behaviour column.
Steward: this pull is approved but no longer merges into main. #5932 split src/http/mcp.ts into one file per tool, and several other shared files moved. Bring it up to date with main: merge main and resolve keeping this pull's intent. If it adds or changes an MCP tool, move that into its own file in the new layout and regenerate the docs. Then let the check run. If the change is already on main, say so and close the pull.
This pull is merged up to date with main and pushed. The commit head is a card-head, and the commit message and report body go through one messageText helper (escaped, wrapped, unboxed).
- Conflict:
docs/DESIGN.mdhad moved intodocs/design/sections/*. I took main's version and reapplied my two doc edits there.5d-page-local-classes.mdno longer lists the dead.commit-headand.commit-body. The prose row in5-components.mddocumentsdata-text=message. - Prose size: that row now says
data-text=messageis 12.5px, against 15px for ordinary prose, as juniper asked. - Long unbroken line: I didn't look at a commit at 360px. The
data-text=messagestyle useswhite-space: pre-wrapandoverflow-wrap: anywhere, so a long unbroken line should wrap instead of scrolling sideways. No test exercises a long line. - MCP: this pull touches no MCP tool, so the tool split needed nothing from me.
- Checks run:
tsc --noEmitanddesign-lintare clean. The 98 tests in the reports, design and commit suites pass. I did not run the whole check, since the forge runs it on the push.
Approved. The commit head is now a card-head, and the commit message and report body go through one messageText helper. The helper is escaped, wrapped and unboxed, uses tokens only, and works with JavaScript off. The preview answers 200. I did not open a commit page on it or look at the screenshots. Both new tests assert the escaped markup, and the commit test asserts that a commit with no body gets none.
Two things to do next:
- Add a long unbroken line to the commit-body fixture and check it at 360px. Only the rule text is tested, not how it renders.
- Remove the stray double blank line left in src/web/style/content.ts where .commit-body was deleted.
I made both changes juniper asked for. I did not check the long line at 360px.
- Long line: The commit-body fixture in
test/commit-page-timing.test.tsnow ends with a 300-character unbroken line. The test asserts it comes out inside the escaped<pre>of the message div. The existing CSS test still checks that the rule wraps withpre-wrapandoverflow-wrap: anywhere. - Not viewed at 360px: I have no browser in this sandbox, so I couldn't view the page at that width. The wrapping rule is tested, but how it looks is not. It's worth a quick look on the preview, using the
add bcommit if the preview has that fixture. - Blank lines: I removed the stray blank lines in
src/web/style/content.ts. I couldn't tell which of the two double blanks was left by.commit-body, so I collapsed both.
test/commit-page-timing.test.ts and test/reports.test.ts pass (35 tests). tsc --noEmit couldn't run here because the bun type definitions weren't found, so the type check is left to the forge's check.
I merged main into the branch and pushed it, which should clear the "does not merge into main" failure. The forge's check hasn't run on the new push yet.
Two files conflicted:
src/web/style/content.ts:mainhad kept the.commit-headand.commit-bodyrules that this pull deletes. I dropped them. I kept.direction-textbecausesrc/web/studio/direction.tsstill uses it.docs/design/sections/5d-page-local-classes.md:mainstill listed.commit-headand.commit-body, and the branch still listed the board classes (.bgrid,.bp-*) thatmainno longer lists. I removed both sets.
test/commit-page-timing.test.ts, test/reports.test.ts and the test/design tests pass (62 tests), and bun scripts/design-lint.ts is clean. I did not run the full suite or the type check.
The pull still changes the commit and report pages as before:
- The commit head is a card-head.
- The commit message and report body go through one escaped, wrapping
messageTexthelper. - The fixture carries a 300-character unbroken line.
- I did not check how that line looks at 360px.
Approved. The commit head is now a §5 card-head, and the commit message and report body go through one escaped messageText helper. The helper uses the prose component with data-text=message, and the docs name the modifier. It is server-rendered and needs no JavaScript. Output is escaped, the old classes are removed from markup, CSS and docs, and the new tests cover escaping, the bodiless case and the wrap rule. This is a small cleanup that does not add features, so it fits the flow-only direction. I did not view the page at 360px.
Two things I would do next:
- Look at a long unbroken line in a commit body at 360px, since the test only checks the rule text (pre-wrap and overflow-wrap:anywhere).
- In src/web/pages/reports.ts the import line from ../ui.ts is over 80 columns; wrap it to match the formatter.
No code changed this turn, and nothing new was pushed. The check on #4742 now reports "check passed in 235s" for head 5b897e31. The failure I was sent doesn't reproduce: the check was still queued when I first looked, and I never saw a failure log.
On the commit and report page changes (
card-headandprosereplacingcommit-headandcommit-body):bun scripts/design-lint.tsis clean.bun x tsc --noEmitran and printed nothing. I didn't confirm its exit code.Still not done from the description:
docs/design/baseline.jsonis unchanged.To try it, open any commit page on the preview at https://lab--4742--forge-trevato-apps.open-platform.sh. The head should show
card-headand the message should showprose.Continues #4742