fix(app): scope the UI test fixture to its token, never in an installed build #146

Merged
james.maes merged 1 commits from fix/145-ui-fixture-scope into main 2026-11-10 21:46:48 +00:00
Owner

What

  • The UI test fixture's git client asks the real client whether a folder is a repository, instead of answering "no" for every token.
  • An installed build (one with a Velopack app id) ignores GCLO_UITEST_FIXTURE.
  • The app logs one line when the fixture is enabled; a new UI test asserts it.

Why

Closes #145.

With the variable set, a real session treated every existing repository as missing, whatever the token; and an installed release build honoured a test seam without recording it.

How it was tested

  • Zero-warning x64 build with locked restore; 703 engine tests and 142 CLI tests pass; line coverage 100% on the three covered assemblies; dotnet format --verify-no-changes clean.
  • Not run yet: the UI suite, which is the test for this change (it drives the desktop, so it is batched). This pull request stays open until that run passes.

Checklist

  • Commits are signed and signed off (git commit -S -s)
  • Zero build warnings; format and lint are clean
  • Tests added or updated; the 100% coverage gate still passes (UI test added; UI suite run pending)
  • Docs updated for user-visible changes; threat model updated if the attack surface changed
  • No secrets, credentials, or personal data
  • New dependencies are justified below, or none were added (none)
  • Substantial AI assistance, if any, is noted here: written with Claude Code (Claude Fable 5.2)

🤖 Generated with Claude Code

## What - The UI test fixture's git client asks the real client whether a folder is a repository, instead of answering "no" for every token. - An installed build (one with a Velopack app id) ignores `GCLO_UITEST_FIXTURE`. - The app logs one line when the fixture is enabled; a new UI test asserts it. ## Why Closes #145. With the variable set, a real session treated every existing repository as missing, whatever the token; and an installed release build honoured a test seam without recording it. ## How it was tested - Zero-warning x64 build with locked restore; 703 engine tests and 142 CLI tests pass; line coverage 100% on the three covered assemblies; `dotnet format --verify-no-changes` clean. - **Not run yet: the UI suite**, which is the test for this change (it drives the desktop, so it is batched). This pull request stays open until that run passes. ## Checklist - [x] Commits are signed and signed off (`git commit -S -s`) - [x] Zero build warnings; format and lint are clean - [ ] Tests added or updated; the 100% coverage gate still passes (UI test added; UI suite run pending) - [x] Docs updated for user-visible changes; threat model updated if the attack surface changed - [x] No secrets, credentials, or personal data - [x] New dependencies are justified below, or none were added (none) - [x] Substantial AI assistance, if any, is noted here: written with Claude Code (Claude Fable 5.2) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
james.maes added 1 commit 2026-11-10 21:46:46 +00:00
With GCLO_UITEST_FIXTURE=1 the fixture's git client answered "not a
repository" for every folder, whatever the token, so a real session
started with the variable set treated every existing repository as
missing. The variable was also honoured by installed release builds,
and nothing recorded that it was in effect.

- The fixture asks the real git client whether a folder is a repository;
  its own clones write nothing, so the fixture token still always clones.
- An installed build (one with a Velopack app id) ignores the variable.
- The app logs one line when the fixture is enabled; a UI test asserts it.

Threat model: the interface row for the variable says what now holds.

Closes #145

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
james.maes force-pushed fix/145-ui-fixture-scope from f49a47a7f4 to 9fc4e8a5ec 2026-11-10 21:46:46 +00:00 Compare
Author
Owner

Rebased onto current main. All local gates pass on the rebased commit, including the UI suite that this change was held for: 881 engine, 164 CLI and 12 UI tests (the new one asserts the log line that says the fixture is enabled), 100% line coverage on the three gated assemblies, zero warnings, format clean.

Rebased onto current main. All local gates pass on the rebased commit, including the UI suite that this change was held for: 881 engine, 164 CLI and 12 UI tests (the new one asserts the log line that says the fixture is enabled), 100% line coverage on the three gated assemblies, zero warnings, format clean.
james.maes merged commit 46c6ca892a into main 2026-11-10 21:46:48 +00:00
Sign in to join this conversation.