# 自助棋牌室系统开发总纲(V5.3) > 文档版本:V5.3(持续开发自动推进 + 固定模块队列 + 工程编码优先 + 可中断恢复版) > 更新日期:2026-06-18 > 目标:用这一份 Markdown 作为项目唯一开发总纲,让 Codex 自动识别当前进度,按功能编号和模块子阶段连续开发;最终覆盖顾客端、管理员端、保洁端、平台后台、支付、团购、通知、统计、加盟、多小程序隔离,以及已经选定的 4G 智能门禁控电箱、Sub-1G 智能门锁、4G 智慧插座和 Linux MQTT 服务器的真实联动。后台 Web 必须同时适配桌面、平板和手机浏览器;项目必须同步维护 Windows/WSL 开发测试脚本,以及适用于 Ubuntu Server 24.04 x86-64(Ubuntu 包架构名为 amd64、无桌面版)的菜单式部署、环境监测与运维脚本;小程序和后台统一通过 `https://api.txyundm.cn` 与后端通信。 --- ## 文档命名与版本规则 - 当前文件固定命名为 `V5.3.md`,后续仅使用版本号命名,例如 `V5.3.md`、`V5.4.md`。 - 禁止再生成带完整项目名称的超长文档文件名。 - 每次升级文档时保留上一版本只读备份,不覆盖历史版本。 - 当前权威文档固定放在单一 `qipai` 仓库根目录;Codex 必须以根目录版本号最大的文档为当前开发总纲。 - 文档版本号只代表开发总纲版本,不等同于小程序版本、后端版本或数据库迁移版本。 ## V5.3 本次变更 - 在 V5.2“工程编码优先、反文档循环”基础上,新增**持续开发自动推进机制**:Codex 完成一个子阶段并成功推送后,只要当前会话仍具备执行条件,就必须自动选择队列中的下一子阶段继续编码,不得停在“等待用户继续”。 - 固定唯一推进顺序为 `M00 → M01 → M02 → … → M10`,模块内部严格按 `A → B → C → …` 推进;不得为了容易实现而跳到后面的页面、报表或说明文档。 - “每次只开发一个子阶段”重新定义为:**一个提交/验收单元只对应一个子阶段**,但同一次 Codex 会话可以连续完成多个相邻子阶段;每个子阶段仍须独立测试、独立 commit、独立 push、独立远端校验。 - 新增确定性目标选择算法:优先恢复 `DOING`,其次修复 `BLOCKED_INTERNAL`,再次补完 `PARTIAL`,最后选择编号最小的 `TODO`;只有满足文档规定的外部阻塞条件时,才可暂时越过 `BLOCKED_EXTERNAL`。 - 新增 `docs/module-status.md` 顶部“执行游标”固定字段:`current_module`、`current_stage`、`last_completed_stage`、`next_stage`、`last_engineering_commit`、`last_push_verified`、`blocked_reason`。后续续接只读取该游标和相关增量,不重复全量规划。 - 新增**会话内循环**:`SELECT → CODE → TEST → DOC → COMMIT → PUSH → VERIFY → ADVANCE`。`VERIFY` 成功后自动回到 `SELECT`,直到触发明确停止条件。 - 新增允许停止的有限条件:会话/工具即将结束、真实外部依赖阻塞、无法自动恢复的内部失败、工作区/远端出现高风险冲突、需要用户作业务决策。不得以“本阶段已完成”“文档已更新”“等待下一步指示”为由提前停止。 - 新增可中断恢复规则:下一次 Codex 运行必须从现有工作区、执行游标、最近工程 commit 和当前模块日志恢复;禁止重新初始化、重复审计、重新生成计划或从 M00 开始。 - 新增时间预算与收尾门禁:预计剩余时间不足以完成“测试 + 文档增量 + commit + push + verify”时,不得开启新的子阶段;必须先把当前子阶段闭环,避免留下不可追踪的半成品。 - 新增模块完成自动切换:模块最后一个子阶段通过后,立即执行模块级回归与验收提交;验证成功后将游标切换到下一模块首个子阶段,并在同一会话资源允许时继续编码。 - 新增阻塞旁路边界:`BLOCKED_INTERNAL` 原则上不得跳过,必须先修复;`BLOCKED_EXTERNAL` 可在接口、Mock、数据库、错误处理和测试桩已完成后冻结真实联调项,并继续不依赖该外部条件的后续工作。 - 新增跨模块集成检查点:M00、M02、M04、M06、M08、M10 完成时分别执行基础环境、权限、订单、硬件、端到端、上线级回归,防止模块各自通过但系统无法联通。 - 新增“禁止假持续开发”:批量创建空接口、空页面、TODO、占位测试或一次提交跨越多个未验收模块,不视为持续推进;推进速度不能牺牲可运行性、数据一致性、权限和回滚能力。 - README 必须简要显示当前执行游标、最近工程提交和下一工程目标;总纲升级只更新版本递进,不复制全部规则。 - 本次 V5.3 更新属于用户明确要求的文档专用提交,不计入业务模块完成度;提交 V5.3 后的下一次普通“继续开发”必须进入工程编码并启动自动推进循环。 ### V5.2 已继承基线 - 新增“工程编码优先、文档只做伴随记录”的最高优先级规则。用户说“按当前进度继续开发”时,Codex 的主任务必须是修改可运行工程文件,而不是继续扩写 Markdown。 - 正常模块开发回合必须产生可验证的工程增量:后端/后台/小程序源代码、数据库迁移、自动化测试、部署脚本或运行配置中至少一类发生与当前验收项直接相关的实质变化。 - 仅修改 `README.md`、`V*.md`、`docs/**/*.md` 不计入模块开发进度;只有用户明确要求“仅更新文档”或存在无法绕过的真实阻塞时,才允许文档专用提交。 - 禁止连续两个文档专用提交。发生一次文档专用提交后,下一次“继续开发”必须进入工程编码;不得再通过新增状态、审计、总结、计划类 Markdown 模拟进度。 - 基线审计改为“一次全量、后续增量”:`docs/current-baseline.md` 必须记录 `audited_commit`。当该 commit 与当前基线一致时,不得重新生成全量清单,只核验自该 commit 以来变化的路径。 - 新增固定文档白名单与复用规则:优先更新既有状态文件;除本总纲明确要求的文件和每个模块子阶段唯一一份开发日志外,禁止创建 `*-v2.md`、`*-new.md`、`summary-*.md`、`audit-*.md`、`plan-*.md` 等重复文档。 - 一个模块子阶段只允许一份开发日志;同一子阶段的修复、重试和补测必须追加到原日志,不得为每次尝试创建新日志。 - 新增工程增量防伪要求:格式化、改注释、空壳接口、只加 TODO、只改锁文件、只生成类型声明或只改配置说明,不能单独作为模块完成证据。 - 新增完成门禁:模块从 `DOING/PARTIAL` 转为 `DONE` 前,必须同时提供工程文件变更、可复现测试结果、对应验收项、Git commit、push 成功和 `HEAD == origin/main` 证据。 - README 增加“最近工程提交”和“下一工程目标”摘要;不得把纯文档 commit 当作最近开发成果。 - M00 增加退出条件:基础目录、最小状态文件、环境脚本和一次推送验证完成后必须关闭 M00,转入第一个业务/平台编码子阶段;不得无限扩展审计文档。 - 本次文档更新属于用户明确要求的文档专用工作,可单独提交;它不代表任何业务模块已完成,下一次“继续开发”必须产生工程编码增量。 ### V5.1 已继承基线 - 本版从已经执行过少量 V5.0 开发的现有仓库继续推进,禁止重新初始化、删除既有模块或依据旧 README 回退约束;Codex 必须以当前代码、测试、迁移、Git 历史和状态文档为事实源。 - 根目录 `README.md` 升级为必须同步维护的项目入口:每次开发总纲升级、运行环境变化、配置路径变化、账号密码变化、部署方式变化或模块完成后,都要简要递进更新 README,并与当前最大版本号文档保持一致。 - 当前权威总纲固定为 `D:\qipai\V5.3.md`;README 中不得再保留 `V4.8.md` 或其他旧版本作为当前权威文档。 - 新增“配置文件总索引”,明确 Windows、WSL、Git 仓库和 Ubuntu 生产环境的配置文件位置、用途、是否纳入 Git、加载顺序和维护责任。 - 按用户明确决定,允许在私有 Gitea 仓库的 `README.md` 与 `docs/configuration.md` 中明文记录当前账号和密码;已知 WSL EMQX Dashboard 凭据记录为 `admin / admin123`。 - 明文密码政策仅覆盖账号密码和连接口令,不包含 SSH 私钥正文、TLS 私钥正文、微信支付私钥/证书正文;这些文件仍只记录路径、指纹、有效期和权限。 - WSL EMQX `admin / admin123` 当前先标记为 Dashboard 管理员凭据;在未通过 MQTT 客户端认证测试前,不得假定它同时是 MQTT 客户端账号。 - 新增 README/总纲/配置文件一致性检查:Codex 每次结束前必须验证版本号、域名、仓库地址、目录、端口、账号和配置路径一致,发现不一致必须在同一提交中修正。 - README 只做简要递进,不复制整份总纲;详细功能、模块状态、验收和开发纪律仍以 `V5.3.md` 及 `docs/` 为准。 #### V5.0 已继承基线 - 项目已经完成部分模块或子阶段,Codex 必须在继续开发前先核对现有代码、测试、数据库迁移、Git 历史和状态文档,严禁重新初始化、批量覆盖或把已有成果退回模板状态。 - 新增“已有开发成果基线核验”流程:以实际仓库为事实源,对 `docs/module-status.md`、`docs/feature-status.md` 与代码实现逐项校准,无法证明已验收的功能只能标记 `PARTIAL`,不得凭目录或文件名标记 `DONE`。 - WSL 本地 MQTT 调试环境已完成基础安装并通过服务级核验:EMQX `5.8.9`,服务状态 `active (running)`,已启用开机启动。 - 已确认 WSL 监听端口:MQTT TCP `1883`、MQTT TLS `8883`、WebSocket `8083`、WebSocket TLS `8084`、Dashboard `18083`。端口监听正常只代表服务可用,不代表 TLS 证书、客户端认证、ACL 和协议联调已完成。 - WSL 已安装 MQTTX CLI `1.13.0`,可执行文件固定为 `/usr/local/bin/mqttx`,来源文件为官方 Linux x64 二进制 `mqttx-cli-linux-x64`。 - Windows 继续使用 MQTTX 桌面版进行图形化调试;WSL 使用 MQTTX CLI 进行自动化冒烟、脚本化发布/订阅和协议复核。`mosquitto-clients` 降级为可选兼容工具,不再作为 WSL 首选客户端。 - WSL EMQX 仍只作为本地开发/测试 Broker;其健康状态不代表 `101.42.38.246` 正式 Broker 已部署完成。 - WSL 本地 EMQX 已知账号密码为 `admin / admin123`,按用户要求明文写入根目录 README 与配置索引;当前用途按 Dashboard 管理员处理,Codex 仍需确认是否另有 MQTT 客户端认证账号,并为后端、调试端和模拟设备建立最小权限账号与 ACL。 - 新增 EMQX 5.8.9、MQTTX CLI 1.13.0、五个监听端口、systemd 自启、Windows 到 WSL 连通性、MQTT 3.1、QoS 1、错误密码拒绝、ACL 越权拒绝、遗嘱消息和重复消息幂等的分层核验要求;已安装且健康时禁止重复安装、降级或重置数据。 - 用户已明确选择在私有 Gitea 中保留账号密码明文;Codex 不得擅自删除或脱敏 README 中已登记的凭据,但凭据变化时必须同步更新 README、配置索引和实际配置,并记录变更日期。 - 新增“监听端口正常不等于认证、ACL、TLS 或设备执行成功”的验收边界,避免把服务级健康误判为协议联调完成。 - Windows 唯一正式开发工作区固定为 `D:\qipai`;该目录本身就是 `panda/qipai.git` 的唯一 Git 根目录。 - 当前开发总纲固定放在 `D:\qipai\V5.3.md`,Codex 只需收到“请阅读 V5.3.md,按当前进度继续开发。”即可开始工作。 - 所有可借鉴源码、静态包、SQL、脚本、旧运行包和硬件协议统一放在 `D:\qipai\参考\`,作为只读参考基线纳入同一仓库并推送到 Gitea。 - `参考/` 内不得存在生效的嵌套 `.git`、Git submodule 或独立远端;来源和原始版本写入 `参考/README.md` 与参考清单。 - “所有内容推送远端”指所有项目源码、测试、迁移、文档、部署脚本、配置样例、README 中登记的账号密码和经审计的参考资料必须纳入 Git;运行态 `.env`、SSH/TLS/支付私钥正文、依赖、构建产物、运行日志、上传文件和备份仍禁止提交。 - 每个模块子阶段完成后,必须检查 tracked、untracked、ignored 和大文件,确保没有应交付项目文件遗留在本地;随后一次 commit 并立即 SSH 推送 `origin/main`。 - 新增固定工作区、参考资料、敏感信息、仓库完整性、Windows/WSL 行尾和大文件检查约束。 - Windows 继续承担主要开发、微信开发者工具、浏览器和 MQTTX 调试;WSL 只作为 Linux 兼容、ShellCheck、构建预演、MQTT 命令行和部署脚本辅助环境。 - WSL 不与 Windows 共用 `node_modules`;完整 Linux 构建必须在 WSL 原生临时副本中执行。 - 本版继承 V4.7 的固定 HTTPS API 域名、Ubuntu 24.04 x86-64 无桌面生产环境、`/opt/apps`、菜单式部署、Gitea 拉取发布、无 Docker、无微信云开发、EMQX、真实硬件接入和后台手机适配全部约束。 --- ## 0. Codex 唯一使用入口 交给 Codex 时只发送这一句话: ```text 请阅读 V5.3.md,按当前进度继续开发。 ``` 除非用户明确指定模块,否则不再附加长提示词。本文档中的全部约束、功能清单、开发顺序、验收标准和记录规则,均视为 Codex 的内置执行指令。 ### 0.0 工程编码优先与反文档循环硬门禁 本节优先级高于本文档其他所有“维护文档”要求。文档用于约束和记录工程,不得取代工程。 #### 0.0.1 默认任务解释 当用户只说: ```text 请阅读 V5.3.md,按当前进度继续开发。 ``` Codex 必须把它解释为: ```text 读取当前进度 → 选择第一个可执行未完成子阶段 → 直接修改工程文件 → 编写/更新测试 → 实际运行验证 → 增量更新既有文档 → commit → push ``` 禁止解释为: ```text 再次盘点仓库 → 新建更多 Markdown → 更新状态描述 → 不修改工程文件 → 把文档提交当作模块进度 ``` #### 0.0.2 工程增量的最低门槛 除用户明确要求“仅更新文档”外,每次开发回合必须至少修改一类工程文件,并形成可验证行为变化: - `backend/src/**`、`backend/test/**`、`backend/tests/**`; - `admin/src/**`; - `miniapp/**` 中的页面、组件、服务、配置或测试代码; - `database/migrations/**`、`database/seeds/**` 或兼容 SQL; - `scripts/**` 中可执行的 `.ps1/.sh/.ts/.js`; - `deploy/**` 中实际生效的 Nginx、PM2、EMQX、systemd 配置; - 根目录 `setup.sh`、构建配置、依赖配置或测试配置; - 与当前功能直接相关的自动化测试、Mock、适配器和迁移。 以下内容不能单独满足工程增量: - 只新增或修改 Markdown; - 只改注释、空格、格式化、文件名或目录说明; - 只添加 TODO、空函数、空接口、占位页面或固定返回成功; - 只更新 lockfile、版本号、生成文件或截图; - 只复制参考代码但未接入正式入口、未测试、未形成行为变化; - 为通过门禁而进行与当前模块无关的无意义代码改动。 #### 0.0.3 文档专用提交的唯一例外 只有以下情况允许本次提交没有工程增量: 1. 用户明确要求升级/修订总纲、README 或配置索引; 2. 用户明确要求只整理文档; 3. 真实阻塞发生在工程修改之前,且无法通过现有代码、Mock、测试桩或配置模板继续推进; 4. 法规、协议或架构决策变化,需要先完成规格冻结。 文档专用提交必须: - commit 使用 `docs(spec): ...` 或 `docs: ...`; - 在 README/开发日志中写明“工程增量:无(用户明确要求文档更新/真实阻塞)”; - 不得把任何模块标记为 `DONE`; - 不得计入功能完成数; - 下一次普通“继续开发”禁止再次做文档专用提交。 #### 0.0.4 禁止文档膨胀 1. 优先更新现有文件,禁止为同一主题创建第二套状态文档。 2. 除根目录当前总纲、README、配置索引、固定状态文件和当前模块唯一开发日志外,不得新增 Markdown。 3. 禁止创建:`plan*.md`、`todo*.md`、`summary*.md`、`audit*.md`、`status-v*.md`、`progress-*.md`、`report-final*.md` 等重复文件。 4. 同一模块子阶段只保留一个 `docs/devlogs/YYYY-MM-DD-Mxx-主题.md`;补丁和重试追加到该文件。 5. 缺少非当前模块必需的文档时,登记在既有 `docs/unresolved-issues.md`,不得暂停编码去批量补空文档。 6. 不得为了满足“文档齐全”而创建只有标题、模板或“待补充”的空文件。 #### 0.0.5 基线审计防循环 `docs/current-baseline.md` 必须记录: ```text audited_commit: audited_at: