AppSurface Search
Guide

AppSurface package chooser

Start with the package that matches the app you are building, then add optional web modules and support surfaces only when you need them.

Source of truth

View source Edit this page

Last updated

Status

Package chooser

This page is generated from evaluated project metadata plus a curated manifest of what first-time AppSurface adopters should install directly.

Safe To Consume

Scope: Repository-wide. The chooser covers AppSurface's coordinated package family, support packages, and proof-host surfaces.

Freshness: Regenerated in CI whenever the package surface or chooser guidance changes on main.

Migration: Read the pre-1.0 upgrade policy

Record

Package READMEs remain the deep reference. This chooser is the public install map for the current repo state.

  • packages/package-index.yml
  • README.md
  • releases/README.md

Generated from packages/package-index.yml and evaluated project metadata. Do not edit this file by hand.

AppSurface is a coordinated .NET 10 package family. Start with the package that matches the app you're building, then add optional modules only when your app needs them.

All direct-install packages and tools currently target net10.0. Published library rows use dotnet package add; in .NET 10, dotnet package add and dotnet add package are equivalent. Tool rows use dotnet tool install. Public previews marked publication held are source-only and intentionally have no install command.

Web app

Install this first for a normal ASP.NET Core app with AppSurface modules when you want the base web startup pipeline and either one-canonical-document browser-local presentation preferences or host-owned request-aware selection of registered theme pairs. Choose exactly one theme-document adapter; request-aware selection requires a scoped policy over already-authorized host context. Add opt-in health/readiness probes, protected preview named deploy evidence with a bounded result envelope, conventional browser affordances, PWA install metadata, application badging, push-worker plumbing, server-known push-readiness posture evidence, or authenticated config-audit diagnostics before layering on optional UI or docs packages.

dotnet package add ForgeTrust.AppSurface.Web

What you get: Base ASP.NET Core hosting; one selected theme-document adapter (browser-local Light/Dark preference or host-owned registered-pair selection); deterministic CSP hash/nonce support for browser preferences; opt-in public /health and /ready ASP.NET Core health-check probes; pre-routing and endpoint-aware middleware composition; endpoint composition; opt-in protected single-evaluation and bounded aggregate named-canary endpoints with typed and declared bounded response evidence plus fixed completion telemetry; conventional browser error-page hooks; opt-in PWA manifest/head/diagnostic/shared-worker endpoints; default-off page and active-worker application-badging adapters; explicit offline behavior; push-event plumbing; an inert service-worker registration helper; the privacy-safe IPwaPushReadinessProvider contribution point for readiness-posture evidence; opt-in authenticated config audit diagnostics endpoint mapping; and the core AppSurface web module contract.

Not included: Tenant lookup, authentication or authorization, mapping storage, tenant-key normalization, cookies, account/device synchronization, response-cache partitioning or invalidation, consent policy, server-side preference reads, Canary triggers, retries, polling, caller workflow/CI policy, readiness effects, a health-check adapter, authorization policy definitions, or automatic classification/redaction of application-authored canary evidence; OpenAPI generation, Scalar UI, RazorWire reactive UI, Tailwind build integration, AppSurface Docs host, browser-specific install or permission UI, push subscription persistence or delivery, broad offline route/app-data caching, or automatic diagnostics exposure.

Read next: Package-first quickstart

Composed local proof: Product readiness lab shows how the web, auth, flow, DurableTask-facing, Aspire, and Postgres product-state pieces fit together without claiming production hosting or Durable Task storage ownership. Its paired AppHost verify profile starts local Postgres and fails if the Postgres product-state row does not become proven-locally.

Release and readiness:

Also building...

  • Add ForgeTrust.AppSurface.Config.LocalSecrets after Config when local development secrets need source-aware diagnostics before a remote vault exists, including trusted Linux secret-tool resolution for nonstandard installs.
  • Add ForgeTrust.AppSurface.Config.GoogleSecretManager after Config when production-like Google Cloud hosts should read mapped AppSurface config secrets from Secret Manager with fail-closed diagnostics.
  • Add ForgeTrust.AppSurface.Auth when reusable modules need host-neutral auth results or app-owned identity mapping boundaries without taking a web or persistence dependency; use the Auth adoption ladder when choosing among auth packages.
  • Add ForgeTrust.AppSurface.Auth.AspNetCore after ForgeTrust.AppSurface.Auth when ASP.NET Core host policies should flow into AppSurface auth results or Minimal API ProblemDetails responses; use the Auth adoption ladder and run the Auth Web/RazorWire proof.
  • Add ForgeTrust.AppSurface.Auth.AspNetCore.DevAuth after ForgeTrust.AppSurface.Auth.AspNetCore only for Development hosts or explicit local/proof environments that need fake local personas to prove AppSurface policy results; use the Auth adoption ladder to keep DevAuth separate from Auth.Testing.
  • Add ForgeTrust.AppSurface.Auth.AspNetCore.Oidc after ForgeTrust.AppSurface.Auth.AspNetCore when a host wants AppSurface-named cookie/OIDC schemes while preserving ASP.NET Core ownership of middleware, defaults, and provider behavior; use the Auth adoption ladder before copying OIDC proof code.
  • Add ForgeTrust.AppSurface.Auth.Aspire.Keycloak in AppHost/dev/test projects only when a real local OIDC provider proof should pair with ForgeTrust.AppSurface.Auth.AspNetCore.Oidc; use the theme lifecycle guide and Auth adoption ladder to keep it separate from DevAuth, OIDC registration, and Auth.Testing.
  • Add ForgeTrust.AppSurface.Auth.Testing to integration test projects when AppSurface Auth.AspNetCore policy results need deterministic personas and canonical assertions; use the Auth adoption ladder to keep Auth.Testing separate from local DevAuth runtime personas.
  • Add ForgeTrust.AppSurface.Intelligence when you want vendor-neutral product event contracts and optional host-owned analytics sinks.
  • Add ForgeTrust.AppSurface.Observability when an AppSurface app should send logs, traces, and metrics to Aspire or an OTLP collector.
  • Add ForgeTrust.AppSurface.Flow when you want generated-case typed process graphs, inferred port mapping, and local runner tests.
  • Add ForgeTrust.AppSurface.Flow.DurableTask after ForgeTrust.AppSurface.Flow when a typed process needs durable execution.
  • Add ForgeTrust.AppSurface.Workers when worker chains need durable claim, completion, and projection-repair contracts without taking a runtime or persistence dependency.
  • Add ForgeTrust.AppSurface.Workers.DurableTask after ForgeTrust.AppSurface.Workers and ForgeTrust.AppSurface.Flow.DurableTask when worker contracts should be driven by Durable Task orchestration decisions.
  • Add ForgeTrust.AppSurface.Durable for portable durable authoring and registration; no runtime starts until the host installs a provider explicitly.
  • Reference the Provider SPI only when implementing or hosting a durable runtime; applications normally depend on ForgeTrust.AppSurface.Durable alone, while retention implementers and operators may also need ForgeTrust.AppSurface.Durable.Provider for the application-authorized retention contracts.
  • Add the PostgreSQL provider when one database must atomically own Work, explicit one-transition Flow state, Work-first Schedule storage, versioned W3C causal evidence, and verified per-Flow retention. Start with the local PostgreSQL tutorial: generate a reviewed script and preflight with appsurface durable schema, apply only with an explicit migration-owner environment variable, then use the verified retention guidance and explicit AddWorkerHost() path when those capabilities are required.
  • Start with ForgeTrust.AppSurface.Console for CLI commands or worker-style processes that should share AppSurface module composition.
  • Add ForgeTrust.AppSurface.Dependency.Autofac when your app already uses Autofac and your modules need Autofac-specific registrations.
  • Add ForgeTrust.AppSurface.Deployment directly only when authoring a deployment provider or inspecting portable deployment intent; normal Aspire consumers receive it transitively.
  • Add ForgeTrust.AppSurface.Deployment.GcpCloudRun beside the Aspire package when an existing Cloud Run migration job should move from duplicated deployment mapping to deterministic publish artifacts and read-only parity proof.
  • Start with ForgeTrust.AppSurface.Evidence.Contracts only when building a consumer-owned EvidenceHost integration or gate; most adopters should begin with the EvidenceHost guide and public CLI.
  • Add ForgeTrust.AppSurface.Evidence.Planner after the contracts package only for a custom CI integration that needs explainable policy resolution without the AppSurface CLI.
  • Use ForgeTrust.AppSurface.Evidence.Cli only as the internal workflow behind a custom AppSurface CLI composition; normal CI users should follow the EvidenceHost guide.
  • Add ForgeTrust.AppSurface.Evidence.Aspire only to test or CI composition for explicit resource-backed evidence; keep application AppHosts and runtime projects unaware of it.
  • Start with ForgeTrust.AppSurface.Aspire for distributed app-model projects and service-default composition; add a provider package when the same AppHost topology should publish deployment artifacts through native Aspire commands.
  • Add ForgeTrust.AppSurface.Aspire.Testing to tests for profile-based AppHosts; native AppHosts should continue using Aspire's native testing API.
  • Add ForgeTrust.AppSurface.Web.Push when the shared PWA worker needs a protected standards-based subscription and delivery rail while the host retains product policy and storage; the package contributes redacted readiness evidence that appsurface pwa verify --surface push|all can validate without claiming browser or delivery success.
  • Add ForgeTrust.AppSurface.Web.Scalar after ForgeTrust.AppSurface.Web.OpenApi when you want a hosted API reference UI.
  • Add ForgeTrust.RazorWire when you want reactive Razor UI, Turbo-style streams, server-rendered islands, lifecycle-safe app-authored root or page-lifecycle behaviors, local declarative form interactions, or passive auth-result UI projection.
  • Add ForgeTrust.RazorWire.Auth.AspNetCore after ForgeTrust.RazorWire and ForgeTrust.AppSurface.Auth.AspNetCore when Razor views should project host policy results without owning auth enforcement.
  • Add ForgeTrust.AppSurface.Web.Tailwind when you want Tailwind without a separate Node.js asset pipeline.
  • Install ForgeTrust.AppSurface.Cli when you want appsurface release compose to keep concurrent changes out of a shared changelog, appsurface canary poll, appsurface docs, appsurface pwa verify install or server-known push-readiness posture evidence, explicit appsurface durable schema deployment checks, private coverage commands, explicit macOS LocalSecrets migration, or declared secret-transfer workflows without running from source. Release composition writes only an explicit --output --apply destination; repository release preparation and publication remain separate. Durable script stays offline; online operations resolve only a named environment variable and apply requires --apply. Verify tool installs with appsurface --version or dotnet tool run appsurface --version for local manifests. PWA evidence is not scoring or delivery proof.

