@particle-academy/fancy-conformance 0.22.0 → 0.22.1

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.22.0
1
+ 0.22.1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@particle-academy/fancy-conformance",
3
- "version": "0.22.0",
4
- "description": "Shared cross-language conformance fixtures for the Fancy suite. One contract, N implementations, and a single table that every implementation asserts in its own CI \u2014 so 'parity' is a test result rather than a claim. Ships the fixture data itself, so a Rust, Go or Python runner can consume it without a JavaScript toolchain.",
3
+ "version": "0.22.1",
4
+ "description": "Shared cross-language conformance fixtures for the Fancy suite. One contract, N implementations, and a single table that every implementation asserts in its own CI so 'parity' is a test result rather than a claim. Ships the fixture data itself, so a Rust, Go or Python runner can consume it without a JavaScript toolchain.",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/Particle-Academy/fancy-conformance.git"
package/runners/README.md CHANGED
@@ -85,6 +85,15 @@ that reported green while covering nothing.
85
85
  `Conformance::version()`. "We're on an old fixture set" should be visible in
86
86
  the log rather than inferred months later.
87
87
 
88
+ **Reading the fixtures from git? Check out the tag you pin.** A consumer that
89
+ checks this repository out (an `actions/checkout` step, a git dependency) must
90
+ pin that checkout to `v<pinned version>`, never `main`, and keep a test that
91
+ fails when the ref and the pin disagree. Unpinned, every fixture release turns
92
+ every such consumer red at once for a reason none of its commits caused, and
93
+ nobody reads it: four Python ports sat red for weeks that way in 2026-09. The
94
+ pin is the contract, and moving it is a deliberate commit in the consumer. A
95
+ registry install gets this from a committed lockfile, and only from one.
96
+
88
97
  ## Adding a case
89
98
 
90
99
  A new case lands **here first, red**, then in each implementation. Where an
@@ -12,7 +12,7 @@
12
12
  "gridWidthsEmu": "gridWidthsEmu(element, totalEmu) -> the <a:gridCol w> values, in order, as strings."
13
13
  },
14
14
  "runShape": {
15
- "everyValueIsAString": "No golden in this file is a number. Fractional quantities are converted to the INTEGER unit the writer emits — font size and letter spacing in hundredths of a point, padding and border width in EMU — and then stringified. That removes float comparison from the suite entirely, which matters because the four fancy-conformance loaders do NOT agree on how a float golden is compared (PHP, Python and Rust use a scaled 1e-12 epsilon; the TypeScript loader uses exact Object.is). A suite whose verdict depends on which loader ran it is not a conformance suite.",
15
+ "everyValueIsAString": "No golden in this file is a number. Fractional quantities are converted to the INTEGER unit the writer emits — font size and letter spacing in hundredths of a point, padding and border width in EMU — and then stringified. That removes float comparison from the suite entirely: a value in EMU or hundredths of a point is exactly what the writer emits, so no golden carries a tolerance question. (This note first said the loaders disagree on float comparison. That was already false when it was written: all four have compared exactly since 0.10.0.)",
16
16
  "resolvedCell": "{ text, bold, italic, underline, color, fill, align, anchor, fontSizeHundredths, letterSpacingHundredths, caps, padding: {left,right,top,bottom}, borders: {left,right,top,bottom}, colSpan, rowSpan, merged }. Booleans are \"1\" / \"0\". `fill` is null when the cell has none. Each border is null when the cell has none on that side, otherwise { widthEmu, color, style }.",
17
17
  "gridWidthsEmu": "An ordered array of strings."
18
18
  },