Skip to content

Rename the project to Pocket Physics, and make the play link work - #2

Merged
cursor[bot] merged 5 commits into
mainfrom
cursor/rebrand-pocket-physics-6a10
Aug 12, 2026
Merged

Rename the project to Pocket Physics, and make the play link work#2
cursor[bot] merged 5 commits into
mainfrom
cursor/rebrand-pocket-physics-6a10

Conversation

@BruceMoseti

@BruceMoseti BruceMoseti commented Aug 12, 2026

Copy link
Copy Markdown
Owner

Why

Two problems with how the project introduced itself.

The name led with the weakest claim. "CueAI" put the learned model in the title, when the surrogate is one tier of four and the interesting work is the validated simulator underneath it. To the audience this repository is aimed at, an -AI suffix reads as a wrapper around someone else's model rather than a physics engine with a measured speedup.

The play link was a 404. The README has advertised a playable page since it existed, and the deploy job has failed on every push to main: configure-pages asks the API for a Pages site, the repository never had one, and nobody was told.

What changed

Renamed to Pocket Physics. Pocket billiards is the sport — the same term the references use, Marlow's The Physics of Pocket Billiards among them — and "pocket" is also the claim: a rack shot that costs 4.6 s to integrate fits in 0.60 ms and a browser tab. The import path moves cueaipocket, the distribution becomes pocket-physics, the console scripts become pocket-{ui,train,api}, and __version__ now comes from the installed metadata instead of a literal that had drifted to 0.1.0 against 0.3.0 in pyproject.toml.

The repository URL is deliberately untouched, so every link, badge and clone line still resolves.

The rebranded masthead above the table, mid-game

The game is now one click away from every front door. The table is an anchor, so a link lands on it rather than on the masthead; the README leads with it, the design doc points at it, the page nav offers Play first, and the bottom of the explainer has a way back up. Both published URLs are reference links defined in one place, so renaming the repository is a one-line change rather than a hunt.

The deploy can now publish. configure-pages gets enablement: true, so the workflow creates the Pages site with permissions the job already holds.

Two things found on the way.

  • The demo clip and stills carried the old name in the masthead, so they are re-recorded. The regenerated inspector still came out showing a cue ball that had dropped after rebounding off a rail — the 5/7·v₀ handover it exists to illustrate was there, but the panel was captioned POCKETED and the trace stopped mid-roll. The aim already refuses headings that run at a pocket, which only covers the path to the first rail, so the capture now checks the outcome too and a scratch buys another attempt. The still it settles for is below: measured roll speed 2.26 m/s against 5/7·v₀ = 2.26 m/s predicted.
  • Nothing was checking that the play link points anywhere. The browser test now resolves every in-page href and asserts that #play is the element containing the table. Confirmed it fails when the attribute is removed, rather than passing vacuously.

The cue-ball inspector showing the slip-to-roll handover landing on the predicted speed

Checks

Everything run locally on the committed tree:

ruff, mypy, pytest clean, 54 passed
site_facts.py --check page figures current
export_parity_cases.py --check committed cases match the simulator, 0.00 mm drift
parity.mjs 35/35 shots agree, worst 1.2 × 10⁻³ mm, 65× faster than the reference
selfplay.mjs --games 6 every game reached a legal conclusion, worst overlap 0.400 mm, break moved 12/15
browser.mjs page paints, links resolve, game completes, no console problems
input.mjs 15/15 interaction checks

One thing left for a human

Renaming the GitHub repository to pocket-physics would finish the job. GitHub redirects the old clone and badge URLs, but the Pages URL follows the repository name, so brucemoseti.github.io/cueai/ would become brucemoseti.github.io/pocket-physics/. That is the one line at the bottom of the README (and the same URL in docs/DESIGN.md) — nothing else depends on it.

To show artifacts inline, enable in settings.

Open in Web Open in Cursor 

cursoragent and others added 5 commits August 12, 2026 22:17
"CueAI" led with the part of the project that matters least. The learned
surrogate is one tier of four, and an -AI suffix reads as a wrapper around
someone else's model rather than a validated simulator with a measured
speedup. Pocket billiards is the sport, and "pocket" is also the claim:
a rack shot that costs 4.6 s to integrate fits in 0.60 ms and a browser tab.

The import path moves cueai -> pocket, the distribution becomes
pocket-physics, and the console scripts become pocket-{ui,train,api}.
__version__ now comes from the installed metadata instead of a literal that
had drifted to 0.1.0 against 0.3.0 in pyproject.

The repository URL is deliberately untouched, so every link still resolves.

Co-authored-by: BruceMoseti <BruceMoseti@users.noreply.github.com>
The published page starts with the table, but nothing linked to it: the
README buried the link under a heading, the page's own nav offered the
repository and the explainer but not the game, and there was no way back up
from the bottom of the explainer.

The game area is now an anchor, so a link can land on the table rather than
the masthead, and the README, the design doc and the page nav all point at
it. The two published URLs are reference links defined in one place, so
renaming the repository is a one-line change rather than a hunt.

Also states in one line what the project is, since "Pocket Physics" does not
say it on its own.

Co-authored-by: BruceMoseti <BruceMoseti@users.noreply.github.com>
The deploy job has failed on every push to main since the page existed:
configure-pages asks the API for the Pages site, the repository never had
one, and the published link in the README pointed at a 404. Setting
enablement lets the workflow create the site itself with the permissions it
already holds, so the link works without anyone opening the settings page.

Co-authored-by: BruceMoseti <BruceMoseti@users.noreply.github.com>
The clip and the stills carried the old name in the masthead, so they are
re-recorded. While doing it the inspector still came out showing a cue ball
that had dropped after rebounding off a rail: the 5/7 handover it exists to
illustrate was there, but the panel was captioned POCKETED and the trace
stopped mid-roll. The aim already refuses headings that run at a pocket,
which only covers the path to the first rail, so the outcome is now checked
too and a scratch buys another attempt.

Co-authored-by: BruceMoseti <BruceMoseti@users.noreply.github.com>
The play link is one attribute away from scrolling nowhere, and nothing
would have noticed: the page still loads, the game still plays. The browser
test now resolves every in-page href and checks that #play is the element
containing the table, rather than merely existing somewhere on the page.

Co-authored-by: BruceMoseti <BruceMoseti@users.noreply.github.com>
@cursor
cursor Bot merged commit b0d19d3 into main Aug 12, 2026
5 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