Files
what-to-eat/docs/decisions/0002-feedback-and-ids.md
T

40 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 0002 菜谱固定 id、应用内反馈与筛选信号
- 状态:已采纳
- 日期:2026-10-18
## 背景
- 收藏按菜谱在数据里的位置记录,删一行会让后面所有菜的收藏错位,数据因此不敢清理;[#98](https://github.com/YunYouJun/cook/issues/98) 计划把收藏同步到云端,位置 id 一同步就会出错。
- 普通用户大多不用 GitHub,Issue 表单收不到他们的反馈。
- 想让 AI 定期优化筛选,需要真实的使用数据和一个能对比前后效果的评测。
## 方案对比
| 问题 | 方案 | 取舍 |
| ------------ | ------------------------------------------- | ------------------------------------------------------------ |
| 菜谱 id | 用位置(现状) | 不能删、不能重排 |
| | 按菜名 + 视频算哈希 | 改菜名或换视频就变成另一道菜 |
| | **CSV 新增 `id` 列,取值等于现在的位置** | 已有收藏无需迁移,老版本客户端也兼容;需要校验防止改动或复用 |
| 反馈渠道 | GitHub Issue | 普通用户不用 |
| | 第三方表单(兔小巢、腾讯问卷) | 零开发,但要跳出应用、不带菜谱信息、难以自动汇总 |
| | 自建后台 | 要维护服务、登录、页面 |
| | **CloudBase 云函数 + 集合** | 复用现有 CloudBase,没有新服务;未登录也能提交 |
| 是否强制登录 | 强制 | 门槛太高,大部分人会放弃 |
| | **不强制,登录后带上账号** | 匿名提交按设备限频;登录用户的反馈权重更高,也能回访 |
| 管理后台 | 先做 `/admin` | 现阶段反馈量小,不划算 |
| | **skill 汇总 + PR 审核 + CloudBase 控制台** | 反馈量大到需要非开发者帮忙审核时再做只读看板 |
## 决定
- `recipe.csv` 新增 `id` 列。已发布的 id 不能修改或复用,新菜谱用最大 id + 1;CI 用 `pnpm validate --base` 对比目标分支。
- 菜谱详情页一键反馈,写入 `cook-feedback` 云函数;提交失败时退回 GitHub Issue 表单。
- 应用匿名记录「无结果的食材组合」和「点开了第几个结果」两类聚合信号,不含账号信息。
- `pnpm feedback:pull` 汇总反馈并生成评测样例 `test/fixtures/search-eval.json`,`pnpm eval:search` 评估排序。`recipe-data-review` skill 据此改数据、别名和排序,修改前后的评测指标写进 PR。
- 反馈功能是普通网页代码,浏览器和云乐坊容器里都能用,不依赖 Capacitor,与 #98 下线独立 App 的计划一致。
## 影响
- 需要在 CloudBase 控制台建集合、部署函数、配置导出口令和 HTTP 访问,并允许未登录用户调用该函数(步骤见 [菜谱数据](/dev/data#cloudbase-配置一次性))。在此之前,提交会失败并引导用户去 GitHub。
- 删除菜谱现在是安全的,只影响收藏了这道菜的用户;是否删除由维护者决定,skill 不会自动删除。