| feat(ops-spec-gen): add L0 contract workflow
Co-authored-by: zhouqilong<zhouqilong2@huawei.com>
# message auto-generated for no-merge-commit merge:
!292 merge harness into master
feat(ops-spec-gen): add L0 contract workflow
Created-by: zhou-qilong
Commit-by: zhouqilong
Merged-by: cann-robot
Description: ## 背景
当前算子开发链路里,REQUIREMENTS.md 承载了需求背景、接口说明、运行环境、性能资源等信息,但方案设计、测试设计和开发阶段仍需要反复从自然语言中解析 dtype、shape、公式、边界、精度等结构化约束。不同 Agent 各自解读这些字段时,容易出现设计、测试、实现三方漂移。
本 PR 引入 ops-spec-gen,用于生成和校验算子 spec.yaml。它的定位不是替代 REQUIREMENTS.md,而是把已经确认的 L0 数学语义固化成机器可读、可校验、可被下游 Agent 复用的结构化契约。
## 设计方案
- 新增 ops/ops-spec-gen:包含 schema、registries、示例、模板、生成器、9-stage 校验器和测试集。
- spec.yaml 聚焦 L0 结构化契约:输入/输出/属性、dtype 矩阵、shape 推导、broadcast、formula、oracle、boundary/extreme、tolerance、determinism、numerical stability。
- REQUIREMENTS.md 继续负责需求背景、接口自然语言说明、运行环境、资源/性能目标来源等上下文。
- 在 ops-registry-invoke 的 architect/tester Agent 中增加“输入优先级与字段所有权”:spec-owned 字段必须以 spec.yaml 为准,不能从 REQUIREMENTS.md 正文重新解释或覆盖。
- 方案设计必须输出「spec.yaml 一致性映射」,测试设计必须输出「spec.yaml 测试映射」,方案评审通过 DESIGN-SPEC-1 检查 DESIGN 是否承接 spec。
- task prompts 中补充最易误用的 5 个字段:dtype_policy.supported_combinations、outputs[].shape_rule、numerical_tolerance.per_dtype、boundary_conditions[]、extreme_inputs[],避免下游 Agent 在关键字段上重新解读需求正文。
## 闭坑策略
- 明确字段所有权:spec.yaml 是结构化 L0 真值源,REQUIREMENTS.md 是需求来源和解释材料;冲突时停止并报告,不允许 Agent 自行选择。
- 明确接力路径:design / design-review / test-design 不直接调用 spec-generation,只输出冲突日志;由主 Agent 回调 scene: spec-generation 修订 spec,再重跑 9-stage、1.2.5R 和对应下游阶段。
- 对未进入 schema 的字段保持边界:interface_binding、performance_budget、performance_baseline、DAV 宏等暂由 REQUIREMENTS.md / DESIGN 承载,不写入 spec 顶层未定义字段。
- global_constraints 当前按咨询性字段处理,机器可断言的 shape 关系应落到 outputs[].shape_rule / broadcast 中。
- 保留 [WIP] 状态,表示该 PR 仍处于草稿完善阶段,避免误认为已经可直接合入。
## 验证
- python3 -m pytest -q ops/ops-spec-gen/tests:204 passed
- python3 ops/ops-spec-gen/scripts/check_registry_schema_sync.py:OK
- python3 ops/ops-spec-gen/scripts/dump_rule_ids.py --check:OK
---
See merge request: cann/cannbot-skills!292 | 7 天前 |