Documentation system and release workflow#
Pulse documentation and the public product site have three synchronized delivery forms:
- repository Markdown for review and source-bound examples;
- installed Markdown, references, schemas, examples, and completions in the CLI package;
- a generated public homepage plus a searchable, versioned static-site artifact under
.pulse-docs-site/, with committed immutable exact-version archives for prior releases.
Canonical owners#
release/pulse-release-manifest.jsonowns the release version, hosted documentation route, runtime targets, package set, support tiers, and supported entry points.release/documentation-site.jsonowns editable homepage copy, named document destinations, public navigation grouping and order, and homepage composition.release/maintenance-policy.jsonowns change classes, protected boundaries, validation selection, CODEOWNERS/label generation, and the resident-maintainer authority model.wasm/packages/cli/src/command-spec.jsowns public commands and options; it generates help, the CLI reference, and shell completions.wasm/packages/cli/src/project-config-schema.jsowns core config fields, defaults, and runtime constraints.packages/provider-fastly/src/config-schema.jsonowns Fastly provider defaults.- the diagnostic and environment catalogs own their generated references.
release/documentation-versions.jsonowns the version selector and latest alias.scripts/documentation-site/owns shared presentation tokens, the vendored Starry Night dark theme, components, browser behavior, the favicon, and the deterministic decorative Pulse field.
Do not hand-edit generated copies under wasm/packages/cli/docs, wasm/packages/cli/completions, or .pulse-docs-site. Edit the editorial manifest, canonical catalogs, Markdown, or shared site assets instead. The site directory is an ignored build artifact, not a source tree. Prior exact releases are the exception: release/documentation-site-archives/v<version>/ contains a byte-preserved site subtree created while that release is still current.
Update loop#
npm run maintainer:sync
pnpm docs:sync
pnpm docs:check
pnpm docs:site:check
node scripts/documentation-release.cjs
maintainer:sync refreshes generated governance outputs. docs:sync refreshes references, package metadata, shell completions, installed documentation, ownership metadata, and source-bound examples. docs:check fails when any checked-in generated surface is stale. docs:site:check builds and validates the hosted artifact in a temporary directory; docs:site writes .pulse-docs-site/ for inspection or deployment.
For local presentation work, pnpm docs:preview performs the synchronization and build, mounts the artifact at /, and serves it at http://127.0.0.1:4173/. The preview adapter does not rewrite production HTTPS origins or release manifests. pnpm docs:preview -- --smoke exercises the local HTTP surface and exits, while --watch rebuilds when documentation or presentation sources change. Preview roots are symlink-checked and carry a generator ownership marker; populated unowned directories are rejected, and --no-build can only reuse a complete owned artifact.
Publishing the site#
The Pages workflow builds .pulse-docs-site/ for pull requests and main-branch changes, but those events are validation-only. The base route is a generated product homepage; latest remains a documentation redirect tree. Publication requires an explicit manual dispatch or a v<version> tag that exactly matches release/pulse-release-manifest.json. The canonical documentation release lives under /v<version>/; /latest/ contains redirects to the version marked latest. The homepage uses the current release’s exact-version CSS and JavaScript so its shipped presentation is archived with that release. Every exact subtree owns its HTML, assets, search index, release manifest, and version-site manifest.
Before changing the release version, run pnpm docs:site -- --snapshot while the old release is still current and commit the resulting release/documentation-site-archives/v<version>/ directory. Add the new version entry only after the archive exists. The builder imports and validates every non-current archive; missing or mismatched history is a release error rather than a Pages deployment that drops old URLs.
Ownership and review dates#
Contributor and handwritten maintainer pages carry a generated pulse-doc-meta block. The release gate requires a known owner, status, last-reviewed date, and non-expired review-by date. Update the ownership catalog and review the page content together; do not merely extend a date without verifying the document.
The detailed editing contract, navigation rules, hero motion requirements, and presentation-specific gates are documented in Public site and documentation presentation.