---
name: onescience-primitives
description: OneScience 原语资源召回技能。根据自然语言需求检索相关原语资源（模型、组件、数据管线、应用、可视化规范、工作流规划、契约等）以及 Task-Centric 科研知识（Task、Method、Operation、Validation、Scenario、Workflow），通过范围判定、快速过滤和语义匹配召回，按内容需求返回相应知识；不做科研规划与代码实现。
type: resource
capabilities:
  owns:
    - 原语资源检索
    - 范围判定
    - 快速过滤
    - 语义匹配
    - 知识召回
  not_owns:
    - 科研规划
    - 代码实现
  inputs:
    - resource_retrieval_request
  outputs:
    - resource_retrieval_result
  downstream: []
  prereq: []
  intent_aspects:
    - resource_retrieval
  operation_types:
    - retrieve
  artifact_types:
    - knowledge
    - contract
  domains:
    - earth
    - biology
    - materials
    - cfd
    - general
  trigger_keywords:
    - 原语
    - primitive
    - 资源召回
    - 知识检索
    - 模型卡
    - 数据卡
---

# OneScience Primitives Resource

本技能采用渐进披露：正文保留检索协议与硬约束；细则下沉 `references/`，在标注「必须先读取」的位置必须先读再做（`asset_materialization.md` 内容组织与资产物化细则、`field_value_rules.md` 字段取值与质量要求全文、`tc/card_contract.md` TC 卡契约、`domain_profile.md` 领域回退判定、`bio_profile.md` 生信召回提示）。

## Primitive Unification Scope

本技能是 OneSkills 统一原语注册表。原语（primitive）= 任何可被召回、绑定进计划、交接给 executor 或用作规划证据的可复用科研能力：模型、组件、数据管线、数据集、工具、数据库、服务、应用、可视化规范、工作流规划、输出格式、契约、执行模板；也可为第三方工具/包（以 `provider`/`provenance` 元数据记录来源，仅通过 `resource_retrieval_result` 暴露蒸馏后内容；需要转第三方技能为原语资产时用 `onescience-primitive-distiller`，本技能始终保持 retrieval-only）。

**Task-Centric Knowledge Layer**：TC 知识对象与传统资源原语**同构同址**——一律是 `assets/<domain>/<category>/<primitive>/` 下的 `metadata.json` + `knowledge.md` 文档组，**不新增 metadata 字段、不改字段名**，`catalog_search` 逻辑不变。对象类型由 `type` 区分：
- **Task**（`type: task`，category `tasks/`）：科研能力单元，含目标、输入输出契约、方法路线、操作序列、验证契约、实体槽
- **Workflow**（`type: workflow`，category `workflow/`）：以 Task 为节点的编排
- **Scenario**（`type: scenario`，category `scenario/`）：需求绑定与验收口径
- **Resource**（`type: model | tool | dataset | ...`，各资源 category）：被 Task 引用的资源，含带可运行脚本的资源卡
- **Method / Operation / Validation**：不单独建卡，作为 Task 卡 `knowledge.md` 章节 + `tags` 词表边存在

知识图的**全部连接关系编码在 `tags`**（命名空间前缀 `edge:` / `slot:` / `atom:`），字段契约见 `references/tc/card_contract.md`。TC 的 Workflow/Scenario 卡与 legacy 实例卡（`workflow-planning/`）物理隔离，不做别名归并。

**category 词表（闭集，硬规则）**：资源类一律复数——`models`、`components`、`datapipes`、`datasets`、`tools`、`databases`、`contracts`、`services`、`application`、`visualization`、`output-format`、`workflow-planning`；TC 三层沿用法定名——`tasks`、`workflow`、`scenario`。目录名用复数、`metadata.type` 用单数（`models/mace` → `type: model`）是既定约定，不是错误。**禁止**再建 `model/`、`task/`、`tool/`、`database/`、`contract/`、`workflows/` 等单数或别名目录（已于 2026-11 收敛并入）；同名不同内容的历史冲突卡以 `-legacy` 后缀共存（如 `general/contracts/`），召回时优先取不带后缀的权威版本并如实报告冲突。

你负责从 `skills/onescience-primitives/assets/` 找到最相关原语，通过范围判定、快速过滤和语义匹配召回。不生成实现方案、不改代码、不执行脚本。

## 强制协议

本技能的 `assets/` 目录**仅供本技能内部使用**。调用方（orchestrator / coder / 其他技能）不得：
- 直接 Glob / Read 本技能 `assets/` 下的文件来获取原语信息
- 绕过 `resource_retrieval_request` 直接消费原语的 `metadata.json`、`spec.md`、`usage.md` 等文件内容
- 在未收到或构造 `resource_retrieval_request` 之前阅读或引用 `assets/` 下任何文件

调用方必须通过 `resource_retrieval_request → resource_retrieval_result` 完整闭环获取资源。

**资源检索的执行边界**：收到或构造 `resource_retrieval_request` 后，按本技能流程执行以下检索。原生 skill 工具若仅返回说明，需在同一轮继续实际检索并返回结果；不要求另建智能体或切换角色标记。请求内的任务需求、检索范围及内容需求应保留到结果返回；检索尚未结束、尚无 result 时也允许继续以下操作：
- **优先路径 —— `catalog_search` + `catalog_resolve`**：`catalog_search`（kind=primitive, domain=..., q=...）搜索原语；`catalog_resolve`（part=body/contract/location）获取 companions 和契约。`catalog_search` 搜 OneCode 内置 catalog（含 bundled seed），不依赖本地文件系统。
- **降级路径 —— 文件系统 Glob/Grep/Read**（宿主未提供 catalog 工具，或 `catalog_search` 无结果，且本地 `assets/` 存在）：枚举候选、在请求范围内过滤/语义匹配、组织所需内容、执行命名直查。以本次实际加载的技能目录定位 `assets/`，不假定技能安装在当前工作目录。未提供的工具记录为不可用，不尝试调用不存在的接口。

这类内部检索不属于调用方绕过协议。若此前确有无请求读取，不沿用其未核验结论；按当前请求重新检索、生成正式 result 并继续上层任务，不因调用偏差终止任务。

调用方仍**不得**沿 `matched_resources[].path` 自由读取任意文件、不得在无请求时浏览 `assets/`、不得消费未在 `execution_assets` 白名单声明的脚本。当本技能被上游调用时，`resource_retrieval_request` 是输入控制消息而非最终输出；本技能直接执行召回并返回 `resource_retrieval_result`。

**物化不属本技能**：请求为 `intent=provision`（要把 ModelScope 的模型权重 / 数据集取到本地、缺资源需下载、准备训练数据）时，本技能不执行下载，也不得给出一个"看起来可用"的本地路径；这类请求由调用方按统一资源契约调度 `onescience-resource-fetch`。本技能只回答"是什么 / 怎么用 / 什么参数"；资源卡正文（`spec.md` / `usage.md` / `metadata.json`）里出现的 `modelscope.cn/<datasets|models>/<org>/<name>` 链接或 `repo_id:` 原文应作为对方的 `repo_hints` 原样传递，不要改写后只给结论。

## 原语资产目录

```text
skills/onescience-primitives/assets/<domain>/<category>/<resource_name>/
  metadata.json     ← 基础信息（name, type, domain, description, tags, version）
  knowledge.md      ← 灵活单文档形态完整正文（与三文件形态二选一）
  spec.md           ← 规格知识（架构、参数、依赖）
  usage.md          ← 使用知识（启动示例、接口、限制）
  workflow_planning.md ← 规划决策知识（时机、流程、约束）
  references/       ← 按需读取扩展知识；仅 metadata 声明的文件
  scripts/          ← 可选受控执行资产；必须由 spec.md `# execution_assets` 白名单声明
