Merge branch 'main' into fix/dashboard-tile-links

This commit is contained in:
Marc-André Bombeck authored and GitHub committed 2026-10-02 23:20:23 +02:00
commit 774dff410c
3 files changed
+56 -20

No files matched your search

+10
View File
@@ -21,3 +21,13 @@ CVE-2026-33671
# never reachable at runtime. Re-check when the Node base image ships an npm
# build whose bundled sigstore is >= 4.1.1, then drop this entry.
CVE-2026-48815
# CVE-2026-85393 (node-forge RSA PKCS#1 v1.5 signature forgery, HIGH; GitHub
# advisory GHSA-86w9-cpqp-85rv) — node-forge <= 1.4.0 arrives only through
# @parse/node-apn, which uses it in its certificate-based credential path
# (credentials/certificate/*: p12 / PEM certificate). HealthLog authenticates
# to APNs with a token (.p8 key via APNS_KEY_ID / APNS_TEAM_ID), so that code
# never runs. No fixed release is published (latest is 1.4.0). Remove this
# entry, the matching `auditConfig.ignoreGhsas` entry in pnpm-workspace.yaml,
# and raise the floor once node-forge 1.4.1 is out.
CVE-2026-85393
+36 -20
View File
@@ -428,14 +428,23 @@ test.describe("lab-scan review dialog uses the width it is given", () => {
await expect(rows).toHaveCount(REVIEW_ROWS.length);
const label = `scan review @${vp.label}`;
// The sheet widens from the picking stage to the review stage and the
// row grid re-flows from the container width it is given. Measuring in
// the middle of that sees a half-laid-out row, so wait until the
// surface has kept the same width across two frames.
// The sheet widens from the picking stage to the review stage, and on a
// phone or small tablet it also slides up from the bottom. Measuring
// while either runs compares fields from different frames (the width
// settles before the slide ends, so waiting on width alone was not
// enough). Wait for every running animation and transition to finish,
// then for the surface to hold still across two frames.
await page.evaluate(() =>
Promise.all(
document
.getAnimations()
.map((animation) => animation.finished.catch(() => undefined)),
),
);
await expect
.poll(
async () => {
const before = (await surface.boundingBox())!.width;
const before = (await surface.boundingBox())!;
await page.evaluate(
() =>
new Promise<void>((resolve) =>
@@ -444,10 +453,13 @@ test.describe("lab-scan review dialog uses the width it is given", () => {
),
),
);
const after = (await surface.boundingBox())!.width;
return Math.abs(after - before);
const after = (await surface.boundingBox())!;
return (
Math.abs(after.width - before.width) +
Math.abs(after.y - before.y)
);
},
{ message: `${label}: dialog width settles` },
{ message: `${label}: dialog settles` },
)
.toBeLessThan(0.5);
await expectNoSidewaysScroll(page, label);
@@ -470,20 +482,24 @@ test.describe("lab-scan review dialog uses the width it is given", () => {
// Value, unit and date share a line when the fields have room for three
// columns, and the date wraps under them when they do not.
// "Beside" means the same grid row: to the right of the value and
// starting above the value's bottom edge. Comparing the tops alone was
// too strict, because a field label that wraps onto a second line (it
// depends on the runner's font metrics) moves that field's input down
// by one line while it stays in the same row.
const besideValue = (field: { x: number; y: number }, name: string) => {
expect(field.x, `${label}: ${name} right of value`).toBeGreaterThan(
value.x,
);
expect(field.y, `${label}: ${name} in the value's row`).toBeLessThan(
value.y + value.height,
);
};
if (vp.threeAcross) {
expect(
Math.abs(unit.y - value.y),
`${label}: unit beside value`,
).toBeLessThan(8);
expect(
Math.abs(date.y - value.y),
`${label}: date beside value`,
).toBeLessThan(8);
besideValue(unit, "unit");
besideValue(date, "date");
} else {
expect(
Math.abs(unit.y - value.y),
`${label}: unit beside value`,
).toBeLessThan(8);
besideValue(unit, "unit");
expect(date.y, `${label}: date wraps`).toBeGreaterThan(
value.y + value.height - 1,
);
+10
View File
@@ -110,3 +110,13 @@ minimumReleaseAgeExclude:
- "@next/bundle-analyzer@16.2.12"
- lucide-react@1.27.0
- undici@8.10.0
auditConfig:
ignoreGhsas:
# node-forge <=1.4.0, RSA PKCS#1 v1.5 signature verification. It arrives
# only through @parse/node-apn, which uses it for certificate-based APNs
# credentials (p12 / PEM certificate). HealthLog authenticates to APNs
# with a token (.p8 key, APNS_KEY_ID / APNS_TEAM_ID), so that code path
# never runs. No patched release is published yet (latest is 1.4.0);
# remove this entry and raise the floor once 1.4.1 is out.
- GHSA-86w9-cpqp-85rv