Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
127 commits
Select commit Hold shift + click to select a range
fa7ba81
feat(windows): port CLI shells and providers from #999
nsxdavid Aug 1, 2026
08b09b3
fix(windows): harden CLI and PTY support
arul28 Aug 2, 2026
6ca168a
fix(windows): dedupe composed IPC helper
arul28 Aug 2, 2026
60a8c3e
fix(windows): add Droid CLI recovery guidance
arul28 Aug 2, 2026
2e8ed7d
test(windows): isolate provider PATH priority
arul28 Aug 2, 2026
1e8965c
test(windows): assert native provider resolution on Windows
arul28 Aug 2, 2026
6205d14
ci(windows): run the CLI contract suite on the Windows runner
arul28 Aug 2, 2026
baca533
fix(windows): classify scratch named-pipe brains as ephemeral
arul28 Aug 2, 2026
970c22a
ci(windows): gate the daemon lifecycle suite on the Windows runner
arul28 Aug 2, 2026
79cbad9
fix(windows): retry credential lock acquisition on delete-pending
arul28 Aug 2, 2026
f2492a6
test(desktop): wait for loaded auto-update toggles before clicking
arul28 Aug 2, 2026
aefcb0f
fix(windows): treat delete-pending lock opens as contention on spawn
arul28 Aug 2, 2026
c5b28a4
feat(windows): port desktop sync and remote clients from #999
nsxdavid Aug 1, 2026
5bcd2c3
refactor(windows): isolate desktop IPC from packaging metadata
arul28 Aug 1, 2026
fdd79e0
fix(windows): bind shared credentials to DPAPI
arul28 Aug 1, 2026
1f6f0c4
fix(windows): harden DPAPI credential migration
arul28 Aug 2, 2026
bbac621
fix(windows): align App Control startup shell syntax
arul28 Aug 2, 2026
d8472ed
test(windows): derive Git Bash cd expectations from the fixture path
arul28 Aug 2, 2026
bc1a4b9
fix(windows): source Settings and Account machine copy from the ident…
arul28 Aug 2, 2026
d96f1de
ci(windows): run App Control launch-command contracts on Windows
arul28 Aug 2, 2026
fce6a18
fix(windows): stop naming the local machine "This Mac" in settings
arul28 Aug 2, 2026
ba9033b
fix(windows): stop failing DPAPI when PowerShell is slow to start
arul28 Aug 3, 2026
f7575bf
fix(windows): cache DPAPI key material instead of respawning PowerShell
arul28 Aug 3, 2026
816f29d
fix(windows): resolve provider CLIs the way Windows actually resolves…
arul28 Aug 3, 2026
e4c6660
fix(windows): close the Cursor lane guard for backslash paths
arul28 Aug 3, 2026
2ec0719
fix(windows): drop the drive prefix from Cursor project slugs
arul28 Aug 3, 2026
3d5b99c
fix(windows): show Cursor's PowerShell installer in onboarding
arul28 Aug 3, 2026
6ac6785
fix(windows): find standalone Codex installs on Windows
arul28 Aug 3, 2026
48172f8
fix(windows): assert the real Codex task launch shape on Windows
arul28 Aug 3, 2026
dae17de
fix(windows): match Droid's real per-project session directory name
arul28 Aug 3, 2026
185a975
fix(windows): reap the whole Droid worker tree on dispose
arul28 Aug 3, 2026
2e7f9e7
fix(windows): give Windows users a runnable Droid install and API-key…
arul28 Aug 3, 2026
94f77d4
fix(windows): stop leaking OpenCode servers ADE can never reap
arul28 Aug 3, 2026
d4876bc
fix(windows): stop telling Windows users to install OpenCode with brew
arul28 Aug 3, 2026
7c4ad62
fix(windows): launch and reap Claude Code the way Windows requires
arul28 Aug 3, 2026
679e1a1
fix(windows): make OpenCode session import work off a .cmd shim
arul28 Aug 3, 2026
f7c7c87
fix(windows): honour CODEX_HOME when discovering Codex prompts
arul28 Aug 3, 2026
6fcd0d5
fix(windows): stop rendering an unreadable session as a sign-out
arul28 Aug 3, 2026
fec3780
fix(windows): keep the This-Machine card alive without the background…
arul28 Aug 3, 2026
cfc76c7
fix(windows): stop sending the Codex planner prompt through cmd.exe argv
arul28 Aug 3, 2026
89681d2
fix(windows): keep the Codex work-tab prompt off the cmd.exe command …
arul28 Aug 3, 2026
d632811
fix(windows): match Cursor's own project-slug rule byte for byte
arul28 Aug 3, 2026
5b9f80d
fix(windows): trust only proven executables in the Droid presence branch
arul28 Aug 3, 2026
c6608ac
fix(windows): keep the title-bar controls clear of the caption buttons
arul28 Aug 3, 2026
ef9cb71
fix(windows): stop leaking Cursor SDK worker state and process trees
arul28 Aug 3, 2026
44ceb56
fix(windows): forward hook arguments through the Cursor gate wrapper
arul28 Aug 3, 2026
20caee5
fix(windows): find standalone Codex installs and invert Cursor slugs …
arul28 Aug 3, 2026
29adbe1
perf(windows): stop the sidebar hover from resizing the pane groups
arul28 Aug 3, 2026
ab551c6
fix(windows): let this computer be renamed from the account list
arul28 Aug 3, 2026
74d5adf
fix(windows): stop probing for CLIs by launching them
arul28 Aug 3, 2026
677c1cb
fix(windows): match Claude's project-slug rule in the usage ledger
arul28 Aug 3, 2026
670d77a
fix(windows): choose shell quoting by the shell that receives it
arul28 Aug 3, 2026
c2794ff
fix(windows): launch discovered Droid resumes as argv, not a bash script
arul28 Aug 3, 2026
60d3188
fix(windows): escape the drive colon in Claude and Droid project lookups
arul28 Aug 3, 2026
b134d2e
fix(windows): stop doubling % in cmd command-line arguments
arul28 Aug 3, 2026
c80c410
Merge branch 'codex/worker-win-agents' into codex/integration-windows
arul28 Aug 3, 2026
c9fcc37
Merge branch 'codex/worker-win-pty' into codex/integration-windows
arul28 Aug 3, 2026
d40c77b
Merge branch 'codex/worker-prov-droid' into codex/integration-windows
arul28 Aug 3, 2026
29ac788
Merge branch 'codex/worker-prov-cursor' into codex/integration-windows
arul28 Aug 3, 2026
c6e44b5
Merge branch 'codex/worker-prov-codex' into codex/integration-windows
arul28 Aug 3, 2026
128f866
Merge branch 'codex/worker-prov-opencode' into codex/integration-windows
arul28 Aug 3, 2026
bef86e5
Merge branch 'codex/worker-win-slug' into codex/integration-windows
arul28 Aug 3, 2026
ae3fa86
Merge branch 'codex/worker-win-connections' into codex/integration-wi…
arul28 Aug 3, 2026
4e71570
Merge branch 'codex/worker-win-titlebar' into codex/integration-windows
arul28 Aug 3, 2026
4748df7
Merge branch 'codex/worker-win-perf' into codex/integration-windows
arul28 Aug 3, 2026
2b4bfff
refactor(windows): collapse the four cross-lane duplications
arul28 Aug 3, 2026
62a6dca
test(windows): give the OpenCode import fixture a launchable Windows …
arul28 Aug 3, 2026
e501bc4
perf(windows): skip the cmd.exe wrapper in whichCommand
arulsharma Aug 3, 2026
23c012b
fix(windows): stop doubling percent signs in the copyable cmd command
arulsharma Aug 3, 2026
02de138
perf(windows): make the pushing tab rail cheap instead of making it o…
arul28 Aug 3, 2026
09c4866
fix(windows): hide the Cursor provider on Windows on ARM
arulsharma Aug 3, 2026
03e504a
Merge branch 'codex/worker-win-sidebar' into codex/integration-windows
arul28 Aug 3, 2026
c661541
Merge branch 'codex/worker-win-arm' into codex/integration-windows
arul28 Aug 3, 2026
4aa0262
feat(windows): port packaging and update support from #999
nsxdavid Aug 1, 2026
f63f742
refactor(windows): defer release repository wiring to packaging
arul28 Aug 1, 2026
701d3da
refactor(windows): own release IPC metadata in packaging
arul28 Aug 1, 2026
794abdc
feat(windows): complete packaging and runtime readiness
arul28 Aug 2, 2026
cd5de88
fix(windows): harden standalone release and brain updates
arul28 Aug 2, 2026
0cdf9bc
docs(windows): keep packaging layer links self-contained
arul28 Aug 2, 2026
73a927c
feat(remote-runtime): bootstrap native Windows SSH targets
arul28 Aug 2, 2026
f385e97
fix(windows): keep the installer name identical to its updater feed e…
arul28 Aug 2, 2026
d4beb6d
fix(windows): register one version-independent Add/Remove Programs entry
arul28 Aug 3, 2026
f861f70
fix(windows): ship the non-AVX2 OpenCode build on x64
arul28 Aug 3, 2026
7ab0197
fix(windows): pre-authorize the LAN sync listener in Windows Firewall
arul28 Aug 3, 2026
4c38580
fix(windows): stop shipping the unused AVX2 OpenCode build
arul28 Aug 3, 2026
6a537ac
docs(windows): port release and proof guidance from #999
nsxdavid Aug 1, 2026
47ca19f
feat(windows): add exact-SHA release proof gate
arul28 Aug 2, 2026
4da126b
fix(windows): bind standalone runtime proof
arul28 Aug 2, 2026
98d7d65
fix(windows): promote immutable runtime proof
arul28 Aug 2, 2026
e95578d
fix(windows): enforce exact release artifact identity
arul28 Aug 2, 2026
0a15782
fix(release): restore platform-neutral prepare-release dry run
arul28 Aug 2, 2026
24b3334
fix(release): pin and check approved Windows proof artifact retention
arul28 Aug 2, 2026
cd21e62
fix(release): publish runtime assets from the run that built them
arul28 Aug 2, 2026
8c41ebf
docs(release): document every required release gate and setting
arul28 Aug 2, 2026
df6f954
feat(release): build and publish Windows on the release tag
arul28 Aug 2, 2026
96b24c5
docs(release): make the release skill and AGENTS Windows-aware
arul28 Aug 2, 2026
786cb73
docs(release): describe the in-run Windows release model
arul28 Aug 2, 2026
8624167
test(release): pin the Windows standalone checksum normalization
arul28 Aug 2, 2026
2cc9c34
docs(release): drop deleted Windows gate variables from supporting docs
arul28 Aug 2, 2026
12071e5
docs(release): rewrite the signing playbook for the in-run Windows build
arul28 Aug 2, 2026
0df3f1d
docs(sync): state that Linux is a runtime target, not a sync peer
arul28 Aug 2, 2026
199324a
fix(release): sign Windows through Azure Artifact Signing
arul28 Aug 2, 2026
e6e7a5d
fix(release): sign the standalone Windows runtime through Azure Artif…
arul28 Aug 2, 2026
d76c310
fix(release): require Azure signing credentials instead of PFX secrets
arul28 Aug 2, 2026
1017abb
docs(release): rewrite the Windows signing playbook for Azure Artifac…
arul28 Aug 2, 2026
561e607
fix(release): move publishing into its own reusable workflow
arul28 Aug 3, 2026
39fb091
fix(release): let windows_proof validate a pre-merge commit
arulsharma Aug 3, 2026
9b9988c
ci: allow CI to be dispatched for stacked branches
arulsharma Aug 3, 2026
420061b
Merge branch 'codex/windows-foundation-runtime' into codex/windows-cl…
arulsharma Aug 3, 2026
72a48bd
Merge branch 'codex/windows-cli-shells-providers' into codex/windows-…
arulsharma Aug 3, 2026
96274bc
Merge branch 'codex/windows-desktop-sync' into codex/windows-packagin…
arulsharma Aug 3, 2026
06d09e0
Merge branch 'codex/windows-packaging-updates' into codex/windows-rel…
arulsharma Aug 3, 2026
1ad268d
ci: scope the dispatched secret scan to this branch's commits
arulsharma Aug 3, 2026
a9ba354
ci: invoke gitleaks directly for dispatched runs
arulsharma Aug 3, 2026
4708ea6
fix(release): let windows_proof build without a ci-pass check run
arulsharma Aug 3, 2026
77f9a51
Merge branch 'codex/windows-foundation-runtime' into codex/windows-cl…
arul28 Aug 3, 2026
f035486
Merge branch 'codex/windows-cli-shells-providers' into codex/windows-…
arul28 Aug 3, 2026
478d2ce
fix(windows): stop Droid opening a visible terminal window per session
arul28 Aug 3, 2026
1ebd879
fix(windows): stop reporting a signed-out Droid as authenticated
arul28 Aug 3, 2026
d9e7816
Merge branch 'codex/windows-desktop-sync' into codex/windows-packagin…
arul28 Aug 3, 2026
6ea1dd5
Merge branch 'codex/windows-packaging-updates' into codex/windows-rel…
arul28 Aug 3, 2026
c239304
fix(windows): strip the vendor signature before postject injects the SEA
arulsharma Aug 3, 2026
c4d2c6c
Merge branch 'codex/windows-foundation-runtime' into codex/windows-cl…
arul28 Aug 3, 2026
130e3f1
Merge branch 'codex/windows-cli-shells-providers' into codex/windows-…
arul28 Aug 3, 2026
3b83465
Merge branch 'codex/windows-desktop-sync' into codex/windows-packagin…
arul28 Aug 3, 2026
90a7c7c
Merge branch 'codex/windows-packaging-updates' into codex/windows-rel…
arul28 Aug 3, 2026
72fbf24
Merge remote-tracking branch 'origin/main' into codex/windows-release…
arul28 Aug 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
122 changes: 113 additions & 9 deletions .agents/skills/release/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ ship a TestFlight build.

This is a **GitHub desktop + local ASC iOS release flow**. Desktop releases
must use the repository GitHub Actions release workflow so macOS updater assets
are produced reproducibly as per-arch ZIP/DMG artifacts. This Mac may still run
checks, create release docs/tags, monitor and recover the workflow, and build
and upload iOS/TestFlight releases through ASC.
are produced reproducibly as per-arch ZIP/DMG artifacts, and so the signed
Windows installer is produced on a Windows runner this Mac cannot provide. This
Mac may still run checks, create release docs/tags, monitor and recover the
workflow, and build and upload iOS/TestFlight releases through ASC.

A **preflight** is a cheap check that runs before expensive build/upload work.
Use preflights to catch release blockers while fixes can still be committed
Expand Down Expand Up @@ -42,7 +43,13 @@ without burning a notarization, TestFlight upload, or build number.
crash Squirrel.Mac during in-app update.
- **Do not publish broken updater metadata.** Before making a desktop release
public/latest, verify `latest-mac.yml` references assets that exist and that
the expected arm64/x64 DMGs and ZIPs are present.
the expected arm64/x64 DMGs and ZIPs are present. When Windows is enabled,
apply the same rule to `latest.yml` and the Windows installer.
- **Do not publish a half-platform release.** The Windows gate and the Windows
assets must agree. If `ADE_WINDOWS_PUBLIC_RELEASE_ENABLED` is `1` the draft
must carry Windows assets; if it is not `1` the draft must carry none. Either
mismatch means the workflow did not do what you think it did, so keep the
release draft/private and investigate before publishing.
- **Do not discover obvious release blockers after upload.** Preflight iOS App
Clip packaging metadata before starting the expensive mobile phase.
- **Do not wait forever.** If GitHub notarization or TestFlight processing
Expand All @@ -55,13 +62,24 @@ This release lane runs on an Apple Silicon Mac (`arm64`), but desktop release
artifacts are produced remotely by GitHub Actions. Treat local desktop packaging
scripts as diagnostic/recovery tools only.

