All notable changes to this project will be documented in this file and UNRELEASED changes will be included in the next stable release! The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Update-NovaModuleTooland% nova updatenow split self-update failure details and recovery guidance across separate terminal lines, so long dependency errors stay readable instead of wrapping mid-sentence.Invoke-NovaTest,Test-NovaBuild, and% nova testnow resolve and import a supported installedPesterversion from5.7.1through5.10.0instead of using an unsupportedPester 6.xinstallation automatically.- Nova test workflows now fail early with a clear dependency error when only unsupported
Pester 6.xversions are available.
- Nova test workflows now fail early with a clear dependency error when only unsupported
- Nova test workflows now reuse an already loaded supported
Pester 5.xversion in the current PowerShell session before selecting a different installed version.- Repository CI no longer trips the
Pesterassembly loader by importing a gallery-installedNovaModuleToolsmodule, building the local module, and then switching to another supportedPesterversion in the same session.
- Repository CI no longer trips the
3.3.1 - 2026-07-15
Invoke-NovaTest,Test-NovaBuild, and% nova testnow resolve and import a supported installedPesterversion from5.7.1through5.10.0instead of using an unsupportedPester 6.xinstallation automatically.- Nova test workflows now fail early with a clear dependency error when only unsupported
Pester 6.xversions are available.
- Nova test workflows now fail early with a clear dependency error when only unsupported
- Nova test workflows now reuse an already loaded supported
Pester 5.xversion in the current PowerShell session before selecting a different installed version.- Repository CI no longer trips the
Pesterassembly loader by importing a gallery-installedNovaModuleToolsmodule, building the local module, and then switching to another supportedPesterversion in the same session.
- Repository CI no longer trips the
3.3.0 - 2026-06-16
- The maintained Agentic Copilot guidance shipped by Nova now uses stricter release, review, testing, and analyzer rules across prompts, skills, agents, and scaffold mirrors.
- The repository and scaffolded guidance now stop earlier when required guidance files or required skills are missing, keep private-helper test ownership aligned with mirrored
tests/private/<domain>/<Helper>.Tests.ps1paths, and require analyzer fallback guidance to reuse the repository wrapper settings. - The scaffold-sync guardrail test now verifies those release/review/test guidance expectations so future scaffold updates stay aligned with the maintained source files.
- The repository and scaffolded guidance now stop earlier when required guidance files or required skills are missing, keep private-helper test ownership aligned with mirrored
Test-NovaBuildand% nova test -bnow complete with a visible warning when a project has no*.Integration.Tests.ps1files, instead of failing the build-validation flow.- The guidance explains where build-validation tests belong, tells users to add at least one
*.Integration.Tests.ps1file before rerunningTest-NovaBuild, and reminds users to keep unit tests inInvoke-NovaTest.
- The guidance explains where build-validation tests belong, tells users to add at least one
- The packaged example scaffold now includes a minimal
*.Integration.Tests.ps1file that resolves the generatedProjectName, imports the built module, and validatesGet-ExampleGreeting, sonova init -eprojects can passTest-NovaBuildeven after the scaffold rewritesproject.json.
3.2.0 - 2026-05-31
project.jsonnow has a single authoritative JSON schema hosted athttps://www.novamoduletools.com/schema/v{major}/project.json.Invoke-NovaBuildexports the schema todocs/schema/v{major}/project.jsonduring build, creating the directory when missing.nova initinjects"$schema": "https://www.novamoduletools.com/schema/v{major}/project.json"into every scaffolded project.nova initalso writes.vscode/settings.jsonmappingproject.jsonto the hosted schema URL so VS Code trusts the remote schema automatically without prompting.- VS Code picks up the schema automatically to provide field validation, autocomplete, and hover descriptions while editing
project.json. - The two partial internal schemas (
Schema-Build.json,Schema-Pester.json) are removed;Schema-Project.jsonis the new single source.
- Added
Invoke-NovaTestas the dedicated NovaModuleTools unit-test command.% nova testnow routes toInvoke-NovaTest.Invoke-NovaTestwrites unit-test NUnit output toartifacts/UnitTestResults.xmland remains the code-coverage entry point.Invoke-NovaTestnow accepts a guarded-PesterConfigurationOverridehook for runtime-only unit-test data injection throughRun.Container, includingPSCredentialvalues supplied throughNew-PesterContainer -Data.
Get-NovaProjectInfonow aligns its installed-version views with the existing CLI version contract.-Installednow returns the installed version of the current project/module from the local module path.-InstalledNovaVersionnow returns the installedNovaModuleToolsmodule name and version from PowerShell.
Update-NovaModuleToolnow suggestsGet-NovaProjectInfo -InstalledNovaVersionafter a successful self-update so the PowerShell verification step checks the installed NovaModuleTools version directly.Test-NovaBuildnow focuses on build-validation integration tests instead of acting as the combined unit-and-build test entry point.% nova test --buildand% nova test -bnow route toTest-NovaBuild.Test-NovaBuildnow writes build-validation NUnit output toartifacts/TestResults.xmlwithout enforcing source coverage.
- CI, release, packaging, and repository quality workflows now run
Invoke-NovaTestbeforeTest-NovaBuildwhen tests are not skipped.
- Removed boolean
Package.Latestcompat shim deprecated in 2.4.0. SettingPackage.Latesttotrueorfalsenow throwsNova.Validation.InvalidPackageLatestPolicywith a migration message. Use"always"or"never"instead. - Removed
booleanfrom the JSON schemaanyOfforPackage.Latestinsrc/resources/Schema-Project.jsonanddocs/schema/v3/project.json. VS Code and schema-aware editors now reject boolean values for this field at edit time.
Publish-NovaModulenow keeps its completion summary available after local publish import or CI session refresh steps reload the module, so local publish flows no longer fail with missing private release-helper functions at the end of a successful publish.Test-NovaBuildand% nova testnow keep the Nova progress display visibly active during long Pester runs instead of appearing stuck on one step while tests continue in the background.- During the long Pester phase, Nova now uses the discovered test count plus completed test results to drive the progress bar, so the visible percentage tracks real test completion instead of elapsed time.
- The progress text now stays simple while the bar itself reflects the real test-driven completion state.
- The configured Pester output still flows live so
project.jsonsettings such asPester.Output.Verbosity = "Detailed"remain visible.
- Progress-enabled private workflows now have stronger mirrored progress-contract tests, and the repository adds a guardrail test so future
Write-Progressworkflows cannot land without matching test ownership. Package.Typesvalues inproject.jsonnow report a human-readable validation error in VS Code instead of showing the raw regex pattern. VS Code now shows the accepted values (NuGet,Zip,.nupkg,.zip) directly in the error.
3.1.0 - 2026-05-24
- Added
Invoke-NovaAgenticCopilotScaffoldand% nova copilotfor applying or refreshing Nova's managed Agentic Copilot scaffold in an existing project root.- The workflow reads
ProjectNameandDescriptionfromproject.json, requires aShortNameon every run for token replacement, and fails clearly when the project metadata or short name is invalid. - Nova refreshes only the approved managed Agentic Copilot paths under
.github/plusAGENTS.mdandCONTRIBUTING.md, whileREADME.md,CHANGELOG.md, andRELEASE_NOTE.mdare created only when they are missing. - The new cmdlet and CLI route prompt before overwriting managed scaffold content by default, and support non-interactive execution only through
-OverrideWarning/--override-warning/-o.
- The workflow reads
- Added
terminal-ux-designto Nova's repository-local and scaffolded Agentic Copilot guidance.- The new guidance combines Atlassian's 10 design principles for delightful CLIs with Jakob Nielsen's 10 usability heuristics for user interface design, and applies them to both the PowerShell cmdlet surface and any unix-style CLI alias surface (such as
% nova) as terminal-first user interfaces. - The new skill ships with a "two surfaces, two conventions" framing, a shared mapping table for concrete PowerShell cmdlet and CLI alias UX mechanisms, a universal instruction that points terminal-facing changes at the skill, and updated architect, implementation, and review agent entry points.
- The new guidance combines Atlassian's 10 design principles for delightful CLIs with Jakob Nielsen's 10 usability heuristics for user interface design, and applies them to both the PowerShell cmdlet surface and any unix-style CLI alias surface (such as
Deploy-NovaPackagenow shows a concise resolved-upload summary before execution, reports progress while multiple artifacts are uploading, and prints a short completion summary with a suggested verification step after successful raw uploads.Get-NovaProjectInfonow fails with clearer recovery guidance when-Pathdoes not exist, points to a file, or the target folder is missingproject.json.Get-NovaUpdateNotificationPreference -Verbosenow explains whether Nova is reading a stored preference or the built-in default, and the command help now points read-only PowerShell users to the matching% nova notificationworkflow.Initialize-NovaModulenow shows scaffold progress, ends with the created project root plus the next suggested cmdlet, and fails with clearer guidance when the target project folder already exists.Install-NovaClinow prints the installed launcher path, suggests the next command to run, and gives a clearerPATHwarning when the destination directory is not yet available from the shell.Invoke-NovaAgenticCopilotScaffoldnow shows apply progress, ends with the project root plus suggested review and validation steps, and fails with clearer cancellation guidance when the overwrite warning is declined.Invoke-NovaBuildnow shows progress for the main build phases, ends with the output module directory plus the next suggested validation step, and explains the refreshed session when-ContinuousIntegrationreloads the built module.Invoke-NovaClinow treats blank command input as root help, reports unknown commands with clearer recovery guidance, and ships a dedicated PlatyPS help topic for the PowerShell wrapper surface.Invoke-NovaReleasenow shows progress for the main release phases, ends with the publish target plus a next-step hint, and uses a plan summary instead of a success summary when-WhatIfpreviews the release.New-NovaModulePackagenow shows progress for build validation and artifact creation, ends with the package target plus the next suggested deployment step, and uses a package-plan summary in-WhatIfmode.Publish-NovaModulenow shows progress for build validation, publish, local import, and CI restore phases, ends with the publish target plus a suggested verification step, and uses a publish-plan summary in-WhatIfmode.Set-NovaUpdateNotificationPreferencenow ends with a clear success or preview summary, prints the settings file path, suggestsGet-NovaUpdateNotificationPreferenceas the next verification step, and gives a more actionable validation error when no enable/disable switch is supplied.Test-NovaBuildnow shows progress across the main test phases, ends with the result file path plus a coverage summary and next-step hint when tests pass, uses a test-plan summary in-WhatIfmode, and fails with more actionable guidance when Pester or coverage checks fail.Update-NovaModuleToolnow ends with a visible up-to-date, preview, cancelled, or updated summary, skips prerelease confirmation during-WhatIf, shows progress for the actual self-update step, and suggestsGet-NovaProjectInfo -Installedafter a successful update.Update-NovaModuleVersionnow ends with a visible preview, cancelled, or updated summary, prints the resolved version file plus the detected/applied release label, shows progress while writingproject.json, and suggests the next command to run after the bump.
Test-NovaBuildnow expands configured Pester coverage globs into concrete source files before invoking Pester, so nested helpers remain measurable inartifacts/coverage.xmlwhile repository and scaffoldedproject.jsondefaults can stay on the simplersrc/private/**/*.ps1entry.- PowerShell command help
RELATED LINKSnow use valid PlatyPS Markdown links and point to shipped help topics instead of GitHub blob pages.
3.0.1 - 2026-05-18
- Website layout and copy now keep expanding with the browser width instead of stopping at fixed max-width caps on wide windows; the shared site stylesheet no longer limits the outer page shell, guide intros, leads, section headings, or guide body text to narrow fixed widths.
- The command cheat sheet now keeps the "Set up a project" section balanced by summarizing scaffold extras instead of repeating the full internal Agentic guidance list.
- The getting-started guide now splits the Agentic quickstart explanation into shorter paragraphs so the scaffold flow stays readable on the site.
- The core workflows guide now splits the scaffold and Agentic starter explanation into shorter paragraphs so the page stays readable on the site.
- The command cheat sheet now stacks the three "Set up a project" cards vertically so the section reads top-to-bottom without a missing grid slot.
- The Agentic Copilot starter shipped by
nova initno longer tells generated projects to use arun.ps1quality wrapper that the template does not include.- The scaffold now points generated documentation and agent guidance to the repository quality loop wording plus the existing analyzer and
Test-NovaBuildentrypoints instead.
- The scaffold now points generated documentation and agent guidance to the repository quality loop wording plus the existing analyzer and
nova init --examplenow ships the packaged example with source-mirrored tests andPester.CodeCoverage.Enabled = trueby default.- The example scaffold now runs
Test-NovaBuildagainstsrc/**/*.ps1without requiring a prior build, and the bundled docs describe that source-first coverage flow.
- The example scaffold now runs
3.0.0 - 2026-05-17
Initialize-NovaModuleand% nova initnow offer an optional interactive Agentic Copilot starter package for both the minimal and example scaffold flows.- The new prompt appears after the Git question, defaults to
No, and adds one shared Nova-maintained starter tree when enabled. - Example scaffolds now merge the existing example README with the Agentic starter README instead of flattening the example guide into the generic starter file.
- The starter tree is now generated from a filtered mirror of Nova's own agentic
.github/files, with a dedicated sync script and drift test so future scaffolds anddiststay aligned with the maintained source guidance. - The generated architect/design prompt now requires final design packages and issue/work item drafts to be returned as copy-ready Markdown using the project Markdown authoring guidance.
- The generated guidance now explicitly keeps Agentic Copilot projects on the Nova build model, treats
.psm1/.psd1files as generateddistoutput, requires project test validation to run throughTest-NovaBuildinstead of directInvoke-Pester, requires PlatyPS-compatible help for public commands/classes, expects one focused source-mirrored test file for every new or changedsrc/**/*.ps1file, tells agents to honorproject.jsonManifest.PowerShellHostVersionwhen writing PowerShell code and tests, and now asks for a short project name so placeholders such asInvoke-<ShortName>*can be replaced in the generated starter files.- The generated guidance now keeps local
run.ps1quality loops ordered as ScriptAnalyzer,Invoke-NovaBuild, thenTest-NovaBuild, and tells agents to fix ScriptAnalyzer findings reported byrun.ps1instead of excluding, suppressing, or handing them off unresolved. - The generated guidance now points agents to the documented PSScriptAnalyzer workflow, using
./scripts/build/Invoke-ScriptAnalyzerCI.ps1and./run.ps1as the normal entrypoints and reserving directInvoke-ScriptAnalyzerfor focused local checks that reuse repo-approved settings. - The generated PowerShell guidance now requires public files to keep one top-level function per file, requires private files to keep at most one externally called function per file, keeps any extra private functions limited to related same-file top-level support helpers whose file names match the owning function, forbids nested function declarations inside PowerShell functions, limits the
Invoke-<ShortName>*/Get-<ShortName>*/Update-<ShortName>*naming guidance to public commands, and tells private helpers to avoid those public-style names in favor of clear implementation-focused helper names. - The generated guidance now expresses PowerShell source/helper-script maintainability rules through
code-quality-matrix.instructions.mdand keeps test-specific design guidance in the testing instruction/skill files.- The generated guidance now requires
docs/<ProjectName>/en-US/*.mdto stay valid PlatyPS help with YAML metadata and build-compatible structure, tells agents to use the documentedNew-MarkdownCommandHelp/Update-MarkdownCommandHelp/Test-MarkdownCommandHelpworkflow instead of replacing command help with plain Markdown that breaksnova build, and requires a matching help file for every new public entry point in the same change. - The generated PowerShell guidance now requires agents to review every changed or generated text file before handoff and normalize the file ending to exactly one trailing newline with no extra blank lines at the bottom.
- The starter now also ships a generated
scripts/build/Test-TextFileFormatting.ps1helper and, when project tests are enabled, atests/TextFileFormatting.Tests.ps1guardrail so trailing blank-line violations failTest-NovaBuildinstead of relying on instructions alone.
- The generated guidance now requires
- When Git is enabled during either scaffold flow, Nova now creates or updates a default
.gitignorein the generated project root and appends only the missing Nova-managed artifact entries instead of overwriting existing ignore rules. Initialize-NovaModuleand% nova initnow check for newer NovaModuleTools releases before the first interactive scaffold question and reuse the same non-blocking update warning behavior already used by build.
- The generated guidance now keeps local
- The new prompt appears after the Git question, defaults to
Test-NovaBuildand% nova testnow enforcePester.CodeCoverage.CoveragePercentTargetfromproject.jsonwhenCodeCoverage.Enabledistrue, failing the test run when measured coverage drops below the configured target.- Added a non-blocking
scripts/build/Get-TestMirrorStatus.ps1helper that reports source files undersrc/public/,src/private/, andsrc/classes/without a matching mirrored test file undertests/, to support the migration to the source-mirrored, dot-source-first test layout. - Added mirrored, dot-source-first Pester test files for scaffold and update private helpers (
src/private/scaffold/*.ps1andsrc/private/update/*.ps1), so each unit-level helper now has a focused test file undertests/private/scaffold/ortests/private/update/instead of being covered only through broad legacy coverage files. - Added mirrored, dot-source-first Pester test files for build and shared private helpers (
src/private/build/*.ps1,src/private/build/manifest/*.ps1, andsrc/private/shared/*.ps1), so each unit-level helper now has a focused test file undertests/private/build/,tests/private/build/manifest/, ortests/private/shared/instead of being covered only through broad legacy coverage files. - Added mirrored, dot-source-first Pester test files for CLI private helpers (
src/private/cli/*.ps1), so most CLI argument parsers, prompt helpers, and per-command CLI wrappers now have a focused test file undertests/private/cli/. Large cross-cutting CLI orchestrators (InvokeNovaCliCommandRoute.ps1,GetNovaCliArgumentRoutingState.ps1,FormatNovaCliCommandHelp.ps1,ConfirmNovaCliAction.ps1,GetNovaCliInvocationContext.ps1) stay covered by the existing cross-cutting CLI tests. - Added mirrored, dot-source-first Pester test files for release private helpers (
src/private/release/*.ps1), so most release, publish, and version-update helpers (local publish path resolution, publish parameter mapping, version label inference, version part calculation, prerelease label handling, release request shaping, and per-step write/import helpers) now have a focused test file undertests/private/release/. Multi-step release/publish/version-update workflow orchestrators (InvokeNovaReleaseWorkflow.ps1,InvokeNovaPublishWorkflow.ps1,GetNovaVersionUpdateWorkflowContext.ps1) stay covered by the existing cross-cutting release tests. - Added mirrored, dot-source-first Pester test files for package private helpers (
src/private/package/*.ps1), so most package metadata, archive-content, NuGet/Zip artifact, upload option, upload target, upload header/auth, upload file-resolution, upload request, and per-type upload helpers now have a focused test file undertests/private/package/. Multi-step package workflow orchestrators (InvokeNovaPackageWorkflow.ps1,InvokeNovaPackageUploadWorkflow.ps1,GetNovaPackageWorkflowContext.ps1,GetNovaPackageUploadWorkflowContext.ps1,InvokeNovaPackageArtifactCreation.ps1,NewNovaPackageArtifacts.ps1) stay covered by the existing cross-cutting package tests. - Added mirrored, dot-source-first Pester test files for every public command (
src/public/*.ps1), so each command (Invoke-NovaBuild,Test-NovaBuild,New-NovaModulePackage,Initialize-NovaModule,Get-NovaProjectInfo,Get-/Set-NovaUpdateNotificationPreference,Install-NovaCli,Invoke-NovaCli,Update-NovaModuleTool,Update-NovaModuleVersion,Deploy-NovaPackage,Publish-NovaModule,Invoke-NovaRelease) now has a focused command-surface test undertests/public/covering parameter forwarding, delegation to its workflow context/workflow helpers, andShouldProcess/-WhatIfbehavior without duplicating private helper coverage. - Restored measured code coverage to the configured 99% target after the test-layout migration by adding mirrored, dot-source-first tests and branch coverage extensions across the remaining gap files in
src/private/quality/,src/private/package/,src/private/release/,src/private/scaffold/,src/private/build/, andsrc/private/shared/. The full suite now reports 99% line coverage againstsrc/**/*.ps1with no dist-folder dependency in any test file.
- Removed the pre-migration broad coverage-bucket suites (
CoverageGaps*,CoverageCompletion*,Remaining*Coverage*, broadNovaCommandModel*). The mirroredtests/public/andtests/private/<domain>/suites added in now own that coverage, and the restored 99% measured coverage confirms no regression, so the parkedtests/_legacy/reference copies are no longer needed. - Migrated the remaining mirrored private-helper tests (
tests/private/update/,tests/private/quality/,tests/private/build/InvokeNovaBuildWorkflow.Tests.ps1, andtests/private/scaffold/) off the legacyImport-Module dist + InModuleScopepattern to the dot-source-first model, so the full mirrored test suite runs againstsrc/**/*.ps1directly and does not require a priorInvoke-NovaBuild. - Removed the dist-requiring integration and guardrail tests (
Module,OutputFiles,BuildOptions,CiCoverage,CliHelperCoverage,CliSharedParser,PackageLatestPolicy,PreambleBuild,UpdateNotification) and their*TestSupport.ps1sidecars now that the mirrored suites cover the same behavior andnova testno longer depends ondist/NovaModuleToolsbeing built first. - Test-loading guidance for NovaModuleTools' own tests and for generated Agentic Copilot scaffolds now follows a source-mirrored, dot-source-first pattern: new mirrored tests dot-source the relevant
src/**/*.ps1files directly inBeforeAllinstead of importing the builtdistmodule or wrapping assertions inInModuleScope, so tests run against source files and JaCoCo coverage references real source paths. project.jsonPester.CodeCoverage.Enabledistruewith a99percent target that the migrated, source-mirrored test suite now satisfies; this finalizes the temporary disable from the test-layout migration.- Refactored the current branch's source-mirrored test batch into per-file
*.TestSupport.ps1sidecars and data-driven assertions where needed, so the migrated tests keep Code Health at 10 without falling back to broad legacy buckets or dist-module loading. - The architect/design flow now surfaces settled vs unresolved design items before finalization, offers explicit choices for full finalization vs design-package-only handoff, clarifies how to use design notes versus the paste-ready GitHub issue draft, and requires finalization output to follow the project Markdown authoring guidance.
ProjectTemplate.jsonand the packaged exampleproject.jsonnow include Nova's default PesterCodeCoverageblock withEnabled=false, sharedsrc/coverage paths, JaCoCo output, and a90percent target so new projects can opt into coverage without hand-authoring the configuration.Invoke-NovaModuleToolsCI.ps1now delegates the full test run to a singleTest-NovaBuildcall; the previous secondInvoke-Pesterpass and post-run Cobertura source-path remapping step have been removed.- CodeScene coverage upload now uses JaCoCo format instead of Cobertura and uploads both
line-coverageandbranch-coveragemetrics in a single CI run; the helper script auto-discoversartifacts/coverage.xmlinstead of scanning for*.cobertura.xmlfiles. Tests.ymlcoverage-gate step now matches**/coverage.xmlinstead of**/pester-coverage.cobertura.xmlto align with the new JaCoCo artifact path.
Test-NovaBuildand% nova testno longer emitRemove-Item -Recurseprogress bars during the Pester run;$global:ProgressPreferenceis saved and restored around the test execution so CI logs stay clean.- Code coverage in
Test-NovaBuildnow runs against the source files, instead of the builtdist/<ModuleName>/<ModuleName>.psm1file so measured coverage percentages and line numbers align with the deployed module. Invoke-CodeSceneAnalysis.ps1now normalizes Pester's JaCoCo output before upload so the<class sourcefilename>and<sourcefile name>entries are bare filenames andpackage + sourcefileresolves to real repository paths. This fixes the CodeScenecs-coverage uploadfailure "The coverage data does not contains any records related to the current repo" that appeared after the source-mirrored coverage migration.- The pull-request CodeScene coverage gate now normalizes downloaded JaCoCo coverage artifacts before running
cs-coverage check, so PRs no longer report0.0%coverage across the board because of unnormalizedpackage + sourcefilepaths. Invoke-CodeSceneAnalysis.ps1now only invokes thecs-coverage upload … --metric branch-coveragestep when the JaCoCo report actually contains<counter type="BRANCH">entries, so Pester reports that only emit line counters no longer fail the CodeScene step with "Requested metric is not present in coverage data".- Pester coverage configuration now uses explicit private-folder depth globs instead of
src/private/**/*.ps1, so nested helpers such assrc/private/build/manifest/andsrc/private/quality/duplicates/are included inartifacts/coverage.xmlduring the fullTest-NovaBuildrun.
2.4.0 - 2026-05-10
- Added a repository-local agentic coding setup under
.github/for Copilot/AI-assisted repository work.- Includes repository instructions, focused agent role definitions, repo-specific skills, and reusable task prompts.
- Aligns the agent guidance with Nova's existing PowerShell, Pester, CodeScene, GitHub Actions, and release conventions.
- Adds a discussion-first architect flow so
architect.agent.mdtogether withdesign-change.prompt.mdnow keeps the early phase conversational, asks clarifying questions, presents design directions, and only finalizes the scoped solution and GitHub issue draft after the discussion is complete. - Requires architect/design flows to treat out-of-scope cuts and deferred work as proposals that must be confirmed by the user before they become part of the final scope or issue draft.
- Includes branch-aware Conventional Commit guidance that derives ticket references from
$GIT_BRANCH_NAMEand keeps commit suggestions concise and English-only. - Treats CodeScene Code Health as authoritative, requires safeguard checks before commit/PR readiness, and carries the repository's trailing-newline formatting rule into the agent flow.
- Keeps local agentic work moving silently when CodeScene tooling is unavailable on a contributor machine, while pull requests and CI remain the effective CodeScene gate.
- Adds repository-local PowerShell style guidance for indentation, spacing, braces/wrapping, and blank-line usage.
- Adds a dedicated docs-site agent and documentation-separation guidance so website docs keep a clear CLI-vs-cmdlet split.
- Makes the repository agent files valid Copilot custom-agent profiles by adding the required YAML frontmatter so they load correctly in
/agent. - Makes the release-manager flow own PR-template-based release summaries and removes the old standalone PR-description prompt.
- Adds reusable markdown-authoring guidance so copy-ready Markdown output can use safe outer
~~~fences without breaking inner triple-backtick code blocks. - Aligns the repository guidance with actual Copilot CLI formats by using
.github/copilot-instructions.md,.github/instructions/*.instructions.md, and.github/skills/<skill-name>/SKILL.md, while keeping.github/prompts/*.prompt.mdas explicit prompt templates. - Makes the relevant agent and prompt outputs explicitly point to the
markdown-authoringskill when they produce Markdown summaries or UI-ready Markdown text. - Adds focused CodeScene skills for refactoring with Code Health and for safeguarding AI-touched code before commit or PR readiness, instead of overloading the broader
codescene-qualityskill.
- Includes branch-aware Conventional Commit guidance that derives ticket references from
- Added a root-level
RELEASE_NOTE.mdthat is separate fromCHANGELOG.md.CHANGELOG.mdremains the exhaustive release history.RELEASE_NOTE.mdnow captures only public cmdlet, CLI, configuration, and migration-impacting changes, including backfilled summaries for the existing released versions inCHANGELOG.md.Tests.ymlnow validates both files, andPublish.ymlnow finalizes both files during stable release preparation.- The public release-notes page now renders
RELEASE_NOTE.mdinstead of the full changelog feed.
- The public release-notes page now renders
Package.Latestnow supports policy values:"never","stable", and"always"."stable"keeps the floatinglatestalias pinned to stable package versions.- Legacy boolean values still work for now and map to
"always"/"never"for backward compatibility.
- Release-history handling now uses a separate root-level
RELEASE_NOTE.md.CHANGELOG.mdremains the exhaustive release history.RELEASE_NOTE.mdnow captures only public cmdlet, CLI, configuration, and migration-impacting changes, including backfilled summaries for the existing released versions inCHANGELOG.md.Tests.ymlnow validates both files, andPublish.ymlnow finalizes both files during stable release preparation.- The public release-notes page now renders
RELEASE_NOTE.mdinstead of the full changelog feed.
- The public release-notes page now renders
- Boolean
Package.Latestvalues are deprecated and will be removed in the next major version.
- Removed the repository's Codecov integration in favor of CodeScene-only coverage reporting.
Tests.ymlno longer uploads CI coverage results to Codecov.- The standalone
codecov.ymlconfiguration has been removed from the repository.
- Clarified contributor release/test guidance in
README.mdso repository and CI test runs still installPester 5.7.1explicitly, while the publishedNovaModuleToolsmanifest continues to declare that dependency for installed workflows.
2.3.1 - 2026-05-08
- Fixed
nova bumpandUpdate-NovaModuleVersionso nested project folders now reuse parent Git repository history for bump inference instead of silently falling back toPatch. - Fixed
nova bumpandUpdate-NovaModuleVersionso non-git bump flows now stop with a clear override-warning requirement instead of silently presentingPatch | Commits: 0as if it were an inferred result.
2.3.0 - 2026-05-06
- Make prerelease self-update confirmation default to
No.Update-NovaModuleTool,Update-NovaModuleTools, and% nova updatenow require an explicitYbefore a prerelease self-update continues, so pressing Enter cancels the update instead of accepting it.
- Render bold text in white across the hosted HTML documentation.
- Emphasized
<strong>and<b>text now stands out more clearly when scanning docs pages.
- Emphasized
- Restore Nova-managed project test runs in CI/CD after
2.2.0dropped the implicitPesterdependency.- CI/CD environments no longer need custom logic to install
Pesterthemselves before running project tests. - Published
NovaModuleToolsmanifests once again pull inPester 5.7.1implicitly so existing CI/CD test flows keep working without extra installation logic.Test-NovaBuildfails with a clear dependency error whenPesteris not installed.
- CI/CD environments no longer need custom logic to install
2.2.0 - 2026-05-06 [YANKED]
This release was yanked because it removed the implicit Pester dependency, before Nova's CI/CD test flow installed Pester explicitly. Projects using NovaModuleTools 2.2.0 could fail to run tests in CI/CD unless maintainers added their own Pester installation step. The regression was fixed in 2.3.0.
- Align
Invoke-NovaReleasePowerShell parameters withPublish-NovaModuleand% nova release.- PowerShell release scripts can now pass
-Local,-Repository,-ModuleDirectoryPath, and-ApiKeydirectly. - Deprecated
-PublishOptionusage should be changed in existing CI/CD automation as soon as possible. Keep stableUpdate-NovaModuleVersion/% nova bumpreleases on the SemVer major-zero development line. - When the current stable version is0.y.zand commit history implies a breaking change, Nova now plans the next minor version instead of auto-jumping to1.0.0.
- PowerShell release scripts can now pass
- Stable
0.y.zbump results now print one warning about manually setting1.0.0once the software is stable, while breaking-change bumps still report the detectedMajorlabel. - Make
Update-NovaModuleVersion -Preview/% nova bump --previewenter the preview track deterministically from stable versions.- Stable versions now always become the next patch preview, for example
0.2.0 -> 0.2.1-preview, instead of reusing semantic history inference for the semantic core. - Existing prerelease versions still keep their current semantic core and continue the prerelease sequence.
- Running the bump without
-Previewstill finalizes or advances prerelease versions by Nova's normal semantic rules.
- Stable versions now always become the next patch preview, for example
Invoke-NovaReleaseparameters that differ fromPublish-NovaModuleand% nova releasesuch as-Local,-Repository,-ModuleDirectoryPath, and-ApiKeyare now the primary PowerShell release parameters, while-PublishOptionis deprecated and will be removed in the next major version.
- Fix the release workflow so repository publish steps run against the freshly built
dist/module in each CI PowerShell process.Publish.ymlnow imports the built module beforeInvoke-NovaReleaseandPublish-NovaModule, which avoids missing private helper failures when the runner also has an older installedNovaModuleToolsversion available for autoload.
- Fix the command-line test workflow wording in
docs/core-workflows.htmlso the CLI preview flag is shown as--what-if.- The GitHub Pages guide now keeps the PowerShell
-WhatIfwording only in the PowerShell view and shows--what-ifin the command-line view.
- The GitHub Pages guide now keeps the PowerShell
- Add a PowerShell installed-tool version view through
Get-NovaProjectInfo -Installed.- PowerShell now exposes the installed
NovaModuleToolsmodule name and version directly instead of requiring the launcher-only% nova --versionpath. Get-Help Get-NovaProjectInfonow documents both the project-version and installed-tool-version views.
- PowerShell now exposes the installed
- Stop build-driven workflows when a
src/publicfile contains zero or multiple top-level functions.- This prevents helper functions from being exported accidentally just because they live in a public file.
Invoke-NovaBuild,Test-NovaBuild -Build, packaging, publishing, and release flows now surface the warning consistently.- PowerShell supports
-OverrideWarning, and thenovaCLI supports--override-warning/-owhen maintainers intentionally want to continue past the warning.
- Fix
Invoke-NovaBuildhelp discovery so it only scansdocs/<ProjectName>/for PlatyPS markdown.- Regular markdown elsewhere under
docs/no longer breaks the help-generation step. - When PlatyPS export does not create the expected help folder, Nova now raises a stable documentation error instead of a raw rename-path failure.
- Regular markdown elsewhere under
- Fix the repository
run.ps1quality loop after the CI installer refactor introduced new ScriptAnalyzer warnings.- The internal CI installer helper now follows ScriptAnalyzer naming and
ShouldProcessexpectations. run.ps1no longer stops in the analyzer step because of those helper warnings.
- The internal CI installer helper now follows ScriptAnalyzer naming and
- Fix interactive
nova init/nova init -escaffold validation so invalid answers retry immediately at the prompt.- Invalid module names now show the validation message inline instead of failing after the full questionnaire.
- Standard and example scaffold flows now share the same retry-first validation behavior through the common prompt path.
2.1.0 - 2026-04-29
- Add
Install-NovaCliand a packagednovalauncher so macOS and Linux users can install and runnovadirectly from zsh or bash.novanow remains the launcher-facing CLI surface, whileInvoke-NovaClistays the explicit PowerShell cmdlet entrypoint instead of exporting anovaPowerShell alias.
- Add optional
Preamblesupport inproject.jsonto write module-level setup lines at the top of generated.psm1files. - Add native
-WhatIfand-Confirmsupport across mutating Nova commands, including GNU-style routed CLI support for--verbose/-v,--what-if/-w, and--confirm/-conbuild,test,bump,publish, andrelease.- Routed CLI confirmation now stays inside the
novaexperience instead of exposing PowerShell'sSuspendprompt. - Entering
Sduring CLI confirmation now cancels safely, returns a non-zero exit code, and returns directly to the original shell. - Direct PowerShell cmdlets such as
Deploy-NovaPackage,Publish-NovaModule, andUpdate-NovaModuleVersioncontinue to use native PowerShell confirmation semantics. - Non-confirmable
novaroutes such asinfo,version,--help,--version, andinitnow reject--confirm/-cconsistently instead of silently accepting a PowerShell-style confirmation concept.
- Routed CLI confirmation now stays inside the
- Add
Update-NovaModuleTool(withUpdate-NovaModuleToolsas a compatibility alias) and% nova updatefor self-updating the installed module.- Supports
Set-NovaUpdateNotificationPreference/Get-NovaUpdateNotificationPreferencefor PowerShell usage. - Supports
% nova notification,% nova notification --disable/-d, and% nova notification --enable/-efor CLI usage. - Uses the stored prerelease update preference to decide whether prerelease self-updates are eligible.
- Requires explicit confirmation before a prerelease self-update proceeds.
- Supports
- Add
% nova version --installed/% nova version -iso users can compare the locally installed version of the current project/module with the current project version fromproject.json, while keeping% nova --version/% nova -vdedicated to the installed NovaModuleTools version. - Add build-before-test support to the test workflow so
Test-NovaBuild -Build,% nova test --build, and% nova test -brebuild the project before running Pester. - Add an opt-in
-Previewmode toUpdate-NovaModuleVersion/ GNU-style% nova bump --preview/% nova bump -pfor explicit preview iteration.- Stable versions still use the normal semantic bump target first, then append
-preview. - Existing prerelease versions now stay on the same semantic core and preserve the current prerelease stem while appending or incrementing trailing digits, for example
preview -> preview01,preview09 -> preview10,rc -> rc01,rc1 -> rc2,SNAPSHOT -> SNAPSHOT01, andSNAPSHOT1 -> SNAPSHOT2.
- Stable versions still use the normal semantic bump target first, then append
- Add
New-NovaModulePackageand% nova packageso projects can build, test, and package the built module output as a.nupkgartifact by using generic metadata fromproject.json, including repositories whose test runs reload or removeNovaModuleToolsbefore the final package step.- Package output supports
Package.Typeswith case-insensitiveNuGet,Zip,.nupkg, and.zipvalues. - Omitting
Package.Typesstill defaults packaging to a.nupkgartifact. - Selecting both
NuGetandZipcreates both package formats in the configured output directory. Package.AddVersionToFileNamecan append the top-level project version to a customPackage.PackageFileNamebefore the package extension is applied.- Setting
Package.Latesttotruealso creates a companion*.latest.*artifact for each selected package type while keeping the normal versioned file.- Package output uses
Package.OutputDirectory.PathwithPackage.OutputDirectory.Cleandefaulting totrue.
- Package output uses
- Add
Deploy-NovaPackageand% nova deployfor raw HTTP package uploads that stay separate from PowerShell repository publishing.- Package upload resolves
-Url,Package.RepositoryUrl, or namedPackage.Repositoriestargets and can merge generic headers/auth settings.
- Package upload resolves
- Package upload now discovers all matching artifacts for the selected package types, including versioned and
latestfiles in the configured package output directory.
- Package output supports
- Add opt-in skip-test support to the package, publish, and release workflows for CI/CD-oriented delivery paths where tests already ran earlier in the pipeline.
- Centralize delivery configuration resolution so raw package upload, update notification settings, and PSGallery publishing now follow one explicit precedence model without surfacing configured secrets in error text.
- Raw upload now resolves command overrides before named repository settings, then package defaults.
- Secret lookup now resolves explicit values before environment-variable indirection, then configured literal fallbacks.
- Keep CI-oriented publish and bump workflows bound to the freshly built module so follow-up
publish,release, andbumpsteps no longer lose private helpers after module re-imports in the same session.- PowerShell now supports
New-NovaModulePackage -SkipTests,Publish-NovaModule -SkipTests, andInvoke-NovaRelease -SkipTests. - The
novalauncher now supports--skip-tests/-sonnova package,nova publish, andnova release. - Skip-tests bypasses
Test-NovaBuildonly; the related build steps still run.
- PowerShell now supports
- Add first-class CI activation switches so Nova can re-import the built
dist/module at the workflow boundaries where session state matters.- PowerShell now supports
Invoke-NovaBuild -ContinuousIntegration,Update-NovaModuleVersion -ContinuousIntegration,Publish-NovaModule -ContinuousIntegration, andInvoke-NovaRelease -ContinuousIntegration. - The
novalauncher now supports--continuous-integration/-ionnova build,nova bump,nova publish, andnova releasewhile keepingnova version -idedicated to the installed-version view. - Build re-activates the freshly built module after the build succeeds, bump re-activates it before the version update starts, and publish/release restore the built module again after publish completes.
- Repository publish no longer forces verbose
Publish-PSResourceoutput unless verbose logging was explicitly requested.- CI bump now reuses the already activated built-module command when the current session is already running from
dist/, so publish-then-bump prerelease automation can continue in the same session without losing private helper bindings.
- CI bump now reuses the already activated built-module command when the current session is already running from
Update-NovaModuleVersion -ContinuousIntegrationnow also falls back to a patch bump whenHEADalready matches the latest tag, so release automation can prepare the next prerelease version without requiring an extra commit.
- PowerShell now supports
- Keep standalone
nova bumpoutput stable by formatting version-update results in the CLI layer instead of relying on PowerShell's default object rendering.nova bump --what-ifand% run.ps1now surface a predictable summary for previous version, new version, label, and commit count.
- Change the project to a Nova command model, replacing the previous mixed MT/Nova workflow.
- All public commands are now Nova commands, and the
novaCLI /Invoke-NovaClicommand surface is the primary entry point for all operations.
- All public commands are now Nova commands, and the
- Change
novahelp to a dedicated CLI-native help system with both short and long command help forms. - Isolate external workflow execution behind smaller internal adapters so git, raw package upload, repository publish, self-update, settings-file I/O, and CLI environment access have clearer change points and smaller test seams.
% nova <command> --helpand% nova <command> -hnow show short CLI help.% nova --help <command>and% nova -h <command>now show long CLI help.- Long command help now includes the matching public GitHub Pages guide URL for the selected command, while short help stays focused on command syntax and options.
- CLI help no longer delegates to PowerShell
Get-Helpand now consistently shows CLI option spellings such as--repositoryand-r.
- CLI help no longer delegates to PowerShell
- BREAKING CHANGE: Rename the public Nova scaffold cmdlets.
New-NovaModule→Initialize-NovaModule- No compatibility aliases are exported for the retired cmdlet names or CLI subcommands.
- Change
CopyResourcesToModuleRootto the canonical project setting name while keeping the default valuefalse. - Change
Publish-NovaModule -Localand% nova publish --localso a successful local publish also reloads the published module from the local install path into the active PowerShell session.
- BREAKING CHANGE: Remove the legacy
MTcommands and MT-branded command documentation in favor of the Nova command model.- All public commands are now Nova commands, and the
novaCLI /Invoke-NovaClicommand surface is the primary entry point for all operations.
- All public commands are now Nova commands, and the
- Fix unsupported
novahelp invocations so they now return Nova's structured CLI validation error instead of a PowerShell parameter-binding failure. - Keep manifest/package helper edge cases aligned with their intended behavior.
- Manifest settings resolution now accepts ordered dictionary metadata shapes in addition to plain hashtables.
New-NovaPackageArtifactsnow accepts an empty metadata list and returns an empty artifact result instead of failing during parameter binding.
- Fix configuration and validation errors so empty
project.jsonfiles and unsupportedManifestkeys fail fast with clear messages. - Fix semantic-release PSGallery publishing on fresh CI runners by bootstrapping the PSResourceGet repository store before
Publish-PSResourceruns.
1.9.1 - 2026-04-10
- Nova command model and CLI entrypoint:
- New root command:
nova - New public commands:
Get-NovaProjectInfo,Invoke-NovaBuild,Invoke-NovaCli,Invoke-NovaRelease,Initialize-NovaModule,Publish-NovaModule,Test-NovaBuild,Update-NovaModuleVersion
- New root command:
- Release orchestration helpers for command routing, version label detection from commits, and publish flow support.
- New test coverage in
tests/NovaCommandModel.Tests.ps1for Nova command routing and release flow behavior. - New GitHub workflow: Dependency Review (
.github/workflows/dependency-review.yml). - New GitHub workflow: PowerShell code quality (
.github/workflows/powershell.yml).
- Updated test workflow triggers in
.github/workflows/Tests.ymlto improve branch/PR coverage. - Updated README module naming references to
NovaModuleTools. - Source alignment updates to match installed
NovaModuleToolsv1.8.0behavior for compatibility.
MTcommands and MT-branded command documentation in favor of the Nova command model.
- Resource lookup compatibility in
Get-ResourceFilePathfor source/dist execution contexts.
1.8.0 - 2026-04-08
- Project settings:
BuildRecursiveFolders(defaulttrue): recursive discovery forsrc/classes,src/privateandtests.SetSourcePath(defaulttrue): include# Source: <relative path>before each concatenated source file in generateddist/<Project>/<Project>.psm1.FailOnDuplicateFunctionNames(defaulttrue): fail build when duplicate top-level function names exist in generateddist/<Project>/<Project>.psm1.- Missing values for these settings are now treated as
true. - The rebranded
NovaModuleToolsmodule now uses its own moduleGUID.
- Missing values for these settings are now treated as
- Build determinism: files are processed in a deterministic order by relative path (case-insensitive), and load order is always
classes → public → private.
1.3.0 - 2025-09-23
- Added support for
ps1xml1format data. Place it in resources folder withName.format.ps1xmlto be automatically added as format file and imported in module manifest
1.2.0 - 2025-09-17
- Added support for classes directory inside src
- Initialize-NovaModule generates classes directory during fresh project
classesdirectory should include.ps1files which contain enums and classes
- Version upgrade using update-mtmoduleversion now support build tags. Improvements to semver versioning.
1.1.3 - 2025-09-14
- Now supports preview tag in Update-NovaModuleVersion
- Now supports semver naming in both project.json and modulemanifest
- Module build supports
previeworprereleasetag - Preview version looks like
1.2.3-preview
1.1.0 - 2025-08-28
- Now Module manifest includes
AliasesToExport. This helps loading aliases without explicitly importing modules to session. - thanks to @djs-zmtc for suggesting the feature
1.0.0 - 2025-03-11
- New optional project setting
CopyResourcesToModuleRoot. Setting to true places resource files in the root directory of module. Default isfalseto provide backward compatibility. Thanks to @BrooksV
- BREAKING CHANGE: Typo corrected: ProjecUri to ProjectUri. Existing projects require manual update.
0.0.9 - 2024-07-17
- Fixed #7, Invoke build should not through for empty tags
0.0.7 - 2024-07-17
- Now "Manifest" section of project JSON supports all Manifest parameters, use exact name of parameter (from New-ModuleManifest) as key in JSON
- Fixed the example project README so it no longer suggests that
example/includes arun.ps1helper script; it now points users to buildingNovaModuleToolsfrom the repository root or using the Gallery workflow. - Corrected typo in ProjectUri from
ProjecUrito correct spelling.
0.0.6 - 2024-07-08
Test-NovaBuildnow supports including and excluding tags
- Code cleanup
0.0.5 - 2024-07-05
- More verbose info during MTModule creation
- Issue #2 : Git initialization implemented
- Issue #1 : Doesn't create empty
testsfolder when user choosesnoto tests
0.0.4 - 2024-06-25
- First release to
psgallery - All basic functionality of Module is ready