feat(v2.4.0): 开发铁律——DDIC 先行(依赖顺序+实测判定) + 强制闭环(本地改→同步→语法检查→循环至0错→激活→测试);补 2026-09-10 S4T 事故问题总结与自检清单

This commit is contained in:
吴让宇
2026-09-10 23:14:43 +08:00
parent f4210b06db
commit eae0b3547c
3 changed files with 86 additions and 2 deletions
+55 -1
View File
@@ -1,7 +1,7 @@
---
name: sap-cli
description: "SAP ABAP ADT CLI for AI agents. Trigger when: operating ABAP objects, syncing code to/from SAP, managing transports, querying DDIC, running ABAP programs, reading SAP tables, or any SAP development task via terminal."
version: "2.3.0"
version: "2.4.0"
author: WuRangyu
license: MIT
triggers:
@@ -110,6 +110,60 @@ Full rules: `references/sap-tool-constraints.md`. Violations are intercepted by
5. **Non-interactive `delete` needs piped confirm**`echo "yes" | python main.py delete ...` (else EOFError).
6. **DDIC `sync` failure on NW 7.40 (HTTP 406) is a system limit** — do not retry; report to the user for SE09.
## ⛔ 开发铁律(依赖顺序 + 强制闭环)
> 违反任一条的后果不是「效率低」,而是**后续全部代码必须返工**。2026-09-10 S4T 实测事故后固化。
### 铁律 1:DDIC 未完成,禁止开发任何引用它的代码
代码引用的每一个 DDIC 对象(域 / 数据元素 / 表 / 结构 / 表类型)**必须先完成「上传 → 语法检查通过 → 激活成功」三关**,才能开始写引用它的代码。
- 落地顺序:`domain → dataelement → table/structure → tabletype → interface → class → function → report`
- 「已完成」**以实测为准,不采信会话自述**:
- 结构 → `read-table DD02L``AS4LOCAL = 'A'` 才算激活)
- 表类型 → `read-table DD40L`
- 其他对象 → `info` / `read-table TADIR`
- 违反后果:后续每个引用它的对象语法检查报「类型 XXX 未知 / 结构不存在」,整批返工。
### 铁律 2:强制开发闭环(七步,不得跳步)
```
1. 本地编写 / 修改源码 ← 本地文件是唯一编辑入口,不在 SAP 端直接改
2. 同步到 SAP ← upload / sync --corr_nr
3. SAP 端语法检查 ← syntax-check
4. 有错?→ 回到第 1 步 ← 本地改 → 再同步 → 再检查,循环到 0 错误
5. 语法检查通过 → 激活 ← activate
6. 激活成功 → 才允许执行测试 ← run-program / unit-test
7. 测试不过 → 回到第 1 步
```
**禁止**
- ❌ 跳过语法检查直接 `activate`
- ❌ 未激活就 `run-program` / `unit-test`(跑的是旧版本,或报「对象不存在」)
- ❌ 把「语法检查通过」当成「功能正常」—— `syntax-check` 不校验被调对象的存在性与签名(见 `references/abap-coding-rules.md` E04/E05
- ❌ 把「S4T 演示机通过」表述为「CEM / 生产验证通过」(演示机缺 DDIC、无编号范围、权限不同)
### 铁律 3:引用前先核实存在性(E04/E05 落地)
`CALL FUNCTION` 或引用 `TYPE z...` 之前,必须先 `info` / `read-table DD02L|DD03L` 核实:对象存在、名称逐字符一致、签名与组件一致。核实记录(对象存在性 + 签名比对)纳入交付物。
### 铁律 4:同一任务同时只允许一个开发者
多会话并发操作同一批对象会相互覆盖。**派下一个会话前,先确认前一个已退出**(`ps aux | grep [h]ermes`)。长任务用 `background=true, notify=true`,等完成通知再派下一步。
### 2026-09-10 S4T 事故问题总结
| # | 问题 | 后果 | 对策(已固化) |
|---|------|------|----------------|
| 1 | 用 `CALL FUNCTION` 但检查不校验被调函数是否存在、调用结构是否正确 | 本地语法全绿、运行期 `CALL_FUNCTION_NOT_FOUND` 转储 | 编码规则 E04/E05(强制核实存在与签名) |
| 2 | DDIC 未落地就开发引用代码 | 后续对象语法检查全挂 | 铁律 1(DDIC 先行 + 实测判定) |
| 3 | 跳过「语法检查 → 激活 → 测试」闭环,直接跑测试 | 跑的是旧版本 / 对象不存在,结论无效 | 铁律 2(七步闭环不得跳步) |
| 4 | 采信自述「函数组壳已存在」 | 实查 TFDIR 0 行,对象从未落地 | 铁律 1(实测判定)+ 铁律 3 |
| 5 | 批量生成 DDIC 的工具报表反复 500/转储 | 34 分钟会话耗尽,零交付 | 逐个落对象;`run-program` 不稳定见下方「DDIC 落地方案」 |
| 6 | 多个会话并发改同一批对象 | 相互覆盖,效率崩盘 | 铁律 4(单工作者) |
| 7 | 未读技能就试错(`delete` 交互确认) | 白撞 EOFError 一轮 | 动手前先读 SKILL.md 与 references |
## 🔄 Standard WorkflowSAP 对象操作标准流程)
> 所有 SAP 对象修改操作必须按此顺序执行,不得跳过或调整步骤顺序。