Skip to content

User-level install infrastructure (PR-A): LocalRepoRegistry, verb fallbacks, logon task, ProjFS attach scripts#2020

Draft
tyrielv wants to merge 5 commits into
microsoft:masterfrom
tyrielv:tyrielv/local-repo-registry
Draft

User-level install infrastructure (PR-A): LocalRepoRegistry, verb fallbacks, logon task, ProjFS attach scripts#2020
tyrielv wants to merge 5 commits into
microsoft:masterfrom
tyrielv:tyrielv/local-repo-registry

Conversation

@tyrielv

@tyrielv tyrielv commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

PR-A — Co-shippable infrastructure for user-level install model

First PR of Plan 001. All changes are backward-compatible with the existing system installer — behavior is unchanged when GVFS.Service is running.

Stacked on PR #2010 (Mount: self-heal stale hook configurations).

Commits (5)

  1. LocalRepoRegistry — file-backed repo registry usable without GVFS.Service. Wire-compatible with the service's on-disk format. 18 unit tests.
  2. CLI verb fallbacks — MountVerb.RegisterMount, UnmountVerb.UnregisterRepo, ServiceVerb.TryGetRepoList fall back to LocalRepoRegistry when the service pipe is unavailable. Distinguishes not-found from I/O errors.
  3. PrjFlt attach fallback — GVFSVerb.TryEnableAndAttachPrjFltThroughService returns success when service is unavailable (boot-time task handles PrjFlt in user mode).
  4. LogonTaskRegistration — per-user scheduled task library for auto-mount at logon. Uses conhost.exe --headless to prevent console window flash. SHA-256 drift detection. 21 unit tests.
  5. EnableProjFSOnAllDrives — PowerShell script + task XML template + build helper for the SYSTEM-context boot-time PrjFlt attach task.

Testing

  • 857/857 unit tests pass (818 prior + 39 new)
  • Build clean
  • All fallback paths are no-ops when the service IS running (existing behavior preserved)

tyrielv added 5 commits June 12, 2026 08:26
Adds LocalRepoRegistration (POCO + source-gen JSON context) and
LocalRepoRegistry (instance class) to GVFS.Common. Wire-compatible
with the service's on-disk repo-registry format.

18 new unit tests. 836/836 pass (818 prior + 18 new).

Assisted-by: Claude Opus 4.8
Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
…navailable

MountVerb.RegisterMount, UnmountVerb.UnregisterRepo, and
ServiceVerb.TryGetRepoList fall back to LocalRepoRegistry when the
service pipe fails to open. Behavior unchanged when service is running.

UnmountVerb distinguishes not-found (benign no-op) from I/O errors
(propagated to caller) in the fallback path.

Assisted-by: Claude Opus 4.8
Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
…navailable

Returns true when the service pipe fails to open. In user-level
install model the boot-time EnableProjFSOnAllDrives task handles
PrjFlt. Removes now-orphaned StartServiceInstructions constant.

Assisted-by: Claude Opus 4.8
Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
Adds IScheduledTaskInvoker, SchTasksScheduledTaskInvoker, and
LogonTaskRegistration. Manages a per-user logon task that runs
gvfs.exe service --mount-all via conhost.exe --headless to prevent
console window flash. Drift detection via full SHA-256 hash marker.

21 new unit tests. 857/857 pass.

Assisted-by: Claude Opus 4.8
Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
… task

Three files under scripts/projfs-attach/: the PS1 script body,
the task XML template with placeholders, and build-task-xml.ps1
that base64-encodes the script into the template. None deployed
to disk; the installer embeds via -EncodedCommand.

Assisted-by: Claude Opus 4.8
Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant