Repository navigation
docs(analytics,administration): write the first-response claims, the Lead reports section and two behavioural claims to source (#936, #951, #952) - #954
Merged
Conversation
…Lead reports section and two behavioural claims to source (#936, #951, #952) Three pages presented a measurable first-response SLA the app has never had. `first_response_date` does have a writer - logActivityAction stamps it when a held call or meeting is logged on a case - but nothing compares that stamp against a target: case_metrics declares no first-response measure, no report or tile reads it, no flow alerts on it, and the four target numbers appear nowhere in src. administration/setup section 11 loses the First response column and names the stamp; analytics/reports states what SLA Performance Report really reports (violation rate, not on-time percentage); analytics/cubes drops the phantom first-response measure and the SLA met % and names the real measure. #951: the Lead reports section listed three reports that src publishes nowhere and omitted the only real one. It now lists Lead Engagement by Month x Source, names the three absent ones, and corrects the Working status - an import alias for Contacted, not a value of crm_lead.status. #952: the Setup -> Opportunity -> Stages screen does not exist (stages are the stage field's options, probabilities are STAGE_PROBABILITY in the hook, which re-derives probability on every save), and automation cannot hang off a state machine transition - the table is a warning-severity validation that logs and emits nothing, so the "much more performant" advice named a mechanism this app does not have. All three locales. Documentation only; src/ unchanged.
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
…satellite, PM scope extension) The table listed six reports where src/reports/case.report.ts publishes three. Cases by Status and Priority, SLA Performance Report and Cases Opened by Priority x Day are real; Case Volume by Origin, Case Resolution Time, Top Accounts by Case Volume, Reopened Cases and CSAT by Agent are published nowhere, and most of them ask case_metrics for something it does not carry - no agent dimension, no account dimension, no reopen marker on the case, no measure over Customer Satisfaction. Only Case Volume by Origin is buildable as a custom report, because Origin is a dimension; the section now says so per name. Two subscription examples named reports from the phantom list and now name published ones. All three locales. Documentation only; src/ unchanged.
yinlianghui
marked this pull request as ready for review
August 6, 2026 13:41
This was referenced Aug 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #936
Fixes #951
Fixes #952
三单并单(R31),外加 PM 在 #948 验收时判归本单的《Service reports》整表收口。四个页面 × 3 语言,
src/零改动,content/docs/releases/未触碰。基线origin/main=b7791caf(PR #950 落地后),全部行号 fresh main 重定位;PR #923 / #950 的落地行零回退。#936 —— 「可度量的首次响应 SLA」三处
先复核前提,三处全部成立:
first_response_date有写入方:src/actions/global.actions.ts的logActivityAction在工单第一次记录「已经发生过」的通话/会议时打戳(读回旧值,不覆盖)。这一半是真的。case_metrics(src/datasets/case.dataset.ts)三个 measure 是case_count/avg_resolution/avg_sla_violated,无任何首次响应项;grep -rn "first_response_date" src/flows/ src/reports/ src/datasets/零命中;content/docs/service/sla-and-escalation全页first response计数为 0 —— 而 setup §11 正是把「SLA matrix」链到那一页。三处按 #933 / #946 已落地的写法抄平(
service/cases.mdx:179是同族的标准句式):administration/setup§11:删掉整列 First response(1 小时 → 1 个工作日),保留解决目标表,点名 Critical 那行是case_sla_defaults真正盖出来的期限、其余三行是服务承诺;另起一段写实「这里没有首次响应目标可确认」+ 戳的真实写入时机 + 三条否定(无度量、无报表磁贴、无告警)。收尾把「请自行调整」指向src/objects/case.hook.ts,不再暗示存在某个设置屏。analytics/reports:SLA Performance→ 真名 SLA Performance Report,口径按case.report.ts写实;表下一段说清它没有首次响应数字,且那个 SLA 数是违约率(is_sla_violated的平均)而非准时率。analytics/cubesService Cube:删掉First-response time (minutes)与SLA met % (first response and resolution)两条,换成case_metrics真实声明的 SLA Violation Rate 并注明它是违约率不是达标率;补一段「这里没有首次响应度量」。一处越出 issue 列举但属同一主张:cubes 的示例问题 "SLA met % by priority by month." 与被删的那条度量是同一个名字 —— 若只删度量、留下示例问题,页面会自相矛盾。改写为 "SLA Violation Rate by priority."(顺带去掉 by month:
created_date粒度是 day,#924 已在 sla 页写明)。#595「是否应该有首次响应 SLA」不预判,三处都只写现状。#951 —— Lead reports 整节
src/reports/六个文件里 lead 侧只有lead.report.ts一份,label 是 Lead Engagement by Month × Source;页面列的三份grep -rn "Lead Conversion Funnel\|Lead Source ROI\|Aged Leads" src/零命中。沿 #939 在service/cases「Standard list views」的口径重写整节:runtimeFilter排除)。Working:它是src/mappings/lead_import.mapping.ts里'Working': 'contacted'这一行导入别名,不是crm_lead.status的取值;真实状态词按 PR docs(administration): write the state-machine status vocabulary and the last two behavioural claims to source (#921, #940) #950 的词表写成 New → Contacted → Qualified → Unqualified → Converted(Unqualified 从任何开放状态可入)。lead_metrics只有一个度量(线索计数)+ 四个维度,收入根本不在这个数据集里。PM 面扩 —— 《Service reports》整表(#948 卫星命中)
第二个 commit。原计划只改 SLA 那一行,PM 判定整表归本单一次收口。
src/reports/case.report.ts只发布三份,页面列了六份:rows: ['status','priority']、values: ['case_count','avg_resolution'],带一张按状态的柱状图rows: ['priority']、values: ['case_count','avg_sla_violated','avg_resolution']、runtimeFilter: { is_closed: true }rows: ['priority']×columns: ['created_date'](day 粒度)另外五份(Case Volume by Origin / Case Resolution Time / Top Accounts by Case Volume / Reopened Cases / CSAT by Agent)在
src/零命中,且多数连自建都建不出来 —— 逐条给出理由:case_metrics无 owner 维(所以「by agent」两处都够不着,与我在 cubes/setup 消除的同族一致)、无 account 维、工单上没有任何字段标记「曾被重开」、Customer Satisfaction(customer_rating)虽是真字段但数据集没有为它声明度量。唯一建得出来的是 Case Volume by Origin(Origin 是维度),如实写明。《订阅与定时推送》里两条示例点名了刚被判定为不存在的报表(SLA Performance / Top Accounts by Case Volume)—— 这是我这次改动自己造成的自相矛盾,一并换成真实报表。Sales / Revenue / Marketing 三节未动(见「边界」)。
#952 —— 两条枚举外行为主张
administration/setup:96):「请在 设置 → 商机 → 阶段 中调整」→ 沿 docs(service): write the cases and state-machine pages' remaining claims to source (#912, #920, #925, #926) #939 对state-machines:108的同型处理,点名该配置面不存在;阶段是stage字段选项(src/objects/_picklists.ts的OPPORTUNITY_STAGE_OPTIONS),概率是src/objects/opportunity.hook.ts的STAGE_PROBABILITY,且该钩子每次保存都按阶段重推probability/expected_revenue,所以手填概率撑不过下一次保存 —— 这一条比原句多一个读者真会被咬到的事实。administration/state-machines:140):「用状态机转换触发自动化 —— 性能要好得多」。比较对象无据,且机制前提不成立:转换表是severity: 'warning'的validations[]条目,在做出移动的那次保存里被求值、只写一行日志,不产生任何可订阅的事件(本页 :120 在 PR docs(administration): write the state-machine status vocabulary and the last two behavioural claims to source (#921, #940) #950/docs(service): write the cases and state-machine pages' remaining claims to source (#912, #920, #925, #926) #939 后已写明「按转换触发自动化则是record_change流程或对象钩子」)。改写为实况:该收窄的自动化是record_change流程在自己的起始条件里比对record.stage与previous.stage——src/flows/opportunity-won-alert.flow.ts正是这么写的,并给出它这么写的真实理由(避免已赢商机的每次后续编辑都重发祝贺)。删去无据的性能比较。验证
六道门全部在
flock -w 7200 /tmp/os-heavy-verify.lock内串行,面扩后重跑一遍,退出码均为 0:CI(head
9f097de2)8 项全绿,含 link-check 与 Check Changeset。守卫盲区如实报告:本 PR 改的四个页面里,只有
docs-conversion-rate-spelling(carriers 钉住analytics/reports两个中文页必须仍写「转化率 / 轉化率」)与docs-drift的 callout 数量平价真正读到我的改动面;setup §11、cubes 度量列表、reports 各表、state-machines 的 Tips 段落没有任何守卫读,改动正确性靠src/逐条回源,不靠测试变红。docs-conversion-rate-spelling是本 PR 最接近踩掉的守卫:改前analytics/reports.zh-Hans全页仅有的一处「转化率」就在我重写的 Lead Source ROI 那一行。反向验证(预测方向:RED)——把重写后新写法里的「转化率」临时换成别的词,单跑该守卫:与预测一致变红,随后还原(两个中文页各保留一处该词,语义上正是 ROI 报表答不出来的那个「转化率」)。还原后
docs-conversion-rate-spelling/docs-drift/status-state-machines三个守卫单跑77 passed。status-state-machines的 roster 守卫只读 state-machines 页第一个##小节,我的 Tips 改动在其扫描面之外,预测 GREEN 且实测 GREEN。关于 PR #955 的新守卫
test/docs-service-index-analytics.test.ts:已从其分支取来在本分支单跑,结果13 failed | 7 passed—— 红的原因与本 PR 无关,该守卫钉的是 #955 自己重写的content/docs/service/index*.mdx三页文本,而那三页在我的 base(b7791caf)上还是旧文本。它的输入面是 service/index 三页 +service.dashboard.ts+case.report.ts/case.dataset.ts,与本 PR 的改动面(analytics 两页、administration 两页)零交集,两个 PR 也没有共同文件。顺带一提:该守卫从源码导出的三个报表 label 与我这次写进 reports 页的三个逐字一致。边界
src/零改动,content/docs/releases/未触碰,@objectstack/*版本未动。analytics/cubes的「四个内置 cube」框架同样与src/对不上(src/datasets/是九个 dataset,没有 campaign dataset;Pipeline by Stage 只存在于仪表盘磁贴标题,Stale Opportunities 只存在于列表视图 label)。「首次响应 SLA」被三处文档写成可度量的目标:setup 清单 §11 的 SLA 矩阵整列、analytics/reports 的 SLA Performance 行、analytics/cubes 的 Service Cube 措施 —— 全仓没有任何首次响应目标、达标度量或超时信号 #936 正文明确把它们排除在本单主张之外,已按 Prime Directive chore(deps-dev): bump eslint from 8.57.1 to 9.39.2 #10 另行开单,不在本 PR 修:analytics/reports剩下的 Sales / Revenue / Marketing 三节共 13 个报表名src/里一个都没有,而真实发布的 6 份报表在整页上一次都没出现 #962(reports 剩余三节)、analytics/cubes整页建立在「四个内置 cube」之上,而src/datasets/是九个 dataset:四个名字一个都不存在,Marketing Cube 连数据源都没有 #965(cubes 整页)。