docs(tasks): 控制台噪音清理任务书(SVG height=auto、consult/status 无活动任务 404 → 204)
三条控制台红字定性:SVG 属性非法是我方缺陷(BUG-906)、无参 status 404 是设计噪音(BUG-907)、reportAllChanges 是扩展注入脚本不处理。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JUei7K13cYxLHE3Axe4A45
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
05cf20fb83
commit
37f77fe8b3
@@ -158,6 +158,7 @@
|
||||
| `TASK-billing-pricing-20260830.md` | `PROGRESS-billing-pricing-20260830.md` | 计费闭环与功能级定价 | 已合入 | `aaaa5fb7`~`a499c344` |
|
||||
| `TASK-cend-ui-claude-alignment-20260916.md` | `PROGRESS-cend-ui-r1/r2/r3-20260916.md` | **C 端界面向 claude.ai 产品界面对齐(三轮串行 R1→R2→R3,都动 `globals.css`,不得并行)**:根因是 `frontend/CLAUDE_DESIGN.md` 扒的是 **claude.com 营销官网**,它自己在 Known Gaps 里写明 claude.ai 产品界面不在范围内,而 `DESIGN.md:3` 把它当成了产品界面的实现契约。**R1**:`--font-display` 里 Tiempos Headline / StyreneB **从未加载**(无 `@font-face`、`public/` 无字体、`layout.tsx` 只 vendor 了 Inter),中文标题全站落到 **宋体 / SimSun**,波及 20 处含助手回答的 h2/h3(BUG-737);亮色强调色 `#85432f` 与暗色 `#d78064` 不同源,产品拍板亮色换 **Claude coral `#cc785c`**,**易漏点**是 `globals.css:16` 的 `--color-ring` 硬编码在 `@theme inline` 里不跟随 `:root`,另有第四个 `:root` 亮色块(`:4358`)必须同步(BUG-738);`.composer-footer` 常驻 44px + 顶栏 68px + `--composer-reserve` 148px,每屏固定吃掉 216px,模型选择器移进输入框内部、删掉底栏、顶栏收到 46px 并删「分析对象」副标题。**R2**:空状态是营销落地页(hero 卡 + 两张 132px 入口大卡 + 3 列 156px 主题卡),输入框被压在 **800px 以上**内容之下,重排成「问候 + 居中输入框 + 两枚入口 pill + 一排 chip」。**R3**:侧栏两个 `<details>` 拍平成一条「最近」、星盘的两个入口(侧栏分组 + 账户菜单)收敛到一处、删掉逐条助手头像。**决策记录 D3 推翻 DESIGN.md「报告强调色与应用同源」一句**(报告刻意保留深棕)。原型图 https://claude.ai/code/artifact/da275da6-2954-4f50-99aa-32bb8694d38b(三套画面 + 明暗,页面标题就是建议字体栈的实际渲染)。环境缺口:无登录态无 Chrome,四项真机观感留 `docs/testing/`。BUG 段 737–738 | 待领取 | — |
|
||||
| `TASK-cend-surfaces-claude-alignment-20260916.md` | `PROGRESS-cend-shell-20260916.md`、`PROGRESS-cend-report-20260916.md`、`PROGRESS-cend-rectification-20260916.md`、`PROGRESS-cend-chart-eph-20260916.md` | **次级页面对齐(上一单的续篇,R4→R5/R6,R7、R8 可并行)**:星盘 `/chart`、星历 `/ephemeris`、报告 `/reports` **各是脱离 app 外壳的独立全屏页**,顶部只有一个「返回对话」链接、侧栏整个消失,且三家各写了一套一模一样的 `*-shell`/`*-topbar`/`*-hero` 骨架——与上一单 E5 同根因(营销站 band 结构被套到产品界面)。**R4** 抽只读导航外壳 `AppNavRail`(只用现成的 `GET /api/sessions` + `GET /api/account`,会话行走 `sessionHref` 跳 `/?c=<uuid>`;**刻意不带**重命名/删除/收藏/归档——那套连着 `Home()` 的乐观更新与回滚,搬过来会撞 useState 增长门禁)。**R5** 星盘五 tab 下划线化 + 参数合表 + 行星表横向滚动;星历日期导航改 `‹ 日期 ›`。**R6** 报告中心卡片网格改行式列表;阅读页加常驻目录。**R7** 生时校正把可信区间从盘面板标题行提成常驻条(窄屏 `.is-compact` 下盘面板是 overlay,现在默认看不到区间),五个 `technique-audit` 折叠块收成两段。**R8** 设置内容区收窄(880px 弹窗里表单铺了 690px)、套餐卡三修饰符收敛成两态。**已解锁**:原挡路的设置单已于 `111b4a84`(BUG-698)合入。**两条不得回退**:BUG-698 的 `@supports (height: 1dvh)` 写法(重复声明回退会被 Lightning CSS 折叠)、BUG-616/617 的报告盘面 grid 实现。默认不占 BUG 号 | **R4–R8 全部已实现并验收合入** | R4:抽出 `AppNavRail`(只读,两个 GET,零写操作)+ `SecondaryShell`,三个次级页并入 app 外壳并删掉各自的 shell/topbar/hero;四个路由渲染标记**完全不变**(`/` `/chart` `/ephemeris` 仍 Static);CSS gzip −0.25%。`/reports/[reportId]` 留给 R6 与目录一起做。两处自身健壮性问题被测试抓到:`usePathname()` 可为 null、`fetch` 可能不存在。差点弄丢 BUG-717 的 eyebrow 文案(已放回)。R8:表单分区收窄到 440px(列表分区不变)、套餐卡三修饰符收敛成互斥的 `is-current` / `is-recommended`,`--highlighted` 删除改为滚动定位;手机端 `order:-1` 改挂 `[data-plan-alias]`(版位不是状态)。测试 3350→3354(净增 4),失败清单与基线逐条一致;`/` 仍 Static;我的干净构建实测 CSS gzip −3 字节。**遗留待产品拍板**:`?plan=` 深链现在完全没有视觉指向,只有滚动位置。R6:报告中心卡片网格改行式列表、阅读页并入外壳并把目录挪到右侧常驻。**任务书 E10 过期**——目录在 `cfcd369d` 就已存在,本轮是挪位置定稿而非从零加。挂外壳带出一个真实打印风险已处理:`.chat-app`/`.chat-panel` 是 `height:100%;overflow:hidden`,裸 `window.print()` 会把九节报告裁成一页,阅读页因此多挂一条只在挂载期生效的 print 样式解锁外壳。「生成中的分节进度」做不了——`REPORT_LIST_COLUMNS` 不返回节数,按 VOICE.md 不许前端编。R7:区间常驻条与盘面折叠收敛。**任务书 E9 也不准确**——对话区顶部早有常驻条 `RectificationTimeline` 且窄屏可见,真正只在盘面标题行的是**代表分钟**;因此没另造第二条,在既有条上补齐代表分钟与已答题数(与盘面同一次 `workingRectificationTime()` 调用)。折叠块实际是 **8 个**不是 5 个。**触发让步顺序第 5 条**:收窄进度未做——服务端无该字段,且 `candidate_range` 会放宽(BUG-572),前端相减会把一次放宽报成收窄,已写进 `BLOCKED.md`。顺带修掉一个**静默失效的旧断言**(`slice(indexOf(A), indexOf(B))` 在 B 改名后变成几乎整份文件,四条 `doesNotMatch` 假通过)|
|
||||
| `TASK-console-noise-20260916.md` | `PROGRESS-console-noise-20260916.md` | 控制台噪音清理:两个星盘 SVG 写了非法的 `height="auto"` 属性,每张盘报一次(BUG-906);`/api/consult/status` 无参查询在没有后台任务时返回 404,浏览器每次切回标签页都打红字,改 204、带参路径仍 404(BUG-907)。第三条 `reportAllChanges … startTime` 是浏览器扩展注入脚本,非本仓代码,不处理 | 待领取 | — |
|
||||
|
||||
### 待开的任务书(2026-09-03 审查决定)
|
||||
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
# 任务书 · 控制台报错清理:SVG `height="auto"` 与 `/api/consult/status` 404 噪音(2026-09-16)
|
||||
|
||||
## 0. 基线
|
||||
|
||||
- 基线 commit:`05cf20fb`(`origin/staging` head,staging `/api/health` 的 `deployment.gitCommit` 与之相同)。
|
||||
- 分支:`codex/console-noise-20260916`,`git worktree add -b codex/console-noise-20260916 .worktrees/console-noise-20260916 origin/staging`。
|
||||
- 范围:只有前端。不动 Python、不动迁移、不动 Skill。
|
||||
- BUG 段:**BUG-906 起**(基线 `docs/BUG_HISTORY.md` 最大号 BUG-905,开工时再核对一次)。
|
||||
|
||||
## 1. 事故实证
|
||||
|
||||
产品负责人 2026-09-16 在 staging 首页控制台连续看到三类红字:
|
||||
|
||||
| # | 控制台原文 | 来源 | 定性 |
|
||||
| --- | --- | --- | --- |
|
||||
| A | `Error: <svg> attribute height: Expected length, "auto".` | `frontend/src/components/chart-page/western-wheel-svg.tsx:31`、`frontend/src/components/personal-report/vedic-chart-svg.tsx:98` 都写了 `height="auto"` | **我方代码缺陷**。SVG 的 `height` 表现属性只接受长度/百分比,`auto` 只是 CSS 值。浏览器丢弃该属性后星盘仍能画,但每渲染一张盘报一次;报告页 22 张盘就是 22 条 |
|
||||
| B | `GET https://staging.jyotisha.chat/api/consult/status 404 (Not Found)` | 无参调用来自 `frontend/src/app/page.tsx:974`(启动)与 `frontend/src/hooks/use-consultation-run.ts:271`(页面重新可见、`online` 事件,见 `page.tsx:1328-1330`);服务端 `frontend/src/app/api/consult/status/route.ts` 在 `activeLookup` 分支查不到 `reserved` 行时返回 404 | **设计噪音**。客户端 `fetchActiveConsultationStatus`(`home-cloud-sync.ts:581-589`)已把 404 当"没有后台任务"正常返回 null,业务无失败;但浏览器对所有非 2xx fetch 都打红字,用户每次切回标签页都看到一条 |
|
||||
| C | `Uncaught TypeError: Cannot read properties of undefined (reading 'startTime') at et.reportAllChanges` | `VM4285:2`,注入脚本 | **非我方代码**。站点打包文件都带 `?dpl=05cf20fb…` 后缀,`VM` 编号脚本是浏览器扩展 / DevTools 注入;`reportAllChanges` 是 web-vitals 库接口,`frontend/package-lock.json` 里没有该依赖,`layout.tsx` 只内联主题引导脚本。本单不处理,留在 §7 给用户的验证方法 |
|
||||
|
||||
## 2. 根因
|
||||
|
||||
- A:`830799fa`(星盘页)与 `2fdcb14f`(报告盘面)把 CSS 的 `height: auto` 写成了 SVG 属性。`globals.css:4097` 早已给 `.personal-report-chart-svg` 写了 `height: auto`,属性是多余的;`.chart-page-western-svg` 没有对应 CSS 规则,靠的是 `viewBox` + `width="100%"` 自适应。
|
||||
- B:接口把"没有活动任务"和"指定 requestId 不存在"两种情况都用 404 表达。前者是常态查询的正常空结果,后者才是真正的"不存在"(`page.tsx:965` 与 `consultation-recovery.test.ts:88/112` 依赖它计数)。
|
||||
|
||||
## 3. 决策记录
|
||||
|
||||
- 产品负责人 2026-09-16 授权清理这两条控制台噪音,口径是"多余的宁可删"。
|
||||
- **不推翻**任何既有红线:指定 `sessionId+requestId` 的查询**继续返回 404**(BUG 历史 4107 行一带的刷新恢复逻辑与 `consultation-recovery.test.ts` 靠它)。只改无参的 `activeLookup` 分支。
|
||||
- 不做打断合并、不改恢复触发时机(可见性 / online)。
|
||||
|
||||
## 4. 硬红线
|
||||
|
||||
1. `page.tsx` 行数不得增长(AGENTS.md §6)。本单不需要碰它。
|
||||
2. `consultation-stream-recovery.test.ts:121-153` 对 `route.ts` 的结构断言(`activeLookup` 定义、查询链、租约回收块顺序)必须原样通过,不得改断言。
|
||||
3. `chart-page-view.test.tsx:131-135` 对 `vedic-chart-svg` 导入方式的断言不变;`globals.css:4599` 的字号规则不变。
|
||||
4. 部署有窗口期(先出新前端还是先出新接口不可控,两者同一镜像但浏览器可能持旧 JS):客户端必须**同时**接受新旧两种"无活动任务"应答。
|
||||
5. 不顺手动 `layout.tsx`、不加 web-vitals、不为 C 类报错加任何 try/catch。
|
||||
|
||||
## 5. 任务分解
|
||||
|
||||
### T1 删掉 SVG 的 `height="auto"`(BUG-906)
|
||||
|
||||
- 改 `western-wheel-svg.tsx:31`、`vedic-chart-svg.tsx:98`:删除 `height="auto"` 属性。`vedic` 的高度由 `globals.css:4097` 兜底;`western` 补一条 `.chart-page-western-svg { display: block; width: 100%; height: auto; }` 到 `globals.css` 星盘页段落(`.chart-page-vedic-stage` 附近),保证两张盘行为一致。
|
||||
- 验收:
|
||||
- `git grep -n 'height="auto"' frontend/src` 为 0 命中。
|
||||
- 在 `frontend/tests/chart-page-view.test.tsx` 增加一条契约:两个 SVG 源文件 `doesNotMatch(/height="auto"/)`,且 `globals.css` 含 `.chart-page-western-svg` 的 `height: auto` 声明。
|
||||
- 星盘页与报告页盘面视觉不变(`viewBox` 与 `width="100%"` 未动即可判定;真机对比留 §8)。
|
||||
|
||||
### T2 无活动任务时不再返回 404(BUG-907)
|
||||
|
||||
- `route.ts` 的 `activeLookup` 分支:查询结果为空时返回 `new NextResponse(null, { status: 204 })`。`sessionId+requestId` 分支查空**仍返回 404「咨询请求不存在」**,代码上把两处分开写,不要共用那一个 `if (!data ...)`。
|
||||
- `home-cloud-sync.ts` 的 `fetchActiveConsultationStatus`:`if (response.status === 204 || response.status === 404) return null;`。先判状态再 `response.json()`,204 没有 body。`fetchConsultationStatus`(带参)不改。
|
||||
- 验收:
|
||||
- `consultation-stream-recovery.test.ts` 与 `consultation-recovery.test.ts` 原断言全绿。
|
||||
- 新增契约测试(放进 `consultation-stream-recovery.test.ts`):route 源码里 `activeLookup` 空结果分支出现 `status: 204`,带参分支仍出现 `"咨询请求不存在"` + `status: 404`;`home-cloud-sync.ts` 的无参函数同时接受 204 与 404。
|
||||
- 用 `parseConsultationStatus` 的既有单测确认不会把 204 的 null body 当作有效状态(它在 204 分支之前就已返回)。
|
||||
|
||||
### T3 记录
|
||||
|
||||
- `docs/BUG_HISTORY.md` 新增 BUG-906、BUG-907(现象、触发、根因、修复、验证、防复发);C 类在 BUG-907 的"关联"里写一句"控制台第三条 `reportAllChanges` 报错为浏览器扩展注入脚本,非本仓代码,验证方法:无痕窗口"。
|
||||
- `CHANGELOG.md` 一条:控制台不再出现星盘 SVG 属性警告与无后台任务时的 404。
|
||||
- `docs/tasks/PROGRESS-console-noise-20260916.md`:测试数字、失败清单与基线逐条比对、gzip 前后。
|
||||
|
||||
## 6. 让步顺序
|
||||
|
||||
1. T2 若 204 让 `next` 的某条中间件或 `StaleClientRecovery` 误判(不太可能,先查 `stale-client-recovery.tsx` 是否拦所有非 2xx/非 JSON 应答),退而返回 `200` + `{ "status": "none" }`,客户端 `parseConsultationStatus` 之前先判 `status === "none"` 返回 null;契约测试相应改。
|
||||
2. T1 的 `.chart-page-western-svg` CSS 若撞星盘页现有布局(宽度被父容器限定),只删属性、不加规则,在进度记录写明。
|
||||
3. T3 不可让步。
|
||||
|
||||
## 7. 开工前置命令
|
||||
|
||||
```bash
|
||||
git fetch origin --prune
|
||||
git worktree add -b codex/console-noise-20260916 .worktrees/console-noise-20260916 origin/staging
|
||||
cd .worktrees/console-noise-20260916/frontend
|
||||
./node_modules/.bin/tsc --noEmit && npm run lint && npm test 2>&1 | tail -20 # 记下基线总数与失败清单
|
||||
grep -o "BUG-[0-9]\+" ../docs/BUG_HISTORY.md | sort -t- -k2 -n | tail -1 # 应为 BUG-905
|
||||
```
|
||||
|
||||
验收口径:`tsc` 0 错;lint 0 error;`npm test` 失败清单与基线逐条一致(无 Docker 的那组不算新增)且总数不减;`next build` 后 `/` 仍 Static;首屏 gzip ±2%。
|
||||
|
||||
## 8. 环境缺口(留给产品负责人真机)
|
||||
|
||||
- 部署后在 staging 打开报告页与星盘页:控制台不再有 `Expected length, "auto"`;盘面大小与之前一致。
|
||||
- 首页切到别的标签页再切回:Network 里 `/api/consult/status` 应为 204,控制台无红字。
|
||||
- 无痕窗口打开首页:`reportAllChanges … startTime` 报错应消失;若仍在,把该条连同扩展列表截图发回,另立单。
|
||||
Reference in New Issue
Block a user