@stay0325 修复与社交模拟器交付
本次包含应用代码及两张卡的生成工具。卡片替换独立于应用部署:ALLDAY 更新仅修改聊天组件并保留完整快照;SVT 作为 JSON 交还作者,不直接覆盖线上草稿。生产连接信息不在代码、卡片或此文档中。部署验收记录与原调查、卡片内容保存在本地 output/stay0325/,不进入仓库。
已实现
- Studio 素材发现:按真实数据库 world ID 获取绑定文件夹及其子目录,优先展示绑定素材;加入
list_assets搜索、翻页、完整路径、准确总数及截断提示。所有查询限制为作者拥有的素材,读取失败不再解释成素材不存在。创作助手的说明同步更新。 - ALLDAY 输入可靠性:生成时仍可编辑草稿,发送键改为停止;显示流式正文和错误;保护中文输入法和移动端换行;发送失败恢复文本并保留后续草稿。共用 SSE 对无响应的请求/读取设置超时,收到结束事件即收尾;恢复消息查询限时。
- SVT X:实现公开发帖、回复、点赞、转发、关注、搜索、主页、通知、独立私信、频道创建与成员管理。正式数据按会话保存在 PostgreSQL,草稿按会话及对话保存在浏览器。保留原来的 13 位角色资料和头像引用。
- 生成与并发:纯 TypeScript 引擎校验动作、作者及目标;行锁合并并发写入;同一动作/生成尝试可安全恢复;连续私信的回复按对应消息排列;AI 只收到目标对话或公开帖子以及允许角色的资料。复用现有模型权限、额度、计费和限流链路。
文件与复现
worlds/svt-social/index.tsx:可继续编辑的卡片 UI 源码。scripts/build-stay0325-cards.cjs:读取原卡并生成更新文件,不覆盖输入。output/stay0325/ALLDAY-fixed.json:ALLDAY 更新卡。output/stay0325/SVT-X-complete.json:SVT X 更新卡。scripts/test-stay0325.cjs:统一回归测试入口,数据库测试强制使用隔离的内存 PGlite。worlds/svt-social/README.md:构建命令、API、部署顺序和边界。
生成的卡片包含作者内容,因此留在被 Git 忽略的 output/ 中。原始卡不进入仓库。
验证
检查包含整仓 pnpm build、pnpm typecheck、卡片额外 TypeScript 检查及 28 项定向回归:
- 9 项引擎测试:持久化与去重、生成尝试/取消/过期恢复、私密上下文、成员权限、连续消息顺序、13 位成员轮换、长消息上下文预算、重开/恢复存档、非法输入。
- 10 项 SSE/超时测试:原有重试边界、错误分类,以及停滞读取、用户取消和定时器清理。
- 6 项隔离数据库测试:250 个无关素材之外的 14 个绑定素材、分页/搜索/权限、无绑定/循环目录、并发保存与唯一生成认领。
- 3 项真实 React DOM(jsdom)流程测试:X 发帖/回复/通知/私信/频道/重进持久化/失败草稿,以及 ALLDAY 输入法/流式显示/停止/草稿恢复。
上述自动测试没有打开浏览器、调用真实模型或修改生产数据。实际手机键盘、线上模型输出质量和多副本取消仍需上线验收;原反馈的具体故障会话没有包含在已有记录中,不能声称重现了当时的完整事故。
上线顺序
先部署应用,再安装 SVT X 更新卡,因为旧服务器没有新的 social API。无需数据库表结构迁移。更新生产卡前保留快照,并核对卡片从调查以来是否有作者新修改;SVT 仍应保持作者原本的草稿状态,ALLDAY 保留已有发布状态。不要将旧的混合聊天记录猜测搬入公开动态或不同私信。
本次是玩家与 AI 成员的社交模拟,并未接入真实 X。AI 生成回复和新动态,玩家的点赞、转发和关注会保存;没有虚构 AI 点赞/粉丝计数。跨服务副本取消能阻止晚到回复落库,但不能保证立即终止另一副本已经发出的模型调用。
