/** * 派生注册表到验证 gate 的桥接。 * * 从派生注册表按 stage 聚合资产的 check,构造 GateDefinition。 * 替代 loadGatesForDomain 从 gate yaml 加载 check(check 现嵌资产 frontmatter)。 * gate 只按声明聚合检查,不承载任务推进语义。 * * 职责边界: * - 负责:从派生注册表按 stage 聚合资产的 check 构造 GateDefinition(buildGateFromRegistry)+ 内置/用户资产合并(getRegistry) * - 不负责:资产扫描(derived_registry.ts)、门禁评估执行(gate_engine.ts) * * 被谁调用:gate_engine.ts(buildGateFromRegistry)、claude_md.ts/workflow_template.ts/template_manifest_io.ts/verifier.ts/doctor 服务(getRegistry) * 调用谁:derived_registry.ts(scanDerivedRegistry)、derived_types(类型)、node:fs/node:path/node:os * * 数据流:ScanResult(内置+用户合并)→ 按 domain/slice/shared 聚合 check → GateDefinition[] * 持久化:无(内存态;内置 templates 扫描结果按进程缓存) */ import type { GateDefinition } from "./gate_engine_types.js"; import type { ScanResult } from "../domain/asset_registry/derived_types.js"; /** * 获取派生注册表:内置 templates(import.meta 定位包根,缓存)+ 用户资产合并。 * * 内置 templates 用 import.meta 定位包根,不依赖 projectRoot 或 CWD:客户项目验证时 * CWD=客户项目,resolve("templates") 会找客户项目/templates → ENOENT。 * * projectRoot 用于扫描用户目录(.soloforge/knowledge/ + ~/.soloforge/patterns/), * 用户 enforced 资产合并进注册表(内置优先,同 id 不覆盖),形成确定性硬下限; * guidance/knowledge 由 KnowledgeIndexManager + sf_knowledge query 消费,不在 gate 层解释。 */ export declare function getRegistry(projectRoot?: string): ScanResult | null; /** 测试用:清缓存 */ export declare function _clearRegistryCache(): void; /** 校验 check 自身字段不变量,返回配置问题描述列表(空=合规)。 * 守护 OPENAPI-LINT 那类"command 不映射静默失效"陷阱——加载时发现 check 配置错误,运行前预警。 * 纯函数(无副作用),供 toGateCheck 加载时调用 + 单测验证。运行时 evaluateCheck 仍 fail-closed 兜底。 */ /** 校验字段须 AssetCheck(加载映射前)与 GateCheck(加载后评估前)双兼容——取两者交集字段。 */ type CheckFieldInvariant = { executor?: string; command?: string; command_purpose?: string; requirement_dimension?: string; required_artifact?: string; audit_evidence?: boolean; block_check?: unknown; }; export declare function validateGateCheck(ck: CheckFieldInvariant): string[]; /** * 从派生注册表按 domain 聚合 check,构造 GateDefinition。 * * 聚合依据是 check 自身的 gate 字段(check.gate === `${domain}-gate`),而非宿主资产 * 的 stage。规则文件可被多个阶段引用,check.gate 才是执行归属;按 asset.stage 聚合会漏掉跨阶段规则。 * * 返回 [domain-gate, slice-gate?, shared-gate?]:domain gate 聚合该域 check;slice-gate 为切片级 * 通用门禁(gate_scope=slice);shared-gate 为跨阶段通用门禁(stage=shared)。 */ export declare function buildGateFromRegistry(domain: string, projectRoot?: string): GateDefinition[]; export {};