Package matrix

Swipe to compare package details on narrow screens.

Package Use when Install Includes Does not include Start here Release
ForgeTrust.AppSurface.Core Install this directly only when you are authoring reusable AppSurface modules or host integrations instead of starting from a web, console, or Aspire package. dotnet package add ForgeTrust.AppSurface.Core Core module abstractions, dependency graph orchestration, AppSurfaceStartup, StartupContext, process utilities, and lexically contained path construction. ASP.NET Core hosting, CliFx command hosting, Aspire app-model helpers, or optional integrations. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Theming Add this directly only when authoring a package-owned theme adapter; ASP.NET Core applications normally install ForgeTrust.AppSurface.Web, which carries the neutral contract and Razor integration. dotnet package add ForgeTrust.AppSurface.Theming Immutable semantic light/dark pair contracts, the validated shared Graphite pair, strict opaque color and contrast validation, deterministic default resolution, and an opaque typed application-settings seam. Consumer component styling, a browser switcher, persisted preference, request or tenant selection, theme packs, remote loading, or Docs-specific CSS variables. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Config Add this when your AppSurface modules need strongly typed configuration primitives, source-aware audit reports, or sanitized config-diff support instead of ad hoc configuration lookups. dotnet package add ForgeTrust.AppSurface.Config AppSurfaceConfigModule, typed config objects, configuration providers, source-aware audit reports, sanitized audit diff helpers, and explicit configuration access patterns. Web hosting, UI docs, caching, LocalSecrets local machine posture, or a remote/team vault system. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Config.LocalSecrets Add this after Config when a solo or hobbyist AppSurface app needs local development secrets before adopting a remote vault. dotnet package add ForgeTrust.AppSurface.Config.LocalSecrets AppSurfaceLocalSecretsModule, OS-backed local secret store adapters, explicit macOS v1-to-v2 Keychain migration and recovery diagnostics, trusted Linux secret-tool resolution, fail-closed posture modes, Unix mode-bit-hardened file fallback for deterministic examples/tests, local secret identity normalization, metadata-only probe seam, structured source diagnostics, test seams, and the local-store contract and seams used by ForgeTrust.AppSurface.Cli. The CLI package owns the appsurface secrets workflow and guarded materialization of a pinned Google Secret Manager version into a named local test namespace. Team secret sharing, CI/container secret injection, production rotation, remote vault storage, cloud secret managers, generic vault abstractions, PATH-based executable discovery, or file-fallback parity with OS credential stores. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Config.GoogleSecretManager Add this after Config when an AppSurface app running on Google Cloud should resolve explicitly mapped configuration secrets from Google Secret Manager while keeping environment variables as the emergency override. dotnet package add ForgeTrust.AppSurface.Config.GoogleSecretManager AppSurfaceGoogleSecretManagerModule, explicit logical-key to Secret Manager mappings, optional scoped convention resolver, fail-closed terminal diagnostics for claimed keys, Google client and transfer test seams, source-aware config audit integration, UTF-8 text conversion through AppSurface Config, and CLI-assisted declared LocalSecrets or Google transfer to existing Google secrets or a named local test namespace. Secret creation, deletion, disable/destroy operations, rotation, IAM provisioning, Terraform or gcloud workflows, generic multi-cloud vault abstraction, background refresh, or runtime credential minting. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Caching Add this when your modules need lightweight in-process memoization and cache policy primitives. dotnet package add ForgeTrust.AppSurface.Caching AppSurfaceCachingModule, IMemo or Memo helpers, and cache policy primitives on top of Microsoft.Extensions.Caching.Memory. Distributed caching infrastructure, web hosting, or configuration binding. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Auth Add this when authoring AppSurface modules or host integrations that need passive cross-surface auth vocabulary or durable app-user mapping contracts without depending on ASP.NET Core. dotnet package add ForgeTrust.AppSurface.Auth AppSurfaceAuthModule, AppSurfaceAuthOptions, neutral user/session/context contracts, auth outcome and reason results, durable external-subject to app-user-id mapping contracts, passive login/logout prompts, passive audit event descriptions, and reserved metadata keys. Authentication schemes or handlers, cookies, JWT/OIDC, ASP.NET Identity, authorization policies, middleware, endpoint filters, runtime auth context accessors, user stores, provisioning implementations, database schema, challenges, forbids, redirects, audit sinks, or UI. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Auth.AspNetCore Add this in an ASP.NET Core host that already owns authentication and authorization when AppSurface modules need mapped request auth context, named host-policy results, or Minimal API endpoints with AppSurface-shaped auth failure responses. dotnet package add ForgeTrust.AppSurface.Auth.AspNetCore AppSurfaceAspNetCoreAuthModule, AddAppSurfaceAspNetCoreAuth registration, AddAppSurfacePolicy policy naming, RequireSurfacePolicy Minimal API endpoint filters with fallback-policy opt-out metadata, ASP.NET Core request auth context mapping, named host-policy evaluation, AppSurfaceAuthResult mapping, ProblemDetails auth failure responses, and safe setup diagnostics. Authentication schemes or handlers, cookies, JWT/OIDC, ASP.NET Identity, authorization policy definitions, middleware insertion, ASP.NET Core authorization middleware replacement, browser challenge or forbid execution, redirects, audit sinks, RazorWire UI, or MVC/controller auth helpers. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Auth.AspNetCore.DevAuth Add this in Development-by-default ASP.NET Core hosts or explicit local/proof environments when package consumers need selectable fake personas, a visible local control page, and AppSurface policy proof without configuring an external identity provider. dotnet package add ForgeTrust.AppSurface.Auth.AspNetCore.DevAuth AppSurface DevAuth named authentication scheme, AddAppSurfaceDevAuth registration, explicit allowed environment names, MapAppSurfaceDevAuth control endpoints, AppSurfaceDevAuthMarker embeddable state overlay, seeded personas with optional safe local LandingUrl recovery targets, protected persona cookie, loopback-only status JSON, startup safety diagnostics, and ASDEV diagnostic codes. Production authentication, OIDC, JWT validation, ASP.NET Identity, password handling, durable app-user mapping, user stores, tenant authority, audit sinks, deployment auth, automatic host HTML injection, RazorWire auth UI components, or Auth.Testing integration-test assertions. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Auth.AspNetCore.Oidc Add this in an ASP.NET Core web host that already chose an OpenID Connect provider and wants AppSurface-named cookie/OIDC schemes with safe defaults and diagnostics. dotnet package add ForgeTrust.AppSurface.Auth.AspNetCore.Oidc AddAppSurfaceOidcAuth registration, AppSurfaceOidcAuthOptions, named cookie and OpenID Connect schemes, authorization-code defaults, SaveTokens false by default, local-only passive login/logout prompt helpers, OIDC subject mapping handoff, event chaining, and stable safe diagnostic codes. User stores, ASP.NET Identity replacement, identity-provider hosting, OAuth/OIDC server behavior, provider SDKs, EF Core, persistence, middleware insertion, active redirects, challenge execution, sign-in or sign-out execution, silent default-scheme takeover, token storage by default, Aspire Keycloak, Dev Auth, or app-user provisioning. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Auth.Aspire.Keycloak Add this in an Aspire AppHost when package consumers need a real local Keycloak-backed AppSurface OIDC proof without making runtime web apps reference Keycloak or Aspire hosting packages. dotnet package add ForgeTrust.AppSurface.Auth.Aspire.Keycloak AddAppSurfaceKeycloak AppHost extension, deterministic local realm/client/user import generation, optional LoginTheme registration with immutable image identity, bounded source manifests, local read-only theme mounting/cache switches, secret-safe build-contract materialization and packaged-content verification, release-evidence tuple support with named Linux/amd64 CI proof, secret-safe OIDC configuration projection, fixed-port preflight diagnostics, multi-signal readiness probe, disposable-data default, persistent-data opt-in, and ASKEYC diagnostics. Runtime web authentication registration, identity-provider hosting in web apps, production Keycloak administration or realm mutation, image build/push, registry ownership, deployment, rollout/rollback automation, social IdP setup, confidential-client secret lifecycle, provider SDK abstractions, tenant mapping, user provisioning, durable app-user mapping, token storage, or runtime dependency on Keycloak packages. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Auth.Testing Add this in ASP.NET Core integration tests when a consumer needs deterministic AppSurface auth personas, policy outcomes, and ProblemDetails assertions without writing a one-off fake authentication handler. dotnet package add ForgeTrust.AppSurface.Auth.Testing AddAppSurfaceTestAuth registration, WebApplicationFactory WithAppSurfaceTestAuth setup, persona registry, CreateAppSurfaceClient persona clients, request-level persona selection, explicit scheme modes, production-environment guard, stable test diagnostics, and framework-neutral AppSurface auth result and ProblemDetails assertions. Production authentication, cookies, JWT/OIDC, ASP.NET Identity, identity providers, authorization policy ownership, middleware replacement, user stores, session freshness simulation, Dev Auth runtime personas, browser login flows, or policy bypasses. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Intelligence Add this when your AppSurface modules or host integrations need product-intelligence event contracts before choosing an analytics vendor. dotnet package add ForgeTrust.AppSurface.Intelligence AppSurfaceProductIntelligenceModule, IAppSurfaceProductIntelligence, AppSurfaceProductEvent, typed product-event registry, validation, sanitization, lifecycle states, selected experimental event allowlists, sensitivity classes, and host-owned sink contracts. PostHog SDKs, OpenTelemetry exporters, analytics storage, retention policy, dashboards, browser autocapture, session replay, cookies, or request-body capture. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Observability Add this when an AppSurface app should publish operational logs, traces, and metrics to Aspire or another OTLP collector. dotnet package add ForgeTrust.AppSurface.Observability AppSurfaceObservabilityModule, OpenTelemetry logging/tracing/metrics registration, endpoint-driven OTLP exporter setup, service identity resource metadata, source and meter naming constants, and safe no-endpoint diagnostics. Aspire AppHost resources, product analytics, dashboards, request-body capture, package-specific AppSurface spans, sampling policy design, or non-OTLP exporters. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Flow Add this when your app or module needs typed input/output port flow definitions, generated-case authoring, inferred graph mapping, and local runner tests before durable hosting. dotnet package add ForgeTrust.AppSurface.Flow AppSurfaceFlowModule, FlowNodeOutcome discriminated outcome records including typed Activity calls, the host-neutral one-node transition evaluator, generated Flow authoring attributes and analyzer, IFlowTransformerNode, typed port graph inference, IFlowNode, FlowDefinition, FlowGraphBuilder, flow definition registry, and the in-memory runner. Durable persistence, timers, external-event delivery, ASP.NET endpoints, UI, Semantic Kernel, or preview C# union syntax. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Flow.DurableTask Add this after Flow when the same typed definitions need Durable Task persistence, replay, timers, and authorized resume events. dotnet package add ForgeTrust.AppSurface.Flow.DurableTask AppSurfaceFlowDurableTaskModule, durable flow runner and client services, typed Activity scheduling through the shared one-node evaluator, resume-event authorization contract, timeout and late-event mapping, retry policy decisions, and context serialization validation. Durable Task worker/client hosting, storage providers, ASP.NET endpoints, authentication handlers, UI, or Semantic Kernel. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Workers Add this when an app or reusable module needs host-neutral durable worker contracts, explicit claim/completion/projection-repair outcomes, and privacy-safe repair diagnostics before choosing a runtime adapter. dotnet package add ForgeTrust.AppSurface.Workers AppSurfaceWorkersModule, durable worker projection contract, executor contract, typed envelopes, native execution identity separating activity/provider identity from retry and lease generations, outcome and retryability enums, correlation identifiers, privacy-safe diagnostics, safe metadata validation, and bounded projection repair requests. Durable Task worker/client hosting, EF Core, Postgres, storage schemas, queue or scheduler runtimes, ASP.NET endpoints, authentication handlers, UI, Semantic Kernel, or hosted background services. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Workers.DurableTask Add this after Workers and Flow.DurableTask when durable worker chains should map claim, completion, retry, wait, timeout, stale-signal, and projection-repair outcomes to Durable Task-facing decisions. dotnet package add ForgeTrust.AppSurface.Workers.DurableTask AppSurfaceWorkersDurableTaskModule, durable worker chain runner, worker decision kinds, typed Durable Task-facing decisions, wait/timeout/late-signal helpers, and executor/projection retry policy metadata. Durable Task worker/client hosting, storage providers, EF Core, Postgres, queue runners, scheduler runtimes, ASP.NET endpoints, authentication handlers, UI, Semantic Kernel, or hosted background services. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Durable Add this when an AppSurface module needs host-neutral durable Work, resumable Flow, or Schedule authoring without installing a runtime. dotnet package add ForgeTrust.AppSurface.Durable AppSurfaceDurableModule, registered and versioned payload codecs, Work and Flow client contracts, reflection-free typed registrations, command fingerprints, provider-safety declarations, and At/After/Every/Cron schedule contracts. Provider SPI, storage, migrations, hosted polling, health or drain operations, operator recovery, ASP.NET endpoints, telemetry implementation, automated retention, deterministic async/await replay, fan-out, child flows, exactly-once provider effects, or a separate workflow control plane. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Durable.Provider Implement or host a durable runtime provider against the public provider, operator, health, drain, recovery, or verified-retention SPI. dotnet package add ForgeTrust.AppSurface.Durable.Provider Runtime pump, health, drain, recovery inventory, operator mutation, claimed-work adaptation, provider command-fingerprint contracts, and the verified Flow-retention assessment, manifest, archive-package, receipt, hold, and purge contracts. PostgreSQL storage, migrations, polling implementation, scheduling execution, hosted services, endpoints, telemetry implementation, or provider conformance evidence. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Durable.PostgreSql Add this when PostgreSQL must atomically own Work acceptance, crash-resumable Flow persistence, Work-first Schedule storage, verified per-Flow retention, and an explicit opt-in AddWorkerHost() activation path. dotnet package add ForgeTrust.AppSurface.Durable.PostgreSql Explicit ordered schema management, StoreId and runtime-epoch fencing, caller-owned Work acceptance, short-transaction Work and Flow clients, Work-first Schedule client and manual processor, payload-free dispatch, Flow waits/timers/activity projection, opt-in hosted background polling with health/drain reporting, versioned W3C causal-link persistence and crash proof, leases, effect permits, cancellation, terminal facts, verified per-Flow retention with a dedicated operator role and owner-run lifecycle capabilities, and real PostgreSQL conformance proof. Automatic background activation, automatic startup DDL, endpoints, telemetry implementation, exactly-once external effects, destructive down migrations, or production support. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Console Start here for CLI apps and worker-style entry points that should run through the AppSurface startup pipeline with CliFx. dotnet package add ForgeTrust.AppSurface.Console ConsoleStartup, ConsoleApp, hosted command execution, and CliFx source-generated command discovery through AppSurface modules. ASP.NET Core hosting, OpenAPI surfaces, or Razor-based UI composition. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Dependency.Autofac Add this when you need Autofac-specific registrations or container features instead of the default .NET service collection. dotnet package add ForgeTrust.AppSurface.Dependency.Autofac AppSurfaceAutofacModule and Autofac-aware service registration hooks for AppSurface modules. The default Microsoft DI container, web hosting, or command hosting by itself. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Deployment Install this directly when authoring a deployment target or consuming portable, schema-versioned deployment intent without taking an Aspire or cloud-provider dependency. dotnet package add ForgeTrust.AppSurface.Deployment Immutable migration-job deployment intent, typed logical identifiers and bindings, capability validation, stable diagnostics, deterministic JSON serialization, artifact hashing, and provider-neutral render and verification contracts. Aspire app-model APIs, cloud SDKs, secret resolution, image builds, infrastructure apply, job execution, traffic promotion, or provider-specific foundations. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Deployment.GcpCloudRun Add this to an Aspire AppHost that should compile an explicitly annotated run-to-completion migration job into reviewable GCP Cloud Run Job artifacts and verify deployed configuration without mutating GCP. dotnet package add ForgeTrust.AppSurface.Deployment.GcpCloudRun Closed GCP binding profiles, deterministic Cloud Run v2 Job Terraform JSON, safe evidence hashes, shadow and owned parity comparison, and bounded read-only gcloud verification. Cloud account or foundation provisioning, secret values, image builds or pushes, OpenTofu apply or state ownership, migration execution, schedulers, web revisions, traffic, or rollback. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Evidence.Contracts Add this when authoring a consumer-owned CI evidence producer, policy editor, or downstream gate that needs stable plan, producer, manifest, claim, and canonical digest contracts without taking a CLI or Aspire dependency. dotnet package add ForgeTrust.AppSurface.Evidence.Contracts Versioned evidence policy and profile declarations; normalized diff paths; resource, producer, artifact, and obligation declarations; immutable plans and manifests; terminal outcomes and claim eligibility; canonical JSON; SHA-256 digests; and manifest verification. Policy matching, Git inspection, test discovery, coverage collection, numeric threshold enforcement, container provisioning, browser execution, Aspire hosting, independent attestation, hosted dashboards, or outbound telemetry. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Evidence.Planner Add this when a consumer-owned CI integration needs deterministic explicit-diff selection of a checked-in EvidencePolicy before tests, resources, or gates begin. dotnet package add ForgeTrust.AppSurface.Evidence.Planner EvidencePlanner policy validation and resolution, conservative fallback, equal-precedence ambiguity rejection, normalized path validation, unified-diff input parsing, and deterministic plan digests. Git commands, test or resource execution, policy inference, semantic classification of source lines, coverage thresholds, artifact storage, or a gate decision outside the resolved contract. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Evidence.Cli Reference this only when hosting the AppSurface Evidence command workflow in a composition root; normal consumers install ForgeTrust.AppSurface.Cli and run appsurface evidence. dotnet package add ForgeTrust.AppSurface.Evidence.Cli Marked starter generation, explicit policy and diff loading, doctor diagnostics, plan/manifest/summary artifact writing, policy-bound coverage-gate execution, canonical verification, and safe next-action diagnostics used by the public CLI command family. A dotnet tool entry point, ambient test discovery, consumer browser/E2E producers, resource provisioning, GitHub API calls, telemetry, or a normal application AppHost integration. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Evidence.Aspire Add this in a consumer test or CI composition root when resource-backed coverage, API, or browser E2E producers need explicit Aspire readiness, bounded lifecycle ownership, cleanup, and a truthful evidence manifest separate from normal application startup. dotnet package add ForgeTrust.AppSurface.Evidence.Aspire Explicit EvidenceHost bootstrap and registration, resource dependency ordering and readiness deadlines, typed producer execution deadlines, failure and cleanup handling, trusted-envelope extension point, observation-only claims, and manifest collection. Normal AppHost registration, automatic resource or producer discovery, reuse or mutation of the normal development AppHost graph, Docker sandboxing, independent provenance attestation, cloud provisioning, cross-job aggregation, hosted dashboards, or test framework/browser implementation. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Aspire Start here for .NET Aspire app-model projects that want AppSurface-style modular composition for service defaults and distributed resources. dotnet package add ForgeTrust.AppSurface.Aspire AspireApp entry points, modular distributed-resource composition, explicit migration-job deployment annotations, target assignment, and native Aspire publish and named verification pipeline integration. ASP.NET Core web hosting, Razor UI features, cloud-provider compilation, infrastructure apply, job execution, traffic promotion, or the standalone docs host. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Aspire.Testing Add this to tests for an AppSurface profile-based AppHost when the resource graph must be created deterministically without invoking the asynchronous AppHost entry point. dotnet package add ForgeTrust.AppSurface.Aspire.Testing Typed AppHost, module, and profile selection; shared runtime graph composition; an Aspire-compatible configurable builder; one-build enforcement; deterministic activation-host cleanup; and verified-shape Aspire failed-build provider cleanup with non-blocking compatibility warnings. Native AppHost replacement, CliFx option or positional-parameter binding, cross-assembly profiles, readiness policy, higher-level fixtures, or stable diagnostic codes. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Web Install this first for a normal ASP.NET Core app with AppSurface modules when you want the base web startup pipeline and either one-canonical-document browser-local presentation preferences or host-owned request-aware selection of registered theme pairs. Choose exactly one theme-document adapter; request-aware selection requires a scoped policy over already-authorized host context. Add opt-in health/readiness probes, protected preview named deploy evidence with a bounded result envelope, conventional browser affordances, PWA install metadata, application badging, push-worker plumbing, server-known push-readiness posture evidence, or authenticated config-audit diagnostics before layering on optional UI or docs packages. dotnet package add ForgeTrust.AppSurface.Web Base ASP.NET Core hosting; one selected theme-document adapter (browser-local Light/Dark preference or host-owned registered-pair selection); deterministic CSP hash/nonce support for browser preferences; opt-in public /health and /ready ASP.NET Core health-check probes; pre-routing and endpoint-aware middleware composition; endpoint composition; opt-in protected single-evaluation and bounded aggregate named-canary endpoints with typed and declared bounded response evidence plus fixed completion telemetry; conventional browser error-page hooks; opt-in PWA manifest/head/diagnostic/shared-worker endpoints; default-off page and active-worker application-badging adapters; explicit offline behavior; push-event plumbing; an inert service-worker registration helper; the privacy-safe IPwaPushReadinessProvider contribution point for readiness-posture evidence; opt-in authenticated config audit diagnostics endpoint mapping; and the core AppSurface web module contract. Tenant lookup, authentication or authorization, mapping storage, tenant-key normalization, cookies, account/device synchronization, response-cache partitioning or invalidation, consent policy, server-side preference reads, Canary triggers, retries, polling, caller workflow/CI policy, readiness effects, a health-check adapter, authorization policy definitions, or automatic classification/redaction of application-authored canary evidence; OpenAPI generation, Scalar UI, RazorWire reactive UI, Tailwind build integration, AppSurface Docs host, browser-specific install or permission UI, push subscription persistence or delivery, broad offline route/app-data caching, or automatic diagnostics exposure. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Web.Push Add this after the base Web package when an app wants standards-based Web Push with protected subscription intake, app-owned custody, and server-known readiness-posture evidence. dotnet package add ForgeTrust.AppSurface.Web.Push Exact push-service origin allowlisting, validated retained VAPID keys, cookie-antiforgery or explicit-scheme bearer endpoint mapping, gesture-safe browser subscription, one-attempt encrypted sending, safe response classification, conditional 404/410 cleanup, and a redacted active-key fingerprint plus route-mapping readiness contribution. Identity, tenants, persistence, audiences, preferences, campaigns, scheduling, fan-out, retries, hosted provider abstraction, browser or permission proof, notification or delivery proof, readiness scoring, or telemetry. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Web.OpenApi Add this after the base web package when you want generated OpenAPI endpoints for an AppSurface web app. dotnet package add ForgeTrust.AppSurface.Web.OpenApi AddOpenApi wiring, endpoint explorer setup, endpoint mapping, and default OpenAPI document transforms. A hosted API reference UI or reactive Razor components. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Web.Scalar Add this after OpenAPI when you want Scalar's interactive API reference UI served by your AppSurface web app. dotnet package add ForgeTrust.AppSurface.Web.Scalar Scalar UI endpoint mapping and the OpenAPI module dependency needed to feed it. OpenAPI authoring by itself without the base web host, or reactive Razor component streaming. Package README public preview
commercial ready
notes
ForgeTrust.RazorWire Add this when you want reactive Razor fragments, Turbo-style page updates, server-sent streams, islands, lifecycle-safe app-authored root or page-lifecycle behaviors, local declarative form interactions, or passive auth-result UI projection without moving to a separate frontend app. dotnet package add ForgeTrust.RazorWire RazorWire modules, TagHelpers, the same-origin bundled Turbo 8.0.23 runtime with custom and host-managed sourcing policies, stream helpers, result-bearing stream authorization, Razor fragment updates, hybrid island support, failed-form UX, page navigation, section copy, Behavior Kit root and lifecycle registrations for app-authored progressive enhancement, stable form interactions for conditional targets and one-dimensional model-bound collections, and passive auth projection helpers over ForgeTrust.AppSurface.Auth results. Compatibility guarantees for host-managed Turbo versions other than 8.0.23, ownership of cross-origin Turbo metadata or load order, OpenAPI generation, API reference UI, Tailwind asset compilation, ASP.NET Core policy evaluation, authentication schemes, cookies, OIDC, ASP.NET Identity, challenge or forbid execution, redirects, DevAuth persona controls, endpoint authorization, policy definitions, or a general frontend framework. Package README public preview
commercial ready
notes
ForgeTrust.RazorWire.Auth.AspNetCore Add this in an ASP.NET Core host that already owns authentication and authorization when RazorWire auth projection helpers should render AppSurface-shaped host policy results. dotnet package add ForgeTrust.RazorWire.Auth.AspNetCore AddRazorWireAspNetCoreAuth registration and an IRazorWireAuthResultProvider adapter over IAppSurfaceAspNetCorePolicyEvaluator. Authentication schemes or handlers, cookies, JWT/OIDC, ASP.NET Identity, authorization policy definitions, middleware insertion, browser challenge or forbid execution, redirects, DevAuth persona controls, endpoint authorization, or RazorWire core UI primitives by itself. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Web.Tailwind Add this when you want Tailwind build and watch integration in an AppSurface web app without carrying a Node.js asset pipeline. dotnet package add ForgeTrust.AppSurface.Web.Tailwind Tailwind standalone CLI integration, verified host-cache acquisition, watch mode, and generated CSS output for supported build hosts. JavaScript plugin ecosystems that require npm-first tooling, application runtime native payloads, or automatic companion runtime-package selection. Package README public preview
commercial ready
notes
ForgeTrust.AppSurface.Cli Install this when you want repository-level AppSurface tooling, including protected named-canary deployment proof or conflict-free release-note composition, from a global or local .NET tool command. dotnet tool install --global ForgeTrust.AppSurface.Cli --prerelease The appsurface .NET tool command, appsurface release compose preview-by-default deterministic composition of isolated Markdown release-note entries for any consumer project, appsurface canary poll bounded read-only deployment proof for protected AppSurface Web named canaries, appsurface docs AppSurface Docs workflows, appsurface pwa verify install evidence plus explicitly requested schema-v3 server-known push-readiness posture evidence for AppSurface Web apps, appsurface durable schema status\|script\|preflight\|apply explicit PostgreSQL schema operations, appsurface coverage run private test orchestration with managed JUnit diagnostics, appsurface coverage merge Cobertura fan-in, appsurface coverage gate private threshold enforcement, the appsurface secrets init, set, get, list --names-only, migrate, delete, and doctor local-secret workflow, and declared appsurface secrets transfer plan and appsurface secrets transfer apply jobs, including pinned Google-to-LocalSecrets materialization for local testing. App runtime packages, raw durable Work, Flow, Schedule, or recovery mutations, automatic startup DDL, repository-specific release preparation, changelog rollover, entry consumption, tag binding, package publication, GitHub Release orchestration, hosted coverage dashboards, coverage uploads, coverage trend storage, grouped coverage runs, TRX/TUnit result parsing, RazorWire-specific export workflows, or a replacement for project package references. AppSurface CLI README public preview
commercial ready
notes

Support and proof-host surfaces

Support and runtime packages

  • ForgeTrust.AppSurface.Evidence.Coverage: Private coverage execution implementation restored only through first-party AppSurface CLI and Evidence workflow packages; it is not a direct-install integration surface. Release: support runtime; not applicable; notes.
  • ForgeTrust.AppSurface.ReleaseContracts: Transitive release metadata contracts used by ForgeTrust.AppSurface.Docs and repository release tooling. Restore it through those packages rather than installing it directly. Release: support runtime; not applicable; notes.
  • ForgeTrust.AppSurface.Web.Tailwind.Runtime.linux-arm64: Direct/compatibility Tailwind standalone runtime for Linux Arm64 build hosts. It is no longer restored through ForgeTrust.AppSurface.Web.Tailwind. Release: support runtime; not applicable; notes.
  • ForgeTrust.AppSurface.Web.Tailwind.Runtime.linux-x64: Direct/compatibility Tailwind standalone runtime for Linux x64 build hosts. It is no longer restored through ForgeTrust.AppSurface.Web.Tailwind. Release: support runtime; not applicable; notes.
  • ForgeTrust.AppSurface.Web.Tailwind.Runtime.osx-arm64: Direct/compatibility Tailwind standalone runtime for macOS Arm64 build hosts. It is no longer restored through ForgeTrust.AppSurface.Web.Tailwind. Release: support runtime; not applicable; notes.
  • ForgeTrust.AppSurface.Web.Tailwind.Runtime.osx-x64: Direct/compatibility Tailwind standalone runtime for macOS x64 build hosts. It is no longer restored through ForgeTrust.AppSurface.Web.Tailwind. Release: support runtime; not applicable; notes.
  • ForgeTrust.AppSurface.Web.Tailwind.Runtime.win-x64: Direct/compatibility Tailwind standalone runtime for Windows x64 build hosts. It is no longer restored through ForgeTrust.AppSurface.Web.Tailwind. Release: support runtime; not applicable; notes.

Docs and proof hosts

  • ForgeTrust.AppSurface.Docs: Reusable docs package for harvesting repository docs into an AppSurface Docs UI, with source harvesting, search, release archives, diagnostics, and a shared semantic System/Light/Dark theme-pair adapter for package-owned docs chrome. This is a real package, but it is a proof-host surface rather than the default first install for general AppSurface apps. Its exact coordinated GHSA-pgww-w46g-26qg graph is AngleSharp [1.7.1], HtmlSanitizer [9.2.995], and AngleSharp.Css [1.0.1]. Stable verification requires every package dependency container to contain each identity exactly once with its exact bracketed version, and the independent locked consumer proof must resolve the freshly packed Docs artifact plus this exact graph. The Docs dependency security boundary covers rendered package-documentation fragments, not general UGC or host CSP. Release: proof host; not applicable; notes. Start here: AppSurface Docs README
  • ForgeTrust.AppSurface.Docs.Standalone: Thin export host for serving or exporting AppSurface Docs. Treat it as a proof host and example app, not a package you install into another project. Release: publication held; proof host; not applicable; notes. Start here: Standalone host README

Not in the direct-install matrix

  • ForgeTrust.AppSurface.Auth.Aspire.Keycloak.RealmReadyWorker: Private Keycloak readiness worker payload; consume it only through ForgeTrust.AppSurface.Auth.Aspire.Keycloak. Release: publication held; excluded; not applicable; notes.
  • ForgeTrust.AppSurface.Flow.Generators: Private source generator and diagnostics used by ForgeTrust.AppSurface.Flow; consume it only through the packed Flow package. Release: publication held; excluded; not applicable; notes.
  • ForgeTrust.AppSurface.Durable.PostgreSql.TestHost: Internal executable test helper; it is not a hosted runtime, production worker, or package adoption surface. Release: publication held; excluded; not applicable; notes.
  • ForgeTrust.AppSurface.Durable.PostgreSql.V2WorkHarness: Internal mixed-version compatibility harness; it is not a package, hosted runtime, or adoption surface. Release: publication held; excluded; not applicable; notes.
  • ForgeTrust.AppSurface.Web.Tailwind.Tasks: Private compiled MSBuild task used by ForgeTrust.AppSurface.Web.Tailwind; consume it only through the packed Tailwind package. Release: publication held; excluded; not applicable; notes.
  • ForgeTrust.AppSurface.Web.Tailwind.CacheTestHost: Non-packable child-process fixture that proves Tailwind cache locking, atomic publication, and recovery after owner death. Release: publication held; excluded; not applicable; notes.
  • ForgeTrust.AppSurface.Docs.ConsumerFixture: Non-packable ASP.NET Core consumer fixture used by AppSurface Docs HTTP and Playwright regression tests. Release: publication held; excluded; not applicable; notes.
  • ForgeTrust.RazorWire.Cli: Held out of the direct-install chooser with publish_decision: do_not_publish until issue #171 lands real .NET tool packaging and stable install guidance. Its proof-only tool package bundles its coordinated dependency graph for artifact verification, but that proof is not authorization to publish it; see the CLI boundary. Release: publication held; excluded; not applicable; notes.

