feat: node 24, zero known vulnerabilities, arm64 image and instrument UI redesign - #733
Open
enudler wants to merge 3 commits into
Open
feat: node 24, zero known vulnerabilities, arm64 image and instrument UI redesign#733enudler wants to merge 3 commits into
enudler wants to merge 3 commits into
Conversation
… ui redesign
Runtime and dependencies:
- Node 12 -> 24 (engines >=22, .nvmrc), Sequelize 6, eslint 9 flat config,
mocha 11/sinon 19/nock 14, c8 replacing nyc (spawn-wrap is broken on
modern Node and silently reported ~16% coverage)
- request/request-promise-native removed: outbound HTTP now uses
node:http(s) via requestSender, or fetch
- artillery dependency removed: its JSON schema is vendored at
src/tests/helpers/artillery-test-script.schema.json
- @aws-sdk/client-ecs v3, archiver 8, uuid 13; npm overrides pin patched
transitives. npm audit --omit=dev: 0 vulnerabilities (was 100, 11 critical)
- DATABASE_PORT no longer defaults to 3306 for non-MySQL dialects; unset
leaves the dialect default (5432/1433/3306)
- Docker image builds and runs on linux/amd64 and linux/arm64 (176MB)
- UI: webpack 5, dart-sass (node-sass has no arm64 prebuilds), css-loader 7
pinned to namedExport:false, single monaco-editor copy
UI redesign ("Instrument" direction):
- Design tokens in ui/src/styles/_tokens.scss (light+dark), bridged to ~35
legacy stylesheets through _colors.scss; status hues (held/strain/breach)
reserved for measurement state
- Report hero with p95/RPS/errors/duration readouts and a load-spine trace
against the benchmark run's p95
- Colourblind-validated chart palette assigned by slot; theme-aware monaco
and JSON editors; status pills with glyphs; rebuilt navigation rail with
collapse, mobile overlay and theme toggle
- Page-header actions slot, token-based pagination with disabled states,
single-line mono timestamps, compact durations, ellipsised text cells
- Fixed duplicate 'duration' column id that showed raw seconds on report
tables; both themes verified for contrast, page errors and 390px overflow
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…hcr release Replaces the stale CircleCI pipeline. The integration job runs the same five database/platform combos through the existing run.sh scripts. Release builds multi-arch (amd64+arm64) images to ghcr.io on master pushes and v* tags. Also hardens the processors integration setup: each of the 101 inserts is now asserted (with one retry), so a transient failed insert reports its real error instead of surfacing 30 tests later as an off-by-one paging failure. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Stubbing Date.prototype.constructor never intercepted new Date(), so the expected published_at was a second timestamp taken in the test — flaking whenever the two landed on different milliseconds. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
What
Two things that belong together, since the UI toolchain couldn't move without the runtime moving first:
Runtime & dependencies
engines >=22,.nvmrcat 24. Sequelize 6, umzug, mysql2 3, eslint 9 flat config (neostandard), mocha 11, sinon 19, nock 14.spawn-wrapinstrumentation is broken on modern Node and silently reported ~16% coverage.request/request-promise-nativeremoved (deprecated, unpatched). Outbound HTTP goes throughsrc/common/requestSender.jsonnode:http(s), or nativefetch.artillerydependency removed — it was only needed for one JSON schema, now vendored atsrc/tests/helpers/artillery-test-script.schema.json.@aws-sdk/client-ecsv3,archiver8,uuid13.npm audit --omit=dev: 0 vulnerabilities (was 100, 11 critical). UI audit: 0 (was 17).DATABASE_PORTunset no longer forces 3306 onto non-MySQL dialects.UI redesign
ui/src/styles/_tokens.scss) for colour/type/spacing/motion, light + dark, bridged to ~35 legacy stylesheets through_colors.scss. Status hues (held/strain/breach) are reserved for measurement state and always paired with a glyph or label.durationcolumn id that made report tables show raw seconds instead of formatted durations.CLAUDE.mddocuments the architecture, testing traps, and the design-system rules.Screenshots
Dark report page, dark tests list, and light equivalents were verified route-by-route; the design system section in
CLAUDE.mdincludes the validation commands used.🤖 Generated with Claude Code