BUG-715/716/717: typed engine failures with logs and split copy, natal-only open, on-demand tabs, 10s timeout, in-memory cache, no speed-promise eyebrow.
4.5 KiB
4.5 KiB
PROGRESS · 星盘页开页不再整页阻塞(2026-09-15)
工作树:.worktrees/chart-page-blocking-open-20260915
分支:codex/chart-page-blocking-open-20260915
任务书基线:origin/staging @ 8caa2a2b(任务书本身;代码基线 2533d5a3)
本机 Windows。
Skill 未 bump。未改 scripts/**、deploy/**、vendor/**、frontend/src/app/page.tsx、vedic-chart-svg.tsx。未放宽 HEAVY_COMPUTE_PATHS / JYOTISH_HEAVY_COMPUTE_CONCURRENCY。
开工基线
| 项 | 数字 |
|---|---|
frontend/src/app/page.tsx |
1951 行 |
| 最大 BUG 号 | BUG-714(本单占用 715–717) |
tsc --noEmit |
收尾 0 错 |
npm run lint |
0 error(全仓既有 warning 119;本单新文件 0 warning) |
frontend/node_modules 用 junction 指向主仓。
任务状态
| 任务 | 状态 | 说明 |
|---|---|---|
| 1 BUG-715 失败可诊断 | 完成 | ok / busy / http_error / timeout / bad_payload;非 ok 打 console.warn(路径、状态码或错误名、耗时;不含资料);429 与其它分档文案;catch {} 去掉 |
| 2 BUG-716 开页不阻塞 | 完成 | /chart 改为静态壳;进页只算 /api/chart;四个后续按 tab / 非 D1 chip 按需;超时 10 秒 |
| 3 BUG-717 配额与文案 | 完成 | 开页不再打 western / qizheng;内存缓存 5 分钟,键含 ayanamsa + node_mode;失败页无眉标;成功眉标去掉「打开即有」 |
| 4 测试与文档 | 完成 | BUG-715/716/717、DESIGN、VOICE、CHANGELOG、真人清单、PROGRESS |
实现要点
postEngine不再return null。分类在chart-view-engine.ts,日志在assembleChartView的callEngine包装层,mappercatch (error)记errorName+message。/chart不再force-dynamic、不再await loadChartView()。ChartPageRoute先画外壳,再GET /api/chart-view。未登录仍跳/login。GET /api/chart-view?layers=varga,chara,western,qizheng按需取后续。缺省 layers 只有/api/chart。- 等待态沿用星历页静态句:「这一张盘还没拿到。」「这一栏还没拿到。」「这一分盘还没拿到。」揭幕后无 spinner / 骨架 / 「正在加载」。
- 引擎结果缓存在 Next 进程内存(与 rate-limit / feature-flag 同一做法)。
api_scratch在 API 容器上,BFF 没有这个卷,没有新依赖。失败不写缓存。TTL 5 分钟。
超时取值
CHART_VIEW_ENGINE_TIMEOUT_MS = 10_000。任务书实测 /api/chart 0.60 秒、五个合计 0.75 秒。45 秒大两个数量级,只会让人盯空白。10 秒大约是实测的 16 倍,给冷启动和跨容器网络留余量;挂起时十秒内落到失败文案。
既有断言改动
| 文件 | 原值 | 新值 | 原因 |
|---|---|---|---|
chart-page-view.test.tsx 成功页眉标 |
直接计算 · 打开即有 · 不消耗点数 |
主盘直接算 · 分盘按需 · 不消耗点数 |
BUG-717:打开即有是速度承诺,且曾印在失败页上 |
chart-view-route.test.ts western/qizheng 是否被调用 |
无 layers 也会打 /api/western 与 /api/qizheng |
只有请求对应 layer 才打;无 layers 时路径只有 /api/chart |
BUG-716/717 开页不得占满重计算配额 |
assembleChartView 的 postEngine 形状 |
Record | null |
EngineCallResult |
BUG-715 失败必须带原因 |
未弱化其它既有断言。未改 page.tsx(仍 1951 行)。
测试
| 命令 | 结果 |
|---|---|
npx tsx --test tests/chart-view-engine.test.ts tests/chart-view-route.test.ts tests/chart-page-view.test.tsx |
27 pass / 0 fail(本单相关;其中新增约 12 条) |
./node_modules/.bin/tsc --noEmit |
0 错 |
npm run lint |
0 error(119 条既有 warning,本单新文件未新增) |
page.tsx |
仍 1951 行,未改 |
npx next build --webpack |
compile + TypeScript 过;Collecting page data 死在既有 SkillPackageRegistryError(EPERM symlink /api/birth-time-guide),与本单无关。未能从本机构建表确认 / 与 /chart 的 ○ Static。源码合同:chart/page.tsx 已去掉 force-dynamic / loadChartView。 |
npm test 全量 |
# tests 3101 / # pass 3014 / # fail 73 / # skipped 14。失败集中在无 Docker 的 database-*、部署/Caddy、Skill SHA、Windows 路径。失败清单不含本单文件。本机不是 Linux 验收机。 |
环境缺口
- 无登录态、无 Chrome:真人走查见
docs/testing/chart-page-open-20260915.md。 next build收集页面数据时 symlink EPERM,无法在本机核对路由表。