Skip to content

Commit 48973cf

Browse files
committed
the recorded readings are the ones the top-level table actually produces
The verification script carried a reading taken while the absence table was still nested inside `[c-abi]`: three failures against 2026.9.17.1, one of them `[c-abi] has no member 'absent'`. That failure no longer exists, and recording it would have had the sandbox run confirm a shape the engine no longer has. Re-measured against the genuine published 2026.9.18.3 archive: fails=2, and fails=0 on this release. Each CHANGE section now has one leg that passes on BOTH, and the header says why that is the evidence rather than a hole -- both new tables are top-level, an older engine ignores them, so a graph that satisfies its requirements builds either way. What distinguishes the releases is the refusal in each, because an engine cannot refuse what it never read. The self-review's corresponding row moves with it.
1 parent d4921f1 commit 48973cf

2 files changed

Lines changed: 18 additions & 12 deletions

File tree

.agents/docs/2026-09-20-cenv-interfaces-verify.sh

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,27 @@
1616
# its own directory. A section that cannot run says so and is listed again at
1717
# the end, because a run that reports only failures cannot be told from one that
1818
# examined nothing.
19-
# TWO RUNS, AND THE READING FROM EACH (host dry run, 2026-09-20):
19+
# TWO RUNS, AND THE READING FROM EACH (host dry run, 2026-09-20, against the
20+
# genuine published archive of the older release rather than a local build):
2021
#
21-
# mcpp 2026.9.17.1 (published) fails=3
22+
# mcpp 2026.9.18.3 (published) fails=2
2223
# B a requirement the implementation does not provide must be refused
23-
# C a declared absence with a known shape must be accepted
24-
# C the refusal does not name the shapes -- "[c-abi] has no member 'absent'"
24+
# C an absence with an unknown shape must be refused
2525
# mcpp 2026.9.20.1 fails=0
2626
#
27-
# B's FIRST leg passes on both, and that is the documented behaviour rather
28-
# than a hole: `[kernel-abi]` is an unknown top-level table to an older engine
29-
# and is ignored, so a graph that satisfies its requirements builds either way.
30-
# The leg that distinguishes the releases is the refusal. C fails outright on
31-
# the older engine because `[c-abi-absent]` is a new key inside a table it
32-
# knows, where an unrecognised key is a parse error -- the asymmetry docs/22
33-
# records.
27+
# ONE PASSING LEG IN EACH CHANGE SECTION IS THE EVIDENCE, NOT A HOLE. Both new
28+
# tables are top-level, and an older engine IGNORES an unknown top-level table:
29+
# so B's first leg (a graph that satisfies its requirements) and C's first leg
30+
# (an absence with a known shape) build on both releases, and that is exactly
31+
# the backward compatibility this wave claims. What distinguishes the releases
32+
# is the REFUSAL in each: an older engine cannot refuse what it never read.
33+
#
34+
# An earlier revision of this file recorded three failures against 2026.9.17.1,
35+
# one of them `[c-abi] has no member 'absent'`. That reading was taken while
36+
# the absence table was nested inside `[c-abi]`, where an unrecognised member
37+
# is a parse error and the whole manifest was refused. Moving the table to the
38+
# top level is what turned that failure into the passing first leg above --
39+
# see docs/22 and the design's §5.7.5.
3440
set -u
3541

3642
VER="${MCPP_VERIFY_VERSION:?set MCPP_VERIFY_VERSION}"

.agents/docs/2026-09-20-wave-self-review.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ status: active
5959
| `[c-abi-absent]` 与产物一致 || openkal-musl CI 翻转一行并要求脚本拒绝 |
6060
| `provides-interfaces` 与产物一致 || openkal-linux / -windows CI 重新生成并 diff |
6161
| 接口清单不是"打印 SURFACE.txt 的每一组" || openkal CI 的半组腿:`openkal.fs` 只导出两个名字,必须不被列出 |
62-
| 沙箱 CHANGE 段确实区分两个版本 || 对 2026.9.17.1 跑出 fails=3,对 2026.9.20.1 跑出 fails=0 |
62+
| 沙箱 CHANGE 段确实区分两个版本 ||**真正发布的 2026.9.18.3 归档**跑出 fails=2,对 2026.9.20.1 跑出 fails=0。每个 CHANGE 段里各有一条腿两版都过——那不是洞,正是本轮主张的向后兼容:旧引擎忽略未知顶层表,所以**读不到就拒不了**,区分两版的是各自的那条拒绝腿 |
6363

6464
**一条判据曾经不可证伪并已更正**`CenvProbe` 的两个端到端探针测试在 gcc 宿主上 skip。
6565
跳过的判据等于没有判据,所以不变量被提升为 `assemble_argv` 这个纯函数,五个新测试不需要

0 commit comments

Comments
 (0)