fix(policies): show a draft version's own content when editing it#3070
Merged
Conversation
Creating a new policy version, editing the text (which correctly saves to the draft version), switching tabs, then opening that draft via Versions > Edit showed the PUBLISHED version's content instead of the draft's saved edits — so the change appeared to vanish, and a follow-up edit could overwrite the draft. Root cause (PolicyContentManager): currentContent is seeded from the policyContent prop, which PolicyPageTabs always sets to the published/current version's content. The effect that swaps in the selected version's content early-returns on first mount because prevInitialVersionIdRef is initialized to initialVersionId. Switching tabs unmounts the Content tab (DS Tabs don't keep inactive panels mounted), so opening a draft from the Versions tab remounts it fresh with a versionId already in the URL and hits that skip-on-mount path. Fix: seed currentContent from the initialVersionId version when present, via a new pure, unit-tested helper (resolveInitialPolicyContent). viewingVersion was already correct; this aligns the displayed content with the selected version. No save-path change — edits were already persisting correctly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
|
🎉 This PR is included in version 3.74.3 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bug
Create a new policy version → edit the text → switch tabs → Versions → Edit the latest draft → the edit appears to vanish (reproduced; customer video confirms it reaches "Saved" first).
Root cause (it's a load bug, not a save bug)
The edit is saved correctly to the draft version's
content. The problem is what the editor displays when you re-open the draft.In
PolicyContentManager(editor/components/PolicyDetails.tsx):currentContent(what the editor shows) is seeded from thepolicyContentprop, whichPolicyPageTabsalways sets to the published/current version's content.viewingVersionis correctly the draft.currentContentearly-returns on first mount, becauseprevInitialVersionIdRefis initialized toinitialVersionId(prevRef === initialVersionId→ skip).Switching tabs unmounts the Content tab (the design-system
Tabsdon't keep inactive panels mounted), so clicking Edit on a draft from the Versions tab remounts the tab fresh with?versionId=…already set — hitting that skip-on-mount path and showing the published content. (Editing via the in-editor version dropdown works, becausehandleVersionSelectsets the content explicitly — which is why it's intermittent.)Risk: first edit isn't lost (it's safe in the DB), but a follow-up edit on top of the wrongly-shown published content would overwrite the draft — so worth fixing promptly.
Fix
Seed
currentContentfrom theinitialVersionIdversion when present, via a new pure, unit-tested helperresolveInitialPolicyContent.viewingVersionwas already correct, so this just aligns the displayed content with the selected version. No save-path change.Tests
apps/app→npx vitest run resolve-initial→ 6/6 pass (covers: seeds from the targeted draft, falls back to published when no/unknown version, single-node wrapping, empty-draft).Notes for reviewer
PolicyDetails.tsx(1 seed line + import) + the helper + its test.PolicyDetails.tsxtoorigin/main):PolicyDetails.test.tsx→ "renders editor as read-only when pending approval" fails identically onorigin/main.apps/apptypecheck + several policy vitest files fail only on env grounds (PointerEvent is not definedin jsdom;@trycompai/authneeds internal packages built first; unrelated*.test.tsxprop drift) — none in the files this PR touches.🤖 Generated with Claude Code
Summary by cubic
Fixes an editor load bug where editing a draft from Versions > Edit showed the published content. The editor now loads the draft’s own content on mount, so saved edits are visible and not overwritten.
currentContentfrom the version ininitialVersionIdviaresolveInitialPolicyContent, falling back to published content only when no match.PolicyDetails.tsxto use the helper; no changes to the save path.Written for commit a10aa2a. Summary will update on new commits.