Skip to content

Complete remaining standards roadmap slices#539

Merged
wieslawsoltes merged 21 commits into
masterfrom
codex/standards-test-roadmap-complete
May 30, 2026
Merged

Complete remaining standards roadmap slices#539
wieslawsoltes merged 21 commits into
masterfrom
codex/standards-test-roadmap-complete

Conversation

@wieslawsoltes

Copy link
Copy Markdown
Owner

Complete Remaining Standards Roadmap Slices

Summary

This PR completes the current remaining standards-test roadmap slices and converts the broad skipped-test debt into explicit, tracked policy or feature-area inventory.

The branch promotes the available W3C rows for mixed-script text baselines, WOFF-backed document fonts, deterministic system colors, and legacy animateColor semantics. It also keeps the browser UI and recursive capture cases as explicit policy skips with semantic coverage, replaces the broad resvg non-text umbrella skip with feature-area inventories, and updates the roadmap with the true remaining work.

Main Changes

  • Adds shared mixed-script baseline resolution for native and SVG-font text paths.
  • Fixes normal RTL mixed Latin/Hebrew text rendering by shaping visual bidi runs instead of relying on raw DrawText ordering.
  • Adds document-level @font-face loading for W3C WOFF resources, including WOFF-to-SFNT conversion, document typeface providers, font cache invalidation, and HTTP capture script font MIME/fallback support.
  • Adds deterministic SVG 1.1 system color resolution with a host-overridable provider.
  • Narrows animateColor policy so direct SVG 1.1 color interpolation is supported while inherited paint-server color state in defs remains browser-stable.
  • Adds semantic coverage for cyclic/broken image handling and recursive <use> suppression rather than manufacturing browser UI baselines.
  • Splits the remaining resvg non-text inventory into explicit feature-area theories.
  • Updates the remaining standards roadmap to show the completed lanes and the remaining policy/fixture/resvg expansion work.
  • Refreshes Chrome references generated through the W3C HTTP capture workflow for the promoted font/text rows.

W3C Status

After this branch, the W3C suite result is:

  • 523 passed
  • 3 skipped
  • 526 total

The remaining W3C skips are now explicit:

  • struct-image-12-b: Chrome native broken-image UI policy.
  • struct-use-08-b: Chrome recursive capture never reaches a stable baseline.
  • text-fonts-06-t: fixture is missing from the bundled W3C checkout.

Promoted rows include:

  • text-align-08-b
  • pservers-grad-08-b
  • render-elems-06-t
  • render-elems-07-t
  • render-elems-08-t
  • render-groups-01-b
  • render-groups-03-t
  • animate-elem-23-t
  • animate-elem-84-t
  • animate-elem-85-t
  • color-prof-01-f
  • color-prop-04-t

resvg Status

The former broad non_text_fixtures skip is replaced by explicit remaining feature-area theories:

  • remaining_extra_fixtures: 15 rows
  • remaining_filter_fixtures: 281 rows
  • remaining_masking_fixtures: 92 rows
  • remaining_paint_server_fixtures: 148 rows
  • remaining_painting_fixtures: 115 rows
  • remaining_shape_fixtures: 69 rows
  • remaining_structure_fixtures: 165 rows

The inventory guardrails assert the total fixture accounting so future slices can enable feature areas without reintroducing broad hardening buckets.

Validation

Completed before publishing this PR:

  • dotnet format Svg.Skia.slnx --no-restore --verify-no-changes --include <changed C# files> passed.
  • dotnet format Svg.Skia.slnx --no-restore --verify-no-changes was also run and still reports pre-existing formatting/encoding issues under externals/SVG.
  • dotnet build Svg.Skia.slnx -c Release --no-restore passed.
  • dotnet test tests/Svg.Skia.UnitTests/Svg.Skia.UnitTests.csproj -f net10.0 -c Release --no-build --filter "FullyQualifiedName~W3CTestSuiteTests.Tests" passed with 523 passed / 3 skipped / 526 total.
  • dotnet test Svg.Skia.slnx -c Release --no-build passed.

Remaining Work After This PR

  • Restore or permanently document missing W3C text-fonts-06-t.
  • Keep struct-image-12-b and struct-use-08-b as explicit policy skips unless browser UI or recursive capture visual emulation becomes a product requirement.
  • Expand resvg non-text coverage one explicit feature-area theory at a time.
  • Promote deeper text/resource hardening only when backed by a failing fixture, upstream fixture addition, or consumer bug with a minimal reproducer.

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dc299165d0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/Svg.Skia/SkiaSvgAssetLoader.DocumentFonts.cs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fb7ec23547

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/Svg.Skia/SkiaSvgAssetLoader.DocumentFonts.cs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7a4ecd4d65

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/Svg.Skia/TypefaceProviders/DocumentFontTypefaceProvider.cs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f315eb376a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/Svg.Skia/SkiaSvgAssetLoader.DocumentFonts.cs

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e73c8e2808

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/Svg.SceneGraph/SvgSceneTextCompiler.cs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8480146d41

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/Svg.Custom/Compatibility/SvgCssCompatibilityProcessor.cs

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a558b4950e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/Svg.Skia/SkiaSvgAssetLoader.DocumentFonts.cs

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0ca576729c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/Svg.SceneGraph/SvgTextBaselineResolver.cs Outdated
Comment thread src/Svg.Custom/Painting/SvgSystemColorProvider.cs

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 56cc73966e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/Svg.Skia/SkiaSvgAssetLoader.DocumentFonts.cs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

if (spans[i].Typeface is { } spanTypeface)
{
AddCandidate(_skiaModel.ToSKTypeface(spanTypeface));

P2 Badge Preserve @font-face family names for run typefaces

When an embedded @font-face uses a CSS family name that differs from the font's internal family, this conversion drops the family override that FindTypefaces just attached to the span. Since span candidates are now tried before the preferred/platform candidates, FindRunTypeface can return a shim named after the internal family; the later ToSKTextPaint lookup won't match DocumentFontTypefaceProvider (which is keyed by the CSS font-family), so browser-compatible full-run paths such as RTL or emoji/cursive text render with fallback fonts instead of the document font. Keep the span's shim family, or carry the override through when returning the run typeface.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@wieslawsoltes

Copy link
Copy Markdown
Owner Author

Addressed the latest Codex review about preserving @font-face family names for run typefaces in bb8d48efe9.

Details:

  • FindRunTypeface now keeps the shim typeface returned by FindTypefaces as the return candidate when that native face can cover the full run, so document-font CSS family aliases survive browser-compatible full-run rendering paths.
  • Provider matching now tracks the actual winning CSS family token from a family list such as Blocky, BlockyWoff, avoiding returning the whole list as the resolved family.
  • Added SkiaSvgAssetLoaderCachingTests.FindRunTypeface_PreservesDocumentFontFamilyOverride to cover an aliased @font-face whose internal font family differs from the CSS family.

Validation:

  • dotnet test tests/Svg.Skia.UnitTests/Svg.Skia.UnitTests.csproj -f net10.0 -c Release --no-build --filter "FullyQualifiedName~SkiaSvgAssetLoaderCachingTests" passed.
  • dotnet format Svg.Skia.slnx --no-restore completed; incidental externals/SVG formatter churn was reverted.
  • dotnet build Svg.Skia.slnx -c Release --no-restore passed with existing warnings.
  • git diff --check passed.

The full local dotnet test Svg.Skia.slnx -c Release --no-build completed the smaller assemblies and entered Svg.Skia.UnitTests without failure output, but stayed silent for an extended period, so I stopped it and am relying on the pushed GitHub Actions matrix for the full image fixture pass.

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bb8d48efe9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/Svg.Skia/SKSvg.Model.cs
@wieslawsoltes

Copy link
Copy Markdown
Owner Author

Follow-up pushed in 1a9d217de6 to keep the review fix narrow and avoid the macOS test slowdown seen after bb8d48efe9.

The original fix preserved the span shim family, but it also changed provider family-token matching on the per-codepoint fallback path. That broader scan was unnecessary for the review issue and matched the long local/macOS CI runtime. The follow-up restores the existing per-codepoint provider matching behavior and only resolves a concrete CSS family token for multi-family run candidates inside FindRunTypeface.

Validation after the follow-up:

  • dotnet build tests/Svg.Skia.UnitTests/Svg.Skia.UnitTests.csproj -f net10.0 -c Release --no-restore passed with existing warnings.
  • dotnet test tests/Svg.Skia.UnitTests/Svg.Skia.UnitTests.csproj -f net10.0 -c Release --no-build --filter "FullyQualifiedName~SkiaSvgAssetLoaderCachingTests" passed.
  • dotnet format Svg.Skia.slnx --no-restore --include src/Svg.Skia/SkiaSvgAssetLoader.cs tests/Svg.Skia.UnitTests/SkiaSvgAssetLoaderCachingTests.cs passed.
  • git diff --check passed.

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1a9d217de6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/Svg.Skia/SKSvg.Model.cs
@wieslawsoltes

Copy link
Copy Markdown
Owner Author

CI compatibility follow-up pushed in da9896e481.

The failed Build/Docs jobs on 1a9d217de6 were caused by string.Contains(',', StringComparison.Ordinal), which does not exist for the older target frameworks built by CI (notably netstandard2.0/net461). The fix switches that guard to IndexOf(',') < 0, preserving the same logic while compiling across the full target matrix.

Validation before push:

  • dotnet build src/Svg.Skia/Svg.Skia.csproj -c Release --no-restore passed across the library targets with existing warnings only.
  • dotnet test tests/Svg.Skia.UnitTests/Svg.Skia.UnitTests.csproj -f net10.0 -c Release --no-build --filter "FullyQualifiedName~SkiaSvgAssetLoaderCachingTests" passed: 18/18.
  • dotnet format Svg.Skia.slnx --no-restore --include src/Svg.Skia/SkiaSvgAssetLoader.cs tests/Svg.Skia.UnitTests/SkiaSvgAssetLoaderCachingTests.cs passed.
  • git diff --check passed.

No externals/SVG submodule or baseline churn is included in this commit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant