Skip to content

Commit 60ed897

Browse files
committed
[docs] Document resolved website advisories
Signed-off-by: Viwat Vchirawongkwin <viwat.v@chula.ac.th>
1 parent cdbb6c3 commit 60ed897

3 files changed

Lines changed: 36 additions & 18 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,13 @@ its annotated tag rather than from the newer branch tip.
2626
contributor, security, architecture, protocol, and validation documentation.
2727
- Added an independent `/privacy` policy and stable `/app` landing page, with
2828
invited Android testing and public TestFlight presented as distinct channels.
29-
- Patched the remediable website PostCSS/Nanoid dependency chain and bounded
30-
the remaining build-only `image-size` advisory behind a static-deploy and
31-
no-metadata-image-route contract until an upstream fix exists.
29+
- Patched the website PostCSS/Nanoid chain, upgraded vinext so `image-size` is
30+
absent from the installed dependency graph, and made high/critical npm audit
31+
findings fail the release gate.
32+
- Hardened vinext's internally bundled image parser against the ICNS, HEIF, and
33+
JXL zero-length denial-of-service paths, with timeout-bounded regression
34+
inputs, fail-closed upstream-drift checks, static-image import guards, and
35+
complete MIT attribution while production remains a static-only deployment.
3236
- Made publication CI fetch the complete source history required by
3337
ancestry-routed firmware gates, and made the RP2 runtime-closure fixture
3438
hermetic instead of depending on a retained local archive.

‎README.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,11 @@ npm ci
201201
npm run check
202202
```
203203

204+
The website gate includes a high/critical npm advisory audit, deterministic
205+
third-party notices, and timeout-bounded regression coverage for the image
206+
parser bundled inside the pinned preview adapter. Production remains a checked
207+
static export with no Node.js website process.
208+
204209
The complete build requires the pinned toolchains documented in the relevant
205210
component README and specifications.
206211

‎tools/web/README.md‎

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -60,25 +60,34 @@ The full release gate is:
6060
npm run check
6161
```
6262

63-
That command checks formatting, lint, strict types, unit/content contracts,
64-
vinext compatibility, the portable Next.js export, and the Sites preview
65-
artifact. Canonical VPS production files are written to `out/`; the
66-
host-specific owner-preview bundle is written to `dist/`, including fully
67-
prerendered launch routes, static discovery files, a static 404 boundary around
68-
the vinext handler, and the exact Sites project binding.
63+
That command checks formatting, lint, strict types, high/critical dependency
64+
advisories, exact third-party notices, unit/content contracts, vinext
65+
compatibility, the portable Next.js export, and the Sites preview artifact.
66+
Canonical VPS production files are written to `out/`; the host-specific
67+
owner-preview bundle is written to `dist/`, including fully prerendered launch
68+
routes, static discovery files, a static 404 boundary around the vinext handler,
69+
and the exact Sites project binding.
6970

7071
No application backend, remote CMS, analytics service, or web-font request is
7172
needed. A normal build needs no runtime or build-time environment variables.
7273

73-
### Temporary build-dependency exception
74-
75-
Vinext currently depends on `image-size` 2.0.2, and npm has no patched release
76-
for GHSA-w3rx-r6r6-pgpr or GHSA-5p2g-fcmc-qvqq. The dependency is confined to
77-
the owner-preview build: production deploys only `out/` and runs no Node.js
78-
process. Until a compatible fix exists, the test gate forbids filesystem
79-
metadata image routes under `src/app`, which are the vinext path that invokes
80-
the parser. Recheck this exception on every vinext or `image-size` update; do
81-
not describe `npm audit` as clean while the two related high findings remain.
74+
### Build-dependency security boundary
75+
76+
Vinext `1.0.0-beta.8` removes `image-size` from the installed npm dependency
77+
graph, so the exact lockfile passes `npm audit --audit-level=high`. Its
78+
published build tooling still embeds the affected `image-size` 2.0.2 parser,
79+
however. PyBLE's post-install step therefore adds reviewed fail-closed guards
80+
for the zero-length ICNS, HEIF, and JXL loops; installation fails if the pinned
81+
upstream source drifts. Timeout-bounded regression inputs exercise all three
82+
paths, and the generated notice explicitly retains the embedded parser's MIT
83+
attribution.
84+
85+
The build contract also forbids static image module imports and filesystem
86+
metadata image routes; authored images remain static `public/` URLs with
87+
explicit dimensions. Production deploys only the checked `out/` tree and runs
88+
no Node.js website process. Keep these defenses until vinext publishes tooling
89+
with a patched parser, then remove the local hardening only alongside its
90+
contracts and notice review.
8291

8392
## Production deployment
8493

0 commit comments

Comments
 (0)