Releases: kaijen/kaicrit
Releases · kaijen/kaicrit
v0.10.0
Maintenance release closing 19 review issues — correctness, robustness, security hardening, config scoping and build/CI tooling.
🐞 Fixed
- Accept/Reject could corrupt the document on a stale (debounced) cache (#52). Resolutions now flush any pending parse and verify the cached marker text before editing.
- Split view decorated only one pane (#56) — now every visible editor of the document.
- Changes-view group/flat toggle was inert under a workspace override (#57) — now writes into the scope that defines the setting.
- Comment date used UTC (#58) — now the local calendar date.
- Cursor jumped after a failed authoring edit (#59) — caret correction gated on the applied flag.
- Git author ignored multi-root workspaces (#60) — resolved per the active document's folder.
- Word diff fragmented non-ASCII words (#55) — Unicode-aware tokenizer (
\p{L}/\p{N}), so umlauts, ß and accents stay inside their word. - Track Changes shadow hardened against external mutations (#68) — resyncs instead of producing a malformed marker.
🔄 Changed
- Track Changes coupled to the enablement gate (#53, #54). Turning it on in a disabled document now enables kaicrit for that file; the normal-mode paste-flatten gets a cheap early-out and stays inert in disabled documents.
- Configuration read with a resource scope (#61) — folder-/language-specific overrides (
"[markdown]": { … }, multi-root) are honoured.
✨ Added
kaicrit.edit.maxParseLength(#63, default 2 000 000) — size guard bounding the marker regex's O(n²) worst case on pathological input.
🔒 Security
- Hardened the change-action hover (#62).
isTrustedscoped to kaicrit's own accept/reject commands instead of everycommand:URI; document-sourced comment author/date is escaped so it can't render a link.
🛠 Internal / build
- CI now runs lint + tests on every push/PR; release workflow runs the suite before packaging (#51).
- ESLint flat config (typescript-eslint recommended), wired into CI (#69).
- Extension bundled with esbuild for packaging — single ~40 KB
.vsixmodule; dev/F5 loop unchanged (#65). - Packaging cleanups: dev-only files excluded from the
.vsix(#64),out/cleaned before tests (#67), docs unified on@vscode/vsce(#66).
Full changelog: v0.9.0...v0.10.0
v0.9.0
v0.9.0: Group/flat layout toggle for the Changes sidebar - Chronological (flat) layout for the Changes sidebar: a group/flat toggle in the view title lists changes either grouped by type (default) or flat in document order, each leaf prefixed with its type symbol - New kaicrit.changes.grouping setting (type | chronological) to persist the layout choice
v0.8.0
v0.8.0: Double-Pane view (Original | New) - Double-Pane view (Original | New): split the active CriticMarkup document into side-by-side Original (reject result) and New (accept result) editors via Alt+K Alt+P, title-bar icon, or right-click (#46)
v0.7.5
v0.7.5: Fix spurious deletion when wrapping in Track Changes - Wrapping a selection in a highlight/comment while Track Changes is on no longer prepends a spurious deletion; the insert/wrap commands now apply their edit through the recorder's re-entrancy guard so authored markup lands verbatim. Affects all five insert commands (#44).
v0.7.4
v0.7.4: Hover Accept/Reject popup closes after resolving - Hover Accept/Reject popup now closes after resolving a change; it previously stayed open over the removed marker (#42)
v0.7.3
v0.7.3: Fix accept/reject undoing itself with Track Changes on - Accept/Reject while Track Changes is on no longer undoes itself; resolutions now bypass the recorder's re-entrancy guard (#42)
v0.7.2
v0.7.2: Prevent nested CriticMarkup on paste in normal mode - Nesting guard on paste even with Track Changes off: pasting CriticMarkup into the content of an existing marker flattens the pasted markers to plain text instead of producing nested, spec-invalid markup. Plain text and standalone pasted markup are left verbatim. New setting kaicrit.edit.preventNestingOnPaste (default true).
v0.7.1
v0.7.1: Fix nested markup when pasting inside a Track Changes marker
- Pasting CriticMarkup inside an existing marker no longer nests
(e.g. {++any++} into an addition). Inner markers are flattened to
their accept-form before being absorbed, so the marker just grows
by plain text. Counterpart to the #40 plain-text paste fix.
v0.7.0
v0.7.0
Two new nesting-prevention rules for Track Changes mode.
Changed
- Track Changes: editing a marker's delimiter now rejects that change (#38).
Deleting or replacing any part of a marker's opener/closer — e.g. backspacing
the leading{of{++a++}— resolves the whole marker with Reject semantics
(addition → removed, deletion → text kept, substitution → original, etc.)
instead of leaving broken or nested markup like{--{--}++a++}. Edits inside
a marker's content are still absorbed (#34); a selection spanning content and a
delimiter rejects the entire marker. - Track Changes: pasting text that is already CriticMarkup is kept verbatim
(#40). Inserting complete marker(s) no longer re-wraps them into nested markup
({++a++}stays{++a++}, not{++{++a++}++}). A paste that mixes plain text
with markers wraps only the plain runs as additions
(foo {++a++} bar→{++foo ++}{++a++}{++ bar++}), and pasting markup over a
selection tracks the replaced text as a leading{--…--}deletion.
Unterminated input (e.g.{++a) still falls through to a normal addition wrap.
Full changelog: v0.6.2...v0.7.0
v0.6.2
Release v0.6.2 Add MIT license (LICENSE file, package.json license field, README section).