<feed xmlns='http://www.w3.org/2005/Atom'>
<title>LunaticChat.git/.github/workflows, branch main</title>
<subtitle>A next-generation chat plugin for Paper, Folia and Velocity.
</subtitle>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/'/>
<entry>
<title>ci: tag each release with exactly one platform</title>
<updated>2026-09-28T12:35:52+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-09-28T12:35:52+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=9bb1623c32c80da097f423c1ae3c96aa11372a43'/>
<id>9bb1623c32c80da097f423c1ae3c96aa11372a43</id>
<content type='text'>
A vX.Y.Z tag used to ship both JARs under the Paper version number, so the
Velocity version never appeared in a tag. Changelog download links guessed
paper/ and velocity/ tags that did not exist and returned 404, and the same
JAR resurfaced under several releases.

Paper now releases on vX.Y.Z and Velocity on velocity/vX.Y.Z, which matches
the CHANGELOG.md headings one to one. Paper keeps the bare form rather than
moving to paper/vX.Y.Z because the update checker in already-deployed Paper
builds only understands that form. Both workflows call a shared reusable
workflow, since the two had drifted into near-identical copies.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A vX.Y.Z tag used to ship both JARs under the Paper version number, so the
Velocity version never appeared in a tag. Changelog download links guessed
paper/ and velocity/ tags that did not exist and returned 404, and the same
JAR resurfaced under several releases.

Paper now releases on vX.Y.Z and Velocity on velocity/vX.Y.Z, which matches
the CHANGELOG.md headings one to one. Paper keeps the bare form rather than
moving to paper/vX.Y.Z because the update checker in already-deployed Paper
builds only understands that form. Both workflows call a shared reusable
workflow, since the two had drifted into near-identical copies.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>chore(deps): update cloudnode-pro/modrinth-publish digest to 3870f66</title>
<updated>2026-09-12T09:53:24+00:00</updated>
<author>
<name>renovate[bot]</name>
<email>29139614+renovate[bot]@users.noreply.github.com</email>
</author>
<published>2026-09-12T09:53:24+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=8fbc7e12ecf106fbc2d6c50ea32d7cfa3ed188df'/>
<id>8fbc7e12ecf106fbc2d6c50ea32d7cfa3ed188df</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #235 from m1sk9/renovate/cloudnode-pro-modrinth-publish-digest</title>
<updated>2026-08-31T06:27:20+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-31T06:27:20+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=907778db55f7038385100bb2e389f15b6cba75eb'/>
<id>907778db55f7038385100bb2e389f15b6cba75eb</id>
<content type='text'>
chore(deps): update cloudnode-pro/modrinth-publish digest to 203bc72</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
chore(deps): update cloudnode-pro/modrinth-publish digest to 203bc72</pre>
</div>
</content>
</entry>
<entry>
<title>ci: publish the plugin JARs at the artifact root</title>
<updated>2026-08-30T05:31:43+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-30T05:31:43+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=adb97b712043253afdfb8debcb413a676b7d9c2f'/>
<id>adb97b712043253afdfb8debcb413a676b7d9c2f</id>
<content type='text'>
Listing both platforms under one artifact made upload-artifact root the
archive at the workspace, so downloading it yielded nested
platform-*/build/libs directories instead of the JARs themselves.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Listing both platforms under one artifact made upload-artifact root the
archive at the workspace, so downloading it yielded nested
platform-*/build/libs directories instead of the JARs themselves.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ci: let a newer Pages deploy supersede a stuck one</title>
<updated>2026-08-30T04:59:39+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-30T04:59:39+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=0dd99e9b82c74fa1406dbb6d269e771315c6b6e0'/>
<id>0dd99e9b82c74fa1406dbb6d269e771315c6b6e0</id>
<content type='text'>
A deploy_dokka job queued on 2026-08-07 never progressed and, because the
"pages" concurrency group refused to cancel in-progress deployments, it held
the group for 23 days. Every later main-branch run piled up behind it and was
cancelled after 14-52h, so main CI never reported. Discarding a superseded
docs deploy costs nothing -- the newer run publishes newer docs anyway -- and
the job timeout keeps a hung deploy from repeating the stall.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A deploy_dokka job queued on 2026-08-07 never progressed and, because the
"pages" concurrency group refused to cancel in-progress deployments, it held
the group for 23 days. Every later main-branch run piled up behind it and was
cancelled after 14-52h, so main CI never reported. Discarding a superseded
docs deploy costs nothing -- the newer run publishes newer docs anyway -- and
the job timeout keeps a hung deploy from repeating the stall.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>chore(deps): update cloudnode-pro/modrinth-publish digest to 203bc72</title>
<updated>2026-08-26T20:28:55+00:00</updated>
<author>
<name>renovate[bot]</name>
<email>29139614+renovate[bot]@users.noreply.github.com</email>
</author>
<published>2026-08-26T20:28:55+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=01ec3c10ac8562abcbc961974495f1163cdad60c'/>
<id>01ec3c10ac8562abcbc961974495f1163cdad60c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>fix: read plugin versions from release JAR names, not tag names</title>
<updated>2026-08-05T10:46:00+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-05T10:46:00+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=af776eac4fd971483397f40e8c8452df485892e0'/>
<id>af776eac4fd971483397f40e8c8452df485892e0</id>
<content type='text'>
The download cards and the compatibility matrix derived each plugin's version
from the release tag, which cannot hold for a unified `vX.Y.Z` release: it
carries both JARs and their versions need not agree. v1.3.0 shipped Paper 1.3.0
alongside Velocity 1.2.0.

So the download page advertised Paper v1.2.2 and Velocity v1.1.0, two
generations stale, because it searched `paper/v` and `velocity/v` tags first and
fell back to a unified tag only when none existed. The matrix meanwhile put a
Velocity v1.3.0 on its axis that was never released, leaving no row for the
proxy build operators actually run.

Both now pick releases by the JARs attached to them and take the version from
the file name, the only place it is stated. Tag shape stops mattering: a
platform-specific tag and a unified one are alike just releases that happen to
carry a given JAR.

Releases rank by publication time rather than by API response order, which
follows tag creation instead: velocity/v1.1.0 precedes the later-published
paper/v1.2.2.

A version is listed once even when a later unified release re-attaches an
unchanged JAR, which release.yaml does whenever only the other platform was
bumped. Otherwise the matrix would carry one version twice, under two protocol
versions if the protocol had moved in between.

Tests run in CI from here on. They need an explicit path because Bun does not
discover tests inside dot-directories.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The download cards and the compatibility matrix derived each plugin's version
from the release tag, which cannot hold for a unified `vX.Y.Z` release: it
carries both JARs and their versions need not agree. v1.3.0 shipped Paper 1.3.0
alongside Velocity 1.2.0.

So the download page advertised Paper v1.2.2 and Velocity v1.1.0, two
generations stale, because it searched `paper/v` and `velocity/v` tags first and
fell back to a unified tag only when none existed. The matrix meanwhile put a
Velocity v1.3.0 on its axis that was never released, leaving no row for the
proxy build operators actually run.

Both now pick releases by the JARs attached to them and take the version from
the file name, the only place it is stated. Tag shape stops mattering: a
platform-specific tag and a unified one are alike just releases that happen to
carry a given JAR.

Releases rank by publication time rather than by API response order, which
follows tag creation instead: velocity/v1.1.0 precedes the later-published
paper/v1.2.2.

A version is listed once even when a later unified release re-attaches an
unchanged JAR, which release.yaml does whenever only the other platform was
bumped. Otherwise the matrix would carry one version twice, under two protocol
versions if the protocol had moved in between.

Tests run in CI from here on. They need an explicit path because Bun does not
discover tests inside dot-directories.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ci: link release notes to the English changelog pages</title>
<updated>2026-08-04T19:54:20+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-04T19:54:20+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=004cf9308b5d98737125509adee08b9018cce964'/>
<id>004cf9308b5d98737125509adee08b9018cce964</id>
<content type='text'>
The links were written before the English pages existed, so GitHub and Modrinth
sent an international audience to Japanese notes. Both now point at the English
pages; the Japanese ones remain reachable from the site's own locale switch.

Also stops the changelog template from being served. It lives under `src/`, so
VitePress published it as a page of empty headings at /assets/changelog-default,
where it was reachable and indexable. `srcExclude` keeps it a template.

The tag table on the changelog overview claimed `vX.Y.Z` was last used for
v1.0.0 and retired, which contradicts release.yaml and the release skill still
supporting it; it now says what the tag is for.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The links were written before the English pages existed, so GitHub and Modrinth
sent an international audience to Japanese notes. Both now point at the English
pages; the Japanese ones remain reachable from the site's own locale switch.

Also stops the changelog template from being served. It lives under `src/`, so
VitePress published it as a page of empty headings at /assets/changelog-default,
where it was reachable and indexable. `srcExclude` keeps it a template.

The tag table on the changelog overview claimed `vX.Y.Z` was last used for
v1.0.0 and retired, which contradicts release.yaml and the release skill still
supporting it; it now says what the tag is for.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ci: point release notes at the documentation site</title>
<updated>2026-08-04T19:37:05+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-04T19:37:05+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=89c8e68341b0ff9cb3c69f0ff6e4c34bbec43ae9'/>
<id>89c8e68341b0ff9cb3c69f0ff6e4c34bbec43ae9</id>
<content type='text'>
Every release emitted a skeleton of six empty headings that had to be filled in
by hand on the draft, and Modrinth linked to the GitHub release, so a reader
needed two hops to reach notes that might never have been written.

Both now link straight to the changelog page for the released version, built
from the tag, so the notes live in exactly one place. This makes the release
depend on that page being deployed, which the release skill now checks for.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Every release emitted a skeleton of six empty headings that had to be filled in
by hand on the draft, and Modrinth linked to the GitHub release, so a reader
needed two hops to reach notes that might never have been written.

Both now link straight to the changelog page for the released version, built
from the tag, so the notes live in exactly one place. This makes the release
depend on that page being deployed, which the release skill now checks for.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>feat: support Paper 26.2 (Minecraft 26.2)</title>
<updated>2026-08-02T08:43:50+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-02T08:43:50+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=45c29405be5169e088023aa01cde50467f3eabed'/>
<id>45c29405be5169e088023aa01cde50467f3eabed</id>
<content type='text'>
Paper 26.2 bundles Adventure 5.2.0, a major bump from the 4.26.1 shipped by 26.1.
Adventure 5 makes ClickEvent generic, so the raw type in
CommandContext.replyWithEvent no longer compiled. Auditing the rest of the
Adventure 5 removals found no other affected usage.

api-version is raised to 26.2, dropping 26.1 support: the two Adventure majors
are not binary compatible, so claiming 26.1 compatibility would be a lie.

Also fixes two problems found while verifying on a real server: the Velocity
healthcheck invoked mc-health, which does not exist in the mc-proxy image, so the
container had never once passed its check; and the debug environments pinned no
build at all, which meant the proxy came up as 4.1.0-SNAPSHOT while the plugin is
compiled against velocity-api 3.5.1. Server versions are now derived by x from
the Gradle coordinates so they cannot drift from what the plugin targets.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Paper 26.2 bundles Adventure 5.2.0, a major bump from the 4.26.1 shipped by 26.1.
Adventure 5 makes ClickEvent generic, so the raw type in
CommandContext.replyWithEvent no longer compiled. Auditing the rest of the
Adventure 5 removals found no other affected usage.

api-version is raised to 26.2, dropping 26.1 support: the two Adventure majors
are not binary compatible, so claiming 26.1 compatibility would be a lie.

Also fixes two problems found while verifying on a real server: the Velocity
healthcheck invoked mc-health, which does not exist in the mc-proxy image, so the
container had never once passed its check; and the debug environments pinned no
build at all, which meant the proxy came up as 4.1.0-SNAPSHOT while the plugin is
compiled against velocity-api 3.5.1. Server versions are now derived by x from
the Gradle coordinates so they cannot drift from what the plugin targets.</pre>
</div>
</content>
</entry>
</feed>
