AppSurface Search
API Reference

Models

Type

AppSurfaceDocsRouteInspectorResponse

Source

Redacted response for the AppSurface Docs route inspector HTML and JSON surfaces.

Remarks

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.

Property

Probe

AppSurfaceDocsRouteProbeResponse? Probe { get; init; } Source

Gets the optional route probe result for the requested path.

Property

Entries

IReadOnlyList<AppSurfaceDocsRouteInspectorEntryResponse> Entries { get; init; } Source

Gets public canonical route entries from the current snapshot route manifest.

Property

Diagnostics

IReadOnlyList<AppSurfaceDocsHarvestDiagnosticResponse> Diagnostics { get; init; } Source

Gets redacted route diagnostics from the current snapshot route manifest.

Type

AppSurfaceDocsRouteInspectorEntryResponse

Source

Describes one public canonical AppSurface Docs route and its aliases.

Property

SourcePath

string SourcePath { get; init; } Source

Gets the repository-relative source path for the canonical winner.

Property

CanonicalRoutePath

string CanonicalRoutePath { get; init; } Source

Gets the docs-root-relative canonical route path.

Property

CanonicalLiveUrl

string CanonicalLiveUrl { get; init; } Source

Gets the app-relative live URL for the canonical route.

Property

SourcePathIsMarkdown

bool SourcePathIsMarkdown { get; init; } Source

Gets a value indicating whether the source path is a Markdown document.

Property

RecoveryAliases

IReadOnlyList<AppSurfaceDocsRouteAliasResponse> RecoveryAliases { get; init; } Source

Gets implicit source-shaped aliases that recover copied Markdown paths.

Remarks

Empty when no Markdown source-shaped recovery aliases exist for the canonical route. The JSON wire form is always an array, never null.

Property

DeclaredAliases

IReadOnlyList<AppSurfaceDocsRouteAliasResponse> DeclaredAliases { get; init; } Source

Gets author-declared redirect aliases from documentation metadata.

Remarks

Empty when the document declares no redirect aliases. The JSON wire form is always an array, never null.

Type

AppSurfaceDocsRouteAliasResponse

Source

Describes one route alias surfaced by the route inspector.

Property

RoutePath

string RoutePath { get; init; } Source

Gets the docs-root-relative alias route path.

Property

LiveUrl

string LiveUrl { get; init; } Source

Gets the app-relative live URL for the alias.

Property

Kind

string Kind { get; init; } Source

Gets the alias source category.

Remarks

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.

Type

AppSurfaceDocsRouteProbeResponse

Source

Explains how one requested route-inspector path resolves against the current route identity catalog.

Property

InputPath

string InputPath { get; init; } Source

Gets the raw path supplied to the route inspector.

Property

NormalizedPath

string? NormalizedPath { get; init; } Source

Gets the docs-root-relative path used for route lookup, when the input was valid.

Remarks

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.

Property

Kind

string Kind { get; init; } Source

Gets the route resolution kind.

Remarks

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.

Property

SourcePath

string? SourcePath { get; init; } Source

Gets the repository-relative source path associated with the route, when one exists.

Remarks

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.

Property

CanonicalRoutePath

string? CanonicalRoutePath { get; init; } Source

Gets the docs-root-relative canonical route path associated with the route, when one exists.

Remarks

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.

Property

CanonicalLiveUrl

string? CanonicalLiveUrl { get; init; } Source

Gets the app-relative live URL for the canonical route, when one exists.

Remarks

null when CanonicalRoutePath is null. For the docs home route, this is the configured docs root URL, for example /docs.

Property

Message

string Message { get; init; } Source

Gets a short maintainer-facing explanation of the route result.

Type

DocPublicSectionCatalog

Source

Defines the canonical public-section labels, slugs, purpose copy, and alias lookup rules used by AppSurface Docs.

Method

GetLabel

string GetLabel(DocPublicSection section) Source

Gets the canonical display label for the specified public section.

Parameters

  • sectionThe section whose label should be returned.

Returns

The reader-facing label, such as Start Here or API Reference.

Method

GetSlug

string GetSlug(DocPublicSection section) Source

Gets the canonical stable route slug for the specified public section.

Parameters

  • sectionThe section whose slug should be returned.

Returns

A lower-case hyphenated slug suitable for {DocsRootPath}/sections/{slug} routes.

Method

GetPurpose

string GetPurpose(DocPublicSection section) Source

Gets the short purpose statement used to explain why a public section exists.

Parameters

  • sectionThe section whose purpose copy should be returned.

Returns

The summary text shown in section-first navigation surfaces.

Method

GetHref

2 overloads
string GetHref(DocPublicSection section) Source

Gets the default stable public route for the specified section.

Parameters

  • sectionThe section whose href should be returned.

Returns

The default /docs/sections/{slug} route for the section.

Remarks

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.

Parameters

  • 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.

Returns

The canonical {docsRootPath}/sections/{slug} route for the section, or /sections/{slug} when docsRootPath is exactly /.

Remarks

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.

Method

TryResolve

bool TryResolve(string? value, out DocPublicSection section) Source

Resolves an authored section value using canonical labels, canonical slugs, or known aliases.

Parameters

  • valueThe authored value to resolve.
  • sectionWhen this method returns true, contains the resolved public section.

Returns

true when value matches a known label, slug, or alias after normalization; otherwise, false.

Remarks

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.

Method

TryResolveSlug

bool TryResolveSlug(string? slug, out DocPublicSection section) Source

Resolves only canonical section-route slugs for /docs/sections/{slug} URLs.

Parameters

  • slugThe incoming route slug to resolve.
  • sectionWhen this method returns true, contains the resolved public section.

Returns

true when slug matches one canonical section slug after trimming and case-normalization; otherwise, false.

Remarks

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).

Method

BuildLookup

IReadOnlyDictionary<string, DocPublicSection> BuildLookup() Source

Builds the lookup table used for authored metadata values that may use labels, slugs, or aliases.

Returns

A normalized dictionary that maps authored section identifiers to their canonical section enum.

Method

BuildSlugLookup

IReadOnlyDictionary<string, DocPublicSection> BuildSlugLookup() Source

Builds the lookup table used for canonical section-route slugs.

Returns

A normalized dictionary that accepts only canonical slugs for section-route resolution.

Method

NormalizeKey

string NormalizeKey(string? value) Source

