Skip to content

fix(368): remediate nullable-reference debt in SVGControl/ via per-file opt-in#377

Merged
drmoisan merged 2 commits into
epic/utilitiescs-nullable-remediation-integrationfrom
feature/utilitiescs-nullable-svgcontrol-368
Jul 19, 2026
Merged

fix(368): remediate nullable-reference debt in SVGControl/ via per-file opt-in#377
drmoisan merged 2 commits into
epic/utilitiescs-nullable-remediation-integrationfrom
feature/utilitiescs-nullable-svgcontrol-368

Conversation

@drmoisan

Copy link
Copy Markdown
Owner

Summary

  • Remediates pre-existing nullable-reference-type debt (CS86xx) in the 12 hand-authored .cs files under SVGControl/ (a separate net481 WinForms control project, WinForms controls + SVG parser/renderer/selector + type converters/editors) using a per-file #nullable enable opt-in. No project-level or solution-level <Nullable> element is introduced; SVGControl.csproj retains no <Nullable> element.
  • Annotation and null-safety only: nullable annotations (?), null guards, justified null-forgiving operators (!), and flow-narrowed locals. No behavior changes, no refactors, no renames/deletions of dead code (SvgOptionsConverter1, unreferenced SVGParser.cs), no API redesign.
  • Fixes an incidental Set-StrictMode scalar/array-coercion bug in the shared scripts/vscode/Invoke-MSTestWithCoverage.ps1 test-assembly discovery pipeline (wraps the Get-ChildItem pipeline result in @(...)), discovered while capturing this feature's own coverage evidence.
  • This is Wave-0 child issue Feature: utilitiescs-nullable-svgcontrol #368 of the utilitiescs-nullable-remediation epic. Base branch is the epic integration branch, not main.

Verification

  • dotnet tool run csharpier check . — clean.
  • msbuild TaskMaster.sln /t:Rebuild /p:Configuration=Debug /p:Platform="Any CPU" /p:TreatWarningsAsErrors=true (the per-file pragma gate, solution-wide, without /p:Nullable=enable) — zero CS8xxx diagnostics anywhere in the solution. Six pre-existing, unrelated errors remain (CS0649 x2 in SvgImageSelector.cs, CS0006 x4 in VBFunctions.csproj), confirmed present at this feature's own Phase 0 baseline and reproduced independently by the reviewer and by the orchestrator.
  • pwsh scripts/vscode/Invoke-MSTestWithCoverage.ps1 — 37/37 tests passed; RelativePath.cs (the one file with a pre-existing automated baseline) shows byte-identical coverage before/after (56.75% line / 54.35% branch).
  • No <Nullable> element exists in SVGControl.csproj or at the solution level (AC2), independently reverified.

Acceptance Criteria (issue #368)

All 6 acceptance criteria (AC1-AC6) are checked off in docs/features/active/utilitiescs-nullable-svgcontrol/issue.md and were independently re-verified by feature-review (not merely re-read): zero CS86xx under the per-file pragma, no project/solution <Nullable> element, no behavior change, no coverage regression, behavior-compatible public signatures, and Designer/generated files left untouched or only mechanically edited.

Known, accepted, out-of-scope findings (not introduced by this feature)

Feature-review flagged two procedural findings, both dispositioned in
docs/features/active/utilitiescs-nullable-svgcontrol/coverage-artifact-disposition.2026-07-19T12-00.md
as known, accepted, out-of-feature-scope gaps, consistent with documented repository precedent
(issue #309 / PR #311, merged 2026-07-11 with an identical finding unresolved):

  1. Canonical artifacts/csharp/coverage.xml / artifacts/pester/powershell-coverage.xml absence. Independently reproduced: a plain msbuild TaskMaster.sln /t:Build fails CS0006 for UtilitiesCS.csproj/VBFunctions.csproj due to a pre-existing packages.config analyzer-version-pin mismatch, unrelated to SVGControl/ and unrelated to the already-fixed Moq/binding-redirect issue (Bug: stale-app-config-binding-redirects #354/PR Fix stale app.config binding redirects across the solution #359, already merged into this branch). This blocks generation of a genuine repo-wide C# coverage artifact in this environment; not introduced or worsened by this feature.
  2. Missing regression test for the incidental PowerShell fix. The Invoke-MSTestWithCoverage.ps1 array-wrap fix was independently re-verified functionally correct by rebuilding and re-running the affected code path; a follow-up extraction + Pester test is recommended but not merge-blocking (tracked in the disposition doc).

Evidence

Full baseline, per-batch, and final-QC evidence lives under
docs/features/active/utilitiescs-nullable-svgcontrol/evidence/{baseline,qa-gates,regression-testing,other}/.
Review artifacts: policy-audit.2026-07-19T11-15.md, code-review.2026-07-19T11-15.md,
feature-audit.2026-07-19T11-15.md, remediation-inputs.2026-07-19T11-15.md.

drmoisan and others added 2 commits July 19, 2026 09:30
…ile opt-in

Adds #nullable enable pragmas to the 12 hand-authored SVGControl/ files
(WinForms controls, SVG parser/renderer/selector, type converters) and
resolves all CS86xx diagnostics under the pragma gate, with no project-
or solution-level <Nullable> element introduced. Annotation and
null-safety only; no behavior changes. Fixes a StrictMode array-coercion
bug in Invoke-MSTestWithCoverage.ps1 discovered while capturing coverage
evidence. All 6 acceptance criteria (issue #368) verified and checked off.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UXCu1xPtNbJs2HwKxgS9Bv
…ition

Records the independent feature-review (policy-audit, code-review,
feature-audit) confirming all 6 ACs and zero CS86xx solution-wide, plus
the orchestrator's disposition of the two procedural findings (coverage-
artifact absence, missing regression test for an incidental shared-script
fix) as known, accepted, out-of-feature-scope gaps consistent with
documented repository precedent (issue #309 / PR #311).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UXCu1xPtNbJs2HwKxgS9Bv
@drmoisan
drmoisan merged commit 8b95d4a into epic/utilitiescs-nullable-remediation-integration Jul 19, 2026
@drmoisan
drmoisan deleted the feature/utilitiescs-nullable-svgcontrol-368 branch July 21, 2026 01:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant