--- name: req-lookback description: 回归测试。部署后自动验证变更涉及的功能是否正常。可独立调用或由 /req done 自动触发。 --- # 回归测试 (lookback) 对本次部署变更的功能执行自动化验证。 ## 执行流程 ### 1. 获取变更文件列表 ```bash # 优先从最近合并的 PR 获取(覆盖 merge 多 commit 场景) gh pr list --state merged --base main --limit 1 --json number,files # 回退:git diff git diff HEAD~1..HEAD --name-only ``` ### 2. 自动发现验证项(动态推断) 读取变更文件,按类型推断需要验证什么: | 文件类型 | 推断方式 | 验证命令 | |----------|---------|---------| | `*.vue` / `*.tsx` | grep router 配置,提取对应路由路径 | `curl -sf -o /dev/null -w "%{http_code}" ${SERVER}${ROUTE}` | | `app/api/*.py` | grep 路由装饰器 `@router.get/post`,提取 API 路径 | `curl -sf -o /dev/null -w "%{http_code}" ${SERVER}/api${PATH}` | | `app/services/*.py` | 找到引用该 service 的 api 文件,提取关联 API | 同上 | | `nginx.conf` | 提取 location 块 | `curl` 各路径检查状态码 | | `docker-compose.yml` | 提取服务列表 | `docker ps` 检查容器状态 | | `alembic/*.py` | 提取表名 | `psql -c "\d table_name"` | | `*.md` / `*.txt` / `SKILL.md` | 纯文档 | **N/A(自动通过)** | | `*.css` / `*.scss` | 纯样式 | 轻量验证:页面可达即可 | ### 3. 执行验证 **远端模式**(SSH 可达时): ```bash # 3 秒超时检测 ssh -o ConnectTimeout=3 ${EC2_USER}@${EC2_HOST} "echo ok" 2>/dev/null # 成功 → 执行完整验证(docker ps + curl + docker logs) ``` **降级模式**(SSH 不可达时): ```bash # 检查最近 CI run 是否成功 gh run list --repo ${OWNER}/${REPO} --limit 1 --json conclusion # conclusion=success → PASS ``` ### 4. 输出报告 ```markdown ## 回归测试报告 ### 变更范围 | 文件 | 类型 | 推断的验证项 | ### 测试结果 | 测试项 | 方式 | 预期 | 实际 | 状态 | ### 结论: ✅ PASS / ❌ FAIL / N/A ``` ### 5. 失败处理 ``` ⚠️ 回归测试失败:{失败项描述} 建议操作: 1. [回滚] git revert HEAD~1 + /req deploy(推荐,影响最小) 2. [修复] 创建 hotfix 分支修复后重新部署 3. [忽略] 标记为已知问题,继续归档 输入 1/2/3: ``` - 选 1 → 执行 `git revert`,提示用户运行 `/req deploy` - 选 2 → 创建 hotfix 任务(ai-proj create_task),阻断归档 - 选 3 → 记录到报告,继续 ## 任务关联 - linkRole: `test` - 任务标题: `【回归】回归测试: {需求标题}` - 报告附加到任务文档