Normalizes authored section metadata so labels, slugs, and aliases can share one lookup table.

Parameters

  • valueThe authored value to normalize.

Returns

A lowercase alphanumeric key, or an empty string when value is blank.

Method

NormalizeSlug

string NormalizeSlug(string? value) Source

Normalizes an incoming section-route slug while preserving the canonical hyphenated slug contract.

Parameters

  • valueThe incoming route slug.

Returns

The trimmed lowercase slug, or an empty string when value is blank.

Property

OrderedSections

IReadOnlyList<DocPublicSection> OrderedSections { get; } Source

Gets the public sections in their intended presentation order for docs home and sidebar surfaces.

Type

Definition

Source

Describes one built-in public section, including its canonical display label, stable route slug, and accepted aliases.

Type

AppSurfaceDocsHarvestHealthResponse

Source

Redacted operator-facing AppSurface Docs harvest health response shared by the HTML and JSON health surfaces.

Remarks

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.

Method

FromSnapshot

AppSurfaceDocsHarvestHealthResponse FromSnapshot(DocHarvestHealthSnapshot health) Source

Creates a redacted response from the full server-side harvest health snapshot.

Parameters

  • healthThe server-side harvest health snapshot.

Returns

A response that is safe to serialize to clients.

Property

Status

string Status { get; init; } Source

Gets the aggregate harvest status name.

Property

GeneratedUtc

DateTimeOffset GeneratedUtc { get; init; } Source

Gets the UTC timestamp when the cached harvest snapshot was generated.

Property

Verification

AppSurfaceDocsHarvestHealthVerification Verification { get; init; } Source

Gets the machine-checkable verification rollup for the response.

Property

TotalHarvesters

int TotalHarvesters { get; init; } Source

Gets the number of active harvesters that participated in strict aggregate health for the snapshot.

Property

SuccessfulHarvesters

int SuccessfulHarvesters { get; init; } Source

Gets the number of strict-health harvesters that completed with docs or a valid empty result.

Property

FailedHarvesters

int FailedHarvesters { get; init; } Source

Gets the number of strict-health harvesters that failed, timed out, or canceled.

Property

TotalDocs

int TotalDocs { get; init; } Source

Gets the number of documentation nodes published by the final cached docs snapshot.

Property

Harvesters

IReadOnlyList<AppSurfaceDocsHarvesterHealthResponse> Harvesters { get; init; } Source

Gets the per-harvester redacted health entries.

Property

Diagnostics

IReadOnlyList<AppSurfaceDocsHarvestDiagnosticResponse> Diagnostics { get; init; } Source

Gets redacted diagnostic entries for failed, degraded, or noteworthy states.

Property

RebuildForm

AppSurfaceDocsHarvestRebuildForm? RebuildForm { get; init; } Source

Gets the trusted operator rebuild form metadata used by the HTML health page.

Remarks

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.

Type

AppSurfaceDocsHarvestRebuildForm

Source

Request-scoped trusted operator action metadata for rebuilding the live AppSurface Docs harvest.

Property

Action

string Action { get; init; } Source

Gets the path-base-aware rebuild form action.

Property

Method

string Method { get; init; } Source

Gets the HTTP method required by the rebuild endpoint.

Property

ReturnUrl

string ReturnUrl { get; init; } Source

Gets the validated app-relative docs URL to revisit after rebuild completion.

Property

IsAuthorized

bool IsAuthorized { get; init; } Source

Gets a value indicating whether the current request user may submit the rebuild form.

Property

Status

string Status { get; init; } Source

Gets the short visible state for the rebuild action.

Property

Description

string Description { get; init; } Source

Gets the operator-facing explanation for the current rebuild action state.

Type

AppSurfaceDocsHarvestHealthVerification

Source

Machine-checkable verification rollup for an AppSurface Docs harvest health response.

Property

Ok

bool Ok { get; init; } Source

Gets a value indicating whether the harvest state should pass local or CI verification.

Property

HttpStatusCode

int HttpStatusCode { get; init; } Source

Gets the HTTP status code AppSurface Docs uses for this response.

Type

AppSurfaceDocsHarvesterHealthResponse

Source

Redacted per-harvester health entry in the operator-facing harvest health response.

Property

HarvesterType

string HarvesterType { get; init; } Source

Gets the concrete harvester type name.

Property

Status

string Status { get; init; } Source

Gets the harvester status name.

Property

DocCount

int DocCount { get; init; } Source

Gets the number of documentation nodes returned by the harvester before AppSurface Docs post-processing.

Property

Diagnostic

AppSurfaceDocsHarvestDiagnosticResponse? Diagnostic { get; init; } Source

Gets the redacted diagnostic explaining a failed, timed-out, or canceled harvester.

Type

AppSurfaceDocsHarvestDiagnosticResponse

Source

Redacted diagnostic entry in the operator-facing harvest health response.

Property

Code

string Code { get; init; } Source

Gets the stable diagnostic code.

Property

Severity

string Severity { get; init; } Source

Gets the diagnostic severity name.

Property

HarvesterType

string? HarvesterType { get; init; } Source

Gets the concrete harvester type when the diagnostic belongs to one harvester.

Property

Problem

string Problem { get; init; } Source

Gets the operator-facing problem statement.

Property

Cause

string Cause { get; init; } Source

Gets the operator-facing, redacted explanation for why AppSurface Docs reported the diagnostic.

Remarks

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.

Property

Fix

string Fix { get; init; } Source

Gets the suggested operator or docs-author recovery action.

Type

SearchPageViewModel

Source

Describes the server-rendered shell for the dedicated docs search workspace.

Parameters

  • 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.

Remarks

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.

Type

DocPageTypeBadgePresentation

Source

Presentation metadata for one normalized documentation page-type badge.

Property

Value

string Value { get; init; } Source

Gets the normalized machine-readable page-type value.

Property

Label

string Label { get; init; } Source

Gets the human-readable badge label.

Property

Variant

string Variant { get; init; } Source

Gets the badge variant suffix used by built-in AppSurface Docs CSS classes such as docs-page-badge--guide.

Type

DocMetadataPresentation

Source

Converts raw documentation metadata values into consistent UI-facing labels and badge variants.

Remarks

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.

Method

ResolveCodeLanguageValue

string? ResolveCodeLanguageValue(string? codeLanguage) Source

Resolves the normalized programming language value used by generated API documentation.

Parameters

  • codeLanguageThe raw programming language metadata value.

Returns

A normalized token, or null when the value is blank.

Method

ResolveCodeLanguageLabel

string? ResolveCodeLanguageLabel(string? codeLanguage) Source

Resolves the reader-facing programming language label used by generated API documentation.

Parameters

  • codeLanguageThe raw programming language metadata value.

Returns

A display label such as C# or JavaScript, or null for blank values.

Method

ResolvePageTypeBadge

DocPageTypeBadgePresentation? ResolvePageTypeBadge(string? pageType) Source

Resolves the built-in AppSurface Docs page-type badge presentation for a raw metadata value.

Parameters

  • pageTypeThe raw page-type metadata value, such as guide, api-reference, or release-note.

Returns

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.

Method

NormalizeToken

string? NormalizeToken(string? value) Source

Normalizes a raw metadata token into a lowercase dash-delimited value.

Parameters

  • valueRaw metadata token that may contain whitespace, underscores, dashes, or line breaks.

Returns

A normalized token, or null when value is null, whitespace, or produces no non-delimiter segments after trimming and splitting.

Remarks

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 -.

Enum

DocsRecoveryLinkKind

Source

Identifies how a neutral docs recovery link should be visually emphasized.

Remarks

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.

Type

AppSurfaceDocsHarvestingViewModel

Source

View model for the AppSurface Docs live harvest observatory.

Property

Progress

AppSurfaceDocsHarvestProgressSnapshot Progress { get; init; } Source

Gets the current redacted harvest progress snapshot rendered by the observatory.

Property

ReturnUrl

string ReturnUrl { get; init; } Source

Gets the app-relative URL the browser should open after harvest completion.

Remarks

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.

Property

CompletionNavigationDelayMilliseconds

int CompletionNavigationDelayMilliseconds { get; init; } Source

Gets the delay, in milliseconds, before JavaScript users are returned to ReturnUrl.

Property

CanUseLiveProgress

bool CanUseLiveProgress { get; init; } Source

Gets a value indicating whether the current request may subscribe to the live harvest progress stream.

Remarks

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.

Property

RebuildRequestResult

AppSurfaceDocsHarvestRebuildRequestResult? RebuildRequestResult { get; init; } Source

Gets the result of the rebuild request that navigated to the observatory, when one is available.

Remarks

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.

Type

AppSurfaceDocsHarvestProgressSnapshot

Source

Redacted live progress snapshot for one AppSurface Docs harvest run.

Property

Idle

AppSurfaceDocsHarvestProgressSnapshot Idle { get; } Source

Gets the empty snapshot used before a harvest run has started.

Property

RunId

string RunId { get; init; } Source

Gets the unique run identifier.

Property

State

AppSurfaceDocsHarvestRunState State { get; init; } Source

Gets the current run state.

Property

StartedUtc

DateTimeOffset StartedUtc { get; init; } Source

Gets the UTC time when the run started.

Property

CompletedUtc

DateTimeOffset? CompletedUtc { get; init; } Source

Gets the UTC time when the run completed.

Property

TotalHarvesters

int TotalHarvesters { get; init; } Source

Gets the number of active harvesters expected in the run.

Property

CompletedHarvesters

int CompletedHarvesters { get; init; } Source

Gets the number of harvesters that have completed.

Property

TotalDocs

int TotalDocs { get; init; } Source

Gets the number of docs in the final snapshot, or the currently known count while running.

Property

Status

string Status { get; init; } Source

Gets the redacted aggregate harvest status when known.

Property

Harvesters

IReadOnlyList<AppSurfaceDocsHarvesterProgress> Harvesters { get; init; } Source

Gets redacted per-harvester progress entries.

Property

Activity

IReadOnlyList<AppSurfaceDocsHarvestActivity> Activity { get; init; } Source

Gets bounded recent activity entries, newest first.

Property

Diagnostics

IReadOnlyList<AppSurfaceDocsHarvestDiagnosticResponse> Diagnostics { get; init; } Source

Gets redacted diagnostics surfaced only when the run is degraded or failed.

Type

AppSurfaceDocsHarvesterProgress

Source

Redacted progress for one AppSurface Docs harvester.

Property

HarvesterType

string HarvesterType { get; init; } Source

Gets the non-secret harvester type name used as the stable row identity.

Property

Status

string Status { get; init; } Source

Gets the display status for this harvester.

Property

DocCount

int DocCount { get; init; } Source

Gets the number of documents reported by this harvester.

Type

AppSurfaceDocsHarvestActivity

Source

One bounded activity entry in the live harvest observatory.

Property

TimestampUtc

DateTimeOffset TimestampUtc { get; init; } Source

Gets the UTC timestamp used for sorting and machine-readable rendering.

Property

Message

string Message { get; init; } Source

Gets the redacted human-readable activity message.

Enum

AppSurfaceDocsHarvestRunState

Source

State for the current live harvest run.

Type

AppSurfaceDocsVersionArchiveViewModel

Source

View model for the public AppSurface Docs version archive and degraded entry surface.

Remarks

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.

Property

Heading

string Heading { get; init; } Source

Gets the page heading.

Property

Description

string Description { get; init; } Source

Gets the orientation copy shown above the archive list.

Property

AvailabilityMessage

string? AvailabilityMessage { get; init; } Source

Gets optional explanatory copy shown when the stable route-root alias cannot mount a recommended released tree.

Remarks

This is typically null on the dedicated archive page and populated only for the degraded route-root recovery experience.

Property

PreviewHref

string PreviewHref { get; init; } Source

Gets the live preview docs URL.

Remarks

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.

Property

VersionsHref

string VersionsHref { get; init; } Source

Gets the stable archive URL.

Property

Versions

IReadOnlyList<AppSurfaceDocsVersionArchiveEntryViewModel> Versions { get; init; } Source

Gets the available published versions shown in the archive.

Type

AppSurfaceDocsVersionArchiveEntryViewModel

Source

Represents one release entry in the public AppSurface Docs version archive.

Remarks

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.

Property

Version

string Version { get; init; } Source

Gets the exact published version identifier.

Property

Label

string Label { get; init; } Source

Gets the reader-facing label.

Property

Summary

string? Summary { get; init; } Source

Gets optional summary copy for the release.

Property

Href

string? Href { get; init; } Source

Gets the exact-version URL when the release is available.

Remarks

This is null when IsAvailable is false and the archive should render the release as informational-only.

Property

IsRecommended

bool IsRecommended { get; init; } Source

Gets a value indicating whether this version is the recommended stable alias target.

Property

IsAvailable

bool IsAvailable { get; init; } Source

Gets a value indicating whether the exact-version tree is currently available.

Property

SupportStateLabel

string SupportStateLabel { get; init; } Source

Gets the human-readable support-state label.

Property

AdvisoryLabel

string? AdvisoryLabel { get; init; } Source

Gets the human-readable advisory label when a release warning should be surfaced.

Remarks

This is null when no release-level warning badge should be rendered.

Property

AvailabilityMessage

string? AvailabilityMessage { get; init; } Source

Gets the availability explanation when the release tree is unavailable.

Remarks

This is usually populated only when IsAvailable is false and explains why the exact-version tree could not be mounted or linked.

Type

DocMetadata

Source

Structured metadata that can drive navigation, breadcrumbs, related links, and search without re-parsing source content.

Property

Title

string? Title { get; init; } Source

Gets the resolved display title for the documentation node.

Property

TitleIsDerived

bool? TitleIsDerived { get; init; } Source

Gets a value indicating whether Title was derived from page content or source path instead of authored explicitly.

Property

Summary

string? Summary { get; init; } Source

Gets a short summary describing the documentation node.

Property

SummaryIsDerived

bool? SummaryIsDerived { get; init; } Source

Gets a value indicating whether Summary was derived from page content instead of authored explicitly.

Property

PageType

string? PageType { get; init; } Source

Gets the page type, such as guide, example, api-reference, or troubleshooting.

Property

Audience

string? Audience { get; init; } Source

Gets the intended audience for the page.

Property

Component

string? Component { get; init; } Source

Gets the product component associated with the page.

Property

CodeLanguage

string? CodeLanguage { get; init; } Source

Gets the programming or source language for generated code documentation.

Remarks

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.

Property

Namespace

string? Namespace { get; init; } Source

Gets the generated namespace page that namespace-intro source content should merge into.

Remarks

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.

Property

Aliases

IReadOnlyList<string>? Aliases { get; init; } Source

Gets alternate terms that should resolve to this page in search.

Property

RedirectAliases

IReadOnlyList<string>? RedirectAliases { get; init; } Source

Gets alternate route aliases that should redirect to the canonical page when redirect support is enabled.

Property

Keywords

IReadOnlyList<string>? Keywords { get; init; } Source

Gets search keywords associated with the page.

Property

Status

string? Status { get; init; } Source

Gets the content lifecycle status for the page.

Property

NavGroup

string? NavGroup { get; init; } Source

Gets the navigation group used by public docs navigation.

Property

Order

int? Order { get; init; } Source

Gets the relative ordering value within a navigation group.

Property

SequenceKey

string? SequenceKey { get; init; } Source

Gets the explicit sequence identifier used to connect pages into one proof path.

Remarks

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.

Property

SectionLanding

bool? SectionLanding { get; init; } Source

Gets a value indicating whether the page is the authored landing doc for its public section.

Property

HideFromPublicNav

bool? HideFromPublicNav { get; init; } Source

Gets a value indicating whether the page should be hidden from public navigation.

Property

HideFromSearch

bool? HideFromSearch { get; init; } Source

Gets a value indicating whether the page should be hidden from search.

Property

RelatedPages

IReadOnlyList<string>? RelatedPages { get; init; } Source

Gets related page identifiers or titles.

Property

CanonicalSlug

string? CanonicalSlug { get; init; } Source

Gets the preferred canonical slug for the page.

Property

Breadcrumbs

IReadOnlyList<string>? Breadcrumbs { get; init; } Source

Gets optional human-readable breadcrumb labels for the page.

Property

FeaturedPageGroups

IReadOnlyList<DocFeaturedPageGroupDefinition>? FeaturedPageGroups { get; init; } Source

Gets optional landing-page curation groups authored with the documentation page.

Remarks

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.

Property

EntryPoints

IReadOnlyList<DocNamespaceEntryPoint>? EntryPoints { get; init; } Source

Gets optional namespace-page entry points rendered as a compact editorial index above generated API detail.

Remarks

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.

Property

Outline

DocOutlineMetadata? Outline { get; init; } Source

Gets optional page-local outline behavior for Markdown documents.

Remarks

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.

Property

Trust

DocTrustMetadata? Trust { get; init; } Source

Gets optional trust and provenance metadata rendered near the top of the page.

Remarks

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.

Property

Contributor

DocContributorMetadata? Contributor { get; init; } Source

Gets optional contributor provenance metadata for page-level source, edit, and freshness control.

Property

Localization

DocLocalizationMetadata? Localization { get; init; } Source

Gets optional localization metadata used to connect translated variants of the same conceptual document.

Remarks

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.

Property

BreadcrumbsMatchPathTargets

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.

Type

DocNamespaceEntryPoint

Source

Authored namespace-page entry point metadata parsed from Markdown front matter or a paired sidecar file.

Remarks

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.

Property

Label

string Label { get; init; } Source

Gets the concise reader-facing label, usually a type or method name.

Property

Summary

string? Summary { get; init; } Source

Gets optional supporting copy shown under the label.

Property

Target

string? Target { get; init; } Source

Gets the normalized generated anchor ID for the entry point, without a leading #.

Property

Href

string? Href { get; init; } Source

Gets an optional explicit fragment or app-relative docs URL used only when Target is absent.

Property

Keywords

IReadOnlyList<string>? Keywords { get; init; } Source

Gets additional search terms associated with this entry point.

Property

Order

int? Order { get; init; } Source

Gets an optional non-negative ordering value. Entries with an order sort before unordered entries.

Property

SourceIndex

int SourceIndex { get; init; } Source

Gets the zero-based authoring position used as a stable tie breaker.

Type

DocLocalizationMetadata

Source

Page-level localization metadata for one documentation node.

Remarks

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.

Method

Merge

DocLocalizationMetadata? Merge(DocLocalizationMetadata? primary, DocLocalizationMetadata? fallback) Source

Merges primary and fallback localization metadata using the same precedence rules as document metadata overlays.

Remarks

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.

Property

Locale

string? Locale { get; init; } Source

Gets the authored or inferred BCP-47 locale code for this document variant.

Property

TranslationKey

string? TranslationKey { get; init; } Source

Gets the stable conceptual page identity shared by translated variants.

Property

LocalizedTitle

string? LocalizedTitle { get; init; } Source

Gets an optional localized title override for language-switching and graph-derived navigation.

Property

LocaleFallback

AppSurfaceDocsLocaleFallbackMode? LocaleFallback { get; init; } Source

Gets an optional page-level missing-translation fallback policy.

Type

DocOutlineItem

Source

Represents one navigable heading captured while harvesting a documentation page.

Property

Title

string Title { get; init; } Source

Gets the heading text shown in the page-local outline and search metadata.

Property

Id

string Id { get; init; } Source

Gets the HTML fragment identifier that anchors this outline item within the page.

Property

Level

int Level { get; init; } Source

Gets the normalized heading level for this entry.

Type

DocOutlineMetadata

Source

Markdown page-local outline behavior supplied through front matter or paired sidecar metadata.

Remarks

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.

Method

Merge

DocOutlineMetadata? Merge(DocOutlineMetadata? primary, DocOutlineMetadata? fallback) Source

Merges page outline metadata from a primary source and a fallback source.

Parameters

  • 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.

Returns

The merged outline metadata, or null when both merged properties collapse to null.

Remarks

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.

Property

MaxHeadingLevel

int? MaxHeadingLevel { get; init; } Source

Gets the deepest heading level to include in the display outline.

Property

RepeatedHeadingPolicy

string? RepeatedHeadingPolicy { get; init; } Source

Gets the repeated-heading policy for pages whose repeated H3 headings would overwhelm the outline.

Type

DocTrustMetadata

Source

Structured trust and provenance metadata for a documentation page.

Property

Status

string? Status { get; init; } Source

Gets the compact top-level state shown in the trust bar, such as Unreleased or Pre-1.0 policy.

Property

Summary

string? Summary { get; init; } Source

Gets the short trust statement that explains what the current status means for readers.

Property

Freshness

string? Freshness { get; init; } Source

Gets the freshness statement that explains how current or provisional the page is.

Property

ChangeScope

string? ChangeScope { get; init; } Source

Gets the statement describing which product surfaces or artifacts this page covers.

Property

Archive

string? Archive { get; init; } Source

Gets the archival or long-term home statement for the page contents.

Property

Sources

IReadOnlyList<string>? Sources { get; init; } Source

Gets optional provenance notes or upstream sources that support the page.

Type

DocContributorMetadata

Source

Page-level contributor provenance metadata used to override or suppress source, edit, and freshness evidence.

Method

Merge

DocContributorMetadata? Merge(DocContributorMetadata? primary, DocContributorMetadata? fallback) Source

Merges contributor metadata by preferring authored primary values and filling missing values from fallback metadata.

Remarks

Precedence rules:
  • 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.
Pitfalls:
  • Setting a string override to the empty string does not clear a fallback value; it falls back instead.
  • Callers that need to suppress inherited contributor rendering should use HideContributorInfo instead of relying on blank string overrides.
Property

HideContributorInfo

bool? HideContributorInfo { get; init; } Source

Gets a value indicating whether contributor provenance should be hidden for the page even when automatic evidence exists.

Property

SourcePathOverride

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.

Property

SourceUrlOverride

string? SourceUrlOverride { get; init; } Source

Gets an optional explicit source URL override. Only absolute HTTP(S) URLs and root-relative paths are accepted.

Property

EditUrlOverride

string? EditUrlOverride { get; init; } Source

Gets an optional explicit edit URL override. Only absolute HTTP(S) URLs and root-relative paths are accepted.

Property

LastUpdatedOverride

DateTimeOffset? LastUpdatedOverride { get; init; } Source

Gets an optional exact timestamp override for contributor freshness.

Type

DocSymbolSourceProvenance

Source

Identifies the source declaration that produced one rendered C# API documentation symbol.

Property

AnchorId

string AnchorId { get; init; } Source

Gets the rendered HTML anchor ID for the generated API symbol.

Property

SourcePath

string SourcePath { get; init; } Source

Gets the repository-relative source file path that contains the documented declaration.

Property

StartLine

int StartLine { get; init; } Source

Gets the 1-based source declaration line.

Type

DocNode

Source

Represents a documentation node within the repository.

Parameters

  • 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.
Type

DocHarvestHealthSnapshot

Source

Captures the structured health of one AppSurface Docs harvest snapshot.

Parameters

  • 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.

Remarks

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.

Type

DocHarvesterHealth

Source

Captures one active harvester's status inside an AppSurface Docs harvest snapshot.

Parameters

  • 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.
Type

DocHarvestDiagnostic

Source

Describes one structured AppSurface Docs harvest health diagnostic.

Parameters

  • 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.
Type

DocHarvestDiagnosticCodes

Source

Defines the stable diagnostic codes emitted by AppSurface Docs harvest health snapshots.

Remarks

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.

Type

DocSectionSnapshot

Source

Represents one normalized public-section snapshot derived from the harvested docs corpus.

Property

Section

DocPublicSection Section { get; init; } Source

Gets the typed public section identifier.

Property

Label

string Label { get; init; } Source

Gets the canonical display label for the section.

Property

Slug

string Slug { get; init; } Source

Gets the stable route slug for the section.

Property

LandingDoc

DocNode? LandingDoc { get; init; } Source

Gets the optional authored landing doc that represents the section.

Property

VisiblePages

IReadOnlyList<DocNode> VisiblePages { get; init; } Source

Gets the public pages that belong to the section, ordered for display.

Type

DocFeaturedPageGroupDefinition

Source

Defines one authored reader-intent group for a docs landing surface.

Property

Intent

string? Intent { get; init; } Source

Gets the stable reader-intent identifier for the group.

Remarks

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.

Property

Label

string? Label { get; init; } Source

Gets the reader-facing group heading.

Remarks

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.

Property

Summary

string? Summary { get; init; } Source

Gets optional copy that explains when a reader should choose the group.

Property

Order

int? Order { get; init; } Source

Gets the relative display order for the group.

Property

Pages

IReadOnlyList<DocFeaturedPageDefinition> Pages { get; init; } Source

Gets the featured destination pages in this group.

Property

SourceFieldPath

string? SourceFieldPath { get; init; } Source

Gets the parser-populated metadata field path for group-level diagnostics.

Remarks

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.

Type

DocFeaturedPageDefinition

