# 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 不会自动删除。