/** * Change Impact Engine — 语义化变更影响分析(变更影响基础层)。 * * 解决:文件级 hash 变化导致无意义全链 stale。给依赖传播加 ChangeType 权重—— * 同一条依赖边在"改契约"(真依赖)与"改错别字"(假依赖)下传播/不传播。 * * 设计原则:旁路新增,不替换既有 stale 四轴。 * - 不改 dependencyClosure/downstreamClosure/stale 四轴/evaluator(全部调用,不改) * - 本引擎在 stale 判定之上叠加语义过滤层(类比 scope 在 global 之上的双轨模式) * * 规则: * 1. 确定性 diff 优先:openapi_diff→contract / ddl_diff→schema / src_logic_diff→behavior / auth_scope_diff→security * 2. AI 声明只作输入,不能直接降级:声明减传播(metadata/documentation)但 diff 指向更严重 → 取 diff(不可降级) * 3. fallback 保守:无 diff 锚点用声明;security 全传播 */ import type { DomainName } from "./types.js"; import type { DomainContract } from "./types.js"; /** 变更类型。metadata/documentation=减传播;contract/behavior/schema=精确传播;security=保守全传播。 */ export type ChangeType = "metadata" | "documentation" | "contract" | "behavior" | "schema" | "security"; /** 确定性 diff 锚点类型(决定真实 ChangeType,非 AI 自填)。 */ export type ChangeDiffKind = "openapi_diff" | "ddl_diff" | "src_logic_diff" | "auth_scope_diff" | "prose_diff" | "unknown"; /** 变更证据引用(确定性 diff 锚点)。 */ export interface ChangeImpactEvidenceRef { kind: ChangeDiffKind; /** 引用:openapi 路径 / DDL 片段 / src 文件+commit / auth 路径 */ ref: string; detail?: string; } /** 变更产物(输入)。 */ export interface ChangedArtifact { domain: DomainName; kind: string; } /** 影响分析请求。 */ export interface ChangeImpactRequest { /** 变更的产物 */ changedArtifact: ChangedArtifact; /** AI 声明的变更类型(仅作输入,不能直接降级——diff 优先) */ changeType: ChangeType; /** 确定性 diff 锚点(可空:无锚点时用声明) */ evidenceRefs?: ChangeImpactEvidenceRef[]; } /** 变更上下文(运行时对象,非持久化 schema)——sf_verify 声明传 evaluator,作为 ImpactEngine 生产输入(Step7)。 * 与 ChangeImpactRequest 同结构;ImpactEngine.evaluate 直接接受。 */ export interface ChangeContext { changedArtifact: ChangedArtifact; changeType: ChangeType; evidenceRefs?: ChangeImpactEvidenceRef[]; } /** 受影响产物(输出)。 */ export interface AffectedArtifact { domain: DomainName; kind: string; } /** 影响分析结果。 */ export interface ChangeImpactResult { /** 最终生效的变更类型(可能 != 声明:diff 优先/不可降级) */ effectiveChangeType: ChangeType; /** AI 声明的变更类型 */ declaredChangeType: ChangeType; /** diff 推断的变更类型(无 diff 锚点时 undefined) */ diffInferredChangeType: ChangeType | undefined; /** 受影响产物(需重验/重审) */ affectedArtifacts: AffectedArtifact[]; /** 跳过产物(本次变更不影响,免重验) */ skippedArtifacts: AffectedArtifact[]; /** 判定理由(可审计) */ reason: string; } /** Change Impact Engine — 输入变更+类型+证据,输出精确受影响集。 */ export declare class ImpactEngine { private readonly projectRoot; private readonly contractsOverride?; constructor(projectRoot: string, contractsOverride?: DomainContract[] | undefined); /** 评估变更影响。deterministic diff 优先 → 不可降级 → downstreamClosure → 按 ChangeType 过滤。 */ evaluate(request: ChangeImpactRequest): Promise; }