Skip to content

docs(investigations): Magick.NET deferred-bug root cause — OBSOLETE, path replaced (dispatch h2utyb SECONDARY) - #722

Merged
jsboige merged 1 commit into
masterfrom
docs/magick-skip-investigation
Jul 6, 2026
Merged

docs(investigations): Magick.NET deferred-bug root cause — OBSOLETE, path replaced (dispatch h2utyb SECONDARY)#722
jsboige merged 1 commit into
masterfrom
docs/magick-skip-investigation

Conversation

@jsboige

@jsboige jsboige commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Root-cause investigation of the #719-flagged Magick.NET test skip. Dispatch h2utyb SECONDARY. Base master 7ebeda1. Docs only, 0 write Cards/.

Verdict: the Magick.NET crash is OBSOLETE — no longer reproducible. The code path that crashed (Freeplane + Magick SVG rasterization, skipped 2025-08-01) was REPLACED: TryAutomateSvgConversion now delegates to TryFreeMindSvgExport (FreeMind GUI + SendKeys, commit 46d6cd9), and production SVG rendering moved to Batik (PR #565). Evidence: grep Magick FallacyMindMapDocumentConfig.cs = 1 token = the dead using ImageMagick; (line 19), ZERO usages; the method body uses Process.Start+SendKeys, not Magick. Resolves #719 flag (a): Magick dependency in the SVG path is dead.

Magick.NET itself is healthy/load-bearing ELSEWHERE (ImageHelper.cs image loading + PdfManager.cs PDF collections) — only its SVG-path presence was the problem, now gone.

Fix options (post-tag, bundled #710/#719 lane): (1) reclassify skip as infra-gated "requires FreeMind GUI" [recommended]; (2) delete (Magick premise obsolete, path covered by Batik tests + #715); (3) retarget headless Batik. Minor cleanup: remove dead using ImageMagick;. No dedicated issue — folds into #719.

No live repro run: test sets FreeMindPath="" → early-return, never reaches Magick. Code analysis conclusive.

Relates: dispatch h2utyb (SECONDARY), #719, #710, #565, 46d6cd9, #133. Base 7ebeda1.

…path replaced, dispatch h2utyb)

Root-cause investigation of the #719-flagged test skip (SvgConversionIntegrationTests...
TryAutomateSvgConversion, "Temporairement désactivé pour isoler le crash Magick.NET", skipped
2025-08-01). Dispatch h2utyb SECONDARY (ai-01 2026-07-06 07:09). Base master 7ebeda1. Docs only,
0 write Cards/, 0 code change.

Verdict: the Magick.NET crash is OBSOLETE — no longer reproducible. The code path that crashed
(Freeplane + Magick SVG rasterization) was REPLACED: TryAutomateSvgConversion now delegates to
TryFreeMindSvgExport (FreeMind GUI process + SendKeys, commit 46d6cd9), and production SVG
rendering moved to Batik (PR #565, April 2026). Evidence (code=truth): grep Magick
FallacyMindMapDocumentConfig.cs = 1 token = the dead 'using ImageMagick;' at line 19, ZERO usages;
the method body uses Process.Start + SendKeys, not MagickImage. This resolves #719 flag question
(a): the Magick dependency in the SVG path is dead.

Magick.NET itself is healthy and load-bearing ELSEWHERE (unrelated to SVG): ImageHelper.cs (image
loading, new MagickImage) + PdfManager.cs (PDF image collections, MagickImageCollection). Only its
former presence in the SVG path was the problem, and that presence is gone.

Fix options (post-tag, bundled with #710/#719 test-hygiene lane): (1) reclassify skip as
infra-gated "requires FreeMind GUI" (recommended, accurate reason, preserves local smoke-test
value); (2) delete (Magick premise obsolete, path covered by Batik tests + #715); (3) retarget to
headless Batik (most work, overlaps #715). In all 3, the stale Magick skip reason must be replaced.
Minor cleanup: remove the dead 'using ImageMagick;' (line 19). No dedicated issue — folds into #719.

No live repro run: the test sets FreeMindPath="" so TryAutomateSvgConversion hits the FreeMind-not-
found early return (returns false), never reaching Magick (there is none). Current failure mode if
un-skipped = "FreeMind not found" assertion fail, NOT a Magick crash. Code analysis is conclusive.

Read-only: 0 write Cards/, 0 code change, 0 test execution. Reproducible via grep on
FallacyMindMapDocumentConfig.cs + git log on the skip line.

Dispatch h2utyb (SECONDARY). Base 7ebeda1.

Co-authored-by: Claude-Code <noreply@anthropic.com>
@jsboige
jsboige merged commit 081e596 into master Jul 6, 2026
3 checks passed
@jsboige
jsboige deleted the docs/magick-skip-investigation branch July 6, 2026 09:55
jsboige added a commit that referenced this pull request Jul 6, 2026
…er (4 warnings) (#731)

Third 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).

Cohesive sub-lot by area: all 4 remaining CS86xx in the MindmapGeneration SVG cluster
(3 files). This cluster sits in CLAUDE.md "Known Fragile Area #1 — SVG disambiguation" territory,
so each fix is the most conservative honest annotation, not a logic change.

Fixes (4 warnings):

- SvgConversionIntegrationTests.cs L59-60 (CS8602 method-null deref + CS8605 nullable unbox):
  `GetMethod` returns `MethodInfo?` and `Invoke` returns `object?`. The test is `[Fact(Skip=...)]`
  (the #719 Magick.NET skip — root-caused OBSOLETE by #722: the path was replaced by FreeMind GUI
  + Batik). Added `Assert.NotNull(method)` + `method!.Invoke(...)!` so the cast is honest. The
  skipped test never runs; the annotation just satisfies the compiler. NO behavioral change.
- SvgDisambiguationContractTests.cs L37 (CS8625): `G(string text, string id = null)` →
  `G(string text, string? id = null)`. The body already null-checks (`if (id != null)`) before
  `SetAttributeValue`, so `string?` is the honest param type. Caller fixture sites pass null to
  build <g> elements without an id — intentional.
- SvgPostProcessingTests.cs L33 (CS8604): `Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!`
  — GetDirectoryName returns `string?` (Location can in theory be empty); in a running test the
  assembly location is non-null, so the `!` documents that invariant.

DoD (measured on this branch, base master 240511c):
- dotnet build Tests.csproj --no-incremental: the 3 target files emit 0 CS86xx (4→0). 0 errors.
- dotnet test --filter MindmapGeneration: 85 pass / 1 skip (the Magick test, expected). 0 regression.
- dotnet test (full): 587 pass / 1 fail (OWL #133 permanent) / 5 skip (#719). 0 regression.

CsvHelper safety (#710 §3): NOT IN SCOPE — none of these files is a CsvHelper-mapped entity or
exercises the CSV load path. The mapping-risk suites are untouched.

Slice C remaining: 11 distinct CS86xx across 8 files (CsvGridConversion, ImageFileGenerator×2,
SimpleImageGenerator, OwlE2E, FallacyLinkFallback×3, LoggerMarkup, UtilityExtensions,
PKHierarchical). Follow in subsequent sub-lots.

Base 240511c. 0 Cards/ write, 0 rendering code change.

Dispatch x0ykyn (PRIMARY, Slice C-3). Base 240511c.

Co-authored-by: Your <your.email@example.com>
Co-authored-by: Claude-Code <noreply@anthropic.com>
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