Files
Jyotisha/docs/testing/secondary-page-entry-20260918.md
T

76 lines
4.2 KiB
Markdown
Raw 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.
# 真机清单 · 次级页进入不再推挤 + 跨部署导航自愈(2026-09-18)
对应 `TASK-secondary-page-entry-20260918.md`、`PROGRESS-secondary-page-entry-20260918.md`、BUG-965 / 966 / 967。
自动化做不到的部分:需要**浏览器 + 已登录账号**。执行环境无 Chrome、无登录态,因此这些是环境缺口,不是「已通过」。
准备:桌面 Chrome,宽度 ≥ 1024px,已登录。DevTools → Network 勾上 `Preserve log`。
## A · 进入三页时外壳高度不变(BUG-966)
1. 停在 `/`。Console 里先贴:
```js
(() => {
const measure = () => {
const node = document.querySelector(".secondary-page");
if (!node) return null;
const r = node.getBoundingClientRect();
return { h: Math.round(r.height), top: Math.round(r.top) };
};
const log = [];
const obs = new ResizeObserver(() => log.push({ t: performance.now(), ...measure() }));
const start = () => {
const node = document.querySelector(".secondary-page");
if (!node) { requestAnimationFrame(start); return; }
obs.observe(node);
log.push({ t: performance.now(), ...measure(), event: "first" });
};
window.__secondaryPageLog = log;
window.__secondaryPageStop = () => { obs.disconnect(); console.table(log); };
document.addEventListener("click", (event) => {
const a = event.target.closest("a[href='/chart'], a[href='/ephemeris'], a[href='/reports']");
if (a) requestAnimationFrame(start);
}, true);
console.log("ready: click 星盘 / 星历 / 我的报告, then __secondaryPageStop()");
})();
```
2. 点侧栏「星盘」。内容出现后立刻在 Console 执行 `__secondaryPageStop()`。
- **期望**:表格里所有 `h` 相同(等待态与内容态同高),`top` 不变。
- **不期望**:高度从一行文案跳到整页正文;出现转圈、骨架、「正在加载」。
3. 对「星历」「我的报告」各做一次。三页的等待句可以不同(盘还没拿到 / 星历还没拿到 / 报告列表还没拿到),但都必须写在 `.secondary-page` 里居中,不能是矮块。
## B · 第二次进入没有等待句(BUG-966 缓存)
1. 打开过「星盘」并等到盘出现。
2. 点「新建对话」回 `/`(不要刷新)。
3. Network Clear,再点「星盘」。
- **期望**:第一帧就是盘(或失败句),**没有**「这一张盘还没拿到。」。Network 里可以有一条后台 `/api/chart-view`(静默刷新)。
4. 「星历」「我的报告」同样:第二次不得再出现各自的等待句。
## C · 悬停会预取数据(BUG-966 预取)
1. 刷新 `/`,Network Clear,筛选 `chart-view|ephemeris|reports`。
2. 鼠标移到侧栏「星盘」上,**先不要点**。
- **期望**:出现 `GET /api/chart-view`。对「星历」「我的报告」分别是 `/api/ephemeris`、`/api/reports`。
3. 再点进去。
- **期望**:若预取已完成,进页不再先闪等待句。
## D · 跨部署旧标签页会在下一次跳转整页重载(BUG-965 / 967)
这一条必须跨一次真实部署,属环境依赖。
1. 在 staging 打开 `/` 并停留在对话页(不要关标签)。确认对话还能发、还能收。
2. 让负责人发一版新的 staging(或等下一轮门禁部署)。记下新 SHA。
3. **不要刷新**这个旧标签。切到别的应用再切回来(触发 `visibilitychange`)。
4. Network Clear。点侧栏「星盘」。
- **期望**:出现 Type = `document` 的 `/chart` 请求(整页重载),页面打开;不是点击无反应。
- 地址栏最终是 `/chart`,之后再点「星历」应走客户端导航(没有新的 document 请求),因为这时已经是新构建。
5. 另开一个**部署之后**才打开的新标签,点「星盘」。
- **期望**:没有 document 请求(版本一致,仍是客户端路由)。
6. 若 health 接口人为断掉(DevTools Offline 只挡 `/api/health` 不挡其它):
- **期望**:当前标签继续能点、不强制刷新。
失败时记下:点击时的 URL、Console 全文、Network 里 `/_next/static` 与 `/chart?_rsc` 的状态码。不要把用户资料贴进仓库。