You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Parsing stays bounded on malformed input, and remote paths go unread.
Five reads that could run long on unusual input now finish in bounded time: the JSONC strip of the config, the journal's nesting, the lock's retry, and the checklist and constraint line matches. The session-start recovery block also no longer checks a transcript path that is not on this machine. The plugin dist changes in lib/ and the version string; the new tests and the test roster are the room's own tooling.
Fixed
A config with many unclosed comment or string openers no longer slows the hooks. Before: the JSONC strip rescanned to the end of the input for each unclosed opener, so a 48 KB input took about 208 ms (unclosed block openers), 606 ms (unclosed string escapes) or 1.43 s (a backslash at the end of the input) to strip. The strip now runs in linear time: the same inputs take under 2 ms (best of three runs), and a malformed config still fails to parse. — test: scripts/lib/jsonc-linear.test.mjs
The session-start recovery block no longer checks a transcript path that is not on this machine. Before: the block called stat on the recorded transcript path whatever its form, so a path on another machine was looked up there. Now only an absolute local path is checked; a relative path or a path on another machine is not checked, and it never raises the transcript-gone note. — test: lib/resume-engine.test.js
A journal nested past eight levels is treated as unreadable. Before: the journal reader parsed any depth. Now a deeper journal is refused at the read and handled as an unparseable one, and the resume mark is written without indentation: 278 bytes against 430 for the realistic journal. — test: lib/journal-depth.test.js
The lock's retry for a vanished lock file stops at its deadline. Before: the retry could keep going past the lock wait when the lock file kept disappearing. Now it gives up at the deadline and takes the existing bounded exit. — test: lib/handoff-lock.test.js
The checklist, heading and constraint line matches stay linear on long lines. Before: a 32 KB line took about 1.7 s to match in the checklist reader, 1.4 s in the heading reader, 3.1 s with tabs and a lone carriage return, and 2.5 s in the constraint reader. Now a 1 MB line matches in under 14 ms. A checklist line whose text is only whitespace no longer adds an empty checklist item or an empty next step. — test: lib/state-snapshot-linear.test.js
Changed
Internal — the maintainer gate reads the project config within the same 1 MiB bound as the hooks.scripts/verify.mjs refuses an over-size config with a named reason instead of reading it unbounded.
Internal — the scanner and its test are re-copied (scripts/lib/secret-scan.mjs and scripts/secret-scan.test.mjs, from Bankfire 71f71ae), and the test roster names them.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Parsing stays bounded on malformed input, and remote paths go unread.
Five reads that could run long on unusual input now finish in bounded time: the JSONC strip of the config, the journal's nesting, the lock's retry, and the checklist and constraint line matches. The session-start recovery block also no longer checks a transcript path that is not on this machine. The plugin dist changes in
lib/and the version string; the new tests and the test roster are the room's own tooling.Fixed
Changed
scripts/verify.mjsrefuses an over-size config with a named reason instead of reading it unbounded.scripts/lib/secret-scan.mjsandscripts/secret-scan.test.mjs, from Bankfire71f71ae), and the test roster names them.Release page · CoalHearth
All reactions