```

TC 三层各独占 category：`scenario/`（type=scenario）、`workflow/`（type=workflow）、`tasks/`（type=task，与资源 category 平级）；legacy 实例卡在 `workflow-planning/`（type=workflow-planning）。TC 辅助索引在技能内 `references/tc/`（`card_contract.md`、`atoms.jsonl` 原子事实、`knowledge_evolution_log.jsonl`），**不进 assets 域树**。

> **知识区只读**：技能树（`skills/**`）是只读知识区，运行期一律不得写入。缺口/门禁记录 `.onescience/gaps.jsonl` 落工作区状态目录（与 `.onescience/task_state.json` 同约定，已在 `.gitignore` 内），理由见 step 10。

> **卡片双形态**：(A) 四文件形态（metadata + spec + usage + workflow_planning）；(B) 单文档形态（`metadata.json` + `knowledge.md`）。目录仅有后者时，`knowledge.md` 即完整正文，必须读取。

顶层 domain 以仓库现状为准，当前包括：`bio`、`cfd`、`climate`、`matchem`、`general`。每个 domain 下的 category 目录不完全相同，按**实际存在的目录**检索；合法 category 见上文闭集词表（当前实际使用：`scenario`、`workflow`、`tasks`、`workflow-planning`、`components`、`models`、`datasets`、`datapipes`、`tools`、`databases`、`contracts`、`application`、`visualization`、`output-format`）。

## Task-Centric 知识检索路径

> **【重要】** 调用方请求涉及科研任务规划、科研能力查询、工作流编排时，应优先使用 Task-Centric 检索路径，而不是传统资源原语检索。

**触发条件**（`resource_retrieval_request` 满足任一）：`intent` 为 `task`/`workflow`/`scenario`；`filters.task_id` 或 `filters.scenario_id` 已指定；`user_request` 含科研目标关键词（"筛选""预测""验证""排序""性质计算"等）或方法选择需求（"用什么方法""哪种技术路线"）或工作流编排需求（"流程是什么""步骤有哪些"）。

### Task-Centric 检索步骤

0. **读契约**（首次或边约定不确定时）：Read `references/tc/card_contract.md`，明确 9 字段约定与 `tags` 边命名空间（`edge:` / `slot:` / `atom:` / `runnable:` / `src:`）及解析规则。

0b. **查确定性索引（TC 检索第一动作，不可跳过）**：Read `references/tc/scenario_task_index.json`，按 `domain` + `scenario_title`（中文场景名）定位条目。条目 `entry_points` 列出该场景**全部**入口卡（图谱 `sc-*` / 语义 / legacy `workflow-planning`），`lineages` 列出每条谱系 workflow→tasks→resources 完整展开。命中条目时**必须把条目列出的每一层卡片 Read 原文并全部纳入召回结果**，不得只取其一；`exists=false` 或 `dangling_resources` 非空项按悬空边降级并记缺口，不得编造。仅当索引无命中（新场景、跨域、口语化）才降级到关键词检索步骤。

1. **识别科研目标与 domain，按 category 目录锁定 TC 层**：TC 三层各独占一个 category，**先按目录锁层、再用 `metadata.json` 的 `type` 复核**（目录与 type 必须一致）：Scenario → `assets/<domain>/scenario/`；Workflow → `assets/<domain>/workflow/`；Task → `assets/<domain>/tasks/`；legacy 实例卡 → `assets/<domain>/workflow-planning/`（不是 TC 编排层）。定位用 Glob `assets/<domain>/<category>/*/metadata.json`。
   - **硬规则**：legacy 实例卡仅当 TC Scenario/Workflow 无命中时才能作补充证据返回，且必须标注 `legacy_instance: true`；不得用 legacy 卡替代 TC 链任一层，不得因此跳过 Scenario→Workflow→Task 逐层展开。
   - **场景溯源**：Scenario 卡由仓库外 `scenario_catalogs/<域>/*.json` 场景需求书转换而来，原 `scenario_id` 记在 `src:scenario_id` tag（卡 `name` 是 kebab-case 英文或 `sc-*` 哈希）。请求给中文场景名时用 Grep `src:scenario_id` 定位，不要用 Grep `name`。
   - **入口不是终点（硬规则）**：同一场景可能有三类入口卡（语义 Scenario、图谱 `sc-*`、legacy `workflow-planning`；legacy 已经 `edge:scenario:*`/`edge:workflow:*` 接线，两类 Scenario 间有 `edge:alias:*` 互指）。无论从哪张卡进入（含 Grep 只命中一张 Task 或 legacy 卡），都**必须**提取场景身份（顶层 `scenario_id`、`src:scenario_id` tag、description 场景名或 `edge:scenario:*` 边），反查定位 Scenario 卡，再执行步骤 6 完整展开；**命中任何单张卡即停止、直接进入提问或规划，属协议违规**。

2. **Task 检索（catalog 优先）**：优先 `catalog_search`（kind=primitive, domain, q=目标关键词）命中 `type=task` 卡。**catalog 是发布时快照**：新建 TC 卡可能未进 catalog，无结果属正常，必须走文件系统降级（Glob `assets/<domain>/tasks/*/metadata.json` → Read 按 `description`/`tags` 语义匹配），不得就此判「无命中」。`filters.task_id` 指定时命名直查。

3. **实体槽精确匹配**：从请求抽取实体（CO₂/MOF/band_gap 等）与 Task 卡 `slot:*` tags 求交集。**无交集时不得硬套该 Task**：改道（步骤 8）或降级并记缺口。

4. **读 Task 正文**：Read 命中 Task 的 `knowledge.md`（目标、实体槽、输入输出契约、方法路线、操作序列、验证契约、资源引用、Task Graph、缺口与降级）。

5. **Resource 关联（沿 tags 边）**：解析 `edge:resource:<category>/<name>` → 同 domain `assets/<domain>/<category>/<name>/`，Read 其 `metadata.json`（必要时正文）。**解析不到目录 = 悬空边**：该资源判缺失，不得编造其能力，计入降级与缺口。

6. **Task Graph 完整展开**：解析 Scenario 的 `edge:workflow:*` → Workflow 的**全部** `edge:task:*`（不得只取一个），再对每个 Task 解析 `edge:resource:*`；用 `edge:prev:*`/`edge:next:*` 校验顺序。输出必须给出「场景→工作流→各 Task→各资源」逐层卡片路径凭证；某 Task 资源边悬空只降级该 Task，不得连带丢弃整条链。

   **检索纪律（硬规则）**：
   - ① Grep/Glob/catalog 输出出现截断提示（`truncated`、结果达上限）时，**必须**缩小范围重查直至无截断，**禁止基于截断输出下「无命中/只有 N 个」结论**。
   - ② 同一场景出现多张卡（语义 Scenario、`sc-*`、legacy、多张 `tk-*`/`it-*`）是 Task Graph 存在信号：必须聚合为同一条链后全部展开，**不得只挑一张读完就停**。
   - ③ 在向用户提问、宣布 BLOCKED 或输出任何规划之前，必须先给出逐层路径凭证表（每层卡片相对路径 + 命中方式）；凭证不完整 = 检索未完成，禁止进入下一环节。

6b. **泛化与复用判定**（上层问「一个场景能不能复用已有 Task」时必做）：读 Workflow 骨架卡 `src:scenarios_count` 与 `src:scenario_family`（泛化率 = scenarios_count : edge:task 数量）；用 `edge:step:<step_id>:<task>` 说明源场景步骤到 Task 卡映射；判定新建/复用：Grep 该 Task `name` 于 `assets/<domain>/`，被 2 条以上 Workflow 或其他 Task 的 `edge:prev/next` 引用 = 已复用骨架，输出 Grep 模式与命中数作凭证；场景在 `src:scenario_id` 无精确命中但骨架族匹配时：仍可用该骨架，把场景差异落到 `slot:*` 取值，标注「骨架匹配、场景未建卡」，不计悬空边。

7. **Atom 检索（数值级，可选）**：请求涉及具体数值或判据时，取 Task 卡 `atom:<id>` tags 后 Read `references/tc/atoms.jsonl` 按 `atom_id` 定位；无 tag 时按 `statement` 关键词匹配。

8. **前提核验与改道**：核对方法路线前提（势函数覆盖、算力与求解器可用性、阈值/权重可审计性）。前提不满足 → 按 `edge:fallback_method:*` 改道，写明改道原因与精度/成本影响。

9. **分层降级判定**：`retrieval_level`（task_centric 路径产出）：
   - **full**：Task 命中 + 全部 `edge:resource:*` 解析成功 + 至少一个操作有可执行或可规划落点
   - **partial**：Task 命中，但部分资源悬空/缺失（≥1 个解析成功）
   - **task_only**：仅命中 Task 卡（返回目标与契约作方法框架，显式声明缺口）
   - **none**：无 Task 命中

9b. **跨路径实质命中判定（决定 `knowledge_gap`——在线兜底触发的唯一依据，必做、不可跳过）**：`retrieval_level` 只在 task_centric 路径产生；走 traditional_resource 路径、或 TC 无卡回退 legacy 平铺卡时，也必须再判定一次 `knowledge_gap`：
   - **领域实质命中（`knowledge_gap=false`，本地可答）**：命中与 `user_request` 目标 domain + 具体研究对象/属性/方法**直接相关**的可执行 Task 卡或领域专属资源卡（model/tool/dataset/datapipe/component/database/contract/scenario/workflow 等），足以支撑对该具体科学问题的准确回答。`full` 与 `partial` 均属实质命中。
   - **没查到领域知识（`knowledge_gap=true`，触发在线兜底）**，任一即是：a. TC 路径 `retrieval_level ∈ {none, task_only}`；b. traditional 路径 `matched_resources` 为空；c. 命中**仅**由泛化规划/流程卡构成（全部是 `workflow_planning_primitive` 或 `legacy_instance: true` 的通用「文献综述/通用分析/通用建模流程/通用四步筛选」类卡），无任何领域专属资源或 Task；d. 命中资源 domain 与请求 domain 不一致且无该 domain 实质资源。
   - **铁律**：泛化 `workflow-planning` 卡只描述「怎么做研究」的通用流程，**不构成对具体科学问题的领域知识回答**。仅命中此类卡一律 `knowledge_gap=true`，不得当成「有资源可用」继续往下走。

10. **缺口记录**：`retrieval_level != full` **或** `knowledge_gap=true` 时，向工作区状态目录 `.onescience/gaps.jsonl`（相对当前工作区根，**不是** `skills/` 内任何路径）**追加**一行 JSON：`{ts, domain, task, retrieval_level, knowledge_gap, request_slots{}, missing_resources[], dangling_edges[], suggested_fill, domain_match_summary{exact, adjacent, cross_domain}, gate_hit, gate_layer}`。只追加、不删改历史。
    - **禁止写进技能树内路径**（`skills/**` 只读；运行期写入会污染知识库、破坏「同一知识库多次运行结果可比」）。`.onescience/` 不存在时先创建（不得为写入修改技能树内任何文件）。
    - `domain_match_summary`：兜底完成后按 step 11 标签统计三档数量；未触发时三档填 0。
    - `gate_hit` ∈ {`domain_mismatch`, `bare_number_reject`, `result_identity_lock`, `validation_rollback`, `complete_downgrade`, null}：本技能只在 A 层命中时填 `domain_mismatch`（cross_domain 文献被当参数来源、或兜底后 exact=0）；B/C/D 层由 orchestrator 各自追加（同一 gaps.jsonl 四层共用，便于 A/B 归因）。`gate_layer` ∈ {`A_knowledge`, `B_planning`, `C_execution`, `D_acceptance`}。

11. **在线兜底检索（`knowledge_gap=true` 时强制触发——涵盖 none / task_only / 空召回 / 仅命中泛化卡 / domain 不符五种情形）**：本地资产无法产出准确完整回答 → **调用 `onescience-online-knowledge` 技能联网兜底（统一在线查证·单一集中通道）**：把上层需求转成查询分解，**文献通道**走 lit_search（OpenAlex 摘要层迭代精炼 + Europe PMC/PMC 全文层取细节 + Crossref/arXiv 备用）；**结构/参数通道按任务领域选权威源、而非一律 COD**（材料/晶体→COD、生化/蛋白/分子对接→PDB/UniProt/DrugBank、气候/天气→再分析观测数据集如 ERA5、流体/CFD/等离子→物性模型库；若该领域无对应结构化参考库，仅文献通道即可），产出带连续编号引用 `[n]` 的分层综合答案。硬约束：
    ① 答案顶部显式标注「⚠ 本地知识缺口（knowledge_gap=true, retrieval_level=<值>），以下为在线文献兜底结果」；
    ② 全程遵守在线兜底纪律铁律（原 live-literature 与 online-knowledge 同源）（只引池内论文、数值/极性有出处、abstract-only 降权标注、失败通道显式报告）；
    ③ 在 step 10 缺口行 `suggested_fill` 末尾追加「已触发在线兜底」；
    ④ 兜底答案是**补充而非替代**——仍有本地 Task/资源命中时须一并列出本地凭证；
    ⑤ **严禁编造**：不得用泛化剧本假装完成、不得返回「模拟检索结果/模拟数据/默认参数/历史案例」充数；联网通道不可用（离线）时**不得报错、不得中断整个任务**：如实标注「本地知识缺口 + 当前离线，在线兜底不可用」，把缺口作为已知限制交回上层继续任务其余部分（离线不构成 blocked）；
    ⑥ **单一集中通道 + 证据并回召回结果**：本 step 是在线兜底**唯一集中执行点**；产出的带编号引用与接地事实必须以 `online_evidence` 字段**并入本技能召回结果**（见输出格式），作为上层消费文献证据的唯一来源；orchestrator 见 `online_evidence` 非空**不得重复触发**（防限流/防双跑）；
    ⑦ **召回阶段证据边界（严禁自造）**：召回结果不得填入任何未经「用户提供/本地卡/在线引文[n]」支持的参数、阈值、数据集或研究对象；无法支持者只能标 `proposed_candidate(待确认)` 或留空；
    ⑧ **domain_match 标签与跨域降级（A 层门禁）**：`online_evidence.citations[]` 每条必须带 `domain_match ∈ {exact, adjacent, cross_domain}`——`exact`=研究对象与本任务目标域及具体对象直接一致；`adjacent`=同域不同子场景；`cross_domain`=不同应用领域。**cross_domain 只能作方法学参考，不得作本次参数/阈值/几何/工况来源**；违反则该参数降级 `proposed_candidate(待确认)` 并追加 gaps.jsonl `gate_hit=domain_mismatch, gate_layer=A_knowledge`。兜底后池内 `exact`=0：必须触发第二轮场景锚词精炼检索（锚词=目标域+具体研究对象）；仍为 0 则在 `online_evidence` 顶部标注「在线兜底形式成功、实质未命中目标域（exact=0）」，相关科学结论保持 BLOCKED/诚实 PARTIAL，不得用 adjacent/cross_domain 硬凑。`knowledge_gap=false` 不触发兜底，仅在缺口处按 step 10 记录。

12. **可执行落点识别**：Task 的 `edge:operation:*` 在某资源卡有对应实现且该卡带 `runnable:script` tag 时，该操作**本机可执行**：输出脚本相对路径与可直接运行命令；否则标「无可执行落点，仅规划」。

13. **组织输出**：按下方输出格式返回。

### Task 检索与传统资源检索的桥接

- Task 卡 `edge:resource:<category>/<name>` 指向的就是传统原语目录，解析成功后按传统路径 Read 其 `metadata.json` + 正文。
- **悬空边**视为资源缺失：不得编造资源能力，计入 `partial` 降级并写 `gaps.jsonl`。
- **反向边**：资源卡可用 `edge:task:<name>` 声明被哪些 Task 引用，便于从资源侧回查。
- TC 卡与传统资源卡**共用同一检索基础设施**（catalog_search 优先 + 文件系统降级），无需第二套索引。

---

## 召回流程

> **【检索路径优先级】** 先检查宿主是否提供 `catalog_search` + `catalog_resolve`。提供时优先调用；未提供或检索无结果时，确认实际技能目录下 `assets/` 存在后走本地检索。后文所有“catalog 优先”步骤均遵守此可用性判断，工具不存在时直接执行对应本地步骤，不中断任务。
> 回退本地检索后，命名直查与常规管道（步骤 0-9）的文件系统操作规则仍适用。

> 本技能无统一索引文件，原语信息以各资源目录 `metadata.json` 为主。必须先确定检索范围，再枚举资源目录逐个读 `metadata.json`，不要凭目录名猜测。
>
> **【路径规范】** 文中 `assets/` 或 `skills/onescience-primitives/assets/` 均指实际加载的本技能目录下的 `assets/`；三层嵌套 `<domain>/<category>/<primitive_name>/`。用技能加载返回的位置拼接完整路径，不能将安装路径当作工作区相对路径。跨类别 Glob 使用 `**` 递归，已确定 category 时可在该 category 内精确匹配。
>
> **【命名直查优先】** 执行常规管道（步骤 0-6）前先检查是否满足命名直查条件。

### 命名直查模式

调用方明确知道目标原语名称时，跳过召回管道直接定位返回。**触发条件**（同时满足）：a. `filters.keyword` 含可识别的原语目录名（如 `complex_structure_visualization`、`alphafold3`）；b. `filters.domain` 已明确指定。

**执行步骤**：
1. 从 `filters.keyword` 提取名称候选（规范化：下划线连接、去空格标点，与目录名比对）
2. **优先 `catalog_search`**（kind=primitive, domain, q=名称）；若命中，`catalog_resolve` 取 body/contract，跳步骤 6
3. **回退文件系统**：catalog 工具未提供或 `catalog_search` 未命中，且本地 assets 存在时，Glob `skills/onescience-primitives/assets/<domain>/**/<name>/metadata.json`（必须 `**` 递归）
4. 唯一匹配直接读 `metadata.json`；多匹配（跨 category）读全部取语义最接近
5. 未找到则回退常规管道（步骤 0-6）
6. 命中后直接跳步骤 7（组织内容），**跳过步骤 0-6 枚举、过滤、语义匹配和截断**
7. `why_matched` 标注 `named_lookup`

**约束**：命名直查是精确匹配辅助，不是语义搜索替代；keyword 含多个名称时分别执行；仍遵守内容组织规则（步骤 7-9）含白名单校验；不绕过强制协议（仍需经 `resource_retrieval_request` 发起）。

### 常规召回管道

仅在命名直查未命中时执行。

0. **catalog 可用时优先检索**（kind=primitive，传 domain/keyword）；非空则 `catalog_resolve(part=body)` 取内容，跳过文件系统枚举。工具未提供或无结果时继续以下本地流程。
   **判定 domain scope**：`filters.domain` 明确 → 直接用该 domain，**不再读** `references/domain_profile.md`；未提供/为空/不可靠 → **必须先读** `domain_profile.md` 按领域信号回退判定；判定为 `climate|cfd|matchem|bio|general` 时只检索对应目录；`unknown` 时允许搜全部 domain 目录且输出 `detected_domain: unknown`。请求已路由生信且涉及生信工作流/模型/管线/应用选择时，可读 `references/bio_profile.md` 作候选排序提示（只辅助排序与边界解释，不能替代 `metadata.json` 证据）。
1. **判定 category scope**：请求明确指定模型/组件/管线/应用/可视化/工作流规划/输出格式/契约/数据库等类别时只检索对应 category；未指定则搜当前 domain scope 下全部实际 category。
   **【强制】可视化信号识别**：`user_request` 或 `filters.keyword` 出现任一信号时必须将 `visualization` 纳入检索范畴——显式可视化词（可视化/visualization/visualize/render）、三维渲染词（3D/三维/结构展示/interactive/交互式）、置信度着色词（pLDDT/PAE/confidence coloring/B-factor/chain coloring）、分子可视化工具（PyMOL/3Dmol/MolStar/NGL/cartoon/ribbon/surface/stick）、结构文件格式（.pdb/.cif/.mmcif/.pse/.pml）；即使主意图被判为 model/datapipe/application 也不可遗漏。
2. **枚举候选集**：在已定 domain/category 内 Glob `skills/onescience-primitives/assets/<domain>/**/metadata.json`（`**` 递归）得完整候选集。从每个匹配路径提取 domain/category/primitive_name 三层；路径拼接保留完整三层结构，不得省略中间 category 层。
3. **快速过滤**：仅当 `filters.keyword` 提供关键词时执行；结合目录名与 `metadata.json` 的 `name`/`domain`/`description`/`tags` 排除明显不相关资源。
4. **语义匹配**：遍历候选 `metadata.json`，对比 `user_request` 与 `description` 语义相关性。
5. **上下文增强**：结合 `task_state_summary` 筛选排序，但不能用上下文替代资源本身证据。
6. **按匹配度排序并截断**：返回最相关 **5-8 个**；无强相关则返回空列表，不要凑数。
   **【强制】多类别覆盖保障**：当检索范围为全部 category 且候选含多类实际资源时：先按匹配度得全序列；取前 5；若某实际存在的 category 全部资源未进前 5 且该 category 存在匹配度 ≥ 最高分 60% 的资源，则从该 category 追加 1 个最高分资源（可超出 5-8）；追加后总数不超 10，超出按匹配度去尾；追加项 `why_matched` 备注 `category_coverage`。目的：多类别隐含需求（如"分析蛋白质结构预测结果并可视化"）时 visualization 资源不被 model/component 挤掉。
7. **逐个组织内容**：按 `content_request` 读取并填充各命中资源 `content`。**`content_request` 非摘要、或请求含 `include_execution_assets: true` 时，必须先读取 `references/asset_materialization.md`**（含各内容类型读取规则、execution_assets 白名单校验与 64 KiB 物化流程、content 完整 YAML 格式、执行/知识资产强制规则）。摘要模式：只读 `metadata.json` 生成简短摘要。
8. **【强制】检索依赖组件**：命中资源为模型（`models` category）且需规格/使用知识时：读模型 `spec.md` 的 `# key_dependencies` → 提取依赖组件 → 在同 domain `components` 下检索各依赖组件目录 → 读其 `spec.md`/`usage.md`（若存在）→ 将信息作为 `dependent_components` 字段附加到模型资源输出。依赖组件在 `components` 不存在时在 `limitations` 说明缺失项。**此步不可跳过**：即使 `content_request` 为 `"摘要"`，也必须检索依赖组件并至少返回基本信息（name、description）。
9. **填充输出字段**：按「字段取值规则」推导 `detected_domain`、`task_intent`、各资源 `type`，并按「质量要求」生成 `why_matched`、摘要 `content`、`limitations`。**填充前必须先读取 `references/field_value_rules.md`**（domain/category scope 判定细则、枚举映射表、质量要求全文）。
   **【强制·跨路径兜底闸门，不可跳过】**本 traditional_resource 路径填充输出后**同样必须**执行上文 TC 检索步骤的 step 9b（跨路径实质命中判定）、step 10（缺口记录）、step 11（在线兜底）——不因走常规管道而豁免（否则 off-shape 场景会因回退本路径命中泛化卡而绕过兜底）：
   - 按 9b 计算 `knowledge_gap`：`matched_resources` 为空、或**仅**命中泛化 `workflow_planning_primitive`（legacy「文献综述/通用分析/通用建模流程/通用四步筛选」类卡）而无领域专属资源、或命中 domain 与请求不符 → 一律 `knowledge_gap=true`，`retrieval_level` 折算 `none`。
   - `knowledge_gap=true` 时按 step 10 追加 gaps.jsonl、按 step 11 强制调用 `onescience-online-knowledge` 联网兜底，`online_fallback` 置 `online_knowledge`；**严禁**把泛化卡当领域知识回答返回，更严禁编造模拟结果充数。
   - `knowledge_gap=false`（命中领域专属资源）时 `online_fallback` 置 `not_triggered`，正常返回。

## 输入格式

```yaml
resource_retrieval_request:
  user_request: <用户需求描述>
  task_state_summary: <当前任务状态摘要，可选>
  content_request: <内容需求，可选>
  include_execution_assets: <true | false，可选，默认 false>
  intent: <resource | task | workflow | scenario，可选，默认 resource>
  filters:
    domain: <领域过滤，可选>
    keyword: <关键词过滤，可选>
    task_id: <Task ID 过滤，可选，用于 Task-Centric 检索>
    scenario_id: <Scenario ID 过滤，可选，用于 Task-Centric 检索>
    method_id: <Method ID 过滤，可选，用于 Task-Centric 检索>
```

> `intent`：`resource`（默认）走传统原语路径；`task` 返回 Task 定义及关联 Method/Resource/Operation/Validation；`workflow` 返回 Workflow 的 Task Graph 及各 Task；`scenario` 返回 Scenario 及关联 Workflow 和 Task。`provision`（物化资源到本地）不由本技能处理，转 `onescience-resource-fetch`。

## 输出格式

与统一资源契约一致（`content` 完整格式与资产规则见 `references/asset_materialization.md`）：

```yaml
resource_retrieval_result:
  status: success | partial | failed
  query_summary: <需求摘要>
  detected_domain: <climate | cfd | matchem | bio | general | unknown>
  task_intent: <model | component | datapipe | application | tool | database | output-format | visualization | workflow | contract | mixed | task | scenario>
  retrieval_path: <traditional_resource | task_centric>
  retrieval_level: <full | partial | task_only | none>     # TC 路径产出；traditional 路径按 step 9b 折算
  knowledge_gap: <true | false>                            # step 9b 跨路径实质命中判定，在线兜底触发的唯一依据
  online_fallback: <not_triggered | online_knowledge | live_literature>   # gap=true 置 online_knowledge（统一兜底通道·按域取结构/参数）；live_literature 为纯文献旧路径别名，插件 Gate B 两者均放行
  online_fallback_status: <online | offline | not_applicable>  # offline=联网失败/限流已优雅降级（不报错不停摆）
  online_evidence:                                         # 兜底真实检索到的文献证据（单一集中通道产出；orchestrator 见非空不得重复检索）
    citations: [ "[n] 标题 | venue | year | doi | domain_match=<exact|adjacent|cross_domain> | evidence_level=<full-text|abstract-only>" ]
    grounded_facts: [ "事实陈述（标注 [n] 出处 + domain_match）" ]   # cross_domain 文献只作方法学参考，不得作本次参数来源
    domain_match_summary: { exact: <int>, adjacent: <int>, cross_domain: <int> }  # exact=0 时必须已触发第二轮锚词检索
    # 为空（offline 或未触发）时上层必须进入证据边界模式：不得自造参数/数据/阈值充当本次结果
  matched_resources:
    - type: model_primitive | component_primitive | datapipe_primitive | application_primitive | tool_primitive | database_primitive | output_format_primitive | visualization_primitive | workflow_planning_primitive | contract_primitive | task_primitive | method_primitive | operation_primitive | validation_primitive | scenario_primitive | workflow_task_graph_primitive | atom_primitive
      path: assets/<domain>/<category>/<primitive_name>/
      name: <原语名称>
      why_matched: <匹配理由，1句话>
      limitations: <使用限制，1-2句话>
      content: <根据 content_request 组织的内容>
  gap_record:                                              # 仅 retrieval_level != full 时存在，与 gaps.jsonl 追加行同构
    gap_id: <string>
    missing_layer: <task | resource | operation | validation | atom | executable>
    dangling_edges: [<解析失败的 edge:* 值>]
    suggested_harvest: <string>
```

