Running gclo-dev-Setup.exe (v1.0.2-beta.1) over an existing 1.0.0 install on the maintainer's machine deleted %LOCALAPPDATA%\gclo\accounts.json, accounts.json.bak, settings.json and logs\. Velopack's Setup uninstalls the existing install first and removes the whole install root, and gclo keeps its per-user data in that same root (GcloPaths.DefaultDataRoot = %LOCALAPPDATA%\gclo). In-app updates (Update.exe apply) keep the files, which is why 1.0.0 → 1.0.1 did not lose anything; any fresh Setup run (reinstall, channel switch, the "reinstall 1.0.0" advice in the 1.0.1 notes) does.
Tokens survive: they live in Credential Manager (gclo:account:<id>), but without accounts.json their account records (name, organization, target root) are gone and the entries are orphaned.
Fix (1.0.2)
Move the default data root out of the install root, e.g. %LOCALAPPDATA%\KofTwentyTwo\gclo (keep GCLO_DATA_DIR as the override; vault target scoping already keys on the root, so the default root must stay unscoped to keep the existing gclo:account:<id> entries working).
On first start, migrate accounts.json, accounts.json.bak, settings.json and logs\ from %LOCALAPPDATA%\gclo when they exist there and the new root is empty (the app knows its install root from Velopack).
Threat model / ADR note: user data must never live where the installer or uninstaller deletes.
Test: migration unit tests; a UI smoke that the data root is outside AppContext.BaseDirectory's install root.
Running `gclo-dev-Setup.exe` (v1.0.2-beta.1) over an existing 1.0.0 install on the maintainer's machine **deleted `%LOCALAPPDATA%\gclo\accounts.json`, `accounts.json.bak`, `settings.json` and `logs\`**. Velopack's Setup uninstalls the existing install first and removes the whole install root, and gclo keeps its per-user data in that same root (`GcloPaths.DefaultDataRoot` = `%LOCALAPPDATA%\gclo`). In-app updates (`Update.exe` apply) keep the files, which is why 1.0.0 → 1.0.1 did not lose anything; any fresh Setup run (reinstall, channel switch, the "reinstall 1.0.0" advice in the 1.0.1 notes) does.
Tokens survive: they live in Credential Manager (`gclo:account:<id>`), but without `accounts.json` their account records (name, organization, target root) are gone and the entries are orphaned.
## Fix (1.0.2)
- Move the default data root out of the install root, e.g. `%LOCALAPPDATA%\KofTwentyTwo\gclo` (keep `GCLO_DATA_DIR` as the override; vault target scoping already keys on the root, so the **default** root must stay unscoped to keep the existing `gclo:account:<id>` entries working).
- On first start, migrate `accounts.json`, `accounts.json.bak`, `settings.json` and `logs\` from `%LOCALAPPDATA%\gclo` when they exist there and the new root is empty (the app knows its install root from Velopack).
- Threat model / ADR note: user data must never live where the installer or uninstaller deletes.
- Test: migration unit tests; a UI smoke that the data root is outside `AppContext.BaseDirectory`'s install root.
Blocks #67 (v1.0.2). Part of #62.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Running
gclo-dev-Setup.exe(v1.0.2-beta.1) over an existing 1.0.0 install on the maintainer's machine deleted%LOCALAPPDATA%\gclo\accounts.json,accounts.json.bak,settings.jsonandlogs\. Velopack's Setup uninstalls the existing install first and removes the whole install root, and gclo keeps its per-user data in that same root (GcloPaths.DefaultDataRoot=%LOCALAPPDATA%\gclo). In-app updates (Update.exeapply) keep the files, which is why 1.0.0 → 1.0.1 did not lose anything; any fresh Setup run (reinstall, channel switch, the "reinstall 1.0.0" advice in the 1.0.1 notes) does.Tokens survive: they live in Credential Manager (
gclo:account:<id>), but withoutaccounts.jsontheir account records (name, organization, target root) are gone and the entries are orphaned.Fix (1.0.2)
%LOCALAPPDATA%\KofTwentyTwo\gclo(keepGCLO_DATA_DIRas the override; vault target scoping already keys on the root, so the default root must stay unscoped to keep the existinggclo:account:<id>entries working).accounts.json,accounts.json.bak,settings.jsonandlogs\from%LOCALAPPDATA%\gclowhen they exist there and the new root is empty (the app knows its install root from Velopack).AppContext.BaseDirectory's install root.Blocks #67 (v1.0.2). Part of #62.