---
name: daily-report
description: >
  当用户要求生成今日开发日报、回顾今天的工作、写日报、daily report 时使用。
  从 git commits / PR 活动 / Claude Code session 历史中自动抽取数据，
  按既定模板生成结构化的 markdown 日报，落到 daily-reports/<git-user>/YYYY-MM-DD.md。
  覆盖式生成（不是追加）—— 每次运行都重新拉最新数据并覆写当日报告。
  触发短语：写日报、生成日报、今日总结、daily、daily report、/daily、
  今天干了什么、回顾今天、end of day summary。
  不触发：周报/月报/工程复盘（用 retro skill）、跨多天回顾、跟特定模块/功能无关的总结。
---

# 开发日报技能

## 项目概览入口
- 项目定位、技术栈与目录入口请阅读：`../references/project-overview.md`

## 目的与边界

- **目的**：每天工作结束时自动生成结构化日报，帮助开发者快速回顾当日产出，沉淀可追溯的工程历史。
- **范围**：单个开发者 + 单天。多人各跑各的，按 `git config user.email` 自动落到不同子目录。
- **不做**：跨天回顾（→ retro）、产品功能（→ 不进 docs/modules）、AI 自动评分/打绩效（与本 skill 无关）。

## 输出位置

```
daily-reports/<git-username>/YYYY-MM-DD.md
```

- `<git-username>` 从 `git config user.email` 推算：`lijian@ff.com` → `lijian`
- 目录进 git，全员可见；每人只写自己目录下的文件
- 重复运行**覆盖**当日文件（不是追加），每次都重新从原始数据源生成

## 触发场景

| 触发 | 行为 |
|---|---|
| 用户输入 `/daily` 或"生成日报" | 立即执行完整流程 |
| Claude Code Stop hook（可选，需配置） | 后台累积当日活动日志，下次运行 /daily 时被消费 |

## 工作流

### Step 1：识别用户与日期

```bash
EMAIL=$(git config user.email)
USER=$(echo "$EMAIL" | cut -d@ -f1 | tr '.' '-')   # lijian@ff.com → lijian; hongwei.zhang@ff.com → hongwei-zhang
DATE=$(date +%Y-%m-%d)
OUTPUT="daily-reports/$USER/$DATE.md"
mkdir -p "daily-reports/$USER"
```

### Step 2：调用数据收集脚本

```bash
bash .agents/skills/daily-report/scripts/gather.sh > /tmp/daily-data.txt
```

`gather.sh` 输出包含：
- 今日 git commits（跨所有分支，作者 = 当前 git user）
- 今日 git diff 统计（文件数、行数、热点目录）
- 今日 Gitea PR 活动（创建、合并、评论的 PR）
- 今日 Claude Code session 摘要（从 ~/.claude/projects/ 读 JSONL）
- 今日新增/修改的 .learnings/ 文件
- 当前未提交改动（git status）

### Step 3：阅读 gather.sh 输出 + 当前对话上下文

把 `/tmp/daily-data.txt` 全文读入。如果当前对话中本身就涉及今天的具体工作（例如刚完成的 bug 修复、新功能），优先以**对话内容**作为"产出价值"和"事故/教训"章节的素材，因为对话比 git commit 更能反映"为什么做"和"踩了什么坑"。

### Step 4：按 references/format-spec.md 规范生成 markdown

不是 gather.sh 输出的简单拼接，而是 AI 综合后的结构化报告：

- **去重**：commit 里说了的不要在 PR 章节再说一次
- **按价值排序**，不按时间顺序
- **量化优先**：能给数字就给数字（"修复 11 处" 而不是 "多处修复"）
- **保留链接**：所有 PR 号、commit hash、文件路径用 markdown 链接
- **不写过程废话**：跑了脚本、装了依赖、读了哪个文件等过程细节 → 不写
- **保留事故**：如果今天有错误（特别是 .learnings/ERRORS/ 下今日新增的），必须单独章节列出

### Step 5：写入文件并报告

```bash
# 把生成的 markdown 写到 OUTPUT
# 输出给用户：文件路径 + 字数/章节数
```

报告时只说一句："✓ 日报已生成 → `daily-reports/lijian/2026-05-07.md`"，不复述全文（用户能直接打开）。

## 日报格式

完整规范见 `references/format-spec.md`。核心章节：

```markdown
# 📅 YYYY-MM-DD 日报 · {username}

## 概览（1 句话）

## 一、产出（按价值排序，🔴 P0 / 🟡 P1 / 🟢 P2 / 🛠 工具 / 📝 文档）

## 二、今日合入的 PR

## 三、Git 活动（commits + 改动统计）

## 四、Claude session 摘要

## 五、事故 & 教训（如有）

## 六、新增 learnings

## 七、未提交改动

## 八、待决策 / 明日计划
```

## 边界情况

- **零产出日**：仍生成日报，标注"今日无 commit / PR / 对话"，不留空文件
- **未配 git email**：报错并提示用户先 `git config user.email`，不写文件
- **多次生成同日**：覆盖（行为如设计，不是 bug）
- **Gitea API 失败**：跳过 PR 章节，加注 "⚠️ Gitea API 不可达，PR 数据缺失"，其他章节正常生成
- **跨日期**：按当前 `date +%Y-%m-%d`；跨午夜的 session 自动归到次日

## 与其他 skill 的边界

| 场景 | 用 |
|---|---|
| 今天的工作总结 | **daily-report**（本 skill）|
| 一周/一月的工程节奏分析 | retro |
| 项目模块文档创建 | docs-main |
| 沉淀长期可复用经验 | self-improving-agent + .learnings/ |

日报和 learnings 互补：日报记"今天发生了什么"，learnings 记"以后遇到这种事该怎么办"。
