# aionforge-memory - Doramagic AI Context Pack

> 定位：安装前体验与判断资产。它帮助宿主 AI 有一个好的开始，但不代表已经安装、执行或验证目标项目。

## 充分原则

- **充分原则，不是压缩原则**：AI Context Pack 应该充分到让宿主 AI 在开工前理解项目价值、能力边界、使用入口、风险和证据来源；它可以分层组织，但不以最短摘要为目标。
- **压缩策略**：只压缩噪声和重复内容，不压缩会影响判断和开工质量的上下文。

## 给宿主 AI 的使用方式

你正在读取 Doramagic 为 aionforge-memory 编译的 AI Context Pack。请把它当作开工前上下文：帮助用户理解适合谁、能做什么、如何开始、哪些必须安装后验证、风险在哪里。不要声称你已经安装、运行或执行了目标项目。

## Claim 消费规则

- **事实来源**：Repo Evidence + Claim/Evidence Graph；Human Wiki 只提供显著性、术语和叙事结构。
- **事实最低状态**：`supported`
- `supported`：可以作为项目事实使用，但回答中必须引用 claim_id 和证据路径。
- `weak`：只能作为低置信度线索，必须要求用户继续核实。
- `inferred`：只能用于风险提示或待确认问题，不能包装成项目事实。
- `unverified`：不得作为事实使用，应明确说证据不足。
- `contradicted`：必须展示冲突来源，不得替用户强行选择一个版本。

## 它最适合谁

- **正在使用 Claude/Codex/Cursor/Gemini 等宿主 AI 的开发者**：README 或插件配置提到多个宿主 AI。 证据：`README.md` Claim：`clm_0003` supported 0.86
- **希望把专业流程带进宿主 AI 的用户**：仓库包含 Skill 文档。 证据：`plugins/aionforge-memory/skills/memory-bootstrap/SKILL.md`, `plugins/aionforge-memory/skills/memory-capture/SKILL.md`, `plugins/aionforge-memory/skills/memory-loop/SKILL.md`, `plugins/aionforge-memory/skills/memory-maintenance/SKILL.md` 等 Claim：`clm_0004` supported 0.86

## 它能做什么

- **AI Skill / Agent 指令资产库**（可做安装前预览）：项目包含可被宿主 AI 读取的 Skill 或 Agent 指令文件，可用于把专业流程带入 Claude、Codex、Cursor 等宿主。 证据：`plugins/aionforge-memory/skills/memory-bootstrap/SKILL.md`, `plugins/aionforge-memory/skills/memory-capture/SKILL.md`, `plugins/aionforge-memory/skills/memory-loop/SKILL.md`, `plugins/aionforge-memory/skills/memory-maintenance/SKILL.md` 等 Claim：`clm_0001` supported 0.86
- **多宿主安装与分发**（需要安装后验证）：项目包含插件或 marketplace 配置，说明它面向一个或多个 AI 宿主的安装和分发。 证据：`.agents/plugins/marketplace.json`, `.claude-plugin/marketplace.json`, `.cursor-plugin/marketplace.json`, `plugins/aionforge-memory/.claude-plugin/plugin.json` 等 Claim：`clm_0002` supported 0.86

## 怎么开始

- 项目证据中没有稳定 Quick Start 命令；此项应留空，而不是由 Doramagic 编造。

## 继续前判断卡

- **当前建议**：仅建议沙盒试装
- **为什么**：项目存在安装命令、宿主配置或本地写入线索，不建议直接进入主力环境，应先在隔离环境试装。

### 30 秒判断

- **现在怎么做**：仅建议沙盒试装
- **最小安全下一步**：先跑 Prompt Preview；若仍要安装，只在隔离环境试装
- **先别相信**：真实输出质量不能在安装前相信。
- **继续会触碰**：宿主 AI 配置、本地环境或项目文件、宿主 AI 上下文

### 现在可以相信

- **适合人群线索：正在使用 Claude/Codex/Cursor/Gemini 等宿主 AI 的开发者**（supported）：有 supported claim 或项目证据支撑，但仍不等于真实安装效果。 证据：`README.md` Claim：`clm_0003` supported 0.86
- **适合人群线索：希望把专业流程带进宿主 AI 的用户**（supported）：有 supported claim 或项目证据支撑，但仍不等于真实安装效果。 证据：`plugins/aionforge-memory/skills/memory-bootstrap/SKILL.md`, `plugins/aionforge-memory/skills/memory-capture/SKILL.md`, `plugins/aionforge-memory/skills/memory-loop/SKILL.md`, `plugins/aionforge-memory/skills/memory-maintenance/SKILL.md` 等 Claim：`clm_0004` supported 0.86
- **能力存在：AI Skill / Agent 指令资产库**（supported）：可以相信项目包含这类能力线索；是否适合你的具体任务仍要试用或安装后验证。 证据：`plugins/aionforge-memory/skills/memory-bootstrap/SKILL.md`, `plugins/aionforge-memory/skills/memory-capture/SKILL.md`, `plugins/aionforge-memory/skills/memory-loop/SKILL.md`, `plugins/aionforge-memory/skills/memory-maintenance/SKILL.md` 等 Claim：`clm_0001` supported 0.86
- **能力存在：多宿主安装与分发**（supported）：可以相信项目包含这类能力线索；是否适合你的具体任务仍要试用或安装后验证。 证据：`.agents/plugins/marketplace.json`, `.claude-plugin/marketplace.json`, `.cursor-plugin/marketplace.json`, `plugins/aionforge-memory/.claude-plugin/plugin.json` 等 Claim：`clm_0002` supported 0.86

### 现在还不能相信

- **真实输出质量不能在安装前相信。**（unverified）：Prompt Preview 只能展示引导方式，不能证明真实项目中的结果质量。
- **宿主 AI 版本兼容性不能在安装前相信。**（unverified）：Claude、Cursor、Codex、Gemini 等宿主加载规则和版本差异必须在真实环境验证。
- **不会污染现有宿主 AI 行为，不能直接相信。**（inferred）：Skill、plugin、AGENTS/CLAUDE/GEMINI 指令可能改变宿主 AI 的默认行为。 证据：`.agents/plugins/marketplace.json`, `.claude-plugin/marketplace.json`, `.cursor-plugin/marketplace.json`, `AGENTS.md` 等
- **可安全回滚不能默认相信。**（unverified）：除非项目明确提供卸载和恢复说明，否则必须先在隔离环境验证。
- **真实安装后是否与用户当前宿主 AI 版本兼容？**（unverified）：兼容性只能通过实际宿主环境验证。 证据：`.agents/plugins/marketplace.json`, `.claude-plugin/marketplace.json`, `.cursor-plugin/marketplace.json`, `plugins/aionforge-memory/.claude-plugin/plugin.json` 等
- **项目输出质量是否满足用户具体任务？**（unverified）：安装前预览只能展示流程和边界，不能替代真实评测。

### 继续会触碰什么

- **宿主 AI 配置**：Claude/Codex/Cursor/Gemini/OpenCode 等宿主的 plugin、Skill 或规则加载配置。 原因：宿主配置会改变 AI 后续工作方式，可能和用户已有规则冲突。 证据：`.agents/plugins/marketplace.json`, `.claude-plugin/marketplace.json`, `.cursor-plugin/marketplace.json`, `AGENTS.md` 等
- **本地环境或项目文件**：安装结果、插件缓存、项目配置或本地依赖目录。 原因：安装前无法证明写入范围和回滚方式，需要隔离验证。 证据：`.agents/plugins/marketplace.json`, `.claude-plugin/marketplace.json`, `.cursor-plugin/marketplace.json`, `plugins/aionforge-memory/.claude-plugin/plugin.json` 等
- **宿主 AI 上下文**：AI Context Pack、Prompt Preview、Skill 路由、风险规则和项目事实。 原因：导入上下文会影响宿主 AI 后续判断，必须避免把未验证项包装成事实。

### 最小安全下一步

- **先跑 Prompt Preview**：用安装前交互式试用判断工作方式是否匹配，不需要授权或改环境。（适用：任何项目都适用，尤其是输出质量未知时。）
- **只在隔离目录或测试账号试装**：避免安装命令污染主力宿主 AI、真实项目或用户主目录。（适用：存在命令执行、插件配置或本地写入线索时。）
- **先备份宿主 AI 配置**：Skill、plugin、规则文件可能改变 Claude/Cursor/Codex 的默认行为。（适用：存在插件 manifest、Skill 或宿主规则入口时。）
- **安装后只验证一个最小任务**：先验证加载、兼容、输出质量和回滚，再决定是否深用。（适用：准备从试用进入真实工作流时。）

### 退出方式

- **保留安装前状态**：记录原始宿主配置和项目状态，后续才能判断是否可恢复。
- **准备移除宿主 plugin / Skill / 规则入口**：如果试装后行为异常，可以把宿主 AI 恢复到试装前状态。
- **记录安装命令和写入路径**：没有明确卸载说明时，至少要知道哪些目录或配置需要手动清理。
- **如果没有回滚路径，不进入主力环境**：不可回滚是继续前阻断项，不应靠信任或运气继续。

## 哪些只能预览

- 解释项目适合谁和能做什么
- 基于项目文档演示典型对话流程
- 帮助用户判断是否值得安装或继续研究

## 哪些必须安装后验证

- 真实安装 Skill、插件或 CLI
- 执行脚本、修改本地文件或访问外部服务
- 验证真实输出质量、性能和兼容性

## 边界与风险判断卡

- **把安装前预览误认为真实运行**：用户可能高估项目已经完成的配置、权限和兼容性验证。 处理方式：明确区分 prompt_preview_can_do 与 runtime_required。 Claim：`clm_0005` inferred 0.45
- **宿主 AI 插件或 Skill 规则冲突**：新规则可能改变用户现有宿主 AI 的工作方式。 处理方式：安装前先检查插件 manifest 和 Skill 文件，必要时隔离测试。 证据：`.agents/plugins/marketplace.json`, `.claude-plugin/marketplace.json`, `.cursor-plugin/marketplace.json`, `plugins/aionforge-memory/.claude-plugin/plugin.json` 等 Claim：`clm_0006` supported 0.86
- **待确认**：真实安装后是否与用户当前宿主 AI 版本兼容？。原因：兼容性只能通过实际宿主环境验证。
- **待确认**：项目输出质量是否满足用户具体任务？。原因：安装前预览只能展示流程和边界，不能替代真实评测。

## 开工前工作上下文

### 加载顺序

- 先读取 how_to_use.host_ai_instruction，建立安装前判断资产的边界。
- 读取 claim_graph_summary，确认事实来自 Claim/Evidence Graph，而不是 Human Wiki 叙事。
- 再读取 intended_users、capabilities 和 quick_start_candidates，判断用户是否匹配。
- 需要执行具体任务时，优先查 role_skill_index，再查 evidence_index。
- 遇到真实安装、文件修改、网络访问、性能或兼容性问题时，转入 risk_card 和 boundaries.runtime_required。

### 任务路由

- **AI Skill / Agent 指令资产库**：先基于 role_skill_index / evidence_index 帮用户挑选可用角色、Skill 或工作流。 边界：可做安装前 Prompt 体验。 证据：`plugins/aionforge-memory/skills/memory-bootstrap/SKILL.md`, `plugins/aionforge-memory/skills/memory-capture/SKILL.md`, `plugins/aionforge-memory/skills/memory-loop/SKILL.md`, `plugins/aionforge-memory/skills/memory-maintenance/SKILL.md` 等 Claim：`clm_0001` supported 0.86
- **多宿主安装与分发**：先说明这是安装后验证能力，再给出安装前检查清单。 边界：必须真实安装或运行后验证。 证据：`.agents/plugins/marketplace.json`, `.claude-plugin/marketplace.json`, `.cursor-plugin/marketplace.json`, `plugins/aionforge-memory/.claude-plugin/plugin.json` 等 Claim：`clm_0002` supported 0.86

### 上下文规模

- 文件总数：522
- 重要文件覆盖：40/522
- 证据索引条目：80
- 角色 / Skill 条目：6

### 证据不足时的处理

- **missing_evidence**：说明证据不足，要求用户提供目标文件、README 段落或安装后验证记录；不要补全事实。
- **out_of_scope_request**：说明该任务超出当前 AI Context Pack 证据范围，并建议用户先查看 Human Manual 或真实安装后验证。
- **runtime_request**：给出安装前检查清单和命令来源，但不要替用户执行命令或声称已执行。
- **source_conflict**：同时展示冲突来源，标记为待核实，不要强行选择一个版本。

## Prompt Recipes

### 适配判断

- 目标：判断这个项目是否适合用户当前任务。
- 预期输出：适配结论、关键理由、证据引用、安装前可预览内容、必须安装后验证内容、下一步建议。

```text
请基于 aionforge-memory 的 AI Context Pack，先问我 3 个必要问题，然后判断它是否适合我的任务。回答必须包含：适合谁、能做什么、不能做什么、是否值得安装、证据来自哪里。所有项目事实必须引用 evidence_refs、source_paths 或 claim_id。
```

### 安装前体验

- 目标：让用户在安装前感受核心工作流，同时避免把预览包装成真实能力或营销承诺。
- 预期输出：一段带边界标签的体验剧本、安装后验证清单和谨慎建议；不含真实运行承诺或强营销表述。

```text
请把 aionforge-memory 当作安装前体验资产，而不是已安装工具或真实运行环境。

请严格输出四段：
1. 先问我 3 个必要问题。
2. 给出一段“体验剧本”：用 [安装前可预览]、[必须安装后验证]、[证据不足] 三种标签展示它可能如何引导工作流。
3. 给出安装后验证清单：列出哪些能力只有真实安装、真实宿主加载、真实项目运行后才能确认。
4. 给出谨慎建议：只能说“值得继续研究/试装”“先补充信息后再判断”或“不建议继续”，不得替项目背书。

硬性边界：
- 不要声称已经安装、运行、执行测试、修改文件或产生真实结果。
- 不要写“自动适配”“确保通过”“完美适配”“强烈建议安装”等承诺性表达。
- 如果描述安装后的工作方式，必须使用“如果安装成功且宿主正确加载 Skill，它可能会……”这种条件句。
- 体验剧本只能写成“示例台词/假设流程”：使用“可能会询问/可能会建议/可能会展示”，不要写“已写入、已生成、已通过、正在运行、正在生成”。
- Prompt Preview 不负责给安装命令；如用户准备试装，只能提示先阅读 Quick Start 和 Risk Card，并在隔离环境验证。
- 所有项目事实必须来自 supported claim、evidence_refs 或 source_paths；inferred/unverified 只能作风险或待确认项。

```

### 角色 / Skill 选择

- 目标：从项目里的角色或 Skill 中挑选最匹配的资产。
- 预期输出：候选角色或 Skill 列表，每项包含适用场景、证据路径、风险边界和是否需要安装后验证。

```text
请读取 role_skill_index，根据我的目标任务推荐 3-5 个最相关的角色或 Skill。每个推荐都要说明适用场景、可能输出、风险边界和 evidence_refs。
```

### 风险预检

- 目标：安装或引入前识别环境、权限、规则冲突和质量风险。
- 预期输出：环境、权限、依赖、许可、宿主冲突、质量风险和未知项的检查清单。

```text
请基于 risk_card、boundaries 和 quick_start_candidates，给我一份安装前风险预检清单。不要替我执行命令，只说明我应该检查什么、为什么检查、失败会有什么影响。
```

### 宿主 AI 开工指令

- 目标：把项目上下文转成一次对话开始前的宿主 AI 指令。
- 预期输出：一段边界明确、证据引用明确、适合复制给宿主 AI 的开工前指令。

```text
请基于 aionforge-memory 的 AI Context Pack，生成一段我可以粘贴给宿主 AI 的开工前指令。这段指令必须遵守 not_runtime=true，不能声称项目已经安装、运行或产生真实结果。
```

## 角色 / Skill 索引

- 共索引 6 个角色 / Skill / 项目文档条目。

- **memory-bootstrap**（skill）：One-time setup that lays a foundational Aionforge Memory substrate for a fresh project — resolve identity, seed conventions and architecture decisions as captures, stand up a work-item backlog skeleton, and verify recall. Use when a project's memory is empty or new, or when the user asks to set up, bootstrap, initialize, or seed project memory. 激活提示：当用户任务与“memory-bootstrap”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`plugins/aionforge-memory/skills/memory-bootstrap/SKILL.md`
- **memory-capture**（skill）：Capture durable Aionforge Memory records for decisions, user preferences, project facts, release outcomes, validation results, handoffs, corrections, and reusable failure patterns. Use proactively during substantial work and whenever the user asks to remember or update memory. 激活提示：当用户任务与“memory-capture”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`plugins/aionforge-memory/skills/memory-capture/SKILL.md`
- **memory-loop**（skill）：Use Aionforge Memory as the working substrate for a multi-step task. Trigger for implementation, debugging, review, release, planning, incidents, handoffs, or any session where prior context and durable follow-up matter. 激活提示：当用户任务与“memory-loop”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`plugins/aionforge-memory/skills/memory-loop/SKILL.md`
- **memory-maintenance**（skill）：Inspect, consolidate, audit, forget, or restore Aionforge Memory. Use when the user asks about memory health, backlog, provenance, stale records, corrections, deletion, restoration, or why a memory was recalled. 激活提示：当用户任务与“memory-maintenance”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`plugins/aionforge-memory/skills/memory-maintenance/SKILL.md`
- **memory-recall**（skill）：Search Aionforge Memory before planning, answering, coding, review, debugging, release, or continuation work. Use proactively whenever prior decisions, user preferences, project facts, failures, or handoffs could change the answer. 激活提示：当用户任务与“memory-recall”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`plugins/aionforge-memory/skills/memory-recall/SKILL.md`
- **work-tracking**（skill）：Track tasks, blockers, TODOs, plans, and follow-ups as durable Aionforge Memory work items. Use proactively when a multi-step task, backlog, plan, or handoff appears, and whenever the user mentions tasks, status, or what is left to do. Work items are persistent and status-tracked, distinct from decaying memory episodes. 激活提示：当用户任务与“work-tracking”描述的流程高度相关时，先用它做安装前体验，再决定是否安装。 证据：`plugins/aionforge-memory/skills/work-tracking/SKILL.md`

## 证据索引

