Files
Jyotisha/docs/tasks/PROGRESS-starter-home-polish-20260926.md
T
Jesse_ChenandClaude Opus 5.5 b5a02ca861 fix(home): split starter fine print, show hints only when actionable (BUG-1041)
TASK-starter-home-polish-20260926:
- D1 today's trend moves to a sub-line under the greeting
  (.starter-greeting-sub), read from the same dailyStarlanguage state the
  warm snapshot seeds; static sentence until ready, hidden without a minute.
- D2 the line under the pills appears only for a resumable case or a
  non-self subject; the first-run and redo sentences are removed.
- BUG-1041 entrySummaryFromResponse read snake_case keys while the
  entry-summary route returns camelCase, so every account parsed as a
  first run; the parser now reads the route's shape (snake_case still ok).
- D3 daily entry icon MoonStar, credits icon Coins; D4 boundary line kept.
- Records: CHANGELOG, DESIGN, VOICE, BUG_HISTORY, PROGRESS, testing list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2026-09-26 08:47:53 +08:00

7.5 KiB
Raw Blame History

PROGRESS · 首页开场小字拆分 + 今日星语 / 点数图标(2026-09-26)

任务书:TASK-starter-home-polish-20260926.md。执行方:Claude 子代理(直接执行模式)。分支 codex/starter-home-polish-20260926,worktree .worktrees/starter-home-polish-20260926,本地提交未推送。

基线

  • origin/staging = 7475eb6e(BUG-1038、BUG-1040 已合入)。
  • 基线全量前端测试(Node 20.19.2):3953 条,pass 3865 / fail 61 / skipped 27(61 条均为环境缺口:Node 20 mock.module 的 ERR_MODULE_NOT_FOUND @/…、无 Docker)。
  • 基线 next build --webpack:/ ○ Static;rootMainFiles gzip 130933 B;index.html 引用的全部 js/css gzip 合计 656646 B。
  • BUG 编号:开工时 docs/BUG_HISTORY.md 最大 BUG-1040,远端各分支无更大号 → 本单用 BUG-1041。

改动

任务 文件 内容
T1 / D1 components/starter-home.tsx、app/(app)/page.tsx、globals.css StarterGreeting 加可选 dailyTrend / dailyTrendSettled,渲染 .starter-greeting-sub(--color-ink-secondary、--type-body-sm、两行截断)。page.tsx 传 natalMinuteAvailable ? dailyStarlanguageTrend : null,读的就是 BUG-1040 暖快照初始化的同一个 dailyStarlanguage state;未就绪沿用静态句「今天的星语还没写出来。」+ role="status",无 aria-busy、无新等待态。
T2 / D2 components/starter-home.tsx 新增纯函数 rectificationEntryHint(forSelf, summary):非本人 →「生时校正暂时只支持本人。」;summary.hasResumableCase →「上次那次校正还没完成,可以接着做。」;其余 null,不渲染 <p>。删「不确定出生时间时…」「上次已经校正完…」「未完成的那次可以从左侧继续」「看看今天的整体节奏」四句与「·」拼接。StarterEntries 去掉不再用的 dailyStarlanguage / dailyStarlanguageTrend / rectificationCardAction 三个 prop。
T2 / 分支误判 lib/rectification-entry.ts 真 bug(BUG-1041):/api/rectification/cases/entry-summary 返回 camelCase(getRectificationEntrySummary 的投影),entrySummaryFromResponse 只读 snake_case,每个真实响应都解析成全 false。改为优先读 camelCase、仍兼容 snake_case。结果:已校正账户可访问名变回「再次校正」,未完成提示能出现。
T2 / D4 — 边界句「出生时间不足以支持的判断我会说明,不会补造具体分钟。」原位保留。
T3 / D3 components/starter-home.tsx、app/(app)/page.tsx 今日星语入口 Sparkles → MoonStar;右上角点数 Sparkles → Coins(className="credit-icon"、aria-hidden、按钮 aria-label 不变)。已确认 lucide-react 1.24.0 同时导出 MoonStar、Coins。
T4 CHANGELOG.md、frontend/DESIGN.md(Starter home + §9)、frontend/docs/VOICE.md、docs/BUG_HISTORY.md(BUG-1041, investigating)、docs/testing/starter-home-polish-20260926.md、docs/tasks/README.md 记录。

红线核对:Home() 未新增 hook(只改 JSX 表达式);page.tsx 1373 → 1370 行;无语句压行;未改今日星语接口与生成逻辑;未改依赖、迁移、workflow。

