chore: prepare the 0.1.5 release, on a rebuilt engine and a current spec pin - #89
Merged
Conversation
…pec pin The version moves to 0.1.5 and the CHANGELOG gets its section back. It had none: #68 deleted the `## [0.1.4]` heading, so every note that shipped in 0.1.4 had fallen back under Unreleased and the next release would have repeated all of them. The compare links at the foot were missing 0.1.2 through 0.1.4 as well. Every entry is rewritten short. The sections had grown to essay length - one bullet ran nine paragraphs - and release notes are generated from this file, so the detail belongs in the commits and the tickets it references. No change is dropped; every reference is kept. THE ENGINE REBUILD CANNOT LAND ALONE, which is the substance of the diff. engine-drift.yml had been red for two nights: the vendored bundle rendered 23 of 1317 corpus documents differently where a bundle built from carve-js main renders them correctly. Rebuilding against the pin that was here left 135 of 1259 wrong, and against carve main 143 of 1341 - the engine right and the goldens old in the first case, the spec ahead of every engine in the second. The pin that makes both numbers zero is carve b78950f, the revision carve-js main itself pins: 0 of 1330. Twenty-five new categories needed a COVERED-or-SKIP decision. Each was tokenized with this grammar and its scopes compared against the 151 the covered corpus and the hand fixtures already produce; none of them adds a scope name. All twenty-five are SKIP - block context a line-based grammar cannot see, or render-time behavior with no token of its own. Four record a MEASURED FALSE POSITIVE rather than a reason to skip, and they are filed rather than buried: empty brace pairs, the braced en dash and flag-shaped hyphen runs (issue 85), the table header marker claiming cells the engine renders plain (issue 86), and a boolean attribute starting with an underscore (issue 87). A golden for any of them would pin the wrong answer, which is the lesson from the comment-fence skip that hid a defect for three releases. Two goldens change and neither is a grammar regression: upstream edited both corpus inputs, the arrow document to the doubled runs and the list continuation document to a flush-left block.
…thout it Opening a .crv file on PhpStorm 2026.2 threw NoClassDefFoundError on com.intellij.ui.jcef.JBCefBrowser and no editor opened at all. JCEF is not part of com.intellij.modules.platform. It is its own plugin - com.intellij.modules.jcef, "Web Browser (JCEF)", shipped under plugins/jcef-plugin - and its content module intellij.platform.ui.jcef is what carries JBCefBrowser. This plugin declared no dependency on it, so the class was never on its class loader; the parent list in the report shows textmate, groovy, ssh and lsp4ij, and no jcef. The blast radius is larger than the preview because CarvePreviewEditorProvider returns HIDE_DEFAULT_EDITOR: a provider that throws leaves nothing to fall back to, so the file itself would not open. Highlighting was fine and unreachable. The two extension points that build a CarvePreviewPanel move into an optional carve-jcef.xml, gated on the JCEF plugin the same way carve-lsp.xml is gated on LSP4IJ. Where JCEF is present nothing changes. Where it is not, neither extension point is registered, the plain text editor opens the file, and highlighting, export, live templates and the language server are unaffected - which is what the split buys over a hard dependency that would refuse to load the plugin at all. CarvePluginDescriptorTest pins the arrangement rather than the symptom: the optional dependency must be declared, carve-jcef.xml must carry both extension points, plugin.xml must register nothing from the preview package, and CarvePreviewPanel must remain the only file that reaches JCEF. Verified by moving the provider back to plugin.xml, where the second assertion fails.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Prepares 0.1.5, and carries the two things that could not ship without it.
The CHANGELOG had lost its 0.1.4 section. #68 deleted the
## [0.1.4]heading, so every note that shipped in 0.1.4 had fallen back under Unreleased and the next release would have repeated all of them. The heading is restored, the compare links at the foot now cover 0.1.2 through 0.1.5, and every entry is rewritten short - one bullet had grown to nine paragraphs, and release notes are generated from this file. No change is dropped and every reference is kept.The engine rebuild could not land alone. engine-drift.yml had been red for two nights: the vendored bundle rendered 23 of 1317 corpus documents differently where a bundle built from carve-js
mainrenders them correctly. Rebuilding against the pin that was here left 135 of 1259 wrong; against carvemain, 143 of 1341 - the engine right and the goldens old in the first case, the spec ahead of every engine in the second. The pin that makes both numbers zero is carveb78950f, the revision carve-jsmainitself pins: 0 of 1330.Twenty-five new corpus categories needed a COVERED-or-SKIP decision. Each was tokenized with this grammar and its scopes compared against the 151 the covered corpus and the hand fixtures already produce; none adds a scope name, and all twenty-five are SKIP. Four record a measured false positive rather than a reason to skip, and are filed rather than buried: #85, #86, #87. Two goldens change, both following upstream edits to the corpus input rather than a grammar regression.
Opening a
.crvfile crashed on PhpStorm 2026.2 (#88). JCEF is its own plugin,com.intellij.modules.jcef, not part ofcom.intellij.modules.platform, soJBCefBrowserwas never on this plugin's class loader andCarvePreviewEditorProviderthrewNoClassDefFoundError. Because the provider hides the default editor, the file did not open at all. The preview extension points move into an optionalcarve-jcef.xml, gated the waycarve-lsp.xmlis gated on LSP4IJ, so an IDE without JCEF opens the text editor and keeps highlighting, export, templates and the language server.Marketplace
<change-notes>are generated from the[0.1.5]section, which the built artifact confirms.