Skip to content

build(deps-dev): bump browserslist from 4.28.2 to 4.28.8 in /web - #159

Merged
PeterGuy326 merged 2 commits into
mainfrom
dependabot/npm_and_yarn/web/browserslist-4.28.8
Sep 3, 2026
Merged

PeterGuy326 merged 2 commits into
mainfrom
dependabot/npm_and_yarn/web/browserslist-4.28.8

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Sep 2, 2026

Copy link
Copy Markdown
Contributor

Bumps browserslist from 4.28.2 to 4.28.8.

Release notes

Sourced from browserslist's releases.

4.28.8

  • Fixed including kaios in baseline queries (by @​Jaybhade).

4.28.7

4.28.6

4.28.5

4.28.4

  • Fixed SyntaxError regression of 4.28.3.

4.28.3

  • Fixed baseline query case-insensitivity (by @​swwind).
Changelog

Sourced from browserslist's changelog.

4.28.8

  • Fixed including kaios in baseline queries (by @​Jaybhade).

4.28.7

4.28.6

4.28.5

4.28.4

  • Fixed SyntaxError regression of 4.28.3.

4.28.3

  • Fixed baseline query case-insensitivity (by @​swwind).
Commits
  • f2f2e6c Release 4.28.8 version
  • d0787c8 Update dependencies
  • fcf8fa9 Merge pull request #939 from Jaybhade/fix/baseline-kaios-without-downstream
  • 57ecd64 fix: support "including kaios" without downstream
  • 093a0f6 Update EM banner
  • b637868 Release 4.28.7 version
  • 313f465 Update dependencies
  • c935c5a Fix regexp performance
  • d7e9e65 Rewrite structure parsing to make it always fast
  • ec4a55e Fix import order
  • Additional commits viewable in compare view
Maintainer changes

This version was pushed to npm by GitHub Actions, a new releaser for browserslist since your current version.


Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    You can disable automated security fix PRs for this repo from the Security Alerts page.

Bumps [browserslist](https://github.com/browserslist/browserslist) from 4.28.2 to 4.28.8.
- [Release notes](https://github.com/browserslist/browserslist/releases)
- [Changelog](https://github.com/browserslist/browserslist/blob/main/CHANGELOG.md)
- [Commits](browserslist/browserslist@4.28.2...4.28.8)

---
updated-dependencies:
- dependency-name: browserslist
  dependency-version: 4.28.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Sep 2, 2026
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Sep 2, 2026
@sun-970

sun-970 commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Review: 发现以下潜在问题

1. node-releases 新增 Node.js >= 18 引擎约束

node-releases2.0.44 升级到 2.0.54 后,新增了 "engines": {"node": ">=18"} 要求。当前 web/package.json 未声明 engines 字段,也没有 .nvmrc / .node-version 文件来约束 Node.js 版本。

风险: 如果 CI 或开发环境使用 Node.js < 18,npm install 可能会产生警告或直接失败。

建议修改:

  • web/package.json 中显式声明 engines 字段,例如:
    "engines": {
      "node": ">=18"
    }
  • 或在项目根目录添加 .nvmrc 文件,明确锁定 Node.js 版本。

2. update-browserslist-db 跨 minor 版本升级 (1.2.3 → 1.3.2)

此依赖作为 browserslist 的子依赖被拉入,升级幅度较大。虽然 lockfile 可以确保一致性,但建议确认 CI 构建流程中 browserslist 的 update-db 钩子是否正常工作。


总结: 建议合并前确认 CI 环境的 Node.js 版本 >= 18,并在 package.json 中显式声明最低 Node.js 版本要求,避免后续依赖升级带来的隐性兼容性问题。

@waterbro-8

Copy link
Copy Markdown
Collaborator

自动化验证回读,不是 approve / 不是 request-changes / 不携带投票,也不合并。 合并需要人工评审,我没有替任何人签。

我做了什么

只点了一次 Update branch(GitHub 服务端把 main 合进这个分支)。没有改这个 PR 的任何内容、没有改 commit、没有 force-push、没有动 label / assignee / milestone。

  • 之前:head=046342fd base=10d4bf7a mergeable_state=behind
  • 现在:head=e0855fc0 base=1332bf46 (= 今天的 main)

结果:15/15 required check 全部 success,包括 main 上红的那一条

CI run 33719269577(attempt 1),commits/e0855fc0/check-runs 的 15 条全部 completed/success:

Web                            Worker                    Go
Deployment profiles            npm wrapper               Offline recall benchmark
npm wrapper compatibility      (node18-linux | node20-linux | node24-windows)
Agent host MCP contract        PostgreSQL integration    HTTP, CLI and MCP lifecycle
Web memory and transfer acceptance                      Workflow, scripts and Compose
Conventional title and linked issue

Web 的 step 级(job 100534869123)——审计步是跑完并 PASS,不是被跳过:

4 Install dependencies    success
5 Audit dependencies      success     <- main 上这一步是 failure
6 Lint                    success     <- main 上是 skipped
7 Type-check              success
8 Build web application   success
9 Upload web build        success

对照:main 自己的 run 33656751024,job 100337084391,step 5 Audit dependencies = failure,step 6-9 全部 skipped。

为什么这次绿能推到 main 上

不是靠"看起来差不多"。merge commit e0855fc0 相对 main=1332bf46 的内容差异只有一个文件,就是这份锁文件:

ref web/package-lock.json 的 blob
main 1332bf4 2bd86c88e17397d8d2bf25df7936850e02663288(红的)
本 PR head 103ae42a203bd4a7317d1ad8a5ceadb9d8db1882
10d4bf7a(本 PR 原 base) 2bd86c88…(与今天 main 同一个 blob)

10d4bf7a → 1332bf46 之间 main 唯一改动的文件是 .github/workflows/npm-publish.yml(用 commits/1332bf46.files 读的),和 web/ 零重叠。所以 e0855fc0 就是"今天的 main + 只换这份锁文件",上面那 15 条绿是对这个对象测的。

这一条红正卡在别的 PR 上

main 自己是红的,所以任何从 1332bf46 起的 PR 都带同一份红锁文件。实测现在仓库里三条 open PR 的 mergeable_state 都是 blocked,唯一失败项就是这一步:

PR head reviewDecision 唯一红
#138(CODEOWNERS) bb9415d6 APPROVED Web → Audit dependencies
#161(proxy 安全头分工) 1c917f96 REVIEW_REQUIRED 同上
#162(mcpName 换 scope) 1f154f2d REVIEW_REQUIRED 同上

#159 合进 main 之后,这三条会随下一次检查运行自然转绿(其中 #138 需要再点一次 update branch 让 CI 重跑)。

剩下的一步

reviewDecision 仍是 REVIEW_REQUIRED。这个仓的 CODEOWNERS 只有 @PeterGuy326@Bindy-lbb(第三个正在 #138 里加),所以我既不能批也不算数。谁点一下 approve,这就是一个可以直接 squash 的 PR。

我明确没做的事

没 approve、没合并、没开 auto-merge、没改 commit 内容、没 force-push、没删分支、没关任何 issue。

@PeterGuy326 PeterGuy326 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code owner review: dependabot dev-dep bump clears the browserslist high advisory that reds main Web→Audit; dev-only, production audit (--omit=dev) 0 vulns; 15/15 CI green on head.

@PeterGuy326
PeterGuy326 merged commit 2e4ec46 into main Sep 3, 2026
15 checks passed
@PeterGuy326
PeterGuy326 deleted the dependabot/npm_and_yarn/web/browserslist-4.28.8 branch September 3, 2026 06:05
PeterGuy326 pushed a commit that referenced this pull request Sep 3, 2026
… headers (#161)

## What this changes

Implements the security-header split decided for this repository on
2026-09-03: **nginx is the single authority for
`X-Content-Type-Options`, `X-Frame-Options` and `Referrer-Policy`,
uniformly `no-referrer`, with the proxied path de-duplicated by
`proxy_hide_header`; the API keeps `Content-Security-Policy`,
`X-XSS-Protection` and `Content-Disposition`.**

Closes #135 (the two live proxy defects) and Closes #136 (the ownership
question that defect raised).

This is the in-repo redo of #144, which came from a fork and is being
closed under the fork-policy decision. It is not a cherry-pick of that
commit — no commit from it is imported here.

### The two defects, as measured

Both were real on `main@1332bf4` and neither is visible by reading the
config, which is why the test starts an nginx rather than grepping one.

1. **`/assets/` lost all three headers.** An `add_header` inside a
location replaces the inherited set instead of adding to it, and that
block has always had `add_header Cache-Control`. Every cached bundle
shipped with no `nosniff`, no `X-Frame-Options` and no `Referrer-Policy`
at all.
2. **`/v1/` sent two conflicting `Referrer-Policy` values on one
response.** The proxy said `same-origin`, the API says `no-referrer`,
and nginx's `add_header` appends rather than replaces, so a client
received both and the effective policy depended on which one the browser
kept. `X-Content-Type-Options` and `X-Frame-Options` were also
duplicated (same value twice).

### Why the API keeps sending the three it no longer owns

`proxy_hide_header` makes the wire value nginx's, which is what "nginx
独占" requires, without deleting `nosniff`/`DENY`/`no-referrer` from
`securityHeadersMiddleware`. A `memd` reached directly — the Helm path
exposes the Service, and `docs/DEPLOYMENT.md` only makes the nginx
guarantee for the container — keeps its defense in depth. If the
intended reading was instead that the Go middleware should stop setting
them, that is a one-line change here and it should be said before merge,
because the alternative silently weakens the no-proxy deployment.

## Test evidence

`scripts/test_nginx_security_headers.sh` renders the shipped template
with the same `envsubst` filter and variables the container entrypoint
uses, runs a fake upstream that answers exactly like
`securityHeadersMiddleware` does, starts nginx against the config, and
reads headers off the wire across five surfaces (`/`, `/assets/`, a 404
under `/assets/`, `/v1/`, `/healthz`).

| run | result |
| --- | --- |
| template as shipped on `main` | **11 of 28 assertions fail** — 6
missing across the two `/assets/` surfaces, `same-origin` on `/` and
`/healthz`, 3 duplicated on `/v1/` |
| this branch | **28 of 28 pass** |
| drop the `/assets/` restatement | 3 fail (`/assets/` 200) |
| drop `always` from the `/assets/` restatement | 3 fail (`/assets/` 404
only) |
| drop `proxy_hide_header` | 3 fail (`/v1/` duplicates) |

Each of the three fix sites is therefore individually load-bearing, and
the 404 surface earns its place: it is the only one that tests `always`.

The harness also refuses to report success on a partial run (the
assertion count is pinned), hard-fails when a caller names an
`NGINX_BIN` that is not executable, and only reports `SKIP` when no
nginx was found at all — so the CI leg cannot go green by measuring
nothing.

Executed locally against nginx **1.27.4**, the same minor the
`web/Dockerfile` pins (`nginxinc/nginx-unprivileged:1.27.4-alpine3.21`).

**Measured in CI on the built image, and it did go red there first.**
The first run of the new step failed exactly where this paragraph
expected the risk to be: `web/Dockerfile:17` ends on
`nginxinc/nginx-unprivileged`, whose own build stops at `USER 101`, so
`apk add` could not write the package database -- `ERROR: Unable to lock
database: Permission denied`, `exit code: 99`. Commit `1c917f96`
installs the four tools in a throwaway child image that returns to uid
101 afterwards, so the harness still runs unprivileged, as the shipped
container does. On that head `Deployment profiles` is green and its job
log carries `all 28 security-header assertions passed`, so the leg
executed the contract against the nginx that ships rather than printing
`SKIP`. The harness content measured above is unchanged by that commit;
it touches only the workflow step.

## Not in scope here, and worth a decision

Nothing in this repository sets a `Content-Security-Policy` for the SPA
itself — `default-src 'none'` is an API-only value and would break the
web app if applied to it. The decided split covers the three shared
headers and leaves HTML/SPA CSP unowned. This PR deliberately does not
invent one.

## Links and state

- `Refs` the decided split; `Closes #135` / `Closes #136` on merge.
- No Go code changed, so the existing `security_headers_test.go` and
`content_*` tests are unaffected.
- `Web` is red on this head and identically red on `main` itself (`Audit
dependencies`, `browserslist <=4.28.6`, GHSA-73wf-gq98-2v4g). That is a
pre-existing repository condition rather than something this branch
introduced, and the queued fix is #159; the readback is on #138.
- Opening this PR is not a claim that it should be merged. Independent
review is the reviewers'; I have not requested or recorded one.

---------

Co-authored-by: waterbro-8 <318569545+waterbro-8@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants