@particle-academy/holy-sheet 2.10.0 → 2.10.2

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/CHANGELOG.md CHANGED
@@ -10,6 +10,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
10
10
 
11
11
  ## [Unreleased]
12
12
 
13
+ ## [2.10.2] - 2026-10-26
14
+
15
+ ### Security
16
+
17
+ - Route XLSX/ODS and public `unzipSync` reads through bounded ZIP validation:
18
+ coherent local/central records, safe unique member names, CRC and exact sizes,
19
+ archive/part/total/ratio limits and bounded DEFLATE output. Reject truncated or
20
+ invalid codes and back-references with typed `ArchiveRefused`; Node file input
21
+ is bounded before allocation. Defaults: 64 MiB archive/part, 256 MiB expanded,
22
+ 16,384 entries and 1000:1 ratio. `unzipSync(bytes, limits)` supports lower host
23
+ ceilings. Existing valid payload bytes and spreadsheet projections are retained.
24
+
25
+ - Update Vitest to 4.1.12 for security fixes; dev toolchain only, nothing to do.
26
+
27
+ - **Dev toolchain only — no runtime change, nothing for consumers to do.** The
28
+ lockfile now resolves `vite` 8.3.5 (was 8.2.2), whose bundled
29
+ `launch-editor` fixes GHSA-587h-7wmj-h5pm (HIGH, `fs.existsSync()` check
30
+ bypassable on Windows), GHSA-698v-4r3x-3vcv (`escapeCmdArgs()` omits `%`
31
+ escaping on Windows) and GHSA-r825-w8mm-5pxw (editor CLI flag
32
+ misinterpretation). `vite` is only reached through the test/dev toolchain
33
+ and the published package does not ship our lockfile, so the exposure was
34
+ this repo's own dev server.
35
+
36
+ ## [2.10.1] — 2026-10-19
37
+
38
+ ### Fixed
39
+
40
+ - **A bar or column chart's value axis starts at zero** when every plotted value
41
+ is zero or more. Left to the renderer, an axis over values like 90-97 started
42
+ near 88, so a three-point gap read as a collapse; reviewers gated an
43
+ agent-built deck for exactly that. A chart with a negative value, and a line
44
+ chart, keep the renderer's own scaling. **What to do: nothing**; bar charts
45
+ you already write now carry `<c:min val="0"/>` on the value axis.
46
+
13
47
  ## [2.10.0] — 2026-10-19
14
48
 
15
49
  ### Added
package/README.md CHANGED
@@ -37,6 +37,13 @@ await Agent.write(schema, "sales.xlsx");
37
37
 
38
38
  ## API
39
39
 
40
+ Spreadsheet reads and `unzipSync` validate ZIP structure, CRC, unique safe names
41
+ and expansion before XML parsing. Unsafe ZIPs throw exported `ArchiveRefused`
42
+ with a bounded `reason`; ordinary non-spreadsheet formats retain
43
+ `UnsupportedFormatException`. Defaults are 64 MiB archive/part, 256 MiB expanded,
44
+ 16,384 entries and 1000:1 ratio. `unzipSync(bytes, limits)` accepts lower host
45
+ ceilings via `ArchiveLimits`. This input layer does not add lossless editing.
46
+
40
47
  `Agent` (static) mirrors the PHP surface:
41
48
 
42
49
  - `validate(schema)` → structured errors `{path, expected, got, value, hint}[]`