V0.3.4/upstream fix#10
Conversation
Add manifest-driven hidden-asset recovery guidance for the app and library scaffold skills, mirror the install-fallback note in the repo README, and include the helper manifest/restoration script assets needed to fetch missing dotfiles from upstream in one step.
Make yolo/auto a first-class changelog mode that skips the confirmation gate and includes pending changes automatically, then record the same release story in CHANGELOG.md.
Greptile SummaryThis PR introduces a manifest-driven approach to shared asset recovery for the Confidence Score: 5/5Safe to merge — all findings are P2 (minor usability and process suggestions). No correctness defects or security issues were found. The two flagged items are: the Both Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[npx skills add installs skill] --> B{All manifest\nentries present?}
B -- Yes --> E[Proceed with scaffold generation]
B -- No --> C[Run restore-missing-shared-assets.ps1]
C --> D{Upstream fetch\nsucceeds?}
D -- Yes --> E
D -- No --> F[Halt — report failure\ndo not substitute placeholders]
E --> G[Copy assets/shared to project root\nexcluding shared.manifest.json]
G --> H[Apply placeholder substitution]
H --> I[Post-generation checklist\nvalidate manifest completeness]
|
| if ($DryRun) { | ||
| Write-Host "`n[DryRun] No files downloaded." -ForegroundColor Cyan | ||
| exit 0 | ||
| } |
There was a problem hiding this comment.
-DryRun always exits 0, even when files are missing
When the script is invoked with -DryRun and missing files are detected, it exits with code 0. Any CI pipeline or automated check that calls this script with -DryRun to audit completeness will never detect the gap from the exit code alone — it would need to parse stdout for the warning text. Exiting with code 1 when files are missing (even in dry-run mode) makes the script safe to use in -WhatIf-style pipeline steps.
| if ($DryRun) { | |
| Write-Host "`n[DryRun] No files downloaded." -ForegroundColor Cyan | |
| exit 0 | |
| } | |
| if ($DryRun) { | |
| Write-Host "`n[DryRun] No files downloaded." -ForegroundColor Cyan | |
| if ($missing.Count -gt 0) { exit 1 } | |
| exit 0 | |
| } |
Prompt To Fix With AI
This is a comment left during a code review.
Path: skills/dotnet-new-app-slnx/scripts/restore-missing-shared-assets.ps1
Line: 69-72
Comment:
**`-DryRun` always exits 0, even when files are missing**
When the script is invoked with `-DryRun` and missing files are detected, it exits with code `0`. Any CI pipeline or automated check that calls this script with `-DryRun` to audit completeness will never detect the gap from the exit code alone — it would need to parse stdout for the warning text. Exiting with code `1` when files are missing (even in dry-run mode) makes the script safe to use in `-WhatIf`-style pipeline steps.
```suggestion
if ($DryRun) {
Write-Host "`n[DryRun] No files downloaded." -ForegroundColor Cyan
if ($missing.Count -gt 0) { exit 1 }
exit 0
}
```
How can I resolve this? If you propose a fix, please make it concise.| if ($DryRun) { | ||
| Write-Host "`n[DryRun] No files downloaded." -ForegroundColor Cyan | ||
| exit 0 | ||
| } |
There was a problem hiding this comment.
-DryRun always exits 0, even when files are missing
Same issue as the dotnet-new-app-slnx copy: when -DryRun is combined with missing files the script exits 0, so any automated audit step that relies on the exit code will silently pass. Exiting 1 when files are absent keeps the dry-run safe to wire into pipelines.
| if ($DryRun) { | |
| Write-Host "`n[DryRun] No files downloaded." -ForegroundColor Cyan | |
| exit 0 | |
| } | |
| if ($DryRun) { | |
| Write-Host "`n[DryRun] No files downloaded." -ForegroundColor Cyan | |
| if ($missing.Count -gt 0) { exit 1 } | |
| exit 0 | |
| } |
Prompt To Fix With AI
This is a comment left during a code review.
Path: skills/dotnet-new-lib-slnx/scripts/restore-missing-shared-assets.ps1
Line: 69-72
Comment:
**`-DryRun` always exits 0, even when files are missing**
Same issue as the `dotnet-new-app-slnx` copy: when `-DryRun` is combined with missing files the script exits `0`, so any automated audit step that relies on the exit code will silently pass. Exiting `1` when files are absent keeps the dry-run safe to wire into pipelines.
```suggestion
if ($DryRun) {
Write-Host "`n[DryRun] No files downloaded." -ForegroundColor Cyan
if ($missing.Count -gt 0) { exit 1 }
exit 0
}
```
How can I resolve this? If you propose a fix, please make it concise.There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 738984e664
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| ## Yolo / Auto Mode | ||
|
|
||
| When the user's request contains `yolo` or `auto` (case-insensitive, anywhere in the message), the skill operates in full-autonomy mode: |
There was a problem hiding this comment.
Require explicit yolo/auto token before bypassing Step 3
Treating any message that contains auto anywhere as full-autonomy mode will unintentionally bypass the pending-change confirmation gate for normal requests like "automatically update the changelog". That can silently expand release scope to staged/unstaged/untracked changes even when the user did not ask for the special bypass mode, which contradicts the safety intent of Step 3 for concrete releases.
Useful? React with 👍 / 👎.
| $repoUrl = $manifest.upstream.repo # e.g. https://github.com/codebeltnet/agentic | ||
| $branch = $manifest.upstream.branch # e.g. main | ||
| $remoteRoot = $manifest.upstream.root # e.g. skills/dotnet-new-app-slnx/assets/shared | ||
| $localRoot = Join-Path $SkillRoot 'assets/shared' |
There was a problem hiding this comment.
Restore app hidden assets outside assets/shared
The restore script only checks and repairs assets/shared, but the app scaffold also depends on hidden files under assets/app (for example assets/app/.github/workflows/ci-pipeline.yml is required by skills/dotnet-new-app-slnx/SKILL.md Step 5). If the installer drops dot-prefixed paths, this script will report success while that required app workflow file is still missing, leading to incomplete or incorrect app scaffolds.
Useful? React with 👍 / 👎.
| $repoUrl = $manifest.upstream.repo # e.g. https://github.com/codebeltnet/agentic | ||
| $branch = $manifest.upstream.branch # e.g. main | ||
| $remoteRoot = $manifest.upstream.root # e.g. skills/dotnet-new-lib-slnx/assets/shared | ||
| $localRoot = Join-Path $SkillRoot 'assets/shared' |
There was a problem hiding this comment.
Restore library dot-prefixed templates beyond shared assets
The library restore script is scoped to assets/shared only, but the library workflow requires dot-prefixed templates under assets/library/.docfx (skills/dotnet-new-lib-slnx/SKILL.md Step 5). When installer truncation removes .docfx, the script will not detect or recover those files, so generation can proceed with a broken library template set.
Useful? React with 👍 / 👎.
This pull request significantly improves the robustness and automation of the .NET scaffold skills (
dotnet-new-app-slnxanddotnet-new-lib-slnx) by introducing a manifest-driven approach for restoring all required shared assets, including dotfiles. It also adds a PowerShell script to automatically restore missing assets from the upstream repository, updates documentation to reflect these changes, and expands the changelog tooling for safer automation.Manifest-driven asset recovery and automation:
assets/shared.manifest.jsonto bothdotnet-new-app-slnxanddotnet-new-lib-slnxskills, defining an authoritative list of all required shared scaffold files (including dot-prefixed files and folders) and their upstream source metadata. [1] [2]scripts/restore-missing-shared-assets.ps1PowerShell script to detect and restore any missing shared assets directly from the upstream GitHub repository using the manifest. The script halts generation if any file cannot be restored, ensuring no incomplete scaffolds.Guidance and documentation updates:
SKILL.mdfiles to:assets/shared.manifest.jsonis skill-internal and must never be copied into generated solutions. [1] [2]Changelog and tooling improvements:
CHANGELOG.mdto document the new manifest-driven asset recovery, script-based restoration, and expandedgit-keep-a-changelogyolo/auto mode, which now safely auto-drafts changelogs without confirmation prompts.dotnet-new-app-slnxanddotnet-new-lib-slnxto the skill install instructions inREADME.md.