Source

Defines one authored featured-page entry for a docs landing surface.

Property

Question

string? Question { get; init; } Source

Gets the reader-facing evaluator question or label for the card.

Remarks

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.

Property

Path

string? Path { get; init; } Source

Gets the source or canonical path of the destination page to feature.

Remarks

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.

Property

SupportingCopy

string? SupportingCopy { get; init; } Source

Gets optional landing-only supporting copy shown instead of destination summary text.

Property

Order

int? Order { get; init; } Source

Gets the relative display order for the featured entry.

Property

SourceFieldPath

string? SourceFieldPath { get; init; } Source

Gets the parser-populated metadata field path for page-level diagnostics.

Remarks

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.

Type

DocLandingViewModel

Source

View model for the docs landing page.

Property

Heading

string Heading { get; init; } Source

Gets the hero heading shown on the docs landing.

Property

Description

string Description { get; init; } Source

Gets the supporting description shown under the hero heading.

Property

LandingDoc

DocNode? LandingDoc { get; init; } Source

Gets the repository-root landing document when one was harvested.

Property

StartHereHref

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.

Property

VisibleDocs

IReadOnlyList<DocNode> VisibleDocs { get; init; } Source

Gets the visible documentation nodes used by the neutral fallback landing state.

Property

FeaturedPageGroups

IReadOnlyList<DocLandingFeaturedPageGroupViewModel> FeaturedPageGroups { get; init; } Source

Gets the resolved proof-path groups for the landing experience.

Property

SecondarySections

IReadOnlyList<DocHomeSectionViewModel> SecondarySections { get; init; } Source

Gets the secondary section summaries shown under the primary Start Here route.

Property

HasFeaturedPages

bool HasFeaturedPages { get; } Source

Gets a value indicating whether the landing should render a proof-path lead section.

Type

DocLandingFeaturedPageGroupViewModel

Source

View model for one resolved reader-intent group on a docs landing page.

Remarks

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.

Property

Intent

string Intent { get; init; } Source

Gets the stable reader-intent identifier for the group.

Property

Label

string Label { get; init; } Source

Gets the reader-facing group label.

Property

Summary

string? Summary { get; init; } Source

Gets optional copy that explains when to choose this group.

Property

Pages

IReadOnlyList<DocLandingFeaturedPageViewModel> Pages { get; init; } Source

Gets the resolved featured-page rows in this group.

Type

DocLandingFeaturedPageViewModel

Source

View model for one resolved featured card on the docs landing page.

Property

Question

string Question { get; init; } Source

Gets the evaluator question or label shown on the card.

Property

Title

string Title { get; init; } Source

Gets the destination page title shown on the card.

Property

Href

string Href { get; init; } Source

Gets the browser-facing link to the destination page.

Property

PageType

string? PageType { get; init; } Source

Gets the destination page type, such as guide, example, or api-reference.

Property

PageTypeBadge

DocPageTypeBadgePresentation? PageTypeBadge { get; init; } Source

Gets the normalized badge presentation for PageType when AppSurface Docs can render one.

Property

SupportingText

string? SupportingText { get; init; } Source

Gets the supporting body copy shown on the card.

Type

DocHomeSectionViewModel

Source

View model describing one secondary public-section summary on the docs home.

Property

Section

DocPublicSection Section { get; init; } Source

Gets the typed public section represented by the summary.

Property

Label

string Label { get; init; } Source

Gets the section label shown to the reader.

Property

Slug

string Slug { get; init; } Source

Gets the stable route slug for the section.

Property

Href

string Href { get; init; } Source

Gets the route that enters the section.

Property

Purpose

string Purpose { get; init; } Source

Gets the one-sentence utility copy that explains what the reader can do in the section.

Property

KeyRoutes

IReadOnlyList<DocSectionLinkViewModel> KeyRoutes { get; init; } Source

Gets the key routes surfaced for the section on the docs home.

Type

DocBreadcrumbViewModel

Source

View model for a section-scoped or doc-scoped breadcrumb item.

Property

Label

string Label { get; init; } Source

Gets the breadcrumb label shown to the reader.

Property

Href

string? Href { get; init; } Source

Gets the optional target href for the breadcrumb.

Type

DocSectionLinkViewModel

Source

View model for one section list or sidebar link.

Property

Title

string Title { get; init; } Source

Gets the displayed link title.

Property

Href

string Href { get; init; } Source

Gets the destination href.

Property

Summary

string? Summary { get; init; } Source

Gets optional utility copy shown with the link.

Property

Eyebrow

string? Eyebrow { get; init; } Source

Gets optional short eyebrow text shown above the link title.

Property

PageTypeBadge

DocPageTypeBadgePresentation? PageTypeBadge { get; init; } Source

Gets the normalized page-type badge for the destination when one is available.

Property

Children

IReadOnlyList<DocSectionLinkViewModel> Children { get; init; } Source

Gets nested child links shown under the current link.

Property

UseAnchorNavigation

bool UseAnchorNavigation { get; init; } Source

Gets a value indicating whether the link should use docs anchor navigation semantics.

Property

IsCurrent

bool IsCurrent { get; init; } Source

Gets a value indicating whether this link represents the current page.

Type

DocSectionGroupViewModel

Source

View model for one grouped set of section links.

Property

Title

string? Title { get; init; } Source

Gets the optional group heading shown above the link list.

Type

DocPageLinkViewModel

Source

View model for one resolved documentation link shown in related or sequence wayfinding.

Property

Title

string Title { get; init; } Source

Gets the destination page title.

Property

Href

string Href { get; init; } Source

Gets the browser-facing destination URL.

Property

Summary

string? Summary { get; init; } Source

Gets optional supporting text for the destination.

Property

PageTypeBadge

DocPageTypeBadgePresentation? PageTypeBadge { get; init; } Source

Gets the normalized page type badge metadata for the destination when available.

Type

DocSidebarViewModel

Source

View model for the sidebar navigation shell.

Property

Sections

IReadOnlyList<DocSidebarSectionViewModel> Sections { get; init; } Source

Gets the sections shown in the sidebar.

Property

Diagnostics

DocSidebarDiagnosticsViewModel? Diagnostics { get; init; } Source

Gets the maintainer diagnostics disclosure when the current host should show diagnostics chrome.

Property

HarvestHealth

DocSidebarHarvestHealthViewModel? HarvestHealth { get; init; } Source

