---
name: three-face-l1-l2-v2-instance
description: v2_Profile 实例级三面 L1/L2 分级框架（机制视角 + 4 顶层对象实例化）· 2026-07-09 安南校准
metadata:
  type: project
---

# 三面 L1/L2 分级框架 · v2_Profile 实例级 · 终版

> **作者**：Lead Agent
> **决策日期**：2026-07-09（D68）
> **范围**：**v2_Profile 实例专用**（TaiChu Agent）
> **关系**：与 `ontology/THREE_FACE_FRAMEWORK.md`（General 框架）**正交不冲突**
> **配套**：`ata_layer/docs/HARM_SINKFUNCTION_L1_L2.md`（危害面 L1/L2 权威源）

---

## 0. 与 General 框架的关系

| 层级 | General 框架（THREE_FACE_FRAMEWORK.md）| **本文档 v2 实例** |
|---|---|---|
| 视角 | 类型学（所有可能值）| **机制 + 实例化**（v2_Profile 真实存在的对象）|
| 用途 | 本体论枚举约束 | **威胁分析、AP 设计、覆盖率统计** |
| Inject L1 | 受信对象类型（`ExternalEnv.*`）| **工具返回（机制）** |
| Inject L2 | 引入工具（`Tools.*`）| **内/外部环境对象（私域 vs 公域）** |
| Taint L1 | 内容对象（`TAINT_OBJ.*`）| **T1-T8 类目** |
| Taint L2 | 扩散范围（`RANGE.*`）| **4 顶层对象下具体实现 + 属性** |
| Harm L1 | strategic_intent 5 值 | **7 主桶（机制·互斥）** |
| Harm L2 | Sink 函数 + SinkIntent 7 值 | **42 具体工具函数 + 单步危害度 L0/L1/L2** |

**两套可叠加使用**：写 ontology / base.py 用 General 框架；写 v2 阶段威胁分析 / 串 AP 用本文档。

---

## 1. 危害面 L1/L2（✅ 已锚定 · 引自 HARM_SINKFUNCTION_L1_L2.md）

### 1.1 L1 · 7 主桶（按函数机制·互斥）

| # | L1 主桶 | 数量 | 范围 |
|---:|---|---:|---|
| 1 | 📝 文件操作 | 14 | 本地+远程文件读写、system prompt override、token 序列化 |
| 2 | ⚡ 系统执行 | 9 | bash/exec/os-api/remote-tool |
| 3 | 🤖 子 Agent 委托 | 7 | subagent/heavy-manager/discover-remote |
| 4 | 🌐 网络 | 5 | web-fetch/search/kafka/dmq/debug |
| 5 | 🧰 其它 | 4 | agent-loop / control-plane / 通用工具 |
| 6 | 🎨 AIGC 生成/编辑 | 2 | llm-api-call / llm-call-secondary |
| 7 | 📱 App_controller | 1 | screenshot-capture |
| | **合计** | **42** | |

### 1.2 L2 · 42 具体工具函数（每个 sink 自身）

每 sink 1 条独立记录（如 `bash-rce`、`grep-rce`、`sqlite-storage`）。
完整 42 条见 [[HARM_SINKFUNCTION_L1_L2]] §3.1（**权威表**）。

### 1.3 L2 对象的 4 个属性（独立维度）

每条 sink 函数自带以下属性标签（在 ToolTip 中展示）：

| 属性 | 取值 | 含义 |
|---|---|---|
| **原生单步危害度** | L0 / L1 / L2 | L0=间接无危害；L1=敏感读/拉内容/截屏；L2=改状态/执行/外发/委派 |
| **SinkAction** | 8 类 | ToolCall / NetworkSend / InfoRead / StateChange / SystemExec / AgentDelegate / CodeExec / OutputManip |
| **SinkIntent** | 7 值 | ActionHarm / DataExfil / ConfigTamper / PrivEsc / SecurityDegrade / IdentityForge / C2 |
| **Severity** | S1-S3 | S1=critical / S2=high / S3=medium / ?=未评估 |

⚠️ **属性 ≠ L1/L2 分级**：属性是 L2 对象的**正交标签**，与 L1/L2 机制视角**正交**。

### 1.4 4 顶层对象 × 危害面分布（D52 重排）

| 顶层对象 | 关联 sink 数 | 典型 sink |
|---|---:|---|
| **PC** | 5 | bash-rce / exec-cli / exec-os-api / screenshot / web-fetch |
| **taichuService(cloud)** | 0（仅 relay 入口）| — |
| **Mobile** | 1 | screenshot-capture（鸿蒙 NAPI） |
| **HeavyAgent** | 20 | heavy-docker / heavy-k8s / heavy-shell / control-plane-* |

⚠️ 注：a-system-caller 的 11 个内置系统 API sink 在 v2_data 中**未单列**，归 HeavyAgent Java 后端重攻击面。

---

## 2. Taint 面 L1/L2（✅ 本文档定义 · 安南校准 · 2026-07-09 D70 修正）

> **D70 关键修正**：L2 维度 ≠ 4 顶层对象。L2 是顶层对象**内部**的**具体本体论对象**（多为文件）。4 顶层对象是**居住位置横轴**（横向分组），不是 L2 维度本身。
>
> 例：T3 AgentCore（L1）+ L0-1 PC（居住位置）+ `Memory.md`（L2 具体文件）

### 2.1 L1 · T1-T8 类目（语义化分类）

| L1 类目 | 含义 | v2_Profile 实例数 | 主要 storage |
|---|---|---:|---|
| **T1 短时记忆** | 当前会话上下文（messages Vec）| 1 | in-memory |
| **T2 长时记忆** | 跨会话持久化（session memory / workspace）| 3 | SQLite / OBS / localfs |
| **T3 AgentCore** | Agent 自身状态（short memory / in-memory state / JSONL log）| 6 | in-memory / JSONL / NDJSON |
| **T4 Skill/MCP/Plugin** | Skill 注册表 / Plugin 配置 / Tool 域 | 2 | yaml / settings_default.rs |
| **T5 记忆服务** | 后端记忆服务（lcm database / heavy-jwt-secret）| 3 | sqlite / Java config |
| **T6 SubAgent** | 子 Agent 配置（run_subagent 配置 / control-plane）| 2 | yaml |
| **T7 本地文件** | 本地文件 / workspace / user config | 4 | files / filesystem |
| **T8 定时任务** | cron / WAKEUP / 定时唤醒 | 2 | cron table / harmony WAKEUP |
| | **合计** | **23** | |

⚠️ **D71 结论（2026-07-09）**：v2_Profile 中 T8 **0 obj**——`architecture.triggers = []` 没有登记任何具体 cron 任务。`cron`/`task_list` 是 tool 身份（cron 仅 PC/desktop 可用），不是 taint obj。**T8 在 v2_Profile 是结构性空缺**——cron 任务是运行时对象，不是持久化 taint 内容。详细见 §2.5 T8 专项分析。

### 2.2 L2 · 顶层对象内的具体本体论对象（多为文件）

> **轴向澄清**：4 顶层对象是**居住位置（横向分组轴）**，**不是 L2 维度**。L2 维度是顶层对象**内部**的具体本体论对象，多以**文件**形式存在。

**关键映射**：

```
L1 = T 类目（语义分类）
居住位置横轴 = 4 顶层对象（PC / taichuService(cloud) / Mobile / HeavyAgent）
L2 = 顶层对象内的具体本体论对象（多为文件）
```

**实例**：T3 AgentCore 在 PC 居住位置的具体 L2 文件：

| L1 | 居住位置 | L2 文件 | obj_id |
|---|---|---|---|
| T3 | L0-1 PC | `Memory.md`（用户工作区）| MD §5.3（v2_Profile 未登记） |
| T3 | L0-1 PC | `USER.md`（用户工作区）| MD §5.3 |
| T3 | L0-1 PC | `Identity.md`（用户工作区）| MD §5.3 |
| T3 | L0-1 PC | `session_manager.rs` JSONL | Taint-memory-08 |
| T3 | L0-1 PC | `interaction_log.rs` NDJSON | Taint-memory-09 |
| T3 | L0-1 PC | `session_sync_transport` HTTP+SQLite+JSONL | Taint-memory-10 |
| T3 | L0-2 cloud | `taichu-service config.yaml` | Taint-config-04 |
| T3 | L0-2 cloud | `taichu-service secret.yaml` | Taint-config-05 |
| T3 | L0-2 cloud | `heavy-jwt-secret`（Java config）| Taint-asset-01 |
| T3 | L0-2 cloud | `llm-api-key`（env JIUWEN_*）| Taint-asset-03 |

**⚠️ 重要边界**：同一个 L2 文件可能**跨多个居住位置**（如 `session-store-filesystem` 既在 L0-2 cloud 也在 L0-4 Heavy 是镜像）。这是 v2_Profile 同步机制造成的"物理多副本"——本体论上是**同一个对象**，但 v2_Profile 实例层有多个物理表现。

### 2.3 L2 对象的属性（本体论同对象共享）

每个 L2 对象自带属性标签（ToolTip 展示）：

| 属性 | 含义 | 取值 |
|---|---|---|
| **可注入** | 是否可被外部输入污染 | ✅ / ❌ |
| **写入方式** | 用户写入 / 系统自行注入 / 不可修改 | 三选一 |
| **可删除** | 用户/系统是否能删除 | ✅ / ❌ |
| **mutability** | writable / Appendable / read-only / Mutable / unknown | v2_data 字段 |
| **persistence** | durable / session / per-call / disk / unknown | v2_data 字段 |
| **storage** | 具体物理位置（filePath） | v2_data 字段 |

⚠️ **本体论约定**：**相同对象跨实例共享属性**（如 "PC 上的 memory.md" 这个对象的"可注入=True"属性，在 TaiChu/Claude Code/任何实例都是 True）——这是本体论对象级别的属性，不是实例特化。

### 2.4 23 taint obj × T1-T8 完整映射

| T 类目 | obj_id | 顶层对象 | 可注入 | 写入方式 | 可删除 |
|---|---|---|:---:|---|:---:|
| T1 | Taint-memory-00 | Agent | ✅ | 系统自行注入 | ❌ |
| T2 | Taint-memory-01 | Cloud | ✅ | 系统自行注入 | ❌ |
| T2 | Taint-memory-02 | Cloud | ✅ | 系统自行注入 | ❌ |
| T2 | Taint-memory-03 | Cloud | ✅ | 系统自行注入 | ❌ |
| T3 | Taint-memory-04 | Cloud | ✅ | 系统自行注入 | ❌ |
| T3 | Taint-memory-05 | Cloud | ✅ | 系统自行注入 | ❌ |
| T3 | Taint-memory-06 | Agent | ✅ | 系统自行注入 | ❌ |
| T3 | Taint-memory-07 | Cloud | ✅ | 系统自行注入 | ❌ |
| T3 | Taint-memory-08 | Agent | ✅ | 系统自行注入 | ❌ |
| T3 | Taint-memory-09 | Agent | ✅ | 系统自行注入 | ❌ |
| T3 | Taint-memory-10 | Agent | ✅ | 系统自行注入 | ❌ |
| T7 | Taint-workspace-01 | Cloud | ✅ | 系统/用户写入 | ✅ |
| T4 | Taint-config-00 | Agent | ✅ | 用户写入 | ✅ |
| T4 | Taint-config-01 | Agent | ✅ | 用户写入 | ✅ |
| T4 | Taint-config-02 | Agent | ✅ | 用户写入 | ✅ |
| T4 | Taint-config-03 | Agent | ✅ | 用户写入 | ✅ |
| T6 | Taint-config-04 | Cloud | ✅ | 系统写入 | ❌ |
| T6 | Taint-config-05 | Cloud | ❌ | 不可修改 | ❌ |
| T4 | Taint-config-06 | Agent | ✅ | 系统写入 | ❌ |
| T7 | Taint-asset-00 | Cloud | ❌ | 不可修改 | ❌ |
| T5 | Taint-asset-01 | Cloud | ❌ | 不可修改 | ❌ |
| T5 | Taint-asset-02 | Cloud | ❌ | 不可修改 | ❌ |
| T5 | Taint-asset-03 | Agent | ❌ | 不可修改 | ❌ |

**统计**：23/23 = 可注入 18 / 系统自行注入 18 / 用户写入 4 / 不可修改 6 / 可删除 5

⚠️ **T8 行未列出**：v2_Profile 23 taint obj 中**无任何 T8 实例**。详见 §2.5 T8 专项分析。

---

### 2.5 T8 定时任务专项分析（2026-07-09 D71 结论）

**核心发现**：v2_Profile 中 T8 = **0 持久化 taint 实例**。这不是数据漏标，而是 v2_Profile 的**结构性设计选择**。

#### 2.5.1 v2_Profile 中 T8 相关字段扫描结果

| 字段 | 值 | 性质 |
|---|---|---|
| `architecture.triggers` | `[]`（空数组）| **无具体 cron 任务登记** |
| `tool_space.tools[cron]` | tool_id=cron, domains=[desktop, all], blocked_in=[cloud, a-system-caller, relay-target] | cron 是 tool 身份，**仅 PC 可用** |
| `tool_space.tools[task_list]` | domains=[desktop, cloud, all], blocked_in=[a-system-caller] | 任务列表查询工具 |
| `harmony WAKEUP` | v2_Profile **未出现** | 鸿蒙定时唤醒 API 未声明 |
| `systemd timer` | v2_Profile **未出现** | 系统级定时器未声明 |

#### 2.5.2 为什么 T8 在 v2_Profile 没有持久化实例？

**关键洞察**：T8（定时任务）的本质是**运行时对象**（executable schedule），不是**持久化 taint 内容**（durable content）。两者性质不同：

| 维度 | T1-T7 taint obj | T8 定时任务 |
|---|---|---|
| 持久性 | 持久化文件/数据库/配置 | **运行时调度项**（重启即失） |
| 触发方式 | Agent Loop 自然读取 | 操作系统调度（cron / WAKEUP） |
| v2_Profile 表达 | taint[] 数组 | tool_space.tools[cron] + triggers[] |
| 受污染方式 | 文件被写 | cron 表被注入恶意任务 |
| 威胁路径 | 文件内容进 context | 恶意命令按 schedule 执行 |

**结论**：T8 的 L2 实例在 v2_Profile 中**应当为 0**——所有"具体定时任务"都是 runtime ephemeral，不进 taint 表。威胁建模时把 T8 的**触发路径**（通过 `cron` tool 创建任务）作为注入面/危害面来表达，**不作为 Taint L2 obj**。

#### 2.5.3 T8 唯一可达路径

```
T8 触发链 = 用户注入 User_Instruct
         → Agent LLM call cron tool
         → cron 在 PC 创建恶意定时任务
         → 操作系统调度器触发
         → bash-rce / exec-cli sink 命中
```

**覆盖规则**：T8 在三面覆盖率统计中记为 **L1 = 1 类目（已覆盖）/ L2 = 0 obj**——L1 算 100%，L2 分子为 0（不参与 L2 覆盖率分母）。

#### 2.5.4 v3 扩展建议

若 v3 需要把 T8 也纳入持久化 taint 实例，可考虑：
- 增 `architecture.triggers[]` 字段（已存在但为空）
- 增 `taint-scheduler-XX` 类目
- 与 base.py Memory / CronTask 对齐

---

## 3. Inject 面 L1/L2（✅ 本文档定义 · 安南校准）

### 3.1 L1 · 工具返回（mechanism 视角）

> **安南校准结论**：v2_Profile 的注入面**几乎只有 1 类 L1 = 工具返回**。
> 这反映了 TaiChu 注入风险的核心机制——**不可信工具返回值被 Agent Loop 直接注入 LLM context**。

### 3.2 L2 · 内/外部环境对象（私域 vs 公域）

L2 拆分依据：**数据来源的访问域**

| L2 类型 | 含义 | 私域/公域 | 典型来源 |
|---|---|---|---|
| **私域 · 用户 PC 文件** | 用户 PC 上本地文件 | 私域 | `/workspace`、Memory.md、USER.md |
| **私域 · 用户手机文件** | 用户手机本地文件 | 私域 | 鸿蒙 NAPI 文件、Mobile FFI perception |
| **私域 · App 内聊天记录** | IM 应用消息 | 私域 | 微信/小红书私信、邮件、通知 |
| **私域 · 邮件** | 用户邮箱 | 私域 | Mailbox / Outlook / IMAP |
| **公域 · 网站 URL 链接** | 公开互联网 URL | 公域 | 网页内容、URL 跳转 |
| **公域 · 恶意商家店铺** | 公开电商商家页 | 公域 | 淘宝/京东店铺、恶意商家 |
| **公域 · 恶意小红书笔记** | 公开 UGC 笔记 | 公域 | 小红书、微博、抖音内容 |

#### 3.2.1 私域/公域判定规则（2026-07-09 D72 安南校准）

**核心判定原则**：

```
┌─────────────────────────────────────────────────────┐
│ Q1: 访问该数据是否需要身份认证（登录/授权/物理设备）？│
│   ├─ 是 → 私域                                       │
│   └─ 否 → 公域                                       │
└─────────────────────────────────────────────────────┘
```

**私域子判定**（Q1=是）：

| 进一步分类 | 判定依据 | 实例 |
|---|---|---|
| **用户私域 · 文件类** | 用户在物理设备上自管理 | PC 上 Memory.md / 手机上照片 |
| **用户私域 · 应用类** | 用户在应用内管理（应用控制持久化）| 微信聊天 / 小红书私信 / 邮件 |
| **系统私域** | 操作系统层 / Agent 框架层 | /etc/passwd / cron 表 / settings |

**公域子判定**（Q1=否）：

| 进一步分类 | 判定依据 | 实例 |
|---|---|---|
| **公域 · URL 主动通道** | 需用户主动给 Agent URL 拉取 | 网页内容 / API endpoint |
| **公域 · 内容平台** | 公开 UGC 浏览 | 小红书公开笔记 / 微博 / 抖音 |
| **公域 · 商家店铺** | 公开商家页 | 淘宝/京东店铺首页 |

#### 3.2.2 典型边界争议裁定（10 例）

| 案例 | 看似模糊点 | 判定结果 | 理由 |
|---|---|:---:|---|
| **公开邮件列表**（如 oss-security）| 邮件 vs 公域 | **公域** | 任何人可订阅，无身份认证 |
| **私人邮箱收件**（如 Gmail inbox）| 邮件 vs 私域 | **私域** | 需邮箱密码+OAuth |
| **微信公众号文章**（公开订阅）| App vs 公域 | **公域** | 公开内容，匿名可读 |
| **微信好友消息** | App vs 私域 | **私域** | 需好友关系认证 |
| **小红书公开笔记** | UGC vs 公域 | **公域** | 匿名可浏览 |
| **小红书私信** | UGC vs 私域 | **私域** | 需互关关系 |
| **淘宝商品页**（匿名浏览）| 商家 vs 公域 | **公域** | 匿名可见 |
| **淘宝客服消息** | 商家 vs 私域 | **私域** | 需对话关系 |
| **百度网盘分享链接** | 文件 vs ? | **公域**（如果匿名可访问） | 凭分享链接直接下载 |
| **GitHub 公开仓库 README** | 文件 vs ? | **公域** | 匿名 git clone |

#### 3.2.3 判定流程（串 AP 时复用）

```
step1: 数据访问是否需身份认证？ → 私域 / 公域
step2: 私域 → 用户/应用/系统子分类
       公域 → URL/内容/商家子分类
step3: 该 L2 对象可被哪些 Tool 访问？ → 注入面工具属性
step4: 攻击路径 = Tool 读取 + 不可信内容进 context + Sink 命中
```

⚠️ **关键边界**：同一平台的**不同子类型**可以是不同 L2 类目（如小红书公开笔记=公域，小红书私信=私域），不能简化为"小红书=公域"。这是 §3.4 25 InjFace 拆分的依据。

#### 3.2.4 v3 扩展建议

若 v3 引入新 L2 类目，按以下流程登记：
1. 给出数据访问场景的真实例子（≥3 个）
2. 用 §3.2.1 主判定原则分类
3. 用 §3.2.2 边界表对照是否有争议
4. 在 §3.4 25 InjFace 表中标注"该 L2 是否覆盖"

### 3.3 L2 对象的属性：可访问工具（Inject面提供可能访问不可信内容的工具）

每个环境对象需标注：**哪些 Tool 可以访问到它**（即哪些 Tool 是潜在注入通道）。

| L2 环境对象 | 可访问 Tool | 注入风险 |
|---|---|---|
| 私域 · PC 文件 | `read` / `grep` / `find` / `ls` / `bash` (cat) | high（MEMORY.md 可污染长期记忆）|
| 私域 · 手机文件 | `Mobile FFI perception_entry` / `Mobile device tool returns` | high（HarmonyOS NAPI 通道）|
| 私域 · 聊天记录 | `app_controller` / `read` / `web_fetch` (IM API) | critical（用户输入语义注入）|
| 私域 · 邮件 | `web_fetch` / `read` | critical（邮件含发件人/标题/正文）|
| 公域 · URL 链接 | `web_fetch` / `web_search` | critical（拉内容直接进 context）|
| 公域 · 恶意商家店铺 | `web_fetch` (电商 URL) | high（隐性外发链路）|
| 公域 · 小红书笔记 | `web_fetch` (UGC URL) | critical（UGC 内容常带攻击载荷）|

### 3.4 25 InjFace obj × L1/L2 完整映射（v2_Profile 实例）

> 注：v2_Profile 中 25 InjFace obj 主要按 `channel` 字段聚合（与本节 L1 = 工具返回 对应），L2 私域/公域拆分是 **补充视角**（攻击者视角的"数据源"），不取代 channel 切分。

| L2 私域/公域 | channel | PE obj 范围 | 数量 |
|---|---|---|---:|
| **私域 · 内部 Agent 状态** | SystemPrompt / Memory / promptBuilder | PE-00, 03, 11, 15, 16, 20, 22, 24 | 8 |
| **私域 · 工具内部返回** | SyncToolReturn / AsyncBackground | PE-01, 02, 04, 07, 12, 13, 14, 21, 23 | 9 |
| **私域 · SubAgent** | SubagentPrompt / SubagentToolReturn | PE-08, 09 | 2 |
| **私域 · Mobile** | Mobile FFI / Mobile tool returns | PE-05, 06 | 2 |
| **私域 · Agent 内部机制** | tool return / secondary LLM / summary / re-inject | PE-17, 18, 19 | 3 |
| **公域 · 外部 URL** | WebSocket path traversal（credential URL）| PE-10 | 1 |
| | | **合计** | **25** |

⚠️ **公域直接通道仅 1 条**（PE-10），其它公域数据通过私域工具（web_fetch）拉取后才进入 context——这是 TaiChu 注入面的实际拓扑。

---

## 4. 三面 L1/L2 覆盖率统计口径

后续串 AP 时，按以下口径统计覆盖率：

```
L1 覆盖率 = 已触达 L1 类目数 / 该面 L1 总数
L2 覆盖率 = 已触达 L2 对象数 / 该面 L2 总数

Harm L1 总数 = 7    L2 总数 = 42
Taint L1 总数 = 8    L2 总数 = 23
Inject L1 总数 = 1   L2 总数 = 7 (私域/公域环境对象)
```

⚠️ Inject 面的 L2 计数采用 **私域/公域环境对象**（7 类）而非 25 PE obj——这是因为 L2 是**攻击者视角**的环境对象维度，而非 v2_Profile 内部 channel 切分。如果按 25 PE obj 计数，则 L2 = 25（需在覆盖率报告中并列展示）。

---

## 5. 决策日志

### 2026-07-09 D70（L2 = 具体本体论文件 修正 + ToolTip 优先原则）
- ✅ **修正**：Taint L2 ≠ 4 顶层对象。L2 是顶层对象**内部**的具体本体论对象（多为文件）。4 顶层对象是**居住位置横轴**，不是 L2 维度。
  - 例：T3 AgentCore（L1）× L0-1 PC（居住位置）× `Memory.md`（L2 文件）
- ✅ **新规范**：**展示不了的关键内容一律放 ToolTip**（filePath / evidence / 可注入 / 可删除 / 写入方式 等）
  - 这是页面设计铁律：主视图只展示分组骨架 + 关键 chip 名；详细信息（路径、来源、属性）通过 ToolTip 悬停获取
  - 已应用于 threat_taichu_v2_threeface_objects.html 的 Taint chip（5 行 ToolTip）

### 2026-07-09 D68（v2 实例级 L1/L2 框架落盘）
- ✅ 决策：v2_Profile 实例级 L1/L2 与 General 框架**正交不冲突**，双视角并存
- ✅ 决策：Harm L1/L2 引自 `HARM_SINKFUNCTION_L1_L2.md`（已固化），本文档仅引用
- ✅ 决策：Taint L1 = T1-T8（语义化类目），L2 = 顶层对象内的具体本体论文件 + 属性
- ✅ 决策：Taint L2 属性（可注入/写入方式/可删除）由本体论共享——同对象跨实例属性一致
- ✅ 决策：Inject L1 = 工具返回（机制），L2 = 私域/公域环境对象（7 类）+ 可访问工具属性
- ✅ 决策：覆盖率统计口径明确（见 §4），避免后续统计错位
- ✅ 写入本文档作为 v2 阶段三面 L1/L2 权威源

---

## 6. 待办

1. **T1-T8 映射补全**：v2_Profile 中 T8（定时任务）实例数偏少（cron/WAKEUP），需核查是否漏标
2. **PE-10 公域 URL 通道扩展**：当前公域仅 1 条 PE obj，是否需补充其他公域入口（DNS / OAuth callback）？
3. **私域/公域的边界争议**：邮件是私域还是公域（公开邮件列表）？需明确判定规则
4. **本体论同对象属性表**：把所有"本体论对象 × 属性"做成 ontology/instances/_shared/object_attribute_table.md
5. **Taint L2 跨居住位置镜像说明**：补充 ToolTip 中"跨镜像"标注（已部分实现，待全量）
6. **Inject L1 拆分**：v2 阶段几乎只有"工具返回" 1 类，未来若出现新机制（如 DNS rebinding / OAuth callback）需扩展

---

## 7. 展示规范（ToolTip 优先 · 2026-07-09 安南校准）