Skip to content

Split SVG codec into DemaConsulting.CanvasNet.Svg package - #30

Merged
Malcolmnixon merged 10 commits into
mainfrom
feature/svg-package-split
Sep 29, 2026
Merged

Malcolmnixon merged 10 commits into
mainfrom
feature/svg-package-split

Conversation

@Malcolmnixon

Copy link
Copy Markdown
Member

Summary

Splits the SVG codec out of the monolithic DemaConsulting.CanvasNet package
into its own DemaConsulting.CanvasNet.Svg NuGet package, as the first step
in a broader packaging strategy ahead of adding much larger format codecs
(PDF/PPTX/VSDX).

Changes

  • New project src/DemaConsulting.CanvasNet.Svg containing the SVG codec
    (34 files, namespace DemaConsulting.CanvasNet.Svg), referencing core
    DemaConsulting.CanvasNet.
  • New test project test/DemaConsulting.CanvasNet.Svg.Tests with the moved
    SVG unit/fixture tests plus the SVG integration tests relocated out of
    CanvasNetTests.cs.
  • Core package: SVG codec removed, NamespaceDoc.cs updated.
  • New top-level Software System artifacts (canvas-net-svg) added under
    docs/reqstream, docs/design, docs/verification, and docs/sysml2,
    per software-items.md (a new distributable package = a new top-level
    Software System, not a nested unit). Old nested canvas-net/codecs/svg-codec.*
    files removed; parent canvas-net docs updated with cross-references.
  • .reviewmark.yaml, CanvasNet.slnx, .github/workflows/build.yaml,
    README.md, requirements.yaml updated for the new package.
  • lint.ps1: removed an unsafe git stash-based dotnet format check
    (added in 739b55d) that corrupts the working tree on bulk git mv
    renames. Replaced with a simple non-mutating --verify-no-changes
    dry-run, with a text-match fallback for the still-open, macOS-specific
    dotnet/sdk#41422 exit-code bug.

