release: WRNexusJS 0.8.3
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
# Upgrade to WRNexusJS 0.8.3
|
||||
|
||||
WRNexusJS 0.8.3 is a framework stability release. It fixes browser hydration modules,
|
||||
SSR computed values, Async scopes, typed props in loops, realtime connection identity,
|
||||
loader invalidation, strict component imports, and development diagnostics.
|
||||
|
||||
## Application migration
|
||||
|
||||
No application source rewrite is required. The `0.8.3-client-ssr-realtime-stability`
|
||||
migration is intentionally idempotent and records the upgrade in the CLI migration registry.
|
||||
|
||||
After updating all `@wrnexus/*` dependencies to `0.8.3`, remove generated artifacts so the
|
||||
new browser-module cache format is used:
|
||||
|
||||
```bash
|
||||
rm -rf .wrnexus dist
|
||||
bun install
|
||||
bun run check
|
||||
```
|
||||
|
||||
On Windows PowerShell:
|
||||
|
||||
```powershell
|
||||
Remove-Item -Recurse -Force .wrnexus, dist -ErrorAction SilentlyContinue
|
||||
bun install
|
||||
bun run check
|
||||
```
|
||||
|
||||
## Behavior changes
|
||||
|
||||
- Hydrated `.wrn` browser modules are bundled before they are served or emitted. Browser code
|
||||
no longer receives unresolved bare package imports or `file:` filesystem imports.
|
||||
- Generated native `client` and `shared` functions take precedence over the CSP-safe expression
|
||||
fallback. The fallback also accepts template literals inside call arguments.
|
||||
- Page computed values are declared for SSR in dependency order. Computed cycles fail with
|
||||
`WRN-COMPUTED-CYCLE`.
|
||||
- Whole-expression object and array props inside `{#each}` are serialized as typed props.
|
||||
- `<Success data="...">` and `<Error error="...">` aliases have branch-local scope.
|
||||
- Realtime sockets are keyed by room plus normalized query identity and reconnect when identity
|
||||
attributes change.
|
||||
- `$route` and `route` expose reactive pathname, query, hash, and params to hydrated views.
|
||||
- Uploader success events dispatch cache invalidation tags. Matching client Async boundaries
|
||||
refresh automatically.
|
||||
- The unsupported default `unload` Permissions Policy directive has been removed.
|
||||
- Official package components now satisfy `imports.mode = "explicit"`.
|
||||
|
||||
## Publishing 0.8.3
|
||||
|
||||
Run the complete release gate with Bun before publishing:
|
||||
|
||||
```bash
|
||||
bun install --frozen-lockfile
|
||||
bun run check:production
|
||||
bun run release:prepare
|
||||
bun run release:private
|
||||
```
|
||||
|
||||
`release:prepare` rebuilds package distributions and verifies that version `0.8.3` has a CLI
|
||||
migration entry. Do not publish stale `dist` directories from an older release.
|
||||
@@ -0,0 +1,73 @@
|
||||
# WRNexusJS 0.8.3 validation report
|
||||
|
||||
## Validated in the prepared source archive
|
||||
|
||||
- All 47 root/package manifests use version `0.8.3` and all non-workspace internal dependency
|
||||
ranges resolve to `0.8.3`.
|
||||
- The CLI migration registry contains `0.8.3-client-ssr-realtime-stability`.
|
||||
- All official package `.wrn` files pass parse/code-generation checks.
|
||||
- All official reusable components pass explicit-import validation.
|
||||
- The UI visual contract, public API baseline, workspace repair check, security framework audit,
|
||||
and ASVS policy checks pass.
|
||||
- Regression scripts verify request-derived SSR computed values, view-only browser imports,
|
||||
typed loop props, Async aliases, template literals in fallback expressions, native client
|
||||
function preservation, settings persistence, realtime identity isolation, and the TeamSpace
|
||||
example browser-module graph.
|
||||
- The generated VS Code compiler bundle was rebuilt from the updated syntax/compiler source.
|
||||
|
||||
## Release-candidate corrections
|
||||
|
||||
After the first Windows release-gate run, the source archive was corrected for four TypeScript
|
||||
errors:
|
||||
|
||||
- Removed the unsupported `write` property from `Bun.build()` configuration objects while keeping
|
||||
in-memory artifact reads through `BuildOutput.outputs`.
|
||||
- Typed the merged import-alias map as `Record<string, string>`.
|
||||
- Cast Happy DOM `CustomEvent` values to the exact `Window.dispatchEvent` parameter type in CSR
|
||||
tests.
|
||||
- Removed local `.env` and `.env.uat` files from the source archive; equivalent `.example`
|
||||
templates remain included.
|
||||
|
||||
A second Windows release-gate run exposed ten ESLint errors in release helper scripts. The source
|
||||
archive was corrected by importing Node globals explicitly in `scripts/check-component-imports.mjs`
|
||||
and replacing hard-counted regex spaces with `{4}` and `{6}` quantifiers in
|
||||
`scripts/validate-0.8.mjs` and `update-package-versions.mjs`.
|
||||
|
||||
A third Windows release-gate run showed that the package component validator was traversing
|
||||
workspace-installed dependency copies under nested `node_modules` directories. Those files are not
|
||||
first-party package sources and were being checked against the manifest of the containing workspace
|
||||
package. The validator now excludes dependency and generated directories (`node_modules`, `dist`,
|
||||
`coverage`, `.git`, `.wrnexus`, and `.publish`) while still scanning every official source component.
|
||||
A regression fixture confirms that an invalid nested dependency component is ignored and the 146
|
||||
official source files remain validated.
|
||||
|
||||
A fourth Windows release-gate run found that `editors/vscode/src/compiler.cjs` was stale after the
|
||||
final compiler changes. The bundle was regenerated from all 26 current syntax/compiler TypeScript
|
||||
modules. A fifth Windows run then exposed a cross-environment false positive: the archive had been
|
||||
generated with TypeScript 5.8.3 while the frozen release install uses TypeScript 5.9.3, and the old
|
||||
checker compared transpiled output byte-for-byte. The editor compiler generator now normalizes source
|
||||
and line endings, emits source and generator SHA-256 fingerprints, and performs an exact-output check
|
||||
when the TypeScript version matches. When only the TypeScript patch version differs, it validates the
|
||||
source/generator fingerprints instead. Genuine source changes still fail the freshness gate.
|
||||
|
||||
The corrected helper scripts pass Node syntax checks. Package component import validation passes
|
||||
for all 146 official WRN files. The 0.8 validation script advances through its source-only checks
|
||||
in the preparation environment and stops only when dependencies excluded from the release archive
|
||||
are required. The complete TypeScript and Bun test gates still need to be rerun on the release
|
||||
machine after `bun install --frozen-lockfile`.
|
||||
|
||||
## Required final release verification
|
||||
|
||||
The preparation environment did not include the Bun executable. Therefore the complete Bun test,
|
||||
lint, formatting, package build, editor bundle comparison, staged-consumer, and publish dry-run
|
||||
must still be executed on the release machine:
|
||||
|
||||
```bash
|
||||
bun install --frozen-lockfile
|
||||
bun run check:production
|
||||
bun run release:prepare
|
||||
bun run validate:staging
|
||||
bun run test:staged-consumers
|
||||
```
|
||||
|
||||
A release should not be published if any command above fails.
|
||||
@@ -7,7 +7,7 @@
|
||||
"packages/ui/components/AdvancedRangeSlider.wrn": "e78b5cf825503d0cd306c6e490d71317ee3db1844882d13b500df1f7f1c408e1",
|
||||
"packages/ui/components/AdvancedSelect.wrn": "29d43f8019a3e0e98af7cf12440f41523665535a39a973441b4faea78e67114a",
|
||||
"packages/ui/components/AnnouncementBar.wrn": "5946ef5eb646f7414056f59d9cfe14680aa3c935acc9a1ca6528dc53b23caa48",
|
||||
"packages/ui/components/AuthForm.wrn": "5441adc5c4fd94621633f3a178442fd7970de3afb0dd3827b7aae6cd43545e40",
|
||||
"packages/ui/components/AuthForm.wrn": "e6ab0cc4a557b3fd41528368c5aa7aaf39e9adcd49d9907df8d26d77bc515870",
|
||||
"packages/ui/components/AuthSplitLayout.wrn": "72b82495dd14d40a2d594ccdcf3adc925d1567c155750fb1072347b8845aab7b",
|
||||
"packages/ui/components/AvatarGroup.wrn": "9c583f567213f8e1ad4506a7d2abc3fb462d11679fd2196d3828030f28a28964",
|
||||
"packages/ui/components/BackToTop.wrn": "b12c56ec8b7aabad68cbdc47f4b3237e2c21a61398f0aa51f9add6229b7357cd",
|
||||
@@ -39,15 +39,15 @@
|
||||
"packages/ui/components/Drawer.wrn": "7ecfc54494402e8758eb3f648418df70b6cde598f38836a620a1fa179d1bb1bd",
|
||||
"packages/ui/components/Dropdown.wrn": "703c354dfb304ad640a600398317b0a5eefeea326df8a1fc51c87e0ed3c26ebc",
|
||||
"packages/ui/components/FeatureCard.wrn": "cf122df37d5de72a9556fea501b13b8bfad49ee4a5e88daec2a32d204ee9e784",
|
||||
"packages/ui/components/FeatureGrid.wrn": "b9c793e47f6a86fddc0f42c010544002509a11256c92c030ae29743ab0083a55",
|
||||
"packages/ui/components/FeatureIconCard.wrn": "7d053cf642ab572a254383a72fb60323118a6b41b433696cf6ac62857dea7d5e",
|
||||
"packages/ui/components/FeatureGrid.wrn": "9e3c0440d08c6982861d3e732eeb20f1023413a58243844dfb9d7033bac13d2b",
|
||||
"packages/ui/components/FeatureIconCard.wrn": "afe56213543dd78932b060fa19c4e645e558b211b380c42b6d4b0d18e9d543df",
|
||||
"packages/ui/components/FileInput.wrn": "8b63811deb90a03763620bedf0d5d3c7d05a20b8ae34292eaface9b756b32ecd",
|
||||
"packages/ui/components/FileUpload.wrn": "3346d8978e134c3a1e6bc742201a3fbb0cffb89da40da6fcd856a2adbb971393",
|
||||
"packages/ui/components/FileUploadProgress.wrn": "83bcc8558c70fbe0e0670642f65998abd222c235f1031be46bd7c65e6b5c5154",
|
||||
"packages/ui/components/Footer.wrn": "a5dfaa5f9548b7fdd4b556c63428e0ea8d22e5e776a5714d76619999438cf618",
|
||||
"packages/ui/components/Grid.wrn": "b5546b899c509c1f3e8f5edad801bc59acf9fe3008a627f0e4476cd61b5b672e",
|
||||
"packages/ui/components/Hero.wrn": "c7608d8a81df53ffcde5d857abc06c2eff813d4a10223a47a70602a68e7b025c",
|
||||
"packages/ui/components/HeroActions.wrn": "8f5d2d86c928c7499610f58a8b5c078e368d67f8924311472357a70c5d1dae1a",
|
||||
"packages/ui/components/Hero.wrn": "e4e39dcd59c273192c7e4136f6583279e20b0956bcba4cfbc3f6e01a1fade152",
|
||||
"packages/ui/components/HeroActions.wrn": "c5720efe2ce7f6c114eb2ea4ccc3e8102a1099078ba23fd13770eddeb6aec640",
|
||||
"packages/ui/components/Image.wrn": "4294358e2eddf06ae4384217dbff7693b609c16bf6549f54d6ad27df74d7ae27",
|
||||
"packages/ui/components/Input.wrn": "9ad394eed60f1b05bbd2ccd50dc2de7b78245c52c87afd46055d772c38b7b0c9",
|
||||
"packages/ui/components/InputGroup.wrn": "0e23ea541a60e893c9d9e6f95113911ee459468d8d6105bf03aeb55395359123",
|
||||
@@ -59,15 +59,15 @@
|
||||
"packages/ui/components/List.wrn": "02f960a8e82fa049aac477bac9c1d9371394c86d9c47513138f61bffc79dc7d8",
|
||||
"packages/ui/components/ListGroup.wrn": "37e2ec61ceab20ed020a834da03208c493702b41abcf586816e29f2e50d8ee11",
|
||||
"packages/ui/components/Map.wrn": "7b8a0d5412a464fd7cab8977d816542c506d8c5dab8230a3c984c2caee407c91",
|
||||
"packages/ui/components/MarketingSectionHeader.wrn": "5147f3d86f18404c66111a52cccb44be56ca4cbfd7a7f4e885e41f82c1212c1e",
|
||||
"packages/ui/components/MarketingSectionHeader.wrn": "7d6ffcc01a9331474475ea57ca58598be757abd9428b66bdfaf6f3603c5b145b",
|
||||
"packages/ui/components/Marquee.wrn": "b2b35eedf3297ba12ab3776385a9f3eab001027648d87a2a1968f576eee6c025",
|
||||
"packages/ui/components/MegaMenu.wrn": "4a084eaf6aae77bb9023d2f3589bc6b80119b9be63982a90a80f9d280cc9c0a5",
|
||||
"packages/ui/components/MetricCard.wrn": "6451182739298691908f68258c0250cce2a78b0dc27c97115579ece30d7d9f92",
|
||||
"packages/ui/components/MetricGrid.wrn": "49742c27d988755316be54eae3722bb88600dd1add8c851fc95d4b4498db80a8",
|
||||
"packages/ui/components/MetricGrid.wrn": "6018a98c10628ed240ed236ed916c0ff60994d192c3aadafd10bc876be0f9364",
|
||||
"packages/ui/components/Modal.wrn": "1821428492e510403dd029c4766e71272899299f65141ae4fdaf09c4a26719e5",
|
||||
"packages/ui/components/Nav.wrn": "78f215c94caf68e0968449a23e23bd3409a689e0c52a6c1770aa8373c767d080",
|
||||
"packages/ui/components/Navbar.wrn": "e68f9d3643e500e43124e9c7a6d4c7f6722657377ea7313f3e3cf5093a81b360",
|
||||
"packages/ui/components/PageHeader.wrn": "e9f6c4c2b8723f3f035aa840ba8232f393a4038fae20c55dcd2a78276ac6738c",
|
||||
"packages/ui/components/PageHeader.wrn": "adb3bed81ce040044405e35a52d0304f49d5a0d162f923fbd54a4242a25c7362",
|
||||
"packages/ui/components/Pagination.wrn": "9169e724f89992dacd10e9492a95438c8016affb39c0fd17a4f6fe26bd21d8b4",
|
||||
"packages/ui/components/PinInput.wrn": "5196f584de8d548a5dfa03688c3c95da3c948cead2662b05e927386ccea74299",
|
||||
"packages/ui/components/Popover.wrn": "fd9982f60e37e500586f788470f41a8510d6b96d3a85c80d2859fa01cac6731e",
|
||||
@@ -79,7 +79,7 @@
|
||||
"packages/ui/components/Rating.wrn": "a2d74dc748fc7d98892684c760518b87fa65411b1102e3611252b87245b3ffcb",
|
||||
"packages/ui/components/Scrollspy.wrn": "bbe0788f63c2bc8850649c1dee78391d485a1c93876015bc536d838273d5fae4",
|
||||
"packages/ui/components/SearchBox.wrn": "315f54f1feaaa47a815d1e2d7a35b492f09fbfadfc6d37228e1009e19e0652ad",
|
||||
"packages/ui/components/Section.wrn": "dc18952a6342f3af04fdab6a44a5755b6767e65bf37a11528fd9e67dde39802e",
|
||||
"packages/ui/components/Section.wrn": "21485de07d8bb986837a65c61c5dd01ba6c2f3d4e37d58c154a584c7b58de0ed",
|
||||
"packages/ui/components/SectionHeader.wrn": "512cb96636ee1f0540a0f4b4c75603fc0fe7536e7ed7ed7dc82173a16f48a4d3",
|
||||
"packages/ui/components/Select.wrn": "7f046bb11b7c2470dae26d91a4b2261c66a40ae054d0e04c69b6748912d1e204",
|
||||
"packages/ui/components/Sidebar.wrn": "05f4bd216ae8bfcee2460fe638e431174d5f3c8e10003f346644e5a2939e7ce5",
|
||||
|
||||
Reference in New Issue
Block a user