boardx / boardx/workspacex

chat-read: copilotkit-v2-tool-rendering:274 ×2 引入点待定(阻塞于 e2e-full 75 分钟上限)

Open
#3,053 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
0
Forks
0
Avg merge
1h 7m
Merged PRs (30d)
969

Description

分诊自 #2999 组 3 / E 组。**先决条件是 e2e-full 的 75 分钟上限,不解决它这条查不下去。**

## 现状(CI 硬事实)

`copilotkit-v2-tool-rendering.spec.ts:274`(同一用例在 `个人` / `项目` 两个 project 下各一条)

| SHA | 结果 | run |
|---|---|---|
| `d30ac48e8`(#2890 合入点) | 绿 | [34080155308](https://github.com/boardx/workspacex/actions/runs/34080155308) |
| `8aeb7f57b`(#2909 合入点) | 绿 | [34183548285](https://github.com/boardx/workspacex/actions/runs/34183548285) |
| `7fc167c0f`(#2869 合入点) | **未跑到** | [34188134225](https://github.com/boardx/workspacex/actions/runs/34188134225)(83 条只打印到 65) |
| `f9afc3d63`(#2927 合入点) | 红 | [34177112918](https://github.com/boardx/workspacex/actions/runs/34177112918) |
| `938d16bf3`(基线) | 红 | 基线 |

⇒ **引入点在 `8aeb7f57b..f9afc3d63`。非 flake**(两个 project、多个 SHA 表现完全一致)。

## 阻塞

`e2e-full` 的 `timeout-minutes: 75` 让 job 每趟都以 `cancelled` 结束,
而**被砍的位置在逐趟前移**(90/90 → 81/90 → 65/83)。
`tool-rendering.spec.ts` 排在第 69–75 位,**已经落到砍线之外**——
再 dispatch 同一个 workflow 也拿不到它的逐条结果。

**先修这个,再继续二分:**
- `e2e-full` `timeout-minutes` 75 → 110,**或**
- 把 chat-read 拆成独立 job(附带好处:它的红不再被淹在 e2e-full 的总结论里,
且未来任何人做 chat-read 二分都不会再拿到 `cancelled` 这个既非绿也非红的结果)。

## 解除阻塞后的下一步(一趟即可定案)

在 `7fc167c0f`(已有现成分支 `bisect/chat-read-2869`)重跑一趟:
```bash
gh workflow run harness-verify --repo boardx/workspacex \
--ref bisect/chat-read-2869 -f run_e2e_full=true -f run_chat_task_workbench=false
```
- 红 ⇒ 引入点在 `8aeb7f57b..7fc167c0f`,候选 #2911 / #2913 / #2915 / #2869
(该半边碰过 chat 组件的只有 `chat-skill-mount-panel.tsx`、`subtask-run-panel.tsx`、
`workbench/task-notifications.tsx`、`copilotkit-v2-shell.tsx`+1 行、
`use-schedule-notifications.ts`、`globals.css`)
- 绿 ⇒ **引入点 = `f9afc3d63` / PR #2927**(右半边碰过 `apps/web/components/chat/**`
的 commit 只有它一个,已用 `git log -- apps/web/components/chat` 核实)

## ⚠ 两条已被证伪的假说,别再走一遍

1. **不是 #2909 的 `min-h-0` / `RunProgressButterfly`。** #2909 上两条都绿(CI)。
2. **不是 #2927 在 `task-timeline.tsx` 过滤 `write_todos`。**
`run-trace-entry` 是 `apps/web/components/chat/workbench/run-trace-panel.tsx:52`
那个 `

  • `,由 `entries.map` 无条件渲染;`renderTool?.(entry)`(`:63`)只填 `
  • `
    内部。过滤 `write_todos` **不减少 `run-trace-entry` 的条数**,动不了
    `poll(() => count()).toBeGreaterThan(1)`。
    ⇒ B 组给 `:123` 的机制**不能顺延到 `:274`**:同文件,不同机制。

    ## 若最终落在 #2927,优先看这两处(尚无证据,仅缩小阅读面)

    该用例的核心反证是 `expect(streamFinished, "活动必须在运行流结束前可见").toBe(false)`
    ——`toggle.click()` 必须发生在 run 流关闭之前,所以任何**推迟消息区可交互**的改动都够格:
    - `copilotkit-v2-assistant-message.tsx`(#2927 删掉 -107 行,整套
    `WriteTodosDedupedToolCallsView` / `findLastWriteTodosToolCallId` 去重层)
    - `copilotkit-v2-panel-body.tsx`(#2927 +24 行:HITL 恢复后补拉
    `listThreadAttachments`;该 effect 依赖数组从 `[agent, onMessageSent, registerHydrated]`
    变成 `[agent, hydrateActiveFiles, onMessageSent, projectId, registerHydrated]`
    ——若 `hydrateActiveFiles` 引用不稳定会反复重跑,值得先验证它是否被 `useCallback` 稳住)

    ## 相关

    - #2999(chat-read 46 红分诊,组 3 / E 组)
    - #2084(e2e-full 空转 —— 同一条车道的另一半问题)
    - `copilotkit-v2-error-banner.spec.ts:60` 已在 #2999 定案(引入点 `f9afc3d63`/#2927,CI 双端),不在本 issue 范围

  • Contributor guide

    No contributing guide indexed for this repository

    Research direction

    Start with the e2e-full workflow timeout and the chat-read test at copilotkit-v2-tool-rendering.spec.ts:274. Apply the documented workflow change, then run the provided gh workflow command on bisect/chat-read-2869 and inspect whether the test is red or green. Done means obtaining the missing result and narrowing the introduction point to the listed commits.

    Written by the indexing model from the issue text.

    Assessment

    Tech stack
    git, github-actions, typescript
    Domain
    ci-cd, testing-qa
    Issue type
    Bug
    Difficulty
    4/5
    Estimated time
    3-5 days
    Activity status
    Active
    Clarity
    Mostly clear
    Newbie friendliness
    48/100

    Get new issues in your inbox

    A short digest of beginner-friendly GitHub issues.