一亩三分地本地工具
本机自动签到、答题,并核对大米到账。
在你自己的电脑上、用你自己的账号完成,不经过任何第三方。
它每天做什么 · 怎么工作 · 安全与隐私 · 快速开始 · 常见问题 · 给开发者
每天自动帮你完成一亩三分地(1point3acres)的 签到 和 每日答题,成功以当天两项奖励记录为准。电脑可用、登录和网站验证正常、答案能够确定时可自动完成;异常会保留真实状态。它不是把账号交给某个服务器代跑,而是在你电脑上开一个专用的 Chrome,用你自己的登录,按网站流程点按钮,点完还会去积分页确认大米真的到账。
支持 macOS 和 Windows,只需要装好 Chrome 和 Python 3.12。签到答题之外,它还能采集面经、离线搜索、发帖回复,并能接给 Claude Code、Codex 这类 AI 助手用。这些是附加功能,不装不影响签到答题。
[!NOTE] 本文讲「它是怎么做的」;具体命令、参数和排错步骤都在 使用说明。
最近更新
- 1.3.0:发布与自动更新串联。 版本号提升并合并到
main后,通过完整 CI 才会自动上传 PyPI;核对上传文件后,才创建对应的 GitHub Release。定时任务使用uvx …@latest时,下次启动即可获取已发布新版;旧 MCP 首次升级启动器需要重连。普通代码提交不会单独发包,发布结果以 发布工作流 为准。 - 修复签到、答题按钮和后台输入。 提交按钮改为浏览器原生输入,解决网页拒绝 JavaScript 合成点击的问题;后台窗口保持页面焦点,避免输入和验证回调暂停,同时不抢桌面焦点。这不保证自动化无法被网站识别。
- 离线日记语料与全年去重。 从带来源说明的离线语料中选择现代文字或诗句,避开过去 365 天重复及高度相似内容;语料耗尽时留空。可配置风格,也可关闭随机心情和公开短句。见 语料说明。
- CLI / MCP 业务代码自动更新。 启动器只使用 main 上通过 CI 的提交;CLI 在业务命令前检查,常驻 MCP 在空闲时切换后台进程。包含 Windows 标准输入输出修复;离线诊断不触发更新。
- 离线版本诊断。 命令行
info和 MCP 工具runtime_info可以核对磁盘源码、当前进程加载的版本与调度配置,发现更新后仍在运行的旧进程。见 更新与维护。 - Windows 定时任务。 仓库版提供
计划.ps1,支持预览、安装、查看状态和移除,每分钟通过pythonw.exe检查一次,不弹控制台窗口。见 每日自动运行。 - 重启后接着跑。 每日随机时间、心情短句、签到后的答题等待截止时间和提交意图都先保存在本机;恢复时复用记录,失败后按 5、10、20、40、60 分钟逐步等待,避免反复访问网站。
目录
它每天替你做什么
打开一亩三分地右上角的「今日任务」,两项都是「已完成」:
打开「我的积分」,每天都有两条 +1 大米的记录:一条「签到奖励」,一条「每日答题」。
以上是每日任务的目标示意,不是本次实测截图。每日计划只负责签到答题;其他互动通过独立命令调用。签到时会随机选一个心情、配一句语料摘句或模板短句;不想要可以关掉,见 自动签到。
三分钟看懂它怎么工作
一句话:你的电脑每分钟醒来问一次「今天签了吗」,没签就开一个专用的 Chrome,用你自己的登录,按网站流程点按钮,点完再去积分页确认大米真的到账。
- 到点了,系统叫醒它。 用的是电脑自带的定时任务功能,每分钟叫醒一次。
- 先看看今天做过没。 只翻本机的记录,不开浏览器:还没到你设定的时间?今天两项都已经到账了?是的话直接退出。绝大多数时候都停在这一步,所以每分钟跑一次也不费资源。
- 打开专用 Chrome。 和你平时用的浏览器互不干扰,见下一小节。
- 自动签到。 打开签到页,选一个心情,点「提交签到」。细节见 自动签到。
- 自动答题。 读出今天的题目和选项,和题库比对,命中就点对应选项、点「提交答案」。细节见 自动答题。
- 确认大米真的到账。 打开积分页,看到当天的「签到奖励 +1」和「每日答题 +1」,而且是你账号名下的。细节见 怎么算真的成功。
- 记在本机。 这次做了什么、结果如何,写进你电脑上的记录,以后可以离线查。
- 报告结果。 结论只有三种:圆满完成、需要看一眼、失败。
专用 Chrome 是什么
工具不会动你平时用的浏览器。它用电脑上已经装好的 Chrome 程序,但给它一套独立的设置和登录状态,里面只有这个论坛的登录。跑完就关,不常驻后台。
三个配套的保险:同一时刻只有一个任务能用它;一次运行最多 15 分钟,超时就强制关掉;它只允许打开论坛自己的网址,别的地址在代码里直接拒绝。
自动签到是怎么做的
- 打开签到页。 打开前先确认登录还在不在,不在就自动恢复(见下面「登录是怎么自动恢复的」)。
- 选心情。 签到页要求选一个心情。默认随机抽一个,并配一句「说说」,选择会按天保存;不想要可以关掉,关掉后每天固定选「没心情」、什么都不写(见下面「关于今日心情 / 说说」)。
- 点「提交签到」。 只点一次。按钮还没就绪(页面没加载完)就先退出,留给下一轮再来,不会硬点。
- 等网站回应。 点完按钮不算数。工具会盯着网络请求,等到网站真的回应了才往下走,最多等 45 秒。快超时时会自动再试一次人机验证。
- 确认大米到账。 打开积分页,看当天有没有一条「签到奖励」、大米 +1、属于你账号的记录。有,这一项才算成功。
登录是怎么自动恢复的
每次运行开头都先问网站一句「还登录着吗」。过期了,就打开网站自己的登录页,把系统保管的用户名密码填进去,等网站的人机验证通过,点登录。登录成功后再核对一次:网站返回的账号必须和你配置里写的一致,不一致就立刻停下,绝不用别人的账号操作。
关于「今日心情 / 说说」
签到页的「说说」会成为主页上的公开记录。默认随机选择心情和短句;这些是语料摘句或模板表达,不是根据个人生活生成的日记。
- 心情使用统一配置的偏好权重,不代表实测的人类行为,也不保证避免自动化识别。
- 只有昨天有记录才使用心情延续规则:25% 直接延续,其余按权重抽取(仍可能抽到相同心情)。缺席多天不会把上次误当作昨天。
- 同一账号、同一站点日的选择先写入 SQLite,页面准备失败或重启后保持不变。
- 离线语料库从固定版本的 136,320 个原始文本片段筛出 35,469 条摘句:35,432 条唐诗摘句、37 条现代短句。诗句带原作者;现代来源的合格短句很少,不把诗句数冒充口语数。原模板库的 109 条记录继续作为后备,其中「没心情」不发表文案。
account.json可设置"journal_style": "mixed"(默认)、"modern"或"poetry"。混合模式优先抽口语的概率为 80%、诗句为 20%;某类用尽会尝试另一类,因此长期运行后诗句占比可能很高。只想要口语请用modern,其可用池会小得多。诗词模式优先诗词;指定风格用尽时尝试原心情模板。- 系统随机源选择候选,排除之前 365 个日历日已用的文字;忽略标点、空格、诗句署名,按字符三元组 Dice 相似度 ≥80% 排除近似句。候选全部用尽或抽到「没心情」时留空签到。繁简转换和语义改写仍可能产生相似句,不保证不同账号或不同机器绝不碰撞。
- 在
account.json设置"checkin_mood_random": false会立即停止发布短句,即使当天已有随机计划。奖励核验规则不变。
来源、授权、如何重建词库见本地工具的语料说明。不在每天运行时下载文本库,也不调用模型生成文案。
自动答题是怎么做的
- 读题。 工具不去截图识别,而是直接从网站拿到今天的题目原文和全部选项。都是文字,没有歧义。
- 查题库。 题库有两份,合并使用。一份是随仓库分发的题库,194 道题,就是「题目 → 正确选项文字」的对照表,你可以直接打开看。另一份只存在你电脑上,记的是这个账号 实际答对并到账过 的题。你电脑上这份优先,因为「在你账号上验证过」比「别人整理的」更可信。
- 点选项。 只点文字和答案完全一样的那个按钮。
- 点「提交答案」。 只点一次。
- 等网站回应。 最多 45 秒。
- 确认大米到账。 积分页里当天有「每日答题 +1」,这一项才算成功。
匹配的原理见下图:先把题目和选项的格式统一(全角半角、多余空格),再按 选项文字 精确比对。不按 A/B/C/D 的位置,因为网站每天可能打乱选项顺序。必须 恰好命中一个 选项才算匹配。
题库没有怎么办?它不会瞎猜。 直接停下,把题目原文和全部选项写进结果里。你查一次正确答案,用每日命令带上原题和正确选项的完整文字补答一次(写法见使用说明),也可以让 AI 助手查一次再填。工具会先确认网站今天的题还是这道,再作答。
[!TIP] 仓库题库里有少数题目记了多个候选答案,因为网站在不同日子给同一道题配过不同选项。这类题目当前不会自动命中,会停下来让你确认一次;确认到账后就记进你电脑上的题库,以后自动命中。
答完之后学什么。 这一步只在等到网站回应之后才做,因为只有那时才有可靠的证据。到账了就记为正确答案;网站显示已答却没到账说明答错了,把这个答案记进错误名单,以后拒绝再交,不重复扣米;没等到回应就什么都不记。
怎么判断「真的成功了」
很多脚本把「点到了按钮」当成功,结果按钮点了但网站没收到,第二天才发现断签了。这个工具不这样。
每一项的判定。 工具读积分页上的记录,逐条检查四个条件,全部满足才算这一项成功:记录属于你的账号;大米确实 +1;标题正好是「签到奖励」或「每日答题」;日期是网站的「今天」(按洛杉矶时间,见 每天什么时候跑)。缺任何一条都不算。
整天的结论。 综合两项动作的状态和奖励核对,按下面的顺序得出结论。结果里会显示英文代号,方便脚本判断:圆满完成是 complete,需要看一眼是 needs_attention,失败是 failed。
结果存在哪。 全部在你电脑上,不上传。
出错了它怎么自救
网络抖一下、人机验证卡一下、电脑中途睡着、Chrome 崩了,这些都会发生。工具有六层保护,从秒级到天级,每层管一种时间尺度的问题。
看一个具体的坏日子是怎么被接力救回来的:
哪些错误会自动重试(第 4 层): 网络超时、网络不可用、页面或验证超时、人机验证没过、浏览器连接断开、运行超时。
哪些不盲目重试: 密码错误、题库没题、按钮没点到。这些要么需要你处理,要么留给下一轮自然再来。
提交发出去了,回执却没回来
这是最微妙的情况:按钮点了,请求发出去了,但 45 秒内网站没回应。工具不知道网站到底收没收到。重复提交可能被网站当成异常操作,不提交又会断签。所以先在本机数据库保存提交意图,再点击。没有明确证明未点击的请求,后续只核验完成状态和奖励,不自动重交。答题结果不明时,定时任务补查一次;仍未完成且签到已核验时,就返回 manual_recovery_required 和 attention(失败记录编号、账号、站点日及处理提示),后续触发只更新心跳,不反复打开浏览器。需要先用 status 核验,再在网页完成或按 人工恢复步骤 明确授权重试一次:
为什么要有第二双眼睛
一个程序发现不了自己没被叫醒:定时任务坏了,主计划根本不会跑,也就不会报错。所以要有第二双眼睛在链路的另一端看着。健康观察者不碰账号、不开浏览器,只看本机记录里「最近一次心跳是什么时候」「哪些天没完成」,给出正常、留意或提醒。提醒时你可以接桌面通知。
每天什么时候跑
- 计划时间 默认在洛杉矶 10:00–12:00 抽取到分钟的时间,11 点附近概率较高(Beta(3,3))。每账号每天只抽一次并保存,重启不会重抽;系统随机源失败会停止,不退回固定种子。夏令时自动处理。已有显式
schedule_time继续按固定模式运行,设置schedule_mode: "random"可迁移。 - 叫醒方式 推荐操作系统每分钟直接调用一次。它自己判断该不该跑,没到点、已完成时直接退出、不开浏览器。
- 触发延迟 由本机调度器、电脑睡眠和网络决定。随机时间是目标,不是执行保证;错过窗口后在同一站点日恢复。固定模式仍报告每 4 小时的恢复时刻。
- 失败恢复 按已存记录等待 5、10、20、40、60 分钟,上限 60 分钟;
recovery_wait期间不访问网站,状态为needs_attention。答题提交结果不明时补查一次,仍无结果则转为manual_recovery_required,需人工处理;这两种状态都不表示当天成功。 - 电脑睡着 错过的,醒来后下一次叫醒会补上。只补「今天」,不补过去几天的签到。
- 心跳。 每次叫醒都在本机记一笔,即使什么都没做。健康观察者靠它判断定时任务还活着没有。
- 动作间隔。 签到确认后抽取一次 30–70 秒间隔并保存截止时间;答题前只等剩余部分,重启和补答不会重新等待一整段。网络延迟可能使实际间隔更长。
- 同一账号只保留一个每日执行计划。 独立的离线健康观察可以保留;浏览器锁阻止同时操作。
网站的「一天」按洛杉矶时间算
这是很多签到脚本出错的地方:用电脑本地日期判断「今天签了没」,跨时区就乱。这个工具一律按网站所在的洛杉矶时间算「今天」,奖励记录的时间也折算成洛杉矶日期再比较。
macOS 和 Windows 上定时任务怎么配、健康观察者怎么配,见 使用说明 › 每日自动运行。
安全与隐私:你的数据在哪
密码。 在终端里隐藏输入一次,macOS 放进登录钥匙串,Windows 用系统加密。两者都和这台电脑、这个用户绑定,换电脑要重新配,拷文件过去没用。密码不进仓库、不进日志、不进 AI 助手的对话。
登录状态。 只存在专用 Chrome 的设置目录里。退出登录的命令只删这个目录里论坛的登录信息,不碰别的。
仓库里有什么。 仓库默认忽略一切文件,只有登记过的源码、题库、文档能入库;你电脑上的账号、记录、数据库所在的目录永远不入库。检查命令还会扫描密钥特征和个人路径,发现就失败。
网络上只跟论坛自己的网址说话。 不经过任何第三方服务器,不用打码平台,不上传截图。别的网址在代码里直接拒绝。
它不会替你做的事。 顶/踩、评分这类不可撤销或要花大米的操作,工具不做。发帖、回复、收藏、点赞这些互动命令默认只预览,明确要求才会真正写网站,写完还会读回来核对。
快速开始
推荐:用已发布的软件包接入 AI 助手
1point3acres-toolkit 已发布到 PyPI。装好 Chrome、Python 3.12 和 uv,就能启动本地 MCP,无需 Git:
uvx 1point3acres-toolkit@latest
这是 MCP 服务的启动命令。要让 AI 助手调用它,在客户端添加以下配置;具体注册命令见 MCP 接入:
{
"mcpServers": {
"1point3acres-local": {
"command": "uvx",
"args": ["1point3acres-toolkit@latest"],
"env": {"PYTHONUTF8": "1"}
}
}
}
将这一项合并到客户端已有配置,不要覆盖其他 MCP。使用 TOML 或图形设置的客户端,填入相同的启动命令、参数和环境变量即可。客户端找不到 uvx 时,填它的绝对路径。
接入后还需配置自己的论坛账号并建立登录;启动 MCP 本身不会配置账号或创建每日计划。账号、专用 Chrome 和历史保存在个人应用数据目录,可通过 ONEPOINT3ACRES_HOME 指定位置。@latest 获取最新兼容的启动器发布版;1.2.0 起,已运行的 MCP 也会准备通过 CI 的 main,并在当前调用结束后切换。需要 Git 和网络。
只想先检查程序能否运行,可以执行以下命令:uvx 会检查并准备软件包,随后 info 只读取本机状态,不会登录或签到:
uvx --from 1point3acres-toolkit@latest 1point3acres-toolkit-cli info
命令行、账号目录和定时任务的具体步骤见 软件包安装。
交给 AI 助手安装:默认自动更新
把项目链接或仓库交给一个能在本机执行命令的 AI 编程助手(Claude Code、Codex 等),可以直接说:
帮我安装这个工具,配置每天自动签到答题,并启用默认的自动更新。
给安装助手:普通用户默认使用 uvx …@latest,MCP 和每日计划都要配置;不要因为拿到了仓库就默认安装源码版。 按 AI 安装步骤 完成账号配置、首次验证与系统定时任务。只有用户明确要求开发、源码运行或固定版本时,才改用相应安装方式。你需要提供论坛用户名和 uid,并按提示在本机安全输入密码。
配置后,CLI 启动及常驻 MCP 都会检查通过 CI 的 main。已开始的调用先完成,再切换业务进程,保留客户端连接。初次安装新启动器需要发布软件包,之后兼容的业务源码变更可直接自动更新。已有源码或 pip 安装需按 迁移步骤 更换入口并保留数据。
下面的源码安装适合需要改代码的开发者,或继续使用已有仓库版的用户。
开发者源码安装:七步的原理
前置:装好 Git、Chrome、Python 3.12。每一步的确切命令见 使用说明 › 源码安装,这里只说每步在做什么、怎么算成功。
- 克隆仓库。 拿到源码。克隆本身不会创建任何定时任务,也不会碰网站。
- 建环境、装依赖。 建一个独立的 Python 环境,装 8 个锁定版本的库。不污染系统。
- 跑一次安装检查。 核对依赖、生成本机配置、跑离线测试,并启动一次临时 Chrome 验证能开。不登录、不签到。看到「完成」才继续。
- 配账号、存密码。 写一个只含用户名和 uid 的账号配置;然后在终端隐藏输入一次密码,交给系统保管。
- 登录一次。 用保管的密码建立登录。不想存密码也可以微信扫码,但之后的日常自动恢复仍需要密码。
- 手动跑一次签到答题。 看到「圆满完成」。出现「题库没题」就按 自动答题 那节补一次答案。
- 配定时任务。 先用
info核对当前版本和调度配置,再让系统每分钟执行daily --resume。macOS 使用 launchd;Windows 仓库版提供计划.ps1,可先用-Action Install -WhatIf预览,再安装。uvx 版计划调用uvx --from 1point3acres-toolkit@latest 1point3acres-toolkit-cli daily --resume(每次启动检查更新,有网络开销);pip 版调用1point3acres-toolkit-cli daily --resume。调度器应使用入口的绝对路径,并与 MCP 共用数据目录。同一账号只保留一个每日执行计划,再配离线健康观察,及时发现连续失败。
其他功能
这些都是可选的,不装不配也不影响签到答题。所有命令都在工具目录执行,按用途分成六组:
面经资料。 采集指定公司的面经帖子,存进本机数据库,导出成 JSON、CSV、Markdown 和一个离线阅读器;可以按关键词、岗位、级别、发帖日期搜索;帖子里的图片能归档到本机并在本机识别文字,不上传。采集可以做成任务,支持暂停和从断点恢复。
只读浏览。 站内搜索、读帖、翻版面、看主页、读通知,都不入库、不标记已读。
互动。 发帖、回复、收藏、点赞。每个操作都是「先读现状,已经是目标状态就不提交;提交后再读回来核对」。默认只预览,明确要求才真正写网站。
接给 AI 助手。 工具同时是一个 MCP 服务(AI 助手调用本地工具的通用接口),用的是和命令行完全相同的函数:
每个命令的参数、返回字段、边界情况,见 使用说明 › 命令参考 和 MCP 接入。
常见问题
结果里的错误代号先分清是哪一类,大多数不需要你做任何事:
更多错误代号和处理见 使用说明 › 常见问题。提 Issue 时给出系统、Python、Chrome 版本、用到的命令和脱敏后的结果代号,不要贴账号配置或完整的结果文件。
更新与维护
默认自动更新。 从 1.2.0 起,启动器检查 vivian-labs/1point3acres-toolkit 的 main,只使用同一提交已通过 CI 的版本。CLI 执行业务命令前准备新版;常驻 MCP 在业务调用前和空闲时检查,等正在执行的调用结束后替换后台进程,保持客户端原连接。需要 Git 和网络,info、daily-history 健康查询保持离线。1.3.1 起同时支持旧版 initialize、新版 server/discover 和请求内协议元数据;已连接的新旧客户端都能切换业务进程。
软件包发布也会自动同步。 版本号提升并合并到 main 后,完整 CI 通过才上传并核验 PyPI,随后创建对应的 GitHub Release。uvx …@latest 下次启动获取新包;普通提交不发包,但可通过上述源码更新器更新业务代码。包版本与实际运行提交可能不同,分别用包元数据和 runtime_info.loaded.revision 核对。
自动更新的过程:
你电脑上的账号、密码、数据库、Chrome 设置都不受更新影响。计划时间之类的个人配置写在账号配置里,不改仓库里的代码,更新时才不会冲突。具体命令见 使用说明 › 更新与维护。
确认更新已生效。 仓库版执行 运行.cmd info / ./运行.sh info,软件包版执行 1point3acres-toolkit-cli info 或对应 uvx 命令;MCP 调用 runtime_info。loaded.revision 表示实际运行的提交,updates 给出检查时间、最新可用提交和脱敏错误。新版在私有缓存中运行,因此根目录的 git log 可能仍是较旧的启动器版本。初次从 1.1.0 或更早版本迁移,需要更新入口并重启旧 MCP 一次;之后兼容的源码更新自动切换。修改账号配置仍需重连。
初次安装与失败处理。 软件包入口使用 uvx @latest 获取包含启动器的发布版;GitHub 合并本身不会把新启动器装进旧环境。启动器已安装后,它直接准备通过 CI 的源码版本,不要求每次变更都发 PyPI。下载、依赖安装或候选校验失败时继续使用已验证版本,不覆盖原代码、账号、数据库和 Chrome 会话。停用自动检查、缓存位置及开发者手动更新方式见完整维护说明。
几点须知:
- 每位使用者配置自己的论坛账号,不会继承别人的登录、资料或定时任务;克隆本身不会创建任务,也不会执行任何网站操作。
- 读取内容以当前账号的权限为准。帖子详情或站内搜索返回结果,不等于已存进资料库。
- 已有实测不构成永久通过人机验证的保证;网站或验证变化可能导致某天失败,程序会如实记录。
- 本工具只用你自己的账号、在你自己的电脑上、按网页正常流程操作,请遵守论坛规则,自行承担使用风险。
给开发者
下面三节是给想读代码、改代码的人看的,普通使用者可以跳过。
技术栈
维护者发布。 通过 PR 将版本号提升合并到 main;该提交的完整 CI 通过后,Publish to PyPI 自动构建并上传 PyPI,核验文件后创建对应 GitHub Release。Trusted Publishing 无需长期 token;普通提交不发包,失败可按原提交重试。完整步骤见 发布流程。
依赖清单在 requirements.txt,版本全部锁死,检查命令会核对已安装版本和清单一致。
代码结构
代码都在 outputs/一亩三分地本地工具/ 一个目录里,16 个 Python 模块,分五层,依赖只能往下指。哪个模块能引用哪个,都写在 architecture.json 里,检查命令用 AST 扫一遍源码验证,越界就失败。
仓库的整体布局:
测试与 CI
本地和 CI 跑的是同一个检查命令,输出一段 JSON,status=complete 才算过;有问题时 violations 列出每一条。它分三个阶段,可以只跑其中一个:
- 静态检查: 每个模块只引用白名单里的模块;外部库只在登记的模块里引用;状态字段不许写字符串字面量,必须用契约模块里的枚举;数量上限这类默认值必须来自配置模块;依赖清单和登记一致;MCP 工具名和登记一致;CSS 只能用视觉取值文件里的值;文档里的相对链接都存在;
git ls-files里没有未登记的文件,也没有登记了但不存在的文件;shell 入口带可执行位;没有二进制、密钥、个人路径;打包文件里的版本、依赖、入口命令和登记一致。几秒钟跑完。 - 单元测试: 每日流程的每个分支(已完成、没到点、题库没题、答错、提交丢失、重试一次、看门狗超时、站点日翻页……)、题库匹配、奖励核对、心情抽取、健康判定、凭据读写(macOS 上真实往返钥匙串)、命令行参数、MCP 参数守卫、面经解析、互动命令的先读后写。
- 集成测试: 用 stdio 真实拉起 MCP 服务并握手;真实启动一次 Chrome 打开离线阅读器。不登录、不签到、不访问站点。
CI 在 Ubuntu、Windows 2022、Windows 2025、macOS 15 上分阶段跑,每个阶段都先重建生成文件再比对,生成物和源码不一致也算失败。Action 一律按 commit 哈希锁定,不用 secrets,不用自托管 runner。
改代码: 改完统一跑检查命令,先不带参数做完整离线检查与回归,再带 --sync 重建生成文件后再检查。新增模块、新增依赖、新增 MCP 工具、新增文件,都要同步登记到 architecture.json,否则检查会失败,这是故意的。改了配图就重新跑一遍 python3 docs/diagrams.py,SVG 是生成物,不要手改。
语料增加一个登记的离线模块 corpus.py 和两份分发数据。journal-corpus.json 单独获准最多 4 MB 的 UTF-8 文本,其他文件仍维持原大小限制,敏感信息扫描继续执行。语料文件参与运行版本指纹;自动更新包含语料,原始下载文件和个人使用历史不进入仓库。
自动更新增加独立的启动控制层。论坛访问仍归 browser.py,软件更新只由 updates.py 请求固定的 GitHub 仓库和 CI API;准备时使用隔离的数据目录。业务进程的代码工作区与可写数据工作区分开,桥接层只转发协议和管理进程,不重建业务规则。更新源码和依赖不触碰当前目录的用户修改。