Commit Graph

780 Commits

Author SHA1 Message Date
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 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 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 5f96a23452 分析次数上限照实按每个 Agent 每次执行说:设置叫法「Agent 每次执行最多分析几次」,次数用完的调用错误「这个 Agent 这次执行最多做 N 次分析,已经用完」(入口按本节点这次执行的分析容器数次数,本来就是这样算的) 2026-10-21 14:08:56 +08:00
ThearchyHelios e11a461a10 可验证报告认分析卡一项做完的事件改用 EventType.ANALYSIS_END,去掉 bundle/build 里的字面量 _ANALYSIS_END 2026-10-21 14:08:56 +08:00
ThearchyHelios d529e5f694 算子的叫法只留契约一份:contract.OP_LABELS / MODE_LABELS 是唯一来源,趋势定为「趋势判断」;engine/labels 的 ANALYSIS_OP_LABEL 直接引用 OP_LABELS、ANALYSIS_MODE_LABEL 按 MODES 从 MODE_LABELS 分到各算子(分析卡校验、应用说明、前端表单照它),phrases 去掉 OP_NAMES,「{叫法}没有做成」的判定语和算子的调用错误都用契约的叫法 2026-10-21 14:08:56 +08:00
ThearchyHelios a81a0a66ac 合入 W1-d 说法核对:说法表与绑定、check / strict / off、出口独立复核与文档版本、分析范围、血缘口子、G3 2026-10-21 14:00:07 +08:00
ThearchyHelios 4afe8e6f4f 合入 W1-c 入口:五个分析工具与方法注入、分析卡、口径卡可比性、运行对比按项对齐、设置与快照、使用者白名单 2026-10-21 13:59:06 +08:00
ThearchyHelios 28db25631d 合入 W1-b 证据接入:台账 A、写作目录、a / v:A / table:A / see:A 引用、出处链与复算、证据图、审计、导出与可验证报告、裁判摘录、账本跳过 2026-10-21 13:58:18 +08:00
ThearchyHelios cb2fdd860f 证据接入按 W1-a、W1-c 的实际接口对齐:复算就是真的 app.analysis.recompute——load 交查询快照工件的原内容、load_result 交上一层结论(只认封存范围内交回过的查询、台账记过的结论,取不回照实说取不回哪一份),方法升没升版按结论里的 method 和现在的 contract.METHODS 比(升了版、复算成立的写结果同不同,现在的方法复算不了的写明原因),去掉为算子没落地准备的那一套;关键数的代入式按真的具名的数写(乘积拆解补上,波动基线按变化率比的按百分比写,负数加括号)。口径卡指标上的可比性结论(不进台账、只从卡上引用)点得开:证据面板的指标步骤带它整条出处链(判定 → 方法 → 计算 → 输入 → 复算 → 封存,封存按卡上记的 sha256 认),报告导出收在一个可展开的块里,可验证报告随附带的卡一起附上、④ 按已核对的卡认它、数字详情里展示各项检查和服务端复算;裁判的指标摘录、写作目录照卡上记的判定语写。现查结果分清按运行当天现算的界、一列一个值都没有、表的范围;可验证报告里分析工具的 tool.end、分析卡的 analysis.end 和结论同一个认法才带内容,输入的角色写叫法。测试改用真算的结论(run 交的输入照分析入口的写法,复算交工件原内容),下钻、总数闭合、方法升版、可比性端到端都过真的复算 2026-10-21 13:49:09 +08:00
ThearchyHelios aa62393edb 出口认分析结论的引用:报告引用的判定语、具名标量、当依据的分析结论按结论工件记进「引用的查询」(结果表的格原来就会走到),顺着结论的输入找到查询,输入查询没通过 SQL 检查的照样计入缺口(受影响的引用写「A1(判定语)」「A1「top_share」」「A1(结论依据)」);逐个数字的出处里具名标量照实记成分析结论(analysis: A1.top_share),不再记成空的运行输入 2026-10-21 13:29:23 +08:00
ThearchyHelios 472115c817 说法核对接上证据接入(W1-b)和真算子(W1-a):一句的分析依据按引用的编号认(A 开头、目录条目 kind analysis),判定语 [[a:A1]]、具名标量 [[a:A1.键]] 整段不扫,[[see:A1]]、[[see:A1.r0]]、[[see:a:A1]] 都当依据;目录条目只带摘要的(存进文档的那份)复核时按工件取回整份结论(_Snapshots.analysis)。算子、模式的叫法从契约取(OP_LABELS、method_label)。比率拆解的结构为主、各段自身为主(判定语就说「主要来自…」)也能挂来源类判断;ASCII 的段名认整词时,挨着的汉字不算连着。去掉测试里代为解析 [[see:A…]] 的替身;新增挂真算子结论的绑定测试:可加拆解的主要来源与拖累带动、分散、持平带抵消、比率拆解的结构变化、乘积拆解的因子、波动基线的方向和新高新低与正常波动、趋势的方向和连续期数、差异检验两组的先后、算不了的基线,以及经组装和复核时判定语、具名标量不扫 2026-10-21 13:29:23 +08:00
ThearchyHelios 71dc16bc1a 分析能力入口(七):按 W1-a 算子库的实际接口对齐。工具参数名以算子为准:差异检验的均值是 mean / sd / n 或 sum / sumsq / n,逐行是 value,可选 pairs / reference;可比性检查另收可选的 measure、grain(不收 label);分析卡的参数校验用同一份定义,运行当天、目录事实、下钻层数由算子自己记,分析项里写了不收。交给算子的输入是工件库里那份查询快照原样(含 SQL 检查结果 checks、「查询区间里这张表没有数据」no_data、查询当时记下的遮罩),加上出处和遮罩列(数据源设的、按 SQL 认出改了名字的、遮罩运行里查询时就遮掉的),合并查询写明 sqlite 方言;agent 的容器在分析前把每份换成完整快照(每份只取回一次)。探查器改用 analysis.make_prober(数据源名 → 按运行固定版本解析出的源,coverage.Cache 一个节点里共用),剖析事实一律用 analysis.probe.profile_facts(查询工具的覆盖检查也改用它,原来那段同样的取法删掉)。分析次数用完交回 analysis.exhausted 的那句;口径卡的可比性写成 {工件, 判定码, 判定语, analysis.comparable_reasons 拆出的原因},删掉自己拆原因的那段。加真算子的端到端测试:agent 变化拆解并下钻(父结论按内容哈希认)、审批恢复重放不再算、分析卡的波动基线和变化拆解(本期完整按现查的表范围判)、口径卡跑真可比性检查(可比、有条件可比带原因),每份结论都按封存的工件复算、逐字段相同 2026-10-21 13:27:12 +08:00
ThearchyHelios 707218a9a4 分析结论的结果表带上列类型:ResultTable 加可选的 column_types({列 id: 类型},写法同查询快照)。维度列照输入快照里那一列查询时记下的类型(文本型的码值 "1203" 不会被渲染成「1,203」,没记类型的不写),数值列 number,说明、叫法这类文字列 text;差异检验和「其余各组合计」比时对照组那一列写 text;可比性检查表全是 text。契约里 InputSnapshot.column_types 的标注改成实际形状 dict[str, str] | list[str | None](to_payload 给的是 {列: 类型},按列序的列表也认)。复算逐字段相同照旧成立 2026-10-21 13:19:27 +08:00
ThearchyHelios 9f014560fe Merge branch 'an1/b' into an1/d 2026-10-21 13:19:10 +08:00
ThearchyHelios bea1119a6c 说法核对按算子的真实结论形状对齐:点名的段只认拆解的维度列(params.by,乘积拆解是因子叫法)和差异检验的 a、b 两组,别的算子没有段;比率拆解的 n_base、n_target 是度量列;「抵消」除了 offset 也认判定为基本持平、各段有涨有跌的(持平的判定语本身说了此消彼长) 2026-10-21 13:16:48 +08:00
ThearchyHelios d2b5096e97 合入集成分支 an/w1(W1-a 分析算子库):证据接入按真的 run / recompute 对齐 2026-10-21 13:14:48 +08:00
ThearchyHelios fdbf896dd4 Merge branch 'an/w1' into an1/d 2026-10-21 13:13:11 +08:00
ThearchyHelios 010e74b006 Merge branch 'an/w1' into an1/c 2026-10-21 13:13:04 +08:00
ThearchyHelios a690b5c571 门禁 G3 加一条:受管级别的报告撰写节点要把「分析说法核对」设为严格(REPORT_POLICY 加 analysis_claims: strict,没写时运行时是 check、只标注)。受管级别挡住发布、已发布级别只警告,写错的值交给校验;已经发布的版本照常运行(按缺省的 check 核),下次发布才按新规则查。同一份要求自动跟到自动修复(一键写明)、一键升级成受管、按口径出具起草的报告节点;自动修复「不许放宽」的判断认这一项(从严格改回去算放宽);白话补一句分析说法;模板 ⑨ 的报告节点补上这一项,拿来照旧能发布成受管。各处「受管要求都满足」的图(测试夹具)跟着补上这一项 2026-10-21 13:13:04 +08:00
ThearchyHelios 8a5f96be4b 出口契约:分析说法出口独立复核、指标可比性、引用模式的血缘口子。引用模式下 verify_doc 按文档记下的那一项再核一遍分析说法:处置取文档和报告节点产出里更严的那个,strict 有违规记一条缺口(降档),报告节点报上来的同一条不重复收,check 只写进出具声明(analysis_claims,counted 为 false),要求 strict 却没有核对记录的照实记缺口,老文档不核。口径卡指标上的可比性(MetricComparability):报告引用了的(引用模式按文档,别的按数字回指)和契约必需的指标两期不可比记缺口,有条件可比的只写进出具声明(comparability)。血缘(D15):收齐报告引用的指标([[m:]] 片段和句末依据里的 m:),按卡上记的输入认追不到原始数据的,受管级别的正式运行记缺口,其余写进出具声明的 untraced(counted 为 false);_untraced_gaps 拆出可传子集的 _untraced。现有受管正式运行的两条用例(裁判判档)档位不变、缺口里多一条血缘,断言不涉及缺口列表,不用改 2026-10-21 13:12:24 +08:00
ThearchyHelios 767b1ac07a 报告撰写节点加「分析说法核对」(analysis_claims:off / check / strict,缺省 check)和「分析范围」(analysis_scope:auto / off,缺省 auto),画布校验和执行时报同一句话(report.analysis_claims_invalid / analysis_scope_invalid),界面叫法进 labels,运行对比登记这两项。check:判断词没挂对分析结论、原因没有依据的句子交回写作者重写一次(不按最多重写次数反复),仍有的标在报告里、写一条日志 report_analysis_claims,不影响档位;strict:按最多重写次数重写,仍有的写进产出的 issuance_gaps(另记 analysis_gap);两种都不让节点失败(不挡生成);off 不核、写作规则和文档一字不变;升级前发起的运行照旧。写作者角色改成「挑重点、组织结构、说清变化;有分析结论时说清变化来自哪里;原因只按证据写」,写作规则按目录里有没有分析结论各加一段判断词规则,重写请求列出违规和修法;这次有分析结论、取值 auto 时每一稿文档都带系统写的 analysis_scope。产出和 report.checked 记下处置。几个测裁判、结论句策略、审计表的用例写作者那句「增长主要来自新客」没有拆解可挂,把分析说法核对关掉 2026-10-21 13:12:15 +08:00
ThearchyHelios a6f7572a9e 报告文档里系统写的「分析范围」(engine/analysis_scope,契约 ScopeBlock):按写作目录里的 A 条目照实写现象(可比性、基线、趋势)、拆过(按下钻链,上一层在前)、排除(分散的拆解、差异可能只是样本波动的检验)、算不了(带原因)、检验次数;agent 写的假设不进这一段。没拆的候选维度确定地从数据目录算:拆解所用查询 SQL 里的事实表(目录标了 fact / log,没标且只读一张表时就是它)上标成属性、状态、不遮罩(数据源设置和查询当时记下的遮罩列)、取值不多(码值表不超过 50 个取值或已列全)的列,加上关联的维度表(标了 dimension 或多对一)上同样的列;拆解按的列对不上目录、读不到目录、源还没有目录、取不回查询、认不出事实表的,not_decomposed 为 None、note 照实写核对不了。目录经这次运行的目录视图读(data/catalog_view,关掉的当核对不了),出错不挡报告。契约的 ScopeBlock 加一项 corrected(检验之间有没有校正:只做一次为 true、不止一次为 false、没做为 None) 2026-10-21 13:12:05 +08:00
ThearchyHelios 7acee0faed 分析说法核对的说法表与绑定(engine/analysis_claims):判断词分来源、分散、抵消、结构、异常、新高新低、正常、趋势、无趋势、差异、无差异、因果几类,一处定义、带版本(LEXICON_VERSION 1);只收强判断词(「持续」要跟着涨跌、「异常」后面是订单数据这类名词或前面是数据系统的不算、「相当」只认句读前的,「大幅」按细案收进异常类、要跟着涨跌动词);否定(前 4 个字以内、跳过「出现」「明显」这类填充词,「不但」「不少」「无论」不算)翻到反面类;来源与因果分界(因果词所在分句点名的是拆解的段或因子按来源核),推测说法、同句的知识库原话和运行输入豁免因果,说的是数据本身的原因不算;不扫判定语(a:)、知识库原话(q:)、别的引用渲染出来的字、标题、代码块、表头。绑定:一句的分析依据按这次重新解析的引用算,A 条目经 contract.catalog_result 读,核判定、点名的段(全半角归一)、拖累拉动的方向、新高新低、连续的期数,挂了算不了的结论算对不上;违规三种(analysis_claim_uncited / analysis_claim_mismatch / causal_unsupported),每条带判断词、句子、类、要的 op、这句挂的 A、给人看的和交回写作者的各一句,同一分句同一类只报一处。挂点:compose_doc 收 analysis_claims(check / strict)时文档顶层记下处置和说法表版本,verify_doc 只核记了这一项的文档(按记下的版本,认不出的记 bad_schema),老文档复核结果和统计一字不变;_DIRECTIONAL 补主要、集中、异常、偏离、持续、趋势、显著、明显高于 / 低于等预筛词(列提纲、建议、引出图表的写法除外),裁判优先判这类句子 2026-10-21 13:11:56 +08:00
ThearchyHelios ab98c7430c 分析算子收尾:复算剔除系统字段改用同一个 DERIVED_PARAMS;去掉没用的导入和小函数;测试按仓库的写法从 tests.analysis_samples 导入样例 2026-10-21 13:08:14 +08:00
ThearchyHelios d8375c2251 可验证报告认分析结论:报告引用的(含分析范围里点名的)分析结论按原字节嵌入,连同它的输入快照和下钻的上一层结论;任一份输入快照证明不了没碰遮罩列的,结论也只给 id;分析卡的节点完成事件在它的结论都随文件附带时才带内容。导出时服务端按封存的输入复算一遍,结果记在结论的条目上。核对页:③ 遮罩白名单加分析结论,④ 按「已核对的分析结论的输入」认输入快照,⑤ 判定语、具名的数、结果表的格逐字核对是不是结论里写的那几个字(同服务端的渲染规则,不在浏览器里重算统计),数字详情里有分析结论一节(判定语、判定标准、方法与版本、附带说明、Agent 写的假设、输入的核对状态、导出时服务端的复算结论),正文后面渲染分析范围、编号点得开。另在 node 里用最小的 DOM 替身把导出页、核对页点开分析结论的路径各跑一遍 2026-10-21 13:07:55 +08:00
ThearchyHelios 7474fa5030 证据接口认分析结论:封存范围按台账记下分析结论;证据图的 A 条目带算子、判定、谁做的,连「派生自」的边到它的输入(Q…)和下钻的上一层(A…);片段接口的出处链为判定 → 方法 → 计算 → 输入(每份输入落到哪个 Q、用了哪些列和行、headline 闭合、下钻的上一层,接输入快照的查询步骤并照常遮罩)→ 复算(按 sha256 取回封存的输入、在线程里复算并逐字段比,算子没落地、出意外照实写复算失败,不让接口出错)→ 封存,结论哈希不符的只给判定和封存两步并写明原因;Agent 写的假设标成 Agent 写的假设;片段说明分判定语、具名的数、结果表的格三种。指标步骤展示口径卡记的两期可比性(点得开那份可比性结论)。审计:分析判定、分析结论的叫法,结果表的格按台账认封存,分析说法核对的三种违规单列一行,违规码补上判断词未挂分析结论、判断与分析结论不符、因果说法没有依据,以及原来就缺的依据写在句子中间、缺失断言。报告导出:判定语片段按引用键共用出处链,分析范围里的编号接同一条链。裁判的 loader 把分析结论的输入快照也逐份遮好 2026-10-21 13:07:55 +08:00
ThearchyHelios 4dd6889e69 报告导出认分析结论:点开判定语、具名的数、结果表的格,面板依次是判定(判定语、判定标准、点名的段与方向、这一处引用的是哪一项、谁做的、附带说明、Agent 写的假设)、方法(方法与版本、参数、实际用的阈值、现查的表范围)、计算(关键数的代入式、具名的数、结果表,引用的格高亮)、输入(角色、落到哪个 Q、用到的列和行、总数那一格的闭合核对、下钻自哪个 A,后面接输入快照的查询步骤)、复算、封存;指标那一步另展示两期可比性。报告文档带系统写的「分析范围」时,正文后面服务端渲染这一段(现象、拆过按下钻缩进、排除、算不了、没拆、检验次数),编号点得开同一条出处链;没有这个字段的文档一个字都不多。顺手修掉查询步骤「共 N 行」那一行把函数原文当标签显示的老毛病 2026-10-21 13:07:55 +08:00
ThearchyHelios 7e95703a94 结论句裁判与口径账本认分析结论:引用了分析结论的句子,裁判摘录里给方法与版本、判定语、判定标准、关键数、附带说明、结果表(被引用的行先给)、输入取自哪几个 Q 用了哪几列和它们的 SQL、下钻自哪个 A(核查 agent 的摘录照旧分段遮);摘录里有分析结论时裁判规则另加一条(判定是系统算的,只判句子说法和判定是否一致,分析说明不了原因),没有分析结论的报告规则一字不差。口径账本不给分析结论里的数(判定语、具名标量、结果表的格)标口径、不按它们投影比对、不进整题判断的计数,也不算成没比对 2026-10-21 13:07:36 +08:00
ThearchyHelios 855a559300 分析结论进证据链(引擎):台账 kind analysis 的条目在写作目录里按台账先后编 A1、A2……(只收报告祖先里的,报告节点的「证据来自」按做它的节点过滤),条目照 catalog_result 的约定带着从工件取回、复验过哈希的整份结论,取不回、哈希不符的记明原因;存进报告文档的目录只留摘要,整份结论按工件取回。引用:[[a:A3]] 渲染判定语(一个片段,种类 analysis,整段涂白、不算裸数字),[[a:A3.键|换算]] 渲染具名标量(换算同指标),[[v:A3.r0.列]]、[[table:A3 …]] 取结果表(表头写结果表的列名,表头里的数不算裸数字),[[see:A3]]、[[see:A3.r0]] 当依据;写错的编号、键、越界的行、判定语加换算都照实说为什么。受管级别的正式出具、契约没开「单元格引用」时,Agent 现场做的分析和它查的格同一个规矩,分析卡做的照常引用。写作目录加「分析结论」一段(判定语、判定标准、具名的数、结果表前 table_top_k 段与其余几段、附带说明、算不了的原因、来自哪几个 Q、下钻自哪个 A、输入查询的 SQL 检查问题,外加引用写法一句),放不下时判定和具名的数一律列出、结果表排在查询的行前面补、最后才退;口径卡指标上的可比性(有条件可比、不可比)照实写出原因。SQL 问题顺着分析结论的输入往下找。另有复算(analysis_recheck:算子没落地、调用写错、出意外都照实写「复算失败:原因」,方法升版写明前后两版)、复算用的输入快照、关键数的代入式,证据面板、导出、可验证报告共用 2026-10-21 13:07:36 +08:00
ThearchyHelios 8137f0cf37 分析契约补两样(只加不改):算子、模式给人看的叫法(OP_LABELS、MODE_LABELS,method_label 拼成「变化拆解(可加)」),证据面板、写作目录、审计、导出、可验证报告、裁判摘录同一份;按形状认一件工件是不是分析结论(is_result:op 是五个算子之一、method 是文字、inputs 是列表),证据接入取回结论工件、SQL 问题顺着结论的输入往下找、可验证报告认嵌进来的工件都按它认 2026-10-21 13:07:36 +08:00
ThearchyHelios 7d31922d00 五个分析算子与 run / recompute(细案 01 §1–§8):decompose(additive 按维度算贡献、headline 与下钻闭合、抵消、新出现 / 消失;ratio 中点对称拆结构与自身效应、辛普森、分母小;factor LMDI-I;两份快照先做可比性,口径结构不同不拆)、baseline(中位数与 MAD 的稳健 z、σ̂ = 0、日数据 lag 7、新高新低)、trend(Theil–Sen + Mann–Kendall、末尾连续期数)、differ(rate 的 z 检验 / Fisher、mean 与 rows 的 Welch、Holm、rows 的敏感性)、comparable(同口径、窗口长度、整期、星期构成、数据问题,现查记进 probes);run 先登记现查、查完再算,运行当天和目录事实记进 params,recompute 只用记下的、不现查;判定码、原因码、附带说明码都在契约里;输入记下方言和遮罩列名,复算逐字段相同;测试用虚构零售库,每个用例都核对复算 2026-10-21 13:04:58 +08:00
ThearchyHelios 6a96083dcb 分析能力入口(六):口径卡的可比性挂钩(engine/nodes/metrics.py 的 _comparability):一个指标的输入里取自查询快照的格(cell() 取的格、按位置取的格、Agent 按出处交来的字段)恰好落在两份不同的快照上,两份 SQL 按规范化(data/sql_semantics.normalize_sql,按数据源的方言)同形、只差字面量、查的是同一个数据源时(本周对上周),口径卡执行时调分析算子 comparable(早的那期作基期:第一处不同的字面量是日期或同样写法的期次的按先后,认不出的表达式里先出现的那份算本期),结论落成工件,指标上记 comparability(contract.MetricComparability:工件、判定、判定语、fail / warn 的原因,原因先按结论表的 status 一列取,没有再按判定语拆)。SQL 结构不同(退款额 / 销售额)、两次是同一条 SQL、数据源不同的不是同一个量的两期,不查也不记日志;同一对快照一张卡里只查一次。快照读不出来、探查失败、算子出错、算不了、还没有算子(第 1 波的 run 抛 NotImplementedError)都不挡口径卡,照实记一条 metric_comparability_skipped,这个指标不写 comparability 2026-10-21 13:03:38 +08:00
ThearchyHelios 7e6d52004c 分析算子的输入、目录事实、期次与现查:inputs.py(按名字取快照、拆「名字.r行.列」、列名不分大小写、遮罩列与非数值是调用错误);facts.py(按 SQL 认结果列取自哪张表的哪一列,读目录的度量类型、叫法、业务日期,只有确认过的度量类型才拿来判调用错误;查过的记进 params,复算不读目录);periods.py(日期、YYYY-MM、YYYY-Www、YYYY-Qn、整数序号,粒度按值推断);probe.py(make_prober 走 data/coverage 的只读探查:遮罩列不探、总时限、5 分钟缓存、退回剖析事实,另在库里算按运行当天现算的界;Book 先登记、查完再算,结论只记真用到的);data/coverage.py 加几个公开的小函数(parse_sql、as_day、literal_bound、window_of、column_range、bound_values、facts_range),_fallback 的读法抽成 _facts_range、行为不变;契约补几项可选字段(InputSnapshot 的 dialect / checks / no_data / mask_columns / masked_at_query,AnalysisInput 的 dialect,Probe 的 expr / value) 2026-10-21 13:03:35 +08:00
ThearchyHelios e079e0ba88 分析能力入口(五):运行对比里两次运行的分析卡按节点和项的标识对齐(engine/compare.py 的 analyses,最小可用):按封存范围内每项一条的 analysis.end 认,循环里执行了几次的取最后一次(照实写进说明);每项列出两次的状态、判定、方向、判定语和结论工件,change 写 same / verdict(状态或判定变了)/ phrase(判定一样、判定语里的数变了)/ added / removed,不拆变化来源 2026-10-21 13:03:29 +08:00
ThearchyHelios 654cc23c85 分析结论的数与判定语:numbers.py(快照里的数换成精确的 Fraction,写成规范的十进制字符串:不带指数、去尾零、没有 -0,除不尽的和浮点留 12 位有效数字,同输入逐字节同输出);phrases.py 一处定义判定语模板(细案 01 §7.2)、数的写法(百分比一位小数带正负号、量千分位最多两位小数、百分点,ROUND_HALF_UP 同 render_cell)、label 消毒(去引用标记、出具校验认的数字写法、单位符号,≤ 20 字,空了退回目录叫法和列名)、附带说明的一句话(判定语后最多接两条)、照实际阈值写的判定标准 2026-10-21 13:03:23 +08:00
ThearchyHelios fc6d4bd92d 分析能力入口(四):发起运行时把分析设置快照进 run.options["analysis"](engine/launch.py 的 _with_analysis_snapshot,照核查设置的 _with_verify_snapshot):只在图(含一层层套着的子工作流,同一个工作流的同一版只读一次)里有分析卡、或 Agent / 协作成员(节点上没写就取图级 defaults)绑了任一分析工具时写,调用方已经给了这一组的照它的;别的图 options 原样不动,run.started 一字不变。runner 本来就把整份运行选项放进 RunContext.extra,分析工具、分析卡、口径卡的可比性检查都只读这一份,没有快照的现读设置。子工作流的遍历抽成 _any_graph,核查设置的判断照旧 2026-10-21 13:03:23 +08:00
ThearchyHelios 9af50fb474 分析算子的统计函数(app/analysis/stats.py,纯 Python、不加依赖):正态分布函数(math.erfc)与分位数(Acklam 逼近 + Halley 修正)、t 分布(正则化不完全 β 的连分式,自由度很大时按正态)与分位数(二分)、Wilson(从 eval/stats 移过来,评测改为引用、行为不变)、Newcombe 区间、合并比例 z 检验、Fisher 精确检验(lgamma)、Welch t 检验与区间、Holm 校正、Mann–Kendall(n ≤ 10 且无并列用逆序数递推的精确分布,否则正态近似带并列修正和连续性校正)、Theil–Sen(精确的数在公分母上按整数比,只对浮点相等的那几个精确比)、中位数 / MAD / 名次;测试用公认表值钉住(正态 0.975 分位、t(10) 临界值、品茶表、Newcombe 例子、小样本精确分布对照暴力枚举) 2026-10-21 13:03:12 +08:00
ThearchyHelios 3009a43cee 分析能力入口(三):分析卡(节点类型 analysis,和口径卡平级,engine/nodes/analysis.py)。配置 items: [{id, op, mode, from, params, hypothesis}] 和阈值覆盖 overrides;画图时校验(schema.analysis_issues,执行前同一套再过一遍):至少一项、标识合法且不重复、分析方法和模式是契约里的、输入(from,或两份查询的 base_query / target_query,总数两格落在的节点)指向上游的调用工具 / 合并查询节点(Agent、不产出查询的节点、不在上游的报错,调用别的工具的只提醒)、参数和 agent 工具同一份定义且不能写阈值、下钻指向同卡排在前面的变化拆解、阈值覆盖按 contract.settings_problem。执行照合并查询的做法从 state.nodes 取上游的查询快照 id、复验哈希,只认台账里 kind query 的快照,遮罩列同证据面板;参数里的 {{ }} 先渲染;阈值是缺省 ← 发起时的快照 ← 卡上的覆盖;每项的结论落成工件、台账记一条带 item 的 kind analysis、发一条 analysis.end;产出 nodes.<卡>.results.<项> = {status, verdict, direction, values, phrase, artifact},条件分支能按判定走、成果能取判定语。一项算不了照实记(analysis_refused),不让卡失败;调用写错让卡失败并说清是哪一项、怎么改。登记:事件 analysis.end、叫法「分析卡」「分析项」「阈值覆盖」和分析方法、模式的叫法,编译器,治理(分析卡算可追溯的节点;受管级别分析卡的输入要是数据库查询或合并查询 governed.analysis_input,画布那条同义的提醒不再重复列;口径卡读分析卡的结果给提示 governed.caliber_analysis_input,输入按 via analysis 记、追不到原始数据),升级提醒的证据类节点,变量表(每项的结论、对上游节点的引用),数据目录影响面(同合并查询经由输入),助手查看的工作流说明,两条新编号的白话 2026-10-21 13:03:00 +08:00
ThearchyHelios 601b84918d 分析能力入口(二):五个 agent 分析工具(analysis_decompose / baseline / trend / differ / comparable,名字取 contract.TOOL_NAMES),参数只有「算什么」(引用本节点查过的结果 Q3、列的角色、期次、总数 headline、下钻 parent、度量叫法、在验证什么),没有阈值参数;五个工具共用一份「分析方法」说明(ToolSpec 新增 guide:方法说明 + 去重用的 id,register / build_tools 透传进工具的 metadata),Agent 节点、协作成员绑了任一分析工具就接在 Skill 后面注入 system,同一份只注入一次,模型调用节点不注入。Agent 建工具时经 ToolContext.extra 交一个本节点的分析容器(app/tools/analysis.py 的 AnalysisScope),每次查询记台账时往里放一份输入快照(编号和「【证据 Qn】」同一个),分析结论落成 analysis_result 工件、台账记 contract.ledger_entry(带 call_id),交回模型「【分析 An】」加判定语、判定标准、关键数、附带说明、算不了的原因、结果表前几段;tool.end 带 analysis_artifact;下钻按 An 取本节点的结论;调用写错(contract.CallError,含这个节点的分析次数用完 max_calls)作为工具错误交回、不记台账、不占编号;算不了照样记结论并发一条 analysis_refused。编号只在记台账时放进容器,审批恢复重放时分析不再执行、编号不错位。遮罩列按证据面板同一个函数认(数据源设的、按 SQL 认出改了名字的),遮罩运行交给算子的是遮过的快照。阈值读发起时的快照,没有就现读设置;运行期依赖给运行当天、按运行目录视图读的目录、剖析事实、现查表范围的探查(W1-a 的 make_prober,还没有时不给)。协作成员同样注入方法、同样编号(协作节点不记台账)。使用者问数据的白名单加上五个分析工具和分析卡;调用工具节点调分析工具在画布上就报错(analysis.tool_node)。能力登记不把它们当查询(is_platform_query 不认) 2026-10-21 13:02:30 +08:00
ThearchyHelios a9f1555da2 分析能力入口(一):设置加「分析」一组(api/settings.py 的 analysis:判定用的阈值、一次运行最多分析几次、最多下钻几层、列出前几段),键、缺省、取值范围、叫法全取 app/analysis/contract.py(DEFAULTS / RANGES / LABELS / settings_problem),设置接口里和 ledger 组同一个写法:GET 按生效的样子给(存坏了的项按缺省,「明显超出」不大于「超出常规波动」、最多用几期历史小于至少几期的那一对一起按缺省),PUT 先查后写(不认识的键、类型、范围、两两之间的大小,说法用设置项的叫法),浮点的项存成浮点;analysis_settings 给发起时的快照和没有快照时现读用 2026-10-21 13:01:47 +08:00
ThearchyHelios 38906a92ea 分析能力骨架补跨包约定:写作目录里分析条目的读法(catalog_result:A{n} 条目 kind analysis、result 为整份结论)、口径卡指标上的可比性字段(MetricComparability)、报告文档里系统写的「分析范围」结构(ScopeBlock / ScopeItem) 2026-10-21 11:55:38 +08:00
ThearchyHelios 844f5571f0 分析能力骨架:app/analysis 契约(结论的工件种类、台账条目、写作目录前缀 A、引用标记 a、分析卡节点类型、五个算子与模式、方法版本、判定码、算不了的原因码、附带说明码、工具名)、设置缺省 / 取值范围 / 叫法与校验、阈值合并(缺省 ← 发起时快照 ← 分析卡覆盖)、复算比较;run / recompute 的签名(第 1 波实现);测试用的假结论 2026-10-21 11:53:43 +08:00
ThearchyHelios 2714890d0d 文档重新梳理:README 精简成介绍和索引,细节按主题拆进 docs/zh-CN 与 docs/en(17 篇一一对应),英文文档不含中文
README.zh-CN.md / README.md 只留:这是什么、为什么用它、主要功能(按领域一行一条,链到文档)、快速开始、部署、文档索引、
开发与测试、许可(原文不动)。原来的每一节按读者和任务分到 17 篇主题文档:ask-data、workflows、evidence、
data-sources(新增:接入数据库、只读保证、上传表格、跨库合并、遮罩列)、data-catalog、tools(新增:工具、审批档位、
能力登记、端点、网络规则——它们管所有工作流,不只应用)、apps、evaluation-and-ledger、schedules(含通知)、deployment、
configuration、postgresql-and-scaling、identity-and-security、architecture、development、upgrade-notes(按时间倒序,
每波先写要做的事)、faq。删掉的只有模块名(api/copilot_gen.py、chat/drive.py、data/schema_view.py)、重复的话和
「以前…现在…」的叙述;操作步骤、命令、配置名、限制、权限边界都有归宿。中文是原文,英文按新的中文写;英文里界面文字
只写英文名,开头注明界面目前只有简体中文,中文占位符换成英文占位符,中文数字的例子改成不依赖中文的说法。
数据剖析可以同时剖析 2–3 张表(baf23998)收进 data-catalog。
新增 scripts/check-docs.py:英文文档(README.md、docs/en/**)不许有中日韩字符和全角符号(代码块也算),
README、docs/**、deploy/README.md 的相对链接和锚点都要通,docs/zh-CN 与 docs/en 文件一一对应、标题层级相同。
中文提示里指向 README 章节的地方改指新文档:cluster/guard.py、cluster/version.py、db/base.py 两处报错,
data/schema_view.py 文档串,.env.example 三处,scripts/prod.sh、scripts/test-postgres.sh,terms.ts 两处、
DataSourcesTab.tsx、check-manage.mjs 注释,deploy/README.md 三处链接。deploy/agentlab.env 未动。
验收:check-docs 0 问题(英文文档 18 个 0 处中文,相对链接 369 条 0 断链,18 对标题层级一致);相关后端测试
117 通过、7 跳过;tsc -b、check-copy 通过。
2026-10-21 10:23:26 +08:00