Skip to content

Read Children of the Night: MCCP v1's marker (TNC 3.0.0), and stop typing INFO at GodWars-line games - #178

Merged
HarryCordewener merged 4 commits into
mainfrom
claude/login-screen-characters-ee4185
Sep 11, 2026
Merged

HarryCordewener merged 4 commits into
mainfrom
claude/login-screen-characters-ee4185

Conversation

@HarryCordewener

@HarryCordewener HarryCordewener commented Sep 11, 2026

Copy link
Copy Markdown
Member

Pins TelnetNegotiationCore 3.0.0, published to NuGet on 2026-09-11. CI passes against the published package on Ubuntu and Windows. The suite counts below were measured locally against the same code, packed as 3.0.0-local-v3 before the release was out.

What was wrong

Children of the Night 5.0 (176.9.151.147:7702) showed its connect screen ending in a line of binary noise. Logged against the live server with a hand-written client: it offers COMPRESS (85) and COMPRESS2 (86). When told DONT 85 / DO 86, which is what we send, it starts a valid zlib stream behind MCCP v1's marker IAC SB 85 WILL SE. If both are refused it doesn't compress at all. Children of the Night 4.5 (omen.genesismuds.com:2251), the same codebase line, does exactly the same.

TelnetNegotiationCore had no trigger for option 85, so the marker went to the unsupported-subnegotiation skipper. That swallowed compressed bytes until some happened to spell IAC SE, then passed the rest to us as text. Everything after the banner was lost to it, including each game's MSSP report, which is sent inside the stream. Both pages showed "MSSP offered, silent" for that reason.

What changed

  • TNC 2.14.0 → 3.0.0. The upstream fix (#98) inflates the v1-marked stream and reports it as version 1. It also stops the safety net from refusing unnamed options as option 0, and widens the text fast path so spaces and [ stop costing a state-machine transition each. The jump also takes in 2.15 (MSDP rewrite), 2.16 (MXP start marker) and 3.0's C# 15 unions. 3.0.0 still ships a net10.0 build, and this branch compiles against it on the .NET 10 SDK with no source change.
  • MCCP1 folds into mccp in MuLikeness and CapabilityFields.Aliases. It is an observed spelling now, which is the alias table's rule.
  • dystopia and mindcloud join LoginCommandReading's engine words. With MSSP readable, both reports name themselves and a count, and declare CODEBASE = Dystopia 1.4 (5.0) and Mindcloud3 (4.5). But MsspSelfDescription only counts engines the reader knows, so the probe kept typing INFO at both name prompts. Both games took it as a character name ("…want INFO engraved on your tombstone (Y/N)?"), then took VERSION as the answer. This is the playdecay.com complaint again. No game in the public dump is titled with either word.

Verification

  • ProbeSessionTests.AStreamStartedWithTheV1MarkerIsInflated drives a raw server sending the live game's bytes in its order. It fails on 2.14.0 ("Expected to contain MCCP1") and passes on the fix.
  • MsspSelfDescriptionTests.AGodWarsLineGameThatNamedItselfIsNotAskedAgain failed for each codebase before its word was added.
  • All six suites pass on SDK 10.0.400 with MUI_REQUIRE_POSTGRES=1: Catalog 643, Crawl 570, Discovery 336, I3 13, Crawler 342, Web 1250.
  • Live mui-probe against both servers: negotiated MCCP1, MSDP, MSSP, read as utf-8 (Proven), MSSP Received with NAME = Children of the Night, and INFO/VERSION not sent.

What a reader will see change

Both MSSP reports declare PLAYERS = 0 (5.0 also declares UPTIME = 0), while I3 who has been counting 3–5 for 5.0. Until now the probe's own rows for these games were uncountable (hatched): an unreadable WHO typed into a compressed stream. From here they land as a declared zero from mssp. I3 keeps writing its own series beside them (I3PresenceChoice is deliberately not a rung on PresenceChoice's ladder), so the page will carry two labelled series that disagree. That is the game's own statement beside a count of its I3 who, not anything this PR decides.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes

    • Improved handling of MCCP v1 compression streams, including correct decompression of banners and server information.
    • Recognizes the MCCP1 capability and normalizes it consistently with existing MCCP support.
    • Identifies Dystopia and Mindcloud servers from their login responses, avoiding unnecessary follow-up probing.
  • Documentation

    • Clarified MCCP version behavior and recorded observed capability aliases.
  • Maintenance

    • Updated the Telnet negotiation component to the latest major version.

HarryCordewener and others added 2 commits September 11, 2026 01:15
…17.0)

Children of the Night (176.9.151.147:7702) answers our DO COMPRESS2 by starting its stream behind
MCCP v1's IAC SB COMPRESS WILL SE. TelnetNegotiationCore skipped that as an unknown subnegotiation,
so the zlib behind it reached the page as text: the connect screen ended in a line of binary noise,
INFO and VERSION "replies" were noise, and the MSSP report, sent inside the stream, never arrived.

2.17.0 inflates it (HarryCordewener/TelnetNegotiationCore#98) and reports the stream as version 1,
so MCCP1 joins MCCP2/MCCP3 in both vocabularies that fold a versioned option into the capability:
MuLikeness's MU*-only signals and CapabilityFields' aliases. The probe test drives a raw server
sending the live game's bytes in its order, and fails on 2.14.0.

The jump from 2.14.0 also takes in 2.15's MSDP rewrite and 2.16's MXP start marker; all five suites
pass against it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…d itself

With its MSSP report readable, Children of the Night publishes a meaningful NAME, a PLAYERS count
and CODEBASE "Dystopia 1.4" -- everything MsspSelfDescription asks for, except that the engine
clause only counts engines LoginCommandReading knows, and it did not know Dystopia. So the probe
went on typing INFO at its name prompt, which took it as a character name ("Your sure that you want
INFO engraved on your tombstone (Y/N)?") and then took VERSION as the answer.

Dystopia is the Merc -> GodWars line's released codebase, a family word in the same sense Merc and
ROM already are. No game in the catalogue is titled with it. Re-probed live: neither command is sent.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 11, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Essentials

Run ID: 6289b705-b8f0-49c8-86db-4cdfb07ec823

📥 Commits

Reviewing files that changed from the base of the PR and between 82ff956 and 3c9688d.

📒 Files selected for processing (9)
  • Directory.Packages.props
  • src/MUI.Catalog/Persistence/Fields/FieldRegistry.cs
  • src/MUI.Crawl/LoginFlow/LoginCommandReading.cs
  • src/MUI.Crawl/Shared/MuLikeness.cs
  • src/MUI.Crawl/Telnet/Negotiation.cs
  • tests/MUI.Catalog.Tests/Persistence/Fields/FieldRegistryTests.cs
  • tests/MUI.Crawl.Tests/Mssp/MsspSelfDescriptionTests.cs
  • tests/MUI.Crawl.Tests/Shared/MuLikenessTests.cs
  • tests/MUI.Crawl.Tests/Telnet/ProbeSessionTests.cs

Included review availability: 0 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour.


Walkthrough

The update upgrades TelnetNegotiationCore, normalizes MCCP1 as MCCP, adds MCCP1 stream coverage, and recognizes Dystopia and Mindcloud codebases in login responses.

Changes

Protocol and classification updates

Layer / File(s) Summary
MCCP v1 normalization and stream handling
Directory.Packages.props, src/MUI.Catalog/Persistence/Fields/FieldRegistry.cs, src/MUI.Crawl/Shared/MuLikeness.cs, src/MUI.Crawl/Telnet/Negotiation.cs, tests/MUI.Catalog.Tests/Persistence/Fields/FieldRegistryTests.cs, tests/MUI.Crawl.Tests/Shared/MuLikenessTests.cs, tests/MUI.Crawl.Tests/Telnet/ProbeSessionTests.cs
The dependency is upgraded to TelnetNegotiationCore 3.0.0. MCCP1 maps to MCCP and mccp. Tests cover capability normalization and inflation of compressed banner and MSSP data.
Dystopia and Mindcloud recognition
src/MUI.Crawl/LoginFlow/LoginCommandReading.cs, tests/MUI.Crawl.Tests/Mssp/MsspSelfDescriptionTests.cs
Login command parsing recognizes Dystopia and Mindcloud families. Parameterized tests verify that recognized zero-player reports do not trigger further login probing.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to 3c968

MCCP1 handling and login-command suppression are covered by regression tests and reported live probes; no current merge-blocking risk remains.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 35.71% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 14 functions across 8 files. (1 skipped: … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies both main changes: MCCP v1 support through TelnetNegotiationCore 3.0.0 and suppression of unnecessary INFO commands for GodWars-line games.
Full details: Docstring Coverage

Explanation

Docstring coverage is 35.71% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 14 functions across 8 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands.

@HarryCordewener

Copy link
Copy Markdown
Member Author

A second affected game: omen.genesismuds.com:2251 (currently listed as omen). It is Children of the Night 4.5, Xrakisis's own instance of the same codebase, and it answers DO COMPRESS2 with v1's marker the same way. Its page shows "MSSP offered, silent" for that reason. Live mui-probe on the 2.17.0 prerelease reads it: negotiated MCCP1, MSDP, MSSP, read as utf-8 (Proven), MSSP NAME = Children of the Night, CODEBASE = Mindcloud3.

HarryCordewener and others added 2 commits September 11, 2026 12:26
The 4.5 server (omen.genesismuds.com:2251) is the same codebase line as 5.0 and answers INFO at its
name prompt the same way -- "Your sure that you want INFO engraved on your tombstone (Y/N)?" --
but its MSSP report declares CODEBASE "Mindcloud3", which the engine vocabulary did not know, so
the gate still let both commands through. Mindcloud is the GodWars line's released codebase in the
same sense Dystopia is; FamilyWord already allows a digit after the word. No catalogue game is
titled with it. Re-probed live: neither command is sent to either server.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2.17.0 was never released: the fix (HarryCordewener/TelnetNegotiationCore#98) went out folded into
3.0.0, alongside .NET 11 support and OneOf replaced by C# 15 unions. 3.0.0 still ships a net10.0
build, and this branch builds against it on the .NET 10 SDK with no source change.

Tested against 3.0.0's exact code packed locally as 3.0.0-local-v3: clean build on SDK 10.0.400, and
all six suites pass -- Catalog 643, Crawl 570, Discovery 336, I3 13, Crawler 342, Web 1250, with
MUI_REQUIRE_POSTGRES=1. Live probes of both Children of the Night servers read MCCP1, MSDP and MSSP
and prove UTF-8.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@HarryCordewener HarryCordewener changed the title Read Children of the Night: MCCP v1's marker, and stop typing INFO at a Dystopia game Read Children of the Night: MCCP v1's marker (TNC 3.0.0), and stop typing INFO at GodWars-line games Sep 11, 2026
@HarryCordewener
HarryCordewener marked this pull request as ready for review September 11, 2026 18:06
@HarryCordewener
HarryCordewener merged commit 2975f26 into main Sep 11, 2026
3 of 5 checks passed
@HarryCordewener
HarryCordewener deleted the claude/login-screen-characters-ee4185 branch September 11, 2026 18:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant