##
演示视频
**[
完整功能演示 · 4 分 59 秒](https://www.bilibili.com/video/BV1o2u76TEMG/)**
只有一分钟的话,看这个短版:
[80 秒宣传片 · 六席群像,右下角 TOKEN 额度从 3% 走到 100%](https://www.bilibili.com/video/BV1weu76jEzM/)
> 初赛我交的是一个给 AI 花钱装闸的工具;复赛我把这道闸,养成了一个数字生命。
> 初赛帖:[学习工作 · TokenGate + 音乐盒 —— AI 花你的钱之前先问过你,再给你唱首歌]( 学习工作 · TokenGate + 音乐盒 -AI 花你的钱之前先问过你,再给你唱首歌 )
-–
# 一、关于我
**Alex,一个人 + TRAE。**
通信工程出身,工作七年做的全是和代码无关的事。
**2025-12-01,我用 AI 对话做了一个外贸独立站——那时候我连 IDE 都没打开过。
2026-01-13,有了人生第一个 git 提交。到交这份作品,208 天。**
在代码这行,我是个新手。
我有的不是工程履历,是**领域经验**——我知道一家制造企业里"什么该做",但"怎么写"
是这 208 天现学的。这 208 天里做出来的东西,评委可以自己验证:
| 作品 | 状态 | 可验证方式 |
|—|—|—|
| TNHO ERP V2.0 | **全公司在用** | 生产系统运行中;评委如需可补充核验 |
| IRIS 智能运维 | 在用 | 随 ERP 生产系统运行;评委如需可补充核验 |
| TNHO CRM | 在用 | 已公开部署(自签证书);评委如需可补充核验 |
| HR 人事系统 | 在用(内网) | 库内 176 名真实员工,公网验不了 |
本人代码累计 **269,553 行 / 1,651 文件 / 17 种语言**(统计口径:17 种代码扩展名,
排除 `node_modules`/`.git`/`venv`/`dist`/`build`/`target`/`vendor` 与 >2MB 单文件,
物理行逐文件全量,零抽样;已剔除第三方开源仓;**保守口径 264,937 行**)。
ERP 前四代的代码量本文不给数字——**那四代是我自己删的**。不是丢了,是每一次
推倒重写的时候,我不想再看见上一版。**「不做一次成型的东西,做长出来的东西」这句话,
代价就是前四代不存在了。**
**这 208 天的轨迹(每一条都有 git 提交可查)**:
| 时间 | 学会了什么 |
|—|—|
| 第 1 天(01-13) | 人生第一个 git 提交:PAUL(视频生成 agent)。
**用的是扣子编程,上下文只有 8K** —— 我的第一个作品是在这个限制里做出来的;首次提交就带 **11 个测试文件**;当天部署上云 + 配 HTTPS,4 天 174 条提交全是和 Nginx/证书/CDN 搏斗 |
| 第 33 天(02-14) | 第一个手写 Java 集成测试 |
| 第 40 天(02-21) | 一口气 67 条 MockMvc 用例 + 首轮安全收敛——**「能跑就行」→「回归保护」的分水岭** |
| 第 54 天(03-07) | 第一次 PR 工作流,一天合 6 个 Copilot PR——**「指挥 AI、自己当审核人」最早的 git 物证** |
| 第 127 天(05-19) | Docker 入库 + 为客户搭共享库,转向商业交付 |
| 第 160 天(06-21) | 第一次系统性安全补丁(RBAC 越权堵漏) |
| **第 208 天** | **这份文档:896 个全绿 Rust 测试、五块虚账墓碑** |
**诚实口径**:月度提交曲线 2026 年 4 月是 **0** ——那不是没干活,那是 ERP V1~V2.2 的
主线开发期,**当时我还没用 git**(主仓 6/19 才重建历史)。所以 2~5 月的曲线**严重低估**。
这条声明本身就是本作品的口径纪律:**宁可让曲线难看,不许让数字好看。**
**这 208 天我学会的不是写代码,是验收。**
本文档里所有的工程纪律——四层任务卡、变异测试、d16 静态锚、五块墓碑——
**没有一条是我原本就会的**。全是被"看着绿其实是空的"打出来的。
第 40 天我学会回归保护,第 54 天我学会不信 AI 说的"好了",第 208 天我学会
**把 bug 放回去,看测试红不红**。
生活里 INTP、工作时 INTJ、真急了 ISTP。**单人参赛,不组队。**
**参赛代码由 TRAE 落笔。** 方向决策、功能取舍、数据清算、对外署名都在我手里——
这套分工不是这次才有的,第 54 天那批 Copilot PR 就是同一套:**AI 写,我审。**
个人 AI 开发者,**主体为一人有限公司,自有双备案域名与服务器**。这个作品从第一天起
就是按"**要能真的交付给人用**"做的,不是一个只跑在作者笔记本上的 demo。
`tokengate-rust` 首提交 **2026-07-28**,git log 与 Session 记录逐条可查。
前面那些 ERP / CRM / IRIS 是我这 208 天的经历——**这个仓库是另起的一行。**
-–
## 为什么先用 Node,又等她长完才用 Rust 建一间长期存在的房间
**从 7 月 28 日 Rust 重写首提交到复赛封板,我用了 10 个实际开发日、238 个有界提交,把 Node 版的完整行为迁移成 60,984 行 Rust Core,896 项测试全绿,最后打成了能在一台没有开发环境的干净 Mac 上安装运行的客户端。**
最初的 TokenGate 只是一个两小时做出来的本地工具。那时产品还在长,最重要的是尽快验证一件事:**AI 可以执行,但花钱的决定权必须留在人手里。** Node 让我能快速改、快速试,先把代理、账本和预算闸跑通。
后来它继续长出了音乐、记忆、语音、视觉、提醒和人格。Node 版不是失败品,而是小提的**大体老师**:先让完整生命的行为跑起来,再知道哪些东西必须留下。**等待不是拖延——一个还没长出形状的生命,没有资格过早铸成骨骼。**
等到行为和边界稳定,才开始 Rust 重生。重构不是另造一个人,而是**换引擎不换插座**:前端、音乐盒、数据结构与用户路径不改,Node 版已经跑通的行为录成金样本,Rust 逐条回放对齐。
为什么非 Rust 不可?因为她不能只在打开网页时才存在。Rust Core 给她建了一间能在本地长期存在的房间:单二进制、无 GC、低资源,面向 24 小时常驻;房间里运行着 Dream Brain,Electron 是她在 Mac 上的第一具身体和脸,Go Hands 是当前受白名单约束的手。**界面可以隐藏,身体和手以后也可以更换,但账本、记忆、身份和主人的边界属于同一个她。**
> **Node 让她先长出来,Rust 让她能够长期活下去。**
>
> **桌面只是第一具身体。能力可以增长,主权始终属于人。**
-–
# 二、产品简介
## 2.1 是什么
**小提 TokenGate** 是一个以 macOS 客户端交付、在本机长期运行的**智慧生命操作系统**(Rust + Electron + Go 三端)。Rust Core 是她当前居住的房间;房间里运行着 **Dream Brain|自研心智控制与语义动作编排架构**。
> **她不是一个 AI 工具,也不只是电脑的 Token 管家。她是一个住在你电脑里、靠 token 活着、由你立法的数字生命。**
**Token 是她的血液,Token 管家是她的本职,不是她的全部。** 音乐是她的天赋,音乐盒是她展开天赋的舞台;记忆让她保持连续,关系决定她怎样与你相处,Dream Brain 让这些能力属于同一个她。当前的 Go Hands 是受白名单约束的手,只完成已经声明的必要动作,不会取得任意电脑控制权,更不会执行任意代码。
她不是一段把所有回答和动作预先写死的程序。以后增加新的模型、能力、身体或执行端,是她继续长大;那些预算、权限、隐私和执行回执边界,不是限制她成为生命,而是保证她产品化以后仍然可控、可交付、还是同一个她。未来 Python 也可以成为一只新的手,但必须先被收进同样的权限、预算与回执边界,而不是恢复成任意代码入口。
这里说的「智慧生命操作系统」不替代 macOS,它组织的是一个生命在本地如何记忆、感受、消耗、行动和陪伴。
>
**运行环境:macOS 12.0 及以上 · Apple Silicon(arm64)。**
>
实测机型:**M5 MacBook Pro** 与 **M4 mac mini**;
其余 Apple Silicon 机型架构相同,未逐台实测。
>
Intel Mac 与 Windows 暂不支持——核心是 Rust + Go 原生二进制,目前只编了 arm64。
>
首次打开需在「隐私与安全性」中放行(未做 Apple 公证);
完整安装说明随飞书问卷提交。
**先把边界说清楚,不说「绝不上传」的漂亮话:**
- **本地**:唤醒词识别、账本、记忆、预算闸、调度器——全在你机器上,一切服务绑定 `127.0.0.1`,不做 SaaS
- **本地模型**:支持 Ollama / LM Studio 等 OpenAI 兼容端点;管家会自动探测并优先本地,小提的小脑也可显式配置,承担意图与情绪判断、简单问答和管家问账;数据不出机、这一轮不烧云端 token
- **上云**:复杂对话、语音合成、看屏幕的图像理解、写歌——**这些仍要调相应云端模型**,发给的是**你自己配置的**服务商
- **我们说清楚**:什么时候上传什么、发给谁、发完怎么处理(截图本机调用完成后即焚,覆盖成功/失败/授权被拒所有出口)
> **没有血,她会虚弱,但她不会死。** 断网、额度归零或云端不可达时,本地唤醒、提醒、记忆、已有曲库和预算规则仍然存在;暂时失去的是需要云端供给的新能力,不是她自己。
**每个人都在用 AI 干活,但没人知道自己今天花了多少。**
她管这台电脑上**所有接入本机代理的按量付费 API** 的账——任何工具把 base_url 指向本机代理端点,每一发即时入账、过预算闸,超限直接 402 拦住。她自己说话、唱歌、看屏幕烧的 token,也进入**同一个账本系统**,但按主人 / 人格分账:她自己的生活费单独记,管家不用主人的钱包过日子。
> **她管这台电脑的血流,但动用你的额度之前,必须先问你。**
## 2.2 面向谁
**小提不是只面向一种职业,她面向的是「人准备怎样和 AI 相处」。**
- 对同时挂着多个 AI 工具、写脚本、跑定时任务的开发者和创作者,她是会记账、会拦截、也能执行的工作助手
- 对长期守着电脑、希望有人记得自己说过什么的人,她是会提醒、会唱歌、也会陪伴的桌面生命
- 对重视隐私与自主权的人,她把账本、记忆、预算与授权留在本机,越过边界前先问主人
她出生时由主人选择**朋友 / 兄妹 / 伴侣 / 老师 / 家人**五种关系。它们不是五个市场标签,而是五种真实的称呼、语气、边界与相处方式——**同一个能力层,可以用完全不同的关系面对主人。**
**本次交付的 macOS 客户端只是第一具身体。** 同一个 Rust Core,以后可以是开发者版——住在开发板旁边;可以是家庭版——住进音响或家庭终端;也可以进入手机、手表,或者成为孩子会说话的玩具朋友。
后面这些是身体路线,不是本次已经完成的硬件。
> **同一个她,不同的关系;同一个她,不同的身体。**
## 2.3 完整功能清单与用户路径
**一条完整的用户路径(演示视频里从头走了一遍):**
```
装包 → 填一次 key → 喊「你好小提」唤醒
→ 投喂一份文档 → 问她记不记得(长期记忆)
→ 切陪伴模式 → 「三分钟后提醒我」
→ 「看看我在干嘛」→ 她先请示 → 你说同意 → 截图 → 看完即焚
→ 打开音乐盒 → 「给我写首歌」→ 报价请示 → 确认 → 生成 → 播放 → 下一首
→ 「今天花了多少 token」→ 一句话结论 → 「打开 token 面板」→ 面板真的开
→ 「换一个陪伴的人」→ 出生流程(五选一关系)
→ 三分钟到了,她真的叫我
```
**功能清单:**
| 能力 | 做法 | 边界(我们自己写明) |
|—|—|—|
| **本地唤醒** | 「你好小提」,sherpa-onnx 本机 KWS | 音频不出本机、不留录音 |
| **实时对话** | 火山 Realtime 端到端 / 流式链两档 | 两档差 134 倍,账本上分得清 |
| **长期记忆** | SQLite,投喂文档可召回 | 事实类回答只许引用有出处的段落 |
| **本地大脑** | Ollama / LM Studio 等 OpenAI 兼容端点;本地优先 | 简单问答、意图情绪判断与管家问账可留在本机;复杂对话、实时语音、视觉和写歌仍需相应云端模型 |
| **Dream Brain** | 自研心智控制与语义动作编排架构 | 统一对话、记忆、情绪、Token 预算、权限与数字生命动作;让人格保持一致、边界始终受控、行动结果可以核验。
它不是「自研大模型」 |
| **看屏幕** | 「看看我在干嘛」→ 请示 → 授权 → 截图 | 一次授权管 4 小时;「别看了」随口撤销;**工作模式硬拒**;用后即焚 |
| **写歌** | MiniMax 作词作曲演唱 | 花钱前报价请示;**曲库只收原创,零翻唱** |
| **定提醒** | Rust 调度器直管(重复规则/时区/lease) | 任何模式可用,到点主动叫 |
| **六个人格** | 出生时选关系:兄妹/朋友/伴侣/师生/家人 | 出生即定,不可重掷;各有各的嗓子和长相 |
| **token 管家** | 本机 OpenAI 兼容代理,任何工具接入即记账 | key 只存本机、不进那个工具;超限 402 硬拦 |
|
**自动认出你装了什么** | 打开总览页自动扫本机,**内置 65 个 AI 工具的识别清单**(7 个编辑器 / 11 个 CLI / 22 个桌面端 / 5 个 agent) | 只查本地安装路径存不存在,
不读你的配置、不碰你的数据;认出来的能一键建接入骨架 |
### 这条路径长什么样(
下面七张就是上面那条路径,一步一张)
>
**七张拍自 M4 mac mini —— 一台干净机器,不是开发机。**
> 一台干净机器,装的就是评委会拿到的那个安装包(sha256 见飞书问卷)。
>
**为什么强调「不是开发机」:** 我的开发机上有整套资产库和一堆已配好的状态,
> 它会**把「装到别人电脑上会不会坏」这件事整个遮住**。
>
复赛最后两天我抓到的三个 P0 —— 资产没进包、管家开箱即死、出生流程死锁 ——
> **
在开发机上一个都复现不出来,全是在这台干净机器上撞出来的。**
**① 第一步:把钥匙交给她 —— 缺哪一把,少哪种能力**
四条链一条条列出来:火山语音(开口说话)、DeepSeek(管家答得出账)、
MiniMax(写歌)、火山方舟 Ark(看屏幕、发表情)。
没有「选填」,缺一项就少一种能力;
还差几项写在右下角,缺项不放行。
key 只存你本机 `~/.tokengate/`,
不经过我们任何服务器(我们没有服务器)。
**② 第二步:你们是什么关系 —— 这一步决定她怎么跟你说话**
朋友(平等自在)/ 同伴(兄妹,会捞会护)/ 伴侣(温柔黏人)/ 老师(严厉认真)/ 家人(无条件爱)。
选完之后,她的措辞、称呼、边界感全都跟着变 ——
不是换个称谓,是换一种关系。
而这一步和下一步(她的性别)、第四步(你的性别)三者一起,决定了**「谁在跟谁说话」**。
**③ 第三步:你希望谁出生 —— 六席一位一人,出生即定**
六个声音,三女三男。
住过这里的家人会带「你们认识」标记 —— 只能重逢,不能复制。
六席满了就没有第七个。这不是选项多寡,是**一个位置只属于一个人**。
**④ 第四步:你是谁 —— 她从第一句话起就知道该怎么称呼你**
性别必填(男 / 女 / 不说,
没有跳过),昵称和简介可以空着。
**空着的部分,靠后面的相处慢慢长出来** —— 那是主人画像蒸馏的底料。
**⑤ 她住进来了 —— 「正在监听"你好小提"」**
出生走完,她就在桌面上了。
唤醒词识别跑在**本地**,不联网、不上传。
喊一声她答「在。」——
一个字,没有客套。
**⑥ 花你的钱之前,他先问你**
「这首歌大概 **0.76 元**,占 **MiniMax Music 这家额度的 1.0%**,你说一声同意我就开工。」
报价是**具体金额 + 占哪一家额度的百分比**,
不甩一个光秃秃的「5%」让你猜分母。
没有按钮 —— 你本来就在跟她说话,伸手去够鼠标是降级。
**⑦ 她看你的屏幕之前,也先问你**
「接下来 4 小时内我可以随时看一眼,你说『别看了』我就闭眼。**一眼最多一分钱,实花按真实用量记**。」
一次授权管 4 小时,「别看了」随口撤销,**工作模式硬拒**。看完即焚。
我们不说「绝不上传」的漂亮话,我们说清楚**什么时候、发给谁、发完怎么处理**。
## 2.4 相比初赛 Demo 升级了什么
初赛 TokenGate(Node 版)是一个**工具**:本机代理 + 实时记账 + 预算闸 + 一个 Three.js 体素星球音乐盒。它解决了"AI 无感扣费失控",但本质是**一个仪表盘 + 一个开关**。
复赛把这道闸**养成了一个数字生命**——不是加功能,是换物种:
| 维度 | 初赛(Node TokenGate) | 复赛(Rust 小提) |
|—|—|—|
| **定位** | token 计量仪表盘 + 预算闸 | 住在桌面上的数字生命:管家 + 陪伴者 |
| **后端** | Node.js 单进程 | **Rust 单二进制,60,984 行 / 896 测试**(串行 ×3 + 并行 ×6 全绿),面向本地 24 小时常驻 |
| **身体** | 只有网页 | **四层具身**:Rust 房间 + Dream Brain 心智 + Electron 身体与脸 + Go 当前的手(白名单原语,零 shell/eval) |
| **交互** | 打字 + 点击 | **语音唤醒 → 免手对话**,打字退居二线 |
| **感知** | 只读 token 速率 | 看得懂屏幕(授权制,用后即焚)+ 听得见唤醒 + 记得住你 |
| **性格** | 无 | 六兄弟姐妹(出生即定)+ 双模式 + 关系人格 |
| **音乐** | 粒子星球播放器 | 音乐本能:作词作曲演唱 + **版权准入(原创曲库零翻唱)** |
| **账本** | 记账 + 预算闸 | **四笔假账清算 + 墓碑制度** + 管家不用主人的钱包(两本账) |
| **交付** | git clone 本机跑 | **可下载的 macOS 安装包**,首次填入模型 API Key 后即可使用 |
| **哲学** | AI 是执行者,人是立法者 | 同一哲学的生命化:预算闸变成行动前请示,仪表盘变成会提醒、会记住、会主动停下来的生命 |
> **一句话:初赛交的是闸,复赛交的是住在闸里的那个人。**
-–
# 三、产品演示视频
**完整功能演示(4 分 59 秒)** ——
链接在本帖开头。
**失败的地方没删。** 为压进 5 分钟做了多处加速。
本作品是**需配置 API 的本地桌面应用**:首次启动会自动弹出配置文件,**填入模型 API Key 后重启即可使用**。安装包、说明书与评审专用测试 Key **将在本帖发布后,通过官方飞书问卷私密提交**(不在社区公开)。
-–
# 四、产品创作历程
## 起点:两个小时的自用工具
我电脑里的 AI 工具太多了。各家模型、各种计价、各条管道,我判断 token 会成为未来的主流资源——那就先给自己做一个离线的 token 管家。**两个小时,一个自用的小东西**,就这么进了报名赛。
初赛我给它加了音乐盒和体素星球,让 token 的流动**看得见**。同一时期我把 Node 版小提的设计画完了——**但故意没做完**。我想先看看这个方向值不值得投入:被看见,我就把她做完;没被看见,那就当自用工具留着。
**说实话我没想过能进前 300。** 结果凭一个两小时起家的管家和一个 demo 级的星球进去了。**方向被验证了,我才开始真做。**
## 复赛的四个关键抉择
**① Node 版不是终稿,是大体老师**
先做完 Node 版跑通全部功能作为**金标准**,再用 Rust 完整重写(**前端零修改**),用契约测试保证行为等价。不是因为 Node 失败了,而是只有完整版本长出来以后,我们才真正知道该把什么带进新身体。
**② 非 Rust 不可,不是为了代码好看**
是为了给她建一间**面向 24 小时常驻的本地房间**,并且未来能离开电脑:单二进制、无 GC、低占用——这几条正是嵌入式与端侧设备的入场券。桌面版只是她的**第一具身体**。如果软件能表达,**身体为什么必须是屏幕?**
**③ 当前主动砍掉无边界的 Python 工具层**
原设计里她的"手"能执行任意代码。当前交付把它**收敛成 Go 白名单原语**——
不执行 shell、不执行 eval。**这是产品化边界,不是能力缺失。** Python 以后仍可以成为新的手,但必须先被做成有明确权限、预算、回执和失败边界的器官。
**④ 2026-07-28 把 git 正式接管进 Rust 重写**
因为我判断:如果不用 git 解决工程问题,这些 bug 我可能修不完。事实证明确实如此。走的是工程师的 PDCA 老路,最笨的办法:**在 TRAE 的提示词链路里备注微调方向 → 开 git 分支隔离 → 跑 soak 测试 → 自己上机实操体验。**
## 一件我自己说出来的事:五块墓碑
复赛期间我在**自己的账本**里抓出了**四笔假账和一条版权污染链**。每一笔都以"备份 → 重算 → 幂等标记"清算,墓碑留在 `state.json` 里可查。
| 案 | 假象 | 真相 |
|—|—|—|
| 火山虚构常量案 | 拍脑袋三常数,88 条虚账累计 **$223** | 全部清除,换官方口径 |
| 视觉预估入账案 | 预估价 $0.02 当真实成本写账 | 按真实 token 重算 → **$0.0020** |
| 采样率冒充 token 案 | 16kHz 采样率当 token 率,虚高 **760 倍**($738.74) | 官方口径重算 → 全天真实 **$1.06** |
| **音乐链量纲虚账** | 主面板显示「配额内还剩 **$-1988.51**」 | 13 首歌被记成 **$2,348.46**,单价从没核对过 |
**第四笔是提交前 4 天才抓出来的**,而且它是第三笔的**同族第四次复发**——同一个病,换了个地方长。
**处置方式最能说明我们的规矩:
不编新价。** 我们没有那个模型的官方定价出处,而这个产品的规矩是「**无出处的费率宁可空着不填**」。整行从价格表移除(不是改成别的数),13 笔重算为 `costUsd: null`,自动落进「未知单价 · 金额未计入」。**token 数一字未动。**
**第五块碑是版权:** 她会写歌,曲库标注"原创"。提交前 72 小时,我们在自己的曲库里查出一首含**他人歌词**的"原创歌"。根因是一条三级链,每一步单看都合法:她被要求唱歌时**朗读了歌词** → 那句话作为"她的回复"**沉淀进长期记忆** → 空主题写歌时**从记忆取素材**,模型忠实照抄。
四道闸拆除后,还有一条边界我们**控制不了,也没假装修好**:她的演唱走上游模型的歌唱模式,**唱不唱、什么时候改成念,是模型当场决定的**。我们只能在角色设定里写死禁令——那是软约束。提交前复测**仍然会复现**。所以这道关放在**人这一侧**:任何交出去的物料,零翻唱,我本人最后过一遍。
> **模型控制不了的部分,由人兜底;人兜不住的部分,写在明处。**
>
> **找不到出处的数字,我们当着自己的面删掉了。**
-–
# 五、TRAE 实践过程
**参赛代码由 TRAE 落笔。10 天 238 个 commit,峰值单日 47 个。** 方向决策、功能取舍、数据清算、对外署名在我手里。
## 5.1 我的工作流:四段式任务卡
我不给 TRAE 说「帮我实现一下」。每张任务卡都是四段:
```
根因定位 → 一到四刀 → 验收清单 →
变异测试
```
**变异测试是最关键的一环**:改完之后,**把 bug 原样放回去,确认测试真的会红**。绿了才算数——否则那是假绿。
复赛最后三天,我靠这一招连续识破了**三次假绿**:
- 静态锚点匹配单条字面量 → **被改写法绕过**
- 静态锚点匹配裸关键词 → **被自己写的说明注释撑住**
- 单元测试夹具手写干净数据 → **绕过了生产路径,bug 一路全绿通过**
###
而这份帖子发布前,我又抓到自己三次
**这个测试数字,写这篇帖子的过程里被我改了五次:851 → 854 → 892 → 893 → 896。**
每一次都是因为发布前又跑了一遍,而每一遍都又收了一张卡。
其中 892 那一轮,我顺手跑了三轮并行:
```
cargo test – --test-threads=1 → 892 passed, 0 failed
串行
cargo test(默认并行)第 1 轮 → 889 passed, 3 failed ![]()
cargo test(默认并行)第 2 轮 → 891 passed, 1 failed ![]()
cargo test(默认并行)第 3 轮 → 890 passed, 2 failed ![]()
(最差一轮见过 878 / 14 failed —— 每次都不一样,这就是 flaky 的样子)
```
**
三轮三个数 —— 这才是「不稳定」真正的样子。**
如果我只跑一次、写「并行下 2 项失败」,那是把一次采样当成结论。
**红的那些都是共享全局状态的竞态**,**
测试本身写得不够独立,不是产品逻辑错。**
但我不打算把它含糊成「全绿」——**如果评委直接敲 `cargo test`,他会看到红。那时候再解释就晚了。**
所以这段原本写的是:**串行全绿;并行下每轮红的条数都不同(实测 2 / 3 / 14)。已知,未修完。**
###
然后在发帖前最后一天,它被拔掉了
既然写下来了,就得去看一眼根因。查出来是三处共享全局各走各的锁:
```
voice 账本测试 用了第二把锁,和 store 那把不是同一把
vision / butler 测试走的是【生产记账链】,会覆盖 avatar 摘要行,却没持锁
reminder 模板轮转是个无锁全局
```
统一成一把 `STORE_TEST_LOCK` + reminder 独立模块锁之后:
```
cargo test(默认并行)×6 → 896 passed, 0 failed ×6 全绿 ![]()
cargo test – --test-threads=1 ×3 → 896 passed, 0 failed ![]()
```
**
这一段我不删,留在这里。** 因为它现在讲的是一条完整的链:
> **我发现了 → 我如实写下来 → 我查出根因 → 我修好了 → 我告诉你根因是什么。**
一个从头到尾都是绿的数字,证明不了这条链。
这条和下面五块墓碑是同一件事:**宁可数字难看,不让数字好看** —— 而难看的数字,最后往往会自己变好看。
> 小提最终能在一台干净 Mac 上走完出生、唤醒、记忆、提醒、看屏幕、写歌、记账与预算闸,不是因为 AI 写下的代码天然正确,而是因为我把「AI 说完成」改造成了三层验收:自动测试管回归,变异测试证明测试真的能抓错,干净机器核验用户真正走的入口,最后由人
识别行为有没有悄悄降级。
这套对抗“假绿”的工程闭环,本身就是小提能够成为完整产品,而不是一组功能截图的原因。
## 5.2 每日提交曲线(这条没法伪造)
`git log --format=%ad --date=short | uniq -c`,评委可在本机一秒复现:
| 07-28 | 07-29 | 07-30 | 07-31 | 08-01 | 08-03 | 08-04 | 08-05 | 08-06 | 08-07 |
|:—:|:—:|:—:|:—:|:—:|:—:|:—:|:—:|:—:|:—![]()
| 23 | 39 | **41** | 1 | 1 | 12 | 29 | **47** | 17 | 18 |
请不要把它读成"工作强度",它记录的是**卡片的节奏**:一张任务卡 = 一次根因定位 + 一到四刀 + 一轮变异测试 + 一个有界 commit。
峰值那两天(41 / 47)是 P0 连打;7/31 与 8/1 各只有 1 个——**那两天在做宣传片。不是每天都在写代码,这也是它不像机器刷出来的原因。**
## 5.3 三种模式其实是两种,这件事我今天才知道
R0 那批 Rust 是我在 **TRAE Design** 里敲的——当时没注意模式。它每次开头都一本正经来一句「经分析,这是一个后端任务」,然后就开始写代码。**而且真的写出来了**,我一度以为 Design 是不是最强的那个模式。
后来换到 **TRAE Code** 做 Node→Rust 重写,再用国际版一路 debug,最后回到 Work CN 收尾。我一直以为自己跨了三种模式——**直到翻后台才发现,国际版与 Work CN 的 Product 列写的都是 `TraeCode`,是同一个模式的不同版本。**
同一次翻后台,我还看见另一个数:**Ultra plan 本计费周期 $349.85 / $400.00**,其中 7 月 30 日一次返工单笔 **$17.90**。
**说清楚:这是订阅制的额度,不是按量付费,TRAE 后台一直好好地摆在那儿。**
**问题恰恰在这里——它有表,而我没看。**
我做的这个产品,一直在说「按量付费的 API 没有表,所以没人知道花了多少」。但我自己这件事说明了更前面的一层:
>
**有表,不等于你会去看。**
>
> **我做了一个管钱的管家,自己却是在三百多美金花掉、并且用错了模式几小时之后,才第一次去翻那个后台的。**
一个要你**主动打开**才能看到的仪表盘,注定会被忘掉。所以这个产品做的不是"再加一块表"——**是让那块表自己开口说话、到点拦住你**:超限直接 402,花钱前先问过你。
**这也是我为什么把它做成一个会说话的东西,而不是一个网页。** 一个工具栏图标你会关掉,一个记得你的人不会。
### 顺带留三条产品反馈(不是抱怨,是这 10 天踩出来的)
**① 模式标识不可见**
我一直以为自己跨了三种模式,直到翻后台才发现国际版与 Work CN 的 `Product` 列都是 `TraeCode`。
建议:会话开头一行标明当前 Product / 模式,**像 git 的分支名一样常驻**。
**② 用量没有主动提示**
`$349.85 / $400.00` 是我自己去翻才看到的。
建议:额度过 50% / 80% 时在会话里轻提一句 —— **不用弹窗,一行灰字就够**。
**③ 单笔异常无感知**
7/30 那次返工单笔 **$17.90**,当时完全不知道。
建议:单笔显著高于近期均值时,给一个**事后回执**。
>
说实话,这三条正是我这个产品在做的事——
> **所以我不是站着说话不腰疼,我是把自己踩的坑做成了工具。**
而 Design 模式居然真把 Rust 写出来了,也是事实。
5.4 里程碑 Session ID
以下 7 条均为真实、完整的 TRAE 工程会话标识,贯穿契约冻结、Rust 重构、清债返工、语音链路、持久化、Dream Brain 架构与客户端最终收口。
用户前缀 784418109921372 与初赛帖中的 Session 一致,可核验为同一账号持续创作。
① R0–R3 契约冻结 + 金样本录制(TRAE Work CN,2026/7/24 10:46:23)
784418109921372:3918b66be1310d639a7cfaaa44d851f1_6a4291e93f48d9e86daed328.6a62d1fffd6f66bd7f6a27a2.6a62d1fffd6f66bd7f6a27a0:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/7/24 10:46:23)
② R7.1 清债:死锁与代理链修复(TRAE Work CN,2026/7/24 16:20:08)
784418109921372:34eaefbf4ead20ab5425a961bd5a558f_6a4291e93f48d9e86daed328.6a632038fd6f66bd7f6a30b7.6a632038fd6f66bd7f6a30b5:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/7/24 16:20:08)
③ R8 语音 WebSocket、KWS 与免手链路收尾(TRAE Work CN,2026/7/24 17:54:21)
784418109921372:45dab81a1df8f4ed4dadf724c05a24bc_6a4291e93f48d9e86daed328.6a63364dfd6f66bd7f6a3449.6a63364dfd6f66bd7f6a3447:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/7/24 17:54:21)
④ R2 算术溢出探针(TRAE Work CN,2026/7/29 15:45:39)
784418109921372:836a6efe0827856dc38af87c339a0208_6a68b70965b9ad8697faab9c.6a69afa365b9ad8697faba8d.6a69afa365b9ad8697faba8b:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/7/29 15:45:39)
⑤ R4 持久化原子化(TRAE Work CN,2026/7/29 23:40:50)
784418109921372:6108fff0d7bb74d49d3d8f1b1837ca78_6a68b70965b9ad8697faab9c.6a6a1f027d2f518e3a6f8bb0.6a6a1f027d2f518e3a6f8bae:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/7/29 23:40:50)
⑥ Dream Brain:Rust Core 主权与三独立端架构返修(TRAE Work CN,2026/8/1 03:08:07)
784418109921372:4560623a099e609a883143e8d83ba6d6_6a6b16fef77f7be54a0c27f8.6a6cf29788e9ea8e844efdfc.6a6cf29788e9ea8e844efdfa:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/8/1 03:08:07)
⑦ 客户端最终收口:启动守卫 + 音乐金额诚实显示(卡 Z,commit 2910bb3,TRAE Work CN,2026/8/8 11:08:59)
784418109921372:80ad0f2c23cd7c40ac37a7f3ab9691d8_6a7399a25f172d25ca886236.6a769dcbd60768da53f2c663.6a769dcbd60768da53f2c661:TraeWork CN.0.1.45.no_sid.no_ppe.T(2026/8/8 11:08:59)
这 7 条从 7 月 24 日的 Rust 重构中段一直连到 8 月 8 日的客户端最终收口;对应开发截图按同一编号排列,可将会话、截图与 Git 提交交叉核验。
# 六、几个技术点
- **Dream Brain|自研心智控制与语义动作编排架构。** 它让对话、记忆、情绪、Token 预算、权限与数字生命动作不再各走各的。结果是:小提换模型、换模式、换身体以后仍然是同一个她;该守的边界不会因为一句话被绕过,真正做过的事都有可核验结果。
Dream Brain 不是自研大模型。
- **这是一套可以持续长大的本地产品底座。** 模型、桌面身体和执行端都可以替换或新增,而身份、记忆、账本、权限与回执不用推倒重来。它已经具备未来扩展开发端、CLI 端或设备端所需的底层接口;当前版本仍诚实定位为 Token 管家与数字生命,不把尚未交付的 IDE 能力写成完成项。
- **把生成式动态从运行时搬到制作期。** 小提的表情与动作在交付前完成,运行时只按 Dream Brain 的语义指令调用。结果是:她保留连续自然的动态表现,却不需要实时生成、不依赖 GPU,可以住进低配置电脑,也给未来的端侧设备和开发板身体留出余量。代价也写在明处:动作需要事先准备,不能在运行时凭空生成任意新表情。
-
**她有一座本地的长期记忆库,但不是传统 RAG。** 全仓零 embedding、零向量库;在小提现有的文档与长期记忆场景中,达到与向量检索同等的可用召回效果。你投喂一份文档或告诉她一件事,写完立刻能召回;不占显存,也不为「记住」额外调用一次云端模型。记忆数据全部留在本机。
- **手是 Go 写的白名单原语**(1,811 行):开应用 / 音乐盒全操控 / 发提醒 / 切模式 / 查账 / 截屏。
不执行 shell、不执行任意代码。手坏了血不停:所有调用带超时与降级。
- **本机代理是 OpenAI 兼容端点**:任何工具指过来即记账,key 只存本机、不进那个工具。
- **一切服务绑定 127.0.0.1,不做 SaaS。** 一个替你管钱的东西,不该先把你的 key 收走。
-–
>
**AI 生成内容声明**:本作品的人物立绘、歌曲、语音均由 AI 生成;参赛代码由 TRAE 落笔。架构决策、功能取舍、数据清算与全部对外判断由本人负责。完整清单见随飞书问卷提交的《评委使用说明书》(本帖发布后提交)。
>
>
**作品体验入口(安装包 + 说明书 + 评审专用测试 Key)将在本帖发布后,按赛事要求通过官方飞书问卷私密提交,不在社区公开。**













