File nào vào git, D1, R2
Chủ dự án 18.10.2026: "Cần có quy tắc nào đó, để file nào được đưa lên GitHub, dạng nào ko được đưa lên GitHub mà được đưa vào đâu đó khác như D1 hay R2". File nhị phân đã vào lịch sử git thì không gỡ được nếu không viết lại lịch sử, và repo đang có 162 MB file theo dõi, phần lớn là media, seed SQL và nội dung (đo dung lượng repo).
| Dạng | Nơi lưu | Ghi chú |
|---|---|---|
| Code, config, test, migration D1 (schema) | Git | |
| Docs (PRD, SDD, quyết định, ảnh chụp minh hoạ nhỏ) | Git, apps/<app>/docs/ (chung: docs/) | Docs cạnh code |
| Prototype UI (HTML/React nháp, link Artifact, link Figma) | Git, apps/<app>/design/prototypes/ | Không vào build |
| Asset app thật sự dùng, đã tối ưu | Git, apps/<app>/public/ hoặc src/assets/ | Ảnh ≤ 300 KB (webp), 3D .glb ≤ 500 KB, âm thanh UI ≤ 200 KB |
| Nội dung learner đọc (bài, câu hỏi, sách, bài SEO, Grammar) | D1, nạp qua workflow seed-data | Nguồn soạn (md/json) và seed SQL ≤ 1 MB ở git, vì seed-data đọc file từ repo |
Media nặng và file nguồn (video, audio bài học, .blend, PSD, render, ảnh gốc, PDF lớn) | R2 nemo12-content/<app>/... | Danh mục ở apps/<app>/design/assets.json: khoá R2, nguồn, giấy phép, ghi công |
| Dữ liệu người dùng (bài làm, hồ sơ, đơn hàng) | D1 production, chỉ qua API | Không bao giờ vào git, kể cả bản xuất |
| Bản sinh (dist, seed SQL lớn, index, fixture sinh) | Không lưu: sinh lại khi build hay deploy | .generated/, .gitignore |
| Bí mật (token, khoá) | GitHub Secrets / Cloudflare secrets, máy: .dev.vars | |
| Log, ảnh chụp tạm, báo cáo một lần | Không lưu (scratchpad, tmp-*) |
Máy chặn: scripts/check-storage.mjs (nhóm check:code, chạy ở pre-commit và CI) từ chối mọi file MỚI thêm thuộc định dạng nguồn/media (.psd .blend .fbx .mp4 .mov .wav .zip .sqlite…), ảnh quá 300 KB, .glb quá 500 KB, và mọi file quá 1 MB. File đã có từ trước không bị xét; kế hoạch trong docs/ops/repo-size.md đưa chúng ra dần. Ngoại lệ thật thì thêm đường dẫn vào scripts/storage-allow.json kèm lý do.