Commit Graph

277 Commits

Author SHA1 Message Date
64ed534426 Merge pull request 'fix(rules): v1.3.1 Phase 1 修复规则层三处缺陷' (#33) from fix/v1.3.1-phase1-rule-bugfixes into main
All checks were successful
CI / test (push) Successful in 4m4s
Reviewed-on: #33
2026-08-25 10:22:52 +00:00
sinohqb
c1a3cdbaa9 fix(rules): 修复代码审查发现的三处规则层缺陷
All checks were successful
CI / test (pull_request) Successful in 4m5s
- response_time: 仅配置 max_ms 时恢复 v0.3 评分语义(最后一轮评分 + 超限线性惩罚),扩展指标共存时才用均值评分
- safety: 移除 moderation API 的黑名单命中跳过守卫,两层安全检查独立执行、发现均上报
- llm_score: 多维度评分添加 Semaphore 并发上限(5),防止维度数多时无限扇出模型请求
2026-08-25 18:13:11 +08:00
e7e3716325 Merge pull request 'feat: 用户体验指标(放弃率+流畅度评估)' (#32) from feat/user-experience-metrics into main
All checks were successful
CI / test (push) Successful in 4m9s
2026-08-25 08:40:45 +00:00
d27ed58999 Merge pull request 'feat: 成本效率跟踪基础设施' (#31) from feat/cost-tracking into main
Some checks are pending
CI / test (push) Waiting to run
2026-08-25 08:40:28 +00:00
sinohqb
21cc6ed407 feat: 用户体验指标(放弃率+流畅度评估)
All checks were successful
CI / test (pull_request) Successful in 4m11s
新增用户体验跟踪能力。

- RunSummary 新增 abandoned_cases 和 abandonment_rate 字段
- 新增 fluency 规则:LLM 评估对话流畅度和自然性(0-10 分)
- 流畅度评估考虑:自然性、重复性、连贯性、响应质量
- 新增 10 项单元测试(676 tests passed)

注:放弃率的实际计算逻辑需要在引擎中集成,本 PR 提供数据模型和规则基础设施。

Closes #26
2026-08-25 16:36:28 +08:00
sinohqb
56c56a7b4a feat: 成本效率跟踪基础设施
All checks were successful
CI / test (pull_request) Successful in 4m9s
新增成本跟踪模块,为对话级和任务级成本计算提供基础。

- Turn 模型新增 prompt_tokens、completion_tokens、total_tokens 字段
- OpenAI 协议适配器新增 parse_usage() 提取 token 使用量
- 新增 evaluation/cost_tracking.py 模块:
  - ModelPricing:模型定价配置
  - TokenUsage:token 使用量聚合
  - CostBreakdown:成本明细
  - calculate_cost():根据 token 使用量和定价计算费用
  - calculate_turn_cost()、calculate_case_cost()、calculate_run_cost()
- 内置常见模型定价(GPT-4o、GPT-4o-mini、Claude 等)
- 新增 11 项单元测试(677 tests passed)

注:引擎集成(实际捕获 API 调用的 token 使用量)留待后续实现。

Closes #25
2026-08-25 16:07:08 +08:00
2c79abf1de Merge pull request 'feat(safety): 扩展规则覆盖幻觉、越权和合规检查' (#30) from feat/safety-extended into main
All checks were successful
CI / test (push) Successful in 4m7s
2026-08-25 08:02:05 +00:00
eb615c6522 Merge pull request 'feat(response_time): 支持平均延迟和吞吐量指标' (#29) from feat/response-time-extended into main
Some checks failed
CI / test (push) Has been cancelled
2026-08-25 08:01:44 +00:00
sinohqb
192fe0fc5f feat(safety): 扩展规则覆盖幻觉、越权和合规检查
All checks were successful
CI / test (pull_request) Successful in 4m2s
扩展 safety 规则,新增三个安全检查维度。

- 幻觉检测(check_hallucination):LLM 判断回答是否编造事实
- 越权操作检测(unauthorized_actions):模式匹配检测越权行为
- 合规性检查(required_disclaimers):检查必需声明是否存在
- 保持原有 blacklist + moderation API 向后兼容
- RuleResult.details 包含所有问题列表
- 新增 10 项单元测试(656 tests passed)

Closes #22
2026-08-25 15:30:00 +08:00
sinohqb
737c9ab80e feat(response_time): 支持平均延迟和吞吐量指标
All checks were successful
CI / test (pull_request) Successful in 4m6s
扩展 response_time 规则,支持多维度延迟和吞吐量测量。

- 新增 avg_latency_max_ms:多轮对话平均延迟阈值
- 新增 throughput_min:最低吞吐量(turns/min)
- 保持 max_ms 向后兼容(单轮延迟阈值)
- RuleResult.details 包含延迟统计(avg/min/max/latencies)
- 新增 10 项单元测试(656 tests passed)

注:首字延迟(first token latency)需要流式数据支持,当前 Turn 模型未提供,留待后续增强。

Closes #21
2026-08-25 15:03:54 +08:00
2f08e7bf06 Merge pull request 'feat(report): 上线验收报告 go/no-go 结论' (#28) from feat/go-no-go-verdict into main
All checks were successful
CI / test (push) Successful in 4m6s
2026-08-25 06:31:42 +00:00
a894ed7179 Merge pull request 'feat(llm_score): 支持多维度独立评分' (#27) from feat/llm-score-multi-dimension into main
Some checks are pending
CI / test (push) Waiting to run
2026-08-25 06:31:33 +00:00
sinohqb
2314ebe3bc feat(report): 上线验收报告 go/no-go 结论
All checks were successful
CI / test (pull_request) Successful in 4m7s
新增纯函数模块 evaluation/go_no_go.py,基于 RunSummary 指标自动生成
go/no-go/conditional 三级结论。

- AcceptanceCriteria 模型:judged_pass_rate_min、pass_rate_min、avg_latency_max_ms
- GoNoGoVerdict 模型:decision、summary、criteria_results
- evaluate_go_no_go() 纯函数:接收 summary dict + criteria -> 返回 verdict
- 集成到 generate_report(),报告 dict 自动附带 go_no_go 字段
- 三级结论:go(全部达标)、no_go(核心未达标)、conditional(有风险)
- 新增 9 项单元测试(642 tests passed)

Closes #20
2026-08-25 14:28:55 +08:00
sinohqb
5827c3d3f5 docs(research): go/no-go 验收报告技术方案调研
调研现有报告生成能力(Run/Campaign/IntelligentEval 三套管线),
分析 go/no-go 结论的实现路径:纯函数判定核心 + 三级阈值配置 +
渐进式交付。估算总工作量 8 人天,推荐分阶段实施。

Refs: #20
2026-08-25 14:22:54 +08:00
sinohqb
a29f78ff4b feat(llm_score): 支持多维度独立评分
All checks were successful
CI / test (pull_request) Successful in 4m9s
扩展 llm_score 规则,支持通过 dimensions 参数配置多个评分维度,
每个维度独立评分 0-10 分。

- RuleResult 新增 details 字段存储结构化多维度分数
- 向后兼容:原有 criteria 单维度模式继续有效
- 多维度模式下各维度并行调用 LLM,返回平均分和明细
- 新增 4 项单元测试

Closes #19
2026-08-25 14:17:49 +08:00
sinohqb
0d074e5465 test(runs): 取消测试扩至 30 case 适配并发执行
All checks were successful
CI / test (push) Successful in 4m3s
case 并行(默认 3)后原 5 case 场景在取消请求到达前就跑完,
取消语义不再被观测到。扩到 30 case(10 波)保证取消窗口充分。
2026-08-24 23:38:53 +08:00
sinohqb
bd6efc3709 chore: bump version to 1.3.0
架构深化(两轮审查候选落地)+ 性能优化(WAL/索引/N+1 消除/并发执行)
发布。CHANGELOG 登记 1.3.0 变更。
2026-08-24 23:36:08 +08:00
sinohqb
9f5da70c36 docs: 归档 2026-08-24 全面代码库健康审查报告
八个候选中 1-7 已在 3705945 落地(Campaigns.tsx 拆分、repository/db
按域拆包、lifecycle 拆分、编排下沉、工具函数收敛、测试补全);
候选 8(Engine/Storage 解耦)与两处 _translate 副本经核对语义刻意
不同,登记为刻意不做。
2026-08-24 23:18:23 +08:00
sinohqb
bf1ec16ef6 perf(eval): case/rule/campaign 并发执行
- EvalEngine case 循环改 asyncio.gather + semaphore(默认 3 并发)
- 规则评估并行(默认 5 并发),LLM 评分耗时从串行求和降为最慢一条
- _resolve_model 改 async + 双重检查锁,保护共享模型缓存
- _case_errors / case_outcomes 并发写入加状态锁
- Campaign occurrence 派生并行(默认 2 并发),claim 拒绝时提前收敛
- 新增配置:max_concurrent_cases=3 / max_concurrent_rules=5 / max_concurrent_runs=2

SQLite StaticPool 单连接下 DB 写入仍天然串行,并行收益集中在
channel I/O 与 LLM 调用的等待重叠。
2026-08-24 23:18:11 +08:00
sinohqb
ca208232c7 perf(db): WAL 模式 + 性能索引 + N+1 查询消除
- SQLite 启用 WAL,允许读写并发
- 新增 6 个索引(eval_runs.status/campaign_id、eval_results.run_id、
  turns.run_id、intelligent_evals.status、task_queue.assigned_at)
- 幂等 Alembic 迁移(列/索引存在性检查)
- domain.py 计数改 func.count 聚合,get_attention_reason 单次加载 sessions
- scenario list_all 批量加载 bindings(1+N → 2 查询)
- mark_orphans_failed 批量加载 campaigns(N → 1 IN 查询)
2026-08-24 23:17:51 +08:00
sinohqb
f8f87815c6 docs: 归档 2026-08-24 代码重构总结报告
总结 8 个架构深度化候选(7 执行 + 1 跳过)和完整测试覆盖补全:
- 前端 107→232 passed(+125)
- 后端 916→963 passed(+47)
- 后端覆盖率 91%→92%
- files.py 79%→100%,scheduler.py 75%→91%
- websocket.py 60%→100%,target repository 50%→100%

总计 172 个新测试用例,81 个文件变更。
2026-08-24 17:51:10 +08:00
sinohqb
90ebbd5ff4 test(scheduler): 补全触发失败落账与错误路径测试(+9 用例)
覆盖 scheduler.py 中等难度边缘分支:
- _trigger_openclaw_agent 非零退出码 → on_failure 回调
- _trigger_openclaw_agent subprocess 异常 → on_failure 回调
- _record_worker_trigger_failure 成功/跳过/DB 异常兜底
- _record_planner_trigger_failure 成功/跳过/DB 异常兜底
- _fire_and_forget cancelled task 不记录异常

scheduler.py 覆盖率 75% → 81%
后端总计 963 passed
2026-08-24 17:18:52 +08:00
sinohqb
3705945a7d test: 完整测试覆盖补全(+163 用例)
架构重构(候选 1-6):
- storage/repository.py 按域拆分为包(target/scenario/run/campaign/result)
- storage/db.py 按域拆分为包(eval/campaign/file/model_config/intelligent_eval)
- intelligent_eval/lifecycle.py 按状态机阶段拆分为包
- services/runs.py 编排逻辑下沉
- Campaigns.tsx 拆分为 campaigns/ 子组件

测试补全(候选 7):
前端(+125 用例,107→232):
- utils/ 纯函数:date/campaignTime/ruleLabels/fileTree/fileFormat/colors
- stores/tabStore 状态管理
- 核心组件:FormDrawer/PageWrapper/ChatBubble/GeneratedMessages/SectionHeader/StatCard/TurnList
- 业务组件:CaseBlock/CaseDetail/RuleOverview/WindowTimeline/RunList/TabBar/CampaignRunTimeline
- 文件管理:FileCategoryTree/FileTable
- hooks:sessionReducer/useFiles/useRunSession

后端(+38 用例,916→954):
- targets API CRUD + 404 路径
- WebSocket 连接管理器
- proxy 头部重写(CSP/X-Frame-Options)
- target 仓储 update 方法
- app 健康检查 + SPA 404
- scenarios 模板端点 + 404
- files API 边缘分支(404 场景 + 500 兜底)
- files service update_category
- 智能评估状态机迁移测试

门禁状态:
- 前端:tsc 干净 + 232 passed
- 后端:954 passed + ruff 全绿
2026-08-24 15:56:09 +08:00
sinohqb
9588dcbfda docs: 归档 2026-08-24 架构审查报告(Phase 5)
All checks were successful
CI / test (push) Successful in 3m22s
将本轮架构审查 HTML 报告按先例归档至 docs/archive/,并同步
登记 docs/README.md 与 docs/archive/README.md 索引。

本轮五个深化候选已全部落地:
- 候选① 智能作业结算统一(ADR-0012)
- 候选② 可见性接缝(require_live_eval 单一接缝)
- 候选③ storage/repository.py 拆分
- 候选④ 前端 ReadSlot 资源接缝
- 候选⑤ api.ts 拆分为 10 个域模块

刻意不做项(CAS 共享原语、db.py 拆分、app.py 关停顺序归一、
会话/任务状态机转换表)已在 v3 计划与 ADR-0012 中记录。
2026-08-24 05:54:54 +08:00
sinohqb
4534df7e7a test: 五个零覆盖组件补全测试(Phase 4.23)
锁定 Phase 4 读取接缝收敛后的纯渲染与关键交互契约;五个组件
此前从未被 vitest 覆盖,现全量补齐(25 个测试)。

- DecisionProcess(6):加载/空态/详情展开/上下文 JSON 折叠、
  轮询门控(executing 轮询、completed 停轮询)、补充日志触发。
- EvalOverview(6):planning / pending_approval / executing
  三种状态的渲染分支;plan 维度/虚拟用户/时间分布/完成标准;
  会话进度与过期文案。
- EvalReport(4):报告加载/空态、会话折叠、SessionMessages
  懒加载、Markdown 导出(downloadBlob 接缝)。
- ConfigSnapshots(4):列表与类型标签、详情展开、快照对比
  两选一校验、空态与差异渲染。
- TaskQueueMonitor(5):统计芯片、状态过滤、刷新按钮、
  轮询定时器(vi.useFakeTimers + advanceTimersByTimeAsync)、
  空态。

测试沿用 sessionReducer 先例:vi.mock 工厂注入 readSlot /
API 方法,按 reducer 形状构造 fixture;antd 双汉字按钮
(详情/导出/查看)使用 /\s*/ 正则匹配 autoInsertSpace 空格。
2026-08-24 05:54:28 +08:00
sinohqb
eca7ccebe2 refactor(api): api.ts 拆分为 10 个域模块(Phase 4.22)
909 行的单文件 api.ts 按域拆为 10 个模块 + 共享 client;barrel
保持 import from '../api' 不变,调用点零改动。

- api/client.ts:axios 实例 + 拦截器 + authToken + setOnUnauthorized
  (唯一住处)。
- 10 个域模块:auth / targets / scenarios / modelConfigs / runs /
  reports / stats / campaigns / intelligentEvals / files,每个
  自包含类型声明与 API 方法。
- api/index.ts:barrel 再导出,调用点 import 路径全部不变。
- 原 api.ts 中的 Blob 导出仪式已在 Commit 4 下沉至
  utils/download.ts,本 commit 仅做拆分与搬运。
2026-08-24 05:53:45 +08:00
sinohqb
f458897ab5 refactor(read): 前端泛化 ReadSlot 资源接缝(Phase 4.18-21)
将 src/read 从单一消费者扩展为通用资源接缝;drawer 标签页与
useCampaignReport / useFiles 统一消费;导出仪式下沉至工具函数。

- 新增 readResource.ts:ReadSlot<T> 相位机(idle/loading/
  refreshing/ready/error)、requestId 竞态守卫、静默刷新、
  可注入 adapter;SelectedReadSlot<T> 支持 list→detail 的
  stale-response rejection。配套 characterization 测试。
- evalActivity.ts / useIntelligentEvalRead.ts 退化为 readResource
  的特化;既有测试保持通过。
- DecisionProcess / ConfigSnapshots / TaskQueueMonitor 删除手写
  fetch 样板(useState + try/catch + useEffect 三件套),改走
  资源接缝;ExecutionProcess 的 5 个 fetch 槽同步收敛。
- 决策日志新鲜度归一:三种策略(父级 5s 详情轮询 +
  ExecutionProcess 独立 5s 轮询 + DecisionProcess 挂载取一次)
  收敛为父级 evalActivity 单一供给,子组件消费同一份数据。
- useCampaignReport 删除私有 ReadPhase / ReadSlot 定义,改
  import 自 readResource。
- ACTIVE_STATUSES 合并至 read/intelligentEval.ts 单一出口。
- 新增 utils/download.ts:downloadBlob / downloadJson 取代 api.ts
  与 useFiles 中三处重复的 Blob 导出仪式(含 DOM 副作用迁出
  接口定义出口)。
2026-08-24 05:51:53 +08:00
sinohqb
7eae6de52d refactor(evaluation/storage): 结算统一与 repository 拆分(Phase 2 + 3)
合并两个不可分割的深化:

Phase 2 — 智能作业结算统一(ADR-0012)
- intelligence_jobs.execute(job_kind, campaign_id, ...) 作为结算的
  唯一实现:建行 → 认领 → 校验 → generating → 落账,一处编排、
  一处截断(500 字符)。两个 executor 退化为 ensure_queued /
  validate / work_fn 三个小 adapter。
- analysis.validate_analysis_request() 共享校验入口(活动终态 →
  模型),路由捕获映射 400、executor 捕获落 failed 行,与
  validate_comparison_request 先例同构。
- campaign_runner._auto_start_analysis 的跳过守卫收敛至
  auto_intelligence_eligible 单一判断点。
- comparison.py 删除零调用的 build_comparison_payload;
  load_comparison_view 投影归位至 campaign_read_model。
- 新增 characterization 测试(认领竞争、重复触发、截断、恢复上限)。

Phase 3 — storage/repository.py 拆分
- AsyncJobRepository 及两个子类迁至
  storage/async_job_repository.py(Phase 2 的 intelligence_jobs
  与 comparison 必须 import 自该路径,故与 Phase 2 同 commit)。
- ExplorationSession / ExplorationMessage 迁至
  storage/exploration_repository.py;repository.py 由 1180 行降至
  约 814 行,grep 确认无残留符号。
- exploration 子模块与路由 import 全部更新;测试 import 跟随。

刻意不做:CAS 共享原语、app.py 五 registry 关停顺序归一
(ADR-0006 精神,等真实需求出现再议)。
2026-08-24 05:50:27 +08:00
sinohqb
71543f042a refactor(intelligent-eval): 可见性接缝收敛(Phase 1)
将「已删即 404」语义收进 IntelligentEvalRepository 单一接缝,消除三处独立裁决;
任务监控开始隐藏已删评估的任务(本 Phase 唯一刻意行为变化)。

- repository.py 新增 visible() 谓词与 require_live_eval() 服务接缝;
  六处裸谓词统一走它,get()/get_including_deleted() 语义不变。
- decision_logs.py 删除本地 _require_eval,三处调用迁至 repository 接缝;
  count_decisions 由 len(.all()) 改为 func.count。
- task_queue.py list_tasks 与 stats 过滤已删评估的任务(行为变化)。
- web/routers/intelligent_evals.py: _require_eval_exists → _require_live_eval,
  把 LookupError 翻译为 404;expired 会话 Markdown 标注下沉至
  read_model.report_markdown_by_eval;配置快照 11 字段序列化收至
  config_snapshot.snapshot_to_dict 单一出口。
- AGENTS.md 登记可见性纪律(已知陷阱 #6)。
- 补 characterization 测试锁定四处契约;更新 task_queue 测试以使用
  真实 eval_id(可见性过滤后字面 eval_id 不再可见)。
2026-08-24 05:47:00 +08:00
sinohqb
913dc9ae86 perf: address remaining heuristic issues from code review
All checks were successful
CI / test (push) Successful in 3m18s
- decision_logs.py: add LIMIT 100 to dedup query to avoid loading all records
- ExecutionProcess.tsx: document N+1 API pattern and explain why acceptable
- scheduler.py: document why scan_once runs synchronously (thread pool would break fire-and-forget)

All 880 tests pass.
2026-08-24 02:01:04 +08:00
sinohqb
5a81c570c0 style: fix ruff whitespace warnings
All checks were successful
CI / test (push) Successful in 3m16s
2026-08-24 01:53:35 +08:00
sinohqb
09ff2ed123 refactor(intelligent-eval): reduce nesting complexity in supplement_decision_logs
Extract helper functions _supplement_executing and _supplement_completed
to flatten the nested conditional logic. This improves readability and
makes the code easier to test and maintain.

Addresses code review finding: supplement_decision_logs nested complexity
2026-08-24 01:53:15 +08:00
sinohqb
da7dd434dd perf(intelligent-eval): 修复 N+1 查询和参数名混淆
- expire_stale_running_sessions: 使用单次 JOIN 查询替代 N+1 查询
  将每个会话单独查询最后消息时间改为一次性获取所有 running 会话及其最后消息时间

- submit_report/evals_needing_analyst_nudge: 消除 session/sessions 参数名混淆
  将局部变量 sessions 重命名为 eval_sessions,避免与数据库会话参数 session 混淆

这些改进提升了查询性能并增强了代码可读性。
2026-08-24 01:52:05 +08:00
sinohqb
84627a3c6a refactor(intelligent-eval): 消除 lifecycle.py 和 scheduler.py 中的重复延迟导入
All checks were successful
CI / test (push) Successful in 3m16s
- 将延迟导入移至模块顶部,消除 Shotgun Surgery 气味
- lifecycle.py: 移除 41 行重复导入
- scheduler.py: 移除 14 行重复导入
- 修复测试:更新 monkeypatch 以补丁 scheduler 模块的引用而非原始模块
- 符合代码规范:避免函数内重复导入

Closes code-review finding: repeated deferred imports (Shotgun Surgery)
2026-08-24 01:47:47 +08:00
sinohqb
876d75f9ed refactor(intelligent-eval): 将 _get_raw 改为公开方法 get_including_deleted
All checks were successful
CI / test (push) Successful in 3m22s
- 消除 lifecycle.delete_eval 对私有方法的访问
- 明确该方法用于删除幂等性检查的用途
- 符合代码规范:避免跨模块访问私有接口
2026-08-24 01:37:58 +08:00
sinohqb
7db75be707 fix(ui): 评估列表默认分页改为 20,符合 ADR-0005
All checks were successful
CI / test (push) Successful in 3m27s
- 将 pageSize 默认值从 10 改为 20
- 遵循 ADR-0005 "超过 20 行才分页(pageSize 20)" 规范
2026-08-23 13:32:00 +08:00
sinohqb
5f116700d7 fix(ui): move eval delete to drawer header to stop row click opening detail
All checks were successful
CI / test (push) Successful in 3m23s
2026-08-21 17:01:39 +08:00
sinohqb
8021eab65e feat(ui): live running-session cards in intelligent-eval execution view 2026-08-21 16:13:27 +08:00
sinohqb
2d2c5a2904 feat(intelligent-eval): logical delete for terminal evals
All checks were successful
CI / test (push) Successful in 3m24s
Add `deleted` terminal status: completed/cancelled/failed → deleted via
DELETE /api/intelligent-evals/{id} (idempotent, 409 for non-terminal).
Deleted evals are hidden from list, detail, stats, and all sub-resource
endpoints (sessions/report/decision-logs/config-snapshots); child tables
are untouched (audit-safe). Frontend shows a Popconfirm-guarded delete
button for terminal evals only.
2026-08-21 14:34:04 +08:00
sinohqb
d77a363f58 fix(ui): align EvalReport tab padding with EvalOverview
All checks were successful
CI / test (push) Successful in 3m9s
评估报告 tab 外层 padding 从 '16px 16px 24px' 改为 '0 16px 24px',
与概览页外层 wrapper 一致,消除 Drawer 内 tab 切换时与导航栏之间的视觉错位。
2026-08-21 04:22:03 +08:00
sinohqb
7910717b1e docs: archive intelligent-eval architecture deepening report (v1.2)
All checks were successful
CI / test (push) Successful in 3m9s
架构审查总结报告入库:5 个深化候选(scheduler 抽取、决策日志去重内化、
状态机归一、过渡残留清理、前端标签单一出口)的痛点/深化/红利、全景图与
余下机会。按先例归档到 docs/archive/ 并登记 docs/README.md 与
archive/README.md 两处索引。
2026-08-21 04:10:00 +08:00
sinohqb
d87aad5aed refactor(ui): single-source intelligent-eval label maps in status.ts
All checks were successful
CI / test (push) Successful in 3m13s
架构审查候选⑤:消除标签双轨,状态/决策类型映射单一出口。

- status.ts 新增 DECISION_TYPE_META(12 类型与后端 decision_type 字面量
  对齐)+ decisionTypeOf() 兜底:后端新增类型时前端不再静默显示裸字符串,
  未识别类型显式标注"未识别·xxx"
- DecisionProcess / ExecutionProcess 删除各自手写的 DECISION_TYPE_LABELS
  (后者是审查报告之外的第三处双轨),统一走 decisionTypeOf
- IntelligentEvals 的 STAT_CHIPS 标签从 EVAL_STATUS 派生,不再平行维护

tsc --noEmit 通过,前端 20 tests 全过,标签文本零变化。
2026-08-21 04:00:32 +08:00
sinohqb
2a0bcdd185 refactor(intelligent-eval): drop ADR-0008 transitional wrappers, callers use domain
All checks were successful
CI / test (push) Successful in 3m8s
架构审查候选④:ADR-0008 收敛调度域时为保测试兼容留下的过渡 wrapper 使命结束。

删除 8 个浅封装:task_queue 的 _is_slot_due / _calculate_session_deficit
(零调用死函数)+ _calculate_priority / _get_attention_reason,decision 的
_parse_time_slot(零调用死函数)+ _get_current_slot / _count_sessions_in_slot /
_has_high_severity_issues。调用方直接使用 domain 模块。

5 个隔着 wrapper 测 domain 行为的测试迁到新文件
test_intelligent_eval_domain.py,直接锁定 domain,覆盖零丢失。
删除测试通过:复杂度直接消失,时段/欠账/优先级知识只剩 domain 一处。
870 tests passed,零行为变化。
2026-08-21 03:50:44 +08:00
sinohqb
58c2ad0227 refactor(intelligent-eval): unify watchdog failures behind fail_eval seam
All checks were successful
CI / test (push) Successful in 3m10s
架构审查候选③(状态机归一):_TRANSITIONS 成为评估状态机的唯一真相。

三个 watchdog(planning 双闸 / executing 兜底 / 触发失败闸门)原先直接
row.status = FAILED 绕过转换表、手工重复写字段。收编到新的公开接缝
fail_eval(session, eval_id, reason, decision_type, context):表校验 →
repo CAS 条件写(status/plan_feedback/updated_at/completed_at 一条 SQL)
→ append_decision_log 留痕。

CAS 冲突(如用户在扫描间隙抢先取消)跳过并留日志,不当故障。API 路径
本已在表内,不动。新增 4 个契约测试,870 tests passed,零行为变化。
2026-08-21 03:35:05 +08:00
sinohqb
182b0e59cb refactor(intelligent-eval): extract scheduler runtime + internalize decision-log dedup
All checks were successful
CI / test (push) Successful in 3m9s
架构深化两则(架构审查候选①②):

① scheduler 抽取:web/app.py 约 400 行触发式执行编排(60s 扫描循环、
docker exec 触发、失败落账)沉入 intelligent_eval/scheduler.py,runtime
单例 start()/stop()/scan_once() 与 campaign_runtime 惯例一致;worker/planner
两处重复触发代码合并为一个触发原语;_supplement_decision_logs 归入
decision_logs.py。测试改为直接驱动 scan_once(interface 即测试面)。

② 决策日志去重内化:create_decision_log 的去重只服务 agent 上报路径;
新增 append_decision_log(平台落账纯追加)与 count_decisions(计数原语),
lifecycle/task_queue 全部平台落账切换,调用方不再需要塞 attempt 骗去重。

零行为变化:提示词、60s 节拍、编排顺序、闸门语义原样保留,866 tests passed。
2026-08-21 03:20:14 +08:00
sinohqb
d0da9ef4ec docs: add CHANGELOG for v1.2.0 UI optimization release
All checks were successful
CI / test (push) Successful in 3m26s
2026-08-20 20:29:59 +08:00
sinohqb
651d068744 chore: update package-lock.json version to 1.2.0
All checks were successful
CI / test (push) Successful in 3m20s
2026-08-20 20:25:14 +08:00
sinohqb
5cb38befc0 chore: bump version to 1.2.0 for UI optimization release 2026-08-20 20:16:57 +08:00
sinohqb
09a808c0c5 feat(ui): restructure config snapshot detail view to match overview layout 2026-08-20 20:02:17 +08:00
sinohqb
68bf1876af feat(ui): position current stage badge on node circle 2026-08-20 19:53:32 +08:00