diff --git a/changelog/cli/0.10.51.md b/changelog/cli/0.10.51.md new file mode 100644 index 000000000..82cd4cc69 --- /dev/null +++ b/changelog/cli/0.10.51.md @@ -0,0 +1,58 @@ +--- +package: "@webjsdev/cli" +version: 0.10.51 +date: 2026-08-06T07:41:39.579Z +commit_count: 11 +--- +## Features + +- **`webjs doctor` severity is declarable per check in `webjs.doctor.gate`** ([#1296](https://github.com/webjsdev/webjs/pull/1296)) [`5d286600`](https://github.com/webjsdev/webjs/commit/5d286600) + The command was all-or-nothing: the default exit fails on a broken + toolchain, and `--strict` makes every warning fatal. A project can now map a + stable check code to `off` / `warn` / `error` in the `webjs` config block, so + CI gates the subset it cares about and stops treating every advisory as a + release blocker. `--json` carries each result's code and effective severity, + plus a `configErrors` key on the one path where a rejected `webjs.doctor` + config stops any check running. + +- **`webjs doctor` warns when a stylesheet link skips `asset()`** ([#1244](https://github.com/webjsdev/webjs/pull/1244)) [`060617ef`](https://github.com/webjsdev/webjs/commit/060617ef) + A page or layout that hand-writes `` + serves it at an unversioned url, so a CDN keeps the pre-deploy bytes for as + long as its TTL says. + +- **the scaffold gallery teaches the bound-form shape** [`a22a2995`](https://github.com/webjsdev/webjs/commit/a22a2995) + Every gallery form now binds an imported action instead of routing through a + per-page adapter, and the actions take the `FormData` directly. The todo + example keeps one intent-dispatching action because its rows carry two submit + buttons, which is the shape the `formaction` refusal points at. Extended for + submitters in [`e4177d95`](https://github.com/webjsdev/webjs/commit/e4177d95), + with the caching demo and the conventions doc brought along in + [`3838b10a`](https://github.com/webjsdev/webjs/commit/3838b10a) and + [`b306cd1e`](https://github.com/webjsdev/webjs/commit/b306cd1e). + +- **the npm description says what WebJs is** ([#1248](https://github.com/webjsdev/webjs/pull/1248)) [`175bf443`](https://github.com/webjsdev/webjs/commit/175bf443) + Registry metadata only. + +## Fixes + +- **validate the app name in `webjs create` before writing files** ([#1234](https://github.com/webjsdev/webjs/pull/1234)) [`fe9e58b0`](https://github.com/webjsdev/webjs/commit/fe9e58b0) + The name is not only the new directory. It is written verbatim into the + generated `package.json` `name` field and interpolated into generated source + as a template-literal value, so a name carrying a quote, a backtick, a `${`, + or a backslash emitted a file that failed to parse, and the failure surfaced + as a syntax error on the fresh app's first boot, far from its cause. The name + is now checked against the npm package-name rules before a single file is + written. Uppercase is accepted, since the scaffold's manifest is private. + +- **the scaffold's `components.json` matches what `webjs ui init` writes** ([#1235](https://github.com/webjsdev/webjs/pull/1235)) [`b0bc2742`](https://github.com/webjsdev/webjs/commit/b0bc2742) + `@webjsdev/ui` dropped project detection and moved its defaults to constants + in `init`, so `webjs create` now points at that single source. An app that + scaffolds and one that runs `webjs ui init` end up with the same config. + +- **point the scaffold auth test at the database `db:migrate` prepares** [`03662927`](https://github.com/webjsdev/webjs/commit/03662927) + It defaulted `DATABASE_URL` to `./dev.db` while `.env.example` and + `drizzle.config.ts` both use `db/dev.db`, so the signup flow found no users + table and skipped asking for `db:migrate`, and running `db:migrate` migrated + a different file, which made the skip permanent. + +- **update the scaffold's action tests for the new identity rules** [`18990a7b`](https://github.com/webjsdev/webjs/commit/18990a7b) diff --git a/changelog/core/0.7.47.md b/changelog/core/0.7.47.md new file mode 100644 index 000000000..6b32636b9 --- /dev/null +++ b/changelog/core/0.7.47.md @@ -0,0 +1,134 @@ +--- +package: "@webjsdev/core" +version: 0.7.47 +date: 2026-08-06T07:41:39.499Z +commit_count: 24 +--- +## Breaking + +- **`WEBJS_NO_TRUST_PROXY=1` now overrides `rateLimit({ trustProxy: true })`** ([#1272](https://github.com/webjsdev/webjs/pull/1272)) [`afc1170e`](https://github.com/webjsdev/webjs/commit/afc1170e) + The kill switch was honoured by every reader of the forwarded host and proto + (the URL rewrite, the HSTS scheme gate, the CSRF host resolution) but not by + `clientIp`. An operator who set the flag because their container is directly + exposed, and who also passed `rateLimit({ trustProxy: true })`, still bucketed + rate limits on a header any client can set, so a rotating `X-Forwarded-For` + gave every request its own bucket. The switch is now absolute across every + forwarded-header read. + + **Migration.** An app that sets both now buckets every visitor behind the + proxy onto one key. That combination was always a misconfiguration and is now + a visible one. On a genuinely proxied deploy, unset `WEBJS_NO_TRUST_PROXY`. + The contradiction warns once per process rather than throwing, because the + flag is read per request on the hot path and a throw would take a + misconfigured deploy down instead of degrading it. + +## Features + +- **bind a server action into `