CodeEraser
方法

工作原理

CodeEraser 用确定性计算去审计语言模型的非确定性产出。

为什么不再拉一个模型

模型往长命仓库里写代码,会堆叠而不是编辑:同一个函数写两遍、一条事实在第三个文件里重述、一次更新以追加落地。本项目不拿第二个模型去审计这份漂移:下面每条判决都是对树上实测事实(token 指纹、树编辑距离、图入度、git 窗口计数)针对写下来的阈值所做的算术,没有采样温度,判决层没有浮点,回路里没有模型。同一棵树在任何机器、任何时刻产出同样的字节,所以分歧靠重跑那个数、读它指向的 file:line 收场。

每个小标题都链到 docs/reference/methodology.md 里的完整推导,每个常数都追溯到实现它的源码行。

一个判决如何产生:Rust 度量语法单元、token 指纹、文档 shingle、git 窗口、引用图与改动集的面;Haskell 判决结构与分数、克隆与同角色顾问、文档重复、轨迹与审计、存活性与擦除、墓碑残留,每行一个 wire 家族;门与逐家族报告交付判决
每行一个 wire 家族:Rust 度量的事实、它喂给的 Haskell 判决、离开的东西(退出码或报告行)。打开原尺寸 SVG。

十九个判决家族

三种「家族」计数

本站有三种计数。十九 册,每册一条值得单独推导的判决:01–15 族在本页,分析轨的(16 起)在单独一页。wire 上 十六 个判决能力(技术栈图上的数,不计握手 hello、定义包 tables/1 与报告文档 document/1;联判与拆分顾问搭在 verdict 与 structure 请求里,FPR 档位阶梯是纪律不是请求)。只读 MCP 工具 二十一 个,随报告面而非 wire:churn 与 graph --sites、erase(只到演练计划)、doctor(机器状态)、erase_log(已应用擦除的轨迹)、update_check(本构建对比最新发布)、similar_units(ce similar 在 similar/1 上的顾问文档),以及在 query/1 上判的 query 与 rules(单独一页)。

01T1/T2 克隆检测——winnowing 指纹索引

找出精确与参数化的重复 token 段:改名的变量、换掉的常量算克隆,改掉的语法不算。

t = window + kgram - 1 = 26 + 25 - 1 = 50 tokens

任何至少 t 个归一化 token 的公共段都含 t - k + 1 = w 个连续 k-gram,即一整个窗口,窗口最小值只依赖窗口内容,两份拷贝必选中同一个:必然至少共享一个指纹,这是 Schleimer 等人 SIGMOD'03 的 no-miss 下界,作为正确性契约。滚动哈希是 Rabin-Karp, h = (h - t[i-k]*top)*BASE + t[i],跑在 FNV-1a 叶子哈希之上。

推导与常数
  • kgram 25
  • window 26
  • 保证阈 t 50
  • BASE 1_000_003
  • HOT_CAP 64
  • DEFAULT_MIN_DISTINCT 7
  • 近似带 25 <= len < 50
  • TOKENIZER_REV 4
  • schema ce.dedup-report/0.5.0

02T3 近似克隆——树编辑距离(TSED)

判决 AST 几乎相同、token 流却不同的单元:被改形、被重写的拷贝。

TSED(a, b) = (max(n1, n2) - ted(a, b)) / max(n1, n2)
clone      ⇔ TSED >= 0.85
cloneDecidesWith (num, den) t n1 n2 = (mx - t) * den >= num * mx  where mx = max n1 n2

ted 是单位代价的 Zhang-Shasha(删 = 插 = 1,kind 码相同时 relabel = 0,否则 1),恒为整数,故比较是精确交叉相乘、两侧可判:max = 100 时 ted 15 是克隆、ted 16 不是。两条 O(1) 预筛 q · tsedDen < tsedNum · max(q ∈ {min(n1,n2), I},I = Σ_label min(c1, c2))在任何 TED 之前砍掉候选对,可采纳正因为用的是同一个 85/100。

推导与常数

1.8.0 起过线的对以 sim kind 1 进入 ce check 的克隆轴与 ce join 的相似腿,判决按两棵树的内容键缓存,核的 proto 或旋钮一变即清空。

  • tsedNum 85
  • tsedDen 100
  • T3_MIN_NODES 24
  • unitNodeCap 256
  • pairCap 4096
  • LSH_SHAPE (128, 32, 4)
  • HOT_GROUP_CAP 64
  • schema ce.clone-report/0.3.0

03文档重复——shingling + MinHash/LSH

判定两段文档(markdown 段落、HTML 文本、纯文本段落、注释块、docstring)是否近似重复。

dupDecidesWith num den inter union  =  inter * den >= num * union

dupVerdictWith (num, den, vfloor) inter union run
  =  dupDecidesWith num den inter union  ||  run >= vfloor

生产绑定 (80, 100, 50):Jaccard ≥ 0.80(整数精确判定),或至少 50 词的逐字连续段。inter 与 union 由核自己从升序去重的 shingle 集合算出,过 wire 的是原始计数、绝不是比值。MinHash/LSH 只是无 RNG 的粗筛(置换下标即盐);R 个 shingle 的连续段横跨 R + k - 1 个词。

推导与常数
  • jaccardNum 80
  • jaccardDen 100
  • shingleK 5
  • minDocTokens 50
  • verbatimFloor 50
  • docLineCap 200
  • licHeadLines 5
  • DOC_SET_CAP 8192
  • DOC_PAIR_CAP 4096
  • DOCDUP_REV 8

04结构判决——树尺度熵,八条判轴

判的是树而不是文件:目录几何、命名分布、引用局部性、文档覆盖、文档陈旧、冗余、模块度。

tsallis2 cs     = 1 - Σ (c/N)^2            -- and = 0 when N == 0
tsallis2Norm cs = tsallis2 cs / (1 - 1/n)  -- n = nonzero bins, n > 1
chi2 pairs      = Σ_{r > 0} (p - q)^2 / q  -- p = o/Σo, q = r/Σr
perMille r      = floor (r * 1000)
charge_i = floor(scale * v_i / (v_i + N))   -- v = 被点名目录数, N = 目录总数
raw      = Σ_axes (charge_i * violCost)
score    = max 0 (scale - raw `div` (structViolCostNeutral * judgedAxisCount))

Shannon 熵与 KL 散度要取对数,不可精确判定,故改用同族中有理数封闭的 Tsallis-2 多样性与 χ² f-散度,跑在 Data.Ratio 上。参考质量为 0 的 bin 上有观测质量时 χ² 返回 Nothing:一次点名那些目录的拒绝。判轴质量 v 是被点名的目录数,折算成 scale 的千分数并经 structViolCostNeutral = 10 折叠;judgedAxisCount 依可选事实表是否上 wire 取 5 到 8。

推导与常数
  • violCost 10
  • scale 1000
  • depthCeil 8
  • fanoutCeil 30
  • namingMin 5
  • namingCeil 600‰
  • mixRefFloor 5
  • misplaceMin 3
  • bigDirFloor 8
  • staleMin 1
  • dupMin 1
  • deadMin 1
  • structNodeCap 524288
  • modFloor 1
  • modMassFloor 4

05评分与 ADR-006 棘轮

把七条判轴折成一个 0–1000 分,并对着只准收紧的基线银行把门。

raw     = sum_i (w_i * p_i * violCost)
wTotal  = sum_i w_i                            -- derived, never a literal
score   = max 0 (scoreScale - raw `div` (violCostNeutral * wTotal))
p(x) = 0                              if x <= S
     = pMax                           if H <= S          -- degenerate fallback
     = pMax * ((x - S) / (H - S))^2   if S < x <= H
     = pMax * (1 + 2*(x - H)/(H - S)) if x > H           -- C¹ 线性臂

m = median(x)
r = median( max(x/m, m/x) )                    -- >= 1 by construction
S = clamp(floor(m * r^k), [softMin, softMax])
tolerated(c) = max (c * tolNum `div` tolDen) (c + tolAbs)

added   = current \ baseline        -- non-empty => fail
removed = baseline \ current        -- informational; drives the shrink

判轴 0 是唯一不是计数的轴:对文件尺寸的凸罚,精确 Rational,越过硬线仍单调;pMax 是落在 H 上的值,不是上限。软线 S 是仓库自身冻结 LOC 分布的统计量,S = clamp(median + k·MAD, …) 改写成乘性形式以免取对数,只在 establish 时导出并冻进基线。fail 位是六个具名条件的析取:ratchet_over、discrete_added、floor、dedup_budget、knobs_digest、rows_dropped,控制台按此序印在 FAIL 之后。

推导与常数

proto 3.1.0 起,连续行可带路径类:首个命中的 [[rules.class]] 的 1 基下标(0 表示无),按该类的软线、硬线与 CoC 上限收费,未声明处回落全局线。在 ceilings 的码 0 / 1 / 2 之外,classKnobs 加 3(proto 5.1.0,该类的棘轮容差行数)与 4(proto 6.4.0,认知复杂度容差);声明即取代两条全局腿,0 意味任何增长皆超。基线仍是三列;类名与 glob 永不过线。

  • scoreScale 1000
  • violCost 10
  • defaultWeight 1
  • sizeHard H 750
  • sizePMax 10
  • softLineK 2
  • [softMin, softMax] [200, 500]
  • sizeCeil 回退 300
  • cocCeil 15
  • deadIndegCeil 0
  • rewriteNum/Den 50/100
  • sccFloor 2
  • tolNum/tolDen 102/100
  • tolAbs 10
  • 两腿交点 500
  • verdictNodeCap 131072
  • verdictRowCap 524288

06图存活性与死代码判决

回答「哪些文件是任何活物都够不着的?」,在节点身份即行下标、wire 上没有文本的引用图上作答。

arcs  = { (s,d) | [s,d,kind,rung] ∈ edges,  rung <= minRung,  kind ∉ inert }
reach = ⋃ { reachable(G, s) | s ∈ entries(entryMask, flags) }
public     = testBit flags 0
referenced = indeg >= 1 over kept arcs
judged     = i ∉ reach
code       = 1 + public + 2*referenced    -- the lookup table is the authority

四个码让「已导出但无人引用的 API」永不塌进普通 dead:1 unref_private、2 unref_public、3 unreach_private、4 unreach_public。一个 site 按本语言梯级依次走,第一个产出恰好一个在域候选的梯级胜出;多于一个即 Unresolved,External 是正确答案、不是漏判。环只报不判;没有入口种子的环岛仅凭可达性即判死。

推导与常数

inert = {3 资产, 5 未用 ref-def},由核亲自排除:图片链接渲染字节,未用的引用定义什么也不渲染。proto 2.32.0 起每条死件行带一列由按语言点位台账判出的置信(0 未担保、1 空担保、2 已担保),即擦除家族的信任边界。import 边精度 38/40 = 0.95,跨五个钉扎语料,对着 ≥ 0.90 的门,样本冻结于任何解析器之前。计划 v2.30 新增的六种语言各过一份冻结、盲评的考题:C 73/73、C++ 15/15、Java 36/36、Lua 86/86、R 18/18、HTML 75/75(召回 73/74、15/17、36/36、86/86、18/18、75/76),逐语言误拦台账(六语料各 400 提交)误拦 0;见 EVAL-SET-LANGS 与 FPR-REPLAY。

  • minRung 5
  • entryMask 126(bits 1–6)
  • sccFloor 2
  • nodeCap 131072
  • edgeCap 524288
  • GRAPH_REV 23
  • tsconfig extends 不设上限,只查环
  • 精度门 ≥ 0.90

07三信号 join

把相似度 × 图位置 × 变动史合成四个候选码之一,然后刻意不据此行动。

(1, sev 2, [1,2,3,4], [])    -- merge_candidate:  sim + graph + both referenced + distinct SCCs
(2, sev 3, [1,2,5],   [6])   -- delete_candidate: sim + graph + dead flank, RG10 guard clear
(3, sev 1, [1,2,7,8], [])    -- churn_hotspot:    sim + graph + cochange + rewrite
rewriteHot  = total > 0 && (rewrote_a + rewrote_b) * rewriteDen >= total * rewriteNum
cochangeHot = cochange >= cochangeFloor
legsMask    = legSim .|. (if graphBoth then legGraph else 0) .|. legChurn

优先级是数据而不是守卫顺序:第一行 required 位全成立、forbidden 位全空的规则胜出,否则码 0,所以性质电池能靠旋转表来证伪顺序。每条会 gate 的规则都要求 graph 位:掩码 5(图腿缺席)只带码 0,而不是假装入度为 0。

推导与常数

proto 2.33.0 起每条候选行带腿一致性置信,严重度面以 joinSeverity 一次过线,ce join 走与 check 门同一条 verdict/1 路。join 码不进 fail 位:ce join 除非本次跑失败否则退 0,核缺失或拒绝属跑失败(退 2)。

  • rewriteNum/Den 50/100
  • cochangeFloor 2
  • entryMask 126
  • legSim 1
  • legGraph 2
  • legChurn 4
  • cochangeFileCap 20
  • schema ce.join-report/0.4.0

08拆分 ROI 缝价(四条腿)

给「这个长文件值不值得拆、从哪儿拆」标一个价,是建议,不进结构分数也不进 fail 位。

benefitMilli(u) = max 0 (floor (1000 * (p(total) - p(end_u) - p(total - end_u))))

costMilli(u)    = crossRefs(u)      * roiRefMilli
                + cutClones(end_u)  * roiCloneMilli
                + crossChurn(u)     * roiChurnMilli
                + roiPhiMilli

viable          ⇔ b >= c            -- ROI >= 1, evaluated without division

收益是拆分退回的软区罚分,算在与判决家族同一条凸曲线上(直接 import);p 凸且 p(0) = 0,故超可加,方括号非负。最佳缝是对 ROI 的精确有理 argmax,用交叉相乘的 b % c 比较;n 个顶层单元产出 n - 1 条缝。长而内聚得一条带数字的豁免,长而可拆得一条切割线。

推导与常数
  • seamSoft S 300
  • seamHard H 750
  • seamPMax 10
  • roiRefMilli 250
  • roiCloneMilli 500
  • roiChurnMilli 150
  • roiPhiMilli 500
  • NAME_FLOOR 3
  • CHURN_WINDOW_DAYS 14
  • knob 码 12–18

09编辑四分类(更新监督)

把每次被监督的编辑归约成逐文件对的四个整数(matched / novel / moved / deleted),让「堆上去而不是改上去」成为测量。

siteOpens s n  =  n * movedCost + s  <  n * plainCost

destFloor      =  least n with siteOpens siteCostCross n   =  2
accepted   = isStart && distinctEvidence >= destFloor && anchored
anchored   = any (\(_,_,w) -> w >= anchorFloor) evidence

跨文件证据下限是推出来的:siteCostCross = 2 让单条跨文件行恰好打平(1*1 + 2 = 3 = 1*3),打平不开站,故 destFloor 为 2,那个平局就是巧合拒斥。唯一拍板的是 anchorFloor = 19:双语料影子消融里,凭空发明的站点最宽锚点 16 个 alnum 字符,最细的真实锚点 19,故 19 是杀掉全部实测巧合、保住全部实测真站的窗口上沿。L2 的 delta 只单向:普通行可改判为 moved,反向绝不可以。

推导与常数

proto 7.1.0 起,成对的 declRem / declAdd 声明键表(一侧消失、恰在另一侧出现一次)在两跨度共享 declFloor = 1 个 leftover 哈希时开边(键自付 declCredit = siteCostCross)。它只追加 lines = 0 的搬迁,行分类、块、嫌疑与分数不动。

  • movedCost 1
  • plainCost 3
  • siteCostWithin 0
  • siteCostCross 2
  • destFloor 2
  • anchorFloor 19
  • MAX_D 3000
  • MAX_BRIDGE 7
  • bucketCap 64
  • stackingNovelFloor 20
  • stackingRatio 10

10分数轨迹——趋势斜率判决

check 分数在历史上是涨、平还是跌,每天多少?

x_i   = ts_i % 86400                 -- seconds to days, exact ratio
y_i   = (score_i * 1000000) % scale_i

slope = median{ (y_j - y_i) / (x_j - x_i) : x_i ≠ x_j }   -- Theil-Sen
slope < -band  → 2  (degrading)
slope >  band  → 0  (improving)
otherwise      → 1  (flat)        where band = floorMicro

% 是 Data.Ratio 的精确比构造子,不是取模;y 把每次提交归一到固定的 10⁶ 满量程网格,不同 scoreScale 下的行因而可比。斜率取成对斜率的中位数(trend/2):一个野点能把最小二乘均值拽到任何地方,却拽不动中位数。

推导与常数

判决视图按时间戳排序并只留 tsWindow 个最近点,rebase 过的提交合法。最陡单步跌落以 cliff、最长连续下跌以 declineRun 过线,各用请求索引指认提交;hash 不过线。低于 minPoints 或无时间戳相异的点对时斜率为 Nothing,绝不编造「持平」;默认地板 0 下「下滑」只报不判负。

  • minPoints 3(knob 0)
  • declineFloorMicro 0(knob 1)
  • 行 + knob 上限 4096
  • tsWindow 512
  • 满量程网格 10⁶
  • schema ce.trend-report/0.3.0

FPR 纪律:一条规则凭什么获得 deny 的资格

11FPR 纪律与守卫档位阶梯

架在非确定性写手之上的确定性门:守卫挂在 Write|Edit 的 PreToolUse 上,以精确算术回答每次待落盘的写,规则类先付清代价才能执法。

TIERS = ["observe", "warn", "ask", "deny"]
PROMOTED_DEFAULT = "deny"
cap      = lines_for(file).file_lines_fail     // 文件自身的类表;class 0 用全局默认 750
breach   ⇔ cap != 0 && lines > cap

permille = (lines - S) * 1000 / (H - S)
0   ..= 249  →  observe
250 ..= 750  →  warn
751 ..       →  ask
推导与常数
档位permissionDecision效果
observe无,打印前即返回只写一行 feed,不注入任何文本
warnallow编辑照常落盘,理由作为可见告警浮出
askask弹给用户确认
denydeny写被拒,理由指向已存在的 file:line

确定性来自重放这次写:resulting_lines 算出精确的写后行数,本就会失败的调用(文件不存在、非 replace_all 的匹配不唯一)返回 None,规则保持沉默。无法识别的 [guard] mode 解析成 observe (ce.toml ERROR: …),绝不透传。

规则类凭记录挣到 deny。M3:500 次真实正常编辑中误拦 ≤ 1 次,不许拿 N=1 演示充数。M4:500 次真实正常编辑上 FPR ≤ 1%,评估集在实现之前预注册,≥ 200 个编辑样本、≥ 50% 取自真实 agent 记录,只从 observe 模式与无守卫时期的会话采样,守卫无法自我背书。付清的只有两类:T1/T2 精确重复写入,以及 文件 > 自己那条硬线的硬预算突破(默认 750,或该文件 [[rules.class]] 声明的那条),所以钩子拒的位置正是 CI 墙会红的位置。其余规则都因没有自己的记录而停在 observe。

CodeEraser 1.2.0 起,重复写入规则只计新引入的重复:K 轮在 2,761 个真实编辑事件(本仓全史加钉定的 requests 尾段)上重放,把真实落地与带预算内债文件上的复燃、拆叶/并叶中间态分开,于是减去被替换内容本就携带的匹配(Write 是盘上文件、Edit 是 old_string)。携债重写保持沉默;真引入或拆到新文件的写照拒,并教出能通过的次序(先削源)。两种口径见 FPR-REPLAY.md。

把 git 线性历史当编辑流重放,出厂档 t = 50、min_distinct = 7:630 个事件、35 个块、仲裁后假阳 0 → 每 500 次 0.00(M3),这 35 块已清理,克隆块预算同步下棘 251 → 211 → 209 → 205 → 202。常设仪器(cli/tests/it/fpr_replay.rs,2026-09-05):requests 365 事件 0 拦截;自仓 3164 事件里 178 次真落地引入加 79 次先写后削的中间态。

区的 S 与 H 取自硬预算那张逐文件表。[guard] zone_tiers 默认关闭:预定规则要每份语料都 ≤ 1 % 才翻档,首测自仓 0.54 %、requests 2.46 %(变体 B),由 fpr_zone_gate.rs 钉住。告警按(规则、文件、会话)限一次并按 token 预算裁剪;deny 不限。

  • file_lines_warn S 300
  • file_lines_fail H 750
  • zone_tiers false
  • FPR 门 ≤ 1% / 500 次编辑
  • WARN_BUDGET_TOKENS 200
  • STOP_BUDGET_TOKENS 400
  • CHARS_PER_TOKEN 4
  • feed schema ce.observe/0.13.0

据判决行动:擦除与顾问

12确定性擦除——安全谓词

判决擦除计划的行,覆盖三个可证明的类(dead_file、verbatim_doc、t1_twin),其余行以具名 reason code 拒绝。

class  = 0 (retired 4.0.0, refused by name) | 1 verbatim_doc | 2 t1_twin
         3 dead_file (confidence road, 2.32.0)
reason = 0 eraseable | 1 language_unresolved | 2 not_full_segment
         3 bytes_differ | 4 copy_not_dead | 5 unit_not_covered
         6 public_surface (6.1.0)

Rust 从三个来源家族组装整数事实;Haskell 执行固定的首个失败谓词。proto 2.32.0 起 class 3 信任 graph 家族的逐行置信;proto 6.1.0 起公开死件判决(2 unref_public / 4 unreach_public)在权衡置信之前即以 public_surface 拒绝,导出的 API 永不可擦,此后未担保的置信才拒行。

推导与常数

class 0(本地计数老路)已于 proto 4.0.0 退役,核按名拒绝。超上限的降级应答不授权任何擦除,安全谓词没有旋钮。

  • 类别数 4
  • 理由代码数 7
  • eraseRowCap 4096
  • 入 wire 版本 2.16.0
  • wire erase/1

13未提及声明顾问——提及否决

列出名字不被任何他文件拼写的已判决声明,带可见性码:一件只报不判的负向仪器。

veto  = another file spells it | fold (Rust, ≥2 segments ∧ ≥7 chars)
        | the file's own exception regions spell it
row   = [node, vis, conv]      (integers only — a name never rides the wire)
emit  ⇔ vis ⊇ {exported, scope-exported} ∧ conv has no exempt bit (0..10)
code  = 1 private > 2 restricted > 3 reexported > 0 public
推导与常数

U 是自有的 walk:隐藏文件进入,.git/.ce 按名裁掉,未声明的嵌套仓库整体裁掉,根的 .gitmodules 声明的路径作为外来者留下(能拼名字,永不被度量)。只认 .gitignore 与 .ceignore,同一提交得同一个 U,walk 的每个参数都是 MENTION_REV 的输入;mentions 只存 64 位哈希。Haskell 只读可见性词与 mounts 行(私有 mod 挂载、门面再导出、包内私有)。两表随 graph.request 同来同去,不带时应答与十键应答逐字节相同、死集不变。超过 unmentionedCap 时核丢表并具名说明。永不成门,永不进 ce erase。

  • MENTION_REV 4
  • FOLD_MIN_CHARS 7
  • unmentionedVisMask 3
  • unmentionedCap 131072
  • unmentionedHardCap 524288
  • 入 wire 版本 6.2.0
  • wire graph/1
三条泳道(Rust 侧的实测事实、Haskell 侧带公式的判决计算、决定退出码的门),上文各节引用的常数写在图上
常数总表:Rust 抽事实,Haskell 用图上公式出判决,门决定退出码;图上每个数都是上文引用的常数。打开原尺寸 SVG。

改动时家族:一次删除留下了什么

上面的家族读一棵树;第十四族读一次改动(一次编辑、一个会话或一次提交),落在 PreToolUse 钩子、Stop 审计与 ce precommit / ce commitmsg。

14墓碑残留——被删名字的合取

抓住从代码里删掉 X、又把 X 以缺席形式写回的改动:标题 (no X)、标识符 without_x、一句 X is no longer needed。

R     = ⋃ names(before) \ ⋃ alive(after)      (structural positions only; keys, never text)
row   = [kind, marks, names]                  kind ∈ {0 bracketed, 1 bare, 2 prose}
site  ⇔ names ≥ 1 ∧ (kind ≠ 2 ∨ marks ≥ 1)    (the conjunction, read per sentence)
over  ⇔ budget declared ∧ |sites| > budget     (spoken at [tombstone] tier; ships observe)
推导与常数

名字是文本声明出来的:注释与字面量之外的标识符、单元名、标题、列表首词;内联代码跨度只是提及,只保活。Rust 每个新增面发三个整数;Haskell 落座站点并判预算。changelog 定位的文档整体豁免,按路径约定、台账形状或 [tombstone] ledger;自身即台账的引用块或小节只豁免自己。本类出厂 observe,任何晋级都须据两段历史上的九轮 FPR 回放(docs/FPR-TOMBSTONE.md)论证。

  • TOMBSTONE_REV 1
  • min_ascii_name 3
  • min_wide_name 2
  • join_max 3
  • SEGMENT_TOKENS 3
  • minName 1
  • minMarks 1
  • tombstoneRowCap 65536
  • HASH_CAP 256
  • SITE_CAP 10
  • 入 wire 版本 6.6.0
  • wire tombstone/1

顾问家族:扮演同一角色的单元

克隆家族要两个单元长得像;第十五族找没有一行相同、却扮演同一角色的单元,在 ce similar、MCP 工具 similar_units、GUI 的 similar 屏与 Stop 审计的一行里只当顾问。

15同角色顾问——稀疏检索与仓内联想

用整数 BM25 在读自索引事实的六通道词袋上排出与某单元(或一段文本)最像的单元,再问核哪些扮演查询的角色:离线「代码 RAG」,无模型、无浮点,只当顾问。

bag    = six channels N P C D S L        (facts the parse already carries; hashes, never words)
score  = Σ w · idf · 22·tf·avg / (10·tf·avg + 3·avg + 9·len)   (k1 = 6/5, b = 3/4; integer fixed point)
widen  = top-m PPMI neighbours at ≤ ½ weight    (opt-in view; never evidence)
role   ⇔ (N ≥ 1 ∧ C ≥ 1) ∨ (N ≥ 2 ∧ shapeEqual)  (judged in Haskell over similar/1; advisory only)
推导与常数

T3 宇宙每个单元一个袋(名字碎片、形状、被调者拼写、自有文档段、节点种类直方图、字面量种类),每个词词干化后连同通道字母哈希。词袋随内容哈希门控的刷新持久化(bag 自身即倒排表;spec 初稿的共现对表实测让冷索引慢 7–10×,不建,查询时推导)。内存仪器与 SQL 读者共用一份按 trait 写的排序,在五份语料的每个单元上一致。Rust 发查询袋与每候选九个整数;Haskell 用精确有理数排序并施加角色合取。两代仲裁 oracle 的地板:首样本 60 %,留出集 40 %,后者让首样本偏好的每个调优候选退场。永不成门,永不进 ce erase。

  • SIMILAR_REV 1
  • K 5
  • W_UNIT 256
  • TERM_CAP 96
  • TOP_M 3
  • MIN_COOC 2
  • roleMinName 1
  • roleMinCallee 1
  • roleMinNameShape 2
  • similarCap 65536
  • 入 wire 版本 6.7.0
  • wire similar/1

两条诚实边界

PreToolUse 只塑造行为,不是安全边界:Bash: echo >> 或 sed -i 能绕过它,兜底是跑在 git diff 上、与写入工具无关的 Stop 审计和 CI 门。钩子刻意 fail-open:内部失败放行该次编辑并落进 observe feed,而不是读成「没有重复」。两条都写进了计划:对自己覆盖范围撒谎的门,比如实声明的门更糟。