DataTalksClub / DataTalksClub/website
D3.1 umbrella: Extension models and user model rename (phased)
Nobody has claimed this yet.
- 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.accountsor any package app; nocommunity_baseimports in site code (D3.2, afterC5.3andC3.7). - No
django_migrationscleanup, no squashed-migration--fake, noP5relabel work. - No
get_user_model()idiom sweep beyond rename fallout. - No removal of
username,newsletter_subscribed,home_dismissals, ornewsletter_preference_changed_at(the last added since original grooming, alongside the BE-15 newsletter fix) — all DTC-only,D3.2/C3.7reconciliation. - 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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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