Skip to content

Specification: Day 0 Update#6299

Draft
denelon wants to merge 1 commit into
microsoft:masterfrom
denelon:spec/day0-update
Draft

Specification: Day 0 Update#6299
denelon wants to merge 1 commit into
microsoft:masterfrom
denelon:spec/day0-update

Conversation

@denelon

@denelon denelon commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

📖 Description

Specification for the Day 0 Update feature — enabling WinGet to detect that it is outdated on first meaningful command execution and self-update before proceeding. This eliminates the chicken-and-egg problem where WinGet must already be current to use new functionality (e.g., winget configure), and removes the need for winget configure enable on fresh installs.

Key aspects:

  • A latestStableClientVersion field in preIndexed source metadata signals the latest stable client version
  • On first index access, the client compares its version and prompts to update if outdated
  • Self-update flow: notify user → exit → update via existing infrastructure → relaunch original command in new window with --wait
  • Group Policy controls for enterprise management (EnableDay0Update, ForceMinimumClientVersion)
  • COM API exposes status only (never prompts or auto-updates)

Authored with GitHub Copilot assistance.

🔗 References

Related Issues:

🔍 Validation

Spec document — no code changes to validate.

✅ Checklist

📋 Issue Type

  • Bug fix
  • Feature
  • Task
Microsoft Reviewers: Open in CodeFlow
Microsoft Reviewers: Open in CodeFlow

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@denelon denelon added the Issue-Feature This is a feature request for the Windows Package Manager client. label Jun 18, 2026
3. **If declined:**
- Record the dismissal (increment counter in local state).
- Proceed with the original command on the current version.
- If the command fails because the client is too old (e.g., unrecognized subcommand), show a targeted message: "This feature requires WinGet 1.29+. Run `winget upgrade Microsoft.AppInstaller` to update."

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How would the cli know which commands are supported in newer features if it's old?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My current thinking is that when we check for the newer version, we'll have that data. Then when we're dealing with a newer index or schema version, we can make some assumptions about stuff that the client doesn't understand, and it can be associated with the perceived to be available latest version. It may not get "all edge cases", but it's my current best assumption.


4. **If non-interactive** (`--disable-interactivity`, COM API, Configuration):
- Do not prompt. Proceed with current version.
- Emit a warning to stderr: "WinGet update available (1.30.1234.0). Run `winget upgrade Microsoft.AppInstaller` to update."

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Must respect --nowarn

The relaunch uses `--wait` to keep the new terminal window open after the command completes:

```
wt.exe --wait -- winget configure myconfig.yaml

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not winget resume (currently experimental) ?

wt.exe --wait -- winget configure myconfig.yaml
```

If Windows Terminal is not available, fall back to:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why route through wt.exe or cmd.exe instead of using ShellExecute to call the app execution alias, as if the user were calling winget configure myconfig.yaml --wait from the run dialog?

The update uses the existing `winget upgrade` infrastructure targeting `Microsoft.AppInstaller`:

```
winget upgrade --id Microsoft.AppInstaller --silent --accept-package-agreements --accept-source-agreements

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any concerns around passing --accept-package-agreements, --accept-source-agreements with regards to explicitly accepting the agreements for the user? Should we remove them?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Issue-Feature This is a feature request for the Windows Package Manager client.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants