Skip to content

Commit 84a4dc6

Browse files
Merge pull request #477 from open-element/feature/alpha18-sweep
v0.41.0-alpha.18: second audit sweep (ADR-0117, packages A–D)
2 parents 0e0ce50 + 60170af commit 84a4dc6

194 files changed

Lines changed: 7030 additions & 3934 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/autoflow-ci.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,13 @@ jobs:
4242
- name: AutoFlow3 CI gate
4343
run: deno task autoflow:ci
4444
# Cross-browser smoke: the main gate is chromium-only. Run the core
45-
# DSD/island-hydration/theme specs on Firefox against the www/dist the
46-
# gate's build step already produced.
45+
# DSD/island-hydration/theme specs on Firefox and WebKit against the
46+
# www/dist the gate's build step already produced.
4747
- name: Install Playwright Firefox
4848
run: ./node_modules/.bin/playwright install --with-deps firefox
4949
- name: Firefox smoke E2E
5050
run: deno task test:e2e:firefox-smoke
51+
- name: Install Playwright WebKit
52+
run: ./node_modules/.bin/playwright install --with-deps webkit
53+
- name: WebKit smoke E2E
54+
run: deno task test:e2e:webkit-smoke

.gitignore

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ node_modules/
33

44
# Deno
55
.deno/
6+
.deno-cache/
7+
.deno_cache/
68
vendor/*
79
# Keep vendored dependency attribution tracked for license compliance
810
!vendor/jsr.io/
@@ -19,6 +21,8 @@ vendor/jsr.io/@std/*/*
1921
# Build output
2022
dist/
2123
custom-dist/
24+
dist-test-*/
25+
www/dist/
2226
npm/
2327
packages/adapter-vite/__fixtures__/nitro-proof/.output-*/
2428
packages/adapter-vite/__fixtures__/nitro-proof/.wrangler/
@@ -27,10 +31,16 @@ packages/adapter-vite/__fixtures__/nitro-proof/node_modules/
2731
*.tsbuildinfo
2832
.tsbuildinfo
2933
www/app/data/_generated-blog-data.ts
34+
.openElement/
35+
www/.openElement/
3036

3137
# npm (Deno project - no npm lockfiles)
3238
package-lock.json
3339

40+
# npm pack tarballs
41+
packages/*/*.tgz
42+
*.tgz
43+
3444
# Environment
3545
.env
3646
.env.local
@@ -52,6 +62,7 @@ Thumbs.db
5262
# Testing
5363
coverage/
5464
.coverage/
65+
.coverage-*/
5566
.coverage-check/
5667
__test_fixtures__/
5768
playwright-report/
@@ -61,6 +72,7 @@ test-results/
6172
.workbuddy/
6273
.gstack/
6374
.qoder/
75+
.codebuddy/settings.local.json
6476
docs/autoflow/cells/*/state.json
6577

6678
# Vite cache
@@ -79,43 +91,18 @@ coverage-*.txt
7991
coverage-output.txt
8092
.git-commit-msg.txt
8193
docs/vite-build-*.txt
82-
node_modules/
83-
84-
# npm pack tarballs
85-
packages/*/*.tgz
86-
*.tgz
8794

8895
# Root-level logo source files (design originals, keep local)
8996
/open-logo*.svg
9097
/open-favicon.svg
91-
/brand/exports/
9298

93-
www/dist/
94-
dist/
95-
custom-dist/
96-
dist-test-ssg-render/
97-
dist-test-ssg-package-render/
98-
dist-test-*/
99-
coverage/
100-
playwright-report/
101-
test-results/
10299
debug.log
103100
hub-index/
104101
hub-submission.json
105-
106-
deliverables/
107102
lighthouse-result*.json
108-
.deno-cache/
109-
.deno_cache/
110-
www/.openElement/
111-
.openElement/
112-
.codebuddy/settings.local.json
113103

114104
# Root-level audit artifact
115105
/audit-ast.json
116106

117-
# Coverage variants
118-
.coverage-*/
119-
120107
# Vite virtual assets
121108
assets/_virtual_*

REVIEW-REPORT.md

Lines changed: 0 additions & 441 deletions
This file was deleted.

deno.json

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
"./packages/create",
88
"./packages/app",
99
"./www",
10-
"./examples/deno-desktop-reader"
10+
"./examples/deno-desktop-reader",
11+
"./examples/deno-desktop-mastodon"
1112
],
1213
"imports": {
1314
"@std/fs/walk": "jsr:@std/fs@^1.0.0/walk",
@@ -64,6 +65,7 @@
6465
"consumer:packaged": "deno task pack:dry-run && deno run --allow-read --allow-write --allow-run --allow-env --allow-net tools/consumer-packaged-starter.ts && deno run --allow-read --allow-write --allow-run --allow-env --allow-net tools/consumer-local.ts --packaged-import-map-check",
6566
"third-party-wc:smoke": "deno run --allow-read --allow-write --allow-run --allow-env --allow-net --allow-sys tools/third-party-wc-smoke.ts",
6667
"desktop-reader:smoke": "cd examples/deno-desktop-reader && deno test -A app/__tests__/",
68+
"examples:check": "cd examples/deno-desktop-reader && deno task check && deno task smoke && cd ../deno-desktop-mastodon && deno task check && deno task smoke",
6769
"stress:dogfood": "deno run --allow-read --allow-run --allow-env tools/run-dogfood-stress.ts",
6870
"dogfood:evidence": "deno run --allow-read --allow-write --allow-run tools/run-dogfood-evidence.ts",
6971
"package-artifacts:check": "deno run --allow-read --allow-write --allow-run --allow-net --allow-env tools/check-package-artifacts.ts",
@@ -82,17 +84,18 @@
8284
"test:visual-baselines": "OPEN_VISUAL_REGRESSION=1 deno run -A npm:@playwright/test@1.59.1 test www/e2e/visual-baselines.spec.ts --config www/e2e/playwright.config.ts --project=chromium",
8385
"test:e2e:browsers": "deno run -A npm:@playwright/test@1.59.1 test --config www/e2e/playwright.config.ts",
8486
"test:e2e:install": "deno run -A npm:playwright@1.59.1 install chromium",
85-
"test:e2e:firefox-smoke": "deno run -A npm:@playwright/test@1.59.1 test --config www/e2e/playwright.config.ts --project=firefox --grep \"DSD Layers|Layout Island Shell|Island Script Loading|Theme Toggle\"",
87+
"test:e2e:firefox-smoke": "deno run -A npm:@playwright/test@1.59.1 test --config www/e2e/playwright.config.ts --project=firefox --grep \"DSD Layers|Layout Island Shell|Island Script Loading|Theme Toggle|Theme initialization|data-signal bindings|SSR/hydration mismatch degradation|router guards on browser history traversal\"",
88+
"test:e2e:webkit-smoke": "deno run -A npm:@playwright/test@1.59.1 test --config www/e2e/playwright.config.ts --project=webkit --grep \"DSD Layers|Layout Island Shell|Island Script Loading|Theme Toggle|Theme initialization|data-signal bindings|SSR/hydration mismatch degradation|router guards on browser history traversal\"",
8689
"test:e2e:browsers:install": "deno run -A npm:playwright@1.59.1 install chromium firefox webkit",
8790
"nitro:proof:node": "deno run --allow-read --allow-write --allow-run --allow-env --allow-net tools/nitro-proof.ts node",
8891
"nitro:proof:workers": "deno run --allow-read --allow-write --allow-run --allow-env --allow-net tools/nitro-proof.ts workers",
8992
"test:coverage:check": "deno run --allow-read --allow-run --allow-write --allow-env --allow-net --allow-ffi --allow-sys tools/check-coverage.ts --threshold 73 --branch-threshold 82 --function-threshold 77",
90-
"test:critical-paths": "deno run --allow-read --allow-run tools/check-critical-path-tests.ts",
93+
"test:critical-paths": "deno run --allow-read --allow-run --allow-env tools/check-critical-path-tests.ts",
9194
"consumer:element-smoke": "deno run -A tools/consumer-smoke.ts --local",
9295
"typecheck": "deno task generate:ui-manifest && deno run --allow-read --allow-run --allow-env tools/run-package-graph-task.ts typecheck",
9396
"lint": "deno lint",
94-
"fmt": "deno fmt --ignore=deliverables/,REVIEW-REPORT*.md,WC-FULLSTACK*.md,www/content/blog/,www/app/routes/,www/app/data/,www/design/mockups/,brand/,www/public/assets/,custom-dist/,dist-test-ssg-render/,dist-test-ssg-package-render/,packages/adapter-vite/__fixtures__/nitro-proof/.nitro/,.deno_cache/",
95-
"fmt:check": "deno fmt --check --ignore=deliverables/,REVIEW-REPORT*.md,WC-FULLSTACK*.md,www/content/blog/,www/app/routes/,www/app/data/,www/design/mockups/,brand/,www/public/assets/,custom-dist/,dist-test-ssg-render/,dist-test-ssg-package-render/,packages/adapter-vite/__fixtures__/nitro-proof/.nitro/,.deno_cache/",
97+
"fmt": "deno fmt",
98+
"fmt:check": "deno fmt --check",
9699
"clean": "rm -rf packages/*/dist www/dist packages/*/*.tgz",
97100
"hooks:install": "git config core.hooksPath .githooks",
98101
"hooks:uninstall": "git config core.hooksPath",
@@ -106,8 +109,8 @@
106109
"autoflow:release-prepare": "deno run --allow-read --allow-write --allow-run --allow-env tools/autoflow/mod3.ts release-prepare",
107110
"autoflow:publish-existing": "deno run --allow-read --allow-write --allow-run --allow-env tools/autoflow/mod3.ts publish-existing",
108111
"autoflow:test": "deno test --allow-read --allow-write --allow-run --allow-env tools/autoflow/__tests__/",
109-
"verify:configs": "deno run --allow-read tools/verify-package-configs.ts",
110-
"verify:configs:fix": "deno run --allow-read --allow-write tools/verify-package-configs.ts --fix"
112+
"verify:configs": "deno run --allow-read --allow-env tools/verify-package-configs.ts",
113+
"verify:configs:fix": "deno run --allow-read --allow-write --allow-env tools/verify-package-configs.ts --fix"
111114
},
112115
"fmt": {
113116
"useTabs": false,
@@ -117,19 +120,13 @@
117120
"singleQuote": true,
118121
"proseWrap": "preserve",
119122
"exclude": [
120-
"deliverables/",
121-
"REVIEW-REPORT*.md",
122-
"WC-FULLSTACK*.md",
123123
"www/content/blog/",
124-
"www/app/routes/",
125124
"www/app/data/",
126125
"www/design/mockups/",
127-
"brand/",
128126
"www/public/assets/",
129127
"custom-dist/",
130128
"dist-test-ssg-render/",
131-
"**/.nitro/",
132-
".deno_cache/"
129+
"**/.nitro/"
133130
]
134131
},
135132
"lint": {
@@ -138,14 +135,11 @@
138135
"exclude": ["no-sloppy-imports"]
139136
},
140137
"exclude": [
141-
"deliverables/",
142138
"www/content/blog/",
143-
"www/app/routes/",
144139
"www/app/data/",
145140
"custom-dist/",
146141
"dist-test-ssg-render/",
147-
"**/.nitro/",
148-
".deno_cache/"
142+
"**/.nitro/"
149143
]
150144
},
151145
"compilerOptions": {
@@ -166,7 +160,6 @@
166160
".deno_cache",
167161
"custom-dist",
168162
"dist-test-ssg-render",
169-
"deliverables",
170163
"vendor",
171164
"**/.nitro"
172165
]

deno.lock

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/current/BROWSER_BASELINE.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@ contract is the HTML `shadowrootmode` template attribute, not a framework
99
polyfill.
1010

1111
The supported behavior is verified in the Chromium, Firefox, and WebKit
12-
Playwright projects by `www/e2e/dsd-layers.spec.ts`. The default build emits no
13-
inline DSD fallback, so a strict CSP does not need `unsafe-inline` for DSD.
12+
Playwright projects by `www/e2e/dsd-layers.spec.ts`. CI runs the full E2E suite
13+
on Chromium and the DSD/island-hydration/theme smoke subset
14+
(`test:e2e:firefox-smoke`, `test:e2e:webkit-smoke`) on Firefox and WebKit. The
15+
default build emits no inline DSD fallback, so a strict CSP does not need
16+
`unsafe-inline` for DSD.
1417

1518
Projects that intentionally support browsers outside this baseline may opt in
1619
to `legacyDsdPolyfill`. That fallback injects an inline script and therefore

docs/current/HYDRATION_CONTRACT.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,10 @@ static, hydrate, or CSR implementation packages.
3333
entries.
3434
- Third-party custom elements are hydrated only according to validated package
3535
or Custom Elements Manifest metadata.
36+
37+
## Known limitations
38+
39+
- Islands located outside the project root are emitted through the Vite
40+
`/@fs/` absolute-path specifier convention. That branch is covered by unit
41+
tests (`module-specifier.test.ts`) but has not been verified on a real
42+
Windows build; the regular root-relative path is exercised on every change.

docs/release/v0.41.0-interface-snapshot.json

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,30 +13,25 @@
1313
},
1414
"declarations": {
1515
".": {
16-
"sha256": "805e7850e04b743205883bba909dda297677412c0e967cec5c9ca42b89ac9905",
16+
"sha256": "35290be84ac939a8c58a47ce1f55dab5150a59ff33ff4a8934f5ec15a61cfa16",
1717
"publicDeclarations": [
18-
"export type { OpenElementComponentConstructor } from './open-element.ts';",
1918
"export type { ElementDefinition } from './types.ts';",
2019
"export type {",
21-
"export type { OpenElementRenderer } from './internal/protocol/framework.ts';",
2220
"export type { VNode } from './internal/protocol/vnode.ts';",
2321
"export type * from './internal/protocol/framework.ts';",
2422
"export type * from './internal/protocol/manifest.ts';",
2523
"export type * from './internal/protocol/render.ts';",
2624
"export type * from './internal/protocol/style-sheet.ts';",
2725
"export type * from './internal/protocol/vnode.ts';",
2826
"export type { Context } from './internal/core/index.ts';",
29-
"export type { PropValidationError, RenderError } from './internal/core/index.ts';",
30-
"export type { ErrorCode, ErrorPhase, ErrorSeverity } from './internal/protocol/errors.ts';",
31-
"export type { SignalLike } from './internal/protocol/signal.ts';",
27+
"export type { RenderError } from './internal/core/index.ts';",
3228
"export type { Signal } from './internal/protocol/signal.ts';",
33-
"export type { SafeHtml, UnsafeHtml } from './internal/protocol/framework.ts';",
3429
"export type { IslandOptions } from './internal/protocol/island.ts';",
35-
"export type { StyleSheetLike, StyleSheetRule } from './internal/protocol/style-sheet.ts';",
30+
"export type { StyleSheetLike } from './internal/protocol/style-sheet.ts';",
3631
"export type { Action, ActionContext, Loader, LoaderContext } from './internal/protocol/data.ts';",
3732
"export type { HydrationStrategy, LocalePath } from './internal/protocol/framework.ts';",
3833
"export type {",
39-
"export type {",
34+
"export type { OpenElementRouteKind, OpenElementRouteNode } from './internal/protocol/app-model.ts';",
4035
"export type {"
4136
]
4237
},
@@ -83,7 +78,7 @@
8378
},
8479
"declarations": {
8580
".": {
86-
"sha256": "9143060e4b44f2c44df0656656a314772ced1321c00829339651e3f0710d0fd7",
81+
"sha256": "95cc58ef49406811e4e9fd7a6897f03e237772b1657cb65d5b686c8b0536d067",
8782
"publicDeclarations": [
8883
"export type {",
8984
"export type { Action, ActionContext, Loader, LoaderContext } from '@openelement/element';",
@@ -128,7 +123,7 @@
128123
]
129124
},
130125
"./spa": {
131-
"sha256": "d685b61816bdb46948fd5a28533191a49753f2e49afe3d75b1d34e1a210fe3ea",
126+
"sha256": "79038615bb4d54805c3fac24440e620011b7ff3927302132cc1139484a965dfd",
132127
"publicDeclarations": [
133128
"export interface SpaAppOptions {",
134129
"export interface SpaAppInstance {",
@@ -157,30 +152,29 @@
157152
},
158153
"declarations": {
159154
".": {
160-
"sha256": "a735a6ab7a856ba04dc13e83215b652780c5a2c3957e548744fc027b23c900fa",
155+
"sha256": "9e3b2833c05034e7678307f7282fbef55490da1d1c9dc0b575f12fc4f86773cd",
161156
"publicDeclarations": [
162157
"export interface OpenPipelineConfig {",
163158
"export function openPipeline(config: OpenPipelineConfig = {}): Plugin[] {",
164159
"export type { FrameworkOptions };",
165160
"export type { ArtifactInfo, BuildManifest } from './build-manifest.ts';",
166-
"export type { SpeculationRulesOptions } from './internal/protocol/ssg.ts';",
161+
"export type { SpeculationRulesOptions, SsgBehaviorOptions } from './internal/protocol/ssg.ts';",
167162
"export type { HeadExtrasResult } from './head-injection.ts';",
168163
"export type { OpenMdxPluginOptions } from './plugin-mdx.ts';"
169164
]
170165
},
171166
"./app-vite": {
172-
"sha256": "57646b30b6aef837c2929b4e0ac5cf19247cac2261ab2049fad306309f2ae64b",
167+
"sha256": "fbc9bbfd9964bfab9465a1f572ee12ee430b99fa0c216aa2937a8e7a2cfc5ad2",
173168
"publicDeclarations": [
174169
"export interface OpenElementOptions extends FrameworkOptions {",
175170
"export function openElement(options: OpenElementOptions = {}): Plugin[] {"
176171
]
177172
},
178173
"./build-context": {
179-
"sha256": "e44780f20cb07559848863fd0217f8b0e1989a3bd5a083e2420c0d997e1fd9cc",
174+
"sha256": "a77770942f8fd2e1ea5acf4b5e66545e9cf54373a2c312193f317dbe274c3bcf",
180175
"publicDeclarations": [
181176
"export type Phase = 1 | 2 | 3;",
182177
"export class Phase1Meta {",
183-
"export class Phase2Meta {",
184178
"export class Phase3Meta {",
185179
"export class OpenElementBuildContext {"
186180
]
@@ -194,8 +188,11 @@
194188
"publicDeclarations": []
195189
},
196190
"./cli/build-ssg": {
197-
"sha256": "de3c257dc6d26fac3f4fbf235edb566524fb19722528e7fa52bc5f2f5271ef58",
198-
"publicDeclarations": []
191+
"sha256": "784788fc8e914583533c814a51d023fca062f9aa2ff5039a14748779065a98e6",
192+
"publicDeclarations": [
193+
"export interface SsgEntryDescriptorInputs {",
194+
"export function buildSsgEntryDescriptor("
195+
]
199196
},
200197
"./generated-data-resolver": {
201198
"sha256": "d18395cfa3eca7cd72f2e5481b24a0e76d49284d717a9c08274c085adf80788c",
@@ -234,14 +231,14 @@
234231
]
235232
},
236233
"./plugin": {
237-
"sha256": "d6606aed4c4bea1c6929d7136ba0f7f454af058cef6b3d30248a5c2c99dcd214",
234+
"sha256": "d4e9230cc30f41f3eeece30437abb4ff8e95057803c47f520c1cc36e2eda0f56",
238235
"publicDeclarations": [
239236
"export function optionalPackageStubsPlugin(): Plugin {",
240237
"export function createOpenPlugin("
241238
]
242239
},
243240
"./plugin-mdx": {
244-
"sha256": "5acc04ce17016f446a66384f859e24ef914743a71fa02c0cb10cdfa3adcc84eb",
241+
"sha256": "d935ba8f764d12bb95cacbe38e1d88ddb3c647560af5d293f0cccb84ecd85601",
245242
"publicDeclarations": [
246243
"export interface OpenMdxPluginOptions {",
247244
"export function mdxPlugin(options: OpenMdxPluginOptions = {}): Plugin {"
@@ -282,7 +279,7 @@
282279
},
283280
"declarations": {
284281
".": {
285-
"sha256": "44a7cacc806416be1c35dbf0b0a4db120bae09489b321e1fd59b33e0fc40a2d3",
282+
"sha256": "600c64d12cb8272d2689aca138d46167d7441cae1a5e1445cf11a16e89e2638e",
286283
"publicDeclarations": []
287284
},
288285
"./open-badge": {
@@ -293,7 +290,7 @@
293290
]
294291
},
295292
"./open-button": {
296-
"sha256": "57411b37ffc3d08f48c04f97df841a111ab32a2081d648fae1e1141dfe1cd360",
293+
"sha256": "9a4694535c3527b29a81d981218fc26d919ef819556eb13529fff4131fae07ad",
297294
"publicDeclarations": [
298295
"export const tagName = 'open-button';",
299296
"export class OpenButton extends OpenElement {"
@@ -321,7 +318,7 @@
321318
]
322319
},
323320
"./open-dialog": {
324-
"sha256": "fd25902bfe740877bb87e125779afb5012e0327891b038a7b92ae49472cb21b5",
321+
"sha256": "e0a4bf78c47d08c0281c539bb8e2193bcfc100e07f0fc65bd795eedf520c5ab0",
325322
"publicDeclarations": [
326323
"export const tagName = 'open-dialog';",
327324
"export class OpenDialog extends OpenElement {"

0 commit comments

Comments
 (0)