Maintainer notes

  • Edit packages/package-index.yml when the public package story changes.
  • Follow the PackageIndex release-guidance maintainer guide when changing generated package README release policy, variants, or markers.
  • Review package readiness evidence when deciding whether the package manifest, release metadata, blockers, and dependency evidence are ready for release review.
  • Package readiness evidence is package-index review evidence. Per-version release consistency lives in releases/v{version}.evidence.json and is validated by the release cockpit.
  • Follow the coordinated release-links guide: use release_track: coordinated for the frozen tree-local current pointer, or release_track: explicit with release_notes_path for a package-specific historical story.
  • Keep publish_decision and expected_dependency_package_ids in packages/package-index.yml aligned with the package artifact workflow so the chooser and release contract share one package source of truth.
  • Keep tool_command_name aligned with each published .NET tool project's ToolCommandName so package validation, pre-publish coverage proof, and post-publish smoke tests run the command users will type. Tool smoke tests install the package, run --help, then require --version to match the package SemVer exactly, including stable or prerelease labels and excluding any leading v or build metadata. The command name value must be one file-name-safe command token, not a path: no whitespace, path separators, reserved ./.. segments, trailing periods, Windows reserved device names or dotted aliases, control characters, or Windows-invalid file-name characters.
  • Run dotnet run --project tools/ForgeTrust.AppSurface.PackageIndex/ForgeTrust.AppSurface.PackageIndex.csproj -- generate after changing package classifications, package READMEs, product families, release-guidance variants, readiness blockers, or readiness notes; it reports changed and managed README-region counts.
  • Run dotnet run --project tools/ForgeTrust.AppSurface.PackageIndex/ForgeTrust.AppSurface.PackageIndex.csproj -- verify before review to confirm package-index outputs and managed README guidance are current without writing files.
  • Run dotnet run --project tools/ForgeTrust.AppSurface.PackageIndex/ForgeTrust.AppSurface.PackageIndex.csproj -- verify-packages --package-version 0.0.0-ci.local before publishing changes that affect package metadata, project references, Tailwind runtime payloads, the packaged release-note or coverage CLI, or the Docs parser and sanitizer graph. This pre-publish workflow installs the packed ForgeTrust.AppSurface.Cli tool from local artifacts, previews and writes a consumer release compose note, runs the packaged coverage semantic proof plus coverage merge, a passing coverage gate, and an intentionally failing coverage gate, then writes the private coverage-cli-consumer-proof.md and public-safe coverage-cli-consumer-proof.evidence.json. It also restores the freshly packed ForgeTrust.AppSurface.Docs artifact in an independent locked consumer and writes docs-package-consumer-proof.md; either failed proof blocks the publish manifest.
  • Run dotnet run --project tools/ForgeTrust.AppSurface.PackageIndex/ForgeTrust.AppSurface.PackageIndex.csproj -- gate before publishing rebrand or release metadata changes.
  • Keep packages/README.md.yml hand-authored so AppSurface Docs metadata, trust-bar copy, and section placement stay intentional.

