test(tests): nullable-cleanup Slice C-5 — FallacyLinkFallback SetLink null (#710, x0ykyn) - #733
Merged
Merged
Conversation
… null (3 warnings) Fifth sub-lot of Slice C (CS86xx nullable-flow) of the #710 nullable-cleanup plan (dispatch x0ykyn PRIMARY; follows Slice A #727, B #728, C-1 #729, C-2 #730, C-3 #731, C-4 #732). Single-signature fix: 3 CS8625 (L115/135/152) all stem from `SetLink(f, linkProp, null)` where the helper was declared `SetLink(Fallacy f, string propName, string value)`. The null is INTENTIONAL — the FallacyLinkFallback test suite deliberately clears a non-source language link to exercise the mind-map link fallback cascade (non-source null → EN → FR source-floor → null floor). `string? value` is the honest param type; the body `SetValue(f, value)` accepts object so null is runtime-legal. This is the fragile-area link-fallback contract pinned by this suite (CLAUDE.md mind-map localization) — the annotation changes nothing about the cascade behavior, only the declared parameter type. Direct confirmation: all 29 FallacyLinkFallback tests pass unchanged. DoD (measured on this branch, base master 240511c): - dotnet build Tests.csproj --no-incremental: FallacyLinkFallback emits 0 CS86xx (3→0). 0 errors. - dotnet test --filter FallacyLinkFallback: 29/29 pass. - dotnet test (full): 587 pass / 1 fail (OWL #133 permanent) / 5 skip (#719). 0 regression. CsvHelper safety (#710 §3): NOT IN SCOPE — FallacyLinkFallback exercises the link-fallback cascade via reflection on Fallacy entities, not the CsvHelper CSV load path. Slice C remaining: 5 distinct CS86xx across 5 files (CsvGridConversion, OwlE2E, LoggerMarkup, UtilityExtensions, PKHierarchical) — singletons, bundle into a final C-final lot. Base 240511c. 0 Cards/ write, 0 rendering code change. Dispatch x0ykyn (PRIMARY, Slice C-5). Base 240511c. Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 6, 2026
…omplete (#710) (#734) Final sub-lot of Slice C (CS86xx nullable-flow) of the #710 nullable-cleanup plan (dispatch x0ykyn PRIMARY; follows Slice A #727, B #728, C-1 #729, C-2 #730, C-3 #731, C-4 #732, C-5 #733). This completes Slice C: all 32 distinct CS86xx in Tests/ are addressed across the 7 sub-lots C-1..C-final (merged set), leaving 0 CS86xx once all slice PRs are merged. The 5 singletons (one warning per file, 5 different areas): - CsvGridConversionContractTests.cs L176 (CS8625): `new List<object> { "a", null!, "c" }` — the null cell is INTENTIONAL (test name "GridToCsv_NullCells_BecomeEmptyStrings", pins the `cell?.ToString() ?? ""` guard). `null!` is the honest suppression (runtime-legal null cell, annotation-strict). - OwlE2EGenerationValidationTests.cs L60 (CS8603): `private static string? ResolveRepoFile(...)` — path-finder helper legitimately returns null when the ontology file isn't found walking up from the bin dir (same idiom as #715 FindRepoVirtuesCsv). The sole caller (L47) already null-checks and throws FileNotFoundException (L48-54); the throw guarantees `path` non-null at L55 FromFile, so no caller `!` needed. - LoggerMarkupSafetyTests.cs L58 (CS8600): `string output = null!;` — closure-capture pattern (assigned in the lambda at L59, asserted at L62). `null!` is the honest initializer. - UtilityExtensionsLayoutTests.cs L142 (CS8600): `((string)null!).PathIsUrl()` — the null is INTENTIONAL (test name "PathIsUrl_Returns_False_For_Null", pins the null-guard so a regression that dropped it would NRE). The `null!` documents that intent. - PKHierarchicalGroupingTests.cs L25 (CS8619): `.Select(record => record["path"].ToString()!)` — the path key is always set by BuildRecords (L22), so ToString on the boxed string is non-null; `!` documents that invariant for the ToHashSet<string>() return type. DoD (measured on this branch, base master 240511c): - dotnet build Tests.csproj --no-incremental: the 5 target files emit 0 CS86xx (5→0). 0 errors. - dotnet test (targeted GSheetSync+Ontology+Utility+PKHierarchical): 52 pass / 1 fail (OWL #133 permanent known-fail, pre-existing — not a regression; the 3 OTHER OwlE2E tests pass). - dotnet test (full): 587 pass / 1 fail (OWL #133) / 5 skip (#719). 0 regression. CsvHelper safety (#710 §3): NOT IN SCOPE — none of these 5 files is a CsvHelper-mapped entity or exercises the CSV load path (GSheet grid round-trip, OWL ontology load via OwlAdapter, Logger markup, path utility, PK grouping reflection). #710 plan status once all 8 PR (#727-733 + this) merged: Tests/ CS86xx from 98 raw (49 distinct) to 0. Slice A (6 raw CS0108/CS0219) + Slice B (20 raw CS8618) + Slice C (32 distinct CS86xx) = the full 98-raw baseline. The #715 drift (CS8603, 96→98) closed at C-2. Base 240511c. 0 Cards/ write, 0 rendering code change. Dispatch x0ykyn (PRIMARY, Slice C-final — Slice C complete). Base 240511c. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.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.
Slice C-5 of #710 nullable-cleanup — FallacyLinkFallback
SetLinknull (3 warnings)Fifth sub-lot of Slice C (CS86xx nullable-flow). Follows Slice A (#727), B (#728), C-1 (#729), C-2 (#730), C-3 (#731), C-4 (#732).
Single-signature fix — 3 CS8625 (L115/135/152) all from one helper
All three stem from
SetLink(f, linkProp, null)where the helper was declared:The
nullis intentional — the FallacyLinkFallback suite deliberately clears a non-source language link to exercise the mind-map link fallback cascade (non-source null → EN → FR source-floor → null floor).string? valueis the honest param type; the bodySetValue(f, value)acceptsobjectso null is runtime-legal.This is the fragile-area link-fallback contract pinned by this suite (CLAUDE.md mind-map localization). The annotation changes nothing about the cascade behavior — only the declared parameter type. Direct confirmation: all 29 FallacyLinkFallback tests pass unchanged.
DoD (measured on this branch, base master
240511c8)dotnet buildTests.csproj --no-incremental: FallacyLinkFallback emits 0 CS86xx (3→0). 0 errors.dotnet test --filter FallacyLinkFallback: 29/29 pass.dotnet test(full): 587 pass / 1 fail (OWL feat(ontology): Publish OWL ontology to public endpoint #133 permanent) / 5 skip (docs(repo): test-skips inventory — 4 OAuth-gated legit + 1 Magick.NET deferred-bug (dispatch ynv05a idle) #719). 0 regression.CsvHelper safety (#710 §3)
NOT IN SCOPE. FallacyLinkFallback exercises the link-fallback cascade via reflection on
Fallacyentities, not the CsvHelper CSV load path.Slice C remaining (~5 distinct CS86xx, final lot)
5 singletons across 5 files: CsvGridConversion, OwlE2E, LoggerMarkup, UtilityExtensions, PKHierarchical — to be bundled into a final C-final lot.
Non-goals
Cards/. 0 production / card-rendering code changed. Tests-only.Base
240511c8. Dispatchx0ykynPRIMARY (Slice C-5). Independent of #727/#728/#729/#730/#731/#732 (different files; this branch off master).🤖 Generated with Claude Code
Co-authored-by: Claude-Code noreply@anthropic.com