Desktop updater correctness requires:
Desktop updater correctness requires, on macOS:

- `latest-mac.yml`
- one arm64 ZIP and one x64 ZIP referenced by that file
- one arm64 DMG and one x64 DMG
- no universal ZIP in the updater feed

and, when `ADE_WINDOWS_PUBLIC_RELEASE_ENABLED` is `1`, additionally on Windows:

- `latest.yml`
- one `ADE-<VERSION>-win-x64.exe` installer referenced by that file
- the matching `ADE-<VERSION>-win-x64.exe.blockmap`

Windows builds fresh on the tag alongside macOS. There is one repository
variable, `ADE_WINDOWS_PUBLIC_RELEASE_ENABLED`; it decides whether the release
carries Windows at all. Read it before verifying assets, because it determines
which of the two asset matrices below is correct.

## State and Locking

Create a state file before mutating release state:
Expand All @@ -80,7 +98,7 @@ Track:

```json
{
"desktop": { "needed": false, "version": null, "tag": null, "lastTag": null },
"desktop": { "needed": false, "version": null, "tag": null, "lastTag": null, "platforms": null },
"ios": { "needed": false, "marketingVersion": null, "buildNumber": null, "lastTag": null },
"phase": "detect|docs|desktop|ios|verify|done|blocked",
"notes": []
Expand Down Expand Up @@ -124,6 +142,7 @@ relevant preflights pass.
```bash
test -f .github/workflows/release.yml
test -f .github/workflows/release-core.yml
test -f .github/workflows/release-publish.yml
gh workflow view release.yml --repo arul28/ADE
```

Expand All @@ -132,12 +151,31 @@ relevant preflights pass.

- `.github/workflows/release-core.yml` builds `dist:mac:arm64:signed`.
- `.github/workflows/release-core.yml` builds `dist:mac:x64:signed`.
- `.github/workflows/release-core.yml` builds `dist:win:signed` in
`build-win-release`.
- The publish job merges per-arch manifests into one `latest-mac.yml`.
- The publish job attaches the Windows installer, its `.blockmap`, and
`latest.yml` when the Windows gate is on.

If the workflow has been changed to publish universal updater ZIPs, stop and
fix the workflow before releasing.

7. For iOS releases, preflight App Clip packaging metadata before archiving:
7. For desktop releases, resolve the expected platform matrix before tagging.
This decides what the draft must contain in Phase 4:

```bash
gh variable get ADE_WINDOWS_PUBLIC_RELEASE_ENABLED --repo arul28/ADE 2>/dev/null || echo "unset"
```

- `1` means the release must carry macOS **and** Windows assets. Record
`platforms=mac,win`.
- Anything else, including unset, means macOS only. Record `platforms=mac`.

Windows signing is fail-closed: if the gate is `1` and the signing secrets
are missing, the `verify` job stops the run in about a minute. Do not
"fix" that by clearing the gate mid-release; fix the secrets or stop.

8. For iOS releases, preflight App Clip packaging metadata before archiving:

```bash
xcodebuild -showBuildSettings \
Expand Down Expand Up @@ -333,9 +371,18 @@ Expected shape:

