# OpenHIS — Harness Engineering 开发指南 > **模型决定上限,Harness 决定底线。** > 本文件是 OpenHIS 项目的 Harness Engineering 落地。整合了 OpenAI/Anthropic Harness Engineering 方法论与 walkinglabs 实战模式。 --- ## 📋 项目信息 OpenHIS 医院管理系统 | Java 17 + Spring Boot + MyBatis Plus | Vue 3 + Element Plus | PostgreSQL ### 构建和运行 ```bash cd /root/.openclaw/workspace/his-repo # 初始化(每次新会话先运行) bash .harness/init.sh # 后端编译 cd openhis-server-new && mvn compile -pl openhis-application -am # 后端打包 mvn clean package -DskipTests # 后端运行 cd openhis-application && mvn spring-boot:run # 前端 cd openhis-ui-vue3 && npm install && npm run dev ``` ### 关键路径 ``` 后端代码: openhis-server-new/openhis-application/src/main/java/com/ 后端配置: openhis-server-new/openhis-application/src/main/resources/ Mapper XML: .../mapper/ (regdoctorstation/, doctorstation/, ...) 前端代码: openhis-ui-vue3/src/ Harness: .harness/ (init.sh, PROGRESS.md, feature_list.json, ...) ``` --- ## 🔧 5 子系统模型(WalkingLabs) > 源自:[Learn Harness Engineering](https://walkinglabs.github.io/learn-harness-engineering/zh/) ### 1. 指令子系统(Instruction) | 文件 | 用途 | |---|---| | **AGENTS.md**(本文件) | 项目规则、约束、工作流程 | | `.harness/feature_list.json` | 机器可读的功能状态追踪 | | `.harness/PROGRESS.md` | 会话进度和已验证状态 | | `.harness/session-handoff.md` | 跨会话交接摘要 | ### 2. 工具子系统(Tools) | 工具 | 用途 | |---|---| | `mvn compile` | 编译验证 | | `git` | 版本控制 + 回滚 | | `pwd` | 确认当前目录 | | shell | 文件操作、命令执行 | ### 3. 环境子系统(Environment) | 组件 | 状态 | |---|---| | Java 17 | ✅ `pom.xml` 锁定 | | Maven | ✅ `mvn-wrapper` | | PostgreSQL | ✅ 192.168.110.252:15432 | | Node.js | ✅ `package.json` 锁定 | ### 4. 状态子系统(State) | 机制 | 用途 | |---|---| | `update_plan` | 当前步骤检查点 | | `.harness/PROGRESS.md` | 跨会话进度记录 | | `.harness/feature_list.json` | 功能状态跟踪 | | `git log` | 变更历史追溯 | ### 5. 反馈子系统(Feedback) | 层级 | 命令 | 时间 | |---|---|---| | L1 编译 | `mvn compile -pl openhis-application -am` | <30 秒 | | L2 全链路 | 六环检查清单(见下文) | <5 分钟 | | L3 审查 | 你人工审查 diff | 10-30 分钟 | --- ## 📋 标准工作循环 ``` 开始会话 │ ├→ 1. Init │ ├── bash .harness/init.sh │ ├── 读取 PROGRESS.md / feature_list.json │ ├── git log --oneline -5 │ └── 确认编译通过 │ ├→ 2. Plan │ ├── update_plan / checklist_write 分解步骤 │ ├── 评估复杂度/风险 │ └── 设定检查点 │ ├→ 3. Implement │ ├── 一次只做一个功能 │ ├── 全链路检查清单核对 │ └── 增量修改,只动必要文件 │ ├→ 4. Verify │ ├── L1: mvn compile │ ├── L2: 全链路数据流验证 │ └── 生成变更摘要 │ └→ 5. Cleanup ├── 运行 clean-state-checklist.md ├── 更新 PROGRESS.md + feature_list.json ├── git add + commit + push └── init.sh 确认干净状态 ``` --- ## 🔗 全链路修复原则 修 Bug 时,不得"就事论事",必须走通完整的**数据流全链路**: ### 六环检查清单 ``` 1. 录入 → 前端有无输入入口?(弹窗、行编辑、表单...) 2. 保存 → 前端 → API → Controller → Service → Entity → DB, 每个保存入口都传了该字段吗? 3. 查询 → DB → Mapper XML(UNION ALL 子查询统一加)→ DTO → 前端展示 4. 修改 → 编辑回显 → 修改保存 → 正确更新? 5. 删除 → 状态变更会丢失该字段吗? 6. 关联 → 上下游(护士站、计费、打印、报表)需要同步改吗? ``` ### 常见陷阱 | 陷阱 | 解决 | |---|---| | 只修主入口,批量保存/签发保存漏了 | 检查所有 Service 实现类 | | 前端加了后端没传 | 逐个入口确认 | | UNION ALL 只改一半 | 所有子查询统一加 | | DTO 继承链没检查 | 检查父类/子类字段一致性 | | 只测新增没测编辑 | 新增和编辑都要测 | --- ## 📐 代码风格规范 ### Java 后端 | 项目 | 规范 | |---|---| | 包结构 | `com.openhis`(业务)、`com.core`(核心) | | 命名 | 类 PascalCase、方法 camelCase、常量 SCREAMING_SNAKE_CASE | | 注解 | `@Slf4j`、`@Data`、`@Service/@Controller/@Repository` | | 异常 | 统一异常处理,业务异常继承 `RuntimeException` | | 缩进 | 4 空格,行 120 字符 | ### Vue 前端 | 项目 | 规范 | |---|---| | 框架 | Vue 3 + Composition API + Element Plus + Pinia | | 命名 | 组件 PascalCase、文件 kebab-case、变量 camelCase | | 缩进 | 2 空格,单引号,行 100 字符 | ### 导入顺序 **Java:** `java.*` → `javax.*` → 第三方 → `com.core.*` → `com.openhis.*` **Vue:** `vue` 相关 → 第三方 → `@/` 别名 → 相对路径 --- ## 🏗️ 开发约定 | 领域 | 约定 | |---|---| | API | RESTful,统一响应格式,Swagger 文档 | | 数据库 | snake_case 命名,主键 `id`,软删除 `valid_flag` | | 安全 | 所有 API 需权限验证,SQL 注入/XSS 防护 | | 性能 | Druid 连接池,路由懒加载,虚拟滚动 | --- ## ⚙️ 关键配置 | 项目 | 值 | |---|---| | 后端端口 | 18080 | | 前端端口 | 81 | | API 前缀 | `/openhis` | | Swagger | `/openhis/swagger-ui/index.html` | | 后端配置 | `application.yml` / `application-{profile}.yml` | | 前端配置 | `vite.config.js` / `.env.*` | --- ## 📈 成熟度追踪 | 等级 | 特征 | 本项目 | |---|---|---| | **L1 初始** | 零星使用 AI 工具 | ✅ 已超越 | | **L2 管理** | 基础约束 + 反馈 + 控制 | ✅ **当前** | | **L3 定义** | 标准化、可复用 | 🔄 walkinglabs 5 子系统整合 | | **L4 量化** | 数据驱动优化 | ⏳ | | **L5 优化** | AI 自主优化 Harness | ⏳ | --- ## 📚 技能索引(Codex 内置) | 技能 | 用途 | |---|---| | `$harness-engineering` | 主方法论 — 约束 + 反馈 + 控制 + 持久 | | `$walkinglabs-harness` | 实战模式 — 5 子系统 + 模板 + 会话持续 | | `$durable-execution` | 检查点、幂等性、事件溯源 | | `$closed-loop-testing` | 质量门禁、测试策略、反馈循环 | | `$constraint-design` | DSL 设计、策略模式、约束编排 | | `$review-audit` | 审查工作流、审计追踪、合规检查 | | `$full-chain-fix` | 全链路数据流修复 | | `$karpathy-guidelines` | 减少 LLM 编码常见错误 | --- > **总纲:** 你负责"做什么"和"为什么",Agent 负责"怎么做"和"做多好" > **工作循环:** Init → Plan → Implement → Verify → Cleanup