โ† All docs Games for Group ยท Come-back note

Spy Grid is parked โ€” how to bring it back

Spy Grid is finished. It plays online and on one shared phone, its rules are tested, its card is drawn and its words are written. It is simply not on the shelf, because the game only comes alive at a big table and the groups playing today are smaller than that. This page is the whole story, written so a session months from now can resume without archaeology.

๐Ÿ•ต๏ธ Nothing was deleted. One id sits in one list in the app. Take it out and the game is back on the shelf, on the website and in both pickers โ€” no other edit.
Read alongside: decisions.html (2026-09-17) carries the reasoning and what would reverse it. lan-pause.html is the same idea one level up โ€” a whole play mode parked the same way.

Why it is parked โ€” the table is too small, not the game

This is a product call, not a bug. Nothing about Spy Grid is broken.

๐Ÿ™‹ The reason

It needs a crowd it does not have yet

Spy Grid is two teams, a spymaster each, and a room arguing about what a one-word clue meant. The arguing is the game. At its four-player floor each team is one spymaster and one guesser, so there is nobody to argue with and the round is a quiz between two people who already know the answer. Karim's ruling, 17 Sep 2026: "it is not too interesting with fewer people. Maybe when I have so many people later, I will consider adding that back."

๐Ÿ“‰ Why hiding beats leaving it

A poor first game is worse than a missing one

The shelf is browsed by a group already holding a phone. A game that wants eight people, sitting on a shelf in front of four, gets picked once and remembered as the night that fell flat. It also seats up to twenty, which reads as generous and pulls exactly the small groups it cannot serve. Taking it off the shelf costs nothing, and the day the crowd is there it comes back whole.

โœ… Where it genuinely works Eight or more people in one place, ideally an even split into two teams, with two of them willing to be spymasters. That is a house party, not a couple on a sofa โ€” which is most of what the product is for today.
โŒ What is not the answer Raising its minimum from four to eight was considered and rejected. It would still sit on the shelf teasing every smaller group, and a game that refuses to start is a worse experience than a game that is not offered. Redesigning it for four is a different game wearing the same name โ€” the clue-and-argue loop is the whole point and it does not shrink.

What "parked" means, exactly

One id, in one list. Everything else is untouched code sitting behind it.

FlagFileWhat it turns off
PAUSED_GAME_IDSapps/app/src/games/pausedGames.tsEvery place a player could reach the game โ€” see the list below

Two readers act on that list, and between them they cover everything a player can see:

Reader 1 ยท the pickers

playableGames() in src/games/registry.ts

Every picker in the product already asked this one function rather than the full registry, so all of them followed at once: the home shelf on a big screen, the Games page (and the Games tab on a phone), the shelf's search and vibe chips, the same-device set-up screen, the online lobby's game list, and the LAN host's game list.

Reader 2 ยท the website

CATALOG_GAMES in src/games/catalog.ts

The public line-up is the full list filtered by the same flag, and every public page is built from it: the export writes no /games/spy-grid page, sitemap.xml and llms.txt carry no line for it, and the "more games" rail at the foot of every other game page never shows it.

๐Ÿ”— The website follows automatically The website is the App's own web export, so it reads the same list. There is no second flag to keep in step, and no hand-written page to remember.

Somebody with an old link

โš ๏ธ Deliberately NOT guarded: the server Convex still has Spy Grid in its registry and would still referee a match of it. That is the same choice the paused LAN mode made โ€” the park is a shelf decision, taken in the app, and the backend stays a plain rulebook that knows nothing about what is on offer this month. It matters for two reasons: a room already mid-match is never broken by a park, and bringing the game back needs no backend deploy. Nothing a player can tap reaches it.

What is still true, and still tested

Untouched code

apps/app/src/games/spy-grid/ is exactly as it was โ€” board, team set-up, the hold-to-peek key, the word list, rules.test.ts and words.test.ts. Both suites still run on every gate.

Still registered

It is still one of the games in src/games/pure.ts and src/games/registry.ts, so the parity checks, the card check, the LAN guest bundle and the Convex server registry all keep covering it.

Still checked

Its catalog entry stays in place, and catalog.test.ts holds it to the game's own meta the whole time it waits โ€” player counts, minutes, colour, key art and words cannot drift while nobody is looking. Three tests assert the park itself: the id is a real shipped game, the entry and words survive, and no public page lists it.

One small cost

Its rules, words and screens are still in the bundle every player downloads. A few tens of kilobytes, and the price of a one-flip return. Deliberate.

Resuming โ€” the checklist

  1. First, check the reason has actually gone. The question is not "is the game good", it is "do eight or more people regularly open this app together?" If the answer is still no, nothing below matters.
  2. Take 'spy-grid' out of PAUSED_GAME_IDS (apps/app/src/games/pausedGames.ts). If it is the last id, leave the empty list and the file โ€” the next park needs it.
  3. Run the gates. typecheck, test, lint:copy and i18n:check in apps/app, plus the root suite. The catalog and language tests read the list, so they follow on their own.
  4. Look at its game page before anyone else does. /games/spy-grid starts being generated again from an entry nobody has read in months โ€” check the sentences, the player range and the card still say what we want to say.
  5. Finish the redesign pass. Spy Grid never went through the Party Arcade review: its entry in the screen map is a mechanical pass only, never played through, because it needs four people in a room. Play a real game with a real group before calling it shipped.
  6. Rebuild the frozen browser-guest copy if the LAN mode is live by then (bun run export:lan-guest) โ€” a game added or restored during a pause does not exist for browser guests until that runs.

The open product question

Question

Is "needs a crowd" a label, or a park?

The shelf could one day say which games want a big group, and then a game like this could sit there honestly instead of being hidden. That is a shelf feature, not a Spy Grid feature โ€” and it only earns its place once there is more than one game that needs it. Until then, parking is the smaller, truer answer.

Last updated: 2026-10-02 ยท Parked 2026-09-17, with no date to come back โ€” it waits on group sizes, not on a fix. Delete this page on the day the id leaves the list and the game is on the shelf; the reasoning lives on in decisions.html.