Skip to content

Commit 19cd960

Browse files
authored
fix(diagnostics): stop promising a remedy that does not work (2026.8.15.3)
沙箱真实验证抓到的:mcpp 在 SubOS 缺 `subos_info` 时建议 `xlings self update`,而实测它与 `self doctor --fix` 都不回填已存在的 SubOS,`xlings subos` 也无 repair 子命令。已开 openxlings/xlings#547;三处措辞改为陈述事实并指向它。这句话出自 xlings 的原始措辞,mcpp 一直在转述 —— 把「上游这么说」当成「这是对的」转述给用户,和自己写错一样。
1 parent f622f02 commit 19cd960

6 files changed

Lines changed: 14 additions & 9 deletions

File tree

mcpp.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mcpp"
3-
version = "2026.8.15.2"
3+
version = "2026.8.15.3"
44
description = "Modern C++ build & package management tool"
55
license = "Apache-2.0"
66
authors = ["mcpp-community"]

src/platform/runtime_binding.cppm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,8 @@ resolve_runtime_binding(
284284
" Where the C runtime comes from a payload, there is now no "
285285
"declared runtime to bind to — mcpp declines to guess a version, so "
286286
"the link falls back to the host and the hermeticity check will say "
287-
"so. `xlings self update` writes the block.",
287+
"so. Only a SubOS created by a current xlings carries the block "
288+
"(openxlings/xlings#547).",
288289
selection.subosName,
289290
info.note.empty() ? "no `subos_info` block" : info.note));
290291
} else if (info.schema > mcpp::xlings::subos::kSupportedSchema) {

src/platform/xlings/subos_info.cppm

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,10 @@ Info read(const std::filesystem::path& subosDir) {
146146
info.note = std::format(
147147
"subos '{}' does not describe itself (no `{}` block), so programs "
148148
"run from here get no environment it declares — a GL application "
149-
"will not find its drivers. A newer xlings writes this block; "
150-
"`xlings self update` adds it",
149+
"will not find its drivers. A SubOS created by a current xlings "
150+
"carries it; an existing one is NOT backfilled by `self update` or "
151+
"`self doctor --fix` (openxlings/xlings#547), so recreating the "
152+
"SubOS is what supplies it today",
151153
subosDir.string(), kBlock);
152154
return info;
153155
}

src/toolchain/lifecycle.cppm

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -615,8 +615,10 @@ export int toolchain_install(const mcpp::config::GlobalConfig& cfg,
615615
// the install itself succeeded.
616616
mcpp::ui::warning(std::format(
617617
"installed, but not bound to a C runtime: {}.\n"
618-
" Run `xlings self update` to write the SubOS "
619-
"description, then re-run this command to complete the wiring.",
618+
" The install itself succeeded. To complete the wiring, "
619+
"use a SubOS created by a current xlings — an existing one is "
620+
"not backfilled (openxlings/xlings#547) — then re-run this "
621+
"command.",
620622
fixed->skippedReason));
621623
}
622624

src/version.cppm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ import std;
3131

3232
export namespace mcpp {
3333

34-
inline constexpr std::string_view MCPP_VERSION = "2026.8.15.2";
34+
inline constexpr std::string_view MCPP_VERSION = "2026.8.15.3";
3535

3636
} // namespace mcpp

tests/unit/test_post_install.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,8 @@ TEST(PostInstallFixup, ADeclaredRuntimeThatCannotBeHonouredStillFails) {
160160
// No marker may be written for a fixup that did not happen. The marker is a
161161
// content fingerprint whose whole job is to answer "were these inputs ever
162162
// applied"; one written for "we did nothing" reads back as "already applied",
163-
// and the fixup would then never run again — including on the day the user runs
164-
// `xlings self update` and the identity finally becomes knowable.
163+
// and the fixup would then never run again — including on the day the user
164+
// moves to a SubOS that does describe itself and the identity becomes knowable.
165165
TEST(PostInstallFixup, ASkippedFixupLeavesNoMarkerBehind) {
166166
if constexpr (!mcpp::platform::is_linux) {
167167
GTEST_SKIP() << "the runtime binding gate is Linux-only";

0 commit comments

Comments
 (0)