Ba repo: conanplatform, conan-web, conan-content (16-17.10.2026)
Trạng thái (16.10.2026): đã quyết, chưa cắt. PR "Tách repo: gỡ www.conan.school khỏi conanplatform (chờ ngày cắt)" là bản nháp, chỉ gộp đúng ngày cắt theo thứ tự ở dưới. Cho tới lúc đó www vẫn build và deploy từ repo này.
Ngày 16.10.2026 chủ repo quyết định tách monorepo. Đây không phải kế hoạch tách repo cách 3 (tách vệ tinh, giữ lõi): ở đây www, site công khai, rời lõi để đi cùng bộ CMS mới của nó.
Cái gì ở đâu
| Repo | Chứa |
|---|---|
dac2205/conanplatform | api.conan.school, tokyo (com.conan.school/), docs.conan.school, admin.conan.school, admin-router, mam, video, video2, play, studio, media, content, webai, aimaster, kudo, conan-tool-plane, packages/ |
dac2205/conan-web | www.conan.school/ (React Router 7 SSR, Pages ww3-conan-school), edge worker conan-www-stale-asset-bridge (www.conan.school/edge-hotfix/), cms.conan.school, api-cms.conan.school, cms-docs.conan.school |
dac2205/conan-content (từ 17.10.2026) | nguồn nội dung soạn tay content/{books,courses,jtbd,playbooks,playbook-plan,forum,library,brands,personas}, bộ biên dịch compilers/, bản lưu mọi migration đã áp migrations-archive/. Không deploy gì: migration mới vẫn vào conanplatform/api.conan.school/migrations/ và CI của conanplatform áp. Chi tiết: repo-slim bước 2 |
Lịch sử của www được mang sang bằng git filter-repo. Luật của www (bề ngang, SEO, song ngữ, đo lường phía www) và hai skill seo-www, i18n-www bản đầy đủ nằm ở conan-web; ở repo này còn bản rút gọn trỏ sang đó.
Thư mục ở máy
~/ConanCode/conan-school/
├── conan-content/ repo conan-content (nội dung + bản lưu migration)
├── conan-web/ repo conan-web
└── conanplatform bản clone thật (từ 17.10.2026, sau khi viết lại lịch sử)Gác và test của các bên tìm nhau qua đường dẫn anh em này: conan-web đọc ../conanplatform (API_REPO_DIR), conan-content đọc ../conanplatform (CONANPLATFORM_DIR), conanplatform đọc conan-content qua scripts/lib/archived-migrations.mjs (contentRepoDir()) và api.conan.school/scripts/content_repo.py (CONAN_CONTENT_REPO; thử ../conan-content, ../conan-school/conan-content, ../../conan-content cho worktree ở conan-school/.worktrees/). Ở CI không có repo kia, nên những phép so chéo đó chỉ chạy ở máy: chạy gác ở máy có đủ các repo trước khi gộp một PR chạm ranh giới.
Hai repo nói chuyện chỉ qua HTTP
www gọi api.conan.school/api/public/* như mọi khách khác, và api-cms.conan.school/public/* cho nội dung CMS. Không import mã chéo repo, không đọc D1 của nhau. api.conan.school không đổi gì vì cuộc tách này.
Ràng buộc chéo phải tự nhớ
Mỗi dòng dưới đây là một chỗ hai repo phải khớp nhau mà CI của một bên không thấy bên kia.
| Ràng buộc | Nguồn | Bản chép / bên dùng | Gác |
|---|---|---|---|
| Migration đã lưu trữ | conanplatform/api.conan.school/migrations/ARCHIVED.tsv | conan-content/migrations-archive/ | archived-migrations ở conanplatform so sha256 từng dòng khi thấy conan-content; CI bỏ qua thành tiếng |
| Nội dung soạn tay ra migration | conan-content/content/ + compilers/ | migration mới ở conanplatform/api.conan.school/migrations/ | Hai PR, nguồn gộp trước. check:jtbd bên kia so Set với migration của cả hai repo ở máy |
| Bộ vẽ đọc nội dung | conan-content/content/{books,courses} | book_art.py, book_illustrations.ts, course_art_to_sql.py... ở conanplatform | Dừng rõ ràng khi không thấy repo kia (content_repo.py) |
| Token màu, chữ | conanplatform/packages/design-system/theme.css | conan-web/packages/design-system/theme.css | check:design-system-sync ở conan-web, so qua thư mục anh em. Đổi token thì chép trong cùng ngày. |
Hợp đồng API (packages/api-contract) | conanplatform | loader www (fetchContract) | Chưa có. CI ở đây không còn build www, nên sửa một schema www đọc thì PR hai bên cùng ngày. |
Đường dẫn /api/public/* mà www gọi | router api ở conanplatform | check-seo.mjs ở conan-web | Chỉ chạy ở máy có cả hai repo (API_REPO_DIR); CI bên kia bỏ qua kèm cảnh báo. |
| Danh sách trang www | conan-web/www.conan.school/app/routes.ts (mảng PAGES) | api.conan.school/tests/fixtures/www-pages.json (test email kiểm link www trong thư) | npm run test:orchestrator so bản chép với router thật khi thấy repo anh em (CONAN_WEB_DIR). |
| Số Hero Banner | scripts/hero_banner_svg.py (sang conan-web) | HERO_BANNER_COUNT ở api.conan.school/src/shared/heroBanners.ts | Chưa có. |
| What's New hằng tuần | PR của cả hai repo | scripts/whats-new-draft.mjs ở đây | Script đọc lịch sử conan-web khi thấy nó, khoá web-pr-<số>; không thấy thì cảnh báo "THIẾU mọi PR của www". |
| Sổ lỗi Cloudflare | scripts/error-ledger.mjs cloudflare quét cả zone conan.school | lỗi của host www | Lỗi runtime của www vẫn mở issue ở repo này cho tới khi conan-web có sổ riêng. |
Thứ tự cắt
- CI của conan-web xanh, và các deploy riêng của nó (cms, api-cms, cms-docs) đã kiểm trên production.
- Nhập lại lịch sử www mới nhất từ conanplatform vào conan-web (filter-repo lần nữa, hoặc chép các commit từ lần nhập trước). Bản trong conan-web ngày 16.10.2026 cũ hơn main: thiếu ít nhất
/fast-courses, và www trên main đã importpackages/observability(Sentry) vàpackages/api-contract, hai gói conan-web chưa có bản chép. Build www bên đó phải xanh với bản mới. - Gộp PR gỡ www ở repo này, và trong cùng mấy phút đặt biến repo
WWW_DEPLOY_FROM_THIS_REPO=trueở conan-web. Không sớm hơn: hai repo cùng deploy một Pages project là hai bản đua nhau lên production. - Kiểm www deploy từ conan-web: lượt
deploy-wwwbên đó xanh, production phục vụ đúng bộ asset của bản vừa deploy, headerX-Conan-Releasecủa bridge bằng SHA của lượt deploy bridge.
Repo này đổi gì khi gộp PR cắt
- Gỡ
www.conan.school/,.github/workflows/deploy-www.yml,deploy-edge-bridge.yml. - CI: gỡ job
wwwkhỏici-checks.ymlvà luật của nó khỏiscripts/ci/select-jobs.mjs(mẫu tự kiểm đổi sang jobcom); gỡ hai workflow khỏierror-ledger.yml. - Gác: gỡ
check-seo.mjs(sang conan-web) khỏirun-guards.mjsvàpackage.json;check-analyticschỉ còn soi tokyo và đỏ khi một thư mục trong danh sách không tồn tại;check-sentryđếm bốn app; gỡ khoáwww.conan.schoolkhỏi mốccolor-token-baseline.json,emoji-icon-baseline.json,qc-metrics-baseline.json(chỉ hạ, không nâng). smoke-production.mjs: gỡ mục tiêu www và edge bridge cùng các hàm chỉ chúng dùng.- Script gỡ vì thuộc www (phải có mặt ở conan-web trước khi cắt):
check-seo.mjs,check-seoquake.mjs,audit-www-pages.mjs,audit-www-mobile.mjs,hero_banner_svg.py. - Test email đọc danh sách trang www từ
tests/fixtures/www-pages.jsonthay vì router của www.
Chưa có ở conan-web lúc soạn PR cắt
Những thứ repo này từng gác cho www mà conan-web chưa có bản tương ứng (16.10.2026): gác đo lường (check-analytics, khai trùng container, PII trong dataLayer), gác Sentry, bước kiểm production sau deploy cho www và bridge (trang có ruột, sitemap, robots, khoá i18n lộ, X-Conan-Release), bốn script ở mục trên trừ check-seo.mjs, và bản chép packages/observability, packages/api-contract. Thiếu chúng thì www vẫn deploy xanh, chỉ là không còn gì nhìn vào nó.
Xem thêm: Giảm dung lượng repo (cùng ngày, ba bước), known-risks, CI và gác, SEO của www (lịch sử), Song ngữ ở www (lịch sử).