Repository navigation
Stream project restore progress during winapp run - #789
Conversation
Build Metrics ReportBinary Sizes
Test Results✅ 5408 passed, 18 skipped out of 5426 tests in 752.0s (+17 tests, -73.1s vs. baseline) Test Coverage✅ 88.2% line coverage, 81.7% branch coverage · ✅ no change vs. baseline CLI Startup Time57ms median (x64, Try This BuildInstalls the MSIX for your architecture, replacing any previously installed build. Needs the GitHub CLI — the command offers to install it and sign you in if it is missing. & ([scriptblock]::Create((irm https://raw.githubusercontent.com/microsoft/winappCli/main/scripts/winapp-pr.ps1))) 789Switching between builds often?Put the tool on your PATH once: & ([scriptblock]::Create((irm https://raw.githubusercontent.com/microsoft/winappCli/main/scripts/winapp-pr.ps1))) -AddToPathThen this build is just: winapp-pr 789Run Updated 2026-09-10 05:07:32 UTC · commit |
There was a problem hiding this comment.
Pull request overview
Streams project restore progress alongside build output while preserving stdout for structured and quiet modes.
Changes:
- Adds live restore streaming with terminal-aware output.
- Expands restore-path tests and fake service support.
- Documents restore and build output behavior.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
ProjectRunService.cs |
Streams pre-build restore output. |
ProjectRunServiceTests.cs |
Tests streamed and inherited restore paths. |
FakeDotNetService.cs |
Simulates streaming output in tests. |
docs/usage.md |
Documents project restore output. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
de57385 to
3c6fd63
Compare
Alexandre Zollinger Chohfi (azchohfi)
left a comment
There was a problem hiding this comment.
The direction here is right, and on a classic .sln this works exactly as intended — restore progress streams, --no-restore is set correctly on the build, and --json stdout stays pure.
One blocker: on .slnx solutions this now surfaces an error MSB4126 on runs that succeed. It's a pre-existing latent failure that the old buffered call was hiding, so the streaming change is doing its job — but the failure itself needs fixing rather than displaying, since .slnx is what dotnet new sln produces by default on .NET 10 and every WinUI/Reactor template trips the condition. Found it running a Microsoft.UI.Reactor app in a two-project solution.
Also a smaller one: --quiet isn't quiet anymore for the restore pass.
PR Review — nmetulev-improve-run-progress vs origin/mainDecisionChanges required — the restore-progress change creates two user-visible regressions: Must fixQuiet mode emits normal restore progress
Ignored restore failures look fatal
Non-blockingQuiet-mode documentation promises suppressed command lines
Redirected restore output is wrapped instead of streamed as plain lines
What was exercised
|
Zach Teutsch (zateutsch)
left a comment
There was a problem hiding this comment.
Review attached above.
Honor quiet verbosity during project restores, avoid duplicate verbose invocations, and document JSON and quiet routing. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Use scoped disposal for the JSON and quiet restore stderr capture writers. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Zach Teutsch (@zateutsch) Addressed the review findings in the latest commits: quiet restores now use |
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
PR Review — nmetulev-improve-run-progress vs origin/mainDecisionChanges required — the new whole-solution restore can produce assets for a different MSBuild platform than the subsequent Must fixPlatform-less solution restore can poison the no-restore build
Non-blockingQuiet fallback warnings contradict the clean-stdout contract
What was exercised
|
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: b54e905a-d32e-4e13-8c6d-4da7f9d80335
…nto nmetulev-improve-run-progress
PR Re-Review (round 2)The branch advanced since the last review ( Prior findings — status
Remaining finding🟠 HIGH — Packed
Validation
Everything else (cli-ux, alternatives, necessity, ship-surfaces) was clean or resolved last round and is unchanged. 🤖 Generated with multi-dimensional pr-review (security + correctness re-review + code-path validation). |
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: b54e905a-d32e-4e13-8c6d-4da7f9d80335
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: b54e905a-d32e-4e13-8c6d-4da7f9d80335
|
Zach Teutsch (@zateutsch) Thanks for the re-review. I validated the packed-property case against the published CLI rather than the internal argument builder. Project mode deliberately rejects a single
The independent re-review did find one separate credential-redaction gap: malformed authenticated URLs could fail URI parsing and be returned unchanged. Commit |
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: b54e905a-d32e-4e13-8c6d-4da7f9d80335
PR Re-Review (round 3)Reviewed at Resolved since last round ✅
Still open🟠 HIGH — Packed
Everything else (cli-ux, alternatives, necessity, ship-surfaces) was clean or resolved earlier and is unchanged. 🤖 Generated with multi-dimensional pr-review (security + correctness re-review + code-path validation). |
Zach Teutsch (zateutsch)
left a comment
There was a problem hiding this comment.
One hanging problem from last review. Only finding, should be good to go once fixed.
|
Zach Teutsch (@zateutsch) I double-checked the remaining packed-
Fresh published-binary results: The supported syntax behaves correctly: The relevant validation suite also passes 21/21, including Because both examples in the finding are rejected before the cited code path, segment-aware stripping would add handling for an invalid state rather than fix a user-reachable regression. Could you please dismiss the changes-requested review or approve the current revision? |
Findings addressed.
## Description <!-- Briefly describe what this PR does and why --> Make lifecycle labels describe whether the agent has finished its work, rather than whether a reviewer has responded: - Reserve `agent-blocked` for feedback or CI the agent cannot finish without help, or missing author input. - Use `ready-for-review` when agent work and technical checks are complete, including while awaiting re-review of addressed feedback. - Use labels instead of automated lifecycle/status comments. Keep operational details in session checkpoints; necessary review-feedback replies remain required. - Keep pending approvals distinct without dismissing a human changes-request review or implying permission to merge. - Continue configured follow-through while requested re-review is pending. The initial independent assessment and ordinary validation/CI waits remain preparation work. ## Usage Example <!-- If this PR adds or changes commands, flags, or APIs, include a short code snippet --> Illustrative workflow decisions: | Situation | Lifecycle label | |---|---| | Feedback addressed and checks green; reviewer has not reassessed yet | `ready-for-review` | | Agent is fixing a finding or waiting for required CI | `agent-preparing` | | Agent cannot address feedback/fix CI with available access, or needs an author decision | `agent-blocked` | `ready-for-review` does not override GitHub's approval or merge requirements. Status belongs in the label, not a recurring PR progress comment. ## Related Issue <!-- Link to any related issues: Fixes #123, Closes #456, Related to #789 --> N/A — requested contributor-workflow policy clarification. ## Type of Change <!-- Keep the applicable line(s), delete the rest --> - 📝 Documentation ## Checklist <!-- Delete the ones that do not apply to your changes --> - [x] Validated the contributor skill's frontmatter, relative links, Markdown fences, and label references locally on Windows. - [x] `git diff --check` passes. ## Screenshots / Demo <!-- If applicable, add screenshots or GIFs demonstrating the changes --> N/A — contributor instructions only; no application or CLI runtime changes. ## Additional Notes <!-- Any additional information that reviewers should know --> The repository label was already renamed from `agent-ready-for-review` to `ready-for-review` with explicit authorization; existing memberships were preserved. Its descriptions and the active agents' instructions were updated to match. No full NativeAOT build was run for this contributor Markdown-only change. ## AI Description <!-- ai-description-start --> _This section is auto-generated by AI when the PR is opened or updated. To opt out, delete this entire section including the marker comments._ <!-- ai-description-end --> --------- Co-authored-by: Nikola Metulev <711864+nmetulev@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…rosoft#624) ## Description <img width="499" height="440" alt="image" src="https://github.com/user-attachments/assets/4d3a7629-2916-4539-9528-f0bbc18d6c6f" /> <img width="500" height="443" alt="image" src="https://github.com/user-attachments/assets/0f967a75-16a3-47e2-9b40-a2bdae699c11" /> <!-- Briefly describe what this PR does and why --> ## Usage Example <!-- If this PR adds or changes commands, flags, or APIs, include a short code snippet --> <!-- Example: ```bash winapp store app list ``` --> ## Related Issue <!-- Link to any related issues: Fixes microsoft#123, Closes microsoft#456, Related to microsoft#789 --> ## Type of Change <!-- Keep the applicable line(s), delete the rest --> - 🐛 Bug fix - ✨ New feature - 💥 Breaking change - 📝 Documentation - 🔧 Config/build - ♻️ Refactoring - 🧪 Test update ## Checklist <!-- Delete the ones that do not apply to your changes --> - [ ] New tests added for new functionality (if applicable) - [ ] Tested locally on Windows - [ ] Main [README.md](../README.md) updated (if applicable) - [ ] [docs/usage.md](../docs/usage.md) updated (if CLI commands changed) - [ ] [Language-specific guides](../docs/guides) updated (if applicable) - [ ] [Sample projects updated](../samples) to reflect changes (if applicable) - [ ] Agent skill templates updated in `docs/fragments/skills/` (if CLI commands/workflows changed) ## Screenshots / Demo <!-- If applicable, add screenshots or GIFs demonstrating the changes --> ## Additional Notes <!-- Any additional information that reviewers should know --> ## AI Description <!-- ai-description-start --> This pull request introduces a new sample demonstrating how to create a WinUI 3 application and window directly from Node.js, using the Microsoft.UI.Xaml controls projected into JavaScript. It includes necessary files like `main.js`, `package.json`, and a README for usage instructions. To run the sample, use the following commands: ```powershell npm install npm run restore npm start ``` <!-- ai-description-end --> --------- Co-authored-by: Nikola Metulev <nmetulev@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: nmetulev <711864+nmetulev@users.noreply.github.com> Copilot-Session: 1cf82a54-b9a0-4437-ab3f-ea9af28a68a8
## Description <!-- Briefly describe what this PR does and why --> Remove the large generated files that repeatedly conflict when parallel PRs change CLI commands. Generated npm wrappers and CLI schemas are now ignored build outputs, and the npm API documentation becomes a maintained, task-oriented guide at the same URL. Command definitions remain the source of truth. npm compilation, watch, and tests generate wrappers from an available CLI binary; with no binary, they build and run the Debug CLI using .NET. Integrated builds use their explicitly extracted live schema without rerunning those hooks. The published npm package still contains the generated JavaScript and TypeScript declarations; public CLI commands and npm APIs are unchanged. The fast, build-free plugin check validates structure, frontmatter, and links. The existing Windows post-build documentation check validates command examples against the freshly built CLI. Builds no longer rewrite the npm guide, and schema-extraction failures fail the build instead of succeeding with a warning. ## Usage Example <!-- If this PR adds or changes commands, flags, or APIs, include a short code snippet --> <!-- Example: ```bash winapp store app list ``` --> On Windows with Node and the .NET SDK installed: ```powershell Set-Location src\winapp-npm npm ci npm run compile npm test ``` Observed: with generated wrappers and both matching CLI binaries absent, npm built the Debug CLI, generated wrappers without a checked-in schema, and passed all 303 tests. Generated output stayed ignored. For machine-readable definitions of the installed CLI, use: ```powershell winapp --cli-schema ``` The maintained [npm guide](../docs/npm-usage.md) teaches common tasks and how to discover the complete typed API in the installed package. ## Related Issue <!-- Link to any related issues: Fixes #123, Closes #456, Related to #789 --> N/A. ## Type of Change <!-- Keep the applicable line(s), delete the rest --> - 📝 Documentation - 🔧 Config/build - ♻️ Refactoring - 🧪 Test update ## Checklist <!-- Delete the ones that do not apply to your changes --> - [x] New tests added for new functionality (if applicable) - [x] Tested locally on Windows - [x] Main [README.md](../README.md) updated (if applicable) - [ ] [docs/usage.md](../docs/usage.md) updated (if CLI commands changed) — N/A: CLI commands unchanged. - [ ] [Language-specific guides](../docs/guides) updated (if applicable) — N/A. - [ ] [Sample projects updated](../samples) to reflect changes (if applicable) — N/A. - [ ] Shipped skills updated in `plugins/winapp/skills/` (if CLI commands/workflows changed) — N/A: installed CLI workflows unchanged. ## Screenshots / Demo <!-- If applicable, add screenshots or GIFs demonstrating the changes --> N/A: nonvisual build and documentation changes; observed command behavior is described above. ## Additional Notes <!-- Any additional information that reviewers should know --> Fresh-checkout npm development requires Windows and the .NET SDK when no built CLI is available. Installing and using the published npm package does not acquire this requirement. `winapp --cli-schema` remains available; the repository JSON snapshot and generated documentation scripts are removed. Validation on Windows: - `Invoke-Pester -Path .\scripts\tests` — **passed, 253/253 tests**, with zero skipped or not run. Regressions cover generation without snapshots, failure propagation, build-free and live-schema plugin checks, documentation preservation, and retired schema links. - From `src\winapp-npm`, `npm run lint`, `npm run format:check`, `npm run compile`, and `npm test` — **passed; 303/303 npm tests**. Guide links are checked and every TypeScript example compiles against the actual public API. Tests also passed through the real no-binary Debug bootstrap. - `.\scripts\build-cli.ps1 -SkipTests -SkipMsix` — **passed on the final merged source**, publishing x64/ARM64 NativeAOT executables, the npm tarball, all four NuGet packages, and an ignored artifact schema. The maintained guide was unchanged and `docs\cli-schema.json` was not recreated. - `.\scripts\validate-llm-docs.ps1 -CliPath .\artifacts\cli\win-arm64\winapp.exe` — **passed**, including current command examples and plugin manifest versions. - `.\scripts\validate-mslearn-docs.ps1` — **passed**, with existing unrelated callout-style warnings. The npm guide retains its existing publishing status. - Actual final npm tarball — **passed** export/declaration checks, an exported `getWinappPath()` call, and its packaged native `--version` command. The published CLI's `--version` and `--cli-schema` also **passed inside Windows Sandbox**. The older-Node directory-resolution regression emulates the missing property; it is not a native Node 18 run. Full C# tests, UI end-to-end tests, sample suites, and MSIX packaging were not run locally; those remain covered by the PR's existing CI. --------- Co-authored-by: Nikola Metulev <711864+nmetulev@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Summary
dotnet restoreoutput, using dotnet's native terminal logger when interactive and raw line streaming when redirected--quietrestores quiet, preserve JSON stdout, redact displayed commands, and avoid duplicate verbose command outputPlatformfrom solution-scoped restores so configuration-free.slnxfiles do not emitMSB4126.slnxsample coverageValidation
ProjectRunServiceTestspassed in ReleaseWinUISolution.slnxrun restored, built, and launched withoutMSB4126; the solution restore omitted-p:Platformwhile the project build retained itgit diff --checkpassedEnvironment note
The complete
scripts\build-cli.ps1run reached NativeAOT publish but could not finish on this device because the Visual Studio Desktop Development for C++ linker workload is not installed.