<feed xmlns='http://www.w3.org/2005/Atom'>
<title>LunaticChat.git, branch v1.3.0</title>
<subtitle>A next-generation chat plugin for Paper, Folia and Velocity.
</subtitle>
<link rel='alternate' type='text/html' href='https://dangofactory.net/cgit/cgit.cgi/LunaticChat.git/'/>
<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://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>
<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://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>docs: correct the cross-server DM server name and two related claims</title>
<updated>2026-08-04T19:51:22+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-04T19:51:22+00:00</published>
<link rel='alternate' type='text/html' href='https://dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=7e791eaef4e838f590585ab4dc3a3c0e6e7f0972'/>
<id>7e791eaef4e838f590585ab4dc3a3c0e6e7f0972</id>
<content type='text'>
The `@&lt;server&gt;` argument resolves against the server names registered in
`velocity.toml`, not the `features.velocityIntegration.serverName` of the
destination: PresenceTracker publishes `serverInfo.name` and
CrossServerDirectMessageRelay matches the target against the same, so the
previous text had it exactly backwards. Following it on a proxy where the two
names differ produces SERVER_NOT_FOUND every time, and points the reader at the
wrong file to fix. `serverName` still matters, for `{server}` and for
recognising local players, so what it does is stated instead.

Also corrects two claims made while widening these pages:

- `/lcv status` reports only this server's protocol version, not both sides'.
  The Velocity bug template leaned on it as its most important field, so a
  reporter would have pasted output that cannot answer the compatibility
  question. It now also says to run it after a player has joined, since the
  handshake waits for one - the same caveat the README install steps needed.
- Spies see pre-conversion text for direct messages only. Channel messages are
  converted before the handler runs, so spies get the same formatted string the
  members do.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The `@&lt;server&gt;` argument resolves against the server names registered in
`velocity.toml`, not the `features.velocityIntegration.serverName` of the
destination: PresenceTracker publishes `serverInfo.name` and
CrossServerDirectMessageRelay matches the target against the same, so the
previous text had it exactly backwards. Following it on a proxy where the two
names differ produces SERVER_NOT_FOUND every time, and points the reader at the
wrong file to fix. `serverName` still matters, for `{server}` and for
recognising local players, so what it does is stated instead.

Also corrects two claims made while widening these pages:

- `/lcv status` reports only this server's protocol version, not both sides'.
  The Velocity bug template leaned on it as its most important field, so a
  reporter would have pasted output that cannot answer the compatibility
  question. It now also says to run it after a player has joined, since the
  handshake waits for one - the same caveat the README install steps needed.
- Spies see pre-conversion text for direct messages only. Channel messages are
  converted before the handler runs, so spies get the same formatted string the
  members do.

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://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>docs: add changelog pages to 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://dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=8bff9150039b4d94830e43d0688bc03c6a082e64'/>
<id>8bff9150039b4d94830e43d0688bc03c6a082e64</id>
<content type='text'>
Release notes were written into the GitHub release body, which means they exist
once, in English only, and are awkward to revise after publishing. Putting them
on the site gives each release a Japanese and an English page that can be
corrected later and linked from anywhere.

The overview page states the versioning rules the version numbers alone do not
convey: that dropping a supported platform is a MINOR bump, that the Paper and
Velocity builds advance separately, and that the plugin version says nothing
about compatibility.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Release notes were written into the GitHub release body, which means they exist
once, in English only, and are awkward to revise after publishing. Putting them
on the site gives each release a Japanese and an English page that can be
corrected later and linked from anywhere.

The overview page states the versioning rules the version numbers alone do not
convey: that dropping a supported platform is a MINOR bump, that the Paper and
Velocity builds advance separately, and that the plugin version says nothing
about compatibility.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>docs: correct the website where it had drifted from the implementation</title>
<updated>2026-08-04T19:36:50+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-04T19:36:50+00:00</published>
<link rel='alternate' type='text/html' href='https://dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=418be2d127ce2d6a3ed5e9c876deb9c2aafc089b'/>
<id>418be2d127ce2d6a3ed5e9c876deb9c2aafc089b</id>
<content type='text'>
Several statements were wrong rather than merely thin, and each would have set
the wrong expectation:

- the conversion example implied romaji replaces the input, when the result is
  appended in parentheses and both are sent
- the handshake was described as happening at startup, when it waits for the
  first player to join, so a DISCONNECTED status on an empty server read as a
  fault
- cache eviction was called oldest-first, which the unordered in-memory map
  cannot provide
- the Velocity settings table omitted crossServerDirectMessage
- ConfigManager was described as reading Bukkit's FileConfiguration, and the
  settings storage as recovering from a backup that does not exist

It also documents behaviour that had no mention anywhere: the `!` force-global
prefix, that spy sees channel messages and not only DMs, the nightly build
warnings, the overall 1000ms conversion budget that makes api.timeout above it
ineffective, and the data files the plugin writes.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Several statements were wrong rather than merely thin, and each would have set
the wrong expectation:

- the conversion example implied romaji replaces the input, when the result is
  appended in parentheses and both are sent
- the handshake was described as happening at startup, when it waits for the
  first player to join, so a DISCONNECTED status on an empty server read as a
  fault
