From 1c6514bb1c0044802f7665ea805bf8d08cd4a6eb Mon Sep 17 00:00:00 2001 From: speak-agent <248744407+speak-agent@users.noreply.github.com> Date: Sun, 20 Sep 2026 23:17:09 +0800 Subject: [PATCH] bootstrap from 2026.9.20.1, and widen an assertion that matched an identifier 2026.9.20.1 is released, mirrored on both ends and resolvable from the index, so the workspace bootstraps from it. VERIFIED BEFORE THE PIN MOVED, not after. The published CN artifact reports its own version and builds openkal-musl's real 24-row [c-abi-absent] manifest; `.agents/docs/2026-09-20-cenv-interfaces-verify.sh` reports `fails=0` against it both on this host and inside `xlings subos use v920 --sandbox`, with CN mirrors, addressing the store path rather than the shim --- `xlings use` rewrites only the root configuration, so a shim is not evidence of which binary a sandbox runs. The same script against the published 2026.9.18.3 reports `fails=2`, which is what makes each CHANGE section a measurement rather than a formality. The other change is a test. `AFreestandingTargetWithoutASelectionIsRefused` asserted that the refusal contains the target triple --- an identifier, which sits in the right place in a sentence that is wrong. Two refusals this wave added were found malformed exactly that way, by rendering them and reading them: one had lost a closing parenthesis, and one read as the claim it denies. This message has a single substitution and no paired delimiters, so it has no such failure mode; the assertion is widened anyway, because "no failure mode" is a property of today's wording rather than of the check. --- .xlings.json | 2 +- tests/unit/test_cenv_probe.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.xlings.json b/.xlings.json index 3f978c92..27cf18b7 100644 --- a/.xlings.json +++ b/.xlings.json @@ -1,5 +1,5 @@ { "workspace": { - "mcpp": "2026.9.17.1" + "mcpp": "2026.9.20.1" } } diff --git a/tests/unit/test_cenv_probe.cpp b/tests/unit/test_cenv_probe.cpp index ef447977..68b85636 100644 --- a/tests/unit/test_cenv_probe.cpp +++ b/tests/unit/test_cenv_probe.cpp @@ -300,6 +300,16 @@ TEST(CenvProbeArgv, AFreestandingTargetWithoutASelectionIsRefused) { ASSERT_FALSE(r.has_value()) << "an argv with no target selection must be refused for a " "freestanding target; it measures the build host"; + // THE CLAUSE, NOT ONLY THE TRIPLE. Two other refusals this wave added were + // found malformed by rendering them: one lost a closing parenthesis, and + // one read as the claim it denies. Both had tests asserting an identifier + // inside the sentence, and an identifier sits in the right place in a + // sentence that is wrong. This message has one substitution and no paired + // delimiters, so it has no such failure mode -- the assertion is widened + // anyway, because that is a property of today's wording rather than of + // the check. + EXPECT_NE(r.error().find("would have run with no target selection"), + std::string::npos) << r.error(); EXPECT_NE(r.error().find("riscv64-none-elf"), std::string::npos) << "the refusal must name the target it was for: " << r.error(); }