# AGENTS.md

## 基本要求

- 交流使用中文。
- 代码整洁、高效、易读，优先遵循现有目录结构和命名风格。
- 不使用 Linux 指令；需要命令示例时统一使用 Windows PowerShell。
- 修改前先阅读相关文档和现有代码，避免凭空新增不一致的结构。
- 不回滚或覆盖用户已有改动，除非用户明确要求。

## 项目定位

OPS 是“开发运维一体化平台”。首期交付重点是可验证的后端、前端和验收证据，而不是只停留在模板或文档层面。

统一命名：

- 项目名称统一使用 `OPS`。
- 旧称 `DOIP` 不再使用；新增文档、代码包名、页面文案、配置示例和注释不要再引入 `DOIP`。
- `OPS-001` 至 `OPS-033` 是需求编号，必须保留。

优先参考资料：

- `README.md`：项目一句话说明。
- `TODOS.md`：当前交付任务优先级。
- `docs/首期验收矩阵.md`：OPS 需求到演示路径、数据准备、通过标准和证据的映射。
- `docs/首期数据模型与状态机.md`：第 1 阶段核心模型、状态机和存储分工。
- `docs/首期UI状态覆盖.md`：第 1 阶段页面状态覆盖要求。
- `docs/P1故障救援策略.md`：采集、解析、通知、派单失败的救援策略。
- `docs/P1测试计划.md`：第 1 阶段后端、前端和端到端测试计划。
- `docs/国产时序数据库选型验证.md`：TDengine 开源版选型结论和适配层要求。

当前决策：

- P0 和 P1 文档任务已完成，后续重点应转向可运行的 `server/`、`web/` 和验收证据。
- 时序数据库采用 TDengine 开源版。正式部署前仍需验证 AGPL 合规、麒麟兼容性、备份恢复和是否需要企业版支持。
- 第 1 阶段优先打通资源纳管、采集、原始事件、告警、通知、工单、报表/大屏和审计闭环。
- H3C/华三为首批网络设备适配重点，但具体型号、SNMP 版本、Trap/Syslog 样例和账号权限必须由现场确认，不能凭空编写。
- 3D 机房前端已外包，OPS 侧只提供后端接口、样例数据、权限控制和告警状态。

## 目录职责

- `docs/`：项目需求、架构、验收和计划文档。默认可读可改；改动需保持内容严谨，不做无关润色。
- `templates/front_sample/standard`：前端模板，基于 Arco Design Pro Vue 3、Vite、Pinia、TypeScript。默认只读。
- `templates/server_sample/`：后端模板，基于 Go、Gin、GORM、BSM-SDK Core。默认只读。
- `web/`：实际前端工程目录。不存在时，按任务需要从 `templates/front_sample/standard` 初始化后再开发。
- `server/`：实际后端工程目录。不存在时，按任务需要从 `templates/server_sample/` 初始化后再开发。
- `deploy/`：部署、迁移、发布脚本目录。不存在时按 TODO 创建。

## 边界规则

- 未经用户明确要求，绝不直接修改 `templates/front_sample/standard`。
- 未经用户明确要求，绝不直接修改 `templates/server_sample/`。
- 不把模板目录当作最终交付目录；实际业务代码应落在 `web/`、`server/`、`deploy/` 等交付目录。
- 不提交真实密钥、Token、数据库密码、私有仓库凭据或带凭据的 remote URL。
- 配置文件提供 `.example` 示例，真实本地配置不应纳入版本控制。
- 不引入与当前技术栈无关的大型框架或重构，除非任务明确要求。

## 常用 Windows PowerShell 命令

查看目录：

```powershell
Get-ChildItem -Force
```

查看文件：

```powershell
Get-Content -LiteralPath .\README.md -Encoding UTF8
```

复制模板初始化实际工程：

```powershell
Copy-Item -LiteralPath .\templates\server_sample -Destination .\server -Recurse
Copy-Item -LiteralPath .\templates\front_sample\standard -Destination .\web -Recurse
```

后端常用命令：

```powershell
Set-Location .\server
go mod tidy
go test ./...
go vet ./...
gofmt -w .
go run .\cmd\main\main.go
go run .\cmd\cli\main.go migrate
```

前端常用命令：

```powershell
Set-Location .\web
pnpm install
pnpm dev
pnpm type:check
pnpm lint
pnpm build
```

Git 状态检查：

```powershell
git status --short
git diff -- .\AGENTS.md
```

检查旧项目名残留：

