Skip to content

[docs] Fix broken API doc cross-references - #152

Merged
mattleibow merged 5 commits into
mainfrom
mattleibow-dev-fix-doc-xrefs
Jun 23, 2026
Merged

mattleibow merged 5 commits into
mainfrom
mattleibow-dev-fix-doc-xrefs

Conversation

@mattleibow

@mattleibow mattleibow commented Jun 23, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

The "Auto API Docs Writer" workflow regenerated mdoc stubs against the current SkiaSharp surface (~m148 / 4.150), and the AI documentation-fill PRs (#150, #151) wrote prose that referenced members which were since removed, renamed, or that it referenced with the wrong DocId prefix / wrong overload signature. These produce docfx / Learn xref-not-found warnings.

This PR repoints/corrects 19 distinct dangling <see>/<value> cross-references (32 occurrences) across 12 ECMA-XML files, and removes one obsolete duplicate type page that caused a case-collision build break. ECMA-XML prose only — no mdoc regeneration, no unrelated reformatting.

Validation: built the authoritative valid-target set from every <TypeSignature>/<MemberSignature Language="DocId"> in the docs — using the exact full DocId string including the overload parameter signature — and confirmed a strict whole-repo re-audit reports zero internal SkiaSharp*/HarfBuzzSharp* dangling crefs, with no new ones introduced. The validation oracle is the doc corpus itself — docfx/Learn builds its xref map only from the ECMA-XML set, so a cref is valid iff its exact DocId exists in the corpus. Every replacement target was confirmed present in the corpus, and stale stubs were deliberately left intact (not cross-checked against the live API, which would cause over-fixing). The "removed/renamed upstream" notes in the table below are explanatory context for why a member changed, not the validation authority.

Fixes (from → to)

File Broken cref Fixed to Reason
SKPath+Iterator.xml (×3) + SKPathVerb.xml (×7) M:SkiaSharp.SKPath.Iterator.Next(SkiaSharp.SKPoint[],System.Boolean,System.Boolean) M:SkiaSharp.SKPath.Iterator.Next(SkiaSharp.SKPoint[]) 3-arg overload removed upstream; SKPath.Iterator now only exposes Next(SKPoint[]) and Next(Span<SKPoint>) (binding/SkiaSharp/SKPath.cs). Sibling RawIterator.Next(SKPoint[]) crefs are valid and left unchanged
SKColorFilter.xml (×5) F:SkiaSharp.SKColorTable.MaxLength F:SkiaSharp.SKColorFilter.TableMaxLength SKColorTable type removed; replacement constant (= 256) already used by the sibling overloads in the same file
SKEncodedOrigin.xml P:SkiaSharp.SKCodec.Origin P:SkiaSharp.SKCodec.EncodedOrigin property renamed
SKSurfacePropsFlags.xml T:SkiaSharp.SKSurfaceProps T:SkiaSharp.SKSurfaceProperties type renamed; SKSurfaceProperties is the type that consumes SKSurfacePropsFlags
GRVkImageInfo.xml T:SkiaSharp.GrVkYcbcrConversionInfo T:SkiaSharp.GRVkYcbcrConversionInfo casing (real type is GR…)
SKPath+Iterator.xml E:SkiaSharp.SKPathVerb.Close F:SkiaSharp.SKPathVerb.Close wrong prefix — enum field, not an event
SKFontStyle.xml (×2) F:SkiaSharp.SKFontStyleWeight / …Width T:SkiaSharp.SKFontStyleWeight / …Width wrong prefix — these are enum types
SKColorSpace.xml P:SkiaSharp.SKColorSpaceTransferFn.Empty F:… wrong prefix — Empty is a static readonly field
SKColorSpace.xml / SKColorSpaceIccProfile.xml P:SkiaSharp.SKColorSpaceXyz.Empty F:… wrong prefix — static field
SKPathMeasure.xml P:SkiaSharp.SKMatrix.Empty F:… wrong prefix — static field (already referenced as F: elsewhere)
SKPathMeasure.xml (×2) P:SkiaSharp.SKPoint.Empty F:… wrong prefix — static field
SKMatrix44.xml (×4) M:SkiaSharp.SKMatrix44.SetIdentity / SetRotationAbout / SetRotationAboutDegrees / SetScale (removed the remark → <remarks />) the old mutating instance methods were removed (SKMatrix44 is now immutable, 18 static Create* factories, 0 Set* in source); no replacement to point at, and the summary/returns already describe each factory. Matches the empty <remarks /> already on the sibling CreateScale overload
GrVkYcbcrConversionInfo.xml T:SkiaSharp.GRVkFilter (in ChromaFilter <value>) <c>VkFilter</c> (plain text) hallucinated type — no GRVkFilter exists in the docs or binding/SkiaSharp/**; ChromaFilter is a raw uint Vulkan VkFilter value. Mirrors the modern GRVkYcbcrConversionInfo struct, which already documents the field as a raw <c>VkFilter</c> value

False positives — verified valid, left unchanged

The originating scan flagged 19 candidates with a loose member-resolution heuristic. After re-validating against the docs' actual DocId targets with exact overload-signature matching, 10 of those resolve correctly and were not touched (mostly nested types, whose DocId uses . while the filename uses +):

  • T:SkiaSharp.GRVkYcbcrConversionInfo (correct casing)
  • T:SkiaSharp.HarfBuzz.SKShaper.Result
  • T:SkiaSharp.SKPath.Iterator, T:SkiaSharp.SKPath.OpBuilder, T:SkiaSharp.SKPath.RawIterator
  • T:SkiaSharp.SKRegion.ClipIterator, T:SkiaSharp.SKRegion.RectIterator, T:SkiaSharp.SKRegion.SpanIterator
  • T:SkiaSharp.Views.Android.GLTextureView.IRenderer
  • T:SkiaSharp.Views.Maui.Controls.GetPropertyValueEventArgs1`

Correction: M:SkiaSharp.SKPath.Iterator.Next(SkiaSharp.SKPoint[],System.Boolean,System.Boolean) was initially (and incorrectly) listed here. It is not a false positive — the name+type resolved but the 3-arg overload signature was removed. It is now in the fixed table above (repointed to the 1-arg overload, ×10). The scanner was tightened to require exact full-DocId matches so this class of bug can't slip through again.

Correction: T:SkiaSharp.GRVkFilter was initially dismissed as a non-existent “phantom.” It is in fact a real broken cref in the legacy GrVkYcbcrConversionInfo.xml, hidden by a case-collision: the repo contains both GRVkYcbcrConversionInfo.xml (modern, GR…) and GrVkYcbcrConversionInfo.xml (legacy, Gr…), which differ only by case. On a case-insensitive filesystem only one of the pair physically checks out, so a working-tree glob never saw the legacy file. Re-running the validator over git blobs (git ls-tree + git cat-file, 444 files) instead of the working tree (443) surfaced it. Now fixed (see table), staged via git plumbing so the legacy blob is edited without materializing both colliding paths on disk.

Case-collision removal — GrVkYcbcrConversionInfo page dropped

Repointing GRVkImageInfo.xml to the correct uppercase casing (above) exposed a latent build break: the live Learn build reported Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.

Root cause. Two public types differ only by one letter's case — the modern struct GRVkYcbcrConversionInfo and the legacy [Obsolete("Use GRVkYcbcrConversionInfo instead.")] forwarder GrVkYcbcrConversionInfo (whose only members are the two implicit conversion operators between the two). mdoc documents both soft-obsolete types, so the corpus contains two ECMA-XML files whose names differ only by case: SkiaSharp/GRVkYcbcrConversionInfo.xml and SkiaSharp/GrVkYcbcrConversionInfo.xml. On the OpenPublishing build's case-insensitive filesystem these collide — one shadows the other — so crefs to the shadowed type can't resolve.

Fix — stop publishing the obsolete forwarder's page (it merely forwards to the modern type), removing the collision at its source:

Change Path
Deleted the legacy Type doc page SkiaSharpAPI/SkiaSharp/GrVkYcbcrConversionInfo.xml (T:SkiaSharp.GrVkYcbcrConversionInfo) — removed from the git index by exact path; the modern GRVkYcbcrConversionInfo.xml blob is left untouched
Removed the legacy <Type> block SkiaSharpAPI/FrameworksIndex/skiasharp.xml (Name="SkiaSharp.GrVkYcbcrConversionInfo" + its 14 members)
Removed the legacy index entry SkiaSharpAPI/index.xml (<Type Name="GrVkYcbcrConversionInfo" Kind="Structure" />)

No surviving file references T:SkiaSharp.GrVkYcbcrConversionInfo — after PR #152 the only references lived inside the deleted page. The modern GRVkYcbcrConversionInfo page is kept and its DocId target survives, so the previously-failing cref now resolves. A strict whole-repo git-blob re-scan reports 443 files, 0 case-collision pairs (was 1), 0 internal dangling crefs. A companion generator-side exclusion is being added in mono/SkiaSharp scripts/infra/docs/docs.cake so mdoc won't regenerate the obsolete page on the next stub refresh.

External-framework crefs (System.*, Android.*, Gdk.*, Graphene.*, Microsoft.Maui.*, OpenTK.*, Cairo.*) resolve via docfx's external xref maps and are out of scope.

Co-authored-by: Copilot [email protected]

Correct 16 dangling <see>/<value> cross-references that the AED
documentation-fill PRs (#150, #151) left pointing at removed, renamed, or
mistyped SkiaSharp members. Removes the resulting docfx xref-not-found
warnings. ECMA-XML prose only; no mdoc regeneration.

- SKColorTable.MaxLength -> SKColorFilter.TableMaxLength (type removed)
- SKCodec.Origin -> SKCodec.EncodedOrigin (renamed)
- SKSurfaceProps -> SKSurfaceProperties (renamed)
- GrVkYcbcrConversionInfo -> GRVkYcbcrConversionInfo (casing)
- SKPathVerb.Close: E: -> F: (enum field, wrong prefix)
- SKFontStyleWeight/Width: F: -> T: (type, wrong prefix)
- *.Empty (SKMatrix, SKPoint, SKColorSpaceXyz, SKColorSpaceTransferFn): P: -> F:
- SKMatrix44 Create* remarks: drop references to removed Set* instance methods

Co-authored-by: Copilot <[email protected]>
@learn-build-service-prod

Copy link
Copy Markdown
Contributor

PoliCheck Scan Report

The following report lists PoliCheck issues in PR files. Before you merge the PR, you must fix all severity-1 and severity-2 issues. The AI Review Details column lists suggestions for either removing or replacing the terms. If you find a false positive result, mention it in a PR comment and include this text: #policheck-false-positive. This feedback helps reduce false positives in future scans.

✅ No issues found

More information about PoliCheck

Information: PoliCheck | Severity Guidance | Term
For any questions: Try searching the learn.microsoft.com contributor guides or post your question in the Learn support channel.

@learn-build-service-prod

Copy link
Copy Markdown
Contributor

Learn Build status updates of commit 6d1c722:

⚠️ Validation status: warnings

File Status Preview URL Details
SkiaSharpAPI/SkiaSharp/SKPath+Iterator.xml ⚠️Warning Details
SkiaSharpAPI/SkiaSharp/GRVkImageInfo.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKColorFilter.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKColorSpace.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKColorSpaceIccProfile.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKEncodedOrigin.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKFontStyle.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKMatrix44.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKPathMeasure.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKSurfacePropsFlags.xml ✅Succeeded

SkiaSharpAPI/SkiaSharp/SKPath+Iterator.xml

  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.SKPath.Iterator.Next(SkiaSharp.SKPoint[],System.Boolean,System.Boolean)'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.SKPath.Iterator.Next(SkiaSharp.SKPoint[],System.Boolean,System.Boolean)'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.SKPath.Iterator.Next(SkiaSharp.SKPoint[],System.Boolean,System.Boolean)'.

For more details, please refer to the build report.

Note: Your PR may contain errors or warnings or suggestions unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.

Learn build validation on the docs flagged
M:SkiaSharp.SKPath.Iterator.Next(SkiaSharp.SKPoint[],System.Boolean,System.Boolean)
as xref-not-found. The 3-arg overload was removed upstream; SKPath.Iterator now
exposes only Next(SKPoint[]) and Next(Span<SKPoint>) (verified against
binding/SkiaSharp/SKPath.cs and the SKPath+Iterator.xml member list).

Repoint all 10 occurrences (3 in SKPath+Iterator.xml, 7 in SKPathVerb.xml) to
M:SkiaSharp.SKPath.Iterator.Next(SkiaSharp.SKPoint[]). Sibling
RawIterator.Next(SKPoint[]) crefs are valid and left unchanged.

This was missed initially because the xref scan matched on type+method name and
ignored the overload signature; the scan now requires exact full-DocId matches,
and a strict whole-repo re-audit confirms zero remaining internal dangling crefs.

Co-authored-by: Copilot <[email protected]>
@learn-build-service-prod

Copy link
Copy Markdown
Contributor

PoliCheck Scan Report

The following report lists PoliCheck issues in PR files. Before you merge the PR, you must fix all severity-1 and severity-2 issues. The AI Review Details column lists suggestions for either removing or replacing the terms. If you find a false positive result, mention it in a PR comment and include this text: #policheck-false-positive. This feedback helps reduce false positives in future scans.

✅ No issues found

More information about PoliCheck

Information: PoliCheck | Severity Guidance | Term
For any questions: Try searching the learn.microsoft.com contributor guides or post your question in the Learn support channel.

@learn-build-service-prod

Copy link
Copy Markdown
Contributor

Learn Build status updates of commit b1a4747:

⚠️ Validation status: warnings

File Status Preview URL Details
SkiaSharpAPI/SkiaSharp/GRVkImageInfo.xml ⚠️Warning Details
SkiaSharpAPI/SkiaSharp/GrVkYcbcrConversionInfo.xml ⚠️Warning Details
SkiaSharpAPI/SkiaSharp/SKColorFilter.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKColorSpace.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKColorSpaceIccProfile.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKEncodedOrigin.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKFontStyle.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKMatrix44.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKPath+Iterator.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKPathMeasure.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKPathVerb.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKSurfacePropsFlags.xml ✅Succeeded

SkiaSharpAPI/SkiaSharp/GRVkImageInfo.xml

  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.

SkiaSharpAPI/SkiaSharp/GrVkYcbcrConversionInfo.xml

  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkFilter'.

For more details, please refer to the build report.

Note: Your PR may contain errors or warnings or suggestions unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.

The ChromaFilter property doc in the legacy GrVkYcbcrConversionInfo struct
referenced a type that does not exist — `<see cref="T:SkiaSharp.GRVkFilter"/>`.
ChromaFilter is a plain `uint` holding a raw Vulkan `VkFilter` value; there is
no GRVkFilter type in the docs corpus or the SkiaSharp API, so docfx emits an
xref-not-found warning. The modern GRVkYcbcrConversionInfo struct already
documents the same field correctly as a raw `<c>VkFilter</c>` value; mirror it.

This dangling cref was missed by the prior xref sweep because the repo contains
a case-collision pair — GRVkYcbcrConversionInfo.xml (modern) and
GrVkYcbcrConversionInfo.xml (legacy) differ only by case. On a case-insensitive
filesystem only one of the two physically checks out, so a working-tree glob
silently drops the shadowed legacy file. Staged via git plumbing so the fix
lands on the legacy blob without materializing both colliding paths on disk.

Co-authored-by: Copilot <[email protected]>
@learn-build-service-prod

Copy link
Copy Markdown
Contributor

Learn Build status updates of commit 4ae0eee:

⚠️ Validation status: warnings

File Status Preview URL Details
SkiaSharpAPI/SkiaSharp/GRVkImageInfo.xml ⚠️Warning Details
SkiaSharpAPI/SkiaSharp/GrVkYcbcrConversionInfo.xml ⚠️Warning Details
SkiaSharpAPI/SkiaSharp/SKColorFilter.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKColorSpace.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKColorSpaceIccProfile.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKEncodedOrigin.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKFontStyle.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKMatrix44.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKPath+Iterator.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKPathMeasure.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKPathVerb.xml ✅Succeeded
SkiaSharpAPI/SkiaSharp/SKSurfacePropsFlags.xml ✅Succeeded

SkiaSharpAPI/SkiaSharp/GRVkImageInfo.xml

  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.

SkiaSharpAPI/SkiaSharp/GrVkYcbcrConversionInfo.xml

  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.
  • Line 0, Column 0: [Warning: xref-not-found - See documentation] Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'.

For more details, please refer to the build report.

Note: Your PR may contain errors or warnings or suggestions unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.

@learn-build-service-prod

Copy link
Copy Markdown
Contributor

PoliCheck Scan Report

The following report lists PoliCheck issues in PR files. Before you merge the PR, you must fix all severity-1 and severity-2 issues. The AI Review Details column lists suggestions for either removing or replacing the terms. If you find a false positive result, mention it in a PR comment and include this text: #policheck-false-positive. This feedback helps reduce false positives in future scans.

✅ No issues found

More information about PoliCheck

Information: PoliCheck | Severity Guidance | Term
For any questions: Try searching the learn.microsoft.com contributor guides or post your question in the Learn support channel.

The legacy [Obsolete("Use GRVkYcbcrConversionInfo instead.")] forwarder struct
GrVkYcbcrConversionInfo (lowercase-r) and the modern GRVkYcbcrConversionInfo
(uppercase-R) differ only by one letter's case. mdoc documents both
soft-obsolete types, producing two ECMA-XML files whose names collide on a
case-insensitive filesystem (the Learn / OpenPublishing build). One file
shadows the other, so crefs to the shadowed type fail with
"Cross reference not found: 'SkiaSharp.GRVkYcbcrConversionInfo'".

PR #152 repointed GRVkImageInfo.xml from the wrong lowercase casing to the real
uppercase type; that correct fix exposed this latent collision (the GR page is
the one shadowed). Rather than revert the casing, remove the collision at its
source: stop publishing the obsolete forwarder's page. The legacy type only
forwards to the modern one via two implicit conversion operators.

- Delete SkiaSharpAPI/SkiaSharp/GrVkYcbcrConversionInfo.xml
  (T:SkiaSharp.GrVkYcbcrConversionInfo) via the index, leaving the modern
  GRVkYcbcrConversionInfo.xml blob untouched.
- Remove its <Type> block from SkiaSharpAPI/FrameworksIndex/skiasharp.xml.
- Remove its entry from SkiaSharpAPI/index.xml.

No surviving file references T:SkiaSharp.GrVkYcbcrConversionInfo; the modern
GRVkYcbcrConversionInfo page is kept and now resolves cleanly. A companion
generator-side exclusion is being added in mono/SkiaSharp
scripts/infra/docs/docs.cake so mdoc won't regenerate the page.

Co-authored-by: Copilot <[email protected]>
@learn-build-service-prod

Copy link
Copy Markdown
Contributor

Learn Build status updates of commit 9cf7bfa:

❌ Validation status: errors

Please follow instructions here which may help to resolve issue.

File Status Preview URL Details
❌Error Details

  • Line 0, Column 0: [Error: restore-template-repository-failed] Failed to restore template repository `https://github.com/Microsoft/templates.docs.msft#main`. Please open a ticket in https://aka.ms/SiteHelp and include URL of the build report.

For more details, please refer to the build report.

Note: Your PR may contain errors or warnings or suggestions unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.

@learn-build-service-prod

Copy link
Copy Markdown
Contributor

PoliCheck Scan Report

The following report lists PoliCheck issues in PR files. Before you merge the PR, you must fix all severity-1 and severity-2 issues. The AI Review Details column lists suggestions for either removing or replacing the terms. If you find a false positive result, mention it in a PR comment and include this text: #policheck-false-positive. This feedback helps reduce false positives in future scans.

✅ No issues found

More information about PoliCheck

Information: PoliCheck | Severity Guidance | Term
For any questions: Try searching the learn.microsoft.com contributor guides or post your question in the Learn support channel.

The previous build failed on a transient infrastructure error
(restore-template-repository-failed: could not clone
Microsoft/templates.docs.msft#main); all changed files validated
Succeeded with zero cross-reference errors. Empty commit to re-run.

Co-authored-by: Copilot <[email protected]>
@learn-build-service-prod

Copy link
Copy Markdown
Contributor

PoliCheck Scan Report

The following report lists PoliCheck issues in PR files. Before you merge the PR, you must fix all severity-1 and severity-2 issues. The AI Review Details column lists suggestions for either removing or replacing the terms. If you find a false positive result, mention it in a PR comment and include this text: #policheck-false-positive. This feedback helps reduce false positives in future scans.

✅ No issues found

More information about PoliCheck

Information: PoliCheck | Severity Guidance | Term
For any questions: Try searching the learn.microsoft.com contributor guides or post your question in the Learn support channel.

@learn-build-service-prod

Copy link
Copy Markdown
Contributor

@mattleibow
mattleibow merged commit 290d0ae into main Jun 23, 2026
3 checks passed
@mattleibow
mattleibow deleted the mattleibow-dev-fix-doc-xrefs branch June 23, 2026 22:14
mattleibow added a commit that referenced this pull request Jun 30, 2026
Go Live: publish latest API docs (#171)

Publish the accumulated SkiaSharp / HarfBuzzSharp API documentation from main
to the live (published) branch. This is the first Go Live since #66 and rolls up
a large batch of docs automation, a full regeneration, and content/cross-reference
cleanup.

Highlights in this batch:

- Docs automation: automated API docs writer (#92, hardened in #155), daily
  update workflow, go-live workflow (#65), and a Learn Build status-based
  auto-merge gate (#82, #83) backed by check-learn-build.py and a
  .github/known-warnings.csv baseline.
- Regeneration: frameworks docs switched to latest-only monikers (#141), baseline
  reset to the Windows-generated output (#142), and stub regeneration moved to
  Linux via Mono (#147). This drops older, no-longer-shipping member/type pages
  (e.g. pre-v1.68 view APIs, the removed Android ISKRenderer interface, and the
  SKPaint text properties that moved to SKFont).
- Content: filled API documentation placeholders (#150, #151, #172) and fixed
  broken cross-references (#152).
- Cross-reference cleanup (#173): removed/repointed 36 obsolete xref-not-found
  references left behind by the latest-only-moniker regeneration — dangling links
  in 2019-era remarks to members that were since removed or relocated. Without
  this the Go Live build reported 160 warnings and the auto-merge gate (correctly)
  blocked the publish.

Build health at publish: 0 errors, 124 warnings, 0 suggestions. All 124 remaining
warnings are expected xref-not-found references to external framework types
(OpenTK, Gdk/Cairo/Graphene, ElmSharp/Tizen.NUI, Windows.UI.Xaml, Microsoft.UI.Xaml,
SharpVk, Vortice) that Learn cannot resolve and which are tracked in the
known-warnings.csv baseline — 0 new warnings versus baseline, so the gate passes.

Co-authored-by: Matthew Leibowitz <[email protected]>
Co-authored-by: Copilot App <[email protected]>
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