Gets the legacy harvest health sidebar entry when the current host should show health chrome.

Remarks

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.

Type

DocSidebarDiagnosticsViewModel

Source

View model for the AppSurface Docs maintainer diagnostics sidebar disclosure.

Remarks

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.

Property

Label

string Label { get; init; } Source

Gets the disclosure label shown in the sidebar.

Property

Status

DocSidebarDiagnosticsStatusViewModel? Status { get; init; } Source

Gets the optional harvest status badge shown beside the disclosure label.

Property

Tools

IReadOnlyList<DocSidebarDiagnosticsToolViewModel> Tools { get; init; } Source

Gets the maintainer tools currently available from the diagnostics disclosure.

Remarks

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.

Type

DocSidebarDiagnosticsStatusViewModel

Source

View model for the diagnostics disclosure status badge.

Remarks

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.

Property

Label

string Label { get; init; } Source

Gets the status text shown in the compact badge.

Property

Ok

bool Ok { get; init; } Source

Gets a value indicating whether the status should pass local or CI verification.

Type

DocSidebarDiagnosticsToolViewModel

Source

View model for one maintainer diagnostics destination in the sidebar disclosure.

Remarks

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.

Property

Label

string Label { get; init; } Source

Gets the human-readable tool label.

Property

Href

string? Href { get; init; } Source

Gets the app-relative HTML destination when the tool route is exposed; otherwise null for a status-only row.

Property

Summary

string? Summary { get; init; } Source

Gets optional supporting text for the tool row.

Property

JsonAction

DocSidebarDiagnosticsActionViewModel? JsonAction { get; init; } Source

Gets the optional secondary JSON action for automation-oriented diagnostics.

Type

DocSidebarDiagnosticsActionViewModel

Source

View model for a secondary diagnostics action.

Remarks

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.

Property

Label

string Label { get; init; } Source

Gets the accessible action label.

Property

Href

string Href { get; init; } Source

Gets the app-relative action destination.

Type

DocSidebarHarvestHealthViewModel

Source

View model for the AppSurface Docs harvest health sidebar entry.

Property

Status

string Status { get; init; } Source

Gets the aggregate harvest status label.

Property

Ok

bool Ok { get; init; } Source

Gets a value indicating whether the status should pass local or CI verification.

Property

Href

string? Href { get; init; } Source

Gets the app-relative health page route when health routes are exposed; otherwise null for status-only chrome.

Type

DocSidebarSectionViewModel

Source

View model for one public section in the sidebar.

Property

Section

DocPublicSection Section { get; init; } Source

Gets the typed section represented by the sidebar entry.

Property

Label

string Label { get; init; } Source

Gets the section label shown in the sidebar.

Property

Slug

string Slug { get; init; } Source

Gets the stable section slug.

Property

Href

string Href { get; init; } Source

Gets the section route href.

Property

IsActive

bool IsActive { get; init; } Source

Gets a value indicating whether the section owns the current page context.

Property

IsExpanded

bool IsExpanded { get; init; } Source

Gets a value indicating whether the section should render expanded by default.

Property

Groups

IReadOnlyList<DocSectionGroupViewModel> Groups { get; init; } Source

Gets the grouped links rendered when the section is expanded.

Type

DocSectionPageViewModel

Source

View model for the grouped-section fallback and unavailable section surfaces.

Property

Section

DocPublicSection? Section { get; init; } Source

Gets the typed section when the route resolved to a known built-in section.

Property

Heading

string Heading { get; init; } Source

Gets the section label or unavailable-page heading.

Property

Description

string Description { get; init; } Source

Gets the primary explanatory copy for the page.

Property

DocsHomeHref

string DocsHomeHref { get; init; } Source

Gets the docs home route.

Property

StartHereHref

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.

Property

IsUnavailable

bool IsUnavailable { get; init; } Source

Gets a value indicating whether the route resolved to an unavailable section surface.

Property

AvailabilityMessage

string? AvailabilityMessage { get; init; } Source

Gets the explanatory copy shown when the section is unavailable.

Property

IsSparse

bool IsSparse { get; init; } Source

Gets a value indicating whether the fallback section is intentionally sparse.

Property

KeyRoutes

IReadOnlyList<DocSectionLinkViewModel> KeyRoutes { get; init; } Source

Gets the key routes surfaced for a sparse section fallback.

Property

Groups

IReadOnlyList<DocSectionGroupViewModel> Groups { get; init; } Source

Gets the grouped page lists shown for the section.

Type

DocDetailsViewModel

Source

View model for a rendered documentation details page.

Property

Document

DocNode Document { get; init; } Source

Gets the underlying documentation node.

Property

Outline

IReadOnlyList<DocOutlineItem> Outline { get; init; } Source

Gets the in-page outline entries for the current document.

Property

PreviousPage

DocPageLinkViewModel? PreviousPage { get; init; } Source

Gets the previous page within the current authored sequence, when one exists.

Property

NextPage

DocPageLinkViewModel? NextPage { get; init; } Source

Gets the next page within the current authored sequence, when one exists.

Property

RelatedPages

IReadOnlyList<DocPageLinkViewModel> RelatedPages { get; init; } Source

Gets the authored related pages that resolved successfully.

Property

ContributorProvenance

DocContributorProvenanceViewModel? ContributorProvenance { get; init; } Source

Gets the contributor provenance evidence resolved for the current page.

Property

Title

string Title { get; init; } Source

Gets the resolved display title for the page.

Property

CanonicalUrl

string CanonicalUrl { get; init; } Source

Gets the app-relative canonical URL for the current details page.

Remarks

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.

Property

Summary

string? Summary { get; init; } Source

Gets the authored summary that should be rendered under the title when available.

Property

ShowSummary

bool ShowSummary { get; init; } Source

Gets a value indicating whether Summary should be rendered.

Property

IsCSharpApiDoc

bool IsCSharpApiDoc { get; init; } Source

Gets a value indicating whether the page is a C# API reference document.

Property

IsApiSurfaceDoc

bool IsApiSurfaceDoc { get; init; } Source

Gets a value indicating whether the page should use the API reference reading surface.

Remarks

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.

Property

PageTypeBadge

DocPageTypeBadgePresentation? PageTypeBadge { get; init; } Source

Gets the normalized page-type badge presentation for the current page when available.

Property

Component

string? Component { get; init; } Source

