🌟 [Major]: New PowerShell module v1.0.0 with complete YAML 1.2.2 command suite#47
Open
Marius Storhaug (MariusStorhaug) wants to merge 106 commits into
Open
🌟 [Major]: New PowerShell module v1.0.0 with complete YAML 1.2.2 command suite#47Marius Storhaug (MariusStorhaug) wants to merge 106 commits into
Marius Storhaug (MariusStorhaug) wants to merge 106 commits into
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add YAML 1.2 core-schema construction, safe tag handling, duplicate-key validation, aliases, resource limits, object projection, Test-Yaml, and pinned conformance fixtures. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Normalize supported PowerShell data, emit a YAML 1.2-compatible subset, preserve repeated acyclic references, reject cycles and normalized duplicate keys, and cover packaging metadata. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Document command contracts, safety limits, pipeline behavior, supported data types, unknown-tag handling, and non-preserved YAML presentation details with working examples. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Prefer the workflow-imported artifact so Pester coverage measures real module execution, exclude pinned YAML fixtures from repository config linting, and skip PlatyPS docs generation because it preloads a conflicting YamlDotNet assembly. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Use yamllint's native ignore rules for vendored spec and invalid parser fixtures without relying on unsupported reusable-workflow environment settings. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Match absolute fixture paths passed by Super-Linter and satisfy repository analysis for the coverage test helper. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Align workflow pin and packaging assertions to Process-PSModule v6.1.13, and disable Build-Site until this repo migrates from mkdocs to zensical.toml required by the latest release. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Replace legacy .github/mkdocs.yml with .github/zensical.toml and re-enable normal Build-Site execution under Process-PSModule v6.1.13. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Remove YamlDotNet artifacts and implement repository-owned layered YAML reader/composer/projector/emitter with iterative graph traversal, safety limits, and explicit tag handling. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add deterministic yaml-test-suite runner surfaces for syntax, event-structure, JSON construction, out.yaml comparison, and emitter round-trip accounting; update packaging and regression tests for PowerShell 7.6 Core-only contract and zensical docs config. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Mark .zip fixtures as binary in .gitattributes so the pinned yaml-test-suite archive is not altered by line-ending normalization. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Handle explicit keys with node properties followed by indentless block sequences, and add a regression test based on yaml-test-suite 6BFJ out.yaml shape. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add explicit-key indentless-sequence parsing for 6BFJ, and fix suite runner document-array argument passing so multi-document JSON/out.yaml comparisons evaluate all documents. Add regressions and update conformance assertions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve expanded tags in the representation graph for event comparisons and normalize yaml-test-suite event parsing/output so scalar escapes, style markers, flow markers, and anchor reuse are compared semantically instead of presentation text. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Read and write internal value boxes via raw PSObject properties so empty arrays and nested complex keys are preserved without pipeline-style flattening. Add a regression for nested empty-sequence keys and lock conformance accounting to the new zero-fail corpus counts. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Decode %xx escapes as UTF-8 during tag-handle expansion, reject malformed/invalid UTF-8 escapes, and preserve unknown expanded tags in representation comparisons. Update conformance expectations so event surface has no policy differences and keep JSON policy cases explicitly enumerated. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Make test bootstrap deterministic by sourcing repository code unless an artifact manifest override is supplied, and make packaging artifact detection resolve from env/output paths so module-local CI does not bind to ambient gallery modules. 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>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Inline percent-escape hex parsing in the tag URI decoder to satisfy source linting and recommit the yaml-test-suite release archive as binary bytes so the pinned SHA-256 matches in CI and module-local conformance runs. 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>
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>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This was referenced Jul 25, 2026
…w harness (#48) This change hardens workflow secret and permission handling for PR paths, adds a repeatable Profiler-based performance harness for YAML command regressions, and closes release-readiness QA/UX gaps identified during PR #47 execution. ## Changed - Replaced broad reusable-workflow secret inheritance with explicit mapping for required secrets in `.github/workflows/Process-PSModule.yml`. - Split workflow execution into PR and release-capable paths so open-PR runs use reduced permissions, while closed-PR/scheduled/manual paths retain publish-capable permissions. - Added `tests/tools/Invoke-YamlPerfReview.ps1` to run repeatable baseline/regression performance scenarios for core YAML commands. - Updated `tests/Packaging.Tests.ps1` to align with the current source layout on the release line (removed stale assumptions about `src/manifest.psd1` and `src/header.ps1`). - Normalized comment-based help `.LINK` metadata across public commands and fixed the `Merge-Yaml` link target to the correct merge section. ## Validation - Executed full Pester suite on this branch (`Invoke-Pester -Path .\tests -CI`): **475 passed, 0 failed, 8 skipped**. - Executed targeted command-surface tests for touched YAML commands and packaging updates. - Executed help coverage audit for public commands: synopsis/examples/related links now present for each command. - Executed Profiler baseline/regression runs using the new harness with the `>5%` critical-path slowdown gate. ## Why base is `release/v1.0.0` These changes are specific to the in-flight v1.0.0 release line and support PR #47 hardening plus release-readiness gates without mixing in unrelated `main` branch work. --------- 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>
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>
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>
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>
Marius Storhaug (MariusStorhaug)
marked this pull request as ready for review
July 26, 2026 18:47
These are Distributor-managed shared files and should not be hand-authored in the module repository. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Align ignore rules to the PowerShell-module ecosystem: operating-system files, editor and developer-tooling files, and Pester test/coverage artifacts, alongside the existing framework and build outputs. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Match the canonical Template-PSModule dependabot: daily github-actions updates with a 7-day cooldown. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Yamlv1.0.0 is the first public release of a new PowerShell module for the PowerShell Gallery, delivering a complete YAML 1.2.2 command suite for parsing, validating, formatting, merging, reading, writing, and targeted entry removal with no third-party runtime dependencies. This is the module go-live, so there are no breaking changes for existing consumers; the module targets PowerShell 7.6/Core.New: Complete YAML 1.2.2 command suite
The module provides end-to-end YAML handling with
ConvertFrom-Yaml,ConvertTo-Yaml,Test-Yaml,Import-Yaml,Export-Yaml,Format-Yaml,Merge-Yaml, andRemove-YamlEntry.ConvertFrom-YamlConvertTo-YamlTest-YamlImport-YamlExport-YamlFormat-YamlMerge-YamlRemove-YamlEntryNew: Native YAML 1.2.2 engine with no third-party dependencies
Parsing and serialization are implemented entirely in PowerShell — no YamlDotNet or other runtime dependency. The engine enforces bounded parse, clone, merge, removal, and emit work budgets, avoids arbitrary .NET type activation, and uses iterative graph traversal to stay stable on large or adversarial inputs. Duplicate YAML mapping keys are rejected by design to prevent ambiguous data projection.
New: YAML 1.2.2 conformance across the pipeline
The scanner, parser, constructor, serializer, and emitter are validated against the YAML 1.2.2 specification, including edge cases around BOM handling, NBSP behavior, flow scalars, and tag decoding.
Technical details
release/v1.0.0, including prior preparatory PR slices (Draft: repository-owned YAML processor (Core 7.6+ conformance zero-fail) #37, 🪲 [Fix]: Escaped YAML tags preserve their exact identity #39, Harden YAML engine and conformance accounting #40, 🚀 [Feature]: YAML files can be imported and exported directly #41, 🚀 [Feature]: YAML streams can now be normalized safely #42, 🚀 [Feature]: YAML streams can now be merged without representation loss #45, 🚀 [Feature]: YAML entries can now be removed without representation loss #46).yaml-test-suitecorpus plus chapter 2 fixtures undertests/fixtures/yaml-spec-1.2.2/chapter-02/.Majoras the explicit release framing for the bootstrap integration merge tomainthat cutsv1.0.0; it is the module go-live, not a compatibility break against a prior release.Standards and framework alignment pass (Pass A)
src/functions/public/**,src/functions/private/**tests/**.github/workflows/**,.github/PSModule.yml,.github/linters/**README.md,examples/**CONTRIBUTING.md,SECURITY.md,SUPPORT.md,CODE_OF_CONDUCT.md,AGENTS.md,CLAUDE.md,.github/copilot-instructions.md,.github/pull_request_template.md)Issue convergence sweep (Pass B)
#2, #4, #5, #7, #8, #20, #21, #22, #24, #25, #26, #27, #29, #43, #44) plus targeted open-issue searches by command names, YAML chapter-2/conformance terms, and representation-preserving file/merge/removal terms.PSModule/Yaml#1is a pull request, not an issue leaf, andPSModule/Yaml#3is already closed historical work.Convergence evidence by closed issue
PSModule/Yaml#2— core conversion surface delivered viaConvertFrom-YamlandConvertTo-Yaml, with coverage intests/ConvertFrom-Yaml.Tests.ps1andtests/ConvertTo-Yaml.Tests.ps1.PSModule/Yaml#4—Test-Yamldelivered and covered intests/Test-Yaml.Tests.ps1.PSModule/Yaml#5— deterministic stream formatting delivered viaFormat-Yaml, covered intests/Format-Yaml.Tests.ps1.PSModule/Yaml#7andPSModule/Yaml#27— flow sequence/mapping parsing delivered and covered in parser behavior tests andtests/Specification.Tests.ps1chapter-2 examples.PSModule/Yaml#8— multiline literal/folded scalar support delivered and covered intests/ConvertFrom-Yaml.Tests.ps1and chapter-2 examples.PSModule/Yaml#20— chapter-2 compliance harness delivered intests/Specification.Tests.ps1(examples 2.01 through 2.28).PSModule/Yaml#21— multi-document stream support delivered and validated in chapter-2 stream examples and command tests.PSModule/Yaml#22— anchors/aliases support delivered and verified intests/ConvertFrom-Yaml.Tests.ps1and merge/removal behavior suites.PSModule/Yaml#24— explicit tag and!!handling delivered and covered across conversion/specification tests.PSModule/Yaml#25— complex mapping key handling delivered (including hashtable-safe paths) and covered in conversion/specification tests.PSModule/Yaml#26— core-schema numeric forms and special floats delivered and covered intests/ConvertFrom-Yaml.Tests.ps1,tests/ConvertTo-Yaml.Tests.ps1, andtests/Specification.Tests.ps1.PSModule/Yaml#29— file I/O commands delivered viaImport-YamlandExport-Yaml, covered intests/Import-Yaml.Tests.ps1andtests/Export-Yaml.Tests.ps1.PSModule/Yaml#43— representation-preserving merge delivered viaMerge-Yaml, covered intests/Merge-Yaml.Tests.ps1.PSModule/Yaml#44— representation-preserving entry removal delivered viaRemove-YamlEntry, covered intests/Remove-YamlEntry.Tests.ps1.Relevant issues (or links)
!!timestamphandling is delivered; implicit core-schema timestamp resolution remains open by design)ConvertFrom-Yaml | ConvertTo-Yamlround-trip is not delivered in this diff)