Skip to content

Commit fd4e2ce

Browse files
committed
fix: close compiler status races and align release group
1 parent 5279ab7 commit fd4e2ce

23 files changed

Lines changed: 331 additions & 80 deletions

‎.agents/docs/2026-11-06-compiler-attempt-recovery.md‎

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
---
2+
subject: compiler-scheduling
3+
status: active
4+
---
5+
16
# Compiler attempt lifetime and output recovery
27

38
Status: source implementation and focused acceptance in progress. This record
@@ -207,7 +212,7 @@ No runtime generation becomes a dependency version or build-cache identity.
207212
| C++ runtime | 0.19.0 | [Runtime 66](https://github.com/mcpplibs/openkal-llvm-runtime/pull/66) |
208213
| Platform | 0.24.0 | Publication follows its public lower dependencies |
209214
| OS composition | 0.3.0 | [OS 17](https://github.com/mcpplibs/os/pull/17) |
210-
| Core | 2026.11.5.2 | [mcpp 889](https://github.com/mcpp-community/mcpp/pull/889) |
215+
| Core | 2026.11.6.1 | [mcpp 889](https://github.com/mcpp-community/mcpp/pull/889) |
211216

212217
OS advances to 0.3.0 so an explicit range such as `^0.2.3` cannot silently
213218
absorb a different OpenKal minor group. Bare package versions name exact wire
@@ -222,15 +227,43 @@ image consumer calls all four operations through the image convention,
222227
including the fifth retirement argument and an invalid continuation that
223228
changes the state output from `empty` to `unknown`.
224229

225-
Source-group controls establish implementation behaviour. They do not establish
226-
that public versions are installable. Release gates remain full repository CI,
227-
canonical tag archives, byte-identical CN mirrors, published index entries and
228-
ordinary GLOBAL/CN consumers. Temporary image source overrides are removed
229-
before its final exact-head public-dependency CI. Platform and OS qualification
230-
follow the lower public group; core then updates its OS and default platform
231-
pins and runs full exact-head CI before independent ecosystem review. Plugins
232-
PR 52 retains the public 2026.11.5.1 pin until core 2026.11.5.2 is published,
233-
then runs its actual sidecar integration and final CI.
230+
Source-group controls establish implementation behaviour. The lower versions,
231+
including platform 0.24.0 and OS 0.3.0, are now publicly released and indexed;
232+
their ordinary consumers have been checked. Core 2026.11.6.1 uses those pins
233+
and still requires full exact-head CI, an independent ecosystem review,
234+
canonical tag archives, byte-identical CN mirrors, a published index entry and
235+
ordinary GLOBAL/CN consumers. Plugins PR 52 retains the published
236+
2026.11.5.1 pin until core 2026.11.6.1 is published, then runs its actual
237+
sidecar integration and final CI.
238+
239+
## 2026-11-06 final-head CI failure controls
240+
241+
The first 2026.11.6.1 CI run exposed four distinct boundaries. Clang/libc++
242+
uses a wider file-clock tick representation than `std::to_string` accepts;
243+
the journal now rejects values outside its signed 64-bit schema and preserves
244+
in-range ticks. A direct exact-toolchain control compiled the failing expression
245+
and the corrected one, including a real file identity. Native Clang, ARM and
246+
bootstrap jobs still require the next full CI run.
247+
248+
An actual split-compiler control held a previously absent `.rc` observation
249+
until the controller had published status and exited. The earlier engine failed
250+
with `compiler controller ended without a status`; the corrected engine rereads
251+
status before treating controller loss as failure. Phase-one, quiet-unit and
252+
owner-witness observations use the same ordering rule. A real GCC build then
253+
passed its compiler-cap, cancellation, cached replay and same-invocation
254+
missing-object recovery controls. A missing status remains a bounded failure.
255+
256+
On Windows, the unit fixture can derive its root from an 8.3 TEMP alias while
257+
the MSVC filesystem implementation records canonical long paths. Production
258+
`RunScope` already canonicalizes its root before admission. The fixture now
259+
does the same before deriving BMI, object and certificate paths; the native
260+
Windows suite must confirm the negative symlink controls remain intact.
261+
262+
The generated Windows package launcher also named OS 0.2.9, whose OpenKal
263+
0.23 group conflicts with the current default platform 0.24. It now names
264+
OS 0.3.0. The older consumer platform selected by the application's own
265+
target remains independent of the launcher's build platform. The actual
266+
cross-platform packing control and complete CI remain release gates.
234267

235268
## Separate Windows build-program defect
236269

‎.agents/docs/2026-11-06-launch-configuration-and-named-test-runners.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
---
2+
subject: heterogeneous-build
3+
status: active
4+
---
5+
16
# Launch configuration and named test runners
27

38
Status, 2026-11-06: implemented for candidate 2026.11.6.1. Focused local

‎.agents/docs/README.md‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ superseded_by: 2026-09-07-....md # when status is superseded
1818
---
1919
```
2020

21-
350 records.
21+
352 records.
2222

2323
## By subject
2424

@@ -38,6 +38,10 @@ Records that declare one. Everything else is listed by date below.
3838

3939
- [BMI publication, compiler capacity and active download budgets](2026-11-06-bmi-publication-and-compiler-cap-closeout.md) — active
4040

41+
### compiler-scheduling
42+
43+
- [Compiler attempt lifetime and output recovery](2026-11-06-compiler-attempt-recovery.md) — active
44+
4145
### design
4246

4347
- [升级的连续性:打包修订不在使用路径上替换载荷、替换失败不拆掉可用状态、home 中的悬空记录自愈、真实的升级 lane](2026-10-17-upgrade-continuity-design.md) — active
@@ -86,6 +90,7 @@ Records that declare one. Everything else is listed by date below.
8690

8791
### heterogeneous-build
8892

93+
- [Launch configuration and named test runners](2026-11-06-launch-configuration-and-named-test-runners.md) — active
8994
- [异构构建语义与插件边界补充方案(mcpp#885、mcpp#887)](2026-11-05-heterogeneous-build-semantics-and-plugin-boundaries-supplement.md) — active
9095
- [异构构建补充方案的第二轮调研与实验](2026-11-05-heterogeneous-build-research-and-experiments.md) — active
9196
- [生态 885 与异构构建补充方案的实现依赖](2026-11-05-heterogeneous-build-implementation-plan.md) — active
@@ -171,6 +176,8 @@ Records that declare one. Everything else is listed by date below.
171176

172177
### 2026-11
173178

179+
- [Launch configuration and named test runners](2026-11-06-launch-configuration-and-named-test-runners.md) — active
180+
- [Compiler attempt lifetime and output recovery](2026-11-06-compiler-attempt-recovery.md) — active
174181
- [BMI publication, compiler capacity and active download budgets](2026-11-06-bmi-publication-and-compiler-cap-closeout.md) — active
175182
- [异构构建语义与插件边界补充方案(mcpp#885、mcpp#887)](2026-11-05-heterogeneous-build-semantics-and-plugin-boundaries-supplement.md) — active
176183
- [异构构建补充方案的第二轮调研与实验](2026-11-05-heterogeneous-build-research-and-experiments.md) — active

‎CHANGELOG.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88

99
### Fixed
1010

11+
- A finished detached compiler is recognized when its final status appears
12+
between status and liveness checks. Recovery still validates its output proof.
13+
- Windows launcher packages use the OS release required by the current default
14+
platform, so their generated dependency resolves alongside openkal-platform 0.24.
15+
- Compiler attempt journals preserve file timestamps on Clang/libc++ when the
16+
file clock uses a wider integer representation.
1117
- Launch descriptions include the selected target, profile, resolved platform
1218
and available named runners, including the reachable leg of a target set.
1319
Editor debug launches can retain the configuration that actually built the program.

‎docs/04-mcpp-toml.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1518,7 +1518,7 @@ the platform's own key names ([35 — Platforms](35-platforms.md)):
15181518

15191519
```toml
15201520
[target.'cfg(os = "openkal")']
1521-
platform = "openkal-platform@0.23.3" # or { path = "…" }, or "none"
1521+
platform = "openkal-platform@0.24.0" # or { path = "…" }, or "none"
15221522

15231523
[target.'cfg(platform = "openkal")'.layers]
15241524
c-abi = { path = "../openkal-musl" }

‎docs/10-pack-and-release.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -956,7 +956,7 @@ and sha256. A provided format, `--merge` and `mcpp emit xpkg` read it
956956
([SPEC-014](specs/packaging.md) §4.5):
957957

958958
```json
959-
{"schema": 1, "name": "hello", "version": "0.1.0", "platform": "openkal-platform@0.23.3",
959+
{"schema": 1, "name": "hello", "version": "0.1.0", "platform": "openkal-platform@0.24.0",
960960
"linkage": "shared", "mode": "vendored", "legs": ["x86_64-openkal", "aarch64-openkal"], "systems": [],
961961
"launch": {"runner": ["okrun", "{}"], "entry": {"x86_64": "lib/x86_64/hello.oke", "aarch64": "lib/aarch64/hello.oke"}},
962962
"files": [{"path": "lib/x86_64/hello.oke", "role": "image", "leg": "x86_64-openkal", "sha256": "…"}]}

‎docs/35-platforms.md‎

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ mcpp run --target x86_64-openkal
4040

4141
```
4242
Resolved llvm@23.1.3 → x86_64-openkal → …/xim-x-llvm/23.1.3/bin/clang++
43-
the platform's (openkal-platform 0.18.0), replacing your gcc@16.1.0 — override with `[target.x86_64-openkal] toolchain`
43+
the platform's (openkal-platform 0.24.0), replacing your gcc@16.1.0 — override with `[target.x86_64-openkal] toolchain`
4444
Target x86_64-openkal → x86_64-unknown-none-elf
45-
compiler-runtime compiler-rt (openkal-llvm-runtime@0.16.6, platform)
46-
c-abi musl (openkal-musl@0.22.6, platform)
47-
c++-abi libc++ (openkal-llvm-runtime@0.16.6, platform)
48-
Platform openkal-platform 0.18.0 (built-in)
49-
tools okld, okrun (openkal-tools@0.1.3, platform)
45+
compiler-runtime compiler-rt (openkal-llvm-runtime@0.19.0, platform)
46+
c-abi musl (openkal-musl@0.28.0, platform)
47+
c++-abi libc++ (openkal-llvm-runtime@0.19.0, platform)
48+
Platform openkal-platform 0.24.0 (built-in)
49+
tools okld, okprof, okrun (openkal-tools@0.5.0, platform)
5050
runner okrun (platform)
5151
link lld, start ok_main (platform)
5252
Compiling app v0.1.0 (.)
@@ -113,9 +113,9 @@ The first of these that answers selects the target's platform:
113113

114114
| Source | Spelling |
115115
|---|---|
116-
| the command line | `--platform openkal-platform@0.23.3`, `--platform path:../openkal-platform`, `--platform none` |
116+
| the command line | `--platform openkal-platform@0.24.0`, `--platform path:../openkal-platform`, `--platform none` |
117117
| the environment | `MCPP_TARGET_X86_64_OPENKAL_PLATFORM=…` |
118-
| the project | `[target.<selector>] platform = "openkal-platform@0.23.3"`, or `{ path = "…" }` |
118+
| the project | `[target.<selector>] platform = "openkal-platform@0.24.0"`, or `{ path = "…" }` |
119119
| this machine | the same key in `~/.mcpp/config.toml` |
120120
| the target table | the platform column (`mcpp toolchain list`) |
121121

@@ -129,11 +129,11 @@ its own conventions. `[host] platform` selects a platform for them instead:
129129

130130
```toml
131131
[host]
132-
platform = "openkal-platform@0.23.3"
132+
platform = "openkal-platform@0.24.0"
133133
```
134134

135135
```
136-
Host platform openkal-platform 0.18.0 (mcpp.toml:2): build programs are x86_64-openkal images run by okrun
136+
Host platform openkal-platform 0.24.0 (mcpp.toml:2): build programs are x86_64-openkal images run by okrun
137137
```
138138

139139
Every build program then compiles as an ok image of this machine's
@@ -151,7 +151,7 @@ implementation:
151151

152152
```toml
153153
[target.'cfg(any(linux, macos, windows))']
154-
platform = "openkal-platform@0.23.3"
154+
platform = "openkal-platform@0.24.0"
155155
```
156156

157157
On Windows the arrangement is the GNU ABI's row (`--target x86_64-windows-gnu`);
@@ -165,12 +165,12 @@ packages pin one another exactly. A graph that holds another version of one of
165165
them is refused before anything compiles:
166166

167167
```
168-
error: openkal-musl 0.22.2 is in this build, and the platform openkal-platform 0.18.0 is a version group that names openkal-musl 0.22.9.
168+
error: openkal-musl 0.22.2 is in this build, and the platform openkal-platform 0.24.0 is a version group that names openkal-musl 0.28.0.
169169
requested by: own
170170
The family's packages pin one another exactly, so two versions of one of
171171
them cannot be linked into one program. Either select the platform release
172172
of that version ([target.<selector>] platform = "openkal-platform@<version>"), or write
173-
openkal-musl = "0.22.6" where it is requested.
173+
openkal-musl = "0.28.0" where it is requested.
174174
```
175175

176176
A package taken from a directory or a repository is not bound by the group.
@@ -184,39 +184,40 @@ abridged:
184184
[package]
185185
namespace = "mcpplibs"
186186
name = "openkal-platform"
187-
version = "0.18.0"
188-
mcpp = ">=2026.10.30.1"
187+
version = "0.24.0"
188+
mcpp = ">=2026.11.3.1"
189189

190190
[platform]
191191
targets = ["x86_64-openkal", "aarch64-openkal"]
192192
toolchain = "llvm@23.1.3"
193-
runner = { cmd = ["okrun", "{}"], host = "same-arch" }
194-
carrier = { package = "openkal-run@0.1.3", section = ".oke", main = "carrier/main.cpp" }
193+
runner = { cmd = ["okrun", "{}"], host = "same-arch", hosts = ["linux-x86_64", "linux-aarch64", "macos-aarch64", "windows-x86_64"] }
194+
carrier = { package = "openkal-run@0.5.0", section = ".oke", main = "carrier/main.cpp" }
195195
plugin = "build.mcpp"
196196

197197
[platform.layers]
198-
compiler-runtime = "openkal-llvm-runtime@0.16.6"
199-
"c++-abi" = "openkal-llvm-runtime@0.16.6"
200-
c-abi = { name = "openkal-musl", version = "0.22.6", default-features = false, features = ["posix"] }
198+
compiler-runtime = "openkal-llvm-runtime@0.19.0"
199+
"c++-abi" = "openkal-llvm-runtime@0.19.0"
200+
c-abi = { name = "openkal-musl", version = "0.28.0", default-features = false, features = ["posix", "malloc-mimalloc"] }
201201

202202
[platform.tools]
203-
okld = "openkal-tools@0.1.3"
204-
okrun = "openkal-tools@0.1.3"
203+
okld = "openkal-tools@0.5.0"
204+
okprof = "openkal-tools@0.5.0"
205+
okrun = "openkal-tools@0.5.0"
205206

206207
[platform.build]
207-
cxxflags = ["-fPIC", "-femulated-tls", "-fvisibility=hidden", "-fasynchronous-unwind-tables"]
208+
cxxflags = ["-fPIC", "-femulated-tls", "-fvisibility=hidden", "-fasynchronous-unwind-tables", "-Xclang", "-fstack-clash-protection", "-ffunction-sections", "-fdata-sections", "-fno-omit-frame-pointer", "-mno-omit-leaf-frame-pointer", "-fstack-protector-strong", "-mstack-protector-guard=global", "-ftrivial-auto-var-init=zero", "-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST"]
208209

209210
[platform.build.'cfg(arch = "aarch64")']
210-
cxxflags = ["-ffixed-x18", "-mno-outline-atomics"]
211+
cxxflags = ["-ffixed-x18", "-mno-outline-atomics", "-mbranch-protection=pac-ret+bti"]
211212

212213
[platform.link]
213214
driver = "lld"
214215
start = "ok_main"
215-
flags = ["-shared", "-z", "max-page-size=65536", "-z", "now", "--gc-sections", "--icf=safe", "--eh-frame-hdr"]
216+
flags = ["-shared", "-z", "max-page-size=65536", "-z", "pack-relative-relocs", "-z", "now", "-z", "noexecstack", "--hash-style=both", "--gc-sections", "--icf=safe", "--eh-frame-hdr", "--build-id=sha1", "--emit-relocs", "-mllvm", "-emulated-tls"]
216217
inputs = [{ from = ["okld", "note-source"], as = "ok-notes.S" }]
217218
exe = "{name}.oke"
218219
shared = "lib{name}.okso"
219-
seal = [["okld", "note", "{}"], ["okld", "check", "{}", "--with", "{needed}"]]
220+
seal = [["okld", "note", "{}"], ["okld", "place", "{}"], ["okld", "check", "{}", "--with", "{needed}"]]
220221
```
221222

222223
- **Programs are named, not located.** `okld` in `inputs` and `seal` is found among

‎docs/50-machine-output.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ installation, which is located on the machine rather than installed by mcpp. A
527527
target row is `{target, note, toolchain, pin, status, default}`, and `status` is
528528
one of `installed` / `available` / `via dependency graph` / `planned`.
529529
A target row also carries `platform` (2026.10.27.1+): the platform package the
530-
target table selects for it (`mcpplibs.openkal-platform@0.23.3`), or `null`.
530+
target table selects for it (`mcpplibs.openkal-platform@0.24.0`), or `null`.
531531

532532
**`toolchain` and `pin` are not the same field twice.** `toolchain` is what
533533
the row is associated with — the installed payload on an installed row, the

‎docs/specs/concurrency.md‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,5 +127,4 @@ CI。在 2026.10.24.1 上,同一配置的两次冷构建相隔 0.1–0.5 s 启
127127
| 版本 | 日期 | 变更 |
128128
|---|---|---|
129129
| 1.0 | 2026-10-26 | 首版:三段、构建目录锁、原子发布、`mcpp.lock` 的乐观写入、取消(#839) |
130-
131130
| 1.1 | 2026-11-06 | 分离编译的单元观察、共享名额、绝对输出事务与有限恢复边界;对齐取消请求的 OS 接收方式。 |

‎docs/specs/packaging.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ openkal 目标上 `static` 为一个 `.oke`、无 `.okso`,`shared` 为 `.oke`
237237
"schema": 1,
238238
"name": "hello",
239239
"version": "0.1.0",
240-
"platform": "openkal-platform@0.23.3",
240+
"platform": "openkal-platform@0.24.0",
241241
"linkage": "declared",
242242
"mode": "vendored",
243243
"legs": ["x86_64-openkal", "aarch64-openkal"],

0 commit comments

Comments
 (0)