Pup - the AI's own browser
Public Made by Adomby adom
pup gives your AI a real browser on your desktop that it drives completely, in the background, signed in as you: windows that never jump in front of your work, one shared profile that learns your logins, and every window labeled on the taskbar with its AI thread's name.
Recovered windows lose owner -> thread tile silently downgrades to a category button (and the stamp retries an impossible title lookup)
A recovered window loses its owner, so it silently drops to a category taskbar button
pup 2.0.275, Windows (AdomLapper), tiles mode.
What John sees
A pup taskbar button showing a generic teal category icon ("Adom Pup · wiki") instead of the AI thread's name tile. He has reported this shape more than once, most recently as "why is this pup icon so wrong? its not showing the ai-thread name".
What is actually happening
The thread AUMID is built from the session's owner:
threadAumid(name) -> Adom.Pup.thread.<slug(owner)>.<gen><tile-token>
After a bridge restart + session recovery, pup_status reports those sessions with owner: null. With no owner there is no thread AUMID to build, so stampPupIdentity correctly falls through to the category identity and the button becomes "Adom Pup · ". Measured just now, three sessions in one window set:
hd-publish-1.0.116 | owner: None
hd-publish-1.0.119 | owner: None
hd-publish-1.0.128 | owner: None
[identity] "hd-publish-1.0.119" stamped appId=Adom.Pup.hd-publish-1.0.119.wiki-in.i8
Earlier in the same session, before those restarts, the same windows carried owner: hd-release and rendered a correct "hd-release" name tile. So the identity is right while the session is live and lost across recovery.
The icon is a symptom. owner is also what the ownership guard uses to stop one thread driving another thread's window, and what the dashboard shows as "whose window is this". A recovered window with a null owner is unprotected and unattributed, which matters more than the art.
Not yet established
Whether the owner is (a) never persisted to the session file, (b) persisted but not restored by the recovery path, or (c) restored and then cleared by a later adoption/reclaim pass. I have not read the session file on disk yet. Filing now so it is tracked rather than sitting in my head.
Second, smaller: the stamp retries a title lookup that cannot succeed
When no hwnd resolves, the stamp falls back to titleContains: "(ai-thread: <sid>" — but titleTag is OFF by default, so that lookup can never match. It then repeats:
[identity] "tabfix" stamp FAILED: No visible window with title containing "(ai-thread: tabfix" (case-insensitive)
... the same line 7+ times
Each one is a wasted ab round trip and it buries real lines in the log ring. It should stop after a bounded number of attempts and say what it needs (a resolved hwnd), rather than retrying a lookup that is structurally impossible with the current setting.