Validation

  • build.ps1: 0 warnings, 4926/4926 tests passing.
  • lint.ps1: passes cleanly end-to-end (yamllint, cspell/markdownlint,
    reqstream, versionmark, reviewmark, sysml2tools, dotnet format).
  • dotnet pack verified to produce correct nupkg/snupkg pairs with the
    expected package dependency edge.

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Malcolm Nixon and others added 2 commits September 28, 2026 20:18
Extracts the SVG rasterization codec into its own NuGet package and
software system (CanvasNetSvg), separate from the core CanvasNet
package/system, per software-items.md. Moves source, tests, and
fixtures into new src/DemaConsulting.CanvasNet.Svg and
test/DemaConsulting.CanvasNet.Svg.Tests projects, renames the SVG
codec namespace to DemaConsulting.CanvasNet.Svg, and promotes SVG's
requirements/design/verification/SysML2 model to top-level
canvas-net-svg artifacts parallel to canvas-net.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the stash-push/format/diff/checkout/stash-pop dance (added in
739b55d to work around dotnet/sdk#41422) with a simple non-mutating
dry-run check. The stash-based approach snapshots the full worktree
but only reverts a pathspec-scoped subset, which corrupts the repo
when combined with bulk git-mv renames (as encountered while
splitting the SVG codec into its own package). dotnet/sdk#41422 is
confirmed still open and macOS-specific; its diagnostic text
("failed to verify formatting") is printed reliably regardless of
the exit-code bug, so checking exit code OR that text is a safe
fallback that never touches git state.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings September 29, 2026 00:35

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The package boundary exposes core internals, and the new system has unresolved documentation-build and verification-traceability gaps.

Review effort: Balanced
Findings: 1 High severity · 4 Medium severity · 4 Low severity

Open (9)
What changed in this PR

Splits SVG rasterization into a dedicated DemaConsulting.CanvasNet.Svg package, with separate tests, architecture artifacts, and packaging support.

Changes:

  • Moves the SVG codec and tests into dedicated projects and namespace.
  • Adds CanvasNetSvg requirements, design, verification, and SysML2 artifacts.
  • Updates CI, solution, documentation, ReviewMark, and formatting validation.
File Description
test/​DemaConsulting.CanvasNet.Tests/​DemaConsulting.CanvasNet.Tests.csproj Removes SVG fixtures from core tests.
test/​DemaConsulting.CanvasNet.Tests/​CanvasNetTests.cs Removes SVG integration tests.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgSystemIntegrationTests.cs Adds SVG system tests.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtureTests.cs Moves fixture tests and namespace.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtures/​WikimediaCommons.LICENSE Adds fixture licensing.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtures/​use-reference.svg Adds use-reference fixture.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtures/​tolerant-unsupported.svg Adds unsupported-element fixture.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtures/​text.svg Adds text fixture.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtures/​SvgGradient.svg Adds real-world gradient fixture.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtures/​shapes.svg Adds shape fixture.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtures/​README.md Documents SVG fixtures.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtures/​label-halo.svg Adds filter fixture.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtures/​groups-and-transforms.svg Adds transform fixture.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtures/​gradient.svg Adds basic gradient fixture.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtures/​css-styling.svg Adds CSS fixture.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgFixtures/​arrow-markers.svg Adds marker fixture.
test/​DemaConsulting.CanvasNet.Svg.Tests/​SvgCodecTests.cs Moves SVG unit tests.
test/​DemaConsulting.CanvasNet.Svg.Tests/​DemaConsulting.CanvasNet.Svg.Tests.csproj Defines the SVG test project.
src/​DemaConsulting.CanvasNet/​DemaConsulting.CanvasNet.csproj Grants SVG access to core internals.
src/​DemaConsulting.CanvasNet/​Codecs/​NamespaceDoc.cs Removes SVG from core codec docs.
src/​DemaConsulting.CanvasNet.Svg/​SvgFontStyle.cs Moves font-style API namespace.
src/​DemaConsulting.CanvasNet.Svg/​SvgFontFace.cs Moves font-face API namespace.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Text.cs Moves SVG text implementation.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Shapes.cs Moves shape rendering.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.PreserveAspectRatio.cs Moves aspect-ratio handling.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Patterns.cs Moves pattern rendering.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.PathRender.cs Moves path rendering.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.PathData.cs Moves path parsing.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Parsing.cs Moves general parsing.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Paint.cs Moves paint resolution.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Markers.cs Moves marker rendering.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Image.cs Moves embedded-image rendering.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Gradients.cs Moves gradient rendering.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Filters.Turbulence.cs Moves turbulence filters.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Filters.Tile.cs Moves tile filters.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Filters.Morphology.cs Moves morphology filters.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Filters.Lighting.cs Moves lighting filters.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Filters.FeImage.cs Moves image filters.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Filters.DropShadow.cs Moves drop-shadow filters.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Filters.DisplacementMap.cs Moves displacement filters.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Filters.cs Moves filter pipeline.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Filters.Convolution.cs Moves convolution filters.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Filters.ComponentTransfer.cs Moves component-transfer filters.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Filters.ColorMatrix.cs Moves color-matrix filters.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Filters.Blend.cs Moves blend filters.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Elements.cs Moves element dispatch.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Css.Selectors.cs Moves CSS selector handling.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Css.Parser.cs Moves CSS parsing.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Css.Cascade.cs Moves CSS cascade handling.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.cs Moves the public SVG codec API.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Core.cs Moves core SVG logic.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.ClippingAndMasking.cs Moves clipping and masking.
src/​DemaConsulting.CanvasNet.Svg/​SvgCodec.Attributes.cs Moves attribute handling.
src/​DemaConsulting.CanvasNet.Svg/​NamespaceDoc.cs Documents the SVG namespace.
src/​DemaConsulting.CanvasNet.Svg/​DemaConsulting.CanvasNet.Svg.csproj Defines the SVG NuGet project.
requirements.yaml Includes CanvasNetSvg requirements.
README.md Documents separate package installation.
lint.ps1 Replaces mutating format validation.
docs/​verification/​canvas-net/​codecs.md Removes SVG from core verification.
docs/​verification/​canvas-net-svg/​svg-codec.md Rehomes SVG unit verification.
docs/​verification/​canvas-net-svg.md Adds CanvasNetSvg system verification.
docs/​user_guide/​introduction.md Documents the new package namespace.
docs/​sysml2/​views/​design-views.sysml Adds the CanvasNetSvg view.
docs/​sysml2/​model/​canvas-net/​codecs/​svg-codec.sysml Removes the old nested model.
docs/​sysml2/​model/​canvas-net/​codecs.sysml Removes SVG from core codecs.
docs/​sysml2/​model/​canvas-net.sysml Records the sibling system dependency.
docs/​sysml2/​model/​canvas-net-svg/​svg-codec.sysml Adds the SVG unit model.
docs/​sysml2/​model/​canvas-net-svg.sysml Adds the CanvasNetSvg system model.
docs/​reqstream/​canvas-net/​codecs.yaml Removes SVG codec requirements.
docs/​reqstream/​canvas-net.yaml Removes SVG system requirements from core.
docs/​reqstream/​canvas-net-svg.yaml Adds CanvasNetSvg system requirements.
docs/​design/​introduction.md Adds the sibling system structure.
docs/​design/​canvas-net/​codecs.md Removes SVG from core codec design.
docs/​design/​canvas-net-svg.md Adds CanvasNetSvg system design.
CanvasNet.slnx Adds SVG source and test projects.
.reviewmark.yaml Adds CanvasNetSvg review sets.
.github/​workflows/​build.yaml Uploads SVG NuGet packages.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread docs/design/canvas-net-svg.md Resolved
Comment thread docs/design/canvas-net-svg.md Resolved
Comment thread docs/reqstream/canvas-net-svg.yaml Resolved
Comment thread docs/verification/canvas-net-svg.md Resolved
Comment thread docs/design/canvas-net-svg.md Resolved
Comment thread docs/sysml2/model/canvas-net-svg.sysml Resolved
Comment thread docs/verification/canvas-net-svg.md Resolved
Malcolm Nixon added 2 commits September 28, 2026 21:01
1. Remove cross-package InternalsVisibleTo from CanvasNet to
   CanvasNet.Svg; SvgCodec.Markers.cs now computes the closing-edge
   tangent directly via NormalizeOrNull instead of calling internal
   PathCommand.LineTo.
2. Add canvas-net-svg.md and canvas-net-svg/svg-codec.md to
   docs/design/definition.yaml's input-files.
3. Add docs/reqstream/canvas-net-svg/platform-requirements.yaml
   (mirrors canvas-net/platform-requirements.yaml), wire it into
   requirements.yaml and the CanvasNetSvg-Design review-set in
   .reviewmark.yaml.
4. Add 16 new CanvasNetSvg_SystemIntegration_* system-level tests to
   SvgSystemIntegrationTests.cs covering every top-level CanvasNetSvg
   requirement that previously had only unit-test (SvgCodec_*)
   evidence, and link them in docs/reqstream/canvas-net-svg.yaml.
5. Add canvas-net-svg.md and canvas-net-svg/svg-codec.md to
   docs/verification/definition.yaml's input-files, and mention
   CanvasNetSvg coverage in docs/verification/introduction.md's scope.
6. Rewrite the design doc's Risk Control Measures section to
   separate tolerantly-skipped no-effect constructs from reference
   cycles and resource-disproportionate constructs, both of which are
   rejected via a thrown InvalidDataException.
7. Correct docs/sysml2/model/canvas-net-svg.sysml wording: CanvasNet
   and CanvasNetSvg share a git repository but are separate NuGet
   packages.
8. Reword the "no I/O" claim in docs/verification/canvas-net-svg.md
   to distinguish no network/service I/O from supported local
   file-path I/O via Load(string)/GetInfo(string), and add/rename
   verification test-scenario descriptions to match the current
   public test suite.
9. Rename the two CanvasNet_SystemIntegration_* tests in
   SvgSystemIntegrationTests.cs to the CanvasNetSvg_ prefix, and
   update every reqstream/verification cross-reference to the old
   names.
Supersede the earlier option (a) fix (a private, SVG-package-local
tangent helper) with option (b): a deliberate, documented, tested
PUBLIC core API, since a future PDF/PPTX/VSDX codec package will
plausibly need the same path-segment-tangent computation for its own
marker/arrowhead-style rendering.

- Add PathCommand.ComputeTangents(start) (public instance method) to
  DemaConsulting.CanvasNet, computing a command's outgoing/incoming
  unit tangent directions for LineTo/QuadraticBezierTo/CubicBezierTo,
  returning (null, null) for ArcTo/Close.
- Make PathCommand.LineTo(end) public (previously internal), so an
  external consumer can synthesize a standalone line-segment command
  (needed to represent an implicit closing edge, which is never
  itself recorded as its own PathCommand).
- Update SvgCodec.Markers.cs to call command.ComputeTangents(current)
  and PathCommand.LineTo(subpath.Start).ComputeTangents(...) instead
  of its own private duplicate of this logic.
- Add PathCommandTests.cs (9 tests) to DemaConsulting.CanvasNet.Tests
  covering LineTo and ComputeTangents for every PathCommandType.
- Add CanvasNet-Geometry-PathCommand-PublicLineToFactory and
  CanvasNet-Geometry-PathCommand-ComputeTangents requirements to
  docs/reqstream/canvas-net/geometry/path.yaml, and corresponding
  design/verification coverage in
  docs/design/canvas-net/geometry/path.md and
  docs/verification/canvas-net/geometry/path.md.
- Add the new test file to the CanvasNet-Geometry-Path review-set in
  .reviewmark.yaml.

The cross-package InternalsVisibleTo grant remains removed, as
before; SvgCodec.Markers.cs no longer needs it because it now calls
only PathCommand's public API.
Copilot AI review requested due to automatic review settings September 29, 2026 01:18

Copilot AI left a comment

Copy link
Copy Markdown

Comment thread lint.ps1 Resolved
Comment thread docs/reqstream/canvas-net-svg.yaml Resolved
Comment thread docs/reqstream/canvas-net-svg.yaml Resolved
The CI "Build Documents" job failed reqstream --enforce with 2
orphaned requirements: CanvasNet-Geometry-PathCommand-PublicLineToFactory
and CanvasNet-Geometry-PathCommand-ComputeTangents. These leaf
requirements were added to docs/reqstream/canvas-net/geometry/path.yaml
but never linked into the System -> Unit -> leaf decomposition chain
(reqstream requires exact-id children references at every tier, not
prefix matching).

Add both ids to the existing CanvasNet-Geometry-Path unit-level
requirement's children list in docs/reqstream/canvas-net/geometry.yaml,
and update its title/justification to describe the new public
LineTo/ComputeTangents surface. Also updates the corresponding
system-level CanvasNet-Lib-GeometryPath title/justification in
docs/reqstream/canvas-net.yaml for consistency (children unchanged,
since CanvasNet-Geometry-Path already covers the new leaves).

Verified locally: dotnet reqstream --enforce no longer reports any
orphaned requirements; build.ps1 and lint.ps1 both pass cleanly.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 29, 2026 01:36

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread docs/reqstream/canvas-net.yaml Resolved
- lint.ps1: fix macOS dotnet-format fallback regex to match the actual
  MSBuild-style ': error <CODE>:' diagnostic text instead of a
  nonexistent 'failed to verify formatting' phrase
- PathCommand.NormalizeOrNull: compute squared length in double
  precision to avoid spurious float-squaring overflow for large-but-
  finite vectors (~1.8e19+ magnitude), which previously caused valid
  directions to be misreported as degenerate; add a covering unit test
- SvgSystemIntegrationTests: strengthen the SvgFilterRendering system
  test to assert a halo pixel outside the source rect (matching the
  unit-level assertion), proving the filter chain actually ran
- docs/reqstream/canvas-net-svg.yaml: reword the SvgFilterRendering
  parent requirement to reflect the true split behavior - oversized
  filter regions/blur radii are tolerated (skipped/clamped) while
  excessive convolution-order/morphology-radius/turbulence-octave
  parameters are rejected with InvalidDataException, matching the
  FilterPrimitiveResourceSafety child requirement and its tests
- docs/reqstream/canvas-net-svg.yaml and
  docs/reqstream/canvas-net-svg/svg-codec.yaml: replace out-of-scope
  construct examples that contradicted this same file's own supported-
  feature requirements (filters, masks, style, clipPath, pattern,
  image) with the actual unsupported constructs per the design doc
  (nested svg, SMIL animation elements, foreignObject)
- SvgSystemIntegrationTests.cs: fix a duplicated '///' XML-doc marker
  embedded in a summary comment's text
- cspell: add SMIL to canvas-net-svg.yaml's ignore list
- docs/reqstream/canvas-net.yaml: CanvasNet-Lib-GeometryPath's title
  promises the public PathCommand.LineTo factory and ComputeTangents
  behavior, but its only linked system test never exercised either
  API; add CanvasNet_SystemIntegration_LineToAndComputeTangents_
  ReturnsNormalizedDirection to test/DemaConsulting.CanvasNet.Tests/
  CanvasNetTests.cs exercising both through the public API, and link
  it on the requirement alongside the existing test
Copilot AI review requested due to automatic review settings September 29, 2026 02:03

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

…traction

NormalizeOrNull previously accepted a pre-subtracted Vector2, so the
point-to-point delta (e.g. EndPoint - start) still overflowed in float
for finite-but-extreme coordinates (near +/-float.MaxValue) before any
double-precision widening could help. NormalizeOrNull now accepts the
two endpoints directly and computes the delta in double, fixing
ComputeTangents for such inputs.

Also replaced exact-float-equality assertions in PathCommandTests with
a tolerance-based AssertDirectionApproximatelyEqual helper, since the
production code's double-widened computation and the tests' pure-float
Vector2.Normalize(...) reference values can legitimately differ by a
single ULP.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 29, 2026 02:24

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Valid tiny path segments are rejected as degenerate, and the architecture model misrepresents core dependencies as contained subsystems.

Review effort: Balanced
Findings: 1 Medium severity · 1 Low severity

Open (2)
Resolved since last review (1)
Previously missed (1)

In code that hasn't changed since last review

Low severity Model CanvasNetSvgSystem parts as dependencies, not owned children

docs/​sysml2/​model/​canvas-net-svg.sysml:16

These ordinary part usages model four additional compositional children of CanvasNetSvgSystem, rather than dependencies on the sibling core system. That contradicts the system design's statement that SvgCodec is the system's single implemented unit and causes architecture queries/diagrams to present duplicated core subsystems as CanvasNetSvg constituents. Represent these as non-owning references/dependencies, or model a dependency on CanvasNetSystem itself.

… uses as dependencies

- NormalizeOrNull was comparing the double-precision squared length
  against float.Epsilon, which rejected valid tiny-but-distinct
  segments (e.g. length ~1e-30) even though the public contract
  promises a unit tangent for every nonzero finite direction. Now
  rejects only an exactly zero squared length.
- Added the two large-coordinate ComputeTangents tests to the
  CanvasNet-Geometry-PathCommand-ComputeTangents verification scenario,
  which previously omitted them despite listing them as evidence.
- Modeled CanvasNetSvgSystem's use of the core CanvasNet system's
  Canvas/Geometry/Drawing/Fonts subsystems as non-owning dependency
  relationships instead of ordinary part usages, since the latter
  incorrectly modeled them as additional owned children of
  CanvasNetSvgSystem (duplicating core subsystems in architecture
  queries/diagrams) rather than as a dependency on the sibling system.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 29, 2026 02:37

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The architecture omits a real Codecs dependency, and several changed design contracts are inaccurate.

Review effort: Balanced
Findings: 1 Low severity

Open (1)
Resolved since last review (2)
Previously missed (2)

In code that hasn't changed since last review

Low severity Document complete valid Surface dimension range

docs/​design/​canvas-net-svg.md:51

The exception contract omits the upper bound: Surface also throws ArgumentOutOfRangeException when either dimension exceeds Surface.MaxDimension (8192), not only when it is non-positive. Document the complete valid range so callers do not assume arbitrarily large positive raster sizes are accepted.

This issue also appears in the following locations of the same file:

  • line 68
  • line 143
Low severity Update caller description to include PathFiller and PathStroker

docs/​design/​canvas-net/​geometry/​path.md:179

This caller description is stale: the repository now has public Drawing.PathFiller and PathStroker APIs that consume Geometry.Path, so it is incorrect to say no rasterizer exists. Update the section to identify those in-repository callers while retaining the new external SVG marker caller.

Comment thread docs/sysml2/model/canvas-net-svg.sysml Resolved
- Documented Surface's full valid width/height range (non-positive AND
  exceeding Surface.MaxDimension (8192) both throw
  ArgumentOutOfRangeException) in canvas-net-svg.md's API description,
  interface constraints table, and data-flow validation step.
