Skip to content

Rà soát tài liệu và kiến trúc: 03.09.2026 ​

Phạm vi: toàn bộ tài liệu (docs.conan.school/, CLAUDE.md, AGENTS.md, .agent/, .claude/skills/, .claude/memory/, docs/ cũ, website-standards/) và kiến trúc vận hành (13 workflow deploy, cấu hình wrangler của 12 app, script gác ở gốc, đường ống migration D1, router và bảo mật của api.conan.school). Cách làm: đọc hết, grep từng đường dẫn / route / hằng số được nêu trong tài liệu để đối chiếu với mã, và kiểm chứng trạng thái deploy bằng gh run list. Không sửa production, không chạy lệnh ghi.

Các mục "Đã sửa" ở cuối trang trỏ tới PR #30. Mục nào chưa sửa được bằng mã thì ghi rõ ai phải làm.

Kết luận chính ​

  1. API production đứng ở bản 01.09.2026 và không ai đo. deploy-api đỏ ở cả ba lần push kể từ 02.09 (lỗi 7403 ở bước áp migration: token CI thiếu D1 → Edit). Vì migration chạy trước deploy trong cùng job, một bước đỏ chặn luôn deploy. Ba PR đã merge (#7 Ran, #27 cộng đồng, #28 nội dung cộng đồng) chưa từng lên api, trong khi tokyo/www/docs vẫn ship, đó chính là nguồn của sự cố /api/events 404 hôm 03.09. Chi tiết và cách kiểm: [Sổ rủi ro](../curriculum/known-risks#token-thieu-d1-edit-khong-chi-lam-ci-đo-, -no-đong-bang-ca-deploy-va-khong-ai-đo).
  2. Bốn lớp hướng dẫn agent nói bốn điều khác nhau. CLAUDE.md (nguồn sự thật), AGENTS.md (Codex, 08.08), docs/CODEX_WORKING_AGREEMENT.md (758 dòng, 09.08) và .agent/ (Antigravity) mâu thuẫn nhau ở ba luật nền: deploy (CI vs "deploy mặc định"), UI (shadcn/React vs "cấm React/VitePress"), và dữ liệu (D1 vs Supabase). Skill và memory cũng còn hơn hai mươi chỗ nói "áp migration tay" hoặc "agent không được viết nội dung".
  3. Bảo mật có ba lỗ thật: file .dev.vars với ba khoá thật được git theo dõi; webhook thanh toán kích hoạt membership mà không xác thực; đường lấy lịch sử chat không kiểm chủ sở hữu. Và tường phí cộng đồng bị bỏ qua trên đúng đường giao diện đang dùng: route learn-overview mà trang học ở tokyo gọi không kiểm communityTier.
  4. Gác không chạy thì không phải gác. Ba script scripts/check-*.mjs không được job CI nào gọi; check-ui-standards đỏ ngay trên theme.css của design system mà không ai thấy; check-vite-only gác một luật đã bị thay. Bốn job deploy đỏ thường trực từ tháng 8 (admin-router, play ×2, mentors).
  5. Tài liệu cổng đúng về cấu trúc (0 trang mồ côi, 0 link chết) nhưng lệch về nội dung: 18 anchor sai slug, bốn "chuẩn" cấu trúc khoá học không tương thích, ba nghĩa của chữ "community", hai mô hình quyền lợi (trial 7 ngày vs Pro theo cộng đồng), và một hằng số đã xoá (MAX_TOKENS_CEILING) còn được dẫn ở ba chỗ.

P0: việc chỉ chủ repo làm được ​

#ViệcVì saoCách kiểm sau khi làm
P0-1✅ Xong 04.09 00:10, thêm D1 Edit + Vectorize Edit (+ Zone Workers Routes Edit) vào token đang có qua dashboard, secret GitHub giữ nguyêndeploy-api đỏ từ 02.09; production api đóng băngRerun xanh: sổ tạo, 164 file ghi mốc nền, 11 migration áp; /api/events hết 404 (400 thiếu tham số); /api/public/membership/plans trả dữ liệu
P0-2Xoay RESEND_API_KEY, MIXPANEL_TOKEN, CRON_SECRETapi.conan.school/.dev.vars từng nằm trong git, lịch sử vẫn giữ giá trị cũ dù PR #30 đã gỡ file khỏi indexKhoá cũ bị thu hồi ở Resend/Mixpanel
P0-3Quyết định có xoá lịch sử .dev.vars (filter-repo + force-push) hay chấp nhận sau khi xoay khoáForce-push là việc phá huỷ, không tự làm,
P0-4Đặt PAYMENT_WEBHOOK_SECRET ở Worker api và ở SePay (API key webhook)Webhook đang nhận mọi lượt gọi; mã mới chỉ chặn khi secret đã đặtLog không còn dòng "PAYMENT_WEBHOOK_SECRET chưa đặt"
P0-5✅ Xong cùng P0-1 (Workers Routes Edit, mọi zone)Hai job đỏ từ 08.08deploy-admin-router, deploy-play xanh lần đầu từ tháng 8
P0-6✅ kahoot-frontend là đúng, deploy-play xanh sau khi có zone token,,

1. Triển khai và CI/CD ​

Bản đồ app → workflow → đích ​

AppWorkflowLoạiĐích CloudflareTrạng thái lần chạy gần nhất
api.conan.schooldeploy-apiWorkerapi-conan-schoolđỏ từ 02.09 (7403 ở migration)
com.conan.school (tokyo)deploy-comPagesconan-comxanh
www.conan.schooldeploy-wwwPagesww3-conan-schoolxanh
admin.conan.schooldeploy-adminPagesadmin-conan-schoolxanh
mam / video / docsdeploy-mam / -video / -docsPagesmam-conan-school, video-conan-school, docs-conan-schoolxanh
conan-tool-planedeploy-tool-plane (+ provision, smoke-test)Workerconan-tool-plane, domain mcp.conan.schoolxanh
mentors.conan.schooldeploy-mentorsWorker (vinext deploy)tên sinh lúc build, không có trong repođỏ (lần duy nhất 11.08)
play frontend / backenddeploy-playPages + Worker routekahoot-frontend / kahoot-backendđỏ mọi lần
admin-routerdeploy-admin-routerWorker routeadmin.conan.school/*đỏ từ 08.08 (zone token)
www/edge-hotfix, com/compat-redirectkhông cóWorkerconan-www-stale-asset-bridge, conan-member-domain-compatsửa hai worker này chỉ kích deploy Pages của site mẹ
packages/design-system, packages/course-standardkhông nằm trong path filter nào,,đổi token màu không deploy site nào; đổi chuẩn không deploy api (api file:-phụ thuộc)
feature-executorkhông (Node, ghi rõ ở README),,,

Phát hiện ​

  • Không workflow deploy nào có concurrency. Hai lượt api hôm 03.09 chạy cách nhau 5 phút và chồng nhau; khi token được sửa, chúng sẽ đua nhau ghi sổ schema_migrations và đua thứ tự upload Worker.
  • Ba script gác ở gốc không được job nào chạy (ci-checks.yml chỉ build api/admin/com/www; root npm test không được gọi). check-ui-standards đỏ trên theme.css:88 (Arial, Helvetica, sans-serif bị coi là sai) và ghim đúng một bản (tailwindcss 4.3.3), trái luật "luôn bản mới nhất". check-vite-only cấm React trong khi CLAUDE.md bắt buộc shadcn/ui; 39/48 mục trong danh sách miễn trừ là app đã rời repo.
  • npm ci --legacy-peer-deps || npm install --legacy-peer-deps ở cả _deploy-cloudflare.yml và ci-checks.yml: lockfile lệch thì âm thầm cài bản không ghim vào production.
  • scripts/apply-d1-migrations.mjs: (a) file mới nào có tên sắp xếp <= mốc nền (0084_… chẳng hạn) bị ghi sổ là "đã áp" mà không chạy, 94 file còn theo kiểu 00xx_; (b) query() nuốt lỗi parse JSON và trả [], khi đó mọi file sau mốc bị áp lại; (c) không có đường "đánh dấu đã áp" cho file đã áp tay, CI kẹt vĩnh viễn ở "already exists".
  • ci-checks.yml không chạy conan-tool-plane npm run check (31 bài kiểm) hay dry-run admin-router; mam, video, play, docs, mentors không bao giờ được build ở PR.
  • .github/workflows/README.md: thiếu ba workflow tool-plane trong bảng; danh mục quyền token "một lần" thiếu D1/Vectorize Edit (chỉ nhắc ở đoạn dưới, đúng quyền đang thiếu); tên project play lệch với yml; mô tả bridge worker "ghim một deployment" đã cũ (từ 10.08 trỏ alias production).
  • Tool Plane: tài liệu nói "đã thêm workflow_dispatch vào mọi deploy-*.yml", chỉ ba workflow tool-plane có; cloudflare.deploy_* trỏ tới 7 workflow không dispatch được.
  • api.conan.school/wrangler.migration-smoke.toml: TEST_MODE="true" + remote = true trỏ D1 production. Binding FAMILY_PROFILE_VALIDATION_WORKFLOW khai mà không chỗ nào .create(). Service binding CAPOS_API → capos-api trỏ Worker của repo đã tách (08.08), nếu bên kia đổi tên, api không deploy được.
  • compatibility_date trải từ 2024-03-20 tới 2026-09-01 qua 12 cấu hình; admin và docs không có wrangler config.

2. Lớp hướng dẫn agent ​

NguồnMâu thuẫn với CLAUDE.md
AGENTS.md luật 12"Deploy completed changes by default", CLAUDE.md cấm deploy từ máy
AGENTS.md luật 13"Vanilla Vite, không React, không VitePress", CLAUDE.md bắt buộc shadcn/ui (React); docs là VitePress
AGENTS.md luật 7Sidebar trái tiếng Anh, một nhóm mở, tokyo đã bỏ sidebar 11.08 (hub-and-spoke)
docs/CODEX_WORKING_AGREEMENT.mdTự xưng "source of truth"; lặp lại cả luật 12 và 13; ghim Tailwind 4.3.3
.agent/ (19 skill, 2 workflow)5 file dặn sinh nội dung bằng SQL Supabase / mcp_supabase-mcp-server_execute_sql; 3 skill audit theo mô hình 5E đã gỡ 28.08
Skill deploy-migrateFrontmatter và mục "Thứ tự" vẫn dặn "áp tay trước rồi mới push" trong khi thân bài nói CI áp
Skill cloud-dev:39, ran-assistant:58-61,85, tool-plane:94-100Vẫn "áp tay từng file", "tạo chỉ mục Vectorize tay"
Skill course-content:3, engine-prompt:78, quality-rule:51, ran-assistant:84, tool-plane:30-33Còn giọng "luật tối thượng, agent không được viết nội dung" (gỡ 03.09)
Skill content-ops-risks:39,64,76 và engine-prompt:52-62Dẫn MAX_TOKENS_CEILING = 6_000 đã xoá; hai con số khác nhau trong cùng file. Mã thật: tokenBudget() (12k thường / 64k lý luận), timeoutFor() (120–300 s / 600 s)
Skill tool-plane:21-26, :75Phép grep bí mật "ra dòng nào ngoài hai file thì dừng" nay ra 8 dòng hợp lệ; "24 bài kiểm" → 31
Skill communities, ran-assistantĐánh số luật lộn (1-5, 7-10, rồi 6; "Luật năm" trước "Luật bốn")
CLAUDE.md"Bốn skill" nhưng liệt kê 11; dòng deploy-migrate nói "áp tay"; luật UI kể docs (VitePress) và video (không có Tailwind) vào diện shadcn; "CI áp migration" chỉ đúng với conan-platform-production, D1 của tool-plane đi đường provision-tool-plane.yml
MemoryHai file cùng một luật (deploy-only-via-github không có trong mục lục); wiki-link chết [[deploy-only-via-github]], [[cloud-dev]]; 6 dòng mục lục lệch nội dung file (docs domain "pending", đã live 25.08; "P1 done", P1–P5 đã deploy; "chuẩn v2.1", v2.3; VECTORIZE_VI "dưới dạng chú thích", đã bật); 4 memory còn dặn wrangler pages deploy như quy trình; adaptive-learning-system.md là nhật ký phiên 08.08 với 5E
scripts/cloud-bootstrap.shBỏ qua conan-tool-plane, mam, mentors, video, play; nuốt output npm và không exit 1, phiên khởi động "ổn" với phụ thuộc thiếu, đúng kiểu hỏng ngầm CLAUDE.md cảnh báo
STATUS.md"Real-time" nhưng là văn bản tĩnh từ 27.04 ("Last Deploy 2026-04-27 by Antigravity"); thiếu tokyo/docs/mentors/video/play/tool-plane
~/.claude/projects/.../memory/ trên máyVẫn được nạp vào phiên và đã lệch với .claude/memory/ trong repo (hai mục lục sống)

3. Cổng tài liệu docs.conan.school ​

Cấu trúc tốt: 46/46 trang có trong sidebar, 0 link trang chết, build xanh. Sidebar /curriculum/ từng có hai nhóm cùng tên "Chương trình học" với hai link lặp (đã sửa).

18 anchor sai slug (build vẫn xanh vì VitePress không kiểm #fragment): VitePress giữ đ, -, ↔ và thêm _ trước chữ số, tác giả viết anchor gấp dấu. Ví dụ /sdd/#mo-hinh-du-lieu-course-information thật là _3-mo-hinh-du-lieu-, -course-information; #vòng-nạp-kiến-thức thật là vong-nap-kien-thuc. Danh sách đủ trong PR #30.

Khẳng định lệch mã (chọn lọc):

TrangNóiThật
content-ops:95, known-risks:76,179,112-114MAX_TOKENS_CEILING = 6000, 24k lý luận, 300 sHằng số đã xoá; tokenBudget() 12k/64k; timeout 120–300 s / 600 s (content-ops:260 đã đúng, trang tự mâu thuẫn)
deploy:89, audits/index:65docs chưa gắn domaindocs.conan.school trả 200 từ 25.08; config đã dùng làm canonical
deploy:19-255 workflow13 deploy-*.yml + provision + smoke-test
platform/index:11-31Thiếu mam, admin-router, tool-plane, feature-executor; "Workflows (Member Intelligence, sinh sách)"33 lớp Workflow trong wrangler.toml
data-model:113, prompt-library:51-55, cloud-dev:93-94, known-risks:32"CI không tự áp migration" / "áp tay"CI áp từ 01.09 (dù chưa từng xanh)
features/ran-assistant:82,93cron 6 tiếng, 60 mẩu7 * * * *, ngân sách 200 (dòng 131 cùng trang đã đúng)
ran-assistant:71-72Persona "Conan Assistant" là lỗi mởprompts.ts:6 đã "Bạn là Ran"
tool-plane-decisions:223, tool-plane:144workflow_dispatch ở mọi deploy-*.ymlchỉ 3 workflow tool-plane
features/index:27, learning:51, functional:37, user-stories:52-54route /concepts/:idgỡ 28.08; đường thật là /learn/*; thiếu /prompts, /communities, /c/:slug
inquiry-lesson:81-88"Nơi cài đặt" LessonJourney.tsx, concepts.$id.tsxHai file đã xoá (banner đầu trang nói vậy)
audits/index:14, course-design-standard:25Bài kiểm cuối chặng 3 vòng 5/10/15, đạt 95%Thay 28.08 bằng hai cổng (assessment.md)
content-ops:35, course-levels:101,118chuẩn v2.2, "chín luật"v2.3, 17 qualityRules
content-ops:382, :9; curriculum/index:108"Năm endpoint" (15 dòng), "Ba Workflow"~31 route /ops/*; 5–6 Workflow
communities:186"ba cộng đồng đầu"migration 20260903d–i gieo sáu
course-levels:45bash scripts/author_by_level.shfile ở api.conan.school/scripts/

Mâu thuẫn nội bộ:

  • Ai viết nội dung: content-ops:287-301, tool-plane-tools:52-57, tool-plane-decisions:231-238, cloud-dev:95 vẫn cấm; CLAUDE.md, prompt-library:58-60, course-seed:25-28 nói luật gỡ 03.09. Migration 20260903d–i chính là nội dung viết tay, repo đã làm điều content-ops cấm.
  • Bốn mô hình cấu trúc khoá học: Course → Unit → Learning Experience → Activity (index, features/learning, sdd, REQ-F-LRN-03 "PHẢI"); Course → Unit (6–9) → Lesson (3) → bài 15–20 phút (curriculum/index "bắt buộc"); Course → Unit → Concept → Hành trình khám phá → Quiz (platform/index:71); ladder/level (course-design-standard, tự nhận là hệ khác). Số concept/unit: 2–7 vs đúng 3 vs 3–5.
  • Ba nghĩa "community": sự kiện/Insiders (features/community), 18 cộng đồng ngành/vai trò (platform/communities), và "Tokyo là community" (overview). Sidebar đặt "Cộng đồng" cạnh "Cộng đồng & sự kiện".
  • Hai mô hình quyền lợi: trial 7 ngày lười-khởi-tạo + membership_tier (overview, prd, sdd, requirements, user-stories, viết 09.08, chưa sửa) vs resolveEntitlement() locked/basic/paid + Pro theo cộng đồng (data-model, communities, khớp mã). Kích hoạt: "tự động qua đối soát" (benefits) vs "chờ nối webhook, transactions rỗng" (audits/index); không migration nào tạo bảng transactions.
  • deploy.md:14 "git push origin main" vs cloud-dev.md:91 "đẩy nhánh, mở PR". deploy.md:37 cho phép wrangler d1 execute để "cập nhật dữ liệu" vs CLAUDE.md chỉ cho SELECT.

Cấu trúc: prd/, sdd/, requirements/, user-stories/, overview/, features/index+learning viết 09.08, chưa từng sửa, tự nhận "living document v1.0", nay là khung cũ trình bày như hiện hành. audits/index.md (25.08) tự nhận "tình trạng thực tế" nhưng chỉ ghi ngày ở một dòng. .vitepress/theme/custom.css có #c2410c, #d94f2b tự khai (VitePress cần giá trị thật, nhưng phải khớp theme.css).

4. api.conan.school ​

Router: bí danh /api/community/events → cùng instance events với /api/events, chiều đúng (sự cố 03.09 là frontend đi trước api chưa deploy). Mount trùng /api/public + /public. Chú thích ở index.ts:301 nói Hono không khớp đường trần /api/x, đã thử với hono 4.13.5: có khớp, các bind kép là thừa. /ops/* chỉ kiểm danh tính (Access JWT), không kiểm vai trò, ai qua được Access app đều gọi được POST /ops/run (ngân sách AI).

Bảo mật:

MứcChỗVấn đề
Caoapi.conan.school/.dev.varsĐược git theo dõi với RESEND_API_KEY, MIXPANEL_TOKEN, CRON_SECRET thật
Caosystem/webhooks.ts POST /webhook/paymentKhông chữ ký / secret / IP; body → autoActivateFromTransaction → kích hoạt membership + email
Trungai/chat.ts GET /conversations/:id/messagesKhông lọc user_id, IDOR
Trungpublic/index.ts:315-500POST/DELETE students/stickers không xác thực qua createD1AdminClient
Trungai/embed.ts POST /embed, /reindexChú thích "Admin-only" nhưng chỉ cần member, tốn AI
Thấpmiddlewares/tenant.tsTin x-school-id từ member; chỉ admin kiểm thành viên
Thấpindex.ts:192-212CORS cho localhost với credentials ở prod; allowHeaders ghi x-access-jwt-assertion, mã đọc cf-access-jwt-assertion
Thấpmember-feedback:213, user/prompts:18-37, user/forum:9-12, authoring:962CREATE TABLE lúc chạy từ handler, vòng qua sổ migration

Tường phí cộng đồng bị bỏ qua trên đường UI thật: communityTier() / isCoursePreviewLesson() chỉ gác GET /concepts/:id (route 5E, frontend không còn gọi). Trang học tokyo gọi GET /units/:id/learn-overview và GET /concepts/:id/learn-overview (useLearnOverview.ts), trả SCQA, bài viết, ví dụ, câu hỏi kèm đáp án cho cả unit, không kiểm tier. POST /concepts/:id/lesson-quiz/start, units/:id/quiz, units/:id/task, curiosity cũng không gác. Ran RAG trả 6 mẩu bài viết của mọi cộng đồng bất kể tier; sắp theo community_id là no-op vì workflow nạp không ghi trường đó.

Lỗi chức năng: course-backfill.ts:53 gửi kind trong khi con đọc target_kind, mọi lượt backfill hỏng "Không biết sinh loại undefined"; tsc không bắt vì binding Workflow trong Env không có kiểu tham số. PROMPT_VERSIONS['course-outcomes'] không tăng khi prompt đổi ở 5e6c1f7 (29.08), phiếu bầu v1 trộn hai prompt. course-foundation.ts ghi model 'auto' → một ngăn "auto" trong /ops/models.

Hai họ bảng: communities/index.ts:209 community_posts JOIN legacy_users; chat.ts:113 đọc legacy_users.membership_tier cho id lấy từ users, người đăng nhập Access mới chỉ có trong users, tier trả null lặng lẽ. Bảy bảng được mã dùng nhưng không migration nào tạo: event_rsvps, event_meetings, event_attendance, event_audit_logs, course_unit_quiz_bank, content_claims, content_findings. Sống được vì mốc nền coi mọi file <= 20260829o là đã áp. Legacy POST /api/ai/embed ghi vào VECTORIZE (bge-base-en) trong khi chat đọc VECTORIZE_VI (bge-m3), và đó là đường duy nhất nạp DeepBook, nên Ran không dẫn được sách nào.

Kiểm thử: 1 bài unit (pricing) + 4 bài integration cần wrangler dev. Không bài nào cho các lớp gác chất lượng mà tài liệu mô tả: content-rules.ts, quality-audit.ts, arena.ts, các assert trong authoring.ts, communities/access.ts, tiền tố legacy_ của d1Client.ts. @conan/course-standard cũng không có test.

5. UI stack và màu ​

SiteTailwind v4motionshadcn depstheme.cssGhi chú
com (tokyo)✓✓ 13.x✓✓9 component ui/
www✓✗✓✓@headlessui/react cạnh shadcn; editorjs + tiptap song song
admin✓✗radix, cva; không lucide✓0 component ui/; 5 legacy sub-app tự khai @theme
mam✓framer-motion 12 (tên gói cũ)lucide, tw-merge✓
play/frontend✓✗lucide, tw-merge✓tự khai @theme
video✗✗✗✗ (hex chép tay)ngoài luật hoàn toàn
mentors✓ (postcss)✗✗✗ (52 hex)Next, miễn trừ có ghi
docsVitePress,,,CLAUDE.md kể vào diện nhưng không thể tuân

618 chỗ màu tự chế (hex hoặc bậc Tailwind) trong src/app: www 233 (courses.$slug.tsx 30, FacebookReviews.tsx 21, membership.tsx 20), com 164 (events.$slug.tsx 12), play 131 (HostDashboard.tsx 88), mentors 52, video 16, admin 13, mam 9. Sự cố 31.08 (114 chỗ/27 file) mới dọn ở trang học; các site khác chưa.

6. Vệ sinh repo ​

  • File rác: all_domains.txt và com.conan.school/domains.txt (output CLI dán từ 25.04); api.conan.school/{fix_sql.js (đường dẫn máy cá nhân), set-cors.mjs, cors.json, data.json (0 byte), test_response.json}; video.conan.school/update_json.js (đường dẫn máy cá nhân).
  • api.conan.school/db/sql/migrations/, 158 file thời Supabase/Postgres, không đường nào áp, chỉ .agent/ và một runbook cũ tham chiếu. Dễ nhầm với api.conan.school/migrations/ (đường thật).
  • docs/ cũ (134 file, reader Vite cho docs.conan1.com, không workflow deploy) vẫn nhận trang mới (membership-trial-policy.md sửa 03.09), song song với docs.conan.school, com/docs, api/docs, play/docs.
  • Root package.json mang React/radix/cva… (25 gói) mà không file nào ở gốc import; mỗi lần bootstrap cloud cài không.
  • edge-hotfix/wrangler.toml:9-27 còn 5 route asset băm (root-H_u5Zj5Q.css…) của build đã cũ.
  • .wrangler/, dist/, node_modules/ được ignore đúng; không file build nào bị theo dõi.

Đã sửa trong PR #30 ​

MụcCommitTrạng thái
Gộp memory trùng, xoá all_domains.txt, sidebar curriculum hết trùng nhóm2499c81✓
check-ui-standards: Arial-first, gác sàn major thay ghim bản4059a7e✓
AGENTS.md theo CLAUDE.md (luật 12, 13); gỡ check-vite-only + danh sách 48 mục; .agent/README.md; job guards trong ci-checks (fetch-depth 0)4719c27✓
CLAUDE.md: "Bốn skill", dòng deploy-migrate, dấu phẩy; skill deploy-migrate bỏ "áp tay trước rồi push"a37e7f2✓
Gỡ .dev.vars khỏi git; IDOR lịch sử chat; gác webhook (opt-in qua PAYMENT_WEBHOOK_SECRET); backfill target_kind; course-outcomes v28b90435✓ (xoay khoá: P0-2)
Concurrency cho 11 workflow deploy; path filter packages/*; ci-checks chạy tool-plane + admin-router; cảnh báo khi rơi về npm install; workflows READMEba5c78e✓
apply-d1-migrations.mjs: chặn file mới sắp dưới mốc nền (đếm 164); query() không nuốt lỗi parseba5c78e✓
Gác cộng đồng (courseCommunityLock) cho learn-overview (vỏ khoá + community_lock), lesson-quiz/start, units/:id/quiz, units/:id/task, curiosity; tokyo hiện thẻ khoád4e528b✓
17 anchor; 7 skill + 8 memory refresh; CLAUDE.md caveat 7403, ngoại lệ UI, thứ tự ưu tiên các lớp hướng dẫn; STATUS.md8891346✓
Docs: deploy/data-model/prompt-library/cloud-dev/known-risks/content-ops/tool-plane×3/ran-assistant/inquiry-lesson/course-levels/audits theo mã; cloud-bootstrap đủ thư mục + lộ lỗi; 7 file rác; 10 phụ thuộc thừa ở gốc(commit kế)✓

Việc tiếp theo (chưa làm trong PR này) ​

  1. Viết unit test cho content-rules, quality-audit (một ca phải trượt), arena (tally/wilson/cặp mù), communities/access (Pro hết hạn), tiền tố legacy_; chạy trong ci-checks.yml.
  2. Đưa CREATE TABLE lúc chạy (member-feedback, user/prompts, user/forum, authoring lock) và bảy bảng không có DDL vào migrations/ để dựng lại được DB từ repo.
  3. Kiểu hoá binding Workflow trong Env (Workflow<CourseContentParams>) để tsc bắt lỗi tham số.
  4. Gỡ hoặc sửa legacy POST /api/ai/embed; thêm collector DeepBook và community_id vào ran-knowledge-index.ts; ghi metric khi RAG không có kết quả và chèn dòng "không có nguồn" vào prompt.
  5. Hợp nhất prd/, sdd/, requirements/, user-stories/ với mô hình hiện hành (một cấu trúc khoá, một mô hình quyền lợi) hoặc đóng dấu "ảnh chụp 09.08.2026" ở đầu mỗi trang.
  6. Quyết định số phận docs/ cũ (gộp vào docs.conan.school hay khoá không nhận trang mới) và api.conan.school/db/sql/migrations.
  7. Dọn 618 màu tự chế theo thứ tự: play HostDashboard.tsx, www courses.$slug.tsx, FacebookReviews.tsx; đưa video.conan.school vào Tailwind + token; mam đổi framer-motion → motion.
  8. Thêm workflow_dispatch cho 7 deploy workflow mà cloudflare.deploy_* trỏ tới, hoặc sửa tài liệu Tool Plane.
  9. Kiểm x-school-id cho member route; sửa allowHeaders; xoá chú thích sai ở index.ts:301.
  10. Gỡ binding FAMILY_PROFILE_VALIDATION_WORKFLOW không dùng; xem lại wrangler.migration-smoke.toml trỏ prod.

Tài liệu nội bộ nền tảng Conan School.