Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
145 commits
Select commit Hold shift + click to select a range
f4c8a38
Re-sync unprotected template-tracked files to canonical (C1 drift)
Chris-Wolfgang May 22, 2026
abbe935
Re-sync protected config + workflow files to canonical (C1 drift)
Chris-Wolfgang May 22, 2026
53aaeaf
Fill {{PROJECT_NAME}} placeholder in CONTRIBUTING.md (Wolfgang.Extens…
Chris-Wolfgang May 22, 2026
e80f61d
Propagate setup.ps1 UTF-8/newline fix from canonical
Chris-Wolfgang May 22, 2026
1a7d304
Add canonical test/benchmark project config (Phase-0 files)
Chris-Wolfgang May 22, 2026
d896c22
Drop tests/Directory.Build.props — hold test projects to the warning bar
Chris-Wolfgang May 22, 2026
b8bcc2d
Hoist <Nullable>enable</Nullable> to Directory.Build.props
Chris-Wolfgang May 22, 2026
f7f1cd6
Scope the nullable hoist so it cannot break legacy / F# projects
Chris-Wolfgang May 22, 2026
8e5fca7
Enable CodeQL security-extended query pack (S1)
Chris-Wolfgang May 23, 2026
baf3129
Add Stryker mutation-testing workflow (T3)
Chris-Wolfgang May 23, 2026
40e9357
Verify documentation builds before publishing release (D8)
Chris-Wolfgang May 23, 2026
105bc40
Add github-actions ecosystem to Dependabot (CI2)
Chris-Wolfgang May 23, 2026
8336780
Add CHANGELOG.md (D3)
Chris-Wolfgang May 23, 2026
c7ebc70
Verify previous versions preserved in docfx versions.json (D6)
Chris-Wolfgang May 23, 2026
ee3100d
Scaffold PublicApiAnalyzers infrastructure (A1)
Chris-Wolfgang May 23, 2026
5d71cd8
Canonical NuGet package metadata + SourceLink + symbol packages (CI3)
Chris-Wolfgang May 23, 2026
6e06fff
Publish code-coverage report to docs/coverage/ (T1)
Chris-Wolfgang May 23, 2026
18a93e4
Address PR review round 2 (canonical-protected)
Chris-Wolfgang May 23, 2026
e6079c3
Address PR review round 2 (canonical-unprotected)
Chris-Wolfgang May 23, 2026
f70edc0
Address PR review round 2 (t3-stryker)
Chris-Wolfgang May 23, 2026
47d8ae4
Fold T3 (stryker mutation-testing workflow) into canonical-protected
Chris-Wolfgang May 23, 2026
9abd6e6
Drop vestigial one-time setup scripts (post-bootstrap cleanup)
Chris-Wolfgang May 24, 2026
a023a67
Tighten <Nullable> condition to SDK-style C# projects only
Chris-Wolfgang May 24, 2026
da185fc
Add SDK-aware explanatory comment to <Nullable> property
Chris-Wolfgang May 24, 2026
2b96779
Pin stryker.yaml's upload-artifact to v7 to match rest of fleet
Chris-Wolfgang May 24, 2026
ae48e58
Drop -UseBasicParsing from Invoke-WebRequest in docfx.yaml
Chris-Wolfgang May 24, 2026
b3a96a6
Make ReportGenerator install idempotent in docfx.yaml T1 step
Chris-Wolfgang May 24, 2026
3b37f3b
Detect .slnx solutions in build-all-versions.yaml
Chris-Wolfgang May 25, 2026
6a32cda
Filter versions.json to tags whose docs were actually built
Chris-Wolfgang May 25, 2026
41bb4b2
D6 preservation guard: only treat 404 as first deploy
Chris-Wolfgang May 25, 2026
5212c2d
Disable persisted credentials in stryker.yaml checkout
Chris-Wolfgang May 25, 2026
506db54
Make dotnet-stryker install idempotent in stryker.yaml
Chris-Wolfgang May 25, 2026
4e0d6a7
Gate dotnet workload restore on workload-bearing TFM detection
Chris-Wolfgang May 25, 2026
d68d84b
release.yaml: explicit Out-File -Encoding utf8 + DocFX shell: pwsh
Chris-Wolfgang May 25, 2026
18c76ec
docfx.yaml T1 coverage: pass --settings coverlet.runsettings
Chris-Wolfgang May 25, 2026
e566fce
Gate verify-docs-build on validate-release + pack-and-validate
Chris-Wolfgang May 25, 2026
cf6f62b
Gate gh-pages root cleanup on DEPLOY_AS_LATEST=true
Chris-Wolfgang May 25, 2026
3919fde
Drop -windows from workload-TFM detection regex
Chris-Wolfgang May 25, 2026
d8fdfc8
verify-docs-build: install full SDK set to match validate-release
Chris-Wolfgang May 25, 2026
2160336
D6 guard: skip on dry-runs (inputs.deploy_to_pages == false)
Chris-Wolfgang May 25, 2026
99c5e1f
Fix invalid PowerShell in docfx.yaml SemVer prerelease comparator
Chris-Wolfgang May 25, 2026
932f024
Protected-file guard: detect deletions too (--diff-filter=AMRCD)
Chris-Wolfgang May 25, 2026
9bda839
Exclude *.Tests.Integration.* from pr.yaml test-discovery loops
Chris-Wolfgang May 25, 2026
10cb338
Fail job when protected-config fetch/copy fails
Chris-Wolfgang May 25, 2026
fb20580
Gitleaks fetch: abort on transient failure, fall back only on missing…
Chris-Wolfgang May 25, 2026
a39a555
verify-docs-build: gated dotnet workload restore before restore/build
Chris-Wolfgang May 25, 2026
dd71d4d
pr.yaml: drop duplicated "configuration files from main" header bullet
Chris-Wolfgang May 25, 2026
6845393
Stage 3 coverage gate: skip when no coverage files were produced
Chris-Wolfgang May 25, 2026
34cc3ad
Stage 2 coverage parse: accept extra columns + fail on zero matches
Chris-Wolfgang May 25, 2026
0e221f9
dotnet test: add --no-build --no-restore in all stages
Chris-Wolfgang May 25, 2026
6455d38
stryker.yaml: drop dead/broken configs<<EOF output
Chris-Wolfgang May 25, 2026
ba99834
Remove duplicated NuGet metadata defaults from per-project csprojs
Chris-Wolfgang May 25, 2026
583d150
docfx.yaml: align D6 comment with the actual fetch source
Chris-Wolfgang May 25, 2026
3816d27
Sync workload-TFM comment with regex (drop -windows mention)
Chris-Wolfgang May 25, 2026
e502b1c
docfx.yaml T1 coverage: pin to a single TFM (net10.0)
Chris-Wolfgang May 25, 2026
6e3081b
pr.yaml: fail (not skip) when ./tests is missing in a repo with src/
Chris-Wolfgang May 25, 2026
73ad995
Repair pr.yaml after broken Stage 2 coverage-regex fan-out
Chris-Wolfgang May 25, 2026
db723bc
CONTRIBUTING.md: correct format.ps1 and README-FORMATTING.md paths
Chris-Wolfgang May 25, 2026
9a397f6
scripts/format.ps1: work from repo root + correct usage examples
Chris-Wolfgang May 25, 2026
74baff0
CONTRIBUTING.md: correct AsyncFixer description (ConfigureAwait is MA…
Chris-Wolfgang May 25, 2026
f675043
Fix-BranchRuleset.ps1: normalize Repository before gh api calls
Chris-Wolfgang May 25, 2026
a2d6f4f
CONTRIBUTING.md: bump prerequisite SDK to 10.0 to match repo TFMs
Chris-Wolfgang May 25, 2026
1b21709
scripts/Validate-DocsDeploy.sh: rmdir mktemp path before worktree add
Chris-Wolfgang May 25, 2026
55de855
Setup-Labels.ps1: restore early -Repository format validation
Chris-Wolfgang May 25, 2026
07b1d1a
build-all-versions.yaml: pipe to Out-Host, not Write-Host
Chris-Wolfgang May 25, 2026
8aa59f0
scripts/build-pr.ps1: drop -UseBasicParsing from Invoke-WebRequest
Chris-Wolfgang May 25, 2026
99e79c8
Remove subtree TreatWarningsAsErrors=false overrides
Chris-Wolfgang May 25, 2026
fbca8bb
pr.yaml: run protected-config copy loop in parent shell, not subshell
Chris-Wolfgang May 25, 2026
a3bcc84
Stage 2 coverage regex: use greedy match to capture LAST percent
Chris-Wolfgang May 25, 2026
c8f47cf
Repair pr.yaml after second \$'-token corruption of Stage 2 regex
Chris-Wolfgang May 25, 2026
f658bd2
Strip year-specific <Copyright> overrides from src csprojs
Chris-Wolfgang May 25, 2026
47f20b5
Validate-DocsDeploy.sh: handle SSH remote URLs in REPO_NAME parsing
Chris-Wolfgang May 25, 2026
5270301
build-pr.ps1: ensure .NET global-tools dir is on PATH after install
Chris-Wolfgang May 25, 2026
aa560af
D6 preservation guard: fail when newly-generated versions.json is mis…
Chris-Wolfgang May 25, 2026
f3c86e9
release.yaml: attach .snupkg symbol packages alongside .nupkg
Chris-Wolfgang May 25, 2026
fb34e78
docfx.yaml deploy: precise exit-code handling on diff/commit/push
Chris-Wolfgang May 25, 2026
e85554a
stryker.yaml: run BOTH root and per-test-project configs
Chris-Wolfgang May 25, 2026
b732259
Stage 1 (Linux) coverage parser: fail when 0 modules match
Chris-Wolfgang May 25, 2026
a778ce1
pr.yaml trusted-config-fetch: three correctness fixes
Chris-Wolfgang May 25, 2026
f4f655c
docfx.yaml deploy: clear versions/<dir> and versions/latest before copy
Chris-Wolfgang May 25, 2026
0cd014a
docfx coverage: add --no-restore to dotnet test
Chris-Wolfgang May 25, 2026
56b7130
D6 guard: also skip when deploy_as_latest is false (rebuild mode)
Chris-Wolfgang May 25, 2026
c519574
D6 guard: emit ::error:: via Write-Host so Actions parses the annotation
Chris-Wolfgang May 25, 2026
add841a
Stage 1 coverage parser: accept decimal percents + floor before compare
Chris-Wolfgang May 25, 2026
18d1f7b
A1: PublicAPI baseline for Wolfgang.Extensions.IComparable
Chris-Wolfgang May 25, 2026
7540e13
Revert "A1: PublicAPI baseline for Wolfgang.Extensions.IComparable"
Chris-Wolfgang May 25, 2026
c8ee3d7
scripts: repair Setup-Labels.ps1 param block + drop --paginate on rul…
Chris-Wolfgang May 26, 2026
961368e
pr.yaml: fix Stage 2 coverage parser — greedy .* turned 100% into 0%
Chris-Wolfgang May 26, 2026
6e19661
C4: drop stale <AssemblyVersion> from src csproj(s)
Chris-Wolfgang May 26, 2026
15734c8
CI1: add <RepositoryUrl> to src csproj(s)
Chris-Wolfgang May 26, 2026
0a2e14e
Restore <AssemblyVersion>1.0.0.0</AssemblyVersion> + <FileVersion> (C…
Chris-Wolfgang May 28, 2026
370b0c6
D8: add verify-docs-build job (canonical sync from repo-template#395)
Chris-Wolfgang May 28, 2026
1ada5b1
Refine AssemblyVersion comment + use prerelease-safe FileVersion
Chris-Wolfgang May 28, 2026
4bf10cf
Merge remote-tracking branch 'origin/canonical-unprotected' into vNext
Chris-Wolfgang Jun 1, 2026
ca1d760
Merge remote-tracking branch 'origin/protected/d8-verify-docs-build-f…
Chris-Wolfgang Jun 1, 2026
c84b2d7
Merge remote-tracking branch 'origin/fix/restore-assemblyversion' int…
Chris-Wolfgang Jun 1, 2026
3f812f6
v1.1.1 release prep: dup-fix + missing docs file + version bump
Chris-Wolfgang Jun 1, 2026
46aec8d
csproj: fix PackageProjectUrl to point at IComparable-Extensions repo
Chris-Wolfgang Jun 1, 2026
57d51aa
D8: add canonical version-picker assets + docfx.json _appFooter injec…
Chris-Wolfgang Jun 1, 2026
f5abd80
v1.1.1 prep: CHANGELOG entry, codeql v3→v4
Chris-Wolfgang Jun 1, 2026
0b23a18
T4: add custom-IComparable<T> tests + null-bound contract tests (clos…
Chris-Wolfgang Jun 1, 2026
b96f86c
csproj/slnx hygiene cleanup (code review group A)
Chris-Wolfgang Jun 2, 2026
a14a85c
Rewrite copilot-instructions.md for IComparable-Extensions (code revi…
Chris-Wolfgang Jun 2, 2026
95d2e2f
Documentation drift fixes (code review group C)
Chris-Wolfgang Jun 2, 2026
c1e8698
A1: activate PublicApiAnalyzer with shipped baseline (code review gro…
Chris-Wolfgang Jun 2, 2026
61064fd
Examples polish: collapse repeated WriteLine blocks to foreach (code …
Chris-Wolfgang Jun 2, 2026
3c0cf33
Bump coverlet.collector from 10.0.0 to 10.0.1
dependabot[bot] May 24, 2026
78f7572
Bump Meziantou.Analyzer from 3.0.85 to 3.0.98
dependabot[bot] May 31, 2026
344ae34
Bump SonarAnalyzer.CSharp from 10.25.0.139117 to 10.27.0.140913
dependabot[bot] May 31, 2026
a817124
Address PR #129 review comments
Chris-Wolfgang Jun 2, 2026
a315013
Address PR #134 review comments — clarify wording + add upperBound-nu…
Chris-Wolfgang Jun 2, 2026
4487ad4
D2/D-readme: rewrite the stub README into a real one (closes #118, #102)
Chris-Wolfgang Jun 1, 2026
bdb0393
Address PR #131 review comments
Chris-Wolfgang Jun 2, 2026
c5822cd
D5: audit other markdown files (closes #103)
Chris-Wolfgang Jun 1, 2026
7c82439
Address PR #132 review comments — relative API Reference links
Chris-Wolfgang Jun 2, 2026
23a2a1a
Address PR #138 review comments — 5 corrections
Chris-Wolfgang Jun 2, 2026
696d3dc
C5: dedent test class to match file-scoped namespace convention
Chris-Wolfgang Jun 1, 2026
8175358
Resolve conflict: take T4 tests + adopt vNext's dedented class body
Chris-Wolfgang Jun 3, 2026
30585f0
Merge pull request #134 from Chris-Wolfgang/stack/t4-test-quality-audit
Chris-Wolfgang Jun 3, 2026
5da64c9
T4 follow-up: negative-int range + int.MinValue/MaxValue edge cases
Chris-Wolfgang Jun 1, 2026
3f9c288
T3: add stryker-config.json for mutation testing
Chris-Wolfgang Jun 1, 2026
c14617b
Merge pull request #135 from Chris-Wolfgang/stack/t4-edge-case-coverage
Chris-Wolfgang Jun 3, 2026
0297c25
Merge branch 'vNext' into stack/t3-stryker-config
Chris-Wolfgang Jun 3, 2026
1bb7814
Merge pull request #136 from Chris-Wolfgang/stack/t3-stryker-config
Chris-Wolfgang Jun 3, 2026
74ae782
restore icon asset removed in hygiene cleanup
Copilot Jun 3, 2026
6825312
Merge pull request #137 from Chris-Wolfgang/stack/cr-a-csproj-hygiene
Chris-Wolfgang Jun 3, 2026
ab41a8f
Merge branch 'vNext' into stack/cr-b-copilot-instructions
Chris-Wolfgang Jun 3, 2026
8b2407c
Merge pull request #138 from Chris-Wolfgang/stack/cr-b-copilot-instru…
Chris-Wolfgang Jun 3, 2026
af4cd31
Merge branch 'vNext' into stack/cr-c-doc-drift
Chris-Wolfgang Jun 3, 2026
9694236
Merge pull request #139 from Chris-Wolfgang/stack/cr-c-doc-drift
Chris-Wolfgang Jun 3, 2026
f91a298
Merge branch 'vNext' into stack/cr-d-publicapi-baseline
Chris-Wolfgang Jun 3, 2026
d2b0651
Merge pull request #140 from Chris-Wolfgang/stack/cr-d-publicapi-base…
Chris-Wolfgang Jun 3, 2026
2832ee4
Merge branch 'vNext' into stack/cr-e-examples-polish
Chris-Wolfgang Jun 3, 2026
0aedb43
Merge pull request #141 from Chris-Wolfgang/stack/cr-e-examples-polish
Chris-Wolfgang Jun 3, 2026
c16aeaa
Address PR #129 review on Fix-BranchRuleset.ps1
Chris-Wolfgang Jun 3, 2026
c3e54a7
Bump Meziantou.Analyzer from 3.0.85 to 3.0.98
dependabot[bot] Jun 3, 2026
c4de844
Merge main into vNext — resolve dependabot.yml conflict
Chris-Wolfgang Jun 3, 2026
4a80319
Bump SonarAnalyzer.CSharp from 10.25.0.139117 to 10.27.0.140913
dependabot[bot] Jun 3, 2026
58af183
Merge branch 'main' into dependabot/nuget/Meziantou.Analyzer-3.0.98
Chris-Wolfgang Jun 3, 2026
2f74c03
Merge pull request #144 from Chris-Wolfgang/dependabot/nuget/Mezianto…
Chris-Wolfgang Jun 3, 2026
04f4534
Merge pull request #145 from Chris-Wolfgang/dependabot/nuget/SonarAna…
Chris-Wolfgang Jun 3, 2026
0c62727
Merge branch 'main' into vNext
Chris-Wolfgang Jun 3, 2026
8082e6a
Merge remote-tracking branch 'origin/canonical-protected' into vNext
Chris-Wolfgang Jun 3, 2026
5b8a0f3
CHANGELOG: note analyzer/test-tool bumps folded into v1.1.1
Chris-Wolfgang Jun 3, 2026
3f9517e
Merge branch 'main' into vNext
Chris-Wolfgang Jun 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,20 @@
*.fsx text eol=lf

# Scripts
# PowerShell scripts: CRLF line endings (intentional override)
# PowerShell files use CRLF (Windows-style) line endings for convention compliance.
*.ps1 text eol=crlf
# PowerShell scripts: enforce LF line endings in both the index AND
# the working tree (the explicit `eol=lf` overrides any user-level
# `core.autocrlf=true` setting that would otherwise convert to CRLF
# on checkout). BOM-free UTF-8 encoding is enforced separately by
# .editorconfig's global `charset = utf-8` — `.gitattributes` can
# normalize line endings (and control text/binary, diff, and merge
# behavior) but has no attribute for byte-order marks.
#
# LF is required for the `#!/usr/bin/env pwsh` shebang to work on
# Linux/macOS — the kernel parses CR as part of the interpreter name
# (looking for `pwsh\r`), and a UTF-8 BOM before `#!` would prevent
# shebang recognition entirely. Modern PowerShell 7+ handles LF on
# Windows transparently.
*.ps1 text eol=lf


# Build and configuration files
Expand Down
50 changes: 50 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: "🚀 Feature request"
description: "💡 Suggest an idea for this project"
title: "[Feature] <title>"
labels: [enhancement, feature-request]
assignees: []
body:
- type: markdown
attributes:
value: |
## Thanks for suggesting a feature!

Please use this form to propose a new feature or enhancement for this project. Providing as much detail as possible helps us understand your idea and evaluate it effectively.

When completing this form, please:
- Describe the problem this feature will address.
- Explain the solution you'd like to see.
- List any alternative approaches you've considered.
- Add any relevant context, examples, or screenshots.
- type: textarea
id: problem
attributes:
label: Is your feature request related to a problem? Please describe.
description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
placeholder: Please describe the problem this feature will solve.
validations:
required: true
- type: textarea
id: solution
attributes:
label: Describe the solution you'd like
description: A clear and concise description of what you want to happen.
placeholder: What do you want to happen?
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Describe alternatives you've considered
description: A clear and concise description of any alternative solutions or features you've considered.
placeholder: List any alternative solutions or features you've tried or considered.
validations:
required: false
- type: textarea
id: context
attributes:
label: Additional context
description: Add any other context or screenshots about the feature request here.
placeholder: Any other context to explain your request?
validations:
required: false
76 changes: 76 additions & 0 deletions .github/ISSUE_TEMPLATE/maintenance-task.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: "✨ Maintenance task"
description: "Track an actionable improvement under the Maintenance framework (security, performance, testing, cleanup, docs, API, or CI/CD)."
title: "[Maintenance] <category>: <short description>"
labels: [maintenance-task]
assignees: []
body:
- type: markdown
attributes:
value: |
## Maintenance framework sub-issue

This template creates a **`maintenance-task`** sub-issue under this repo's parent `Maintenance: <repo>` issue. The new issue will auto-appear in the cross-repo Maintenance project board (URL listed in the parent `Maintenance: <repo>` issue body).

- Pick exactly **one** category in the dropdown below. The corresponding `maintenance - <category>` label will need to be added manually after creation (issue forms don't yet support dynamic label addition).
- Fill in **Scope** (what's done & why), **Acceptance** (when do we close this?), and **Links** (PRs, scan output, related issues).
- If you're closing this issue via a PR, include `Fixes #<this-issue-number>` in the PR body so the auto-add workflow marks the project item as Done.

- type: dropdown
id: category
attributes:
label: Category
description: "Pick exactly one. After creation, also add the corresponding `maintenance - <category>` label."
options:
- "security — scans, finding fixes, dependency vulnerability audit"
- "performance — profile, benchmark, optimize, validate gains"
- "testing — coverage, integration/smoke/mutation tests, fixtures"
- "cleanup — refactor for reuse / quality / efficiency"
- "docs — XML doc coverage, README, CHANGELOG, samples"
- "API — public/internal surface audit, breaking-change vigilance"
- "CI/CD — Docker, CI workflow, build/publish pipeline"
validations:
required: true

- type: textarea
id: scope
attributes:
label: Scope
description: "What needs to be done? What's the motivation?"
placeholder: |
e.g.
- Profile the hot path in `Extractor.ExtractAsync` and identify the dominant allocations.
- Goal: reduce per-record allocations to enable streaming larger inputs.
validations:
required: true

- type: textarea
id: acceptance
attributes:
label: Acceptance criteria
description: "When do we close this issue? Concrete observable outcomes."
placeholder: |
e.g.
- Benchmark X shows <50% of current allocations.
- No regression in existing benchmark suite (>5%).
- Updated benchmark numbers committed.
validations:
required: true

- type: textarea
id: links
attributes:
label: Links
description: "Related PRs, scan output, prior issues, external references."
placeholder: |
- Related PR: #...
- Scan output: ...
- Related issue: #...
validations:
required: false

- type: markdown
attributes:
value: |
---

💡 **Tip for agents (Copilot etc.):** When opening a maintenance-task sub-issue, use this template and pick the matching category. After creation, add the `maintenance - <category>` label manually. See `.github/copilot-instructions.md` for the full Maintenance framework convention.
Loading
Loading