You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Community Markdown receives reliable pull request validation - #12
Contributors to MSXOrg/.github receive a named, read-only check for applicable source changes, including Markdown-only updates and PRs retargeted to main. PR descriptions use canonical guidance only; this validator does not require, copy, generate, or compare a PR template. Ordinary repositories need no validator installation or copied policy files.
Correct reported Markdown violations even if a file contains a markdownlint disable/configuration directive. Every selected .md file is read literally and linted with unchanged shared rules and noInlineConfig: true from an isolated temporary configuration. Inline directives, local ignores/configuration, and glob-like filenames cannot hide selected Markdown; valid directive examples still pass. Explicit opened, synchronize, reopened, and edited activities cover updates and retargeting to main without a new commit.
Use PowerShell 7.4+, Git, and Node.js/npm in this source repository. Fetch the intended base and commit the content being checked. The native runner discovers .github/tests without a Path override, and CI exercises that default. Pinned tooling is restored when needed:
Intentional template absence/deletion is valid. Removed paths come from the committed diff with case-sensitive identity and are not counted as linted content. Empty/unsupported-only inputs and zero-file Markdown scans fail. Test discovery cannot pass when no test passes, including skipped-only suites; summary and exit use the same success condition. The obsolete scaffold fixture/comparison is removed, not replaced.
Absence is not record-quality proof. Actual titles/descriptions still need canonical PR Format's boundary, ordered results, complete consumer actions, scoped evidence, and release decisions only on applicable release-managed routes. Other defaults and product-integration templates are distinct. #8 owns central removal at 990bfcbfd1275f80d58b3a9c51781f3873e22876; this PR does not edit its paths, forms, consumer copies, hooks, release contracts, or live governance.
Technical details
Verified head:a6c4484fa197f44bf45e244e17480cb40deafd3e, merge base 0c67251812ea306543f3a14ab473ae357cfb76ac. Run 41248565958 completed successfully at this exact head. Its job/check completed actual-head/source validation, literal Markdown lint, all 44 tests, and the remaining PowerShell/YAML/Actions/security routes. The earlier cancelled run is not used as validation evidence.
Exact check/source:Organization defaults validation, GitHub Actions integration/app 15368, from .github/workflows/Organization-Defaults-Validation.yml. Default-deny permissions, only contents read, actual-head verification, and disabled persisted credentials/language-status writes/PR-summary comments are preserved. Literal Markdown precedes other include-only Super-Linter routes. No publication, tag/label mutation, rules/access change, merge, or auto-merge was performed.
Case reproduced before correction
Observed defect
Verified correction
Malformed Markdown behind whole-file disable
Released hosted parser exits 0 although plain malformed text exits 1
Anonymous controller passes and distinguishes deletion from linted content
Edited retarget to main
Default activities exclude edited
Explicit activity coverage passes; no production retarget experiment is claimed
Mixed linter flags
Actual hosted initialization fails
Include-only regression and subsequent hosted routes pass
PowerShell wildcard path plus unchanged match
Path invocation analyzes the wrong file; literal changed content produces its warning
Surviving wildcard-bearing PowerShell inputs fail before counting lint inputs
Native runner default
Root test-directory lookup fails
.github/tests default, anonymous/full default invocation, and CI default execution pass
Case-only rename
Deleted path is hidden
Case-sensitive committed deletion/live lists report one of each
Skipped-only discovery
Exit 0 with no passed regressions
Zero-passed-test guard exits 1 with explicit diagnostic
Skipped-only summary
Failure exit still writes success heading
One Pester success decision controls summary/exit; regression verifies both
Every listed defect was demonstrated before correction. All 44 local and hosted tests pass in two suites, with zero failed/skipped/not-run tests. Source/head/containment, nonempty checks, literal paths, valid examples, links, staged/unstaged consistency, and control/backslash/finder-pruned guards remain intact.
Actual checked input scope
Result
Existing applicable changed files
13
Changed Markdown actually linted
1: .github/VALIDATION.md
Checked deletions in this PR's base-to-head diff
0; #8 owns central removal and the removed fixture has no net base-to-head file
Shared configuration sources verified
4
Required template/scaffold files
None
Deletion-only anonymous inputs report one checked deletion and zero linted Markdown, verify sources, and skip only inapplicable other-language lint. This is not an empty-input or Markdown pass. The isolated skipped-only suite is rejected and its summary is failure, not executed-regression proof.
#8 compatibility: Actual head 990bfcbfd1275f80d58b3a9c51781f3873e22876 versus base 0c67251812ea306543f3a14ab473ae357cfb76ac changes only two guides and central deletion. Both changed contents pass this literal/no-inline checker. The complete inventory has 42 files and zero PR templates. This is local source compatibility, not a hosted #8 check, record-quality approval, or merged-deletion claim; its checkout was untouched.
Metadata pins configuration Git blobs from MSXOrg/docs 36da9154aa55d2052345fb2f28b812b29daf8bc9 and Super-Linter 4ce20838b8ab83717e78138c5b3a1407148e0918, not a scaffold fingerprint. The shared Pester helper has the documented source-local default and unified real-success adaptations. External SHA pins and permissions are unchanged.
Ownership:Repository Standard owns no-file policy; PR Format owns record quality. This ready, unmerged source is authoring context, not a runtime dependency. Absence does not certify coverage, actions, markers, sections, or evidence.
Complete review disposition:The exact-head review completed with no new inline findings; all nine threads are resolved and pagination completed. The entire summary was read. Its remaining concern cited a superseded cancelled CI run; the newer completed actual-head run above independently resolves that evidence gap. No zero-inline count was used to dismiss code or summary concerns. Every actionable finding in this work was reproduced and corrected.
Separate follow-up, not consumer policy-copy enforcement
Plan/convergence: Seven ordinary commits complete the user-directed no-template revision, demonstrated Markdown/retarget fixes, and tightly coupled full-review corrections. #11 closes through this PR; #8/#10 and the hook follow-up remain separate. No forms, consumer copies, release signals, or live check requirements are changed.
Operational state: The repository owner externally marked this PR ready at 22:38:19Z; this session did not change readiness. Independent native read-back confirms Agent merge maintenance enabled, review/CI/conflict actions enabled, merge_pr=false, and GitHub autoMergeRequest=null. No merge or enqueue was performed. Inherited main rules still name no required status checks: requiring exactly Organization defaults validation from GitHub Actions/app 15368 remains a separately unapproved governance action. The visible ready state does not waive that governance boundary. This source route delivers public community files, not versioned artifacts, so no release-decision block or release label applies.
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
The changed-file filter can select unrelated Markdown and skip filenames containing tabs or form feeds, while the documented non-Windows command cannot load its configuration.
Adds read-only pull request validation for organization community defaults, addressing #11 without changing the inherited template or README. Fallback-format delivery and local pre-commit hooks remain separate work.
Changes:
Adds an exact-head workflow for changed-input validation, Pester tests, and selected linters.
Validates changed fallback scaffolds against a pinned source fingerprint, with malformed-content and file-selection regression tests.
Documents local validation and adds shared lint configurations and Dependabot updates.
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
Critical validation gaps omit supported template locations, allow symlinks to bypass linting and scaffold checks, and can report success for malformed committed content by validating uncommitted working-tree changes.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
Path handling and linter discovery can silently skip selected files with backslashes or files in pruned directories, allowing validation to pass without checking all applicable changes.
No open issues 🎉
2 previously missed issues
In code that hasn't changed since last review
Reject backslashes in input paths to avoid skipping Markdown files
.github/scripts/PullRequestValidation.psm1:196
On Linux, Join-Path treats a literal backslash in a filename as a directory separator, so a committed file such as changed\file.md can be silently omitted from MarkdownFiles and the linter filter. When another ordinary applicable file changes, validation can therefore pass without checking that Markdown file. Reject backslash-containing input paths before this selection and add a filename regression.
Ensure linter-pruned files are not counted as validated inputs
The pinned Super-Linter finder prunes directories such as node_modules, .venv, and __pycache__, but Get-ValidationInput still counts supported files there as applicable inputs. A malformed node_modules/broken.md alongside a valid ordinary Markdown change is therefore reported as an input but never linted, allowing an incomplete check to pass. Use discovery that includes every selected file, or reject excluded inputs explicitly, and add a regression for this case.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
Human assessment is needed because a critical validation bypass can let changed Markdown pass without being linted, alongside missing checks when PRs are retargeted.
Marius Storhaug (MariusStorhaug)
changed the title
Organization fallback changes receive source-bound validation
Community Markdown receives reliable pull request validation
Oct 31, 2026
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
Conflicting Super-Linter validation flags cause initialization failures before checks run, and wildcard-bearing PowerShell paths can cause an unchanged file to be analyzed instead of the selected file.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
Human assessment is needed because case-only renames can bypass deletion validation on Ubuntu, and this moderate finding was omitted from the published review.
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
Skipped-only runs receive a success heading before the zero-passed-test guard exits with failure, so the summary verdict must use the same pass conditions as the exit decision.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
The cited CI run was cancelled before other-language lint completed, so a completed hosted result for the actual head is still needed before landing the validation gate.
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
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.
Contributors to
MSXOrg/.githubreceive a named, read-only check for applicable source changes, including Markdown-only updates and PRs retargeted tomain. PR descriptions use canonical guidance only; this validator does not require, copy, generate, or compare a PR template. Ordinary repositories need no validator installation or copied policy files.Fixed: Changed source files receive complete, source-bound validation
Correct reported Markdown violations even if a file contains a markdownlint disable/configuration directive. Every selected
.mdfile is read literally and linted with unchanged shared rules andnoInlineConfig: truefrom an isolated temporary configuration. Inline directives, local ignores/configuration, and glob-like filenames cannot hide selected Markdown; valid directive examples still pass. Explicitopened,synchronize,reopened, andeditedactivities cover updates and retargeting tomainwithout a new commit.Use PowerShell 7.4+, Git, and Node.js/npm in this source repository. Fetch the intended base and commit the content being checked. The native runner discovers
.github/testswithout a Path override, and CI exercises that default. Pinned tooling is restored when needed:Intentional template absence/deletion is valid. Removed paths come from the committed diff with case-sensitive identity and are not counted as linted content. Empty/unsupported-only inputs and zero-file Markdown scans fail. Test discovery cannot pass when no test passes, including skipped-only suites; summary and exit use the same success condition. The obsolete scaffold fixture/comparison is removed, not replaced.
Absence is not record-quality proof. Actual titles/descriptions still need canonical PR Format's boundary, ordered results, complete consumer actions, scoped evidence, and release decisions only on applicable release-managed routes. Other defaults and product-integration templates are distinct. #8 owns central removal at
990bfcbfd1275f80d58b3a9c51781f3873e22876; this PR does not edit its paths, forms, consumer copies, hooks, release contracts, or live governance.Technical details
Verified head:
a6c4484fa197f44bf45e244e17480cb40deafd3e, merge base0c67251812ea306543f3a14ab473ae357cfb76ac. Run 41248565958 completed successfully at this exact head. Its job/check completed actual-head/source validation, literal Markdown lint, all 44 tests, and the remaining PowerShell/YAML/Actions/security routes. The earlier cancelled run is not used as validation evidence.Exact check/source:
Organization defaults validation, GitHub Actions integration/app15368, from.github/workflows/Organization-Defaults-Validation.yml. Default-deny permissions, only contents read, actual-head verification, and disabled persisted credentials/language-status writes/PR-summary comments are preserved. Literal Markdown precedes other include-only Super-Linter routes. No publication, tag/label mutation, rules/access change, merge, or auto-merge was performed..github/testsdefault, anonymous/full default invocation, and CI default execution passEvery listed defect was demonstrated before correction. All 44 local and hosted tests pass in two suites, with zero failed/skipped/not-run tests. Source/head/containment, nonempty checks, literal paths, valid examples, links, staged/unstaged consistency, and control/backslash/finder-pruned guards remain intact.
.github/VALIDATION.mdDeletion-only anonymous inputs report one checked deletion and zero linted Markdown, verify sources, and skip only inapplicable other-language lint. This is not an empty-input or Markdown pass. The isolated skipped-only suite is rejected and its summary is failure, not executed-regression proof.
#8 compatibility: Actual head
990bfcbfd1275f80d58b3a9c51781f3873e22876versus base0c67251812ea306543f3a14ab473ae357cfb76acchanges only two guides and central deletion. Both changed contents pass this literal/no-inline checker. The complete inventory has 42 files and zero PR templates. This is local source compatibility, not a hosted #8 check, record-quality approval, or merged-deletion claim; its checkout was untouched.pwsh -NoProfile -File .github\scripts\Invoke-PesterSuite.ps1 -RequiredVersion 6.1.0pwsh -NoProfile -File .github\scripts\Test-OrganizationDefaults.ps1 -BaseRevision origin/main -ExpectedHead (git rev-parse HEAD)Invoke-ScriptAnalyzer -Path .github -Recurse -Settings .github\linters\.powershell-psscriptanalyzer.psd1.github\workflows\Organization-Defaults-Validation.ymlyamllint -c .github\linters\.yaml-lint.yml .github\workflows\Organization-Defaults-Validation.ymlzizmor --offline --no-progress -c .github\linters\zizmor.yml .github\workflows\Organization-Defaults-Validation.ymlgit --no-pager diff --check origin/main...HEADMetadata pins configuration Git blobs from MSXOrg/docs
36da9154aa55d2052345fb2f28b812b29daf8bc9and Super-Linter4ce20838b8ab83717e78138c5b3a1407148e0918, not a scaffold fingerprint. The shared Pester helper has the documented source-local default and unified real-success adaptations. External SHA pins and permissions are unchanged.Ownership: Repository Standard owns no-file policy; PR Format owns record quality. This ready, unmerged source is authoring context, not a runtime dependency. Absence does not certify coverage, actions, markers, sections, or evidence.
Complete review disposition: The exact-head review completed with no new inline findings; all nine threads are resolved and pagination completed. The entire summary was read. Its remaining concern cited a superseded cancelled CI run; the newer completed actual-head run above independently resolves that evidence gap. No zero-inline count was used to dismiss code or summary concerns. Every actionable finding in this work was reproduced and corrected.
Plan/convergence: Seven ordinary commits complete the user-directed no-template revision, demonstrated Markdown/retarget fixes, and tightly coupled full-review corrections. #11 closes through this PR; #8/#10 and the hook follow-up remain separate. No forms, consumer copies, release signals, or live check requirements are changed.
Operational state: The repository owner externally marked this PR ready at 22:38:19Z; this session did not change readiness. Independent native read-back confirms Agent merge maintenance enabled, review/CI/conflict actions enabled,
merge_pr=false, and GitHubautoMergeRequest=null. No merge or enqueue was performed. Inherited main rules still name no required status checks: requiring exactlyOrganization defaults validationfrom GitHub Actions/app15368remains a separately unapproved governance action. The visible ready state does not waive that governance boundary. This source route delivers public community files, not versioned artifacts, so no release-decision block or release label applies.Related references