- cache eviction was called oldest-first, which the unordered in-memory map
  cannot provide
- the Velocity settings table omitted crossServerDirectMessage
- ConfigManager was described as reading Bukkit's FileConfiguration, and the
  settings storage as recovering from a backup that does not exist

It also documents behaviour that had no mention anywhere: the `!` force-global
prefix, that spy sees channel messages and not only DMs, the nightly build
warnings, the overall 1000ms conversion budget that makes api.timeout above it
ineffective, and the data files the plugin writes.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>docs: record what the v1.3.0 releases ship</title>
<updated>2026-08-04T19:36:39+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-04T19:36:39+00:00</published>
<link rel='alternate' type='text/html' href='https://dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=048932276d0c1e11d463f8b9aea872e498b04743'/>
<id>048932276d0c1e11d463f8b9aea872e498b04743</id>
<content type='text'>
The v1.3.0 entry listed three changes out of the roughly forty that landed since
paper/v1.2.2, so the config.yml resilience work and every performance fix went
unrecorded.

Its Velocity note also predated moving Ktor out of the shared module and
understated the JAR reduction as roughly 1 MB. Measured against the released
asset it is about 5.6 MiB, from 8.2 MiB down to 2.6 MiB.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The v1.3.0 entry listed three changes out of the roughly forty that landed since
paper/v1.2.2, so the config.yml resilience work and every performance fix went
unrecorded.

Its Velocity note also predated moving Ktor out of the shared module and
understated the JAR reduction as roughly 1 MB. Measured against the released
asset it is about 5.6 MiB, from 8.2 MiB down to 2.6 MiB.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>docs: renew the README</title>
<updated>2026-08-04T19:36:39+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-04T19:36:39+00:00</published>
<link rel='alternate' type='text/html' href='https://dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=4c06f7858aaa1cdb163e1d9210e7393756b31baa'/>
<id>4c06f7858aaa1cdb163e1d9210e7393756b31baa</id>
<content type='text'>
Installation only linked out to the download page, and Features restated the
site's feature cards without saying what any of them do. The README now carries
the requirements, the per-platform install steps, and a Configuration section -
including that most features are off by default and that applying a change needs
a restart, which nothing in the repository stated anywhere.

The Japanese translation is dropped rather than kept in sync; lc.m1sk9.dev
serves Japanese documentation already.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Installation only linked out to the download page, and Features restated the
site's feature cards without saying what any of them do. The README now carries
the requirements, the per-platform install steps, and a Configuration section -
including that most features are off by default and that applying a change needs
a restart, which nothing in the repository stated anywhere.

The Japanese translation is dropped rather than kept in sync; lc.m1sk9.dev
serves Japanese documentation already.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>docs: correct CONTRIBUTING and rewrite the security policy</title>
<updated>2026-08-04T19:36:38+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-04T19:36:38+00:00</published>
<link rel='alternate' type='text/html' href='https://dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=b01c5b574b09a7673efe283914cfab68f0defb83'/>
<id>b01c5b574b09a7673efe283914cfab68f0defb83</id>
<content type='text'>
CONTRIBUTING pointed contributors at `./x start`, which now fails without a
platform argument, and credited LuckPerms with our coding conventions.

SECURITY.md still assumed a single Paper-shaped release: it scoped support to
one api-version and offered only email. It now states support per platform,
records that a protocol-version mismatch refusing to relay chat is intended
behaviour rather than a vulnerability, and points at GitHub private
vulnerability reporting, which is enabled on this repository.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
CONTRIBUTING pointed contributors at `./x start`, which now fails without a
platform argument, and credited LuckPerms with our coding conventions.

SECURITY.md still assumed a single Paper-shaped release: it scoped support to
one api-version and offered only email. It now states support per platform,
records that a protocol-version mismatch refusing to relay chat is intended
behaviour rather than a vulnerability, and points at GitHub private
vulnerability reporting, which is enabled on this repository.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>chore: split the bug report template per platform</title>
<updated>2026-08-04T19:36:20+00:00</updated>
<author>
<name>Sho Sakuma</name>
<email>me@m1sk9.dev</email>
</author>
<published>2026-08-04T19:36:20+00:00</published>
<link rel='alternate' type='text/html' href='https://dangofactory.net/cgit/cgit.cgi/LunaticChat.git/commit/?id=745bc0497dd50aaf16f08bd793d3decf0e7a97d0'/>
<id>745bc0497dd50aaf16f08bd793d3decf0e7a97d0</id>
<content type='text'>
The single template asked for a Paper version unconditionally, so Folia and
Velocity operators had nowhere to describe the environment that actually
matters. Splitting it also lets each template carry its own Module label rather
than leaving that to triage.

The Velocity template requires the output of `/lcv status`, since compatibility
is decided by the protocol version rather than the plugin version, and asks for
the serverName of each backend, which is what cross-server DM routing matches
against.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The single template asked for a Paper version unconditionally, so Folia and
Velocity operators had nowhere to describe the environment that actually
matters. Splitting it also lets each template carry its own Module label rather
than leaving that to triage.

The Velocity template requires the output of `/lcv status`, since compatibility
is decided by the protocol version rather than the plugin version, and asks for
the serverName of each backend, which is what cross-server DM routing matches
against.

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
