edfcore 0.6.18 → 0.6.20

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.
@@ -109,5 +109,5 @@ export declare const SIGNAL_FIELD_BLOCK_OFFSETS: {
109
109
  readonly reserved: 224;
110
110
  };
111
111
  /** Published package version. Kept in sync with package.json by a test. */
112
- export declare const VERSION = "0.6.18";
112
+ export declare const VERSION = "0.6.20";
113
113
  //# sourceMappingURL=constants.d.ts.map
package/dist/constants.js CHANGED
@@ -79,5 +79,5 @@ export const SIGNAL_FIELD_BLOCK_OFFSETS = {
79
79
  reserved: 224,
80
80
  };
81
81
  /** Published package version. Kept in sync with package.json by a test. */
82
- export const VERSION = '0.6.18';
82
+ export const VERSION = '0.6.20';
83
83
  //# sourceMappingURL=constants.js.map
package/docs/CHANGELOG.md CHANGED
@@ -6,6 +6,42 @@ alone does not tell you whether you were affected.
6
6
  edfcore is pre-1.0. Patch releases have carried behaviour changes where the old behaviour was a
7
7
  defect; those are called out below.
8
8
 
9
+ ## 0.6.20
10
+
11
+ - **Added** a thirteenth shape to the `AWKWARD` matrix: a record duration with no exact binary
12
+ form. `formatHeader` carries the story in a comment beside the function it forced — "100 records
13
+ of 0.29 s is exactly 29 s and computes as 28.999999999999996, which floors to 28. The header line
14
+ then reports a recording a whole second shorter than it is (fixed in 0.2.67)."
15
+ - That file is exactly this one, and the matrix had never held it. Every sweep over `AWKWARD` ran
16
+ on durations of 1 s and 0 s — the two values where the float and the rational agree — so the
17
+ arithmetic this whole package is written in ticks to avoid was never exercised by any of them.
18
+ Twenty-three sweeps see it now, and they all pass.
19
+ - `a-duration-float64-cannot-hold.test.ts` spells the hazard out in both directions on the fixture
20
+ itself: the float product is less than 29 and floors to 28, the tick product is exactly
21
+ `29n * TICKS_PER_SECOND`, and the header line reads `00:00:29`. It also checks this is the only
22
+ shape in the matrix whose duration is inexact, and that its derived rate is a clean 100 Hz — an
23
+ inexact duration does not have to make the rate inexact, and a fixture where both were awkward
24
+ would not tell the two apart.
25
+
26
+ ## 0.6.19
27
+
28
+ - **Added** a twelfth shape to the `AWKWARD` matrix: a file whose record count field says `-1`, so
29
+ the count is recovered from the source length. `types.ts` says of that field "`-1` means the
30
+ writer never closed the file", and it is not a rare accident — it is what a recorder writes while
31
+ it is still recording, and what stays there if the software crashes or the disk fills.
32
+ - The recovery itself was covered — `parse.test.ts` for the arithmetic,
33
+ `one-recording-two-spellings.test.ts` for the equivalence — and the shape had never been put in
34
+ front of the twenty-two sweeps that run over the matrix: every index resolves, ticks and seconds
35
+ agree, every array is frozen, nothing points at the caller's buffer, the five source spellings,
36
+ and the rest. It is the only shape in the matrix whose geometry rests on arithmetic rather than
37
+ on a number the file states, and each of those sweeps asks a question of a whole file.
38
+ - They all pass over it. That is the result: the properties were stated to hold for any file, and
39
+ until now none of them had seen one whose record count nobody wrote down.
40
+ - `a-count-the-header-never-gave.test.ts` pins what makes it that shape — `-1` in the field, five in
41
+ the header, `recordCountSource: 'sourceByteLength'`, and the diagnostic that says so — and checks
42
+ it is the only shape in the matrix that recovers. A fixture drifting into an ordinary file would
43
+ otherwise leave twenty-two sweeps looking as though they cover something they no longer do.
44
+
9
45
  ## 0.6.18
10
46
 
11
47
  - **Fixed** the same thing in the two files 0.6.17 could not see. `README.md` and `AGENTS.md` are
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "edfcore",
3
- "version": "0.6.18",
3
+ "version": "0.6.20",
4
4
  "description": "Modern, typed, zero-dependency reader for EDF, EDF+, BDF and BDF+ biosignal files. Works in browsers and Node with true random access.",
5
5
  "keywords": [
6
6
  "edf",
package/src/constants.ts CHANGED
@@ -93,4 +93,4 @@ export const SIGNAL_FIELD_BLOCK_OFFSETS = {
93
93
  } as const;
94
94
 
95
95
  /** Published package version. Kept in sync with package.json by a test. */
96
- export const VERSION = '0.6.18';
96
+ export const VERSION = '0.6.20';