- runtime/resource jobs run first
- `arm64 mac release` and `x64 mac release` build/sign/notarize independently
- `publish-release` merges the per-arch updater manifests and creates the draft
- `build-win-release` builds/signs/validates Windows independently, in parallel
with the mac jobs, when `platforms` includes `win`. With the gate off it is
skipped, and a skipped Windows job does not block the mac release.
- `publish-release` (in `release-publish.yml`, called by `release.yml` after
`run-release` succeeds) merges the per-arch updater manifests and creates the
draft
- `update-brew-tap` runs after publication

If `platforms=mac,win` and `build-win-release` did not run, stop. The gate and
the run disagree, and publishing would ship a macOS-only release under a
version that is supposed to carry Windows.

### Retry policy

Do not start duplicate full release workflows.
Expand Down Expand Up @@ -376,13 +423,51 @@ gh release download "v<VERSION>" --repo arul28/ADE \
cat ".ade/tmp/release-v<VERSION>-verify/latest-mac.yml"
```

Required assets:
When `platforms` includes `win`, also pull the Windows updater feed:

```bash
gh release download "v<VERSION>" --repo arul28/ADE \
--pattern latest.yml \
--dir ".ade/tmp/release-v<VERSION>-verify" \
--clobber
cat ".ade/tmp/release-v<VERSION>-verify/latest.yml"
```

Required assets, always:

- `ADE-<VERSION>-arm64.dmg`
- `ADE-<VERSION>-arm64.zip`
- `ADE-<VERSION>-x64.dmg`
- `ADE-<VERSION>-x64.zip`
- `latest-mac.yml`
- `install.sh`
- `SHA256SUMS`
- `ade-darwin-arm64`, `ade-darwin-x64`, `ade-linux-arm64`, `ade-linux-x64`, and
the matching `.native.tar.gz` for each

Required additionally when `platforms` includes `win`:

- `ADE-<VERSION>-win-x64.exe`
- `ADE-<VERSION>-win-x64.exe.blockmap`
- `latest.yml`
- `install.ps1`
- `ade-win32-x64.exe`
- `ade-win32-x64.native.tar.gz`

Gate/asset agreement is a hard check, in both directions:

```bash
WINDOWS_GATE="$(gh variable get ADE_WINDOWS_PUBLIC_RELEASE_ENABLED --repo arul28/ADE 2>/dev/null || echo unset)"
WINDOWS_ASSETS="$(gh release view "v<VERSION>" --repo arul28/ADE --json assets \
--jq '[.assets[].name | select(test("win-x64|win32-x64|^latest\\.yml$|^install\\.ps1$"))] | length')"
echo "gate=$WINDOWS_GATE windows_assets=$WINDOWS_ASSETS"
```

- `gate=1` and `windows_assets=0` means the Windows build silently did not
contribute. Stop; keep the release draft/private.
- `gate` not `1` and `windows_assets` greater than `0` means Windows assets
reached a release that was not supposed to carry them. Stop; keep the release
draft/private.

Also verify:

Expand All @@ -391,6 +476,12 @@ Also verify:
- no updater ZIP is suspiciously huge; a ZIP over about 900 MB needs human
review because Squirrel.Mac can crash while handling oversized updater ZIPs.
- every `latest-mac.yml` referenced ZIP exists in the release assets.
- when Windows is in scope, `latest.yml` references the uploaded
`ADE-<VERSION>-win-x64.exe`, and that installer and its `.blockmap` both
exist in the release assets.
- `SHA256SUMS` lists every published standalone runtime asset, including the
`ade-win32-x64` entries when Windows is in scope, and lists nothing that is
not published.

### Publish public/latest

Expand Down Expand Up @@ -597,6 +688,15 @@ Desktop:
until fixed.
- If `latest-mac.yml` references a universal ZIP, keep the release draft/private
and fix the GitHub workflow. Do not publish the release.
- If `latest.yml` is missing, or references an installer that is not in the
release assets, keep the release draft/private. Windows in-app update reads
that file; a broken feed strands installed Windows users.
- If the Windows build fails, the draft is not created at all while the gate is
on, by design. Fix the failure and rerun; do not clear
`ADE_WINDOWS_PUBLIC_RELEASE_ENABLED` to force a macOS-only draft under a
version that was announced as carrying Windows.
- If the Windows gate and the published Windows assets disagree in either
direction, keep the release draft/private and reconcile before publishing.

iOS:

Expand All @@ -613,8 +713,12 @@ iOS:
Report:

- desktop scope decision and tag
- the resolved desktop platform matrix (`mac` or `mac,win`) and the
`ADE_WINDOWS_PUBLIC_RELEASE_ENABLED` value it came from
- GitHub Release URL and asset count
- whether `latest-mac.yml` references only present assets
- when Windows is in scope, whether `latest.yml` references only present assets
and whether the gate and the published Windows assets agreed
- iOS marketing/build number
- TestFlight build ID
- group membership verification
Expand Down
Loading
Loading