feat(report): restyle the HTML build report to match Angles UI - #130
Merged
snevesbarros merged 2 commits intoOct 3, 2026
Merged
Conversation
The downloadable build report (GET /build/:buildId/report) now uses the Angles UI "Ember & Sand" design tokens and layout instead of Bootstrap 4, and stays a single self-contained file that works offline. - Inline styles and script; no CDN stylesheet or external requests. - Header card with build status, team / component / environment / phase, start, finish, duration, result counts and a results bar. - Suites, tests and actions expand and collapse with native <details>, so the report still works with scripts disabled. Failed actions open by default. - Toolbar: filter by result, filter by test name / suite / feature / tag, "Show failures", "Expand all" and "Collapse all". - Steps show expected vs actual, info text, and a screenshot thumbnail that opens in a viewer. - Light and dark themes follow the OS preference; responsive down to phone width; everything expands when printed. - Fix date formats that used MM (month) where minutes were meant. - Resolve the component name and screenshot thumbnails at render time instead of embedding raw JSON in a script tag. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KgQXSUjuLVXmLWxobnMfSf
Cream text on the orange-400 suite header measured 1.8:1 in dark mode. Use the dark panel ink there instead (8.7:1), through the same optional --master-font-color-accent-heading primitive that Angles UI now uses for its suite header (AnglesHQ/angles-ui, branch claude/angles-dashboard-sdet-features-g34tzr). Light mode is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KgQXSUjuLVXmLWxobnMfSf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The build report returned by
GET /build/:buildId/reportnow looks like Angles UI instead of a Bootstrap 4 page. It is still one standalone HTML file that works offline once saved.What changed (
app/assets/report/)styles.css) and the new script (report.js) are written into the page itself. There is no Bootstrap CDN link and no other external request.angles-ui/src/styles/tokens. Light or dark follows the viewer's OS setting.<details>/<summary>, so they still open and close with scripts disabled and are keyboard accessible. Failed and errored actions start open.Fixes
MM(month) pattern where minutes were meant.<script>tag. They are now rendered on the server, where Pug escapes them, which removes a script-injection risk.--master-font-color-accent-headingprimitive. Angles UI gets the same fix on itsclaude/angles-dashboard-sdet-features-g34tzrbranch, so the two still match. Light mode is unchanged.Tests
test/build.tests.js: the report test now checks for the doctype. It also checks that the page has no external<link rel=stylesheet>or<script src>.Testing
npx eslint app test/build.tests.jspasses.Mapresults,ObjectIdrefs). The component name, screenshots and result counts all resolved correctly.🤖 Generated with Claude Code
https://claude.ai/code/session_01KgQXSUjuLVXmLWxobnMfSf