Pulp Engine Document Rendering
Get started
Release v0.43.0

Pulp Engine v0.43.0 — Release Notes

This release adds bounded capability freshness to the preview panel. Long-lived editor sessions can now automatically re-check preview availability when the user returns to the tab after 5 minutes, reducing the need for manual Retry. This is not background polling: the re-check fires only on tab return, only when the last settled check is older than 5 minutes, and only for states where automatic recovery is credible. No server or API contract changes.


What changed

1. Preview capability freshness

PreviewPanel previously ran the capability check once on mount and never refreshed it. In long-lived sessions (editor left open for hours) this meant a recovered service would still show a stale failure pane.

New behaviour:

A visibilitychange listener fires when the document becomes visible. If:

  1. the panel is mounted,
  2. no capability check is already in flight, and
  3. the last settled check is ≥ 5 minutes old (CAPABILITY_TTL_MS = 5 * 60 * 1000),

…and the current capability state is one where automatic freshness recovery makes sense, the panel increments capabilityCheckKey, reusing the existing retry path.

States that trigger an auto re-check:

StateAuto re-check
available: trueYes — detects if the service has since gone down
service_unreachableYes — network may have recovered
status_errorYes — transient HTTP error may have resolved
malformed_responseYes — API version mismatch may have been fixed

States intentionally excluded:

StateAuto re-checkReason
routes_disabledNoOperator-level: requires server-side config change
browser_unavailableNoOperator-level: requires deployment fix
fetch_failedNoLegacy 404 fallback; older backends remain compatible as-is

Implementation details:

  • CAPABILITY_TTL_MS — module-scope constant, 5 minutes
  • capabilityCheckedAtuseRef<number> updated when each check settles
  • isCheckingCapabilityRefuseRef<boolean> mirrors state flag; prevents double-trigger without re-subscribing the effect
  • No new API calls, no new endpoints, no new env vars

2. Tests

7 new tests in PreviewPanel.test.tsx (group 41–47):

  • (41) No auto-recheck before TTL expires
  • (42) Auto-recheck when TTL has expired (available: true)
  • (43) Auto-recheck when TTL has expired (service_unreachable)
  • (44) Auto-recheck when TTL has expired (status_error)
  • (45) Auto-recheck when TTL has expired (malformed_response)
  • (46) No auto-recheck for routes_disabled
  • (47) No auto-recheck for browser_unavailable

3. docs/editor-guide.md

Freshness note added below the preview panel states table explaining the 5-minute TTL, which states are covered, and which are intentionally excluded.


Validation

  • pnpm typecheck — clean
  • pnpm lint — 0 errors
  • pnpm --filter @pulp-engine/editor test — 536 passed, 0 failed
  • pnpm --filter @pulp-engine/api test — passed, 0 failed
  • pnpm build — all packages successful

Upgrade

No breaking changes. Pure editor/client-side release.

Backward compatibility: Legacy fetch_failed (HTTP 404 on /render/preview/status) is intentionally excluded from the auto-recheck logic. Older backends without the status endpoint continue to show the idle UI and remain fully compatible.

API server contract: Unchanged. No new routes, no changed response shapes, no new environment variables, no migrations.

docker pull ghcr.io/OWNER/pulp-engine:v0.43.0