Files
ipswap/cmd/ipswap/versioninfo.json
T
bsncubed 23dcfb393f Scaffold ipswap: tray-driven Windows IP preset switcher
Implements the design in claude.md as a building skeleton: pure Go, no cgo,
cross-compiles to a single Windows .exe from Linux.

Architecture follows the spec's deliberate split. The fast path is native —
tray icon, grouped submenus, a Win32 MessageBox showing a live before/after
diff, then netsh. The slow path is an embedded web editor served on a random
loopback port and opened in the default browser.

Two decisions worth recording:

Reads use GetAdaptersAddresses, writes use netsh. The spec left the
enumeration mechanism open; parsing `netsh show config` breaks on a
non-English Windows because the output is localised. DNS static-vs-DHCP
origin is not exposed by that API, so it comes from one registry read.

The netsh command plan is built in portable code. That puts the delete-every-
existing-address step — the one that stops secondary addresses leaking across
switches — under test without needing a Windows box.

The editor requires the session token in a header for mutations, not just the
cookie: any page in the browser can make it POST to 127.0.0.1 with the cookie
attached, but it cannot set a header. The updater refuses to install a release
that publishes no SHA256.

Not yet done: no group picker for export (the API supports it), no
single-instance guard, and internal/server/web/app.css is reconstructed from
the description in claude.md rather than the canonical apointless.css.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 13:29:35 +10:00

26 lines
742 B
JSON

{
"FixedFileInfo": {
"FileVersion": { "Major": 0, "Minor": 1, "Patch": 0, "Build": 0 },
"ProductVersion": { "Major": 0, "Minor": 1, "Patch": 0, "Build": 0 },
"FileFlagsMask": "3f",
"FileFlags": "00",
"FileOS": "040004",
"FileType": "01",
"FileSubType": "00"
},
"StringFileInfo": {
"CompanyName": "apointless.space",
"FileDescription": "ipswap — network preset switcher",
"InternalName": "ipswap",
"LegalCopyright": "",
"OriginalFilename": "ipswap.exe",
"ProductName": "ipswap",
"ProductVersion": "0.1.0"
},
"VarFileInfo": {
"Translation": { "LangID": "0409", "CharsetID": "04B0" }
},
"IconPath": "../../internal/tray/icon.ico",
"ManifestPath": "ipswap.manifest"
}