Release 0.1.0-rc.4
Coordinated AppSurface release 0.1.0-rc.4, tagged on 2026-06-16.
Source of truth
This is the release note for AppSurface 0.1.0-rc.4 after 0.1.0-rc.3. This page is finalized on 2026-06-16.
What changed since RC 3
- AppSurface CI can now prove the default full-solution coverage lane through the
appsurface coverage runcommand, running from source viadotnet run --project, without waiting on matrix fan-in workflows. - Patch coverage gates can now use Git refs, unified diff files, or piped unified diff text without forcing full-history checkout.
- Reader-intent relevance for AppSurface Docs search.
- OS-backed local secrets for solo development before remote vault adoption.
- Product-readiness evaluation now has a report-first lab and an Aspire AppHost verifier that proves local Postgres product-state persistence without claiming Durable Task backend ownership.
- More trustworthy AppSurface Docs search typing for multi-word queries.
- CodeQL JavaScript/TypeScript analysis now ignores the intentionally malformed parser-decision fixture while the docs tests still exercise the same parse-failure bytes.
Included in RC 4
Release and docs surface
- AppSurface CI coverage now dogfoods the
appsurface coverage runcommand, running from source viadotnet run --project, for the default full-solution lane. The lane preserves the existing merged Cobertura, managed JUnit, slow-test diagnostics, Codecov, andcoverage gateevidence paths whilescripts/coverage-solution.shkeeps legacy compatibility for grouped runs, group listing, merge-only runs,TEST_GROUP, andBUILD_SOLUTION=false. - Patch coverage gates now accept exactly one diff source:
--diff-basefor local Git history,--diff-filefor CI-produced unified diff artifacts, or--diff-stdinfor piped unified diff text. External diff artifacts are bounded, empty external diffs are treated as valid empty patches, malformed non-empty external diffs fail closed before coverage evaluation, and JSON plus Markdown reports record patch diff provenance. appsurface coverage runnow supports--test-results junitfor AppSurface-managed top-level JUnit artifacts.--slow-test-diagnosticsimplies managed JUnit results and writes diagnostics from those files;junitis the only managed result format in this release, with TRX/TUnit compatibility reserved for #491.- Package artifact validation now runs a pre-publish consumer proof for the packed
ForgeTrust.AppSurface.Clitool. The proof installs the local artifact into an isolated clean fixture, runscoverage run,coverage merge, a passingcoverage gate, and an intentionally failingcoverage gate, then writescoverage-cli-consumer-proof.mdso publish manifests are blocked when packaged consumer behavior breaks. - Coverage runs now emit
slow-test-diagnostics.mdandslow-test-diagnostics.jsonnext to the merged coverage artifacts. The diagnostics rank project and JUnit test-case timings, preserve best-effort parser warnings without changing coverage exit codes, record metadata completeness, and report diagnostic aggregation overhead in seconds and as a percent of elapsed runner time at diagnostics generation. - AppSurface Docs search now hydrates MiniSearch candidates from the normalized docs payload and applies deterministic reader-intent ranking before both sidebar and full-page rendering. Exact title, path, source, alias, keyword, and entry-point matches stay protected; broad task queries prefer reader-facing guides; explicit API/internal filters override broad-task boosts; and contributor/internal docs are demoted unless the query asks for them directly.
- Added
ForgeTrust.AppSurface.Config.LocalSecretsfor local secret source posture, not production vaulting. The package registersAppSurfaceLocalSecretsModule, named posture modes, structured local secret result states, OS-backed/local fake store seams, fail-closed provider-chain behavior where onlyMissingfalls through, and paste-safe diagnostics. The CLI now includesappsurface secrets init|set|get|list|delete|doctor, and the docs cover local setup, migration fromdotnet user-secretsand.env, CI/container alternatives, and the future remote-vault ladder. - The package chooser now resolves the public Intelligence package start-here link inside hosted AppSurface Docs by keeping top-level Intelligence READMEs inside the standalone harvest boundary.
examples/product-readiness-labnow gives adopters a SaaS-shaped local evaluator whose readiness report is the primary artifact. The pairedexamples/product-readiness-lab-apphostverifier starts local Postgres, probes the public readiness endpoint, and fails unless product/domain state becomesproven-locally; Durable Task worker/client startup, hosting, timers, late-event handling, and storage-provider boundaries stay documented as host-owned.- AppSurface Docs search now preserves multi-word spacing while readers type, so pausing after a separator in either the full-page search workspace or sidebar search no longer joins words together.
- RazorWire now includes a hybrid-hosting guide for split-origin deployments that serve exported static pages from one origin while Cloud Run or another container host serves RazorWire streams, islands, and lazy anti-forgery forms from a live origin.
- Package validation now treats redistributed package payload provenance as an enforced release gate.
verify-packagesreadspackages/third-party-payloads.yml, proves notice, generated-first-party, or audited coverage for suspicious payloads, and renders package report rows with notice paths, evidence kind, version source, and suspicious payload counts. - AppSurface.Intelligence now acts as a reusable product-intelligence contract layer for host and package events. Hosts can register contract packs with
RegisterEventContracts(...), compose them with the built-in AppSurface catalog throughIAppSurfaceProductEventRegistry, validate token, bounded-text, boolean, integer, and allowed-value property shapes, require per-event allowlisting for experimental custom events, and opt into safe development exceptions without bypassing forbidden property names or unsafe value-shape filtering. - AppSurface Docs parser-decision fixtures now keep the deliberate malformed JavaScript sample under a non-JavaScript suffix so repository-level JavaScript/TypeScript scanners do not treat the negative parser test as product source.
- RC 4 now includes the final pre-tag dependency refresh set: Aspire's transitive MessagePack graph is pinned to 2.5.301 with affected lock files refreshed, Web's esbuild development dependency is updated to 0.28.1, and the GitHub Actions workflow dependency group is refreshed before release evidence capture.
Migration watch
- Record breaking or behavior-changing guidance here before it moves into the tagged release note.