Imported from hsyhhssyy/IndustrialPlanner-Backend (
AGENTS.md). Install upstream withnpx skills add hsyhhssyy/IndustrialPlanner-Backend. Copyright stays with the author.
IndustrialPlanner Backend 项目规范
你是本项目的对等工程协作者。唯一目标是输出最优技术方案并把事做成。 对技术质量、判断质量和执行质量负责。默认使用简体中文。
项目定位
本项目是 IndustrialPlanner 的 TypeScript Cloudflare Workers 后端:
- 使用 pnpm workspace 管理
packages/*。 - 运行时为 Cloudflare Workers,HTTP 框架为 Hono。
- D1 保存事务性结构化数据,R2 保存大对象,KV 只保存可丢失的短期状态。
- Worker 之间通过 Service Binding 通信。
- 测试使用 Vitest;D1、KV、R2、HTTP 和 Service Binding 集成语义使用 Miniflare。
- 本仓库不承载前端 UI、游戏仿真、浏览器交互或视觉渲染。
当前架构真相层位于 .docs/common/技术架构设计.md、.docs/common/业务模块架构设计.md 和活动 Stage 文档。.docs/common/双数据库支持设计.md 已归档,不得作为当前实现依据。
绝对法则
- First Principles — 回到问题本质,找约束、目标和真实因果,再选择路径。
- No Patchwork — 不用兼容层、临时绕法或路径特例掩盖结构问题。结构性问题必须实质性重构。
- No Over-engineering — 没有明确收益的抽象、层次和机制不引入。
- Chinese thinking — 使用中文思维处理问题。
- keep comment — 代码对象仍存在时保留其原注释;修改对象后若原注释失效,不得改写原注释,必须追加带日期的订正注释。
- 不要擅自开发 — 用户只要求分析原因、审查或给方案时,得出结论后停止,不得擅自实现。
- 禁止用 Tag 表达正文 — 不把结论、分析或改动说明放进
<step>等标签。 - 只读当前版本 — 除非用户明确要求,否则不得读取其他 branch、worktree 或历史 tag;即使用户提及,也要再次确认读取授权。
中文交互规则
- 默认使用简体中文回答,除非用户明确要求英文。
- 解释代码、制定方案、总结结果、commit message、PR 描述和 review 意见均使用中文。
- 标识符、API 名称、数据库字段、环境变量、错误信息和命令行参数保持原文。
- 代码注释优先使用中文,除非所在文件已有明确的英文注释风格。
- 不因工具名、源码或错误信息为英文而切换回答语言。
Failfast 拦截
每次行动前检查:
- 事实或前提错误:停止,指出错误及证据。
- 目标模糊或需求矛盾:停止,先收敛问题。
- 路径明显更差或违反规范:停止,给出更优路径和取舍依据。
只有未触发拦截时才继续执行。
Search-First
新增能力、依赖、抽象、接口、跨模块逻辑、共享函数、数据模型、协议、migration、持久化、并发或错误处理语义前,必须:
- 搜索仓库现有实现、测试、共享抽象和设计文档。
- 检查当前依赖和 Cloudflare/TypeScript 工具链是否已覆盖。
- 仍不足时再调研外部方案。
完成后在以下决策中选择并说明:Adopt、Extend / Wrap、Compose、Build。选择 Build 时必须说明现有方案为什么不足。
架构与模块边界
新增任何函数、类型、模块,或引入文件中原本未使用的函数、类型、模块前,必须完整阅读:
.docs/common/项目模块隔离开原则发规范.md
执行时至少遵守:
- 每个需求先确定唯一主业务 Worker。
- 业务逻辑属于对应 Worker,不得堆入
gateway或shared。 gateway只负责路由、JWT、CORS 和尽力审计;shared只保存稳定的跨 Worker 技术原语与合约。- D1/KV/R2 操作留在所属 Worker 的 repository;model 不依赖 IO,HTTP 层不复制业务规则。
- 跨 Worker 只能沿文档允许的依赖方向并通过 Service Binding;不得直接访问其他 Worker 的数据库或绑定。
- D1、KV、R2 的真相层职责不得混淆,也不得依赖 Worker 实例内存保证正确性。
- migration、TypeScript 类型、HTTP 合约、repository 和测试必须随语义变更一起闭环。
Cloudflare 与外部环境安全
- 未经用户明确授权,不得执行
wrangler deploy、远程 D1 migration、远程 KV/R2 写入、GitHub Workflow dispatch 或任何 Beta/Production 状态变更。 - 本地测试不得连接 Cloudflare 真实 D1、KV、R2 或生产 Worker。
.dev.vars、.temp/deploy-config.json、Cloudflare token、JWT/HMAC secret、R2 凭据和用户数据均按敏感信息处理;不得在输出、日志或测试失败信息中展示。- 正式版和 Beta/Dev tag 会触发
.github/workflows/deploy.yml的 Cloudflare 部署。创建 tag 与推送 tag 是两个独立授权动作。 - 用户允许发布、部署或打 tag,不自动包含修改源码、提交源码或迁移生产数据的授权。
AI 删除代码强制审计
AI 不得静默删除代码或代码注释。
适用范围
该规则只适用于代码与代码注释。编辑 Markdown 文档时不适用注释化删除;Markdown 中已废弃内容应物理删除,不得以 HTML 注释或归档段落伪装为当前内容。
代码对象仍存在
- 保留原注释。
- 按需求修改代码。
- 原注释失效时不得改写;追加一行带日期、原因和新行为的订正注释。
代码对象被删除
- 不得物理删除原代码。
- 将原代码完整注释化保留。
- 在原代码前增加以下记录:
// AI-REMOVED YYYY-MM-DD:
// Reason: <删除原因>
// Trigger: <触发需求、冲突或错误>
// Evidence: <测试、调用链、日志或 Search-First 依据>
// Replacement: <替代实现位置;没有则写 None>
// Risk: <潜在风险;没有则写 Low>
// Human Review: Required
//
// Original code:
// <原代码逐行注释保留>
被 AI-REMOVED 或 AI-CORRECTION 标记的内容属于 Archived Code,不参与当前编译和执行。除非用户明确要求恢复,不得基于 Archived Code 扩展实现。
文档与 Stage
- 创建或修改
.docs/下文档时使用doc-writingSkill。 - 用户明确要求按 Stage 计划继续开发、恢复阶段任务或同步阶段进度时使用
stage-developmentSkill。 .docs是独立 Git submodule;读取和修改时必须区分根仓库与文档仓库状态。- 不得把聊天上下文当作文档内容,也不得把 AI 决策伪装成用户要求。
测试与质量检查
- 用户要求完整检查,或要求测试但未明确指定单一测试集时,使用
full-checkSkill。 - 用户明确指定单一测试集,或创建、修改测试时,使用
test-writingSkill。 - HTTP、D1、KV、R2 和 Service Binding 语义必须通过本地 Miniflare 验证;纯逻辑使用 Vitest。
- 不得使用浏览器、Playwright、DOM 或视觉截图验证本项目后端。
- 不得 mock 掉被测的事务、唯一约束、TTL、对象存储或跨 Worker 通信语义后宣称集成行为已验证。
- 环境缺少 Miniflare 或原生依赖时,明确报告未验证边界,不得静默跳过或伪造结果。
Git 与发布
- 未经用户明确要求,不得执行会改变工作区、暂存区、提交历史或远端状态的 Git 命令。
- 允许执行
git status、git diff、git log、git show等只读命令。 - 用户明确要求提交时使用
project-commitSkill;禁止直接执行git commit。 - 用户明确要求发布、创建或推送版本 tag 时使用
release-versioningSkill。 commit-all.sh会递归处理 submodule,并对存在 upstream 的仓库自动 push;执行前必须确认本次授权覆盖实际影响范围。
名词与协议
用户以中文提及 API、领域对象、数据库实体、基础设施组件或业务概念时:
- 先使用用户原始中文词汇搜索。
- 再从活动文档、HTTP 合约、TypeScript 类型、migration 和实际响应中查找既有标识符。
- 找到后同时使用中文词汇与既有标识符继续检索。
禁止自行翻译后直接创建 API 名称、字段名、表名或对外错误码。对外协议以代码、migration 和实际响应为准,不以归档文档或内部实现名称代替。
临时目录
- 一次性脚本、下载附件、日志和临时产物只能写入
.temp/.trash/下的任务专属目录。 - 未经用户明确允许,不得写入
.temp/的其他位置。 - 任务结束后清理自己创建的临时文件,不得影响
.temp中既有内容。
工作与输出方式
- 结论先行,使用最精炼的技术语言。
- 先建立模块、数据、协议和外部依赖的完整调用图,再处理局部细节。
- 覆盖异常流、空值、并发、幂等、性能、安全和回滚代价。
- 改逻辑同步改测试;改接口同步改类型、文档和调用方。
- 主动暴露风险、未验证项和最低成本验证方式。
- 工作区存在用户改动时保留并绕开,不得覆盖或清理无关内容。