---
name: monitor-runner
description: >
  Use when 用户引用 plan_id 并要求执行督导期信号监控（如"季报后检查信号"
  "监控 PLAN-xxx""解禁窗口检查"）时。需要前次推演的 supervision-monitor
  与制品——无 previous_run_id 拒绝执行。只做信号比对与告警，禁止四节点分析。
---

## 用途

对已交付项目的督导期监控表执行一次检查时点的信号比对，产出告警清单。
监控表定义"盯什么"（信号/阈值/周期/责任人），本技能执行"现在什么状态"（触发/未触发/数据不足）。
这是督导期监控表的执行器——v0.6.0 新增，把静态监控表变成可运行的督导流程。

## 前置条件

- 分析计划单（mode=monitoring-run，含 previous_run_id——无前次制品 → 拒绝："监控需要前次推演制品，请先运行 full-chain"）
- 前次推演的 supervision-monitor.md 与制品目录（artifacts/）
- 检查时点（季报窗口/中报窗口/年报窗口/解禁窗口——由用户指定或按关键时点日历自动定位最近时点）

## 执行流程

### Step 0: 时间锚定与范围确定

1. T0 = 本次检查时点日期
2. 按监控表「关键时点日历」与各信号「检查周期」，过滤出**本次应检信号集**（如季报窗口只检查周期为"每季度"及更密的信号）
3. 应检信号 0 条 → 输出空报告并说明（"当前时点无到期信号"）

### Step 1: 逐信号检索

对每条应检信号：
1. 按信号的数据来源发起真实搜索（带 T0 时间限定词），记录查询词/时间/命中
2. 记录最新值 + data_as_of + 来源 URL
3. 检索失败 → 判定「数据不足」，禁止臆测、禁止用监控表交付时的旧值冒充

### Step 2: 阈值比对（三态判定）

每条信号输出显式数值比较：
- **触发**：最新值越阈值（如"扣非降幅 25% > 阈值 21.97%"）
- **未触发**：最新值在阈值内（如"研发费率 12.3% ≥ 12% 阈值"）
- **数据不足**：检索失败或仅有超 G7 时效的陈旧数据（超期数据标注 STALE 后重搜一次，仍无 → 数据不足）

判定必须列出"阈值 vs 最新值"的比较式——禁止凭印象写"正常/异常"（G9）。

### Step 3: 告警清单与动作

- 触发信号 → 引用监控表原定的「触发后动作」与「责任人」，附最新值与来源
- 未触发信号 → 概览表一行带过
- 数据不足 → 显式清单 + 原因 + 补查建议

### Step 4: 门禁 G9 自检 + 时效

- 每条判定附 data_as_of；超过 G7 阈值（市场类 6 月/财务类 18 月）的数据不得作为"当前状态"判定依据
- 门禁 G9 逐项自检（检索留痕/数值比较/三态完备）

## 输出

1. **monitoring-report.md**（模板 references/templates/monitoring-report.md，保留 GateKeeper-Template 标记）：
   - 检查时点与应检信号数
   - 触发告警清单（信号/阈值 vs 最新值/来源/data_as_of/触发后动作/责任人）
   - 未触发概览 + 数据不足清单
   - 下次检查建议（按关键时点日历）
2. **monitor-run-{YYYYMMDD}.yaml**（留痕：每条应检信号的检索记录/判定/来源——审计依据）

## 护栏

- 禁止四节点分析（不做行业/技术/财务/定价的新判断——只引用既有制品结论）
- 判定必须有数值比较，禁止凭印象
- 数据不足必须显式列出；禁止以陈旧数据冒充当前状态
- 告警动作与责任人引用监控表原定义，不得自创
- 规则文件只读（N12）；制品仅写入用户指定的输出目录
- **输出目录组织（v0.6.1）**：monitoring-report.md 位于输出根目录（可读主交付物）；monitor-run 留痕 YAML 与计划单同目录或收入 `artifacts/` 子目录——不产生散乱中间文件
