DataTalksClub / DataTalksClub/website

D3.1 umbrella: Extension models and user model rename (phased)

Open
#334 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

auth courses data-migration enhancement P1
Dominant language
Python
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

Umbrella tracker. This issue no longer carries implementation acceptance criteria of its own — it tracks the five phased sub-issues below, decomposed after two failed big-bang implementation attempts (d3.1-extension-models-user-rename, then a "salvage" continuation wip/d31-user-rename-salvage-20260909; both branches abandoned, unsalvageable after a 28-file rebase conflict against main). The lesson: this repo's commit velocity means a single giant branch covering the whole field-move + rename cannot land before it drifts. Each phase below is small, independently verifiable, and independently mergeable — once merged, it does not need to be redone even if a later phase takes a while against a moving main.

The field-disposition contract (which fields move where, with what shape) is not relitigated by the re-scoping: every sub-issue below mirrors the field table originally researched here verbatim. What changed is sequencing, plus a refresh of the reader-surface inventory against current main (see the drift comment below).

2026-09-15 update: the original phase 6 (#395, additive AISL-origin reconciliation fields) was dropped from this umbrella per owner decision — those 22 fields would have had zero readers and are not required for the rename; carrying dead columns until D3.2 is scoped is worse than having D3.2 add them together with the behavior that actually uses them. The umbrella is now five phases; phase 5 (#394, the rename) is the final phase.

Phases (in dependency order)

Phase Issue Depends on Summary
1 #390 none Additive extension schema: courses.LearnerProfile + accounts_ext app (IdentityState + six moved identity/import models), data migration/backfill. No reader changes, no removals.
2 #391 #390 Switch course-platform readers (dark mode, registration/profile forms, projects/API, member home, the new cross-cohort/site project galleries) to courses.LearnerProfile.
3 #392 #390 Switch identity-window and importer readers to accounts_ext.IdentityState. Runs concurrently with phase 2 — both depend only on phase 1.
4 #393 #391, #392 Contract: remove the twelve moved fields and the moved unique constraint from CustomUser.
5 #394 #393 Rename: RenameModel("CustomUser", "User"), AlterModelTable, AUTH_USER_MODEL flip, identity_inventory.py literal fixes.

D3.2 (freeze-weekend adoption) and C3.7 (identity donor compatibility checkpoint) still depend on this umbrella as a whole, i.e. on phase 5 (#394) landing. D3.2 additionally owns adding the AISL-origin reconciliation fields (formerly phase 6 here) together with the behavior that uses them.

Original research (preserved, still authoritative for the field/model contract)

The scope, normative sources, field-disposition table, original reader-surface inventory, non-goals, and owner decisions recorded in this issue's grooming comments below remain the source of truth for what moves and how it is shaped. They are carried forward into the five phase issues; nothing here is superseded on the contract, only on delivery sequencing. See the "Technical drift since original grooming" comment for what the phase issues corrected or added on top of that original inventory (mainly: the events-identity file move, three new script-owned models, the new project-gallery reader surface, and identity-state call sites added by the BE-08 quarantine-revocation fix).

Non-goals (unchanged from original grooming)

  • No adoption of community_base.accounts or any package app; no community_base imports in site code (D3.2, after C5.3 and C3.7).
  • No django_migrations cleanup, no squashed-migration --fake, no P5 relabel work.
  • No get_user_model() idiom sweep beyond rename fallout.
  • No removal of username, newsletter_subscribed, home_dismissals, or newsletter_preference_changed_at (the last added since original grooming, alongside the BE-15 newsletter fix) — all DTC-only, D3.2/C3.7 reconciliation.
  • No spec "Member profile version 1" contract changes.
  • No AISL-origin reconciliation field additions (formerly phase 6, now owned by D3.2 — see 2026-09-15 update above).

Acceptance

This umbrella is done when phases 1-5 (#390-#394) are all closed. There is no separate acceptance checklist here; each phase carries its own.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

This is an umbrella tracker rather than a standalone implementation issue. Start with phase 1 (#390), then follow the dependency order through #391-#394; review each phase's acceptance criteria and the preserved field-disposition contract. The umbrella is done when phases 1-5 are all closed.

Written by the indexing model from the issue text.

Assessment

Tech stack
django, python
Domain
backend, database
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.