sheetom 0.1.0-rc.1 → 0.1.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -96,7 +96,16 @@ block remote resources, or make valid hostile CSS safe to render.
96
96
 
97
97
  Invalid `setProperty` values and priorities are atomic no-ops, matching browser
98
98
  behavior. Opt into mutation diagnostics with `{ diagnostics: true }` and drain
99
- them using `takeDiagnostics()`.
99
+ them using `takeDiagnostics()`. `SheetOMDiagnostic.code` is a stable string
100
+ union. Diagnostics retain the complete rejected input until drained; when
101
+ processing untrusted or very large input, callers should leave diagnostics off
102
+ or drain them promptly to bound memory use.
103
+
104
+ Static shorthands are owned as canonical longhand records. Updating or removing
105
+ one longhand can therefore never reactivate an older shorthand value. Shorthand
106
+ getters and `cssText` are synthesized only while the complete current longhand
107
+ set has compatible values and priorities; genuinely deferred substitutions
108
+ retain separate provenance until a longhand mutation breaks their group.
100
109
 
101
110
  ## API scope
102
111
 
@@ -118,6 +127,11 @@ Operation Fixtures execute through SheetOM and native browser adapters;
118
127
  applicable WPT subtests retain their pinned source path, title, and blob SHA.
119
128
  Every release ships its machine-readable Compatibility Report.
120
129
 
130
+ Modern or implementation-dependent value grammar is bounded by the checked-in
131
+ [`Value Capability Corpus`](./compatibility/value-capabilities.json). Each
132
+ measured family includes accepted and rejected neighboring cases; browser
133
+ probing occurs only during conformance work and never at runtime.
134
+
121
135
  See [the behavioral API reference](./docs/api.md) for return, exception,
122
136
  identity, and detachment contracts. Maintainers use the separately reviewed
123
137
  [release procedure](./docs/releasing.md); Changesets never publishes by itself.
@@ -153,8 +167,13 @@ npm run pack:test
153
167
 
154
168
  `npm test` runs unit, deterministic fuzz, and local Chromium projects. Use
155
169
  `npm run test:browser:matrix` on a machine with all Playwright dependencies to
156
- run Chromium, Firefox, and WebKit. `npm run docs:build` generates the TypeDoc
157
- reference under `site/api`.
170
+ run Chromium, Firefox, and WebKit. The browser matrix also runs a deterministic,
171
+ grammar-oriented declaration differential; any minimized mismatch must become
172
+ an immutable Operation Fixture with an explicit Compatibility Resolution.
173
+ `npm run docs:build` generates the TypeDoc reference under `site/api`. The benchmark gates both a 10,000-rule stress case
174
+ and a publisher-shaped reference workload with one shared stylesheet, 20 page
175
+ stylesheets, nested layers/media, distributed mutations, and two idempotent
176
+ serialization passes.
158
177
 
159
178
  Only the latest published `0.x` minor and its active prereleases receive fixes
160
179
  before 1.0. During `0.x`, observable compatibility corrections and interface
@@ -0,0 +1,142 @@
1
+ {
2
+ "$schema": "../schemas/compatibility-report.schema.json",
3
+ "schemaVersion": 2,
4
+ "packageVersion": "0.1.0-rc.2",
5
+ "baseline": {
6
+ "wptCommit": "54f8f933629e7c010ae98a246729af01f8abcda5",
7
+ "syntaxEngineSet": {
8
+ "lightningcss": "1.33.0",
9
+ "cssTree": "3.2.1",
10
+ "cssstyle": "6.2.0",
11
+ "cssTokenizer": "4.0.0"
12
+ },
13
+ "runtimes": {
14
+ "node": "v24.18.0",
15
+ "bun": "1.3.1",
16
+ "deno": "2.9.5"
17
+ },
18
+ "browsers": {
19
+ "chromium": "151.0.7922.34 (revision 1234)",
20
+ "firefox": "153.0 (revision 1538)",
21
+ "webkit": "26.5 (revision 2336)"
22
+ }
23
+ },
24
+ "summary": {
25
+ "passed": 6,
26
+ "divergences": 7,
27
+ "excluded": 0,
28
+ "unexplained": 0
29
+ },
30
+ "evidence": {
31
+ "operationFixtures": {
32
+ "passed": 13,
33
+ "total": 13,
34
+ "sha256": "7909f90571b8d6595d18b006bb4f2c5337cca9d413084558e913e760be45a3aa",
35
+ "adapters": [
36
+ {
37
+ "adapter": "sheetom",
38
+ "passed": 13,
39
+ "total": 13
40
+ },
41
+ {
42
+ "adapter": "chromium",
43
+ "passed": 13,
44
+ "total": 13
45
+ },
46
+ {
47
+ "adapter": "firefox",
48
+ "passed": 13,
49
+ "total": 13
50
+ },
51
+ {
52
+ "adapter": "webkit",
53
+ "passed": 13,
54
+ "total": 13
55
+ }
56
+ ]
57
+ },
58
+ "nativeWpt": [
59
+ {
60
+ "engine": "chrome",
61
+ "version": "150.0.7871.128",
62
+ "sha256": "3f66a5f324bb9023cdd4b168e780640700449f22f28ca378eca91504b7d68e3f",
63
+ "passed": 4,
64
+ "total": 4
65
+ },
66
+ {
67
+ "engine": "firefox",
68
+ "version": "153.0.3",
69
+ "sha256": "e5f88e3431f602dc29fd8dbd79667bef33930ee7f87ee6d2069f17126421a230",
70
+ "passed": 4,
71
+ "total": 4
72
+ }
73
+ ]
74
+ },
75
+ "resolutions": [
76
+ {
77
+ "fixtureId": "declarations.basic-set-property",
78
+ "decision": "shared",
79
+ "rationale": "The observable declaration state is shared by the pinned browser engines."
80
+ },
81
+ {
82
+ "fixtureId": "declarations.malformed-padding",
83
+ "decision": "chromium-fallback",
84
+ "rationale": "CSS Syntax accepts the EOF-recovered value; Chromium preserves the unclosed observable spelling while Firefox materializes closing parentheses."
85
+ },
86
+ {
87
+ "fixtureId": "declarations.modern-color-canonicalization",
88
+ "decision": "shared",
89
+ "rationale": "The pinned browser engines expose modern rgb syntax through the shared legacy rgba serialization in CSSStyleDeclaration."
90
+ },
91
+ {
92
+ "fixtureId": "declarations.typed-eof-recovery",
93
+ "decision": "chromium-fallback",
94
+ "rationale": "Typed property values expose the Chromium/WebKit canonical serialization after CSS Syntax EOF recovery; Firefox retains quotes around the recovered font-family string."
95
+ },
96
+ {
97
+ "fixtureId": "declarations.quoted-font-family",
98
+ "decision": "chromium-fallback",
99
+ "rationale": "Chromium and WebKit remove unnecessary quotes around a simple font-family while Firefox retains them; SheetOM follows the measured Chromium fallback."
100
+ },
101
+ {
102
+ "fixtureId": "declarations.custom-property-eof-recovery",
103
+ "decision": "chromium-fallback",
104
+ "rationale": "Chromium retains unclosed custom-property token structures, removes EOF comments, and replaces an escaped EOF with U+FFFD."
105
+ },
106
+ {
107
+ "fixtureId": "declarations.custom-property-priority-replacement",
108
+ "decision": "chromium-fallback",
109
+ "rationale": "Chromium and Firefox replace the existing custom-property priority when setProperty is called without a priority, while WebKit retains !important; SheetOM follows the measured Chromium fallback."
110
+ },
111
+ {
112
+ "fixtureId": "declarations.pending-substitution-eof-recovery",
113
+ "decision": "chromium-fallback",
114
+ "rationale": "Chromium retains the unclosed pending-substitution spelling while applying lexical EOF recovery such as comment removal."
115
+ },
116
+ {
117
+ "fixtureId": "declarations.setproperty-null-undefined",
118
+ "decision": "shared",
119
+ "rationale": "The four adapted WPT subtests define the shared null and undefined conversion behavior."
120
+ },
121
+ {
122
+ "fixtureId": "declarations.required-arguments",
123
+ "decision": "shared",
124
+ "rationale": "Required WebIDL arguments throw TypeError before string conversion in the pinned browser engines."
125
+ },
126
+ {
127
+ "fixtureId": "declarations.set-property-multiple-declarations",
128
+ "decision": "shared",
129
+ "rationale": "A setProperty value is parsed independently and cannot escape into another declaration; invalid input leaves the previous declaration unchanged."
130
+ },
131
+ {
132
+ "fixtureId": "declarations.escaped-custom-property-name",
133
+ "decision": "shared",
134
+ "rationale": "Custom-property method arguments retain their logical names and cssText escapes those names only when serializing CSS syntax."
135
+ },
136
+ {
137
+ "fixtureId": "integration.weweb-authoring-tree",
138
+ "decision": "chromium-fallback",
139
+ "rationale": "The standard rule-tree operations and detachment identity are shared; the recovered padding spelling follows the existing Chromium fallback resolution."
140
+ }
141
+ ]
142
+ }