diff --git a/docs/development/release-preparation-0.15.10.md b/docs/development/release-preparation-0.15.10.md index 9ab69f2e..0051bb47 100644 --- a/docs/development/release-preparation-0.15.10.md +++ b/docs/development/release-preparation-0.15.10.md @@ -66,3 +66,13 @@ main CI 执行,通过后才创建新的不可变 Desktop 标签。双语说明 最终需核验六平台打包、macOS 签名与公证、GitHub Latest 和 20 项资产、 北京 OSS 索引一致性与网站 12 种下载选择。不下载或启动安装包, 不将候选或推送成功称为发布完成。 + +### 首轮候选 CI + +`273a7fa` 的 Desktop CI `37174433765`:5953 通过、59 跳过、3 失败, +生产构建未执行;Agent CI `37174433777` 通过。 +监督设置测试需要先进入“回顾整理”页签再操作其可见保存按钮, +Electron 布局测试更新为真实标题“模型与运行限制”,截图锚点限定可见设置面板。 +保留保存值、再次打开恢复、布局及溢出断言。 +1200 条活动历史测试会实际显示至 1000 行,专用超时从 30 秒改为 60 秒; +不减少数据、不移除分页、清空总数或离页裁剪断言,等待下一次 CI 验证。 diff --git a/src/renderer/src/App.test.tsx b/src/renderer/src/App.test.tsx index 01dc637c..bcfe97f1 100644 --- a/src/renderer/src/App.test.tsx +++ b/src/renderer/src/App.test.tsx @@ -14410,7 +14410,8 @@ describe("App", () => { fireEvent.click(screen.getByRole("button", { name: "运行记录" })); expect(await screen.findByRole("button", { name: "全部 1,200" })).toBeInTheDocument(); expect(records()).toBe(500); - }, 30_000); + // Rendering and querying 1,000 real activity rows is slower on shared CI runners. + }, 60_000); it("marks the current primary navigation page and hides decorative icons", async () => { render(); @@ -15479,6 +15480,7 @@ describe("App", () => { fireEvent.click(screen.getByRole('tab', { name: '设置' })) expect(screen.getByLabelText('监督者整理超时(秒)')).toHaveValue(30) expect(screen.getByLabelText('监督模型并发数')).toHaveValue(2) + fireEvent.click(screen.getByRole('tab', { name: '回顾整理' })) fireEvent.change(screen.getByLabelText(/每次读取来源条数/), { target: { value: '17' } }) fireEvent.change(screen.getByLabelText(/每批消息数/), { target: { value: '30' } }) fireEvent.click(screen.getByRole('button', { name: '保存回顾算法' })) @@ -15488,6 +15490,7 @@ describe("App", () => { await waitFor(() => expect(screen.getByRole('button', { name: '保存回顾算法' })).toBeDisabled()) fireEvent.click(screen.getByRole('tab', { name: '工作回顾' })) fireEvent.click(screen.getByRole('tab', { name: '设置' })) + fireEvent.click(screen.getByRole('tab', { name: '回顾整理' })) expect(screen.getByLabelText(/每次读取来源条数/)).toHaveValue(17) }) diff --git a/tests/support/supervisor-layout-driver.mjs b/tests/support/supervisor-layout-driver.mjs index 274cb21b..761d9f1e 100644 --- a/tests/support/supervisor-layout-driver.mjs +++ b/tests/support/supervisor-layout-driver.mjs @@ -1242,11 +1242,11 @@ app assert.equal(menuLayout.plans, tab === 'plans') if (tab === 'settings') { assert(!menuLayout.settingsBadge && !menuLayout.refresh, 'Redundant settings badge/refresh') - assert(menuLayout.headings.includes('回顾算法') && menuLayout.headings.includes('模型超时与并发')) + assert(menuLayout.headings.includes('回顾算法') && menuLayout.headings.includes('模型与运行限制')) } reports.push({ scenario: 'menu-placement', theme, tab, ...menuLayout }) await writeFile(join(artifacts, `menu-${tab}-${theme}-${width}.png`), (await win.webContents.capturePage()).toPNG()) - const anchors = tab === 'settings' ? ['.heartbeat-settings__editor:last-child'] + const anchors = tab === 'settings' ? ['.supervisor-settings [role=tabpanel]:not([hidden]) form'] : tab === 'plans' ? ['#heartbeat-panel-overview', '.supervision-suggestions', '#heartbeat-panel-history'] : [] for (const [index, anchor] of anchors.entries()) { await js(`document.querySelector('${anchor}').scrollIntoView({block:'start'})`)