<feed xmlns='http://www.w3.org/2005/Atom'>
<title>LunaticChat.git, branch renovate/cloudnode-pro-modrinth-publish-digest</title>
<subtitle>A next-generation chat plugin for Paper, Folia and Velocity.
</subtitle>
<link rel='alternate' type='text/html' href='https://www.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/'/>
<entry>
<title>chore(deps): update cloudnode-pro/modrinth-publish digest to 203bc72</title>
<updated>2026-08-05T23:39:24+00:00</updated>
<author>
<name>renovate[bot]</name>
<email>29139614+renovate[bot]@users.noreply.github.com</email>
</author>
<published>2026-08-05T23:39:24+00:00</published>
<link rel='alternate' type='text/html' href='https://www.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=5a2bb638920148edab55ceca972a7aeecd75182d'/>
<id>5a2bb638920148edab55ceca972a7aeecd75182d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>fix(deps): update dependency io.papermc.paper:paper-api to v26.2.build.96-stable (#270)</title>
<updated>2026-08-05T17:56:45+00:00</updated>
<author>
<name>renovate[bot]</name>
<email>29139614+renovate[bot]@users.noreply.github.com</email>
</author>
<published>2026-08-05T17:56:45+00:00</published>
<link rel='alternate' type='text/html' href='https://www.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=3fb478b008ab5d777e75a5553ef8260810d4c589'/>
<id>3fb478b008ab5d777e75a5553ef8260810d4c589</id>
<content type='text'>
Co-authored-by: renovate[bot] &lt;29139614+renovate[bot]@users.noreply.github.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-authored-by: renovate[bot] &lt;29139614+renovate[bot]@users.noreply.github.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>fix(deps): update dependency io.papermc.paper:paper-api to v26.2.build.93-stable (#269)</title>
<updated>2026-08-05T14:05:44+00:00</updated>
<author>
<name>renovate[bot]</name>
<email>29139614+renovate[bot]@users.noreply.github.com</email>
</author>
<published>2026-08-05T14:05:44+00:00</published>
<link rel='alternate' type='text/html' href='https://www.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=b2015b10248079396942688802e222e142e9c248'/>
<id>b2015b10248079396942688802e222e142e9c248</id>
<content type='text'>
Co-authored-by: renovate[bot] &lt;29139614+renovate[bot]@users.noreply.github.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-authored-by: renovate[bot] &lt;29139614+renovate[bot]@users.noreply.github.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #268 from m1sk9/fix/download-and-compatibility-versions</title>
<updated>2026-08-05T11:59:07+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-05T11:59:07+00:00</published>
<link rel='alternate' type='text/html' href='https://www.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=8396304c01dce8e0a07cdcd647dfd35293019050'/>
<id>8396304c01dce8e0a07cdcd647dfd35293019050</id>
<content type='text'>
fix: Show the actual plugin versions on the download and compatibility pages, and mark feature-short pairs</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
fix: Show the actual plugin versions on the download and compatibility pages, and mark feature-short pairs</pre>
</div>
</content>
</entry>
<entry>
<title>feat: warn where a pair connects but falls short of a feature</title>
<updated>2026-08-05T11:56:07+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-05T11:56:07+00:00</published>
<link rel='alternate' type='text/html' href='https://www.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=54c369939455bcfd7b66faa9d0a18aff901c05b0'/>
<id>54c369939455bcfd7b66faa9d0a18aff901c05b0</id>
<content type='text'>
The matrix marked every accepted pair with a plain tick, which reads as
"everything works". It does not. ProtocolVersion bumps PATCH for sub-channels a
peer can safely ignore, so Paper 1.3.0 (protocol 1.0.1) against Velocity 1.1.0
(1.0.0) completes the handshake and then silently drops cross-server direct
messages — the very feature that PATCH was bumped for. An operator reading the
tick had no way to learn that, and the pages around it repeated the claim.

The handshake is settled by MAJOR and MINOR alone, so any difference left once a
pair is accepted is a feature the newer end offers and the older will never
answer. Those pairs now carry a warning that says which end lags. Naming the
feature would take a protocol-version-to-feature table on the website, which
would drift from the protocol it describes, so the warning stays general and
leaves the reader one hop from the compatibility page.

The handshake verdict keeps the three checks that mirror Velocity's gate, with
the new one layered after them, so the mirror stays honest. isCompatible now
holds for a degraded pair, which does connect.

Cells are built once per pair in a computed instead of recomputing on each of the
template's reads, which a third state would otherwise have multiplied.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The matrix marked every accepted pair with a plain tick, which reads as
"everything works". It does not. ProtocolVersion bumps PATCH for sub-channels a
peer can safely ignore, so Paper 1.3.0 (protocol 1.0.1) against Velocity 1.1.0
(1.0.0) completes the handshake and then silently drops cross-server direct
messages — the very feature that PATCH was bumped for. An operator reading the
tick had no way to learn that, and the pages around it repeated the claim.

The handshake is settled by MAJOR and MINOR alone, so any difference left once a
pair is accepted is a feature the newer end offers and the older will never
answer. Those pairs now carry a warning that says which end lags. Naming the
feature would take a protocol-version-to-feature table on the website, which
would drift from the protocol it describes, so the warning stays general and
leaves the reader one hop from the compatibility page.

The handshake verdict keeps the three checks that mirror Velocity's gate, with
the new one layered after them, so the mirror stays honest. isCompatible now
holds for a degraded pair, which does connect.

Cells are built once per pair in a computed instead of recomputing on each of the
template's reads, which a third state would otherwise have multiplied.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>chore: migrate the linter config off the deprecated recommended field</title>
<updated>2026-08-05T11:09:16+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-05T11:09:16+00:00</published>
<link rel='alternate' type='text/html' href='https://www.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=1a7b6ec2586db0663f09924721db71f3f2e1eadc'/>
<id>1a7b6ec2586db0663f09924721db71f3f2e1eadc</id>
<content type='text'>
Biome 2.5.7 deprecates `linter.rules.recommended` in favour of `preset` and will
drop it in the next major, so the config emitted a deprecation notice on every
run. Renaming it now keeps `bun run lint` and `format:check` clean and spares a
forced edit at the next upgrade; the rule set it selects is unchanged.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Biome 2.5.7 deprecates `linter.rules.recommended` in favour of `preset` and will
drop it in the next major, so the config emitted a deprecation notice on every
run. Renaming it now keeps `bun run lint` and `format:check` clean and spares a
forced edit at the next upgrade; the rule set it selects is unchanged.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>chore: put the theme's composables under Biome</title>
<updated>2026-08-05T10:46:22+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-05T10:46:22+00:00</published>
<link rel='alternate' type='text/html' href='https://www.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=adf547883cee87a6706f8190bc845a5a94de2768'/>
<id>adf547883cee87a6706f8190bc845a5a94de2768</id>
<content type='text'>
`includes` stopped at `.vitepress/theme/*.ts`, so everything under
`components/` went unchecked — including the release and compatibility logic
this branch touches. Widening it to `**/*.ts` takes the check from five files to
nine.

`.vue` stays out. Biome does not resolve `&lt;script setup&gt;` bindings used from the
template, so it reports the components' `t`, `data`, `loading` and formatters as
unused and offers to delete them; admitting those files would mean turning off
noUnusedVariables and noUnusedImports to buy nothing.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
`includes` stopped at `.vitepress/theme/*.ts`, so everything under
`components/` went unchecked — including the release and compatibility logic
this branch touches. Widening it to `**/*.ts` takes the check from five files to
nine.

`.vue` stays out. Biome does not resolve `&lt;script setup&gt;` bindings used from the
template, so it reports the components' `t`, `data`, `loading` and formatters as
unused and offers to delete them; admitting those files would mean turning off
noUnusedVariables and noUnusedImports to buy nothing.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>docs: name both plugin versions for cross-server direct messages</title>
<updated>2026-08-05T10:46:16+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-05T10:46:16+00:00</published>
<link rel='alternate' type='text/html' href='https://www.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=639173db48d037ffa5c084d089e5fc7d85d71d80'/>
<id>639173db48d037ffa5c084d089e5fc7d85d71d80</id>
<content type='text'>
The badge read `v1.3.0~`, pointing at a Velocity release that does not exist.
The feature needs both halves, and the Velocity half first shipped as 1.2.0
inside the unified v1.3.0 release, so a reader hunting for Velocity v1.3.0 finds
nothing and cannot tell which proxy build carries the relay.

Also refreshes the gradle.properties example, which still showed the versions
current when it was written.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The badge read `v1.3.0~`, pointing at a Velocity release that does not exist.
The feature needs both halves, and the Velocity half first shipped as 1.2.0
inside the unified v1.3.0 release, so a reader hunting for Velocity v1.3.0 finds
nothing and cannot tell which proxy build carries the relay.

Also refreshes the gradle.properties example, which still showed the versions
current when it was written.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</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://www.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>Merge pull request #267 from m1sk9/update/development-and-website</title>
<updated>2026-08-04T19:56:51+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-04T19:56:51+00:00</published>
<link rel='alternate' type='text/html' href='https://www.dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=ce1a6123f7d48100ba3b216746127ba269fe21fb'/>
<id>ce1a6123f7d48100ba3b216746127ba269fe21fb</id>
<content type='text'>
docs: Move release notes onto the documentation site and correct the docs against the implementation</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
docs: Move release notes onto the documentation site and correct the docs against the implementation</pre>
</div>
</content>
</entry>
</feed>
