fix(policies): show a draft version's own content when editing it
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.- The effect that swaps the draft's content into
currentContentearly-returns on first mount, becauseprevInitialVersionIdRefis initialized toinitialVersionId(prevRef === initialVersionId→ skip).
Switching tabs unmounts the Content tab (the design-system Tabs don'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, because handleVersionSelect sets 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 currentContent from the initialVersionId version when present, via a new pure, unit-tested helper resolveInitialPolicyContent. viewingVersion was 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
- Scope:
PolicyDetails.tsx(1 seed line + import) + the helper + its test. - Pre-existing issues in this area, not introduced by this PR (verified by reverting
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.
- Bug Fixes
- Seed
currentContentfrom the version ininitialVersionIdviaresolveInitialPolicyContent, falling back to published content only when no match. - Updated
PolicyDetails.tsxto use the helper; no changes to the save path.
- Seed