docs: 总问题台账扩成逐条详细总表(现象/根因/证据/修复/置信)

This commit is contained in:
xiaohei
2026-06-02 19:23:16 +08:00
parent 7b75b87359
commit 964618c93b
+67 -11
View File
@@ -16,19 +16,75 @@
---
## 1. 功能线 × 严重度总表
## 1. 速览矩阵(每格 = 问题数)
| 功能线 | P0(阻断) | P1(假成功/数据错) | P2(契约漂移) | 总体 |
| 功能线 | P0 | P1 | P2 | 总体 |
|---|---|---|---|---|
| F1 登录/配对/模型/对话 | mac 首聊失败;win 配对竞态 | 登录 typo;模型刷新依赖配对 | 错误文案泛化 | 🔴 win 勉强/mac 高危 |
| F2 Sub 敏捷全链路 | 客户端走 `/api/agnet/*`;status/content 路由缺 | 客户端不读 display_status(假完成仍现) | 多数 plan 字段没人读 | 🔴 |
| F3 蜂群(Swarm) | 客户端无蜂群入口;生产默认 `SWARM_RUNTIME_ENABLED=false` | DAG 默认关;handoff.completed schema 不符 | UI 文案全 Sub Agile 化 | 🔴 |
| F4 凭证/审批/资源注入 | — | 高危 Manager 不阻断;lease 占位 | grant 写了没人读 | 🟠 |
| F5 产物生命周期 | 真实文件 vs markdown 解析错位;content 路由缺;客户端未接 | files_modified 未聚合→判 document | revision 不回 Runtime | 🔴 |
| F6 计费/用量 | — | 蜂群直连漏收;信任旁路可透支 | billing_context 不参与扣费主体 | 🟠 |
| F7 客户端 vs Claude Code | — | 全 GPT、关 thinking/搜索/缓存 | 高级压缩 stub | 🟠 |
| F8 Swarm 鲁棒性 | — | 无原子领取;重启可双跑 | checkpoint 未接线 | 🟠 |
| F9 企业驾驶舱 | — | 指标几乎空(硬编码 0/dead code) | — | 🔴 覆盖 ~15% |
| F1 登录/配对/模型/对话 | 1 | 3 | 2 | 🔴 win 勉强 / mac 高危 |
| F2 Sub 敏捷全链路 | 3 | 3 | 1 | 🔴 |
| F3 蜂群(Swarm) | 2 | 3 | 1 | 🔴 |
| F4 凭证/审批/资源注入 | 0 | 3 | 3 | 🟠 |
| F5 产物生命周期 | 4 | 1 | 2 | 🔴 |
| F6 计费/用量 | 0 | 4 | 2 | 🟠 |
| F7 客户端 vs Claude Code | 0 | 2 | 3 | 🟠 |
| F8 Swarm 鲁棒性 | 0 | 2 | 1 | 🟠 |
| F9 企业驾驶舱 | 0 | 1 | 0 | 🔴 覆盖 ~15% |
图例:严重度 🔴P0 阻断 / 🟠P1 假成功·数据错 / 🟡P2 契约漂移;置信度 ⬛代码实证 / ◧子代理+抽查 / ⬜待实跑确认
---
## 2. 详细总表(一条问题一行)
| 编号 | 线 | 级 | 问题 | 用户可见现象 | 根因 | 证据(文件:行) | 修复方向 | 置信 |
|---|---|---|---|---|---|---|---|---|
| 1.1 | F1 | 🔴 | mac 客户端 anthropic preset 不走 V2 proxy、OAuth 下配对用空 JWT | mac 用户能登录但**首聊直接失败** | mac/win 客户端实现分叉,mac 未对齐 V2 代理与配对 bearer | `heicode-macos-release/.../providerService.ts:385-394`、`heicode-auth.ts:964-967,981` | mac 对齐 win 的 proxy+encryptedFetch;或明天只放 win | ◧ |
| 1.2 | F1 | 🟠 | 登录与配对竞态(配对异步) | win 登录后**立刻**发消息→401 not_paired | `devicePairBootstrap` 非 await | `heicode-winos-release/.../heicode-auth.ts:993-999`、`handler.ts:534-538` | await 配对或 UI 提示“配对中” | ⬛ |
| 1.3 | F1 | 🟠 | 邮箱密码登录 Step2 URL typo | 走该路径 100% 404(UI 已隐藏,影响低) | `from-agnet` vs `from-agent` | `heicode-auth.ts:546` vs `api-router.go:88` | 改 URL | ⬛ |
| 1.4 | F1 | 🟡 | 登录后刷新模型依赖 V2 配对 | 设置页拉模型可能 401 | legacy sk 已清,未配对则签名失败 | `providerService.ts:577-579` | 配对未完成时回退/提示 | ◧ |
| 1.5 | F1 | 🟡 | 默认 `gpt-5.4` 是否在用户 group/channel | 首聊 4xx/502,错误文案被泛化 | 模型清单与产线 channel 未保证一致 | `providerPresets.json:22-26` | 上线前核对生产 channel | ⬜ |
| 1.6 | F1 | 🟡 | 时钟漂移>2min / 多实例无 Redis nonce | 偶发 V2 401 / 重放保护弱 | 诊断头未在 UI 翻译;nonce 进程内 | `device_signature.go:204`、`nonce_store.go:15` | UI 翻译 drift;生产配 Redis | ◧ |
| 2.1 | F2 | 🔴 | **客户端不消费 `display_status`** | “只给方案”的任务**仍显示已完成**(P1 修复对用户无效) | 客户端自算 `deployment.status`,全仓零引用 display_status | `heicodeTaskStore.ts:1226-1234` vs `agent_runtime_client.go:788-808` | 客户端改用 display_status | ⬛ |
| 2.2 | F2 | 🔴 | 客户端代理打废弃 `/api/agnet/user/*` | Sub 任务建/查/审批可能 404 | Manager 已改名 `/api/agent/*`,客户端未跟 | `heicode-tasks.ts:231-305` vs `api-router.go:510-523` | 客户端切 `/api/agent` 或 unified `/api/heicode/*` | ⬛ |
| 2.3 | F2 | 🔴 | Swarm 缺 sub create / `/status` / content 路由 | reconcile 难收敛、产物下载失败 | Manager 默认路径与 Swarm 仓库不符(生产或用别的 Runtime) | `agent_runtime_client.go:100,126` vs `main.py:1159-1161` | 实跑确认生产 Runtime;对齐路径 | ⬜ |
| 2.4 | F2 | 🟠 | Runtime 默认单 `general` 任务 | 用户选的后端/多角色被忽略 | DAG 默认关,`build_task_descriptions` 退化 | `swarm_runtime.py:586-600` | 开 DAG 或按 role 建任务 | ⬛ |
| 2.5 | F2 | 🟠 | 模型/billing 不受 plan 约束 | 实际用的模型≠用户/计划所选 | Agent 用容器 env(`ANTHROPIC_API_KEY`+env model) | `task_executor.py:31-39` | Runtime 按 plan 注入模型/凭证 | ⬛ |
| 2.6 | F2 | 🟠 | usage 回调复用 `budget.alert` schema 不符 | 用量/usage 回调可能被 Manager 拒 | Runtime 发 `threshold` Manager 要 `threshold_pct` | `main.py:941` vs `agent_callback.go:486` | 统一事件 schema | ◧ |
| 2.7 | F2 | 🟡 | plan 字段“写了没人读” | 功能名存实亡 | agile_context/grants/allowed_model_ids/deliverable 下游未消费 | 见 §4 各跳 | 定结构化契约并消费 | ⬛ |
| 3.1 | F3 | 🔴 | 桌面无蜂群入口 | 用户**无法真正发起蜂群** | 建任务写死 `sub_agile`,不调蜂群 API | `heicodeTaskStore.ts:1502-1506,1690` | 客户端加蜂群入口+走 `/api/heicode/swarm` | ⬛ |
| 3.2 | F3 | 🔴 | 生产默认 `SWARM_RUNTIME_ENABLED=false` | 蜂群只落库不执行 | dispatch 被开关挡住 | `agent_control_plane.go:1267-1268` | 生产开关 + 配 SWARM_RUNTIME_* | ◧ |
| 3.3 | F3 | 🟠 | DAG 默认关 | “多角色协作”退化成单 Agent | `ENABLE_SUBTASK_HANDOFF=false` | `swarm_runtime.py:77-83`、`k8s/agent-deployment-full.yaml:12` | 灰度开启并验证 | ⬛ |
| 3.4 | F3 | 🟠 | `handoff.completed` 缺 from_role/to_role | handoff 完成回调可能被拒/不落库 | Runtime payload 与 Manager schema 不符 | `main.py:779-786` vs `agent_callback.go:478-479` | 补字段或放宽 schema | ◧ |
| 3.5 | F3 | 🟠 | capability 用 role 名、Agent 注册 general | 任务永久 pending 假死 | 能力集不匹配,队列饿死 | `task_queue.py:151-156` | 能力命名对齐或回退匹配 | ◧ |
| 3.6 | F3 | 🟡 | task/handoff 不驱动 deployment 状态;UI 文案 Sub Agile 化 | 看不到任务图/编队 | 无 task graph 投影;`replace(swarm→Sub Agile)` | `heicodeTaskStore.ts:666` | 任务图投影 + 文案分流 | ⬛ |
| 4.1 | F4 | 🟠 | 高危操作 Manager 不阻断部署 | 高危可未审批就执行 | 创建即 accepted+dispatch,`RequiresUserApproval` 不参与 | `agent_control_plane.go:1067-1122` | Manager 侧 gate pending 审批 | ⬛ |
| 4.2 | F4 | 🟠 | lease 是 `lease://` 占位 | 审批“通过”但无真凭证 | 不 mint、不读 KV | `agent_approval.go:213-228` | approve 时按 secret_ref 派生短期凭证 | ⬛ |
| 4.3 | F4 | 🟠 | Agent 用全局 GIT_TOKEN,不读 grant/lease | 多用户**串仓/越权**、撤销无效 | 凭证走进程级 env,非 per-task lease | `git_operations.py:32-33` | Runtime 注入任务级凭证给 Agent | ⬛ |
| 4.4 | F4 | 🟡 | revoke 不同步 Runtime | 撤销后运行中仍可访问 | approve 有 sync、revoke 无 | `agent_approval.go:339-349` | revoke 推送 Runtime/作废 lease | ⬛ |
| 4.5 | F4 | 🟡 | Runtime payload 不按 status 过滤 grant | 撤销的 grant 仍可能下发 | manifest 过滤 active,payload 不过滤 | `agent_runtime_client.go:302` | 统一过滤规则 | ◧ |
| 4.6 | F4 | 🟡 | 自填 azkv 引用仅验前缀 | 可能错引他人密钥(取决 KV RBAC) | 不验 vault/归属 | `resource.go:170-171` | 校验归属+KV RBAC | ◧ |
| 5.1 | F5 | 🔴 | **双模型错位**:真实文件 vs markdown 解析 | `project_folder` 常空/假 | Runtime 写文件+元数据,Manager 按单 markdown parse | `task_executor.py:529-564` vs `heicode_project_artifacts.go:92-95` | 二选一:Runtime 出 markdown 或 Manager 读 files API | ◧ |
| 5.2 | F5 | 🔴 | `files_modified` 未聚合到顶层 | 真有代码却被判 summary/document | subtask 级字段未汇总 | `main.py:683-685` | 顶层聚合 files_modified | ⬛ |
| 5.3 | F5 | 🔴 | Swarm 无 artifact content 路由 | 产物**下载不通** | Manager 代理目标不存在 | `agent_runtime_client.go:549-631` vs `main.py` | 实跑确认;Runtime 补 content 路由 | ⬜ |
| 5.4 | F5 | 🔴 | 客户端未接 unified 产物 API | 看不到项目树/只能下单文件 | 仍用 legacy 单 blob,零引用 is_project | `heicode-tasks.ts:251-259` | 客户端接 manifest/files/archive | ⬛ |
| 5.5 | F5 | 🟠 | revision consume 不回 Runtime | 本地改完**续跑不生效** | 只改 DB 状态,不推 Runtime | `heicode_task_create.go:193-218`、`heicode_artifact_edits.go:169-181` | Runtime 读取新基线 | ⬛ |
| 5.6 | F5 | 🟡 | parseMarkdownProject 无 `..` 净化;冲突检测可绕过 | 潜在 zip-slip;并发覆盖 | 未消毒路径;`BaseRevision=0` 跳过检测 | `heicode_project_artifacts.go:216-220,367` | 路径消毒 + 强制 base hash | ⬛ |
| 5.7 | F5 | 🔴 | 云部署 `pending_worker` 无消费者 | 产物→上线**闭环为 0** | Deploy Worker 未接 | `heicode_cloud_deploy.go:14-17,123` | 接 Worker 或 UI 标“未就绪” | ⬛ |
| 6.1 | F6 | 🟠 | 蜂群直连 API key 不经 relay | **平台漏收** | Agent 用 env key 直连厂商 | `task_executor.py:31-53` | 强制走网关或回写扣费 | ◧ |
| 6.2 | F6 | 🟠 | Runtime tokens_used 不触发扣费 | 用量有显示、账本无对应 consume | callback 无 DecreaseUserQuota | `agent_callback.go:648-746` | 回调对账扣费 | ⬛ |
| 6.3 | F6 | 🟠 | 信任旁路可透支 | 余额可被扣成**负数** | 预扣=0 仍结算,quota 无下限 | `billing_session.go:281-314`、`user.go:927` | 结算加余额下限/拦截 | ◧ |
| 6.4 | F6 | 🟡 | Realtime 双轨扣费 | 可能**多扣** | 入口预扣 + 流式 PostWss + Settle 叠加 | `relay-openai.go:452-556`、`websocket.go:44` | 核对日志,去重 | ⬜ |
| 6.5 | F6 | 🟡 | billing_context 不参与扣费主体 | 任务模型调用可能**扣错账户** | relay 用 token.UserId,不用 newapi_user_ref | `agent_runtime_client.go:397` | 扣费绑定 correlation/归属 | ◧ |
| 6.6 | F6 | 🟡 | EU/X/5·8 资源费未实现;budget 不 enforce | 平台资源费收不到 | 仅创建时校验,执行中只按时长告警 | `agent_control_plane.go:697-698`、`main.py:882-904` | 实现资源计费/硬上限 | ⬛ |
| 7.1 | F7 | 🟠 | 四档模型全映射 gpt-5.4 | 不是真 Claude,体验“变笨” | preset 写死 | `providerPresets.json:22-26` | 提供真 Claude 通道 | ⬛ |
| 7.2 | F7 | 🟠 | 关闭 thinking/WebSearch/tool search/缓存 | 招牌能力没了 | 非 1P URL + proxy 路径判定关闭 | `thinking.ts:104-127`、`WebSearchTool.ts:172-192`、`toolSearch.ts:299-310` | 1P 通道恢复;开 tool search | ◧ |
| 7.3 | F7 | 🟡 | 高级压缩 ant-only stub | 长会话更易钝/胀 | reactive/cached compact 被 DCE | `reactiveCompact.ts`、`cachedMicrocompact.ts` | 用真实源码替换 stub | ◧ |
| 7.4 | F7 | 🟡 | AGENTS.md 未加载 | 规则没被吃进上下文 | 不在 CLAUDE.md 发现链 | `claudemd.ts` | 加入发现链 | ◧ |
| 7.5 | F7 | 🟡 | 四跳延迟 + 空闲冷启动 | 桌面卡顿/重连慢 | 多跳架构 + prewarm 激进 | `ws/handler.ts:736-748` | 合并连接/延长 prewarm | ◧ |
| 8.1 | F8 | 🟠 | 无原子领取/启动 reconcile | 重启后**任务双跑**、重复分支 | 无 Redis 锁/租约;30s orphan 重派 | `task_queue.py:114,158,372`、`main.py:244` | 原子领取 + 启动重建 | ◧ |
| 8.2 | F8 | 🟠 | 失败重试无退避 | 重试风暴 | fail_task 立即 requeue | `task_queue.py:270` | 指数退避 | ⬛ |
| 8.3 | F8 | 🟡 | checkpoint 模块未接线 | 进程级恢复不可靠 | 写了无人调用 | `checkpoint_manager.py` | 接线或删 | ⬛ |
| 9.1 | F9 | 🟠 | 驾驶舱指标几乎空 | 企业看到的是假/空进度 | 进度 snapshot 硬编码 0;CockpitView dead code | `agent_control_plane.go:1832-1860` | 基于真实事件聚合最小指标集 | ⬛ |
---