architecture
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseArchitecture (Blueprint cố định)
架构(固定蓝图)
Đây là bộ rule KHÓA CỨNG. Agent không được tự ý đổi state management, router, hay cấu trúc thư mục giữa các lần chạy, kể cả khi thấy "cách khác hay hơn".
这是一套严格的规则。Agent不得在每次运行时自行更改状态管理、路由或目录结构,即使发现“更好的方法”也不行。
Stack đã chọn (không thương lượng lại trong project đang chạy)
已选定的技术栈(当前项目中不再协商)
- State management: Riverpod (dùng codegen: )
@riverpod - Router: GoRouter
- Cấu trúc: Feature-First
Nếu project đã tồn tại và dùng stack khác, GIỮ NGUYÊN stack cũ của project, không refactor sang Riverpod/GoRouter giữa chừng trừ khi user yêu cầu rõ ràng.
- 状态管理: Riverpod(使用代码生成:)
@riverpod - 路由: GoRouter
- 结构: Feature-First
如果项目已存在并使用其他技术栈,请保留项目原有的技术栈,除非用户明确要求,否则中途不要重构为Riverpod/GoRouter。
Cấu trúc thư mục chuẩn
标准目录结构
lib/
├── app/
│ ├── router/ # GoRouter config, route names
│ └── theme/ # ThemeData, lấy từ design-system
├── core/
│ ├── constants/
│ ├── extensions/
│ └── utils/
├── shared/
│ ├── widgets/ # widget dùng chung (xem widget-library trong flutter-coding)
│ └── services/ # API client, local storage wrapper
└── feature/
└── <ten_feature>/
├── data/ # models, repository implementation
├── domain/ # entity, repository interface (nếu cần tách)
├── application/ # providers (riverpod)
└── presentation/
├── screens/
└── widgets/Mỗi feature mới (ví dụ , , ) PHẢI theo đúng khuôn này. Không tạo cấu trúc riêng cho từng feature.
orderauthprofilelib/
├── app/
│ ├── router/ # GoRouter配置、路由名称
│ └── theme/ # ThemeData,取自design-system
├── core/
│ ├── constants/
│ ├── extensions/
│ └── utils/
├── shared/
│ ├── widgets/ # 通用组件(参考flutter-coding中的widget-library)
│ └── services/ # API客户端、本地存储包装器
└── feature/
└── <ten_feature>/
├── data/ # 模型、仓库实现
├── domain/ # 实体、仓库接口(如需拆分)
├── application/ # providers(riverpod)
└── presentation/
├── screens/
└── widgets/每个新功能(例如、、)必须严格遵循此模板。不得为每个功能创建单独的结构。
orderauthprofileQuy tắc package (khớp với Ponytail exclusion)
包规则(符合Ponytail exclusion)
- Không tự ý thêm package mới vào ngoài danh sách đã duyệt:
pubspec.yaml,flutter_riverpod,riverpod_annotation,go_router(hoặc backend SDK tương ứng),dio/freezednếu cần model codegen,json_serializable(nếu backend là Supabase - xemsupabase_flutter).backend-coding/SKILL.md - Nếu tính năng thực sự cần package mới không có trong danh sách → DỪNG, hỏi user xác nhận trước khi thêm, không tự thêm rồi báo sau.
- nên nằm trong vùng Ponytail exclusion - nếu agent thấy bị chặn sửa file này, đó là chủ đích, không phải lỗi.
pubspec.yaml
- 不得在中添加已批准列表之外的新包:
pubspec.yaml、flutter_riverpod、riverpod_annotation、go_router(或对应的后端SDK)、如需模型代码生成则使用dio/freezed、json_serializable(如果后端是Supabase - 参考supabase_flutter)。backend-coding/SKILL.md - 如果功能确实需要列表中没有的新包 → 停止操作,先询问用户确认后再添加,不要自行添加后再告知。
- 应处于Ponytail exclusion区域 — 如果Agent发现无法修改此文件,这是有意设置的,并非错误。
pubspec.yaml
Naming convention
命名规范
- File:
snake_case.dart - Class:
PascalCase - Provider: (ví dụ
<tenNoun>Provider,cartProvider)orderListProvider - Route path: , route name:
/kebab-casecamelCase
- 文件:
snake_case.dart - 类:
PascalCase - Provider:(例如
<tenNoun>Provider、cartProvider)orderListProvider - 路由路径:,路由名称:
/kebab-casecamelCase
Khi nào KHÔNG áp dụng skill này
何时不适用此Skill
- Khi đang sửa lỗi nhỏ (typo, style) không liên quan đến vị trí file hay kiến trúc — không cần load lại skill này, xử lý trực tiếp trong .
flutter-coding
- 当修复小错误(拼写错误、样式问题)且与文件位置或架构无关时 — 无需加载此Skill,直接在中处理。
flutter-coding