Skip to content

v0.3.6 — one square per app

Choose a tag to compare

@devclone20 devclone20 released this 01 Aug 00:22
· 19 commits to main since this release

⬇️ The download

CLONE-FRAME-HUB-0.3.6.zip — unzip, double-click install.command, and CLONE FRAME HUB lands in
~/Applications with the whole program inside the bundle. The folder you downloaded can then
go in the Trash. START HERE.txt inside says the same, for when you are looking at the folder
rather than at this page.

Updating: Trash the old app, run this installer. Your data lives in ~/CloneFrame and
~/.clone-frame-hub, never inside the app, so an update never touches it.


One square per app on your frame. iT keeps as many as you park.

A frame square is a handle to a panel, and there is one of each panel — so there should be one
square for each. There was not. Adding NOTES from the + menu stamped a second NOTES logo,
then a third, each on its own square, all of them pointing at the same single window. Nothing
looked broken, because clicking any of them opened that one window. The canvas just filled up
with repeated icons you could not tell apart.

The second time is now "go to it", not "add". The square you already have pulses, so
you can see where on the canvas it is — a frame is large, and silently doing nothing is not
an answer — and the square you clicked stays empty.

iT is untouched and still infinite. Park three folders, get three terminals and three
squares. That is what iT is for, and it is the only panel that works that way.

Your existing frame is tidied, not left as it was

Squares collected under the old behaviour are collapsed the next time you launch — on screen
and on disk
, so they do not come back — and you are told how many went. Which duplicate
survives is not arbitrary: a square still pointing at a live docked window outlives one that
points at nothing, so nothing you had parked is stranded.

Why it happened, since it explains the shape of the fix

Four places hand a square to a panel: the + menu, a dragged HUB tab, docking a window, and
iT parking a terminal. Only one of them ever asked whether that panel was already on the
frame. The fix is not three more checks — a convention kept by four call sites is not an
invariant. It is one guard in the single function all four pass through, so a fifth caller
written next year cannot bring it back.

The root cause was a scope accident: the fact that iT is the exception was declared inside
the window manager, where the module that hands out squares could not see it. That module
therefore had no rule at all. It is now one declaration both can read.

Measured, in the running app

Clicked the way a person clicks — two clicks to arm a square and open its menu, then the panel:

NOTES added to three different squares      1 square,  1 window
iT    added to three different squares      3 squares, 3 windows
research · tasks · settings · email, ×2     1 square each, zero duplicates
a frame seeded with 6 NOTES, 4 EMAIL and
7 iT squares, then reloaded                 1, 1, 7 — on screen AND on disk

sha256  58b2353964cd47e41564b61db6e3b4d7ccdca11894a15049c3163f3a868f1442

shasum -a 256 index.html must print that line. 929 tests pass upstream, and the six new
assertions were each watched failing against the bytes v0.3.5 shipped.