AppSurfaceDocsRouteProbeResponse? Probe { get; init; }
Source
Gets the optional route probe result for the requested path.
Redacted response for the AppSurface Docs route inspector HTML and JSON surfaces.
This response mirrors the current snapshot route manifest for public route entries and can include an optional probe explaining how one maintainer-supplied path resolves. It intentionally contains repository-relative source paths and app-relative live URLs only; it does not expose absolute repository roots, filesystem paths, or raw exceptions.
AppSurfaceDocsRouteProbeResponse? Probe { get; init; }
Source
Gets the optional route probe result for the requested path.
IReadOnlyList<AppSurfaceDocsRouteInspectorEntryResponse> Entries { get; init; }
Source
Gets public canonical route entries from the current snapshot route manifest.
IReadOnlyList<AppSurfaceDocsHarvestDiagnosticResponse> Diagnostics { get; init; }
Source
Gets redacted route diagnostics from the current snapshot route manifest.
Describes one public canonical AppSurface Docs route and its aliases.
string SourcePath { get; init; }
Source
Gets the repository-relative source path for the canonical winner.
string CanonicalRoutePath { get; init; }
Source
Gets the docs-root-relative canonical route path.
string CanonicalLiveUrl { get; init; }
Source
Gets the app-relative live URL for the canonical route.
bool SourcePathIsMarkdown { get; init; }
Source
Gets a value indicating whether the source path is a Markdown document.
IReadOnlyList<AppSurfaceDocsRouteAliasResponse> RecoveryAliases { get; init; }
Source
Gets implicit source-shaped aliases that recover copied Markdown paths.
Empty when no Markdown source-shaped recovery aliases exist for the canonical route. The JSON wire form is always an array, never null.
IReadOnlyList<AppSurfaceDocsRouteAliasResponse> DeclaredAliases { get; init; }
Source
Gets author-declared redirect aliases from documentation metadata.
Empty when the document declares no redirect aliases. The JSON wire form is always an array, never null.
Describes one route alias surfaced by the route inspector.
string RoutePath { get; init; }
Source
Gets the docs-root-relative alias route path.
string LiveUrl { get; init; }
Source
Gets the app-relative live URL for the alias.
string Kind { get; init; }
Source
Gets the alias source category.
Values currently include MarkdownSource and MarkdownSourceHtml for implicit source-shaped recovery aliases, and DeclaredRedirect for aliases declared by documentation metadata. Consumers should treat unknown values as alias categories from newer servers rather than as parse failures.
Explains how one requested route-inspector path resolves against the current route identity catalog.
string InputPath { get; init; }
Source
Gets the raw path supplied to the route inspector.
string? NormalizedPath { get; init; }
Source
Gets the docs-root-relative path used for route lookup, when the input was valid.
null for invalid input. The docs home route is represented as string.Empty rather than / because lookup paths are relative to the active docs root.
string Kind { get; init; }
Source
Gets the route resolution kind.
Values currently include Canonical, AliasRedirect, InternalSourceMatch, CollisionLoser, ReservedRoute, NotFound, and InvalidInput. Consumers should treat unknown values as non-successful diagnostics so newer servers can add route states without breaking older tools.
string? SourcePath { get; init; }
Source
Gets the repository-relative source path associated with the route, when one exists.
null for invalid input, reserved routes, and missing routes. Alias, canonical, internal source, and collision-loser probes include the source path that owns or attempted to own the route.
string? CanonicalRoutePath { get; init; }
Source
Gets the docs-root-relative canonical route path associated with the route, when one exists.
null when the result has no canonical target, such as invalid input, reserved routes, or missing routes. The docs home route is represented as string.Empty.
string? CanonicalLiveUrl { get; init; }
Source
Gets the app-relative live URL for the canonical route, when one exists.
null when CanonicalRoutePath is null. For the docs home route, this is the configured docs root URL, for example /docs.
string Message { get; init; }
Source
Gets a short maintainer-facing explanation of the route result.
Defines the canonical public-section labels, slugs, purpose copy, and alias lookup rules used by AppSurface Docs.
string GetLabel(DocPublicSection section)
Source
Gets the canonical display label for the specified public section.
sectionThe section whose label should be returned.The reader-facing label, such as Start Here or API Reference.
string GetSlug(DocPublicSection section)
Source
Gets the canonical stable route slug for the specified public section.
sectionThe section whose slug should be returned.A lower-case hyphenated slug suitable for {DocsRootPath}/sections/{slug} routes.
string GetPurpose(DocPublicSection section)
Source
Gets the short purpose statement used to explain why a public section exists.
sectionThe section whose purpose copy should be returned.The summary text shown in section-first navigation surfaces.
string GetHref(DocPublicSection section)
Source
Gets the default stable public route for the specified section.
sectionThe section whose href should be returned.The default /docs/sections/{slug} route for the section.
This overload always roots the returned href at the default /docs surface. Callers that are rendering links on the current live surface should prefer GetHref(DocPublicSection, string) so custom route roots and preview roots are honored. The route slug is always produced by GetSlug(DocPublicSection).
string GetHref(DocPublicSection section, string docsRootPath)
Source
Gets the canonical public-section route rooted at the caller's current docs surface.
sectionThe section whose href should be returned.docsRootPathThe pre-normalized, app-relative docs root path to anchor the section route under. Callers are expected to pass the validated live docs root from AppSurfaceDocsRoutingOptions.DocsRootPath or Services.DocsUrlBuilder.CurrentDocsRootPath, not an arbitrary or unvalidated value.The canonical {docsRootPath}/sections/{slug} route for the section, or /sections/{slug} when docsRootPath is exactly /.
This overload exists for mounted live docs surfaces such as /docs/next or root-mounted docs at /. It special-cases / so root-mounted hosts emit /sections/{slug} instead of //sections/{slug}. The slug portion is always derived from GetSlug(DocPublicSection). Passing a non-normalized value such as /docs/ can produce incorrect hard-coded links, so callers should normalize and validate docsRootPath before invoking this overload.
bool TryResolve(string? value, out DocPublicSection section)
Source
Resolves an authored section value using canonical labels, canonical slugs, or known aliases.
valueThe authored value to resolve.sectionWhen this method returns true, contains the resolved public section.true when value matches a known label, slug, or alias after normalization; otherwise, false.
Resolution is case-insensitive and ignores surrounding whitespace plus non-alphanumeric separators so values such as Start Here, start-here, and start_here all resolve to the same section.
bool TryResolveSlug(string? slug, out DocPublicSection section)
Source
Resolves only canonical section-route slugs for /docs/sections/{slug} URLs.
slugThe incoming route slug to resolve.sectionWhen this method returns true, contains the resolved public section.true when slug matches one canonical section slug after trimming and case-normalization; otherwise, false.
Unlike TryResolve, this method does not accept labels or aliases. Callers that want to support legacy or user-friendly alias inputs should resolve them separately and redirect to GetHref(DocPublicSection).
IReadOnlyDictionary<string, DocPublicSection> BuildLookup()
Source
Builds the lookup table used for authored metadata values that may use labels, slugs, or aliases.
A normalized dictionary that maps authored section identifiers to their canonical section enum.
IReadOnlyDictionary<string, DocPublicSection> BuildSlugLookup()
Source
Builds the lookup table used for canonical section-route slugs.
A normalized dictionary that accepts only canonical slugs for section-route resolution.
string NormalizeKey(string? value)
Source
Normalizes authored section metadata so labels, slugs, and aliases can share one lookup table.
valueThe authored value to normalize.A lowercase alphanumeric key, or an empty string when value is blank.
string NormalizeSlug(string? value)
Source
Normalizes an incoming section-route slug while preserving the canonical hyphenated slug contract.
valueThe incoming route slug.The trimmed lowercase slug, or an empty string when value is blank.
IReadOnlyList<DocPublicSection> OrderedSections { get; }
Source
Gets the public sections in their intended presentation order for docs home and sidebar surfaces.
Describes one built-in public section, including its canonical display label, stable route slug, and accepted aliases.
Redacted operator-facing AppSurface Docs harvest health response shared by the HTML and JSON health surfaces.
This contract intentionally omits repository roots, raw exception messages, stack traces, and other host-local details. Diagnostic cause text is centrally redacted to repository-relative, operator-safe evidence before it reaches this response. Use DocAggregator.GetHarvestHealthAsync(System.Threading.CancellationToken) for server-side inspection when trusted code needs the full snapshot.
AppSurfaceDocsHarvestHealthResponse FromSnapshot(DocHarvestHealthSnapshot health)
Source
Creates a redacted response from the full server-side harvest health snapshot.
healthThe server-side harvest health snapshot.A response that is safe to serialize to clients.
string Status { get; init; }
Source
Gets the aggregate harvest status name.
DateTimeOffset GeneratedUtc { get; init; }
Source
Gets the UTC timestamp when the cached harvest snapshot was generated.
AppSurfaceDocsHarvestHealthVerification Verification { get; init; }
Source
Gets the machine-checkable verification rollup for the response.
int TotalHarvesters { get; init; }
Source
Gets the number of active harvesters that participated in strict aggregate health for the snapshot.
int SuccessfulHarvesters { get; init; }
Source
Gets the number of strict-health harvesters that completed with docs or a valid empty result.
int FailedHarvesters { get; init; }
Source
Gets the number of strict-health harvesters that failed, timed out, or canceled.
int TotalDocs { get; init; }
Source
Gets the number of documentation nodes published by the final cached docs snapshot.
IReadOnlyList<AppSurfaceDocsHarvesterHealthResponse> Harvesters { get; init; }
Source
Gets the per-harvester redacted health entries.
IReadOnlyList<AppSurfaceDocsHarvestDiagnosticResponse> Diagnostics { get; init; }
Source
Gets redacted diagnostic entries for failed, degraded, or noteworthy states.
AppSurfaceDocsHarvestRebuildForm? RebuildForm { get; init; }
Source
Gets the trusted operator rebuild form metadata used by the HTML health page.
This value is intentionally ignored by JSON serialization because it contains request-scoped browser URLs and anti-forgery form context rather than harvest-health facts.
Request-scoped trusted operator action metadata for rebuilding the live AppSurface Docs harvest.
string Action { get; init; }
Source
Gets the path-base-aware rebuild form action.
string Method { get; init; }
Source
Gets the HTTP method required by the rebuild endpoint.
string ReturnUrl { get; init; }
Source
Gets the validated app-relative docs URL to revisit after rebuild completion.
bool IsAuthorized { get; init; }
Source
Gets a value indicating whether the current request user may submit the rebuild form.
string Status { get; init; }
Source
Gets the short visible state for the rebuild action.
string Description { get; init; }
Source
Gets the operator-facing explanation for the current rebuild action state.
Machine-checkable verification rollup for an AppSurface Docs harvest health response.
bool Ok { get; init; }
Source
Gets a value indicating whether the harvest state should pass local or CI verification.
int HttpStatusCode { get; init; }
Source
Gets the HTTP status code AppSurface Docs uses for this response.
Redacted per-harvester health entry in the operator-facing harvest health response.
string HarvesterType { get; init; }
Source
Gets the concrete harvester type name.
string Status { get; init; }
Source
Gets the harvester status name.
int DocCount { get; init; }
Source
Gets the number of documentation nodes returned by the harvester before AppSurface Docs post-processing.
AppSurfaceDocsHarvestDiagnosticResponse? Diagnostic { get; init; }
Source
Gets the redacted diagnostic explaining a failed, timed-out, or canceled harvester.
Redacted diagnostic entry in the operator-facing harvest health response.
string Code { get; init; }
Source
Gets the stable diagnostic code.
string Severity { get; init; }
Source
Gets the diagnostic severity name.
string? HarvesterType { get; init; }
Source
Gets the concrete harvester type when the diagnostic belongs to one harvester.
string Problem { get; init; }
Source
Gets the operator-facing problem statement.
string Cause { get; init; }
Source
Gets the operator-facing, redacted explanation for why AppSurface Docs reported the diagnostic.
This field carries repository-relative evidence or general recovery context. Response mapping centrally redacts raw host-local exception messages, absolute filesystem paths, stack traces, tokens, and other machine-local details before serialization.
string Fix { get; init; }
Source
Gets the suggested operator or docs-author recovery action.
Describes the server-rendered shell for the dedicated docs search workspace.
TitleThe primary page heading shown above the workspace controls.OrientationA short orientation sentence that explains what users can discover from the workspace.StarterHintHelper copy shown in the starter state before a query or filter is applied.SearchPlaceholderPlaceholder text for the advanced search input.SuggestedQueriesStarter-state suggestions rendered as query-string anchors and enhanced by JavaScript when the search runtime is available. Empty lists are allowed, but the shell is designed around a curated set of useful first queries.FailureFallbackLinksOrdered server-derived browse links shown before the search runtime loads and preserved when the runtime or index cannot be loaded. Include at least one non-search path that still helps users continue through the docs set.This model is rendered before the client-side search index is available so the page can show stable loading, starter, browse-recovery, and failure states even when the search payload is slow or unavailable. All members are required and should be supplied as non-null values. The list properties render in the order provided. Use SearchPageViewModel for the server-rendered shell contract and recovery guidance, not for live search results or client-side facet state. Callers should prefer empty lists over null for SuggestedQueries and FailureFallbackLinks. Suggested queries render as real search-state anchors before JavaScript and may be enhanced by the client runtime. Fallback links render as the shared server-derived browse navigation used both before the index loads and after an index-load failure, not as server-side search results. The search surface may combine representative docs selected from the current snapshot with static route-contract-backed recovery entries such as public section routes and docs home. Both lists are displayed in the supplied order, so place the highest-signal actions first. Avoid relying on client-side mutation of this model after render, and avoid using external absolute URLs in SearchPageFallbackLink.Href because the shell assumes app-relative navigation semantics.
Represents one server-rendered browse recovery action for the dedicated docs search workspace.
TitleShort, action-oriented label used as the visible link title.HrefThe app-relative destination URL to open when the user follows the recovery action.DescriptionSupporting context that explains what the destination contains and why it helps recover from the failed search flow.UsesDocsFrameA value indicating whether the destination should stay inside the docs content frame. Set this to true only when the destination is known to be another docs page rather than a top-level recovery surface such as the docs home or version archive.These links are rendered before the client search payload is available and remain useful after index-fetch failure, so each entry should be complete enough to stand on its own. They are navigation aids, not server-side search results. Some entries may be adapted from neutral harvest-free docs recovery links; search-only representative document fallback should stay in this type rather than moving into the standalone 404 page. UsesDocsFrame determines whether the destination should continue navigating inside the docs content frame or escalate to a top-level page navigation. Keep Href app-relative and already URL-safe, and assume the UI will HTML-escape the visible text in Title and Description. Prefer concise copy that fits comfortably in a compact recovery card, and do not depend on client search indexing to make the destination discoverable.
Presentation metadata for one normalized documentation page-type badge.
string Value { get; init; }
Source
Gets the normalized machine-readable page-type value.
string Label { get; init; }
Source
Gets the human-readable badge label.
string Variant { get; init; }
Source
Gets the badge variant suffix used by built-in AppSurface Docs CSS classes such as docs-page-badge--guide.
Converts raw documentation metadata values into consistent UI-facing labels and badge variants.
Use this helper from Razor views, search payload generation, or custom UI surfaces when you want the built-in AppSurface Docs page-type treatment to remain consistent across landing, detail, and search experiences.
string? ResolveCodeLanguageValue(string? codeLanguage)
Source
Resolves the normalized programming language value used by generated API documentation.
codeLanguageThe raw programming language metadata value.A normalized token, or null when the value is blank.
string? ResolveCodeLanguageLabel(string? codeLanguage)
Source
Resolves the reader-facing programming language label used by generated API documentation.
codeLanguageThe raw programming language metadata value.A display label such as C# or JavaScript, or null for blank values.
DocPageTypeBadgePresentation? ResolvePageTypeBadge(string? pageType)
Source
Resolves the built-in AppSurface Docs page-type badge presentation for a raw metadata value.
pageTypeThe raw page-type metadata value, such as guide, api-reference, or release-note.A normalized badge presentation when pageType is non-empty; otherwise, null. Release aliases such as release-note and release-notes resolve to the canonical release badge value. Unknown page types fall back to a neutral badge with a title-cased label.
string? NormalizeToken(string? value)
Source
Normalizes a raw metadata token into a lowercase dash-delimited value.
valueRaw metadata token that may contain whitespace, underscores, dashes, or line breaks.A normalized token, or null when value is null, whitespace, or produces no non-delimiter segments after trimming and splitting.
AppSurface Docs trims the input, splits on spaces, tabs, carriage returns, line feeds, underscores, and hyphens, removes empty segments, lowercases each remaining segment, and rejoins them with -.
Describes one route-contract-backed recovery link for browser-facing docs recovery surfaces.
TitleShort visible label for the recovery action.HrefApp-relative, route-contract-backed destination.DescriptionShort explanation of why the destination helps the reader recover.KindPresentation hint used to distinguish the primary action from secondary browse links.IgnoreDuringStaticExportA value indicating whether static exporters may ignore this href when validating or crawling the containing page. Use this for optional recovery links that are helpful at runtime but should not force sparse exports to include additional pages.These links are intentionally harvest-free: callers can render them before a docs snapshot exists, during search index failure, or from a standalone browser status page. The href is produced from DocsUrlBuilder rather than from the missing request path, so stale or hostile paths never influence the recovery destination. Search-specific callers should keep using SearchPageFallbackLink for search workspace behavior and adapt these neutral links only when they need static entry points.
Identifies how a neutral docs recovery link should be visually emphasized.
The enum is deliberately small because it is not a navigation taxonomy. Recovery surfaces should use Primary for the one safest next step and Secondary for the small set of route-safe browse alternatives.
View model for the AppSurface Docs live harvest observatory.
AppSurfaceDocsHarvestProgressSnapshot Progress { get; init; }
Source
Gets the current redacted harvest progress snapshot rendered by the observatory.
string ReturnUrl { get; init; }
Source
Gets the app-relative URL the browser should open after harvest completion.
Controllers must validate this value with DocsController.IsSafeAppRelativeUrl before assigning request-derived input. The harvesting Razor view emits this value only through Razor-encoded attributes and links; raw progress fragments do not receive it.
bool CanUseLiveProgress { get; init; }
Source
Gets a value indicating whether the current request may subscribe to the live harvest progress stream.
When this value is false, the harvesting view renders the current redacted progress snapshot and a manual continuation path without emitting a RazorWire stream source. Controllers should compute this from the effective runtime IRazorWireStreamAuthorizationFilter and IRazorWireStreamAuthorizer chain, with legacy bool authorizer fallback when needed, so the view matches the stream endpoint's authorization decision.
AppSurfaceDocsHarvestRebuildRequestResult? RebuildRequestResult { get; init; }
Source
Gets the result of the rebuild request that navigated to the observatory, when one is available.
Controllers should only assign values produced by AppSurfaceDocsHarvestCoordinator.RequestRebuildAsync. The harvesting view renders this as non-secret operator feedback; live progress remains the source of truth for actual harvest completion.
Redacted live progress snapshot for one AppSurface Docs harvest run.
AppSurfaceDocsHarvestProgressSnapshot Idle { get; }
Source
Gets the empty snapshot used before a harvest run has started.
string RunId { get; init; }
Source
Gets the unique run identifier.
AppSurfaceDocsHarvestRunState State { get; init; }
Source
Gets the current run state.
DateTimeOffset StartedUtc { get; init; }
Source
Gets the UTC time when the run started.
DateTimeOffset? CompletedUtc { get; init; }
Source
Gets the UTC time when the run completed.
int TotalHarvesters { get; init; }
Source
Gets the number of active harvesters expected in the run.
int CompletedHarvesters { get; init; }
Source
Gets the number of harvesters that have completed.
int TotalDocs { get; init; }
Source
Gets the number of docs in the final snapshot, or the currently known count while running.
string Status { get; init; }
Source
Gets the redacted aggregate harvest status when known.
IReadOnlyList<AppSurfaceDocsHarvesterProgress> Harvesters { get; init; }
Source
Gets redacted per-harvester progress entries.
IReadOnlyList<AppSurfaceDocsHarvestActivity> Activity { get; init; }
Source
Gets bounded recent activity entries, newest first.
IReadOnlyList<AppSurfaceDocsHarvestDiagnosticResponse> Diagnostics { get; init; }
Source
Gets redacted diagnostics surfaced only when the run is degraded or failed.
Redacted progress for one AppSurface Docs harvester.
string HarvesterType { get; init; }
Source
Gets the non-secret harvester type name used as the stable row identity.
string Status { get; init; }
Source
Gets the display status for this harvester.
int DocCount { get; init; }
Source
Gets the number of documents reported by this harvester.
One bounded activity entry in the live harvest observatory.
DateTimeOffset TimestampUtc { get; init; }
Source
Gets the UTC timestamp used for sorting and machine-readable rendering.
string Message { get; init; }
Source
Gets the redacted human-readable activity message.
State for the current live harvest run.
View model for the public AppSurface Docs version archive and degraded entry surface.
The same model drives both the dedicated archive page and the degraded route-root recovery surface when no healthy recommended release can be mounted at the stable entry alias. PreviewHref always points at the current source-backed preview surface, while VersionsHref stays on the stable archive URL. Versions preserves the authored catalog order and should be treated as a read-only projection of the resolved catalog state.
string Heading { get; init; }
Source
Gets the page heading.
string Description { get; init; }
Source
Gets the orientation copy shown above the archive list.
string? AvailabilityMessage { get; init; }
Source
Gets optional explanatory copy shown when the stable route-root alias cannot mount a recommended released tree.
This is typically null on the dedicated archive page and populated only for the degraded route-root recovery experience.
string PreviewHref { get; init; }
Source
Gets the live preview docs URL.
This points at the configured source-backed preview surface, such as /docs/next for the default route family or /foo/bar/next for a custom one.
string VersionsHref { get; init; }
Source
Gets the stable archive URL.
IReadOnlyList<AppSurfaceDocsVersionArchiveEntryViewModel> Versions { get; init; }
Source
Gets the available published versions shown in the archive.
Represents one release entry in the public AppSurface Docs version archive.
Entries may describe either a healthy exact-version tree with an Href target or an unavailable release that should remain visible in the archive with an explanatory availability message. IsRecommended identifies the exact release currently mirrored at the stable route-root alias, while IsAvailable controls whether the entry can link directly to that exact version. Advisory and support labels are independent: an unavailable or deprecated release may still surface an advisory, and a recommended release may still carry a warning label when the catalog says readers should see one.
string Version { get; init; }
Source
Gets the exact published version identifier.
string Label { get; init; }
Source
Gets the reader-facing label.
string? Summary { get; init; }
Source
Gets optional summary copy for the release.
string? Href { get; init; }
Source
Gets the exact-version URL when the release is available.
This is null when IsAvailable is false and the archive should render the release as informational-only.
bool IsRecommended { get; init; }
Source
Gets a value indicating whether this version is the recommended stable alias target.
bool IsAvailable { get; init; }
Source
Gets a value indicating whether the exact-version tree is currently available.
string SupportStateLabel { get; init; }
Source
Gets the human-readable support-state label.
string? AdvisoryLabel { get; init; }
Source
Gets the human-readable advisory label when a release warning should be surfaced.
This is null when no release-level warning badge should be rendered.
string? AvailabilityMessage { get; init; }
Source
Gets the availability explanation when the release tree is unavailable.
This is usually populated only when IsAvailable is false and explains why the exact-version tree could not be mounted or linked.
Structured metadata that can drive navigation, breadcrumbs, related links, and search without re-parsing source content.
string? Title { get; init; }
Source
Gets the resolved display title for the documentation node.
bool? TitleIsDerived { get; init; }
Source
Gets a value indicating whether Title was derived from page content or source path instead of authored explicitly.
string? Summary { get; init; }
Source
Gets a short summary describing the documentation node.
bool? SummaryIsDerived { get; init; }
Source
Gets a value indicating whether Summary was derived from page content instead of authored explicitly.
string? PageType { get; init; }
Source
Gets the page type, such as guide, example, api-reference, or troubleshooting.
string? Audience { get; init; }
Source
Gets the intended audience for the page.
string? Component { get; init; }
Source
Gets the product component associated with the page.
string? CodeLanguage { get; init; }
Source
Gets the programming or source language for generated code documentation.
This value describes extracted API documentation such as C# namespace pages or JavaScript runtime doclets. It is intentionally separate from Localization and from Markdown code-fence language tokens, because those describe reader locale and inline example highlighting rather than the source language of the documented API.
string? Namespace { get; init; }
Source
Gets the generated namespace page that namespace-intro source content should merge into.
This value is authored with the namespace metadata key. AppSurface Docs currently consumes it only from namespace-intro source documents such as NAMESPACE.md; ordinary pages preserve the value for metadata consistency but do not use it for route selection.
IReadOnlyList<string>? Aliases { get; init; }
Source
Gets alternate terms that should resolve to this page in search.
IReadOnlyList<string>? RedirectAliases { get; init; }
Source
Gets alternate route aliases that should redirect to the canonical page when redirect support is enabled.
IReadOnlyList<string>? Keywords { get; init; }
Source
Gets search keywords associated with the page.
string? Status { get; init; }
Source
Gets the content lifecycle status for the page.
int? Order { get; init; }
Source
Gets the relative ordering value within a navigation group.
string? SequenceKey { get; init; }
Source
Gets the explicit sequence identifier used to connect pages into one proof path.
AppSurface Docs does not infer sequence membership from folders or filenames in this slice. Pages participate in next/previous wayfinding only when authors opt them into the same SequenceKey and assign comparable Order values.
bool? SectionLanding { get; init; }
Source
Gets a value indicating whether the page is the authored landing doc for its public section.
bool? HideFromSearch { get; init; }
Source
Gets a value indicating whether the page should be hidden from search.
IReadOnlyList<string>? RelatedPages { get; init; }
Source
Gets related page identifiers or titles.
string? CanonicalSlug { get; init; }
Source
Gets the preferred canonical slug for the page.
IReadOnlyList<string>? Breadcrumbs { get; init; }
Source
Gets optional human-readable breadcrumb labels for the page.
IReadOnlyList<DocFeaturedPageGroupDefinition>? FeaturedPageGroups { get; init; }
Source
Gets optional landing-page curation groups authored with the documentation page.
AppSurface Docs parses this metadata on any page so the contract stays page-agnostic. Authors can supply groups either inline in Markdown front matter or through a paired sidecar such as README.md.yml. The built-in docs landing consumes the repository-root README.md groups, and section landing docs consume their own groups for reader-intent next steps.
IReadOnlyList<DocNamespaceEntryPoint>? EntryPoints { get; init; }
Source
Gets optional namespace-page entry points rendered as a compact editorial index above generated API detail.
This metadata is currently consumed only from namespace README.md front matter or paired sidecar files that merge into generated namespace pages. Each entry needs a valid DocNamespaceEntryPoint.Label. Authors may provide a generated anchor DocNamespaceEntryPoint.Target or a constrained DocNamespaceEntryPoint.Href escape hatch. Blank, invalid, or empty entry lists render no panel.
DocOutlineMetadata? Outline { get; init; }
Source
Gets optional page-local outline behavior for Markdown documents.
This metadata controls the harvested display outline only. Rendered HTML headings and their fragment IDs remain available in the page body even when the outline policy hides repeated lower-level entries from the "On this page" rail or search heading metadata. Custom harvesters may ignore this metadata unless they intentionally mirror the built-in Markdown outline behavior.
DocTrustMetadata? Trust { get; init; }
Source
Gets optional trust and provenance metadata rendered near the top of the page.
This nested object is designed for release notes, upgrade policies, changelogs, and similar pages that need to communicate current status, adoption safety, and archival provenance without custom view logic.
DocContributorMetadata? Contributor { get; init; }
Source
Gets optional contributor provenance metadata for page-level source, edit, and freshness control.
DocLocalizationMetadata? Localization { get; init; }
Source
Gets optional localization metadata used to connect translated variants of the same conceptual document.
This nested contract keeps i18n-specific fields together while allowing friendly Markdown front matter aliases such as locale and translation_key. DocLocalizationMetadata.TranslationKey is the stable identity AppSurface Docs uses to switch languages without relying on matching localized paths.
bool? BreadcrumbsMatchPathTargets { get; init; }
Source
Gets a value indicating whether authored breadcrumb labels align with the path-derived breadcrumb targets that AppSurface Docs can safely reuse for rendering.
Authored namespace-page entry point metadata parsed from Markdown front matter or a paired sidecar file.
Entry points are intentionally small reader-orientation links, not a full symbol index. A valid entry renders when Label is non-blank after normalization. Target is a generated anchor ID on the merged namespace page; Href is used only when no syntactically valid target is present. Keywords participate in the namespace search payload but are not rendered directly.
string Label { get; init; }
Source
Gets the concise reader-facing label, usually a type or method name.
string? Summary { get; init; }
Source
Gets optional supporting copy shown under the label.
string? Target { get; init; }
Source
Gets the normalized generated anchor ID for the entry point, without a leading #.
string? Href { get; init; }
Source
Gets an optional explicit fragment or app-relative docs URL used only when Target is absent.
IReadOnlyList<string>? Keywords { get; init; }
Source
Gets additional search terms associated with this entry point.
int? Order { get; init; }
Source
Gets an optional non-negative ordering value. Entries with an order sort before unordered entries.
int SourceIndex { get; init; }
Source
Gets the zero-based authoring position used as a stable tie breaker.
Page-level localization metadata for one documentation node.
Authors can provide this metadata directly under localization, or with friendly flat front matter keys such as locale, translation_key, localized_title, and locale_fallback. The metadata does not make a page public on its own; the locale-aware document graph combines it with configured locales and route identity.
DocLocalizationMetadata? Merge(DocLocalizationMetadata? primary, DocLocalizationMetadata? fallback)
Source
Merges primary and fallback localization metadata using the same precedence rules as document metadata overlays.
Primary Locale, TranslationKey, and LocalizedTitle values win only when they are non-blank; otherwise DocTrustMergeHelpers.PreferNonBlank trims and selects the fallback value. LocaleFallback uses nullable coalescing, so the primary enum value wins when present and the fallback enum is used only when the primary omits a page-level policy. A blank primary string is therefore not a deliberate override.
string? Locale { get; init; }
Source
Gets the authored or inferred BCP-47 locale code for this document variant.
string? TranslationKey { get; init; }
Source
Gets the stable conceptual page identity shared by translated variants.
string? LocalizedTitle { get; init; }
Source
Gets an optional localized title override for language-switching and graph-derived navigation.
AppSurfaceDocsLocaleFallbackMode? LocaleFallback { get; init; }
Source
Gets an optional page-level missing-translation fallback policy.
Represents one navigable heading captured while harvesting a documentation page.
string Title { get; init; }
Source
Gets the heading text shown in the page-local outline and search metadata.
string Id { get; init; }
Source
Gets the HTML fragment identifier that anchors this outline item within the page.
int Level { get; init; }
Source
Gets the normalized heading level for this entry.
Markdown page-local outline behavior supplied through front matter or paired sidecar metadata.
MaxHeadingLevel accepts 2 or 3 and has precedence over RepeatedHeadingPolicy. RepeatedHeadingPolicy accepts auto, include, or h2_only. Invalid authored values are normalized away by the Markdown metadata parser so a paired fallback can still contribute the valid child field.
DocOutlineMetadata? Merge(DocOutlineMetadata? primary, DocOutlineMetadata? fallback)
Source
Merges page outline metadata from a primary source and a fallback source.
primaryThe preferred outline metadata. When this value is null, the fallback value is returned.fallbackThe fallback outline metadata. When this value is null, the primary value is returned.The merged outline metadata, or null when both merged properties collapse to null.
MaxHeadingLevel selects the deepest heading level callers should include in the display outline, and the primary value wins over the fallback value for that field. RepeatedHeadingPolicy controls whether repeated H3 headings are included, suppressed automatically, or reduced to H2-only output; it is merged with DocTrustMergeHelpers.PreferNonBlank, so a non-blank primary policy wins and blank or whitespace-only values fall through to the fallback. If neither merged field has a value after this precedence and whitespace handling, the method returns null so empty outline metadata does not survive as a meaningless object.
int? MaxHeadingLevel { get; init; }
Source
Gets the deepest heading level to include in the display outline.
string? RepeatedHeadingPolicy { get; init; }
Source
Gets the repeated-heading policy for pages whose repeated H3 headings would overwhelm the outline.
Structured trust and provenance metadata for a documentation page.
string? Status { get; init; }
Source
Gets the compact top-level state shown in the trust bar, such as Unreleased or Pre-1.0 policy.
string? Summary { get; init; }
Source
Gets the short trust statement that explains what the current status means for readers.
string? Freshness { get; init; }
Source
Gets the freshness statement that explains how current or provisional the page is.
string? ChangeScope { get; init; }
Source
Gets the statement describing which product surfaces or artifacts this page covers.
DocTrustLink? Migration { get; init; }
Source
Gets an optional safe browser-facing link to migration or upgrade guidance.
Markdown metadata normalization treats blank hrefs as absent and rejects nonblank values whose scheme is not relative, root-relative, fragment-only, http, or https. Rejected hrefs are omitted and reported through harvest diagnostics with DocHarvestDiagnosticCodes.MetadataUnsafeTrustMigrationHref.
string? Archive { get; init; }
Source
Gets the archival or long-term home statement for the page contents.
IReadOnlyList<string>? Sources { get; init; }
Source
Gets optional provenance notes or upstream sources that support the page.
Link metadata used by trust-bar actions such as migration guidance.
string? Label { get; init; }
Source
Gets the reader-facing link label.
string? Href { get; init; }
Source
Gets the browser-facing destination URL.
For trust migration links authored in Markdown front matter or paired sidecar metadata, AppSurface Docs accepts relative URLs, root-relative URLs, fragment links, and absolute http or https URLs. Blank hrefs are treated as missing; executable, protocol-relative, control-character, and other absolute-scheme hrefs are rejected before the trust bar renders.
Page-level contributor provenance metadata used to override or suppress source, edit, and freshness evidence.
DocContributorMetadata? Merge(DocContributorMetadata? primary, DocContributorMetadata? fallback)
Source
Merges contributor metadata by preferring authored primary values and filling missing values from fallback metadata.
HideContributorInfo uses nullable-boolean precedence, so explicit false is preserved.SourcePathOverride, SourceUrlOverride, and EditUrlOverride prefer the first non-blank string; whitespace-only values are treated as missing.LastUpdatedOverride uses null coalescing and therefore keeps the primary timestamp when present.HideContributorInfo instead of relying on blank string overrides.bool? HideContributorInfo { get; init; }
Source
Gets a value indicating whether contributor provenance should be hidden for the page even when automatic evidence exists.
string? SourcePathOverride { get; init; }
Source
Gets an optional repository-relative source-path override used for source links, edit links, and git freshness resolution. Rooted paths and traversal segments are rejected.
string? SourceUrlOverride { get; init; }
Source
Gets an optional explicit source URL override. Only absolute HTTP(S) URLs and root-relative paths are accepted.
string? EditUrlOverride { get; init; }
Source
Gets an optional explicit edit URL override. Only absolute HTTP(S) URLs and root-relative paths are accepted.
DateTimeOffset? LastUpdatedOverride { get; init; }
Source
Gets an optional exact timestamp override for contributor freshness.
Identifies the source declaration that produced one rendered C# API documentation symbol.
string AnchorId { get; init; }
Source
Gets the rendered HTML anchor ID for the generated API symbol.
string SourcePath { get; init; }
Source
Gets the repository-relative source file path that contains the documented declaration.
int StartLine { get; init; }
Source
Gets the 1-based source declaration line.
Represents a documentation node within the repository.
TitleThe display title of the document.PathThe relative path to the documentation source.ContentThe rendered HTML content of the documentation.ParentPathThe optional parent path for hierarchical organization.IsDirectoryIndicates if this node represents a directory container.CanonicalPathThe browser-facing docs route path used for linking and lookup.MetadataStructured metadata associated with the documentation node.OutlineStructured in-page outline entries captured during harvesting.SymbolSourceProvenanceOptional source declarations keyed by rendered C# API symbol anchor IDs.Captures the structured health of one AppSurface Docs harvest snapshot.
StatusOverall health rollup for the snapshot.GeneratedUtcUTC timestamp when the snapshot was generated.RepositoryRootRepository root passed to active harvesters. Treat this as server-only operational data because it can contain sensitive or environment-specific filesystem paths; redact or omit it before sending snapshots to clients.TotalHarvestersNumber of active harvesters that participated in strict aggregate health for the snapshot.SuccessfulHarvestersNumber of strict-health harvesters that completed with either docs or a valid empty result.FailedHarvestersNumber of strict-health harvesters that failed, timed out, or canceled.TotalDocsNumber of documentation nodes published by the final cached docs snapshot.HarvestersPer-harvester health entries. Never null in AppSurface Docs-created snapshots.DiagnosticsStructured diagnostics for failed, degraded, or noteworthy states. Never null in AppSurface Docs-created snapshots.AppSurface Docs-created snapshots retain non-null Harvesters and Diagnostics collections for safe server-side inspection, but callers that serialize this record into client-visible payloads must sanitize RepositoryRoot first.
Captures one active harvester's status inside an AppSurface Docs harvest snapshot.
HarvesterTypeConcrete harvester type name used in logs and diagnostics.StatusHarvester-level health status.DocCountNumber of documentation nodes returned by the harvester before AppSurface Docs post-processing.DiagnosticDiagnostic explaining a failed, timed-out, or canceled harvester; usually null for non-failure outcomes.Describes one structured AppSurface Docs harvest health diagnostic.
CodeStable diagnostic code suitable for tests, logs, documentation, and host UI branching.SeverityDiagnostic severity.HarvesterTypeConcrete harvester type when the diagnostic belongs to one harvester, or null for aggregate diagnostics.ProblemOperator-facing summary of what went wrong.CauseExplanation of why AppSurface Docs could not safely treat the harvest as fully healthy.FixSuggested operator or docs-author action that resolves the problem.Defines the stable diagnostic codes emitted by AppSurface Docs harvest health snapshots.
Use these constants when testing or branching on DocHarvestDiagnostic.Code values. The string values are public compatibility contracts and must not be changed after the first AppSurface Docs release. The prerelease rebrand intentionally uses the appsurfacedocs.* prefix before those wire values become externally stable.
Represents one normalized public-section snapshot derived from the harvested docs corpus.
DocPublicSection Section { get; init; }
Source
Gets the typed public section identifier.
string Label { get; init; }
Source
Gets the canonical display label for the section.
string Slug { get; init; }
Source
Gets the stable route slug for the section.
DocNode? LandingDoc { get; init; }
Source
Gets the optional authored landing doc that represents the section.
IReadOnlyList<DocNode> VisiblePages { get; init; }
Source
Gets the public pages that belong to the section, ordered for display.
Defines one authored reader-intent group for a docs landing surface.
string? Intent { get; init; }
Source
Gets the stable reader-intent identifier for the group.
Authors may omit this value when Label is present. AppSurface Docs derives a normalized intent from the label during metadata parsing so downstream resolvers can still identify the group consistently.
string? Label { get; init; }
Source
Gets the reader-facing group heading.
Authors may omit this value when Intent is present. AppSurface Docs converts the intent into a title-cased label during metadata parsing so the landing can still render a useful heading.
string? Summary { get; init; }
Source
Gets optional copy that explains when a reader should choose the group.
int? Order { get; init; }
Source
Gets the relative display order for the group.
IReadOnlyList<DocFeaturedPageDefinition> Pages { get; init; }
Source
Gets the featured destination pages in this group.
string? SourceFieldPath { get; init; }
Source
Gets the parser-populated metadata field path for group-level diagnostics.
This internal value is for diagnostics and source attribution only. Authored metadata and consumers should not depend on it as stable content because the parser path format may change.
Defines one authored featured-page entry for a docs landing surface.
string? Question { get; init; }
Source
Gets the reader-facing evaluator question or label for the card.
When this value is omitted on the built-in docs landing, AppSurface Docs falls back to the resolved destination page title so the card still renders with a sensible label.
string? Path { get; init; }
Source
Gets the source or canonical path of the destination page to feature.
AppSurface Docs matches both source paths and canonical browser paths. Path separators are normalized during resolution so authored forward-slash and backslash forms point to the same destination.
string? SupportingCopy { get; init; }
Source
Gets optional landing-only supporting copy shown instead of destination summary text.
int? Order { get; init; }
Source
Gets the relative display order for the featured entry.
string? SourceFieldPath { get; init; }
Source
Gets the parser-populated metadata field path for page-level diagnostics.
This internal value is for diagnostics and source attribution only. Authored metadata and consumers should not depend on it as stable content because the parser path format may change.
View model for the docs landing page.
string Heading { get; init; }
Source
Gets the hero heading shown on the docs landing.
string Description { get; init; }
Source
Gets the supporting description shown under the hero heading.
DocNode? LandingDoc { get; init; }
Source
Gets the repository-root landing document when one was harvested.
string? StartHereHref { get; init; }
Source
Gets the href for the section-level Start Here route when that section exists in the current public docs corpus.
IReadOnlyList<DocNode> VisibleDocs { get; init; }
Source
Gets the visible documentation nodes used by the neutral fallback landing state.
IReadOnlyList<DocLandingFeaturedPageGroupViewModel> FeaturedPageGroups { get; init; }
Source
Gets the resolved proof-path groups for the landing experience.
IReadOnlyList<DocHomeSectionViewModel> SecondarySections { get; init; }
Source
Gets the secondary section summaries shown under the primary Start Here route.
bool HasFeaturedPages { get; }
Source
Gets a value indicating whether the landing should render a proof-path lead section.
View model for one resolved reader-intent group on a docs landing page.
Intent and Label are normalized by the featured-page resolver before rendering: authored whitespace is trimmed, missing labels fall back to the resolved intent, and both values are non-null. Summary contains optional group copy and may be null. Pages contains the resolved DocLandingFeaturedPageViewModel rows produced by the resolver after it matches authored destinations to visible docs. Empty Pages lists are treated as no featured pages and are suppressed by DocLandingViewModel.HasFeaturedPages, DocDetailsViewModel.HasFeaturedPages, and the AppSurface Docs views. Pitfalls: callers should not rely on an empty Pages list being rendered, and should expect Intent, Label, Summary, and Pages to reflect resolver output rather than raw authored front matter.
string Intent { get; init; }
Source
Gets the stable reader-intent identifier for the group.
string Label { get; init; }
Source
Gets the reader-facing group label.
string? Summary { get; init; }
Source
Gets optional copy that explains when to choose this group.
IReadOnlyList<DocLandingFeaturedPageViewModel> Pages { get; init; }
Source
Gets the resolved featured-page rows in this group.
View model for one resolved featured card on the docs landing page.
string Question { get; init; }
Source
Gets the evaluator question or label shown on the card.
string Title { get; init; }
Source
Gets the destination page title shown on the card.
string Href { get; init; }
Source
Gets the browser-facing link to the destination page.
string? PageType { get; init; }
Source
Gets the destination page type, such as guide, example, or api-reference.
DocPageTypeBadgePresentation? PageTypeBadge { get; init; }
Source
Gets the normalized badge presentation for PageType when AppSurface Docs can render one.
string? SupportingText { get; init; }
Source
Gets the supporting body copy shown on the card.
View model describing one secondary public-section summary on the docs home.
DocPublicSection Section { get; init; }
Source
Gets the typed public section represented by the summary.
string Label { get; init; }
Source
Gets the section label shown to the reader.
string Slug { get; init; }
Source
Gets the stable route slug for the section.
string Href { get; init; }
Source
Gets the route that enters the section.
string Purpose { get; init; }
Source
Gets the one-sentence utility copy that explains what the reader can do in the section.
IReadOnlyList<DocSectionLinkViewModel> KeyRoutes { get; init; }
Source
Gets the key routes surfaced for the section on the docs home.
View model for a section-scoped or doc-scoped breadcrumb item.
string Label { get; init; }
Source
Gets the breadcrumb label shown to the reader.
string? Href { get; init; }
Source
Gets the optional target href for the breadcrumb.
View model for one section list or sidebar link.
string Title { get; init; }
Source
Gets the displayed link title.
string Href { get; init; }
Source
Gets the destination href.
string? Summary { get; init; }
Source
Gets optional utility copy shown with the link.
string? Eyebrow { get; init; }
Source
Gets optional short eyebrow text shown above the link title.
DocPageTypeBadgePresentation? PageTypeBadge { get; init; }
Source
Gets the normalized page-type badge for the destination when one is available.
IReadOnlyList<DocSectionLinkViewModel> Children { get; init; }
Source
Gets nested child links shown under the current link.
bool IsCurrent { get; init; }
Source
Gets a value indicating whether this link represents the current page.
View model for one grouped set of section links.
string? Title { get; init; }
Source
Gets the optional group heading shown above the link list.
IReadOnlyList<DocSectionLinkViewModel> Links { get; init; }
Source
Gets the links that belong to the group.
View model for one resolved documentation link shown in related or sequence wayfinding.
string Title { get; init; }
Source
Gets the destination page title.
string Href { get; init; }
Source
Gets the browser-facing destination URL.
string? Summary { get; init; }
Source
Gets optional supporting text for the destination.
DocPageTypeBadgePresentation? PageTypeBadge { get; init; }
Source
Gets the normalized page type badge metadata for the destination when available.
View model for the sidebar navigation shell.
IReadOnlyList<DocSidebarSectionViewModel> Sections { get; init; }
Source
Gets the sections shown in the sidebar.
DocSidebarDiagnosticsViewModel? Diagnostics { get; init; }
Source
Gets the maintainer diagnostics disclosure when the current host should show diagnostics chrome.
DocSidebarHarvestHealthViewModel? HarvestHealth { get; init; }
Source
Gets the legacy harvest health sidebar entry when the current host should show health chrome.
Prefer Diagnostics for built-in sidebar rendering. This property remains available for callers that inspect the component model directly and need the pre-diagnostics health status shape.
View model for the AppSurface Docs maintainer diagnostics sidebar disclosure.
Diagnostics chrome is a maintainer affordance, not public reader navigation. The model links only to routes that are exposed for the current environment and options; hidden routes can still produce status-only rows when their chrome is visible. JSON destinations stay secondary to the human HTML diagnostics pages. Prefer this model for new sidebar rendering because it can represent harvest health, route-inspector tools, status-only rows, and secondary JSON actions together. Keep DocSidebarViewModel.HarvestHealth only for compatibility with callers that consumed the pre-diagnostics health shape directly.
string Label { get; init; }
Source
Gets the disclosure label shown in the sidebar.
DocSidebarDiagnosticsStatusViewModel? Status { get; init; }
Source
Gets the optional harvest status badge shown beside the disclosure label.
IReadOnlyList<DocSidebarDiagnosticsToolViewModel> Tools { get; init; }
Source
Gets the maintainer tools currently available from the diagnostics disclosure.
Defaults to an empty list. A diagnostics disclosure can still be meaningful with no tools when Status carries a health summary, but built-in rendering normally omits the disclosure when both Status is null and this list is empty. Tool membership is environment- and option-dependent; do not infer that a missing tool means the underlying route is absent in every host.
View model for the diagnostics disclosure status badge.
Use the status badge for a compact aggregate state such as Healthy, Degraded, or Health unavailable. Label defaults to an empty string so callers that construct the model manually should provide a reader-facing label. Ok is a presentation hint for pass/fail styling only; it does not expose route availability or permission state. The badge should be derived from the same snapshot used for any harvest-health tool row so concurrent harvest refreshes do not show mismatched status and tool summaries.
string Label { get; init; }
Source
Gets the status text shown in the compact badge.
bool Ok { get; init; }
Source
Gets a value indicating whether the status should pass local or CI verification.
View model for one maintainer diagnostics destination in the sidebar disclosure.
A tool row can be linked or status-only. Set Href to an app-relative URL such as /docs/_health or /docs/_routes only when the corresponding route is exposed for the current environment and options. Leave Href null when chrome is visible but the route should not be advertised, or when a fallback row such as Health unavailable has no destination. JsonAction is optional and should be present only when there is a secondary machine-readable route paired with the human HTML destination. Do not use the presence of chrome alone as an authorization signal; route exposure is resolved independently and can differ between development, production, and explicit configuration.
string Label { get; init; }
Source
Gets the human-readable tool label.
string? Href { get; init; }
Source
Gets the app-relative HTML destination when the tool route is exposed; otherwise null for a status-only row.
string? Summary { get; init; }
Source
Gets optional supporting text for the tool row.
DocSidebarDiagnosticsActionViewModel? JsonAction { get; init; }
Source
Gets the optional secondary JSON action for automation-oriented diagnostics.
View model for a secondary diagnostics action.
Secondary actions are intended for automation-oriented representations such as /docs/_health.json or /docs/_routes.json. Label and Href default to empty strings for object-initializer friendliness, but built-in callers should populate both before rendering the action. Prefer placing the human HTML route on DocSidebarDiagnosticsToolViewModel.Href and the JSON route here so keyboard, screen-reader, and crawler behavior stays predictable.
string Label { get; init; }
Source
Gets the accessible action label.
string Href { get; init; }
Source
Gets the app-relative action destination.
View model for the AppSurface Docs harvest health sidebar entry.
string Status { get; init; }
Source
Gets the aggregate harvest status label.
bool Ok { get; init; }
Source
Gets a value indicating whether the status should pass local or CI verification.
string? Href { get; init; }
Source
Gets the app-relative health page route when health routes are exposed; otherwise null for status-only chrome.
View model for one public section in the sidebar.
DocPublicSection Section { get; init; }
Source
Gets the typed section represented by the sidebar entry.
string Label { get; init; }
Source
Gets the section label shown in the sidebar.
string Slug { get; init; }
Source
Gets the stable section slug.
string Href { get; init; }
Source
Gets the section route href.
bool IsActive { get; init; }
Source
Gets a value indicating whether the section owns the current page context.
bool IsExpanded { get; init; }
Source
Gets a value indicating whether the section should render expanded by default.
IReadOnlyList<DocSectionGroupViewModel> Groups { get; init; }
Source
Gets the grouped links rendered when the section is expanded.
View model for the grouped-section fallback and unavailable section surfaces.
DocPublicSection? Section { get; init; }
Source
Gets the typed section when the route resolved to a known built-in section.
string Heading { get; init; }
Source
Gets the section label or unavailable-page heading.
string Description { get; init; }
Source
Gets the primary explanatory copy for the page.
string DocsHomeHref { get; init; }
Source
Gets the docs home route.
string? StartHereHref { get; init; }
Source
Gets the href for the section-level Start Here route when that section exists in the current public docs corpus.
string? AvailabilityMessage { get; init; }
Source
Gets the explanatory copy shown when the section is unavailable.
bool IsSparse { get; init; }
Source
Gets a value indicating whether the fallback section is intentionally sparse.
IReadOnlyList<DocSectionLinkViewModel> KeyRoutes { get; init; }
Source
Gets the key routes surfaced for a sparse section fallback.
IReadOnlyList<DocSectionGroupViewModel> Groups { get; init; }
Source
Gets the grouped page lists shown for the section.
View model for a rendered documentation details page.
DocNode Document { get; init; }
Source
Gets the underlying documentation node.
IReadOnlyList<DocOutlineItem> Outline { get; init; }
Source
Gets the in-page outline entries for the current document.
DocPageLinkViewModel? PreviousPage { get; init; }
Source
Gets the previous page within the current authored sequence, when one exists.
DocPageLinkViewModel? NextPage { get; init; }
Source
Gets the next page within the current authored sequence, when one exists.
IReadOnlyList<DocPageLinkViewModel> RelatedPages { get; init; }
Source
Gets the authored related pages that resolved successfully.
DocContributorProvenanceViewModel? ContributorProvenance { get; init; }
Source
Gets the contributor provenance evidence resolved for the current page.
string Title { get; init; }
Source
Gets the resolved display title for the page.
string CanonicalUrl { get; init; }
Source
Gets the app-relative canonical URL for the current details page.
Expected shape is a URL-encoded, app-relative docs path that starts with /, such as /docs/guide.html. Do not include a scheme, host, query string, or fragment identifier; callers should pass the normalized canonical public route for the rendered page. The default empty string means no canonical URL is set, and layout chrome ignores it instead of emitting a canonical link. Pitfall: avoid source-shaped aliases or other non-canonical routes here, because they can create conflicting canonical signals between live docs pages and static exports.
string? Summary { get; init; }
Source
Gets the authored summary that should be rendered under the title when available.
bool ShowSummary { get; init; }
Source
Gets a value indicating whether Summary should be rendered.
bool IsCSharpApiDoc { get; init; }
Source
Gets a value indicating whether the page is a C# API reference document.
bool IsApiSurfaceDoc { get; init; }
Source
Gets a value indicating whether the page should use the API reference reading surface.
This covers non-Markdown generated documents and Markdown documents explicitly marked with API-oriented metadata, while IsCSharpApiDoc remains scoped to C# generated page chrome decisions.
DocPageTypeBadgePresentation? PageTypeBadge { get; init; }
Source
Gets the normalized page-type badge presentation for the current page when available.
string? Component { get; init; }
Source
Gets the explicit component metadata shown with the page when available.
string? Audience { get; init; }
Source
Gets the explicit audience metadata shown with the page when available.
string? CodeLanguage { get; init; }
Source
Gets the normalized programming language value shown and filtered by generated API documentation surfaces.
Values are stable programmatic identifiers such as csharp or javascript. A null value means the source language is unknown or not applicable, and callers should treat blank values the same way. Use this property for matching, indexing, URL filters, and other machine-readable behavior; use CodeLanguageLabel for reader-facing UI. Do not match on the label, because labels may contain punctuation, casing, or future localization choices that are not part of the canonical metadata contract.
string? CodeLanguageLabel { get; init; }
Source
Gets the reader-facing programming language label shown for generated API documentation.
Labels are display text derived from CodeLanguage, such as C# for csharp or JavaScript for javascript. A null value means there is no language chip to render. Callers should use this only for presentation chrome; programmatic comparisons, search filters, and persisted lookup keys should use CodeLanguage instead so aliases and display spelling do not fragment behavior.
IReadOnlyList<DocBreadcrumbViewModel> Breadcrumbs { get; init; }
Source
Gets the breadcrumb trail used by the page.
DocPublicSection? PublicSection { get; init; }
Source
Gets the current public section when the page belongs to a public docs section.
string? PublicSectionLabel { get; init; }
Source
Gets the current public-section label when one exists.
string? PublicSectionHref { get; init; }
Source
Gets the current public-section route href when one exists.
string? PublicSectionPurpose { get; init; }
Source
Gets the current public-section utility sentence when one exists.
bool TrustMigrationUsesTurbo { get; init; }
Source
Gets a value indicating whether the trust-bar migration link should stay inside the docs content frame.
This is resolved from the harvested docs corpus rather than inferred from the raw href alone so root-mounted docs surfaces can still treat canonical plain .html docs routes as docs-local without misclassifying unrelated site pages.
bool ContributorSourceUsesTurbo { get; init; }
Source
Gets a value indicating whether the contributor source link should stay inside the docs content frame.
This is resolved from the harvested docs corpus rather than inferred from the raw href alone so mounted or root-hosted docs surfaces can keep local provenance links inside the docs shell without trapping unrelated app routes.
bool ContributorEditUsesTurbo { get; init; }
Source
Gets a value indicating whether the contributor edit link should stay inside the docs content frame.
This follows the same docs-local resolution contract as ContributorSourceUsesTurbo so preview, versioned, and root-mounted docs surfaces all make the same frame-targeting decision.
bool IsSectionLanding { get; init; }
Source
Gets a value indicating whether the current document is a section landing doc.
IReadOnlyList<DocLandingFeaturedPageGroupViewModel> FeaturedPageGroups { get; init; }
Source
Gets the curated next-step groups shown by a section landing doc.
bool HasFeaturedPages { get; }
Source
Gets a value indicating whether any curated section-landing group has visible next-step pages.
IReadOnlyList<DocSectionGroupViewModel> SectionGroups { get; init; }
Source
Gets the grouped In this section lists shown by a section landing doc.
bool HasOutline { get; }
Source
Gets a value indicating whether the page has an in-page outline to render.
bool HasWayfinding { get; }
Source
Gets a value indicating whether the page has any sequence or related-page wayfinding links to render.
View model describing the contributor provenance evidence rendered near the top of a details page.
string Label { get; init; }
Source
Gets the reader-facing provenance strip label.
string? SourceHref { get; init; }
Source
Gets the browser-facing source URL when one exists.
string? EditHref { get; init; }
Source
Gets the browser-facing edit URL when one exists.
DateTimeOffset? LastUpdatedUtc { get; init; }
Source
Gets the exact UTC timestamp used for contributor freshness when one exists.
Interface for harvesting documentation from various sources.
Task<IReadOnlyList<DocNode>> HarvestAsync(string rootPath, CancellationToken cancellationToken = default)
Source
Asynchronously scans the specified root path and returns a collection of documentation nodes harvested from sources under that path.
rootPathThe filesystem root path to scan for documentation sources.cancellationTokenAn optional token to observe for cancellation requests.A collection of DocNode representing the harvested documentation.
Describes the overall health of the latest AppSurface Docs harvest snapshot.
Numeric values are a stable public compatibility contract for persisted and serialized representations. Do not remove, reorder, or renumber existing members.
Describes one active harvester's contribution to an AppSurface Docs harvest snapshot.
Numeric values are a stable public compatibility contract for persisted and serialized representations. Do not remove, reorder, or renumber existing members.
Describes the severity of a structured AppSurface Docs harvest diagnostic.
Numeric values are a stable public compatibility contract for persisted and serialized representations. Do not remove, reorder, or renumber existing members.
Enumerates the built-in public documentation sections used by AppSurface Docs.
Numeric values are a stable public compatibility contract for persisted and serialized representations. Do not remove, reorder, or renumber existing members. Presentation order is defined by DocPublicSectionCatalog.OrderedSections, so renderers should not infer UI ordering from enum ordinals.
Maintainer-facing aggregate search-quality snapshot for AppSurface Docs.
GeneratedUtcUTC timestamp when the snapshot was generated.TotalAcceptedEventsTotal accepted docs metrics events represented by the process-local read model.WindowCapacityMaximum number of recent accepted events retained by the process-local read model.SubmittedSearchesCount of accepted search submission events.ZeroResultSearchesCount of accepted zero-result search events.ResultSelectionsCount of accepted search result selection events.RecoverySelectionsCount of accepted recovery-link selection events.FilterChangesCount of accepted filter-change events.FeedbackSubmissionsCount of accepted search-friction feedback events.ModeResolved metrics mode summary for maintainers.FrictionBucketsLow-cardinality search friction buckets with suggested docs actions.FeedbackBucketsSearch-friction feedback buckets.Resolved AppSurface Docs metrics mode shown on the hosted diagnostics surface.
BrowserCollectorEnabledWhether browser collector forwarding is enabled.HostedCollectionEnabledWhether hosted event ingestion is enabled.HostedReviewEnabledWhether hosted search-quality review is enabled.RawQueriesDisabledWhether raw search query capture is disabled by contract.One low-cardinality search-quality bucket.
NameBucket name.CountAccepted event count in the bucket.SuggestedActionMaintainer action suggested by the bucket.Exception thrown by strict AppSurface Docs startup preflight when every active harvester fails.
The exception message and Summary intentionally contain only redacted harvest-health fields. Repository roots, raw exception messages, stack traces, and diagnostic cause text stay in host logs and are not copied into this public failure contract.
DocHarvestFailureSummary Summary { get; }
Source
Gets the redacted strict-harvest failure summary.
Redacted strict-harvest failure summary safe for public exception messages and export output.
StatusThe aggregate harvest-health status that triggered strict failure.GeneratedUtcThe timestamp for the cached harvest snapshot generation.TotalHarvestersNumber of active harvesters that participated in strict aggregate health for the failed snapshot.SuccessfulHarvestersNumber of strict-health harvesters that completed with docs or an intentional empty result.FailedHarvestersNumber of strict-health harvesters that failed, timed out, or canceled.TotalDocsNumber of final docs in the failed snapshot.DiagnosticsRedacted diagnostic entries copied from the failed snapshot.DocHarvestFailureSummary FromSnapshot(DocHarvestHealthSnapshot health)
Source
Creates a redacted strict-harvest failure summary from a harvest-health snapshot.
healthThe harvest-health snapshot to summarize.A redacted summary that omits repository roots, raw exception details, and diagnostic cause text.
Redacted strict-harvest diagnostic safe for public exception messages and export output.
CodeStable diagnostic code for machine-readable branching and tests.SeverityDiagnostic severity copied from the source diagnostic.HarvesterTypeConcrete harvester type when the diagnostic belongs to one harvester.ProblemOperator-facing problem statement.FixSuggested recovery action.DocHarvestFailureDiagnostic FromDiagnostic(DocHarvestDiagnostic diagnostic)
Source
Creates a redacted strict-harvest diagnostic from a harvest-health diagnostic.
diagnosticThe source diagnostic to redact.A diagnostic that omits cause text and raw exception details.