Skip to content

Publishing Rubric

Use this rubric before publishing any Prompty runtime package or the VS Code extension. It is intentionally ordered so generated artifacts, runtime packages, and the extension stay aligned.

Confirm which artifacts need a new build:

ArtifactRelease script or package command
Python packagecd runtime/python/prompty && uv run python scripts/release.py --dry-run
TypeScript packagescd runtime/typescript && npm run release -- --dry-run
C# packagescd runtime/csharp && uv run python scripts/release.py --dry-run
Rust cratescd runtime/rust && uv run python scripts/release.py --dry-run
VS Code extensioncd vscode/prompty && npm run package-pre or npm run package

If schema, bindings, tool dispatch, or shared model types changed, expect to release every runtime that consumes generated model code.

Generated model code and reference docs must come from the schema emitter.

Terminal window
cd schema
npm install
npm run build

After regeneration:

  1. Review generated diffs for expected TypeSpec/emitter changes only.
  2. Confirm stale generated files were removed by emitters, not by hand.
  3. Confirm generated docs and runtime model files agree on renamed/removed fields.

Run the runtime checks before building packages.

RuntimeValidation
Pythoncd runtime/python/prompty && uv run ruff check . && uv run ruff format --check . && uv run pytest tests/ -q
TypeScriptcd runtime/typescript && npm install && npm run build && npm run test
C#cd runtime/csharp && dotnet build && dotnet test
Rustcd runtime/rust && cargo build && cargo test -- --test-threads=1
Docscd web && npm install && npm run build

For live provider or end-to-end validation, use the documented integration test commands and ensure API keys are loaded from local environment files, not checked into the repository.

Bindings are easy to loosen accidentally because they cross schema, provider wire conversion, and runtime tool dispatch.

Before publishing, verify:

  1. Bound parameters are removed from tool schemas sent to models.
  2. Bound values are injected from parent prompt inputs at tool execution time.
  3. Per-call tools override global name registrations.
  4. Global name registrations override kind handlers.
  5. Kind handlers handle declared tool kinds and wildcard custom kinds as expected.
  6. Agent turn limits, cancellation, compaction, and error-shaped tool results still behave consistently.

Prefer targeted tests for the changed runtimes plus at least one end-to-end tool calling prompt through the provider package being published.

Create local artifacts before tagging a release.

ArtifactLocal build command
Pythoncd runtime/python/prompty && uv build
TypeScriptcd runtime/typescript && npm run build
C#cd runtime/csharp && dotnet pack --configuration Release
Rustcd runtime/rust && cargo package --allow-dirty --no-verify for final local inspection, then rerun without --allow-dirty before release
VS Codecd vscode/prompty && npm run package-pre for prerelease or npm run package for stable

Do not publish from a dirty tree unless the command is explicitly a local inspection command and the dirty state is understood.

When TypeScript packages are rebuilt or republished, update the VS Code extension to consume the new @prompty/* versions.

  1. Update vscode/prompty/package.json dependencies for @prompty/core, @prompty/openai, @prompty/foundry, and @prompty/anthropic.
  2. Update vscode/prompty/packages/server/package.json if the language server depends on the core package.
  3. Run cd vscode/prompty && npm install.
  4. Run npm run build, then npm run package-pre or npm run package.
  5. Smoke test the packaged .vsix with a prompt that exercises preview, run, connections, traces, and tool calling if those surfaces changed.

Publish lower-level packages before packages that consume them.

  1. Schema/runtime changes merged to main.
  2. TypeScript packages, if the VS Code extension depends on new @prompty/* builds.
  3. Python, C#, and Rust runtime packages as applicable.
  4. VS Code extension after its dependency versions point at published packages.
  5. Documentation site after package/version references are final.

The runtime release scripts create version commits and tags that trigger CI publishing:

Terminal window
cd runtime/typescript
npm run release -- --version <version>
cd ../python/prompty
uv run python scripts/release.py --version <version>
cd ../../csharp
uv run python scripts/release.py --version <version>
cd ../rust
uv run python scripts/release.py --version <version>

Use prerelease versions/tags until the full stack has been validated together.

After CI publishes:

  1. Confirm package pages show the expected versions on npm, PyPI, NuGet, crates.io, and the VS Code Marketplace.
  2. Install each package into a clean sample project.
  3. Run a minimal .prompty prompt with each provider/runtime being released.
  4. Verify docs links, badges, install commands, and package versions.
  5. Open an issue or follow-up PR for any runtime that intentionally lags a feature.