ThearchyHelios
|
94a6eb9c64
|
分析期望的两处小修:期望 SQL 只返回两期时补上的基期、本期写成文字交给分析工具的参数(期次是数的也认,算子按写出来的样子比);参数和结果对不上的原因前面写「第 n 个期望(贡献)算不出期望」,不再叠两个「的」。测试补逐题 E1 顺着下钻找到两层的查询
|
2026-10-21 18:30:08 +08:00 |
|
ThearchyHelios
|
078c2c4d97
|
评测的模块说明补分析期望:judgements.py 管什么、有分析期望的题集开评时拍一份分析设置(算期望、作答都按它,记进指纹,别的题集不拍)
|
2026-10-21 18:23:57 +08:00 |
|
ThearchyHelios
|
9358d9ec48
|
评测前端认两种分析期望:题目编辑器在预览之后选贡献或判定(分析方法、模式、按哪几列、期次、点名前几段),试算写出服务端算的判定和判定语;结果页逐题写期望和答案的判定,点开写判定语、引用了哪一份结论或正文那一句;总览按期望的种类分开写结论
- typesEval.ts:期望种类加 contribution、verdict,期望带 op、mode、params;EvalAnalysisOp、EvalAnalysisMode、EvalJudgement(同服务端契约和 judgements.JUDGEMENTS);期望值、评分带判定类、点名的段、方向、判定语;总表加 outcomes_by_kind
- termsEval.ts:贡献、判定的叫法;分析方法、模式的叫法和契约的 OP_LABELS、MODE_LABELS 一字不差(test_frontend_eval_unions 逐个对照,连同判定类);判定类、方向、参数的叫法;指纹差异一句补上分析设置
- parts.tsx:期望写成「变化拆解(可加) · 按地区 · 销售额」;判定写成「主要来源:华东(下降)」「超出常规波动(上升)」「差异站得住(西南高于华东)」,算不了的照实写原因;判定类、段、方向都是服务端给的,界面只套叫法
- CaseEditor.tsx:分析期望的表单按分析方法列参数(参数名同分析工具,列从预览结果里选),换方法、模式只留新方法还认的参数;编辑配了几个期望的题时另外的期望列出来、保存时照旧带上(以前只留第一个,第二个期望会丢)
- EvaluationPage.tsx:逐题表、展开的明细、总览按种类
- scripts/check-evals.mjs:夹具补分析期望(加题选算子、试算、保存的请求体不带来源方向判定,编辑保留另外的期望;结果页四种结论、点开的明细、总览按种类),共 130 项
|
2026-10-21 18:23:57 +08:00 |
|
ThearchyHelios
|
83cd5da72e
|
虚构库 retail_trends 与分析题集:26 周的零售订单(截止昨天、固定种子),相对上一个整周埋了八个效应;题集 analysis_suite.json 每个效应一题,期望由平台的分析方法在期望 SQL 上算
- tests/fixtures/acceptance/retail_trends.py(python -m tests.fixtures.acceptance.retail_trends <db> [--today],数据源名 retail_trends,不动 retail.py):华东线下客单价降到七成带来的销售额下降(主要来自华东);三成线下订单转到线上造成的退款率辛普森(各渠道都降、整体升,结构为主);订单数的常规波动;取消单激增;线上销售额连涨十周以上;线上销售额的变化来自订单数;西南一家小店的退款率看着高但样本太少;本周没过完(和上周不可比,周一时本周还没有数据、那一题期望算不了)。订单数按店按周定好、金额在窄区间随机、退款按渠道比例挑,各效应不靠运气
- tests/fixtures/eval/analysis_suite.json:八道题,问法用使用者的说法(上周销售额为什么下降?退款率为什么上升了?上周订单数下降算不算异常?……),各配一个贡献或判定期望,订单数、取消单两题另配一个不必需的「一个数」
- 测试:同一个今天逐字节相同;四个不同的今天(周三、周日、周六、跨年)上用 app.analysis.run 按题集的期望 SQL 核对八个效应;周一那一题照实算不了;走接口导入题集、逐题试算,分析期望都算得出、判定和埋的效应一致;真运行的算期望(作答前后对得上、阈值按设置快照、参数对不上照实说)、读作答运行里的分析结论和引用、重评老结果、从头到尾评一题(助手剧本搭查库 → 分析卡 → 报告,对且可追溯、逐题 E1 等价已证明)
|
2026-10-21 18:12:12 +08:00 |
|
ThearchyHelios
|
7794794278
|
评测的两种分析期望(贡献、判定):期望 SQL 的探针快照上用平台的算子(app.analysis.run,随数据变化的调用错误记成算不了)算出期望的判定,评分沿用五种结论
- 题目(cases.py):contribution 贡献恒为变化拆解(可加、比率、乘积)、另写 top_n(期望点名主要来源的前几段,缺省 1);verdict 判定是波动基线、趋势判断、差异检验、可比性检查。参数同分析工具(不写输入、总数、下钻,不写阈值),文字参数可以带 {{ schedule.* }};来源、方向、判定不许人填(HUMAN_VALUE_KEYS 加 segment、subjects、direction、verdict 等);口径题、期望反问的题配不了
- 算期望(gold.py、judgements.py):遮罩列、目录事实、现查表的日期范围和分析工具同一套取法;阈值用这次评测的分析设置快照(Context.analysis),试算时现读设置;期望 SQL 只返回两期时可以不写基期、本期;算不了的这一项照实记(评分时不能评分),参数和结果对不上的整题没有可用的值;截断的快照照旧拒收。作答前后两次期望、和上一次比的「数据变了」都不比运行当天、现查时刻、输入快照的工件(stable_sets)
- 评分(score.py、judgements.py,SCORER_VERSION 3):判定码归到同一套判定类再比;答案引用了(判定语、具名的数、结果表的格、句末依据)判定对得上的分析结论是对且可追溯,引用它的那句却写反了不算;没引用但正文按说法表(engine/analysis_claims 同一个 scan、同一套绑定规则)写对了是对但没引用;判定、来源、方向对不上或写成相反、根本没做也没说是错。答案的分析结论从作答运行的台账读、引用从报告文档读,有判断词的句子一并读出;逐题 E1 引用分析结论时按它的输入查询比(下钻顺着上一层找);判定语不再当成答案里的数;老结果的明细里没有这两项按空读
- 执行(runner.py、answer.py):有分析期望的题集开评时拍一份分析设置,算期望、各臂作答的运行(Run.options 的 analysis)都按它,记进指纹(compare 的「分析设置」一项),重试沿用;别的题集的指纹、作答运行的选项不变。助手提示词的指纹加上分析方法(guide 的 id 和全文)、写作者的分析规则和说法表版本
- 总表(stats.py):各期望的结论另按期望的种类各一份(outcomes_by_kind)
|
2026-10-21 18:11:57 +08:00 |
|
ThearchyHelios
|
843be9a556
|
评测执行的测试不依赖同进程里的数据源个数、等待都有时限:别的测试建的数据源超过评测拍目录快照的上限时,作答运行在排队前就失败,原来的等待循环永远等不到、整次测试卡死(上传源测试和评测测试分到同一个进程时复现);这里的评测不测这个上限,测试里把上限放大,等待改成 30 秒等不到就失败并说清在等什么
|
2026-10-21 17:17:02 +08:00 |
|
ThearchyHelios
|
24b5aebae4
|
叫法消毒按词认判断词(scan bare):说法核对修复后 scan 缺省按整句规矩认(没说变化的「主要来自」不算判断),叫法是一个名字不是一句话,「主要来自华东的销售额」这样的叫法要整个不要
|
2026-10-21 17:12:48 +08:00 |
|
ThearchyHelios
|
a02dc41424
|
合入复核修复(说法核对):结论句判定回到原来的词表(扩充的判断词只给裁判排先后)、表格正文不核、补因果与来源的口子、说法表按样本调整(96 句样本表)、连续按末尾方向核、复核认三种日志且只写说明、分析结论算可引用的来源、自动修复对认不出的取值照 claims 做、候选维度写明只认码值表、scan 加只按词认
|
2026-10-21 17:12:18 +08:00 |
|
ThearchyHelios
|
2d616d01e8
|
说法表的 scan 加 bare=True:只按词认、不看上下文(构成、建议计划、业务状态、「相当」的比法、「未见异常」的主语这些只对整句话成立的规矩都不用),给认叫法(度量的叫法、因子名)里夹带的判断词用——叫法是一个名字不是一句话,「主要来自华东的销售额」照样认出来源;缺省照旧按整句的规矩。原因只是指代的那条注释改准。测试:几个叫法按词认、按整句不认
|
2026-10-21 17:10:43 +08:00 |
|
ThearchyHelios
|
41ad3a1c05
|
合入复核修复(证据接入与入口):跨段指标不当两期查、证据接口重渲染与组装同一个函数、一次请求同一份结论只复算一次、比率闭合核对、代入式按点名的段、写作目录分析段限额、核对页写方法叫法、运行对比只认做完的执行、读快照进线程、四个工具与合并查询的真算子测试、夹具清源
|
2026-10-21 16:58:45 +08:00 |
|
ThearchyHelios
|
2efea2b753
|
周号超出任何算法(W54 以上)的认不出、算起止超出日期范围的当这一周没有(复核 R3 补):认不出算法时原来按周号排先后,「2026-W99」也会当一周收下,现在周号大于 53 的不当周号写法,原因里照实举它;按算法算起止时日子超出日期能表示的范围(公元 9999 年末)交回没有这一周,不抛异常
|
2026-10-21 16:56:48 +08:00 |
|
ThearchyHelios
|
f5e6e77ea9
|
测试用的假结论按各算子的形状给(复核 R31):testing.fake_result 不再一律拿可加拆解的结果表——波动基线(期次、value、change、role)、趋势(期次、value、change)、差异检验(a、b、a_value……p_adj、flag)、可比性检查(check、status、base、target、note)各给自己形状的结果表(带列类型)、具名标量、参数和输入(可比性检查是基期、本期两份),数是编的、和判定语对得上;差异检验没写模式时按比率。变化拆解那一份照旧。测试对着真算子核对列和具名标量的键
|
2026-10-21 16:16:40 +08:00 |
|
ThearchyHelios
|
19bdcf55d8
|
分析卡运行时对合并后的阈值再核一遍(复核 R28):画图时阈值覆盖只能对着缺省值校验(schema 不改),发起时的设置快照合进来以后可能冲突——管理员把「超出常规波动」调到 3、卡上把「明显超出」覆盖成 2.5,就永远判不出超出。卡上写了覆盖时,运行时对缺省 ← 快照 ← 覆盖合并后的阈值跑一次 contract.settings_problem,有问题让卡失败并说清「阈值覆盖和这次运行的分析设置冲突:…。请改分析卡上的阈值覆盖」(配置错误,不是数据问题,一项都不算)
|
2026-10-21 16:11:00 +08:00 |
|
ThearchyHelios
|
d5836eb845
|
写作目录省略说明里分析结论那几句改成给模型看的常量(ANALYSIS_TABLES_OMITTED_PROMPT、ANALYSIS_TRIMMED_PROMPT、ANALYSIS_LEVEL_PROMPT_WORDS),和别的写作规则同一个认法,界面文案检查不再把它们当界面上的字;「没列出的照样能引用」改成「没列出的也能引用」
|
2026-10-21 16:10:01 +08:00 |
|
ThearchyHelios
|
f7a09eb108
|
一份快照按期次分组的变化拆解也核本期齐不齐(复核 R20):可加、比率、乘积三种模式用波动基线同一套完整性检查(comparable.period_complete:不到整周、没过完、数据没到、SQL 截掉一部分),本期不齐算不了(partial_target,「本期数据只到 2026-10-20,还差 5 天,和完整的周比没有意义」),核对不了(查不到表的范围、周号认不出算法、期次不是日期)附一句说明,只在证据面板、不进判定语(两份快照时可比性结论照旧进判定语);结论的 params 记下运行当天。期次按 periods.parse_compared 认:周号按 SQL 认算法;快照里往往只有比的两期,值都是日期、推断成按周、期次列又是直接取的日期列(原样、date(列)、DATE(列)、CAST 成日期)时按天认——昨天对上周同一天正好隔 7 天,光看值分不出是两天还是两周。可比性检查按期次分组、没给粒度时同样按它认。证据接口的一条测试(tests/test_analysis_evidence_api.py)跟着补上这一句说明的种类
|
2026-10-21 16:09:21 +08:00 |
|
ThearchyHelios
|
cf1cc568d6
|
分析范围的候选维度写明只认码值表:剖析目前不记每列的取值数(码值列另有取值分布的观察、键列只核唯一),方案 §3.6 的「剖析的取值数 ≤ 50」等剖析记了每列取值数再补,没有码值表的属性列不进候选(第 1 波复核 R34,记为偏离)。只改注释
|
2026-10-21 16:09:00 +08:00 |
|
ThearchyHelios
|
9817830d4a
|
自动修复和门禁对 analysis_claims 写了认不出的值(如 loose)对齐 claims 的做法:G3 那一条修复(_plan_report_policy)不再顺手改成 strict(门禁跳过它、交给校验报),认不出的取值由校验那条 report.analysis_claims_invalid 自己的修复管——受管级别改成 strict(G3 只认它,答案唯一),别的级别不核对、重写一次后标出、重写后仍有的计入缺口三档要人选,不给建议(同 claims_invalid 的 _plan_claims);跳过认不出的取值统一按门禁的 _POLICY_PROBLEMS 判。测试:受管级别 G3 修复只改 numbers、认不出的取值另有一条改成 strict,一起应用后通过;已发布级别三档候选、选了照写
|
2026-10-21 16:08:22 +08:00 |
|
ThearchyHelios
|
41d95721ce
|
分析入口的测试补真算子:test_analysis_e2e 加 agent 调波动基线(本周明显超出常规波动、历史新低,本期完不完整按现查的表范围判)、趋势、差异检验(逐行明细,华东的单笔金额高于华南)、可比性检查(两份查询各一周)各一次的端到端,台账、交回模型的那一段、复算逐字段相同都核;分析卡以合并查询为输入跑一次(输入写明 sqlite 方言、工件就是合并查询的快照)。test_analysis_card 的下钻样例 DRILL 原来 by 和 period 是同一列、真算子下会报错:shop 加渠道列(各地区两周的合计不变),DRILL 改成读华东按渠道的那次查询(drill_graph),另用真算子跑一遍下钻(闭合、主要来自线上、parent 是上一项的结论工件、复算一致);夹具改用 scratch_source。过时的说明照实改:替身的用途、口径卡可比性挂钩里「还没有算子」的说法
|
2026-10-21 16:06:40 +08:00 |
|
ThearchyHelios
|
6503b095cb
|
报告撰写节点的「上游没有可引用的来源」认分析结论(_CITABLE 加分析结论,_no_evidence 照 00-总方案 D10):「证据来自」只选了分析卡时不再误报没有可引用的来源;分析卡做的结论总能引用,受管级别的正式出具没开「单元格引用」、上游有分析卡结论时也不再报「只有查询结果…无法引用单元格」;Agent 现场做的分析和它查的格同一个规矩,没开单元格引用时照报,说法写明「只有查询结果和 Agent 现场做的分析…无法引用单元格和这些分析结论」,只有查询时一字不变。测试:只有分析卡结论(开没开单元格引用都不报)、Agent 的分析按单元格引用的规矩、什么都没有时点名分析结论
|
2026-10-21 16:04:42 +08:00 |
|
ThearchyHelios
|
3dd53eaeb1
|
分析相关用例的数据源夹具前后都删干净:tests/fixtures/sources 加 sqlite_source(建之前先把同名的旧源连同数据目录、剖析和现查缓存删掉,交回新 id,可顺手探好表结构)和 forget_source(删源、数据目录随外键级联删除,再清掉 coverage 现查缓存 _LIVE 里按这个源 id 记的表范围),tests/conftest.py 加共用夹具 scratch_source(按它们建、测试结束时删)。以前各文件的 shop 夹具复用名叫 shop 的源却不清它的数据目录(复核时一条写了目录的端到端串扰了同进程后跑的用例),现查缓存按源 id 记、5 分钟内同一个进程里可能拿到别的用例的旧范围。test_analysis_e2e、test_analysis_e2e_claims、test_analysis_tools、test_metric_comparability、test_contract_analysis_claims 的 shop 夹具改用它(直接建遮罩源的两条用例一并改,去掉 try/finally);test_analysis_tools 开头「算子还没落地」的说明改成照实写替身和真算子的端到端各在哪。测试:旧源留下的数据目录和现查范围在建新源时清掉,删源后现查缓存里没有它
|
2026-10-21 16:03:10 +08:00 |
|
ThearchyHelios
|
99b1406f8b
|
复核认分析能力一轮的三种日志:report_analysis_claims(判断词没挂对分析结论、原因没依据,重写后仍有)、analysis_refused(一份分析算不了)、metric_comparability_skipped(口径卡指标的两期没做成可比性检查)登记进 WARN_CODES,按自己的 kind 记、都是缺口(DEGRADED),照 00-总方案 §3.7 只写说明、不自动重来:不进 RETRYABLE / REBUILD,一次运行的信号全是这几种(NOTE_ONLY)时复核不叫模型,说明照信号原话写——以前没登记一律按笼统的 warn 叫一次复核模型。「改过一次」的 report_repair 按最后一次核对定档时,只剩只重写一次、留在报告里标注的违规(check 下的分析说法,和同一类的缺失断言 absence_claim)也算改好了:它们各有自己的信号,以前 report.checked 的 ok 为 False 就判没改好、多报一条;复核被别的信号叫起来时照实说「重写后只剩已标出的 1 处分析说法」,一处都没改掉的不说改好了。strict 下的分析说法是出具缺口、带满 20 条的可能还有别的,照旧判没改好。测试:三种信号的 kind 与级别、只有这几种信号时不叫模型(复核接口也是)、和别的信号一起时照常叫、check 与缺失断言的剩余算改好、strict / 还有别的违规 / 带满 20 条照旧
|
2026-10-21 16:02:46 +08:00 |
|
ThearchyHelios
|
fd8e392f48
|
维度列、期次列和结果表的固定列重名时报调用错误(复核 R17):结果表的列 id 是输入的维度列(期次列)加上固定的几列,维度列叫 flag、base、target、delta、share(可加)或 mix、rate、total、w_base……(比率),期次列叫 value、change、role(波动基线、趋势)时列 id 重复,引用结果表的格会认错,下钻还会报「A1 按 0 列拆」。common.reserved_check 不分大小写挡住这些名字,告诉 agent 在 SQL 里换个别名(比如 AS flag_name);这是结构性的调用错误,分析卡里照旧让卡失败
|
2026-10-21 16:02:44 +08:00 |
|
ThearchyHelios
|
9298278fbb
|
两份页面脚本的测试跟上方法叫法和比率的闭合核对:可验证报告核对页的「方法与版本」写「变化拆解(可加) · decompose.additive@1」「可比性检查 · comparable@1」(服务端带来的叫法加 id);导出页点开比率拆解的判定语,总数那一格写「整体比率那一格」、闭合核对写「整体比率 x 与各段分子之和 ÷ 分母之和 y 闭合」,不写「各段之和」(比率拆解的那次封存运行抽成 ratio_run,证据接口和页面两处共用)
|
2026-10-21 16:00:44 +08:00 |
|
ThearchyHelios
|
472f78344d
|
分析设置要求「集中」的合计占比不小于「主要来源」的占比(复核 R16):contract.settings_problem 加一条(没写的项按缺省补齐了比),说法用 LABELS 的叫法:「「集中」的合计占比不能小于「主要来源」的占比」——原来「主要来源」0.9 配「集中」0.5 能通过,一段占 60% 时判分散、判定语却说「没有哪一段占到 90%」。设置页写进来的、分析卡上的覆盖都按它挡;api/settings.analysis_values 读存着的一组时这一对对不上同样两项都按缺省(同另外两对)
|
2026-10-21 16:00:29 +08:00 |
|
ThearchyHelios
|
efff2ac4f8
|
闭合容差:整数的浮点按个位、下钻对上一层的精确值按精确比(复核 R15):总数那一格是整数的浮点(SQLite 的 ROUND() 交回 2120.0)时按取到个位算容差(差 0.4 也闭合),最短写法里的「.0」不再当一位小数;下钻时对上一层那一段的值是上一层算出来的精确值、没有取整过,只容浮点算出来的最后几位(相对 1e-9),820.4 对 820、700.3 对 700 不再算闭合。可加、比率两种下钻同一套
|
2026-10-21 15:59:11 +08:00 |
|
ThearchyHelios
|
fcbcfc9aef
|
判定语照方向接末尾连续期数、辛普森的结构变化只说一遍(复核 R14、R21):趋势末尾连续同向的期数和趋势同向时接「,已连续 3 周下降」,反向时接「,但最近已连续 3 周上升」,不再出现「呈下降趋势……已连续 3 周上升」。比率拆解判在结构变化上(mix_driven)时正文已经说了结构变化、点了那一段,辛普森那一句只说「各段的退款率大多在下降,整体却上升」;别的判定照旧带上哪一段占比从多少变到多少
|
2026-10-21 15:57:51 +08:00 |
|
ThearchyHelios
|
f05dd9e21c
|
「连续」按趋势结论记的末尾连续同向核(values 的 run_direction、run_length),不再先要整体判定是上升或下降:算子修复后趋势判定语在方向相反时写「,但最近已连续 N 期上升」,句子照它写「最近已连续 4 周上升」要对得上,整体没有明显趋势、末尾连续下降的也能说连续。句子写了期数的(「连续 5 周上升」「三连降」「十二连涨」,阿拉伯数字、全角数字、一到九十九的中文数字)要 run_length 不少于它,没写的至少 3 期;方向对不上照旧报相反;没记 run_direction 的老结论按整体的趋势方向。测试:期数不够、整体下降而末尾连续上升、没有明显趋势而末尾连续下降、老结论,和各种写法认出的期数
|
2026-10-21 15:56:49 +08:00 |
|
ThearchyHelios
|
3fd5d1309c
|
说法核对按复核调整(说法表 v1,还没有线上文档,不升版本)。来源和因果的口子:「主要由」不再吃掉「由于」(主要由(?!于),「主要源于」归来源类);原因按因果词的那一边认(「由于、因为、原因是、源于、得益于」后面,「导致、造成、引起、所致、是…的主要原因」前面、「由华东造成」在「由」和「造成」之间,「受…影响」中间),挂了拆解、原因点名的是它的段才按来源核,否则按因果核——「华东下降主要由于促销结束」「下降主要由促销结束造成」不再通过;没挂拆解的,原因不是目录里拆解的段时另报,认不出时照旧并进同一分句的来源判断;原因只是指代(「以上是下降的主要原因」)不核。来源类判断要点名拆解里的段:「主要来自」「集中在」「以…为主」看判断词后面,「主导」「贡献最大」看前面(同一分句没点名的往前找最近点了名的分句),拖累拉动带动照旧看整个分句;挂了拆解却没点名任何一段(「下降主要来自线上渠道」挂按地区的拆解、「主要来自新客流失」)判对不上,同一分句引用了判定语、比率拆解说「结构变化」「自身变化」的不用点名。误报去掉:来源、集中、分散、主导、拉动带动要这句话到这个分句为止说了变化才核(构成不核);建议、计划、预测、假设的分句不核(「建议」「下周」「避免」管到后面的分句);「异常」前面是订单、物流、支付、门店、营业、库存、设备、账号的是业务状态(后面跟着涨跌的照核),「异常的 + 名词」不核;「无异常」「未见异常」主语要是指标或波动;「来源于」不是「源于」;「表结构变化」不是结构变化;「相当」只认比几组、几样的,比上期的不核。漏报补上:「是…的主要原因」「主要原因是」、「近七成 / 超过一半 / 大部分的降幅来自」、「主要靠 / 在 / 体现在」、「以…为主」、「创」和「新高」之间 0–4 个字、「显著 + 涨跌」、「趋势向好」「波动较大」「三连降」「远高于往常」「异动」「一涨一跌」。写作规则补一句「写来源要点名是哪一段」,异常类的说法带上「显著上升或下降」。样本表 tests/test_analysis_claims_lexicon.py:复核的 70 句加这次看清楚的 26 句,每句期望的类或不核,以后改说法表都过这张表;和复核标记不一样的只有「退款主要集中在生鲜品类」(说的是构成,不核);绑定测试补上复核列的几个口子
|
2026-10-21 15:56:30 +08:00 |
|
ThearchyHelios
|
427a6df23c
|
差异检验拿不到 p 值照实说、敏感性只在真实的各组里找离群值(复核 R8、R9):一对都拿不到 p 值(比率有一组样本量为 0;均值、逐行有一组不到 2 个样本,或均值、标准差为空)时算不了,契约 REASONS 加 untestable,原因写哪一组怎么了(「华东只有 1 个样本、华南只有 1 个样本,算不了差异」),不再判 ok + 可能只是样本波动;只有一部分拿不到的,那几对不算进比了几对、不参与校正,表里写清哪一组怎么了,判定语后接「另有 n 对算不了(…)」(契约 CAVEATS 加 untested,排在判定语附带说明的前面)。逐行模式比三组以上时,离均值最远的那一笔只在真实的各组里找(原来池子里混着各对的「其余各组合计」,第一组以外的离群值删不到它自己那一组,漏报 outlier_sensitive),去掉以后由各组重建每一对的「其余」合计再检验
|
2026-10-21 15:56:16 +08:00 |
|
ThearchyHelios
|
475d1a2bda
|
agent 分析时按本节点查询认表,同一条 SQL 一个节点里只解析一次:context_of 加 tables_cache(SQL → 用到的表),AnalysisScope 带一份、分析工具每次调用交进去。以前每次分析调用都把本节点全部查询的 SQL 从头解析一遍(目录、剖析事实、探查都按表给)。测试:两条查询、三次分析,每条 SQL 只解析一次
|
2026-10-21 15:53:07 +08:00 |
|
ThearchyHelios
|
460af221f9
|
同口径先去掉最外层排序、按去掉日期的写法比(复核 R7):same_query 不再只在规范形式完全相同时才把日期换成占位——两边都去掉最外层的 ORDER BY(同一层有 LIMIT / OFFSET 时不去:排序决定取哪几行),时间条件的界(字面量、按运行当天现算的都算)和像日期的字面量换成同一个占位后规范化再比:一样就通过,只差字面量判「两边除了日期,筛选的还不一样」,还不一样才交给 explain_sql_diff;交给它的也去掉最外层排序、现算的界换成按先后编号的日期字面量(它只认字面量的时间范围),只差时间范围、排序的照旧算同口径。只有一边带 ORDER BY、上周对本周到今天这类现算界写法不同的不再落进兜底判成结构不同,两份快照的变化拆解也不再因此不拆
|
2026-10-21 15:51:30 +08:00 |
|
ThearchyHelios
|
9339facf9a
|
运行对比里的分析卡只认做完了的那次执行:analysis.end 先按卡记在这一次执行里,见到这张卡的 node.finished 才算数(新的 node.started 清掉上一次没做完的)。分析卡执行到一半失败时前几项已经发了 analysis.end,以前运行对比会把这次失败执行的判定当成结果列出来、也算进执行次数。测试:中途失败的那次不列、不算次数,失败后重来做完的按做完的那次对比
|
2026-10-21 15:50:15 +08:00 |
|
ThearchyHelios
|
27ac11fa5f
|
可验证报告的核对页给分析结论的方法写上中文叫法:服务端在随文件附带的分析结论条目上带 method_label(contract.method_label,和导出页同一份),verifier.js 的数字详情、指标上的可比性两处「方法与版本」照导出页写「变化拆解(可加) · decompose.additive@1」,页面只显示、不另起叫法;条目上没带叫法的只写 id。以前只显示方法 id。测试:分析结论、口径卡指标上的可比性两种条目都带叫法
|
2026-10-21 15:49:06 +08:00 |
|
ThearchyHelios
|
6e38df4fbf
|
分析卡里随数据变化的调用错误记成算不了的一项,不让卡失败(复核 R6):analysis.run 加参数 refuse_data_errors(缺省假),为真时 DATA_ERRORS 里的调用错误——上一层没做成 parent_refused、下钻的段这期没有 parent_key_missing、期次这期没有 period_not_found(变化拆解、波动基线的本期、差异检验按期比、可比性检查)、总数那一格越界或为空 row_out_of_range / headline_empty、要比的组这期没有 unknown_group / too_few_groups、要用的那一格这期为空 empty_cell(乘积拆解的乘积和因子;差异检验的计数为空原来报的是 not_count,改报 empty_cell)——记成 status refused 的结论:契约 REASONS 加 parent_refused、input_unavailable,CallError 加 reason(照实说是哪一项、哪个值,不带改法),判定语「{叫法}没有做成:原因」;params 照调用原样(label 照样消毒),取过还没记用法的快照都记进输入(Inputs.settle,角色照第一次取时的),上一层在核对它做没做成之前就记进输入,复算按它们走到同一处;阈值和判定标准同各算子自己算不了时那一份(各模块的 USED / refusal_basis,算子本身也改用它)。recompute 一律按真复现;结构性的调用错误照旧抛。分析卡运行器传真,agent 工具不传。顺手:段数不够的原因里维度叫法和汉字之间照 say 的规矩补空格
|
2026-10-21 15:47:30 +08:00 |
|
ThearchyHelios
|
fa33b98fef
|
写作目录有省略时,分析结论一段最多占预算的一半(_PROMPT_ANALYSIS_SHARE):每条结论四种样子从全到简(ANALYSIS_LEVELS:full 连同结果表的前几段、compact 结果表只写一句、brief 只留判定语和具名的数、head 只列编号那一行),先都按 compact 列,超了按结论的先后从后往前降成 brief、再降成 head;结果表的段照旧先于查询的行补,但这一段补完也不超过上限。开头那句照实写各样子各有几条,以及没列的照样能引用(判定语写 [[a:编号]]、结果表写整表引用、没列出的具名的数不要编造);只是结果表没列各段的照旧那一句。以前这一段没有上限,40 份结论、每份 1000 段时在 51.2k 的预算里占 50.6k,查询只剩一行摘要;现在占 25.6k 以内,那次查询列满 20 行。测试:20 份结论截到 compact + brief、80 份截到 brief + head,这一段不超过一半、越往后越简、编号都在、查询照样展开
|
2026-10-21 15:47:00 +08:00 |
|
ThearchyHelios
|
83c5c04d76
|
关键数的代入式找判定点名的那一段,维度值按算子写段的同一个函数比(_decompose_row 用 app.analysis.phrases.key_text:空值写「(空)」、布尔写「是 / 否」,两列用「·」连),段的叫法也照它写。以前拿原值的 str 去比 subjects,空值、布尔维度的段对不上,代入式退回结果表第一行,写成了反方向变化最大的那一段。测试:点名的段是空值、布尔、又不在第一行时,代入式写的是点名的那段
|
2026-10-21 15:41:38 +08:00 |
|
ThearchyHelios
|
40918a7fb1
|
可疑实体找「最接近的名字」时重建的目录(_scope_catalog)不收分析结论:候选只看表和字段,用不到结论的内容,以前每点开一个可疑的名字都把这次运行的分析结论读盘、复验一遍哈希(build_catalog 给 A 条目装整份结论)。查询、表和字段的编号不受影响。测试:台账里有分析结论时重建目录不读任何工件,按报告节点和退回不分范围两条路都是
|
2026-10-21 15:39:43 +08:00 |
|
ThearchyHelios
|
2e57c401e6
|
说法核对不核表格正文的格(原来只跳过表头):一格是一个值不是一句话,写作者表格里状态列的「异常」、说明列的「主要来自线上」「持续增长」每一格都单独报没挂分析结论;裁判的预筛 judge.claim_priority 本来就不送表格的格。测试:表格九格都不报,表格外的列表照核,组装和复核一样
|
2026-10-21 15:38:54 +08:00 |
|
ThearchyHelios
|
0acf9fb3a8
|
叫法消毒做到不再变化、截到第一个分句标点、不许夹带判断词(复核 R12、R18):clean_label 反复去引用标记、数字、符号、空括号直到不变(「销售额[ [v:Q1.r0.gmv] ]」去完数字拼出的「[[v:Q.r.gmv]]」接着去掉),再去掉剩下的方括号、截到第一个分句标点(,。;:!?、,.;:!?)之前、去掉截完没配上对的左括号,整个过程再做到不变,消过的再消一遍不变——复算拿记下的叫法再消,判定语逐字相同。消完的叫法里有说法表的判断词(engine/analysis_claims.scan,在函数里导入)就整个不要,退回下一个来源;目录叫法、当叫法用的列名同一个函数,同样处理
|
2026-10-21 15:37:48 +08:00 |
|
ThearchyHelios
|
7e2ee912b3
|
结论句的判定回到原来的方向词、因果词(evidence._DIRECTIONAL 照 main 原样):W1-d 为了让裁判优先判判断句把「主要、集中、异常、偏离、持续、趋势、显著、大幅、新高、新低、抵消、分散」等加进了 _DIRECTIONAL,可 _classify 用同一个正则认结论句,没有数字、没有引用的「下面是主要渠道的表现。」「促销期间活动效果显著。」「整体运行平稳,未见异常。」就成了结论句,结论句策略要求挂依据(模板 ⑨ 和已发布的受管版本都这么写)时计入缺口、出具降档,改了已发布版本的档位;出口的 io._concluding 也照它认代码块里的正文。扩充的判断词挪到 judge._JUDGEMENT,只给 claim_priority 排送判的先后(结论句里有它们的排第二)。测试:判断词让结论句先送判、不让连接性的话变成结论句;结论句要挂依据、出口带契约的周报多写这三句,档位照旧 formal、没挂依据的结论 0 句
|
2026-10-21 15:37:41 +08:00 |
|
ThearchyHelios
|
496dc27419
|
比率拆解的总数闭合核对:证据面板的输入一步按拆解的模式认 headline 对着哪个数(_HEADLINE_TOTALS 分可加、比率两套:可加对各段之和 base_total / target_total,比率对整体比率即各段分子之和 ÷ 分母之和 r_base_total / r_target_total),closure 带上 mode;比率拆解的两格角色写「基期整体比率」「本期整体比率」。以前只认 base_total / target_total,比率的 headline 在证据面板不显示闭合核对。导出页(report_export/runtime.js)比率的写「整体比率 x 与各段分子之和 ÷ 分母之和 y 闭合 / 对不上」、那一格叫「整体比率那一格」,可加的照旧。测试:可加拆解的 closure 带 mode、角色叫法不变,比率拆解两格各自闭合、复算一致
|
2026-10-21 15:37:20 +08:00 |
|
ThearchyHelios
|
cf8ec15831
|
周号按 SQL 里的格式串算真实起止(复核 R3):「YYYY-Www」不再一律当 ISO 周。periods.week_scheme 看期次列在最外层 SELECT 里的写法(从 CTE、子查询里原样取出的往里找),认格式化函数里配套的年份和周号——SQLite strftime 的 %Y-%W / %Y-%U / %G-%V、MySQL DATE_FORMAT 的 %Y-%U / %Y-%u / %X-%V / %x-%v、PostgreSQL / Oracle to_char 的 YYYY-WW / IYYY-IW;week_span 按算法算一周的起止(W00、W53 按各自的算法,不走 fromisocalendar),先后按算法排(跨年切开的两期也连着)。认不出算法(方言不知道、只取了现成的字符串、年份和周号不配套)的起止置空,本期齐不齐一律核对不了、附说明,绝不判齐,先后按周号排。按年截断的算法里跨年切开的那两期不到整周:当本期判 partial_target,当比较期判 target_gap 并说清只有几天,不算进波动基线的历史(附 partial_periods 说明,只在证据面板),趋势取最后连着的整周。可比性检查按期次分组时也走这套:有一期不到整周的按实际天数比窗口、照算星期构成。period_unreadable 的原因里举认不出的那几个值(写法认不出、写法混着的少数、算法里没有的那一周、对不上给的粒度分开说);比较期那一格为空时照实说为空,不再说成缺期(趋势往前断开的原因同样分开说)。期次是序号、周号认不出算法时也附一句核对不了。契约 CAVEATS 加 partial_periods
|
2026-10-21 15:35:00 +08:00 |
|
ThearchyHelios
|
b6efee81fd
|
一次请求里同一份分析结论只复算一次:_Sealed 加 rechecks(结论工件 id → 复算的结论,只活在这一次请求里),_analysis_recheck 按工件先查它。导出页里同一份结论被判定语、具名的数、整表展开的每一格、分析范围的编号各引一处,引用键不同、各接一条链,以前每条链各复算一次(1000 段的拆解导出一次复算 33 次、1.66 s,现在 1 次、0.2 s)。分析范围的编号先查导出的 memo:正文已经引了判定语的(同一个引用键)不再建一遍链(_scope_chains 换成按编号建的 _scope_chain,引用键 _scope_cite_key)。测试:判定语、具名的数、整表 12 格、依据、分析范围一起导出只复算一次,各链的复算一步照样是复算一致;下一次请求重新复算
|
2026-10-21 15:34:37 +08:00 |
|
ThearchyHelios
|
8a62826034
|
证据接口重新渲染分析结论的引用改用组装、出口复核同一个函数:_analysis_rendered 按封存的结论走 evidence.resolve_ref(resolve_ref 加 display,按文档记下的单元格显示规则),结果表的格照结果表记的列类型、显示规则、标识列渲染,和组装时的 _resolve_cell 一致。以前不看列类型和显示规则,文本码值「1203」重渲染成「1,203」、ISO 日期时间带着 T,render_ok 为假,证据面板和导出页报假的「与按结论渲染的结果不一致」。片段上没记引用的(口径卡指标上的可比性、分析范围的编号)照旧按判定语渲染。测试:门店码、时段两种格在片段接口和导出页数据块里都 render_ok
|
2026-10-21 15:32:21 +08:00 |
|
ThearchyHelios
|
3b06202b15
|
口径卡的可比性挂钩只在两期之间做:两份同形 SQL 不同的字面量里至少有一对两边都是日期或期次(_dated_pairs:data/coverage 认出的时间条件的界,含 yr = 2026、month = '2026-09'、week = '2026-W41'、按运行当天现算的 date('now', '-7 days'),加上别处认得出的真正的日期,和可比性算子「同口径」一项同一套认法)才查;只差地区、门店号这类字面量的(华东对华南的倍数、门店 1203 对 1204)是两段不是两期,不查、不记日志,带契约的出口不再因此判两期不可比、降档。日期和地区都不同的照查,真算子判不可比。基期、本期的先后只按日期、期次排(_period_key:真正的日期按那一天,月、周、季、年按同一种写法的先后),去掉会把门店号、偏移量当期次的 [\dW\-/Qq]+ 那条;排不出的照旧是表达式里先出现的那份算本期。读查询快照放进线程(asyncio.to_thread),不占着事件循环。测试:只差地区、只差门店号不查,日期和地区都不同照查且按日期定基期,各种写法认不认得出、先后怎么排,真算子下华东对华南的倍数照常正式出具、日期和地区都不同的判不可比降档
|
2026-10-21 15:28:59 +08:00 |
|
ThearchyHelios
|
a286792e13
|
分析范围的「检验」照方案写明校正过没有:W1-d 在 ScopeBlock 里记了 corrected,导出页(report_export/build.render_scope)和可验证报告的核对页(verifier.js renderScope)只写了次数;只做了一次的接「(一次里比了几对的已按次数校正)」,不止一次的接「,几次检验之间没有按次数校正」,两处同一种说法;测试补上 corrected
|
2026-10-21 14:49:02 +08:00 |
|
ThearchyHelios
|
d307d087bc
|
审计单列一行的分析说法违规码改为引用 engine/analysis_claims.CODES,去掉 api/evidence 里另写的一份字面量
|
2026-10-21 14:47:19 +08:00 |
|
ThearchyHelios
|
5fad78a264
|
补一条贯穿第 1 波四个包的端到端测试(tests/test_analysis_e2e_claims.py):Agent 查两次库(两周总数、按地区两周)、调变化拆解(带总数核对闭合),写作模型引用判定语和句末依据,另一句故意写「主要来自华南」;check 下重写一次仍不符就标出、档位和写对了的那次一样,strict 下按最多重写次数重写后计入缺口降档、报告节点那条不重复收;出口独立复核核出的和报告节点同几处;判定语的出处链六步、复算逐字段相同,审计单列标出的那一处;文档的分析范围按数据目录写出拆过地区、没拆渠道,Agent 写的假设不进
|
2026-10-21 14:23:52 +08:00 |
|
ThearchyHelios
|
72be600ea2
|
转正 W1-b 的端到端测试(tests/test_analysis_e2e_evidence.py):分析卡、agent 分析工具、口径卡指标上的两期可比性各发起一次真运行,片段接口的出处链、证据图、审计、报告导出、可验证报告都按封存的输入真复算、逐字段相同;打印改成断言
|
2026-10-21 14:08:56 +08:00 |
|
ThearchyHelios
|
5f96a23452
|
分析次数上限照实按每个 Agent 每次执行说:设置叫法「Agent 每次执行最多分析几次」,次数用完的调用错误「这个 Agent 这次执行最多做 N 次分析,已经用完」(入口按本节点这次执行的分析容器数次数,本来就是这样算的)
|
2026-10-21 14:08:56 +08:00 |
|