Skip to content

Scoreboards show "Pat S.", and a switch in Settings takes you off them (#213) - #214

Merged
ChefControl merged 5 commits into
mainfrom
claude/scoreboard-privacy-213
Oct 28, 2026
Merged

ChefControl merged 5 commits into
mainfrom
claude/scoreboard-privacy-213

Conversation

@ChefControl

@ChefControl ChefControl commented Oct 27, 2026 •

Copy link
Copy Markdown
Owner

Closes #213. Found while writing the privacy notice (#150, PR #211).

What changes for players

  • The scoreboard and the wall of shame show a first name and the initial of the last: "Pat Smith" is now "Pat S." Emails still show as "A player".
  • Settings → 🛡️ Privacy (signed in) has a Show me on the scoreboards switch, at the top of the panel, on by default. Turning it off takes the player's scores/{uid} and shame/{uid} down at once and puts nothing new up. The choice is kept on the account, so every device follows it. Turning it on puts them back.

How

  • src/publicName.ts: the new rule, kept apart from cloud.ts so the one-off script can use it in Node.
  • cloud.ts: cloud.hidden (null until the account's been read, so nothing goes up before it's known), showOnBoards(), and the switch under Privacy. A sync's read from before a switch can't undo it.
  • firebase.ts: hide() writes the choice and deletes both entries in one batch, so it's both or neither. Saves are now written with merge: true, so the choice survives later saves.
  • The switch reuses the Buy button switch, now a shared .switch class. Captions: "As Pat S." / "Hidden from other players".

firestore.rules (published to the live project by the owner on 2026-10-28)

  • A signed-in player may delete their own scores/{uid} and shame/{uid}, and no one else's.
  • saves/{uid} may carry hidden (a bool).
  • New test/rules/scores.test.ts; shame.test.ts now expects owners can delete. npm run test:rules passes locally: 18 tests.
  • They're live already, so the switch works as soon as this deploys. The old game doesn't write hidden, so it's unaffected.

One-off: shorten the names already up
After this is live, run once, signed in to gcloud as a project owner:

node scripts/shorten-names.ts           # lists what it would change
node scripts/shorten-names.ts --write   # changes them

It uses Firestore's REST API with gcloud's token and changes only name. Running it again does nothing. Not tried against live data: gcloud isn't installed on this Mac.

Privacy notice (public/privacy.html, from #211): the scoreboard and wall of shame rows now say "Pat S." and that turning off Show me on the scoreboards deletes the entry at once. The short version, the save row, the sign-in intro and the "delete it" bullet under Your rights match. Last changed is now 28 October 2026.

Privacy in Settings stays in the game (owner's ask): the About group's 🛡️ Privacy is now a category row like Credits & Copyrights. It opens into the scoreboards switch (signed in), then the notice's short version (word for word, kept the same by a test) and Read the full notice ›, which shows privacy.html in a kit dialog over the paused game (✕, Esc or a tap beside it closes it; Esc leaves Settings open). Inside the game the notice drops its "Play Floe Market" link and opens its outside links in a tab of their own.

Design system: updated the Settings card (the shared switch and its second use, and the Privacy row and dialog) and the Scoreboard card ("Pat S." names, opted-out players).

Rebased on main after #210 and #211. The only conflict was #210's "Floe Emoji" font in the switch CSS, which is kept.

CI fix: test/rain.test.ts checked for no <iframe> anywhere (to rule out a YouTube player); it now leaves out the notice's own frame and checks that frame stays empty until asked for.

Tested: test/cloud.test.ts, test/firebase.test.ts, test/wallOfShame.test.ts pass locally (44); full suite left to CI. Also looked at the switch on and off in a dev server that wasn't signed in.

🤖 Generated with Claude Code

ChefControl and others added 2 commits October 28, 2026 02:26
#213)

publicName() now shows a first name and the initial of the last ("Pat Smith" is "Pat S."), never an email. It lives
in src/publicName.ts so scripts/shorten-names.ts can shorten the names already up, run once by the owner with gcloud.

The ☁️ menu gets a "Show me on the scoreboards" switch, on by default. Off takes the player's scores/{uid} and
shame/{uid} down in one batch with the choice, kept on saves/{uid} as `hidden`, so every device follows it; nothing
new goes up until it's back on. Saves are written merged so the choice stays. firestore.rules lets a signed-in
player delete their own scores/ and shame/ docs, and allows `hidden` (a bool) on their save; rules tests cover both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…elf off them (#213)

The scoreboard and wall of shame rows say a first name and initial, and that turning off "Show me on the scoreboards"
deletes the entry at once. The short version, the save row, the sign-in intro and "delete it" under Your rights
match. Last changed 28 October 2026.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ChefControl
ChefControl force-pushed the claude/scoreboard-privacy-213 branch from 6231524 to c1b1ae2 Compare October 28, 2026 00:27
ChefControl and others added 3 commits October 28, 2026 02:34
…w, the full notice in a dialog (#213)

The owner didn't like the notice taking players out of the game. Privacy is now a category row like Credits &
Copyrights: it opens into the notice's short version (word for word; a test keeps the two the same) and "Read the full
notice ›", which shows public/privacy.html in a kit dialog over the paused game (✕, Esc, a tap beside it). The
notice is fetched the first time it's asked for. Inside the game, privacy.html drops its "Play Floe Market" link,
fills the dialog, and opens its outside links in a tab of their own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… site

The test made sure the rain song comes with no YouTube player by finding no <iframe> in the page; the privacy notice's
dialog has one, of our own page, left empty until asked for.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The owner wants privacy controls under Privacy: "Show me on the scoreboards" moves from the ☁️ menu to the top of the
Privacy panel, above the short version, for a signed-in player only. The notice says where to find it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ChefControl
ChefControl merged commit a971250 into main Oct 28, 2026
7 checks passed
@ChefControl
ChefControl deleted the claude/scoreboard-privacy-213 branch October 28, 2026 00:51
ChefControl added a commit that referenced this pull request Oct 28, 2026
…d the scoreboards switch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ChefControl added a commit that referenced this pull request Oct 28, 2026
…icence checks side by side (#215)

* Legal checks as repo skills: legals-update runs privacy, Steam and licence checks side by side

Four skills under .claude/skills/. legals-privacy compares a feature with the
privacy notice (public/privacy.html), its short version in Settings and the
report dialog's "What's sent" list. legals-steam compares it with the content
survey answers and store texts agreed on #151 and the prep page. legals-licenses
checks every new package and asset's licence and its credit under Credits &
Copyrights, and flags recordings for a listen. legals-update pins one target and
runs the three at once in subagents, then puts their reports together. Each
reports and proposes; none edits unless the owner asks. CLAUDE.md points to it.

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

* legals-privacy: #214 is on main, so point straight at #privacyCard and the scoreboards switch

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

* legals-licenses: #209 is on main, so read scripts/licences.ts there

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

Scoreboards: a shorter public name and a switch to stay off them

1 participant