Skip to content

Story #2438: Account Deletion - #2537

Open
herzog0 wants to merge 40 commits into
developfrom
teo/2438-account-deletion
Open

Story #2438: Account Deletion#2537
herzog0 wants to merge 40 commits into
developfrom
teo/2438-account-deletion

Conversation

@herzog0

@herzog0 herzog0 commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Issue: #2438

Summary & Context

Reworks the account-deletion flow for the V3 design system. Deletion is now driven by a confirmation modal (matching Figma) that schedules the account for anonymization after a grace period, with a site-wide banner, an in-modal confirmation error, and a confirmation email. Legacy (non-V3) behaviour is left byte-identical - every change is gated behind the v3 Waffle flag.

Changes

  • Added a V3 delete-account modal (_delete_account_modal.html + delete-account-modal.css) built to the Figma spec: white rounded inner card on a light-red canvas, full-bleed section dividers, fixed section spacing, and a destructive submit button that stays disabled (via Alpine) until the exact phrase delete my account is typed. No-JS fallback: the button stays enabled and the server validates.
  • Scheduling deletion now anonymizes in place (User.delete_account() preserves the row so authored content stays attributed to an anonymized user); extended the scrub to cover profile links, GitHub username, avatar images, badges, and login-method flags.
  • Mailing lists: local UserMailingListSubscription rows are deleted to remove stored-email PII, but the Mailman/Postorius API is deliberately not called - list membership is left for the user to manage in Postorius (linked from the modal).
  • Added a site-wide "scheduled for deletion" banner (_account_deletion_banner.html + account-deletion-banner.css) that pins to the top above the navbar and pushes content down, with a "Cancel deletion" action (no "Delete now").
  • Removed the "Delete now" control from V3 entirely (kept only in legacy).
  • Scheduling a deletion now sends a branded confirmation email (emails/account_deletion_scheduled.*) via a Celery task, explaining what happens, how to cancel, and linking to Postorius; registered in send_test_emails for previews.
  • Replaced the deletion-flow message banners with in-context feedback: removed the "scheduled"/"no longer scheduled" success banners, and moved the wrong-phrase confirmation error inline into the modal (carried through the PRG redirect via ?delete_error=1).
  • Added test_delete_account.py covering PII scrub, linked-record removal, no-Mailman-API deletion, idempotency, V3 schedule/cancel redirects, the scheduling email, inline error rendering, and that legacy behaviour is unchanged.

‼️ Risks & Considerations ‼️

Please list any potential risks or areas that need extra attention during review/testing

  • User.delete_account() anonymizes rather than deletes the row - confirm authored content (news, library authorship) stays attributed to the anonymized user and no PII leaks when the Wagtail integration is in place.
  • Mailing-list rows are deleted with no external Mailman call by design; this creates intentional drift with Postorius' own DB (users manage membership there).
  • All new behaviour is gated behind the v3 flag; with the flag off, the flow must match current production (legacy banner, legacy delete pages, success/error message banners) exactly.
  • The scheduling email is dispatched from the view via Celery (.delay()).

Screenshots

image image image image

Peer-review testing steps

  1. Enable the v3 Waffle flag.
  2. Go to /users/me/?edit=true and open the "Delete account" modal. Confirm the layout matches Figma (white card on light-red, full-bleed dividers, small bullets) in light and dark mode.
  3. With JS on, confirm the "Delete my account" button is disabled until you type delete my account exactly (wrong case / trailing space keep it disabled).
  4. With JS off (or by submitting a wrong phrase), confirm the error renders inline under the field and no global banner appears.
  5. Submit the correct phrase: confirm you land back on the edit page, the site-wide red banner appears at the top (pushing content down, above the navbar) with "Cancel deletion" only, and no success banner shows.
  6. Check the inbox (maildev) for the "Your account is scheduled for deletion" email; verify copy, the "Log in to cancel" CTA, and the Postorius link.
  7. Click "Cancel deletion": confirm the banner disappears and no success banner shows.
  8. Turn the v3 flag off and confirm the legacy flow (legacy red banner with "Delete Now", legacy delete pages, and the success/error message banners) is unchanged.

Self-review Checklist

  • Tag at least one team member from each team to review this PR
  • Link this PR to the related GitHub Project ticket

Frontend

  • UI implementation matches Figma design
  • Tested in light and dark mode
  • Responsive / mobile verified
  • Accessibility checked (keyboard navigation, etc.)
  • Ensure design tokens are used for colors, spacing, typography, etc. - No hardcoded values
  • Test without JavaScript (if applicable)
  • No console errors or warnings

Summary by CodeRabbit

  • New Features

    • Added a V3 sticky “account scheduled for deletion” banner with dismiss and “Cancel deletion”.
    • Added a V3 delete-account confirmation modal that requires an exact phrase, with improved destructive presentation and inline error handling.
    • Added V3 scheduled-deletion email notifications with countdown plus cancellation and mailing-list links.
  • Bug Fixes

    • Improved account deletion privacy cleanup (including linked records, badges, and media) and ensured the workflow is safe to run multiple times.
    • Updated V3 vs legacy UI messaging so success/error states match the selected flow.
  • Tests

    • Expanded automated coverage for V3/legacy delete and cancel flows, email sending, and idempotency.

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a V3 account-deletion flow with confirmation, grace-period scheduling, cancellation, notification emails, site-wide status UI, and comprehensive user-data scrubbing while preserving legacy behavior outside V3.

Changes

Account deletion

Layer / File(s) Summary
Account data scrubbing
users/models.py, users/views.py, users/tests/test_delete_account.py
User.delete_account removes linked records, scrubs identity data, clears associations, invalidates thumbnails, and defers image-file deletion transactionally; tests cover cleanup and idempotency.
V3 scheduling and cancellation flow
users/views.py, users/forms.py, config/settings.py, core/context_processors.py, users/tests/test_delete_account.py
V3 context, confirmation errors, scheduling, cancellation redirects, configuration, and legacy branching are implemented and tested.
Scheduled-deletion notification
users/tasks.py, templates/emails/*, users/management/commands/send_test_emails.py, users/tests/test_delete_account.py
Multipart scheduled-deletion emails and test-email rendering support are added with grace-period, cancellation, and mailing-list details.
V3 deletion interface
templates/v3/*, templates/base.html, static/css/v3/*
The delete modal, profile states, sticky banner, responsive styling, semantic error token, and component imports are added.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  actor User
  participant ProfilePage
  participant DeleteUserView
  participant ScheduledEmailTask
  participant EmailTemplates
  User->>ProfilePage: Confirm account deletion
  ProfilePage->>DeleteUserView: POST confirmation
  DeleteUserView->>ScheduledEmailTask: Enqueue scheduled-deletion email
  ScheduledEmailTask->>EmailTemplates: Render text and HTML content
  ScheduledEmailTask-->>User: Send cancellation instructions
  DeleteUserView-->>ProfilePage: Redirect to scheduled-deletion state
Loading

Possibly related issues

Possibly related PRs

  • boostorg/website-v2#2478 — Shares the V3 profile edit and delete-account UI touched by this flow.
  • boostorg/website-v2#2479 — Extends the transactional email and test-email template infrastructure used by the scheduled-deletion notification.
  • boostorg/website-v2#2538 — Also modifies the V3 profile edit delete-account card and related profile-flow wiring.

Suggested reviewers: jlchilders11, ycanales, kattyode

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 46.43% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and clearly matches the main account-deletion rework in this PR.
Description check ✅ Passed The description follows the template well, including issue, summary, Figma link, components link, risks, screenshots, and checklist.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch teo/2438-account-deletion

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@herzog0 herzog0 linked an issue Jul 21, 2026 that may be closed by this pull request

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
users/management/commands/send_test_emails.py (1)

248-248: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider importing POSTORIUS_URL to avoid duplication.

This hardcodes the Postorius URL, duplicating the POSTORIUS_URL constant defined in users/tasks.py. Consider importing it to keep the test command automatically in sync with the real task.

♻️ Proposed refactor

First, add from users.tasks import POSTORIUS_URL to the imports at the top of the file, then apply:

-            "postorius_url": "https://lists.boost.org/mailman3/lists/",
+            "postorius_url": POSTORIUS_URL,
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@users/management/commands/send_test_emails.py` at line 248, Replace the
hardcoded "postorius_url" value in the test email command with the existing
POSTORIUS_URL constant by importing it from users.tasks, keeping the command
synchronized with the task’s configured URL.
users/views.py (1)

795-805: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Delegate URL resolution to get_success_url.

For consistency with Django's class-based view lifecycle and how you cleanly implemented CancelDeletionView, consider overriding get_success_url to return the V3 URL, allowing super().form_valid(form) to naturally handle the redirect.

♻️ Proposed refactor
+    def get_success_url(self):
+        if flag_is_active(self.request, "v3"):
+            return _v3_profile_edit_url()
+        return super().get_success_url()
+
     def form_valid(self, form):
         user = self.get_object()
         user.delete_permanently_at = timezone.now() + datetime.timedelta(
             days=settings.ACCOUNT_DELETION_GRACE_PERIOD_DAYS
         )
         user.save()
         if flag_is_active(self.request, "v3"):
             tasks.send_account_deletion_scheduled_email.delay(
                 email=user.email,
                 first_name=user.first_name,
                 grace_days=settings.ACCOUNT_DELETION_GRACE_PERIOD_DAYS,
                 login_url=self.request.build_absolute_uri(reverse("account_login")),
                 scheme=self.request.scheme,
                 host=self.request.get_host(),
             )
-            return HttpResponseRedirect(_v3_profile_edit_url())
         return super().form_valid(form)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@users/views.py` around lines 795 - 805, Move the V3 redirect selection from
the inline return in the form-valid flow into an override of get_success_url,
returning _v3_profile_edit_url() when flag_is_active(self.request, "v3") and
otherwise delegating to the parent implementation. Keep the deletion email
scheduling in form_valid, then call super().form_valid(form) for the standard
redirect lifecycle.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@templates/v3/users/_delete_account_modal.html`:
- Around line 35-74: Update the Alpine validation in the form using confirmText
so comparison trims surrounding whitespace, matching Django’s
CharField(strip=True) behavior. Add submit handling to prevent the form’s
default submission when the trimmed confirmation phrase is invalid, while
allowing valid confirmations to submit normally.

---

Nitpick comments:
In `@users/management/commands/send_test_emails.py`:
- Line 248: Replace the hardcoded "postorius_url" value in the test email
command with the existing POSTORIUS_URL constant by importing it from
users.tasks, keeping the command synchronized with the task’s configured URL.

In `@users/views.py`:
- Around line 795-805: Move the V3 redirect selection from the inline return in
the form-valid flow into an override of get_success_url, returning
_v3_profile_edit_url() when flag_is_active(self.request, "v3") and otherwise
delegating to the parent implementation. Keep the deletion email scheduling in
form_valid, then call super().form_valid(form) for the standard redirect
lifecycle.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: f61579b0-8bf1-46f7-911f-cb944465ec6e

📥 Commits

Reviewing files that changed from the base of the PR and between f5d611f and f524ab1.

📒 Files selected for processing (15)
  • static/css/v3/account-deletion-banner.css
  • static/css/v3/components.css
  • static/css/v3/delete-account-modal.css
  • templates/base.html
  • templates/emails/account_deletion_scheduled.html
  • templates/emails/account_deletion_scheduled.txt
  • templates/emails/account_deletion_scheduled_subject.txt
  • templates/v3/includes/_account_deletion_banner.html
  • templates/v3/user_profile_edit.html
  • templates/v3/users/_delete_account_modal.html
  • users/management/commands/send_test_emails.py
  • users/models.py
  • users/tasks.py
  • users/tests/test_delete_account.py
  • users/views.py

Comment thread templates/v3/users/_delete_account_modal.html

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
users/views.py (1)

795-810: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Keep an existing deletion schedule immutable.

A second valid POST overwrites delete_permanently_at and queues another email, allowing the 10-day deadline to be extended indefinitely. For V3, atomically schedule only when the field is null; otherwise redirect without changing it.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@users/views.py` around lines 795 - 810, Update form_valid to preserve an
existing delete_permanently_at value: for V3, atomically set the deletion
deadline only when the field is null, and queue
send_account_deletion_scheduled_email only when that update succeeds. If a
schedule already exists, redirect without modifying the deadline or sending
another email.
🧹 Nitpick comments (1)
static/css/v3/delete-account-modal.css (1)

158-161: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Preserve the form in the accessibility tree.

display: contents can cause browsers to omit <form> semantics from accessibility trees. This form is the cancellation action rendered by templates/v3/user_profile_edit.html:160-210; use a normal flex item such as display: flex, then verify the supported browser/screen-reader matrix.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@static/css/v3/delete-account-modal.css` around lines 158 - 161, Update the
.user-profile__delete-inline-form rule to use a normal flex layout item, such as
display: flex, instead of display: contents, preserving the form’s semantics in
the accessibility tree while retaining the existing cancellation-action styling.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@users/views.py`:
- Around line 153-154: Update the comment describing the delete-account card
flow to remove the obsolete “delete-now” control, leaving only the cancellation
behavior available after scheduling.
- Around line 800-810: Update the v3 account-deletion flow around user.save()
and send_account_deletion_scheduled_email.delay() to use a durable transactional
outbox or equivalent retryable post-commit publisher. Persist the deletion
schedule and email event atomically, publish only after commit, and ensure
broker failures are retried without leaving the account scheduled without its
confirmation email; preserve the existing redirect behavior.

---

Outside diff comments:
In `@users/views.py`:
- Around line 795-810: Update form_valid to preserve an existing
delete_permanently_at value: for V3, atomically set the deletion deadline only
when the field is null, and queue send_account_deletion_scheduled_email only
when that update succeeds. If a schedule already exists, redirect without
modifying the deadline or sending another email.

---

Nitpick comments:
In `@static/css/v3/delete-account-modal.css`:
- Around line 158-161: Update the .user-profile__delete-inline-form rule to use
a normal flex layout item, such as display: flex, instead of display: contents,
preserving the form’s semantics in the accessibility tree while retaining the
existing cancellation-action styling.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: cff9f727-04f9-41bc-82c3-027656704883

📥 Commits

Reviewing files that changed from the base of the PR and between f524ab1 and 0c0e230.

📒 Files selected for processing (15)
  • static/css/v3/account-deletion-banner.css
  • static/css/v3/components.css
  • static/css/v3/delete-account-modal.css
  • templates/base.html
  • templates/emails/account_deletion_scheduled.html
  • templates/emails/account_deletion_scheduled.txt
  • templates/emails/account_deletion_scheduled_subject.txt
  • templates/v3/includes/_account_deletion_banner.html
  • templates/v3/user_profile_edit.html
  • templates/v3/users/_delete_account_modal.html
  • users/management/commands/send_test_emails.py
  • users/models.py
  • users/tasks.py
  • users/tests/test_delete_account.py
  • users/views.py
🚧 Files skipped from review as they are similar to previous changes (10)
  • static/css/v3/components.css
  • static/css/v3/account-deletion-banner.css
  • templates/emails/account_deletion_scheduled.txt
  • templates/v3/user_profile_edit.html
  • templates/emails/account_deletion_scheduled_subject.txt
  • templates/base.html
  • users/management/commands/send_test_emails.py
  • users/tasks.py
  • users/models.py
  • users/tests/test_delete_account.py

Comment thread users/views.py Outdated
Comment thread users/views.py Outdated
@julhoang
julhoang self-requested a review July 23, 2026 21:28

@julhoang julhoang left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Hi @herzog0 ! The core flow of deletion and canceling the deletion works great!

I've left a couple of suggestions and a question below related to legacy behaviour. Asides from those, might you be able to update the UI to more closely match the Figma design as well (e.g. with font sizes, text colors, and the Delete button should have a solid red background, etc) 🙏

Comment thread templates/emails/account_deletion_scheduled.txt Outdated
Comment thread users/models.py
Comment thread users/views.py Outdated
Comment thread templates/v3/users/_delete_account_modal.html Outdated
Comment thread static/css/v3/delete-account-modal.css Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
users/models.py (1)

454-465: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Delete the derived HQ ImageKit cache before anonymization succeeds.

hq_image_render is cached separately from hq_image, but delete_account() only clears image_thumbnail and deletes the source file after commit. ImageKit cache files remain on storage/cache even after the source file is deleted, so also delete hq_image_render for extended_scrub=True. Since cleanup happens in on_commit, handle failures so a storage/cache delete error does not leave anonymized PII committed, and do not let it block later callbacks.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@users/models.py` around lines 454 - 465, The account deletion flow around
delete_account and the extended_scrub image cleanup must also remove the derived
hq_image_render cache. Schedule that cache deletion in the existing
transaction.on_commit cleanup, handle deletion failures so they prevent
anonymized PII from being committed without blocking subsequent callbacks, and
preserve the existing deferred source-file cleanup behavior.

Source: MCP tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@users/models.py`:
- Line 417: Update delete_account and the scheduled-deletion flow to persist and
reuse the user’s V3 extended-scrub choice. Ensure the grace-period task invokes
delete_account with extended_scrub=True for users requiring V3 scrubbing, while
preserving the existing behavior for other users.

In `@users/tasks.py`:
- Around line 84-89: Update the scheduling flow to persist whether each deletion
request requires the V3/extended scrub, then have the task query that marker and
pass the corresponding extended_scrub value to User.delete_account() instead of
always defaulting to False. Preserve legacy behavior for records without the
marker while ensuring V3-scheduled accounts receive the extended scrub.

---

Outside diff comments:
In `@users/models.py`:
- Around line 454-465: The account deletion flow around delete_account and the
extended_scrub image cleanup must also remove the derived hq_image_render cache.
Schedule that cache deletion in the existing transaction.on_commit cleanup,
handle deletion failures so they prevent anonymized PII from being committed
without blocking subsequent callbacks, and preserve the existing deferred
source-file cleanup behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 2dddff95-6c7e-47bb-9850-ff1829d3f07b

📥 Commits

Reviewing files that changed from the base of the PR and between 3c7db00 and 45d6bbe.

📒 Files selected for processing (10)
  • static/css/v3/user-profile-page.css
  • templates/emails/account_deletion_scheduled.html
  • templates/emails/account_deletion_scheduled.txt
  • templates/emails/base_email.html
  • templates/v3/user_profile_edit.html
  • templates/v3/users/_delete_account_modal.html
  • users/models.py
  • users/tasks.py
  • users/tests/test_delete_account.py
  • users/views.py
💤 Files with no reviewable changes (2)
  • templates/emails/account_deletion_scheduled.txt
  • templates/v3/users/_delete_account_modal.html
🚧 Files skipped from review as they are similar to previous changes (5)
  • static/css/v3/user-profile-page.css
  • templates/emails/account_deletion_scheduled.html
  • templates/v3/user_profile_edit.html
  • users/views.py
  • users/tests/test_delete_account.py

Comment thread users/models.py
Comment thread users/tasks.py Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@static/css/v3/delete-account-modal.css`:
- Around line 155-164: Update the destructive submit selectors for
.delete-account-modal .btn-error so the solid red fill and reversed text apply
only when the button is not disabled, while preserving the existing shared
disabled outlined styling.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 17026d2f-f841-4a34-8521-c4036d0ebcbb

📥 Commits

Reviewing files that changed from the base of the PR and between 45d6bbe and 6662298.

📒 Files selected for processing (3)
  • static/css/v3/delete-account-modal.css
  • static/css/v3/semantics.css
  • templates/v3/users/_delete_account_modal.html
💤 Files with no reviewable changes (1)
  • templates/v3/users/_delete_account_modal.html

Comment thread static/css/v3/delete-account-modal.css Outdated
@herzog0
herzog0 requested a review from julhoang July 27, 2026 21:14

@julhoang julhoang left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Hi @herzog0! I have two main requests below – invalidating the hq_image_render cache, and double-checking a few fields that are affecting legacy scrubbing behaviour – plus a couple of nits 🙏

Comment thread static/css/v3/delete-account-modal.css Outdated
Comment thread static/css/v3/delete-account-modal.css Outdated
Comment thread templates/v3/includes/_account_deletion_banner.html
Comment thread users/views.py Outdated
Comment thread users/models.py Outdated
Comment thread users/models.py Outdated
@herzog0
herzog0 dismissed julhoang’s stale review July 27, 2026 22:10

Totally missed those, thanks Julia. Addressed!

@herzog0
herzog0 requested a review from julhoang July 27, 2026 22:10

@julhoang julhoang left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

All looks great to me, thanks for the super quick updates @herzog0 ! 🚂

@javiercoronadonarvaez
javiercoronadonarvaez self-requested a review July 28, 2026 15:46

@javiercoronadonarvaez javiercoronadonarvaez left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM! Sorry for the delay. I think Julia addressed everything worth noting.

Has one conflict, but other than that, it's ready to go.

herzog0 added 28 commits July 28, 2026 17:48
chore: drop comments from delete-account modal styles
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Webpage Integration: Account Deletion

3 participants