测试

项 结果
tsc --noEmit 0 错
npm run lint 0 error(126 warning,均为既有文件的既有 warning,本单文件无新增)
全量 npm test 3960 条,pass 3872 / fail 61 / skipped 27
失败名单 vs 基线 逐条一致(diff 为空),新增失败 0
测试名单 vs 基线 +7 条新名(下文),消失 0 条
Python 源码合同 tests/test_daily_and_rectification_entrypoints.py、test_session_management_entrypoints.py、test_birth_time_journey_contract.py、test_supabase_user_data_contract.py 全过
npm run build -- --webpack 通过;/ ○ Static,/chart /ephemeris /people ○
gzip rootMainFiles 130933 → 130933 B(0);首屏引用全部 js/css 656646 → 656729 B(+83 B,+0.013%)

新增 frontend/tests/starter-home-polish-20260926.test.tsx(7 条):D2 首次 / 已校正无提示、未完成一句;D2 非本人(纯函数 + 真实 subject store 渲染,按钮禁用);D4 边界句;D1 副行三态(就绪 / 静态句 + status / 无分钟不渲染);D1 page.tsx 读暖快照同源 state;D3 图标与可访问名;BUG-1041 路由输出 JSON 往返后解析(修复前此条失败,已实测)。

改动既有断言(三栏同时写在测试文件内)

文件 原值 新值 原因
frontend/tests/icon-motion-audit.test.ts import { Clock3, Sparkles }、<Sparkles aria-hidden="true" />、doesNotMatch /Moon|MoonStar|thinking-orbs/ import { Clock3, MoonStar }、<MoonStar aria-hidden="true" />、doesNotMatch /Sparkles|thinking-orbs/ D3 产品拍板换 MoonStar;「无循环动画、无 thinking-orbs」原样保留,并反向锁住旧图标
frontend/tests/rectification-agentic-entry.test.ts match /rectificationCardAction === "restart"/ match rectificationEntryHint(rectificationForSelf, rectificationEntrySummary) 与 summary?.hasResumableCase;doesNotMatch === "restart" D2 删掉 restart 那句;BUG-1041 查明该分支从未命中。「由服务端 entry summary 驱动、不读会话列表」的意图不变

浏览器验证(本地 next start + Chrome 151 headless,CDP 拦截 /api/* 回放虚构数据,entry-summary 用路由真实的 camelCase 形状)

场景 副行 入口下方 其他
375 / 1280 × 明 / 暗,已校正账户 趋势句两行,明 rgb(95,95,89) / 暗 rgb(179,175,164),14px 无 生时校正可访问名「再次校正」;图标 moon-star / coins;无横向溢出
375 明,未完成校正 趋势句 「上次那次校正还没完成,可以接着做。」 可访问名「开始新的生时校正」
375 明,首次 趋势句 无 —
1280 明,今日星语 unavailable 「今天的星语还没写出来。」role="status" 无 —
375 明,无出生分钟 不渲染 仅边界句 入口「查看今日运势」
暖返回:首页 → /chart → 新建对话(今日星语接口压 2.5 s) 首帧即有趋势句(点击后 17–20 ms) — 可交互 23–27 ms,加载环 0 次;控制台 0 error

截图(仓库内):docs/testing/starter-home-polish-20260926/starter-375-light-resumable.png、starter-1280-dark.png。其余截图在会话 scratchpad shp/(375/1280 明暗、静态句、无分钟、暖返回),未入库。

环境缺口

  • 无登录态真机:真实账户的 entry-summary、真实今日星语文本长度、VoiceOver 朗读 → docs/testing/starter-home-polish-20260926.md。
  • Node 20:61 条 mock.module 类失败为既有环境缺口,名单与基线一致。
  • 无 Docker:DB 套件未跑(本单不动表)。

观察(未处理,留给产品 / Claude 定夺)

  • 首页「生时校正」按钮走 intent=homepage,服务端总是新建 Case;未完成的那次要从侧栏继续。产品指定的新文案「上次那次校正还没完成,可以接着做。」没有说「从左侧」,用户可能以为点按钮就会接着做。按任务书原文实现,未改。
  • useRectificationSurface.rectificationLimitedToSelf 点击时的错误文案仍是无句号的「生时校正暂时只支持本人」(非本人时按钮已禁用,正常点不到),不在本单范围。