Skip to content

Commit c41db59

Browse files
Merge issue-116-studio-courses-rename: rename course admin package (#116)
2 parents 158b7d8 + 080f4e1 commit c41db59

109 files changed

Lines changed: 840 additions & 589 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

_docs/adoption/course-platform/README.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ cp -R .tmp/cmp-source-98a2352/templates/. course_platform_templates/
4444
cp -R .tmp/cmp-source-98a2352/scripts/. scripts/
4545
```
4646

47+
Issue #116 mechanically moves the copied `cadmin/` destination to `studio_courses/`, including
48+
its Python, test, template, and static namespaces. The source paths above remain the literal-copy
49+
provenance. `copied-files.tsv` now records each pinned `cadmin/*` source against its exact
50+
`studio_courses/*` destination, while the two-file target-owned `cadmin/` package contains only
51+
the accepted legacy URL adapter.
52+
4753
The source root templates use a distinct destination so their byte identity is retained without replacing the unified website's root template shell. The manifest records this mapping.
4854

4955
Allowlisted tracked roots are `accounts/`, `api/`, `cadmin/`, `course_management/`, `courses/`, `data/`, `e2e/`, `templates/`, and `scripts/`. This includes all original app migrations, tests, templates/static assets, management commands, compatibility API, cadmin, and source operational scripts referenced by characterization tests.
@@ -82,11 +88,13 @@ files as source-identical.
8288

8389
## Evidence index
8490

85-
- `behavior-inventory.md`: generated inventory of all 89 adopted HTML/account/API/cadmin routes,
86-
all 13 adopted management commands, and the original app/migration identities;
91+
- `behavior-inventory.md`: generated inventory of all 89 adopted HTML/account/API/Studio Courses
92+
routes, all 13 adopted management commands, and the active app/preserved migration identities;
8793
- `verification.md`: characterization counts, migration evidence, environment dispositions, and
8894
remaining parity gate;
8995
- `integration-patches.md`: target-owned compatibility changes;
96+
- `cadmin-reference-allowlist.tsv`: every remaining source-provenance or legacy-adapter reference,
97+
with its owner and removal gate;
9098
- `target-owned-compatibility-shims.tsv`: checksums and per-file rationale for the two retained
91-
scaffold admin API shims;
99+
scaffold admin API shims and the two-file legacy `/cadmin` route adapter;
92100
- `migration-squash-gate.md`: evidence required before any original migration can be replaced.

_docs/adoption/course-platform/behavior-inventory.md

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ identities, and verifies all copied destination checksums.
1212
| --- | --- | ---: |
1313
| Accounts | `accounts.urls` | 9 |
1414
| Compatibility API | `api.urls` | 29 |
15-
| Studio Courses | `cadmin.urls` | 26 |
15+
| Studio Courses | `studio_courses.urls` | 26 |
1616
| Public courses | `courses.urls` | 25 |
1717
| **Total** | | **89** |
1818

1919
The compatibility API and Studio Courses rows below retain the complete adopted
20-
behavior; issue #115 changes the management adapter names and mount, not its logic.
20+
behavior. Issues #115 and #116 change the management mount, names, and package
21+
mechanically without changing its logic.
2122

2223
## Routes
2324

@@ -75,36 +76,36 @@ Mounted from `api.urls`.
7576

7677
### Studio Courses
7778

78-
Mounted from `cadmin.urls`.
79+
Mounted from `studio_courses.urls`.
7980

8081
| Route | Name | Callback |
8182
| --- | --- | --- |
82-
| `/studio/courses` | `studio_courses_course_list` | `cadmin.views.course_admin.course_list` |
83-
| `/studio/courses/campaigns/new/` | `studio_courses_campaign_create` | `cadmin.views.campaigns.campaign_create` |
84-
| `/studio/courses/campaigns/<slug:campaign_slug>/edit/` | `studio_courses_campaign_edit` | `cadmin.views.campaigns.campaign_edit` |
85-
| `/studio/courses/registrations/<slug:campaign_slug>/` | `studio_courses_campaign_registrations` | `cadmin.views.campaigns.campaign_registrations` |
86-
| `/studio/courses/datamailer/` | `studio_courses_datamailer_operations` | `cadmin.views.datamailer.datamailer_operations` |
87-
| `/studio/courses/datamailer/events/` | `studio_courses_datamailer_events` | `cadmin.views.datamailer.datamailer_events` |
88-
| `/studio/courses/cloudwatch/` | `studio_courses_cloudwatch_dashboard` | `cadmin.views.observability.cloudwatch_dashboard` |
89-
| `/studio/courses/<slug:course_slug>/` | `studio_courses_course` | `cadmin.views.course_admin.course_admin` |
90-
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/score` | `studio_courses_homework_score` | `cadmin.views.homework.homework_score` |
91-
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/rescore` | `studio_courses_homework_rescore` | `cadmin.views.homework.homework_rescore` |
92-
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/extend-deadline` | `studio_courses_homework_extend_deadline` | `cadmin.views.homework.homework_extend_deadline` |
93-
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/notify-scores` | `studio_courses_homework_notify_scores` | `cadmin.views.homework.homework_notify_scores` |
94-
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/save-answers` | `studio_courses_homework_save_answers` | `cadmin.views.homework.homework_save_answers` |
95-
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/set-correct-answers` | `studio_courses_homework_set_correct_answers` | `cadmin.views.homework.homework_set_correct_answers` |
96-
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/clear-correct-answers` | `studio_courses_homework_clear_correct_answers` | `cadmin.views.homework.homework_clear_correct_answers` |
97-
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/submissions` | `studio_courses_homework_submissions` | `cadmin.views.homework.homework_submissions` |
98-
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/submissions/<int:submission_id>/edit` | `studio_courses_homework_submission_edit` | `cadmin.views.homework.homework_submission_edit` |
99-
| `/studio/courses/<slug:course_slug>/project/<slug:project_slug>/assign-reviews` | `studio_courses_project_assign_reviews` | `cadmin.views.projects.project_assign_reviews` |
100-
| `/studio/courses/<slug:course_slug>/project/<slug:project_slug>/extend-deadline` | `studio_courses_project_extend_deadline` | `cadmin.views.projects.project_extend_deadline` |
101-
| `/studio/courses/<slug:course_slug>/project/<slug:project_slug>/score` | `studio_courses_project_score` | `cadmin.views.projects.project_score` |
102-
| `/studio/courses/<slug:course_slug>/project/<slug:project_slug>/submissions` | `studio_courses_project_submissions` | `cadmin.views.projects.project_submissions` |
103-
| `/studio/courses/<slug:course_slug>/project/<slug:project_slug>/submissions/<int:submission_id>/edit` | `studio_courses_project_submission_edit` | `cadmin.views.projects.project_submission_edit` |
104-
| `/studio/courses/<slug:course_slug>/enrollments/` | `studio_courses_enrollments` | `cadmin.views.enrollment.enrollments_list` |
105-
| `/studio/courses/<slug:course_slug>/leaderboard-complaints/` | `studio_courses_leaderboard_complaints` | `cadmin.views.enrollment.leaderboard_complaints` |
106-
| `/studio/courses/<slug:course_slug>/leaderboard-complaints/<int:complaint_id>/resolve` | `studio_courses_leaderboard_complaint_resolve` | `cadmin.views.enrollment.leaderboard_complaint_resolve` |
107-
| `/studio/courses/<slug:course_slug>/enrollment/<int:enrollment_id>/edit` | `studio_courses_enrollment_edit` | `cadmin.views.enrollment.enrollment_edit` |
83+
| `/studio/courses` | `studio_courses_course_list` | `studio_courses.views.course_admin.course_list` |
84+
| `/studio/courses/campaigns/new/` | `studio_courses_campaign_create` | `studio_courses.views.campaigns.campaign_create` |
85+
| `/studio/courses/campaigns/<slug:campaign_slug>/edit/` | `studio_courses_campaign_edit` | `studio_courses.views.campaigns.campaign_edit` |
86+
| `/studio/courses/registrations/<slug:campaign_slug>/` | `studio_courses_campaign_registrations` | `studio_courses.views.campaigns.campaign_registrations` |
87+
| `/studio/courses/datamailer/` | `studio_courses_datamailer_operations` | `studio_courses.views.datamailer.datamailer_operations` |
88+
| `/studio/courses/datamailer/events/` | `studio_courses_datamailer_events` | `studio_courses.views.datamailer.datamailer_events` |
89+
| `/studio/courses/cloudwatch/` | `studio_courses_cloudwatch_dashboard` | `studio_courses.views.observability.cloudwatch_dashboard` |
90+
| `/studio/courses/<slug:course_slug>/` | `studio_courses_course` | `studio_courses.views.course_admin.course_admin` |
91+
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/score` | `studio_courses_homework_score` | `studio_courses.views.homework.homework_score` |
92+
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/rescore` | `studio_courses_homework_rescore` | `studio_courses.views.homework.homework_rescore` |
93+
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/extend-deadline` | `studio_courses_homework_extend_deadline` | `studio_courses.views.homework.homework_extend_deadline` |
94+
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/notify-scores` | `studio_courses_homework_notify_scores` | `studio_courses.views.homework.homework_notify_scores` |
95+
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/save-answers` | `studio_courses_homework_save_answers` | `studio_courses.views.homework.homework_save_answers` |
96+
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/set-correct-answers` | `studio_courses_homework_set_correct_answers` | `studio_courses.views.homework.homework_set_correct_answers` |
97+
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/clear-correct-answers` | `studio_courses_homework_clear_correct_answers` | `studio_courses.views.homework.homework_clear_correct_answers` |
98+
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/submissions` | `studio_courses_homework_submissions` | `studio_courses.views.homework.homework_submissions` |
99+
| `/studio/courses/<slug:course_slug>/homework/<slug:homework_slug>/submissions/<int:submission_id>/edit` | `studio_courses_homework_submission_edit` | `studio_courses.views.homework.homework_submission_edit` |
100+
| `/studio/courses/<slug:course_slug>/project/<slug:project_slug>/assign-reviews` | `studio_courses_project_assign_reviews` | `studio_courses.views.projects.project_assign_reviews` |
101+
| `/studio/courses/<slug:course_slug>/project/<slug:project_slug>/extend-deadline` | `studio_courses_project_extend_deadline` | `studio_courses.views.projects.project_extend_deadline` |
102+
| `/studio/courses/<slug:course_slug>/project/<slug:project_slug>/score` | `studio_courses_project_score` | `studio_courses.views.projects.project_score` |
103+
| `/studio/courses/<slug:course_slug>/project/<slug:project_slug>/submissions` | `studio_courses_project_submissions` | `studio_courses.views.projects.project_submissions` |
104+
| `/studio/courses/<slug:course_slug>/project/<slug:project_slug>/submissions/<int:submission_id>/edit` | `studio_courses_project_submission_edit` | `studio_courses.views.projects.project_submission_edit` |
105+
| `/studio/courses/<slug:course_slug>/enrollments/` | `studio_courses_enrollments` | `studio_courses.views.enrollment.enrollments_list` |
106+
| `/studio/courses/<slug:course_slug>/leaderboard-complaints/` | `studio_courses_leaderboard_complaints` | `studio_courses.views.enrollment.leaderboard_complaints` |
107+
| `/studio/courses/<slug:course_slug>/leaderboard-complaints/<int:complaint_id>/resolve` | `studio_courses_leaderboard_complaint_resolve` | `studio_courses.views.enrollment.leaderboard_complaint_resolve` |
108+
| `/studio/courses/<slug:course_slug>/enrollment/<int:enrollment_id>/edit` | `studio_courses_enrollment_edit` | `studio_courses.views.enrollment.enrollment_edit` |
108109

109110
### Public courses
110111

@@ -165,7 +166,7 @@ Mounted from `courses.urls`.
165166
| --- | --- | --- |
166167
| `accounts` | `accounts` | `0001_initial, 0002_token, 0003_customuser_certificate_name, 0004_customuser_dark_mode, 0005_backfill_certificate_name_from_enrollment, 0006_customuser_country_customuser_region_and_more, 0007_customuser_email_deadline_reminders_and_more, 0008_customuser_email_course_updates, 0009_customuser_preferred_timezone, 0010_remove_customuser_email_course_updates_and_more, 0011_identity_expansion, 0012_backfill_normalized_identity` |
167168
| `api` | `api` | `none` |
168-
| `cadmin` | `cadmin` | `none` |
169+
| `studio_courses` | `studio_courses` | `none` |
169170
| `courses` | `courses` | `0001_initial, 0002_alter_enrollment_student, 0003_replace_commas_with_linebreaks_in_possible_answers, 0004_update_correct_answer_indexes, 0005_update_answers_with_indexes, 0006_course_first_homework_scored, 0007_enrollment_position_on_leaderboard, 0008_remove_answer_student, 0009_rename_comments_peerreview_problems_comments_and_more, 0010_remove_reviewcriteria_max_score, 0011_alter_enrollment_position_on_leaderboard, 0012_project_points_for_peer_review_and_more, 0013_remove_homework_is_scored_homework_state_and_more, 0014_alter_projectsubmission_github_link_and_more, 0015_enrollment_certificate_url, 0016_enrollment_about_me_enrollment_github_url_and_more, 0017_alter_projectsubmission_learning_in_public_links_and_more, 0018_course_finished, 0019_remove_homework_problems_comments_field_and_more, 0020_remove_project_points_to_pass_and_more, 0021_course_min_projects_to_pass, 0022_projectstatistics, 0023_course_visible, 0024_alter_question_question_type, 0025_add_wrapped_statistics, 0026_enrollment_disable_learning_in_public_and_more, 0027_homework_instructions_url_project_instructions_url_and_more, 0028_leaderboardcomplaint, 0029_enrollment_display_public_profile, 0030_remove_enrollment_profile_fields, 0031_merge_instruction_urls_and_profile_fields, 0032_course_end_date_course_registration_url_and_more, 0033_projectsubmission_faq_contribution_url_and_more, 0034_preserve_submission_timestamps, 0035_projectvote, 0036_projectsubmission_volunteer_review_only, 0037_registrationcampaign_courseregistration, 0038_alter_courseregistration_mailchimp_sync_status, 0039_remove_courseregistration_mailchimp_error_and_more, 0040_courseregistration_company_name` |
170171
| `data` | `data` | `0001_initial, 0002_datamaileroutboxevent, 0003_datamaileroutboxdispatchrun, 0004_datamailercontactevent_duplicate_count_and_more, 0005_datamailersendaudit` |
171172

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
path classification owner removal_gate
2+
_docs/adoption/course-platform/README.md adoption provenance courses Retain while the pinned CMP adoption baseline is authoritative.
3+
_docs/adoption/course-platform/cadmin-reference-allowlist.tsv adoption provenance courses Remove only after every listed compatibility and provenance reference reaches its recorded gate.
4+
_docs/adoption/course-platform/copied-files.tsv adoption provenance courses Retain while pinned source-to-destination checksum evidence is required.
5+
_docs/adoption/course-platform/integration-patches.md adoption provenance courses Retain while the mechanical rename and legacy adapter remain part of adoption history.
6+
_docs/adoption/course-platform/target-owned-compatibility-shims.tsv adoption provenance courses Remove adapter rows only after the legacy URL traffic gate is approved.
7+
_docs/adoption/course-platform/verification.md adoption provenance courses Retain while namespace-move and legacy-adapter verification evidence remains authoritative.
8+
_docs/compatibility/README.md legacy contract provenance seo Retain while pinned CMP routes remain an accepted source contract.
9+
_docs/compatibility/course-route-contracts.json legacy contract provenance seo Regenerate only after the pinned CMP source contract or approved canonical mapping changes.
10+
_docs/compatibility/legacy-manifest-differences.json legacy contract provenance seo Retain until the corresponding immutable compatibility capture is retired.
11+
_docs/compatibility/legacy-manifest.jsonl legacy contract provenance seo Retain until the corresponding immutable compatibility capture is retired.
12+
_docs/compatibility/machine-contract-samples.json legacy contract provenance seo Remove legacy samples only after observed traffic and the course-host cutover gate approve removal.
13+
_docs/compatibility/public-contracts.jsonl legacy contract provenance seo Remove legacy contracts only after observed traffic and the course-host cutover gate approve removal.
14+
_docs/planning/guideline.md historical specification product Retain until the planning source is superseded and its provenance is archived.
15+
_docs/planning/wiki/sources/dtc-course-platform.md historical specification product Retain while the CMP planning source remains part of the evidence wiki.
16+
_docs/specs/02-url-link-seo-compatibility.md historical specification seo Remove legacy route language only after the approved compatibility retirement gate.
17+
_docs/specs/04-courses-and-cohorts.md historical specification courses Retain source-workflow language and legacy route requirements until course migration completes.
18+
_docs/specs/06-studio-and-admin-api.md historical specification admin Remove legacy route language only after Studio and admin API production parity and traffic gates pass.
19+
_docs/specs/10-verification-strategy.md historical specification testing Remove legacy-route coverage only after the owning compatibility gate approves it.
20+
cadmin/__init__.py legacy URL adapter courses Delete with the adapter after the owner approves the no-traffic and rollback-window gate.
21+
cadmin/legacy_urls.py legacy URL adapter courses Delete after observed legacy traffic is zero for the approved window and rollback no longer requires it.
22+
compatibility/contracts.py legacy contract adapter seo Remove legacy mapping only after pinned source contracts and observed traffic approve retirement.
23+
compatibility/source_config.py legacy contract adapter seo Remove legacy source routes only after the course-host compatibility gate passes.
24+
compatibility/tests/test_baseline.py legacy contract test testing Remove with the exact source-contract mapping after its retirement gate passes.
25+
compatibility/tests/test_crawler.py legacy contract test testing Remove with the legacy redirect crawler scenario after its traffic gate passes.
26+
core/middleware.py legacy URL adapter courses Remove the private-route classification only when the legacy route adapter is deleted.
27+
core/tests/test_course_platform_adoption.py adoption provenance test courses Retain while the exact source-to-destination and reviewed-reference inventories are enforced.
28+
core/tests/test_development_seo.py legacy contract test seo Remove the noindex/private assertions only when the legacy route adapter is deleted.
29+
course_management/urls.py legacy URL adapter courses Remove the source-project compatibility mount when no characterization uses the wrapper and the traffic gate passes.
30+
playwright_tests/test_accessibility.py legacy contract test accessibility Remove the redirect accessibility scenario only when the legacy route adapter is deleted.
31+
review_import/tests/test_workflow.py legacy contract test courses Remove the offline legacy browsing probes only when the legacy route adapter is deleted.
32+
scripts/build_legacy_manifest.py legacy contract tooling seo Remove legacy route generation only after its compatibility artifacts are retired.
33+
scripts/build_pinned_legacy_sources.py adoption provenance courses Retain pinned source mapping while the CMP adoption ledger remains authoritative.
34+
scripts/verify_course_platform_adoption.py adoption provenance courses Retain the source-root mapping while pinned CMP checksums are verified.
35+
studio_courses/tests/test_studio_course_routes.py legacy contract test courses Remove literal redirect and legacy-name denial checks only when the adapter is deleted.
36+
website/urls.py legacy URL adapter courses Remove the two legacy mounts only after the owner-approved no-traffic and rollback-window gate.

0 commit comments

Comments
 (0)