Files
admin 0593ff7e62
nginx serve /uploads direct (audio speed) / patch-nginx (push) Failing after 1m34s
数字我 Digital Me:全量入库(大文件走 Git LFS)
2026-10-10 16:24:43 +08:00

22 KiB
Executable File
Raw Permalink Blame History

考验 · 汉 —— 残差 = 天

一句话:天 = 0 格。而这不是「没测到」,是【测不到】—— 我能证明。 而老板要验的那一格(李广),不是最大的正残差 —— 它是最大的【负】残差。

跑法:computeRank(profileFromSubs(subsOf(id), { wang: 0 }), 'han') 数据:src/renwu.js(十人,画像/实职/入仕,curl 双证)· src/kaoyan.js(成绩单 + 残差) 引擎(dynasties.js / talents.js)一个字未改。 npm test 473/473。


⚠ 先读这一条:这场考试不合法

引擎的汉 = 东汉(era:'东汉', span:'25–220');本表十人 = 西汉,全部死于公元前 87 年以前。

十人里四个的实职是御史大夫,而 dynasties.js 自己的铁律写着「御史大夫不是东汉官,绥和元年(前8)罢」。 ⇒ 引擎里那个汉,连这四个人的官名都不存在。

✗ 谁都不许把下面任何一个数读成「引擎在汉朝的准确率」。那个数不存在,因为题目错配。 跑它的理由只有一个:量出引擎的行为,不是给引擎打分。


成绩单 + 残差(每人一行)

residual = 引擎给的位阶 − 他真到的位阶 · 正残差(算高了)= 天 —— 引擎说他该到,他没到。 · 负残差(算低了)= 引擎缺变量 —— 他到了,引擎说他到不了。这不是天,是我们的错。

人 画像(史官的字,逐字) 出处 我们认出的 subs 引擎给的 他真到的 残差
晁错 錯為人陗直刻深 《史記》卷101 blunt, rigorous 辟召·县令 3 御史大夫 5 −2 缺变量
张汤 湯爲人多詐,舞智以御人 《史記》卷122 —(空) 一条路都不开·斗食 0 御史大夫 5 −5 缺变量
汲黯 黯為人性倨,少禮,面折,不能容人之過 《史記》卷120 blunt 军功·县令 3 主爵都尉 5 −2 缺变量
李广 廣訥口少言,其善射亦天性也,莫能及廣 《史記》卷109 —(空) 一条路都不开·斗食 0 郎中令(九卿)5 −5 缺变量
李蔡 蔡爲人在下中,名聲出廣下甚遠 《史記》卷109 —(空) 一条路都不开·斗食 0 丞相 5 −5 缺变量
公孙弘 弘為人恢奇多聞/意忌,外寬內深 《史記》卷112 datadriven, warm 辟召·县令 3 丞相 5 −2 缺变量
董仲舒 董仲舒為人廉直 《史記》卷121 blunt 军功·县令 3 江都相→膠西相 — 量不了
桑弘羊 雒陽賈人子,以心計,年十三侍中 《史記》卷30 datadriven 辟召·县令 3 御史大夫 5 −2 缺变量
兒宽 寬為人溫良…善著書、書奏,敏於文,口不能發明也 《史記》卷121 warm, calm 一条路都不开·斗食 0 御史大夫 5 −5 缺变量
程不识 爲人廉,謹於文法 《史記》卷109 rigorous 辟召·县令 3 太中大夫(比千石) — 量不了

天(正残差):0 格 | 缺变量(负残差):8 格 | 算对:0 格 | 量不了:2 格 残差的值域:{−5, −2}。只有两个值,中间什么都没有,正的一个也没有。

「量不了」不是「算对了」:董仲舒是诸侯王相、程不识是比千石 —— 本表的梯子上没有他们站的地方。 ✗ 不许算成错(那是拿「我们没有这一格」冒充「他不行」),✗ 也不许算成对。


★ 李广那一行 —— 老板点名要单独拎出来的那一格

引擎:一条路都不开 → 郡县小吏,斗食(tier 0)
史料:「然廣不得爵邑,官不過九卿」(《史記》卷109,双证)→ tier 5
残差:0 − 5 = −5  = 【缺变量】,不是天

老板的前提是:「按这套尺子:李广该封侯。历史:他没有。」 ⇒ 这个前提错了。按这套尺子,李广不该封侯 —— 引擎说他连门都进不去。

为什么:司马迁给李广的画像是**「訥口少言」——他不说话**。 而 talents.js 的 16 项副天赋全部是「说话风格」(它自陈:「副天赋 = 说话风格软技能」)。 ⇒ 一个「訥口少言」的人,在一张只量说话风格的表上必然是零。这不是巧合,是定义。

而最狠的一刀:李广的实职正是靠军功挣的(「以良家子從軍擊胡,用善騎射,殺首虜多」)。 而引擎的军功之路是 gate{wu:55},wu(果决)的两项副天赋是 blunt(直率坦诚) 与 motivate(激励感染)—— 两项都是说话。 ⇒ 把李广挡在军功门外的那道闸,量的是他最不擅长的那一样,而那一样与打仗毫无关系。

⇒ 所以:引擎和司马迁站在同一边了吗?

没有。它们连符号都相反。

  • 司马迁(和王勃)说的是**「他该封而没封」—— 那是一个正**残差的形状。
  • 引擎说的是**「他连军功的门都进不去」—— 那是一个负**残差,而且是满格的。

老板说「如果不是 —— 照实说,那更有意思」。照实说:不是。


★ 太史公那句原话 —— 老板要我 curl 回来的那一句

老板:「我记得大意是『广不为后人,然无尺寸之功以得封邑者,何也?』—— 但这是我的记忆,不是见证。以你 curl 到的为准。我记错了就照实说。」

照实说,三处。curl -sk 生文本,双证逐字目验,未用 WebFetch。 见证 W:zh.wikisource《史記/卷109》action=raw | 见证 T:ctext.org shiji/li-jiang-jun-lie-zhuan/zh

错一:那句话不是太史公问的 —— 是李广自己问的,对一个看相的说的

廣嘗與望氣王朔燕語,曰:「自漢擊匈奴而廣未嘗不在其中,而諸部校尉以下,才能不及中人, 然以擊胡軍功取侯者數十人,而廣不爲後人,然無尺寸之功以得封邑者,何也?豈吾相不當侯邪?且固命也?」

「何也?」是李广的原话,在燕語(私下闲谈)里,对象是望氣王朔 —— 一个看气看相的方士。

而太史公曰整段里没有这个问题(双证逐字):

太史公曰:傳曰:「其身正,不令而行;其身不正,雖令不從。」其李將軍之謂也? **余睹李將軍悛悛如鄙人,口不能道辭。**及死之日,天下知與不知,皆爲盡哀。 彼其忠實心誠信於士大夫也?諺曰「桃李不言,下自成蹊」。此言雖小,可以諭大也。

⇒ 太史公没有问「为什么」。他在【辩护】。

★ 而这一段里躺着一件我没找、它找上我的东西:「口不能道辭」—— 司马迁在论赞里又说了一遍李广不会说话(本传已有「廣訥口少言」)。 ⇒ 司马迁认为「不会说话」重要到要在总评里再写一次 —— 而那正好是我们唯一量得了的那一样, 他两次说的都是「没有」。于是我们给他零。 三个证人:李广「訥口少言」(卷109 本传)、「口不能道辭」(卷109 论赞)、兒寬「口不能發明也」(卷121)。 ⚠ 而论赞不进映射(「拿它做映射就是拿答案当题目」)—— 这一句只当读数,李广的 subs 仍然是空的。

错二:「李廣難封」不出《史記》

  • 见证 W:「難」0 次、「难」0 次(全卷,逐字符数,不整词搜)。
  • 见证 T:字符串命中 2 次 —— 逐个读上下文复核:两次都是 ctext 页面左栏导航里的书名「難經」,不在正文里。⇒ 正文 0 次。

真出处:唐·王勃《滕王閣序》(约 675 年),双证(两个独立四库底本,均无标点 —— 正因无标点,它们是「字」的独立见证):

嗟乎!時運不齊,命途多舛。**馮唐易老,李廣難封。**屈賈誼於長沙,非無聖主;竄梁鴻於海曲,豈乏明時?

⚠ 异文(标出,不暗合):《古今事文類聚》四库本作「時運不齊」,《文苑英華》四库本作「大運不窮」并自注「一作時運不齊」。而「馮唐易老,李廣難封」八字不在异文之列。

⇒ 老板说「中国人两千年前就给它起好名字了」—— 那个名字是【一千三百多年前】起的,起名字的是【王勃】,不是司马迁。

⚠ 而必须立刻把另一半说满,否则这就是一次「假订正」: 「李广没封侯」这件【事】,《史記》正文说了,逐字,双证:「然廣不得爵邑,官不過九卿」。 ✗ 绝不许由此写「李广难封是编的」——事实在原文里,只有那四个字的【措辞】是唐人的。 (照 shiliao.js 在「御史大夫中二千石」上换来的口径:「注有、正文无,本表只收正文」,✗ 不许说「本表无据」。)

而这个错的形状,是本项目反复钉死的那一种 —— 把一句后人的名言,当成史料本身的话:

名言 真身
「上品无寒门」 刘毅请废九品的政论,不是制度描述
「为与士大夫治天下」 文彦博的一句辩论词(神宗当场顶了回去,而那句回话被后世的书删了)
「南朝多以寒人掌机要」 赵翼《廿二史札记》的条目名,不是南朝史家的分类原则
「李广难封」 王勃《滕王閣序》的一句骈文,不是《史記》的话

同一个坑的第四次。而这一次踩它的是出题的人。 —— 这一句必须说出来,因为本项目的全部纪律都建立在「谁都会踩这个坑」上,而**「谁都」包括出题的人**。

错三:见上 —— 按这套尺子,李广是斗食小吏,不是该封侯的人


★★ 而原文自己,把这个残差解释掉了三次

老板的红线:「不许把残差解释掉。『李广没封是因为他情商低』——那是给引擎打补丁,不是承认天。」

《史記》卷109 正文,双证:

  1. 李广自己:「豈吾相不當侯邪?且固命也?」——相与命。
  2. 王朔(方士):「禍莫大於殺已降,此乃將軍所以不得侯者也。」——报应。 (李广自己招了:「吾誘而降,降者八百餘人,吾詐而同日殺之。至今大恨獨此耳。」)
  3. 武帝:「大將軍青亦陰受上誡,以爲李廣老,數奇,毋令當單于,恐不得所欲。」——數奇(命数不好)。

⇒ 「不许把残差解释掉」这条规矩,两千年来没有一个人遵守过 —— 包括李广本人: 问残差的那个人,和第一个把它解释掉的那个人,是同一个人,在同一句话里。

⇒ 古人不承认残差。他们给残差起名字,然后把它当成一个已知量。

⚠ 见证学的判别器又生效了一次:「數奇」在见证 W(收注)出现 2 次,见证 T(只收正文)1 次。 A 有而 B 无 ⇒ 它是注。「失道見斥,數奇不封」是司馬貞索隱(唐人注),不是史料。本表只取正文那一次。

★★★★ 而最要紧的一层在③ —— 它正面撞上老板的另一条红线

老板:「不许把「天」做成一个变量塞进 computeRank。天不接受输入 —— 这是它的定义。 它只能被【测量】,不能被【计算】。」

而武帝就是那么干的。 「數奇」是汉朝人给「天」起的名字,而他拿它做了一个人事决定: 陰受上誡 ⇒ 「毋令當單于」⇒ 徙前將軍廣出東道。

而那正是李广结局的开端:出东道 →「東道少回遠」→ 失道 → 后期 → 引刀自剄。

⇒ 天被当成变量的那一刻,它就不再是天了 —— 它成了那个人下场的原因。

⇒ 即:老板那条红线【有原文依据】。而它不是一条工程纪律,它是《史記》卷109 里一个人的死法。

⚠ 两条限定语,缺一条这就是过度解读: ① 这条因果链是【本表串的】,不是原文说的。 原文给的是四笔事实(陰受上誡/徙東道/東道少回遠/失道), 它没有说那是死因。✗ 不许写成「司马迁认为武帝的偏见害死了李广」——那是我的读法,不是他的话。 ② 而原文自己给了一个竞争解释,就在同一段:「而是時公孫敖新失侯…大將軍亦欲使敖與俱當單于,故徙前將軍廣。」 ⇒ 徙他的第二个理由是卫青要给公孙敖让路 —— 一个人情,不是一个天命。 原文把两个理由并排放着,一个字的裁断都没有。本表照办:两个都摆,不裁。


★ 为什么「天」测不到 —— 两行算术,不是运气

值域
引擎在汉能说的 tier ∈ {0, 3} —— 穷举 524,288 个 profile 实测,且解析证明:三条通道 kemu 全空 ⇒ tier ≡ clamp(seat,0,cap) ≡ 3;不过闸 ⇒ 0。⇒ max = 3
这张卷子的答案 realTier ∈ {5} —— 八个可判分的人实职全是三公/九卿。⇒ min = 5

⇒ residual = engineTier − realTier ≤ 3 − 5 = −2,恒成立。 ⇒ 正残差的定义域是空的。

⇒ 「天」不是「这次没出现」,是【在这张卷子上不可能出现】。

而废掉它的有两条独立的理由,修好任何一条,另一条照样废它:

  1. 答案表的形状(幸存者偏差):《百官公卿表》按定义只记坐上位子的人。 ⇒ 这是史料的问题,而且修不了:一个做到县令就到头的人,史书不给他立传。
  2. 引擎的值域:就算给我一张实职分布在 0–5 的完美名单,汉的引擎最高也只会说 3 ⇒ 对任何 realTier ≥ 4 的人,残差必然是负的。⇒ 这是引擎的问题,与名单无关。

★ 一个最高只会说「县令」的引擎,永远不可能说出「他该封侯」。⇒ 它没有资格产生一个正残差。


★ 残差的形状(老板:「报个案,报形状,别报百分比」)

哪一类人算得准?——没有一类。八格全是负残差,0 格算对。 但形状是有的,而且很干净:残差只有两个值,中间什么都没有。

  • 残差 = −2(晁错、汲黯、公孙弘、桑弘羊) ⟺ 引擎认出了他的画像 ⇒ 过闸 ⇒ tier 3 共同点不是他们更能干,是司马迁给他们的词,正好落在我们有的那 16 项上 (陗直→blunt、刻深→rigorous、面折→blunt、多聞→datadriven、外寬→warm、以心計→datadriven)。
  • 残差 = −5(张汤、李广、李蔡、兒宽) ⟺ 引擎没认出 ⇒ 一条路都不开 ⇒ tier 0 而这四个人不是更差:
    • 张汤「多詐,舞智以御人」:16 项里没有「诈」;
    • 李广「訥口少言」:16 项全是说话,而他不说话;
    • 李蔡「爲人在下中」:那根本不是画像,是一个【等第】——司马迁没描写他,他直接给了个分;
    • 兒宽 subs 非空([warm, calm])—— 而汉的三条闸一项都看不见(jiao 被 wang=0 连坐、heng 汉不看) ⇒ 效果与空完全相同。

⇒ ★ 所以这张残差表,描述的不是历史,是【我们自己的词汇表】。 残差的两个值 = 我们词汇表的两个状态:接住了(−2),没接住(−5)。 而历史那一头是个常数(八人实职全是 5)。 ⇒ 一个减法,被减数是我们的词汇表,减数是一个常数。于是「残差」这个量,从头到尾量的都是我们自己。

而「天」要的恰恰是相反的东西:它要求引擎那一头有内容,历史那一头有变化。 ⇒ 实测:两头都是常数。两个常数相减,得到的还是常数 —— 那里面没有「天」。 ⇒ 「天」是残差里【减不掉】的那一部分。而这张卷子上,残差 100% 由「我们认不认得这个人的画像」解释。 残差里一点天都没有。


★★ 最后回答那个问题(老板:这比成绩单重要)

这场考试考出的是「引擎能算命」,还是「引擎是一套自洽的胡话」?老实说。

两个都不是。老实说,是第三个 —— 而它比两个选项都难堪:

引擎不是胡话 —— 它的每一句话都有出处。问题是它几乎不说话。

  • 全表 20 条通道,19 条的位阶是常数函数(解析 + 穷举双证)。 而这正好等于原文授权的区分度 —— 一处不多,一处不少:唯一会变的那条(宋武举) 恰恰是唯一一条有原文可依的(「策、武藝俱優為右班殿直……武藝末等者三班差使」)。 ⇒ 19 条常数不是 19 个 bug,是 19 次「本表数不出你的高下」的诚实回答。
  • 汉这一朝,引擎的位阶信息量 = 1 bit,而那 1 bit 是「你过没过闸」,不是「你能爬多高」。 连三条路的天花板都是平的(全是 5)——「通道即杠杆」在汉一格都没兑现。

而它也不能算命 —— 十个人,八个算错,而且错法完全一样。

老板说「如果十个人里八个算错 —— 那就说八个算错,那也是今天最值钱的一句话」。 ⇒ 八个算错。八个全是【算低了】。零个算对。零个算高。

★ 而真正的答案是这一句:

它不是在算命,也不是胡话 —— 它是一把量错了东西的、诚实的尺子。

六轴的名字是「文采/吏能/果决/交游/沉毅/机锋」—— 那是【选官的取向】。 而它的唯一输入,是 16 项【说话风格】。 ⇒ 它名义上在量「你这种人」,实际上在量「你这种说法」。

李广是天下第一的射手,兒寬是天下第一的笔杆子 —— 他们的共同点是【都不会说话】。 于是我们给他们两个零。

⇒ 而这一条对「天」是决定性的:

老板说「谋事在人,成事在天」。这一刀量出来的是:

「人」这一半还没做完,「天」那一半就无从谈起。

「人」= 引擎能算的那部分 = 在汉只有 1 bit,而且量的是你会不会说话。 一个只有 1 bit 的「人」,减出来的残差里,装不下「天」。 残差要能读成「天」,前提是「人」那一头已经把能算的都算完了 —— 而我们连李广是个将军都不知道,我们只知道他不爱说话。

⇒ 所以「天」这一刀的结论是:它没有被做完,它被证明【还不能开始】。


要老板拍的(一条都没自作主张,kaoyan.js NOT_DONE)

  1. 「天 = 残差」这个定义是对的,我认它 —— 但它在这张卷子上【不可用】,而且我能证明。 要开始它,得先拍 renwu.js NOT_DONE ②:那一维(「你是什么人」)到底补不补 —— 那一维就是「人」。
  2. ✗ 强烈反对「给汉编一套 kemu 让 tier 够得着答案」:那是为了测出「天」而发明「人」。 ⚠ 而且它有一层更阴的:发明出来的 kemu 会【立刻】制造出正残差—— 引擎一旦能说 5,而历史上有人没做到 5,那个差当场就出现。 ⇒ 于是我们会得到一张「天」的表,而那张表里的每一个「天」,都是我们自己编的那套 kemu 的产物。 ★ 那不是测量天,那是制造天。
  3. 李广这一格仍然是这个产品最好的文案,只是文案的内容【反了】: ✗ 不是「引擎和司马迁都说他该封侯,而历史没有 ⇒ 那就是天」; ★ 而是 「司马迁说他天下无双,我们的引擎说他是个斗食小吏。⇒ 错的是我们,不是天。」 ⚠ 这是一句产品定性的话,不是一句文案 —— 它把这个功能从「算命」改成「认错」。
  4. 而若要正面用李广,「數奇」比「李广难封」值钱得多: 「李广难封」是一句感慨(而且是唐人的); 「數奇」是一次【判断的执行】—— 它才是这个产品真正在做的那件事的镜子: 我们也在给人算一个数,然后把那个数告诉他。

我自己招的

  • Object.keys(SUB_REGISTRY) 那一跤:SUB_REGISTRY 是数组,Object.keys 给的是下标 ["0".."15"], 于是穷举时一个 sub 都没点上 ⇒ 全 tier 0 ⇒ 结果是 [0]。 ★ 而一个【采样错了】的穷举,长得和一个【引擎变了】的穷举一模一样 —— 我差点去改断言。 ⇒ 立了口径:穷举的 subs 全集必须取【引擎自己读的那一份】(AXES.subs),并加了一条断言钉死 「AXES 读的 16 项 == SUB_REGISTRY 的 16 项」。是我自己的断言抓出来的,不是我读出来的。
  • 第五次零命中,而它是一个【新种类】:扫「不爲後人」→ 零命中,差点写成「原文无此语,老板记错了」。 逐字符复核:原文作「而廣不爲**-{後}-人」——两个原因叠在一起: ① 字形(《史記》用「爲」);② wikisource 的 -{ }- 转换标记【插在词的中间】。 ⇒ renwu.js 立的那条口径(写成 [為爲] 字形类)挡不住第二个 —— 就算写 [為爲],「不爲-{後}-人」仍然零命中。 ⇒ 立一条更严的:凡在 wikisource 生文本上检索,必须【先剥 -{ }- 与 {{ProperNoun|}},再检索】。字形类不够。 (renwu.js 自陈它「程序化剥除」了标记 —— 它知道要剥,但它的检索口径**那一条只写了字形类。 一个文件在两个地方各说了一半,合起来才够用。)