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:
- the panel is mounted,
- no capability check is already in flight, and
- 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:
| State | Auto re-check |
|---|---|
available: true | Yes — detects if the service has since gone down |
service_unreachable | Yes — network may have recovered |
status_error | Yes — transient HTTP error may have resolved |
malformed_response | Yes — API version mismatch may have been fixed |
States intentionally excluded:
| State | Auto re-check | Reason |
|---|---|---|
routes_disabled | No | Operator-level: requires server-side config change |
browser_unavailable | No | Operator-level: requires deployment fix |
fetch_failed | No | Legacy 404 fallback; older backends remain compatible as-is |
Implementation details:
CAPABILITY_TTL_MS— module-scope constant, 5 minutescapabilityCheckedAt—useRef<number>updated when each check settlesisCheckingCapabilityRef—useRef<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— cleanpnpm lint— 0 errorspnpm --filter @pulp-engine/editor test— 536 passed, 0 failedpnpm --filter @pulp-engine/api test— passed, 0 failedpnpm 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