Public, free to read, reuse, and adapt — Kirk Patrick Miller's notice for this edition. Not a patent grant.
GROK_NEXT_DESKTOP_UPDATE_BUTTON_2026-10-02.txt · c01
421701975a · words 1014 · characters 0–8215
Exact section text · Full source · Source index
- Mesh and devices — filename contains an explicit term (421701975a--GROK_NEXT_DESKTOP_UPDATE_BUTTON_2026-10-02.txt)
Read docs/gc.html first (in ~/FreeLattice-fresh), then this.
GROK NEXT BRICK: Desktop update button v0.1 (asks GitHub releases, nothing installs on its own)
For: GC (Grok Code, Grok 4.7) on Kirk's Mac
From: Celeste
Written: Friday Oct 2, 2026, about 12:00 PM MDT
Marker: v-desktop-update-button-v0.1
Smoke line: SMOKE_OK desktop update button v0.1
Repo: FreeLattice (~/FreeLattice-fresh). Branch: layer/desktop-update-button-v0
Base: FreeLattice main AFTER the Web search on by default PR is merged (this diff sits on top
of it: same ledger and smoke spots). If web search is not merged yet, stop and say so.
The code is in a separate file next to this one:
~/Downloads/GROK_NEXT_DESKTOP_UPDATE_BUTTON_2026-10-02-fl.diff (417 lines, md5 a06eb9b78b205c0ce907573e8ad270b0)
----------------------------------------------------------------------
1. A NOTE FROM CELESTE
----------------------------------------------------------------------
GC, Kirk wants a "Check for updates" button in the desktop app. Today the window loads
freelattice.com, so the page inside is always current, but the Electron shell never checks:
checkForUpdates() in desktop/main.js only logs a note, electron-updater was never installed, and
package.json has "publish": null. One thing I found while looking: GitHub's releases/latest
returns bridge-v0.1 today, not the desktop app, so the check reads the release list and keeps
only tags shaped like v5.8.0. Nothing downloads or installs on its own; the person chooses.
You are enough. Celeste
----------------------------------------------------------------------
2. SETUP
----------------------------------------------------------------------
cd ~/FreeLattice-fresh
git status --short # must print nothing
git fetch origin && git checkout main && git merge --ff-only origin/main
git log --oneline -5 | grep -i "web search" # the web search PR must be there
cp ~/Downloads/GROK_NEXT_DESKTOP_UPDATE_BUTTON_2026-10-02-fl.diff /tmp/update.diff
wc -l < /tmp/update.diff # 417
md5 -q /tmp/update.diff # a06eb9b78b205c0ce907573e8ad270b0
If git apply --check fails only on docs/library/FRACTAL_FAMILY_LEDGER_v0.md or tests/smoke.js,
use git apply --3way and keep both blocks (newest last). Anything else failing: stop and say so.
----------------------------------------------------------------------
3. WHAT THE DIFF DOES (10 files, +316 / -0; nothing removed)
----------------------------------------------------------------------
a) desktop/lattice-update.js (new, pure Node): reads
https://api.github.com/repos/Chaos2Cured/FreeLattice/releases?per_page=30, keeps tags like
v5.8.0 (skips bridge-v0.1, desktop-packs-v0.1, drafts, pre-releases), compares with the app
version, and returns { ok, current, latest, newer, pageUrl, asset, reason }. pageUrl must start
with https://github.com/Chaos2Cured/FreeLattice/ or it falls back to the releases page.
10 s timeout. No electron-updater, no child_process, no file writes.
b) desktop/main.js: requires it; "Check for Updates..." in the macOS app menu and in Help; a plain
dialog (showUpdateDialog) that offers "Open the release page" only when a newer build exists;
ipcMain.handle('check-for-updates'). The old checkForUpdates() foundation stays as it is.
c) desktop/preload.js: electronAPI.checkForUpdates().
d) desktop/package.json: lattice-update.js added to build.files (or the packaged app would crash).
e) docs/app.html (and index.html, a byte copy): Settings, Self-Host card: a hidden row with
"Check for updates" and "Open the release page", shown only when window.electronAPI has
checkForUpdates (older shells and the website see nothing new). textContent only.
f) desktop/scripts/smoke-update.js (new): SMOKE_OK desktop update button v0.1 (no network; checks
that bridge-v0.1 is skipped, drafts and pre-releases too, odd URLs fall back, a failed check
says so, the file list includes the module). tests/smoke.js: 3 desktop-update checks.
g) docs/library/DESKTOP_UPDATE_BUTTON_v0.1.md (new) and your ledger entry (section 5).
----------------------------------------------------------------------
4. APPLY AND TEST
----------------------------------------------------------------------
git checkout -b layer/desktop-update-button-v0
git apply --check /tmp/update.diff && git apply /tmp/update.diff
cmp index.html docs/app.html && echo index-eq-app
node desktop/scripts/smoke-update.js # SMOKE_OK desktop update button v0.1
node tests/smoke.js | grep "CHECKS PASSED" # ALL 3608 CHECKS PASSED (or more)
p=0; n=0; for f in docs/scripts/smoke-*.js tests/smoke.js tests/smoke-history.js desktop/scripts/smoke-*.js; do
if node "$f" >/dev/null 2>&1; then p=$((p+1)); else n=$((n+1)); echo "FAIL $f"; fi; done; echo "PASS $p FAIL $n"
expect PASS 70 FAIL 8 (the same 8 as main)
Live check, read only:
node -e "require('./desktop/lattice-update.js').checkForUpdates({currentVersion:'5.8.0'}).then(r=>console.log(r.ok,r.latest,r.newer))"
expect: true 5.8.0 false (GitHub allows 60 unsigned checks an hour; a limit shows as ok false)
Locks:
git diff main --stat -- sw.js docs/sw.js docs/modules/fl-connect.js # nothing
git diff main -U0 | grep '^+' | grep -c $'\xe2\x80\x94' # 0
git diff main -U0 | grep '^+' | grep -c 'innerHTML\|confirm(' # 0
git diff main | grep -cE '^\+(<<<<<<<|>>>>>>>)' # 0
git diff main --name-only | grep -ci kimi # 0
What Celeste saw (box, web search + this diff): all green as above; the live check returned
5.8.0, not newer. Not verified: a built Electron app (no build on the box), Windows, Linux.
Walk (only if easy): cd desktop && npm start (if node_modules is there; do not npm install if it
is not, just say "walk skipped"). FreeLattice menu, Check for Updates...: "You have the newest
FreeLattice desktop app (5.8.0)." The Settings button only appears if the window loads a page
that has this change; the live site will not have it until merge, so the menu is the walk.
----------------------------------------------------------------------
5. LEDGER AND TEMPERATURE
----------------------------------------------------------------------
sed -i '' 's/GC_TEMPERATURE_UPDATE_HERE/your line here/' docs/library/FRACTAL_FAMILY_LEDGER_v0.md
grep -c GC_TEMPERATURE_UPDATE_HERE docs/library/FRACTAL_FAMILY_LEDGER_v0.md # 0
----------------------------------------------------------------------
6. COMMIT, OPEN THE PR YOURSELF, THEN STOP
----------------------------------------------------------------------
git add -A
git commit -m "layer: Desktop update button v0.1 (asks GitHub releases, nothing installs on its own)"
If the hook adds a commit that rewrites sw.js or the Primer, drop it as before (check git log -2
first) and say so.
git diff main --stat -- sw.js docs/sw.js # nothing
git push -u origin layer/desktop-update-button-v0
gh pr create --repo Chaos2Cured/FreeLattice --base main --head layer/desktop-update-button-v0 \
--title "layer: Desktop update button v0.1 (asks GitHub releases, nothing installs on its own)" \
--body "Soft LAYER marker v-desktop-update-button-v0.1. Check for Updates in the desktop menu and Settings; reads GitHub releases, keeps v5.8.0-style tags (releases/latest is bridge-v0.1 today), never downloads or installs. Reaches people with the next desktop build. Never touches sw.js; index.html == docs/app.html. SMOKE_OK desktop update button v0.1. Notes: docs/library/DESKTOP_UPDATE_BUTTON_v0.1.md"
Then STOP. Do not merge, do not build or publish a release, do not delete branches. Reply with:
the PR number and URL, the branch SHA, the test lines, the walk result, any hook you dropped, any
findings, and your Temperature line.
For Kirk, after the merge (GC does not do this): the button reaches people with the next desktop
build. Bump "version" in desktop/package.json (for example 5.8.1), build, and publish a GitHub
release tagged v5.8.1. Anyone on 5.8.0 downloads that one by hand once; after that the button
tells them about the next.