Repository navigation
content/docs/analytics/dashboards.mdx describes tiles that no dashboard ships (near-total drift, plus a fabricated usage stat) #610
Description
Activity
- addedbugSomething isn't workingSomething isn't workingdocumentationImprovements or additions to documentationImprovements or additions to documentationpm:queueReady for the PM dispatch loopReady for the PM dispatch loop
on Aug 2, 2026 分诊 + PM 裁定(PM 循环第 1 轮扫检,会话
session_01Rvtsew6XgsSjxVa59HRPRK):已入队pm:queue,但本轮暂缓派发,见下。裁定「文档裁剪到现实」而不是「把仪表盘建设到文档的野心」:文档必须描述已发货的东西,这是本仓既有教条(同 #587 的执法姿态),不需要维护者拍板;编造的 most-clicked 统计无论如何都要删。若维护者想要文档里描述的那些高级 tile(Forecast vs Quota gauge、Net New ARR、CAC …),那是独立的功能提案,应另立 issue 排期 —— 不阻塞本 issue 的纠偏。随文档重写一并加 docs-drift 规则:页面列出的每个 tile 名必须能解析到所属 dashboard 的某个 widget
title。⛔ 串行化说明(记录在案,防止其他 PM 会话误派):#592(活动模型,在飞,分支
claude/issue-592-activity-model)会往 dashboards 里新增活动类 widget。本 issue 的重写必须基于 #592 合并后的 dashboard 现状,否则要么漏写新 tile、要么两单在src/dashboards/与 docs 上互相冲突。Blocked-by: #592 的 PR 合并。
Generated by Claude Code
- addedpm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatch
on Aug 5, 2026 认领:PM 循环第 2 轮
会话:session_0194QUW67v7vyLToEd9NSeRM
分支:claude/hotcrm-bug-triage-ks55ze(本会话统一开发分支,经维护者环境指定)
Worktree:hotcrm-issue-610
文件面:content/docs/analytics/dashboards.mdx、test/docs-drift.test.ts(基于分支上 #606 已合入的版本追加)、changeset。只读src/dashboards/、objectstack.config.ts,不改动。解除阻塞说明:上一轮记录的阻塞项 #592(活动模型)已随 PR #670 于 08-04 合并,本单现在必须基于合并后的 dashboard 现状(含活动类 widget)重写。裁定沿用 08-04 记录:文档裁剪到现实、删除编造的 most-clicked 统计、docs-drift 加「tile 名 ∈ 所属 dashboard 的 widget title 集」规则。
Generated by Claude Code
- added a commit that references this issue
on Aug 5, 2026 验收 ACCEPT(PM 复核,对照远端分支与 CI,不采信报告自述):
- 落地:提交
3091717e(merge24a02a2a),随 PR fix: bug 批次修复(PM 派发循环)— #606 #673 #610 #548 #678 #650 已落地 #677 评审。CI 在该 head 上七项全绿(CI / E2E / Code Quality / Changeset / Link Check / CodeQL / Labeler)。 - 分诊时的新鲜度提醒兑现了:本仓实际注册的是五个 dashboard,而非 issue 正文(08-02 视角)与旧文档所写的四个 ——
sales_activity_dashboard(Activity model: first-class meetings/events + call logging on every sales object #592 / PR feat(activity): first-class events, per-object call logging, and real interaction recency (#592) #670)两边都没提到。重写后的页面按 widget 的真实title逐块描述五个 dashboard,##小节与注册表一一对应。 - 编造的 most-clicked 统计已直接删除,未用另一个未经测量的说法替换(符合裁定)。
- 另修正三处有源码证据的失真:Remove fabricated
trendvalues from crm/sales/service dashboards (executive already did, with rationale) #587 之后无任何 tile 渲染同环比;Sales Activity 与 Customer Service 有意不带日期范围选择器(Service dashboard renders empty by default — dateRange defaults to last_30_days but seed cases are older #460 的 datetime 过滤缺陷所致);能力清单里承诺的 tile 导出 PDF、周报订阅、阈值告警替换为各 dashboard 真实声明的控件。 - 守卫按裁定的方向落地(listed ⇒ exists):小节内 tile 条目必须解析到该 dashboard 的某个 widget title;正文中
**Name** tile引用必须解析到某个 dashboard 的 widget;每个已注册 dashboard 必须有对应小节。含三条防空转断言,并在注释里写明未强制反方向(widget ⇒ listed)及其理由。Wow #1 demo docs + script still POST the retiredsales_copilotagent #606 的既有规则未被改动(追加而非重写)。 - 反向验证做得扎实:预先声明预期为红并点名三处,实际恰好三条失败、无多余噪音(缺失小节 / 不存在的
Forecast vs Quota/ 正文引用不存在的Slipping Deals),随后原样还原复跑绿。 - 全量 52 文件 / 1293 通过。
衍生发现 #685(两个中文页仍带同一批漂移与那条编造统计)已由 dev 立单,我独立复核确认前提为真(简中/繁中第 72 行)。处置见该单评论。
本单保持 open,待 PR #677 合并后由
Fixes #610自动关闭。
Generated by Claude Code
- 落地:提交
Found while working #587 (removing fabricated
trendvalues from dashboard tiles). Filed unassigned, out of scope for that PR — recording it rather than fixing it as a rider.Problem
content/docs/analytics/dashboards.mdxlists the tiles of each of the four dashboards. Almost none of the listed tiles exist insrc/dashboards/*.dashboard.ts. This is a user-facing docs page, so a business user or admin reading it is being told about widgets they will never find in the product.Actual widgets, read from the registered stack (
objectstack.config.ts→dashboards[].widgets[]):CRM Overview and Executive overlap the real metadata on essentially zero tiles.
Two specific sub-problems worth calling out:
The page promises capabilities the app does not have. "Forecast vs Quota — gauge", "Win Rate (last 90 days)", "Net New ARR", "CSAT and NPS", "Customer Acquisition Cost", "Activity Heatmap", "Slipping Deals" are not tiles, and several are not even measures any dataset defines. This is not stale wording — it is a feature list for a different product.
A fabricated usage statistic. The page asserts: "The Cases Approaching SLA tile is the most-clicked widget on this dashboard — it's how agents prioritise." There is no such tile, and there is no click telemetry anywhere in this repo, so the claim is invented on both counts. Same class of defect as Remove fabricated
trendvalues from crm/sales/service dashboards (executive already did, with rationale) #587: a confident-sounding number that nothing measured.Related docs drift on the same page, also unverified: the docs describe the CRM Overview tile "New Leads This Week — trend vs prior week", "Win Rate … percentage with trend" and "CSAT … trend". After #587 no tile renders a period-over-period trend at all, so these lines would be wrong even if the tiles existed.
Why CI did not catch it
test/docs-drift.test.tsonly guards two classes today:package docs do not drift from the flows they document(flow source vs docs)maintainer docs do not point at directories that no longer existNothing checks that a docs page's tile list matches the dashboards actually registered, so this page can (and did) drift arbitrarily far.
Suggested fix
content/docs/analytics/dashboards.mdxto describe the tiles the app really ships, keeping the "built for / answers" framing that is genuinely useful.test/docs-drift.test.tswith a dashboards rule: every tile name the page lists must resolve to a widgettitleon the dashboard whose section it sits under. That makes this class fail in CI instead of in front of a customer — same enforcement stance as the guard added for Remove fabricatedtrendvalues from crm/sales/service dashboards (executive already did, with rationale) #587.Deciding whether the docs should be trimmed to reality or the dashboards built up to the docs' ambition is a product call, which is why this is filed rather than fixed inline.