edfcore 0.4.286 → 0.4.294
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/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/docs/CHANGELOG.md +114 -0
- package/package.json +3 -1
- package/src/constants.ts +1 -1
package/dist/constants.d.ts
CHANGED
|
@@ -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.4.
|
|
112
|
+
export declare const VERSION = "0.4.294";
|
|
113
113
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.js
CHANGED
package/docs/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,120 @@ 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.4.294
|
|
10
|
+
|
|
11
|
+
- **Added** the last wait the release was missing: whether the version actually reached npm. The
|
|
12
|
+
CI wait from 0.4.244 asks about the commit; `publish.yml` is a different workflow, triggered by
|
|
13
|
+
the release that was just created, and it runs its own `npm run check` afterwards — so it can
|
|
14
|
+
fail on something the commit's checks passed, and the script had always exited 0 before it
|
|
15
|
+
started. That gap cost 0.4.287 through 0.4.292: six versions tagged, six green CI runs, six
|
|
16
|
+
GitHub releases, and nothing on npm, found only by looking.
|
|
17
|
+
- npm is polled rather than the workflow's status, because the question is whether the version is
|
|
18
|
+
installable. On timeout it says the tag, release and commit are all correct and the publish is
|
|
19
|
+
what did not happen, gives the two commands to see why, and warns that re-running the script
|
|
20
|
+
would cut the next version and leave this one a hole — which is exactly how the six were lost.
|
|
21
|
+
|
|
22
|
+
## 0.4.293
|
|
23
|
+
|
|
24
|
+
- **Moved** the tarball check out of the test suite, which is the only place it could not live.
|
|
25
|
+
Packing this package runs `prepublishOnly` — `npm run check && npm run build` — so a test that
|
|
26
|
+
packs runs the suite containing itself, and `npm pack --json` printed the whole run before its
|
|
27
|
+
JSON. 0.4.292 tried to parse around that with `--ignore-scripts` and a located JSON array; the
|
|
28
|
+
publish runner's npm ran the lifecycle anyway, and the extra output then broke the parser a
|
|
29
|
+
second way. It is `npm run verify:tarball` now, in CI's `package` job beside `verify:package`,
|
|
30
|
+
where nothing recurses.
|
|
31
|
+
|
|
32
|
+
**0.4.287 through 0.4.292 were never released** — six versions, all tagged, all with green CI,
|
|
33
|
+
none reaching npm, because `publish.yml` runs its own `npm run check` after the release exists.
|
|
34
|
+
Everything they carried is in this one. The release script waits for CI on the commit, and the
|
|
35
|
+
publish is a separate workflow that starts later, so the wait added in 0.4.244 cannot see it.
|
|
36
|
+
|
|
37
|
+
## 0.4.292
|
|
38
|
+
|
|
39
|
+
- **Fixed** the tarball check added in 0.4.287, which broke the publish it was written to protect.
|
|
40
|
+
It ran `npm pack --dry-run --json` without `--ignore-scripts`, so `npm pack` ran the pack
|
|
41
|
+
lifecycle — and this package's `prepublishOnly` is `npm run check && npm run build`. The pack
|
|
42
|
+
performed by the test therefore ran the suite containing the test, printed all of it to stdout,
|
|
43
|
+
and left `JSON.parse` reading `npm notice run biome check` as JSON. It bites only where a
|
|
44
|
+
lifecycle actually fires, which is why it passed on this machine and failed in `publish.yml`.
|
|
45
|
+
The JSON is now located in the output rather than assumed to start at byte zero, and a missing
|
|
46
|
+
file list says so instead of throwing `Cannot read properties of undefined`.
|
|
47
|
+
|
|
48
|
+
**0.4.287 through 0.4.291 were never released.** All five were tagged, all five had green CI —
|
|
49
|
+
the failure is in `publish.yml`, which runs after — and none reached npm. Everything they
|
|
50
|
+
carried is in this release. That is five more numbers on the list with 0.2.29, 0.2.36, 0.2.59,
|
|
51
|
+
0.4.176, 0.4.231-0.4.236 and 0.4.241-0.4.242.
|
|
52
|
+
|
|
53
|
+
## 0.4.291
|
|
54
|
+
|
|
55
|
+
- **Extended** `verify:site` to the rendered head of every built page. `Base.astro` builds it once
|
|
56
|
+
for all of them, which is exactly why a page that misses it misses it silently — nothing renders
|
|
57
|
+
differently. Title, description, canonical and the two Open Graph tags are now required on all 27
|
|
58
|
+
pages, and every documentation page must carry the `rel="alternate"` markdown link.
|
|
59
|
+
- That last one has a stated purpose rather than being SEO housekeeping. `[...slug].md.ts` records
|
|
60
|
+
what was measured: no AI crawler uses content negotiation, and the ones that found markdown found
|
|
61
|
+
it through an explicit `<link rel="alternate">` in the HTML. A docs page without it has a
|
|
62
|
+
markdown twin nothing can discover, which is the whole feature quietly not working.
|
|
63
|
+
- The `/docs` redirect stub Astro generates is exempt, and correctly: it carries `robots: noindex`
|
|
64
|
+
and exists to be followed rather than read.
|
|
65
|
+
|
|
66
|
+
## 0.4.290
|
|
67
|
+
|
|
68
|
+
- **Added** `npm run verify:site`, which checks what the site build produced rather than that it
|
|
69
|
+
produced something. `llms.txt`, `llms-full.txt`, the markdown twin of every page, `robots.txt`
|
|
70
|
+
and `api.json` are generated from the collection and nothing looked at the output — and each
|
|
71
|
+
fails silently. A page missing from `llms.txt` is a page an agent never learns about; a `.md`
|
|
72
|
+
twin that did not render leaves a documented URL 404ing while the HTML page beside it is fine;
|
|
73
|
+
a `Sitemap:` line naming a file the build did not emit tells a crawler to fetch nothing.
|
|
74
|
+
- It runs in CI's `site` job, after the build, rather than in `npm run check`. These generators
|
|
75
|
+
live under `website/`, where an import pulls in a tsconfig the root install does not have —
|
|
76
|
+
the boundary 0.4.264 guards — so the artifact is the only place the question can be asked.
|
|
77
|
+
Verified by narrowing `llms.txt`'s section list and watching three pages disappear from the map.
|
|
78
|
+
|
|
79
|
+
## 0.4.289
|
|
80
|
+
|
|
81
|
+
- **Tested** `header/fields.ts` directly, the last source module no test imported. It is the sole
|
|
82
|
+
owner of where each of the ten fixed fields lives and which diagnostic a field that fails its
|
|
83
|
+
grammar deserves, and every function in it ran only as a step inside `parseHeader` — covered by
|
|
84
|
+
whichever inputs some larger fixture happened to produce.
|
|
85
|
+
- The offsets are the part a whole-file parse cannot check at all: a field read from the wrong
|
|
86
|
+
offset still parses, it just parses the neighbouring field's bytes. So the table is checked
|
|
87
|
+
against a header whose every field is filled with a distinct letter, which makes a misread
|
|
88
|
+
visible rather than plausible, and against the property that the ten fields tile all 256 bytes
|
|
89
|
+
with no gap and no overlap. The spec's offsets are written out from the specification rather
|
|
90
|
+
than imported from `constants.ts` — importing them would compare the table with itself, and the
|
|
91
|
+
two have to agree because both describe a format neither of them defines.
|
|
92
|
+
|
|
93
|
+
## 0.4.288
|
|
94
|
+
|
|
95
|
+
- **Tested** `options.ts` directly for the first time. It is 66 lines of Layer 1 whose whole job is
|
|
96
|
+
refusing bad input, and no test imported it — every path through it ran only as a side effect of
|
|
97
|
+
some larger read. Its own docblock records two misdiagnoses that reached users from a `NaN`
|
|
98
|
+
budget: an `EdfBudgetError` advising "read fewer records per call", which no record count
|
|
99
|
+
satisfies, and an `EdfRangeError` about `count: NaN` telling the caller to clamp a range the
|
|
100
|
+
function does not take. The distinction it exists for — `undefined` means "use the default",
|
|
101
|
+
`NaN` means a caller computed something and got nothing — is now pinned from both sides, along
|
|
102
|
+
with the ordering that makes the message right: `NaN >= 0` is false, so a sign check written
|
|
103
|
+
first would call `NaN` negative.
|
|
104
|
+
- **Pinned** the inventory the module states: six modules resolve the budget and two hand it on.
|
|
105
|
+
That sentence is the argument the guard is worth anything — "a guard that only one of the eight
|
|
106
|
+
applies is not a guard" — and a seventh consumer reading the option raw is how it stops being
|
|
107
|
+
true.
|
|
108
|
+
|
|
109
|
+
## 0.4.287
|
|
110
|
+
|
|
111
|
+
- **Added** a check on what `npm publish` would actually send. `publint` runs in CI and checks the
|
|
112
|
+
manifest is well formed; it says nothing about membership, and membership is where the claims
|
|
113
|
+
are — `tests/README.md` promises "nothing under `tests/` ever ships", and the fixture policy
|
|
114
|
+
says the six committed binaries are excluded from the published package.
|
|
115
|
+
- Wrong in either direction is quiet. A stray `tests/` ships 2.1 MB of other people's EDF files to
|
|
116
|
+
every consumer, with the licence questions that policy exists to avoid; a missing `dist/` ships
|
|
117
|
+
a package that installs and cannot be imported. Neither surfaces until someone downloads it, and
|
|
118
|
+
by then the version is immutable. Asked through `npm pack --dry-run`, which is the code path a
|
|
119
|
+
publish takes, rather than by reimplementing npm's ignore rules — which is the whole difficulty
|
|
120
|
+
of the question. Every exports and `bin` target is checked to be present, and `docs/` is checked
|
|
121
|
+
to contain the changelog and nothing else.
|
|
122
|
+
|
|
9
123
|
## 0.4.286
|
|
10
124
|
|
|
11
125
|
- **Guarded** the two `git push` calls, which were the last unguarded network steps in the release.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "edfcore",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.294",
|
|
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",
|
|
@@ -71,6 +71,8 @@
|
|
|
71
71
|
"format": "biome check --write --linter-enabled=false .",
|
|
72
72
|
"check": "npm run lint && npm run typecheck && npm run build && npm run test",
|
|
73
73
|
"verify:package": "npx --yes publint@latest --strict && npx --yes @arethetypeswrong/cli@latest --pack . --profile esm-only",
|
|
74
|
+
"verify:tarball": "node scripts/check-tarball.mjs",
|
|
75
|
+
"verify:site": "node scripts/check-site-output.mjs",
|
|
74
76
|
"corpus:fetch": "node scripts/fetch-corpus.mjs",
|
|
75
77
|
"release": "node scripts/release.mjs",
|
|
76
78
|
"prepublishOnly": "npm run check && npm run build"
|
package/src/constants.ts
CHANGED