Issue #674 packaged coverage proof

Keep the local and packaged coverage questions separate. For repository readiness, use coverage run --dry-runcoverage runcoverage gate: this proves selected VSTest projects produce normal AppSurface artifacts and satisfy the repository thresholds. For a packed CLI candidate, use PackageIndex verify-packages: its default collector proof selects exactly one manifest-bound Smoke.Tests report, validates owned Smoke.Calculator class, line, and branch facts in raw Cobertura, copies and hashes that shard, merges it, and independently validates retention in merged Cobertura. This is an owned fixture proof, not certification of arbitrary consumer application graphs.

The assurance boundary is explicit: --coverage-driver msbuild is VSTest artifact compatibility only; coverage merge is external-shard fan-in only; and --no-clean is an intentional retention escape hatch whose preserved reports or patch-target files may be stale. Native Microsoft Testing Platform (MTP) is a separate runner/integration boundary. Do not switch drivers to satisfy the proof when MTP is selected or runner/package facts conflict; classify the boundary and use a separate MTP path or issue.

The CLI emits schema-versioned coverage-project.json beside each per-project report with schemaVersion, normalized solution-relative projectPath, and CLI-owned slug. PackageIndex accepts only regular manifests up to 16 KiB and the bounded Coverlet/ReportGenerator Cobertura subset required by the fixture (coverage, sources, source, packages, package, classes, class, methods, method, lines, line, conditions, and condition), with DTD/entity rejection, a 1 MiB document limit, depth 32, and 10,000 elements. The proof requires one Smoke package, one Smoke.Calculator class, a normalized Smoke/Calculator.cs filename, positive line hits, and the Sign line-7 two-branch invariant in both raw and merged reports.

Publish coverage-cli-consumer-proof.evidence.json beside the existing private Markdown report. Evidence schema 1 is public-safe and allowlists the verdict, package identity and optional digest, configured driver boundary, raw and merged outcomes with optional artifact-relative paths and invariant IDs, the optional raw SHA-256, plus bounded failures with code, scope, cause, next action, and evidence-relative path. Every unavailable optional field is omitted rather than emitted as null. The raw and merged outcomes, not the configured driver boundary, state whether a semantic stage actually ran. It excludes command arguments and full invocation traces, working directories, NuGet sources/configuration, absolute paths, raw XML, credentials, and arbitrary output. Readers reject unknown required structure and unsupported major versions.

When upgrading Coverlet, ReportGenerator, or the runner, capture one isolated generated-fixture raw/merged pair, confirm the bounded subset and semantic invariants, run the focused PackageIndex fixture suite and verify-packages, then update the versioned schema/subset documentation and consumers together. An unsupported shape is a tool-compatibility result; a valid shape with missing or zero expected semantics is a coverage defect. See the CLI coverage proof-level and manifest contract.

Issue #682 package proof

Use this sequence for the coordinated #682 parser and sanitizer graph. Run it sequentially: later inspection and install steps consume artifacts produced by earlier steps.

First prove the required asset tools are callable, then create work and artifact directories outside the checkout:

set -euo pipefail

node --version
pnpm --version

APPSURFACE_REPO_ROOT="$(git rev-parse --show-toplevel)"
APPSURFACE_682_WORK="$(mktemp -d "/tmp/appsurface-682-work.XXXXXX")"
APPSURFACE_682_ARTIFACTS="$(mktemp -d "/tmp/appsurface-682-artifacts.XXXXXX")"
APPSURFACE_682_VERSION="0.2.0-preview.682"

Keep both temporary roots external. The repository build intentionally reads its centrally managed versions through --repo-root, but temporary consumer projects, tool manifests, and installs must not inherit the checkout's Directory.Packages.props; otherwise the proof can fail with unrelated central-package-management errors or accidentally reuse source policy instead of the packed contract. Preserve both paths when a step fails so the report and packages remain inspectable.

Run the authoritative package workflow first:

dotnet run --project "$APPSURFACE_REPO_ROOT/tools/ForgeTrust.AppSurface.PackageIndex/ForgeTrust.AppSurface.PackageIndex.csproj" -- \
  verify-packages \
  --repo-root "$APPSURFACE_REPO_ROOT" \
  --package-version "$APPSURFACE_682_VERSION" \
  --artifacts-output "$APPSURFACE_682_ARTIFACTS" \
  --artifact-manifest "$APPSURFACE_682_ARTIFACTS/package-artifact-manifest.json" \
  --report "$APPSURFACE_682_ARTIFACTS/package-validation-report.md" \
  --coverage-proof-work-dir "$APPSURFACE_682_WORK/coverage-cli-consumer-proof" \
  --coverage-proof-report "$APPSURFACE_682_ARTIFACTS/coverage-cli-consumer-proof.md" \
  --docs-proof-work-dir "$APPSURFACE_682_WORK/docs-package-consumer-proof" \
  --docs-proof-report "$APPSURFACE_682_ARTIFACTS/docs-package-consumer-proof.md"
unzip -p "$APPSURFACE_682_ARTIFACTS/ForgeTrust.AppSurface.Docs.$APPSURFACE_682_VERSION.nupkg" '*.nuspec'

The preview run proves the locked consumer restore and its exact resolved graph, but it deliberately does not evaluate the stable-only ASPKG139 dependency-container contract.

Before preparing the stable tag, repeat the proof with an unpublished stable candidate version so ASPKG139 is exercised:

APPSURFACE_682_STABLE_WORK="$(mktemp -d "/tmp/appsurface-682-stable-work.XXXXXX")"
APPSURFACE_682_STABLE_ARTIFACTS="$(mktemp -d "/tmp/appsurface-682-stable-artifacts.XXXXXX")"
APPSURFACE_682_STABLE_VERSION="0.2.0"
dotnet run --project "$APPSURFACE_REPO_ROOT/tools/ForgeTrust.AppSurface.PackageIndex/ForgeTrust.AppSurface.PackageIndex.csproj" -- \
  verify-packages \
  --repo-root "$APPSURFACE_REPO_ROOT" \
  --package-version "$APPSURFACE_682_STABLE_VERSION" \
  --artifacts-output "$APPSURFACE_682_STABLE_ARTIFACTS" \
  --artifact-manifest "$APPSURFACE_682_STABLE_ARTIFACTS/package-artifact-manifest.json" \
  --report "$APPSURFACE_682_STABLE_ARTIFACTS/package-validation-report.md" \
  --coverage-proof-work-dir "$APPSURFACE_682_STABLE_WORK/coverage-cli-consumer-proof" \
  --coverage-proof-report "$APPSURFACE_682_STABLE_ARTIFACTS/coverage-cli-consumer-proof.md" \
  --docs-proof-work-dir "$APPSURFACE_682_STABLE_WORK/docs-package-consumer-proof" \
  --docs-proof-report "$APPSURFACE_682_STABLE_ARTIFACTS/docs-package-consumer-proof.md"
unzip -p "$APPSURFACE_682_STABLE_ARTIFACTS/ForgeTrust.AppSurface.Docs.$APPSURFACE_682_STABLE_VERSION.nupkg" '*.nuspec'

Inspect both Docs .nuspec files next. Every Docs dependency container must contain exact equality entries for AngleSharp [1.7.1], HtmlSanitizer [9.2.995], AngleSharp.Css [1.0.1]. The preview artifact confirms the locked consumer restore; the stable candidate also evaluates ASPKG139, which rejects a missing entry, duplicate, range, or different resolved graph. Both verify-packages runs independently restore the selected packed Docs artifact into a fresh locked consumer and record its project.assets.json, lock file, mapped NuGet.config, and exact resolved graph in docs-package-consumer-proof.md. Neither local proof publishes a package. Do not use VersionOverride or a widened range to make an incompatible graph restore.

Finally prove the excluded RazorWire tool explicitly; verify-packages does not select do_not_publish entries:

mkdir -p "$APPSURFACE_682_ARTIFACTS/razorwire" "$APPSURFACE_682_WORK/razorwire-tool" "$APPSURFACE_682_WORK/razorwire-export"
dotnet pack "$APPSURFACE_REPO_ROOT/Web/ForgeTrust.RazorWire.Cli/ForgeTrust.RazorWire.Cli.csproj" \
  --configuration Release --no-restore \
  --output "$APPSURFACE_682_ARTIFACTS/razorwire" \
  /p:EnableRazorWireCliToolPackaging=true \
  /p:PackageVersion="$APPSURFACE_682_VERSION"
unzip -p "$APPSURFACE_682_ARTIFACTS/razorwire/ForgeTrust.RazorWire.Cli.$APPSURFACE_682_VERSION.nupkg" '*.nuspec'
dotnet tool install ForgeTrust.RazorWire.Cli \
  --tool-path "$APPSURFACE_682_WORK/razorwire-tool" \
  --source "$APPSURFACE_682_ARTIFACTS/razorwire" \
  --version "$APPSURFACE_682_VERSION"
"$APPSURFACE_682_WORK/razorwire-tool/razorwire" --help
"$APPSURFACE_682_WORK/razorwire-tool/razorwire" export --help
"$APPSURFACE_682_WORK/razorwire-tool/razorwire" export \
  --project "$APPSURFACE_REPO_ROOT/examples/razorwire-mvc/RazorWireWebExample.csproj" \
  --mode hybrid \
  --output "$APPSURFACE_682_WORK/razorwire-export"
test -f "$APPSURFACE_682_WORK/razorwire-export/index.html"

The tool package must have one DotnetTool package type, command razorwire, and no NuGet dependency group or <dependency> entries: its proof-only package bundles the closure under tools/**. Installation, both help surfaces, and the sample hybrid export must succeed. These checks do not change its excluded classification or publish_decision: do_not_publish, and the artifact must not be pushed.

Redistributed payloads

Use packages/third-party-payloads.yml when a package carries copied third-party payloads, native runtime binaries, minified browser runtimes, bundled tool payloads, or generated-first-party assets that need provenance evidence. Do not add normal NuGet dependencies to this inventory unless their files are copied into the package payload.

When adding a redistributed payload:

  1. Add or update the package-local THIRD-PARTY-NOTICES.md file and pack it at package root with <None Include="$(MSBuildProjectDirectory)\THIRD-PARTY-NOTICES.md" Pack="true" PackagePath="" />. The notice must ship the applicable license/NOTICE text itself, or it must name upstream LICENSE/NOTICE files that are packed beside the redistributed payload; component metadata and marker strings alone are not sufficient redistributed-payload evidence.
  2. Add a notices record in packages/third-party-payloads.yml with package_id, component, version, license, source_url, payload_patterns, notice_paths, and markers.
  3. Add version_source_path and version_source_contains when the repo has a deterministic source of truth such as Directory.Packages.props, Web/package.json, or Tailwind.Common.props.
  4. Use an audits record only for narrow generated-first-party evidence or provenance-backed dependency closures that are not notice records. Include applies_to, matched_rule, evidence_kind, source_paths, reviewed_on, source, and revalidate_when; add generated_paths whenever evidence_kind is generated_first_party so the waiver self-invalidates when source or generated outputs move. Audit applies_to patterns must not overlap notice-covered payload entries; the gate fails broad audits that could mask notice-required payloads.
  5. Run dotnet run --project tools/ForgeTrust.AppSurface.PackageIndex/ForgeTrust.AppSurface.PackageIndex.csproj -- verify-packages --package-version 0.0.0-ci.local and fix any ASPKG### diagnostics. Payload diagnostics use Problem/Cause/Fix/Docs wording and link back to this section, and the package report shows covered/total suspicious payload counts beside the detailed payload evidence rows.

Examples already covered by the inventory: ForgeTrust.AppSurface.Cli bundles ReportGenerator under tools/**/reportgenerator/** and audits its SDK-produced .NET tool dependency closure; Tailwind runtime packages carry native Tailwind binaries under runtimes/*/native/**; ForgeTrust.AppSurface.Web.Tailwind notices its build-task CliWrap payload; ForgeTrust.AppSurface.Docs embeds the generated MiniSearch runtime and carries THIRD-PARTY-NOTICES.md; ForgeTrust.RazorWire notices its copied Turbo runtime and separately uses generated_first_party audit evidence for browser assets generated from first-party TypeScript.