Gets the explicit component metadata shown with the page when available.

Property

Audience

string? Audience { get; init; } Source

Gets the explicit audience metadata shown with the page when available.

Property

CodeLanguage

string? CodeLanguage { get; init; } Source

Gets the normalized programming language value shown and filtered by generated API documentation surfaces.

Remarks

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.

Property

CodeLanguageLabel

string? CodeLanguageLabel { get; init; } Source

Gets the reader-facing programming language label shown for generated API documentation.

Remarks

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.

Property

Breadcrumbs

IReadOnlyList<DocBreadcrumbViewModel> Breadcrumbs { get; init; } Source

Gets the breadcrumb trail used by the page.

Property

PublicSection

DocPublicSection? PublicSection { get; init; } Source

Gets the current public section when the page belongs to a public docs section.

Property

PublicSectionLabel

string? PublicSectionLabel { get; init; } Source

Gets the current public-section label when one exists.

Property

PublicSectionHref

string? PublicSectionHref { get; init; } Source

Gets the current public-section route href when one exists.

Property

PublicSectionPurpose

string? PublicSectionPurpose { get; init; } Source

Gets the current public-section utility sentence when one exists.

Property

TrustMigrationUsesTurbo

bool TrustMigrationUsesTurbo { get; init; } Source

Gets a value indicating whether the trust-bar migration link should stay inside the docs content frame.

Remarks

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.

Property

ContributorSourceUsesTurbo

bool ContributorSourceUsesTurbo { get; init; } Source

Gets a value indicating whether the contributor source link should stay inside the docs content frame.

Remarks

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.

Property

ContributorEditUsesTurbo

bool ContributorEditUsesTurbo { get; init; } Source

Gets a value indicating whether the contributor edit link should stay inside the docs content frame.

Remarks

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.

Property

IsSectionLanding

bool IsSectionLanding { get; init; } Source

Gets a value indicating whether the current document is a section landing doc.

Property

FeaturedPageGroups

IReadOnlyList<DocLandingFeaturedPageGroupViewModel> FeaturedPageGroups { get; init; } Source

Gets the curated next-step groups shown by a section landing doc.

Property

HasFeaturedPages

bool HasFeaturedPages { get; } Source

Gets a value indicating whether any curated section-landing group has visible next-step pages.

Property

SectionGroups

IReadOnlyList<DocSectionGroupViewModel> SectionGroups { get; init; } Source

Gets the grouped In this section lists shown by a section landing doc.

Property

HasOutline

bool HasOutline { get; } Source

Gets a value indicating whether the page has an in-page outline to render.

Property

HasWayfinding

bool HasWayfinding { get; } Source

Gets a value indicating whether the page has any sequence or related-page wayfinding links to render.

Type

DocContributorProvenanceViewModel

Source

View model describing the contributor provenance evidence rendered near the top of a details page.

Property

Label

string Label { get; init; } Source

Gets the reader-facing provenance strip label.

Property

SourceHref

string? SourceHref { get; init; } Source

Gets the browser-facing source URL when one exists.

Property

EditHref

string? EditHref { get; init; } Source

Gets the browser-facing edit URL when one exists.

Property

LastUpdatedUtc

DateTimeOffset? LastUpdatedUtc { get; init; } Source

Gets the exact UTC timestamp used for contributor freshness when one exists.

Type

IDocHarvester

Source

Interface for harvesting documentation from various sources.

Method

HarvestAsync

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.

Parameters

  • rootPathThe filesystem root path to scan for documentation sources.
  • cancellationTokenAn optional token to observe for cancellation requests.

Returns

A collection of DocNode representing the harvested documentation.

Enum

DocHarvestHealthStatus

Source

Describes the overall health of the latest AppSurface Docs harvest snapshot.

Remarks

Numeric values are a stable public compatibility contract for persisted and serialized representations. Do not remove, reorder, or renumber existing members.

Enum

DocHarvesterHealthStatus

Source

Describes one active harvester's contribution to an AppSurface Docs harvest snapshot.

Remarks

Numeric values are a stable public compatibility contract for persisted and serialized representations. Do not remove, reorder, or renumber existing members.

Enum

DocHarvestDiagnosticSeverity

Source

Describes the severity of a structured AppSurface Docs harvest diagnostic.

Remarks

Numeric values are a stable public compatibility contract for persisted and serialized representations. Do not remove, reorder, or renumber existing members.

Enum

DocPublicSection

Source

Enumerates the built-in public documentation sections used by AppSurface Docs.

Remarks

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.

Type

AppSurfaceDocsSearchQualityResponse

Source

Maintainer-facing aggregate search-quality snapshot for AppSurface Docs.

Parameters

  • 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.
Type

AppSurfaceDocsSearchQualityMode

Source

Resolved AppSurface Docs metrics mode shown on the hosted diagnostics surface.

Parameters

  • 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.
Type

AppSurfaceDocsSearchQualityBucket

Source

One low-cardinality search-quality bucket.

Parameters

  • NameBucket name.
  • CountAccepted event count in the bucket.
  • SuggestedActionMaintainer action suggested by the bucket.
Type

AppSurfaceDocsHarvestFailedException

Source

Exception thrown by strict AppSurface Docs startup preflight when every active harvester fails.

Remarks

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.

Property

Summary

DocHarvestFailureSummary Summary { get; } Source

Gets the redacted strict-harvest failure summary.

Type

DocHarvestFailureSummary

Source

Redacted strict-harvest failure summary safe for public exception messages and export output.

Parameters

  • 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.
Method

FromSnapshot

DocHarvestFailureSummary FromSnapshot(DocHarvestHealthSnapshot health) Source

Creates a redacted strict-harvest failure summary from a harvest-health snapshot.

Parameters

  • healthThe harvest-health snapshot to summarize.

Returns

A redacted summary that omits repository roots, raw exception details, and diagnostic cause text.

Type

DocHarvestFailureDiagnostic

Source

Redacted strict-harvest diagnostic safe for public exception messages and export output.

Parameters

  • 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.
Method

FromDiagnostic

DocHarvestFailureDiagnostic FromDiagnostic(DocHarvestDiagnostic diagnostic) Source

Creates a redacted strict-harvest diagnostic from a harvest-health diagnostic.

Parameters

  • diagnosticThe source diagnostic to redact.

Returns

A diagnostic that omits cause text and raw exception details.