---
name: sotogoal-report
description: 从 SotoGoal（所及）的目标/任务/流转事件聚合进度，生成日报或周报。当用户要写日报、周报、进度汇报，或问"这周/今天做了什么、完成了什么、有什么风险"时使用。旧名 flowos-report。
---

# SotoGoal 日报/周报

纯编排层：用 SotoGoal API 拉数据 → 聚合 → 生成报告。API 契约与凭证见 `sotogoal` skill（同目录 `sotogoal-skill/SKILL.md`），CLI 用它随附的 `sotogoal.mjs`。

所需 scope：`tasks:read` + `goals:read`；把报告沉淀为知识条目另需 `notes:write`。

## 步骤 1：定范围

开始前和用户确认两件事（用户已说清就别再问）：

- **时间窗**：日报默认今天 00:00 → 现在（"昨天的日报" = 昨天整天）；周报默认本周一 00:00 → 现在。时间参数 After 含 / Before 不含，直接用 ISO 日期即可（如 `--done-after 2026-07-20 --done-before 2026-07-27` = 恰好一周）。
- **主体**：个人报告（事件用 `--actor me`）还是空间/团队报告（`--space <slug>`；设了默认空间的令牌可省略）。

## 步骤 2：拉数据

按需组合以下调用（互相独立，可并行）：

```bash
# 完成的任务(resolution=completed)
node sotogoal.mjs list task --done-after <A> --done-before <B>
# 新建的任务
node sotogoal.mjs list task --created-after <A> --created-before <B>
# 流转事件:关闭吞吐(含 dropped/duplicate)、开始、阶段推进
node sotogoal.mjs events --after <A> --before <B> [--space <S> | --actor me]
# 在办/受阻/逾期(从全量 open 任务里筛)
node sotogoal.mjs list task
# 目标与 KR 进度快照
node sotogoal.mjs list goal
```

从各数据源取什么：

- **完成** = `doneAfter/doneBefore` 窗口的任务。注意它只含 `resolution=completed`；放弃（dropped）/合并（duplicate）的关闭要从 events 里数（`to.state==="closed"` 按 `to.resolution` 分桶）。
- **开始** = events 里 `to.activity==="active"` 且 `from` 为 null 或 `from.activity!=="active"` 的任务。
- **阶段推进** = events 里 `from.stage !== to.stage` 的记录；同一任务在窗口内的多次推进串成路径（如 开发中→测试中→已上线）。
- **在办/受阻/逾期** = open 任务里 `activity==="active"`（在办）、`"paused"`（受阻，带上 `onHoldReason`）、`dueAt` 已过（逾期）。
- **目标进度** = goals 的 KR `current/target`。窗口内有完成任务的目标优先展示。
- 空间范围的 events 若返回 `403 feature_locked`（该空间未开通流程分析）：退化为只用任务列表聚合，报告里不出阶段推进/吞吐细节即可，不要报错中断。

## 步骤 3：聚合成报告

按此骨架写 markdown（按数据有无增删小节，空小节直接去掉）：

```markdown
## 概览
一两句话：本期完成 N 项、在办 M 项、风险 K 项，最值得说的一件事。

## 已完成
- #T203 标题 —— 一句话说明（有阶段路径/耗时亮点时带上）
（放弃/合并关闭的单独一行注明，别混进完成数）

## 进行中
- #T204 标题（当前阶段）

## 受阻与风险
- #T205 标题 —— 受阻原因 / 逾期天数

## 目标进度
- 🎯 目标名：KR「月活破万」5200/10000（本期 +800）

## 下期计划
（从在办 + 新建任务里挑，或问用户）
```

要求：数字一律从拉到的数据算，不要编；引用任务/目标一律写短号（`#T203`/`#G7`）——沉淀成知识后会自动变成可点击引用；报告语言跟随用户。

## 步骤 4：交付

先在对话里给用户看全文。用户确认后按需沉淀为知识条目（标题带日期，空间跟用户确认）：

```bash
node sotogoal.mjs create note --json '{"title":"周报 2026-W30","bodyMarkdown":"…","tagNames":["周报"],"spaceId":"<空间id或省略>"}'
```
