Pulp Engine Document Rendering
Get started
Release v0.48.0

Pulp Engine v0.48.0 — Release Notes

Superseded by v0.48.1. The v0.48.0 Docker images were never published to GHCR due to a build failure. See release-v0.48.1.md for the patch that fixed the build and shipped.

This release finishes the packaging and evaluator-readiness pass that started in v0.47.0. The product now presents a cleaner first-run experience, stronger container metadata, a reusable smoke-test path, and a clearer release/readiness surface for operators and evaluators.


What changed

1. Container metadata and release artifacts

All three published images now include richer OCI metadata:

  • org.opencontainers.image.vendor
  • org.opencontainers.image.created
  • org.opencontainers.image.licenses
  • org.opencontainers.image.url
  • org.opencontainers.image.documentation

The release workflow now computes a build timestamp and applies the same label set consistently to the main API image, the worker image, and the controller image.

2. Compose files now work without manual placeholder edits

The evaluator compose files no longer require replacing OWNER and vX.Y.Z before they are usable. They now default to the public GHCR images via env-var substitution:

  • PULP_ENGINE_IMAGE
  • PULP_ENGINE_CONTROLLER_IMAGE
  • PULP_ENGINE_WORKER_IMAGE

Pinned-version and local-image override examples are documented inline in the compose files.

3. Build-and-run Docker smoke coverage

CI now does more than build the Docker image. The Docker smoke job:

  • builds the main image locally
  • starts it in file mode
  • waits for health
  • runs scripts/smoke-test.sh
  • verifies the bundled editor route and an authenticated render path

This closes the gap where packaging regressions could previously survive until a tag-time release build.

4. Health endpoints expose application version

Both health endpoints now include a version field:

  • GET /health
  • GET /health/ready

The field is wired through the TypeBox schemas, Fastify/OpenAPI generation, runtime handlers, tests, and API docs. The value comes from process.env.APP_VERSION ?? package.json version, so container builds and local source runs stay aligned.

5. Documentation and release surface

  • New root CHANGELOG.md seeded with milestone releases
  • README restructured to lead with Docker Compose evaluation flows
  • Deployment guide gains a quick-reference compose matrix near the top
  • API guide health examples updated to reflect the new version field

Validation

CI-verified — all CI jobs passed on the release commit: ci (postgres), test-file-mode, test-sqlserver, test-e2e, test-e2e-auth, docker-build-smoke.

Locally verified:

  • pnpm lint — 0 errors
  • pnpm typecheck — clean
  • pnpm --filter @pulp-engine/api test -- metrics.test.ts — passed (exercised new version field in health response)
  • pnpm --filter @pulp-engine/api test -- server-editor.test.ts — passed (exercised bundled editor static route)
  • node scripts/check-version.mjs — passed

Not verified:

  • SQL Server storage path — no local instance; CI-covered by test-sqlserver job
  • E2E suites — CI-covered by test-e2e and test-e2e-auth jobs
  • Deployment rehearsal — not performed; no migration or breaking config change in this release

Upgrade

No breaking API, auth, or storage changes are introduced in this release.

GET /health and GET /health/ready now return an additional version field. Clients that ignore unknown fields are unaffected; any schema-strict consumers should update their response contracts.

# v0.48.0 images were never published — use v0.48.1 instead:
docker pull ghcr.io/troycoderboy/pulp-engine:v0.48.1
docker pull ghcr.io/troycoderboy/pulp-engine-worker:v0.48.1
docker pull ghcr.io/troycoderboy/pulp-engine-controller:v0.48.1