Skip to content

Merge v13 into develop - #331

Merged
rwmcintosh merged 7 commits into
developfrom
v13
Jul 16, 2026
Merged

Merge v13 into develop#331
rwmcintosh merged 7 commits into
developfrom
v13

Conversation

@rwmcintosh

Copy link
Copy Markdown
Member

Promotes the v13 (13.0) line to develop, replacing the 12.x line.

develop was on the 12.x maintenance line (Core 12.3.32) while v13 is the 13.0 line (Core 13.0.119). The two develop-only commits were 12.3-specific (Core version bump 12.3.1 -> 12.3.32, batch-output regeneration, dimensions bump). To make develop become exactly the 13.0 tree, origin/develop was merged into v13 with -s ours (recording develop as a merged parent while keeping v13's tree), then two wanted items were ported forward on top:

  • Dimensions submodule advanced to develop's newer commit c144fe1 (2026-05-19, strictly ahead of v13's 71bf282 from 2025-08-20).
  • Batch reference outputs (data/Outputs/BatchFiles/*.json) taken from develop (newer than v13's).

The 12.3 Core version bump was intentionally dropped — v13 stays on OSPSuite.Core 13.0.119. develop is now a strict ancestor of v13, so this PR applies cleanly.

Workflow branch triggers already targeted develop on v13, so no retarget was needed.

Note: InstallationValidator v13 references OSPSuite.Core 13.0.119 (not yet bumped to the latest 13.0.134), and its nightly workflow is still named build-nightly_12.3.yml (cosmetic).

Please merge with a merge commit (do not squash or rebase).

🤖 Generated with Claude Code

msevestre and others added 4 commits March 10, 2026 16:23
* Replace MiKTeX/LaTeX reporting with Markdown + QuestPDF

Removes the dependency on OSPSuite.TeXReporting and MiKTeX, replacing
it with a simpler, pure .NET solution:

- Markdown reports with embedded SVG charts (viewable in VS Code, GitHub)
- PDF reports via QuestPDF (no external tools required)
- Custom SVG chart generator for 2D line charts with log/linear scale
- Report format switchable via ReportFormat enum

New files:
- Reporting/Charts/SvgChartGenerator.cs - SVG line chart generation
- Reporting/Markdown/* - Markdown builder pattern implementation
- Reporting/Pdf/PdfReportDocument.cs - QuestPDF document
- Services/MarkdownReportingTask.cs, PdfReportingTask.cs

Removed:
- All *TeXBuilder.cs files
- *Reporter.cs files
- OSPSuite.TeXReporting dependency from all projects

Closes #183

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Restore fixProductNameForWindows11 method for tests

The method was removed during cross-platform refactoring but is
needed by OperatingSystemInfoSpecs tests that use reflection to
call it.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Revert OperatingSystemInfo to original Windows-specific implementation

Keep the original Windows-specific OperatingSystemInfo that uses
Registry, WMI, and SystemInformation APIs. Update Core and Tests
projects to target net8.0-windows.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Trigger update

* Address PR comments

* Refactor test to use real MarkdownBuilderRepository

Replace TestMarkdownBuilderRepository with the real MarkdownBuilderRepository
and all production builders. This improves test coverage by exercising the
actual builder implementations rather than duplicating their logic.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Add MissingFileComparisonResult handling in Markdown and PDF reports

- Create MissingFileComparisonResultMarkdownBuilder to properly report
  missing file details including which folder contains the file and
  which folder is missing it
- Add ComposeMissingFileResult in PdfReportDocument to display the
  missing file validation message in PDF reports
- Register the new builder in ValidatorRegister
- Add builder to test setup

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Fix PR review findings: table escaping, null checks, and test refactoring

- Escape pipe characters in MarkdownReportContext.AppendTable to prevent
  broken markdown tables when cell values contain '|'
- Add null validation for installationValidationResult and RunSummary in
  both MarkdownReportingTask and PdfReportingTask before accessing StartTime
- Refactor MarkdownReportingSpecs to use ContextForIntegration, resolving
  IMarkdownReportingTask from the DI container instead of manually
  constructing all builders

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Refactor ValidationReportingTask to use ReportOptions parameter

Replace DefaultFormat property with ReportOptions parameter that includes:
- ReportFormat as flags enum (None, Markdown, Pdf, All)
- OpenReport boolean
- Convenience properties ExportToMarkdown and ExportToPdf

This allows generating both Markdown and PDF reports in a single call
by using ReportFormat.All.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Bump to version 13. ALso use correct builder

* Fix Markdown bold formatting by removing trailing space from ValidationResult caption

The trailing space in the caption prevented proper bold formatting in Markdown
output (**Result of the validation: ** instead of **Result of the validation:**).

* Only generate charts for invalid outputs in Markdown and PDF reports

Valid outputs with matching curves don't need charts. Removing the
valid-outputs-with-data loop prevents generating thousands of
unnecessary pages when a file has many outputs but only a few are invalid.

* Ensures that we export the expected format

* Add all valid curves back

* Use report-specific filenames for PDF output

Pass reportName parameter to reportOutputPath so PDF filenames reflect
the actual report type (FolderComparison vs InstallationValidation).

* Extract shared helpers, disable start without report format, add tests

- Extract ChartDataFactory.CreateFor() to eliminate duplicate
  createChartData methods in OutputComparisonResultMarkdownBuilder
  and PdfReportDocument
- Extract ColorExtensions.ToHexString() to replace colorToHex in
  SvgChartGenerator, toQuestColor in PdfReportDocument, and inline
  hex formatting in MarkdownReportContext
- Fix PDF run summary labels: start/end time now have their own
  labels instead of reusing BatchRunDuration for the start time
- Disable start button in MainView and SimulationComparisonView
  when neither PDF nor Markdown report format is selected
- Replace Enumerable.Select allocation with Enumerable.Repeat in
  MarkdownReportContext.AppendTable separator row
- Add MarkdownReportContextSpecs unit tests covering headings,
  tables, colored status, bold formatting, and content accumulation
- Add observations to MarkdownReportingSpecs for SVG chart,
  validation state, and deviation section

* Replace hardcoded strings with resources and add null guards

- Add localized resource keys to Assets.Reporting: StartTime, EndTime,
  Yes, No, OSLabel, FileWasContainedInFolder, ButWasMissingInFolder,
  ValidationPerformedIn
- Replace all hardcoded English strings in PdfReportDocument with
  Assets.Reporting resources for consistent localization
- Add constructor null guards in PdfReportDocument for validationResult,
  comparisonResult, and svgChartGenerator
- Add null guard for comparisonResult in both PdfReportingTask and
  MarkdownReportingTask CreateReport overloads

* Ensure enable state is reset

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: msevestre <msevestre@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 52 files, which is 2 over the limit of 50.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 075962a4-b4ba-4a63-86a4-2cfa0b23fd58

📥 Commits

Reviewing files that changed from the base of the PR and between 4507771 and 202c09b.

📒 Files selected for processing (66)
  • .github/workflows/build-and-test.yml
  • .github/workflows/build-nightly_13.0.yml
  • .github/workflows/coverage.yml
  • .github/workflows/nightly-badge.yml
  • .gitignore
  • src/InstallationValidator.Core/Assets/Captions.cs
  • src/InstallationValidator.Core/Domain/OperatingSystemInfo.cs
  • src/InstallationValidator.Core/InstallationValidator.Core.csproj
  • src/InstallationValidator.Core/Presentation/DTO/ReportOptionsDTO.cs
  • src/InstallationValidator.Core/Presentation/MainPresenter.cs
  • src/InstallationValidator.Core/Presentation/SimulationComparisonPresenter.cs
  • src/InstallationValidator.Core/Presentation/Views/IMainView.cs
  • src/InstallationValidator.Core/Presentation/Views/ISimulationComparisonView.cs
  • src/InstallationValidator.Core/Reporting/BatchComparisonResultReporter.cs
  • src/InstallationValidator.Core/Reporting/BatchComparisonResultTeXBuilder.cs
  • src/InstallationValidator.Core/Reporting/Charts/ChartData.cs
  • src/InstallationValidator.Core/Reporting/Charts/ChartDataFactory.cs
  • src/InstallationValidator.Core/Reporting/Charts/ColorExtensions.cs
  • src/InstallationValidator.Core/Reporting/Charts/SvgChartGenerator.cs
  • src/InstallationValidator.Core/Reporting/FileComparisonResultsTeXBuilder.cs
  • src/InstallationValidator.Core/Reporting/InstallationValidationResultReporter.cs
  • src/InstallationValidator.Core/Reporting/Markdown/BatchComparisonResultMarkdownBuilder.cs
  • src/InstallationValidator.Core/Reporting/Markdown/IMarkdownBuilder.cs
  • src/InstallationValidator.Core/Reporting/Markdown/InstallationValidationResultMarkdownBuilder.cs
  • src/InstallationValidator.Core/Reporting/Markdown/MarkdownBuilderRepository.cs
  • src/InstallationValidator.Core/Reporting/Markdown/MarkdownReportContext.cs
  • src/InstallationValidator.Core/Reporting/Markdown/MissingFileComparisonResultMarkdownBuilder.cs
  • src/InstallationValidator.Core/Reporting/Markdown/OperatingSystemInfoMarkdownBuilder.cs
  • src/InstallationValidator.Core/Reporting/Markdown/OutputComparisonResultMarkdownBuilder.cs
  • src/InstallationValidator.Core/Reporting/Markdown/OutputFileComparisonResultMarkdownBuilder.cs
  • src/InstallationValidator.Core/Reporting/Markdown/TimeComparisonResultMarkdownBuilder.cs
  • src/InstallationValidator.Core/Reporting/Markdown/ValidationRunSummaryMarkdownBuilder.cs
  • src/InstallationValidator.Core/Reporting/Markdown/ValidationStateReportMarkdownBuilder.cs
  • src/InstallationValidator.Core/Reporting/MissingFileComparisonResultTexBuilder.cs
  • src/InstallationValidator.Core/Reporting/OperatingSystemInfoTeXBuilder.cs
  • src/InstallationValidator.Core/Reporting/OutputComparisonResultTeXBuilder.cs
  • src/InstallationValidator.Core/Reporting/OutputFileComparisonResultTexBuilder.cs
  • src/InstallationValidator.Core/Reporting/Pdf/PdfReportDocument.cs
  • src/InstallationValidator.Core/Reporting/TimeComparisonResultTeXBuilder.cs
  • src/InstallationValidator.Core/Reporting/ValidationRunSummaryTeXBuilder.cs
  • src/InstallationValidator.Core/Reporting/ValidationStateReportTeXBuilder.cs
  • src/InstallationValidator.Core/Reporting/ValueComparisonResultTeXBuilder.cs
  • src/InstallationValidator.Core/Reporting/ValueComparisonsResultTeXBuilder.cs
  • src/InstallationValidator.Core/Services/BatchComparisonTask.cs
  • src/InstallationValidator.Core/Services/MarkdownReportingTask.cs
  • src/InstallationValidator.Core/Services/PdfReportingTask.cs
  • src/InstallationValidator.Core/Services/ValidationReportingTask.cs
  • src/InstallationValidator.Core/ValidatorRegister.cs
  • src/InstallationValidator/InstallationValidator.csproj
  • src/InstallationValidator/Program.cs
  • src/InstallationValidator/Views/MainView.Designer.cs
  • src/InstallationValidator/Views/MainView.cs
  • src/SimulationOutputComparer/Program.cs
  • src/SimulationOutputComparer/SimulationOutputComparer.csproj
  • src/SimulationOutputComparer/Views/SimulationComparisonView.Designer.cs
  • src/SimulationOutputComparer/Views/SimulationComparisonView.cs
  • tests/InstallationValidator.Tests/InstallationValidator.Tests.csproj
  • tests/InstallationValidator.Tests/IntegrationTests/ReportingSpecs.cs
  • tests/InstallationValidator.Tests/Presentation/MainPresenterSpecs.cs
  • tests/InstallationValidator.Tests/Presentation/SimulationComparisonPresenterSpecs.cs
  • tests/InstallationValidator.Tests/Reporting/MarkdownReportContextSpecs.cs
  • tests/InstallationValidator.Tests/Reporting/MarkdownReportingSpecs.cs
  • tests/InstallationValidator.Tests/Reporting/PdfReportingSpecs.cs
  • tests/InstallationValidator.Tests/Reporting/SvgChartGeneratorSpecs.cs
  • tests/InstallationValidator.Tests/Services/BatchStarterTaskSpecs.cs
  • tests/InstallationValidator.Tests/Services/ValidationReportingTaskSpecs.cs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Review on demand using usage pricing
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch v13

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Bump nightly version 12.3->13.0, target net10.0-windows output paths, and
update actions/checkout@v6 and actions/upload-artifact@v7. Set build-and-test
temp-version and coverage build version to 13.0. Point nightly-badge at the
renamed build-nightly_13.0 workflow.
@Yuri05

Yuri05 commented Jul 16, 2026

Copy link
Copy Markdown
Member

Overview and review by Perplexity :)

Here's a full code review of PR #331 — "Merge v13 into develop" in the InstallationValidator repository.

TL;DR

The PR's headline change is a complete replacement of MiKTeX/LaTeX reporting with a Markdown + QuestPDF pipeline, alongside a .NET 10 upgrade and a bump of OSPSuite.Core to 13.0.134. The architecture is clean and the removal of the TeX external dependency is a real improvement — but there are a few issues worth addressing before merging. [github](https://github.com/Open-Systems-Pharmacology/InstallationValidator/pulls)


Findings at a Glance

🔴 Must-Fix (3 items)

  1. Two-curve limit is hard-codedChartData has named Curve1/Curve2 properties instead of a List<CurveData>. This will require a breaking redesign the moment a comparison output needs more than two series.

  2. Log-scale axis padding bug — In SvgChartGenerator.appendAxes, Y-axis padding is applied before the log transform. If minY is very small (e.g., 1e-6), the padded minimum can go negative, causing Math.Log10 to fall back to -1 and distorting all axis labels on log-scale charts.

  3. PdfReportingTask doesn't support cancellation — Both CreateReport overloads wrap document.GeneratePdf() in a bare Task.Run with no CancellationToken. The UI's Stop button cannot interrupt an in-progress PDF generation.

🟡 Should-Fix (5 items)

  1. QuestPDF licence initialised in 3 placesQuestPDF.Settings.License = LicenseType.Community appears in Program.cs, SimulationOutputComparer/Program.cs, and the test base class. A single centralised call is sufficient.

  2. Legend truncation at 12 chars is too aggressivetruncate(curve.Name, 12) turns Organism|Brain|Concentration into Organism|Bra.... The SVG viewBox has plenty of room for a longer limit.

  3. escapeXml has broken indentation in SvgChartGenerator — Harmless but suggests the method was pasted in; inconsistent with the surrounding code.

  4. ReportOptionsDTO asymmetric defaults (ExportToPdf = true, ExportToMarkdown = false) — The intent behind this default is not explained; a comment or test would clarify it.

  5. Nightly workflow still named build-nightly_12.3.yml — Acknowledged as cosmetic in the PR description but should be renamed to avoid contributor confusion. [github](https://github.com/Open-Systems-Pharmacology/InstallationValidator/pulls)

🟢 Informational

  • The Markdown AppendColoredStatus method uses inline HTML <span> tags for coloured validation state — fine for GitHub/VS Code renderers but will render as raw HTML in strict environments.
  • System.Drawing.Color is used for chart colours; non-issue since the target is net10.0-windows.
  • The OSPSuite.Core 13.0.119 → 13.0.134 bump in the final commit should be verified against any breaking changes in that package. [github](https://github.com/Open-Systems-Pharmacology/InstallationValidator/pulls)

Architecture Assessment

The new reporting layer is well-designed. It uses the same BuilderRepository<IMarkdownBuilder> visitor pattern already established in OSPSuite, so adding a new output type requires only a single new class. MarkdownReportContext cleanly separates string-building concerns from business logic. ISvgChartGenerator is properly interface-driven, and SvgChartGenerator is registered as a singleton shared between both the Markdown and PDF pipelines — correct and efficient. [github](https://github.com/Open-Systems-Pharmacology/InstallationValidator/pulls)

The report covers all the details, findings, and the merge recommendation.

@Yuri05

Yuri05 commented Jul 16, 2026

Copy link
Copy Markdown
Member

The PR's headline change is a complete replacement of MiKTeX/LaTeX reporting with a Markdown + QuestPDF pipeline, alongside a .NET 10 upgrade and a bump of OSPSuite.Core to 13.0.134. The architecture is clean and the removal of the TeX external dependency is a real improvement — but there are a few issues worth addressing before merging. [github](https://github.com/Open-Systems-Pharmacology/InstallationValidator/pulls)

The issues should be addressed later, not in this PR

@rwmcintosh
rwmcintosh merged commit ea08263 into develop Jul 16, 2026
2 checks passed
@rwmcintosh
rwmcintosh deleted the v13 branch July 16, 2026 15:32
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.

3 participants