Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 20 additions & 4 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
# TODO — Code Audit Findings

> ## Start here: open handoffs (updated 2026-10-26)
>
> Picking up work cold, as a new AI session or a person? Each line below is a **handoff issue**:
> the resume point for one piece of work, with its status, a file map, the reasoning, tasks in
> order, known weak points, and what was decided against. Open the one for your work and read
> it before anything else. This file lists findings; the handoffs say what to do next.
>
> | Work | Handoff | First task |
> |---|---|---|
> | **Desktop AI apps:** Claude, ChatGPT, Gemini, Copilot desktop, and the wait before replacing a running app | [#168](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/168) | [#163](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/163) / [#169](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/169): `check-all.sh` is red on a Windows host and on a Mac, each for its own reason |
> | **Everything that needs a Mac** | [#119](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/119) | read its latest comment first |
>
> Before starting, run `git pull`, `gh issue list` and `gh pr list`: a handoff is a snapshot, and
> another session may have moved things since. When a handoff's work is finished, close its issue
> and remove its row here.

Audit performed 2026-02-24. Issues grouped by priority.

**Citations name a function, never a line number.** The original `file:line` citations rotted
Expand All @@ -21,10 +37,10 @@ than no citation because it looks right. A function name survives edits; a line
> fix — which was reported *on* macOS and is unverified there. Its 2026-10-25 comment adds the
> five macOS checks the desktop-app work (#162) brings.
>
> **On Windows?** [#161](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/161) is the
> handoff for the desktop-app work (#162): Gemini, Copilot, Claude's MSIX, and the winget hold
> before replacing a running app. None of it has run on Windows. Start with its section 1, which
> may already be breaking Claude Desktop installs on fresh machines.
> **On Windows?** The desktop-app work's Windows checks were done in
> [#161](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/161), closed 2026-10-26
> with its measurements in the comments. What is still unmeasured on Windows is task 4 of
> [#168](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/168).

---

Expand Down
43 changes: 39 additions & 4 deletions WAITING-FOR.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,13 @@ observable trigger** — without one it is a wish, not a WAITING-FOR.
| WAITING-FOR-002 | A macOS session | Open | Person/Response | 2026-10-02 |
| WAITING-FOR-003 | A decision on pinning the CI runner image | **CLOSED 2026-10-02** | Person/Response | 2026-10-02 |
| WAITING-FOR-004 | An upstream `node@24` release that moves the keg-only link | Open | Technology | 2026-10-02 |
| WAITING-FOR-005 | A Windows session for the desktop-app work | Open | Person/Response | 2026-10-25 |
| WAITING-FOR-005 | A Windows session for the desktop-app work | **CLOSED 2026-10-26** | Person/Response | 2026-10-25 |
| WAITING-FOR-006 | A week of Gemini Desktop on Windows: on or after 2026-11-01 | Open | Time | 2026-10-26 |
| WAITING-FOR-007 | A Windows machine without the Microsoft Store | Open | Technology | 2026-10-26 |

**WAITING-FOR-001 is the one that blocks a filed issue**; 002 is the whole macOS queue, and 005
the Windows one.
**WAITING-FOR-001 is the one that blocks a filed issue**; 002 is the whole macOS queue. 006 and
007 hold the desktop-app work's remaining checks, whose handoff is
[#168](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/168).
WAITING-FOR-003 closed the day it was opened — see below, and note what it cost to answer: a
measurement, not a discussion.

Expand Down Expand Up @@ -108,7 +111,13 @@ installs the keg-only `node@24` formula and force-links it. Whether that link su
machine that has the force-link. Then either `node --version` still reports 24.x and the
question is closed, or it does not and the relink needs to move into `macos-update.sh`.

## WAITING-FOR-005 — A Windows session for the desktop-app work
## WAITING-FOR-005 — A Windows session for the desktop-app work — **CLOSED 2026-10-26**

**Happened on 2026-10-25.** A Windows 11 session ran #161's checks under Windows PowerShell 5.1.
It found and fixed four defects on #162, the ChatGPT hold among them, and the Claude install
fixed in #165, then closed #161. What it could not measure is task 4 of
[#168](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/168), with 006 and 007 below.
The entry as it was opened:

**Blocks:** [#161](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/161), the
handoff. Behind it is the confidence of
Expand All @@ -128,3 +137,29 @@ as Administrator. That is #161 section 1, and it is first in its order for that

**Observable trigger:** a session on a Windows machine. As with WAITING-FOR-002, the work is
specified, and #161 orders it.

## WAITING-FOR-006 — A week of Gemini Desktop on Windows: on or after 2026-11-01

**Blocks:** the one claim about Gemini Desktop on Windows that is inferred, not observed: that a
copy installed through winget (`Google.GeminiDesktop`) **updates itself**. Task 4 of
[#168](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/168).

The inference: the installer's bytes carry Google's update client (`gemini_helper`,
`OmahaUpdateCheckResult`, a "Restart to update" string), and Google's help page describes in-app
updates. If the inference is wrong, winget-installed copies go stale, and `windows-update.ps1`'s
`winget upgrade --all` becomes the only thing updating them. That would still work, but only when
someone runs it.

**Observable trigger:** the calendar reaching 2026-11-01, a week after the 2026-10-25 install of
1.16.0 on the Windows machine #161 was measured on. Then compare the `DisplayVersion` in Gemini's
uninstall entry (`HKCU\…\Uninstall\Gemini`) with the newest `Google.GeminiDesktop` manifest in
`microsoft/winget-pkgs`. Newer than 1.16.0, without anyone running winget, closes it.

## WAITING-FOR-007 — A Windows machine without the Microsoft Store

**Blocks:** [#164](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/164), the no-Store
fallback for ChatGPT Desktop. That is deferred by decision (2026-10-25, #161): the Store is
assumed today.

**Observable trigger:** a Windows 10/11 machine or VM where the Store is removed or blocked by
policy, and a session to run #164's three questions on it.
21 changes: 18 additions & 3 deletions plans/2026-10-25-desktop-ai-apps-review-brief.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,24 @@ desktop app to be quit before replacing it: the macOS Copilot cask migration, an
`windows-update.ps1` before `winget upgrade --all`. An app the person will not quit is left as it
is.

State: **open PR, not merged**, after one independent review round whose findings are all fixed.
The macOS half is tested and run against live apps. **The Windows half has never run on Windows**;
its decision logic has passed under Windows PowerShell 5.1 in CI.
**Final state (recorded 2026-10-26).**

- **Merged.** #162 was squash-merged by Kurt on 2026-10-25 as `f2f6473`, after one independent
review round (all findings fixed) and a Windows session. That session measured #161 under
Windows PowerShell 5.1 and added four commits to the PR before it merged (`acd4b17`, `71d1d57`,
`3ad8c73`, `cf29c28`):
- fixes for four Windows defects;
- two decisions: only the current Claude build is supported, and the Microsoft Store is assumed;
- one further fix: Copilot is never lost to a failed password.
- **Follow-up.** #165 (`e87689c`) then fixed Claude Desktop's Windows install.
- **What is left** is tracked in the handoff
[#168](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/168), not here. This brief
describes the work as reviewed; the claims below were written against `5cd697d` and the review
history stops there.

As it read at review time: open PR, after one independent review round whose findings were all
fixed. The macOS half tested and run against live apps; the Windows half never run on Windows,
its decision logic passing under Windows PowerShell 5.1 in CI.

## Where everything is

Expand Down
83 changes: 83 additions & 0 deletions resumption-summaries/2026-10-26-desktop-ai-apps-handoff.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
## Task State Summary — 2026-10-26 (handoff session for the desktop AI apps work)

**Objective:** Make the desktop-AI-app work transferable to a new AI or person, with one handoff
issue and an easy-to-find pointer at the top of `TODO.md`.

Kurt's ask, verbatim: "can you make sure we document everything, have a handoff issue, etc, so I
can transfer this work to a new AI/session? add a note to todo.md at the top so it's easy to
find."

**Current status:** done. The handoff is
[#168](https://github.com/CloudSecurityAlliance/DesktopSetup/issues/168); `TODO.md` opens with a
"Start here: open handoffs" table pointing at it and at #119.

**What changed since the 2026-10-25 summary (found by re-reading state first, not assumed):**

- A **Windows session** measured #161 on 2026-10-25 and added four commits to #162. They fix four
Windows defects:
- winget upgrades the Store ChatGPT under `OpenAI.ChatGPT`, so the hold now pins that id;
- Copilot from Edge Update is listed as `Microsoft.365Copilot`;
- Copilot pre-launches windowless at sign-in, so "open" now means "has a window";
- `*\gemini.exe` was mislabelled "Gemini CLI".

They record two decisions: only the current Claude build is supported, and the Store is assumed
(no-Store fallback deferred to #164). They add one fix: `sudo -v` before removing the Homebrew
Copilot. **Kurt merged #162 on 2026-10-25** (`f2f6473`).
- **#165** (merged 2026-10-26, `e87689c`) installs Claude Desktop on Windows with Anthropic's
current `ClaudeSetup.exe`. It was needed because non-elevated winget picked the old build
without Cowork, and the MSIX is refused without admin (`0x80073D28`). #161 was closed as
completed.
- **Found today, filed as #169:** `check-all.sh` is also red on a **macOS** host since #165, with
eight Claude-install Pester tests failing (70 passed, 8 failed on untouched `main` `e87689c`).
The cause is `Join-Path $env:TEMP`, and only Windows sets `TEMP`. CI is green because it runs
Pester on Windows. It is the mirror image of #163, and the pair is #168's task 1.
- New issues: #163 (my `test_desktop_apps.py` builds Windows paths, so `check-all.sh` is red on a
Windows host), #164 (no-Store fallback), #167 (Gemini CLI → Antigravity CLI: Google sign-in no
longer works). PR #166 (ISO 8601 script versions) is open and was left alone.

**What was wrong with the handoff state this morning:**

- The open leftovers were scattered: some only in #161's closed comments, one date-bound (Gemini's
self-update check after 2026-11-01).
- `TODO.md`'s "On Windows?" note and WAITING-FOR-005 pointed at a closed issue and said nothing
had run on Windows.
- The review brief still read "open PR, not merged".

**What was done:**

- **#168 created**: the single resume point. It has the status, six tasks in order (first: #163),
what needs Kurt, a file map, the reasoning, weak points, decisions with dates (and what was
decided against), a "confirm the state first" block, and the conventions.
- `TODO.md`: a "Start here: open handoffs" table at the very top (#168, #119); the stale Windows
note replaced.
- `WAITING-FOR.md`: 005 closed with what happened; 006 added (on or after 2026-11-01, Gemini's
self-update check) and 007 (a Windows machine without the Store, for #164).
- The review brief records its final state at merge.
- Comments pointing to #168 were left on #161 (closed), #119 (with the `sudo -v` change to its
item 2) and #167 (an unverified lead: `Gemini.app` ships a Google-signed `agy` binary).

**Decisions made:** none new. All of #168's decisions are dated to 2026-10-24 (Kurt) and
2026-10-25 (#161).

**Assumptions used:** that #161's measurements, made by another session, are as recorded in its
comments. They were read, not re-run.

**Open questions / human input needed:**

- Whether to tell Anthropic that `downloads.claude.ai/releases/win32/ClaudeSetup.exe` pins an
expired certificate (#168, "Needs Kurt").
- The wait policy, if Kurt wants it different.

**Recommended next action:** the next session opens #168 and starts with task 1, #163 and #169.

**Files / artifacts changed:** `TODO.md`, `WAITING-FOR.md`,
`plans/2026-10-25-desktop-ai-apps-review-brief.md`, this file; issues #168 (the handoff) and #169 (new finding); comments on
#161, #119, #167.

**Not on GitHub, and why:** the session transcript (it holds tool output), and a local memory note
on this Mac that now points at #168.

**Confidence level:** high that #168 lists everything still open. It was assembled from #161's
comments, the four commit messages, #165, and the open-issue list, all re-read on 2026-10-26.
Medium on task 4's completeness, because it depends on #161's own "not tested" markers being
exhaustive.
Loading