Skip to content

交接:生态第 4 部分(openkal 0.23 一轮)剩余任务与依赖链 #885

Open

Description

@Sunrisepeak

本 issue 交接生态设计第 4 部分(openkal 0.23 一轮)的剩余工作。设计与实现记录见:

  • .agents/docs/2026-10-29-ecosystem-target-sets-packaging-and-editors-design.md(第 1 部分)
  • .agents/docs/2026-10-30-ecosystem-part2-ide-and-language-service-design.md(第 2 部分)
  • .agents/docs/2026-11-02-ecosystem-part3-ok-image-performance-parity-design.md(第 3 部分)
  • .agents/docs/2026-11-03-ecosystem-part4-beyond-native-design.md(第 4 部分;§18 为实现记录,§18.7 为交付表)

1. 现状

1.1 已发布(GitHub release 与 GitCode mcpp-res 镜像的 sha256 一致,均已入 mcpp-index)

包 版本 要点
openkal 0.23.0 规范 0.23:放置、封存、私有与预取映射、衰减授予与隔离、故障报告、采样与触页、资源偏好
openkal-linux / -windows / -emscripten 0.24.0 / 0.19.0 / 0.12.0 0.23 的实现
openkal-macos 0.21.1、0.21.2、0.21.3 睡眠不再自旋(ulock_wait EFAULT);粒度取 mach_timebase_info;初始化前从加载器记录作答(hosted 程序得到被授予的目录)
openkal-musl 0.27.0、0.27.1 列表缓存、描述符表、okm_preopen_attenuate、Windows 卷名折叠;0.27.1 跟随 macOS 0.21.3(mcpp-index#686 已合入)
openkal-llvm-runtime 0.18.0、0.18.1 0.18.1:outline atomics 在分支保护下可汇编
openkal-ld / run / tools / bind 0.4.0、0.4.1、0.4.2 0.4.2 在 macOS 0.21.3 上构建运行器(mcpp-index#685 已合入)
openkal-platform 0.23.0 标签位于 PR 头 b2c5a18(自举顺序,见 §3);被 0.23.1 取代

1.2 未完成的分支与 PR(本地提交均已推送)

仓库 分支 / PR 头提交 内容 状态
mcpplibs/openkal-llvm-runtime 分支 0.18.2(未开 PR) 3da3f6b1 0.18.2:固定 openkal-musl 0.27.1 待开 PR;musl 0.27.1 已在索引中
mcpplibs/openkal-platform #15(openkal-0.23) 8b16538 0.23.1:macos 0.21.3、musl 0.27.1、llvm-runtime 0.18.2、image 0.4.2 CI 需 llvm-runtime 0.18.2、os 0.2.8 入索引
mcpplibs/os #15(openkal-0.23) e7c038b 0.2.8:固定 openkal-macos 0.21.3、openkal-platform 0.23.1 CI 需 platform 0.23.1 入索引
mcpp-community/mcpp #884(release/2026.11.2.3) 20da2d05 2026.11.2.3:std 模块带平台编译选项、mcpp cache gc 回收运行器缓存、okb 压缩、内置平台 0.23.1、launcher 用 os 0.2.8 e2e 955/964/994/995 与 mingw 需 platform 0.23.1、os 0.2.8 入索引后重跑
Sunrisepeak/mcppls-clangd #16(mcppls-clangd-0.0.20) 5335ef5 openkal 0002(锁文件)、0003(B:缺失名字记录)、触页 note、平台 0.23.1 需 mcpp 2026.11.2.3 发布
Sunrisepeak/mcpp-language-server #75(mcppls-0.0.20) c3afdc1 mcppls.resources、mcppls.grants、mcppls.engine.confine、故障报告、平台 0.23.1 工作区 mcpp.lock 含本地 os 路径,未提交;os 0.2.8 入索引后重新生成
mcpp-community/mcpp-ide #3(release/0.2.0,草稿) 6da6654 平台 0.23.1、os 0.2.8、mcpp ≥ 2026.11.2.3 需 mcpp 2026.11.2.3 发布

临时设置:mcpplibs/openkal-platform 与 mcpplibs/os 的仓库变量 MCPP_SOURCE_REF=release/2026.11.2.3,使其 CI 用候选 mcpp。mcpp 发布后删除。

2. 任务依赖链

graph TD
  A[mcpp-index#686 musl 0.27.1 ✅] --> B[T1 llvm-runtime 0.18.2: PR、CI、发布、索引]
  B --> C[T2 platform 0.23.1: 在 PR#15 头打标签并发布、镜像、索引]
  C --> D[T3 os 0.2.8: PR#15 CI、发布、索引]
  C --> I[T8 openkal-image release-binaries 0.4.2 / 0.23.1]
  D --> E[T4 platform PR#15 重跑 CI、合入、强推 openkal-0.23]
  D --> F[T5 mcpp #884 重跑 CI、自审、合入、发布]
  E --> F
  F --> G1[T6a 删除 MCPP_SOURCE_REF、重跑两仓库 main CI]
  F --> G2[T6b mcpp-index 跟进: MCPP_VERSION 与 platform 测试成员]
  F --> H1[T7a mcppls-clangd #16: CI、发布 0.0.20]
  H1 --> H2[T7b mcppls #75: 引擎候选、lock、CI、发布 0.0.20]
  F --> H3[T7c mcpp-ide #3: CI、发布 0.2.0]
  I --> J[T9 xim-pkgindex: okrun/okld 0.4.2、okprof]
  H2 --> K[T10 收尾: 实测数字、openkal 多角度审查、生态全局审查、xlings 洁净室验证、清理]
  H3 --> K
  J --> K
  G1 --> K
  G2 --> K
Loading

T1 openkal-llvm-runtime 0.18.2

分支 0.18.2 已推送。开 PR(标题 0.18.2 --- over openkal-musl 0.27.1),CI 通过后合入、发布、GitCode 镜像、索引 PR(pkgs/o/openkal-llvm-runtime.lua,测试成员 tests/examples/openkal 中的 openkal-llvm-runtime 移到 0.18.2,CHANGELOG ### Added 一条),之后把 main 强推到 refs/heads/openkal-0.23。

T2 openkal-platform 0.23.1(自举)

mcpp 以自身内置的平台版本构建 openkal 目标集的 Windows launcher,平台 CI 的 pack 步骤因此只能在平台与 os 都入索引后通过。顺序:在 PR #15 头(8b16538)打 0.23.1 标签并发布,GitCode 镜像,索引 PR 以 admin 合入(候选检查被 mcpp >= 2026.11.2.3 门槛拒绝,属预期)。PR 描述把 0.23.0 标为被取代、补 0.23.1 一组。

T3 os 0.2.8

平台 0.23.1 入索引(并过 CDN 延迟约 5 分钟)后重跑 PR #15 CI。重点核对 hosted macOS 的 process_test:被授予只读目录的子进程不能在其中创建文件(0.21.3 修正的缺陷)。通过后发布 0.2.8、镜像、索引。

T4 platform PR #15 合入

os 0.2.8 入索引后重跑 CI;全部通过后合入(标签仍在 PR 头,内容与合入提交相同),main 强推到 openkal-0.23。

T5 mcpp 2026.11.2.3(#884)

平台与 os 入索引后重跑失败的 e2e 与 mingw。之后全量自审(diff、文件清单、作者),squash 合入,取消 main CI,触发 release.yml,gtc 补 GitCode 资源,xim-pkgindex 的 bump PR(机器人 PR 不触发 CI:重开或空提交;合入后删除机器人分支),确认 CDN,重跑 main CI。

T6 mcpp 发布之后

  • a. 删除两个仓库变量 MCPP_SOURCE_REF,重跑 openkal-platform 与 os 的 main CI。
  • b. mcpp-index:.github/workflows/xpkgindex-update.yml、openkal-compat.yml、tests/openkal/pins.toml 的 MCPP_VERSION 改为 2026.11.2.3;openkal-platform 测试成员改为 0.23.1。

T7 消费者

T8–T9 运行器二进制

openkal-image 的 release-binaries 以 -f tag=0.4.2 -f platform=0.23.1 触发;压缩包镜像到 GitCode xlings-res/okrun、okld、okprof;xim-pkgindex 增加 okrun/okld 0.4.2 条目与新的 okprof.lua(以 okld.lua 为模板)。

T10 收尾

  • 第 4 部分设计文档写入最终实测数字。
  • openkal 多角度审查(规范一致性、拒绝路径、安全、并发、跨平台)。已查:Linux 的 Landlock 隔离失败即启动失败,不降级;macOS 沙箱规则中取不到路径的授予被略去(偏严)。待评估一项:macOS 规则缓冲区为 16 KiB,16 个长路径授予可能超出,此时启动以 kal_err_invalid 被拒绝,错误码不贴切。Windows 按设计 §18.3 不声明 KAL_PROCESS_PROP_CONFINE。
  • 生态全局审查;xlings 洁净室真实验证(中立 cwd、XDG_* 指向洁净室、不用 shim);清理本轮的临时文件。

3. 约定与已知事实

  • 提交与合入:作者 Sunrisepeak,带 Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>;gh pr merge --admin --squash --subject "<标题> (#N)";openkal 家族合入后把 main 强推到 openkal-<v>。
  • 精确固定的级联:实现 → musl → llvm-runtime;image(ld/run/tools/bind 同版本);platform 的 [platform.versions];os;mcpp 的内置平台版本。
  • 索引:Publish Index Artifact 之后约 5 分钟 CDN 延迟,期间依赖新条目的 CI 失败,重跑即可。macOS 作业若未分配到运行机,正好 15 分钟失败,重跑。
  • 授予至多 16 个;mcppls 把只读授予合并到公共祖先目录。
  • clang 23 的 -mbranch-protection=standard 含 GCS,ok 映像用 pac-ret+bti。
  • 平台 [platform.build] 的 cxxflags 必须进入 std 模块(clang 在 BMI 中记录 -fcf-protection),故平台 0.23 要求 mcpp ≥ 2026.11.2.3。

Activity

  1. Sunrisepeak commented on Nov 5, 2026

    @Sunrisepeak
    MemberAuthor

    实施计划补充(2026-11-05):按真实依赖并行推进,分别完成核心、插件和编辑器交付。

    本计划承接 #885 原任务及异构构建补充方案。核心继续负责通用图、作用域、目标契约、身份和调度;计算模型、设备值域、SDK 流程及 CMake 表示归插件;系统资源监督归 openkal;后端定位与界面生命周期归编辑器适配器。每个仓库尽量复用一个 PR,文档与最终实现同步。

    一、当前基线与交付出口

    工作线 核对后的状态 下一交付出口
    核心基础 #888 已合入;2026.11.5.1 四平台资产、GitCode 镜像、公开索引及 GLOBAL/CN 普通安装已验证 已发布版本继续作为 bootstrap,不重复等待
    核心 #889 候选 2026.11.5.2,e530c80b;CI 42039719740 已结束:72 成功、2 失败、1 跳过 关闭两个失败,最终 CI 后独立生态审查,再发布
    插件 #52 新修正已本地提交 79f7ba6,尚未推送;52 项逻辑测试、实际 GCC/Clang/COFF 控制、公开 11.5.1 上十步生成器/系统切换回归通过 先推送并运行独立 CI;公开 11.5.2 后完成最终集成
    mcpp-ide #4 9f8b486 的 CI 42021317951 25 项成功;两个稳定 CLion 实际检查分别为 32、31 项 补齐剩余功能矩阵,发布新补丁版本
    引擎 #16 a139538 的正式资格仍失败:Linux x64 冷 CPU 为 15.22/12.71=1.197,要求 ≤1.15;四宿主共 32 个语义会话通过 根因闭环、必要修正、正式资格及发布
    mcppls #75 b70ddaee 的 CI 42021324231 为 37 成功、1 失败、15 跳过;当前服务端在两个稳定 CLion 上各通过 30 项实际检查 合格引擎字节进入最终载荷后,完成下游检查和发布

    二、实施依赖

    flowchart TD
      C[核心 BMI 与安装超时归因] --> CQ[核心最终 CI 和生态审查]
      CQ --> CR[发布 2026.11.5.2 并验证公开安装]
      P[插件局部修正和独立 CI] --> PF[插件最终集成与发布]
      CR --> PF
      I[IDE 剩余功能和平台验证] --> IR[IDE 补丁发布]
      E[冻结产物性能归因] --> O[整合必要修正与一致版本组]
      O --> EQ[引擎正式资格与发布]
      EQ --> S[mcppls 最终载荷和联合验收]
      S --> SR[mcppls 发布]
      CR --> F[原885全局审查与洁净室收尾]
      PF --> F
      IR --> F
      SR --> F
    
    Loading

    插件的局部验证不等待核心发布;只有外部子工程独立可执行链接的最终集成需要 11.5.2。IDE 当前验证固定公开 mcppls 0.0.19,不依赖引擎 0.0.20。服务器的原生构建、请求生命周期及当前服务端编辑器回归继续并行,最终载荷发布仍依赖合格引擎。

    三、立即并行的四组工作

    P0:核心正确性与发布收尾,复用 #889。

    • 优先复现 E2E 234 失败。固定 GCC 16.1.0 和三单元工程,对照普通与 BMI 拆分调度,记录首次构建、触碰接口后的增量构建、BMI 发布及编译结束时序。检验“允许下游开始后,已发布 BMI 持续可读”这一不变量。当前尚未确定该失败由哪项改动引入。
    • 独立调查 图形示例安装失败。失败发生于 compat.vulkan-runtime 依赖安装,像素断言尚未执行。使用相同 provider 版本、原截止时间和隔离目录采集逐文件字节、来源尝试号、开始及完成事件,重放 watchdog 判断,区分实际停滞与状态计算错误。
    • 对确认的源码缺陷建立旧实现失败、新实现通过的控制,保留原 E2E 断言。优先复用已有对象做局部诊断;最终仍使用正式候选完成完整 CI。外部瞬态失败须有证据后才定向重试,不重复整个未修改流程寻求偶然通过。
    • 最终提交 CI 全通过后,再从插件新旧接口、宿主/目标图、默认与显式平台、增量、交叉构建、打包和下游消费者视角进行独立生态 review。
    • 无问题后合入;取消对应 main push CI;优先 release CI;GitHub 资产产生后立即本地 gtc 补 GitCode;实际 GET/hash 校验、索引发布、GLOBAL/CN 普通安装全部完成后重新触发 main CI。

    退出条件: 2026.11.5.2 可从公开渠道普通安装,最终源码/资产身份一致,发布后的验证记录完整。

    P1:插件局部修正先提交,最终集成随后完成,复用 #52。

    • 推送 79f7ba6,以已公开 2026.11.5.1 运行适用 CI。当前范围包括参数保真、CMake compiler-ID 的实际目标、生成器/系统缓存隔离、切换后返回及无变化不重编。
    • 保留准确边界:GNU response 路径遇到字面空 argv 明确拒绝;空字符串选项值正常支持。Clang/COFF 控制不代表原生 MSVC、Visual Studio、Xcode 或自定义链接驱动全部获验。
    • 核心 11.5.2 公开后,在同一 PR 更新正式 CI pin,并加入真实子工程“安装静态库,同时构建独立可执行程序”的集成回归。验证子工程与最终消费者均能运行,消费者自己的链接输入仍保留。
    • 完成最终 CI、review、发布和实际消费验证;同步使用文档、最低功能版本及已验证场景。

    退出条件: 最终提交通过适用矩阵,并使用公开核心完成真实消费者验证。多架构 SDK archive、GPU 执行及新增厂商支持继续单列,不能据此宣称全部 HPC 场景完成,也不将其自动设为本轮已确认修复的前置。

    P2:IDE 独立完成功能验收和补丁发布,复用 #4。

    • 保留已通过的真实构建、运行、测试失败/恢复、原生断点、变量变化、单步、继续、停止及补全检查;两个稳定 CLion 使用同一个候选 ZIP。
    • 优先补齐设置的非法值/范围/持久化,真实 JCEF 图渲染/导航/空与错误状态,以及 runner 调试。设置数值处理目前的源码线索须先以实际 UI 负向控制确认。
    • 按有限矩阵补齐构建取消和诊断定位、运行参数/工作目录/停止、测试过滤、库依赖操作、缓存预览/取消/隔离应用、会话重启与错误恢复,以及剩余编辑器交互。注册了命令不等于执行过功能。
    • 分别记录 IDE 版本与宿主系统:稳定 2026.1/2026.2 的 Linux 证据不能替代原生 Windows/macOS GUI;原生 Windows 的实际 2026.1.1 场景单独复验。
    • 修正、版本号、文档和适用范围在同一 PR 对齐,最终 CI 和审查后发布新补丁版本;保留已经发布的 0.2.0 资产。

    退出条件: 既定功能矩阵各项有实际操作、可见结果及适用的负向/恢复证据;目标宿主和版本的缺口明确关闭或如实列为发布限制。静态 Verifier 与运行时测试分别记录。

    P3:先完成性能因果实验,再整合版本链,复用引擎 #16。

    • 固定原生引擎、image、runner、资源目录、编译数据库、工作负载和参数的身份。重复测量前先检查实际 AST 输入、完整标准库索引、进程角色及资源预算。
    • 在原始冻结负载的就绪点与退出点补齐主进程、已回收子进程及仍存活 worker 的 CPU 分账,避免重复计数;确认 176 个 worker 的约 1.359 秒差额分别落在哪里,再选择单变量干预。
    • 每个实验预先记录假设、对照、有效性断言、样本数和停止条件,保留全部失败。微基准仅验证已经定位的组件,不用短任务收益替代正式负载。诊断阶段复用冻结引擎,避免每次猜测重建 LLVM。
    • 小型 worker 的旧六对实验因资源输入失配继续标为无效;新一对预检已验证实际资源和标准库一致,仅恢复可比性,不计为性能改善。初始化前的默认资源探测告警保留,依据显式覆盖后的实际输入判断。
    • 原始冷/热 CPU、就绪、缺页、路径及语义门槛保持不变。采用修正后一次整合确有需要的后端/musl/runtime/platform/image 版本组,再完成正式生产者资格。

    退出条件: 根因和采用修正具有可复现证据,最终精确产物通过原正式门槛;其后才发布引擎、更新资格台账。当前 1.197 的失败仍然有效。

    四、依赖满足后的服务器与全局收尾

    • musl 0.27.7 已发布、入索引,合入后的十项 CI 已通过;补齐普通消费者验证。已准备的 runtime 0.18.8/platform 0.23.8 按最终证据确定采用内容,完成一致版本组及运行器预编译交付,不再把“等待 musl 发布”记作当前阻塞。
    • 引擎合格并发布后,独立核对资产身份,在 chore: fail-fast CI hangs + refresh README header #75 统一更新最终载荷 lock、编译常量和候选配置,按流程移除 engine-candidate.json;使用最终字节运行完整服务器、编辑器、联合 UX 和洁净室检查,再发布。当前服务端的独立 CLion 回归继续保留。
    • 完成原 T10:最终实测数字、openkal 规范与拒绝路径、并发/资源监督、macOS 长路径规则容量和跨平台边界、生态集成及中立环境公开安装。局部模型测试与原生系统验证分别记录。
    • 将实现和版本边界同步到相关中英文文档;仅清理相关项目的过期构建缓存,保留最近有效构建、SDK、冻结实验输入及已验证证据。公开记录不包含用户日志、账号、私人目录或项目名称。

    进度记录方式: 每次更新分别列出“实现提交 / 局部验证 / 最终 CI / 公开发布”,并附精确提交、run、失败归因和下一验收条件。近期优先形成插件独立 CI、核心两个失败的因果结论,以及 IDE 功能矩阵的实际关闭项;引擎性能保持独立调查。以上全部出口完成前,#885 保持打开。


    2026-11-06 更新:性能后续调查单独跟踪,本轮优先闭环发布。

    用户已批准本次发布例外。该决定替代上文 P3 中“必须先完成全部性能根因闭环、达到原 1.15 门槛才能发布”的前置要求;此前实验、失败和未完成项保留,不追溯改写为通过。

    详细数据与后续优化统一记录在 mcppls #77:覆盖 server/engine OKE、OKB、四种原生/image 组合、四宿主冷/热数据、计量修复、已验证原因、无收益候选及其边界。新的可选性能实验不再阻塞本轮发布。

    本次例外仅适用于 mcppls-clangd 0.0.20 的 Linux x64 冷启动就绪 CPU,且两个条件同时成立:image/native ≤1.25,额外 ≤3.0 CPU 秒。继续使用原 304 单元、三探针、一冷三热负载与修复后的测量版本 3。报告分别保留原目标结果和本次发布准入结果,记录 Issue、版本、源码与实际产物 SHA256;不得整体提高通用 --limit。下一引擎版本自动恢复 1.15。

    冷/热就绪时间、热 CPU、其他受约束宿主的 CPU、完整生命周期缺页、所有语义和资源/取消/崩溃检查、最终服务端与编辑器 UX 均不放宽。任一上限越界或测量无效仍拒绝发布。Windows 的冷启动时间代价单独披露;CLion SDK 运行时问题不属于该 CPU 例外。

    推进顺序调整为:已验证修正的一致公开版本组 → 一次最终 engine 生产构建及全部资格 → mcppls 候选载荷联合检查 → engine 发布并核验实际下载字节 → mcppls 更新锁定并以发布字节验收 → 生态发布、镜像、索引和普通安装。核心、插件、IDE 的独立任务继续并行,不等待额外性能研究。

    当前新增落地:计量修复和范围受限的例外已本地实现,23 项计量/判定测试与 6 项既有 release gate 控制通过;engine 和 server 的 changelog、发布文档已补充并完成成文复核。最终生产者 CI 和发布字节资格仍待完成,不能据此称整个发行已通过。性能 Issue 在使用例外发布后仍保持打开。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions