Compare commits
3 Commits
6212e0d92f
...
test
| Author | SHA1 | Date | |
|---|---|---|---|
| d7b3403524 | |||
| 700e353b79 | |||
| 0b2c19d2c5 |
493
.aider.conf.yml
493
.aider.conf.yml
@@ -1,493 +0,0 @@
|
|||||||
# Aider configuration for HealthLink-HIS
|
|
||||||
# Aider 自动读取此文件获取开发规范
|
|
||||||
|
|
||||||
instructions: |
|
|
||||||
# HealthLink-HIS — AI 开发规范(自动加载)
|
|
||||||
|
|
||||||
> 🤖 **本文件供所有 AI 编码工具自动读取**。进入本项目后必须遵守以下规范。
|
|
||||||
>
|
|
||||||
> **模型决定上限,Harness 决定底线。**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 一、项目概览
|
|
||||||
|
|
||||||
| 属性 | 值 |
|
|
||||||
|------|------|
|
|
||||||
| 项目名 | HealthLink-HIS(医院信息系统) |
|
|
||||||
| 后端路径 | `healthlink-his-server/` |
|
|
||||||
| 前端路径 | `healthlink-his-ui/` |
|
|
||||||
| 文档路径 | `MD/` |
|
|
||||||
| JDK | 25 (OpenJDK) |
|
|
||||||
| Spring Boot | 4.0.6 |
|
|
||||||
| MyBatis-Plus | 3.5.16 |
|
|
||||||
| Vue | 3.x + Vite + Element Plus |
|
|
||||||
| 数据库 | PostgreSQL 15+ |
|
|
||||||
| 包名 | `com.healthlink.his` |
|
|
||||||
| 后端端口 | 18082 |
|
|
||||||
| 前端端口 | 81 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 二、铁律(必须遵守,违反即失败)
|
|
||||||
|
|
||||||
### 🔴 P0 铁律 — 不可违反
|
|
||||||
|
|
||||||
**铁律1: 修改完必须测试**
|
|
||||||
```
|
|
||||||
后端: mvn clean compile -DskipTests → mvn install -DskipTests → mvn test
|
|
||||||
前端: npm run build:dev → npm run lint
|
|
||||||
```
|
|
||||||
- 白盒:编译通过,无 ERROR
|
|
||||||
- 黑盒:关键接口返回 `{code:200, data:...}`,验证业务逻辑
|
|
||||||
- 冒烟:应用正常启动,核心流程通畅
|
|
||||||
|
|
||||||
**铁律2: Flyway 数据库迁移**
|
|
||||||
- 凡是新建表、新增字段,必须创建 Flyway 迁移脚本
|
|
||||||
- 路径:`healthlink-his-domain/src/main/resources/db/migration/`
|
|
||||||
- 命名:`V{版本号}__{描述}.sql`(双下划线)
|
|
||||||
|
|
||||||
**铁律3: 测试通过后才提交**
|
|
||||||
- 编译 + 测试全部通过后才能 git commit
|
|
||||||
- 不提交未完成的功能、调试代码、临时文件
|
|
||||||
|
|
||||||
**铁律4: 前后端API路径对齐**
|
|
||||||
- 后端前缀:`/healthlink-his/api/v1/`
|
|
||||||
- 前端 `request.js` 的 baseURL 必须与后端匹配
|
|
||||||
|
|
||||||
**铁律5: 状态值一致性(Bug #574 教训)**
|
|
||||||
- 修改任何状态值前,必须先列出完整的状态流转链路
|
|
||||||
- 检查项:枚举定义 → Service 设置 → 查询映射 → 前端 STATUS_CLASS_MAP → 前端 v-if → 统计SQL
|
|
||||||
- 禁止:只改一端不检查其他端
|
|
||||||
|
|
||||||
**铁律6: 禁止删除源文件(Bug #574 教训)**
|
|
||||||
- 绝对禁止删除项目中已有的 Java/Vue/SQL 源文件
|
|
||||||
- 编译错误 → 修复错误;重复文件 → 重构合并
|
|
||||||
- 唯一例外:明确由人类确认删除的文件
|
|
||||||
|
|
||||||
**铁律7: 禁止修改已有公开方法签名**
|
|
||||||
- 不能删除/重命名已有的 public 方法,不能修改参数列表
|
|
||||||
- 需要新功能 → 添加重载方法;需要改行为 → 修改内部实现
|
|
||||||
|
|
||||||
**铁律8: 验证后才宣称完成(Verification Before Completion)**
|
|
||||||
- **没有跑过验证命令,就不能说"完成了""通过了""没问题"**
|
|
||||||
- 禁止使用"应该可以""大概没问题""看起来正确"
|
|
||||||
- 必须:运行命令 → 读取输出 → 确认结果 → 才能宣称
|
|
||||||
- 这是诚实原则,不是效率问题
|
|
||||||
|
|
||||||
|
|
||||||
**铁律9: 开发前必须审核原有代码(P0 — 铁律)**
|
|
||||||
- **任何新功能开发前,必须先搜索项目中是否已有相关代码**
|
|
||||||
- 搜索路径:Controller / AppService / Service / Mapper / Entity / 前端页面 / API接口
|
|
||||||
- 如果已有部分功能 → 在原有代码基础上**升级优化完善**,禁止另起炉灶
|
|
||||||
- 如果已有接口但前端缺失 → 只补前端,不重复建后端
|
|
||||||
- 如果已有前端但后端缺失 → 只补后端,不重写前端
|
|
||||||
- 搜索命令:`rg -l "关键词" healthlink-his-server/ healthlink-his-ui/src/`
|
|
||||||
- 禁止:不看代码就新建模块、重复实现已有功能、废弃原有代码另写一套
|
|
||||||
|
|
||||||
|
|
||||||
**铁律12: 设计文档确认后自主开发(铁律)**
|
|
||||||
- 设计文档(如 `MD/architecture/GRADE3A_GAP_ANALYSIS_AND_DESIGN.md`)一旦确认,后续开发**必须按文档自主执行**
|
|
||||||
- **禁止反复询问"是否继续""下一步做什么""是否开始"**——直接按计划推进
|
|
||||||
- 每完成一个 Sprint,自动提交推送,然后立即开始下一个 Sprint
|
|
||||||
- 只在遇到**无法解决的阻塞**(如技术选型冲突、需求不明确、第三方依赖不可用)时才暂停询问
|
|
||||||
- 设计文档是"**已签合同**",不是"参考意见"。铁律执行优先级:设计文档 > 人类临时指令 > AI 自行判断
|
|
||||||
|
|
||||||
|
|
||||||
### 🟡 P1 铁律 — 强烈建议
|
|
||||||
|
|
||||||
**铁律9: 先分解再行动**
|
|
||||||
- 修改超过3个文件、涉及多模块、数据库变更,必须先制定计划
|
|
||||||
|
|
||||||
**铁律10: 验证后信**
|
|
||||||
- 每次修改后必须验证编译通过,不信记忆
|
|
||||||
|
|
||||||
**铁律13: 文档统一管理**
|
|
||||||
- 所有文档存储在 `MD/` 目录
|
|
||||||
- 文件名:大写英文+下划线(如 `BACKEND_CHECKLIST.md`)
|
|
||||||
- 文档头部必须包含元数据块(文档类型、版本、日期)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
**铁律14: 设计文档必须包含UI设计和调用流程**
|
|
||||||
- 所有新模块/页面的设计文档必须包含:UI布局描述、交互效果清单、前后端调用流程
|
|
||||||
- 没有明确UI设计的模块,禁止直接编码
|
|
||||||
- 详见
|
|
||||||
- 设计文档必须写清楚:系统调用关系、方法函数调用关系、完整业务流程
|
|
||||||
- 设计文档中每个用户操作必须对应:前端事件 → API调用 → 后端处理链路 → 返回数据 → UI渲染
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 三、Karpathy 编码准则
|
|
||||||
|
|
||||||
> 减少 LLM 常见编码错误。偏向谨慎而非速度。
|
|
||||||
|
|
||||||
### 3.1 先想再写
|
|
||||||
- 明确陈述假设,不确定就问
|
|
||||||
- 多种解读时都列出来,不要默默选一种
|
|
||||||
- 有更简单的方案就说出来,该推回就推回
|
|
||||||
- 不清楚的地方停下来,说清楚哪里不清楚
|
|
||||||
|
|
||||||
### 3.2 简洁优先
|
|
||||||
- 不做没要求的功能,不做一次性代码的抽象
|
|
||||||
- 不加没要求的"灵活性"和"可配置性"
|
|
||||||
- 200 行能 50 行搞定就重写
|
|
||||||
- 自问:"高级工程师会不会觉得这过度设计?"
|
|
||||||
|
|
||||||
### 3.3 精准修改
|
|
||||||
- 只改必须改的,不"顺手改进"相邻代码
|
|
||||||
- 匹配现有代码风格,即使你有不同的偏好
|
|
||||||
- 每行改动都能追溯到用户的请求
|
|
||||||
- 只清理你自己改动产生的无用代码
|
|
||||||
|
|
||||||
### 3.4 目标驱动
|
|
||||||
- 把任务转化为可验证目标
|
|
||||||
- 多步任务声明计划:`[步骤] → 验证: [检查]`
|
|
||||||
- 强验收标准让 Agent 能独立循环,弱标准需要持续澄清
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 四、全链路 6 环分析
|
|
||||||
|
|
||||||
> ⚠️ **涉及数据库字段的 Bug / 需求,必须走完整链路。**
|
|
||||||
|
|
||||||
```
|
|
||||||
前端/页面 → Controller → Service → Mapper → DB/SQL → 关联模块
|
|
||||||
①录入 ②验证 ③业务 ④持久化 ⑤存储 ⑥联动
|
|
||||||
```
|
|
||||||
|
|
||||||
| 环 | 检查内容 |
|
|
||||||
|----|---------|
|
|
||||||
| ① 录入 | 前端有无输入入口(弹窗、表格行编辑、表单) |
|
|
||||||
| ② 验证 | Controller 参数校验、@Valid、权限控制 |
|
|
||||||
| ③ 业务 | Service 业务逻辑、事务边界、多个 Service 实现类入口 |
|
|
||||||
| ④ 持久化 | Mapper XML、DTO 字段映射、类型转换 |
|
|
||||||
| ⑤ 存储 | 数据库表结构、索引、NOT NULL 约束 |
|
|
||||||
| ⑥ 联动 | 上游(医嘱→护士站)、下游(打印、计费、报表)是否同步 |
|
|
||||||
|
|
||||||
**修复后的验证顺序**:
|
|
||||||
1. 数据库:确认状态值已正确写入
|
|
||||||
2. 后端接口:确认返回的状态映射正确
|
|
||||||
3. 前端显示:确认页面显示正确状态文本
|
|
||||||
4. 前端交互:确认按钮/操作基于正确状态启用/禁用
|
|
||||||
5. 统计数据:确认池/报表统计包含新状态
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 五、Harness Engineering 方法论
|
|
||||||
|
|
||||||
> Harness = 约束 + 反馈 + 控制平面 + 持久执行
|
|
||||||
|
|
||||||
### 5.1 四层约束金字塔
|
|
||||||
|
|
||||||
| 层级 | 内容 | 落地方式 |
|
|
||||||
|------|------|---------|
|
|
||||||
| **L1 架构约束** | 接口合约、包结构、命名规范、禁止模式 | 本文件铁律 |
|
|
||||||
| **L2 代码质量** | 圈复杂度、代码风格、类型提示 | 编译门禁 + ESLint |
|
|
||||||
| **L3 安全约束** | 敏感信息检测、权限检查、输入验证 | 配置不可硬编码 |
|
|
||||||
| **L4 业务规则** | 领域逻辑、数据一致性、事务边界 | 全链路 6 环验证 |
|
|
||||||
|
|
||||||
**约束设计原则**:
|
|
||||||
- **可验证**:每条约束必须能被自动化检查("覆盖率>90%"✅ "质量要高"❌)
|
|
||||||
- **无歧义**:"每函数不超过50行"✅ "函数不要太长"❌
|
|
||||||
- **优先级**:安全(1) > 架构(2) > 业务(3) > 质量(4) > 性能(5)
|
|
||||||
- **渐进增强**:L1编译通过 → L2+命名规范 → L3+测试覆盖 → L4+安全扫描
|
|
||||||
|
|
||||||
### 5.2 三层反馈系统
|
|
||||||
|
|
||||||
| 层级 | 速度 | 覆盖范围 | 失败处理 |
|
|
||||||
|------|------|---------|---------|
|
|
||||||
| **L1 编译检查** | <30秒 | 语法、类型、签名 | 立即阻断,自行修复 |
|
|
||||||
| **L2 数据流验证** | <5分钟 | 全链路字段、Mapper XML、DTO | 修复后上报 |
|
|
||||||
| **L3 人工审查** | 10-30分钟 | 架构、设计、业务正确性 | 驳回/指导/批准 |
|
|
||||||
|
|
||||||
**反馈铁律**:
|
|
||||||
- 反馈必须可行动(文件 + 行号 + 错误类型 + 修复方向)
|
|
||||||
- 失败后先回滚到最近检查点,再重试
|
|
||||||
- 持续失败3次 → 上报人类
|
|
||||||
|
|
||||||
### 5.3 控制平面
|
|
||||||
|
|
||||||
```
|
|
||||||
战略层(人类) → 设定目标、审批决策、异常升级
|
|
||||||
战术层(Agent) → 任务分解、update_plan、依赖协调、检查点保存
|
|
||||||
执行层(Agent) → 代码生成、测试执行、错误恢复、幂等重试
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5.4 持久执行
|
|
||||||
|
|
||||||
- 每个关键步骤保存检查点(`update_plan` 进度)
|
|
||||||
- 失败后从最新检查点恢复,不从头开始
|
|
||||||
- 幂等设计:同一操作重复执行结果一致
|
|
||||||
- **三层状态管理**:系统层(工作流ID/超时/重试) → 执行层(当前活动/进度) → 业务层(已完成工作/中间产物)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 六、五层质量门禁
|
|
||||||
|
|
||||||
| 门禁 | 时间 | 范围 | 失败处理 |
|
|
||||||
|------|------|------|---------|
|
|
||||||
| **L1 编译检查** | <30秒 | 语法、类型、导入 | Agent 自行修复 |
|
|
||||||
| **L2 静态分析** | <2分钟 | 代码风格、复杂度、安全 | Agent 修复 |
|
|
||||||
| **L3 单元测试** | <5分钟 | 功能正确性、边界条件 | 自动修复或上报 |
|
|
||||||
| **L4 集成测试** | <15分钟 | 模块间交互、数据流 | 上报人工 |
|
|
||||||
| **L5 生产验证** | 持续 | 监控、告警、性能 | 自动回滚 |
|
|
||||||
|
|
||||||
**提交铁律**:L1-L2 必须通过才能 commit,L3(如有DB变更)必须通过才能 push
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 七、系统化调试(Systematic Debugging)
|
|
||||||
|
|
||||||
> **铁律:没有根因调查,不能提出修复方案。**
|
|
||||||
|
|
||||||
### 四阶段流程
|
|
||||||
|
|
||||||
**阶段1:根因调查**(修复前必须完成)
|
|
||||||
1. 仔细阅读错误信息(堆栈、行号、错误码)
|
|
||||||
2. 稳定复现(能否可靠触发?步骤?每次?)
|
|
||||||
3. 检查最近变更(git diff、新依赖、配置变更)
|
|
||||||
4. 多组件系统:在每个组件边界加诊断日志,定位哪一层断裂
|
|
||||||
5. 追踪数据流:坏值从哪里来?谁调用的?一直追溯到源头
|
|
||||||
|
|
||||||
**阶段2:模式分析**
|
|
||||||
- 找到同代码库中类似的正常工作代码
|
|
||||||
- 逐项对比差异
|
|
||||||
- 理解依赖关系
|
|
||||||
|
|
||||||
**阶段3:假设与测试**
|
|
||||||
- 形成单一假设:"我认为X是根因,因为Y"
|
|
||||||
- 做最小改动测试
|
|
||||||
- 有效 → 阶段4;无效 → 新假设
|
|
||||||
|
|
||||||
**阶段4:实施**
|
|
||||||
- 创建失败测试用例
|
|
||||||
- 修复根因(不是症状)
|
|
||||||
- 验证修复
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 八、后端开发规范
|
|
||||||
|
|
||||||
### 分层架构
|
|
||||||
```
|
|
||||||
Controller → AppService → Service → Mapper → Entity
|
|
||||||
```
|
|
||||||
|
|
||||||
### 命名规范
|
|
||||||
| 类型 | 规则 | 示例 |
|
|
||||||
|------|------|------|
|
|
||||||
| Controller | `XxxController` | `RegistrationController` |
|
|
||||||
| AppService | `IXxxAppService` / `XxxAppServiceImpl` | `IRegistrationAppService` |
|
|
||||||
| Service | `IXxxService` / `XxxServiceImpl` | `IRegistrationService` |
|
|
||||||
| Mapper | `XxxMapper` | `RegistrationMapper` |
|
|
||||||
| Entity | `Xxx` | `Registration` |
|
|
||||||
| DTO | `XxxDto` / `XxxQueryDto` | `RegistrationDto` |
|
|
||||||
|
|
||||||
### 包结构
|
|
||||||
```
|
|
||||||
com.healthlink.his.web.{module}.controller
|
|
||||||
com.healthlink.his.web.{module}.appservice
|
|
||||||
com.healthlink.his.web.{module}.service
|
|
||||||
com.healthlink.his.web.{module}.mapper
|
|
||||||
com.healthlink.his.web.{module}.dto
|
|
||||||
com.healthlink.his.domain.{module}
|
|
||||||
com.healthlink.his.common.enums
|
|
||||||
```
|
|
||||||
|
|
||||||
### 关键约束
|
|
||||||
- 所有查询使用 `LambdaQueryWrapper`,禁止字符串拼接 SQL
|
|
||||||
- `@Transactional(rollbackFor = Exception.class)` 管理事务
|
|
||||||
- 所有接口标注 `@PreAuthorize` 权限控制
|
|
||||||
- 患者敏感信息在日志中脱敏
|
|
||||||
- **扩展功能不修改原有函数签名**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 九、前端开发规范
|
|
||||||
|
|
||||||
### 技术栈
|
|
||||||
- Vue 3 + Vite + Element Plus + Pinia + Axios(基于 RuoYi-Vue3)
|
|
||||||
|
|
||||||
### 目录结构
|
|
||||||
```
|
|
||||||
src/api/{module}/ # API接口
|
|
||||||
src/views/{module}/ # 页面组件
|
|
||||||
src/store/modules/ # Pinia状态管理
|
|
||||||
src/components/ # 公共组件
|
|
||||||
```
|
|
||||||
|
|
||||||
### 关键约束
|
|
||||||
- API前缀:`/healthlink-his/api/v1/`
|
|
||||||
- 路由懒加载:`() => import('@/views/xxx/index.vue')`
|
|
||||||
- 页面使用 `<script setup>` 语法
|
|
||||||
- 按钮权限使用 `v-hasPermi` 指令
|
|
||||||
- `onMounted` 中注册的事件在 `onUnmounted` 中移除
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十、Agent 体系
|
|
||||||
|
|
||||||
### 角色与路由
|
|
||||||
|
|
||||||
| 代号 | 名称 | 角色 | 路由关键词 |
|
|
||||||
|------|------|------|-----------|
|
|
||||||
| liubei | 刘备 | 项目经理 | 协调、分派、异常升级 |
|
|
||||||
| zhugeliang | 诸葛亮 | 架构师 | 分析、路由、设计 |
|
|
||||||
| guanyu | 关羽 | 后端开发 | java, api, spring, service, controller |
|
|
||||||
| zhaoyun | 赵云 | 前端开发 | vue, 界面, 显示, 弹窗, 按钮 |
|
|
||||||
| xunyu | 荀彧 | DBA | 数据库, sql, 迁移, mapper xml |
|
|
||||||
| zhangfei | 张飞 | 测试 | 测试, QA, 回归 |
|
|
||||||
| huatuo | 华佗 | 验收 | 需求验收、质量确认 |
|
|
||||||
| chenlin | 陈琳 | 文档 | 文档、归档、Git提交 |
|
|
||||||
|
|
||||||
### 协作流水线
|
|
||||||
|
|
||||||
```
|
|
||||||
刘备(协调) → 诸葛亮(分析路由) → {关羽|赵云}(修复) → 荀彧(DB审查) → 张飞(测试) → 华佗(验收) → 陈琳(归档)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Bug 修复完整管线(BDT 方法论)
|
|
||||||
|
|
||||||
```
|
|
||||||
获取Bug → 设计测试用例 → 基线测试(应失败) → 全链路修复 → 回归测试(应通过) → 扩展测试(无回归) → 提交
|
|
||||||
```
|
|
||||||
|
|
||||||
### Bug 状态管理铁律
|
|
||||||
- 人类提的 Bug:只加备注,不改状态,不改分配
|
|
||||||
- 智能体提的 Bug:可以改分配和加备注
|
|
||||||
- 已关闭/已解决的 Bug 不再处理
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十一、审查与审计
|
|
||||||
|
|
||||||
### 三层审查体系
|
|
||||||
|
|
||||||
| 层级 | 内容 | 时机 |
|
|
||||||
|------|------|------|
|
|
||||||
| **L1 自审** | Agent 对照约束逐条检查 | 每次提交前 |
|
|
||||||
| **L2 配对审查** | Agent 生成变更摘要,人类终审 | PR/提交时 |
|
|
||||||
| **L3 合规审查** | 审计追踪,记录所有 AI 操作 | 持续 |
|
|
||||||
|
|
||||||
### L1 自审清单
|
|
||||||
```yaml
|
|
||||||
self_review:
|
|
||||||
- "所有修改能通过编译?"
|
|
||||||
- "遵守命名规范?"
|
|
||||||
- "测试覆盖达标?"
|
|
||||||
- "没有遗漏的 TODO / DEBUG?"
|
|
||||||
- "变更范围没超出任务边界?"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 评审评分维度
|
|
||||||
| 维度 | 问题 |
|
|
||||||
|------|------|
|
|
||||||
| 正确性 | 行为是否符合目标功能? |
|
|
||||||
| 验证 | 检查是否真的跑过并留下证据? |
|
|
||||||
| 范围纪律 | 是否保持在选定功能范围内? |
|
|
||||||
| 可靠性 | 结果能否在重启后继续工作? |
|
|
||||||
| 可维护性 | 代码和文档是否清楚到可交接? |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十二、标准工作循环
|
|
||||||
|
|
||||||
```
|
|
||||||
开始会话
|
|
||||||
├→ 1. Init — 读 AGENTS.md + PROGRESS.md + git log
|
|
||||||
├→ 2. Select — 只选一个未完成功能
|
|
||||||
├→ 3. Implement — 一次只做一个,不扩大范围
|
|
||||||
├→ 4. Verify — 运行验证命令,有证据才标记完成
|
|
||||||
└→ 5. Cleanup — 更新进度 + clean-state-checklist + git commit
|
|
||||||
```
|
|
||||||
|
|
||||||
### 会话结束前必须运行 Clean State Checklist
|
|
||||||
```
|
|
||||||
□ 标准启动路径仍然可用
|
|
||||||
□ 标准验证路径仍然可运行
|
|
||||||
□ 当前进度已记录到进度日志
|
|
||||||
□ 无半成品步骤处于未记录状态
|
|
||||||
□ 下一轮会话无需人工修复即可继续
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十三、开发流程
|
|
||||||
|
|
||||||
```
|
|
||||||
收到任务
|
|
||||||
├→ ① 分析需求 → 读相关文档(MD/)、读全链路6环
|
|
||||||
├→ ② 制定计划 → update_plan (3-6个阶段)
|
|
||||||
├→ ③ 后端开发 → Controller → AppService → Service → Mapper → Entity → Flyway
|
|
||||||
├→ ④ 后端测试 → mvn test → 接口测试(业务逻辑验证)
|
|
||||||
├→ ⑤ 前端开发 → API接口 → 页面组件 → 路由配置
|
|
||||||
├→ ⑥ 前端测试 → npm run build:dev → 功能验证
|
|
||||||
├→ ⑦ 质量门禁 → L1编译 → L2测试 → L3DB审查 → L4验收 → L5归档
|
|
||||||
└→ ⑧ 提交代码 → git commit(规范格式) → git push → 文档更新
|
|
||||||
```
|
|
||||||
|
|
||||||
### Git Commit 格式
|
|
||||||
```
|
|
||||||
<type>(<scope>): <subject>
|
|
||||||
|
|
||||||
type: feat|fix|docs|refactor|test|chore
|
|
||||||
scope: 模块名(如 registration, billing, pharmacy)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十四、快速参考命令
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# === 后端 ===
|
|
||||||
export JAVA_HOME=/opt/jdk-25
|
|
||||||
mvn clean compile -DskipTests # 编译
|
|
||||||
mvn install -DskipTests # 构建
|
|
||||||
mvn test -pl healthlink-his-application -Dtest="XxxTest" -Dsurefire.failIfNoSpecifiedTests=false
|
|
||||||
|
|
||||||
# === 前端 ===
|
|
||||||
cd healthlink-his-ui
|
|
||||||
npm run dev && npm run build:dev && npm run lint && npm run test:run
|
|
||||||
|
|
||||||
# === Git ===
|
|
||||||
git status && git add -A && git commit -m "feat(module): desc" && git push origin develop
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十五、详细规范文档索引
|
|
||||||
|
|
||||||
| 文档 | 路径 | 用途 |
|
|
||||||
|------|------|------|
|
|
||||||
| 执行铁律 | `MD/specs/IRON_RULES.md` | 铁律完整版 |
|
|
||||||
| 后端规范 | `MD/specs/BACKEND_DEVELOPMENT_STANDARD.md` | 后端编码标准 |
|
|
||||||
| 前端规范 | `MD/specs/FRONTEND_DEVELOPMENT_STANDARD.md` | 前端编码标准 |
|
|
||||||
| Harness方法论 | `MD/specs/HARNESS_ENGINEERING.md` | 完整Harness+Agent方法论 |
|
|
||||||
| 文档规范 | `MD/DOCUMENTATION_STANDARD.md` | 文档管理标准 |
|
|
||||||
| 后端清单 | `MD/specs/BACKEND_CHECKLIST.md` | 发布前检查 |
|
|
||||||
| 前端清单 | `MD/specs/FRONTEND_CHECKLIST.md` | 发布前检查 |
|
|
||||||
| 三甲标准 | `MD/standards/GRADE3A_HIS_STANDARD.md` | 三甲医院达标标准 |
|
|
||||||
| Flyway指南 | `MD/guides/FLYWAY_USAGE_GUIDE.md` | 数据库迁移指南 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十六、过往教训
|
|
||||||
|
|
||||||
| 教训 | 内容 |
|
|
||||||
|------|------|
|
|
||||||
| 状态链路断裂 | Bug#574: 签到设 BOOKED(1) 而非 CHECKED_IN(3),前端映射缺失 → 必须走完整状态链路 |
|
|
||||||
| 盲删源文件 | AI 看到编译错误直接删文件,没检查 baseline → 必须先确认文件来源 |
|
|
||||||
| 修复方向偏差 | 多次 fallback 改的是错误的 Service → 必须用 rg 搜索所有相关代码路径 |
|
|
||||||
| bug_reports 缺列 | INSERT 静默失败 → 必须检查表结构 |
|
|
||||||
| 禅道 comment API | API 不存在,用 resolve+activate workaround |
|
|
||||||
| SQLite WAL 并发 | 多进程并发写需要 checkpoint |
|
|
||||||
| UTF-8 切片 | 多字节字符不能用 byte index 切片 |
|
|
||||||
| 上下文焦虑 | Agent 感觉上下文快满时会匆忙结束,跳过验证 → 注意 context 40% 阈值 |
|
|
||||||
| 过早宣告胜利 | 自评≠验证,分开"干活"和"检查" |
|
|
||||||
| 覆盖率幻觉 | 覆盖率达标但逻辑没测 → 引入变异测试 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> ⚠️ 本文件是 AI 开发规范的唯一信源。各工具配置文件由 `bash scripts/sync-ai-rules.sh` 同步。
|
|
||||||
509
.clinerules
509
.clinerules
@@ -1,509 +0,0 @@
|
|||||||
# HealthLink-HIS — AI 开发规范 (Cline)
|
|
||||||
|
|
||||||
> 🤖 Cline 打开本项目时自动加载此文件。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# HealthLink-HIS — AI 开发规范(自动加载)
|
|
||||||
|
|
||||||
> 🤖 **本文件供所有 AI 编码工具自动读取**。进入本项目后必须遵守以下规范。
|
|
||||||
>
|
|
||||||
> **模型决定上限,Harness 决定底线。**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 一、项目概览
|
|
||||||
|
|
||||||
| 属性 | 值 |
|
|
||||||
|------|------|
|
|
||||||
| 项目名 | HealthLink-HIS(医院信息系统) |
|
|
||||||
| 后端路径 | `healthlink-his-server/` |
|
|
||||||
| 前端路径 | `healthlink-his-ui/` |
|
|
||||||
| 文档路径 | `MD/` |
|
|
||||||
| JDK | 25 (OpenJDK) |
|
|
||||||
| Spring Boot | 4.0.6 |
|
|
||||||
| MyBatis-Plus | 3.5.16 |
|
|
||||||
| Vue | 3.x + Vite + Element Plus |
|
|
||||||
| 数据库 | PostgreSQL 15+ |
|
|
||||||
| 包名 | `com.healthlink.his` |
|
|
||||||
| 后端端口 | 18082 |
|
|
||||||
| 前端端口 | 81 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 二、铁律(必须遵守,违反即失败)
|
|
||||||
|
|
||||||
### 🔴 P0 铁律 — 不可违反
|
|
||||||
|
|
||||||
**铁律1: 修改完必须测试**
|
|
||||||
```
|
|
||||||
后端: mvn clean compile -DskipTests → mvn install -DskipTests → mvn test
|
|
||||||
前端: npm run build:dev → npm run lint
|
|
||||||
```
|
|
||||||
- 白盒:编译通过,无 ERROR
|
|
||||||
- 黑盒:关键接口返回 `{code:200, data:...}`,验证业务逻辑
|
|
||||||
- 冒烟:应用正常启动,核心流程通畅
|
|
||||||
|
|
||||||
**铁律2: Flyway 数据库迁移**
|
|
||||||
- 凡是新建表、新增字段,必须创建 Flyway 迁移脚本
|
|
||||||
- 路径:`healthlink-his-domain/src/main/resources/db/migration/`
|
|
||||||
- 命名:`V{版本号}__{描述}.sql`(双下划线)
|
|
||||||
|
|
||||||
**铁律3: 测试通过后才提交**
|
|
||||||
- 编译 + 测试全部通过后才能 git commit
|
|
||||||
- 不提交未完成的功能、调试代码、临时文件
|
|
||||||
|
|
||||||
**铁律4: 前后端API路径对齐**
|
|
||||||
- 后端前缀:`/healthlink-his/api/v1/`
|
|
||||||
- 前端 `request.js` 的 baseURL 必须与后端匹配
|
|
||||||
|
|
||||||
**铁律5: 状态值一致性(Bug #574 教训)**
|
|
||||||
- 修改任何状态值前,必须先列出完整的状态流转链路
|
|
||||||
- 检查项:枚举定义 → Service 设置 → 查询映射 → 前端 STATUS_CLASS_MAP → 前端 v-if → 统计SQL
|
|
||||||
- 禁止:只改一端不检查其他端
|
|
||||||
|
|
||||||
**铁律6: 禁止删除源文件(Bug #574 教训)**
|
|
||||||
- 绝对禁止删除项目中已有的 Java/Vue/SQL 源文件
|
|
||||||
- 编译错误 → 修复错误;重复文件 → 重构合并
|
|
||||||
- 唯一例外:明确由人类确认删除的文件
|
|
||||||
|
|
||||||
**铁律7: 禁止修改已有公开方法签名**
|
|
||||||
- 不能删除/重命名已有的 public 方法,不能修改参数列表
|
|
||||||
- 需要新功能 → 添加重载方法;需要改行为 → 修改内部实现
|
|
||||||
|
|
||||||
**铁律8: 验证后才宣称完成(Verification Before Completion)**
|
|
||||||
- **没有跑过验证命令,就不能说"完成了""通过了""没问题"**
|
|
||||||
- 禁止使用"应该可以""大概没问题""看起来正确"
|
|
||||||
- 必须:运行命令 → 读取输出 → 确认结果 → 才能宣称
|
|
||||||
- 这是诚实原则,不是效率问题
|
|
||||||
|
|
||||||
|
|
||||||
**铁律9: 开发前必须审核原有代码(P0 — 铁律)**
|
|
||||||
- **任何新功能开发前,必须先搜索项目中是否已有相关代码**
|
|
||||||
- 搜索路径:Controller / AppService / Service / Mapper / Entity / 前端页面 / API接口
|
|
||||||
- 如果已有部分功能 → 在原有代码基础上**升级优化完善**,禁止另起炉灶
|
|
||||||
- 如果已有接口但前端缺失 → 只补前端,不重复建后端
|
|
||||||
- 如果已有前端但后端缺失 → 只补后端,不重写前端
|
|
||||||
- 搜索命令:`rg -l "关键词" healthlink-his-server/ healthlink-his-ui/src/`
|
|
||||||
- 禁止:不看代码就新建模块、重复实现已有功能、废弃原有代码另写一套
|
|
||||||
|
|
||||||
|
|
||||||
**铁律12: 设计文档确认后自主开发(铁律)**
|
|
||||||
- 设计文档(如 `MD/architecture/GRADE3A_GAP_ANALYSIS_AND_DESIGN.md`)一旦确认,后续开发**必须按文档自主执行**
|
|
||||||
- **禁止反复询问"是否继续""下一步做什么""是否开始"**——直接按计划推进
|
|
||||||
- 每完成一个 Sprint,自动提交推送,然后立即开始下一个 Sprint
|
|
||||||
- 只在遇到**无法解决的阻塞**(如技术选型冲突、需求不明确、第三方依赖不可用)时才暂停询问
|
|
||||||
- 设计文档是"**已签合同**",不是"参考意见"。铁律执行优先级:设计文档 > 人类临时指令 > AI 自行判断
|
|
||||||
|
|
||||||
**铁律18: 禁止破坏原有功能(P0绝对铁律)**
|
|
||||||
- **完善增加功能和流程时,绝对不能破坏或者让原有功能不能用**
|
|
||||||
- 修改已有实体前必须对比原始文件(`git show HEAD~N:./file.java`),保留所有原有字段和方法
|
|
||||||
- 新增字段只能追加,不能删除或重命名已有字段
|
|
||||||
- SQL迁移只允许 `ALTER TABLE ADD COLUMN`,不允许 `DROP COLUMN` 或 `RENAME COLUMN`
|
|
||||||
- Controller新端点不能修改已有端点的路径或参数
|
|
||||||
- 前端新页面不能修改已有页面的组件结构
|
|
||||||
- 每次修改后必须 `mvn clean compile -DskipTests` 验证
|
|
||||||
- **违规判定**: 因修改导致原有代码编译失败或运行报错,视为违反铁律18,必须立即回滚修复
|
|
||||||
|
|
||||||
|
|
||||||
### 🟡 P1 铁律 — 强烈建议
|
|
||||||
|
|
||||||
**铁律9: 先分解再行动**
|
|
||||||
- 修改超过3个文件、涉及多模块、数据库变更,必须先制定计划
|
|
||||||
|
|
||||||
**铁律10: 验证后信**
|
|
||||||
- 每次修改后必须验证编译通过,不信记忆
|
|
||||||
|
|
||||||
**铁律13: 文档统一管理**
|
|
||||||
- 所有文档存储在 `MD/` 目录
|
|
||||||
- 文件名:大写英文+下划线(如 `BACKEND_CHECKLIST.md`)
|
|
||||||
- 文档头部必须包含元数据块(文档类型、版本、日期)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
**铁律14: 设计文档必须包含UI设计和调用流程**
|
|
||||||
- 所有新模块/页面的设计文档必须包含:UI布局描述、交互效果清单、前后端调用流程
|
|
||||||
- 没有明确UI设计的模块,禁止直接编码
|
|
||||||
- 详见
|
|
||||||
- 设计文档必须写清楚:系统调用关系、方法函数调用关系、完整业务流程
|
|
||||||
- 设计文档中每个用户操作必须对应:前端事件 → API调用 → 后端处理链路 → 返回数据 → UI渲染
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 三、Karpathy 编码准则
|
|
||||||
|
|
||||||
> 减少 LLM 常见编码错误。偏向谨慎而非速度。
|
|
||||||
|
|
||||||
### 3.1 先想再写
|
|
||||||
- 明确陈述假设,不确定就问
|
|
||||||
- 多种解读时都列出来,不要默默选一种
|
|
||||||
- 有更简单的方案就说出来,该推回就推回
|
|
||||||
- 不清楚的地方停下来,说清楚哪里不清楚
|
|
||||||
|
|
||||||
### 3.2 简洁优先
|
|
||||||
- 不做没要求的功能,不做一次性代码的抽象
|
|
||||||
- 不加没要求的"灵活性"和"可配置性"
|
|
||||||
- 200 行能 50 行搞定就重写
|
|
||||||
- 自问:"高级工程师会不会觉得这过度设计?"
|
|
||||||
|
|
||||||
### 3.3 精准修改
|
|
||||||
- 只改必须改的,不"顺手改进"相邻代码
|
|
||||||
- 匹配现有代码风格,即使你有不同的偏好
|
|
||||||
- 每行改动都能追溯到用户的请求
|
|
||||||
- 只清理你自己改动产生的无用代码
|
|
||||||
|
|
||||||
### 3.4 目标驱动
|
|
||||||
- 把任务转化为可验证目标
|
|
||||||
- 多步任务声明计划:`[步骤] → 验证: [检查]`
|
|
||||||
- 强验收标准让 Agent 能独立循环,弱标准需要持续澄清
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 四、全链路 6 环分析
|
|
||||||
|
|
||||||
> ⚠️ **涉及数据库字段的 Bug / 需求,必须走完整链路。**
|
|
||||||
|
|
||||||
```
|
|
||||||
前端/页面 → Controller → Service → Mapper → DB/SQL → 关联模块
|
|
||||||
①录入 ②验证 ③业务 ④持久化 ⑤存储 ⑥联动
|
|
||||||
```
|
|
||||||
|
|
||||||
| 环 | 检查内容 |
|
|
||||||
|----|---------|
|
|
||||||
| ① 录入 | 前端有无输入入口(弹窗、表格行编辑、表单) |
|
|
||||||
| ② 验证 | Controller 参数校验、@Valid、权限控制 |
|
|
||||||
| ③ 业务 | Service 业务逻辑、事务边界、多个 Service 实现类入口 |
|
|
||||||
| ④ 持久化 | Mapper XML、DTO 字段映射、类型转换 |
|
|
||||||
| ⑤ 存储 | 数据库表结构、索引、NOT NULL 约束 |
|
|
||||||
| ⑥ 联动 | 上游(医嘱→护士站)、下游(打印、计费、报表)是否同步 |
|
|
||||||
|
|
||||||
**修复后的验证顺序**:
|
|
||||||
1. 数据库:确认状态值已正确写入
|
|
||||||
2. 后端接口:确认返回的状态映射正确
|
|
||||||
3. 前端显示:确认页面显示正确状态文本
|
|
||||||
4. 前端交互:确认按钮/操作基于正确状态启用/禁用
|
|
||||||
5. 统计数据:确认池/报表统计包含新状态
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 五、Harness Engineering 方法论
|
|
||||||
|
|
||||||
> Harness = 约束 + 反馈 + 控制平面 + 持久执行
|
|
||||||
|
|
||||||
### 5.1 四层约束金字塔
|
|
||||||
|
|
||||||
| 层级 | 内容 | 落地方式 |
|
|
||||||
|------|------|---------|
|
|
||||||
| **L1 架构约束** | 接口合约、包结构、命名规范、禁止模式 | 本文件铁律 |
|
|
||||||
| **L2 代码质量** | 圈复杂度、代码风格、类型提示 | 编译门禁 + ESLint |
|
|
||||||
| **L3 安全约束** | 敏感信息检测、权限检查、输入验证 | 配置不可硬编码 |
|
|
||||||
| **L4 业务规则** | 领域逻辑、数据一致性、事务边界 | 全链路 6 环验证 |
|
|
||||||
|
|
||||||
**约束设计原则**:
|
|
||||||
- **可验证**:每条约束必须能被自动化检查("覆盖率>90%"✅ "质量要高"❌)
|
|
||||||
- **无歧义**:"每函数不超过50行"✅ "函数不要太长"❌
|
|
||||||
- **优先级**:安全(1) > 架构(2) > 业务(3) > 质量(4) > 性能(5)
|
|
||||||
- **渐进增强**:L1编译通过 → L2+命名规范 → L3+测试覆盖 → L4+安全扫描
|
|
||||||
|
|
||||||
### 5.2 三层反馈系统
|
|
||||||
|
|
||||||
| 层级 | 速度 | 覆盖范围 | 失败处理 |
|
|
||||||
|------|------|---------|---------|
|
|
||||||
| **L1 编译检查** | <30秒 | 语法、类型、签名 | 立即阻断,自行修复 |
|
|
||||||
| **L2 数据流验证** | <5分钟 | 全链路字段、Mapper XML、DTO | 修复后上报 |
|
|
||||||
| **L3 人工审查** | 10-30分钟 | 架构、设计、业务正确性 | 驳回/指导/批准 |
|
|
||||||
|
|
||||||
**反馈铁律**:
|
|
||||||
- 反馈必须可行动(文件 + 行号 + 错误类型 + 修复方向)
|
|
||||||
- 失败后先回滚到最近检查点,再重试
|
|
||||||
- 持续失败3次 → 上报人类
|
|
||||||
|
|
||||||
### 5.3 控制平面
|
|
||||||
|
|
||||||
```
|
|
||||||
战略层(人类) → 设定目标、审批决策、异常升级
|
|
||||||
战术层(Agent) → 任务分解、update_plan、依赖协调、检查点保存
|
|
||||||
执行层(Agent) → 代码生成、测试执行、错误恢复、幂等重试
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5.4 持久执行
|
|
||||||
|
|
||||||
- 每个关键步骤保存检查点(`update_plan` 进度)
|
|
||||||
- 失败后从最新检查点恢复,不从头开始
|
|
||||||
- 幂等设计:同一操作重复执行结果一致
|
|
||||||
- **三层状态管理**:系统层(工作流ID/超时/重试) → 执行层(当前活动/进度) → 业务层(已完成工作/中间产物)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 六、五层质量门禁
|
|
||||||
|
|
||||||
| 门禁 | 时间 | 范围 | 失败处理 |
|
|
||||||
|------|------|------|---------|
|
|
||||||
| **L1 编译检查** | <30秒 | 语法、类型、导入 | Agent 自行修复 |
|
|
||||||
| **L2 静态分析** | <2分钟 | 代码风格、复杂度、安全 | Agent 修复 |
|
|
||||||
| **L3 单元测试** | <5分钟 | 功能正确性、边界条件 | 自动修复或上报 |
|
|
||||||
| **L4 集成测试** | <15分钟 | 模块间交互、数据流 | 上报人工 |
|
|
||||||
| **L5 生产验证** | 持续 | 监控、告警、性能 | 自动回滚 |
|
|
||||||
|
|
||||||
**提交铁律**:L1-L2 必须通过才能 commit,L3(如有DB变更)必须通过才能 push
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 七、系统化调试(Systematic Debugging)
|
|
||||||
|
|
||||||
> **铁律:没有根因调查,不能提出修复方案。**
|
|
||||||
|
|
||||||
### 四阶段流程
|
|
||||||
|
|
||||||
**阶段1:根因调查**(修复前必须完成)
|
|
||||||
1. 仔细阅读错误信息(堆栈、行号、错误码)
|
|
||||||
2. 稳定复现(能否可靠触发?步骤?每次?)
|
|
||||||
3. 检查最近变更(git diff、新依赖、配置变更)
|
|
||||||
4. 多组件系统:在每个组件边界加诊断日志,定位哪一层断裂
|
|
||||||
5. 追踪数据流:坏值从哪里来?谁调用的?一直追溯到源头
|
|
||||||
|
|
||||||
**阶段2:模式分析**
|
|
||||||
- 找到同代码库中类似的正常工作代码
|
|
||||||
- 逐项对比差异
|
|
||||||
- 理解依赖关系
|
|
||||||
|
|
||||||
**阶段3:假设与测试**
|
|
||||||
- 形成单一假设:"我认为X是根因,因为Y"
|
|
||||||
- 做最小改动测试
|
|
||||||
- 有效 → 阶段4;无效 → 新假设
|
|
||||||
|
|
||||||
**阶段4:实施**
|
|
||||||
- 创建失败测试用例
|
|
||||||
- 修复根因(不是症状)
|
|
||||||
- 验证修复
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 八、后端开发规范
|
|
||||||
|
|
||||||
### 分层架构
|
|
||||||
```
|
|
||||||
Controller → AppService → Service → Mapper → Entity
|
|
||||||
```
|
|
||||||
|
|
||||||
### 命名规范
|
|
||||||
| 类型 | 规则 | 示例 |
|
|
||||||
|------|------|------|
|
|
||||||
| Controller | `XxxController` | `RegistrationController` |
|
|
||||||
| AppService | `IXxxAppService` / `XxxAppServiceImpl` | `IRegistrationAppService` |
|
|
||||||
| Service | `IXxxService` / `XxxServiceImpl` | `IRegistrationService` |
|
|
||||||
| Mapper | `XxxMapper` | `RegistrationMapper` |
|
|
||||||
| Entity | `Xxx` | `Registration` |
|
|
||||||
| DTO | `XxxDto` / `XxxQueryDto` | `RegistrationDto` |
|
|
||||||
|
|
||||||
### 包结构
|
|
||||||
```
|
|
||||||
com.healthlink.his.web.{module}.controller
|
|
||||||
com.healthlink.his.web.{module}.appservice
|
|
||||||
com.healthlink.his.web.{module}.service
|
|
||||||
com.healthlink.his.web.{module}.mapper
|
|
||||||
com.healthlink.his.web.{module}.dto
|
|
||||||
com.healthlink.his.domain.{module}
|
|
||||||
com.healthlink.his.common.enums
|
|
||||||
```
|
|
||||||
|
|
||||||
### 关键约束
|
|
||||||
- 所有查询使用 `LambdaQueryWrapper`,禁止字符串拼接 SQL
|
|
||||||
- `@Transactional(rollbackFor = Exception.class)` 管理事务
|
|
||||||
- 所有接口标注 `@PreAuthorize` 权限控制
|
|
||||||
- 患者敏感信息在日志中脱敏
|
|
||||||
- **扩展功能不修改原有函数签名**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 九、前端开发规范
|
|
||||||
|
|
||||||
### 技术栈
|
|
||||||
- Vue 3 + Vite + Element Plus + Pinia + Axios(基于 RuoYi-Vue3)
|
|
||||||
|
|
||||||
### 目录结构
|
|
||||||
```
|
|
||||||
src/api/{module}/ # API接口
|
|
||||||
src/views/{module}/ # 页面组件
|
|
||||||
src/store/modules/ # Pinia状态管理
|
|
||||||
src/components/ # 公共组件
|
|
||||||
```
|
|
||||||
|
|
||||||
### 关键约束
|
|
||||||
- API前缀:`/healthlink-his/api/v1/`
|
|
||||||
- 路由懒加载:`() => import('@/views/xxx/index.vue')`
|
|
||||||
- 页面使用 `<script setup>` 语法
|
|
||||||
- 按钮权限使用 `v-hasPermi` 指令
|
|
||||||
- `onMounted` 中注册的事件在 `onUnmounted` 中移除
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十、Agent 体系
|
|
||||||
|
|
||||||
### 角色与路由
|
|
||||||
|
|
||||||
| 代号 | 名称 | 角色 | 路由关键词 |
|
|
||||||
|------|------|------|-----------|
|
|
||||||
| liubei | 刘备 | 项目经理 | 协调、分派、异常升级 |
|
|
||||||
| zhugeliang | 诸葛亮 | 架构师 | 分析、路由、设计 |
|
|
||||||
| guanyu | 关羽 | 后端开发 | java, api, spring, service, controller |
|
|
||||||
| zhaoyun | 赵云 | 前端开发 | vue, 界面, 显示, 弹窗, 按钮 |
|
|
||||||
| xunyu | 荀彧 | DBA | 数据库, sql, 迁移, mapper xml |
|
|
||||||
| zhangfei | 张飞 | 测试 | 测试, QA, 回归 |
|
|
||||||
| huatuo | 华佗 | 验收 | 需求验收、质量确认 |
|
|
||||||
| chenlin | 陈琳 | 文档 | 文档、归档、Git提交 |
|
|
||||||
|
|
||||||
### 协作流水线
|
|
||||||
|
|
||||||
```
|
|
||||||
刘备(协调) → 诸葛亮(分析路由) → {关羽|赵云}(修复) → 荀彧(DB审查) → 张飞(测试) → 华佗(验收) → 陈琳(归档)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Bug 修复完整管线(BDT 方法论)
|
|
||||||
|
|
||||||
```
|
|
||||||
获取Bug → 设计测试用例 → 基线测试(应失败) → 全链路修复 → 回归测试(应通过) → 扩展测试(无回归) → 提交
|
|
||||||
```
|
|
||||||
|
|
||||||
### Bug 状态管理铁律
|
|
||||||
- 人类提的 Bug:只加备注,不改状态,不改分配
|
|
||||||
- 智能体提的 Bug:可以改分配和加备注
|
|
||||||
- 已关闭/已解决的 Bug 不再处理
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十一、审查与审计
|
|
||||||
|
|
||||||
### 三层审查体系
|
|
||||||
|
|
||||||
| 层级 | 内容 | 时机 |
|
|
||||||
|------|------|------|
|
|
||||||
| **L1 自审** | Agent 对照约束逐条检查 | 每次提交前 |
|
|
||||||
| **L2 配对审查** | Agent 生成变更摘要,人类终审 | PR/提交时 |
|
|
||||||
| **L3 合规审查** | 审计追踪,记录所有 AI 操作 | 持续 |
|
|
||||||
|
|
||||||
### L1 自审清单
|
|
||||||
```yaml
|
|
||||||
self_review:
|
|
||||||
- "所有修改能通过编译?"
|
|
||||||
- "遵守命名规范?"
|
|
||||||
- "测试覆盖达标?"
|
|
||||||
- "没有遗漏的 TODO / DEBUG?"
|
|
||||||
- "变更范围没超出任务边界?"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 评审评分维度
|
|
||||||
| 维度 | 问题 |
|
|
||||||
|------|------|
|
|
||||||
| 正确性 | 行为是否符合目标功能? |
|
|
||||||
| 验证 | 检查是否真的跑过并留下证据? |
|
|
||||||
| 范围纪律 | 是否保持在选定功能范围内? |
|
|
||||||
| 可靠性 | 结果能否在重启后继续工作? |
|
|
||||||
| 可维护性 | 代码和文档是否清楚到可交接? |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十二、标准工作循环
|
|
||||||
|
|
||||||
```
|
|
||||||
开始会话
|
|
||||||
├→ 1. Init — 读 AGENTS.md + PROGRESS.md + git log
|
|
||||||
├→ 2. Select — 只选一个未完成功能
|
|
||||||
├→ 3. Implement — 一次只做一个,不扩大范围
|
|
||||||
├→ 4. Verify — 运行验证命令,有证据才标记完成
|
|
||||||
└→ 5. Cleanup — 更新进度 + clean-state-checklist + git commit
|
|
||||||
```
|
|
||||||
|
|
||||||
### 会话结束前必须运行 Clean State Checklist
|
|
||||||
```
|
|
||||||
□ 标准启动路径仍然可用
|
|
||||||
□ 标准验证路径仍然可运行
|
|
||||||
□ 当前进度已记录到进度日志
|
|
||||||
□ 无半成品步骤处于未记录状态
|
|
||||||
□ 下一轮会话无需人工修复即可继续
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十三、开发流程
|
|
||||||
|
|
||||||
```
|
|
||||||
收到任务
|
|
||||||
├→ ① 分析需求 → 读相关文档(MD/)、读全链路6环
|
|
||||||
├→ ② 制定计划 → update_plan (3-6个阶段)
|
|
||||||
├→ ③ 后端开发 → Controller → AppService → Service → Mapper → Entity → Flyway
|
|
||||||
├→ ④ 后端测试 → mvn test → 接口测试(业务逻辑验证)
|
|
||||||
├→ ⑤ 前端开发 → API接口 → 页面组件 → 路由配置
|
|
||||||
├→ ⑥ 前端测试 → npm run build:dev → 功能验证
|
|
||||||
├→ ⑦ 质量门禁 → L1编译 → L2测试 → L3DB审查 → L4验收 → L5归档
|
|
||||||
└→ ⑧ 提交代码 → git commit(规范格式) → git push → 文档更新
|
|
||||||
```
|
|
||||||
|
|
||||||
### Git Commit 格式
|
|
||||||
```
|
|
||||||
<type>(<scope>): <subject>
|
|
||||||
|
|
||||||
type: feat|fix|docs|refactor|test|chore
|
|
||||||
scope: 模块名(如 registration, billing, pharmacy)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十四、快速参考命令
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# === 后端 ===
|
|
||||||
export JAVA_HOME=/opt/jdk-25
|
|
||||||
mvn clean compile -DskipTests # 编译
|
|
||||||
mvn install -DskipTests # 构建
|
|
||||||
mvn test -pl healthlink-his-application -Dtest="XxxTest" -Dsurefire.failIfNoSpecifiedTests=false
|
|
||||||
|
|
||||||
# === 前端 ===
|
|
||||||
cd healthlink-his-ui
|
|
||||||
npm run dev && npm run build:dev && npm run lint && npm run test:run
|
|
||||||
|
|
||||||
# === Git ===
|
|
||||||
git status && git add -A && git commit -m "feat(module): desc" && git push origin develop
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十五、详细规范文档索引
|
|
||||||
|
|
||||||
| 文档 | 路径 | 用途 |
|
|
||||||
|------|------|------|
|
|
||||||
| 执行铁律 | `MD/specs/IRON_RULES.md` | 铁律完整版 |
|
|
||||||
| 后端规范 | `MD/specs/BACKEND_DEVELOPMENT_STANDARD.md` | 后端编码标准 |
|
|
||||||
| 前端规范 | `MD/specs/FRONTEND_DEVELOPMENT_STANDARD.md` | 前端编码标准 |
|
|
||||||
| Harness方法论 | `MD/specs/HARNESS_ENGINEERING.md` | 完整Harness+Agent方法论 |
|
|
||||||
| 文档规范 | `MD/DOCUMENTATION_STANDARD.md` | 文档管理标准 |
|
|
||||||
| 后端清单 | `MD/specs/BACKEND_CHECKLIST.md` | 发布前检查 |
|
|
||||||
| 前端清单 | `MD/specs/FRONTEND_CHECKLIST.md` | 发布前检查 |
|
|
||||||
| 三甲标准 | `MD/standards/GRADE3A_HIS_STANDARD.md` | 三甲医院达标标准 |
|
|
||||||
| Flyway指南 | `MD/guides/FLYWAY_USAGE_GUIDE.md` | 数据库迁移指南 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十六、过往教训
|
|
||||||
|
|
||||||
| 教训 | 内容 |
|
|
||||||
|------|------|
|
|
||||||
| 状态链路断裂 | Bug#574: 签到设 BOOKED(1) 而非 CHECKED_IN(3),前端映射缺失 → 必须走完整状态链路 |
|
|
||||||
| 盲删源文件 | AI 看到编译错误直接删文件,没检查 baseline → 必须先确认文件来源 |
|
|
||||||
| 修复方向偏差 | 多次 fallback 改的是错误的 Service → 必须用 rg 搜索所有相关代码路径 |
|
|
||||||
| bug_reports 缺列 | INSERT 静默失败 → 必须检查表结构 |
|
|
||||||
| 禅道 comment API | API 不存在,用 resolve+activate workaround |
|
|
||||||
| SQLite WAL 并发 | 多进程并发写需要 checkpoint |
|
|
||||||
| UTF-8 切片 | 多字节字符不能用 byte index 切片 |
|
|
||||||
| 上下文焦虑 | Agent 感觉上下文快满时会匆忙结束,跳过验证 → 注意 context 40% 阈值 |
|
|
||||||
| 过早宣告胜利 | 自评≠验证,分开"干活"和"检查" |
|
|
||||||
| 覆盖率幻觉 | 覆盖率达标但逻辑没测 → 引入变异测试 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> ⚠️ 本文件是 AI 开发规范的唯一信源。各工具配置文件由 `bash scripts/sync-ai-rules.sh` 同步。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> 📅 最后同步: 2026-06-06 15:09 | 源文件: RULES.md | 重新同步: `bash scripts/sync-ai-rules.sh`
|
|
||||||
509
.cursorrules
509
.cursorrules
@@ -1,509 +0,0 @@
|
|||||||
# HealthLink-HIS — AI 开发规范 (Cursor)
|
|
||||||
|
|
||||||
> 🤖 Cursor IDE 打开本项目时自动加载此文件。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# HealthLink-HIS — AI 开发规范(自动加载)
|
|
||||||
|
|
||||||
> 🤖 **本文件供所有 AI 编码工具自动读取**。进入本项目后必须遵守以下规范。
|
|
||||||
>
|
|
||||||
> **模型决定上限,Harness 决定底线。**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 一、项目概览
|
|
||||||
|
|
||||||
| 属性 | 值 |
|
|
||||||
|------|------|
|
|
||||||
| 项目名 | HealthLink-HIS(医院信息系统) |
|
|
||||||
| 后端路径 | `healthlink-his-server/` |
|
|
||||||
| 前端路径 | `healthlink-his-ui/` |
|
|
||||||
| 文档路径 | `MD/` |
|
|
||||||
| JDK | 25 (OpenJDK) |
|
|
||||||
| Spring Boot | 4.0.6 |
|
|
||||||
| MyBatis-Plus | 3.5.16 |
|
|
||||||
| Vue | 3.x + Vite + Element Plus |
|
|
||||||
| 数据库 | PostgreSQL 15+ |
|
|
||||||
| 包名 | `com.healthlink.his` |
|
|
||||||
| 后端端口 | 18082 |
|
|
||||||
| 前端端口 | 81 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 二、铁律(必须遵守,违反即失败)
|
|
||||||
|
|
||||||
### 🔴 P0 铁律 — 不可违反
|
|
||||||
|
|
||||||
**铁律1: 修改完必须测试**
|
|
||||||
```
|
|
||||||
后端: mvn clean compile -DskipTests → mvn install -DskipTests → mvn test
|
|
||||||
前端: npm run build:dev → npm run lint
|
|
||||||
```
|
|
||||||
- 白盒:编译通过,无 ERROR
|
|
||||||
- 黑盒:关键接口返回 `{code:200, data:...}`,验证业务逻辑
|
|
||||||
- 冒烟:应用正常启动,核心流程通畅
|
|
||||||
|
|
||||||
**铁律2: Flyway 数据库迁移**
|
|
||||||
- 凡是新建表、新增字段,必须创建 Flyway 迁移脚本
|
|
||||||
- 路径:`healthlink-his-domain/src/main/resources/db/migration/`
|
|
||||||
- 命名:`V{版本号}__{描述}.sql`(双下划线)
|
|
||||||
|
|
||||||
**铁律3: 测试通过后才提交**
|
|
||||||
- 编译 + 测试全部通过后才能 git commit
|
|
||||||
- 不提交未完成的功能、调试代码、临时文件
|
|
||||||
|
|
||||||
**铁律4: 前后端API路径对齐**
|
|
||||||
- 后端前缀:`/healthlink-his/api/v1/`
|
|
||||||
- 前端 `request.js` 的 baseURL 必须与后端匹配
|
|
||||||
|
|
||||||
**铁律5: 状态值一致性(Bug #574 教训)**
|
|
||||||
- 修改任何状态值前,必须先列出完整的状态流转链路
|
|
||||||
- 检查项:枚举定义 → Service 设置 → 查询映射 → 前端 STATUS_CLASS_MAP → 前端 v-if → 统计SQL
|
|
||||||
- 禁止:只改一端不检查其他端
|
|
||||||
|
|
||||||
**铁律6: 禁止删除源文件(Bug #574 教训)**
|
|
||||||
- 绝对禁止删除项目中已有的 Java/Vue/SQL 源文件
|
|
||||||
- 编译错误 → 修复错误;重复文件 → 重构合并
|
|
||||||
- 唯一例外:明确由人类确认删除的文件
|
|
||||||
|
|
||||||
**铁律7: 禁止修改已有公开方法签名**
|
|
||||||
- 不能删除/重命名已有的 public 方法,不能修改参数列表
|
|
||||||
- 需要新功能 → 添加重载方法;需要改行为 → 修改内部实现
|
|
||||||
|
|
||||||
**铁律8: 验证后才宣称完成(Verification Before Completion)**
|
|
||||||
- **没有跑过验证命令,就不能说"完成了""通过了""没问题"**
|
|
||||||
- 禁止使用"应该可以""大概没问题""看起来正确"
|
|
||||||
- 必须:运行命令 → 读取输出 → 确认结果 → 才能宣称
|
|
||||||
- 这是诚实原则,不是效率问题
|
|
||||||
|
|
||||||
|
|
||||||
**铁律9: 开发前必须审核原有代码(P0 — 铁律)**
|
|
||||||
- **任何新功能开发前,必须先搜索项目中是否已有相关代码**
|
|
||||||
- 搜索路径:Controller / AppService / Service / Mapper / Entity / 前端页面 / API接口
|
|
||||||
- 如果已有部分功能 → 在原有代码基础上**升级优化完善**,禁止另起炉灶
|
|
||||||
- 如果已有接口但前端缺失 → 只补前端,不重复建后端
|
|
||||||
- 如果已有前端但后端缺失 → 只补后端,不重写前端
|
|
||||||
- 搜索命令:`rg -l "关键词" healthlink-his-server/ healthlink-his-ui/src/`
|
|
||||||
- 禁止:不看代码就新建模块、重复实现已有功能、废弃原有代码另写一套
|
|
||||||
|
|
||||||
|
|
||||||
**铁律12: 设计文档确认后自主开发(铁律)**
|
|
||||||
- 设计文档(如 `MD/architecture/GRADE3A_GAP_ANALYSIS_AND_DESIGN.md`)一旦确认,后续开发**必须按文档自主执行**
|
|
||||||
- **禁止反复询问"是否继续""下一步做什么""是否开始"**——直接按计划推进
|
|
||||||
- 每完成一个 Sprint,自动提交推送,然后立即开始下一个 Sprint
|
|
||||||
- 只在遇到**无法解决的阻塞**(如技术选型冲突、需求不明确、第三方依赖不可用)时才暂停询问
|
|
||||||
- 设计文档是"**已签合同**",不是"参考意见"。铁律执行优先级:设计文档 > 人类临时指令 > AI 自行判断
|
|
||||||
|
|
||||||
**铁律18: 禁止破坏原有功能(P0绝对铁律)**
|
|
||||||
- **完善增加功能和流程时,绝对不能破坏或者让原有功能不能用**
|
|
||||||
- 修改已有实体前必须对比原始文件(`git show HEAD~N:./file.java`),保留所有原有字段和方法
|
|
||||||
- 新增字段只能追加,不能删除或重命名已有字段
|
|
||||||
- SQL迁移只允许 `ALTER TABLE ADD COLUMN`,不允许 `DROP COLUMN` 或 `RENAME COLUMN`
|
|
||||||
- Controller新端点不能修改已有端点的路径或参数
|
|
||||||
- 前端新页面不能修改已有页面的组件结构
|
|
||||||
- 每次修改后必须 `mvn clean compile -DskipTests` 验证
|
|
||||||
- **违规判定**: 因修改导致原有代码编译失败或运行报错,视为违反铁律18,必须立即回滚修复
|
|
||||||
|
|
||||||
|
|
||||||
### 🟡 P1 铁律 — 强烈建议
|
|
||||||
|
|
||||||
**铁律9: 先分解再行动**
|
|
||||||
- 修改超过3个文件、涉及多模块、数据库变更,必须先制定计划
|
|
||||||
|
|
||||||
**铁律10: 验证后信**
|
|
||||||
- 每次修改后必须验证编译通过,不信记忆
|
|
||||||
|
|
||||||
**铁律13: 文档统一管理**
|
|
||||||
- 所有文档存储在 `MD/` 目录
|
|
||||||
- 文件名:大写英文+下划线(如 `BACKEND_CHECKLIST.md`)
|
|
||||||
- 文档头部必须包含元数据块(文档类型、版本、日期)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
**铁律14: 设计文档必须包含UI设计和调用流程**
|
|
||||||
- 所有新模块/页面的设计文档必须包含:UI布局描述、交互效果清单、前后端调用流程
|
|
||||||
- 没有明确UI设计的模块,禁止直接编码
|
|
||||||
- 详见
|
|
||||||
- 设计文档必须写清楚:系统调用关系、方法函数调用关系、完整业务流程
|
|
||||||
- 设计文档中每个用户操作必须对应:前端事件 → API调用 → 后端处理链路 → 返回数据 → UI渲染
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 三、Karpathy 编码准则
|
|
||||||
|
|
||||||
> 减少 LLM 常见编码错误。偏向谨慎而非速度。
|
|
||||||
|
|
||||||
### 3.1 先想再写
|
|
||||||
- 明确陈述假设,不确定就问
|
|
||||||
- 多种解读时都列出来,不要默默选一种
|
|
||||||
- 有更简单的方案就说出来,该推回就推回
|
|
||||||
- 不清楚的地方停下来,说清楚哪里不清楚
|
|
||||||
|
|
||||||
### 3.2 简洁优先
|
|
||||||
- 不做没要求的功能,不做一次性代码的抽象
|
|
||||||
- 不加没要求的"灵活性"和"可配置性"
|
|
||||||
- 200 行能 50 行搞定就重写
|
|
||||||
- 自问:"高级工程师会不会觉得这过度设计?"
|
|
||||||
|
|
||||||
### 3.3 精准修改
|
|
||||||
- 只改必须改的,不"顺手改进"相邻代码
|
|
||||||
- 匹配现有代码风格,即使你有不同的偏好
|
|
||||||
- 每行改动都能追溯到用户的请求
|
|
||||||
- 只清理你自己改动产生的无用代码
|
|
||||||
|
|
||||||
### 3.4 目标驱动
|
|
||||||
- 把任务转化为可验证目标
|
|
||||||
- 多步任务声明计划:`[步骤] → 验证: [检查]`
|
|
||||||
- 强验收标准让 Agent 能独立循环,弱标准需要持续澄清
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 四、全链路 6 环分析
|
|
||||||
|
|
||||||
> ⚠️ **涉及数据库字段的 Bug / 需求,必须走完整链路。**
|
|
||||||
|
|
||||||
```
|
|
||||||
前端/页面 → Controller → Service → Mapper → DB/SQL → 关联模块
|
|
||||||
①录入 ②验证 ③业务 ④持久化 ⑤存储 ⑥联动
|
|
||||||
```
|
|
||||||
|
|
||||||
| 环 | 检查内容 |
|
|
||||||
|----|---------|
|
|
||||||
| ① 录入 | 前端有无输入入口(弹窗、表格行编辑、表单) |
|
|
||||||
| ② 验证 | Controller 参数校验、@Valid、权限控制 |
|
|
||||||
| ③ 业务 | Service 业务逻辑、事务边界、多个 Service 实现类入口 |
|
|
||||||
| ④ 持久化 | Mapper XML、DTO 字段映射、类型转换 |
|
|
||||||
| ⑤ 存储 | 数据库表结构、索引、NOT NULL 约束 |
|
|
||||||
| ⑥ 联动 | 上游(医嘱→护士站)、下游(打印、计费、报表)是否同步 |
|
|
||||||
|
|
||||||
**修复后的验证顺序**:
|
|
||||||
1. 数据库:确认状态值已正确写入
|
|
||||||
2. 后端接口:确认返回的状态映射正确
|
|
||||||
3. 前端显示:确认页面显示正确状态文本
|
|
||||||
4. 前端交互:确认按钮/操作基于正确状态启用/禁用
|
|
||||||
5. 统计数据:确认池/报表统计包含新状态
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 五、Harness Engineering 方法论
|
|
||||||
|
|
||||||
> Harness = 约束 + 反馈 + 控制平面 + 持久执行
|
|
||||||
|
|
||||||
### 5.1 四层约束金字塔
|
|
||||||
|
|
||||||
| 层级 | 内容 | 落地方式 |
|
|
||||||
|------|------|---------|
|
|
||||||
| **L1 架构约束** | 接口合约、包结构、命名规范、禁止模式 | 本文件铁律 |
|
|
||||||
| **L2 代码质量** | 圈复杂度、代码风格、类型提示 | 编译门禁 + ESLint |
|
|
||||||
| **L3 安全约束** | 敏感信息检测、权限检查、输入验证 | 配置不可硬编码 |
|
|
||||||
| **L4 业务规则** | 领域逻辑、数据一致性、事务边界 | 全链路 6 环验证 |
|
|
||||||
|
|
||||||
**约束设计原则**:
|
|
||||||
- **可验证**:每条约束必须能被自动化检查("覆盖率>90%"✅ "质量要高"❌)
|
|
||||||
- **无歧义**:"每函数不超过50行"✅ "函数不要太长"❌
|
|
||||||
- **优先级**:安全(1) > 架构(2) > 业务(3) > 质量(4) > 性能(5)
|
|
||||||
- **渐进增强**:L1编译通过 → L2+命名规范 → L3+测试覆盖 → L4+安全扫描
|
|
||||||
|
|
||||||
### 5.2 三层反馈系统
|
|
||||||
|
|
||||||
| 层级 | 速度 | 覆盖范围 | 失败处理 |
|
|
||||||
|------|------|---------|---------|
|
|
||||||
| **L1 编译检查** | <30秒 | 语法、类型、签名 | 立即阻断,自行修复 |
|
|
||||||
| **L2 数据流验证** | <5分钟 | 全链路字段、Mapper XML、DTO | 修复后上报 |
|
|
||||||
| **L3 人工审查** | 10-30分钟 | 架构、设计、业务正确性 | 驳回/指导/批准 |
|
|
||||||
|
|
||||||
**反馈铁律**:
|
|
||||||
- 反馈必须可行动(文件 + 行号 + 错误类型 + 修复方向)
|
|
||||||
- 失败后先回滚到最近检查点,再重试
|
|
||||||
- 持续失败3次 → 上报人类
|
|
||||||
|
|
||||||
### 5.3 控制平面
|
|
||||||
|
|
||||||
```
|
|
||||||
战略层(人类) → 设定目标、审批决策、异常升级
|
|
||||||
战术层(Agent) → 任务分解、update_plan、依赖协调、检查点保存
|
|
||||||
执行层(Agent) → 代码生成、测试执行、错误恢复、幂等重试
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5.4 持久执行
|
|
||||||
|
|
||||||
- 每个关键步骤保存检查点(`update_plan` 进度)
|
|
||||||
- 失败后从最新检查点恢复,不从头开始
|
|
||||||
- 幂等设计:同一操作重复执行结果一致
|
|
||||||
- **三层状态管理**:系统层(工作流ID/超时/重试) → 执行层(当前活动/进度) → 业务层(已完成工作/中间产物)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 六、五层质量门禁
|
|
||||||
|
|
||||||
| 门禁 | 时间 | 范围 | 失败处理 |
|
|
||||||
|------|------|------|---------|
|
|
||||||
| **L1 编译检查** | <30秒 | 语法、类型、导入 | Agent 自行修复 |
|
|
||||||
| **L2 静态分析** | <2分钟 | 代码风格、复杂度、安全 | Agent 修复 |
|
|
||||||
| **L3 单元测试** | <5分钟 | 功能正确性、边界条件 | 自动修复或上报 |
|
|
||||||
| **L4 集成测试** | <15分钟 | 模块间交互、数据流 | 上报人工 |
|
|
||||||
| **L5 生产验证** | 持续 | 监控、告警、性能 | 自动回滚 |
|
|
||||||
|
|
||||||
**提交铁律**:L1-L2 必须通过才能 commit,L3(如有DB变更)必须通过才能 push
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 七、系统化调试(Systematic Debugging)
|
|
||||||
|
|
||||||
> **铁律:没有根因调查,不能提出修复方案。**
|
|
||||||
|
|
||||||
### 四阶段流程
|
|
||||||
|
|
||||||
**阶段1:根因调查**(修复前必须完成)
|
|
||||||
1. 仔细阅读错误信息(堆栈、行号、错误码)
|
|
||||||
2. 稳定复现(能否可靠触发?步骤?每次?)
|
|
||||||
3. 检查最近变更(git diff、新依赖、配置变更)
|
|
||||||
4. 多组件系统:在每个组件边界加诊断日志,定位哪一层断裂
|
|
||||||
5. 追踪数据流:坏值从哪里来?谁调用的?一直追溯到源头
|
|
||||||
|
|
||||||
**阶段2:模式分析**
|
|
||||||
- 找到同代码库中类似的正常工作代码
|
|
||||||
- 逐项对比差异
|
|
||||||
- 理解依赖关系
|
|
||||||
|
|
||||||
**阶段3:假设与测试**
|
|
||||||
- 形成单一假设:"我认为X是根因,因为Y"
|
|
||||||
- 做最小改动测试
|
|
||||||
- 有效 → 阶段4;无效 → 新假设
|
|
||||||
|
|
||||||
**阶段4:实施**
|
|
||||||
- 创建失败测试用例
|
|
||||||
- 修复根因(不是症状)
|
|
||||||
- 验证修复
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 八、后端开发规范
|
|
||||||
|
|
||||||
### 分层架构
|
|
||||||
```
|
|
||||||
Controller → AppService → Service → Mapper → Entity
|
|
||||||
```
|
|
||||||
|
|
||||||
### 命名规范
|
|
||||||
| 类型 | 规则 | 示例 |
|
|
||||||
|------|------|------|
|
|
||||||
| Controller | `XxxController` | `RegistrationController` |
|
|
||||||
| AppService | `IXxxAppService` / `XxxAppServiceImpl` | `IRegistrationAppService` |
|
|
||||||
| Service | `IXxxService` / `XxxServiceImpl` | `IRegistrationService` |
|
|
||||||
| Mapper | `XxxMapper` | `RegistrationMapper` |
|
|
||||||
| Entity | `Xxx` | `Registration` |
|
|
||||||
| DTO | `XxxDto` / `XxxQueryDto` | `RegistrationDto` |
|
|
||||||
|
|
||||||
### 包结构
|
|
||||||
```
|
|
||||||
com.healthlink.his.web.{module}.controller
|
|
||||||
com.healthlink.his.web.{module}.appservice
|
|
||||||
com.healthlink.his.web.{module}.service
|
|
||||||
com.healthlink.his.web.{module}.mapper
|
|
||||||
com.healthlink.his.web.{module}.dto
|
|
||||||
com.healthlink.his.domain.{module}
|
|
||||||
com.healthlink.his.common.enums
|
|
||||||
```
|
|
||||||
|
|
||||||
### 关键约束
|
|
||||||
- 所有查询使用 `LambdaQueryWrapper`,禁止字符串拼接 SQL
|
|
||||||
- `@Transactional(rollbackFor = Exception.class)` 管理事务
|
|
||||||
- 所有接口标注 `@PreAuthorize` 权限控制
|
|
||||||
- 患者敏感信息在日志中脱敏
|
|
||||||
- **扩展功能不修改原有函数签名**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 九、前端开发规范
|
|
||||||
|
|
||||||
### 技术栈
|
|
||||||
- Vue 3 + Vite + Element Plus + Pinia + Axios(基于 RuoYi-Vue3)
|
|
||||||
|
|
||||||
### 目录结构
|
|
||||||
```
|
|
||||||
src/api/{module}/ # API接口
|
|
||||||
src/views/{module}/ # 页面组件
|
|
||||||
src/store/modules/ # Pinia状态管理
|
|
||||||
src/components/ # 公共组件
|
|
||||||
```
|
|
||||||
|
|
||||||
### 关键约束
|
|
||||||
- API前缀:`/healthlink-his/api/v1/`
|
|
||||||
- 路由懒加载:`() => import('@/views/xxx/index.vue')`
|
|
||||||
- 页面使用 `<script setup>` 语法
|
|
||||||
- 按钮权限使用 `v-hasPermi` 指令
|
|
||||||
- `onMounted` 中注册的事件在 `onUnmounted` 中移除
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十、Agent 体系
|
|
||||||
|
|
||||||
### 角色与路由
|
|
||||||
|
|
||||||
| 代号 | 名称 | 角色 | 路由关键词 |
|
|
||||||
|------|------|------|-----------|
|
|
||||||
| liubei | 刘备 | 项目经理 | 协调、分派、异常升级 |
|
|
||||||
| zhugeliang | 诸葛亮 | 架构师 | 分析、路由、设计 |
|
|
||||||
| guanyu | 关羽 | 后端开发 | java, api, spring, service, controller |
|
|
||||||
| zhaoyun | 赵云 | 前端开发 | vue, 界面, 显示, 弹窗, 按钮 |
|
|
||||||
| xunyu | 荀彧 | DBA | 数据库, sql, 迁移, mapper xml |
|
|
||||||
| zhangfei | 张飞 | 测试 | 测试, QA, 回归 |
|
|
||||||
| huatuo | 华佗 | 验收 | 需求验收、质量确认 |
|
|
||||||
| chenlin | 陈琳 | 文档 | 文档、归档、Git提交 |
|
|
||||||
|
|
||||||
### 协作流水线
|
|
||||||
|
|
||||||
```
|
|
||||||
刘备(协调) → 诸葛亮(分析路由) → {关羽|赵云}(修复) → 荀彧(DB审查) → 张飞(测试) → 华佗(验收) → 陈琳(归档)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Bug 修复完整管线(BDT 方法论)
|
|
||||||
|
|
||||||
```
|
|
||||||
获取Bug → 设计测试用例 → 基线测试(应失败) → 全链路修复 → 回归测试(应通过) → 扩展测试(无回归) → 提交
|
|
||||||
```
|
|
||||||
|
|
||||||
### Bug 状态管理铁律
|
|
||||||
- 人类提的 Bug:只加备注,不改状态,不改分配
|
|
||||||
- 智能体提的 Bug:可以改分配和加备注
|
|
||||||
- 已关闭/已解决的 Bug 不再处理
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十一、审查与审计
|
|
||||||
|
|
||||||
### 三层审查体系
|
|
||||||
|
|
||||||
| 层级 | 内容 | 时机 |
|
|
||||||
|------|------|------|
|
|
||||||
| **L1 自审** | Agent 对照约束逐条检查 | 每次提交前 |
|
|
||||||
| **L2 配对审查** | Agent 生成变更摘要,人类终审 | PR/提交时 |
|
|
||||||
| **L3 合规审查** | 审计追踪,记录所有 AI 操作 | 持续 |
|
|
||||||
|
|
||||||
### L1 自审清单
|
|
||||||
```yaml
|
|
||||||
self_review:
|
|
||||||
- "所有修改能通过编译?"
|
|
||||||
- "遵守命名规范?"
|
|
||||||
- "测试覆盖达标?"
|
|
||||||
- "没有遗漏的 TODO / DEBUG?"
|
|
||||||
- "变更范围没超出任务边界?"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 评审评分维度
|
|
||||||
| 维度 | 问题 |
|
|
||||||
|------|------|
|
|
||||||
| 正确性 | 行为是否符合目标功能? |
|
|
||||||
| 验证 | 检查是否真的跑过并留下证据? |
|
|
||||||
| 范围纪律 | 是否保持在选定功能范围内? |
|
|
||||||
| 可靠性 | 结果能否在重启后继续工作? |
|
|
||||||
| 可维护性 | 代码和文档是否清楚到可交接? |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十二、标准工作循环
|
|
||||||
|
|
||||||
```
|
|
||||||
开始会话
|
|
||||||
├→ 1. Init — 读 AGENTS.md + PROGRESS.md + git log
|
|
||||||
├→ 2. Select — 只选一个未完成功能
|
|
||||||
├→ 3. Implement — 一次只做一个,不扩大范围
|
|
||||||
├→ 4. Verify — 运行验证命令,有证据才标记完成
|
|
||||||
└→ 5. Cleanup — 更新进度 + clean-state-checklist + git commit
|
|
||||||
```
|
|
||||||
|
|
||||||
### 会话结束前必须运行 Clean State Checklist
|
|
||||||
```
|
|
||||||
□ 标准启动路径仍然可用
|
|
||||||
□ 标准验证路径仍然可运行
|
|
||||||
□ 当前进度已记录到进度日志
|
|
||||||
□ 无半成品步骤处于未记录状态
|
|
||||||
□ 下一轮会话无需人工修复即可继续
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十三、开发流程
|
|
||||||
|
|
||||||
```
|
|
||||||
收到任务
|
|
||||||
├→ ① 分析需求 → 读相关文档(MD/)、读全链路6环
|
|
||||||
├→ ② 制定计划 → update_plan (3-6个阶段)
|
|
||||||
├→ ③ 后端开发 → Controller → AppService → Service → Mapper → Entity → Flyway
|
|
||||||
├→ ④ 后端测试 → mvn test → 接口测试(业务逻辑验证)
|
|
||||||
├→ ⑤ 前端开发 → API接口 → 页面组件 → 路由配置
|
|
||||||
├→ ⑥ 前端测试 → npm run build:dev → 功能验证
|
|
||||||
├→ ⑦ 质量门禁 → L1编译 → L2测试 → L3DB审查 → L4验收 → L5归档
|
|
||||||
└→ ⑧ 提交代码 → git commit(规范格式) → git push → 文档更新
|
|
||||||
```
|
|
||||||
|
|
||||||
### Git Commit 格式
|
|
||||||
```
|
|
||||||
<type>(<scope>): <subject>
|
|
||||||
|
|
||||||
type: feat|fix|docs|refactor|test|chore
|
|
||||||
scope: 模块名(如 registration, billing, pharmacy)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十四、快速参考命令
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# === 后端 ===
|
|
||||||
export JAVA_HOME=/opt/jdk-25
|
|
||||||
mvn clean compile -DskipTests # 编译
|
|
||||||
mvn install -DskipTests # 构建
|
|
||||||
mvn test -pl healthlink-his-application -Dtest="XxxTest" -Dsurefire.failIfNoSpecifiedTests=false
|
|
||||||
|
|
||||||
# === 前端 ===
|
|
||||||
cd healthlink-his-ui
|
|
||||||
npm run dev && npm run build:dev && npm run lint && npm run test:run
|
|
||||||
|
|
||||||
# === Git ===
|
|
||||||
git status && git add -A && git commit -m "feat(module): desc" && git push origin develop
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十五、详细规范文档索引
|
|
||||||
|
|
||||||
| 文档 | 路径 | 用途 |
|
|
||||||
|------|------|------|
|
|
||||||
| 执行铁律 | `MD/specs/IRON_RULES.md` | 铁律完整版 |
|
|
||||||
| 后端规范 | `MD/specs/BACKEND_DEVELOPMENT_STANDARD.md` | 后端编码标准 |
|
|
||||||
| 前端规范 | `MD/specs/FRONTEND_DEVELOPMENT_STANDARD.md` | 前端编码标准 |
|
|
||||||
| Harness方法论 | `MD/specs/HARNESS_ENGINEERING.md` | 完整Harness+Agent方法论 |
|
|
||||||
| 文档规范 | `MD/DOCUMENTATION_STANDARD.md` | 文档管理标准 |
|
|
||||||
| 后端清单 | `MD/specs/BACKEND_CHECKLIST.md` | 发布前检查 |
|
|
||||||
| 前端清单 | `MD/specs/FRONTEND_CHECKLIST.md` | 发布前检查 |
|
|
||||||
| 三甲标准 | `MD/standards/GRADE3A_HIS_STANDARD.md` | 三甲医院达标标准 |
|
|
||||||
| Flyway指南 | `MD/guides/FLYWAY_USAGE_GUIDE.md` | 数据库迁移指南 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十六、过往教训
|
|
||||||
|
|
||||||
| 教训 | 内容 |
|
|
||||||
|------|------|
|
|
||||||
| 状态链路断裂 | Bug#574: 签到设 BOOKED(1) 而非 CHECKED_IN(3),前端映射缺失 → 必须走完整状态链路 |
|
|
||||||
| 盲删源文件 | AI 看到编译错误直接删文件,没检查 baseline → 必须先确认文件来源 |
|
|
||||||
| 修复方向偏差 | 多次 fallback 改的是错误的 Service → 必须用 rg 搜索所有相关代码路径 |
|
|
||||||
| bug_reports 缺列 | INSERT 静默失败 → 必须检查表结构 |
|
|
||||||
| 禅道 comment API | API 不存在,用 resolve+activate workaround |
|
|
||||||
| SQLite WAL 并发 | 多进程并发写需要 checkpoint |
|
|
||||||
| UTF-8 切片 | 多字节字符不能用 byte index 切片 |
|
|
||||||
| 上下文焦虑 | Agent 感觉上下文快满时会匆忙结束,跳过验证 → 注意 context 40% 阈值 |
|
|
||||||
| 过早宣告胜利 | 自评≠验证,分开"干活"和"检查" |
|
|
||||||
| 覆盖率幻觉 | 覆盖率达标但逻辑没测 → 引入变异测试 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> ⚠️ 本文件是 AI 开发规范的唯一信源。各工具配置文件由 `bash scripts/sync-ai-rules.sh` 同步。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> 📅 最后同步: 2026-06-06 15:09 | 源文件: RULES.md | 重新同步: `bash scripts/sync-ai-rules.sh`
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
---
|
|
||||||
title: Fix vue/no-dupe-keys ESLint errors
|
|
||||||
status: in-progress
|
|
||||||
files_total: 26
|
|
||||||
errors_total: 65
|
|
||||||
---
|
|
||||||
|
|
||||||
# Fix vue/no-dupe-keys ESLint Errors
|
|
||||||
|
|
||||||
## Strategy by category
|
|
||||||
|
|
||||||
### Category A: Dialog components (props used by parent, refs are shadow copies)
|
|
||||||
- Delete the ref declarations that duplicate prop keys
|
|
||||||
- Delete the `xxx.value = props.xxx` assignment lines in show()/edit()
|
|
||||||
- Template will resolve to props keys automatically
|
|
||||||
|
|
||||||
Files:
|
|
||||||
1. deviceDialog.vue: title, deviceCategories, statusFlagOptions, supplierListOptions
|
|
||||||
2. diagnosisTreatmentDialog.vue: title, diagnosisCategoryOptions, statusFlagOptions, exeOrganizations, typeEnumOptions
|
|
||||||
3. medicineDialog.vue: supplierListOptions, statusRestrictedOptions, partAttributeEnumOptions, tempOrderSplitPropertyOptions
|
|
||||||
4. observationDialog.vue: title, observationTypeEnum, statusFlagOptions, instrumentIdOption
|
|
||||||
5. instrumentDialog.vue: title, instrumentTypeEnum, statusFlagOptions
|
|
||||||
6. specimenDialog.vue: title, specimenTypeEnum, statusFlagOptions
|
|
||||||
|
|
||||||
### Category B: Page components (refs are mutated locally, props are dead code)
|
|
||||||
- Remove the prop entries from defineProps (they're never passed by parent)
|
|
||||||
- Keep the ref declarations
|
|
||||||
|
|
||||||
Files:
|
|
||||||
7. returningInventory/index.vue: purposeTypeListOptions, sourceTypeListOptions, categoryListOptions
|
|
||||||
8. lossReporting/index.vue: purposeTypeListOptions, sourceTypeListOptions, categoryListOptions
|
|
||||||
9. inventoryReceiptDialog.vue: itemTypeOptions, practitionerListOptions, supplierListOptions
|
|
||||||
10. chkstockBatch/index.vue: purposeTypeListOptions, categoryListOptions
|
|
||||||
|
|
||||||
### Category C: Components where refs are locally mutated AND used via props
|
|
||||||
- Both the prop and ref are actively used
|
|
||||||
- Rename the ref to localXxx and update all references
|
|
||||||
|
|
||||||
Files:
|
|
||||||
11. Crontab/index.vue: hideComponent → localHideComponent, expression → localExpression
|
|
||||||
12. AdmissionDiagnosis.vue: tableData → localTableData, multiple → localMultiple
|
|
||||||
13. DischargeDiagnosis.vue: tableData → localTableData, multiple → localMultiple
|
|
||||||
14. prescription.vue: prescriptionNo → localPrescriptionNo, typeDetail → localTypeDetail
|
|
||||||
15. details.vue: prescriptionNo → localPrescriptionNo, typeDetail → localTypeDetail
|
|
||||||
|
|
||||||
### Category D: Extra files not in original list (found in ESLint output)
|
|
||||||
Files 16-26 also need fixes - will assess each.
|
|
||||||
0
.gitattributes
vendored
Executable file → Normal file
0
.gitattributes
vendored
Executable file → Normal file
499
.github/copilot-instructions.md
vendored
499
.github/copilot-instructions.md
vendored
@@ -1,499 +0,0 @@
|
|||||||
# HealthLink-HIS — AI 开发规范 (GitHub Copilot)
|
|
||||||
|
|
||||||
> 🤖 GitHub Copilot 打开本项目时自动加载此文件。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# HealthLink-HIS — AI 开发规范(自动加载)
|
|
||||||
|
|
||||||
> 🤖 **本文件供所有 AI 编码工具自动读取**。进入本项目后必须遵守以下规范。
|
|
||||||
>
|
|
||||||
> **模型决定上限,Harness 决定底线。**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 一、项目概览
|
|
||||||
|
|
||||||
| 属性 | 值 |
|
|
||||||
|------|------|
|
|
||||||
| 项目名 | HealthLink-HIS(医院信息系统) |
|
|
||||||
| 后端路径 | `healthlink-his-server/` |
|
|
||||||
| 前端路径 | `healthlink-his-ui/` |
|
|
||||||
| 文档路径 | `MD/` |
|
|
||||||
| JDK | 25 (OpenJDK) |
|
|
||||||
| Spring Boot | 4.0.6 |
|
|
||||||
| MyBatis-Plus | 3.5.16 |
|
|
||||||
| Vue | 3.x + Vite + Element Plus |
|
|
||||||
| 数据库 | PostgreSQL 15+ |
|
|
||||||
| 包名 | `com.healthlink.his` |
|
|
||||||
| 后端端口 | 18082 |
|
|
||||||
| 前端端口 | 81 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 二、铁律(必须遵守,违反即失败)
|
|
||||||
|
|
||||||
### 🔴 P0 铁律 — 不可违反
|
|
||||||
|
|
||||||
**铁律1: 修改完必须测试**
|
|
||||||
```
|
|
||||||
后端: mvn clean compile -DskipTests → mvn install -DskipTests → mvn test
|
|
||||||
前端: npm run build:dev → npm run lint
|
|
||||||
```
|
|
||||||
- 白盒:编译通过,无 ERROR
|
|
||||||
- 黑盒:关键接口返回 `{code:200, data:...}`,验证业务逻辑
|
|
||||||
- 冒烟:应用正常启动,核心流程通畅
|
|
||||||
|
|
||||||
**铁律2: Flyway 数据库迁移**
|
|
||||||
- 凡是新建表、新增字段,必须创建 Flyway 迁移脚本
|
|
||||||
- 路径:`healthlink-his-domain/src/main/resources/db/migration/`
|
|
||||||
- 命名:`V{版本号}__{描述}.sql`(双下划线)
|
|
||||||
|
|
||||||
**铁律3: 测试通过后才提交**
|
|
||||||
- 编译 + 测试全部通过后才能 git commit
|
|
||||||
- 不提交未完成的功能、调试代码、临时文件
|
|
||||||
|
|
||||||
**铁律4: 前后端API路径对齐**
|
|
||||||
- 后端前缀:`/healthlink-his/api/v1/`
|
|
||||||
- 前端 `request.js` 的 baseURL 必须与后端匹配
|
|
||||||
|
|
||||||
**铁律5: 状态值一致性(Bug #574 教训)**
|
|
||||||
- 修改任何状态值前,必须先列出完整的状态流转链路
|
|
||||||
- 检查项:枚举定义 → Service 设置 → 查询映射 → 前端 STATUS_CLASS_MAP → 前端 v-if → 统计SQL
|
|
||||||
- 禁止:只改一端不检查其他端
|
|
||||||
|
|
||||||
**铁律6: 禁止删除源文件(Bug #574 教训)**
|
|
||||||
- 绝对禁止删除项目中已有的 Java/Vue/SQL 源文件
|
|
||||||
- 编译错误 → 修复错误;重复文件 → 重构合并
|
|
||||||
- 唯一例外:明确由人类确认删除的文件
|
|
||||||
|
|
||||||
**铁律7: 禁止修改已有公开方法签名**
|
|
||||||
- 不能删除/重命名已有的 public 方法,不能修改参数列表
|
|
||||||
- 需要新功能 → 添加重载方法;需要改行为 → 修改内部实现
|
|
||||||
|
|
||||||
**铁律8: 验证后才宣称完成(Verification Before Completion)**
|
|
||||||
- **没有跑过验证命令,就不能说"完成了""通过了""没问题"**
|
|
||||||
- 禁止使用"应该可以""大概没问题""看起来正确"
|
|
||||||
- 必须:运行命令 → 读取输出 → 确认结果 → 才能宣称
|
|
||||||
- 这是诚实原则,不是效率问题
|
|
||||||
|
|
||||||
|
|
||||||
**铁律9: 开发前必须审核原有代码(P0 — 铁律)**
|
|
||||||
- **任何新功能开发前,必须先搜索项目中是否已有相关代码**
|
|
||||||
- 搜索路径:Controller / AppService / Service / Mapper / Entity / 前端页面 / API接口
|
|
||||||
- 如果已有部分功能 → 在原有代码基础上**升级优化完善**,禁止另起炉灶
|
|
||||||
- 如果已有接口但前端缺失 → 只补前端,不重复建后端
|
|
||||||
- 如果已有前端但后端缺失 → 只补后端,不重写前端
|
|
||||||
- 搜索命令:`rg -l "关键词" healthlink-his-server/ healthlink-his-ui/src/`
|
|
||||||
- 禁止:不看代码就新建模块、重复实现已有功能、废弃原有代码另写一套
|
|
||||||
|
|
||||||
|
|
||||||
**铁律12: 设计文档确认后自主开发(铁律)**
|
|
||||||
- 设计文档(如 `MD/architecture/GRADE3A_GAP_ANALYSIS_AND_DESIGN.md`)一旦确认,后续开发**必须按文档自主执行**
|
|
||||||
- **禁止反复询问"是否继续""下一步做什么""是否开始"**——直接按计划推进
|
|
||||||
- 每完成一个 Sprint,自动提交推送,然后立即开始下一个 Sprint
|
|
||||||
- 只在遇到**无法解决的阻塞**(如技术选型冲突、需求不明确、第三方依赖不可用)时才暂停询问
|
|
||||||
- 设计文档是"**已签合同**",不是"参考意见"。铁律执行优先级:设计文档 > 人类临时指令 > AI 自行判断
|
|
||||||
|
|
||||||
|
|
||||||
### 🟡 P1 铁律 — 强烈建议
|
|
||||||
|
|
||||||
**铁律9: 先分解再行动**
|
|
||||||
- 修改超过3个文件、涉及多模块、数据库变更,必须先制定计划
|
|
||||||
|
|
||||||
**铁律10: 验证后信**
|
|
||||||
- 每次修改后必须验证编译通过,不信记忆
|
|
||||||
|
|
||||||
**铁律13: 文档统一管理**
|
|
||||||
- 所有文档存储在 `MD/` 目录
|
|
||||||
- 文件名:大写英文+下划线(如 `BACKEND_CHECKLIST.md`)
|
|
||||||
- 文档头部必须包含元数据块(文档类型、版本、日期)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
**铁律14: 设计文档必须包含UI设计和调用流程**
|
|
||||||
- 所有新模块/页面的设计文档必须包含:UI布局描述、交互效果清单、前后端调用流程
|
|
||||||
- 没有明确UI设计的模块,禁止直接编码
|
|
||||||
- 详见
|
|
||||||
- 设计文档必须写清楚:系统调用关系、方法函数调用关系、完整业务流程
|
|
||||||
- 设计文档中每个用户操作必须对应:前端事件 → API调用 → 后端处理链路 → 返回数据 → UI渲染
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 三、Karpathy 编码准则
|
|
||||||
|
|
||||||
> 减少 LLM 常见编码错误。偏向谨慎而非速度。
|
|
||||||
|
|
||||||
### 3.1 先想再写
|
|
||||||
- 明确陈述假设,不确定就问
|
|
||||||
- 多种解读时都列出来,不要默默选一种
|
|
||||||
- 有更简单的方案就说出来,该推回就推回
|
|
||||||
- 不清楚的地方停下来,说清楚哪里不清楚
|
|
||||||
|
|
||||||
### 3.2 简洁优先
|
|
||||||
- 不做没要求的功能,不做一次性代码的抽象
|
|
||||||
- 不加没要求的"灵活性"和"可配置性"
|
|
||||||
- 200 行能 50 行搞定就重写
|
|
||||||
- 自问:"高级工程师会不会觉得这过度设计?"
|
|
||||||
|
|
||||||
### 3.3 精准修改
|
|
||||||
- 只改必须改的,不"顺手改进"相邻代码
|
|
||||||
- 匹配现有代码风格,即使你有不同的偏好
|
|
||||||
- 每行改动都能追溯到用户的请求
|
|
||||||
- 只清理你自己改动产生的无用代码
|
|
||||||
|
|
||||||
### 3.4 目标驱动
|
|
||||||
- 把任务转化为可验证目标
|
|
||||||
- 多步任务声明计划:`[步骤] → 验证: [检查]`
|
|
||||||
- 强验收标准让 Agent 能独立循环,弱标准需要持续澄清
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 四、全链路 6 环分析
|
|
||||||
|
|
||||||
> ⚠️ **涉及数据库字段的 Bug / 需求,必须走完整链路。**
|
|
||||||
|
|
||||||
```
|
|
||||||
前端/页面 → Controller → Service → Mapper → DB/SQL → 关联模块
|
|
||||||
①录入 ②验证 ③业务 ④持久化 ⑤存储 ⑥联动
|
|
||||||
```
|
|
||||||
|
|
||||||
| 环 | 检查内容 |
|
|
||||||
|----|---------|
|
|
||||||
| ① 录入 | 前端有无输入入口(弹窗、表格行编辑、表单) |
|
|
||||||
| ② 验证 | Controller 参数校验、@Valid、权限控制 |
|
|
||||||
| ③ 业务 | Service 业务逻辑、事务边界、多个 Service 实现类入口 |
|
|
||||||
| ④ 持久化 | Mapper XML、DTO 字段映射、类型转换 |
|
|
||||||
| ⑤ 存储 | 数据库表结构、索引、NOT NULL 约束 |
|
|
||||||
| ⑥ 联动 | 上游(医嘱→护士站)、下游(打印、计费、报表)是否同步 |
|
|
||||||
|
|
||||||
**修复后的验证顺序**:
|
|
||||||
1. 数据库:确认状态值已正确写入
|
|
||||||
2. 后端接口:确认返回的状态映射正确
|
|
||||||
3. 前端显示:确认页面显示正确状态文本
|
|
||||||
4. 前端交互:确认按钮/操作基于正确状态启用/禁用
|
|
||||||
5. 统计数据:确认池/报表统计包含新状态
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 五、Harness Engineering 方法论
|
|
||||||
|
|
||||||
> Harness = 约束 + 反馈 + 控制平面 + 持久执行
|
|
||||||
|
|
||||||
### 5.1 四层约束金字塔
|
|
||||||
|
|
||||||
| 层级 | 内容 | 落地方式 |
|
|
||||||
|------|------|---------|
|
|
||||||
| **L1 架构约束** | 接口合约、包结构、命名规范、禁止模式 | 本文件铁律 |
|
|
||||||
| **L2 代码质量** | 圈复杂度、代码风格、类型提示 | 编译门禁 + ESLint |
|
|
||||||
| **L3 安全约束** | 敏感信息检测、权限检查、输入验证 | 配置不可硬编码 |
|
|
||||||
| **L4 业务规则** | 领域逻辑、数据一致性、事务边界 | 全链路 6 环验证 |
|
|
||||||
|
|
||||||
**约束设计原则**:
|
|
||||||
- **可验证**:每条约束必须能被自动化检查("覆盖率>90%"✅ "质量要高"❌)
|
|
||||||
- **无歧义**:"每函数不超过50行"✅ "函数不要太长"❌
|
|
||||||
- **优先级**:安全(1) > 架构(2) > 业务(3) > 质量(4) > 性能(5)
|
|
||||||
- **渐进增强**:L1编译通过 → L2+命名规范 → L3+测试覆盖 → L4+安全扫描
|
|
||||||
|
|
||||||
### 5.2 三层反馈系统
|
|
||||||
|
|
||||||
| 层级 | 速度 | 覆盖范围 | 失败处理 |
|
|
||||||
|------|------|---------|---------|
|
|
||||||
| **L1 编译检查** | <30秒 | 语法、类型、签名 | 立即阻断,自行修复 |
|
|
||||||
| **L2 数据流验证** | <5分钟 | 全链路字段、Mapper XML、DTO | 修复后上报 |
|
|
||||||
| **L3 人工审查** | 10-30分钟 | 架构、设计、业务正确性 | 驳回/指导/批准 |
|
|
||||||
|
|
||||||
**反馈铁律**:
|
|
||||||
- 反馈必须可行动(文件 + 行号 + 错误类型 + 修复方向)
|
|
||||||
- 失败后先回滚到最近检查点,再重试
|
|
||||||
- 持续失败3次 → 上报人类
|
|
||||||
|
|
||||||
### 5.3 控制平面
|
|
||||||
|
|
||||||
```
|
|
||||||
战略层(人类) → 设定目标、审批决策、异常升级
|
|
||||||
战术层(Agent) → 任务分解、update_plan、依赖协调、检查点保存
|
|
||||||
执行层(Agent) → 代码生成、测试执行、错误恢复、幂等重试
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5.4 持久执行
|
|
||||||
|
|
||||||
- 每个关键步骤保存检查点(`update_plan` 进度)
|
|
||||||
- 失败后从最新检查点恢复,不从头开始
|
|
||||||
- 幂等设计:同一操作重复执行结果一致
|
|
||||||
- **三层状态管理**:系统层(工作流ID/超时/重试) → 执行层(当前活动/进度) → 业务层(已完成工作/中间产物)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 六、五层质量门禁
|
|
||||||
|
|
||||||
| 门禁 | 时间 | 范围 | 失败处理 |
|
|
||||||
|------|------|------|---------|
|
|
||||||
| **L1 编译检查** | <30秒 | 语法、类型、导入 | Agent 自行修复 |
|
|
||||||
| **L2 静态分析** | <2分钟 | 代码风格、复杂度、安全 | Agent 修复 |
|
|
||||||
| **L3 单元测试** | <5分钟 | 功能正确性、边界条件 | 自动修复或上报 |
|
|
||||||
| **L4 集成测试** | <15分钟 | 模块间交互、数据流 | 上报人工 |
|
|
||||||
| **L5 生产验证** | 持续 | 监控、告警、性能 | 自动回滚 |
|
|
||||||
|
|
||||||
**提交铁律**:L1-L2 必须通过才能 commit,L3(如有DB变更)必须通过才能 push
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 七、系统化调试(Systematic Debugging)
|
|
||||||
|
|
||||||
> **铁律:没有根因调查,不能提出修复方案。**
|
|
||||||
|
|
||||||
### 四阶段流程
|
|
||||||
|
|
||||||
**阶段1:根因调查**(修复前必须完成)
|
|
||||||
1. 仔细阅读错误信息(堆栈、行号、错误码)
|
|
||||||
2. 稳定复现(能否可靠触发?步骤?每次?)
|
|
||||||
3. 检查最近变更(git diff、新依赖、配置变更)
|
|
||||||
4. 多组件系统:在每个组件边界加诊断日志,定位哪一层断裂
|
|
||||||
5. 追踪数据流:坏值从哪里来?谁调用的?一直追溯到源头
|
|
||||||
|
|
||||||
**阶段2:模式分析**
|
|
||||||
- 找到同代码库中类似的正常工作代码
|
|
||||||
- 逐项对比差异
|
|
||||||
- 理解依赖关系
|
|
||||||
|
|
||||||
**阶段3:假设与测试**
|
|
||||||
- 形成单一假设:"我认为X是根因,因为Y"
|
|
||||||
- 做最小改动测试
|
|
||||||
- 有效 → 阶段4;无效 → 新假设
|
|
||||||
|
|
||||||
**阶段4:实施**
|
|
||||||
- 创建失败测试用例
|
|
||||||
- 修复根因(不是症状)
|
|
||||||
- 验证修复
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 八、后端开发规范
|
|
||||||
|
|
||||||
### 分层架构
|
|
||||||
```
|
|
||||||
Controller → AppService → Service → Mapper → Entity
|
|
||||||
```
|
|
||||||
|
|
||||||
### 命名规范
|
|
||||||
| 类型 | 规则 | 示例 |
|
|
||||||
|------|------|------|
|
|
||||||
| Controller | `XxxController` | `RegistrationController` |
|
|
||||||
| AppService | `IXxxAppService` / `XxxAppServiceImpl` | `IRegistrationAppService` |
|
|
||||||
| Service | `IXxxService` / `XxxServiceImpl` | `IRegistrationService` |
|
|
||||||
| Mapper | `XxxMapper` | `RegistrationMapper` |
|
|
||||||
| Entity | `Xxx` | `Registration` |
|
|
||||||
| DTO | `XxxDto` / `XxxQueryDto` | `RegistrationDto` |
|
|
||||||
|
|
||||||
### 包结构
|
|
||||||
```
|
|
||||||
com.healthlink.his.web.{module}.controller
|
|
||||||
com.healthlink.his.web.{module}.appservice
|
|
||||||
com.healthlink.his.web.{module}.service
|
|
||||||
com.healthlink.his.web.{module}.mapper
|
|
||||||
com.healthlink.his.web.{module}.dto
|
|
||||||
com.healthlink.his.domain.{module}
|
|
||||||
com.healthlink.his.common.enums
|
|
||||||
```
|
|
||||||
|
|
||||||
### 关键约束
|
|
||||||
- 所有查询使用 `LambdaQueryWrapper`,禁止字符串拼接 SQL
|
|
||||||
- `@Transactional(rollbackFor = Exception.class)` 管理事务
|
|
||||||
- 所有接口标注 `@PreAuthorize` 权限控制
|
|
||||||
- 患者敏感信息在日志中脱敏
|
|
||||||
- **扩展功能不修改原有函数签名**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 九、前端开发规范
|
|
||||||
|
|
||||||
### 技术栈
|
|
||||||
- Vue 3 + Vite + Element Plus + Pinia + Axios(基于 RuoYi-Vue3)
|
|
||||||
|
|
||||||
### 目录结构
|
|
||||||
```
|
|
||||||
src/api/{module}/ # API接口
|
|
||||||
src/views/{module}/ # 页面组件
|
|
||||||
src/store/modules/ # Pinia状态管理
|
|
||||||
src/components/ # 公共组件
|
|
||||||
```
|
|
||||||
|
|
||||||
### 关键约束
|
|
||||||
- API前缀:`/healthlink-his/api/v1/`
|
|
||||||
- 路由懒加载:`() => import('@/views/xxx/index.vue')`
|
|
||||||
- 页面使用 `<script setup>` 语法
|
|
||||||
- 按钮权限使用 `v-hasPermi` 指令
|
|
||||||
- `onMounted` 中注册的事件在 `onUnmounted` 中移除
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十、Agent 体系
|
|
||||||
|
|
||||||
### 角色与路由
|
|
||||||
|
|
||||||
| 代号 | 名称 | 角色 | 路由关键词 |
|
|
||||||
|------|------|------|-----------|
|
|
||||||
| liubei | 刘备 | 项目经理 | 协调、分派、异常升级 |
|
|
||||||
| zhugeliang | 诸葛亮 | 架构师 | 分析、路由、设计 |
|
|
||||||
| guanyu | 关羽 | 后端开发 | java, api, spring, service, controller |
|
|
||||||
| zhaoyun | 赵云 | 前端开发 | vue, 界面, 显示, 弹窗, 按钮 |
|
|
||||||
| xunyu | 荀彧 | DBA | 数据库, sql, 迁移, mapper xml |
|
|
||||||
| zhangfei | 张飞 | 测试 | 测试, QA, 回归 |
|
|
||||||
| huatuo | 华佗 | 验收 | 需求验收、质量确认 |
|
|
||||||
| chenlin | 陈琳 | 文档 | 文档、归档、Git提交 |
|
|
||||||
|
|
||||||
### 协作流水线
|
|
||||||
|
|
||||||
```
|
|
||||||
刘备(协调) → 诸葛亮(分析路由) → {关羽|赵云}(修复) → 荀彧(DB审查) → 张飞(测试) → 华佗(验收) → 陈琳(归档)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Bug 修复完整管线(BDT 方法论)
|
|
||||||
|
|
||||||
```
|
|
||||||
获取Bug → 设计测试用例 → 基线测试(应失败) → 全链路修复 → 回归测试(应通过) → 扩展测试(无回归) → 提交
|
|
||||||
```
|
|
||||||
|
|
||||||
### Bug 状态管理铁律
|
|
||||||
- 人类提的 Bug:只加备注,不改状态,不改分配
|
|
||||||
- 智能体提的 Bug:可以改分配和加备注
|
|
||||||
- 已关闭/已解决的 Bug 不再处理
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十一、审查与审计
|
|
||||||
|
|
||||||
### 三层审查体系
|
|
||||||
|
|
||||||
| 层级 | 内容 | 时机 |
|
|
||||||
|------|------|------|
|
|
||||||
| **L1 自审** | Agent 对照约束逐条检查 | 每次提交前 |
|
|
||||||
| **L2 配对审查** | Agent 生成变更摘要,人类终审 | PR/提交时 |
|
|
||||||
| **L3 合规审查** | 审计追踪,记录所有 AI 操作 | 持续 |
|
|
||||||
|
|
||||||
### L1 自审清单
|
|
||||||
```yaml
|
|
||||||
self_review:
|
|
||||||
- "所有修改能通过编译?"
|
|
||||||
- "遵守命名规范?"
|
|
||||||
- "测试覆盖达标?"
|
|
||||||
- "没有遗漏的 TODO / DEBUG?"
|
|
||||||
- "变更范围没超出任务边界?"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 评审评分维度
|
|
||||||
| 维度 | 问题 |
|
|
||||||
|------|------|
|
|
||||||
| 正确性 | 行为是否符合目标功能? |
|
|
||||||
| 验证 | 检查是否真的跑过并留下证据? |
|
|
||||||
| 范围纪律 | 是否保持在选定功能范围内? |
|
|
||||||
| 可靠性 | 结果能否在重启后继续工作? |
|
|
||||||
| 可维护性 | 代码和文档是否清楚到可交接? |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十二、标准工作循环
|
|
||||||
|
|
||||||
```
|
|
||||||
开始会话
|
|
||||||
├→ 1. Init — 读 AGENTS.md + PROGRESS.md + git log
|
|
||||||
├→ 2. Select — 只选一个未完成功能
|
|
||||||
├→ 3. Implement — 一次只做一个,不扩大范围
|
|
||||||
├→ 4. Verify — 运行验证命令,有证据才标记完成
|
|
||||||
└→ 5. Cleanup — 更新进度 + clean-state-checklist + git commit
|
|
||||||
```
|
|
||||||
|
|
||||||
### 会话结束前必须运行 Clean State Checklist
|
|
||||||
```
|
|
||||||
□ 标准启动路径仍然可用
|
|
||||||
□ 标准验证路径仍然可运行
|
|
||||||
□ 当前进度已记录到进度日志
|
|
||||||
□ 无半成品步骤处于未记录状态
|
|
||||||
□ 下一轮会话无需人工修复即可继续
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十三、开发流程
|
|
||||||
|
|
||||||
```
|
|
||||||
收到任务
|
|
||||||
├→ ① 分析需求 → 读相关文档(MD/)、读全链路6环
|
|
||||||
├→ ② 制定计划 → update_plan (3-6个阶段)
|
|
||||||
├→ ③ 后端开发 → Controller → AppService → Service → Mapper → Entity → Flyway
|
|
||||||
├→ ④ 后端测试 → mvn test → 接口测试(业务逻辑验证)
|
|
||||||
├→ ⑤ 前端开发 → API接口 → 页面组件 → 路由配置
|
|
||||||
├→ ⑥ 前端测试 → npm run build:dev → 功能验证
|
|
||||||
├→ ⑦ 质量门禁 → L1编译 → L2测试 → L3DB审查 → L4验收 → L5归档
|
|
||||||
└→ ⑧ 提交代码 → git commit(规范格式) → git push → 文档更新
|
|
||||||
```
|
|
||||||
|
|
||||||
### Git Commit 格式
|
|
||||||
```
|
|
||||||
<type>(<scope>): <subject>
|
|
||||||
|
|
||||||
type: feat|fix|docs|refactor|test|chore
|
|
||||||
scope: 模块名(如 registration, billing, pharmacy)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十四、快速参考命令
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# === 后端 ===
|
|
||||||
export JAVA_HOME=/opt/jdk-25
|
|
||||||
mvn clean compile -DskipTests # 编译
|
|
||||||
mvn install -DskipTests # 构建
|
|
||||||
mvn test -pl healthlink-his-application -Dtest="XxxTest" -Dsurefire.failIfNoSpecifiedTests=false
|
|
||||||
|
|
||||||
# === 前端 ===
|
|
||||||
cd healthlink-his-ui
|
|
||||||
npm run dev && npm run build:dev && npm run lint && npm run test:run
|
|
||||||
|
|
||||||
# === Git ===
|
|
||||||
git status && git add -A && git commit -m "feat(module): desc" && git push origin develop
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十五、详细规范文档索引
|
|
||||||
|
|
||||||
| 文档 | 路径 | 用途 |
|
|
||||||
|------|------|------|
|
|
||||||
| 执行铁律 | `MD/specs/IRON_RULES.md` | 铁律完整版 |
|
|
||||||
| 后端规范 | `MD/specs/BACKEND_DEVELOPMENT_STANDARD.md` | 后端编码标准 |
|
|
||||||
| 前端规范 | `MD/specs/FRONTEND_DEVELOPMENT_STANDARD.md` | 前端编码标准 |
|
|
||||||
| Harness方法论 | `MD/specs/HARNESS_ENGINEERING.md` | 完整Harness+Agent方法论 |
|
|
||||||
| 文档规范 | `MD/DOCUMENTATION_STANDARD.md` | 文档管理标准 |
|
|
||||||
| 后端清单 | `MD/specs/BACKEND_CHECKLIST.md` | 发布前检查 |
|
|
||||||
| 前端清单 | `MD/specs/FRONTEND_CHECKLIST.md` | 发布前检查 |
|
|
||||||
| 三甲标准 | `MD/standards/GRADE3A_HIS_STANDARD.md` | 三甲医院达标标准 |
|
|
||||||
| Flyway指南 | `MD/guides/FLYWAY_USAGE_GUIDE.md` | 数据库迁移指南 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十六、过往教训
|
|
||||||
|
|
||||||
| 教训 | 内容 |
|
|
||||||
|------|------|
|
|
||||||
| 状态链路断裂 | Bug#574: 签到设 BOOKED(1) 而非 CHECKED_IN(3),前端映射缺失 → 必须走完整状态链路 |
|
|
||||||
| 盲删源文件 | AI 看到编译错误直接删文件,没检查 baseline → 必须先确认文件来源 |
|
|
||||||
| 修复方向偏差 | 多次 fallback 改的是错误的 Service → 必须用 rg 搜索所有相关代码路径 |
|
|
||||||
| bug_reports 缺列 | INSERT 静默失败 → 必须检查表结构 |
|
|
||||||
| 禅道 comment API | API 不存在,用 resolve+activate workaround |
|
|
||||||
| SQLite WAL 并发 | 多进程并发写需要 checkpoint |
|
|
||||||
| UTF-8 切片 | 多字节字符不能用 byte index 切片 |
|
|
||||||
| 上下文焦虑 | Agent 感觉上下文快满时会匆忙结束,跳过验证 → 注意 context 40% 阈值 |
|
|
||||||
| 过早宣告胜利 | 自评≠验证,分开"干活"和"检查" |
|
|
||||||
| 覆盖率幻觉 | 覆盖率达标但逻辑没测 → 引入变异测试 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> ⚠️ 本文件是 AI 开发规范的唯一信源。各工具配置文件由 `bash scripts/sync-ai-rules.sh` 同步。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> 📅 最后同步: 2026-06-06 15:09 | 源文件: RULES.md | 重新同步: `bash scripts/sync-ai-rules.sh`
|
|
||||||
501
.gitignore
vendored
501
.gitignore
vendored
@@ -1,436 +1,65 @@
|
|||||||
/.vscode/mcp.json
|
# 忽略所有编译器、IDE相关的文件
|
||||||
/.vscode/settings.json
|
**/.idea/
|
||||||
/.qwen/settings.json.orig
|
**/.vscode/
|
||||||
/.playwright-mcp/console-2026-03-31T08-27-30-883Z.log
|
**/*.swp
|
||||||
/.playwright-mcp/console-2026-05-19T03-10-43-600Z.log
|
**/*.swo
|
||||||
/.playwright-mcp/console-2026-05-19T03-18-23-396Z.log
|
**/*.bak
|
||||||
/.playwright-mcp/console-2026-05-19T03-18-51-946Z.log
|
**/*.tmp
|
||||||
/.playwright-mcp/page-2026-05-11T02-56-22-027Z.yml
|
**/.vs/
|
||||||
/.playwright-mcp/page-2026-05-11T02-56-30-095Z.yml
|
|
||||||
/.playwright-mcp/page-2026-05-19T03-10-44-171Z.yml
|
# 忽略 Java 项目编译文件
|
||||||
/.playwright-mcp/page-2026-05-19T03-11-20-520Z.yml
|
**/*.class
|
||||||
/.playwright-mcp/page-2026-05-19T03-11-40-168Z.yml
|
**/*.jar
|
||||||
/.playwright-mcp/page-2026-05-19T03-12-10-968Z.yml
|
**/*.war
|
||||||
/.playwright-mcp/page-2026-05-19T03-18-23-610Z.yml
|
**/*.ear
|
||||||
/.playwright-mcp/page-2026-05-19T03-18-52-634Z.yml
|
**/target/
|
||||||
/.playwright-mcp/page-2026-05-19T03-19-19-472Z.yml
|
**/bin/
|
||||||
/.playwright-mcp/page-2026-05-19T03-19-36-669Z.yml
|
|
||||||
/.playwright-mcp/page-2026-05-19T03-20-04-342Z.yml
|
# 忽略 Maven、Gradle、Ant 相关文件
|
||||||
/.playwright-mcp/page-2026-05-19T03-21-08-820Z.yml
|
**/.mvn/
|
||||||
/.playwright-mcp/page-2026-05-19T03-21-43-735Z.yml
|
**/.gradle/
|
||||||
/.idea/compiler.xml
|
**/build/
|
||||||
/.idea/encodings.xml
|
**/out/
|
||||||
/.idea/jarRepositories.xml
|
|
||||||
/.idea/misc.xml
|
# 忽略 Eclipse、IntelliJ IDEA 和 NetBeans 临时文件
|
||||||
/.idea/vcs.xml
|
**/*.log
|
||||||
/.idea/workspace.xml
|
**/*.project
|
||||||
/node_modules/.bin/husky
|
**/*.classpath
|
||||||
/node_modules/.bin/husky.cmd
|
|
||||||
/node_modules/.bin/husky.ps1
|
# 忽略 Java 配置文件
|
||||||
/node_modules/asynckit/lib/abort.js
|
**/*.iml
|
||||||
/node_modules/asynckit/lib/async.js
|
|
||||||
/node_modules/asynckit/lib/defer.js
|
# 忽略 Node.js 和 Vue 项目相关文件
|
||||||
/node_modules/asynckit/lib/iterate.js
|
**/node_modules/
|
||||||
/node_modules/asynckit/lib/readable_asynckit.js
|
**/npm-debug.log
|
||||||
/node_modules/asynckit/lib/readable_parallel.js
|
**/yarn-error.log
|
||||||
/node_modules/asynckit/lib/readable_serial.js
|
**/yarn-debug.log
|
||||||
/node_modules/asynckit/lib/readable_serial_ordered.js
|
**/dist/
|
||||||
/node_modules/asynckit/lib/state.js
|
**/*.lock
|
||||||
/node_modules/asynckit/lib/streamify.js
|
**/*.tgz
|
||||||
/node_modules/asynckit/lib/terminator.js
|
|
||||||
/node_modules/asynckit/bench.js
|
# 忽略 Vue 项目相关构建文件
|
||||||
/node_modules/asynckit/index.js
|
**/.vuepress/dist/
|
||||||
/node_modules/asynckit/LICENSE
|
|
||||||
/node_modules/asynckit/package.json
|
# 忽略 IDE 配置文件
|
||||||
/node_modules/asynckit/parallel.js
|
**/*.launch
|
||||||
/node_modules/asynckit/README.md
|
**/*.settings/
|
||||||
/node_modules/asynckit/serial.js
|
|
||||||
/node_modules/asynckit/serialOrdered.js
|
# 忽略操作系统生成的文件
|
||||||
/node_modules/asynckit/stream.js
|
**/.DS_Store
|
||||||
/node_modules/axios/dist/browser/axios.cjs
|
**/Thumbs.db
|
||||||
/node_modules/axios/dist/esm/axios.js
|
**/Desktop.ini
|
||||||
/node_modules/axios/dist/esm/axios.min.js
|
|
||||||
/node_modules/axios/dist/esm/axios.min.js.map
|
|
||||||
/node_modules/axios/dist/node/axios.cjs
|
|
||||||
/node_modules/axios/dist/axios.js
|
/openhis-miniapp/unpackage
|
||||||
/node_modules/axios/dist/axios.min.js
|
|
||||||
/node_modules/axios/dist/axios.min.js.map
|
# 忽略设计书
|
||||||
/node_modules/axios/lib/adapters/adapters.js
|
PostgreSQL/openHis_DB设计书.xlsx
|
||||||
/node_modules/axios/lib/adapters/fetch.js
|
|
||||||
/node_modules/axios/lib/adapters/http.js
|
public.sql
|
||||||
/node_modules/axios/lib/adapters/README.md
|
发版记录/2025-11-12/~$发版日志.docx
|
||||||
/node_modules/axios/lib/adapters/xhr.js
|
发版记录/2025-11-12/~$S-管理系统-调价管理.docx
|
||||||
/node_modules/axios/lib/cancel/CanceledError.js
|
发版记录/2025-11-12/发版日志.docx
|
||||||
/node_modules/axios/lib/cancel/CancelToken.js
|
.gitignore
|
||||||
/node_modules/axios/lib/cancel/isCancel.js
|
openhis-server-new/openhis-application/src/main/resources/application-dev.yml
|
||||||
/node_modules/axios/lib/core/Axios.js
|
|
||||||
/node_modules/axios/lib/core/AxiosError.js
|
|
||||||
/node_modules/axios/lib/core/AxiosHeaders.js
|
|
||||||
/node_modules/axios/lib/core/buildFullPath.js
|
|
||||||
/node_modules/axios/lib/core/dispatchRequest.js
|
|
||||||
/node_modules/axios/lib/core/InterceptorManager.js
|
|
||||||
/node_modules/axios/lib/core/mergeConfig.js
|
|
||||||
/node_modules/axios/lib/core/README.md
|
|
||||||
/node_modules/axios/lib/core/settle.js
|
|
||||||
/node_modules/axios/lib/core/transformData.js
|
|
||||||
/node_modules/axios/lib/defaults/index.js
|
|
||||||
/node_modules/axios/lib/defaults/transitional.js
|
|
||||||
/node_modules/axios/lib/env/classes/FormData.js
|
|
||||||
/node_modules/axios/lib/env/data.js
|
|
||||||
/node_modules/axios/lib/env/README.md
|
|
||||||
/node_modules/axios/lib/helpers/AxiosTransformStream.js
|
|
||||||
/node_modules/axios/lib/helpers/AxiosURLSearchParams.js
|
|
||||||
/node_modules/axios/lib/helpers/bind.js
|
|
||||||
/node_modules/axios/lib/helpers/buildURL.js
|
|
||||||
/node_modules/axios/lib/helpers/callbackify.js
|
|
||||||
/node_modules/axios/lib/helpers/combineURLs.js
|
|
||||||
/node_modules/axios/lib/helpers/composeSignals.js
|
|
||||||
/node_modules/axios/lib/helpers/cookies.js
|
|
||||||
/node_modules/axios/lib/helpers/deprecatedMethod.js
|
|
||||||
/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js
|
|
||||||
/node_modules/axios/lib/helpers/formDataToJSON.js
|
|
||||||
/node_modules/axios/lib/helpers/formDataToStream.js
|
|
||||||
/node_modules/axios/lib/helpers/fromDataURI.js
|
|
||||||
/node_modules/axios/lib/helpers/HttpStatusCode.js
|
|
||||||
/node_modules/axios/lib/helpers/isAbsoluteURL.js
|
|
||||||
/node_modules/axios/lib/helpers/isAxiosError.js
|
|
||||||
/node_modules/axios/lib/helpers/isURLSameOrigin.js
|
|
||||||
/node_modules/axios/lib/helpers/null.js
|
|
||||||
/node_modules/axios/lib/helpers/parseHeaders.js
|
|
||||||
/node_modules/axios/lib/helpers/parseProtocol.js
|
|
||||||
/node_modules/axios/lib/helpers/progressEventReducer.js
|
|
||||||
/node_modules/axios/lib/helpers/readBlob.js
|
|
||||||
/node_modules/axios/lib/helpers/README.md
|
|
||||||
/node_modules/axios/lib/helpers/resolveConfig.js
|
|
||||||
/node_modules/axios/lib/helpers/speedometer.js
|
|
||||||
/node_modules/axios/lib/helpers/spread.js
|
|
||||||
/node_modules/axios/lib/helpers/throttle.js
|
|
||||||
/node_modules/axios/lib/helpers/toFormData.js
|
|
||||||
/node_modules/axios/lib/helpers/toURLEncodedForm.js
|
|
||||||
/node_modules/axios/lib/helpers/trackStream.js
|
|
||||||
/node_modules/axios/lib/helpers/validator.js
|
|
||||||
/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js
|
|
||||||
/node_modules/axios/lib/platform/browser/classes/Blob.js
|
|
||||||
/node_modules/axios/lib/platform/browser/classes/FormData.js
|
|
||||||
/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js
|
|
||||||
/node_modules/axios/lib/platform/browser/index.js
|
|
||||||
/node_modules/axios/lib/platform/common/utils.js
|
|
||||||
/node_modules/axios/lib/platform/node/classes/FormData.js
|
|
||||||
/node_modules/axios/lib/platform/node/classes/URLSearchParams.js
|
|
||||||
/node_modules/axios/lib/platform/node/index.js
|
|
||||||
/node_modules/axios/lib/platform/index.js
|
|
||||||
/node_modules/axios/lib/axios.js
|
|
||||||
/node_modules/axios/lib/utils.js
|
|
||||||
/node_modules/axios/CHANGELOG.md
|
|
||||||
/node_modules/axios/index.d.cts
|
|
||||||
/node_modules/axios/index.d.ts
|
|
||||||
/node_modules/axios/index.js
|
|
||||||
/node_modules/axios/LICENSE
|
|
||||||
/node_modules/axios/MIGRATION_GUIDE.md
|
|
||||||
/node_modules/axios/package.json
|
|
||||||
/node_modules/axios/README.md
|
|
||||||
/node_modules/bignumber.js/doc/API.html
|
|
||||||
/node_modules/bignumber.js/bignumber.d.mts
|
|
||||||
/node_modules/bignumber.js/bignumber.d.ts
|
|
||||||
/node_modules/bignumber.js/bignumber.js
|
|
||||||
/node_modules/bignumber.js/bignumber.mjs
|
|
||||||
/node_modules/bignumber.js/CHANGELOG.md
|
|
||||||
/node_modules/bignumber.js/LICENCE.md
|
|
||||||
/node_modules/bignumber.js/package.json
|
|
||||||
/node_modules/bignumber.js/README.md
|
|
||||||
/node_modules/bignumber.js/types.d.ts
|
|
||||||
/node_modules/call-bind-apply-helpers/.github/FUNDING.yml
|
|
||||||
/node_modules/call-bind-apply-helpers/test/index.js
|
|
||||||
/node_modules/call-bind-apply-helpers/.eslintrc
|
|
||||||
/node_modules/call-bind-apply-helpers/.nycrc
|
|
||||||
/node_modules/call-bind-apply-helpers/actualApply.d.ts
|
|
||||||
/node_modules/call-bind-apply-helpers/actualApply.js
|
|
||||||
/node_modules/call-bind-apply-helpers/applyBind.d.ts
|
|
||||||
/node_modules/call-bind-apply-helpers/applyBind.js
|
|
||||||
/node_modules/call-bind-apply-helpers/CHANGELOG.md
|
|
||||||
/node_modules/call-bind-apply-helpers/functionApply.d.ts
|
|
||||||
/node_modules/call-bind-apply-helpers/functionApply.js
|
|
||||||
/node_modules/call-bind-apply-helpers/functionCall.d.ts
|
|
||||||
/node_modules/call-bind-apply-helpers/functionCall.js
|
|
||||||
/node_modules/call-bind-apply-helpers/index.d.ts
|
|
||||||
/node_modules/call-bind-apply-helpers/index.js
|
|
||||||
/node_modules/call-bind-apply-helpers/LICENSE
|
|
||||||
/node_modules/call-bind-apply-helpers/package.json
|
|
||||||
/node_modules/call-bind-apply-helpers/README.md
|
|
||||||
/node_modules/call-bind-apply-helpers/reflectApply.d.ts
|
|
||||||
/node_modules/call-bind-apply-helpers/reflectApply.js
|
|
||||||
/node_modules/call-bind-apply-helpers/tsconfig.json
|
|
||||||
/node_modules/combined-stream/lib/combined_stream.js
|
|
||||||
/node_modules/combined-stream/License
|
|
||||||
/node_modules/combined-stream/package.json
|
|
||||||
/node_modules/combined-stream/Readme.md
|
|
||||||
/node_modules/combined-stream/yarn.lock
|
|
||||||
/node_modules/delayed-stream/lib/delayed_stream.js
|
|
||||||
/node_modules/delayed-stream/.npmignore
|
|
||||||
/node_modules/delayed-stream/License
|
|
||||||
/node_modules/delayed-stream/Makefile
|
|
||||||
/node_modules/delayed-stream/package.json
|
|
||||||
/node_modules/delayed-stream/Readme.md
|
|
||||||
/node_modules/dunder-proto/.github/FUNDING.yml
|
|
||||||
/node_modules/dunder-proto/test/get.js
|
|
||||||
/node_modules/dunder-proto/test/index.js
|
|
||||||
/node_modules/dunder-proto/test/set.js
|
|
||||||
/node_modules/dunder-proto/.eslintrc
|
|
||||||
/node_modules/dunder-proto/.nycrc
|
|
||||||
/node_modules/dunder-proto/CHANGELOG.md
|
|
||||||
/node_modules/dunder-proto/get.d.ts
|
|
||||||
/node_modules/dunder-proto/get.js
|
|
||||||
/node_modules/dunder-proto/LICENSE
|
|
||||||
/node_modules/dunder-proto/package.json
|
|
||||||
/node_modules/dunder-proto/README.md
|
|
||||||
/node_modules/dunder-proto/set.d.ts
|
|
||||||
/node_modules/dunder-proto/set.js
|
|
||||||
/node_modules/dunder-proto/tsconfig.json
|
|
||||||
/node_modules/es-define-property/.github/FUNDING.yml
|
|
||||||
/node_modules/es-define-property/test/index.js
|
|
||||||
/node_modules/es-define-property/.eslintrc
|
|
||||||
/node_modules/es-define-property/.nycrc
|
|
||||||
/node_modules/es-define-property/CHANGELOG.md
|
|
||||||
/node_modules/es-define-property/index.d.ts
|
|
||||||
/node_modules/es-define-property/index.js
|
|
||||||
/node_modules/es-define-property/LICENSE
|
|
||||||
/node_modules/es-define-property/package.json
|
|
||||||
/node_modules/es-define-property/README.md
|
|
||||||
/node_modules/es-define-property/tsconfig.json
|
|
||||||
/node_modules/es-errors/.github/FUNDING.yml
|
|
||||||
/node_modules/es-errors/test/index.js
|
|
||||||
/node_modules/es-errors/.eslintrc
|
|
||||||
/node_modules/es-errors/CHANGELOG.md
|
|
||||||
/node_modules/es-errors/eval.d.ts
|
|
||||||
/node_modules/es-errors/eval.js
|
|
||||||
/node_modules/es-errors/index.d.ts
|
|
||||||
/node_modules/es-errors/index.js
|
|
||||||
/node_modules/es-errors/LICENSE
|
|
||||||
/node_modules/es-errors/package.json
|
|
||||||
/node_modules/es-errors/range.d.ts
|
|
||||||
/node_modules/es-errors/range.js
|
|
||||||
/node_modules/es-errors/README.md
|
|
||||||
/node_modules/es-errors/ref.d.ts
|
|
||||||
/node_modules/es-errors/ref.js
|
|
||||||
/node_modules/es-errors/syntax.d.ts
|
|
||||||
/node_modules/es-errors/syntax.js
|
|
||||||
/node_modules/es-errors/tsconfig.json
|
|
||||||
/node_modules/es-errors/type.d.ts
|
|
||||||
/node_modules/es-errors/type.js
|
|
||||||
/node_modules/es-errors/uri.d.ts
|
|
||||||
/node_modules/es-errors/uri.js
|
|
||||||
/node_modules/es-object-atoms/.github/FUNDING.yml
|
|
||||||
/node_modules/es-object-atoms/test/index.js
|
|
||||||
/node_modules/es-object-atoms/.eslintrc
|
|
||||||
/node_modules/es-object-atoms/CHANGELOG.md
|
|
||||||
/node_modules/es-object-atoms/index.d.ts
|
|
||||||
/node_modules/es-object-atoms/index.js
|
|
||||||
/node_modules/es-object-atoms/isObject.d.ts
|
|
||||||
/node_modules/es-object-atoms/isObject.js
|
|
||||||
/node_modules/es-object-atoms/LICENSE
|
|
||||||
/node_modules/es-object-atoms/package.json
|
|
||||||
/node_modules/es-object-atoms/README.md
|
|
||||||
/node_modules/es-object-atoms/RequireObjectCoercible.d.ts
|
|
||||||
/node_modules/es-object-atoms/RequireObjectCoercible.js
|
|
||||||
/node_modules/es-object-atoms/ToObject.d.ts
|
|
||||||
/node_modules/es-object-atoms/ToObject.js
|
|
||||||
/node_modules/es-object-atoms/tsconfig.json
|
|
||||||
/node_modules/es-set-tostringtag/test/index.js
|
|
||||||
/node_modules/es-set-tostringtag/.eslintrc
|
|
||||||
/node_modules/es-set-tostringtag/.nycrc
|
|
||||||
/node_modules/es-set-tostringtag/CHANGELOG.md
|
|
||||||
/node_modules/es-set-tostringtag/index.d.ts
|
|
||||||
/node_modules/es-set-tostringtag/index.js
|
|
||||||
/node_modules/es-set-tostringtag/LICENSE
|
|
||||||
/node_modules/es-set-tostringtag/package.json
|
|
||||||
/node_modules/es-set-tostringtag/README.md
|
|
||||||
/node_modules/es-set-tostringtag/tsconfig.json
|
|
||||||
/node_modules/follow-redirects/debug.js
|
|
||||||
/node_modules/follow-redirects/http.js
|
|
||||||
/node_modules/follow-redirects/https.js
|
|
||||||
/node_modules/follow-redirects/index.js
|
|
||||||
/node_modules/follow-redirects/LICENSE
|
|
||||||
/node_modules/follow-redirects/package.json
|
|
||||||
/node_modules/follow-redirects/README.md
|
|
||||||
/node_modules/form-data/lib/browser.js
|
|
||||||
/node_modules/form-data/lib/form_data.js
|
|
||||||
/node_modules/form-data/lib/populate.js
|
|
||||||
/node_modules/form-data/CHANGELOG.md
|
|
||||||
/node_modules/form-data/index.d.ts
|
|
||||||
/node_modules/form-data/License
|
|
||||||
/node_modules/form-data/package.json
|
|
||||||
/node_modules/form-data/README.md
|
|
||||||
/node_modules/function-bind/.github/FUNDING.yml
|
|
||||||
/node_modules/function-bind/.github/SECURITY.md
|
|
||||||
/node_modules/function-bind/test/.eslintrc
|
|
||||||
/node_modules/function-bind/test/index.js
|
|
||||||
/node_modules/function-bind/.eslintrc
|
|
||||||
/node_modules/function-bind/.nycrc
|
|
||||||
/node_modules/function-bind/CHANGELOG.md
|
|
||||||
/node_modules/function-bind/implementation.js
|
|
||||||
/node_modules/function-bind/index.js
|
|
||||||
/node_modules/function-bind/LICENSE
|
|
||||||
/node_modules/function-bind/package.json
|
|
||||||
/node_modules/function-bind/README.md
|
|
||||||
/node_modules/get-intrinsic/.github/FUNDING.yml
|
|
||||||
/node_modules/get-intrinsic/test/GetIntrinsic.js
|
|
||||||
/node_modules/get-intrinsic/.eslintrc
|
|
||||||
/node_modules/get-intrinsic/.nycrc
|
|
||||||
/node_modules/get-intrinsic/CHANGELOG.md
|
|
||||||
/node_modules/get-intrinsic/index.js
|
|
||||||
/node_modules/get-intrinsic/LICENSE
|
|
||||||
/node_modules/get-intrinsic/package.json
|
|
||||||
/node_modules/get-intrinsic/README.md
|
|
||||||
/node_modules/get-proto/.github/FUNDING.yml
|
|
||||||
/node_modules/get-proto/test/index.js
|
|
||||||
/node_modules/get-proto/.eslintrc
|
|
||||||
/node_modules/get-proto/.nycrc
|
|
||||||
/node_modules/get-proto/CHANGELOG.md
|
|
||||||
/node_modules/get-proto/index.d.ts
|
|
||||||
/node_modules/get-proto/index.js
|
|
||||||
/node_modules/get-proto/LICENSE
|
|
||||||
/node_modules/get-proto/Object.getPrototypeOf.d.ts
|
|
||||||
/node_modules/get-proto/Object.getPrototypeOf.js
|
|
||||||
/node_modules/get-proto/package.json
|
|
||||||
/node_modules/get-proto/README.md
|
|
||||||
/node_modules/get-proto/Reflect.getPrototypeOf.d.ts
|
|
||||||
/node_modules/get-proto/Reflect.getPrototypeOf.js
|
|
||||||
/node_modules/get-proto/tsconfig.json
|
|
||||||
/node_modules/gopd/.github/FUNDING.yml
|
|
||||||
/node_modules/gopd/test/index.js
|
|
||||||
/node_modules/gopd/.eslintrc
|
|
||||||
/node_modules/gopd/CHANGELOG.md
|
|
||||||
/node_modules/gopd/gOPD.d.ts
|
|
||||||
/node_modules/gopd/gOPD.js
|
|
||||||
/node_modules/gopd/index.d.ts
|
|
||||||
/node_modules/gopd/index.js
|
|
||||||
/node_modules/gopd/LICENSE
|
|
||||||
/node_modules/gopd/package.json
|
|
||||||
/node_modules/gopd/README.md
|
|
||||||
/node_modules/gopd/tsconfig.json
|
|
||||||
/node_modules/has-symbols/.github/FUNDING.yml
|
|
||||||
/node_modules/has-symbols/test/shams/core-js.js
|
|
||||||
/node_modules/has-symbols/test/shams/get-own-property-symbols.js
|
|
||||||
/node_modules/has-symbols/test/index.js
|
|
||||||
/node_modules/has-symbols/test/tests.js
|
|
||||||
/node_modules/has-symbols/.eslintrc
|
|
||||||
/node_modules/has-symbols/.nycrc
|
|
||||||
/node_modules/has-symbols/CHANGELOG.md
|
|
||||||
/node_modules/has-symbols/index.d.ts
|
|
||||||
/node_modules/has-symbols/index.js
|
|
||||||
/node_modules/has-symbols/LICENSE
|
|
||||||
/node_modules/has-symbols/package.json
|
|
||||||
/node_modules/has-symbols/README.md
|
|
||||||
/node_modules/has-symbols/shams.d.ts
|
|
||||||
/node_modules/has-symbols/shams.js
|
|
||||||
/node_modules/has-symbols/tsconfig.json
|
|
||||||
/node_modules/has-tostringtag/.github/FUNDING.yml
|
|
||||||
/node_modules/has-tostringtag/test/shams/core-js.js
|
|
||||||
/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js
|
|
||||||
/node_modules/has-tostringtag/test/index.js
|
|
||||||
/node_modules/has-tostringtag/test/tests.js
|
|
||||||
/node_modules/has-tostringtag/.eslintrc
|
|
||||||
/node_modules/has-tostringtag/.nycrc
|
|
||||||
/node_modules/has-tostringtag/CHANGELOG.md
|
|
||||||
/node_modules/has-tostringtag/index.d.ts
|
|
||||||
/node_modules/has-tostringtag/index.js
|
|
||||||
/node_modules/has-tostringtag/LICENSE
|
|
||||||
/node_modules/has-tostringtag/package.json
|
|
||||||
/node_modules/has-tostringtag/README.md
|
|
||||||
/node_modules/has-tostringtag/shams.d.ts
|
|
||||||
/node_modules/has-tostringtag/shams.js
|
|
||||||
/node_modules/has-tostringtag/tsconfig.json
|
|
||||||
/node_modules/hasown/.github/FUNDING.yml
|
|
||||||
/node_modules/hasown/.nycrc
|
|
||||||
/node_modules/hasown/CHANGELOG.md
|
|
||||||
/node_modules/hasown/index.d.ts
|
|
||||||
/node_modules/hasown/index.js
|
|
||||||
/node_modules/hasown/LICENSE
|
|
||||||
/node_modules/hasown/package.json
|
|
||||||
/node_modules/hasown/README.md
|
|
||||||
/node_modules/hasown/tsconfig.json
|
|
||||||
/node_modules/husky/bin.js
|
|
||||||
/node_modules/husky/husky
|
|
||||||
/node_modules/husky/index.d.ts
|
|
||||||
/node_modules/husky/index.js
|
|
||||||
/node_modules/husky/LICENSE
|
|
||||||
/node_modules/husky/package.json
|
|
||||||
/node_modules/husky/README.md
|
|
||||||
/node_modules/json-bigint/lib/parse.js
|
|
||||||
/node_modules/json-bigint/lib/stringify.js
|
|
||||||
/node_modules/json-bigint/index.js
|
|
||||||
/node_modules/json-bigint/LICENSE
|
|
||||||
/node_modules/json-bigint/package.json
|
|
||||||
/node_modules/json-bigint/README.md
|
|
||||||
/node_modules/math-intrinsics/.github/FUNDING.yml
|
|
||||||
/node_modules/math-intrinsics/constants/maxArrayLength.d.ts
|
|
||||||
/node_modules/math-intrinsics/constants/maxArrayLength.js
|
|
||||||
/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts
|
|
||||||
/node_modules/math-intrinsics/constants/maxSafeInteger.js
|
|
||||||
/node_modules/math-intrinsics/constants/maxValue.d.ts
|
|
||||||
/node_modules/math-intrinsics/constants/maxValue.js
|
|
||||||
/node_modules/math-intrinsics/test/index.js
|
|
||||||
/node_modules/math-intrinsics/.eslintrc
|
|
||||||
/node_modules/math-intrinsics/abs.d.ts
|
|
||||||
/node_modules/math-intrinsics/abs.js
|
|
||||||
/node_modules/math-intrinsics/CHANGELOG.md
|
|
||||||
/node_modules/math-intrinsics/floor.d.ts
|
|
||||||
/node_modules/math-intrinsics/floor.js
|
|
||||||
/node_modules/math-intrinsics/isFinite.d.ts
|
|
||||||
/node_modules/math-intrinsics/isFinite.js
|
|
||||||
/node_modules/math-intrinsics/isInteger.d.ts
|
|
||||||
/node_modules/math-intrinsics/isInteger.js
|
|
||||||
/node_modules/math-intrinsics/isNaN.d.ts
|
|
||||||
/node_modules/math-intrinsics/isNaN.js
|
|
||||||
/node_modules/math-intrinsics/isNegativeZero.d.ts
|
|
||||||
/node_modules/math-intrinsics/isNegativeZero.js
|
|
||||||
/node_modules/math-intrinsics/LICENSE
|
|
||||||
/node_modules/math-intrinsics/max.d.ts
|
|
||||||
/node_modules/math-intrinsics/max.js
|
|
||||||
/node_modules/math-intrinsics/min.d.ts
|
|
||||||
/node_modules/math-intrinsics/min.js
|
|
||||||
/node_modules/math-intrinsics/mod.d.ts
|
|
||||||
/node_modules/math-intrinsics/mod.js
|
|
||||||
/node_modules/math-intrinsics/package.json
|
|
||||||
/node_modules/math-intrinsics/pow.d.ts
|
|
||||||
/node_modules/math-intrinsics/pow.js
|
|
||||||
/node_modules/math-intrinsics/README.md
|
|
||||||
/node_modules/math-intrinsics/round.d.ts
|
|
||||||
/node_modules/math-intrinsics/round.js
|
|
||||||
/node_modules/math-intrinsics/sign.d.ts
|
|
||||||
/node_modules/math-intrinsics/sign.js
|
|
||||||
/node_modules/math-intrinsics/tsconfig.json
|
|
||||||
/node_modules/mime-db/db.json
|
|
||||||
/node_modules/mime-db/HISTORY.md
|
|
||||||
/node_modules/mime-db/index.js
|
|
||||||
/node_modules/mime-db/LICENSE
|
|
||||||
/node_modules/mime-db/package.json
|
|
||||||
/node_modules/mime-db/README.md
|
|
||||||
/node_modules/mime-types/HISTORY.md
|
|
||||||
/node_modules/mime-types/index.js
|
|
||||||
/node_modules/mime-types/LICENSE
|
|
||||||
/node_modules/mime-types/package.json
|
|
||||||
/node_modules/mime-types/README.md
|
|
||||||
/node_modules/proxy-from-env/index.js
|
|
||||||
/node_modules/proxy-from-env/LICENSE
|
|
||||||
/node_modules/proxy-from-env/package.json
|
|
||||||
/node_modules/proxy-from-env/README.md
|
|
||||||
/node_modules/.package-lock.json
|
|
||||||
/.idea/shelf/在进行更新之前于_2026_6_5_16_37_取消提交了更改_[更改]/shelved.patch
|
|
||||||
/.idea/shelf/在进行更新之前于_2026_6_6_07_53_取消提交了更改_[更改]/shelved.patch
|
|
||||||
/.idea/shelf/在进行更新之前于_2026_6_6_07_58_取消提交了更改_[更改]/shelved.patch
|
|
||||||
/.idea/shelf/在进行更新之前于_2026_6_6_09_03_取消提交了更改_[更改]/shelved.patch
|
|
||||||
/.idea/shelf/在进行更新之前于_2026_6_6_09_07_取消提交了更改_[更改]/shelved.patch
|
|
||||||
/.idea/shelf/在进行更新之前于_2026_6_6_09_17_取消提交了更改_[更改]/shelved.patch
|
|
||||||
/.idea/shelf/_2026_6_5_16_37____.xml
|
|
||||||
/.idea/shelf/_2026_6_6_07_53____.xml
|
|
||||||
/.idea/shelf/_2026_6_6_07_58____.xml
|
|
||||||
/.idea/shelf/_2026_6_6_09_03____.xml
|
|
||||||
/.idea/shelf/_2026_6_6_09_07____.xml
|
|
||||||
/.idea/shelf/_2026_6_6_09_17____.xml
|
|
||||||
/.idea/shelf/在进行更新之前于_2026_6_5_16_37_取消提交了更改_[更改]/shelved.patch
|
|
||||||
/.idea/shelf/在进行更新之前于_2026_6_6_07_53_取消提交了更改_[更改]/shelved.patch
|
|
||||||
/.idea/shelf/在进行更新之前于_2026_6_6_07_58_取消提交了更改_[更改]/shelved.patch
|
|
||||||
/.idea/shelf/在进行更新之前于_2026_6_6_09_03_取消提交了更改_[更改]/shelved.patch
|
|
||||||
/.idea/shelf/在进行更新之前于_2026_6_6_09_07_取消提交了更改_[更改]/shelved.patch
|
|
||||||
/.idea/shelf/在进行更新之前于_2026_6_6_09_17_取消提交了更改_[更改]/shelved.patch
|
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
# 进度日志
|
|
||||||
|
|
||||||
## 当前已验证状态
|
|
||||||
|
|
||||||
- 仓库根目录:`/root/.openclaw/workspace/his-repo`
|
|
||||||
- 分支:`develop`
|
|
||||||
- 标准启动路径:`cd healthlink-his-server && mvn compile -pl healthlink-his-application -am`
|
|
||||||
- 标准验证路径:`bash .harness/check.sh`(一键全部门禁)
|
|
||||||
- 标准初始化:`bash .harness/init.sh`
|
|
||||||
- 标准作业流程:`.harness/STANDARD_OPERATING_PROCEDURE.md`
|
|
||||||
- 当前最高优先级未完成功能:`harness-003` — 持续完善 check.sh
|
|
||||||
- 当前 blocker:无
|
|
||||||
|
|
||||||
## 会话记录
|
|
||||||
|
|
||||||
### Session 001 (2026-05-28) — 基础设施 v1
|
|
||||||
- 已完成:AGENTS.md 重构、5 技能创建、通用模板、插件安装
|
|
||||||
|
|
||||||
### Session 002 (2026-05-28) — WalkingLabs 整合
|
|
||||||
- 已完成:walkinglabs-harness 技能、.harness/ 模板、AGENTS.md v2、check.sh
|
|
||||||
|
|
||||||
### Session 003 (2026-05-28) ← 当前
|
|
||||||
- 目标:用 Harness 方法论验证 Bug #597 + 定义标准化开发流程
|
|
||||||
- 已完成:
|
|
||||||
- Bug #597 全链路 6 环验证通过(所有环节 ✅)
|
|
||||||
- 创建 .harness/STANDARD_OPERATING_PROCEDURE.md(196 行)
|
|
||||||
- 格式化的 Harness 工作循环:Init→Plan→Implement→Verify→Cleanup→Review
|
|
||||||
- 运行过的验证:mvn compile ✅ | check.sh 7/7 ✅ | 全链路 6/6 ✅
|
|
||||||
- 提交记录:
|
|
||||||
- 已知风险或未解决问题:
|
|
||||||
- 下一步最佳动作:无 — 所有基础设施已完成
|
|
||||||
|
|
||||||
## 当前功能状态
|
|
||||||
|
|
||||||
| ID | 功能 | 状态 |
|
|
||||||
|---|---|---|
|
|
||||||
| harness-001 | 基础设施 v1(24 篇博客) | done ✅ |
|
|
||||||
| harness-002 | WalkingLabs 实战模式整合 | done ✅ |
|
|
||||||
| harness-003 | 质量门禁自动化检查脚本 | in_progress 🔄 |
|
|
||||||
@@ -1,196 +0,0 @@
|
|||||||
# Harness 标准作业程序 (SOP)
|
|
||||||
|
|
||||||
> 所有开发任务、Bug 修复、重构,必须遵循此流程。
|
|
||||||
|
|
||||||
## 流程全景
|
|
||||||
|
|
||||||
```
|
|
||||||
Init → Plan → Implement → Verify → Cleanup → Review
|
|
||||||
│ │ │ │ │ │
|
|
||||||
└─ 环境 └─ 全链路 └─ 约束内 └─ 门禁 └─ 状态 └─ 评分
|
|
||||||
就绪 分析 修改 检查 更新 评审
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 步骤详解
|
|
||||||
|
|
||||||
### Step 1: Init — 环境就绪
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 1. 确认在正确的目录
|
|
||||||
pwd
|
|
||||||
|
|
||||||
# 2. 运行初始化
|
|
||||||
bash .harness/init.sh
|
|
||||||
|
|
||||||
# 3. 读取当前进度
|
|
||||||
cat .harness/PROGRESS.md
|
|
||||||
cat .harness/feature_list.json
|
|
||||||
|
|
||||||
# 4. 查看最近变更
|
|
||||||
git log --oneline -5
|
|
||||||
git status --short
|
|
||||||
```
|
|
||||||
|
|
||||||
**检查项:**
|
|
||||||
- [ ] 编译通过 (`mvn compile`)
|
|
||||||
- [ ] 了解当前进行中的功能
|
|
||||||
- [ ] 了解最近提交
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Step 2: Plan — 全链路分析
|
|
||||||
|
|
||||||
**对于每个字段/功能的新增或修改,先画出完整数据流:**
|
|
||||||
|
|
||||||
```
|
|
||||||
录入 → 保存 → 查询 → 修改 → 删除 → 关联
|
|
||||||
│ │ │ │ │ │
|
|
||||||
└前端 └API └Mapper └回显 └软删除 └上下游
|
|
||||||
└Ctrl └DTO └再保存 └计费
|
|
||||||
└Svc └前端 └打印
|
|
||||||
└Entity └报表
|
|
||||||
└DB
|
|
||||||
```
|
|
||||||
|
|
||||||
**检查清单(6 环):**
|
|
||||||
1. **录入** — 前端有输入入口?(弹窗、行编辑、表单)
|
|
||||||
2. **保存** — 前端→API→Controller→Service→Entity→DB,每个入口都传了吗?(注意多个 Service 实现类)
|
|
||||||
3. **查询** — DB→Mapper XML(UNION ALL 子查询统一加)→DTO→前端展示
|
|
||||||
4. **修改** — 编辑回显→修改保存→正确更新?
|
|
||||||
5. **删除/停止** — 状态变更会丢失该字段吗?
|
|
||||||
6. **关联** — 上下游(护士站、药房、计费、打印、报表)需要同步改吗?
|
|
||||||
|
|
||||||
**输出:** `update_plan` 分解步骤 + 风险评估
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Step 3: Implement — 约束内修改
|
|
||||||
|
|
||||||
**约束铁律:**
|
|
||||||
- 一次只做一个功能(`single_active_feature = true`)
|
|
||||||
- 只动必要文件,禁止"顺便改进"无关代码
|
|
||||||
- 遵循 AGENTS.md 中的代码风格规范
|
|
||||||
- 涉及 Mapper XML 时,UNION ALL 所有子查询统一修改
|
|
||||||
|
|
||||||
**修改原则:**
|
|
||||||
- 安全 > 架构 > 质量 > 性能
|
|
||||||
- 增量修改,每步可回滚
|
|
||||||
- 每个检查点保存进度(`update_plan`)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Step 4: Verify — 门禁检查
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# L1: 编译检查
|
|
||||||
cd healthlink-his-server && mvn compile -pl healthlink-his-application -am
|
|
||||||
|
|
||||||
# L2: 全链路门禁
|
|
||||||
bash .harness/check.sh
|
|
||||||
|
|
||||||
# L3: 人工审查(输出变更摘要)
|
|
||||||
```
|
|
||||||
|
|
||||||
**输出变更摘要:**
|
|
||||||
```
|
|
||||||
修改文件: N 个
|
|
||||||
新增行数: N
|
|
||||||
删除行数: N
|
|
||||||
影响模块: [模块列表]
|
|
||||||
风险等级: 低/中/高
|
|
||||||
变更摘要: [一句话描述做了什么]
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Step 5: Cleanup — 状态更新
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 1. 更新进度
|
|
||||||
vim .harness/PROGRESS.md
|
|
||||||
# 添加新会话记录,更新完成状态
|
|
||||||
|
|
||||||
# 2. 更新功能清单
|
|
||||||
vim .harness/feature_list.json
|
|
||||||
# 标记完成/更新状态
|
|
||||||
|
|
||||||
# 3. 运行干净状态检查
|
|
||||||
cat .harness/clean-state-checklist.md
|
|
||||||
# 逐项确认
|
|
||||||
|
|
||||||
# 4. 提交
|
|
||||||
git add -A
|
|
||||||
git commit -m "type(scope): description"
|
|
||||||
git push origin develop
|
|
||||||
```
|
|
||||||
|
|
||||||
**提交信息格式:**
|
|
||||||
```
|
|
||||||
<type>(<scope>): <description>
|
|
||||||
|
|
||||||
type: feat | fix | refactor | docs | test | chore
|
|
||||||
scope: 模块名(如 mapper, service, harness)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Step 6: Review — 评审评分
|
|
||||||
|
|
||||||
对照 `.harness/evaluator-rubric.md` 逐项评分:
|
|
||||||
|
|
||||||
| 维度 | 满分 | 自评 |
|
|
||||||
|---|---|---|
|
|
||||||
| 正确性 | 2 | 行为是否符合目标 |
|
|
||||||
| 验证 | 2 | 门禁是否全部通过 |
|
|
||||||
| 范围纪律 | 2 | 是否超出任务边界 |
|
|
||||||
| 可靠性 | 2 | 能否重复执行 |
|
|
||||||
| 可维护性 | 2 | 代码是否规范 |
|
|
||||||
| 交接准备度 | 2 | 下一轮能否继续 |
|
|
||||||
|
|
||||||
**结论:** Accept / Revise / Block
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 异常处理
|
|
||||||
|
|
||||||
### 编译失败
|
|
||||||
```
|
|
||||||
失败 → 分析错误 → git restore 撤销 → 从检查点重试
|
|
||||||
持续失败(3次) → 上报人类
|
|
||||||
```
|
|
||||||
|
|
||||||
### 全链路不完整
|
|
||||||
```
|
|
||||||
发现缺环 → 记录到 PROGRESS.md blocker → 补充修复
|
|
||||||
```
|
|
||||||
|
|
||||||
### 范围蔓延
|
|
||||||
```
|
|
||||||
发现超出任务 → 创建新 feature → 当前任务先完成
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 速查命令
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 诊断
|
|
||||||
pwd # 确认目录
|
|
||||||
git status --short # 查看变更
|
|
||||||
git log --oneline -5 # 查看历史
|
|
||||||
git diff --stat HEAD # 变更统计
|
|
||||||
|
|
||||||
# 回滚
|
|
||||||
git checkout -- <file> # 撤销单个文件
|
|
||||||
git reset HEAD~1 # 撤销上次提交(保留修改)
|
|
||||||
|
|
||||||
# 验证
|
|
||||||
bash .harness/init.sh # 初始化
|
|
||||||
bash .harness/check.sh # 全部门禁
|
|
||||||
|
|
||||||
# 状态
|
|
||||||
cat .harness/PROGRESS.md # 进度
|
|
||||||
cat .harness/feature_list.json # 功能清单
|
|
||||||
```
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# =============================================
|
|
||||||
# Harness Quality Gates — 一键运行所有门禁
|
|
||||||
# 源自 $closed-loop-testing skill
|
|
||||||
# =============================================
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
||||||
cd "$ROOT_DIR"
|
|
||||||
|
|
||||||
PASS=0
|
|
||||||
FAIL=0
|
|
||||||
RESULTS=()
|
|
||||||
|
|
||||||
check() {
|
|
||||||
local level="$1" name="$2" cmd="$3"
|
|
||||||
cd "$ROOT_DIR"
|
|
||||||
echo ""
|
|
||||||
echo "━━━ [${level}] ${name} ━━━"
|
|
||||||
if eval "$cmd" 2>&1; then
|
|
||||||
echo " ✅ ${name} 通过"
|
|
||||||
PASS=$((PASS + 1))
|
|
||||||
RESULTS+=("✅|${level}|${name}")
|
|
||||||
else
|
|
||||||
echo " ❌ ${name} 失败"
|
|
||||||
FAIL=$((FAIL + 1))
|
|
||||||
RESULTS+=("❌|${level}|${name}")
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "╔══════════════════════════════════════╗"
|
|
||||||
echo "║ Harness Quality Gates ║"
|
|
||||||
echo "║ $(date '+%Y-%m-%d %H:%M') ║"
|
|
||||||
echo "╚══════════════════════════════════════╝"
|
|
||||||
|
|
||||||
# ── L1: 编译检查 ──
|
|
||||||
echo ""
|
|
||||||
echo "╔══ L1 编译检查 ══════════════════════╗"
|
|
||||||
check "L1" "后端编译" "cd '$ROOT_DIR/healthlink-his-server' && mvn compile -pl healthlink-his-application -am -q"
|
|
||||||
|
|
||||||
# ── L2: 全链路检查 ──
|
|
||||||
echo ""
|
|
||||||
echo "╔══ L2 全链路数据流验证 ══════════════╗"
|
|
||||||
|
|
||||||
# L2-1: 文件存在性检查
|
|
||||||
check "L2" "AGENTS.md 存在" "test -f '$ROOT_DIR/AGENTS.md'"
|
|
||||||
check "L2" "init.sh 可执行" "test -x '$ROOT_DIR/.harness/init.sh'"
|
|
||||||
check "L2" "PROGRESS.md 存在" "test -f '$ROOT_DIR/.harness/PROGRESS.md'"
|
|
||||||
check "L2" "feature_list.json 有效" "python3 -c 'import json; json.load(open(\"$ROOT_DIR/.harness/feature_list.json\"))'"
|
|
||||||
|
|
||||||
# L2-2: Mapper XML 结构检查
|
|
||||||
check "L2" "Mapper XML 行数一致性" "find '$ROOT_DIR/healthlink-his-server' -path '*/mapper/*.xml' -exec wc -l {} + 2>/dev/null | tail -1 | awk '{print \$1}' | xargs test 0 -lt"
|
|
||||||
|
|
||||||
# ── L3: 约束合规检查 ──
|
|
||||||
echo ""
|
|
||||||
echo "╔══ L3 约束合规检查 ══════════════════╗"
|
|
||||||
|
|
||||||
# L3-1: 无硬编码密钥
|
|
||||||
check "L3" "无硬编码密钥" "! grep -r 'password=.*[a-zA-Z0-9]\{8,\}' --include='*.java' --include='*.yml' --include='*.xml' --include='*.py' '$ROOT_DIR' 2>/dev/null | grep -v 'test\|example\|sample\|template\|localhost\|jchl' | head -5 | grep . && false || true"
|
|
||||||
|
|
||||||
# ── 汇总 ──
|
|
||||||
echo ""
|
|
||||||
echo "╔══════════════════════════════════════╗"
|
|
||||||
echo "║ 质量门禁结果汇总 ║"
|
|
||||||
echo "╚══════════════════════════════════════╝"
|
|
||||||
echo ""
|
|
||||||
for r in "${RESULTS[@]}"; do
|
|
||||||
IFS='|' read -r status level name <<< "$r"
|
|
||||||
echo " $status [$level] $name"
|
|
||||||
done
|
|
||||||
echo ""
|
|
||||||
echo " 总计: $((PASS + FAIL)) | ✅ $PASS 通过 | ❌ $FAIL 失败"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
if [ "$FAIL" -gt 0 ]; then
|
|
||||||
echo " ⚠️ 有 $FAIL 项未通过"
|
|
||||||
echo " 提示:新增/修改文件后记得 git add 后再检查"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo " 🎉 所有门禁通过!"
|
|
||||||
fi
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
# 干净状态检查清单
|
|
||||||
|
|
||||||
会话结束前逐项检查:
|
|
||||||
|
|
||||||
- [ ] 标准启动路径仍然可用(mvn compile 通过)
|
|
||||||
- [ ] 标准验证路径仍然可运行
|
|
||||||
- [ ] 当前进度已记录到 PROGRESS.md
|
|
||||||
- [ ] 功能状态真实反映 passing 和未验证的边界
|
|
||||||
- [ ] feature_list.json 已更新
|
|
||||||
- [ ] 没有任何半成品步骤处于未记录状态
|
|
||||||
- [ ] 临时文件和调试代码已清理
|
|
||||||
- [ ] 提交信息清晰描述了变更内容
|
|
||||||
- [ ] 下一轮会话无需人工修复即可继续
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
# 评审评分表
|
|
||||||
|
|
||||||
| 维度 | 问题 | 0-2分 | 备注 |
|
|
||||||
|---|---|---|---|
|
|
||||||
| 正确性 | 实现的行为是否符合目标功能? | | |
|
|
||||||
| 验证 | 编译检查是否通过?数据流是否完整? | | |
|
|
||||||
| 范围纪律 | 是否保持在选定功能范围内? | | |
|
|
||||||
| 可靠性 | 结果能否在重启后继续工作? | | |
|
|
||||||
| 可维护性 | 代码是否遵循项目规范? | | |
|
|
||||||
| 交接准备度 | 下一轮能否只靠仓库内文件继续推进? | | |
|
|
||||||
|
|
||||||
## 结论
|
|
||||||
|
|
||||||
- [ ] Accept
|
|
||||||
- [ ] Revise
|
|
||||||
- [ ] Block
|
|
||||||
|
|
||||||
## 后续动作
|
|
||||||
|
|
||||||
- 缺失的证据:
|
|
||||||
- 必须补的修复:
|
|
||||||
- 下次复审触发条件:
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
{
|
|
||||||
"project": "HealthLink-HIS",
|
|
||||||
"last_updated": "2026-05-28",
|
|
||||||
"rules": {
|
|
||||||
"single_active_feature": true,
|
|
||||||
"passing_requires_evidence": true,
|
|
||||||
"do_not_skip_verification": true
|
|
||||||
},
|
|
||||||
"status_legend": {
|
|
||||||
"not_started": "功能还没开始做",
|
|
||||||
"in_progress": "当前唯一正在进行的任务",
|
|
||||||
"blocked": "有已记录的阻塞问题",
|
|
||||||
"passing": "验证已通过,证据已记录",
|
|
||||||
"done": "已完成并合入主干"
|
|
||||||
},
|
|
||||||
"features": [
|
|
||||||
{
|
|
||||||
"id": "harness-001",
|
|
||||||
"priority": 1,
|
|
||||||
"area": "infrastructure",
|
|
||||||
"title": "Harness Engineering 基础设施搭建",
|
|
||||||
"user_visible_behavior": "Codex 具备完整的约束/反馈/控制/持久执行能力",
|
|
||||||
"status": "done",
|
|
||||||
"verification": [
|
|
||||||
"AGENTS.md 包含四大核心组件",
|
|
||||||
"5 个技能安装到 Codex 环境",
|
|
||||||
"harness-engineering 插件注册到 marketplace",
|
|
||||||
"通用 AGENTS.md 模板可用"
|
|
||||||
],
|
|
||||||
"evidence": ["AGENTS.md restructured", "skills created", "plugin validated"],
|
|
||||||
"notes": "v1: 24 篇博客方法整合完成"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "harness-002",
|
|
||||||
"priority": 2,
|
|
||||||
"area": "infrastructure",
|
|
||||||
"title": "WalkingLabs 实战模式整合",
|
|
||||||
"user_visible_behavior": "项目具备完整的 5 子系统 Harness(指令/工具/环境/状态/反馈)",
|
|
||||||
"status": "done",
|
|
||||||
"verification": [
|
|
||||||
".harness/ 目录包含所有模板文件",
|
|
||||||
"init.sh 可正常运行",
|
|
||||||
"PROGRESS.md 记录当前状态",
|
|
||||||
"feature_list.json 跟踪所有功能",
|
|
||||||
"walkinglabs-harness 技能已安装"
|
|
||||||
],
|
|
||||||
"evidence": [
|
|
||||||
"init.sh verified (compile OK)",
|
|
||||||
"6 templates installed in .harness/",
|
|
||||||
"AGENTS.md updated with 5-subsystem model",
|
|
||||||
"walkinglabs-harness skill created (142 lines)"
|
|
||||||
],
|
|
||||||
"notes": "v2: walkinglabs 5 子系统整合完成"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "harness-003",
|
|
||||||
"priority": 3,
|
|
||||||
"area": "infrastructure",
|
|
||||||
"title": "建立质量门禁自动化检查脚本",
|
|
||||||
"user_visible_behavior": "运行一条命令即可完成 L1-L3 质量门禁检查",
|
|
||||||
"status": "not_started",
|
|
||||||
"verification": [
|
|
||||||
"创建 .harness/check.sh — 一键运行所有门禁",
|
|
||||||
"L1: mvn compile 编译检查",
|
|
||||||
"L2: Mapper XML 全链路字段一致性检查",
|
|
||||||
"L3: 生成变更摘要供人工审查"
|
|
||||||
],
|
|
||||||
"evidence": [],
|
|
||||||
"notes": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Harness Init — 统一启动与验证入口
|
|
||||||
# 每次新会话开始前运行
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
||||||
cd "$ROOT_DIR"
|
|
||||||
|
|
||||||
echo "==> 当前目录: $PWD"
|
|
||||||
echo "==> Git 状态"
|
|
||||||
git status --short 2>/dev/null || true
|
|
||||||
git log --oneline -3 2>/dev/null || true
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "==> 编译检查"
|
|
||||||
cd healthlink-his-server
|
|
||||||
mvn compile -pl healthlink-his-application -am -q 2>/dev/null && echo " ✅ 编译通过" || echo " ❌ 编译失败"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "==> 读取进度"
|
|
||||||
if [ -f .harness/PROGRESS.md ]; then
|
|
||||||
head -20 .harness/PROGRESS.md
|
|
||||||
else
|
|
||||||
echo " (无进度文件)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "==> 读取功能清单"
|
|
||||||
if [ -f .harness/feature_list.json ]; then
|
|
||||||
python3 -c "
|
|
||||||
import json
|
|
||||||
with open('.harness/feature_list.json') as f:
|
|
||||||
data = json.load(f)
|
|
||||||
features = [f for f in data.get('features', []) if f.get('status') == 'in_progress']
|
|
||||||
if features:
|
|
||||||
print(f\" 当前进行中: {features[0].get('title', 'unknown')}\")
|
|
||||||
else:
|
|
||||||
print(' 当前无进行中的功能')
|
|
||||||
" 2>/dev/null || echo " (无法解析)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "==> 环境就绪 ✅"
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
# 会话交接
|
|
||||||
|
|
||||||
## 当前已验证
|
|
||||||
|
|
||||||
- 现在明确可用的部分:
|
|
||||||
- 本轮实际跑过的验证:
|
|
||||||
|
|
||||||
## 本轮改动
|
|
||||||
|
|
||||||
- 新增了哪些代码或行为:
|
|
||||||
- Harness 发生了哪些变化:
|
|
||||||
|
|
||||||
## 仍损坏或未验证
|
|
||||||
|
|
||||||
- 已知缺陷:
|
|
||||||
- 未验证路径:
|
|
||||||
- 下一轮需要注意的风险:
|
|
||||||
|
|
||||||
## 下一步最佳动作
|
|
||||||
|
|
||||||
- 最高优先级未完成功能:
|
|
||||||
- 为什么它是下一步:
|
|
||||||
- 什么结果才算 passing:
|
|
||||||
|
|
||||||
## 命令速查
|
|
||||||
|
|
||||||
- 编译:`cd healthlink-his-server && mvn compile -pl healthlink-his-application -am`
|
|
||||||
- 打包:`mvn clean package -DskipTests`
|
|
||||||
- 启动:`mvn spring-boot:run`
|
|
||||||
35
.idea/dataSources.local.xml
generated
35
.idea/dataSources.local.xml
generated
@@ -1,35 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="dataSourceStorageLocal" created-in="IU-253.33514.17">
|
|
||||||
<data-source name="postgresql@192.168.110.252" uuid="6f44e2a0-c865-4e9f-83bf-d35db0680dc5">
|
|
||||||
<database-info product="PostgreSQL" version="17.6" jdbc-version="4.2" driver-name="PostgreSQL JDBC Driver" driver-version="42.7.3" dbms="POSTGRES" exact-version="17.6" exact-driver-version="42.7">
|
|
||||||
<identifier-quote-string>"</identifier-quote-string>
|
|
||||||
</database-info>
|
|
||||||
<case-sensitivity plain-identifiers="lower" quoted-identifiers="exact" />
|
|
||||||
<secret-storage>master_key</secret-storage>
|
|
||||||
<user-name>postgresql</user-name>
|
|
||||||
<schema-mapping>
|
|
||||||
<introspection-scope>
|
|
||||||
<node kind="database" qname="@">
|
|
||||||
<node kind="schema" qname="@" />
|
|
||||||
</node>
|
|
||||||
</introspection-scope>
|
|
||||||
</schema-mapping>
|
|
||||||
</data-source>
|
|
||||||
<data-source name="postgresql@47.116.196.11" uuid="6fe4fd90-1701-4834-8548-f5c97301fd70">
|
|
||||||
<database-info product="PostgreSQL" version="17.6" jdbc-version="4.2" driver-name="PostgreSQL JDBC Driver" driver-version="42.7.3" dbms="POSTGRES" exact-version="17.6" exact-driver-version="42.7">
|
|
||||||
<identifier-quote-string>"</identifier-quote-string>
|
|
||||||
</database-info>
|
|
||||||
<case-sensitivity plain-identifiers="lower" quoted-identifiers="exact" />
|
|
||||||
<secret-storage>master_key</secret-storage>
|
|
||||||
<user-name>postgresql</user-name>
|
|
||||||
<schema-mapping>
|
|
||||||
<introspection-scope>
|
|
||||||
<node kind="database" qname="@">
|
|
||||||
<node kind="schema" qname="@" />
|
|
||||||
</node>
|
|
||||||
</introspection-scope>
|
|
||||||
</schema-mapping>
|
|
||||||
</data-source>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
29
.idea/dataSources.xml
generated
29
.idea/dataSources.xml
generated
@@ -1,29 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
|
||||||
<data-source source="LOCAL" name="postgresql@192.168.110.252" uuid="6f44e2a0-c865-4e9f-83bf-d35db0680dc5">
|
|
||||||
<driver-ref>postgresql</driver-ref>
|
|
||||||
<synchronize>true</synchronize>
|
|
||||||
<jdbc-driver>org.postgresql.Driver</jdbc-driver>
|
|
||||||
<jdbc-url>jdbc:postgresql://192.168.110.252:15432/postgresql?currentSchema=healthlink_his&characterEncoding=UTF-8&client_encoding=UTF-8</jdbc-url>
|
|
||||||
<jdbc-additional-properties>
|
|
||||||
<property name="com.intellij.clouds.kubernetes.db.host.port" />
|
|
||||||
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
|
|
||||||
<property name="com.intellij.clouds.kubernetes.db.container.port" />
|
|
||||||
</jdbc-additional-properties>
|
|
||||||
<working-dir>$ProjectFileDir$</working-dir>
|
|
||||||
</data-source>
|
|
||||||
<data-source source="LOCAL" name="postgresql@47.116.196.11" uuid="6fe4fd90-1701-4834-8548-f5c97301fd70">
|
|
||||||
<driver-ref>postgresql</driver-ref>
|
|
||||||
<synchronize>true</synchronize>
|
|
||||||
<jdbc-driver>org.postgresql.Driver</jdbc-driver>
|
|
||||||
<jdbc-url>jdbc:postgresql://47.116.196.11:15432/postgresql?currentSchema=healthlink_his&characterEncoding=UTF-8&client_encoding=UTF-8</jdbc-url>
|
|
||||||
<jdbc-additional-properties>
|
|
||||||
<property name="com.intellij.clouds.kubernetes.db.host.port" />
|
|
||||||
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
|
|
||||||
<property name="com.intellij.clouds.kubernetes.db.container.port" />
|
|
||||||
</jdbc-additional-properties>
|
|
||||||
<working-dir>$ProjectFileDir$</working-dir>
|
|
||||||
</data-source>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
82534
.idea/dataSources/6f44e2a0-c865-4e9f-83bf-d35db0680dc5.xml
generated
82534
.idea/dataSources/6f44e2a0-c865-4e9f-83bf-d35db0680dc5.xml
generated
File diff suppressed because it is too large
Load Diff
@@ -1 +0,0 @@
|
|||||||
#n:postgresql
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#n:healthlink_his
|
|
||||||
!<md> [786566, 0, null, null, -2147483648, -2147483648]
|
|
||||||
Binary file not shown.
@@ -1,2 +0,0 @@
|
|||||||
#n:information_schema
|
|
||||||
!<md> [null, 0, null, null, -2147483648, -2147483648]
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#n:pg_catalog
|
|
||||||
!<md> [null, 0, null, null, -2147483648, -2147483648]
|
|
||||||
82534
.idea/dataSources/6fe4fd90-1701-4834-8548-f5c97301fd70.xml
generated
82534
.idea/dataSources/6fe4fd90-1701-4834-8548-f5c97301fd70.xml
generated
File diff suppressed because it is too large
Load Diff
@@ -1 +0,0 @@
|
|||||||
#n:postgresql
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#n:healthlink_his
|
|
||||||
!<md> [786700, 0, null, null, -2147483648, -2147483648]
|
|
||||||
Binary file not shown.
@@ -1,2 +0,0 @@
|
|||||||
#n:information_schema
|
|
||||||
!<md> [null, 0, null, null, -2147483648, -2147483648]
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#n:pg_catalog
|
|
||||||
!<md> [null, 0, null, null, -2147483648, -2147483648]
|
|
||||||
6
.idea/db-forest-config.xml
generated
6
.idea/db-forest-config.xml
generated
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="db-tree-configuration">
|
|
||||||
<option name="data" value="---------------------------------------- 1:0:6f44e2a0-c865-4e9f-83bf-d35db0680dc5 2:0:6fe4fd90-1701-4834-8548-f5c97301fd70 " />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
8
.idea/shelf/_2026_6_16_09_56____.xml
generated
8
.idea/shelf/_2026_6_16_09_56____.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<changelist name="在进行更新之前于_2026_6_16_09_56_取消提交了更改_[更改]" date="1781574986508" recycled="true" deleted="true">
|
|
||||||
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_16_09_56_取消提交了更改_[更改]/shelved.patch" />
|
|
||||||
<option name="DESCRIPTION" value="在进行更新之前于 2026/6/16 09:56 取消提交了更改 [更改]" />
|
|
||||||
<binary>
|
|
||||||
<option name="AFTER_PATH" value="MD/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_16_09_56_取消提交了更改_[更改]/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
</binary>
|
|
||||||
</changelist>
|
|
||||||
8
.idea/shelf/_2026_6_16_10_44____.xml
generated
8
.idea/shelf/_2026_6_16_10_44____.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<changelist name="在进行更新之前于_2026_6_16_10_44_取消提交了更改_[更改]" date="1781577901658" recycled="true" deleted="true">
|
|
||||||
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_16_10_44_取消提交了更改_[更改]/shelved.patch" />
|
|
||||||
<option name="DESCRIPTION" value="在进行更新之前于 2026/6/16 10:44 取消提交了更改 [更改]" />
|
|
||||||
<binary>
|
|
||||||
<option name="AFTER_PATH" value="MD/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_16_10_44_取消提交了更改_[更改]/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
</binary>
|
|
||||||
</changelist>
|
|
||||||
8
.idea/shelf/_2026_6_16_13_36____.xml
generated
8
.idea/shelf/_2026_6_16_13_36____.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<changelist name="在进行更新之前于_2026_6_16_13_36_取消提交了更改_[更改]" date="1781588195703" recycled="true" deleted="true">
|
|
||||||
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_16_13_36_取消提交了更改_[更改]/shelved.patch" />
|
|
||||||
<option name="DESCRIPTION" value="在进行更新之前于 2026/6/16 13:36 取消提交了更改 [更改]" />
|
|
||||||
<binary>
|
|
||||||
<option name="AFTER_PATH" value="MD/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_16_13_36_取消提交了更改_[更改]/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
</binary>
|
|
||||||
</changelist>
|
|
||||||
8
.idea/shelf/_2026_6_16_13_38____.xml
generated
8
.idea/shelf/_2026_6_16_13_38____.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<changelist name="在进行更新之前于_2026_6_16_13_38_取消提交了更改_[更改]" date="1781588299786" recycled="true" deleted="true">
|
|
||||||
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_16_13_38_取消提交了更改_[更改]/shelved.patch" />
|
|
||||||
<option name="DESCRIPTION" value="在进行更新之前于 2026/6/16 13:38 取消提交了更改 [更改]" />
|
|
||||||
<binary>
|
|
||||||
<option name="AFTER_PATH" value="MD/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_16_13_38_取消提交了更改_[更改]/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
</binary>
|
|
||||||
</changelist>
|
|
||||||
8
.idea/shelf/_2026_6_16_15_24____.xml
generated
8
.idea/shelf/_2026_6_16_15_24____.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<changelist name="在进行更新之前于_2026_6_16_15_24_取消提交了更改_[更改]" date="1781594661495" recycled="true" deleted="true">
|
|
||||||
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_16_15_24_取消提交了更改_[更改]/shelved.patch" />
|
|
||||||
<option name="DESCRIPTION" value="在进行更新之前于 2026/6/16 15:24 取消提交了更改 [更改]" />
|
|
||||||
<binary>
|
|
||||||
<option name="AFTER_PATH" value="MD/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_16_15_24_取消提交了更改_[更改]/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
</binary>
|
|
||||||
</changelist>
|
|
||||||
8
.idea/shelf/_2026_6_16_16_12____.xml
generated
8
.idea/shelf/_2026_6_16_16_12____.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<changelist name="在进行更新之前于_2026_6_16_16_12_取消提交了更改_[更改]" date="1781597537348" recycled="true" deleted="true">
|
|
||||||
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_16_16_12_取消提交了更改_[更改]/shelved.patch" />
|
|
||||||
<option name="DESCRIPTION" value="在进行更新之前于 2026/6/16 16:12 取消提交了更改 [更改]" />
|
|
||||||
<binary>
|
|
||||||
<option name="AFTER_PATH" value="MD/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_16_16_12_取消提交了更改_[更改]/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
</binary>
|
|
||||||
</changelist>
|
|
||||||
8
.idea/shelf/_2026_6_17_08_41____.xml
generated
8
.idea/shelf/_2026_6_17_08_41____.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<changelist name="在进行更新之前于_2026_6_17_08_41_取消提交了更改_[更改]" date="1781656871923" recycled="true" deleted="true">
|
|
||||||
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_17_08_41_取消提交了更改_[更改]/shelved.patch" />
|
|
||||||
<option name="DESCRIPTION" value="在进行更新之前于 2026/6/17 08:41 取消提交了更改 [更改]" />
|
|
||||||
<binary>
|
|
||||||
<option name="AFTER_PATH" value="MD/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_17_08_41_取消提交了更改_[更改]/HEALTHLINK_HIS_PRICING_v0.1.docx" />
|
|
||||||
</binary>
|
|
||||||
</changelist>
|
|
||||||
4
.idea/shelf/_2026_6_17_11_43____.xml
generated
4
.idea/shelf/_2026_6_17_11_43____.xml
generated
@@ -1,4 +0,0 @@
|
|||||||
<changelist name="在进行更新之前于_2026_6_17_11_43_取消提交了更改_[更改]" date="1781667802685" recycled="true" deleted="true">
|
|
||||||
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_6_17_11_43_取消提交了更改_[更改]/shelved.patch" />
|
|
||||||
<option name="DESCRIPTION" value="在进行更新之前于 2026/6/17 11:43 取消提交了更改 [更改]" />
|
|
||||||
</changelist>
|
|
||||||
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,60 +0,0 @@
|
|||||||
# 修复 ohmyagent (ultrawork) 命令无法使用的问题
|
|
||||||
|
|
||||||
## 问题分析
|
|
||||||
|
|
||||||
用户反馈 `/ulw` 和 `/ultrawork` 命令无法使用,报错 "Unknown skill: ulw" 或 "Unknown skill: ultrawork"。
|
|
||||||
|
|
||||||
### 根因
|
|
||||||
|
|
||||||
1. **技能与命令冲突**:`ultrawork` 既是一个 skill (`C:\Users\Administrator\.claude\skills\ultrawork\SKILL.md`),又有一个 command (`C:\Users\Administrator\.claude\commands\ulw.md`)
|
|
||||||
2. **命令注册问题**:`/ulw` 作为 command 存在,但 Claude Code 的 skill 系统在查找 "ulw" 这个 skill 时找不到
|
|
||||||
3. **多版本冲突**:存在两个版本的 ultrawork 配置:
|
|
||||||
- `C:\Users\Administrator\.claude\ultrawork-sanguo.json` (根目录配置)
|
|
||||||
- `C:\Users\Administrator\.claude\plugins\ultrawork-sanguo\config\ultrawork-sanguo.json` (插件配置)
|
|
||||||
|
|
||||||
## 修复方案(已确认:Skill优先)
|
|
||||||
|
|
||||||
统一使用 Skill 系统,将 `/ulw` 命令改为触发 `ultrawork` skill。
|
|
||||||
|
|
||||||
**修改文件:**
|
|
||||||
- `C:\Users\Administrator\.claude\commands\ulw.md` - 改为调用 ultrawork skill
|
|
||||||
|
|
||||||
## 具体修复步骤
|
|
||||||
|
|
||||||
### Step 1: 修复 ulw.md command
|
|
||||||
|
|
||||||
将 `C:\Users\Administrator\.claude\commands\ulw.md` 修改为触发 ultrawork skill 的 command:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
---
|
|
||||||
name: ulw
|
|
||||||
description: 激活 UltraWork 三国军团调度系统
|
|
||||||
---
|
|
||||||
|
|
||||||
# /ulw - UltraWork 三国军团
|
|
||||||
|
|
||||||
当用户输入 /ulw 时,加载 ultrawork skill 并执行任务。
|
|
||||||
|
|
||||||
## 触发方式
|
|
||||||
|
|
||||||
使用 skill 工具加载 ultrawork skill,然后根据 skill 流程执行任务。
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 2: 验证 ultrawork skill 配置
|
|
||||||
|
|
||||||
检查 `C:\Users\Administrator\.claude\skills\ultrawork\SKILL.md` 确保:
|
|
||||||
- name 字段为 "ultrawork"
|
|
||||||
- description 包含触发关键词(/ulw, /ultrawork, ultrawork)
|
|
||||||
|
|
||||||
## 验证方法
|
|
||||||
|
|
||||||
1. 输入 `/ulw 测试任务` 应该能触发 ultrawork skill
|
|
||||||
2. 输入 `/ultrawork` 应该能触发 ultrawork skill
|
|
||||||
3. 直接说 "ultrawork 测试任务" 也应该能触发
|
|
||||||
|
|
||||||
## 关键文件
|
|
||||||
|
|
||||||
- `C:\Users\Administrator\.claude\commands\ulw.md`
|
|
||||||
- `C:\Users\Administrator\.claude\skills\ultrawork\SKILL.md`
|
|
||||||
- `C:\Users\Administrator\.claude\ultrawork-sanguo.json`
|
|
||||||
- `C:\Users\Administrator\.claude\plugins\ultrawork-sanguo\config\ultrawork-sanguo.json`
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"provider": "openai-compatible",
|
|
||||||
"apiKey": "tp-c5g4lq98ufrnmb8tgde32pf1jodrqs2bfkyz19shto080000",
|
|
||||||
"baseUrl": "https://token-plan-cn.xiaomimimo.com/v1",
|
|
||||||
"model": "mimo-v2.5-pro"
|
|
||||||
}
|
|
||||||
23
.playwright-mcp/page-2026-03-31T08-16-50-178Z.yml
Normal file
23
.playwright-mcp/page-2026-03-31T08-16-50-178Z.yml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
- generic [ref=e5]:
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- img [ref=e7]
|
||||||
|
- img [ref=e8]
|
||||||
|
- generic [ref=e9]:
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- heading "经创贺联项目管理系统" [level=2] [ref=e11]
|
||||||
|
- generic [ref=e12]: 简体
|
||||||
|
- generic [ref=e13]:
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e16]: 用户名
|
||||||
|
- textbox [active] [ref=e17]
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e20]: 密码
|
||||||
|
- textbox [ref=e21]
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e24]:
|
||||||
|
- checkbox "保持登录" [ref=e25]
|
||||||
|
- generic [ref=e26] [cursor=pointer]: 保持登录
|
||||||
|
- link "忘记密码" [ref=e27] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=user&f=reset
|
||||||
|
- button "登录" [ref=e29] [cursor=pointer]:
|
||||||
|
- generic [ref=e30]: 登录
|
||||||
91
.playwright-mcp/page-2026-03-31T08-17-18-473Z.yml
Normal file
91
.playwright-mcp/page-2026-03-31T08-17-18-473Z.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- button [ref=e73] [cursor=pointer]:
|
||||||
|
- img [ref=e75]
|
||||||
|
- link " 开源版21.7" [ref=e76] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- generic [ref=e78]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e79] [cursor=pointer]:
|
||||||
|
- generic [ref=e80]: 升级
|
||||||
|
- generic [ref=e81]:
|
||||||
91
.playwright-mcp/page-2026-03-31T08-17-24-726Z.yml
Normal file
91
.playwright-mcp/page-2026-03-31T08-17-24-726Z.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- button [ref=e73] [cursor=pointer]:
|
||||||
|
- img [ref=e75]
|
||||||
|
- link " 开源版21.7" [ref=e76] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- generic [ref=e78]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e79] [cursor=pointer]:
|
||||||
|
- generic [ref=e80]: 升级
|
||||||
|
- generic [ref=e81]:
|
||||||
93
.playwright-mcp/page-2026-03-31T08-17-44-802Z.yml
Normal file
93
.playwright-mcp/page-2026-03-31T08-17-44-802Z.yml
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- textbox [ref=e77]:
|
||||||
|
- /placeholder: 搜索
|
||||||
|
- button [ref=e79] [cursor=pointer]:
|
||||||
|
- img [ref=e81]
|
||||||
|
- link " 开源版21.7" [ref=e82] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- generic [ref=e84]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e85] [cursor=pointer]:
|
||||||
|
- generic [ref=e86]: 升级
|
||||||
|
- generic [ref=e87]:
|
||||||
93
.playwright-mcp/page-2026-03-31T08-17-49-298Z.yml
Normal file
93
.playwright-mcp/page-2026-03-31T08-17-49-298Z.yml
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- textbox [ref=e77]:
|
||||||
|
- /placeholder: 搜索
|
||||||
|
- button [ref=e79] [cursor=pointer]:
|
||||||
|
- img [ref=e81]
|
||||||
|
- link " 开源版21.7" [ref=e82] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- generic [ref=e84]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e85] [cursor=pointer]:
|
||||||
|
- generic [ref=e86]: 升级
|
||||||
|
- generic [ref=e87]:
|
||||||
91
.playwright-mcp/page-2026-03-31T08-18-07-157Z.yml
Normal file
91
.playwright-mcp/page-2026-03-31T08-18-07-157Z.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- button [ref=e73] [cursor=pointer]:
|
||||||
|
- img [ref=e75]
|
||||||
|
- link " 开源版21.7" [ref=e76] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- generic [ref=e78]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e79] [cursor=pointer]:
|
||||||
|
- generic [ref=e80]: 升级
|
||||||
|
- generic [ref=e81]:
|
||||||
93
.playwright-mcp/page-2026-03-31T08-18-18-348Z.yml
Normal file
93
.playwright-mcp/page-2026-03-31T08-18-18-348Z.yml
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- textbox [ref=e77]:
|
||||||
|
- /placeholder: 搜索
|
||||||
|
- button [ref=e79] [cursor=pointer]:
|
||||||
|
- img [ref=e81]
|
||||||
|
- link " 开源版21.7" [ref=e82] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- generic [ref=e84]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e85] [cursor=pointer]:
|
||||||
|
- generic [ref=e86]: 升级
|
||||||
|
- generic [ref=e87]:
|
||||||
1039
.playwright-mcp/page-2026-03-31T08-18-21-578Z.yml
Normal file
1039
.playwright-mcp/page-2026-03-31T08-18-21-578Z.yml
Normal file
File diff suppressed because it is too large
Load Diff
91
.playwright-mcp/page-2026-03-31T08-18-34-499Z.yml
Normal file
91
.playwright-mcp/page-2026-03-31T08-18-34-499Z.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- button [ref=e73] [cursor=pointer]:
|
||||||
|
- img [ref=e75]
|
||||||
|
- link " 开源版21.7" [ref=e76] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- generic [ref=e78]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e79] [cursor=pointer]:
|
||||||
|
- generic [ref=e80]: 升级
|
||||||
|
- generic [ref=e81]:
|
||||||
314
.playwright-mcp/page-2026-03-31T08-18-42-028Z.yml
Normal file
314
.playwright-mcp/page-2026-03-31T08-18-42-028Z.yml
Normal file
@@ -0,0 +1,314 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- iframe [ref=e66]:
|
||||||
|
- generic [active] [ref=f11e1]:
|
||||||
|
- banner [ref=f11e2]:
|
||||||
|
- generic [ref=f11e3]:
|
||||||
|
- generic [ref=f11e4]:
|
||||||
|
- link " 测试" [ref=f11e6] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=f11e7]:
|
||||||
|
- generic [ref=f11e8]: 测试
|
||||||
|
- button " 开源HIS改造落地" [ref=f11e10] [cursor=pointer]:
|
||||||
|
- generic [ref=f11e11]:
|
||||||
|
- generic "开源HIS改造落地" [ref=f11e12]
|
||||||
|
- navigation [ref=f11e15]:
|
||||||
|
- list [ref=f11e16]:
|
||||||
|
- listitem [ref=f11e17]:
|
||||||
|
- link "仪表盘" [ref=f11e18] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=f11e19]: 仪表盘
|
||||||
|
- listitem [ref=f11e20]
|
||||||
|
- listitem [ref=f11e21]:
|
||||||
|
- link "Bug" [ref=f11e22] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=browse&productID=4
|
||||||
|
- generic [ref=f11e23]: Bug
|
||||||
|
- listitem [ref=f11e24]:
|
||||||
|
- link "用例" [ref=f11e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testcase&f=browse&productID=4
|
||||||
|
- generic [ref=f11e26]: 用例
|
||||||
|
- listitem [ref=f11e27]:
|
||||||
|
- link "套件" [ref=f11e28] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testsuite&f=browse&productID=4
|
||||||
|
- generic [ref=f11e29]: 套件
|
||||||
|
- listitem [ref=f11e30]
|
||||||
|
- listitem [ref=f11e31]:
|
||||||
|
- link "测试单" [ref=f11e32] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testtask&f=browse&productID=4
|
||||||
|
- generic [ref=f11e33]: 测试单
|
||||||
|
- listitem [ref=f11e34]:
|
||||||
|
- link "测试报告" [ref=f11e35] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testreport&f=browse&productID=4
|
||||||
|
- generic [ref=f11e36]: 测试报告
|
||||||
|
- listitem [ref=f11e37]
|
||||||
|
- listitem [ref=f11e38]:
|
||||||
|
- link "用例库" [ref=f11e39] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=caselib&f=browse&libID=0
|
||||||
|
- generic [ref=f11e40]: 用例库
|
||||||
|
- listitem [ref=f11e41]
|
||||||
|
- listitem [ref=f11e42]:
|
||||||
|
- link "自动化" [ref=f11e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=zanode&f=instruction
|
||||||
|
- generic [ref=f11e44]: 自动化
|
||||||
|
- generic [ref=f11e46]:
|
||||||
|
- button "" [ref=f11e47] [cursor=pointer]:
|
||||||
|
- generic [ref=f11e48]:
|
||||||
|
- button " 9" [ref=f11e49] [cursor=pointer]:
|
||||||
|
- generic [ref=f11e50]:
|
||||||
|
- generic [ref=f11e51]: "9"
|
||||||
|
- generic [ref=f11e54] [cursor=pointer]: A
|
||||||
|
- generic [ref=f11e57]:
|
||||||
|
- generic [ref=f11e58]:
|
||||||
|
- generic [ref=f11e59]:
|
||||||
|
- button " 返回" [ref=f11e60] [cursor=pointer]:
|
||||||
|
- generic [ref=f11e61]:
|
||||||
|
- generic [ref=f11e62]: 返回
|
||||||
|
- generic [ref=f11e63]:
|
||||||
|
- generic [ref=f11e64]: "306"
|
||||||
|
- generic [ref=f11e65]: 手术管理-》门诊手术安排:手术申请查询未过滤掉已安排的手术申请单
|
||||||
|
- link " 提Bug" [ref=f11e68] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=create&productID=4&branch=0&extras=projectID=11,executionID=0,moduleID=126
|
||||||
|
- generic [ref=f11e69]:
|
||||||
|
- generic [ref=f11e70]: 提Bug
|
||||||
|
- generic [ref=f11e71]:
|
||||||
|
- generic [ref=f11e72]:
|
||||||
|
- generic [ref=f11e74]:
|
||||||
|
- generic [ref=f11e76]: 重现步骤
|
||||||
|
- generic [ref=f11e78]:
|
||||||
|
- paragraph [ref=f11e79]: "[步骤]"
|
||||||
|
- paragraph [ref=f11e80]:
|
||||||
|
- link "index.php?m=file&f=read&t=png&fileID=1415" [ref=f11e81] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=file&f=read&t=png&fileID=1415
|
||||||
|
- img "index.php?m=file&f=read&t=png&fileID=1415" [ref=f11e82]
|
||||||
|
- paragraph [ref=f11e83]: 图1
|
||||||
|
- paragraph [ref=f11e84]: 1、如上图1所示:手术管理-》门诊手术安排:手术申请查询未过滤掉已安排的手术申请单。
|
||||||
|
- paragraph [ref=f11e85]: "[结果]"
|
||||||
|
- paragraph [ref=f11e86]: 1、手术管理-》门诊手术安排:手术申请查询未过滤掉已安排的手术申请单。
|
||||||
|
- paragraph [ref=f11e87]: "[期望]"
|
||||||
|
- paragraph [ref=f11e88]: 1、手术管理-》门诊手术安排:手术申请查询过滤掉已安排的手术申请单。
|
||||||
|
- generic [ref=f11e90]:
|
||||||
|
- generic [ref=f11e94]:
|
||||||
|
- generic [ref=f11e95]: 历史记录
|
||||||
|
- navigation [ref=f11e96]:
|
||||||
|
- button "" [ref=f11e97] [cursor=pointer]:
|
||||||
|
- generic [ref=f11e98]:
|
||||||
|
- button " 添加备注" [ref=f11e99] [cursor=pointer]:
|
||||||
|
- generic [ref=f11e100]:
|
||||||
|
- generic [ref=f11e101]: 添加备注
|
||||||
|
- list [ref=f11e103]:
|
||||||
|
- listitem [ref=f11e104]:
|
||||||
|
- generic [ref=f11e105]:
|
||||||
|
- generic [ref=f11e107]: "1"
|
||||||
|
- generic [ref=f11e110]:
|
||||||
|
- text: 2026-03-30 17:01:33, 由
|
||||||
|
- strong [ref=f11e111]: 陈显精
|
||||||
|
- text: 创建。
|
||||||
|
- listitem [ref=f11e112]:
|
||||||
|
- generic [ref=f11e113]:
|
||||||
|
- generic [ref=f11e115]: "2"
|
||||||
|
- generic [ref=f11e118]:
|
||||||
|
- text: 2026-03-30 17:01:45, 由
|
||||||
|
- strong [ref=f11e119]: 陈显精
|
||||||
|
- text: 指派给
|
||||||
|
- strong [ref=f11e120]: 王怡哲
|
||||||
|
- text: 。
|
||||||
|
- generic [ref=f11e123]:
|
||||||
|
- button " 返回" [ref=f11e124] [cursor=pointer]:
|
||||||
|
- generic [ref=f11e125]:
|
||||||
|
- generic [ref=f11e126]: 返回
|
||||||
|
- link " 确认" [ref=f11e128] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=confirm&bugID=306
|
||||||
|
- generic [ref=f11e129]:
|
||||||
|
- generic [ref=f11e130]: 确认
|
||||||
|
- link " 指派" [ref=f11e131] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=assignTo&bugID=306
|
||||||
|
- generic [ref=f11e132]:
|
||||||
|
- generic [ref=f11e133]: 指派
|
||||||
|
- link " 解决" [ref=f11e134] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=resolve&bugID=306
|
||||||
|
- generic [ref=f11e135]:
|
||||||
|
- generic [ref=f11e136]: 解决
|
||||||
|
- button " 转研发需求" [ref=f11e137] [cursor=pointer]:
|
||||||
|
- generic [ref=f11e138]:
|
||||||
|
- generic [ref=f11e139]: 转研发需求
|
||||||
|
- button " 转任务" [ref=f11e140] [cursor=pointer]:
|
||||||
|
- generic [ref=f11e141]:
|
||||||
|
- generic [ref=f11e142]: 转任务
|
||||||
|
- link " 创建用例" [ref=f11e143] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testcase&f=create&productID=4&branch=0&moduleID=0&from=bug&bugID=306
|
||||||
|
- generic [ref=f11e144]:
|
||||||
|
- generic [ref=f11e145]: 创建用例
|
||||||
|
- link "" [ref=f11e147] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=edit&bugID=306
|
||||||
|
- generic [ref=f11e148]:
|
||||||
|
- link "" [ref=f11e149] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=create&productID=4&branch=0&extra=bugID=306,projectID=11,executionID=0
|
||||||
|
- generic [ref=f11e150]:
|
||||||
|
- link "" [ref=f11e151] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=delete&bugID=306
|
||||||
|
- generic [ref=f11e152]:
|
||||||
|
- generic [ref=f11e153]:
|
||||||
|
- generic [ref=f11e154]:
|
||||||
|
- generic [ref=f11e155]:
|
||||||
|
- list [ref=f11e156]:
|
||||||
|
- listitem [ref=f11e157]:
|
||||||
|
- link "基本信息" [ref=f11e158] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_306_tabPane"
|
||||||
|
- generic [ref=f11e159]: 基本信息
|
||||||
|
- listitem [ref=f11e160]:
|
||||||
|
- link "Bug的一生" [ref=f11e161] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_306_tabPane_1"
|
||||||
|
- generic [ref=f11e162]: Bug的一生
|
||||||
|
- button "" [ref=f11e163] [cursor=pointer]:
|
||||||
|
- generic [ref=f11e164]:
|
||||||
|
- generic [ref=f11e167]:
|
||||||
|
- generic [ref=f11e168]:
|
||||||
|
- generic "所属模块" [ref=f11e169]
|
||||||
|
- list [ref=f11e171]:
|
||||||
|
- listitem [ref=f11e172]: 手术麻醉管理
|
||||||
|
- generic "所属计划" [ref=f11e174]
|
||||||
|
- generic "来源用例" [ref=f11e177]
|
||||||
|
- generic [ref=f11e179]:
|
||||||
|
- generic "Bug类型" [ref=f11e180]
|
||||||
|
- generic [ref=f11e181]: 代码错误
|
||||||
|
- generic [ref=f11e182]:
|
||||||
|
- generic "严重程度" [ref=f11e183]
|
||||||
|
- generic [ref=f11e185]: 3 3
|
||||||
|
- generic [ref=f11e186]:
|
||||||
|
- generic "优先级" [ref=f11e187]
|
||||||
|
- generic [ref=f11e189]: "3"
|
||||||
|
- generic [ref=f11e190]:
|
||||||
|
- generic "Bug状态" [ref=f11e191]
|
||||||
|
- generic [ref=f11e193]: 激活
|
||||||
|
- generic "激活次数" [ref=f11e195]
|
||||||
|
- generic "激活时间" [ref=f11e198]
|
||||||
|
- generic [ref=f11e200]:
|
||||||
|
- generic "是否确认" [ref=f11e201]
|
||||||
|
- generic [ref=f11e202]: 未确认
|
||||||
|
- generic [ref=f11e203]:
|
||||||
|
- generic "指派给" [ref=f11e204]
|
||||||
|
- generic [ref=f11e205]: 王怡哲 于 2026-03-30 17:01:31
|
||||||
|
- generic "截止日期" [ref=f11e207]
|
||||||
|
- generic "反馈者" [ref=f11e210]
|
||||||
|
- generic "通知邮箱" [ref=f11e213]
|
||||||
|
- generic "操作系统" [ref=f11e216]
|
||||||
|
- generic "浏览器" [ref=f11e219]
|
||||||
|
- generic "关键词" [ref=f11e222]
|
||||||
|
- generic "抄送给" [ref=f11e225]
|
||||||
|
- generic [ref=f11e227]:
|
||||||
|
- generic [ref=f11e228]:
|
||||||
|
- list [ref=f11e229]:
|
||||||
|
- listitem [ref=f11e230]:
|
||||||
|
- link "项目/迭代/研发需求/任务" [ref=f11e231] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_306_tabPane_2"
|
||||||
|
- generic [ref=f11e232]: 项目/迭代/研发需求/任务
|
||||||
|
- listitem [ref=f11e233]:
|
||||||
|
- link "其他相关" [ref=f11e234] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_306_tabPane_3"
|
||||||
|
- generic [ref=f11e235]: 其他相关
|
||||||
|
- button "" [ref=f11e236] [cursor=pointer]:
|
||||||
|
- generic [ref=f11e237]:
|
||||||
|
- generic [ref=f11e240]:
|
||||||
|
- generic [ref=f11e241]:
|
||||||
|
- generic "所属项目" [ref=f11e242]
|
||||||
|
- link "开源HIS改造落地" [ref=f11e244] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=view&projectID=11
|
||||||
|
- generic "所属执行" [ref=f11e246]
|
||||||
|
- generic "相关需求" [ref=f11e249]
|
||||||
|
- generic "相关任务" [ref=f11e252]
|
||||||
|
- button "" [ref=f11e255] [cursor=pointer]:
|
||||||
|
- generic [ref=f11e256]:
|
||||||
|
- text: "* *"
|
||||||
|
- generic [ref=e67]:
|
||||||
|
- button " 研发综合界面" [ref=e69] [cursor=pointer]:
|
||||||
|
- generic [ref=e70]:
|
||||||
|
- generic [ref=e71]: 研发综合界面
|
||||||
|
- list [ref=e73]:
|
||||||
|
- listitem [ref=e74]:
|
||||||
|
- generic [ref=e76] [cursor=pointer]: 测试
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- textbox [ref=e83]:
|
||||||
|
- /placeholder: 搜索
|
||||||
|
- button [ref=e85] [cursor=pointer]:
|
||||||
|
- img [ref=e87]
|
||||||
|
- link " 开源版21.7" [ref=e88] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e89]:
|
||||||
|
- generic [ref=e90]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e91] [cursor=pointer]:
|
||||||
|
- generic [ref=e92]: 升级
|
||||||
|
- generic [ref=e93]:
|
||||||
91
.playwright-mcp/page-2026-03-31T08-18-43-555Z.yml
Normal file
91
.playwright-mcp/page-2026-03-31T08-18-43-555Z.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- button [ref=e73] [cursor=pointer]:
|
||||||
|
- img [ref=e75]
|
||||||
|
- link " 开源版21.7" [ref=e76] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- generic [ref=e78]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e79] [cursor=pointer]:
|
||||||
|
- generic [ref=e80]: 升级
|
||||||
|
- generic [ref=e81]:
|
||||||
91
.playwright-mcp/page-2026-03-31T08-18-46-583Z.yml
Normal file
91
.playwright-mcp/page-2026-03-31T08-18-46-583Z.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- button [ref=e73] [cursor=pointer]:
|
||||||
|
- img [ref=e75]
|
||||||
|
- link " 开源版21.7" [ref=e76] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- generic [ref=e78]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e79] [cursor=pointer]:
|
||||||
|
- generic [ref=e80]: 升级
|
||||||
|
- generic [ref=e81]:
|
||||||
91
.playwright-mcp/page-2026-03-31T08-18-53-714Z.yml
Normal file
91
.playwright-mcp/page-2026-03-31T08-18-53-714Z.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- button [ref=e73] [cursor=pointer]:
|
||||||
|
- img [ref=e75]
|
||||||
|
- link " 开源版21.7" [ref=e76] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- generic [ref=e78]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e79] [cursor=pointer]:
|
||||||
|
- generic [ref=e80]: 升级
|
||||||
|
- generic [ref=e81]:
|
||||||
91
.playwright-mcp/page-2026-03-31T08-19-16-938Z.yml
Normal file
91
.playwright-mcp/page-2026-03-31T08-19-16-938Z.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- button [ref=e73] [cursor=pointer]:
|
||||||
|
- img [ref=e75]
|
||||||
|
- link " 开源版21.7" [ref=e76] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- generic [ref=e78]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e79] [cursor=pointer]:
|
||||||
|
- generic [ref=e80]: 升级
|
||||||
|
- generic [ref=e81]:
|
||||||
93
.playwright-mcp/page-2026-03-31T08-20-38-261Z.yml
Normal file
93
.playwright-mcp/page-2026-03-31T08-20-38-261Z.yml
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- textbox [ref=e77]:
|
||||||
|
- /placeholder: 搜索
|
||||||
|
- button [ref=e79] [cursor=pointer]:
|
||||||
|
- img [ref=e81]
|
||||||
|
- link " 开源版21.7" [ref=e82] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- generic [ref=e84]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e85] [cursor=pointer]:
|
||||||
|
- generic [ref=e86]: 升级
|
||||||
|
- generic [ref=e87]:
|
||||||
322
.playwright-mcp/page-2026-03-31T08-21-04-747Z.yml
Normal file
322
.playwright-mcp/page-2026-03-31T08-21-04-747Z.yml
Normal file
@@ -0,0 +1,322 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- iframe [ref=e89]:
|
||||||
|
- generic [active] [ref=f19e1]:
|
||||||
|
- banner [ref=f19e2]:
|
||||||
|
- generic [ref=f19e3]:
|
||||||
|
- generic [ref=f19e4]:
|
||||||
|
- link " 测试" [ref=f19e6] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=f19e7]:
|
||||||
|
- generic [ref=f19e8]: 测试
|
||||||
|
- button " 开源HIS改造落地" [ref=f19e10] [cursor=pointer]:
|
||||||
|
- generic [ref=f19e11]:
|
||||||
|
- generic "开源HIS改造落地" [ref=f19e12]
|
||||||
|
- navigation [ref=f19e15]:
|
||||||
|
- list [ref=f19e16]:
|
||||||
|
- listitem [ref=f19e17]:
|
||||||
|
- link "仪表盘" [ref=f19e18] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=f19e19]: 仪表盘
|
||||||
|
- listitem [ref=f19e20]
|
||||||
|
- listitem [ref=f19e21]:
|
||||||
|
- link "Bug" [ref=f19e22] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=browse&productID=4
|
||||||
|
- generic [ref=f19e23]: Bug
|
||||||
|
- listitem [ref=f19e24]:
|
||||||
|
- link "用例" [ref=f19e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testcase&f=browse&productID=4
|
||||||
|
- generic [ref=f19e26]: 用例
|
||||||
|
- listitem [ref=f19e27]:
|
||||||
|
- link "套件" [ref=f19e28] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testsuite&f=browse&productID=4
|
||||||
|
- generic [ref=f19e29]: 套件
|
||||||
|
- listitem [ref=f19e30]
|
||||||
|
- listitem [ref=f19e31]:
|
||||||
|
- link "测试单" [ref=f19e32] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testtask&f=browse&productID=4
|
||||||
|
- generic [ref=f19e33]: 测试单
|
||||||
|
- listitem [ref=f19e34]:
|
||||||
|
- link "测试报告" [ref=f19e35] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testreport&f=browse&productID=4
|
||||||
|
- generic [ref=f19e36]: 测试报告
|
||||||
|
- listitem [ref=f19e37]
|
||||||
|
- listitem [ref=f19e38]:
|
||||||
|
- link "用例库" [ref=f19e39] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=caselib&f=browse&libID=0
|
||||||
|
- generic [ref=f19e40]: 用例库
|
||||||
|
- listitem [ref=f19e41]
|
||||||
|
- listitem [ref=f19e42]:
|
||||||
|
- link "自动化" [ref=f19e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=zanode&f=instruction
|
||||||
|
- generic [ref=f19e44]: 自动化
|
||||||
|
- generic [ref=f19e46]:
|
||||||
|
- button "" [ref=f19e47] [cursor=pointer]:
|
||||||
|
- generic [ref=f19e48]:
|
||||||
|
- button " 9" [ref=f19e49] [cursor=pointer]:
|
||||||
|
- generic [ref=f19e50]:
|
||||||
|
- generic [ref=f19e51]: "9"
|
||||||
|
- generic [ref=f19e54] [cursor=pointer]: A
|
||||||
|
- generic [ref=f19e57]:
|
||||||
|
- generic [ref=f19e58]:
|
||||||
|
- generic [ref=f19e59]:
|
||||||
|
- button " 返回" [ref=f19e60] [cursor=pointer]:
|
||||||
|
- generic [ref=f19e61]:
|
||||||
|
- generic [ref=f19e62]: 返回
|
||||||
|
- generic [ref=f19e63]:
|
||||||
|
- generic [ref=f19e64]: "306"
|
||||||
|
- generic [ref=f19e65]: 手术管理-》门诊手术安排:手术申请查询未过滤掉已安排的手术申请单
|
||||||
|
- link " 提Bug" [ref=f19e68] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=create&productID=4&branch=0&extras=projectID=11,executionID=0,moduleID=126
|
||||||
|
- generic [ref=f19e69]:
|
||||||
|
- generic [ref=f19e70]: 提Bug
|
||||||
|
- generic [ref=f19e71]:
|
||||||
|
- generic [ref=f19e72]:
|
||||||
|
- generic [ref=f19e74]:
|
||||||
|
- generic [ref=f19e76]: 重现步骤
|
||||||
|
- generic [ref=f19e78]:
|
||||||
|
- paragraph [ref=f19e79]: "[步骤]"
|
||||||
|
- paragraph [ref=f19e80]:
|
||||||
|
- link "index.php?m=file&f=read&t=png&fileID=1415" [ref=f19e81] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=file&f=read&t=png&fileID=1415
|
||||||
|
- img "index.php?m=file&f=read&t=png&fileID=1415" [ref=f19e82]
|
||||||
|
- paragraph [ref=f19e83]: 图1
|
||||||
|
- paragraph [ref=f19e84]: 1、如上图1所示:手术管理-》门诊手术安排:手术申请查询未过滤掉已安排的手术申请单。
|
||||||
|
- paragraph [ref=f19e85]: "[结果]"
|
||||||
|
- paragraph [ref=f19e86]: 1、手术管理-》门诊手术安排:手术申请查询未过滤掉已安排的手术申请单。
|
||||||
|
- paragraph [ref=f19e87]: "[期望]"
|
||||||
|
- paragraph [ref=f19e88]: 1、手术管理-》门诊手术安排:手术申请查询过滤掉已安排的手术申请单。
|
||||||
|
- generic [ref=f19e90]:
|
||||||
|
- generic [ref=f19e94]:
|
||||||
|
- generic [ref=f19e95]: 历史记录
|
||||||
|
- navigation [ref=f19e96]:
|
||||||
|
- button "" [ref=f19e97] [cursor=pointer]:
|
||||||
|
- generic [ref=f19e98]:
|
||||||
|
- button " 添加备注" [ref=f19e99] [cursor=pointer]:
|
||||||
|
- generic [ref=f19e100]:
|
||||||
|
- generic [ref=f19e101]: 添加备注
|
||||||
|
- list [ref=f19e103]:
|
||||||
|
- listitem [ref=f19e104]:
|
||||||
|
- generic [ref=f19e105]:
|
||||||
|
- generic [ref=f19e107]: "1"
|
||||||
|
- generic [ref=f19e110]:
|
||||||
|
- text: 2026-03-30 17:01:33, 由
|
||||||
|
- strong [ref=f19e111]: 陈显精
|
||||||
|
- text: 创建。
|
||||||
|
- listitem [ref=f19e112]:
|
||||||
|
- generic [ref=f19e113]:
|
||||||
|
- generic [ref=f19e115]: "2"
|
||||||
|
- generic [ref=f19e118]:
|
||||||
|
- text: 2026-03-30 17:01:45, 由
|
||||||
|
- strong [ref=f19e119]: 陈显精
|
||||||
|
- text: 指派给
|
||||||
|
- strong [ref=f19e120]: 王怡哲
|
||||||
|
- text: 。
|
||||||
|
- generic [ref=f19e123]:
|
||||||
|
- button " 返回" [ref=f19e124] [cursor=pointer]:
|
||||||
|
- generic [ref=f19e125]:
|
||||||
|
- generic [ref=f19e126]: 返回
|
||||||
|
- link " 确认" [ref=f19e128] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=confirm&bugID=306
|
||||||
|
- generic [ref=f19e129]:
|
||||||
|
- generic [ref=f19e130]: 确认
|
||||||
|
- link " 指派" [ref=f19e131] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=assignTo&bugID=306
|
||||||
|
- generic [ref=f19e132]:
|
||||||
|
- generic [ref=f19e133]: 指派
|
||||||
|
- link " 解决" [ref=f19e134] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=resolve&bugID=306
|
||||||
|
- generic [ref=f19e135]:
|
||||||
|
- generic [ref=f19e136]: 解决
|
||||||
|
- button " 转研发需求" [ref=f19e137] [cursor=pointer]:
|
||||||
|
- generic [ref=f19e138]:
|
||||||
|
- generic [ref=f19e139]: 转研发需求
|
||||||
|
- button " 转任务" [ref=f19e140] [cursor=pointer]:
|
||||||
|
- generic [ref=f19e141]:
|
||||||
|
- generic [ref=f19e142]: 转任务
|
||||||
|
- link " 创建用例" [ref=f19e143] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testcase&f=create&productID=4&branch=0&moduleID=0&from=bug&bugID=306
|
||||||
|
- generic [ref=f19e144]:
|
||||||
|
- generic [ref=f19e145]: 创建用例
|
||||||
|
- link "" [ref=f19e147] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=edit&bugID=306
|
||||||
|
- generic [ref=f19e148]:
|
||||||
|
- link "" [ref=f19e149] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=create&productID=4&branch=0&extra=bugID=306,projectID=11,executionID=0
|
||||||
|
- generic [ref=f19e150]:
|
||||||
|
- link "" [ref=f19e151] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=delete&bugID=306
|
||||||
|
- generic [ref=f19e152]:
|
||||||
|
- generic [ref=f19e153]:
|
||||||
|
- generic [ref=f19e154]:
|
||||||
|
- generic [ref=f19e155]:
|
||||||
|
- list [ref=f19e156]:
|
||||||
|
- listitem [ref=f19e157]:
|
||||||
|
- link "基本信息" [ref=f19e158] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_306_tabPane"
|
||||||
|
- generic [ref=f19e159]: 基本信息
|
||||||
|
- listitem [ref=f19e160]:
|
||||||
|
- link "Bug的一生" [ref=f19e161] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_306_tabPane_1"
|
||||||
|
- generic [ref=f19e162]: Bug的一生
|
||||||
|
- button "" [ref=f19e163] [cursor=pointer]:
|
||||||
|
- generic [ref=f19e164]:
|
||||||
|
- generic [ref=f19e167]:
|
||||||
|
- generic [ref=f19e168]:
|
||||||
|
- generic "所属模块" [ref=f19e169]
|
||||||
|
- list [ref=f19e171]:
|
||||||
|
- listitem [ref=f19e172]: 手术麻醉管理
|
||||||
|
- generic "所属计划" [ref=f19e174]
|
||||||
|
- generic "来源用例" [ref=f19e177]
|
||||||
|
- generic [ref=f19e179]:
|
||||||
|
- generic "Bug类型" [ref=f19e180]
|
||||||
|
- generic [ref=f19e181]: 代码错误
|
||||||
|
- generic [ref=f19e182]:
|
||||||
|
- generic "严重程度" [ref=f19e183]
|
||||||
|
- generic [ref=f19e185]: 3 3
|
||||||
|
- generic [ref=f19e186]:
|
||||||
|
- generic "优先级" [ref=f19e187]
|
||||||
|
- generic [ref=f19e189]: "3"
|
||||||
|
- generic [ref=f19e190]:
|
||||||
|
- generic "Bug状态" [ref=f19e191]
|
||||||
|
- generic [ref=f19e193]: 激活
|
||||||
|
- generic "激活次数" [ref=f19e195]
|
||||||
|
- generic "激活时间" [ref=f19e198]
|
||||||
|
- generic [ref=f19e200]:
|
||||||
|
- generic "是否确认" [ref=f19e201]
|
||||||
|
- generic [ref=f19e202]: 未确认
|
||||||
|
- generic [ref=f19e203]:
|
||||||
|
- generic "指派给" [ref=f19e204]
|
||||||
|
- generic [ref=f19e205]: 王怡哲 于 2026-03-30 17:01:31
|
||||||
|
- generic "截止日期" [ref=f19e207]
|
||||||
|
- generic "反馈者" [ref=f19e210]
|
||||||
|
- generic "通知邮箱" [ref=f19e213]
|
||||||
|
- generic "操作系统" [ref=f19e216]
|
||||||
|
- generic "浏览器" [ref=f19e219]
|
||||||
|
- generic "关键词" [ref=f19e222]
|
||||||
|
- generic "抄送给" [ref=f19e225]
|
||||||
|
- generic [ref=f19e227]:
|
||||||
|
- generic [ref=f19e228]:
|
||||||
|
- list [ref=f19e229]:
|
||||||
|
- listitem [ref=f19e230]:
|
||||||
|
- link "项目/迭代/研发需求/任务" [ref=f19e231] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_306_tabPane_2"
|
||||||
|
- generic [ref=f19e232]: 项目/迭代/研发需求/任务
|
||||||
|
- listitem [ref=f19e233]:
|
||||||
|
- link "其他相关" [ref=f19e234] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_306_tabPane_3"
|
||||||
|
- generic [ref=f19e235]: 其他相关
|
||||||
|
- button "" [ref=f19e236] [cursor=pointer]:
|
||||||
|
- generic [ref=f19e237]:
|
||||||
|
- generic [ref=f19e240]:
|
||||||
|
- generic [ref=f19e241]:
|
||||||
|
- generic "所属项目" [ref=f19e242]
|
||||||
|
- link "开源HIS改造落地" [ref=f19e244] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=view&projectID=11
|
||||||
|
- generic "所属执行" [ref=f19e246]
|
||||||
|
- generic "相关需求" [ref=f19e249]
|
||||||
|
- generic "相关任务" [ref=f19e252]
|
||||||
|
- button "" [ref=f19e255] [cursor=pointer]:
|
||||||
|
- generic [ref=f19e256]:
|
||||||
|
- generic:
|
||||||
|
- generic:
|
||||||
|
- link "" [ref=f19e257] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=view&bugID=307
|
||||||
|
- generic [ref=f19e258]:
|
||||||
|
- link "" [ref=f19e259] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=view&bugID=305
|
||||||
|
- generic [ref=f19e260]:
|
||||||
|
- text: "* *"
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list [ref=e90]:
|
||||||
|
- listitem [ref=e91]:
|
||||||
|
- generic [ref=e93] [cursor=pointer]: 测试
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- textbox [ref=e77]:
|
||||||
|
- /placeholder: 搜索
|
||||||
|
- button [ref=e79] [cursor=pointer]:
|
||||||
|
- img [ref=e81]
|
||||||
|
- link " 开源版21.7" [ref=e82] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- generic [ref=e84]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e85] [cursor=pointer]:
|
||||||
|
- generic [ref=e86]: 升级
|
||||||
|
- generic [ref=e87]:
|
||||||
91
.playwright-mcp/page-2026-03-31T08-25-34-591Z.yml
Normal file
91
.playwright-mcp/page-2026-03-31T08-25-34-591Z.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- button [ref=e73] [cursor=pointer]:
|
||||||
|
- img [ref=e75]
|
||||||
|
- link " 开源版21.7" [ref=e76] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- generic [ref=e78]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e79] [cursor=pointer]:
|
||||||
|
- generic [ref=e80]: 升级
|
||||||
|
- generic [ref=e81]:
|
||||||
322
.playwright-mcp/page-2026-03-31T08-26-17-242Z.yml
Normal file
322
.playwright-mcp/page-2026-03-31T08-26-17-242Z.yml
Normal file
@@ -0,0 +1,322 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- iframe [ref=e83]:
|
||||||
|
- generic [active] [ref=f20e1]:
|
||||||
|
- banner [ref=f20e2]:
|
||||||
|
- generic [ref=f20e3]:
|
||||||
|
- generic [ref=f20e4]:
|
||||||
|
- link " 测试" [ref=f20e6] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=f20e7]:
|
||||||
|
- generic [ref=f20e8]: 测试
|
||||||
|
- button " 开源HIS改造落地" [ref=f20e10] [cursor=pointer]:
|
||||||
|
- generic [ref=f20e11]:
|
||||||
|
- generic "开源HIS改造落地" [ref=f20e12]
|
||||||
|
- navigation [ref=f20e15]:
|
||||||
|
- list [ref=f20e16]:
|
||||||
|
- listitem [ref=f20e17]:
|
||||||
|
- link "仪表盘" [ref=f20e18] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=f20e19]: 仪表盘
|
||||||
|
- listitem [ref=f20e20]
|
||||||
|
- listitem [ref=f20e21]:
|
||||||
|
- link "Bug" [ref=f20e22] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=browse&productID=4
|
||||||
|
- generic [ref=f20e23]: Bug
|
||||||
|
- listitem [ref=f20e24]:
|
||||||
|
- link "用例" [ref=f20e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testcase&f=browse&productID=4
|
||||||
|
- generic [ref=f20e26]: 用例
|
||||||
|
- listitem [ref=f20e27]:
|
||||||
|
- link "套件" [ref=f20e28] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testsuite&f=browse&productID=4
|
||||||
|
- generic [ref=f20e29]: 套件
|
||||||
|
- listitem [ref=f20e30]
|
||||||
|
- listitem [ref=f20e31]:
|
||||||
|
- link "测试单" [ref=f20e32] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testtask&f=browse&productID=4
|
||||||
|
- generic [ref=f20e33]: 测试单
|
||||||
|
- listitem [ref=f20e34]:
|
||||||
|
- link "测试报告" [ref=f20e35] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testreport&f=browse&productID=4
|
||||||
|
- generic [ref=f20e36]: 测试报告
|
||||||
|
- listitem [ref=f20e37]
|
||||||
|
- listitem [ref=f20e38]:
|
||||||
|
- link "用例库" [ref=f20e39] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=caselib&f=browse&libID=0
|
||||||
|
- generic [ref=f20e40]: 用例库
|
||||||
|
- listitem [ref=f20e41]
|
||||||
|
- listitem [ref=f20e42]:
|
||||||
|
- link "自动化" [ref=f20e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=zanode&f=instruction
|
||||||
|
- generic [ref=f20e44]: 自动化
|
||||||
|
- generic [ref=f20e46]:
|
||||||
|
- button "" [ref=f20e47] [cursor=pointer]:
|
||||||
|
- generic [ref=f20e48]:
|
||||||
|
- button " 9" [ref=f20e49] [cursor=pointer]:
|
||||||
|
- generic [ref=f20e50]:
|
||||||
|
- generic [ref=f20e51]: "9"
|
||||||
|
- generic [ref=f20e54] [cursor=pointer]: A
|
||||||
|
- generic [ref=f20e57]:
|
||||||
|
- generic [ref=f20e58]:
|
||||||
|
- generic [ref=f20e59]:
|
||||||
|
- button " 返回" [ref=f20e60] [cursor=pointer]:
|
||||||
|
- generic [ref=f20e61]:
|
||||||
|
- generic [ref=f20e62]: 返回
|
||||||
|
- generic [ref=f20e63]:
|
||||||
|
- generic [ref=f20e64]: "306"
|
||||||
|
- generic [ref=f20e65]: 手术管理-》门诊手术安排:手术申请查询未过滤掉已安排的手术申请单
|
||||||
|
- link " 提Bug" [ref=f20e68] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=create&productID=4&branch=0&extras=projectID=11,executionID=0,moduleID=126
|
||||||
|
- generic [ref=f20e69]:
|
||||||
|
- generic [ref=f20e70]: 提Bug
|
||||||
|
- generic [ref=f20e71]:
|
||||||
|
- generic [ref=f20e72]:
|
||||||
|
- generic [ref=f20e74]:
|
||||||
|
- generic [ref=f20e76]: 重现步骤
|
||||||
|
- generic [ref=f20e78]:
|
||||||
|
- paragraph [ref=f20e79]: "[步骤]"
|
||||||
|
- paragraph [ref=f20e80]:
|
||||||
|
- link "index.php?m=file&f=read&t=png&fileID=1415" [ref=f20e81] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=file&f=read&t=png&fileID=1415
|
||||||
|
- img "index.php?m=file&f=read&t=png&fileID=1415" [ref=f20e82]
|
||||||
|
- paragraph [ref=f20e83]: 图1
|
||||||
|
- paragraph [ref=f20e84]: 1、如上图1所示:手术管理-》门诊手术安排:手术申请查询未过滤掉已安排的手术申请单。
|
||||||
|
- paragraph [ref=f20e85]: "[结果]"
|
||||||
|
- paragraph [ref=f20e86]: 1、手术管理-》门诊手术安排:手术申请查询未过滤掉已安排的手术申请单。
|
||||||
|
- paragraph [ref=f20e87]: "[期望]"
|
||||||
|
- paragraph [ref=f20e88]: 1、手术管理-》门诊手术安排:手术申请查询过滤掉已安排的手术申请单。
|
||||||
|
- generic [ref=f20e90]:
|
||||||
|
- generic [ref=f20e94]:
|
||||||
|
- generic [ref=f20e95]: 历史记录
|
||||||
|
- navigation [ref=f20e96]:
|
||||||
|
- button "" [ref=f20e97] [cursor=pointer]:
|
||||||
|
- generic [ref=f20e98]:
|
||||||
|
- button " 添加备注" [ref=f20e99] [cursor=pointer]:
|
||||||
|
- generic [ref=f20e100]:
|
||||||
|
- generic [ref=f20e101]: 添加备注
|
||||||
|
- list [ref=f20e103]:
|
||||||
|
- listitem [ref=f20e104]:
|
||||||
|
- generic [ref=f20e105]:
|
||||||
|
- generic [ref=f20e107]: "1"
|
||||||
|
- generic [ref=f20e110]:
|
||||||
|
- text: 2026-03-30 17:01:33, 由
|
||||||
|
- strong [ref=f20e111]: 陈显精
|
||||||
|
- text: 创建。
|
||||||
|
- listitem [ref=f20e112]:
|
||||||
|
- generic [ref=f20e113]:
|
||||||
|
- generic [ref=f20e115]: "2"
|
||||||
|
- generic [ref=f20e118]:
|
||||||
|
- text: 2026-03-30 17:01:45, 由
|
||||||
|
- strong [ref=f20e119]: 陈显精
|
||||||
|
- text: 指派给
|
||||||
|
- strong [ref=f20e120]: 王怡哲
|
||||||
|
- text: 。
|
||||||
|
- generic [ref=f20e123]:
|
||||||
|
- button " 返回" [ref=f20e124] [cursor=pointer]:
|
||||||
|
- generic [ref=f20e125]:
|
||||||
|
- generic [ref=f20e126]: 返回
|
||||||
|
- link " 确认" [ref=f20e128] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=confirm&bugID=306
|
||||||
|
- generic [ref=f20e129]:
|
||||||
|
- generic [ref=f20e130]: 确认
|
||||||
|
- link " 指派" [ref=f20e131] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=assignTo&bugID=306
|
||||||
|
- generic [ref=f20e132]:
|
||||||
|
- generic [ref=f20e133]: 指派
|
||||||
|
- link " 解决" [ref=f20e134] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=resolve&bugID=306
|
||||||
|
- generic [ref=f20e135]:
|
||||||
|
- generic [ref=f20e136]: 解决
|
||||||
|
- button " 转研发需求" [ref=f20e137] [cursor=pointer]:
|
||||||
|
- generic [ref=f20e138]:
|
||||||
|
- generic [ref=f20e139]: 转研发需求
|
||||||
|
- button " 转任务" [ref=f20e140] [cursor=pointer]:
|
||||||
|
- generic [ref=f20e141]:
|
||||||
|
- generic [ref=f20e142]: 转任务
|
||||||
|
- link " 创建用例" [ref=f20e143] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testcase&f=create&productID=4&branch=0&moduleID=0&from=bug&bugID=306
|
||||||
|
- generic [ref=f20e144]:
|
||||||
|
- generic [ref=f20e145]: 创建用例
|
||||||
|
- link "" [ref=f20e147] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=edit&bugID=306
|
||||||
|
- generic [ref=f20e148]:
|
||||||
|
- link "" [ref=f20e149] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=create&productID=4&branch=0&extra=bugID=306,projectID=11,executionID=0
|
||||||
|
- generic [ref=f20e150]:
|
||||||
|
- link "" [ref=f20e151] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=delete&bugID=306
|
||||||
|
- generic [ref=f20e152]:
|
||||||
|
- generic [ref=f20e153]:
|
||||||
|
- generic [ref=f20e154]:
|
||||||
|
- generic [ref=f20e155]:
|
||||||
|
- list [ref=f20e156]:
|
||||||
|
- listitem [ref=f20e157]:
|
||||||
|
- link "基本信息" [ref=f20e158] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_306_tabPane"
|
||||||
|
- generic [ref=f20e159]: 基本信息
|
||||||
|
- listitem [ref=f20e160]:
|
||||||
|
- link "Bug的一生" [ref=f20e161] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_306_tabPane_1"
|
||||||
|
- generic [ref=f20e162]: Bug的一生
|
||||||
|
- button "" [ref=f20e163] [cursor=pointer]:
|
||||||
|
- generic [ref=f20e164]:
|
||||||
|
- generic [ref=f20e167]:
|
||||||
|
- generic [ref=f20e168]:
|
||||||
|
- generic "所属模块" [ref=f20e169]
|
||||||
|
- list [ref=f20e171]:
|
||||||
|
- listitem [ref=f20e172]: 手术麻醉管理
|
||||||
|
- generic "所属计划" [ref=f20e174]
|
||||||
|
- generic "来源用例" [ref=f20e177]
|
||||||
|
- generic [ref=f20e179]:
|
||||||
|
- generic "Bug类型" [ref=f20e180]
|
||||||
|
- generic [ref=f20e181]: 代码错误
|
||||||
|
- generic [ref=f20e182]:
|
||||||
|
- generic "严重程度" [ref=f20e183]
|
||||||
|
- generic [ref=f20e185]: 3 3
|
||||||
|
- generic [ref=f20e186]:
|
||||||
|
- generic "优先级" [ref=f20e187]
|
||||||
|
- generic [ref=f20e189]: "3"
|
||||||
|
- generic [ref=f20e190]:
|
||||||
|
- generic "Bug状态" [ref=f20e191]
|
||||||
|
- generic [ref=f20e193]: 激活
|
||||||
|
- generic "激活次数" [ref=f20e195]
|
||||||
|
- generic "激活时间" [ref=f20e198]
|
||||||
|
- generic [ref=f20e200]:
|
||||||
|
- generic "是否确认" [ref=f20e201]
|
||||||
|
- generic [ref=f20e202]: 未确认
|
||||||
|
- generic [ref=f20e203]:
|
||||||
|
- generic "指派给" [ref=f20e204]
|
||||||
|
- generic [ref=f20e205]: 王怡哲 于 2026-03-30 17:01:31
|
||||||
|
- generic "截止日期" [ref=f20e207]
|
||||||
|
- generic "反馈者" [ref=f20e210]
|
||||||
|
- generic "通知邮箱" [ref=f20e213]
|
||||||
|
- generic "操作系统" [ref=f20e216]
|
||||||
|
- generic "浏览器" [ref=f20e219]
|
||||||
|
- generic "关键词" [ref=f20e222]
|
||||||
|
- generic "抄送给" [ref=f20e225]
|
||||||
|
- generic [ref=f20e227]:
|
||||||
|
- generic [ref=f20e228]:
|
||||||
|
- list [ref=f20e229]:
|
||||||
|
- listitem [ref=f20e230]:
|
||||||
|
- link "项目/迭代/研发需求/任务" [ref=f20e231] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_306_tabPane_2"
|
||||||
|
- generic [ref=f20e232]: 项目/迭代/研发需求/任务
|
||||||
|
- listitem [ref=f20e233]:
|
||||||
|
- link "其他相关" [ref=f20e234] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_306_tabPane_3"
|
||||||
|
- generic [ref=f20e235]: 其他相关
|
||||||
|
- button "" [ref=f20e236] [cursor=pointer]:
|
||||||
|
- generic [ref=f20e237]:
|
||||||
|
- generic [ref=f20e240]:
|
||||||
|
- generic [ref=f20e241]:
|
||||||
|
- generic "所属项目" [ref=f20e242]
|
||||||
|
- link "开源HIS改造落地" [ref=f20e244] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=view&projectID=11
|
||||||
|
- generic "所属执行" [ref=f20e246]
|
||||||
|
- generic "相关需求" [ref=f20e249]
|
||||||
|
- generic "相关任务" [ref=f20e252]
|
||||||
|
- button "" [ref=f20e255] [cursor=pointer]:
|
||||||
|
- generic [ref=f20e256]:
|
||||||
|
- generic:
|
||||||
|
- generic:
|
||||||
|
- link "" [ref=f20e257] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=view&bugID=307
|
||||||
|
- generic [ref=f20e258]:
|
||||||
|
- link "" [ref=f20e259] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=view&bugID=305
|
||||||
|
- generic [ref=f20e260]:
|
||||||
|
- text: "* *"
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list [ref=e84]:
|
||||||
|
- listitem [ref=e85]:
|
||||||
|
- generic [ref=e87] [cursor=pointer]: 测试
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- textbox [ref=e93]:
|
||||||
|
- /placeholder: 搜索
|
||||||
|
- button [ref=e73] [cursor=pointer]:
|
||||||
|
- img [ref=e75]
|
||||||
|
- link " 开源版21.7" [ref=e76] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e77]:
|
||||||
|
- generic [ref=e78]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e79] [cursor=pointer]:
|
||||||
|
- generic [ref=e80]: 升级
|
||||||
|
- generic [ref=e81]:
|
||||||
93
.playwright-mcp/page-2026-03-31T08-27-31-803Z.yml
Normal file
93
.playwright-mcp/page-2026-03-31T08-27-31-803Z.yml
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- textbox [ref=e77]:
|
||||||
|
- /placeholder: 搜索
|
||||||
|
- button [ref=e79] [cursor=pointer]:
|
||||||
|
- img [ref=e81]
|
||||||
|
- link " 开源版21.7" [ref=e82] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- generic [ref=e84]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e85] [cursor=pointer]:
|
||||||
|
- generic [ref=e86]: 升级
|
||||||
|
- generic [ref=e87]:
|
||||||
337
.playwright-mcp/page-2026-03-31T08-28-02-195Z.yml
Normal file
337
.playwright-mcp/page-2026-03-31T08-28-02-195Z.yml
Normal file
@@ -0,0 +1,337 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- iframe [ref=e89]:
|
||||||
|
- generic [active] [ref=f1e1]:
|
||||||
|
- banner [ref=f1e2]:
|
||||||
|
- generic [ref=f1e3]:
|
||||||
|
- generic [ref=f1e4]:
|
||||||
|
- link " 测试" [ref=f1e6] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=f1e7]:
|
||||||
|
- generic [ref=f1e8]: 测试
|
||||||
|
- button " 开源HIS改造落地" [ref=f1e10] [cursor=pointer]:
|
||||||
|
- generic [ref=f1e11]:
|
||||||
|
- generic "开源HIS改造落地" [ref=f1e12]
|
||||||
|
- navigation [ref=f1e15]:
|
||||||
|
- list [ref=f1e16]:
|
||||||
|
- listitem [ref=f1e17]:
|
||||||
|
- link "仪表盘" [ref=f1e18] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=f1e19]: 仪表盘
|
||||||
|
- listitem [ref=f1e20]
|
||||||
|
- listitem [ref=f1e21]:
|
||||||
|
- link "Bug" [ref=f1e22] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=browse&productID=4
|
||||||
|
- generic [ref=f1e23]: Bug
|
||||||
|
- listitem [ref=f1e24]:
|
||||||
|
- link "用例" [ref=f1e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testcase&f=browse&productID=4
|
||||||
|
- generic [ref=f1e26]: 用例
|
||||||
|
- listitem [ref=f1e27]:
|
||||||
|
- link "套件" [ref=f1e28] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testsuite&f=browse&productID=4
|
||||||
|
- generic [ref=f1e29]: 套件
|
||||||
|
- listitem [ref=f1e30]
|
||||||
|
- listitem [ref=f1e31]:
|
||||||
|
- link "测试单" [ref=f1e32] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testtask&f=browse&productID=4
|
||||||
|
- generic [ref=f1e33]: 测试单
|
||||||
|
- listitem [ref=f1e34]:
|
||||||
|
- link "测试报告" [ref=f1e35] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testreport&f=browse&productID=4
|
||||||
|
- generic [ref=f1e36]: 测试报告
|
||||||
|
- listitem [ref=f1e37]
|
||||||
|
- listitem [ref=f1e38]:
|
||||||
|
- link "用例库" [ref=f1e39] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=caselib&f=browse&libID=0
|
||||||
|
- generic [ref=f1e40]: 用例库
|
||||||
|
- listitem [ref=f1e41]
|
||||||
|
- listitem [ref=f1e42]:
|
||||||
|
- link "自动化" [ref=f1e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=zanode&f=instruction
|
||||||
|
- generic [ref=f1e44]: 自动化
|
||||||
|
- generic [ref=f1e46]:
|
||||||
|
- button "" [ref=f1e47] [cursor=pointer]:
|
||||||
|
- generic [ref=f1e48]:
|
||||||
|
- button " 9" [ref=f1e49] [cursor=pointer]:
|
||||||
|
- generic [ref=f1e50]:
|
||||||
|
- generic [ref=f1e51]: "9"
|
||||||
|
- generic [ref=f1e54] [cursor=pointer]: A
|
||||||
|
- generic [ref=f1e57]:
|
||||||
|
- generic [ref=f1e58]:
|
||||||
|
- generic [ref=f1e59]:
|
||||||
|
- button " 返回" [ref=f1e60] [cursor=pointer]:
|
||||||
|
- generic [ref=f1e61]:
|
||||||
|
- generic [ref=f1e62]: 返回
|
||||||
|
- generic [ref=f1e63]:
|
||||||
|
- generic [ref=f1e64]: "307"
|
||||||
|
- generic [ref=f1e65]: 门诊医生站:开立的手术申请后未关联生成预手术收费明细记录
|
||||||
|
- link " 提Bug" [ref=f1e68] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=create&productID=4&branch=0&extras=projectID=11,executionID=0,moduleID=126
|
||||||
|
- generic [ref=f1e69]:
|
||||||
|
- generic [ref=f1e70]: 提Bug
|
||||||
|
- generic [ref=f1e71]:
|
||||||
|
- generic [ref=f1e72]:
|
||||||
|
- generic [ref=f1e74]:
|
||||||
|
- generic [ref=f1e76]: 重现步骤
|
||||||
|
- generic [ref=f1e78]:
|
||||||
|
- paragraph [ref=f1e79]: "[步骤]"
|
||||||
|
- paragraph [ref=f1e80]:
|
||||||
|
- link "index.php?m=file&f=read&t=png&fileID=1416" [ref=f1e81] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=file&f=read&t=png&fileID=1416
|
||||||
|
- img "index.php?m=file&f=read&t=png&fileID=1416" [ref=f1e82]
|
||||||
|
- paragraph [ref=f1e83]: 图1:门诊医生站:手术申请
|
||||||
|
- paragraph [ref=f1e84]
|
||||||
|
- paragraph [ref=f1e85]:
|
||||||
|
- link "index.php?m=file&f=read&t=png&fileID=1417" [ref=f1e86] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=file&f=read&t=png&fileID=1417
|
||||||
|
- img "index.php?m=file&f=read&t=png&fileID=1417" [ref=f1e87]
|
||||||
|
- paragraph [ref=f1e88]: 图2:手术申请开立成功
|
||||||
|
- paragraph [ref=f1e89]
|
||||||
|
- paragraph [ref=f1e90]:
|
||||||
|
- link "index.php?m=file&f=read&t=png&fileID=1418" [ref=f1e91] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=file&f=read&t=png&fileID=1418
|
||||||
|
- img "index.php?m=file&f=read&t=png&fileID=1418" [ref=f1e92]
|
||||||
|
- paragraph [ref=f1e93]: 图3:《门诊收费》检索不到待缴费手术费用。
|
||||||
|
- paragraph [ref=f1e94]: 1、如上图1、2、3所示:门诊医生站:开立的手术申请后未关联生成预手术收费明细记录。
|
||||||
|
- paragraph [ref=f1e95]: "[结果]"
|
||||||
|
- paragraph [ref=f1e96]: 1、门诊医生站:开立的手术申请后未关联生成预手术收费明细记录。
|
||||||
|
- paragraph [ref=f1e97]: "[期望]"
|
||||||
|
- paragraph [ref=f1e98]:
|
||||||
|
- text: 1、门诊医生站:开立的手术申请成功后,
|
||||||
|
- generic [ref=f1e99]:
|
||||||
|
- text: 系统应
|
||||||
|
- strong [ref=f1e100]: 自动将手术收项目明细插入预收费明细表
|
||||||
|
- text: 中,确保《门诊收费》处能够实时看见并进行结算,如下图4文档所示:
|
||||||
|
- paragraph [ref=f1e101]:
|
||||||
|
- link "index.php?m=file&f=read&t=png&fileID=1419" [ref=f1e102] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=file&f=read&t=png&fileID=1419
|
||||||
|
- img "index.php?m=file&f=read&t=png&fileID=1419" [ref=f1e103]
|
||||||
|
- paragraph [ref=f1e104]: 图4
|
||||||
|
- paragraph [ref=f1e105]
|
||||||
|
- generic [ref=f1e107]:
|
||||||
|
- generic [ref=f1e111]:
|
||||||
|
- generic [ref=f1e112]: 历史记录
|
||||||
|
- navigation [ref=f1e113]:
|
||||||
|
- button "" [ref=f1e114] [cursor=pointer]:
|
||||||
|
- generic [ref=f1e115]:
|
||||||
|
- button " 添加备注" [ref=f1e116] [cursor=pointer]:
|
||||||
|
- generic [ref=f1e117]:
|
||||||
|
- generic [ref=f1e118]: 添加备注
|
||||||
|
- list [ref=f1e120]:
|
||||||
|
- listitem [ref=f1e121]:
|
||||||
|
- generic [ref=f1e122]:
|
||||||
|
- generic [ref=f1e124]: "1"
|
||||||
|
- generic [ref=f1e127]:
|
||||||
|
- text: 2026-03-30 17:44:22, 由
|
||||||
|
- strong [ref=f1e128]: 陈显精
|
||||||
|
- text: 创建。
|
||||||
|
- listitem [ref=f1e129]:
|
||||||
|
- generic [ref=f1e130]:
|
||||||
|
- generic [ref=f1e132]: "2"
|
||||||
|
- generic [ref=f1e135]:
|
||||||
|
- text: 2026-03-30 17:44:26, 由
|
||||||
|
- strong [ref=f1e136]: 陈显精
|
||||||
|
- text: 指派给
|
||||||
|
- strong [ref=f1e137]: 王怡哲
|
||||||
|
- text: 。
|
||||||
|
- generic [ref=f1e140]:
|
||||||
|
- button " 返回" [ref=f1e141] [cursor=pointer]:
|
||||||
|
- generic [ref=f1e142]:
|
||||||
|
- generic [ref=f1e143]: 返回
|
||||||
|
- link " 确认" [ref=f1e145] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=confirm&bugID=307
|
||||||
|
- generic [ref=f1e146]:
|
||||||
|
- generic [ref=f1e147]: 确认
|
||||||
|
- link " 指派" [ref=f1e148] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=assignTo&bugID=307
|
||||||
|
- generic [ref=f1e149]:
|
||||||
|
- generic [ref=f1e150]: 指派
|
||||||
|
- link " 解决" [ref=f1e151] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=resolve&bugID=307
|
||||||
|
- generic [ref=f1e152]:
|
||||||
|
- generic [ref=f1e153]: 解决
|
||||||
|
- button " 转研发需求" [ref=f1e154] [cursor=pointer]:
|
||||||
|
- generic [ref=f1e155]:
|
||||||
|
- generic [ref=f1e156]: 转研发需求
|
||||||
|
- button " 转任务" [ref=f1e157] [cursor=pointer]:
|
||||||
|
- generic [ref=f1e158]:
|
||||||
|
- generic [ref=f1e159]: 转任务
|
||||||
|
- link " 创建用例" [ref=f1e160] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testcase&f=create&productID=4&branch=0&moduleID=0&from=bug&bugID=307
|
||||||
|
- generic [ref=f1e161]:
|
||||||
|
- generic [ref=f1e162]: 创建用例
|
||||||
|
- link "" [ref=f1e164] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=edit&bugID=307
|
||||||
|
- generic [ref=f1e165]:
|
||||||
|
- link "" [ref=f1e166] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=create&productID=4&branch=0&extra=bugID=307,projectID=11,executionID=0
|
||||||
|
- generic [ref=f1e167]:
|
||||||
|
- link "" [ref=f1e168] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=delete&bugID=307
|
||||||
|
- generic [ref=f1e169]:
|
||||||
|
- generic [ref=f1e170]:
|
||||||
|
- generic [ref=f1e171]:
|
||||||
|
- generic [ref=f1e172]:
|
||||||
|
- list [ref=f1e173]:
|
||||||
|
- listitem [ref=f1e174]:
|
||||||
|
- link "基本信息" [ref=f1e175] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_307_tabPane"
|
||||||
|
- generic [ref=f1e176]: 基本信息
|
||||||
|
- listitem [ref=f1e177]:
|
||||||
|
- link "Bug的一生" [ref=f1e178] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_307_tabPane_1"
|
||||||
|
- generic [ref=f1e179]: Bug的一生
|
||||||
|
- button "" [ref=f1e180] [cursor=pointer]:
|
||||||
|
- generic [ref=f1e181]:
|
||||||
|
- generic [ref=f1e184]:
|
||||||
|
- generic [ref=f1e185]:
|
||||||
|
- generic "所属模块" [ref=f1e186]
|
||||||
|
- list [ref=f1e188]:
|
||||||
|
- listitem [ref=f1e189]: 手术麻醉管理
|
||||||
|
- generic "所属计划" [ref=f1e191]
|
||||||
|
- generic "来源用例" [ref=f1e194]
|
||||||
|
- generic [ref=f1e196]:
|
||||||
|
- generic "Bug类型" [ref=f1e197]
|
||||||
|
- generic [ref=f1e198]: 设计缺陷
|
||||||
|
- generic [ref=f1e199]:
|
||||||
|
- generic "严重程度" [ref=f1e200]
|
||||||
|
- generic [ref=f1e202]: 3 3
|
||||||
|
- generic [ref=f1e203]:
|
||||||
|
- generic "优先级" [ref=f1e204]
|
||||||
|
- generic [ref=f1e206]: "3"
|
||||||
|
- generic [ref=f1e207]:
|
||||||
|
- generic "Bug状态" [ref=f1e208]
|
||||||
|
- generic [ref=f1e210]: 激活
|
||||||
|
- generic "激活次数" [ref=f1e212]
|
||||||
|
- generic "激活时间" [ref=f1e215]
|
||||||
|
- generic [ref=f1e217]:
|
||||||
|
- generic "是否确认" [ref=f1e218]
|
||||||
|
- generic [ref=f1e219]: 未确认
|
||||||
|
- generic [ref=f1e220]:
|
||||||
|
- generic "指派给" [ref=f1e221]
|
||||||
|
- generic [ref=f1e222]: 王怡哲 于 2026-03-30 17:44:22
|
||||||
|
- generic "截止日期" [ref=f1e224]
|
||||||
|
- generic "反馈者" [ref=f1e227]
|
||||||
|
- generic "通知邮箱" [ref=f1e230]
|
||||||
|
- generic "操作系统" [ref=f1e233]
|
||||||
|
- generic "浏览器" [ref=f1e236]
|
||||||
|
- generic "关键词" [ref=f1e239]
|
||||||
|
- generic "抄送给" [ref=f1e242]
|
||||||
|
- generic [ref=f1e244]:
|
||||||
|
- generic [ref=f1e245]:
|
||||||
|
- list [ref=f1e246]:
|
||||||
|
- listitem [ref=f1e247]:
|
||||||
|
- link "项目/迭代/研发需求/任务" [ref=f1e248] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_307_tabPane_2"
|
||||||
|
- generic [ref=f1e249]: 项目/迭代/研发需求/任务
|
||||||
|
- listitem [ref=f1e250]:
|
||||||
|
- link "其他相关" [ref=f1e251] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_307_tabPane_3"
|
||||||
|
- generic [ref=f1e252]: 其他相关
|
||||||
|
- button "" [ref=f1e253] [cursor=pointer]:
|
||||||
|
- generic [ref=f1e254]:
|
||||||
|
- generic [ref=f1e257]:
|
||||||
|
- generic [ref=f1e258]:
|
||||||
|
- generic "所属项目" [ref=f1e259]
|
||||||
|
- link "开源HIS改造落地" [ref=f1e261] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=view&projectID=11
|
||||||
|
- generic "所属执行" [ref=f1e263]
|
||||||
|
- generic "相关需求" [ref=f1e266]
|
||||||
|
- generic "相关任务" [ref=f1e269]
|
||||||
|
- button "" [ref=f1e272] [cursor=pointer]:
|
||||||
|
- generic [ref=f1e273]:
|
||||||
|
- text: "* *"
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list [ref=e90]:
|
||||||
|
- listitem [ref=e91]:
|
||||||
|
- generic [ref=e93] [cursor=pointer]: 测试
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- textbox [ref=e77]:
|
||||||
|
- /placeholder: 搜索
|
||||||
|
- button [ref=e79] [cursor=pointer]:
|
||||||
|
- img [ref=e81]
|
||||||
|
- link " 开源版21.7" [ref=e82] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- generic [ref=e84]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e85] [cursor=pointer]:
|
||||||
|
- generic [ref=e86]: 升级
|
||||||
|
- generic [ref=e87]:
|
||||||
23
.playwright-mcp/page-2026-04-02T03-09-24-226Z.yml
Normal file
23
.playwright-mcp/page-2026-04-02T03-09-24-226Z.yml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
- generic [ref=e5]:
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- img [ref=e7]
|
||||||
|
- img [ref=e8]
|
||||||
|
- generic [ref=e9]:
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- heading "经创贺联项目管理系统" [level=2] [ref=e11]
|
||||||
|
- generic [ref=e12]: 简体
|
||||||
|
- generic [ref=e13]:
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e16]: 用户名
|
||||||
|
- textbox [active] [ref=e17]: admin
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e20]: 密码
|
||||||
|
- textbox [ref=e21]: Jchl1528
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e24]:
|
||||||
|
- checkbox "保持登录" [checked] [ref=e25]
|
||||||
|
- generic [ref=e26] [cursor=pointer]: 保持登录
|
||||||
|
- link "忘记密码" [ref=e27] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=user&f=reset
|
||||||
|
- button "登录" [ref=e29] [cursor=pointer]:
|
||||||
|
- generic [ref=e30]: 登录
|
||||||
1039
.playwright-mcp/page-2026-04-02T03-09-41-642Z.yml
Normal file
1039
.playwright-mcp/page-2026-04-02T03-09-41-642Z.yml
Normal file
File diff suppressed because it is too large
Load Diff
93
.playwright-mcp/page-2026-04-02T03-09-57-124Z.yml
Normal file
93
.playwright-mcp/page-2026-04-02T03-09-57-124Z.yml
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- textbox [ref=e77]:
|
||||||
|
- /placeholder: 搜索
|
||||||
|
- button [ref=e79] [cursor=pointer]:
|
||||||
|
- img [ref=e81]
|
||||||
|
- link " 开源版21.7" [ref=e82] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- generic [ref=e84]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e85] [cursor=pointer]:
|
||||||
|
- generic [ref=e86]: 升级
|
||||||
|
- generic [ref=e87]:
|
||||||
328
.playwright-mcp/page-2026-04-02T03-10-05-854Z.yml
Normal file
328
.playwright-mcp/page-2026-04-02T03-10-05-854Z.yml
Normal file
@@ -0,0 +1,328 @@
|
|||||||
|
- generic [active]:
|
||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- list [ref=e3]:
|
||||||
|
- listitem [ref=e4]:
|
||||||
|
- link " 地盘" [ref=e5] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=index
|
||||||
|
- generic [ref=e6]:
|
||||||
|
- generic [ref=e7]: 地盘
|
||||||
|
- listitem [ref=e8]:
|
||||||
|
- link " 项目集" [ref=e9] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=program&f=browse
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e11]: 项目集
|
||||||
|
- listitem [ref=e12]:
|
||||||
|
- link " 产品" [ref=e13] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=product&f=all
|
||||||
|
- generic [ref=e14]:
|
||||||
|
- generic [ref=e15]: 产品
|
||||||
|
- listitem [ref=e16]:
|
||||||
|
- link " 项目" [ref=e17] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=browse
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- generic [ref=e19]: 项目
|
||||||
|
- listitem [ref=e20]:
|
||||||
|
- link " 执行" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=execution&f=task
|
||||||
|
- generic [ref=e22]:
|
||||||
|
- generic [ref=e23]: 执行
|
||||||
|
- listitem [ref=e24]:
|
||||||
|
- link " 测试" [ref=e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=e26]:
|
||||||
|
- generic [ref=e27]: 测试
|
||||||
|
- listitem [ref=e28]:
|
||||||
|
- link " DevOps" [ref=e29] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=repo&f=maintain
|
||||||
|
- generic [ref=e30]:
|
||||||
|
- generic [ref=e31]: DevOps
|
||||||
|
- listitem [ref=e32]
|
||||||
|
- listitem [ref=e33]:
|
||||||
|
- link " AI" [ref=e34] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=aiapp&f=square
|
||||||
|
- generic [ref=e35]:
|
||||||
|
- generic [ref=e36]: AI
|
||||||
|
- listitem [ref=e37]:
|
||||||
|
- link " BI" [ref=e38] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=screen&f=browse
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- generic [ref=e40]: BI
|
||||||
|
- listitem [ref=e41]
|
||||||
|
- listitem [ref=e42]:
|
||||||
|
- link " 看板" [ref=e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=kanban&f=space
|
||||||
|
- generic [ref=e44]:
|
||||||
|
- generic [ref=e45]: 看板
|
||||||
|
- listitem [ref=e46]:
|
||||||
|
- link " 文档" [ref=e47] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=doc&f=lastViewedSpace
|
||||||
|
- generic [ref=e48]:
|
||||||
|
- generic [ref=e49]: 文档
|
||||||
|
- listitem [ref=e50]
|
||||||
|
- listitem [ref=e51]:
|
||||||
|
- link " 组织" [ref=e52] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=my&f=team
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e54]: 组织
|
||||||
|
- listitem [ref=e55]:
|
||||||
|
- link " 后台" [ref=e56] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=admin&f=index
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- generic [ref=e58]: 后台
|
||||||
|
- text:
|
||||||
|
- list [ref=e60]:
|
||||||
|
- listitem [ref=e61]:
|
||||||
|
- generic [ref=e63] [cursor=pointer]:
|
||||||
|
- iframe [ref=e89]:
|
||||||
|
- generic [active] [ref=f3e1]:
|
||||||
|
- banner [ref=f3e2]:
|
||||||
|
- generic [ref=f3e3]:
|
||||||
|
- generic [ref=f3e4]:
|
||||||
|
- link " 测试" [ref=f3e6] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=f3e7]:
|
||||||
|
- generic [ref=f3e8]: 测试
|
||||||
|
- button " 开源HIS改造落地" [ref=f3e10] [cursor=pointer]:
|
||||||
|
- generic [ref=f3e11]:
|
||||||
|
- generic "开源HIS改造落地" [ref=f3e12]
|
||||||
|
- navigation [ref=f3e15]:
|
||||||
|
- list [ref=f3e16]:
|
||||||
|
- listitem [ref=f3e17]:
|
||||||
|
- link "仪表盘" [ref=f3e18] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=qa&f=index
|
||||||
|
- generic [ref=f3e19]: 仪表盘
|
||||||
|
- listitem [ref=f3e20]
|
||||||
|
- listitem [ref=f3e21]:
|
||||||
|
- link "Bug" [ref=f3e22] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=browse&productID=4
|
||||||
|
- generic [ref=f3e23]: Bug
|
||||||
|
- listitem [ref=f3e24]:
|
||||||
|
- link "用例" [ref=f3e25] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testcase&f=browse&productID=4
|
||||||
|
- generic [ref=f3e26]: 用例
|
||||||
|
- listitem [ref=f3e27]:
|
||||||
|
- link "套件" [ref=f3e28] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testsuite&f=browse&productID=4
|
||||||
|
- generic [ref=f3e29]: 套件
|
||||||
|
- listitem [ref=f3e30]
|
||||||
|
- listitem [ref=f3e31]:
|
||||||
|
- link "测试单" [ref=f3e32] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testtask&f=browse&productID=4
|
||||||
|
- generic [ref=f3e33]: 测试单
|
||||||
|
- listitem [ref=f3e34]:
|
||||||
|
- link "测试报告" [ref=f3e35] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testreport&f=browse&productID=4
|
||||||
|
- generic [ref=f3e36]: 测试报告
|
||||||
|
- listitem [ref=f3e37]
|
||||||
|
- listitem [ref=f3e38]:
|
||||||
|
- link "用例库" [ref=f3e39] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=caselib&f=browse&libID=0
|
||||||
|
- generic [ref=f3e40]: 用例库
|
||||||
|
- listitem [ref=f3e41]
|
||||||
|
- listitem [ref=f3e42]:
|
||||||
|
- link "自动化" [ref=f3e43] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=zanode&f=instruction
|
||||||
|
- generic [ref=f3e44]: 自动化
|
||||||
|
- generic [ref=f3e46]:
|
||||||
|
- button "" [ref=f3e47] [cursor=pointer]:
|
||||||
|
- generic [ref=f3e48]:
|
||||||
|
- button " 9" [ref=f3e49] [cursor=pointer]:
|
||||||
|
- generic [ref=f3e50]:
|
||||||
|
- generic [ref=f3e51]: "9"
|
||||||
|
- generic [ref=f3e54] [cursor=pointer]: A
|
||||||
|
- generic [ref=f3e57]:
|
||||||
|
- generic [ref=f3e58]:
|
||||||
|
- generic [ref=f3e59]:
|
||||||
|
- button " 返回" [ref=f3e60] [cursor=pointer]:
|
||||||
|
- generic [ref=f3e61]:
|
||||||
|
- generic [ref=f3e62]: 返回
|
||||||
|
- generic [ref=f3e63]:
|
||||||
|
- generic [ref=f3e64]: "320"
|
||||||
|
- generic [ref=f3e65]: 手术管理-》门诊手术安排:新增手术安排界面的就诊卡号取值错误
|
||||||
|
- link " 提Bug" [ref=f3e68] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=create&productID=4&branch=0&extras=projectID=11,executionID=0,moduleID=126
|
||||||
|
- generic [ref=f3e69]:
|
||||||
|
- generic [ref=f3e70]: 提Bug
|
||||||
|
- generic [ref=f3e71]:
|
||||||
|
- generic [ref=f3e72]:
|
||||||
|
- generic [ref=f3e74]:
|
||||||
|
- generic [ref=f3e76]: 重现步骤
|
||||||
|
- generic [ref=f3e78]:
|
||||||
|
- paragraph [ref=f3e79]: "[步骤]"
|
||||||
|
- paragraph [ref=f3e80]:
|
||||||
|
- link "index.php?m=file&f=read&t=png&fileID=1450" [ref=f3e81] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=file&f=read&t=png&fileID=1450
|
||||||
|
- img "index.php?m=file&f=read&t=png&fileID=1450" [ref=f3e82]
|
||||||
|
- paragraph [ref=f3e83]: 图1:门诊手术安排:手术申请查询选中手术申请记录点击【确认】
|
||||||
|
- paragraph [ref=f3e84]:
|
||||||
|
- link "index.php?m=file&f=read&t=png&fileID=1451" [ref=f3e85] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=file&f=read&t=png&fileID=1451
|
||||||
|
- img "index.php?m=file&f=read&t=png&fileID=1451" [ref=f3e86]
|
||||||
|
- paragraph [ref=f3e87]: 图2:新增手术安排界面的就诊卡号取值错误
|
||||||
|
- paragraph [ref=f3e88]: 1、如上图1、2所示:手术管理-》门诊手术安排:新增手术安排界面的就诊卡号取值错误。
|
||||||
|
- paragraph [ref=f3e89]: "[结果]"
|
||||||
|
- paragraph [ref=f3e90]: 1、手术管理-》门诊手术安排:新增手术安排界面的就诊卡号取值错误。
|
||||||
|
- paragraph [ref=f3e91]: "[期望]"
|
||||||
|
- paragraph [ref=f3e92]:
|
||||||
|
- text: 1、如上图1、2所示:手术管理-》门诊手术安排:新增手术安排界面的就诊卡号取值于患者档案的就诊卡号字段的值,adm_
|
||||||
|
- link "patient.id" [ref=f3e93] [cursor=pointer]:
|
||||||
|
- /url: http://patient.id
|
||||||
|
- text: = adm_patient_identifier.patient_id;adm_patient_identifier.identifier_no 字段就是就诊卡号,如下图3所示
|
||||||
|
- paragraph [ref=f3e94]:
|
||||||
|
- link "index.php?m=file&f=read&t=png&fileID=1452" [ref=f3e95] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=file&f=read&t=png&fileID=1452
|
||||||
|
- img "index.php?m=file&f=read&t=png&fileID=1452" [ref=f3e96]
|
||||||
|
- paragraph [ref=f3e97]: 图3
|
||||||
|
- generic [ref=f3e99]:
|
||||||
|
- generic [ref=f3e103]:
|
||||||
|
- generic [ref=f3e104]: 历史记录
|
||||||
|
- navigation [ref=f3e105]:
|
||||||
|
- button "" [ref=f3e106] [cursor=pointer]:
|
||||||
|
- generic [ref=f3e107]:
|
||||||
|
- button " 添加备注" [ref=f3e108] [cursor=pointer]:
|
||||||
|
- generic [ref=f3e109]:
|
||||||
|
- generic [ref=f3e110]: 添加备注
|
||||||
|
- list [ref=f3e112]:
|
||||||
|
- listitem [ref=f3e113]:
|
||||||
|
- generic [ref=f3e114]:
|
||||||
|
- generic [ref=f3e116]: "1"
|
||||||
|
- generic [ref=f3e119]:
|
||||||
|
- text: 2026-03-31 22:53:45, 由
|
||||||
|
- strong [ref=f3e120]: 陈显精
|
||||||
|
- text: 创建。
|
||||||
|
- listitem [ref=f3e121]:
|
||||||
|
- generic [ref=f3e122]:
|
||||||
|
- generic [ref=f3e124]: "2"
|
||||||
|
- generic [ref=f3e127]:
|
||||||
|
- text: 2026-03-31 22:53:49, 由
|
||||||
|
- strong [ref=f3e128]: 陈显精
|
||||||
|
- text: 指派给
|
||||||
|
- strong [ref=f3e129]: 王怡哲
|
||||||
|
- text: 。
|
||||||
|
- generic [ref=f3e132]:
|
||||||
|
- button " 返回" [ref=f3e133] [cursor=pointer]:
|
||||||
|
- generic [ref=f3e134]:
|
||||||
|
- generic [ref=f3e135]: 返回
|
||||||
|
- link " 确认" [ref=f3e137] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=confirm&bugID=320
|
||||||
|
- generic [ref=f3e138]:
|
||||||
|
- generic [ref=f3e139]: 确认
|
||||||
|
- link " 指派" [ref=f3e140] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=assignTo&bugID=320
|
||||||
|
- generic [ref=f3e141]:
|
||||||
|
- generic [ref=f3e142]: 指派
|
||||||
|
- link " 解决" [ref=f3e143] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=resolve&bugID=320
|
||||||
|
- generic [ref=f3e144]:
|
||||||
|
- generic [ref=f3e145]: 解决
|
||||||
|
- button " 转研发需求" [ref=f3e146] [cursor=pointer]:
|
||||||
|
- generic [ref=f3e147]:
|
||||||
|
- generic [ref=f3e148]: 转研发需求
|
||||||
|
- button " 转任务" [ref=f3e149] [cursor=pointer]:
|
||||||
|
- generic [ref=f3e150]:
|
||||||
|
- generic [ref=f3e151]: 转任务
|
||||||
|
- link " 创建用例" [ref=f3e152] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=testcase&f=create&productID=4&branch=0&moduleID=0&from=bug&bugID=320
|
||||||
|
- generic [ref=f3e153]:
|
||||||
|
- generic [ref=f3e154]: 创建用例
|
||||||
|
- link "" [ref=f3e156] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=edit&bugID=320
|
||||||
|
- generic [ref=f3e157]:
|
||||||
|
- link "" [ref=f3e158] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=create&productID=4&branch=0&extra=bugID=320,projectID=11,executionID=0
|
||||||
|
- generic [ref=f3e159]:
|
||||||
|
- link "" [ref=f3e160] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=bug&f=delete&bugID=320
|
||||||
|
- generic [ref=f3e161]:
|
||||||
|
- generic [ref=f3e162]:
|
||||||
|
- generic [ref=f3e163]:
|
||||||
|
- generic [ref=f3e164]:
|
||||||
|
- list [ref=f3e165]:
|
||||||
|
- listitem [ref=f3e166]:
|
||||||
|
- link "基本信息" [ref=f3e167] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_320_tabPane"
|
||||||
|
- generic [ref=f3e168]: 基本信息
|
||||||
|
- listitem [ref=f3e169]:
|
||||||
|
- link "Bug的一生" [ref=f3e170] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_320_tabPane_1"
|
||||||
|
- generic [ref=f3e171]: Bug的一生
|
||||||
|
- button "" [ref=f3e172] [cursor=pointer]:
|
||||||
|
- generic [ref=f3e173]:
|
||||||
|
- generic [ref=f3e176]:
|
||||||
|
- generic [ref=f3e177]:
|
||||||
|
- generic "所属模块" [ref=f3e178]
|
||||||
|
- list [ref=f3e180]:
|
||||||
|
- listitem [ref=f3e181]: 手术麻醉管理
|
||||||
|
- generic "所属计划" [ref=f3e183]
|
||||||
|
- generic "来源用例" [ref=f3e186]
|
||||||
|
- generic [ref=f3e188]:
|
||||||
|
- generic "Bug类型" [ref=f3e189]
|
||||||
|
- generic [ref=f3e190]: 代码错误
|
||||||
|
- generic [ref=f3e191]:
|
||||||
|
- generic "严重程度" [ref=f3e192]
|
||||||
|
- generic [ref=f3e194]: 3 3
|
||||||
|
- generic [ref=f3e195]:
|
||||||
|
- generic "优先级" [ref=f3e196]
|
||||||
|
- generic [ref=f3e198]: "3"
|
||||||
|
- generic [ref=f3e199]:
|
||||||
|
- generic "Bug状态" [ref=f3e200]
|
||||||
|
- generic [ref=f3e202]: 激活
|
||||||
|
- generic "激活次数" [ref=f3e204]
|
||||||
|
- generic "激活时间" [ref=f3e207]
|
||||||
|
- generic [ref=f3e209]:
|
||||||
|
- generic "是否确认" [ref=f3e210]
|
||||||
|
- generic [ref=f3e211]: 未确认
|
||||||
|
- generic [ref=f3e212]:
|
||||||
|
- generic "指派给" [ref=f3e213]
|
||||||
|
- generic [ref=f3e214]: 王怡哲 于 2026-03-31 22:53:45
|
||||||
|
- generic "截止日期" [ref=f3e216]
|
||||||
|
- generic "反馈者" [ref=f3e219]
|
||||||
|
- generic "通知邮箱" [ref=f3e222]
|
||||||
|
- generic "操作系统" [ref=f3e225]
|
||||||
|
- generic "浏览器" [ref=f3e228]
|
||||||
|
- generic "关键词" [ref=f3e231]
|
||||||
|
- generic "抄送给" [ref=f3e234]
|
||||||
|
- generic [ref=f3e236]:
|
||||||
|
- generic [ref=f3e237]:
|
||||||
|
- list [ref=f3e238]:
|
||||||
|
- listitem [ref=f3e239]:
|
||||||
|
- link "项目/迭代/研发需求/任务" [ref=f3e240] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_320_tabPane_2"
|
||||||
|
- generic [ref=f3e241]: 项目/迭代/研发需求/任务
|
||||||
|
- listitem [ref=f3e242]:
|
||||||
|
- link "其他相关" [ref=f3e243] [cursor=pointer]:
|
||||||
|
- /url: "#zin_bug_view_320_tabPane_3"
|
||||||
|
- generic [ref=f3e244]: 其他相关
|
||||||
|
- button "" [ref=f3e245] [cursor=pointer]:
|
||||||
|
- generic [ref=f3e246]:
|
||||||
|
- generic [ref=f3e249]:
|
||||||
|
- generic [ref=f3e250]:
|
||||||
|
- generic "所属项目" [ref=f3e251]
|
||||||
|
- link "开源HIS改造落地" [ref=f3e253] [cursor=pointer]:
|
||||||
|
- /url: /index.php?m=project&f=view&projectID=11
|
||||||
|
- generic "所属执行" [ref=f3e255]
|
||||||
|
- generic "相关需求" [ref=f3e258]
|
||||||
|
- generic "相关任务" [ref=f3e261]
|
||||||
|
- button "" [ref=f3e264] [cursor=pointer]:
|
||||||
|
- generic [ref=f3e265]:
|
||||||
|
- text: "* *"
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- button " 研发综合界面" [ref=e67] [cursor=pointer]:
|
||||||
|
- generic [ref=e68]:
|
||||||
|
- generic [ref=e69]: 研发综合界面
|
||||||
|
- list [ref=e90]:
|
||||||
|
- listitem [ref=e91]:
|
||||||
|
- generic [ref=e93] [cursor=pointer]: 测试
|
||||||
|
- generic [ref=e71]:
|
||||||
|
- textbox [ref=e77]:
|
||||||
|
- /placeholder: 搜索
|
||||||
|
- button [ref=e79] [cursor=pointer]:
|
||||||
|
- img [ref=e81]
|
||||||
|
- link " 开源版21.7" [ref=e82] [cursor=pointer]:
|
||||||
|
- /url: https://www.zentao.net
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- generic [ref=e84]: 开源版21.7
|
||||||
|
- button "升级 " [ref=e85] [cursor=pointer]:
|
||||||
|
- generic [ref=e86]: 升级
|
||||||
|
- generic [ref=e87]:
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
---
|
|
||||||
name: chenlin
|
|
||||||
description: 归档师 — 生成报告、Git归档、禅道备注
|
|
||||||
tools: Bash, Read, Write, Grep, Glob
|
|
||||||
model: inherit
|
|
||||||
maxTurns: 3
|
|
||||||
memory: project
|
|
||||||
effort: medium
|
|
||||||
color: orange
|
|
||||||
skills:
|
|
||||||
- archive
|
|
||||||
---
|
|
||||||
|
|
||||||
# 陈琳 (chenlin) — 归档师
|
|
||||||
|
|
||||||
## 角色
|
|
||||||
- 生成完整修复报告(Markdown)
|
|
||||||
- 写入 Git docs/bug-fixes/
|
|
||||||
- 写入 SQLite bug_reports 表
|
|
||||||
- 写入 Redis 缓存
|
|
||||||
- 禅道添加归档备注
|
|
||||||
|
|
||||||
## 铁律
|
|
||||||
1. 报告必须包含:基本信息、根因分析、修复文件、流程时间线
|
|
||||||
2. Git 归档路径:his-repo/docs/bug-fixes/bug-{id}.md
|
|
||||||
3. SQLite 归档必须使用完整的 INSERT 列(含 test_output、pipeline_json)
|
|
||||||
4. 禅道备注格式:[📝 陈琳归档] Bug #xxx 修复报告已归档
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
---
|
|
||||||
name: guanyu
|
|
||||||
description: 后端修复师 — Java/Spring/Mapper/数据库 修复
|
|
||||||
tools: Bash, Read, Write, Edit, Grep, Glob
|
|
||||||
model: inherit
|
|
||||||
maxTurns: 8
|
|
||||||
memory: project
|
|
||||||
effort: xhigh
|
|
||||||
color: red
|
|
||||||
skills:
|
|
||||||
- fix
|
|
||||||
---
|
|
||||||
|
|
||||||
# 关羽 (guanyu) — 后端修复师
|
|
||||||
|
|
||||||
## 角色
|
|
||||||
- 修复 Java/Spring Boot 后端 Bug
|
|
||||||
- 处理 API 接口、Service 逻辑、Mapper/SQL
|
|
||||||
- 数据库相关修复(INSERT/UPDATE/DELETE)
|
|
||||||
|
|
||||||
## 铁律
|
|
||||||
1. 修复前必须先读 AGENTS.md 了解项目规范
|
|
||||||
2. 修复后必须运行 `mvn compile` 验证编译
|
|
||||||
3. 涉及 SQL 必须先查真实数据库表结构
|
|
||||||
4. 一次只修一个 Bug,不扩大范围
|
|
||||||
5. 修复后必须有 git commit,commit message 包含 Bug 编号
|
|
||||||
6. 数据库铁律:必须用 db-query 工具验证 SQL 语法正确性
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
---
|
|
||||||
name: huatuo
|
|
||||||
description: 验收师 — 最终验收、确认修复完整性
|
|
||||||
tools: Bash, Read, Grep, Glob
|
|
||||||
model: inherit
|
|
||||||
maxTurns: 3
|
|
||||||
memory: project
|
|
||||||
effort: medium
|
|
||||||
color: yellow
|
|
||||||
skills:
|
|
||||||
- verify
|
|
||||||
---
|
|
||||||
|
|
||||||
# 华佗 (huatuo) — 验收师
|
|
||||||
|
|
||||||
## 角色
|
|
||||||
- 最终验收修复结果
|
|
||||||
- 确认测试通过、代码提交、文档完整
|
|
||||||
- 人类 Bug 只加备注不改状态
|
|
||||||
|
|
||||||
## 铁律
|
|
||||||
1. 必须检查 git commit 是否存在
|
|
||||||
2. 必须检查测试报告是否通过
|
|
||||||
3. 人类提的 Bug 不改状态不改分配,只加备注
|
|
||||||
4. 智能体提的 Bug 可以改分配和加备注
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
name: liubei
|
|
||||||
description: 总协调者 — 扫描禅道Bug、调度智能体、生成进度报告
|
|
||||||
tools: Bash, Read, Grep, Glob
|
|
||||||
model: inherit
|
|
||||||
maxTurns: 5
|
|
||||||
memory: project
|
|
||||||
effort: high
|
|
||||||
color: gold
|
|
||||||
skills:
|
|
||||||
- analyze
|
|
||||||
---
|
|
||||||
|
|
||||||
# 刘备 (liubei) — 总协调者
|
|
||||||
|
|
||||||
## 角色
|
|
||||||
- 扫描禅道所有未关闭 Bug
|
|
||||||
- 根据 Bug 标题关键词路由到对应修复智能体
|
|
||||||
- 监控管线进度,生成报告
|
|
||||||
- 不直接修复 Bug
|
|
||||||
|
|
||||||
## 铁律
|
|
||||||
1. 只调度,不修改代码
|
|
||||||
2. 每 5 分钟自动扫描一次
|
|
||||||
3. 路由规则:数据库→荀彧,后端→关羽,前端→赵云
|
|
||||||
4. 已关闭/已解决的 Bug 不再调度
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
---
|
|
||||||
name: xunyu
|
|
||||||
description: DB审查师 — 数据库变更审查、SQL验证
|
|
||||||
tools: Bash, Read, Grep, Glob
|
|
||||||
model: inherit
|
|
||||||
maxTurns: 3
|
|
||||||
memory: project
|
|
||||||
effort: high
|
|
||||||
color: cyan
|
|
||||||
skills:
|
|
||||||
- db-review
|
|
||||||
---
|
|
||||||
|
|
||||||
# 荀彧 (xunyu) — DB审查师
|
|
||||||
|
|
||||||
## 角色
|
|
||||||
- 审查修复中的数据库变更
|
|
||||||
- 验证 SQL 语法、表结构、约束
|
|
||||||
- 检查迁移脚本完整性
|
|
||||||
|
|
||||||
## 铁律
|
|
||||||
1. 必须用 db-query 工具查询真实数据库
|
|
||||||
2. 检查 NOT NULL 约束、外键约束
|
|
||||||
3. 验证 INSERT/UPDATE 字段与表结构匹配
|
|
||||||
4. 审查结果必须包含:通过/不通过、原因、建议
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
---
|
|
||||||
name: zhangfei
|
|
||||||
description: 测试师 — Playwright回归测试、质量验证
|
|
||||||
tools: Bash, Read, Grep, Glob
|
|
||||||
model: inherit
|
|
||||||
maxTurns: 5
|
|
||||||
memory: project
|
|
||||||
effort: high
|
|
||||||
color: green
|
|
||||||
skills:
|
|
||||||
- test
|
|
||||||
---
|
|
||||||
|
|
||||||
# 张飞 (zhangfei) — 测试师
|
|
||||||
|
|
||||||
## 角色
|
|
||||||
- 运行 Playwright 回归测试
|
|
||||||
- 验证修复是否生效
|
|
||||||
- 测试失败时退回修复智能体
|
|
||||||
|
|
||||||
## 铁律
|
|
||||||
1. 必须用 `--workers=1` 避免压垮 dev server
|
|
||||||
2. 测试超时 120 秒
|
|
||||||
3. 最多重试 3 次,超过则通知人工介入
|
|
||||||
4. 测试结果必须写入禅道备注
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
---
|
|
||||||
name: zhaoyun
|
|
||||||
description: 前端修复师 — Vue/TypeScript/CSS 修复
|
|
||||||
tools: Bash, Read, Write, Edit, Grep, Glob
|
|
||||||
model: inherit
|
|
||||||
maxTurns: 8
|
|
||||||
memory: project
|
|
||||||
effort: xhigh
|
|
||||||
color: blue
|
|
||||||
skills:
|
|
||||||
- fix
|
|
||||||
---
|
|
||||||
|
|
||||||
# 赵云 (zhaoyun) — 前端修复师
|
|
||||||
|
|
||||||
## 角色
|
|
||||||
- 修复 Vue3/TypeScript 前端 Bug
|
|
||||||
- 处理界面显示、组件交互、样式问题
|
|
||||||
- API 调用对接
|
|
||||||
|
|
||||||
## 铁律
|
|
||||||
1. 修复前必须先读 AGENTS.md 了解项目规范
|
|
||||||
2. 修复后必须运行 `vue-tsc --noEmit` 验证类型
|
|
||||||
3. 一次只修一个 Bug,不扩大范围
|
|
||||||
4. 修复后必须有 git commit,commit message 包含 Bug 编号
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
name: zhugeliang
|
|
||||||
description: 分析师 — 分析Bug根因、拆解修复步骤、路由到正确智能体
|
|
||||||
tools: Bash, Read, Grep, Glob, WebFetch
|
|
||||||
model: inherit
|
|
||||||
maxTurns: 3
|
|
||||||
memory: project
|
|
||||||
effort: xhigh
|
|
||||||
color: purple
|
|
||||||
skills:
|
|
||||||
- analyze
|
|
||||||
---
|
|
||||||
|
|
||||||
# 诸葛亮 (zhugeliang) — 分析师
|
|
||||||
|
|
||||||
## 角色
|
|
||||||
- 接收刘备分派的 Bug,深度分析根因
|
|
||||||
- 读取禅道完整信息(含图片附件 OCR)
|
|
||||||
- 拆解修复步骤,确定修复策略
|
|
||||||
- 路由到正确的修复智能体
|
|
||||||
|
|
||||||
## 铁律
|
|
||||||
1. 必须读取 AGENTS.md 了解项目规范
|
|
||||||
2. 必须分析完整 6 环链路(前端→Controller→Service→Mapper→DB→关联模块)
|
|
||||||
3. 涉及数据库字段的 Bug 必须先查真实表结构
|
|
||||||
4. 分析报告必须包含:根因、影响范围、修复方案、测试要点
|
|
||||||
@@ -1,377 +0,0 @@
|
|||||||
# 🔴 AgentForge 铁律(不可违反)
|
|
||||||
|
|
||||||
> 所有智能体在处理任何任务时必须遵守。违反任何一条 = 阻断提交。
|
|
||||||
> 唯一源头文件:修改此文件后所有智能体自动生效。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 一、Bug 状态管理
|
|
||||||
|
|
||||||
- **已关闭/已解决的 Bug 禁止处理** — 处理前检查禅道 status,resolved/closed 直接跳过
|
|
||||||
- **人类提的 Bug 只加备注不改状态** — reporter 是人类账号时,不改 status、不改 assignedTo
|
|
||||||
- **智能体提的 Bug 可改分配和加备注** — 状态变更等测试通过后由华佗确认
|
|
||||||
- **每个修复必须有 git commit** — 格式: `fix(#bug_id): 简要描述`
|
|
||||||
- **🔴 修复完成必须提交** — `git add --all && git commit && git push`,未提交=没修
|
|
||||||
- **🔴 修复必须合并到 develop** — 工作树 commit ≠ 生效,必须 cherry-pick/merge 到 develop
|
|
||||||
- **🔴 未合并到 develop 的修复等于没修** — 验收时检查 develop 上是否有该 commit
|
|
||||||
- **🔴 修复必须编译部署后才算完成** — `mvn package` → `systemctl restart` → 验证启动时间
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 二、修复流程
|
|
||||||
|
|
||||||
- **一次只修一个 Bug**,不扩大范围
|
|
||||||
- **修前必须完整获取 Bug 全部信息** — 描述、复现步骤、所有截图/附件、所有备注历史。禁止只看标题就写代码
|
|
||||||
- **修复前必须读 AGENTS.md**
|
|
||||||
- **修复后必须验证编译** — `mvn compile` / `vue-tsc --noEmit` 0 error
|
|
||||||
- **commit 前必须验证** — 编译通过 + 无新增 lint 警告
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 三、全链路 6 环分析
|
|
||||||
|
|
||||||
涉及数据库字段的 Bug 必须走完整链路:
|
|
||||||
```
|
|
||||||
前端/页面 → Controller → Service → Mapper → DB/SQL → 关联模块
|
|
||||||
①录入 ②验证 ③业务 ④持久化 ⑤存储 ⑥联动
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 四、状态值一致性(来自 Bug #574 教训)
|
|
||||||
|
|
||||||
修改任何状态值前,**必须**列出完整链路并逐项检查:
|
|
||||||
1. 枚举定义(如 `SlotStatus`)的值
|
|
||||||
2. Service 层设置的状态值是否与枚举一致
|
|
||||||
3. 查询/列表接口的状态映射是否覆盖所有枚举值
|
|
||||||
4. 前端 `STATUS_CLASS_MAP` 是否包含新状态
|
|
||||||
5. 前端过滤条件(`v-if`、`v-for`)是否兼容新状态
|
|
||||||
6. 池/统计表的聚合 SQL 是否包含新状态值
|
|
||||||
|
|
||||||
**禁止**:只改一端不检查其他端。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 五、状态变更影响面分析(来自 Bug #574→575 教训)
|
|
||||||
|
|
||||||
改任何状态枚举值前,**必须**执行影响面分析:
|
|
||||||
1. `rg "原状态枚举名" --type java` 列出所有引用文件
|
|
||||||
2. 逐个检查:设置值?查询过滤?显示映射?统计聚合?
|
|
||||||
3. 检查逆向流程:退号、取消、停诊是否兼容新状态
|
|
||||||
4. 检查 XML mapper 中所有查询过滤条件
|
|
||||||
5. 检查前端所有 v-if/v-for/disabled 条件
|
|
||||||
|
|
||||||
**禁止**:只改正向流程不验逆向流程。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 六、逆向流程验证(来自 Bug #575 教训)
|
|
||||||
|
|
||||||
涉及状态流转的 Bug,验证时**必须**覆盖:
|
|
||||||
- 正向:预约→签到→就诊→完成
|
|
||||||
- 逆向:退号、取消预约、停诊、退费
|
|
||||||
- 边界:并发操作、重复操作、异常中断
|
|
||||||
|
|
||||||
**禁止**:只测正向流程就标记"修复完成"。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 七、全链路验证(状态流转 Bug 必做)
|
|
||||||
|
|
||||||
修复后按以下顺序验证,**编译通过不等于修复完成**:
|
|
||||||
```
|
|
||||||
① 数据库:SELECT status FROM table WHERE id = ? → 确认写入正确
|
|
||||||
② 后端接口:检查所有 if/switch 分支 → 确认映射正确
|
|
||||||
③ 前端显示:检查 STATUS_CLASS_MAP → 确认文本正确
|
|
||||||
④ 前端交互:检查 v-if/v-for/disabled → 确认按钮状态正确
|
|
||||||
⑤ 统计数据:检查聚合 SQL → 确认统计包含新状态
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 八、池/统计表同步(来自 Bug #574 反复修复教训)
|
|
||||||
|
|
||||||
- **任何状态变更必须同步更新关联统计表**
|
|
||||||
- 检查清单:
|
|
||||||
1. 状态变更后,哪些统计字段需要更新?
|
|
||||||
2. 是原子递增/递减,还是全量重算?
|
|
||||||
3. 并发安全:用 `SET field = field + 1` 还是先查后改?
|
|
||||||
4. 逆向操作(退号/取消)是否正确回滚统计?
|
|
||||||
- **禁止**:只改状态不改统计,或只改统计不改状态
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 九、统计变更必须验证实际值(来自 Bug #575 教训)
|
|
||||||
|
|
||||||
- 修改统计逻辑后,**必须查数据库验证实际值**
|
|
||||||
- `SELECT booked_num, locked_num FROM adm_schedule_pool WHERE id = ?`
|
|
||||||
- 对比操作前后的值,确认统计正确
|
|
||||||
- **禁止**:改了统计逻辑不查数据库验证
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十、禁止删除源文件
|
|
||||||
|
|
||||||
- **绝对禁止**删除项目中已有的 Java/Vue/SQL 源文件
|
|
||||||
- 编译错误 → 修复错误,不删除文件
|
|
||||||
- 重复文件 → 重构合并,不删除文件
|
|
||||||
- AI 幻觉文件 → 检查 `git ls-tree baseline -- <file>` 确认后再删除
|
|
||||||
- **唯一例外**:人类明确确认删除
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十一、禁止修改已有公开方法签名
|
|
||||||
|
|
||||||
- 不能删除或重命名已有的 public 方法
|
|
||||||
- 不能修改已有方法的参数列表
|
|
||||||
- 需要新功能 → 添加重载方法
|
|
||||||
- 需要改行为 → 修改方法内部实现
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十二、搜索所有相关代码路径
|
|
||||||
|
|
||||||
修复前必须用 `rg` 搜索:
|
|
||||||
```
|
|
||||||
rg "状态枚举名|相关方法名|相关字段名" --type java --type vue
|
|
||||||
```
|
|
||||||
确保不遗漏任何引用路径。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十三、数据库铁律
|
|
||||||
|
|
||||||
- **修前必须查询真实数据库** — 确认表结构、字段约束、索引
|
|
||||||
- **禁止凭猜测写 SQL** — 先 `\d table_name` 查看表结构
|
|
||||||
- **修改 SQL 后必须验证** — `EXPLAIN` 或实际查询验证语法
|
|
||||||
- **NOT NULL 约束必须检查** — INSERT/UPDATE 前先查 `is_nullable`
|
|
||||||
- **关联表必须查完整** — 涉及 JOIN 查所有关联表结构和外键
|
|
||||||
- **涉及 SQL 必须先查真实数据库**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十四、测试铁律
|
|
||||||
|
|
||||||
- Playwright 必须 `--workers=1`
|
|
||||||
- 超时 120 秒,最多重试 3 次
|
|
||||||
- 测试失败自动重试,超过 3 次通知人工介入
|
|
||||||
- 测试结果写入禅道备注
|
|
||||||
- **DB审查失败自动回退** — 路由回原修复智能体
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十五、归档铁律
|
|
||||||
|
|
||||||
- **三重写入** — Git + SQLite + Redis
|
|
||||||
- SQLite 必须使用完整字段
|
|
||||||
- 禅道备注格式:`[📝 陈琳归档] Bug #xxx`
|
|
||||||
- 归档报告必须包含:基本信息 + 根因分析 + 修复文件 + 流程时间线
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十六、禅道交互
|
|
||||||
|
|
||||||
- 备注使用 resolve+activate workaround
|
|
||||||
- 不直接调用 comment API(会 404)
|
|
||||||
- 图片附件必须 OCR 读取
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十七、质量门禁
|
|
||||||
|
|
||||||
- L1: 编译通过
|
|
||||||
- L2: 测试通过
|
|
||||||
- L3: DB审查通过
|
|
||||||
- L4: 验收通过
|
|
||||||
- L5: 归档完成
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 过往教训
|
|
||||||
|
|
||||||
| Bug | 教训 | 根因 |
|
|
||||||
|---|---|---|
|
|
||||||
| #574 | 状态值 BOOKED(1)→应为 CHECKED_IN(3),前端映射缺失 | 没走完整状态链路 |
|
|
||||||
| #574 | AI 看到编译错误直接删文件 | 没检查 git baseline |
|
|
||||||
| #574 | 多次 fallback 修错文件(OrderServiceImpl) | 没用 rg 搜索所有引用 |
|
|
||||||
| #574 | 签到后 booked_num 未累加 | 只改状态没改统计 |
|
|
||||||
| #575 | 改了签到状态没检查退号流程 | 只验正向不验逆向 |
|
|
||||||
| #575 | booked_num 应在预约时累加而非签到时 | 统计变更未验证实际值 |
|
|
||||||
| — | 修复完成未提交到 develop | 框架未强制验证提交 |
|
|
||||||
| — | 退号流程只检查 BOOKED(1) 不兼容 CHECKED_IN(3) | 状态变更影响面分析缺失 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十八、禁止硬编码业务默认值(来自 Bug #617 教训)
|
|
||||||
|
|
||||||
- **禁止**在提交参数中硬编码业务默认值(如 `contractNo: '0000'`)
|
|
||||||
- 必须使用用户在表单中选择的值,硬编码值仅作为 fallback
|
|
||||||
- 检查清单:
|
|
||||||
1. 表单字段是否有 `v-model` 绑定?
|
|
||||||
2. 构建提交参数时是否使用了绑定值?
|
|
||||||
3. 提交后是否覆盖了用户选择?
|
|
||||||
- **禁止**:用户选了医保,提交时却写死为自费
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 过往教训(补充)
|
|
||||||
|
|
||||||
| Bug | 教训 | 根因 |
|
|
||||||
|---|---|---|
|
|
||||||
| #617 | 费用性质硬编码为 '0000'(自费),用户选医保无效 | 构建参数时写死默认值 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 十九、前端验证铁律
|
|
||||||
|
|
||||||
- **提交前必须编译前端** — `npm run build` 或 `npx vite build` 通过才算完成
|
|
||||||
- **禁止只改 .vue 文件不验证编译** — 改完必须跑一次编译确认无报错
|
|
||||||
- **SCSS 括号闭合必须检查** — `<style lang="scss" scoped>` 内的所有 `{}` 必须成对闭合
|
|
||||||
- **SCSS 嵌套层级不超过 4 层** — 过深嵌套说明结构需要重构
|
|
||||||
- **编译报错必须当场修复** — 看到 error 立即修,不要留到下一步
|
|
||||||
|
|
||||||
### SCSS 检查清单
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 编译验证
|
|
||||||
cd openhis-ui-vue3 && npm run build
|
|
||||||
|
|
||||||
# 如果编译报错,检查 SCSS
|
|
||||||
grep -n "{" src/views/xxx/index.vue | wc -l # 开括号数
|
|
||||||
grep -n "}" src/views/xxx/index.vue | wc -l # 闭括号数
|
|
||||||
# 两者必须相等
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 二十、提交前验证铁律
|
|
||||||
|
|
||||||
- **后端**: `mvn compile` 通过 + 无新增 warning
|
|
||||||
- **前端**: `npm run build` 通过 + 无 SCSS 错误
|
|
||||||
- **禁止跳过编译直接提交** — 编译失败的代码不允许进仓库
|
|
||||||
- **提交信息格式**: `type(scope): description`(如 `fix(charge): 修复退费金额计算`)
|
|
||||||
|
|
||||||
### 提交前检查流程
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 1. 后端编译
|
|
||||||
cd openhis-server-new && mvn compile -pl openhis-application -am
|
|
||||||
|
|
||||||
# 2. 前端编译
|
|
||||||
cd openhis-ui-vue3 && npm run build
|
|
||||||
|
|
||||||
# 3. 两个都通过才提交
|
|
||||||
git add --all && git commit -m "type(scope): description"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 二十六、resolve 前必须验证 develop commit(来自 v0.5.1 修复)
|
|
||||||
|
|
||||||
- **禁止**仅凭 worktree 未提交变更就 resolve Bug
|
|
||||||
- resolve 前必须检查 `git log origin/develop --grep="Bug#{id}"` 是否有 commit
|
|
||||||
- `comment_bug` 用 resolve+activate workaround,activate 失败会导致 bug 卡在 resolved
|
|
||||||
- `ok_to_commit` 必须要求 `has_fix_commit = true`(develop 上有实际 commit)
|
|
||||||
- **验证方式**: `git log origin/develop --grep="Bug#{id}" --oneline -1` 有输出才允许 resolve
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 二十七、comment_bug 禁止改状态铁律(来自 v0.5.2 修复)
|
|
||||||
|
|
||||||
- **禁止**使用 resolve+activate workaround 添加备注 — activate 失败会导致 bug 卡在 resolved
|
|
||||||
- 添加备注必须使用不改状态的方式:CLI `zentao bug update --comment` 或 API `PUT /bugs/{id}`
|
|
||||||
- `comment_bug` 函数必须只写 comment,不触发任何状态变更
|
|
||||||
- **教训**: 36 个 bug 因 activate 失败被误标为 resolved,无代码提交
|
|
||||||
|
|
||||||
### 正确做法
|
|
||||||
|
|
||||||
```rust
|
|
||||||
// ✅ 正确:只加备注,不改状态
|
|
||||||
zentao bug update --id <BUG_ID> --comment "备注内容"
|
|
||||||
|
|
||||||
// ❌ 错误:resolve+activate 会改状态
|
|
||||||
POST /bugs/{id}/resolve // 改为 resolved
|
|
||||||
POST /bugs/{id}/activate // 如果失败,bug 卡在 resolved
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 二十八、文件快照禁用覆盖判定铁律(来自 v0.5.2 修复)
|
|
||||||
|
|
||||||
- **禁止**用主仓库文件快照 diff 覆盖 success 判定
|
|
||||||
- success 判定必须基于 agent worktree 的实际变更(`count_changed_files` + `has_fix_commit`)
|
|
||||||
- 主仓库快照仅用于日志记录,不能影响判定结果
|
|
||||||
- **教训**: 主仓库快照检测到其他 agent 的变更,误判当前 agent 修复成功
|
|
||||||
|
|
||||||
### 根因
|
|
||||||
|
|
||||||
```
|
|
||||||
Agent A cherry-pick 到 develop → 主仓库有变更
|
|
||||||
Agent B 运行 → 主仓库快照检测到 A 的变更 → 误判 B 修复成功
|
|
||||||
```
|
|
||||||
|
|
||||||
### 正确做法
|
|
||||||
|
|
||||||
```rust
|
|
||||||
// ✅ 正确:基于 worktree 判定
|
|
||||||
let changes = count_worktree_changes(agent_name); // 检查 worktree
|
|
||||||
let has_fix = has_recent_fix_commit(agent_name, bug_id); // 检查 develop commit
|
|
||||||
|
|
||||||
// ❌ 错误:基于主仓库判定
|
|
||||||
let file_diff = snapshot_and_diff(main_repo_dir, &before); // 检查主仓库
|
|
||||||
if has_real_changes { r.success = true; } // 误判
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 二十九、Worktree 必须存在且为 Git 仓库铁律
|
|
||||||
|
|
||||||
- 每个 agent 的 worktree 目录必须存在且包含 `.git` 文件
|
|
||||||
- 启动 executor 前必须验证 worktree 存在:`test -d /tmp/agentforge-worktrees/{agent}`
|
|
||||||
- worktree 不存在时必须创建:`git worktree add /tmp/agentforge-worktrees/{agent} -b {agent}`
|
|
||||||
- **教训**: 4 个 agent(zhangfei, chenlin, huatuo, liubei)无 worktree,codex 运行失败但仍标记成功
|
|
||||||
|
|
||||||
### 验证命令
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 检查所有 agent worktree
|
|
||||||
for agent in zhaoyun guanyu xunyu zhangfei huatuo chenlin zhugeliang liubei; do
|
|
||||||
if [ -d "/tmp/agentforge-worktrees/$agent/.git" ]; then
|
|
||||||
echo "✅ $agent: worktree OK"
|
|
||||||
else
|
|
||||||
echo "❌ $agent: worktree MISSING"
|
|
||||||
cd /root/.openclaw/workspace/his-repo
|
|
||||||
git worktree add /tmp/agentforge-worktrees/$agent -b $agent
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 三十、Bug 状态变更必须双重确认铁律
|
|
||||||
|
|
||||||
- resolve Bug 前必须检查当前状态:`zentao bug get --id {id} | grep status`
|
|
||||||
- 只有 `status: active` 的 Bug 才允许 resolve
|
|
||||||
- resolve 后必须验证状态:`zentao bug get --id {id} | grep status` 确认为 `resolved`
|
|
||||||
- activate 后必须验证状态:确认恢复为 `active`
|
|
||||||
- **教训**: 批量操作 36 个 bug 时,1 个因状态不对失败,需要逐个检查
|
|
||||||
|
|
||||||
### 批量操作模板
|
|
||||||
|
|
||||||
```bash
|
|
||||||
source /root/.config/zentao/.env
|
|
||||||
for id in 711 710 709; do
|
|
||||||
# 1. 检查当前状态
|
|
||||||
status=$(zentao bug get --id "$id" 2>&1 | grep "status:" | awk '{print $2}')
|
|
||||||
if [ "$status" != "active" ]; then
|
|
||||||
echo "⚠️ Bug #$id: 当前状态=$status,跳过"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
# 2. 执行操作
|
|
||||||
zentao bug activate --id "$id" --data '{"openedBuild":"6"}'
|
|
||||||
# 3. 验证结果
|
|
||||||
new_status=$(zentao bug get --id "$id" 2>&1 | grep "status:" | awk '{print $2}')
|
|
||||||
echo "Bug #$id: $status → $new_status"
|
|
||||||
done
|
|
||||||
```
|
|
||||||
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
---
|
|
||||||
description: Backend development rules for HealthLink-HIS Java/Spring Boot code
|
|
||||||
paths:
|
|
||||||
- "healthlink-his-server/**/*.java"
|
|
||||||
- "healthlink-his-server/**/pom.xml"
|
|
||||||
---
|
|
||||||
|
|
||||||
# Backend Development Rules
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
- Layered: `Controller → AppService → Service → Mapper → Entity`
|
|
||||||
- Package: `com.healthlink.his.web.{module}.{layer}`
|
|
||||||
- All queries use `LambdaQueryWrapper`, no string SQL concatenation
|
|
||||||
- All endpoints require `@PreAuthorize` permission control
|
|
||||||
- Use `@Transactional(rollbackFor = Exception.class)` for transaction management
|
|
||||||
|
|
||||||
## Naming conventions
|
|
||||||
- Controller: `XxxController`
|
|
||||||
- AppService: `IXxxAppService` / `XxxAppServiceImpl`
|
|
||||||
- Service: `IXxxService` / `XxxServiceImpl`
|
|
||||||
- Mapper: `XxxMapper`
|
|
||||||
- Entity: `Xxx`
|
|
||||||
- DTO: `XxxDto` / `XxxQueryDto`
|
|
||||||
|
|
||||||
## Iron Laws (Backend)
|
|
||||||
- **Iron Law 7**: Never modify existing public method signatures (no delete/rename, no parameter changes)
|
|
||||||
- **Iron Law 18**: Never break existing functionality when adding new features
|
|
||||||
- **Iron Law 19**: Compile errors are your responsibility to fix, regardless of origin
|
|
||||||
- **Iron Law 6**: Never delete existing Java source files
|
|
||||||
|
|
||||||
## DTO Field Type Defense
|
|
||||||
- Frontend Boolean fields → use String + business layer conversion (Jackson strict Boolean validation)
|
|
||||||
- All DTOs accepting frontend input: add `@JsonIgnoreProperties(ignoreUnknown = true)`
|
|
||||||
|
|
||||||
## Verification commands
|
|
||||||
```bash
|
|
||||||
cd healthlink-his-server
|
|
||||||
mvn clean compile -DskipTests # Compile check
|
|
||||||
mvn install -DskipTests # Build and install
|
|
||||||
mvn test # Run all tests
|
|
||||||
```
|
|
||||||
|
|
||||||
## Common patterns
|
|
||||||
- Patient sensitive information must be desensitized in logs
|
|
||||||
- Use Hutool utility classes for common operations
|
|
||||||
- Flowable for workflow, LiteFlow for rule engine
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
---
|
|
||||||
description: Database and Flyway migration rules for HealthLink-HIS
|
|
||||||
paths:
|
|
||||||
- "**/*.sql"
|
|
||||||
- "**/mapper/*.xml"
|
|
||||||
- "healthlink-his-server/**/resources/db/migration/**"
|
|
||||||
---
|
|
||||||
|
|
||||||
# Database and Migration Rules
|
|
||||||
|
|
||||||
## Iron Law 2: Flyway database migration
|
|
||||||
- All new tables or new fields require a Flyway migration script
|
|
||||||
- Path: `healthlink-his-application/src/main/resources/db/migration/`
|
|
||||||
- Naming: `V{version}__{description}.sql` (double underscore)
|
|
||||||
|
|
||||||
## Iron Law 17: Database iron laws
|
|
||||||
- **Query real database before modification** — confirm table structure, field constraints, indexes
|
|
||||||
- **No guessing SQL** — check table structure first
|
|
||||||
- **Verify after SQL modification** — use `EXPLAIN` or actual query to verify syntax
|
|
||||||
- **Check NOT NULL constraints** — verify `is_nullable` before INSERT/UPDATE
|
|
||||||
- **Check all related tables** — for JOIN queries, check all related table structures and foreign keys
|
|
||||||
|
|
||||||
## Iron Law 18: SQL migration restrictions
|
|
||||||
- Only `ALTER TABLE ADD COLUMN` allowed
|
|
||||||
- No `DROP COLUMN` or `RENAME COLUMN`
|
|
||||||
- New fields can only be appended, not deleted or renamed
|
|
||||||
|
|
||||||
## Database connection
|
|
||||||
- PostgreSQL 15+ at `192.168.110.252:15432`
|
|
||||||
- Database: `healthlink_his`
|
|
||||||
- Flyway is enabled in dev and runs on startup
|
|
||||||
- Migration conflicts will block server startup
|
|
||||||
|
|
||||||
## Full chain 6-ring analysis
|
|
||||||
For bugs/requirements involving database fields, follow the complete chain:
|
|
||||||
```
|
|
||||||
Frontend/Page → Controller → Service → Mapper → DB/SQL → Related modules
|
|
||||||
①Input ②Validate ③Business ④Persist ⑤Storage ⑥Linkage
|
|
||||||
```
|
|
||||||
|
|
||||||
| Ring | Check |
|
|
||||||
|------|-------|
|
|
||||||
| ① Input | Frontend has input entry (dialog, table row edit, form) |
|
|
||||||
| ② Validate | Controller parameter validation, @Valid, permission control |
|
|
||||||
| ③ Business | Service business logic, transaction boundaries, multiple Service implementation entries |
|
|
||||||
| ④ Persist | Mapper XML, DTO field mapping, type conversion |
|
|
||||||
| ⑤ Storage | Database table structure, indexes, NOT NULL constraints |
|
|
||||||
| ⑥ Linkage | Upstream (orders→nurse station), downstream (printing, billing, reports) synchronization |
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
---
|
|
||||||
description: Systematic debugging process for HealthLink-HIS
|
|
||||||
paths:
|
|
||||||
- "**/*.java"
|
|
||||||
- "**/*.{vue,js,ts}"
|
|
||||||
- "**/*.sql"
|
|
||||||
---
|
|
||||||
|
|
||||||
# Systematic Debugging Process
|
|
||||||
|
|
||||||
> **Iron Law: No root cause investigation, no fix proposal.**
|
|
||||||
|
|
||||||
## Four-stage process
|
|
||||||
|
|
||||||
### Stage 1: Root cause investigation (must complete before fixing)
|
|
||||||
1. Carefully read error message (stack trace, line numbers, error codes)
|
|
||||||
2. Stabilize reproduction (can it be reliably triggered? steps? every time?)
|
|
||||||
3. Check recent changes (`git diff`, new dependencies, config changes)
|
|
||||||
4. Multi-component system: add diagnostic logs at each component boundary, locate which layer is broken
|
|
||||||
5. Trace data flow: where does the bad value come from? who calls it? trace back to the source
|
|
||||||
|
|
||||||
### Stage 2: Pattern analysis
|
|
||||||
- Find similar working code in the same codebase
|
|
||||||
- Compare differences item by item
|
|
||||||
- Understand dependency relationships
|
|
||||||
|
|
||||||
### Stage 3: Hypothesis and test
|
|
||||||
- Form single hypothesis: "I believe X is the root cause because Y"
|
|
||||||
- Make minimal change to test
|
|
||||||
- Effective → Stage 4; Invalid → new hypothesis
|
|
||||||
|
|
||||||
### Stage 4: Implement
|
|
||||||
- Create failing test case
|
|
||||||
- Fix root cause (not symptoms)
|
|
||||||
- Verify fix
|
|
||||||
|
|
||||||
## Use /fix-compile skill
|
|
||||||
When `mvn compile` or `npm run build:dev` fails, use the `/fix-compile` skill for systematic diagnosis and repair.
|
|
||||||
|
|
||||||
## Common error patterns
|
|
||||||
- **Duplicate method**: Check all Service implementations for the same method
|
|
||||||
- **Missing import**: Verify package structure matches `com.healthlink.his.web.{module}`
|
|
||||||
- **Type mismatch**: Check DTO field types (Iron Law: DTO field type defense)
|
|
||||||
- **SCSS bracket**: Count `{` and `}` in `<style lang="scss" scoped>` blocks
|
|
||||||
- **Flyway conflict**: Check migration version numbers in `healthlink-his-application/src/main/resources/db/migration/`
|
|
||||||
- **State chain break**: Bug#574 lesson — check complete state flow (enum → Service → query → frontend mapping → statistics)
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
---
|
|
||||||
description: Frontend development rules for HealthLink-HIS Vue 3/Element Plus code
|
|
||||||
paths:
|
|
||||||
- "healthlink-his-ui/src/**/*.{vue,js,ts,jsx,tsx}"
|
|
||||||
- "healthlink-his-ui/package.json"
|
|
||||||
- "healthlink-his-ui/vite.config.js"
|
|
||||||
---
|
|
||||||
|
|
||||||
# Frontend Development Rules
|
|
||||||
|
|
||||||
## Tech stack
|
|
||||||
- Vue 3.5 + Vite 6.4 + Element Plus 2.14 + Pinia 2.2 + TypeScript 5.9
|
|
||||||
- Based on RuoYi-Vue3 framework
|
|
||||||
|
|
||||||
## Directory structure
|
|
||||||
```
|
|
||||||
src/api/{module}/ # API interfaces
|
|
||||||
src/views/{module}/ # Page components
|
|
||||||
src/store/modules/ # Pinia state management
|
|
||||||
src/components/ # Shared components
|
|
||||||
```
|
|
||||||
|
|
||||||
## Key constraints
|
|
||||||
- API prefix: `/healthlink-his/api/v1/`
|
|
||||||
- Route lazy loading: `() => import('@/views/xxx/index.vue')`
|
|
||||||
- Use `<script setup>` syntax for all pages
|
|
||||||
- Button permissions: `v-hasPermi` directive
|
|
||||||
- Cleanup: events registered in `onMounted` must be removed in `onUnmounted`
|
|
||||||
|
|
||||||
## Iron Laws (Frontend)
|
|
||||||
- **Iron Law 4**: API paths must align with backend (`/healthlink-his/api/v1/`)
|
|
||||||
- **Iron Law 18**: Never break existing page component structure when adding new pages
|
|
||||||
- **Iron Law 23**: Always use UTF-8 encoding when reading/writing files (PowerShell trap)
|
|
||||||
- **Iron Law 30**: Frontend compilation is mandatory — `npm run build:dev` must pass
|
|
||||||
|
|
||||||
## SCSS rules
|
|
||||||
- Check bracket closure in `<style lang="scss" scoped>` blocks
|
|
||||||
- All `{}` must be paired
|
|
||||||
- Compilation errors must be fixed immediately
|
|
||||||
|
|
||||||
## Verification commands
|
|
||||||
```bash
|
|
||||||
cd healthlink-his-ui
|
|
||||||
npm run build:dev # Build verification
|
|
||||||
npm run lint # ESLint check
|
|
||||||
npm run test:run # Vitest unit tests
|
|
||||||
```
|
|
||||||
|
|
||||||
## Common patterns
|
|
||||||
- Use Element Plus components (ElTable, ElForm, ElDialog)
|
|
||||||
- Use vxe-table for complex data grids
|
|
||||||
- Use ECharts for charts and visualizations
|
|
||||||
- Use vue-plugin-hiprint for printing
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
---
|
|
||||||
description: Testing and verification rules for HealthLink-HIS
|
|
||||||
paths:
|
|
||||||
- "**/*.java"
|
|
||||||
- "**/*.{vue,js,ts}"
|
|
||||||
- "**/*.sql"
|
|
||||||
---
|
|
||||||
|
|
||||||
# Testing and Verification Rules
|
|
||||||
|
|
||||||
## Iron Law 1: Test after modification
|
|
||||||
- Backend: `mvn clean compile -DskipTests` → `mvn install -DskipTests` → `mvn test`
|
|
||||||
- Frontend: `npm run build:dev` → `npm run lint` → `npm run test:run`
|
|
||||||
- White box: Compilation passes, no ERROR
|
|
||||||
- Black box: Key interfaces return `{code:200, data:...}`, verify business logic
|
|
||||||
- Smoke: Application starts normally, core flow works
|
|
||||||
|
|
||||||
## Iron Law 3: Commit only after tests pass
|
|
||||||
- Compilation + all tests must pass before `git commit`
|
|
||||||
- Do not commit incomplete features, debug code, or temporary files
|
|
||||||
|
|
||||||
## Iron Law 8: Verification before completion
|
|
||||||
- **Cannot claim "done", "passed", "no problem" without running verification commands**
|
|
||||||
- Forbidden: "should work", "probably fine", "looks correct"
|
|
||||||
- Required: Run command → Read output → Confirm result → Then claim
|
|
||||||
- This is an honesty principle, not an efficiency issue
|
|
||||||
|
|
||||||
## Iron Law 19: Compile errors are not distinguished by source
|
|
||||||
- `mvn compile`, `vite build`, `vue-tsc` errors = not acceptable, **regardless of origin**
|
|
||||||
- Forbidden: "this is a pre-existing issue", "not my change", "original bug"
|
|
||||||
- Correct approach: Locate error → Fix → Rebuild to confirm → Then continue
|
|
||||||
|
|
||||||
## Full verification pipeline
|
|
||||||
Use `/verify` skill to run the complete verification suite:
|
|
||||||
- Backend: compile + build + test
|
|
||||||
- Frontend: build + lint + test
|
|
||||||
|
|
||||||
## Test frameworks
|
|
||||||
- Backend: JUnit + Spring Boot Test
|
|
||||||
- Frontend: Vitest (unit), Playwright (E2E)
|
|
||||||
|
|
||||||
## Running specific tests
|
|
||||||
```bash
|
|
||||||
# Backend single test class
|
|
||||||
mvn test -pl healthlink-his-application -Dtest="XxxTest" -Dsurefire.failIfNoSpecifiedTests=false
|
|
||||||
|
|
||||||
# Frontend single test file
|
|
||||||
npm run test:run -- path/to/test.spec.ts
|
|
||||||
```
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"provider": "openai-compatible",
|
|
||||||
"apiKey": "tp-c5g4lq98ufrnmb8tgde32pf1jodrqs2bfkyz19shto080000",
|
|
||||||
"baseUrl": "https://token-plan-cn.xiaomimimo.com/v1",
|
|
||||||
"model": "mimo-v2.5-pro",
|
|
||||||
"hooks": {
|
|
||||||
"PostToolUse": [
|
|
||||||
{
|
|
||||||
"matcher": "Write|Edit",
|
|
||||||
"hooks": [
|
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "node -e \"const d=require('fs').readFileSync(0,'utf-8');const j=JSON.parse(d);const f=j.tool_input?.file_path||j.tool_response?.filePath;if(f&&f.match(/\\.(vue|js|ts|jsx|tsx|scss|css)$/)&&f.startsWith('healthlink-his-ui/')){const p=f.replace('healthlink-his-ui/','');const{execSync}=require('child_process');try{execSync('npx prettier --write '+p,{cwd:'healthlink-his-ui',stdio:'pipe',timeout:15000})}catch(e){}}\" 2>/dev/null || true",
|
|
||||||
"timeout": 20
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"permissions": {
|
|
||||||
"allow": [
|
|
||||||
"Bash(cd healthlink-his-ui && npx eslint --version)",
|
|
||||||
"Bash(echo '{\"tool_name\":\"Edit\",\"tool_input\":{\"file_path\":\"healthlink-his-ui/src/App.vue\"}}' | jq -r '.tool_input.file_path // .tool_response.filePath' | { read -r f; cd healthlink-his-ui && npx eslint --fix \"$f\" 2>&1 || true; })",
|
|
||||||
"Bash(node:*)",
|
|
||||||
"Bash(echo '{\"tool_name\":\"Edit\",\"tool_input\":{\"file_path\":\"healthlink-his-ui/src/App.vue\"}}' | node -e \"const data = require\\('fs'\\).readFileSync\\(0, 'utf-8'\\); const json = JSON.parse\\(data\\); const f = json.tool_input?.file_path || json.tool_response?.filePath; console.log\\(f\\);\")",
|
|
||||||
"Bash(echo '{\"tool_name\":\"Edit\",\"tool_input\":{\"file_path\":\"healthlink-his-ui/src/App.vue\"}}' | node -e \"\nconst d=require\\('fs'\\).readFileSync\\(0,'utf-8'\\);\nconst j=JSON.parse\\(d\\);\nconst f=j.tool_input?.file_path||j.tool_response?.filePath;\nif\\(f && f.match\\(/\\\\.\\(vue|js|ts|jsx|tsx\\)\\\\$/\\) && f.startsWith\\('healthlink-his-ui/'\\)\\) {\n const relPath = f.replace\\('healthlink-his-ui/', ''\\);\n const {execSync} = require\\('child_process'\\);\n try { execSync\\('npx eslint --fix ' + relPath, {cwd: 'healthlink-his-ui', stdio: 'pipe', timeout: 10000}\\); console.log\\('formatted: ' + f\\); }\n catch\\(e\\) { console.log\\('lint skipped: ' + f\\); }\n}\n\" 2>/dev/null || true)",
|
|
||||||
"Bash(ls -la .qoder/settings.json 2>/dev/null || echo \"File does not exist\")",
|
|
||||||
"Bash(ls -la D:/his/RULES.md 2>/dev/null && wc -l D:/his/RULES.md || echo \"RULES.md not found\")"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
---
|
|
||||||
name: bug-analyze
|
|
||||||
description: Bug分析技能 — 根因分析和修复方案设计
|
|
||||||
when_to_use: 分析Bug时自动激活
|
|
||||||
---
|
|
||||||
|
|
||||||
# Bug 分析技能
|
|
||||||
|
|
||||||
## 分析流程
|
|
||||||
|
|
||||||
### 1. 信息收集
|
|
||||||
- 读取禅道 Bug 完整信息
|
|
||||||
- OCR 读取附件图片中的错误信息
|
|
||||||
- 查询数据库相关表结构
|
|
||||||
|
|
||||||
### 2. 6 环分析
|
|
||||||
```
|
|
||||||
前端/页面 → Controller → Service → Mapper → DB/SQL → 关联模块
|
|
||||||
①录入 ②验证 ③业务 ④持久化 ⑤存储 ⑥联动
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. 输出
|
|
||||||
- 根因描述
|
|
||||||
- 影响范围
|
|
||||||
- 修复方案
|
|
||||||
- 测试要点
|
|
||||||
- 路由建议(数据库→荀彧,后端→关羽,前端→赵云)
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
---
|
|
||||||
name: chenlin-archive
|
|
||||||
description: 归档技能 — 生成报告、多层归档
|
|
||||||
when_to_use: 验收通过后自动激活
|
|
||||||
---
|
|
||||||
|
|
||||||
# 归档技能
|
|
||||||
|
|
||||||
## 归档流程
|
|
||||||
|
|
||||||
### 🔴 前置检查(必须通过才能归档)
|
|
||||||
- **修复必须在 develop 分支上** — `git log origin/develop --grep="#{id}"` 有结果
|
|
||||||
- 未合并到 develop 的修复禁止归档
|
|
||||||
|
|
||||||
### 1. 收集数据
|
|
||||||
- 从 traces 表收集全流程事件
|
|
||||||
- 从 git 收集 commit 信息(必须在 develop 分支上)
|
|
||||||
- 从测试结果收集通过/失败状态
|
|
||||||
|
|
||||||
### 2. 生成报告
|
|
||||||
- Markdown 格式
|
|
||||||
- 包含:基本信息、根因分析、修复文件、流程时间线
|
|
||||||
|
|
||||||
### 3. 三重归档
|
|
||||||
- **Git**: his-repo/docs/bug-fixes/bug-{id}.md
|
|
||||||
- **SQLite**: bug_reports 表(完整字段)
|
|
||||||
- **Redis**: fix_doc:{id}(30天 TTL)
|
|
||||||
|
|
||||||
### 4. 禅道备注
|
|
||||||
- 格式:[📝 陈琳归档] Bug #xxx 修复报告已归档
|
|
||||||
- 使用 resolve+activate workaround
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
---
|
|
||||||
name: db-review
|
|
||||||
description: DB审查技能 — 数据库变更验证
|
|
||||||
when_to_use: 修复涉及SQL/数据库时自动激活
|
|
||||||
paths:
|
|
||||||
- "*.sql"
|
|
||||||
- "*mapper*"
|
|
||||||
- "*Mapper*"
|
|
||||||
---
|
|
||||||
|
|
||||||
# DB 审查技能
|
|
||||||
|
|
||||||
## 审查流程
|
|
||||||
|
|
||||||
### 1. 检查变更范围
|
|
||||||
- 使用 `git diff --name-only` 查看变更文件
|
|
||||||
- 识别 SQL DDL 变更(.sql、migration)
|
|
||||||
- 区分 DDL 变更和代码引用(mapper XML)
|
|
||||||
|
|
||||||
### 2. 验证 SQL
|
|
||||||
- 用 db-query 查询真实表结构
|
|
||||||
- 检查 NOT NULL 约束
|
|
||||||
- 检查外键约束
|
|
||||||
- 用 EXPLAIN 验证查询计划
|
|
||||||
|
|
||||||
### 3. 审查结论
|
|
||||||
- 无 DDL 变更 → 直接通过
|
|
||||||
- 有 DDL 变更 → 检查迁移脚本
|
|
||||||
- 审查失败 → 退回修复智能体并附原因
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
---
|
|
||||||
name: bug-fix
|
|
||||||
description: Bug修复技能 — 全链路修复流程
|
|
||||||
when_to_use: 修复Bug时自动激活
|
|
||||||
paths:
|
|
||||||
- "*.java"
|
|
||||||
- "*.vue"
|
|
||||||
- "*.ts"
|
|
||||||
---
|
|
||||||
|
|
||||||
# Bug 修复技能
|
|
||||||
|
|
||||||
## 修复流程
|
|
||||||
|
|
||||||
### 1. 分析阶段
|
|
||||||
- 读取禅道 Bug 完整信息(标题、描述、附件图片)
|
|
||||||
- 使用 OCR 读取图片中的错误信息
|
|
||||||
- 分析 6 环链路:前端→Controller→Service→Mapper→DB→关联模块
|
|
||||||
- **状态值一致性检查**(涉及状态流转的 Bug 必做):
|
|
||||||
1. 列出所有相关枚举定义及其数值
|
|
||||||
2. 搜索所有引用该枚举的代码路径(`rg "SlotStatus\|OrderStatus\|Status"` )
|
|
||||||
3. 确认 Service 层设置值、查询映射、前端显示三者一致
|
|
||||||
4. 确认统计/聚合 SQL 包含所有相关状态值
|
|
||||||
|
|
||||||
### 2. 定位阶段
|
|
||||||
- 使用 `rg` 搜索相关代码
|
|
||||||
- 使用 `git blame` 追溯历史
|
|
||||||
- 确认根因
|
|
||||||
|
|
||||||
### 3. 修复阶段
|
|
||||||
- 一次只修一个 Bug
|
|
||||||
- 修改最小范围代码
|
|
||||||
- 遵守项目编码规范
|
|
||||||
|
|
||||||
### 4. 验证阶段
|
|
||||||
- 后端:`mvn compile`
|
|
||||||
- 前端:`vue-tsc --noEmit`
|
|
||||||
- 数据库:`db-query` 验证 SQL
|
|
||||||
- **全链路验证**(状态流转 Bug 必做):
|
|
||||||
1. 数据库:确认状态值已正确写入(`SELECT status FROM table WHERE id = ?`)
|
|
||||||
2. 后端接口:确认返回的状态映射正确(检查所有 `if/switch` 分支)
|
|
||||||
3. 前端显示:确认页面显示正确状态文本(检查 `STATUS_CLASS_MAP`)
|
|
||||||
4. 前端交互:确认按钮/操作基于正确状态启用/禁用
|
|
||||||
5. 统计数据:确认池/报表统计包含新状态值
|
|
||||||
- **禁止**:只验证编译通过就认为修复完成
|
|
||||||
|
|
||||||
### 5. 提交阶段
|
|
||||||
- `git add` + `git commit`
|
|
||||||
- commit message 格式:`fix(#bug_id): 简要描述`
|
|
||||||
- 推送到 develop 分支
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
---
|
|
||||||
name: playwright-test
|
|
||||||
description: Playwright回归测试技能
|
|
||||||
when_to_use: 测试Bug修复时自动激活
|
|
||||||
---
|
|
||||||
|
|
||||||
# Playwright 回归测试技能
|
|
||||||
|
|
||||||
## 测试流程
|
|
||||||
|
|
||||||
### 1. 环境准备
|
|
||||||
- 确保前端 dev server 运行在 81 端口
|
|
||||||
- 使用 `--workers=1` 单线程运行
|
|
||||||
|
|
||||||
### 2. 执行测试
|
|
||||||
```bash
|
|
||||||
cd /root/.openclaw/workspace/his-repo/openhis-ui-vue3
|
|
||||||
npx playwright test --grep @bug{ID} --reporter=line --workers=1
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. 结果判定
|
|
||||||
- 测试通过 → 通知华佗验收
|
|
||||||
- 测试失败 → 增加重试计数,退回修复智能体
|
|
||||||
- 超过 3 次 → 通知人工介入
|
|
||||||
|
|
||||||
### 4. 结果记录
|
|
||||||
- 写入禅道备注
|
|
||||||
- 保存测试文档到 Redis
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user