Skip to content

chore(master): release 8.1.0 - #279

Merged
sidorares merged 1 commit into
masterfrom
release-please--branches--master--components--ntk
Aug 18, 2026
Merged

chore(master): release 8.1.0#279
sidorares merged 1 commit into
masterfrom
release-please--branches--master--components--ntk

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

🤖 I have created a release beep boop

8.1.0 (2026-08-18)

Features

  • context2d: shadows, with the blur run as two passes and text coverage cached (#278) (3e88dfc)
  • fonts: an async matchSorted, so a font picker stops blocking on fc-match (#275) (d5d2625)
  • fonts: fc-match answers with the family name too (#276) (44c7163)

Bug Fixes

  • context2d: a gradient paints where the fill is, not where the window starts (#277) (b55c245)

This PR was generated with Release Please. See documentation.

@github-actions
github-actions Bot force-pushed the release-please--branches--master--components--ntk branch 2 times, most recently from e3d70a6 to b505519 Compare August 18, 2026 04:34
sidorares added a commit that referenced this pull request Aug 18, 2026
…en (#281)

#278 merged and release-please skipped it. The Release workflow went
green, logged `commits: 3` for four commits since v8.0.0, and left the
release PR untouched — no shadows entry in 8.1.0's changelog.

The run says why:

```
❯ commit could not be parsed: 6eba5a7 feat(context2d): shadows, ... (#278)
❯ error message: Error: unexpected token '\n' at 24:73, valid tokens [)]
❯ commits: 3
✔ PR #279 remained the same
```

Line 24 of the squash commit is the screenshot caption, and column 73 is
its end: the line stops after `captured headless`, with the next one
starting at `into a pixmap`. The caption's opening bracket is left
unclosed at the newline, and the grammar rejects that.

In the PR description the same caption is a single 106-character line,
whole and balanced. Squash-merge wraps the body at 72 columns on its way
to becoming a commit, and the wrap is what splits it.

I cannot quote the two lines here as they appear in the commit: this
description is checked by the very rule it is about, and quoting them
would fail the check. That is the failure mode, exactly.

## Why the guard missed it

`release-message` passed on #278. It composes `MESSAGE` from
`pull_request.title` and `pull_request.body` and parses that — the text
before the transformation that breaks it. Verified in both directions
against the real message:

| input | longest line | guard, before this branch |
| --- | --- | --- |
| title + body, as CI composed it | 526 | `parses: type=feat` |
| the same text wrapped at 72 | 72 | fails at the caption |
| the real squash commit `6eba5a7` | 91 | fails, `24:73` |

So the miss is not about nested parentheses, the failure mode the guard
was written for after #85 and #103. It is a second, independent way in:
any parenthetical long enough to be wrapped, which is a property of
length rather than of nesting.

## What changed

- **The message is parsed twice**, as written and as the squash will
write it. When only the second fails, the error says so, because the
line it names looks fine in the PR.
- **`wrapLikeSquash` is the emulation**: the subject is left alone, body
lines are word-wrapped at 72 columns, and a token wider than the margin
keeps its own line rather than being split. Close to GitHub's wrapping
rather than byte-identical to it, which is all the guard needs.
- **`.github/workflows/ci.yml` is unchanged** — the job already passed
the right text. The script simply stops trusting it.

Run against the exact title and body CI had for #278, the guard now
exits 1:

```
release-please could not parse this commit message.

unexpected token '

This is the message *as the squash commit will hold it* — the body
wrapped at 72 columns. It parses as written, which is why the line
below may look fine in the PR: the wrap is what splits it.

  23 | ...the caption line, elided here for the reason above...
     |                                                        ^
```

## Tests

New `test/release-message.test.js`, 8 cases: the wrapper's three rules,
#278's caption parsing as written and failing once wrapped, the guard's
exit code and its explanation, #103's nested call, and a passing feat
plus a chore for the no-bump branch.

Both failure cases use the **real** lines. My first draft of the #103
case used an invented nested call in a plain sentence, and it parsed;
the real line, the same call inside backticks, does not. Whether the
grammar trips depends on the surroundings, which is the argument for
running the parser rather than grepping for parentheses.

Full suite green locally against XQuartz, apart from the usual two that
need a server this machine does not have: `glx` wants `+iglx` and
`xi2-live` wants pointer warps to deliver motion.

## Still outstanding

The changelog entry for #278 itself. 8.1.0 is already a minor bump so
the version is unaffected, but the line is missing, and an empty commit
on master is what restores it — as it did for #85 and #103.
@github-actions
github-actions Bot force-pushed the release-please--branches--master--components--ntk branch from b505519 to 18f9bd1 Compare August 18, 2026 05:06
@sidorares
sidorares merged commit 435ced7 into master Aug 18, 2026
6 checks passed
@sidorares
sidorares deleted the release-please--branches--master--components--ntk branch August 18, 2026 05:11
@github-actions

Copy link
Copy Markdown
Contributor Author

🤖 Created releases:

🌻

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant