Skip to content

Latest commit

 

History

History
59 lines (48 loc) · 5.2 KB

File metadata and controls

59 lines (48 loc) · 5.2 KB

structure/1 八轴语义(S0–S7)

蒸馏自 M6 结构管理器设计册(原 docs/reviews/,2026-08-20 回填后 清理;全文在 git 历史)。判决全在 Haskell CE.Structure.*;这里 只记语义契约——每轴一具名谓词一旋钮,逐目录可下钻,CLI 报告与 GUI 首屏共用一份 JSON 数据面(ce.structure-report)。

轴表

轴 信号 事实源(测量侧,Rust)
S0 路径几何 深度超顶(depth > 8)、单目录扇出超顶(subdirs+files > 30)——两谓词两旋钮,绝对上限非分布判定 walk 树形聚合
S1 命名一致性 每兄弟集的命名模式熵(case/分隔符/数字打头——分类器只有这三维,无前缀族)——名不过线:7.2.0 起过线的是每个词干的七位形状位(patternShapes),模式码由核 CE.Structure.Shape 的 STYLE 表折出;此前 Rust 分类后只过模式码分布 walk 文件名(词干形状位)
S2 正交性/局部性 目录内 vs 目录间引用密度(fileRefs 触点为单一事实基) graph 边表
S3 漂移错位 持有错位文件的目录计数(修正案①);文件级谓词不变:outside ≥ min 且 > 2×inside graph 边表
S4 文档基建 文件数 ≥ bigDirFloor(默认 8,旋钮 6)的目录须有 README;根目录须有可识别配置;约定位掩码(1=README,2=config) walk + 核 CE.Structure.Tree.configNames 的 8 个配置基名表(v2.33 W1 第 3 项前在 cli/src/structure/tree.rs)(与 entry_globs 无关,那是图族的存活根表)
S5 文档新鲜度 每目录的陈旧文档数:某个引用目标晚于该 md 文件自身最后一改即陈旧(存在量词 + 严格 >,同提交不算) churn 窗口 + md 阶梯
S6 冗余/孤儿卷积 dedup 块数、deadcode 判决按目录卷积(--deep 才上线) dedup/deadcode 判决
S7 模块度 目录分划在有向引用图上的 Newman 贡献,除以该目录自身质量所能挣到的上限:rho = (e·m − o·i) / (mu·(m−mu)),低于 modFloor(‰,默认 1)即计入;mu < modMassFloor(默认 4)或 mu == m 者不判。intra 质量不上 wire——fileRefs 的 inside 之和恰为其两倍,边界律钉两表同一张图 graph 边表(有向目录边表 dirEdges + fileRefs)
  • 评分(2.26.0 密度律):charge_i = floor(scale·v_i/(v_i+N))(N=目录总数),score = max 0 (kScale − Σ(charge×violCost) div (neutral×judgedAxisCount))(整数 div、且钳到 0;judgedAxisCount 为 5..8;册 04 §5 为准);轴行载费额(‰) (structViolCost=10、structScale=1000;旋钮回执逐行 pin, 漂移即错——「一个数字两个主人」拒绝)。
  • 熵实现:Shannon/KL 需对数=无理数不可精确判定,取有理判定式; 落在任何已声明 bin 之外的观测质量 → divergence 整体撤回([]), 由 kind-0 偏差行指名,绝不塌成 0。chi2 自身的零参照 Nothing 臂在 这条路上不可达(权重已校验 ≥ 1),撤回由 Declared.hs 的 unowned 驱动——两件事,先前这里写成了一件。
  • 语言口径:只有判决语言集入树(plan v2.5:尺寸门语言臂不入 structure——否则 S0 几何 / S1 命名 / S4 文档与两行熵都会随文件总体漂移。 不是「S2 会判混语」:S2 读的是引用触点分布、压根没有语言项, 那句话在批 7 缺陷扫时已由 Rust 侧就地更正)。

修正案①(用户拍板 2026-08-19,v0.5.0 起生效)

S3 罚分单位由错位文件数改为持有错位文件的目录数(去重)。 依据 = 评审实测:各轴罚分等权加和,唯 S3 按文件计——500 个错位 文件的一个垃圾抽屉能把整份结构分打到 0,淹没其余全部轴;改后与 S6 体例一致(过线目录计 1)。

覆盖映射(一现象一轴,不双计):散落 = 每个受害目录各计 1 (散得越广罚越多);单目录文件爆炸 = S0 扇出 + S4 文档辖区; 堆叠/克隆 = S6 与 dedup 辖区。

S7 与 S2 的分界:S2 的 outs > ins(触点口径)等价于「内部占比 < 1/3」, 是一条不随仓规模变化的局部性线;S7 坐在零模型上,因此它多看见的是巨石目录 ——把全树多数边吃进自己肚子的目录在 S2 面前风平浪静,在 S7 面前不及格。

分数迁移:修正案①改变同一仓库的结构分(先例:自仓 990→992);2.26.0 密度律再次迁移全部结构分(质量法退役,批 6 verdict 先例), 7.1.0 的 S7 第三次迁移全部结构分(ce structure 恒发 dirEdges,判轴数每次都多一),与 1.6.0 不可比; 发版说明必须声明(docs/RELEASE.md §0)。

拆分 ROI 顾问(v0.6,structure/1 扩展)

ce structure --split-candidates:对越过冻结软线的判决文件逐一计 价——最优缝(ROI≥1)或带数字的内聚豁免;v0.7 起缝价含四腿(引用 /克隆块/共变对/φ),MCP 与 GUI 面同批补齐。契约与 as-built 实录见 size-advisory.md;wire 形状见 contracts/VERSIONING.md 2.14.0/2.15.0 条。