- 共索引 80 条证据。

- **Documentation**（documentation）：System documentation for Aionforge Memory — how the pieces work and how to use them. This is reference and guides, not planning or changelogs. 证据：`docs/README.md`
- **Quick Start**（documentation）：Long-term memory for AI agents, built on selene-db. 证据：`README.md`
- **Third-party data licenses**（documentation）：Full license texts and attribution for the third-party datasets vendored as test fixtures in this repository. The data itself and its curation/provenance record live next to the test that uses it: crates/aionforge-security/tests/corpus/ see that directory's PROVENANCE.md . 证据：`third-party-data/README.md`
- **aionforge-eval tools**（documentation）：On-demand tooling for the retrieval-quality eval harness. These are dev tools, not part of any shipped artifact and not run in CI. 证据：`crates/aionforge-eval/tools/README.md`
- **Aionforge Memory Plugin**（documentation）：This plugin packages six small Agent Skills for an existing Aionforge Memory MCP server: 证据：`plugins/aionforge-memory/README.md`
- **Agent Guide for Aionforge Memory**（documentation）：Aionforge Memory is a Rust long-term memory layer for AI agents. It stores episodes, facts, notes, skills, bad patterns, core memory, and audit events in selene-db , then retrieves relevant context with lexical anchors, vector search, graph traversal, recency, importance, and trust signals. 证据：`AGENTS.md`
- **Attestation and quorum promotion**（documentation）：A memory written in one team's namespace stays there until other agents vouch for it. Quorum promotion is the one path a team fact takes to the shared global namespace, and it is gated: a fact promotes only after enough independent agents sign an attestation for it and the substrate's confidence in it clears a threshold. Demotion is the reverse, and it never destroys the original. 证据：`docs/attestation-and-promotion.md`
- **Capture**（documentation）：Capture is the write path. When an agent produces a turn — a user message, an assistant reply, a tool result — capture is what turns that raw text into a stored episode. It runs on the hot path, in millisecond time, and it is deliberately thin: it filters the content, decides whether the turn is worth keeping, attaches just enough provenance to prove who wrote it, and commits. Everything that takes real thought — clustering, summarizing, recomputing importance, drawing links — is left to consolidation consolidation.md , which runs behind the path and never blocks it. 证据：`docs/capture.md`
- **Consolidation**（documentation）：Consolidation is the slow, asynchronous side of memory. Capture writes a raw episode and returns; some time later, a background worker reads that episode and derives the durable knowledge from it — the facts, the entities, the contradictions, the summaries. The two halves are deliberately split. Capture stays on a fast, narrow path; the expensive thinking happens off to the side, on its own schedule, where it can take its time and recover from a crash without ever holding up a write. 证据：`docs/consolidation.md`
- **Core memory**（documentation）：Core blocks are the identity tier: the agent's stable self-description persona , its standing promises commitment , and its inviolable constraints redline . They are the most strongly protected memories in the substrate, because they are the ones an attacker — or a slowly drifting agent — would most like to rewrite. 证据：`docs/core-memory.md`
- **Cross-family consolidation guard**（documentation）：How the substrate keeps a consolidating model from condensing its own family's writing 07 §3, M6.T01 . Behavioral traits transmit through model-mediated condensation when the model doing the condensing shares a base model with the writers whose content it reads — mixing unrelated data reduces the effect but does not eliminate it, and a cross-family condenser suppresses it. So any consolidation rule that calls inference must verify before each model call that the consolidating family differs from the writers' families. The guard is substrate policy over the inference seam: today it protects the link-evolution path Memory::evolve links , which is generic over the LinkEvolver seam, and it rema… 证据：`docs/cross-family-guard.md`
- **Aionforge Memory data model**（documentation）：Public reference for how Aionforge Memory stores, derives, recalls, and removes memory. 证据：`docs/data-model.md`
- **Getting started**（documentation）：This guide is the shortest path from a fresh checkout to a local Aionforge Memory process that a Rust host or MCP client can use. For subsystem details, follow the links in the docs index README.md . 证据：`docs/getting-started.md`
- **Honest scope and deferred work**（documentation）：Aionforge Memory is an exemplar-based memory substrate. It stores episodes, facts, notes, skills, bad patterns, identity blocks, and audit events; retrieves them with native lexical, vector, graph, temporal, trust, and recency signals; and renders recall as untrusted data for a host model. It is not a training system, not a fine-tuning loop, and not an autonomous model router. 证据：`docs/honest-scope.md`
- **Namespace authorization**（documentation）：Every memory lives in a namespace, and every write is checked against who is making it. A capturing agent can only write where it is allowed to, and an attempt to write somewhere it isn't is refused and recorded. This is the boundary that keeps one agent's private memory private and keeps shared spaces from being written behind the host's back. 证据：`docs/namespace-authorization.md`
- **Procedural memory**（documentation）：Procedural memory is where an agent keeps the procedures that worked — skills — so it can reuse them instead of working a solved problem out from scratch every time. A skill is stored as data, never executed by the substrate; the agent that retrieves it decides whether and how to run it. 证据：`docs/procedural-memory.md`
- **Provenance signing**（documentation）：Every captured memory records who wrote it. Signed writes make that record provable: the writer signs each capture with its own key, and the substrate verifies the signature against the key it has on file before any memory is written. A write whose signature doesn't check out, or whose timestamp is too far off, is refused and recorded — it never becomes memory. 证据：`docs/provenance-signing.md`
- **Retrieval**（documentation）：Retrieval is how a recall turns a query into a ranked set of memories. It runs BM25 lexical search, a factual lexical anchor, dense vector search, graph-aware search, and quality re-ranks over the same graph engine. The query routes to a profile that decides how hard each signal pulls, then the retriever fuses the ranked lists by rank and hands back a bundle that is the same every time the graph state is. Everything here goes through selene-db. There is no second search engine, no external vector store, and no index the substrate keeps on the side — the BM25 text indexes, the cosine vector indexes, and the maintained candidate-state sets all live in the one engine, and retrieval composes na… 证据：`docs/retrieval.md`
- **Security model**（documentation）：Aionforge Memory treats memory as untrusted, multi-tenant state. The core security posture is fail-closed writes, principal-scoped reads, signed provenance when enabled, and prompt-injection-safe recall rendering. 证据：`docs/security-model.md`
- **Trust scoring**（documentation）：The substrate keeps a running sense of how reliable each agent has been, and lets that sense shape what later recalls surface and what can be promoted. An agent that produces facts which hold up earns trust; one whose facts are contradicted, or whose attestations are later invalidated, loses it. That score is not a number someone sets by hand — it is folded from a record of what actually happened. 证据：`docs/trust-model.md`
- **Contributing to Aionforge Memory**（documentation）：Thanks for helping build a long-term memory layer for AI agents. This guide is the human onramp; AGENTS.md AGENTS.md is the authoritative reference for the crate layering, core invariants, and exact gate commands. When the two could drift, AGENTS.md wins — this file links to it rather than restating it. 证据：`CONTRIBUTING.md`
- **Memory Bootstrap**（skill_instruction）：Requires an enabled Aionforge Memory MCP server. 证据：`plugins/aionforge-memory/skills/memory-bootstrap/SKILL.md`
- **Memory Capture**（skill_instruction）：Requires an enabled Aionforge Memory MCP server. 证据：`plugins/aionforge-memory/skills/memory-capture/SKILL.md`
- **Memory Loop**（skill_instruction）：Requires an enabled Aionforge Memory MCP server. 证据：`plugins/aionforge-memory/skills/memory-loop/SKILL.md`
- **Memory Maintenance**（skill_instruction）：Requires an enabled Aionforge Memory MCP server. 证据：`plugins/aionforge-memory/skills/memory-maintenance/SKILL.md`
- **Memory Recall**（skill_instruction）：Requires an enabled Aionforge Memory MCP server. 证据：`plugins/aionforge-memory/skills/memory-recall/SKILL.md`
- **Work Tracking**（skill_instruction）：Requires an enabled Aionforge Memory MCP server. 证据：`plugins/aionforge-memory/skills/work-tracking/SKILL.md`
- **Marketplace**（structured_config）：{ "name": "aionforge-plugins", "owner": { "name": "Aionforge Labs", "url": "https://github.com/jscott3201" }, "metadata": { "description": "Aionforge agent plugins." }, "plugins": { "name": "aionforge-memory", "source": "./plugins/aionforge-memory", "description": "Agent skills for using an externally configured Aionforge Memory MCP server as durable project memory.", "version": "0.3.0", "author": { "name": "Aionforge Labs" }, "homepage": "https://github.com/jscott3201/aionforge-memory/tree/development/plugins/aionforge-memory", "repository": "https://github.com/jscott3201/aionforge-memory", "license": "MIT OR Apache-2.0", "keywords": "memory", "mcp", "agent-skills", "retrieval" , "category… 证据：`.claude-plugin/marketplace.json`
- **Marketplace**（structured_config）：{ "name": "aionforge-plugins", "owner": { "name": "Aionforge Labs" }, "metadata": { "description": "Aionforge agent plugins." }, "plugins": { "name": "aionforge-memory", "source": "plugins/aionforge-memory", "description": "Agent skills for using an externally configured Aionforge Memory MCP server as durable project memory.", "version": "0.3.0", "author": { "name": "Aionforge Labs" }, "homepage": "https://github.com/jscott3201/aionforge-memory/tree/development/plugins/aionforge-memory", "repository": "https://github.com/jscott3201/aionforge-memory", "license": "MIT OR Apache-2.0", "keywords": "memory", "mcp", "agent-skills", "retrieval" , "category": "Productivity", "skills": "skills/" } } 证据：`.cursor-plugin/marketplace.json`
- **Marketplace**（structured_config）：{ "name": "aionforge-plugins", "interface": { "displayName": "Aionforge Plugins" }, "plugins": { "name": "aionforge-memory", "source": { "source": "local", "path": "./plugins/aionforge-memory" }, "policy": { "installation": "AVAILABLE", "authentication": "ON INSTALL" }, "category": "Productivity" } } 证据：`.agents/plugins/marketplace.json`
- **Plugin**（structured_config）：{ "name": "aionforge-memory", "displayName": "Aionforge Memory", "version": "0.3.0", "description": "Agent skills for using an externally configured Aionforge Memory MCP server as durable project memory.", "author": { "name": "Aionforge Labs", "url": "https://github.com/jscott3201" }, "homepage": "https://github.com/jscott3201/aionforge-memory/tree/development/plugins/aionforge-memory", "repository": "https://github.com/jscott3201/aionforge-memory", "license": "MIT OR Apache-2.0", "keywords": "memory", "mcp", "agent-skills", "retrieval" , "skills": "./skills/" } 证据：`plugins/aionforge-memory/.claude-plugin/plugin.json`
- **Plugin**（structured_config）：{ "name": "aionforge-memory", "version": "0.3.0+codex.20260618154505", "description": "Agent skills for using an externally configured Aionforge Memory MCP server as durable project memory.", "author": { "name": "Aionforge Labs", "url": "https://github.com/jscott3201" }, "homepage": "https://github.com/jscott3201/aionforge-memory/tree/development/plugins/aionforge-memory", "repository": "https://github.com/jscott3201/aionforge-memory", "license": "MIT OR Apache-2.0", "keywords": "memory", "mcp", "agent-skills", "retrieval" , "skills": "./skills/", "interface": { "displayName": "Aionforge Memory", "shortDescription": "Durable memory workflows for agent sessions", "longDescription": "Use Aion… 证据：`plugins/aionforge-memory/.codex-plugin/plugin.json`
- **Plugin**（structured_config）：{ "name": "aionforge-memory", "version": "0.3.0", "description": "Agent skills for using an externally configured Aionforge Memory MCP server as durable project memory.", "author": { "name": "Aionforge Labs" }, "homepage": "https://github.com/jscott3201/aionforge-memory/tree/development/plugins/aionforge-memory", "repository": "https://github.com/jscott3201/aionforge-memory", "license": "MIT OR Apache-2.0", "keywords": "memory", "mcp", "agent-skills", "retrieval" , "skills": "./skills/", "rules": "./rules/" } 证据：`plugins/aionforge-memory/.cursor-plugin/plugin.json`
- **Plugin**（structured_config）：{ "name": "aionforge-memory", "description": "Agent skills for using an externally configured Aionforge Memory MCP server as durable project memory.", "version": "0.3.0", "author": { "name": "Aionforge Labs", "url": "https://github.com/jscott3201" }, "homepage": "https://github.com/jscott3201/aionforge-memory/tree/development/plugins/aionforge-memory", "repository": "https://github.com/jscott3201/aionforge-memory", "license": "MIT OR Apache-2.0", "keywords": "memory", "mcp", "agent-skills", "retrieval" , "skills": "skills/" } 证据：`plugins/aionforge-memory/plugin.json`
- **Agent nudges across editors**（documentation）：The Aionforge Memory plugin keeps memory in the task loop — recall before substantial work, capture durable facts as they land, and track tasks as work items. How that nudge is delivered depends on the editor: 证据：`docs/agent-nudges.md`
- **Apple container**（documentation）：Apple's container runtime can run the OCI image published for Aionforge Memory. It is a local macOS path for Apple silicon machines; release publishing still uses GHCR and the existing Docker/buildx workflow. 证据：`docs/apple-container.md`
- **The audit subgraph**（documentation）：Every governance operation the substrate performs — promotions, demotions, attestations, reliability updates, consolidation decisions, refused writes — leaves an AuditEvent row. Together those rows are the audit subgraph: the forensic record of what the system did and why, queryable by subject, by kind, and in time order. 证据：`docs/audit-subgraph.md`
- **The bi-temporal model**（documentation）：Every fact in Aionforge Memory carries two independent clocks. One records when the thing was true in the world; the other records when the substrate came to believe it. Keeping the two apart is what lets a recall answer "what is true now," "what was true last March," and "what did we think we knew on the day we acted" without any of those questions stepping on the others. 证据：`docs/bi-temporal-model.md`
- **Concurrent merge**（documentation）：When several agents write to the same shared memory, their writes have to come together into one consistent state. Aionforge does this without a separate replication engine: every write lands in one serialized graph, and the consolidation pass decides how concurrent assertions about the same thing resolve. The rule that governs that resolution is built so the outcome does not depend on the order the writes happened to be processed in. 证据：`docs/concurrent-merge.md`
- **The merge model CRDTs**（documentation）：When several agents write to one shared memory, the writes have to settle into a single consistent state, and they have to settle the same way no matter what order they were processed in. The literature for that problem is conflict-free replicated data types CRDTs : data types whose merge is commutative, associative, and idempotent, so replicas that have seen the same set of updates agree regardless of delivery order. 证据：`docs/crdt-model.md`
- **Decay and importance scoring**（documentation）：How a memory's relevance ages 05 §2, M5.T01 . A memory is written with an importance score; that score is the anchor, not the living value. At read time the substrate computes an effective importance — the stored score sunk by elapsed time under a per-tier exponential half-life — and ranks with it. Relevance in recall is three-factor: what the query matches the lexical/dense/graph search signals , how important the memory is now the importance re-rank , and how recently it entered the record the recency re-rank . 证据：`docs/decay-and-importance.md`
- **Drift detection**（documentation）：How the substrate notices the agent moving away from who it said it is 05 §1, M5.T05 . Each core block — persona, commitment, redline — carries an attested baseline : a snapshot of the block's embedding and the namespace's behavior centroid, co-signed through the same second-attester edit gate that protects the block content. A periodic detector measures how much farther current behavior sits from each block's anchor than it did at baseline time, warns through the audit log when a block crosses the threshold, and never blocks a write. The companion control is the cooling window : a new fact landing close to a high-trust core block is admitted but rank-sunk for a bounded window, buying the d… 证据：`docs/drift.md`
- **Embedding and provider guide**（documentation）：Aionforge stores and retrieves embeddings, but it does not run an embedding model itself. A deployment points the host at one provider/model pair and records that model identity on stored vectors so the rest of the substrate can verify dimensions, provenance, and cross-family boundaries. 证据：`docs/embedding-guide.md`
- **Erasure**（documentation）：How the substrate destroys 05 §3, M5.T03 . Erasure is the one destructive path in the system: a hard purge that removes nodes, severs their edges, and clears every index entry, audited and irreversible. Everything else that retires a memory — forgetting, supersession, quarantine, demotion — keeps the record; erasure is what you reach for when the record itself must go. It is off by default behind its own switch, requires a principal, and refuses whole rather than ever purging part of a cascade. 证据：`docs/erasure.md`
- **Active forgetting**（documentation）：How the substrate lets go 05 §2, M5.T02 . Forgetting is a soft expiry : one node-level expired at , set with the status and every edge untouched, audited, and reversible until the retention prune physically removes the record. It is off by default, conservative by construction — every check can only spare a memory, never doom one on its own — and strictly a default-recall notion: a forgotten memory leaves every default read but stays in the record for history and audit. 证据：`docs/forgetting.md`
- **Graph signals**（documentation）：Two of Aionforge Memory's retrieval signals come from the graph rather than from a text or vector index alone. Both turn the associative structure between memories into recall: the entities a query names, the facts about them, and the evidence that supports those facts. They exist for one reason — to recover the memory a single-hop search misses without dragging down the precision a single-hop search is good at. Both run natively in selene-db, so the graph is walked where it lives instead of pulled into Rust and traversed there. 证据：`docs/graph-signals.md`
- **Identifiers**（documentation）：Every node Aionforge stores — an episode, a fact, a note, a skill, an audit event — carries a stable id . An id is a UUID , stored as selene-db's native 16-byte UUID value not a string , so it indexes and compares as a UUID at the storage layer. 证据：`docs/identifiers.md`
- **Note link evolution**（documentation）：Link evolution is the deterministic, off-cursor layer that draws and revises relationships between notes — RELATES TO edges like subsumes , contradicts , or elaborates . It runs against already-committed notes and is built so that running it cannot move the reproducible parts of the system. 证据：`docs/link-evolution.md`
- **MCP client support**（documentation）：Aionforge Memory exposes MCP Tools, Resources, and Prompts over stdio and over the MCP Streamable HTTP transport. The HTTP service is intended to be mounted at /mcp and bound to loopback by default. HTTP auth is default-off: keep that local unless built-in HTTP OAuth validation is enabled or an OAuth-aware verifier/equivalent perimeter protects the endpoint. 证据：`docs/mcp-clients.md`
- **Observability**（documentation）：Aionforge emits spans/events through the tracing https://docs.rs/tracing facade and metrics through the metrics facade. The aionforge binary installs a tracing subscriber see Logging logging below , so events reach stderr out of the box; the metrics facade stays a no-op until a host installs a recorder a deliberate follow-up . Metric labels and span fields are deliberately low-cardinality: no query text, memory content, namespace ids, agent ids, file paths, request ids, or model names are used. Use audit reads and aionforge doctor --json for high-detail inspection. 证据：`docs/observability.md`
- **Operations and recovery**（documentation）：This guide covers the operator-facing binary path: how a host loads config, starts the MCP server, and validates a durable store after a restart or incident. 证据：`docs/operations-recovery.md`
- **Agent Plugin**（documentation）：Aionforge Memory ships a plugin package at plugins/aionforge-memory ../plugins/aionforge-memory . It bundles six Agent Skills plus a Claude Code steward agent, commands, and a SessionStart nudge hook. 证据：`docs/plugins.md`
- **Red-team suite**（documentation）：The red-team suite is the security acceptance gate for the memory substrate. It is ordinary Rust test code, so a failing probe fails CI, and each probe produces a structured report instead of a free-form log line. The report shape lives in aionforge-redteam and records the task, probe name, full denominator, observed attack successes, naive-baseline successes, the binding ceiling, rates, and the pass/fail status for attack-rate probes. Effect-size probes use the same crate and record treatment/baseline denominators, hit rates, rate-difference effect size, the pre-registered threshold, and which side of that threshold is passing. Audit-coverage probes record the full attempt denominator, the… 证据：`docs/red-team.md`
- **syntax=docker/dockerfile:1.7**（source_file）：The release linux binaries are dynamically linked against glibc built on the Debian-based rust image , so the runtime base must be glibc too: a glibc binary cannot exec under Alpine's musl loader it fails with "not found" on the missing /lib/ld-linux interpreter . FROM debian:bookworm-slim AS runtime 证据：`Dockerfile.release`
- **Production-oriented Aionforge Memory config template.**（source_file）：Production-oriented Aionforge Memory config template. Replace paths, model ids, endpoints, and environment variable names for your deployment. Do not put secret values in this file. 证据：`examples/production.toml`
- **Lib**（source_file）：mod discovery; mod error; mod fetch; mod jwks; mod validate; mod validator; ⋮---- pub use error::AuthError; pub use validate::VerifiedClaims; pub use validator::JwtValidator; 证据：`crates/aionforge-auth/src/lib.rs`
- **Lib**（source_file）：mod capturer; mod config; mod error; mod receipt; mod request; ⋮---- pub use aionforge domain::gate::ProvenanceGate; pub use capturer::Capturer; pub use config::CaptureConfig; pub use error::CaptureError; 证据：`crates/aionforge-capture/src/lib.rs`
- **Serve**（source_file）：use std::convert::Infallible; use std::net::SocketAddr; use std::sync::Arc; ⋮---- use axum::Router; use axum::body::Body; use axum::extract::State; use axum::http::header::AUTHORIZATION; ⋮---- use bytes::Bytes; ⋮---- use tokio::net::TcpListener; ⋮---- use crate::error::CliError; ⋮---- type HttpResponse = Response ; ⋮---- pub crate async fn run options: &HostOptions, args: ServeArgs - Result { let config = load config options ?; let memory = open memory &config ?; let consolidation handle = start background consolidation &memory, &config ; ⋮---- resolve heartbeat interval std::env::var TRAFFIC HEARTBEAT ENV .ok .as deref ; let heartbeat task = !heartbeat.is zero .then tokio::spawn aionforge… 证据：`crates/aionforge-cli/src/serve.rs`
- **Lib**（source_file）：mod auth; mod config; mod consolidation; mod core block; mod deployment; mod drift; mod error; mod forgetting; mod guard; mod load; mod server; ⋮---- pub use deployment::DeploymentConfig; pub use drift::DriftConfig; pub use error::ConfigError; pub use forgetting::ForgettingConfig; ⋮---- pub use load::default config path; pub use server::ServerHttpConfig; 证据：`crates/aionforge-config/src/lib.rs`
- **Lib**（source_file）：mod audit; mod clock; mod config; mod detect; mod error; mod fact extraction; mod lag; mod link evolution; mod merge; mod pass; mod profile; mod resolve; mod rule extractor; mod rule inducer; mod rule link evolver; mod rule summarizer; mod scheduler; mod skill induction; mod summarize; ⋮---- pub use audit::CONTRADICTION QUARANTINE REASON; ⋮---- pub use error::ConsolidationError; pub use fact extraction::FactExtractionPass; pub use lag::ConsolidationLag; ⋮---- pub use rule inducer::RuleInducer; ⋮---- pub use rule summarizer::RuleSummarizer; ⋮---- pub use skill induction::SkillInductionPass; ⋮---- pub use aionforge store::MaterializedFact; 证据：`crates/aionforge-consolidate/src/lib.rs`
- 其余 20 条证据见 `AI_CONTEXT_PACK.json` 或 `EVIDENCE_INDEX.json`。

## 宿主 AI 必须遵守的规则

- **把本资产当作开工前上下文，而不是运行环境。**：AI Context Pack 只包含证据化项目理解，不包含目标项目的可执行状态。 证据：`docs/README.md`, `README.md`, `third-party-data/README.md`
- **回答用户时区分可预览内容与必须安装后才能验证的内容。**：安装前体验的消费者价值来自降低误装和误判，而不是伪装成真实运行。 证据：`docs/README.md`, `README.md`, `third-party-data/README.md`

## 用户开工前应该回答的问题

- 你准备在哪个宿主 AI 或本地环境中使用它？
- 你只是想先体验工作流，还是准备真实安装？
- 你最在意的是安装成本、输出质量、还是和现有规则的冲突？

## 验收标准

- 所有能力声明都能回指到 evidence_refs 中的文件路径。
- AI_CONTEXT_PACK.md 没有把预览包装成真实运行。
- 用户能在 3 分钟内看懂适合谁、能做什么、如何开始和风险边界。

---

## Doramagic Context Augmentation

下面内容用于强化 Repomix/AI Context Pack 主体。Human Manual 只提供阅读骨架；踩坑日志会被转成宿主 AI 必须遵守的工作约束。

## Human Manual 骨架

使用规则：这里只是项目阅读路线和显著性信号，不是事实权威。具体事实仍必须回到 repo evidence / Claim Graph。

宿主 AI 硬性规则：
- 不得把页标题、章节顺序、摘要或 importance 当作项目事实证据。
- 解释 Human Manual 骨架时，必须明确说它只是阅读路线/显著性信号。
- 能力、安装、兼容性、运行状态和风险判断必须引用 repo evidence、source path 或 Claim Graph。

- **项目概览与快速开始**：importance `high`
  - source_paths: README.md, docs/getting-started.md, docs/honest-scope.md, examples/production.toml, Dockerfile
- **工作空间架构、MCP 与插件体系**：importance `high`
  - source_paths: crates/aionforge-cli/src/serve.rs, crates/aionforge-mcp/src/lib.rs, crates/aionforge-mcp/src/http_transport.rs, crates/aionforge-mcp/src/tools.rs, crates/aionforge-mcp/src/resources.rs
- **记忆模型、捕获与检索数据流**：importance `high`
  - source_paths: docs/data-model.md, docs/capture.md, docs/consolidation.md, docs/core-memory.md, docs/procedural-memory.md
- **安全、信任、运维与 Embedding 配置**：importance `high`
  - source_paths: docs/security-model.md, docs/trust-model.md, docs/namespace-authorization.md, docs/provenance-signing.md, docs/attestation-and-promotion.md

## Repo Inspection Evidence / 源码检查证据

- repo_clone_verified: true
- repo_inspection_verified: true
- repo_commit: `f33268cc287d20a1295143fade6b430d76f6a7db`
- inspected_files: `Dockerfile`, `README.md`, `docs/README.md`, `docs/agent-nudges.md`, `docs/apple-container.md`, `docs/attestation-and-promotion.md`, `docs/audit-subgraph.md`, `docs/bi-temporal-model.md`, `docs/capture.md`, `docs/concurrent-merge.md`, `docs/consolidation.md`, `docs/core-memory.md`, `docs/crdt-model.md`, `docs/cross-family-guard.md`, `docs/data-model.md`, `docs/decay-and-importance.md`, `docs/drift.md`, `docs/embedding-guide.md`, `docs/erasure.md`, `docs/forgetting.md`

宿主 AI 硬性规则：
- 没有 repo_clone_verified=true 时，不得声称已经读过源码。
- 没有 repo_inspection_verified=true 时，不得把 README/docs/package 文件判断写成事实。
- 没有 quick_start_verified=true 时，不得声称 Quick Start 已跑通。

## Doramagic Pitfall Constraints / 踩坑约束

这些规则来自 Doramagic 发现、验证或编译过程中的项目专属坑点。宿主 AI 必须把它们当作工作约束，而不是普通说明文字。

### Constraint 1: 依赖 Docker 环境

- Trigger: 安装/运行入口包含 Docker 命令：docker run --rm -p 127.0.0.1:3918:3918 -v aionforge-data:/data -e AIONFORGE_EMBEDDER__ENABLED=false ghcr.io/jscott3201/aionforge-memory:0.3.0
- Host AI rule: 标注 Docker 前置条件，并提供非 Docker 路径或失败提示。
- Why it matters: 非工程用户可能没有 Docker，启动成本明显增加。
- Evidence: identity.distribution | https://github.com/jscott3201/aionforge-memory | docker run --rm -p 127.0.0.1:3918:3918 -v aionforge-data:/data -e AIONFORGE_EMBEDDER__ENABLED=false ghcr.io/jscott3201/aionforge-memory:0.3.0
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

### Constraint 2: 可能修改宿主 AI 配置

- Trigger: 项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主，或安装命令涉及用户配置目录。
- Host AI rule: 列出会写入的配置文件、目录和卸载/回滚步骤。
- Why it matters: 安装可能改变本机 AI 工具行为，用户需要知道写入位置和回滚方法。
- Evidence: capability.host_targets | https://github.com/jscott3201/aionforge-memory | host_targets=mcp_host, claude_code, claude, cursor, codex, chatgpt
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

### Constraint 3: 能力判断依赖假设

- Trigger: README/documentation is current enough for a first validation pass.
- Host AI rule: 将假设转成下游验证清单。
- Why it matters: 假设不成立时，用户拿不到承诺的能力。
- Evidence: capability.assumptions | https://github.com/jscott3201/aionforge-memory | README/documentation is current enough for a first validation pass.
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

### Constraint 4: 维护活跃度未知

- Trigger: 未记录 last_activity_observed。
- Host AI rule: 补 GitHub 最近 commit、release、issue/PR 响应信号。
- Why it matters: 新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。
- Evidence: evidence.maintainer_signals | https://github.com/jscott3201/aionforge-memory | last_activity_observed missing
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

- Trigger: no_demo
- Evidence: downstream_validation.risk_items | https://github.com/jscott3201/aionforge-memory | no_demo; severity=medium
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

### Constraint 6: 存在评分风险

- Trigger: no_demo
- Why it matters: 风险会影响是否适合普通用户安装。
- Evidence: risks.scoring_risks | https://github.com/jscott3201/aionforge-memory | no_demo; severity=medium
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

### Constraint 7: issue/PR 响应质量未知

- Trigger: issue_or_pr_quality=unknown。
- Host AI rule: 抽样最近 issue/PR，判断是否长期无人处理。
- Why it matters: 用户无法判断遇到问题后是否有人维护。
- Evidence: evidence.maintainer_signals | https://github.com/jscott3201/aionforge-memory | issue_or_pr_quality=unknown
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。

### Constraint 8: 发布节奏不明确

- Trigger: release_recency=unknown。
- Host AI rule: 确认最近 release/tag 和 README 安装命令是否一致。
- Why it matters: 安装命令和文档可能落后于代码，用户踩坑概率升高。
- Evidence: evidence.maintainer_signals | https://github.com/jscott3201/aionforge-memory | release_recency=unknown
- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。
