Skip to content

usertour

v0.7.7 Breaking

This release includes breaking changes for platform teams planning a safe upgrade.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

announcements appcues chameleon checklist in-app nps
+8 more
onboarding pendo surveys tooltips tour userflow userpilot walkme

Summary

AI summary

Auto-start rules editor UX improvements and race‑condition fixes for rapid deletes.

Changes in this release

Feature Medium

ContentDetailAutoStartRules shows inline empty-state guidance when auto-start toggle is on but no conditions are set.

ContentDetailAutoStartRules shows inline empty-state guidance when auto-start toggle is on but no conditions are set.

Source: llm_adapter@2026-05-21

Confidence: low

Feature Medium

Only start if not complete toggles instantly on Frequency change in auto-start rules.

Only start if not complete toggles instantly on Frequency change in auto-start rules.

Source: llm_adapter@2026-05-21

Confidence: low

Feature Medium

Tracker editor shares auto-start empty-state UX for conditions list.

Tracker editor shares auto-start empty-state UX for conditions list.

Source: llm_adapter@2026-05-21

Confidence: low

Feature Medium

Publish button disabled for FLOW content with no steps in useContentPublishState.

Publish button disabled for FLOW content with no steps in useContentPublishState.

Source: llm_adapter@2026-05-21

Confidence: low

Performance Medium

No flicker when switching Frequency options in auto-start rules due to prop-sync optimization.

No flicker when switching Frequency options in auto-start rules due to prop-sync optimization.

Source: llm_adapter@2026-05-21

Confidence: low

Performance Medium

ConditionFrequency and ConditionWait sync on content or version switch, avoiding stuck pickers.

ConditionFrequency and ConditionWait sync on content or version switch, avoiding stuck pickers.

Source: llm_adapter@2026-05-21

Confidence: low

Bugfix Medium

Tracker editor cancels debounced update when conditions become empty, preventing lost deletions.

Tracker editor cancels debounced update when conditions become empty, preventing lost deletions.

Source: llm_adapter@2026-05-21

Confidence: high

Bugfix Medium

Version history now shows new draft after publish-then-edit without requiring reload.

Version history now shows new draft after publish-then-edit without requiring reload.

Source: llm_adapter@2026-05-21

Confidence: high

Bugfix Medium

No-op saves removed from auto-start switch; flipping does not queue save when server state already matches.

No-op saves removed from auto-start switch; flipping does not queue save when server state already matches.

Source: llm_adapter@2026-05-21

Confidence: low

Bugfix Low

Prevents no‑op saves when toggling auto‑start with no conditions.

Prevents no‑op saves when toggling auto‑start with no conditions.

Source: granite4.1:30b@2026-05-22-audit

Confidence: low

Full changelog

This release polishes the content-detail editor: clearer empty-state guidance when an auto-start rule isn't yet usable, two end-to-end races around publish-then-edit and rapid-delete eliminated, and the tracker editor brought in line with the auto-start
rules card so they no longer behave differently from the user's side.

What's Changed

🎯 Auto-start rules editor

  • "No conditions yet" empty state. When the auto-start toggle is on but no conditions are set, ContentDetailAutoStartRules now surfaces an inline "rule won't activate until you add at least one condition" card. The runtime is never sent an enabled=true
    rule with an empty autoStartRules — coerceEnabledForPersist writes enabled=false on the wire even while the local toggle visually stays on, so the user can see what they're configuring without producing an un-actionable server state.
  • Sibling settings hide while incomplete. Wait / Frequency / "Only start if not complete" / Priority now render only when the rule is on AND has at least one condition. Off-state hides them along with the conditions list; empty-state hides them because
    their writes would never reach the wire anyway (and fully-controlled Priority would visibly snap back on click).
  • No-op saves removed. Flipping the auto-start switch when the coerced enabled value already matches the server no longer queues a save. Previously, turning the toggle on or off with no conditions wrote (false, []) even though the server was already in
    that state — and on a published version, that no-op write silently forked a new draft.
  • "Only start if not complete" responds instantly on Frequency change. Switching Frequency between Once / Multiple / Unlimited used to leave the IfCompleted control hidden for ~1s because its visibility gate read from the setting prop, which goes
    through the debounced save / mutation / refetch round-trip. A localSetting mirror in autostart-rules now reflects user edits synchronously; a lastObservedSettingRef with deep-equal compare ignores reference-only prop flips emitted during the save cycle
    (where setIsSaving(true) triggers a parent re-render carrying the still-stale version.config).
  • No flicker on Frequency switch. Switching options no longer triggers a redundant setData re-render in ConditionFrequency that briefly flashed the picker's children. The prop-sync useEffect uses value-equality bailout (isEqual(prev, next)) so the
    user's own edit echoing back through defaultValue doesn't cycle the children.

🧪 Tracker editor

  • Trigger conditions share the auto-start empty-state UX. Auto-start rules and tracker rules now behave identically when their conditions list is empty: both show "No conditions yet" with the same hint. The showEmptyState gate moved from
    showEnabledSwitch && enabled && … to effectiveEnabled && …, so switchless consumers (tracker passes showEnabledSwitch={false}) automatically participate.
  • Same "don't autosave empty" policy. Tracker's handleAutoStartRulesDataChange now calls debouncedUpdateVersion.cancel() when conditions go empty, mirroring content-detail-settings.tsx. Without this, a rapid delete sequence in the tracker editor had the
    same lost-deletion race as the auto-start card.

🚦 Publish gating

  • Flow publish requires at least one step. useContentPublishState now keeps the Publish button disabled when content.type === FLOW and version.steps is empty — an empty flow has nothing for the runtime to render. Mirrors the existing
    tracker-needs-event-and-conditions check.

🐛 Fixes

  • Rapid condition deletion no longer resurrects deleted conditions. A "delete A → delete B → delete C" burst previously left the debounce queue holding the second-to-last value (e.g. [C]), which fired ~500ms after the user emptied the list and re-synced
    the server back to that stale state on refetch. Both content-detail-settings.tsx and content-detail-tracker-editor.tsx now call debouncedUpdateVersion.cancel() when conditions become empty.
  • Version history shows the new draft after publish-then-edit. Editing a just-published content silently forks a new draft version (because ensureEditableVersionId refuses to update a published version in place), but the Apollo listContentVersions cache
    wasn't auto-refreshed — so the Version tab kept showing the pre-fork list until reload. processVersion / saveVersionData / saveVersionTheme / saveVersionScheduledAt now detect fork via editableVersionId !== version.id and add refetchVersionList to the
    post-mutation Promise.all.
  • Frequency / Wait pickers sync on content or version switch. ConditionFrequency and ConditionWait previously only read defaultValue for the initial useState value; subsequent prop changes were ignored, so navigating between contents left both pickers
    stuck on the prior content's values until the user re-interacted. Both now sync internal state via a prop-sync useEffect on defaultValue change.

Full Changelog: https://github.com/usertour/usertour/compare/v0.7.6...v0.7.7

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track usertour

Get notified when new releases ship.

Sign up free

About usertour

Usertour is an open-source user onboarding platform. It allows you to create in-app product tours, checklists, and surveys in minutes—effortlessly and with full control.The open-source alternative to Userflow and Appcues

All releases →

Related context

Earlier breaking changes

  • v0.8.3 Removes the insecure 'development-key-not-secure' fallback for ENCRYPTION_KEY; operators must set the env var explicitly.
  • v0.7.5 All 60 workspace packages move to @usertour/* from @usertour-packages/*

Beta — feedback welcome: [email protected]