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
- 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/events404 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). - 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". - Bảo mật có ba lỗ thật: file
.dev.varsvớ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: routelearn-overviewmà trang học ở tokyo gọi không kiểmcommunityTier. - Gác không chạy thì không phải gác. Ba script
scripts/check-*.mjskhông được job CI nào gọi;check-ui-standardsđỏ ngay trêntheme.csscủa design system mà không ai thấy;check-vite-onlygác một luật đã bị thay. Bốn job deploy đỏ thường trực từ tháng 8 (admin-router, play ×2, mentors). - 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ệc | Vì sao | Cá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ên | deploy-api đỏ từ 02.09; production api đóng băng | Rerun 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-2 | Xoay RESEND_API_KEY, MIXPANEL_TOKEN, CRON_SECRET | api.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 index | Khoá cũ bị thu hồi ở Resend/Mixpanel |
| P0-3 | Quyế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 đã đặt | Log 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.08 | deploy-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
| App | Workflow | Loại | Đích Cloudflare | Trạng thái lần chạy gần nhất |
|---|---|---|---|---|
| api.conan.school | deploy-api | Worker | api-conan-school | đỏ từ 02.09 (7403 ở migration) |
| com.conan.school (tokyo) | deploy-com | Pages | conan-com | xanh |
| www.conan.school | deploy-www | Pages | ww3-conan-school | xanh |
| admin.conan.school | deploy-admin | Pages | admin-conan-school | xanh |
| mam / video / docs | deploy-mam / -video / -docs | Pages | mam-conan-school, video-conan-school, docs-conan-school | xanh |
| conan-tool-plane | deploy-tool-plane (+ provision, smoke-test) | Worker | conan-tool-plane, domain mcp.conan.school | xanh |
| mentors.conan.school | deploy-mentors | Worker (vinext deploy) | tên sinh lúc build, không có trong repo | đỏ (lần duy nhất 11.08) |
| play frontend / backend | deploy-play | Pages + Worker route | kahoot-frontend / kahoot-backend | đỏ mọi lần |
| admin-router | deploy-admin-router | Worker route | admin.conan.school/* | đỏ từ 08.08 (zone token) |
| www/edge-hotfix, com/compat-redirect | không có | Worker | conan-www-stale-asset-bridge, conan-member-domain-compat | sửa hai worker này chỉ kích deploy Pages của site mẹ |
| packages/design-system, packages/course-standard | khô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-executor | khô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_migrationsvà đua thứ tự upload Worker. - Ba script gác ở gốc không được job nào chạy (
ci-checks.ymlchỉ build api/admin/com/www; rootnpm testkhông được gọi).check-ui-standardsđỏ trêntheme.css:88(Arial, Helvetica, sans-serifbị 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-onlycấ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.ymlvà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ểu00xx_; (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.ymlkhông chạyconan-tool-plane npm run check(31 bài kiểm) hay dry-runadmin-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_dispatchvào mọideploy-*.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 = truetrỏ D1 production. BindingFAMILY_PROFILE_VALIDATION_WORKFLOWkhai mà không chỗ nào.create(). Service bindingCAPOS_API → capos-apitrỏ Worker của repo đã tách (08.08), nếu bên kia đổi tên, api không deploy được.compatibility_datetrả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ồn | Mâ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 7 | Sidebar trái tiếng Anh, một nhóm mở, tokyo đã bỏ sidebar 11.08 (hub-and-spoke) |
docs/CODEX_WORKING_AGREEMENT.md | Tự 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-migrate | Frontmatter 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-100 | Vẫ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-33 | Cò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-62 | Dẫ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, :75 | Phé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 |
| Memory | Hai 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.sh | Bỏ 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áy | Vẫ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):
| Trang | Nói | Thật |
|---|---|---|
| content-ops:95, known-risks:76,179,112-114 | MAX_TOKENS_CEILING = 6000, 24k lý luận, 300 s | Hằ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:65 | docs chưa gắn domain | docs.conan.school trả 200 từ 25.08; config đã dùng làm canonical |
| deploy:19-25 | 5 workflow | 13 deploy-*.yml + provision + smoke-test |
| platform/index:11-31 | Thiế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,93 | cron 6 tiếng, 60 mẩu | 7 * * * *, ngân sách 200 (dòng 131 cùng trang đã đúng) |
| ran-assistant:71-72 | Persona "Conan Assistant" là lỗi mở | prompts.ts:6 đã "Bạn là Ran" |
| tool-plane-decisions:223, tool-plane:144 | workflow_dispatch ở mọi deploy-*.yml | chỉ 3 workflow tool-plane |
| features/index:27, learning:51, functional:37, user-stories:52-54 | route /concepts/:id | gỡ 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.tsx | Hai file đã xoá (banner đầu trang nói vậy) |
| audits/index:14, course-design-standard:25 | Bà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,118 | chuẩ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:45 | bash scripts/author_by_level.sh | file ở 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) vsresolveEntitlement()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,transactionsrỗng" (audits/index); không migration nào tạo bảngtransactions. deploy.md:14"git push origin main" vscloud-dev.md:91"đẩy nhánh, mở PR".deploy.md:37cho phépwrangler d1 executeđể "cập nhật dữ liệu" vs CLAUDE.md chỉ choSELECT.
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ức | Chỗ | Vấn đề |
|---|---|---|
| Cao | api.conan.school/.dev.vars | Được git theo dõi với RESEND_API_KEY, MIXPANEL_TOKEN, CRON_SECRET thật |
| Cao | system/webhooks.ts POST /webhook/payment | Không chữ ký / secret / IP; body → autoActivateFromTransaction → kích hoạt membership + email |
| Trung | ai/chat.ts GET /conversations/:id/messages | Không lọc user_id, IDOR |
| Trung | public/index.ts:315-500 | POST/DELETE students/stickers không xác thực qua createD1AdminClient |
| Trung | ai/embed.ts POST /embed, /reindex | Chú thích "Admin-only" nhưng chỉ cần member, tốn AI |
| Thấp | middlewares/tenant.ts | Tin x-school-id từ member; chỉ admin kiểm thành viên |
| Thấp | index.ts:192-212 | CORS cho localhost với credentials ở prod; allowHeaders ghi x-access-jwt-assertion, mã đọc cf-access-jwt-assertion |
| Thấp | member-feedback:213, user/prompts:18-37, user/forum:9-12, authoring:962 | CREATE 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
| Site | Tailwind v4 | motion | shadcn deps | theme.css | Ghi 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 |
| docs | VitePress | , | , | , | 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.txtvà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ớiapi.conan.school/migrations/(đường thật).docs/cũ (134 file, reader Vite chodocs.conan1.com, không workflow deploy) vẫn nhận trang mới (membership-trial-policy.mdsửa 03.09), song song vớidocs.conan.school,com/docs,api/docs,play/docs.- Root
package.jsonmang 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-27cò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ục | Commit | Trạng thái |
|---|---|---|
Gộp memory trùng, xoá all_domains.txt, sidebar curriculum hết trùng nhóm | 2499c81 | ✓ |
check-ui-standards: Arial-first, gác sàn major thay ghim bản | 4059a7e | ✓ |
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 v2 | 8b90435 | ✓ (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 README | ba5c78e | ✓ |
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 parse | ba5c78e | ✓ |
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.md | 8891346 | ✓ |
| 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)
- 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 trongci-checks.yml. - Đưa
CREATE TABLElúc chạy (member-feedback, user/prompts, user/forum, authoring lock) và bảy bảng không có DDL vàomigrations/để dựng lại được DB từ repo. - Kiểu hoá binding Workflow trong
Env(Workflow<CourseContentParams>) để tsc bắt lỗi tham số. - Gỡ hoặc sửa legacy
POST /api/ai/embed; thêm collector DeepBook vàcommunity_idvàoran-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. - 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. - Quyết định số phận
docs/cũ (gộp vàodocs.conan.schoolhay khoá không nhận trang mới) vàapi.conan.school/db/sql/migrations. - Dọn 618 màu tự chế theo thứ tự: play
HostDashboard.tsx, wwwcourses.$slug.tsx,FacebookReviews.tsx; đưavideo.conan.schoolvào Tailwind + token; mam đổiframer-motion→motion. - Thêm
workflow_dispatchcho 7 deploy workflow màcloudflare.deploy_*trỏ tới, hoặc sửa tài liệu Tool Plane. - Kiểm
x-school-idcho member route; sửaallowHeaders; xoá chú thích sai ởindex.ts:301. - Gỡ binding
FAMILY_PROFILE_VALIDATION_WORKFLOWkhông dùng; xem lạiwrangler.migration-smoke.tomltrỏ prod.