Regenerate 只替换 seed,所有候选继续使用当前 style,因此随机结果长期保持同一种视觉类型。
Settings · Agent and user identity
头像随机候选设计
Agent 与用户头像共用一个 AvatarPicker。随机候选必须覆盖完整 DiceBear 样式注册表,并在选择候选时同时保存样式和 seed。
问题与边界
每批 16 个候选至少包含一次全部 14 个已发布样式;额外两个候选也从同一注册表选择。
上传头像、字母头像、持久化字段、Agent/User profile store 和 DiceBear 依赖均不改变。
统一数据流
1 · SOURCE
AVATAR_STYLES选择器样式清单,与运行时映射双向校验
2 · GENERATEstyle + seed
完整覆盖后随机排序
3 · PREVIEW16 candidates
每格按自己的 style 渲染
4 · SAVE
AvatarConfig同时保存 style 与 seed
决策
| 方案 | 结论 | 原因 |
|---|---|---|
| 只随机 seed | 拒绝 | 无法进入其他样式,是当前缺陷。 |
| 每格独立随机 style | 修改 | 小样本可能遗漏多数样式,不满足完整样式可见性。 |
| 先放入全部样式,再补足并随机排序 | 采用 | 每批保证覆盖全部注册样式,同时保留随机顺序与随机 seed。 |
| 为 Agent 和用户分别实现 | 拒绝 | 两个设置入口已共用 ProfileEditor 与 AvatarPicker。 |
验收合同
- Agent 和用户设置使用同一生成逻辑。
- 16 个随机候选包含
AVATAR_STYLES中全部 14 种样式。 - 点击候选后,预览和持久化配置同时采用候选的
style与seed。 - 再次 Regenerate 只替换候选,不在用户点击前修改已保存头像。
- Letter 与 Custom 路径维持现有行为。
实现与证据
已实现。 style-options.ts 提供轻量样式元数据,variants.ts 生成完整覆盖的随机候选,AvatarPicker.tsx 渲染并保存候选的 style/seed。web/tests/avatar-randomization.test.mjs 动态验证 14 种样式覆盖,双向比较选择器与运行时样式集合,并检查 Agent/User 共享入口和保存合同。Web unit tests、TypeScript、完整 Web checks 与 production build 均已执行。