Skip to content

Let the listing drop games that are only an address - #205

Merged
HarryCordewener merged 2 commits into
mainfrom
claude/project-thread-476hpu
Nov 4, 2026
Merged

HarryCordewener merged 2 commits into
mainfrom
claude/project-thread-476hpu

Conversation

@HarryCordewener

Copy link
Copy Markdown
Member

Requested by Grave · project thread

A game that publishes no name is listed under host:port (CatalogueBinder.NameOf). This adds a facet so crawlers, API clients and readers can skip those rows.

What changes

  • New facet key unnamed, read by the one GameFilterBinding, so /api/games and /games take the same parameter:
    • ?unnamed=!yes drops games listed by address
    • ?unnamed=yes keeps only them
    • unset: no change to today's listing
    • anything else is refused with a 400, like the other yes-only switches
  • AddressName.Is decides from the name itself: a dotted host, IPv4, or IPv6 (bare or bracketed) followed by a port in 1–65535. Babylon:5 and Star Wars: 1977 stay names. Reading the name rather than storing a flag means a rename (probe, owner or game_rename) takes the game out of the set with nothing else to update.
  • Evidence is derived: it describes the name we list a game under, not a claim that the game has none (rule 5).
  • Browse UI: the facet shows on the /games panel as a "name" group with a "listed by address" row (tick to show only them, − to hide them) and a removable chip. Like the other switches, the group is drawn only when at least one game matches, so the demo fixture, which has no address-named game, does not show it.
  • API echo gains filter.unnamed (appended with a default, so the positional shape of FilterView is unchanged). OpenAPI documents the parameter. A listing using it is not an indexable category page.

Tests

  • AddressNameTests: addresses vs names, port bounds.
  • FacetedSearchTests: exclude/include/count, and no switch when nothing matches.
  • UnnamedFacetTests (Web): binding + echo, default unchanged, bad value refused, panel row with the unnamed=%21yes link, exclusion chip wording.
  • FacetSurfaceTests and the Postgres facet test know the new key.

I could not build locally (the cloud container has no .NET 11 SDK), so CI is the first build.


Generated by Claude Code

A game that publishes no name is listed under host:port (CatalogueBinder.NameOf).
Crawlers and API clients asked for a way to skip those rows.

New facet `unnamed`, shared by /api/games and the /games panel through the one
binding: `?unnamed=!yes` drops them, `?unnamed=yes` keeps only them, unset changes
nothing. It reads the name rather than a flag (AddressName), so a rename takes a
game out of the set with nothing else to update. Labelled derived: the name is
ours, and a game listed by address may have a name it never published.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rqqt7UgM5rnGnNp9CTLXRK
@HarryCordewener HarryCordewener self-assigned this Nov 4, 2026
@coderabbitai

coderabbitai Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Explain Change →

Caution

Review failed

The pull request is closed.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

EveryOfferedLocaleHasItsOwnWordsForTheSurfacesAddedWithTheCategoryPages requires
every facet.* id in de, ja, nl and zh-Hans. The exclusion reuses each locale's
existing "hidden from this listing" wording.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rqqt7UgM5rnGnNp9CTLXRK
@HarryCordewener
HarryCordewener marked this pull request as ready for review November 4, 2026 16:53
@HarryCordewener
HarryCordewener merged commit c532a17 into main Nov 4, 2026
3 checks passed
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.

2 participants