2026.9.26.1: paths in UTF-8, a C standard per package, a graph link without the host, and the level that was declared - #698
Merged
Merged
Conversation
…ithout the host, and the level that was declared #693. mcpp held paths in the Windows ANSI code page, and the JSON it writes holds UTF-8 only, so every build under a non-ASCII project directory or home failed with an internal JSON exception, including names the code page can spell; a Latin-1 directory name fails the same way on Linux. mcpp.exe now declares the UTF-8 code page (res/mcpp.rc), build programs are linked with the same manifest, host tools default to it, and the new target key `windows_code_page` states it for a project's own executables. A path with no UTF-8 spelling is refused (project directory, MCPP_HOME), skipped and reported (a name inside a project), or refused by key (a build.mcpp directive), never an internal exception. The response files of the msvc dialect begin with a byte order mark, which cl.exe, link.exe and lib.exe need to read UTF-8 (measured), and Ninja's own encoding is checked when build.ninja is not ASCII. #695. `[build] c_standard` reached every C unit of the graph through the file-level $cflags, and a dependency's own value was not applied. Each package's C units now compile at that package's standard; an undeclared package at c11. #696. A link over a graph-supplied C library searched the host's library directories, so `-lm` linked glibc objects into a musl image. Such a link on ELF now carries --sysroot naming an empty directory, the hermetic check holds every -L to the store, the build directory and the graph's packages, and an unanswered -l fails with a note naming openkal-musl 0.19.2. #694. The musl -Og workaround is removed; the compile and the Finished line read one realised optimization level. Plan and measurements: .agents/docs/2026-09-25-issues-693-696-triage-and-repair-plan.md
…ink measured on four legs - kXlingsVersion and every xlings pin in .github move to 2026.9.26.2 (openxlings/xlings#613): xlings.exe declares the UTF-8 code page and its main has an exception boundary, so a working directory or an MCPP_HOME outside the ANSI code page no longer ends it with 0xC0000409 and no output. - test_cache_key stated the old rule, that a package's `c_standard = "c11"` is keyed; a package that spells the default and one that says nothing compile identically and now share a key. CI run 1 failed that test on every platform, and nothing else in the unit suites. - e2e 778 pins each leg to the openkal-musl and openkal-llvm-runtime pair that belongs together (the runtime pins openkal-musl exactly, and a root that pins another is refused as irreconcilable), and adds the report's aarch64 case under qemu-aarch64 and a host `-L` refused by the hermetic check. The openkal job asserts each leg ran. - docs: a macOS file name is UTF-8; `allow_host_libs` lifts the graph-link refusal rather than turning it into a warning. - The plan's implementation record carries CI run 1: every Windows row of the regression job passes, and the two xcode-27 legs fail as on main (#669).
…no host directory (v1.1)
Member
Author
|
CI on 15317aa: 40 checks pass. The two that fail are the What the run measured for this change:
Run 1 failed |
Sunrisepeak
pushed a commit
that referenced
this pull request
Sep 25, 2026
…gs (#700) The plan's status moves to landed, and its implementation record (§12.4 to §12.6, Appendix A.15) states what was released and measured: - mcpp 2026.9.26.1 (#698), xlings 2026.9.26.2 (openxlings/xlings#613), openkal-musl 0.19.2 and openkal-llvm-runtime 0.15.2, each mirrored to GitCode and checked against its GitHub sha256, and registered or indexed; - the sandbox check of the published artefacts (12 ok) and the same script against 2026.9.25.1 (exactly the six criteria the release changes fail); - mcpp-index#469's sweep (green on every platform) and its openkal measurement over four targets, where the one cell #696 makes visible, mimalloc's `-latomic` on the linux-musl rows, is filed with its owner (mcpplibs/openkal-llvm-runtime#31); - the self-review, and what remains open with the reason for each. Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
This was referenced Sep 25, 2026
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.
Closes #693, #694, #695, #696. Plan, measurements and the implementation record:
.agents/docs/2026-09-25-issues-693-696-triage-and-repair-plan.md(§12.4 for what departs from the plan, Appendix A for the readings).#693: one text encoding
mcpp held paths in the Windows ANSI code page while
compile_commands.jsonholds UTF-8 only. Every build under a non-ASCII project directory orMCPP_HOMEfailed withinternal: unhandled exception: [json.exception.type_error.316], including names the code page can spell (every Chinese name on code page 936); a Latin-1 directory name fails the same way on Linux. The report's silent0xC0000409is the xlings shim (openxlings/xlings#613).mcpp.exedeclares the UTF-8 code page through[resources] files = ["res/mcpp.rc"](the bootstrap engine that builds a release does not know the new key).build.mcppis linked with the same manifest; host tools default to it;[targets.<name>] windows_code_page = "utf-8" | "legacy"states it for a project's own executables.MCPP_HOME), skipped and reported (a name inside a project, thepath/codepagechannel of Windows 解压包含 UTF-8 路径的归档时因多字节代码页转换失败 #516), or refused by key (abuild.mcppdirective). A serialiser failure incompile_commands.jsonis that document's write failure.build.ninjaholds a non-ASCII byte,ninja -t wincodepagemust answer UTF-8.#695:
c_standardapplies to the package that declares itThe root's value was on the file-level
$cflags; a dependency's own declaration was parsed, hashed and not applied. Each package's C units (the entrymainincluded) now compile at their own standard, an undeclared package atc11; the cl.exe dialect reports, in one line, the declarations it does not apply. The #690 record carries a correction note.#696: a graph link searches no host directory
An ELF link over a graph-supplied C library, by clang, carries
--sysroot=<build>/graph-sysroot(empty), and the hermetic check holds every-Lto the store, the build directory and the graph's packages. An unanswered-lfails with a note that names openkal-musl 0.19.2, which ships musl's eight empty archives (mcpplibs/openkal-musl#43, registered in mcpplibs/mcpp-index#467).#694: the declared optimization level
The
*-linux-musl-Ogworkaround is removed; the compile and theFinishedline read one realised level.Tests
windows_code_pageparsing, the rc scanner.openkal-cross.ymlwhere llvm is installed). Each fails against 2026.9.25.1 at the criterion it names..github/tools/check_unicode_paths.shbuilds and runs llvm, MSVC and MinGW rows in an ASCII, acaf+ U+00E9 and a U+6D4B U+8BD5 directory, plus a path throughbuild.mcpp.Still to come on this branch
kXlingsVersionmoves to the xlings release that carries openxlings/xlings#613.