Sub-modules phase C: module page and cohort-flow rendering
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 45/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 領域
- backend, frontend, testing-qa
調査の方向性
docs/planning/shared-curriculum-submodules-design.md を読み、続いて phase B の fixture と、一覧にある views、templates、services、flow entry points を調査します。grouped module rendering、anchored homework、flow items、breadcrumbs、inventory、syllabus counts、sitemap output のカバレッジを追加する前に、対象の Django テストを実行します。flat modules が byte-identical のまま維持され、split modules が正しくレンダリングされて anchors を正しく報告し、Django、full、Playwright のチェックに合格すれば完了です。
索引モデルが issue の本文から書いたものです。
説明
Part of the shared-curriculum sub-modules umbrella (#396), phase C of 4. Depends on #398 (phase B importer). Full design: _docs/planning/shared-curriculum-submodules-design.md, "Constraints and what the renderers must know" section.
Goal
Module pages, the cohort curriculum flow, the homework breadcrumb, and the shared-curriculum inventory correctly render/report sub-module structure and per-anchor homework placement, when present. Flat modules (the common case, zero sub-modules) must render byte-identical to today.
Scope
courses/views/shared_course.py(module page view) andcourses/templates/courses/shared_module.html/_shared_module_rail.html: when a module has sub-modules, group its lesson list by sub-module in order (each group gets a heading with a fragment anchor, not its own route/URL — confirmed in the design doc as sufficient for now); after each sub-module's lesson group, render that sub-module's anchored homework link if one exists; after the last group (or immediately, for a flat module), render the module-anchored homework link if one exists. A flat module (no sub-modules) renders exactly as today — verify with a snapshot/diff test.courses/services/curriculum_flow.py_shared_flow: unchanged loop shape (oneModuleFlowItemper placement, ordered by placement position).ModuleFlowItemgains an optionalsub_module, so the cohort page can title an entry "Module 1 · Part 2: Agents" when anchored to a part. A module with two anchored homeworks (a module-level and a part-level, if that ever occurs) correctly yields two flow entries.courses/views/homework_context.py: the shared-curriculum breadcrumb resolveshomework.shared_module_placementsto its anchor and links the module page, including the sub-module's fragment anchor when the homework is anchored to a part.courses/services/shared_curriculum_inventory.py: addsub_module_slugto each placement row in the reconciliation report.- Confirm (per the design doc's explicit check) that
courses/views/course_page_context.py:349(family syllabus module count) andcontent/public_views.py:1296(sitemap) need NO changes — both are root-SharedModule-only by construction and must stay that way (add a regression test asserting a split module still counts as one module in the family syllabus count and produces one sitemap entry, not one per sub-module).
Non-goals
- No
zoomcamp-ops/course-repository changes (phase D). - No sub-module standalone pages/routes (explicitly deferred per the design doc's open question 3 — fragment anchors on the existing module page only).
- No change to
courses/views/dashboard_homeworks.py(confirmed in the design doc: it's keyed purely onHomeworkrows and never reads placements, so it needs no change — verify this holds, don't change it speculatively).
Dependencies
- Depends on: #398.
- Blocks: #399 (phase D) only in the sense that phase D's rollout order requires B+C deployed before the checker pin updates; phase D's own repository-side work can be scoped/started independently.
Acceptance criteria
Django and integration
-
make django-checkpasses;make testpasses. - New rendering tests using the phase B fixture: a split module's page groups lessons correctly, shows the right homework link after each anchor, fragment anchors resolve; a flat module's page is byte-identical to its pre-phase-C rendering (regression guard).
-
ModuleFlowItem.sub_modulerenders correctly in the cohort page's flow list for both anchor types. - Family syllabus module count and sitemap entry count are unaffected by a split module (both stay root-only).
- Inventory report includes
sub_module_slugfor anchored placements and isnull/absent for module-level placements.
Browser
-
make test-playwright-corepasses. - Screenshot verification: a split-module page (using the phase B fixture data seeded into a local dev DB) renders sensibly at desktop and mobile, light and dark, with clear visual grouping between parts.
- 主要言語
- Python
- スター
- 0
- フォーク
- 0
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートなし
- コントリビューションガイドなし
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
DataTalksClub/website のほかの issue
-
bug infra operations P1 testing
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
DataTalksClub/website#329 ·
-
bug content data-migration documentation events operations P1
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
DataTalksClub/website#327 ·
-
bug frontend P0 testing
難易度 2/5 1〜3時間 初心者へのやさしさ 90/100
DataTalksClub/website#300 · コメント 7 件 ·
-
bug data-migration events P0 testing
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
DataTalksClub/website#295 · コメント 6 件 ·
-
admin courses data-migration email enhancement integration operations P1
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
DataTalksClub/website#468 · コメント 6 件 ·
DataTalksClub/website の issue をすべて見る
似ている issue
-
`image_generation`: `max_retries` is ignored for OpenAI-compatible providers (always 2 retries)対応中かも @ericz7900 が今日担当しました。 オープンllm translation
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
rheeloaded/paperpull#117 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 65/100
agenda-tech-brasil/agenda-tech-brasil#1619 · コメント 1 件 ·
-
process
難易度 1/5 1〜3時間 初心者へのやさしさ 76/100
pyrite-wiki/pyrite#1036 ·
メンテナーはふだん 1 日以内に返信