Skip to content

chore: prepare the 0.1.5 release, on a rebuilt engine and a current spec pin - #89

Merged
dereuromark merged 2 commits into
mainfrom
release/0.1.5
Aug 21, 2026
Merged

chore: prepare the 0.1.5 release, on a rebuilt engine and a current spec pin#89
dereuromark merged 2 commits into
mainfrom
release/0.1.5

Conversation

@dereuromark

Copy link
Copy Markdown
Contributor

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 main renders them correctly. Rebuilding against the pin that was here left 135 of 1259 wrong; 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 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 .crv file crashed on PhpStorm 2026.2 (#88). JCEF is its own plugin, com.intellij.modules.jcef, not part of com.intellij.modules.platform, so JBCefBrowser was never on this plugin's class loader and CarvePreviewEditorProvider threw NoClassDefFoundError. Because the provider hides the default editor, the file did not open at all. The preview extension points move into an optional carve-jcef.xml, gated the way carve-lsp.xml is 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.

…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.
@dereuromark dereuromark added chore Tooling, CI, fixtures, pins, upkeep: no user-visible behavior change area:editor Editor and IDE integrations area:corpus Examples, fixtures, conformance suite area:tooling CI, release plumbing, dependencies labels Aug 21, 2026
@dereuromark
dereuromark merged commit 2a57c4c into main Aug 21, 2026
3 checks passed
@dereuromark
dereuromark deleted the release/0.1.5 branch August 21, 2026 00:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:corpus Examples, fixtures, conformance suite area:editor Editor and IDE integrations area:tooling CI, release plumbing, dependencies chore Tooling, CI, fixtures, pins, upkeep: no user-visible behavior change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant