/** * stale 四轴纯函数():原从 提取,解耦 store 实例。 * * 4 个 stale 判定(产物 hash / 验证输入 / 规则集 / 引擎修订)原挂 类(consumer 实例化作纯方法载体)。 * 提取为纯函数:consumer 不需 实例(解耦,为读方迁 V2 + 退役前置)。 * * 行为与原 .isStale 等完全等价(纯逻辑,不读 store)。 * : (V1)已退役删除,deprecated wrapper 一并移除,本文件纯函数即权威实现。 * * 被谁调用:gate_stale_check.staleAxes / doctor checkGates / upgrade_reconcile / executors_prerequisite / V2 adapter * 调用谁:无(纯函数) */ import type { EvidenceView } from "../types.js"; /** * 产物 git hash 漂移(git revert 后产物变但 record hash 旧)。只有 passed 记录检查 stale(failed 本就重跑)。 * fail-closed:record 无 artifact_git_hash(旧记录缺内容锚)或当前 hash 不可计算(产物消失/不可读/git 降级失败) * → 当 stale(true)。原返 false(fail-open)依赖每调用方单独判 exists,散落易漏;对齐 isVerificationInputStale 的 fail-closed。 */ export declare function isArtifactStale(record: EvidenceView, currentGitHash: string): boolean; /** 完整验证输入漂移:上游/任务范围/项目配置/研讨/豁免任一变化都需重验。 */ export declare function isVerificationInputStale(record: EvidenceView, currentInputHash: string): boolean; /** 规则集漂移:record ruleset_hash ≠ 当前域规则集 hash(门禁规则变)。 */ export declare function isRulesetStale(record: EvidenceView, currentRulesetHash: string): boolean; /** * 引擎漂移判定(补 ruleset 盲区:改 executor/evaluateGate 逻辑但 ruleset_hash 不变)。 * - 新 evidence(record.engine_scope_revision 存在)且调用方提供 currentScopeRevision → 用 scope(按 scope 增量失效) * - 旧 evidence(无 scope 字段)或调用方未提供 scope current → fallback 全局 engine_revision * scope 优先:scope 不变即 fresh,即使 global 因其他 scope 专属文件变化而不同(增量失效语义)。 * 未提供 currentScopeRevision 的调用方(doctor/impact/prerequisite 等诊断/升级路径)退回 global,保持原行为。 */ export declare function isEngineStale(record: EvidenceView, currentEngineRevision: string, currentScopeRevision?: string): boolean; /** * 语义输入漂移(双轨,不替换 verification_input_stale):ImpactEngine 判定 artifact 受变更语义影响。 * - 有 semanticResult 且 artifact 在 skippedArtifacts → false(语义不受影响,免重验,减传播) * - 在 affectedArtifacts → true(语义受影响) * - 无 result / 都不含 → undefined(不判,fallback verification_input_stale) * AI 不可单独降低传播(ImpactEngine 不可降级规则在 change_impact_engine 保证)。 */ export declare function isSemanticInputStale(artifactKind: string, semanticResult?: { affectedArtifacts: ReadonlyArray<{ kind: string; }>; skippedArtifacts: ReadonlyArray<{ kind: string; }>; }): boolean | undefined; /** * done 冻结:origin task 已关账(done/cancelled)且产物内容未变(content 轴 fresh)→ engine 轴不判 stale。 * 交付即稳定——engine 升级(判定闭包代码演进)不应反复作废已关账任务的通过记录; * 产物内容真变了(content stale)仍照常全轴判(冻结只冻 engine 轴,不豁免内容漂移)。 * originTaskStatus 由调用方按 record.task_id 查任务状态;undefined(跨 task 继承未查/查失败)不冻结(fail-safe)。 */ export declare function engineAxisFrozen(originTaskStatus: string | undefined, contentStale: boolean): boolean;