p1b
by rui08984-dot
README.md
# 推演沙盘 · 判断账本
简体中文 | [English](./README.en.md)






> **记录你的判断,然后证明它没有说谎。**
>
> **把判断力做成契约,让任何 agent 都无法替你下结论。**
大部分「帮你猜」的 App 做的是让你**感觉**准一点。这个做的是相反的事:
**它不猜。它只做一件别人不做的事——记下你怎么想的,然后证明你事后没改口。**
```
你写下一道题 它做的三件事
┌──────────────┐ ┌────────────────────────────────┐
│ 明天上海最高 │ │ ① 记账 原样记下你的确信度 │
│ 气温 > 35°C │ ───▶ │ 只写不改,每条带指纹 │
│ 60% │ │ ② 判分 到期自动去查真值 │
└──────────────┘ │ 按题型分开算 │
│ ③ 复盘 指出你系统性偏哪儿 │
┌──────────────┐ └────────────────────────────────┘
│ Brier 0.2259 │ ◀─── 「天气类你准,汇率类你说大了 19%」
└──────────────┘
```
---
## 它解决什么问题
你一定有过这种时刻:
> 3 月觉得某只股票会涨。8 月回头看,跌了。
> 于是你悄悄把 3 月那条记录改成了「我觉得会跌」。
没有人会阻止你。Fitbit、Evernote、甚至你手机自带的备忘录,**都能改**——
因为拦你等于得罪用户。
**这本账不改。** 不是靠自律,是账本只写不改,每条记录都带指纹。
所以它能回答一个别人回答不了的问题:**你自己知道你在哪儿系统性看错吗?**
不是「你这次错了」——那是运气。**是「凡是遇到这类事,你就偏乐观」。**
---
## 它刻意不做的事(比上面那条更重要)
| 它不做 | 为什么 |
|---|---|
| ❌ 不替你猜 | 那是专家的事。它替你猜就等于替你说谎 |
| ❌ 不给建议 | 「该关注汇率」这类话是理财顾问的事,而且会误导人 |
| ❌ 不碰你的私钥 | 默认只在你自己的机器上跑 |
| ❌ 不承诺任何分数 | 下面那份成绩单很难看,但它是真的 |
★**你填的概率就是你的判断,一字不差。** 你写 60% 就是 60%,它不会偷偷改成 55%。
---
## 30 秒上手
```bash
git clone https://github.com/rui08984-dot/tuiyan-sandbox.git
cd tuiyan-sandbox
npm run bootstrap # 一条命令装齐所有子包(引擎 / 后端 / 前端)
npm run doctor # 看差什么、为什么、怎么办(三十秒)
cd p1b && node gates/gates.cjs # 四道闸门
```
★**为什么要 `bootstrap` 而不是 `npm install`**:本仓库有**三个嵌套的 `package.json`**
(引擎 `p1a-terminal`、后端 `p1b`、前端 `p1b/web`),各自有各自的依赖树。
只装根目录的话,引擎和前端都不装,闸门会红在「原生模块不可 require / vite 找不到」——
而报错信息离根因很远。`bootstrap` 按依赖顺序一次装齐。
★**为什么要 `doctor`**:生产库(含真实玩家信息的那份)按设计**不入库**,
所以克隆下来缺它是正常的,一批读数会因此看不到数据。`doctor` 会直接告诉你缺什么、为什么、有三条路可走 ——
而不是让你在 `no such table: predictions` 里猜。
**不需要任何 API key。** 第一次启动是强制 mock 模式,你能用到全部只读功能。
Windows 用户也可以直接下载绿色包解压双击(见 [Releases](https://github.com/rui08984-dot/tuiyan-sandbox/releases))。
### 平台支持(只写验过的)
| 平台 | 状态 |
|---|---|
| **Windows x64** | ✅ 已验——四道闸门与发行体检全绿,绿色包在此构建 |
| macOS | ⚠️ **未验**(引擎理论上可用,缺原生模块实测) |
| Linux | ⚠️ **未验**(同上) |
★没验过的平台就写没验过。**把没做过的事写成做过了,是这个项目最不想要的一种错。**
---
## 五分钟看明白它怎么用
```
1. 写一道有答案的事 「明天下不下雨」
2. 写上你有多确信 60%
3. 到期了它自己去查真值 下雨了 / 没下
4. 跟你那个 60% 算个分
5. 攒够一批后告诉你 「天气类你准,汇率类你系统性说大了 19%」
```
---
### 六层分类是整个项目的骨架
**不是六个算法模型,是六种「这事到底能不能算」的判法。**
| 层 | 大白话 | 例子 | 你的分数 |
|---|---|---|---:|
| **L1 决定论** | 有确定答案,纯算 | 明年日食几号几分几秒 | **0.0000(满分)** |
| **L2 常态** | 有历史规律,取平均 | 某人平均投多少球 | 0.2403 |
| **L3 短窗** | 有机制但混沌 | 汇率、短期行情 | 0.2386 |
| **L4 自反** | 你的判断会改变结果 | 「我觉得这股票要跌」 | **不用**(会自我实现) |
| **L5 纯随机** | 数学上不可能赢 | 抛硬币、抽奖 | 0.1578 |
| **L6 对抗** | 有人在跟你对着干 | 博弈、谈判 | 0.1755 |
★**为什么必须分层**:L1 能拿满分,L5 数学上就赢不了。
把它们混在一起算一个总平均,等于**拿天气预报去跟抛硬币比**。
分了层你才知道「你在哪一层准、在哪一层根本不该指望准」。
---
## ★诚实成绩单(不好看,但是真的)
```
Brier 分 0.2259 vs 永远瞎填 50% 的 0.2500
★但跟「随手按你给的比例掷骰子」的 0.2267 —— 不可区分
账本条数 1994 条
你亲手写的 ★ 0 条
```
**读法**:这个项目现在测的是「你准不准」,答案基本是**「你和运气差不多」**。
等你在上面手写了几十条自己的判断,它才开始告诉你真正有用的东西。
★那 1994 条是机器灌的示范数据,**不是你的成绩**——首页会一直挂着这句话提醒你。
---
## 三种用法
### ① 当 app 用(最简单)
上面那个「30 秒上手」就是。适合:你只想自己用。
### ② 装进别的程序(MCP,最推荐)
```jsonc
// 你的 AI 客户端配置里加这段,它启动时会自动握手
{
"mcpServers": {
"p1b": { "command": "node", "args": ["/绝对路径/p1b-sandbox/p1b/mcp/index.cjs"] }
}
}
```
装上之后你可以直接对它说:
| 你这么说 | 它会 |
|---|---|
| 「帮我记一道:明天会不会下雨」 | 归类 → 查拒收门 → 落进不可改的账本 |
| 「我在哪类事上偏得厉害」 | 按题型分开算,指出系统性偏差 |
| 「这题算不算随机」 | 六层判定 + 为什么这么判 |
| 「这批数据被改过吗」 | 冻结哈希 + 锚点闸 + 契约一致性 |
★**完整能力目录**(21 个工具 / 62 个 HTTP 端点 / 18 条命令,每条含「它不做什么」):
[能力目录](docs/mcp/CAPABILITY-CATALOG.md)
### ③ 当库用(最轻)
```js
const { rankHabits } = require('./p1b/src/disclosure/habitRank.mjs');
```
不用起服务、不用配任何东西。**想把打分逻辑塞进自己产品的人走这条最短。**
---
## ★8 条红线(对外版,可直接复制)
1. 生成的文本在**生成时**即写入元数据隐式标识,不做事后补写
2. 工具描述与返回文本中,**不出现荐下注语义**(荐下注语义 + 绝对化措辞,完整清单见 [RIGHTS](docs/RIGHTS.md))
3. **默认不联网。** 取数必须显式确认
4. 服务端强制出网白名单,不提供任何绕过反爬的路径
5. 外部价格/赔率原样返回并附来源与时间戳,标注为**「市场共识数据」**,不加工、不推断、不建议
6. **默认本地部署,不提供境外托管。** 你的账本默认不离开你的机器
7. 账本**不写入**姓名、邮箱、工号等可识别信息
8. **默认不记录调用方身份**,只保留不含身份的聚合统计
---
## 常见问题
**Q:它能提高我的判断力吗?**
A:能,但有前提。它给你的是**「你在哪类事上看多了」**——这个别的工具都不给。
但要拿到这个反馈,你得**自己手写几十条判断**。现在账本里真人写的还是 0 条。
**Q:为什么我的分数这么难看?**
A:因为好看是假的。它宁可难看也不好看。
**Q:数据会传到网上吗?**
A:不会。默认本地跑,不联网上报(只有你自己开 token 才会)。
**Q:我要不要填 API key?**
A:不要也能用,只读功能全部可用。填了 key 才能让 AI 帮你分析。
**Q:接自己的 AI 客户端会改我的数据吗?**
A:不会。21 个 MCP 工具里**真正能写账本的是 0 个**——写操作全部在确认闸后。
---
## 给开发者
先做一次体检——`node p1b/scripts/secret-preflight.cjs`(不联网、不打印密钥本体,只打指纹):
- `node scripts/plan-audit.cjs` —— 机械核对 30 项
- `cd p1b && node gates/gates.cjs` —— 四道闸门:后端 / 构建 / 前端 / 类型
- `node p1b/scripts/audit-release.cjs --tree out/p1b-sandbox-v0.1.1-win-x64` —— 发行体检 15 项
| 形态 | 数量 | 入口 |
|---|---:|---|
| HTTP 端点 | 62 | `p1b/src/routes/` |
| MCP 工具 | 21 | `p1b/mcp/`(★**0 个能真写账本**) |
| CLI 命令 | 18 | `p1b/cli/` |
| 取数源 | 53 | `docs/specs/kind-目录表.md` |
| 六层算子 | 6 | `p1b/src/engines/` |
★**联动组合**(直线/回溯/回环)含收敛条件与投毒测试:
[联动链与组合契约](docs/mcp/CHAIN-AND-COMPOSITION.md)
★**能力是怎么盘出来的**:158 个能力面逐行对账,**没有一项是凭印象写的**。
---
## 许可
Apache-2.0,见 [LICENSE](LICENSE)。商业形态与红线全文见 [docs/RIGHTS.md](docs/RIGHTS.md)。