docs(批8 条目1): dex? 泛型实例化 T0 重测 + §1-1 回填——(乙) 已消解 · 剩余 =(甲) · ELF 腿降级(doc-only,解锁 S3 前置件) - #129
Merged
Merged
Conversation
起点 develop@origin = 41a51d8(工作区 b8e1-ws,nice -n 19 重建 corec/corearch)。 只读取数 + 落纸:本提交只含这一份报告文件,零源码改动。 M1 重测(原探针逐字):check=0 · build=0 · interp=15(确定)· ELF=非确定垃圾 (60 次采样:7 命中 0 · 255 命中 0 · 142 命中 0;打印探针读到的是栈地址, ASLR 关时稳定 rc=208)⇒ 计划书「ELF 142」= 分布样本,不得作锚定值。 判定:**(乙) 未把该探针带到 7/7**。 M2 定位:剩余 = (甲) 实参类型不校验,触发条件 = unify_types 无 T? 模式规则 ⇒ 后续实参既不绑定也不校验 ⇒ 实例由首实参单方决定(g[int],槽 slot=0/GP) ⇒ 重定向后第二遍对齐环按实例 int? 判门 ⇒ 不发转换 ⇒ 表示/ABI 失配。 A/B(pre-#121)实证:本探针两态同行为(哑火);同型实参 g(d,d) 两态从垃圾变 7。 新增:S1-ARG 对 T? 恒报(含合法码)⇒ S3 升硬错前必须先补 T? 规则。 M3 判据网:同形绿例(x: dex 具体形参)在场且绿;T? 形参 + 类型冲突多实参 = 零覆盖; 「类型不符实参必须被拒」= 零覆盖。M4 兄弟面 #2026-09-18-10 复现(55/56),未修。 停条件:无命中;四套件(generic_constr 15/15 · cache_identity 6/6 · cir_warm 19/19 · generic_param_erasure ALL PASS)全绿。
回填执行 = b8-e1(plan-verikernel 已知会并暂停改该文件;本次为一次性回填)。 纪律:只做替换与新增,旧文本逐字保留 + 新增「⚠ 更正注」式回填块(不删原文)。 回填内容(2026-09-17-silence-closure.md §1-1): - 现状与剩余机理:(乙) 已消解、剩余 = (甲) 实参类型不校验; unify_types 无 T? 规则 ⇒ 后续实参既不绑定也不校验;实例 g[int](走 checker 绑定段); 第二遍对齐环按实例 int? 判门 ⇒ 不发转换 ⇒ bits 入 GP 槽 ⇒ ELF 垃圾。 - 裁 ①(判据形态改):确定性腿为主(interp=15 + .cir 调用点 + --dump-params 槽型); ELF 腿降为弱腿(只作 ≠7 + N≥10 次采样不复现 7,不得写 = 某值);「禁第三态」对 非确定值域不适用,改判「必须可复现」;升为通用纪律:读数进判据前须证 N≥10 稳定。 - 裁 ②(「期望 7」作废):(甲) 修复后本探针 = rc=1 被拒;要得 7 需另裁推断方向 (字面量多态 / 多实参联合绑定),单独立条目、本批不实现。 - 裁 ③(S3 前置,改排期):[S1-ARG] 对 T? 恒报(含合法码)⇒ 先 (甲)(含 T? 规则)→ 再 S3。 - 新增停条件:若需改 unify_types 既有三条规则的语义(而非新增 T? 分支)⇒ 停下报 lead。 - 判据网缺口六项(多实参 T? 形态 / 类型不符必须拒 / return 位 / Some(…) 位等)当前零覆盖。 同批附带:T0 报告 §③ 采样计数精度修订(90 → 97 次运行,142 命中 1 次)。 零源码改动(doc-only)。
dslsdzc
added a commit
that referenced
this pull request
Sep 18, 2026
…+ 排除法成因,明写机制未查明 实测三读数(同一批探针跨基点):41a51d8d = check rc=0 + 1 条 [S1-ARG] · 965052b(2(a) 后)= rc=1 error[TF01] (g2(d)/g2(x:int)/g2(Some(3))/return g2(x)/f := g2(x);return f 五项全 rc=1)· 批 1 修后五项全 rc=0。 成因 = 排除法定位到 #132(区间内 #129/#130/#131 皆文档面,唯一代码提交是 2(a))。 **机制未查明**(不得据本条推断机理;先例 = #2026-09-17-5 的读码机理被 T0 推翻并带下游判据作废)。 方法学(供后续批次照做):「批声明的范围」≠「批的实际影响面」⇒ 凡改 checker.cr 的批,收尾宜对已知敏感面 跨基点复测同类案例。状态 = 已消解(判据 = tests/selfhost/test_topt_pattern.py C7)。 (映射表行 + ### 段两处齐备;test_todo_id_migration 全绿:J3 新 id 139 / 标题 139)
dslsdzc
added a commit
that referenced
this pull request
Sep 18, 2026
…(判据 C1–C7 两向钉子 + 突变自证) (#133) * fix(批8 (甲) 批1 刀1): unify_types 的 T? 模式规则(只加分支,不改既有三条规则语义) 根因(实测):unify_types 三条规则外的 `T?`(TYP_OPTIONAL,内层泛型参数)落兜底 type_compat_strict(concrete, pattern) ⇒ 内层**不代入、不绑定、恒假** ⇒ 泛型调用里 `T?` 形参的实参既不绑定也不校验,且 [S1-ARG] report-only 打点对 `T?` **恒报**(含已正确编译的 合法调用 —— 它们此前靠 ir_gen 旧路径恰好正确)。 修复:新增 `pk == TYP_OPTIONAL` 分支(① concrete 亦 optional ⇒ 内层对内层;② 否则裸值入 T? ⇒ 内层对 concrete),内层是泛型参数时由既有 TYP_GENERIC_PARAM 分支绑定/比对。 **既有三条规则逐字未动;不改任何调用点。** 判据(tests/selfhost/test_topt_pattern.py,已挂 src/ci/run.sh selfhost-tests;**两向钉子**): C1 五例合法调用(C6 g(d,d) / C7 g2(d) / J / K / M)[S1-ARG] 由 1 → **0**; C2 g(1,d) 真错仍**恰 1** 条(防「一律不报」);C3 实例键与调用点转换不变 (g[dex] / g2[dex] / call g2[dex](_dxsc));C5 槽型直读 slot=8;C4 非泛型面零足迹对照。 批次判据(与当批起点读数相同):check src/compiler rc=0 · ^error[ = 0(起点 0)· selftest-types 415/415(起点 415/415)· canary 5/5 且五值逐字节同改前 · 停条件六套件全绿(test_optional 80/80 · test_arg_inference_gap 全绿 · test_generic_constr 15/15 · test_generic_param_erasure ALL PASS · test_cache_identity 6/6 · test_cir_warm_path 19/19)。 行为变更(显式登记):`T?` 的 S1-ARG 误报消失(诊断面)+ 该模式下的泛型绑定由「不绑定」 变为「绑定」;产物面零足迹(canary 五值 + 六套件均同改前)。 * docs(TODO #2026-09-18-20): 登记「T? 形参单泛型调用在 2(a) 后由静默升级为硬错 TF01」——只登事实 + 排除法成因,明写机制未查明 实测三读数(同一批探针跨基点):41a51d8d = check rc=0 + 1 条 [S1-ARG] · 965052b(2(a) 后)= rc=1 error[TF01] (g2(d)/g2(x:int)/g2(Some(3))/return g2(x)/f := g2(x);return f 五项全 rc=1)· 批 1 修后五项全 rc=0。 成因 = 排除法定位到 #132(区间内 #129/#130/#131 皆文档面,唯一代码提交是 2(a))。 **机制未查明**(不得据本条推断机理;先例 = #2026-09-17-5 的读码机理被 T0 推翻并带下游判据作废)。 方法学(供后续批次照做):「批声明的范围」≠「批的实际影响面」⇒ 凡改 checker.cr 的批,收尾宜对已知敏感面 跨基点复测同类案例。状态 = 已消解(判据 = tests/selfhost/test_topt_pattern.py C7)。 (映射表行 + ### 段两处齐备;test_todo_id_migration 全绿:J3 新 id 139 / 标题 139)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
性质
只读取数 + 落纸(doc-only,零源码改动)。本 PR 是解锁 S3 的前置件(lead 裁 ③)。
内容(两件)
docs/superpowers/plans/2026-09-18-b8-e1-t0.md(T0 重测报告;起点develop@origin=41a51d8d;工作区b8e1-ws)docs/superpowers/plans/2026-09-17-silence-closure.md§1-1b8-e1执行(一次性),plan-verikernel已知会并暂停改该文件一、结论(一句话)
(乙) 已消解(并已实测确认对同型实参生效);剩余 = (甲) 实参类型不校验。
探针仍静默错值:
check=0 · build=0 · interp=15(确定);ELF 腿 = 非确定垃圾。二、M1 三态读数(原探针逐字)
check0(仅 1 行[S1-ARG] line=4 col=52 pi=1 p=T? a=dex)build0(lower done: 18 funcs, 1747 instrs,零error[)interp15(3/3 一致;=4619567317775286272 / 10^6 % 256,即 7.0 的 binary64 位模式未转换)ELF142仅 1 次(首轮 30 次批内);复跑 60 次 0 次;7命中 0、255命中 0;关 ASLR 稳定rc=208判定:否——(乙) 未把该探针带到 7/7。
A/B(pre-#121 二进制
/tmp/ge-pre/corec):本探针两态行为相同(哑火);同型实参g(d, d)两态由垃圾变 7 ⇒ (乙) 修的是同型、不是本例。(实测)补:打印探针读到被读值 = 栈地址(
setarch -R下稳定0x7FFFFFFFE0C8)⇒ ELF 垃圾来自未初始化 GP 寄存器(四读数合推,未做 gdb/反汇编级确认)。三、剩余机理(读码 + 最小实验;行锚 =
41a51d8d)unify_types(checker.cr:1926)只有==/TYP_GENERIC_PARAM/TYP_GENERIC_APPLY三条规则;T?(内层泛型参数)落兜底type_compat_strict⇒ 恒假且不绑定 ⇒ 后续实参既不绑定也不校验(仅[S1-ARG]report-only)。(读码)1把T绑成int⇒ 实例 =g[int]。(实测):首参给 structP时实例 =g[P](非 ir_gen 回落路径的g[unit])⇒ 实例键来自 checker 的调用点绑定段。--dump-params槽型直读:PARAM g[int] p1 x slot=0(TI_INT/GP)。(实测)dex_align_call_args(ir_gen.cr:2260)按实例int?判门 ⇒ 不发转换;.cir=call g[int](_arg, _arg)(无_dxsc)。(实测)TI_INT(GP 类)槽 ⇒ ELF 垃圾;interp 按位置拷贝位模式 ⇒ 15。(推理链,与 2–4 的实测一致)为什么既有绿例是绿的(实测):
x: dex(具体)形参第一遍环即命中 ⇒ 发转换 ⇒ 7(test_apx_conversion.py的nonreg_generic_dex_param、tests/suite/apx_conversion_test.cr的generic7都是这一形;与本探针的唯一差别是形参写dex还是T?);scaled 实参(GP 类)与TI_INT槽表示巧合相同 ⇒ 也得 7。两者都不是「实参类型被校验过」。四、lead 三裁的落实位置(均在 §1-1 回填块内)
.cir调用点 +--dump-params槽型);ELF 腿只作「≠7」+ N≥10 次采样不复现 7,不得写「= 某值」;「禁第三态」对非确定值域不适用 ⇒ 改判「必须可复现」;并升为通用纪律:读数进判据前须先证 N≥10 次采样稳定。g(1, d)中 T 由首实参定int、第二实参dex与int?不符 ⇒ 应拒;(甲) 修复后本探针 = rc=1 被拒;要「得 7」需另裁推断方向(字面量多态 / 多实参联合绑定T)⇒ 单独立条目登记,本批不实现。[S1-ARG]对T?模式恒报,含g(d, d)(实例g[dex]、ELF=7)、g2(d)(正是 (乙) 套件 C4 断言的正确形态)、g2(int)等已正确编译的合法调用 ⇒ 先 (甲)(含unify_types的T?规则)→ 再 S3,顺序不许颠倒。(实测:5 例命中的误报面)unify_types既有三条规则的语义(而非新增T?分支)⇒ 停下报 lead。五、判据网缺口(须随 (甲) 一并补;回填块 ⑥)
T?形参 + 类型冲突的多实参形态(本探针)·「类型不符实参必须被拒」·return g2(x)位 ·Some(…)实参位 ⇒ 当前零覆盖(后两者当前实测TF01硬错,属同族相邻缺陷,未定位根因)。(M3 另有:
tests/里同形绿例在场但形参是具体dex;T?泛型形参唯一覆盖 =test_generic_param_erasure.py的单形参g2[T](x: T?)。)六、六项「没做到的」(照抄 T0 报告 §④,不藏)
g_gen_binds段内容(实例键来源由实验 N 反推);tests/suite/*.cr覆盖口径」未复核;return g2(x)TF01 /Some(…)实参 TF01 / S1 误报)只最小复现,未定位根因;src/arch/**、src/os/linux/callseq.cr、src/format/**;未跑full-bootstrap(避/tmp/corec2|corec3撞车)。七、守门(本轮实测)
test_generic_constr.py15/15 ·test_cache_identity.py6/6 ·test_cir_warm_path.py19/19 ·test_generic_param_erasure.pyALL PASS (C1–C7) —— 全绿;nice -n 19构建(corecsha256b5cdd49d…、corearch9af0b8b3…)。