description: 验证 openpyxl 已安装

command: uv pip show openpyxl


验证迁移文件已创建


验证 Schema 文件已创建


description: 验证 Schema 使用 extra=forbid 强约束

command: grep -q 'extra.*forbid' backend/src/v1/feedback/schemas.py


description: 验证模型文件已创建

command: test -f backend/src/models/feedback.py


验证 Repository 文件已创建


验证 Service 文件已创建


验证路由文件已创建


description: 验证路由已注册

command: grep -q 'feedback' backend/src/v1/router.py


description: 验证错误码已添加

command: grep -q 'FEEDBACK_' docs/protocols/common/http-error-codes.md


验证前端模型已创建


验证前端 API 已创建


验证前端反馈页已创建


description: 验证中文翻译已添加

command: grep -q 'settingsFeedbackTitle' apps/lib/l10n/app_zh.arb


description: 验证英文翻译已添加

command: grep -q 'settingsFeedbackTitle' apps/lib/l10n/app_en.arb


description: 验证数据库表已创建

command: psql -c '\d user_feedback'


description: 测试反馈提交 API（匿名用户）

command: curl -X POST http://localhost:8000/api/v1/feedback -H 'Content-Type: application/json' -d '{"feedback_type":"bug","content":"test","images":[],"device_info":{"platform":"ios","model":"test"},"app_version":"1.0","os_version":"iOS 17"}'


description: 测试 API 参数验证（内容为空）

command: curl -X POST http://localhost:8000/api/v1/feedback -H 'Content-Type: application/json' -d '{"feedback_type":"bug","content":"","images":[],"device_info":{"platform":"ios","model":"test"},"app_version":"1.0","os_version":"iOS 17"}' | grep -q 'FEEDBACK_CONTENT_EMPTY'


description: 测试 API 参数验证（图片超限）

command: curl -X POST http://localhost:8000/api/v1/feedback -H 'Content-Type: application/json' -d '{"feedback_type":"bug","content":"test","images":["url1","url2","url3","url4"],"device_info":{"platform":"ios","model":"test"},"app_version":"1.0","os_version":"iOS 17"}' | grep -q 'FEEDBACK_TOO_MANY_IMAGES'


description: 验证前端编译通过

command: cd apps && flutter analyze


description: 验证后端类型检查通过

command: uv run basedpyright backend/src/v1/feedback/


description: 验证后端 lint 通过

command: uv run ruff check backend/src/v1/feedback/