**TC 检索结果说明**（`retrieval_path=task_centric` 时）：条目可能含 `task_primitive`（content 为 `knowledge.md` 正文 + 沿 `edge:*` 展开资源；有可执行落点时附脚本路径与命令）、`scenario_primitive`/`workflow_task_graph_primitive`（Task Graph 与阶段门槛）、传统资源卡（沿 `edge:resource:*` 解析）、`atom_primitive`（statement/value/unit/evidence）。Method/Operation/Validation **不单独成条**，作为 task_primitive content 章节与词表边返回。

**knowledge_gap 说明**：`false`=命中领域专属 Task/资源，本地足以作答；`true`=本地没查到领域实质知识（none/task_only/空召回/仅泛化卡/domain 不符）——**泛化流程卡只讲「怎么做研究」，不等于领域回答，仅命中它一律 true**。true 时按 step 11 强制触发联网兜底并显式标注「本地知识缺口」；false 不触发。

## 按需读取

- 组织非摘要内容或处理 `include_execution_assets` 前：`references/asset_materialization.md`。
- 填充输出字段（常规管道步骤 9）前：`references/field_value_rules.md`。
- TC 卡 9 字段与 tags 边契约：`references/tc/card_contract.md`；原子事实：`references/tc/atoms.jsonl`；场景确定性索引：`references/tc/scenario_task_index.json`。
- domain 回退判定：`references/domain_profile.md`；生信召回提示：`references/bio_profile.md`。
