|
| 1 | +# StillMe — Engineering Guardrails & Execution Rules |
| 2 | +# This file is loaded every session by Cursor. |
| 3 | + |
| 4 | +## EXECUTION CONTROL |
| 5 | +- Khi mình bấm "Skip", đừng coi là hủy lệnh. Hãy dừng chờ, đọc log terminal mới nhất, tóm tắt tình hình và tiếp tục bước tiếp theo. |
| 6 | + |
| 7 | +## SECURITY (CLIENT/MOBILE) |
| 8 | +- Tuyệt đối không tạo hoặc đọc .env trên mobile. Không dùng flutter_dotenv. |
| 9 | +- Không embed API keys, token, secrets trong code, asset, dart-define, Gradle, Manifest, hoặc trong APK/IPA. |
| 10 | +- Mobile config chỉ chứa giá trị không nhạy cảm (public base URL, timeout, feature flag, theme). |
| 11 | +- Secrets chỉ tồn tại ở VPS gateway. |
| 12 | +- Build release: |
| 13 | + - Tắt toàn bộ log request/response. |
| 14 | + - Bắt buộc HTTPS, không cho cleartext. |
| 15 | + - Bật minify + obfuscate. |
| 16 | + |
| 17 | +## NETWORKING |
| 18 | +- Kiến trúc: Mobile → VPS Gateway (giữ keys) → LLM Providers. |
| 19 | +- Auth: dùng session token ngắn hạn (X-Session). Có thể thêm request signing (HMAC) với secret chỉ ở server. |
| 20 | + |
| 21 | +## CLEAN REPO & CI |
| 22 | +- Không commit .env, keystore, build artifact. |
| 23 | +- Luôn quét secret trước commit/push (gitleaks). |
| 24 | +- Commit theo Conventional Commits. |
| 25 | + |
| 26 | +## ACCEPTANCE KHI ĐỤNG /chat |
| 27 | +- Cần có (1) screenshot UI, (2) raw JSON (đã ẩn nhạy cảm), (3) giải thích adapter, (4) chứng minh không dùng placeholder. |
| 28 | + |
| 29 | +## MOBILE RELEASE SECURITY RULES |
| 30 | + |
| 31 | +# Mục tiêu: đảm bảo bản phát hành (APK/IPA – flavor prod) không chứa placeholder, không log nhạy cảm, và hoàn toàn không có API keys/secrets ở client. |
| 32 | + |
| 33 | +- Networking (prod): |
| 34 | + - HTTPS-only. Không cho phép cleartext. Không dùng networkSecurityConfig cho prod. |
| 35 | + - Không dùng IP hard-code trong prod; dùng domain. (Dev có thể dùng IP.) |
| 36 | +- Logging: |
| 37 | + - Tắt toàn bộ HTTP/Dio logging ở prod (request/response/body/headers). |
| 38 | + - Tắt mọi debug banner/verbose logs trong prod. |
| 39 | +- Placeholders & mocks: |
| 40 | + - Cấm hiển thị placeholder hoặc mock khi status=200. |
| 41 | + - Nếu detect model/flag là "placeholder|mock", FAIL nhiệm vụ phát hành và thông báo rõ: "Placeholder detected – not a real LLM." |
| 42 | +- Secrets: |
| 43 | + - TUYỆT ĐỐI không có API keys/secrets/tokens trong: |
| 44 | + - source code, assets, dart-define, Gradle, Manifest, keystore, APK/IPA. |
| 45 | + - Không tạo/đọc `.env` phía mobile. Không dùng `flutter_dotenv`. |
| 46 | + - Secrets chỉ tồn tại và được dùng ở VPS Gateway. |
| 47 | +- Config theo flavor: |
| 48 | + - Dev: cho phép HTTP + log để debug. |
| 49 | + - Prod: HTTPS-only, no logs, minify+obfuscate bật. |
| 50 | +- Pre-release checklist (bắt buộc tự kiểm tra trước khi build release): |
| 51 | + 1) Tắt Dio logs, debug banners, mock/placeholder flags. |
| 52 | + 2) BASE_URL là HTTPS domain (không phải IP) cho prod. |
| 53 | + 3) Gitleaks scan PASS; không có file `.env`, *.keystore, *.pem, secrets trong git. |
| 54 | + 4) Adapter nhận đúng field của gateway (`response|text|output|choices[0].text`); không fallback placeholder khi 200. |
| 55 | + 5) Build release kèm obfuscation và shrinkResources (Android). |
| 56 | +- Acceptance khi phát hành: |
| 57 | + - Đính kèm ảnh UI + raw JSON (đã ẩn nhạy cảm) chứng minh là câu trả lời LLM thật, model ≠ placeholder. |
| 58 | + - In đường dẫn artifact (APK/AAB/IPA) và metadata build (flavor, build time, package id). |
| 59 | + |
| 60 | +## DEVELOPER EXPERIENCE (DX) RULES |
| 61 | + |
| 62 | +# Skip button protocol |
| 63 | +- Khi người dùng bấm "Skip", KHÔNG coi là hủy. |
| 64 | + 1) Đọc log terminal mới nhất. |
| 65 | + 2) Tóm tắt trạng thái (success/fail/đang chờ). |
| 66 | + 3) Tiếp tục flow từ bước hợp lý, không reset. |
| 67 | + |
| 68 | +# Build & test errors |
| 69 | +- Khi build/test/deploy thất bại: |
| 70 | + 1) Parse log để tìm root cause. |
| 71 | + 2) Đề xuất fix ngắn gọn ngay trong output. |
| 72 | + 3) Nếu nhiều lỗi, liệt kê top 3 critical theo thứ tự ưu tiên. |
| 73 | + |
| 74 | +# Long-running tasks |
| 75 | +- Nếu task > 30s, hiển thị trạng thái định kỳ (progress). |
| 76 | +- Nếu log có vẻ treo, nhắc người dùng có thể bấm Skip để tiếp tục. |
| 77 | + |
| 78 | +# Logs |
| 79 | +- Highlight các dòng ERROR/FAIL/WARNING. |
| 80 | +- Với log dài, tự tóm tắt phần cuối (≈50 dòng) và nêu lỗi chính. |
| 81 | + |
| 82 | +# Commits |
| 83 | +- Dùng Conventional Commits. |
| 84 | +- Thay đổi bảo mật prefix: `chore(security): …`. |
| 85 | + |
| 86 | +# Documentation |
| 87 | +- Sau mỗi thay đổi quan trọng (build config, security, CI), cập nhật README.md hoặc docs/*. |
| 88 | +- Nếu chưa cập nhật, tự thêm To-do "Update README.md". |
| 89 | + |
| 90 | +# Build outputs |
| 91 | +- Khi build mobile/desktop xong, in rõ: |
| 92 | + - 📱 đường dẫn artifact |
| 93 | + - 🔑 ghi chú ký (nếu cần) |
| 94 | + - 🐞 debug: log đang bật |
| 95 | + - 🔒 release: xác nhận đã tắt log nhạy cảm |
| 96 | + |
| 97 | +# End of rules. |
0 commit comments