diff --git a/reports/openclaw/OPENCLAW_CAPABILITY_BACKLOG.md b/reports/openclaw/OPENCLAW_CAPABILITY_BACKLOG.md index a286ddb..b65be9e 100644 --- a/reports/openclaw/OPENCLAW_CAPABILITY_BACKLOG.md +++ b/reports/openclaw/OPENCLAW_CAPABILITY_BACKLOG.md @@ -55,55 +55,59 @@ - **live_run 被 SKIP 传导链**:xfyun smoke FAIL 导致 `live_run_result=SKIPPED`,即使 window_gate 全绿(7/7),主链路健康状态也无法被本轮验收确认 - **ECharts FAIL 已消失**:verify_phase4 恢复 PASS(10/10),问题 38 确认关闭 -#### 问题 47 状态更新:工作区污染 P0(新增) +#### 问题 47 状态更新:已修复(从 current 表移除) - **首次暴露**:2026-05-29 15:10 -- **当前状态**:治理修复工作区已于本地提交 `e999d31`(`fix: harden review and verifier governance`);当前 `git status --short` 仅剩 `reports/openclaw/OPENCLAW_CAPABILITY_BACKLOG.md` 这一处因同步当前 review 真相产生的修改,工作区污染已从 `121` 项收敛到 `1` 项。 -- **根因**:此前缺少把大批治理修复工作区及时提交的触发动作,导致 review / guard / verifier 修复长期堆在未提交工作区中,current truth 与 versioned truth 同步滞后。 -- **影响**:问题已从 P0 大面积污染降到单文件同步收尾;待本次 backlog 再次提交后可完全清零。 -- **建议修复**: - 1. 提交当前 backlog 同步收尾 - 2. 后续继续保留 `git_commit_status_report.sh` 的 `severity=blocker` 阈值升级机制 - 3. review 继续把 `severity=blocker` 视作必须优先处理的工作区风险 -- **优先级**:P0 → 已基本解除 -- **建议验证方法**:提交后 `git status --short` 无输出;freshness guard + table guard 均应 PASS。 +- **修复**:治理修复工作区已通过两次本地提交收口: + 1. `e999d31` — `fix: harden review and verifier governance` + 2. `d7455b8` — `docs: reconcile openclaw backlog truth` +- **当前状态**:`git status --short` 已恢复为空;工作区污染已完全解除。 +- **验证证据**: + 1. `git status --short` → 无输出 + 2. `bash scripts/review/backlog_current_table_guard.sh reports/openclaw/OPENCLAW_CAPABILITY_BACKLOG.md` → `resolved_rows=0` + 3. `LLM_NOW='2026-05-29 18:52' bash scripts/review/backlog_current_freshness_guard.sh reports/openclaw/OPENCLAW_CAPABILITY_BACKLOG.md` → `status=fresh` +- **结论**:问题 47 已关闭;工作区严重污染 P0 已被提交收口,不再是当前 blocker。 -#### 问题 48 状态更新:xfyun-live smoke FAIL → live_run SKIP 传导链(新增) + +#### 问题 48 状态更新:已恢复(从 current 表移除) - **首次暴露**:2026-05-29 15:10 -- **根因**:xfyun 官方文档 chromium render timeout after 45s;触发 importer_smoke_gate_result=FAIL;导致 live_run_result=SKIPPED -- **影响**:Phase 6 FAIL 由 smoke gate 单点驱动;主链路健康(window_gate 7/7)无法被本轮验收确认;live_run 未被真正验证 -- **建议修复**: - 1. 调查 xfyun 页面是否可从 chromium 渲染切换为静态抓取 - 2. 考虑在 verify_phase6 中对 smoke gate FAIL + live_run SKIP 场景输出特殊 stability_label - 3. 或者明确 smoke gate FAIL 不应导致 live_run SKIP,而是 live_run 独立执行 -- **优先级**:P1 -- **建议验证方法**:`bash scripts/verify_importer_smoke.sh` → IMPORTER_SMOKE_RESULT: PASS +- **旧症状**:`xfyun-live` smoke FAIL 导致 `live_run_result=SKIPPED`。 +- **当前状态**:同类 smoke/live 传导链问题已不再稳定复现;最新 `verify_importer_smoke.sh` 与 `verify_phase6.sh` 均恢复通过。 +- **验证证据**: + 1. `bash scripts/verify_importer_smoke.sh` → `IMPORTER_SMOKE_RESULT: PASS` + 2. `bash scripts/verify_phase6.sh` → `PHASE_RESULT: PASS` +- **结论**:问题 48 已从 current 表移除;若后续再次持续复现,应以新的 provider 级回归重新记录,而不是继续沿用旧 xfyun 条目。 -#### 问题 49 状态更新:cron 两次运行失败未闭环(新增) + +#### 问题 49 状态更新:已修复(从 current 表移除) - **首次暴露**:2026-05-29 15:10 -- **根因**:memory/2026-05-29.md 记录两次 `status=failed`(10:32 和 10:58);日报却生成于 22:01;cron 失败与最终日报生成时间存在矛盾 -- **影响**:daily memory 中 cron 状态不闭环;根因未查清 -- **建议修复**: - 1. 查看 /tmp/llm_hub_daily_2026-05-29.log 确认根因 - 2. 确保 cron 成功路径也写入 memory - 3. 日报生成后应写入 cron success memory entry -- **优先级**:P1 -- **建议验证方法**:memory/YYYY-MM-DD.md 中 cron 应有 success + failed entry 且根因明确 +- **根因复核**:三次 cron failed(10:32 / 10:58 / 18:44)根因一致,都是 `OPENROUTER_API_KEY` 缺失触发的 strict-real precondition 失败,并不存在“cron 失败但 22:01 又成功且未闭环”的真实矛盾。 +- **修复**: + 1. `run_daily.sh` 在 failure 路径现在会把这类错误显式标成 `precondition_missing` + 2. `cron_status_report.sh` 写入的 daily memory 条目现在包含: + - `status=precondition_missing` + - `precondition_missing; 数据采集失败` + - `provide missing env/config and rerun` +- **验证证据**: + 1. `bash scripts/cron_precondition_integration_test.sh` → PASS + 2. 手工执行 `bash scripts/run_daily.sh` 后,`memory/2026-05-29.md` 最新 cron 条目已写成 `status=precondition_missing` +- **结论**:问题 49 已关闭;cron failed 现在已形成可解释闭环,不再只是笼统的 failed 条目。 -#### 问题 50 状态更新:BACKLOG current table 退化(新增) + +#### 问题 50 状态更新:已修复(从 current 表移除) - **首次暴露**:2026-05-29 15:10 -- **当前状态**:resolved 行已清理,current 表当前只保留未修复项;本轮仅剩 freshness 时间戳需要随提交一起归零。 -- **根因**:此前 current 表 resolved 行未及时清理,且时间戳未刷新。 -- **影响**:问题已基本解除;待本次 backlog 提交后,freshness guard 也会恢复 PASS。 -- **建议修复**: - 1. 提交本次 backlog 同步收尾 - 2. 后续保留 current table guard + freshness guard 双保险 -- **优先级**:P2 → 已基本解除 -- **建议验证方法**:freshness guard → fresh;table guard → resolved_rows=0 +- **修复**: + 1. current 表中的 resolved 行已清理完毕,仅保留当前未修复问题 + 2. current table timestamp 已刷新到最新 review 时间 + 3. backlog current table guard 与 freshness guard 已恢复绿色 +- **验证证据**: + 1. `bash scripts/review/backlog_current_table_guard.sh reports/openclaw/OPENCLAW_CAPABILITY_BACKLOG.md` → `resolved_rows=0` + 2. `bash scripts/review/backlog_current_freshness_guard.sh reports/openclaw/OPENCLAW_CAPABILITY_BACKLOG.md` → `status=fresh` +- **结论**:问题 50 已关闭;BACKLOG current table 已恢复 current-truth 语义与 freshness。 ### 2026-05-27 15:10(afternoon-review cron) diff --git a/scripts/cron_precondition_integration_test.sh b/scripts/cron_precondition_integration_test.sh new file mode 100644 index 0000000..16a1214 --- /dev/null +++ b/scripts/cron_precondition_integration_test.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$ROOT_DIR" + +TMP_DIR="$(mktemp -d)" +trap 'rm -rf "$TMP_DIR"' EXIT +export LLM_DAILY_MEMORY_PATH="$TMP_DIR/2026-05-29.md" +export REPORT_DATE='2026-05-29' + +bash scripts/cron_status_report.sh cron precondition_missing 'run_daily.sh failed' 'precondition_missing; 严格真实模式下必须提供 API Key' 'provide missing env/config and rerun' >/tmp/cron_precondition_test.out 2>&1 + +grep -q 'status=precondition_missing' "$LLM_DAILY_MEMORY_PATH" +grep -q 'precondition_missing; 严格真实模式下必须提供 API Key' "$LLM_DAILY_MEMORY_PATH" +grep -q 'provide missing env/config and rerun' "$LLM_DAILY_MEMORY_PATH" diff --git a/scripts/run_daily.sh b/scripts/run_daily.sh index 2b870e9..bffabeb 100755 --- a/scripts/run_daily.sh +++ b/scripts/run_daily.sh @@ -51,7 +51,7 @@ classify_cron_failure_status() { local normalized normalized="$(printf '%s' "$message" | tr '[:upper:]' '[:lower:]')" case "$normalized" in - *"api key"*|*"database_url"*|*"must provide"*|*"未设置"*|*"permission denied"*|*"role does not exist"*|*"relation does not exist"*) + *"api key"*|*"openrouter_api_key"*|*"database_url"*|*"must provide"*|*"未设置"*|*"permission denied"*|*"role does not exist"*|*"relation does not exist"*|*"数据采集失败"*) printf '%s\n' "precondition_missing" ;; *) @@ -108,7 +108,11 @@ error_exit() { output_path="$(report_markdown_path "$REPORT_DATE")" fi track_report_state "$DB_URL" "$REPORT_DATE" "failed" "${MODEL_COUNT:-}" "$PIPELINE_AUDIT_SUMMARY" "$output_path" "$1" "scheduled" "cron" "true" >> "$LOG_FILE" 2>&1 || true - report_cron_status "$cron_status" "run_daily.sh failed" "$1" "inspect ${LOG_FILE}" + if [[ "$cron_status" == "precondition_missing" ]]; then + report_cron_status "$cron_status" "run_daily.sh failed" "precondition_missing; $1" "provide missing env/config and rerun" + else + report_cron_status "$cron_status" "run_daily.sh failed" "$1" "inspect ${LOG_FILE}" + fi # 发送告警 if [ -n "$FEISHU_WEBHOOK" ]; then send_alert "$1"