An about page, and the attribution it owes - #12
Conversation
/about, which spec §7.6 and §11 both require and neither calls a feature: it is an obligation incurred by crawling other people's sites and dialling other people's servers. It carries the measured-vs-declared spine, the vocabulary rule that a socket from one vantage point is reachability and never uptime, the stated known limitation that archive grace is computed only from reachable time we probed (so a game running since 1995 starts at the floor on the day we find it, and MSSP CREATED buys nothing), the four directories the backfill read plus the one it has chosen not to, what is taken from them — addresses, nothing else — and why, the crawler's identity and the shape of a probe, and the licence position: MIT code, and a data licence that is still an open question rather than one settled by accident. Both surfaces render one view model, so a sentence cannot exist on the graphical page and not in ?plain=1. The attribution list is pinned against docs/import-sources.md by parsing it: a source added to the record and not to the page is the failure worth catching, and a copied list cannot catch it. Three things it deliberately does not claim. The opt-out is not advertised as automated, because neither the MSSP field nor the DNS TXT record the design describes exists in code and a switch wired to nothing is worse than none. The crawler is not said to identify itself: TelnetNegotiationCore hardcodes a client's terminal types with no setter and answers NEW-ENVIRON from the host's own environment, so ProbeOptions.TerminalTypes and InfoUrl reach no server — both now documented where they are declared, and both a PR upstream rather than a reflection hack here. And an unconfigured contact address is marked as the placeholder it is instead of published as the way to reach us. No figure on the page is one we would have had to invent; the one recorded run's yields are left to the record, since they describe a database that is not necessarily this one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NrGKmKcRCGktyhRTFbQDMk
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 20 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: ⛔ Files ignored due to path filters (6)
📒 Files selected for processing (98)
Comment |
Stacks on #11 (
chore/park-the-importer), which ismainplus #9 and #11 — the branch that rewrote how the site gets its data and what the backfill is allowed to take. Review after that lands; the diff againstmainwill otherwise carry #11's changes too.There was no
/aboutroute. Spec §7.6 and §11 both require one, and it is an obligation this project already incurred by crawling other people's directories and dialling other people's servers.What the page says
WHO/DOINGor from MSSPPLAYERS, and says which. An unreadableWHOis uncountable; a measured zero is a zero.CREATEDis never credited, because it is one hand-typed line and crediting it would make the threshold gameable.docs/import-sources.md, with what is taken from them — addresses only, no counts, no history, no provenance — and the three reasons §7.6 gives. The MudStats entry carries the record of the 143-page crawl that went out before anyone had written to them, because that record matters most on the page asking to be trusted about everything else.CRAWL DELAYbeating our own floor, a referred host resolved and refused unless every address is globally routable, connect screens taken down on request, and how to ask us to stop.How it is built
Blazor static SSR, no script, no interactivity.
AboutPageis one view model;About.razorandPlainText.RenderAboutare two renderings of it, so a sentence cannot exist on the graphical page and not in?plain=1— asserted by rendering the component and comparing it to the plain text. One line added toMainLayout.razor; CSS appended at the end ofapp.cssunder its own header.What it deliberately does not claim
Three places where the design describes behaviour the deployment does not have, and the page says so rather than reciting the spec:
grepfinds no opt-out anywhere), so the page says there is none yet and that asking a person works.ProbeOptions.TerminalTypesandInfoUrlare read by nothing: TelnetNegotiationCore's client-modeTerminalTypeProtocolhardcodesTNC/XTERM/MTTS 3853in a private field with no setter, andNewEnvironProtocolanswers a server's request with the crawler host's ownUSERand a fixedLANG. So an admin's logs show the library and a local account name, not us. Both are documented where the options are declared, and both are a PR to TNC — never a reflection hack here. The page tells an admin the one thing that is true and useful: the shape of the visit.InfoUrlis on a domain nobody has chosen (§15.1).No number on the page is one that would have had to be invented. The recorded import run's yields (805 targets across 745 hosts) are left in
docs/import-sources.md: they describe a database that is not necessarily the one serving the page.Tests
tests/MUI.Web.Tests/AboutPageTests.cs, 19 tests. The load-bearing one parsesdocs/import-sources.mdand asserts every source under## Readis credited by name and by address — a copied list could not catch a source added to the record and not to the page. The rest assert sentences: the grace limitation, theCREATEDrefusal, the crawl-delay and referral facts, thatuptimeappears twice and both are refusals, that the crawler identity is read offProbeOptionsrather than typed in (checked by building the page from a differentProbeOptions), that the permitted command list comes fromTelnetProbe.PermittedCommands, plain-mode 80-column width, and graphical/plain parity off a rendered frame.dotnet build MUIndex.slnx -c Releaseclean; all five suites green (Web 130, Crawl 130, Discovery 182, Catalog 133, Crawler 77).🤖 Generated with Claude Code
https://claude.ai/code/session_01NrGKmKcRCGktyhRTFbQDMk