Microsoft.WindowsAppSDK 2.2.0 → 2.5.1, verified with a clean x64 build and the full FlaUI end-to-end suite (8/8).
CI / release
#45: CodeQL runs on dev pushes and PRs as well as main.
#44: the release workflow is now three gated jobs: verify (strict semver and the tagged commit must be contained in main) → gates (calls ci.yml via a new workflow_call trigger: zero-warning build, 100% coverage, format) → release. The FlaUI UI smoke suite runs in the gates but is advisory for a release (ui-tests-advisory input), matching its non-required status on main, so a flaky hosted-runner UI run cannot block an immutable tag; this is the documented exception #44 allows. contents: write is scoped to the release job only. docs/RELEASING.md describes the stages.
#52: Dependabot's NuGet ecosystem is replaced by .github/workflows/nuget-updates.yml + .github/scripts/Update-NuGetPackages.ps1. Dependabot cannot evaluate the WinUI target framework (dependabot/dependabot-core#13923) and had silently blocked every WindowsAppSDK/Velopack/xunit-runner update since July. The workflow bumps minor/patch versions via dotnet list package --outdated, holds majors for review, runs the gates on the bumped tree, and opens one PR against dev. GitHub Actions updates stay with Dependabot.
#53: the dependency-review license check exempts the three packages whose nuspec declares a file license (LibGit2Sharp, Microsoft.WindowsAppSDK, Microsoft.Windows.SDK.BuildTools); the dependency graph cannot read those and every bump failed the gate. Their real licenses are recorded beside the exemption; vulnerability scanning is unchanged.
Engine
#47: new public RepositoryPathResolver. Every repository name must be exactly one safe path segment and resolve strictly under TargetRoot; the engine resolves all targets before creating anything, so a bad descriptor fails the call with nothing touched on disk.
#46: the gclo.checkoutpending marker is set the moment a clone's fetch lands and cleared only after checkout completes, so a clone whose cleanup failed is checked out again on the next pull instead of being reported "up to date" from equal commit tips.
ViewModels
#43: AccountsStore.Save/Delete now write the vault first and compensate when the metadata write fails (previous token restored, or new entry removed; removed token re-stored). A failed compensation surfaces as AccountConsistencyException describing the leftover state, which a plain retry reconciles. No path logs or surfaces a token.
#55 rehearses the new release chain with v1.0.1-beta.1 (dev channel) once the remaining known issues are fixed; #56 verifies self-update on it. #54 tracks making the UI suite a required check.
The NuGet updates workflow becomes dispatchable (workflow_dispatch requires the file on main); it is scheduled for Mondays 06:00 ET. The optional DEPS_PAT secret is on the owner checklist (#7).
Checklist
dotnet build gclo.slnx -p:Platform=x64 -warnaserror succeeds with 0 warnings
dotnet test gclo.Engine.Tests passes (new engine behavior has tests) — 344 Engine + 65 CLI + 8 e2e; coverage gate 100% on gclo.Engine, gclo.ViewModels, gclo
dotnet format gclo.slnx --verify-no-changes --severity error is clean
No business logic in the gclo UI project — engine work lives in gclo.Engine
## What
Post-1.0 hardening wave from `dev` (10 commits, CI + CodeQL green on every push):
**Dependencies**
- actions/setup-dotnet v5 → v6 in all workflows; LibGit2Sharp 0.31 → 0.32 (security release, libgit2 1.8.6); Velopack 1.2.0 → 1.2.161; Microsoft.Windows.SDK.BuildTools → 10.0.28000.2705; Microsoft.NET.Test.Sdk 18.10.1; coverlet.collector 10.1.0; xunit.runner.visualstudio 4.0.0.
- Microsoft.WindowsAppSDK 2.2.0 → 2.5.1, verified with a clean x64 build and the full FlaUI end-to-end suite (8/8).
**CI / release**
- #45: CodeQL runs on `dev` pushes and PRs as well as `main`.
- #44: the release workflow is now three gated jobs: `verify` (strict semver **and** the tagged commit must be contained in `main`) → `gates` (calls `ci.yml` via a new `workflow_call` trigger: zero-warning build, 100% coverage, format) → `release`. The FlaUI UI smoke suite runs in the gates but is **advisory** for a release (`ui-tests-advisory` input), matching its non-required status on `main`, so a flaky hosted-runner UI run cannot block an immutable tag; this is the documented exception #44 allows. `contents: write` is scoped to the release job only. `docs/RELEASING.md` describes the stages.
- #52: Dependabot's NuGet ecosystem is replaced by `.github/workflows/nuget-updates.yml` + `.github/scripts/Update-NuGetPackages.ps1`. Dependabot cannot evaluate the WinUI target framework (dependabot/dependabot-core#13923) and had silently blocked every WindowsAppSDK/Velopack/xunit-runner update since July. The workflow bumps minor/patch versions via `dotnet list package --outdated`, holds majors for review, runs the gates on the bumped tree, and opens one PR against `dev`. GitHub Actions updates stay with Dependabot.
- #53: the dependency-review license check exempts the three packages whose nuspec declares a file license (LibGit2Sharp, Microsoft.WindowsAppSDK, Microsoft.Windows.SDK.BuildTools); the dependency graph cannot read those and every bump failed the gate. Their real licenses are recorded beside the exemption; vulnerability scanning is unchanged.
**Engine**
- #47: new public `RepositoryPathResolver`. Every repository name must be exactly one safe path segment and resolve strictly under `TargetRoot`; the engine resolves all targets before creating anything, so a bad descriptor fails the call with nothing touched on disk.
- #46: the `gclo.checkoutpending` marker is set the moment a clone's fetch lands and cleared only after checkout completes, so a clone whose cleanup failed is checked out again on the next pull instead of being reported "up to date" from equal commit tips.
**ViewModels**
- #43: `AccountsStore.Save`/`Delete` now write the vault first and compensate when the metadata write fails (previous token restored, or new entry removed; removed token re-stored). A failed compensation surfaces as `AccountConsistencyException` describing the leftover state, which a plain retry reconciles. No path logs or surfaces a token.
## Why
Closes #43
Closes #44
Closes #45
Closes #46
Closes #47
Closes #52
Closes #53
**After merge**
- #55 rehearses the new release chain with `v1.0.1-beta.1` (dev channel) once the remaining known issues are fixed; #56 verifies self-update on it. #54 tracks making the UI suite a required check.
- The NuGet updates workflow becomes dispatchable (`workflow_dispatch` requires the file on `main`); it is scheduled for Mondays 06:00 ET. The optional `DEPS_PAT` secret is on the owner checklist (#7).
## Checklist
- [x] `dotnet build gclo.slnx -p:Platform=x64 -warnaserror` succeeds with **0 warnings**
- [x] `dotnet test gclo.Engine.Tests` passes (new engine behavior has tests) — 344 Engine + 65 CLI + 8 e2e; coverage gate 100% on `gclo.Engine`, `gclo.ViewModels`, `gclo`
- [x] `dotnet format gclo.slnx --verify-no-changes --severity error` is clean
- [x] No business logic in the `gclo` UI project — engine work lives in `gclo.Engine`
- [x] Docs updated (`README.md`, `docs/RELEASING.md`, `CONTRIBUTING.md`)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
detected GitHub workflow tokens with excessive permissions
Code-Review
🟢 4
Found 6/15 approved changesets -- score normalized to 4
Maintained
🟢 4
3 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 4
Dangerous-Workflow
🟢 10
no dangerous workflow patterns detected
Pinned-Dependencies
⚠️ 0
dependency not pinned by hash detected -- score normalized to 0
Binary-Artifacts
🟢 10
no binaries found in the repo
CII-Best-Practices
⚠️ 0
no effort to earn an OpenSSF best practices badge detected
License
🟢 10
license file detected
Fuzzing
⚠️ 0
project is not fuzzed
Signed-Releases
⚠️ -1
no releases found
Security-Policy
⚠️ 0
security policy file not detected
SAST
⚠️ 0
SAST tool is not run on all commits -- score normalized to 0
Branch-Protection
⚠️ 0
branch protection not enabled on development/release branches
nuget/Microsoft.NET.Test.Sdk
18.10.1
🟢 6.2
Details
Check
Score
Reason
Maintained
🟢 10
30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10
Security-Policy
🟢 10
security policy file detected
Code-Review
🟢 10
all changesets reviewed
License
🟢 10
license file detected
CII-Best-Practices
⚠️ 0
no effort to earn an OpenSSF best practices badge detected
Dangerous-Workflow
🟢 10
no dangerous workflow patterns detected
Binary-Artifacts
⚠️ 0
binaries present in source code
Packaging
⚠️ -1
packaging workflow not detected
Fuzzing
⚠️ 0
project is not fuzzed
Signed-Releases
⚠️ -1
no releases found
Token-Permissions
🟢 9
detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies
🟢 10
all dependencies are pinned
Branch-Protection
⚠️ 1
branch protection is not maximal on development and all release branches
SAST
⚠️ 0
SAST tool is not run on all commits -- score normalized to 0
nuget/xunit.runner.visualstudio
4.0.0
Unknown
Unknown
nuget/Microsoft.Windows.SDK.BuildTools
10.0.28000.2705
Unknown
Unknown
nuget/Microsoft.WindowsAppSDK
2.5.1
Unknown
Unknown
nuget/Velopack
1.2.161
Unknown
Unknown
Scanned Files
.github/workflows/release.yml
gclo.Cli.Tests/gclo.Cli.Tests.csproj
gclo.Engine.Tests/gclo.Engine.Tests.csproj
gclo.Engine/gclo.Engine.csproj
gclo.UiTests/gclo.UiTests.csproj
gclo/gclo.csproj
<h1>Dependency Review</h1>
The following issues were found:<ul><li>✅ 0 vulnerable package(s)</li><li>❌ 3 package(s) with incompatible licenses</li><li>✅ 0 package(s) with invalid SPDX license definitions</li><li>⚠️ 1 package(s) with unknown licenses.</li></ul>
See the Details below.<h2>License Issues</h2>
<h4><em>gclo.Engine/gclo.Engine.csproj</em></h4>
<table><tr><td>Package</td><td>Version</td><td>License</td><td>Issue Type</td></tr><tr><td>LibGit2Sharp</td><td>0.32.0</td><td>LicenseRef-scancode-unknown</td><td>Incompatible License</td></tr></table>
<h4><em>gclo/gclo.csproj</em></h4>
<table><tr><td>Package</td><td>Version</td><td>License</td><td>Issue Type</td></tr><tr><td>Microsoft.Windows.SDK.BuildTools</td><td>10.0.28000.2705</td><td>LicenseRef-scancode-unknown</td><td>Incompatible License</td></tr><tr><td>Microsoft.WindowsAppSDK</td><td>2.5.1</td><td>LicenseRef-github-NOASSERTION</td><td>Incompatible License</td></tr></table>
<h4><em>.github/workflows/release.yml</em></h4>
<table><tr><td>Package</td><td>Version</td><td>License</td><td>Issue Type</td></tr><tr><td>actions/setup-dotnet</td><td>6.*.*</td><td>Null</td><td>Unknown License</td></tr></table>
<blockquote><details><summary><strong>Allowed Licenses</strong>:</summary> MIT, MIT-0, Apache-2.0, BSD-2-Clause, BSD-3-Clause, 0BSD, ISC, MS-PL, Unlicense, CC0-1.0, GPL-2.0-only WITH Classpath-exception-2.0, GPL-2.0-or-later WITH Classpath-exception-2.0, GPL-2.0-only WITH GCC-exception-2.0</details></blockquote>
<h2>OpenSSF Scorecard</h2>
<details><summary>Scorecard details</summary>
<table><tr><th>Package</th><th>Version</th><th>Score</th><th>Details</th></tr>
<tr><td> actions/actions/setup-dotnet </td><td>6.*.*</td>
<td>:green_circle: 6.6</td><td><details><summary>Details</summary><table><tr><th>Check</th><th>Score</th><th>Reason</th></tr><tr><td>Maintained</td><td>:green_circle: 10</td><td>14 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10</td></tr><tr><td>Code-Review</td><td>:green_circle: 10</td><td>all changesets reviewed</td></tr><tr><td>Binary-Artifacts</td><td>:green_circle: 10</td><td>no binaries found in the repo</td></tr><tr><td>Dangerous-Workflow</td><td>:green_circle: 10</td><td>no dangerous workflow patterns detected</td></tr><tr><td>Packaging</td><td>:warning: -1</td><td>packaging workflow not detected</td></tr><tr><td>Token-Permissions</td><td>:warning: 0</td><td>detected GitHub workflow tokens with excessive permissions</td></tr><tr><td>CII-Best-Practices</td><td>:warning: 0</td><td>no effort to earn an OpenSSF best practices badge detected</td></tr><tr><td>Pinned-Dependencies</td><td>:green_circle: 8</td><td>dependency not pinned by hash detected -- score normalized to 8</td></tr><tr><td>Fuzzing</td><td>:warning: 0</td><td>project is not fuzzed</td></tr><tr><td>License</td><td>:green_circle: 10</td><td>license file detected</td></tr><tr><td>Signed-Releases</td><td>:warning: -1</td><td>no releases found</td></tr><tr><td>Security-Policy</td><td>:green_circle: 9</td><td>security policy file detected</td></tr><tr><td>Branch-Protection</td><td>:warning: 0</td><td>branch protection not enabled on development/release branches</td></tr><tr><td>SAST</td><td>:green_circle: 9</td><td>SAST tool is not run on all commits -- score normalized to 9</td></tr></table></details></td></tr>
<tr><td> nuget/Microsoft.NET.Test.Sdk </td><td>18.10.1</td>
<td>:green_circle: 6.2</td><td><details><summary>Details</summary><table><tr><th>Check</th><th>Score</th><th>Reason</th></tr><tr><td>Maintained</td><td>:green_circle: 10</td><td>30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10</td></tr><tr><td>Security-Policy</td><td>:green_circle: 10</td><td>security policy file detected</td></tr><tr><td>Code-Review</td><td>:green_circle: 10</td><td>all changesets reviewed</td></tr><tr><td>License</td><td>:green_circle: 10</td><td>license file detected</td></tr><tr><td>CII-Best-Practices</td><td>:warning: 0</td><td>no effort to earn an OpenSSF best practices badge detected</td></tr><tr><td>Dangerous-Workflow</td><td>:green_circle: 10</td><td>no dangerous workflow patterns detected</td></tr><tr><td>Binary-Artifacts</td><td>:warning: 0</td><td>binaries present in source code</td></tr><tr><td>Packaging</td><td>:warning: -1</td><td>packaging workflow not detected</td></tr><tr><td>Fuzzing</td><td>:warning: 0</td><td>project is not fuzzed</td></tr><tr><td>Signed-Releases</td><td>:warning: -1</td><td>no releases found</td></tr><tr><td>Token-Permissions</td><td>:green_circle: 9</td><td>detected GitHub workflow tokens with excessive permissions</td></tr><tr><td>Pinned-Dependencies</td><td>:green_circle: 10</td><td>all dependencies are pinned</td></tr><tr><td>Branch-Protection</td><td>:warning: 1</td><td>branch protection is not maximal on development and all release branches</td></tr><tr><td>SAST</td><td>:warning: 0</td><td>SAST tool is not run on all commits -- score normalized to 0</td></tr></table></details></td></tr>
<tr><td> nuget/coverlet.collector </td><td>10.1.0</td>
<td>:green_circle: 4.2</td><td><details><summary>Details</summary><table><tr><th>Check</th><th>Score</th><th>Reason</th></tr><tr><td>Code-Review</td><td>:warning: 2</td><td>Found 4/19 approved changesets -- score normalized to 2</td></tr><tr><td>Maintained</td><td>:green_circle: 10</td><td>30 commit(s) and 23 issue activity found in the last 90 days -- score normalized to 10</td></tr><tr><td>Dangerous-Workflow</td><td>:green_circle: 10</td><td>no dangerous workflow patterns detected</td></tr><tr><td>Packaging</td><td>:warning: -1</td><td>packaging workflow not detected</td></tr><tr><td>Token-Permissions</td><td>:warning: 0</td><td>detected GitHub workflow tokens with excessive permissions</td></tr><tr><td>Binary-Artifacts</td><td>:green_circle: 7</td><td>binaries present in source code</td></tr><tr><td>CII-Best-Practices</td><td>:warning: 0</td><td>no effort to earn an OpenSSF best practices badge detected</td></tr><tr><td>Pinned-Dependencies</td><td>:warning: 0</td><td>dependency not pinned by hash detected -- score normalized to 0</td></tr><tr><td>License</td><td>:green_circle: 10</td><td>license file detected</td></tr><tr><td>Fuzzing</td><td>:warning: 0</td><td>project is not fuzzed</td></tr><tr><td>Signed-Releases</td><td>:warning: 0</td><td>Project has not signed or included provenance with any releases.</td></tr><tr><td>Branch-Protection</td><td>:warning: -1</td><td>internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md</td></tr><tr><td>Security-Policy</td><td>:warning: 0</td><td>security policy file not detected</td></tr><tr><td>SAST</td><td>:green_circle: 7</td><td>SAST tool detected but not run on all commits</td></tr></table></details></td></tr>
<tr><td> nuget/xunit.runner.visualstudio </td><td>4.0.0</td>
<td> Unknown</td><td>Unknown</td></tr>
<tr><td> nuget/Microsoft.NET.Test.Sdk </td><td>18.10.1</td>
<td>:green_circle: 6.2</td><td><details><summary>Details</summary><table><tr><th>Check</th><th>Score</th><th>Reason</th></tr><tr><td>Maintained</td><td>:green_circle: 10</td><td>30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10</td></tr><tr><td>Security-Policy</td><td>:green_circle: 10</td><td>security policy file detected</td></tr><tr><td>Code-Review</td><td>:green_circle: 10</td><td>all changesets reviewed</td></tr><tr><td>License</td><td>:green_circle: 10</td><td>license file detected</td></tr><tr><td>CII-Best-Practices</td><td>:warning: 0</td><td>no effort to earn an OpenSSF best practices badge detected</td></tr><tr><td>Dangerous-Workflow</td><td>:green_circle: 10</td><td>no dangerous workflow patterns detected</td></tr><tr><td>Binary-Artifacts</td><td>:warning: 0</td><td>binaries present in source code</td></tr><tr><td>Packaging</td><td>:warning: -1</td><td>packaging workflow not detected</td></tr><tr><td>Fuzzing</td><td>:warning: 0</td><td>project is not fuzzed</td></tr><tr><td>Signed-Releases</td><td>:warning: -1</td><td>no releases found</td></tr><tr><td>Token-Permissions</td><td>:green_circle: 9</td><td>detected GitHub workflow tokens with excessive permissions</td></tr><tr><td>Pinned-Dependencies</td><td>:green_circle: 10</td><td>all dependencies are pinned</td></tr><tr><td>Branch-Protection</td><td>:warning: 1</td><td>branch protection is not maximal on development and all release branches</td></tr><tr><td>SAST</td><td>:warning: 0</td><td>SAST tool is not run on all commits -- score normalized to 0</td></tr></table></details></td></tr>
<tr><td> nuget/coverlet.collector </td><td>10.1.0</td>
<td>:green_circle: 4.2</td><td><details><summary>Details</summary><table><tr><th>Check</th><th>Score</th><th>Reason</th></tr><tr><td>Code-Review</td><td>:warning: 2</td><td>Found 4/19 approved changesets -- score normalized to 2</td></tr><tr><td>Maintained</td><td>:green_circle: 10</td><td>30 commit(s) and 23 issue activity found in the last 90 days -- score normalized to 10</td></tr><tr><td>Dangerous-Workflow</td><td>:green_circle: 10</td><td>no dangerous workflow patterns detected</td></tr><tr><td>Packaging</td><td>:warning: -1</td><td>packaging workflow not detected</td></tr><tr><td>Token-Permissions</td><td>:warning: 0</td><td>detected GitHub workflow tokens with excessive permissions</td></tr><tr><td>Binary-Artifacts</td><td>:green_circle: 7</td><td>binaries present in source code</td></tr><tr><td>CII-Best-Practices</td><td>:warning: 0</td><td>no effort to earn an OpenSSF best practices badge detected</td></tr><tr><td>Pinned-Dependencies</td><td>:warning: 0</td><td>dependency not pinned by hash detected -- score normalized to 0</td></tr><tr><td>License</td><td>:green_circle: 10</td><td>license file detected</td></tr><tr><td>Fuzzing</td><td>:warning: 0</td><td>project is not fuzzed</td></tr><tr><td>Signed-Releases</td><td>:warning: 0</td><td>Project has not signed or included provenance with any releases.</td></tr><tr><td>Branch-Protection</td><td>:warning: -1</td><td>internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md</td></tr><tr><td>Security-Policy</td><td>:warning: 0</td><td>security policy file not detected</td></tr><tr><td>SAST</td><td>:green_circle: 7</td><td>SAST tool detected but not run on all commits</td></tr></table></details></td></tr>
<tr><td> nuget/xunit.runner.visualstudio </td><td>4.0.0</td>
<td> Unknown</td><td>Unknown</td></tr>
<tr><td> nuget/LibGit2Sharp </td><td>0.32.0</td>
<td>:green_circle: 3.6</td><td><details><summary>Details</summary><table><tr><th>Check</th><th>Score</th><th>Reason</th></tr><tr><td>Packaging</td><td>:warning: -1</td><td>packaging workflow not detected</td></tr><tr><td>Token-Permissions</td><td>:warning: 0</td><td>detected GitHub workflow tokens with excessive permissions</td></tr><tr><td>Code-Review</td><td>:green_circle: 4</td><td>Found 6/15 approved changesets -- score normalized to 4</td></tr><tr><td>Maintained</td><td>:green_circle: 4</td><td>3 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 4</td></tr><tr><td>Dangerous-Workflow</td><td>:green_circle: 10</td><td>no dangerous workflow patterns detected</td></tr><tr><td>Pinned-Dependencies</td><td>:warning: 0</td><td>dependency not pinned by hash detected -- score normalized to 0</td></tr><tr><td>Binary-Artifacts</td><td>:green_circle: 10</td><td>no binaries found in the repo</td></tr><tr><td>CII-Best-Practices</td><td>:warning: 0</td><td>no effort to earn an OpenSSF best practices badge detected</td></tr><tr><td>License</td><td>:green_circle: 10</td><td>license file detected</td></tr><tr><td>Fuzzing</td><td>:warning: 0</td><td>project is not fuzzed</td></tr><tr><td>Signed-Releases</td><td>:warning: -1</td><td>no releases found</td></tr><tr><td>Security-Policy</td><td>:warning: 0</td><td>security policy file not detected</td></tr><tr><td>SAST</td><td>:warning: 0</td><td>SAST tool is not run on all commits -- score normalized to 0</td></tr><tr><td>Branch-Protection</td><td>:warning: 0</td><td>branch protection not enabled on development/release branches</td></tr></table></details></td></tr>
<tr><td> nuget/Microsoft.NET.Test.Sdk </td><td>18.10.1</td>
<td>:green_circle: 6.2</td><td><details><summary>Details</summary><table><tr><th>Check</th><th>Score</th><th>Reason</th></tr><tr><td>Maintained</td><td>:green_circle: 10</td><td>30 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10</td></tr><tr><td>Security-Policy</td><td>:green_circle: 10</td><td>security policy file detected</td></tr><tr><td>Code-Review</td><td>:green_circle: 10</td><td>all changesets reviewed</td></tr><tr><td>License</td><td>:green_circle: 10</td><td>license file detected</td></tr><tr><td>CII-Best-Practices</td><td>:warning: 0</td><td>no effort to earn an OpenSSF best practices badge detected</td></tr><tr><td>Dangerous-Workflow</td><td>:green_circle: 10</td><td>no dangerous workflow patterns detected</td></tr><tr><td>Binary-Artifacts</td><td>:warning: 0</td><td>binaries present in source code</td></tr><tr><td>Packaging</td><td>:warning: -1</td><td>packaging workflow not detected</td></tr><tr><td>Fuzzing</td><td>:warning: 0</td><td>project is not fuzzed</td></tr><tr><td>Signed-Releases</td><td>:warning: -1</td><td>no releases found</td></tr><tr><td>Token-Permissions</td><td>:green_circle: 9</td><td>detected GitHub workflow tokens with excessive permissions</td></tr><tr><td>Pinned-Dependencies</td><td>:green_circle: 10</td><td>all dependencies are pinned</td></tr><tr><td>Branch-Protection</td><td>:warning: 1</td><td>branch protection is not maximal on development and all release branches</td></tr><tr><td>SAST</td><td>:warning: 0</td><td>SAST tool is not run on all commits -- score normalized to 0</td></tr></table></details></td></tr>
<tr><td> nuget/xunit.runner.visualstudio </td><td>4.0.0</td>
<td> Unknown</td><td>Unknown</td></tr>
<tr><td> nuget/Microsoft.Windows.SDK.BuildTools </td><td>10.0.28000.2705</td>
<td> Unknown</td><td>Unknown</td></tr>
<tr><td> nuget/Microsoft.WindowsAppSDK </td><td>2.5.1</td>
<td> Unknown</td><td>Unknown</td></tr>
<tr><td> nuget/Velopack </td><td>1.2.161</td>
<td> Unknown</td><td>Unknown</td></tr>
</table></details><h2>Scanned Files</h2>
<ul><li>.github/workflows/release.yml</li><li>gclo.Cli.Tests/gclo.Cli.Tests.csproj</li><li>gclo.Engine.Tests/gclo.Engine.Tests.csproj</li><li>gclo.Engine/gclo.Engine.csproj</li><li>gclo.UiTests/gclo.UiTests.csproj</li><li>gclo/gclo.csproj</li></ul>
<!-- dependency-review-pr-comment-marker -->
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.
What
Post-1.0 hardening wave from
dev(10 commits, CI + CodeQL green on every push):Dependencies
CI / release
devpushes and PRs as well asmain.verify(strict semver and the tagged commit must be contained inmain) →gates(callsci.ymlvia a newworkflow_calltrigger: zero-warning build, 100% coverage, format) →release. The FlaUI UI smoke suite runs in the gates but is advisory for a release (ui-tests-advisoryinput), matching its non-required status onmain, so a flaky hosted-runner UI run cannot block an immutable tag; this is the documented exception #44 allows.contents: writeis scoped to the release job only.docs/RELEASING.mddescribes the stages..github/workflows/nuget-updates.yml+.github/scripts/Update-NuGetPackages.ps1. Dependabot cannot evaluate the WinUI target framework (dependabot/dependabot-core#13923) and had silently blocked every WindowsAppSDK/Velopack/xunit-runner update since July. The workflow bumps minor/patch versions viadotnet list package --outdated, holds majors for review, runs the gates on the bumped tree, and opens one PR againstdev. GitHub Actions updates stay with Dependabot.Engine
RepositoryPathResolver. Every repository name must be exactly one safe path segment and resolve strictly underTargetRoot; the engine resolves all targets before creating anything, so a bad descriptor fails the call with nothing touched on disk.gclo.checkoutpendingmarker is set the moment a clone's fetch lands and cleared only after checkout completes, so a clone whose cleanup failed is checked out again on the next pull instead of being reported "up to date" from equal commit tips.ViewModels
AccountsStore.Save/Deletenow write the vault first and compensate when the metadata write fails (previous token restored, or new entry removed; removed token re-stored). A failed compensation surfaces asAccountConsistencyExceptiondescribing the leftover state, which a plain retry reconciles. No path logs or surfaces a token.Why
Closes #43
Closes #44
Closes #45
Closes #46
Closes #47
Closes #52
Closes #53
After merge
v1.0.1-beta.1(dev channel) once the remaining known issues are fixed; #56 verifies self-update on it. #54 tracks making the UI suite a required check.workflow_dispatchrequires the file onmain); it is scheduled for Mondays 06:00 ET. The optionalDEPS_PATsecret is on the owner checklist (#7).Checklist
dotnet build gclo.slnx -p:Platform=x64 -warnaserrorsucceeds with 0 warningsdotnet test gclo.Engine.Testspasses (new engine behavior has tests) — 344 Engine + 65 CLI + 8 e2e; coverage gate 100% ongclo.Engine,gclo.ViewModels,gclodotnet format gclo.slnx --verify-no-changes --severity erroris cleangcloUI project — engine work lives ingclo.EngineREADME.md,docs/RELEASING.md,CONTRIBUTING.md)🤖 Generated with Claude Code
Dependency Review
The following issues were found:- ✅ 0 vulnerable package(s)
- ❌ 3 package(s) with incompatible licenses
- ✅ 0 package(s) with invalid SPDX license definitions
- ⚠️ 1 package(s) with unknown licenses.
See the Details below.License Issues
gclo.Engine/gclo.Engine.csproj
gclo/gclo.csproj
.github/workflows/release.yml
OpenSSF Scorecard
Scorecard details
Details
Details
Details
Details
Details
Details
Details
Scanned Files