Logic-Lens — 语义对比
何时使用
当需要通过半形式化并行追踪来对比两个代码版本的语义等价性时使用此技能。当用户分享重构、重写、迁移或A/B实现并想确认行为是否未变时触发——"我改坏了什么吗""这两个等价吗""行为一致吗"。
设置
按 ../_shared/common.md §13 进行懒加载:
- 仅在需要语言、铁律、判定头、范围路由、修复纪律、配置字段和加载预算时读取
../_shared/common.md。 - 仅在到达对应步骤时读取
logic-diff-guide.md中的相关步骤。 - 在当前步骤需要时按需加载
../_shared/logic-risks.md、../_shared/semiformal-guide.md、../_shared/semiformal-checklist.md和../_shared/report-template.md。
流程
步骤 0. 语言 + 范围路由。 按 common.md §1 检测语言。确认提供了两个版本。如果只有一个版本,切换到 logic-review。
步骤 1. 确定共享规格(指南步骤 1)——两个版本应该处理哪些输入;应该产生哪些输出/副作用。如果用户声明重构在某特定区域有意改变了行为(例如"我把错误路径改为抛出异常而不是返回None"),将其记录为已声明规格变更,并将该区域内的差异视为预期行为。仅将已声明变更范围之外的差异标记为发现。
步骤 2. 为每个版本构建独立前提(指南步骤 2)——分别对版本 A 和版本 B 应用前提构建清单。
步骤 3. 追踪两个版本的常规用例(指南步骤 3)——并行追踪,相同输入,记录首个差异(如果有)。
步骤 4. 追踪边界用例(指南步骤 4)——空值/null/零值、最大/最小值、错误输入、集合的首/末元素。最多追踪三个最高风险边界场景,除非用户要求穷举等价性或共享规格要求更多。
步骤 5. 识别并分类语义差异(指南步骤 5)——每个差异是一个发现,包含前提 → 追踪 → 差异 → 触发 → 修复,并附带 L-code。
步骤 6. 等价性判定(指南步骤 6)——以下之一:✅ 语义等价、⚠️ 条件等价(精确说明条件)、❌ 语义不等价。
步骤 7. 输出(指南步骤 7)——使用报告模板,判定头按 common.md §5;如果用户用中文书写则本地化标题。即使对极短的代码片段,格式也是强制性的:每个差异发现必须使用五个标记字段(前提 / 追踪 / 差异 / 触发 / 修复);绝不能用纯段落或表格替代。
报告中的模式行: Semantic Diff(中文:语义对比)。
限制
- 仅当任务明确匹配其上游来源和本地项目上下文时使用此技能。
- 在应用变更之前,验证命令、生成的代码、依赖项、凭证和外部服务行为。
- 不要将示例替代环境特定的测试、安全审查,或用户对破坏性/高成本操作的批准。