DataTalksClub / DataTalksClub/website
Reconcile the current-main CMP adoption ledger before upstream sync
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 0
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
Parent/reference: #145 (closed controlled CMP synchronization)
Consumer/related: #290 (static Datamailer source inventory), #50 (Datamailer retirement and Relay purpose wiring)
Product outcome
Restore one truthful, deterministic adoption ledger for the adopted Course Management Platform before any future CMP source synchronization. The ledger must describe the exact reviewed target tree and its intentional target-owned overlays, while keeping the current CMP pin unchanged. A no-op sync against that pin must be an accepted, repeatable proof rather than a blocked or silently regenerated report.
This is a source/adoption-evidence repair. It does not adopt the current CMP main, copy its campaign changes, or authorize any runtime, provider, migration, or deployment behavior.
Evidence boundary
- Website authority for this audit:
origin/mainface8e4808d65afbf0374d1ced7a88079950d663, treec8496fb2a37529eb7c63e1eeb9e35e29a2aadada. - The active shared current-main-derived worktree is
redesign-iterationsff30774e9cde310a24abf61229c22cbd5a811186, tree62e1656881aa7f9de8ab703c14f5a29049c2097d. Its three additional local design edits are identified below; they must not be silently promoted to websitemainby this issue. - Website source pin remains CMP
98a235283904b4ef9ad29e196298540756cf1bcc(source-pin.jsonSHA-25671145a6b28ed0ea89e984b9c6bda5151549d3597d37c75d4c6b369ef4fbaf1b3). The copied-files ledger SHA-256 is31a0ef0439b68477b905d9d084bfe9c0998dd8a7168ee3c99bc98d72542ea6e2; the integration-patched-files ledger SHA-256 isdb285bab70aef0035235b68e17e63be55e4c133cfe514e0bd9026e2b76ac6c95. - CMP
mainwas independently audited at6d3cc0e0e0b9a1d28be1a8d53209555269e1d3fe, tree45f1f8e2548b25e3ef89d44b2370efbb647ff088, parente49c575ce3f567cc14a8f66a89d3ccaca3bfe2f4. This issue does not move the website pin to it. - The current sync dry-run fails closed on the first stale overlay row (
accounts/templates/accounts/login.html); it must not be made green by ignoring the ledger or by running--apply.
Exact 15-row mismatch inventory
The current-main-derived audit compared each target overlay byte/size with the recorded integration-patched-files.tsv row. The observed set is exactly these 15 rows. Thirteen rows are already divergent on the authoritative face8e4 tree; the three rows marked redesign-only exist only in the unmerged local ff30774 worktree. The engineer must freeze the final accepted target identity before editing any ledger and preserve that distinction.
| destination | recorded bytes / SHA-256 | observed bytes / SHA-256 | source |
|---|---|---|---|
accounts/templates/accounts/login.html |
2923 / 5adbd00244ed6229086681516829697165b1373679a6de95136561e956c81b04 |
2940 / 531514cb41b8323f743af88201d9ea6b67cbaceb180e2bdce730f9ba9ebe8e07 |
face8e4 |
accounts/views/login.py |
6194 / 55dfc487be5e9fe00692b1c5b0c081b5d13e577f02b9f9dcce4c6f7ffd162c62 |
6251 / 23254ef15aefdc971e88379521bebecc932c10ead95080f45b5729ed43a08fba |
face8e4 |
courses/registration.py |
4988 / 4728a96c0106ef54b1644f16766ea8f4a3b4e9a52057a3ea3e3e000d2b005204 |
6221 / 60cd215bd6aa67e0cb441cf1a98e074c29ebc1779002d3857965e78bfe8c7517 |
redesign-only |
courses/templates/courses/course_list.html |
20395 / 5d08f07d4ab9064aeb906cb9435f0b287cae248b9f5affda7e9eae82fe126854 |
20428 / c406b4ca288a398f45030fb4032acaed43bbc3f46c03953f7b0673970b69dd72 |
face8e4 |
courses/templates/courses/dashboard.html |
21030 / 86fbb37b894ed50043d1e57dafeea0ea1a0833c100ea1b323faf8ae31e300122 |
23080 / 2bf2e39f0387bbba530421174a77ab718bd93c188c52e0d600f58b677c4d3f70 |
redesign-only |
courses/templates/courses/enrollment.html |
12012 / d0c11d76e714d789b9aca8921bde550ba7ee3685eb1683090bee17db5d5aa97b |
12046 / a63afcf108030c3e0018ffb8a93b824382c1c365991bebd14944352b03084669 |
face8e4 |
courses/templates/courses/leaderboard_score_breakdown.html |
17594 / f95e13c740a224cb6d793eb2b97e0ab82bdd2cf1d5f03d33da3ad200f636cb6d |
17679 / f1b4101fdd1a37a0bcce462453fd2dad220c63f30aec49416f78f98a0b20cd16 |
face8e4 |
courses/templates/courses/register.html |
20288 / 11e7b6438e3ad00f3dd236ec77ba318869e6e31b1ea9473f078326b66cdf2d5c |
20305 / 53f08c7fcb0885aea4bd1e7495ddc06873b6f45a41d6a962cc13c81bf8d7ddcf |
face8e4 |
courses/templates/projects/eval.html |
6335 / 82b2b541c17aea908d5c329d40de1d3b6be7acb554444f237e18d165cbeb1747 |
6369 / 26c799672e9b6fe9a81b204514cc051c3be2ce1adcb8697a5c12697278f6af96 |
face8e4 |
courses/templates/projects/list.html |
12065 / 2ce06f1fcdfa4049d18edd2faf092948bb888c8dac8ec40ed99cc51bc6fbcc25 |
12184 / de31659cc7b34ffca680e9210d75b6fda3c6eca684fecbd5c4a9a3cfe270b59c |
face8e4 |
courses/templates/projects/list_all.html |
5004 / 77dc3a8c320a57da2e93a3f82bace8d9700ae031a06053621ae569ccde0d5ac2 |
5021 / f85cbb0c1afc0ab3c72edd1ecf8406e13d0d15018b5b6dc2054b7a1235222328 |
face8e4 |
courses/templates/projects/results.html |
7549 / 9335a10a0988b7bd9b21d73439f412aea5afa43ba486d5cd0e8c059bf5b25cc6 |
7600 / b1203097d353e61f4c24ac28c94164b1623fd42b83e746308a3ebda2ca575f5b |
face8e4 |
courses/templates/projects/submissions.html |
6763 / ae283afbf471711dcec6332464d99b214f45fe97032ac8854682010b9a69dfb9 |
6780 / 02d1cc0d2553efdb64fb1fd737d0ca39500fd7ff6b52ea7e3d28a3ff521d762b |
face8e4 |
courses/tests/test_dashboard.py |
1379 / 563c875b43314b8e6862e7c0f578950e265c91ef014efa52c0135fe8148b91da |
2185 / 2785f875ddae8f77172e2deaaf412381bfbdd32d4f7a96e150e96d8737dc6314 |
redesign-only |
courses/tests/test_dashboard_integration.py |
7214 / 8a1a98a29bc1192cab48a176363f0b3f80e9319d7b3b03271e989362e094d5e5 |
7283 / 4f8c907ecacf175a8fe33a5e06180ebb1930799f41443a0cef014bdff1b1c6a4 |
face8e4 |
Scope
- Freeze one exact website base/tree accepted by the orchestrator; do not infer that the local redesign worktree is
main. - Reconcile only the listed adoption/overlay rows, with a row-level reason and source/target ownership for each.
- Keep the CMP source pin at
98a235283904b4ef9ad29e196298540756cf1bccand preserve the existing#145mapping, deletion, migration, and overlay guards. - Refresh only the necessary versioned adoption evidence and the deterministic report/manifest values required by the chosen target identity.
- Record the exact final target commit/tree, source pin, copied-files digest, patched-files digest, row inventory, and no-op report digest in the engineer/tester handoffs.
Explicit non-goals
- No source-pin update to CMP
6d3cc0eor any other moving ref. - No
sync_course_platform.py --apply, source copy, migration rewrite/squash, runtime behavior, template behavior, API/Studio change, Datamailer/Relay operation, provider/network call, protected-data access, CI rerun, commit, push, merge, or deployment in this issue. - Do not absorb the three unmerged redesign-only rows into
origin/mainor overwrite user work. - Do not use this issue to decide or implement EmailCampaign/campaign queue/from_email behavior; that is the separate decision issue linked from #50.
Dependencies and ownership
- #145 is the completed synchronization procedure and guard authority; do not reopen it.
- #290 consumes a truthful adoption ledger and must not be accepted from the stale
face8e4evidence until this reconciliation is complete. - #50 consumes #290's later source inventory but owns no ledger rewrite here.
- The future CMP campaign decision is intentionally separate from this evidence repair and from #149's four system-evaluation/peer-task/score/notification behavior packets.
Acceptance criteria
- PM records and freezes one exact target commit/tree; the 15-row inventory is reclassified against that identity, with every row accounted for exactly once and no local-only edit silently promoted.
- The adoption manifests record the actual target-owned overlay bytes for every intentional row, retain the pinned CMP source bytes/provenance, and contain no unreviewed path, duplicate, omission, or migration replacement.
-
uv run --frozen python scripts/verify_course_platform_adoption.pypasses against a clean checkout at CMP98a235283904b4ef9ad29e196298540756cf1bcc. - A fresh no-op
uv run --frozen python scripts/sync_course_platform.py --source-ref 98a235283904b4ef9ad29e196298540756cf1bcc --source-checkout <clean-checkout> --report <redacted-report> --dry-runreturnsstatus=no_change, records the exact pinned/requested SHA, and reports zero changed, copy, conflict, and fatal paths without mutating tracked files. -
make migrations-check, adoption-focused tests, format/lint/type checks, and the verification plan selected for the changed evidence pass; the report classifies every component exactly once and documents screenshots as not applicable only if the graph proves no render inputs changed. - Independent tester recomputes the plan from the frozen target identity, verifies the manifest/no-op report and every acceptance criterion, and posts a tester-final report before PM acceptance.
- PM posts
ACCEPTonly after the independent tester pass; the eventual focused commit usesRefs #297and the orchestrator performs the normal local no-ff merge/push lifecycle.
Browser/test scenarios
This is non-rendering evidence work, so product screenshots are not applicable when the recomputed plan proves render inputs unchanged. The tester still runs the graph-selected repository-local tier and checks that the no-op sync/verifier cannot alter a rendered route. No provider, external CMP operation, or production browser session is permitted.
- Run the no-op sync twice against a clean checkout of the pinned CMP commit; both reports and all tracked target bytes are identical.
- Introduce a synthetic stale row, missing row, duplicate, wrong hash/size, source-pin drift, or dirty source checkout in an isolated fixture; the verifier fails closed with a bounded reason and no target mutation.
- Confirm the final adopted course and account route manifests remain navigable/read-only under the existing target identity; no campaign or Relay behavior is exercised.
Required lifecycle
The candidate remains uncommitted after engineering. The independent tester must capture exact base/head/tree and report/artifact digests, then PM accepts or returns it. No source sync, deployment, or upstream CMP adoption is implied by a green no-op.
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
Start by reading scripts/verify_course_platform_adoption.py and scripts/sync_course_platform.py, then freeze the accepted website commit/tree rather than using the redesign worktree. Reconcile the listed adoption rows and refresh only the required evidence. Done means verification passes and two dry runs against the pinned CMP commit return identical status=no_change reports without changing tracked files.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- git, python
- Domain
- devops, tooling
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100