- Updated the Geometry Path unit's caller description to name the
  in-repository Drawing.PathFiller/PathStroker callers instead of
  claiming no rasterizer exists, while retaining the external SVG
  marker caller.
- Added the missing Codecs subsystem dependency to the
  CanvasNetSvgSystem sysml2 model (SvgCodec.GetInfo returns the shared
  Codecs.ImageInfo record struct).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 29, 2026 02:49

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Architecture and verification documentation contain several dependency omissions and stale API/test descriptions.

Review effort: Balanced
Findings: 2 Low severity

Open (2)
Resolved since last review (1)
Previously missed (2)

In code that hasn't changed since last review

Low severity Document large-coordinate LineTo tangent verification scenario

docs/​verification/​canvas-net/​geometry/​path.md:182

The verification scenario omits PathCommand_ComputeTangents_LineToWithLargeFiniteCoordinates_ReturnsValidNormalizedDirection, although that test was added and is linked by the corresponding requirement. Add it so the verification design fully describes the new overflow-regression coverage.

Low severity Update constructor documentation for public LineTo

src/​DemaConsulting.CanvasNet/​Geometry/​PathCommand.cs:123

Making LineTo public leaves the private constructor's XML documentation at line 82 stating that only “internal factory methods” construct instances. Update that comment to say the struct's factory methods construct instances so the API documentation no longer contradicts this accessibility change.

Comment thread docs/design/introduction.md Resolved
Comment thread docs/sysml2/model/canvas-net.sysml Resolved
…ethod comment

- Added the Codecs subsystem to introduction.md's three CanvasNetSvg
  dependency mentions and to canvas-net.sysml's reverse-dependency
  comment, matching the sysml2 model's usesCodecs dependency and
  SvgCodec.GetInfo's actual use of Codecs.ImageInfo.
- Added the missing large-finite-coordinate LineTo test name to the
  ComputeTangents verification scenario.
- Corrected PathCommand's private constructor doc comment, which still
  said only "internal factory methods" construct instances even
  though LineTo is now a public factory method.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 29, 2026 03:01

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

It combines a breaking public API/package relocation with extensive packaging, compliance, documentation, and test-architecture changes.

Review effort: Balanced
Findings: None

Resolved since last review (2)

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.

2 participants