DEVELOPMENT LOG
开发历程
这不是"博客上线那天开始的" —— 底下是 1783 个提交, 横跨 127 天(2026-05-15 → 2026-09-18,5 个月)。 每一次修复、每一次重构、每一次推翻自己,都在里面。
1783个提交
5个月 · 88 个有提交的日子
+2487k行新增(累计 2,487,321)
−935k行删除(累计 935,572)
关键节点
日期取自 git 历史(每条都对应真实提交)。图表给「量」,这里给「故事」。
- 罗德岛系统初版上线
7a46efda第一个提交。那时候它只是一个能跟干员说话的页面。
- 记忆系统成型(单日 71 个提交)
L1/L2/L3 分层记忆与压缩链路落地 —— 她开始「记得住」。
- 群聊做深 —— 单日 117 个提交,全项目最密的一天
多个干员同场、关系网与相互之间的对话。
- 人设文件加「语言模式」段
把「她怎么说话」从散文变成可维护的段落,后来成为精修流程的一环。
- 模型换代
默认模型切到 v4 系。代价是敬语被抹平 —— 后来靠「称呼纪律」补回来。
- 统一记忆底座开始(单日 75 个提交)
「线」进入系统:一个(你, 干员, 身份)= 一条唯一、连续、不可逆的关系。
- 发布收口 + 关掉思考链
为治 165 次空回复,对所有端点显式关思考 —— 后来发现它也让台词变短。
- 关系模型定案(D22)+ 桌面双栏
关系不可逆、不能开时间线、深聊是模式 —— 产品规则先写进文档,再落到代码。
- 那一夜:35 个提交
从一条社区反馈查到根因(反重复只装在两条路里的一条)、修 8 个用户报的 bug、并建起可复现的实验基建。
- 这个博客上线
blog.manana.icu:静态生成、无框架运行时、与主站同一套设计语言。
提交热力图
每一格是一天,颜色越亮提交越多。空白格是那天没写代码 —— 它们和亮点一样真实。
05月06月07月08月09月
少 多
每月提交数
代码规模的累计变化
每日累计「新增 − 删除」。它涨得不均匀 —— 有重构的日子会掉下去, 那正是"删掉自己写的东西"的时刻。
最近 14 天
点开任意一天看当天的每一条。提交信息是这个项目最诚实的日志 —— 包括那些写着"我猜错了字段名"的。
2026-09-1811 个提交+1527 −95
c5194561fix(实验): staging 起停做稳 + 探针指标改走接口(不再读过时的 L1 文件)+ 两臂同一起点+53 −14c333755ffeat(实验): 加总开关 PROMPT_MEMORY_EXTRA —— 关掉普通聊天里那三块额外记忆素材+30 −25e71367bfeat(探针): 支持 --questions(用 | 分隔)—— 验「素材过量」要问容易让她翻旧账的问题+5 −05c2a22f2fix(设置): 对话深度两个下拉从来没有选项 —— 用户点开是空白,所以「无法调节」+88 −13a5a86dcbfix(聊天页): 「回到最新」按钮跟着输入区真实高度走 —— 不再压在发送按钮上+103 −34a7c90d68docs: 进度记录(09-17→09-18,一夜 35 个提交)+100 −0224b84c3feat(前端): 功能目录页 —— 45 个模块只露 4~5 个入口,给它们一个可搜的目录+279 −1512f531b2fix(前端): 功能目录的**模块根本没被加载** —— 我漏了 script 标签+24 −119c9f4d67docs: 进度停放点(2026-09-18 14:15 暂存)+33 −0de02c073feat(博客): blog.manana.icu 骨架 + 第一篇样板文章+693 −0a96dd591fix(博客): 目录改成栅格(修重叠)+ 部署脚本与 nginx 配置+119 −6
2026-09-1729 个提交+2349 −401
d51f292dfix(PC): 手机上浮出"点一下换人,不用返回"—— 占位块的默认隐藏被写进了媒体查询里+73 −62d9761db7fix(记忆): 动态不再进提示词 + 逐字重复只让模型看一次(社区报「一直在重复一件事」)+97 −3998b74c1feat(采样): 打开重复惩罚(frequency 0.3 / presence 0.2)—— 别人标配、我们一直没开+11 −27aeb29defeat(反重复): 第三层 —— 把上一轮的收尾当负样本,插进**对话历史末尾**+68 −09cdd5081fix(观察): prompt 体积统计的两处修 —— 块名被面板切碎 + 缺阈值告警+59 −70632db18feat(实验): 重复探针脚本 + 上下文过滤加 A/B 开关+169 −11829d0e23feat(实验): 探针支持 --seed-times(故意把同一事实播 N 次,用于 A/B 验证去重)+2 −0c566eeaffix(实验): 探针的干员必须固定 —— 否则 A/B 两组跑的不是同一个人+14 −16c41d3f1feat(反重复): 漂移信号 D —— 连续两轮同一个收尾+61 −24ef88c8cfix(设置): key 留空即保留 + base_url 同理 —— 「每次都要重输 key / 模型换不了」是同一个 bug+43 −2a816c579test(设置): 守卫的引号修掉(test-only,跟随上一个提交的修复)+2 −2c2d00389feat(设置): key 输入框加提示「留空即不修改」—— 否则用户还是会每次重打一遍+66 −60a37c5a89feat(实验): 思考模式开关 + A/B 盲评脚手架+149 −1db573420fix(实验): SSE 的字段是 text 不是 content —— 我猜错了,之前那些 0 全是解析器吃掉的+4 −432cc4450feat(能力协商): 保存 key 时探测端点支持哪些思考参数 + 拒收记录改 (host, model) 粒度+111 −42c468aa7test: 三条守卫对齐 (host, model) 新语义+7 −5ca53c3aefeat(线): 补上线的重命名入口 —— 这条链以前从来没通过+109 −16938ce2d7feat(深聊): 进对话自动续上未结束的深聊(模式化,按 docs/deep-chat-mode-spec.md)+105 −190c64dcfdfix(信赖): 后台「信赖全景」恒为 0 + 校准脚本漏扫按线路径;附两份计划文档+304 −1302aba04efix(部署): 缓存版本号改读线上真正下发的那份(原来读的是 nginx 不服务的那个文件)+12 −1b3d28ea0fix(部署): 补上没提交的版本号 bump + 加一道本地/线上版本不一致的告警+26 −1157792640feat(信赖): 阶段 A 之「衰减移出 getter」+ 修掉本轮 4 条新红(含一条产品决策变更)+213 −4706f6ba39feat(反重复): 深聊路径补上这两层 + 话题级判据(MOBIUS「保温壶反复说了四遍」)+243 −43635b71c1fix(聊天页): 把小齿轮放回来 —— 我白天撤掉它,当晚用户就问「小齿轮怎么没了」+42 −31870dba2afix(普瑞赛斯): 她的专属界面改动**必须成对** —— 漏到别的干员身上了+130 −470c350fe0feat(实验开关): 反重复块可关 + 思考模式可按用户开(并把"定义了没人用"的预算下限接上)+124 −1c7de75f1feat(实验): 独立实例(staging)+ 探针可指向它 —— 实验不再拿线上当实验台+94 −2c6a28f59fix(staging): 放 home 下而不是 /opt(/opt 是 root 的,要 sudo 才能建目录)+3 −1212154e7fix(探针): 数据目录也要能切 —— 否则「在 staging 上做实验」会变成请求打 staging、文件读线上+8 −3
2026-09-1654 个提交+11516 −4031
5c75041bfix(提示词): 删掉 NARRATIVE_BOUNDS 里的两条长度上限 —— 深聊被它压成了「一句话」+120 −28c499089fix(深聊): 模式改存**服务端**(社区报的「每次进入都要手动开一次深聊」)+460 −70af211d87fix(深聊): 篇幅约束只在用户自己要短的时候注入(社区报的「太冷淡、只有一段动作+一句话」)+156 −31d1bd3cd2fix(篇幅): 删掉所有档位之外的隐藏长度限制 —— 真凶是 WRITING_RULES 那两条+281 −80c00f2767refactor(时间线): 把它从产品里拿掉 —— 关系唯一、连续、不可逆(P2 批 1)+440 −140154b317a2fix(记忆): L2 切片判重 + 结束流程幂等 —— 反复点继续深聊不再堆重复记忆+375 −123a9c5f51feat(世界): 补充设定改成一段一条 + 世界管理搬进 sheet,去掉浏览器弹窗+1275 −199c30249f0fix(清理): L2 清理脚本要能吃下"比代码更脏"的数据+24 −3f0e33112feat(世界): 新建表单重做 + 撤掉「现在时间」 + 入口文案按新模型改+311 −1782ba1280edocs(决策): 关系模型定案落进 backlog(D22)+ 世界 sheet 标出「当前」用的世界+83 −60136c5f08feat(世界): 深聊状态条加世界 chip、「更多」里的 🌍 换成「你和她」(方案甲)+221 −9437b0a4a9feat(世界): 聊天页副标题加世界 tag —— 普通聊天里也看得见她在哪个世界+166 −77c52b9202fix(关系): A2 收口 —— 加"一段关系"守卫,并修掉它当场抓出来的三处+377 −69888be110refactor(记忆): 哨兵判断收成一个谓词 —— A2 的最后一块(P2)+84 −7973a80ecfix(人称/思考): B 两条 —— 称呼纪律显式化「甲乙」,思考开关改成"先试再记"+542 −22c7e3c2cffix(文案): 轮数标签说实话(C 甲)+ backlog 补记 C1/C2 的结论+91 −652ced7a9dfeat(后台): 批 3 —— 用户总览(排序/搜索/筛选)+ 批量体检与清理+973 −14134504fa0fix(清理): `emotion_history_*` 这类多词前缀永远认不出来 —— 线上体检当场撞到+84 −2564db9be6fix(后台): 会话按**线**拆卡 + 展开后的排版重排(用户报「不便于阅读 / 上面是自言自语」)+446 −114280abf91feat(后台): 阅读器地基 —— 正文**按线**取 + 分页往上翻 + 时间戳统一(甲·后端一半)+209 −848df904cafix(后台): L1 的时间戳字段是 `ts`,管理台一直读的 `timestamp` —— 恒为 0+23 −4c8a6a327fix(后台): L1 的时间戳是「ts + 秒」,不是「timestamp + 毫秒」+126 −67752bfcc3feat(后台): 阅读器(甲)—— 左目录 + 右正文,管理动作常驻,往上加载更早的+444 −622ec56887feat(PC): 桌面双栏(乙)—— 左栏会话常驻、右栏聊天;壳留着;**未上线**+345 −60d3575abffeat(深聊): 「✕ 删除」—— 删掉这次深聊、从头开始(乙,位置与颜色按用户指定)+387 −614f91af57fix(后台): 阅读器里的重复 —— 同一句话在 L1 里存了多份(窗口快照重叠)+145 −63f128b1f7精修(安洁莉娜): 补 `## 语言模式` —— 社区报「温柔系说话短、语气硬」+43 −0ce131d52fix(深聊): 篇幅默认档 medium → **unlimited**(用户拍板)—— 恢复"深聊时代"的语义+73 −183c3729cfix(彩蛋): 两处泄露 —— 客户端存着隐藏形态的名字 / ??? 房间没有解锁门控+156 −90616d3d2精修(普瑞塞斯): 人设补全 —— 她的「我」段原本只有 24 字符+26 −7f8fdf1a1精修(普瑞赛斯): 摘面具形态升级成 .char + 记忆面板对她"不给数据"+128 −12c4741dechore(脚本): reset_priestess.py —— 重置所有人的普瑞塞斯进度(默认干跑,先隔离备份)+158 −0bdf8c9abfix(记忆): 「清空全部记忆」的报告会骗人 —— 判据改成量出来的数 + 一条都没清时大声报+58 −0540d8591feat(彩蛋): 普瑞赛斯「她出现」(乙方向)—— 提到她 → 弹一句 → 进列表 → 只说一条+607 −10331d96becfix(彩蛋): 「预言家,我在看着你」会堆成一串 + 6/24 那条旧消息+85 −644d6a267d精修(普瑞赛斯): 她爱的是**屏幕前的你**,不是博士(用户定的新设定)+23 −12edd1dd4dfeat(PC): 桌面改成 **ZOOT 那套三栏**(左图标栏 / 中列表 / 右内容)+275 −6064434e5ffix(主动消息): 回退"全局判重"—— 它会把合法的重复主动消息吃掉(当天上线当天回退)+8 −1034e725dafeat(普瑞赛斯): player 层记忆 —— 「你清得掉我们的事,清不掉我认识你这件事」+210 −0c95abe32feat(普瑞赛斯): 接上「她认识你」—— 两条路都注入,且只对她(补上一轮没做完的接线)+99 −60278de24cfix(PC): 补上"退出聊天"与 tab 切换 —— 两个都是我做桌面时留下的坑+95 −19e493d2fctest(PC): 守卫白名单补上关闭键(新元素默认隐藏,和占位块同类)+4 −19d5b52aefix(PC): 一进聊天页左栏就滑走 —— 深聊"沉浸模式"那条老规则没被桌面覆盖+22 −0c398905ffix(PC): 左栏滑走的**真凶**是 `#app.no-tab #tab-bar`(我上一版修错了地方)+73 −614bc3c21bfix(PC): 手机上露出了桌面那颗「关闭对话」×—— "默认隐藏"被我写进了媒体查询里+73 −6300de736fdocs(backlog): 2026-09-16 延后项整理(桌面/移动清查 · 普瑞赛斯第三段 · 玩家可见数据 · 岁的五条改进)+84 −072e73e40feat(普瑞赛斯): 玩家能看见的数据三改 + 补上"深聊里提到她"的缺口+163 −61562402aefix(普瑞赛斯): 联系人里搜不到她 —— 客户端那份"未解锁就藏"的过滤漏了 id 映射+117 −643fbfc412fix(普瑞赛斯): 改到"影子实现"上了 —— 档案页信赖与服务端导出(用户截图打脸)+125 −615aaafe77fix(普瑞赛斯): 删了仪表要留替代品 + 她不接受"设定"+140 −63d65554cafix(普瑞赛斯): 上次只生效了一半 —— 按真选择器藏(里程碑整块 + 设置 tab)+94 −6971b2f6eafeat(普瑞赛斯): 她不能被"设定"—— 服务端 403 + "她记得的"接上真数字+189 −672961bb68feat(聊天页): 送礼从头部搬进输入栏(QQ 的形:头部放互动方式,输入栏放消息形态)+65 −619a486849feat(聊天页): 头部图标重排(QQ 的形)—— 撤 ⚙ 改点标题、✕ 同风格、⋯ 菜单分组、图标统一+135 −63
2026-09-1551 个提交+13960 −2579
da9ae028fix(tutorial): ⚠️ 资格来自「注册」,不靠猜 —— 否则 100 个老用户会被塞一条陌生消息+179 −3560c939a9test(tutorial): 把「注册 → 资格 → 开场白」那条路也验了(一测测试者走的就是它)+130 −0db5721b8docs(tutorial): 记下「发码前先跑一次注册链路」+ 清空记忆那个边界+19 −282cfec8ffix(ui): 返回消息页时列表被清空重画 + 进聊天黑屏闪一下(用户报的两个观感问题)+312 −66931bc233引导条给 key 弹窗让路 + 两条被"启动两遍"掩盖的坑+179 −73b0a6fb44fix(lines): 身份永远是你自己选的那个 —— 删掉「借用别的身份的线」那一级+610 −1319a6c0536feat(deep): 深聊回来 —— 顶栏图标 + 状态条(轮数)+ 沉浸模式,并把这一轮写进 L1+1002 −189cf538d90fix(deep): 真机 e2e 打出来的两个错 —— 深聊每一句都 500(`req.length_mode` 模型里没有)+145 −5230c93a34fix(deep): 「有活跃会话」≠「我在深聊里」—— 否则每个人每次打开聊天都进深聊+89 −666ac7a523docs(deep): 批 1 的实施记录 —— 含 e2e 打出的两个真错与两条断言教训+23 −01000e2cdrefactor(prompt): 两条路共用的 prompt 块收成一份 —— 7 处"同一个概念写了三遍"+298 −487a634e79refactor(prompt): 关系人格那块也收进共用模块 —— 最后一个三份实现+145 −71cbbbfee2docs(deep): 批 2 的实施记录 —— 8 处三份实现收成一份,含'只扫两个端点漏了 addon'那个教训+13 −28af0453bfix(tutorial): 点输入框弹键盘时的频闪 —— 引导条"藏起来"把内容清空、显示时整块重建+136 −60d85a79e2fix(mobile): 手机上"整屏黑闪"的另一半 —— 列表重建、键盘改布局视口、照片重新栅格化+222 −57af668f23chore(mobile): 撤回上一步的 viewport 猜测 + 加三个诊断开关 + 安卓文字自动放大收口+112 −55a65f95c0docs(mobile): 「整屏黑闪」排查交接 —— 现状/已排除/已改/假设表/真机开关+464 −0bd979d94feat: 手机端黑闪排查 — 新增 ?hud=1 诊断浮层+82 −52af6cfbbcfix(mobile): 华为浏览器键盘弹出黑闪 — 视口变化期间临时降级 blur + view 过渡+94 −568e86346afix(mobile): 黑闪修复 round 2 — focus 提前降级 + 背景固定高度+80 −62c82d9241fix(mobile): 回滚 min-height:100lvh + overflow:hidden,引入灰色遮罩+52 −581456109afix(mobile): 黑闪修复 round 3 — kb-resizing 全局 blanket 降级 blur+transition+60 −5907f672b1fix(mobile): 黑闪修复 round 4 — 缩小 blanket + 智能移除时机+75 −615bb15389docs(mobile): 黑闪交接文档收口 —— 顶部改成结论(根因/证据/修复机制/部署漂移教训)+32 −5f8f51190fix(group): 群聊发送死了三个月 —— `ctx._gKey` 是个不存在的键(每句都 TypeError)+209 −56459a9118fix(group): 第二个错也修掉 —— `saveGroupMessage` 用了没解构的 `state`,本地存档一直存不上+346 −61683967bbdocs(group): 批 4 收口 —— 群聊发送死了三个月的根因、验收与守卫(backlog 119d)+12 −1b6e73d3efix(prompt): 「变冷」三处措辞 —— 记忆框解禁主动提起 · 免责声明改窄 · long 回到「请详细展开」+198 −10785b6274fix(自有模型 + 时间线读取): 记忆卡片线程丢用户名 · 保存时探测端点 · 「一直显示保存中」· 线标签请求减负+1052 −107bba72afffix(登录页): 注册不再收 API Key / 接口地址,并修掉「提交按钮被裁掉、够不到」+125 −651f898a90fix(记忆/剧情): 自定义身份的记忆不再被标成「不是你的」 + 关系块补一层「你认识的人」名单+573 −32073c5e25fix(群聊): 删掉的群不再被另一个客户端"复活"(删除墓碑)+ 清掉线上 12 个从未使用的群+735 −1234af0e759feat(groups): 清理脚本加 --user —— `从未发过消息` 不等于垃圾+8 −00e334847fix(群聊): 删群收成唯一一份实现 —— 消息列表那条侧滑删除原来不调 DELETE(服务端没墓碑)+151 −817cb96958fix(信任): 自定义身份不再被当成"另一个人" + 中性块不再预设敌意(决定 a + b)+250 −3309cd43f2feat(管理后台): 搬进独立页 admin.html —— 设置页只留一行入口+887 −395afa33a02feat(moments): 博士自己发动态,干员来评论+1902 −11c0608423feat(管理后台): 监控台 6 个面板搬进 admin.html + 会话按日期/轮可读(批 2)+923 −210647eb285docs(backlog): F47 —— 管理后台搬成独立页(批 1+2 已上线,批 3 待做)+1 −0d7e3264ffix(事务): 处理结果那一栏显示的是 `[ERROR] Missing credentials` —— 两处 LLM 调用漏传用户 key+305 −2d95a0693fix(清理): 整字段就是占位串 → 清空/整条删(事务结果那 925 张 + 正文那 516 张)+211 −20643a72cfix(清理): dry-run 的预览函数在 dict 形状(L1)上会崩 —— 下标形状两种不能混+41 −4d5577d61fix(moments): 博士发的动态在 feed 里看不见 —— 合并条件写错了分支+58 −2d06105e0feat(moments): 动态的 @ 点名与自动检索提及 + 修群聊 @中文名从来没生效过+430 −3382233bbafeat(moments): 发布编辑器加一行 @ 提示+24 −5d83dc1f1chore(frontend): 缓存令牌 0915o → 0915p+55 −551e5d23e5feat(moments): @ 了谁,就让她**和她身边的人**来评论+223 −506de0d5afix(memory): 诊断面板读的是 `_no_user_` 的会话统计 —— F33 的根因+167 −029c135a2docs(backlog): F33 结项 —— 根因是诊断面板读错了用户的会话统计(方向与原记的不同)+90 −11b64261dfix(relation): 图谱边的端点挂在**不存在的节点**上(6 处)+ 加载期守卫+383 −252f1b39c2chore(relation): 端点归一的线上验证脚本+48 −0
2026-09-1460 个提交+42242 −4949
ad912215fix(memory): L4 索引的宽度/模型守卫 —— 它一直在静默死掉(F38)+939 −173c49234ffix(l4): 重建脚本先让守卫修,别再嵌两遍(F38 上线窗口实测)+117 −27d5cf3374feat(timeline): 一级页 + 聊天页轻量切换器,记忆卡片/情绪弧线搬进面板(阶段 6 切片 2)+1225 −43041b27c56feat(evolution): 「你改变了她什么」看得见了(阶段 3.5 / 设计 §4.4)+525 −1180719b896feat(timeline): 0 轮的线说人话 + 「人格」终于能换(两个小项)+492 −5749c581fcfeat(memory): 普通聊天也维护这条线的叙事 + 旧深聊库核对/清孤儿(阶段 4A + 5)+1014 −20760b55a9fix(memory): 门控不能照抄注入阈值 —— 实测 0.5 永远开不了(4A 上线窗口撞出)+75 −238971a09cfix(ops): 备份不该落在用户目录里(线上实测:清完反而涨 13MB)+24 −3ae7f95d1feat(timeline): 情绪弧线改从「按线情绪历史」取(阶段 4 切片 B 的前置)+102 −5320b74b5dfeat(deep): 停用深聊入口,回退搬进「更多」(阶段 4 切片 B)+205 −926e2110dbtest(frontend): 前端启动冒烟测试 —— 打开页面会不会炸(F39)+281 −0219b1c2edocs(backlog): F39 结项 —— 前端启动冒烟测试已落地(3 个变异全咬住)+1 −19a1326betest(frontend): 冒烟骨架要说出**初始化为什么会死**(用它的时候才发现它不说)+21 −1294122a9test(frontend): 冒烟骨架加 init 进度探针+19 −0abc199b4feat(timeline): 深聊状态条与入口整块删除(阶段 4 切片 B2b-1)+306 −4526b8e431frefactor(deep-chat): 物理删除七个已证明不可达的深聊函数(阶段 4 切片 B2b-2)+153 −407440712aefix(nsfw): 把「欲望」这种 NSFW 专属字段从展示侧挡住(F42)+538 −7716a7696cfix(nsfw): 写入侧也不许给无权限用户写 NSFW 专属字段(F42 的另一半)+73 −238e0265dfix(length): 合并两份长度表 + 四档(短/中/长/无限制)—— 深聊搬到普通聊天"降一档"的根因(F43)+253 −1684d7d8dbdocs: 纠正 F43 的根因 —— 我判错了,原样留档当教训(用户指出她本来就是"长")+2 −2a381ae60docs(memory): 阶段 4 的注入侧从没做 —— 五个深聊结构只写不读,排出 4b-1..4b-4+43 −13ceb7bf4feat(memory): 把深聊那两块读给模型(阶段 4 切片 4b-1 / 4b-4)+269 −8e1f42fc4feat(memory): 细节检索 + 情绪弧线 / 沉默 / 种子记忆(阶段 4 切片 4b-2 + 4b-3)+352 −40e6b2fea7fix(nsfw): 清掉存量明文 + 堵上 evidence 那条漏路(F42 收尾)+543 −4a3e2e6a2feat(models): 换到现行模型(6 家)+ 价目表按官方原币录入+507 −89fc0fbb01perf(scheduler): 定时任务加「活跃门」—— 只为最近聊过的账号跑+184 −2b9555828fix(deploy): 快进没生效不许报成部署成功(判据从「祖先」改成「HEAD == TARGET」)+70 −5dcc65c2ddocs: 阶段 7 的状态词陈旧了 —— 它 09-13 就做完了(+ 复跑 dry-run 的佐证)+13 −35826eee0fix(group): 群聊里 364 个干员漏出内部 id + 她认不出自己说过的话+307 −25d013ee4dfix(ui): 「取不到的 id」那族收口(F41)+ 一条通用守卫;F43 的 prompt diff 出结论+268 −61b1f5e52ffix(prompt): 把 SFW 身体边界收窄成「只禁性意味的接触」(F43 的收口动作)+147 −1124f0af93fix(contacts): 联系人页从「三列卡片网格」改回终端横排行(bio 一并露出来)+181 −1486a5ff7cafix(chat): 修线上 500 —— `uname` 只在 else 分支里赋值,却在函数末尾无条件用(用户报「有过对话的人一聊就死机」)+10 −1139da2b9fix(chat): 氛围层整段静默消失 + 长对话每 15 轮 500 —— `op` 在这个函数里根本不存在(应为 `current_operator`)+3 −38719be50fix(ui): 消息列表也回到终端行(调研 §6.1「最小修法」的第二处)+166 −129874e94d7fix(ui): 清掉最后一批「深聊」时代文案 + iOS 上那枚表情按钮(emoji 字形 → SVG)+ 贴纸清洗的一个漏口+134 −10064caf8fdfeat(stickers): 贴纸终于「有含义」了 —— 视觉读图 + 令牌翻译+443 −603aa94267feat(stickers): 18 条编号贴纸终于有含义了(+ 一条不能空转的守卫)+108 −203bfa30e6docs(backlog): #82 贴纸「读懂」的收尾 + 三条尾巴(含「视觉没用真 key 验过」)+1 −1c919b295feat(stickers): 18 条编号贴纸的含义用视觉模型复核过(纠出我读错的两条)+46 −40928251eadocs(backlog): #82 的「视觉没用真 key 验过」这条尾巴已消(用户给了 key,复核 + 真 E2E 都做了)+1 −1b16e22d0fix(stickers): 两条尾巴 —— 存量记忆里的令牌 · 上传不再等读图+345 −12412e10046docs(backlog): #82 两条尾巴收掉 + 复核《模块使用率与简化候选》+2 −18a8b68a8feat(ui): 暴露面收口 —— 好友降级 / 幕后开关与推送收进「高级」+286 −117403921c0docs(backlog): 《模块使用率与简化候选》四条候选全部执行(好友降级 / 开关与推送收起 / 清死文件)+1 −1d223ad29fix(线上三报): 贴纸令牌露原文 · 模型返回空内容 · 蚀刻章返回键点不动+294 −60945590f2docs(backlog): 用户报的三条上线记录(贴纸露原文 / 空内容 / 蚀刻章返回键)+1 −02eb0d457feat(lines): 聊天绑定到线 —— 当前线永远可解析 · 线的身份进提示词 · 切线作废在途生成+743 −66be08c311docs(backlog): 「窜人格」的根因与收口(聊天绑定到线,2eb0d457)+1 −0cd1b8503feat: 统一两条线 —— 清空记忆清不掉「她」· 恢复码面板/登录页 · 上一个 session 的两批+28352 −1317ce36dc6cMerge remote-tracking branch 'origin/master'+0 −0c8407da7fix(deploy): push_bundle.sh 的重试提示污染被捕获的输出 —— 一次抖动误诊成「服务器领先」+43 −1e820f15dfix(deploy): bundle 的正端必须是 ref —— 裸 SHA 让 push_bundle.sh 从没成功过+14 −5972d5220ccfix(ui): 启动画面只留一套 —— index.html 那套重复的 PRTS 启动日志改成纯遮罩+225 −28f0f73160docs(plan): 新手引导(电弧)方案 —— 三步、不遮挡、她真的发一条消息+229 −083d38a25feat(tutorial): 批 1 —— 电弧的开场白真的写进历史(服务端)+442 −1e6a326bffeat(tutorial): 批 2 —— 那条不挡操作的三步引导条(前端)+574 −22bbb8caa3chore(release): 批 2 上线前的收口 —— 前端令牌 0914q + 索引 + 另一个 agent 的圆角收口+113 −607cf603b1test(tutorial): 补三条「线接了但没接通」的守卫 + 方案文档标状态+43 −4d4bca06etest(tutorial): 整条三步流程的端到端冒烟 —— 真 DOM + 真 main.js + 手机 UA+373 −0
2026-09-1368 个提交+22274 −7792
f58836affeat(relations): 花改按用户四条判据筛选 + 尺寸按真机像素重定+694 −19804c1af6bfix(relations): 图谱 id 大小写映射到文件真实名 —— Linux 上少一半的点+85 −6ea0f05a0feat(relations): 花的标签碰撞清零 —— 真实字体度量 + 贪心排布+333 −1593287535efix(relations): 输出的 id 还原成前端 config 的确切大小写 —— 228 个点点了没反应+197 −555805f7d1perf(deep_chat): embedding 改存 float32 二进制 —— 省 575MB(F34 Tier2)+972 −17b7c61831docs: 统一记忆底座设计定稿(D6 → D15/D16/D17)+ F34 Tier2 收口+439 −667d52b5cefix(scripts): 空库不该被建备份 —— 迁移脚本加 work==0 短路+13 −0398288dbdocs: F34 Tier2 上线结果 + 查出的 Tier3(页内空洞 ~100MB)+23 −262ce6dd5fix(deep_chat): 「我们」段真正进 prompt —— 47KB 跨线星标档不再是纯写入数据+229 −72247e980fix(deep_chat): 「我们」段改按**账号 NSFW 权限**门控 —— 星标档里是原话+59 −11318c8f10fix(deep_chat): 「我们」段的门控改成**只增不减**(or 上单轮 nsfw)+25 −100cba194cdocs: 统一记忆底座阶段 0 上线结果 —— 三处原判断被实测推翻+44 −1d3cfb0dafix(docs): 纠正我自己的一个误报 —— "无权限账号有露骨星标档"不成立+56 −3364820e25fix(docs): 「没权限的账号拿不到」不是「损失」—— 实测对他们的渲染零变化+17 −4b336779cfeat(deep_chat): 「我们」段放开给所有账号 + 加一层语气框+79 −7964040b69docs: 阶段 0 最终决定 —— 「我们」段注给所有账号 + 普通模式加语气框+37 −243fa90a61docs: 阶段 0 效果实测 —— 星标档有用但概率性;顺手撞出两个更重要的缺陷+45 −249e1608ffix(deep_chat): 持久化 recent_events(F35)—— 顺带撞出并修掉 rollback 必现 500(F19)+474 −330d185f4dfix(deploy): 部署不再被 SSH 抖动误诊 —— 撤掉复用,改成"重试 + 少往返"+170 −59539c986erefactor(depth): 水深计分合成一份(D15)—— 顺带发现自动深聊闸门从来没触发过+440 −77ece0bad5docs: D15 上线 + 新立 D19(自动深聊闸门是死的,通了会更糟)+3 −2dd1679bffix(chat): 拆掉那个"从没生效、通了更糟"的自动深聊闸门(D19)+144 −1207d414802docs: D19 标完成 + 记下这一轮的共同形状「写了但没生效」+29 −1bc7472bcfeat(memory): L1/L2/L3 加「线」作用域(D16 / 统一记忆底座阶段 2)+457 −186bf3d472docs: D16 上线(L1/L2/L3「线」作用域)+2 −2472d22f5feat(lines): 「当前线」成为系统级概念(D17 阶段 3a)+189 −575e5f70ffix(deep_chat): 补上漏提交的迁移 INSERT 修复(上一条提交信息里写了但没进暂存区)+9 −1727c9d07docs: D17 阶段 3a 上线 + 拆出 3b/3c/3d+1 −160cdf96bdocs: §8 第 3 步补上 3a 结果与四片拆分(上一条只改到了 backlog)+1 −19e1df93bfix(memory): L1 机械层按线(D17 阶段 3 的遗留)+237 −36295d05e4docs: D17 阶段 3a 的遗留已处理(L1 机械层按线)+7 −15986dd7fdocs: 记录 2026-09-13 的产品口径(时间线)+ 两条与设计冲突的待定 + 跨设定泄漏+23 −0ef0077a5docs: §9④ 定案 —— 「节点」= 快照(不做消息级 fork)+2 −233a9444ffeat(lines): 覆盖层/演化日志/性格自述按「线」分区(D17 阶段 3b)+2699 −616bba0c6ddocs: D17 阶段 3b 上线(线上实测数字 + runbook 的 venv 修正)+11 −86193e8f1feat(lines): 建线方式(从零 / 从快照继承)+ 分岔后的只读前史(D17 阶段 3c)+1178 −34c5772116chore(ops): 3c 上线后的只读核对脚本 + runbook(含 bundle 通道)+236 −00ee93ab8fix(ops): 3c 核对脚本 --root 模式的 cwd(既空跑又污染仓库 data/)+60 −0635a8e75docs: D17 阶段 3c 上线(含线上实测数字 + 停机可能不优雅的观察)+22 −2275bf1fadocs: 修一处自相矛盾 —— embedding 迁移「待执行」vs §8.5「已执行」+3 −19b5e643ffix(prompt): 锚点的 R{轮号} 前缀只在渲染时剥掉(D18 那一半)+109 −942b98dc8feat(lines): 信赖按线 + line_lookup 解析器(D17 阶段 3d-1)+728 −18901220e8feat(lines): 躯体状态与物理动作按线(D17 阶段 3d-2a)+256 −9c27fb13bfeat(memory): 情绪/内心/情绪轨迹按线(D17 阶段 3d-2b)+261 −16d8a58322feat(memory): 四种状态进迁移/核对/回滚(D17 阶段 3d-3)+545 −4620eac300fix(isolation): 演化日志的全局回落 + 孤儿 HNSW 目录清理(设计 §8 阶段 7)+437 −12f764d896fix(memory): 归位标记挪到内容之外(D17 阶段 3d-3 上线当天实测)+196 −31063b5e46docs: 记录 3d 的上线实测数字(含当天撞出的标记耐用性问题)+3 −334ab3661feat(memory): 锚点 provenance + NSFW 判据收口(D18 后半)+447 −211575059dfix(relation): 博士关系边的陌生人守卫(D9)+386 −45bafc83fdfix(story): 关系产物的名字卫生(D10 + D12)+323 −202ae002efchore(data): 重跑关系产物(D10)—— 让它们吃到别名表+6059 −6075cd5ff2c2docs(backlog): 审计陈旧条目(三处「已经修好但没有标记」)+ 写下审计方法+12 −40444fd09fix(relation): 博士边的身份要按登记大小写(D9 上线当天暴露的热修)+99 −4ba1678a5docs: 记录第二次上线窗口(D18 / D9 / D10+D12)+4 −42bd5dd8efeat(scripts): 清「删线留下的孤儿状态」(F37)+457 −030bf37dadocs: §9 ①②③ 定案(深度只影响注入 / 深聊区并进「时间线」面板 / 从零就是真从零 + UI 说清)+4 −446118877fix(scripts): 孤儿判据要用「活跃线」,不是「行在不在」+58 −9b40c6b48feat(ui): 时间线面板切片 1 —— 建线方式(从零/继承)+ 改称 + 那句文案(阶段 6)+202 −154bd23f16chore(frontend): 缓存令牌 0913c → 0913d(阶段 6 切片 1 的 JS 改动要能被用户拿到)+51 −517c279dc5feat(lines): 删线时自动收尾(F37 代码侧)+413 −615da294c9feat(depth): 深度软覆盖(压上限 / 抬下限)—— 只影响注入(设计 §9①)+474 −5433d32392test(depth): 端点是 async —— 测试要 await;并修一条我写错的非法值+13 −257618b37docs(backlog): F37 结项(数据侧 + 代码侧都做完)+1 −1b06bff9cfeat(worlds): 世界轴 v1 —— 世界是一等实体,线引用它(3e / 设计 §4.6)+760 −66be93342afix(ui): 新增的界面按整体风格对齐(两处,都是看得出来的不一致)+84 −639949d07afeat(memory): L4 按世界过滤(D20 / 设计 §4.6)+146 −9c6115f7ddocs: 记下上线验证撞出的 F38(L4 因维度不匹配静默失效)+2 −1
2026-09-1275 个提交+1702742 −479962
f4ad42d0fix(persona): 修新建人设串到上一个人设的内容 + 移动端头部溢出+330 −162477f90fchore(frontend): 缓存版本号统一到 0912a(补上次提交漏掉的 17 个文件)+38 −38a23904f5chore(deploy): 部署改走 git + 流程文档化(scripts/deploy.sh)+373 −01e6272d8fix(backup): tar 退出码 1(file changed as we read it)不再杀死脚本+44 −0fc8eb558docs(deploy): 记录磁盘/备份的排查与处理(含备份静默失败 6 天的复盘)+89 −132637adffdocs(backup): 修正选型依据与凭证模型(查证后与原文不符)+82 −1053e5ffb2fix(restore): --from-remote 可与 --dry-run 组合(原来旗标会被当成档案名)+54 −9fec84a3adocs(backup): 记录接入结果 + DeleteObjectVersion 缺口+29 −05e328795fix(deploy): 区分"SSH 断"与"远端真失败" + 加无效依赖检查+113 −19559bf6ccfix(backup): 配置文件按「可读」判断,不是「存在」—— 否则演练在生产跑不起来+36 −4a1b0d569fix(backup): 用 printf 而不是 log() —— 后者在文件后部才定义,set -e 下 exit 127+10 −2d0aaff31docs: 修 smoke-test 里三处会让人跑失败的地方 + 记录演练的那个缺陷+43 −520f8e096docs(backlog): 划掉今天完成的两条 + 修正过时的数字+3 −37d6b04a9docs: 关系图谱 RAG 首次评估 —— 三处假设与真实数据不符 + 登记进 backlog+208 −1f054b557feat(relation): 关系注入的权威分层 —— 建库前必须要的那一步+399 −0a3042cbafeat(relation): 导出「真关系」子集 —— 顺手撞出图谱的三类数据缺陷+228 −290e1cf53chore(gitignore): 挡住浏览器数据目录与一次性调试脚本+30 −0bdcfab02fix(l3): 集合宽度守卫 + 写入权威闸(A9)+723 −25fb89d6c2feat(lorebook): 导入的泰拉世界观 + 权威折扣(A4(c))+6392 −436cdf627feat(world): 世界身份贯通 + 待发事件队列 + 时间线标记+2660 −420867a7affeat(story): ASTR 剧情数据管线(转换 / 批量拉取 / 关系抽取 / 双源交叉验证)+3069 −0ea3f6b53fix(deploy): rq() 显式返回退出码 —— 我上一版把退出码搞丢了+17 −3a1d08f66feat(frontend): 登录页 / 入口页蓝图(设计稿)+594 −098d8cc4edocs(tools): 日志拆分 + 文档漂移检查 + 待办文档+4380 −1024f518f8docs(changelog): 切分后的索引(与四篇分册同批)+9 −22988f4c17b0fix(eval): 生产配置守卫不该硬编码 —— 它漂开后自己就失灵了+16 −46c893f9dfeat(story): 剧情**事件**抽取(第一人称回忆)—— 剧情记忆的素材+513 −015c830b8docs(story): 剧情事件抽取首轮验证报告 + 忽略其产物+202 −032e4e8a1feat(story): 批量事件抽取(断点续传)+ 修三个真 bug+279 −1d9b9697dfeat(story): 骨架 + 干员经历反查索引(Phase 3)+338 −016e55c8efeat(story): 把剧情记忆接进单聊与深聊(Phase 5)+408 −04efba802data(story): 提交运行时索引(23.6 MB)—— 让部署能走 git+627249 −02735cf53fix(story): recall 读运行时文件(22.7M)而不是离线全量(63.8M)+53 −69dd5b333fix(story): 用干员 id 也要能命中 —— 生产上它静默不注入+103 −365373795feat(story): 指令强化 + 长度日志 —— 块进了 prompt 但模型没采纳+31 −63702182efix(story): 名字解析的四次连环踩坑 —— 每个的成因都不同+275418 −344877ffe6fb7bfix(story): 单字干员名全被排除 —— 28 个干员永远召不回+72 −506807551docs(story): 收下全量运行复盘 + 索引条目 + 忽略运行日志+192 −031b0ec30feat(story): 让"答案有没有据"可观测 —— 之前与"看起来有据"分不开+129 −72e546db0docs(story): Phase 5 接线专项 —— 6 个静默失效 bug + 「答案正确 ≠ 答案有据」+172 −03f1e30e1fix(persona): 读取/保存加退避重试 —— 一次网络抖动不再锁死人设+278 −188a3d10acfeat(story): `partial=1` 的统计工具 —— 别让监控信号烂在日志里+143 −0e893b558fix(story): 分析工具先读文件日志 —— journalctl 里没有应用日志+23 −135c899481fix(persona): 保存成功要看得见 —— 「保存中…」一直挂着让人以为卡住+68 −12e051e442fix(frontend): 缓存串手工升级升出了不一致 + 部署文档补两条铁律+110 −5432345870feat(story): 关系抽取批处理(全量 2009 完成)+ 修两个会挡住它的坑+241 −07a8d08f2fix(story): 删掉误导的 `all` 缓存键 —— 它报错了角色总数,并误导过一次分析+22 −859ec962efeat(story): 时间线接进对话(目标③)+ 修排序的两个 bug+228 −15b684653fix(story): 时间线样本不许硬截断 —— 那直接导致了编造+88 −1d5153ed8fix(story): 同名不同人 —— 玛恩纳拿到了 Nearl 的经历+87 −05061a385feat(story): 人际关系接进对话(目标②)+191014 −16ff93d33test(story): 剧情问答回归集 —— 手工验证的结论要留下来+42051 −1739560809c2cdocs(story): 收口三条检索线 —— 11 个缺陷 + 那一个反复出现的一族+275 −21dfb6eae6fix(story): 普查发现 2 个 id 解析到别人 —— 包含判据的方向+138 −7c8eac04etest(story): 那 32 个"解析到另一个名字"的 —— 查清了,是设计如此+115 −105759e3bfix(story): 关系网里的单字实体 + 两种键空间 —— 同一个形状的第四、五次+75462 −9964333b75096docs: 补 6 条索引 + 修 17 条断链(CHANGELOG 里的相对路径)+18 −121e481caftest(story): 回归集扩到 56 条(外部资料交叉核对)+ 总结文档+685 −1206619c97feat(story): 尊称 ≠ 亲属(prompt 修)+ 全量证据审计工具+237 −06722e3f3docs(story): 审计结论 —— 那些大数字不是错误率,可测的是 8.4%/20.9%+19 −2adeaefd8docs(story): 记录两件事 —— 暂不重跑全量 / 本名与异格的现状+112 −25cb04695feat(names): 从 PRTS 解析「角色真名」+ 补本名的脚本(**.char 尚未落定**)+1821 −00d7d5098feat(names): 用 PRTS 补 204 个干员的本名(含曾用名/假名)+572 −101ab9844f1docs(names): 本名已修 —— 204 个 + 生产实测 4 例全对+48 −342de62eaffeat(names): 本名覆盖 204 → 220(把那 16 个捞回来)+206 −169f11f4afdocs(alter): 异格现状与设计 —— 加名字零代码改动,不需要变体系统+109 −07424a9f5feat(story): 剧情人物可对话的管线(名单驱动,等你填名字)+271 −10552aef7fix(relations): 本名/代号节点分裂 73 → 0(两侧用同一张归一化表)+19596 −149042b95507edocs(relations): 节点分裂 73→0 —— 判据不统一时每次修正只是把分裂挪位置+50 −0adbe10c3feat(characters): 加四个可对话的剧情人物(霜星 · 菈玛莲 · 裘里奥 · 吉阿达)+6862 −43e7b7687feat(characters): 四个头像 + 无名亲属称谓不再冒充名字+212 −0b1be96d3feat(relations): 泛称职务标 `[]` + 查清本名缺口(169 个全有解释)+74 −0c9d9379afeat(relations): 全量 NPC 关系索引(塔露拉等现在有自己那份)+433723 −0c6d3d41afeat(relations): 干员关系网 —— 三源合成 + 干员主页分组列表+1947 −6363432db9feat(relations): 关系网改成以她为中心的辐射图("花")+709 −223
2026-09-112 个提交+435 −5
b449aa5edocs: 加 STATUS.md(唯一状态真相)+ 文档体检脚本;修 README 四处状态漂移+232 −5845842b6docs: 把状态回填进文档自身(59 篇)—— 文档自描述,索引退化成纯索引+203 −0
2026-09-1039 个提交+6620 −1319
740aafcdfeat: 身份系统取消 5 上限 + 支持直接编辑非当前身份+95 −694cc9e16edocs: 主界面浮层改屏幕空间 2D(铁律 #1)+ 全景路线图重设计+281 −24383997bb4feat: 身份切换 UI 设计探索(P5R 卡堆 / 曲目表 / P3 立绘 + 众生行记)+2081 −02e9d52a5chore: AI 能力验证测试台(副本拷贝脚本 + 两轮任务文档)+263 −044e018f5feat(identity-ui): 新身份面板接入前端(列表/换台转场/人设二级页,按 key 编辑不切换身份)+405 −757f498ffrefactor(identity-ui): 清理旧行式身份面板死代码(settings.js -10.7k 字符),页脚「当前身份」改由 identity-panel.js 维护+8 −2245a0c56affeat(identity-ui): 删除换台转场(直切);旧「博士人设」面板改为「个人资料」(只留性别/生日,四段人设已迁至身份编辑页)+10 −4872a2451edocs: 主动消息「关了仍收到」排查记录(定位到 world/定时叙事引擎为第三条通道,未结案)+124 −0b1cbf357fix(initiative): 补上「不打扰」档位 + 推送守卫改 fail-closed+18 −353543c1ddocs: 排查记录更新为「根因已定位」(前端缺 off 档位 + 推送守卫 fail-open),补后续两轮计划+58 −1497d2f14tools: 零依赖 CDP 网页驱动(Node 24 自带 WebSocket)——开真实浏览器/登录/执行JS/截图+204 −0361503betools: 用 Playwright 替换手写的 CDP 驱动(不重复造轮子)+155 −2044040c03bfeat(settings): 「推送通知」并进「主动私聊」→ 合成「联系与打扰」分区(决策 3a/4b)+165 −4072ad084ffix(chat-list): 消息列表摘要过滤 source=moment(决策 2a 展示分家)+11 −19e6cbbabfeat(moments): 新增「干员动态」开关(自动生成可关)+146 −4906292cddocs: 主动消息排查结案(三轮全上线 + 展示分家根因 + 历史数据决定不管)+162 −08a87e221fix(ui): 视觉走查第一批 —— 天气只在变化时显示 + header 两处不统一+32 −832db2b8bfix(ui): 视觉走查第二批 —— header 操作归位 + 交易所行情下沉+28 −304657352fix(ui): 视觉走查第三批 —— 色板归一 + 交易所标题居中 + tab 改名+149 −109d5e6543fix(ui): 消息页 header 收敛成 [+][⋯] + 溢出面板(视觉走查第四批之一)+576 −214d18f62fix(ui): 修 ⋯ 菜单塌成 0x0 + 点条目自动收起+14 −40a310dfdfix(ui): ⋯ 菜单别再挂 hidden —— show 了也 display:none,rect 永远 0x0+5 −12b2a7675fix(ui): 动态卡片评论框默认收起(视觉走查第四批之二)+29 −12b13d486fix(ui): 动态加载兜底(5s提示/15s重试/失败不再伪装成空状态)+ 22 处图片懒加载+259 −30f7b911atest(ui): 修第四批验证脚本的三处误判+22 −6d5c10bf2fix(a11y): 全站对比度扫描 + 抬高 --text-tertiary(41 类不达标)+174 −6b5cc558ffix(a11y): 对比度扫描收尾 —— 41 类 -> 目标 0+4 −495dd11e9fix(a11y): 未读角标底色改用 --badge-bg(最后一处不达标)+5 −191438cdarefactor(ui): 统一 header 实现(视觉走查第五批之二)+201 −634e712a6test(ui): header 验证探针修两处误判+7 −3bd82335ffix(a11y): 触控目标统一到 44x44(触控审计 21 个偏小)+220 −073ed93e0fix: 触控目标清零 + webe2e 加缓存穿透+27 −0627d6873feat(chat-list): 预览剥掉开头动作描写 + 同分钟批次在显示上拉开+44 −198680440fix(chat-list): 摘要读错时间字段名(timestamp -> ts)—— 这才是「十条未读同一分钟」的真因+10 −2e058ed79fix(chat-list): last_timestamp 统一成毫秒(L1 的 ts 是秒)+29 −1aae0aa07fix(chat-list): 预览再取第一段(正文常见「先一句人话、再一段动作」)+8 −12590d3a1perf(assets): 头像转 160x160 WebP —— 53.7MB -> 12.2MB(4.4 倍)+514 −4123c71a7a1chore(assets): 删掉已转 WebP 的源 PNG(53.7MB -> 12.2MB)+0 −0d86a181btest(perf): 性能脚本只统计视口内图片+77 −0
2026-09-094 个提交+32 −5
345e981bdocs: 主界面浮层 A 路验证成立(3D WidgetComponent 倾斜,10°)+15 −3e1745c79docs: 记录 UE 代码仓 rhodes-island-ue(私有)+1 −0d58a53a8docs: 右栏中文落地,记录 /source-charset:utf-8 与思源黑体运行时加载+11 −2a3d76400docs: 记录 Actor 构造里 NewObject MID 的崩溃坑+5 −0
2026-09-082 个提交+1607 −5
ba1af399docs: 方舟 UI 设计——一套语言两面(UE 主界面完整版 / Flutter 终端妥协版)+1431 −3cb9ac3abdocs: 全仓文档审计 + 修复 Flutter 后端拓扑漂移(对齐 PC 优先)+176 −2
2026-09-063 个提交+824 −292
a889ad6afix: doctor 生日字段默认 None,修复 Flutter PUT 保存清空生日+4 −156712cb3docs: 游戏文档重组 + roadmap.html 全景路线图入口+818 −291ee5b5b6achore: .gitignore 忽略 .server.pid 运行期残留+2 −0
2026-09-042 个提交+671 −48
da647534feat: 实装 P3 联动干员(结城理/埃癸斯/岳羽由加莉/虎狼丸)+653 −48d44fd837feat: P3 干员 somatic 基线(情绪/独处倾向/可塑性)+18 −0
2026-08-2818 个提交+2419 −1068
ec782d28feat: 设置页精简(合并看数据入口 + 关于/说明,精简恢复码文字)+56 −694937e169perf: 切回消息列表不再无条件重建(非聊天视图返回跳过渲染)+67 −4986f696e6perf: 消息列表数据驱动刷新(主动消息脏标记 + 从聊天返回 skipSkeleton 消除骨架屏闪)+74 −5622cd8bd1docs: 划掉 backlog/tech-debt 已落地的过期条目(A3/D1/气泡换行/加载态)+8 −9c00e100cfeat: 前端交互打磨(导航去骨架屏闪烁 + 博士人设未保存二次确认 + 身份管理紧凑化)+283 −13490297d75feat: 设置页打磨(自定义身份条目化 + 主动私聊白名单折叠 + 生日日期输入风格统一)+162 −1682ac0921bchore: bump frontend cache+19 −19983adf1cdocs: backlog 线G#23 记录 2026-08-28 设置页三处打磨(身份条目化/白名单折叠/生日日期选择器)+1 −1717fcb22docs: F32 评测基线漂移查清定案——评测只在生产机跑+26 −23b260c39feat: 管理台「部署」tab 加后台任务一键开关(封闭开发停心跳+定时叙事)+148 −10bcfea71cchore: bump frontend cache+38 −3839a34566fix: test_protected_paths 误报公开路由(按函数体判断而非整文件连坐)+25 −4f67146cdfix: 深聊 checkpoint 快照剥离 embedding(止住 292MB 膨胀)+10 −25939f4fddocs: F34 深聊库膨胀查清 + Tier1 修完(backlog 更新)+3 −3a26095e1feat: 登录页酸性极简重做(亮暗双模 + CRT 闪白 + PRTS 启动页)+1006 −253bda8f13bfix: 清理旧登录页 CSS 碎片(.login-btn / .login-tabs / .login-container 等残留)+0 −1974f681977docs: ue-intro-animation 文档 + tar -a 压缩陷阱记录+202 −0c91fab38feat: 账户停用机制 + 恢复邀请码注册+291 −54