Skip to content

fix(policies): show a draft version's own content when editing it#3070

Merged
tofikwest merged 1 commit into
mainfrom
tofik/fix-policy-draft-content-load
Jun 9, 2026
Merged

fix(policies): show a draft version's own content when editing it#3070
tofikwest merged 1 commit into
mainfrom
tofik/fix-policy-draft-content-load

Conversation

@tofikwest

@tofikwest tofikwest commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

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 the policyContent prop, which PolicyPageTabs always sets to the published/current version's content.
  • viewingVersion is correctly the draft.
  • The effect that swaps the draft's content into currentContent early-returns on first mount, because prevInitialVersionIdRef is initialized to initialVersionId (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/appnpx vitest run resolve-initial6/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.tsx to origin/main):
    • PolicyDetails.test.tsx → "renders editor as read-only when pending approval" fails identically on origin/main.
    • apps/app typecheck + several policy vitest files fail only on env grounds (PointerEvent is not defined in jsdom; @trycompai/auth needs internal packages built first; unrelated *.test.tsx prop 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 currentContent from the version in initialVersionId via resolveInitialPolicyContent, falling back to published content only when no match.
    • Updated PolicyDetails.tsx to use the helper; no changes to the save path.

Written for commit a10aa2a. Summary will update on new commits.

Review in cubic

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>
@vercel

vercel Bot commented Jun 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
app Ready Ready Preview, Comment Jun 9, 2026 10:08pm
comp-framework-editor Ready Ready Preview, Comment Jun 9, 2026 10:08pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
portal Skipped Skipped Jun 9, 2026 10:08pm

Request Review

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 3 files

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

Re-trigger cubic

@tofikwest tofikwest merged commit 1dc92ea into main Jun 9, 2026
11 checks passed
@tofikwest tofikwest deleted the tofik/fix-policy-draft-content-load branch June 9, 2026 22:11
@claudfuen

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 3.74.3 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants