- Add .harness/ directory with 6 templates: init.sh (unified startup entry) PROGRESS.md (session progress tracking) feature_list.json (machine-readable feature status) clean-state-checklist.md (end-of-session cleanup) session-handoff.md (cross-session handoff) evaluator-rubric.md (review scoring) - Update AGENTS.md: 5-subsystem model (Instruction/Tools/Environment/State/Feedback) - Add Init-Plan-Implement-Verify-Cleanup workflow cycle
238 lines
6.9 KiB
Markdown
Executable File
238 lines
6.9 KiB
Markdown
Executable File
# 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
|