```powershell
Select-String -Path .\README.md,.\TODOS.md,.\AGENTS.md,.\docs\*.md,.\deploy\README.md -Encoding UTF8 -Pattern 'DOIP','doip'
```

## 后端规范

- 使用 Go、Gin、GORM，延续 `templates/server_sample/` 的分层：`cmd/`、`internal/config/`、`internal/impl/`、`internal/logic/`、`internal/models/`、`internal/routers/`。
- API 需要统一响应结构、统一错误码和 `traceId`。
- 数据库设计优先面向 PostgreSQL，不继续扩散 MySQL 风格类型。
- 时序数据进入 TDengine 开源版；业务代码必须通过时序库适配层访问，不直接在业务逻辑中散落 TDengine 专有 SQL。
- 危险操作必须有审计日志、人工确认或可恢复方案。
- 配置通过 `etc/*.example.yaml` 描述结构，不把本地真实配置提交进仓库。
- 业务逻辑应写在 `internal/logic/`，模型和持久化写在 `internal/models/`，路由注册写在 `internal/routers/`。
- 首期核心模型优先落地资源、指标定义、采集任务、原始事件、告警、通知、工单、审计。
- 采集失败、Trap/Syslog 解析失败、通知失败、派单失败必须有错误码、重试或降级、用户提示、日志和审计。
- 告警、事件、工单状态机必须在后端集中定义和校验，前端不能自行拼接非法状态。

## 前端规范

- 使用 Vue 3、TypeScript、Pinia、Vue Router、Arco Design Vue，延续模板现有风格。
- 页面优先实现真实可用流程，不新增纯展示型占位页。
- API 定义按业务域放入 `src/api/`，页面放入 `src/views/`，复用组件放入 `src/components/`。
- 状态需要覆盖 loading、empty、error、success、partial、forbidden、stale、operating、operation_failed。
- 开发期 mock 只能用于前端独立调试；验收和联调必须连接真实后端 API。
- 文案和菜单要按模板 i18n 方式维护，不在组件中散落重复字符串。
- 首页、大屏、报表不能使用静态假数据作为验收依据；暂未接通真实接口时要明确显示空态、错误或数据过期。
- 错误状态必须显示 `traceId`，便于从页面追到后端日志。

## 测试规范

- 禁止 mock 数据库；后端测试必须使用真实 SQLite 内存库或任务指定的真实测试数据库。
- 新增核心业务逻辑时补充对应单元测试或接口测试。
- 状态机、统一响应、错误救援、权限边界和审计记录属于必须测试范围。
- TDengine 适配层至少要覆盖批量写入、时间范围查询、聚合查询、保留策略校验和不可用降级。
- 后端改动至少运行：

```powershell
go test ./...
go vet ./...
```

- 前端改动至少运行：

```powershell
pnpm type:check
pnpm lint
pnpm build
```

- 如果因私有依赖、网络、凭据或环境限制无法运行测试，需要在交付说明中明确写出原因和风险。

## 文档规范

- 文档使用中文，标题层级清晰，避免空泛描述。
- 修改需求、架构或验收相关内容时，同步检查 `TODOS.md` 和 `docs/首期验收矩阵.md` 是否需要更新。
- 新增命令示例必须使用 Windows PowerShell，不写 Bash、`cp`、`rm -rf`、`export` 等 Linux 写法。
- 文档中的路径使用项目相对路径，例如 `server/etc/app.example.yaml`。
- 涉及部署 Linux/麒麟时，可以写执行步骤、配置项和检查点，但命令示例仍保持 Windows PowerShell。
- 现场未知信息必须标为“待现场确认”，不要伪造设备型号、账号、OID、Trap/Syslog 样例、短信平台参数或生产地址。
- 修改 OPS 命名、时序数据库选型、H3C 接入、验收矩阵相关内容时，要同步检查 README、TODOS、首期验收矩阵和相关 P1 文档。



## 已知坑

- `templates/front_sample/standard` 和 `templates/server_sample/` 是模板目录，不是最终交付目录。
- 测试不能用 mock 数据库替代真实数据库行为。
- 当前仓库存在私有 Go 依赖，执行 `go mod tidy`、`go test` 可能需要私有仓库访问权限。
- 处理中文文档时使用 UTF-8 读取和写入，避免产生乱码。
- TDengine 开源版无时间使用限制，但 AGPL-3.0 合规和麒麟目标版本支持需要正式确认。
- 旧项目名 `DOIP` 已替换为 `OPS`，后续新增内容不要重新引入旧称。
