Files
heicodedebug/chek/2026-06-02_功能线总问题台账.md

215 lines
22 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Heicode 功能线总问题台账(逐跳对账)
> 日期:2026-06-02
> 方法:按主要功能线做端到端「逐跳对账」——每跳核对生产者写了什么、消费者是否真消费、是否落地/占位/路由不一致。
> 范围:`HeiCode-Swarm`、`heicode-mananger`、`heicode-macos-release`、`heicode-winos-release`
> 关联:`chek/2026-06-01_*`(P1–P7、标准清单)、`chek/2026-06-02_产品维度复审-能力覆盖度.md`
> 性质:只读代码核查 + 部分子代理追踪;标注置信度;**未实跑**的结论已注明需运行时确认。
---
## 0. 一句话总览
后端控制面/契约成熟,但**客户端没接新统一 API、关键链路在生产默认配置下退化、回调与路由多处不一致**。最致命的是:**P1“假完成”修复未到达客户端**、**macOS 首聊大概率失败**、**客户端仍打已废弃的 `/api/agnet/*`**。
> ⚠️ 重要 caveat:多处“Swarm 路由不存在/不匹配”是对 `HeiCode-Swarm` 仓库默认配置核的;对接文档记录生产烟测可通,**生产很可能跑另一套 Runtime(agent_management) 或 env 改了路径**。这类项必须**实跑确认**,不能只凭读码定论。
---
## 1. 速览矩阵(每格 = 问题数)
| 功能线 | P0 | P1 | P2 | 总体 |
|---|---|---|---|---|
| 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` | 基于真实事件聚合最小指标集 | ⬛ |
---
## 2. F1 登录 / 配对 / 模型 / 对话
| # | 严重度 | 问题 | 证据 |
|---|---|---|---|
| 1.1 | 🔴 P0(mac) | macOS anthropic preset 不走 V2 proxy(直连 + sentinel key),OAuth 下配对用空 JWT → **登录成功但发不出对话** | `heicode-macos-release/.../providerService.ts:385-394`、`heicode-auth.ts:964-967,981` |
| 1.2 | 🟠 P1(win) | 配对异步,登录后立即开聊 → `not_paired` 401(竞态) | `heicode-winos-release/.../heicode-auth.ts:993-999`、`handler.ts:534-538` |
| 1.3 | 🟠 P1 | 邮箱密码登录 Step2 URL typo:客户端 `from-agnet` vs Manager `from-agent`→404(UI 已隐藏,影响低) | `heicode-auth.ts:546` vs `api-router.go:88` |
| 1.4 | 🟡 | 登录后刷新模型依赖 V2 配对,legacy sk 已清→可能 401 | `providerService.ts:577-579` |
| 1.5 | 🟡 | 默认 `gpt-5.4` 是否在用户 group/channel 决定首聊成败;错误被泛化文案掩盖 | `providerPresets.json:22-26` |
| 1.6 | 🟡 | 时钟漂移>2min / nonce 多实例无 Redis → V2 401,UI 未专门翻译 | `device_signature.go:204`、`nonce_store.go:15` |
Manager 侧 V2(pubkey/pair/TokenAuth/relay/诊断头)整体**真落地**;问题集中在**客户端,且 mac/win 实现分叉**。
---
## 3. F2 Sub 敏捷全链路
| # | 严重度 | 问题 | 证据 |
|---|---|---|---|
| 2.1 | 🔴 P0 | **客户端不消费 `display_status`**,自算 `deployment.status` → P1“假完成”修复对用户**无效**,仍显示已完成 | 客户端全仓零引用 display_status;`heicodeTaskStore.ts:1226-1234` vs Manager `agent_runtime_client.go:788-808` |
| 2.2 | 🔴 P0 | 客户端代理仍打 `/api/agnet/user/*`,Manager 已改名 `/api/agent/*`(文档称 agnet 已 404) | `heicode-tasks.ts:231-305` vs `api-router.go:510-523` |
| 2.3 | 🔴 P0(待实跑) | Manager 默认 sub create 路径 / `/api/swarms/{id}/status` / artifact content 在 Swarm 仓库不存在→reconcile/下载失败(生产可能用别的 Runtime) | `agent_runtime_client.go:100,126` vs `main.py:1159-1161` |
| 2.4 | 🟠 P1 | Runtime 默认单 `general` 任务,忽略用户选的 backend/多 role | `swarm_runtime.py:586-600` |
| 2.5 | 🟠 P1 | 模型/billing 不受 plan 约束,Agent 用容器 env(`ANTHROPIC_API_KEY`+env model) | `task_executor.py:31-39` |
| 2.6 | 🟠 P1 | usage 回调复用 `budget.alert`,与 Manager schema(`threshold_pct`) 不符→可能被拒 | `main.py:941` vs `agent_callback.go:486` |
| 2.7 | 🟡 P2 | `agile_context(stage/checkpoint/acceptance)`、`resource_grants`、`allowed_model_ids`、`deliverable` 多为“写了没人读” | 见逐跳台账 |
---
## 4. F3 蜂群(Swarm)
| # | 严重度 | 问题 | 证据 |
|---|---|---|---|
| 3.1 | 🔴 P0 | 桌面**无蜂群产品入口**,从不调用 `/api/heicode/swarm/tasks` 或 `/api/swarms`;建任务写死 `sub_agile` | `heicodeTaskStore.ts:1502-1506,1690` |
| 3.2 | 🔴 P0 | 生产默认 `SWARM_RUNTIME_ENABLED=false`→只落库不 dispatch | `agent_control_plane.go:1267-1268` |
| 3.3 | 🟠 P1 | DAG 默认关(`ENABLE_SUBTASK_HANDOFF=false`),蜂群退化为单 Agent 单任务 | `swarm_runtime.py:77-83`、`k8s/agent-deployment-full.yaml:12` |
| 3.4 | 🟠 P1 | `handoff.completed` 缺 `from_role/to_role`,Manager schema 必填→可能被拒/不落库 | `main.py:779-786` vs `agent_callback.go:478-479` |
| 3.5 | 🟠 P1 | capability 用 role 名、Agent 注册 `general` → 任务永久 pending 假死 | `task_queue.py:151-156`、`agent/main.py` 默认 capabilities |
| 3.6 | 🟡 P2 | task.*/handoff.* 不驱动 deployment 状态;无任务图结构化展示;UI 把 swarm 文案替换成 Sub Agile | `applyAgentCallbackDeploymentState`、`heicodeTaskStore.ts:666` |
---
## 5. F4 凭证 / 审批 / 资源注入(安全)
| # | 严重度 | 问题 | 证据 |
|---|---|---|---|
| 4.1 | 🟠 P1 | 高危操作 Manager **不阻断**部署,立即 accepted+dispatch | `agent_control_plane.go:1067-1122`;`RequiresUserApproval` 仅 struct |
| 4.2 | 🟠 P1 | lease 是 `lease://` 占位,不 mint 真凭证、不读 KV | `agent_approval.go:213-228` |
| 4.3 | 🟠 P1 | Agent 用全局 `GIT_USERNAME/GIT_TOKEN` 环境变量,不读 grant/lease/secret_ref → 串仓/越权 | `git_operations.py:32-33`;agent 无 grant 读取 |
| 4.4 | 🟡 P2 | revoke lease/grant 不同步 Runtime(approve 有 sync、revoke 无)→撤销滞后 | `agent_approval.go:339-349` |
| 4.5 | 🟡 P2 | Runtime payload 不按 status 过滤 grant;manifest 过滤 active(不一致) | `agent_runtime_client.go:302` vs `agent_control_plane.go:880` |
| 4.6 | 🟡 | 用户可自填 `azkv://` 引用,仅验前缀不验 vault 归属 | `resource.go:170-171` |
---
## 6. F5 产物生命周期
| # | 严重度 | 问题 | 证据 |
|---|---|---|---|
| 5.1 | 🔴 P0 | **双模型错位**:Runtime 写真实文件 + 元数据,Manager 却按“单 markdown”parse → `project_folder` 常空/假 | `task_executor.py:529-564` vs `heicode_project_artifacts.go:92-95,176-238` |
| 5.2 | 🔴 P0 | `files_modified` 只在 subtask 级、未聚合到顶层 → 常判 `document`/summary-only → `is_project:false` | `main.py:683-685` |
| 5.3 | 🔴 P0(待实跑) | Swarm 无 `/artifacts/{id}/content` 路由,Manager 代理目标不存在 → 下载不通 | `agent_runtime_client.go:549-631` vs `main.py` 无 content 路由 |
| 5.4 | 🔴 P0 | 客户端未接 unified 产物 API(manifest/files/archive/local-edits),只用 legacy 单 blob | `heicode-tasks.ts:251-259`、客户端零引用 `is_project/project_folder` |
| 5.5 | 🟠 P1 | revision consume 只改 DB 状态,不推 Runtime、不合并 manifest(revision 恒=1),续跑不生效 | `heicode_task_create.go:193-218`、`heicode_artifact_edits.go:169-181` |
| 5.6 | 🟡 P2 | `parseMarkdownProject` 无 `..` 净化(潜在 zip-slip);冲突检测 `BaseRevision=0` 可绕过 | `heicode_project_artifacts.go:216-220,367` |
| 5.7 | 🔴 | 云部署 `pending_worker` 后无 Worker 消费 → 产物→上线闭环为 0 | `heicode_cloud_deploy.go:14-17,123` |
---
## 7. F6 计费 / 用量 / 额度
> 扣费在 **Manager relay** 真落地(PreConsume gate → 上游 usage → SettleBilling delta),按 **Token 所属 user.id** 扣。以下是风险点:
| # | 严重度 | 问题(多付/漏收/扣错) | 证据 |
|---|---|---|---|
| 6.1 | 🟠 P1(漏收) | 蜂群/Runtime 若用独立 API key 直连厂商、不经 relay → **不扣用户 quota** | `task_executor.py:31-53`;callback 无 DecreaseUserQuota |
| 6.2 | 🟠 P1(漏收) | Runtime 回传 `tokens_used` 只入库/告警,**不触发扣费** | `agent_callback.go:648-746` |
| 6.3 | 🟠 P1(多付) | 信任旁路预扣=0 但结算仍扣,`quota` 无下限→可透支/负数 | `billing_session.go:281-314`、`user.go:927` |
| 6.4 | 🟡 P1(多付) | Realtime 入口预扣 + 流式 `PostWssConsumeQuota` + 最终 Settle → 叠加扣费空间(需日志核) | `relay-openai.go:452-556`、`websocket.go:44` |
| 6.5 | 🟡 P2(扣错人) | `billing_context.newapi_user_ref/correlation` 不参与扣费主体映射;Runtime 服务 token 调网关会扣服务账号 | `agent_runtime_client.go:397`;relay 用 `token.UserId` |
| 6.6 | 🟡 | Agnet 资源费(EU/X/5·8 上限)未实现;budget 仅创建时校验、执行中只按时长告警 | `agent_control_plane.go:697-698`、`main.py:882-904` |
---
## 8. F7 客户端 vs Claude Code(体验)
| # | 严重度 | 问题 | 证据 |
|---|---|---|---|
| 7.1 | 🟠 | 四档模型全映射 `gpt-5.4`,非真 Sonnet/Opus/Haiku | `providerPresets.json:22-26` |
| 7.2 | 🟠 | 非 1P URL + proxy 路径关闭 thinking / WebSearch / tool search / 高级 prompt caching | `thinking.ts:104-127`、`WebSearchTool.ts:172-192`、`toolSearch.ts:299-310` |
| 7.3 | 🟡 | reactive/cached compact、history snip、context collapse 等高级压缩是 ant-only stub | `reactiveCompact.ts`、`cachedMicrocompact.ts`(__stubMissing) |
| 7.4 | 🟡 | AGENTS.md 未纳入 CLAUDE.md 发现链 | `claudemd.ts` |
| 7.5 | 🟡 | 桌面四跳延迟 + 空闲停子进程冷启动 | `ws/handler.ts:736-748` |
---
## 9. F8 Swarm 鲁棒性 / F9 企业能力
- **F8**:无 Redis 原子领取/租约;Orchestrator 启动无 reconcile,重启 30s 后可能把在跑任务重新入队→双跑;checkpoint 模块写了未接线;失败重试无退避。证据:`task_queue.py:114,158,372`、`main.py:244`、`checkpoint_manager.py`。
- **F9**:项目进度/里程碑/Bug/ETA/风险/质量趋势后端聚合与前端页面**基本缺失**;进度 snapshot `failure_rate/avg_duration` 硬编码 0;`CockpitView` dead code。证据:`agent_control_plane.go:1832-1860`。审计链路**已实现**。
---
## 10. 上线最关键 5 条(按“明天会不会翻车”排序)
1. **mac 首聊失败(F1.1)** → 建议明天只放 Windows。
2. **客户端不读 display_status(F2.1)** → “假完成”照旧;小改、应抢修。
3. **客户端打 `/api/agnet/*`(F2.2/F3.1)** → Sub/蜂群任务从客户端可能 404;需确认 Manager 是否留别名。
4. **产物链路双模型错位 + content 不通(F5.1/5.3/5.4)** → “拿代码/下载工程包”这条 demo 路径可能空。
5. **win 配对竞态(F1.2)** → 登录后稍等再开聊,或改成 await。
> 这 5 条里 1/2/5 是纯客户端↔Manager、可本地冒烟确认;3/4 含“生产可能用别的 Runtime”的 caveat,**必须实跑**。
---
## 11. 方法论说明(为什么这次更全)
- 抽样审计(顺问题翻)只看到“Manager 修了 P1”;**逐跳对账(生产者↔消费者)才发现“客户端没接 = 没修”**。
- 凡“写了没人读 / 校验了不使用 / 路由不一致 / 硬编码占位”均单列。
- 代码审计天花板:跨服务路由/运行时镜像差异**必须实跑**确认(本台账已标注 caveat 项)。
---
*只读核查结论,证据可于对应仓库 `文件:行` 复核;标注“待实跑”的项需运行时验证。*