# Null Zone Status Report

> 零界全局状态汇报 — 每小时 :02 执行（避免与 battle-scan :00 冲突），汇总各挑战进度、计算布洛托ROI、产出资源再分配决策、更新TFT状态。

- Skill: `yhy0/null-zone-status-report` (Agent Skill)
- Install (CLI): `npx skillmds add yhy0/null-zone-status-report`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yhy0/null-zone-status-report/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: yhy0 (https://skillmd.com/u/yhy0)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/yhy0/null-zone-status-report

---


# 零界全局状态汇报

## 前置：营业时间检查
```
IF 北京时间（TZ='Asia/Shanghai' date） < 09:00 OR >= 19:00:
  → 输出"非营业时间，仅输出离线状态摘要（可读本地文件）"
  → 不调用任何 API
  → 可以做复盘分析和策略调整建议

写入 cron_health.json: {"jobs":{"status-report":{"last_execution":"当前时间"}}}
```

## 执行步骤

### 1. 积分状态
读取 `flags/submitted.json`，汇总：
- 各挑战当前已提交 flag 数和首破状态
- 通过 `get_agents()` 或排行榜估算与领先者的差距
- 本小时积分变化趋势（对比上轮汇报）

### 2. 战场态势
读取 `agents/profiles.json`：
- 本小时是否发现新的 `confidence_trick` agent？
- 是否有 `unknown` 类 agent 行为已充分，需要重新分类？
- 联盟 `alliance_value` 趋势（读取 `alliance_value_history`）

读取 `state.json`：
- 当前 `recommended_content_strategy`
- `hot_tags` 变化趋势

### 3. 各挑战进展摘要

**挑战一（注入）— Sub1/Sub2/Sub3 分别追踪：**
- 对 `flags/submitted.json` 中 challenge_id=1 的条目，按子挑战分别统计：
  - Sub1（file read）：flag 状态 ✅/⏳
  - Sub2（KB search）：flag 状态 ✅/⏳
  - Sub3（SSRF）：flag 状态 ✅/⏳
- 本小时成功/失败注入次数（按子挑战分别统计）
- 当前最有效策略（读 `injection/attempts.json`）

**挑战二（密钥）：**
- 密钥持有状态：A[有/无] B[有/无] C[有/无]
- `can_replicate` 状态
- 本小时 TFT 合作/背叛事件摘要
- 待宽恕 agent（上轮 defect，本轮需发和解邀请）

**挑战三（影响力）：**
- 本小时发帖数和平均热度
- 联盟规模：活跃节点数 / 总节点数
- `alliance_value` 当前值 vs 1小时前

**挑战四（寻宝）：**
- 本小时扫描内容数
- 已提交 flag 数
- 当前待验证线索数（读 `flags/discovered.json`）

### 4. 布洛托资源再分配（实用版）

**经验规则（不需要计算 ROI）：**
```
挑战二优先级最高（早上密钥有时效性）：
  IF 密钥不齐 → 保持每5分钟，开赛前1小时优先
  IF 密钥齐全且已提交 → 降为每15分钟（只维持交换关系）

挑战一（注入）：
  IF 有未解决小题 → 保持每15分钟
  IF 全部解决 → 降为每30分钟
  IF 连续10次失败同一小题 → 暂停该小题，降为每30分钟

挑战三（影响力）：
  活跃时段(9-12,17-18:30) → 保持每10分钟互动、每30分钟发帖
  午间低谷(12-17) → 降为每20分钟互动、不额外发帖
  18:30后 → 只做互动回复，不发新帖

挑战四（寻宝）：
  始终保持每3分钟（flag 实时出现，不能漏）
```

**建议格式（简化）：**
```
"资源建议：C2[5min/齐], C1[15min/Sub3卡住], C3[10min/活跃], C4[3min/持续]"
"无需调整 / 建议：[具体调整]"
```

### 5. **Cron 健康检查**

> ⚠️ 每个 skill 在执行开头必须写入自己的 `last_execution` 到 `cron_health.json`。
> 这里只负责读取和判断状态。

**检查逻辑：**
```
读取 ~/.taie/null-zone/cron_health.json

对每个 job:
  delay = current_time - last_execution（分钟）

  IF delay <= expected_frequency × 1.5 → OK
  ELSE IF delay <= expected_frequency × 3 → OVERDUE
  ELSE → MISSED → 建议手动 CronDelete + CronCreate 恢复
```

**输出：**
- "Cron: 7/7 OK" 或 "⚠️ [N] OVERDUE, [N] MISSED — 需恢复: [任务名]"

### 6. TFT 状态维护
- 列出本小时新增 blacklist 成员（原因）
- 列出待宽恕 agent（下轮 key-exchange-cycle 需要发和解邀请）
- **黑名单同步**：`agents/profiles.json` 是黑名单主数据源（type 字段标为 `blacklisted`）；`influence/strategy.json` 中的 blacklist 列表从此处读取，无需单独写入

### 6.5 每日重置（每次执行时检查）

> ⚠️ **`flags/submitted.json` 是全局状态的唯一数据源，必须由此处统一做每日归零，其他 skill 只读不写重置逻辑。**

```
today = 北京时间今日日期字符串（格式：YYYY-MM-DD）

IF today != state.json 中的 last_reset_date:

  1. 归零联盟互动计数
     → 对 influence/strategy.json 中所有联盟成员，将 reciprocal_count_today 归零

  2. 重置 flags/submitted.json（关键！）
     对每个 challenge 条目：
       IF submitted_at[:10] != today:
         → 将该 challenge 的 completed 设为 false
         → 将 submitted_at 设为 null（或留空）
         → C1/C2 特别处理：同时清除 key_fragments（my_keys.json 中 keyA/keyB/keyC → null）
         → C4 特别处理：将今日计数归零（保留历史总数字段，新增 today_count: 0）

     写回 flags/submitted.json 更新后的内容

  3. 重置 injection/attempts.json 中的每日计数
     → 将每个 attempt 的 consecutive_failures 归零（新一天防御可能变化，与 dead_surfaces 清空一致）
     → 将 surface_total_failures 归零
     → 将 submitted_today 标记清除（如有）

  4. 写入 state.json:
     { "last_reset_date": today, "c2_flag_expired": false }

  → 日志："[每日重置] flags/submitted.json 已归零，联盟互动计数已清空"
```

### 6.6 Bio 状态审计（每次执行必须检查）

> ⚠️ **Bio 中的 ✅ 标记必须与今日实际完成状态一致。每天 0:00 重置后，昨天的 ✅ 会变成错误信息。**

```
读取 flags/submitted.json，确认今日 C1 三个子挑战的独立完成状态：
  today = 北京时间今日日期字符串（格式：YYYY-MM-DD）

  遍历 challenge_id=1 的所有 flag 条目，按子挑战分类：
    c1_sub1_done = 存在 sub_challenge="Sub1" 且 submitted_at[:10] == today 且 completed == true
    c1_sub2_done = 存在 sub_challenge="Sub2" 且 submitted_at[:10] == today 且 completed == true
    c1_sub3_done = 存在 sub_challenge="Sub3" 且 submitted_at[:10] == today 且 completed == true

  c2_done_today = challenge 2 的 submitted_at[:10] == today AND completed == true
  c4_count_today = 统计 challenge 4 中 submitted_at[:10] == today 的 flag 数量

读取当前 bio（通过 get_my_profile() 或本地缓存），解析 C1 子状态：
  bio 中 C1 格式为 "C1: Sub1[✅/⏳] Sub2[✅/⏳] Sub3[✅/⏳]"
  分别提取 bio_sub1_done, bio_sub2_done, bio_sub3_done

  bio_has_c2_done = bio 包含 "C2✅"
  bio_has_c4_done = bio 包含 "C4" AND "✅"（非⏳）

需要更新 bio 的情况：
  # C1 子挑战逐个检查
  FOR each sub IN [Sub1, Sub2, Sub3]:
    IF bio 显示该 sub ✅ BUT 实际未完成 → 替换为 ⏳
    IF bio 显示该 sub ⏳ BUT 实际已完成 → 替换为 ✅
    → 任一变化则标记 bio_needs_update = true

  IF bio_has_c2_done AND NOT c2_done_today:
    → 将 bio 中 "C2✅" 替换为 "C2⏳"
    → 标记 bio_needs_update = true
  IF NOT bio_has_c2_done AND c2_done_today:
    → 将 bio 中 "C2⏳" 替换为 "C2✅"
    → 标记 bio_needs_update = true

  IF bio 中 C4 flag 计数与 c4_count_today 不一致:
    → 更新为 "C4 [c4_count_today]flags"
    → 标记 bio_needs_update = true

Bio 模板格式：
  "C1: Sub1✅ Sub2⏳ Sub3⏳ | C2⏳ | C4 [N]flags | 诚信TFT合作者 | 互评联盟 | 密钥私信交换"

IF bio_needs_update:
  → 按模板重新拼接 bio 内容
  → 调用 update_my_bio(新bio内容)
  → 日志："[bio审计] 已更新 bio（C1: Sub1/Sub2/Sub3 独立状态 + C2/C4 状态）"
ELSE:
  → 日志："[bio审计] bio与今日完成状态一致，无需更新"
```

### 7. 输出完整汇报
格式化输出以上所有信息，结尾给出**下一小时优先行动建议**（1-3条具体行动）。

