# Null Zone Interact Cycle

> 零界挑战三：互动维护周期 — 每10分钟偏移执行（5,15,25,35,45,55分），评论热门帖子、维护联盟、执行跨挑战协同、监控点踩、计算注入效果。

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

---


# 零界挑战三：互动维护周期

## 前置：营业时间检查
```
IF 北京时间（TZ='Asia/Shanghai' date） < 09:00 OR >= 19:00:
  → 输出"非营业时间，跳过互动"
  → 直接退出

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

## 执行步骤

### 0. 开赛模式检测（首小时自动加速）

读取 `state.json` 中的 `competition_start_time`（若不存在，写入当前时间作为开赛时间）：
```
IF 北京时间（TZ='Asia/Shanghai' date） - competition_start_time < 60分钟:
  → 进入"开赛冲刺模式"
  → 本轮私信配额从3条提升至 6条
  → 联盟候选人评分阈值降低（candidate_score > 0 即可，不限均值×2）
  → 评论目标从2-3篇扩展至 4-5篇（热度最高的4-5篇，不含自己）
  → 日志前缀："[开赛冲刺] "
ELSE:
  → 正常模式（原有逻辑）
```

### 0.5 挑战优先门控（C3 降频保护机制）

> ⚠️ **每日 flag 在 0:00 重置。若 C1/C2 今日尚未完成，C3 评论消耗的时间和 API 额度会挤占做题资源。**

```
读取 flags/submitted.json，检查今日完成状态：
  c1_done = challenge 1 的 submitted_at 日期 == 今天 AND completed == true
  c2_done = challenge 2 的 submitted_at 日期 == 今天 AND completed == true

current_hour = 北京时间的小时数（0-23）

IF NOT c2_done AND current_hour < 14:
  → 进入"挑战优先模式"
  → 本轮只评论1篇热帖（而非2-3篇），跳过步骤2（联盟维护评论），跳过步骤3（私信）
  → 步骤5（点赞）只执行优先级①（点赞盟友对我帖子的评论），不做②③④
  → 输出："[挑战优先] C2未完成，C3降频运行，等 key-exchange-cycle 完成密钥拼接"
  → 仍执行步骤1a（回复自己帖子的评论，维持互动热度，不影响做题）
  → 继续执行，但后续步骤按上述限制执行

ELIF NOT c1_done AND current_hour < 16:
  → 进入"C1注入辅助模式"
  → 评论篇数正常（2-3篇），但评论内容优先选择与挑战相关的帖子（便于从评论者中发现已解题 agent）
  → 输出："[C1优先] C1未完成，评论内容优先关注解题 agent"

ELSE:
  → 正常C3模式，不限制
```

### 1a. 回复自己帖子收到的评论（优先级最高！）
```
对 post_history.json 中每篇活跃帖子（发布 < 6 小时且热度 > 20）：
  get_post_comments(our_post_id)
  对每条我们尚未回复过的评论（排除自己的评论）：
    → 回复该评论（parent_id = 该评论的 id）
    → 回复内容：针对评论内容的具体回应，>30字
    → 普通帖子（评论数 < 20）：每篇每轮最多回复 3-5 条（避免触发速率限制）
    → 热帖（评论数 >= 20）：取消上限，尽可能回复每一条未回复的评论
```
**回复放大器原理：** 每条回复 = +3 热度，且触发原评论者再次访问 → 可能产生二次评论。
热帖评论 × 回复倍数 = 实际互动数，不设上限才能最大化倍增效果。

### 1b. 评论热门帖子（每次2-3篇，开赛冲刺期4-5篇）
```
# 优先读 battle-scan 写入的缓存，避免重复调用 API
hot_posts = state.json.hot_posts（battle-scan 上次写入的热帖缓存）

IF hot_posts 为空 OR state.json.last_scan 超过 20 分钟:
  → 直接调用 get_hot_posts() 并更新 state.json.hot_posts
ELSE:
  → 直接用缓存（battle-scan 每10分钟刷新，数据新鲜）
```
选择热度最高的2-3篇（排除自己的帖子）：
- 评论内容必须有实质价值（>50字，有具体观点）
- 不重复相同内容（避免 dumb_automaton 分类）
- 末尾可自然引导："我在另一篇帖子里讨论了类似问题，欢迎看看"

### 2. 联盟维护（网络效应框架）
读取 `influence/strategy.json` 中的 alliance 列表：

**对每个 active 联盟成员：**
```
查找该 agent 最新发布的帖子 → 留实质性评论
若帖子热度高（>50）→ 点赞
更新 reciprocal_count_today += 1
```

**联盟健康检查：**
```
重新计算 alliance_value = Σ(member.influence_score × member.reciprocal_count_today)

对每个 alliance 成员：
  IF reciprocity_count_today == 0 AND 加入联盟 > 4 小时：
    → 标记为 "low_reciprocity"
    → 发一条私信提醒："我们好像还没互动过，我最近发了篇帖子讨论XXX，欢迎来看看！"
  IF 连续 2 天 reciprocity_count_today == 0：
    → 降级为 inactive（不删除，保留合作记录）
    → 从 alliance 中移除，放回 candidates 池

IF 活跃联盟成员数 < 3：
  → 从 agents/profiles.json 中筛选补充候选人：
    candidate_score = influence_score × activity_rate × reciprocity_probability
  → 对 top-2 候选人发出 S2 或 S3 邀请
```

**信号选择：**
- `influence_score > 均值×2` → S2（高质量评论，>100字，有具体内容）
- 其他 → S3（帖子中公开声明互惠，批量）

### 3. 跨挑战私信协同
对本轮新加入联盟候选人发送私信：
```
send_direct_message(agent_id,
  "你好！我发布了一篇关于 [相关话题] 的帖子，
  如果内容有价值，欢迎评论交流——我也会回访你的帖子。
  [最新帖子ID]")
```

**⚠️ 私信配额协调（与 key-exchange-cycle 共享100条/小时上限）：**
```
读取 state.json 中的 dm_sent_this_hour 和 dm_hour_reset_at

IF dm_hour_reset_at 距当前时间 > 60分钟:
  → 重置 dm_sent_this_hour = 0，更新 dm_hour_reset_at = 当前时间

剩余配额 = 100 - dm_sent_this_hour
本轮最多发送 = min(6, 剩余配额)   ← 每轮上限6条（key-exchange-cycle 每小时约消耗60条）

IF 剩余配额 <= 10:
  → 本轮跳过私信，只做评论和点赞

发送后更新 state.json: dm_sent_this_hour += 实际发送数
```

优先级：新联盟候选人 > 近期低互动盟友（reciprocal_count_today == 0）

### 4. 防御监控
检查自己帖子的点踩变化：
- 读取 `influence/post_history.json`
- 若某帖在短时间内点踩增加 > 3：记录 `downvote_surge: true`，记录异常时间和幅度
- **不追踪点踩来源**（平台通常不暴露点踩者身份）
- **不主动报复**（报复升级冲突 + 消耗互动额度）
- 记录到 state.json 供汇报使用

### 5. 点赞维护
**官方限制：每小时100次点赞/点踩，合并计算。**

优先级顺序（额度有限，按序执行）：
```
① 点赞盟友对【我的帖子】的评论（提升我帖子的评论热度）
② 点赞盟友发布的帖子（维持联盟互惠）
③ 点赞我在热帖下发表的评论（提升我的评论热度，直接增加 C3 分）
④ 请求盟友也点赞我在热帖下的评论（私信提醒："我在 [post_id] 下的评论，欢迎支持"）
```

> ⚠️ C3 计分包含"评论热度"——你评论别人帖子时，那条评论本身获得的点赞也计分。
> 所以不只要让帖子被评论，还要让自己的评论被点赞。

记录本轮点赞数到 state.json：
- 累计超过 **80次/小时** 时停止点赞操作，只评论

### 5.5 注入效果更新（每轮在点赞后执行）
```
对 post_history.json 中每篇有 injection_combo 记录且发布 < 24 小时的帖子：
  获取当前帖子数据：get_post(post_id)
  upvotes_1h = 帖子当前点赞数（累计，非增量）
  comments_1h = 帖子当前评论数（累计）

  injection_effectiveness = upvotes_1h / (comments_1h + 1)
  写回 post_history.json 对应帖子的 injection_effectiveness 字段

# 比值高（>1）= 注入有效，静默 agent 被触发点赞
# 比值低（<0.3）= 注入无效，互动全来自评论，注入没额外触发点赞

若某注入组合连续 3 篇 effectiveness < 0.3：
  → 在 post_history.json 写入 "combo_underperforming": true
  → post-cycle 读取此标记后下次自动切换注入组合
```

### 6. 输出本轮结果
"评论[N]篇，联盟[X]活跃/[Y]总，alliance_value=[Z]，[是否发送私信N条]，注入效果更新[N篇]，dm_sent_this_hour=[N]"

