Repository navigation
MQB 5.6.0
Source / 发布提交: 3ea932d3f5a322aed500439bb3f688c6e52c1111
The scope and limitations below come from the reviewed candidate assessment; they do not claim that historical failures or their causes have been resolved.
以下能力与限制来自已审阅的候选评估,不表示历史失败或其根因已经解决。
English
Changes since v5.5.0
- Build and foreground execution are separated. Ordinary and module builds return owned launch data; a separate foreground runner executes it after build-side objects leave scope. Build failure does not launch the program. Existing arguments, working directory, standard streams, sanitizer runtime policy and child exit-code propagation remain. Environment bootstrap now redirects its own input from
nul, preserving piped input for the foreground program. Scope exit is not proof that external writers have stopped. See BuildCompletion and VisualStudioEnvironment. - Identical include-root spellings avoid redundant conversion. #194 uses exact native-path equality before the existing identity fallback. Different spellings still use that fallback. Order, duplicates, cache validation and late freshness checks are retained. This structural optimization is not a promise that every workload is faster.
- Internal lifecycle groundwork is additive and opt-in. Process cancellation, scheduler admission/batches, physical write-domain admission and read-only known-write inventories support further engineering. They do not enable CLI cancellation, reusable project transactions, automatic recovery or residency. See process lifetime and write-domain admission. M1b and later v6.0 work remain unfinished.
- Evidence recording and research scope are corrected. #193 replaces repeated whole-history writes with an append journal and compatible final JSON. #195 separates unallocated compiler-PDB research from ordinary changes. #188 preserves exact sources, actual measured programs and first failures. These are validation improvements, not additional public CLI features.
Compatibility, installation and migration
Existing CLI commands and mqb.json files do not require a new migration for this candidate. The CLI parser, configuration schema and compile/link/archive cache-file implementations are byte-identical to the compared v5.5.0 source. This is a scoped source comparison, not a guarantee for arbitrary external scripts or damaged caches. Existing ordered options, typed MSVC admission, output repair and late freshness checks still apply; no cache purge is required merely to adopt this candidate.
--run remains a foreground operation with the existing argument/stream/exit-code contract, outside any future build cancellation policy. plan and compdb do not adopt the new write-domain reservation API. Default parallelism is not replaced by a forced -j 1. C++23 and Windows/MSVC remain the product scope; no new platform or toolset certification is implied.
The public compiler-option boundary is unchanged: MQB uses /Z7, rejects /Zi and /ZI, reserves /Fd, and removes ambient CL / _CL_ from compiler invocations. Final linker PDBs and external objects, libraries, PCH/IFC inputs are not all covered by that boundary. Do not read it as a universal PDB-safety claim or silently change a research fixture's flags. Details and the retained failures are in PROCESS_LIFETIME.md.
Internal C++ callers must review the changed process, scheduler and admission contracts; unchanged CLI syntax is not a binary-ABI compatibility promise. In particular, the opt-in managed process policy is inappropriate for foreground applications intended to leave descendants alive. A write-domain marker is not permission to reclaim abandoned state.
Developer scripts using Recorder must use its context manager or finalize on normal and exceptional exits. Read calls.jsonl during execution; calls.json is generated at controlled completion. A valid prefix after forced termination is not a complete experiment, and journaling is not a power-loss durability guarantee. See DEVELOPMENT_EN.md.
The stable package contract remains flat and runtime-only: mqb.exe, VERSION, install.bat, install.ps1, uninstall.bat, uninstall.ps1, LICENSE, with a ZIP checksum sidecar. Installation scripts are unchanged. Do not substitute a CI package labelled 5.5.0 for the official v5.5.0 release or advertise it as v5.6.0. Documentation and these limitations stay in the repository/Release description, not in the runtime ZIP. See installation and self-hosting.
Explicit residual-risk disposition
| Risk ID | Decision for the 5.6 candidate | Retained boundary / condition |
|---|---|---|
private129 |
Accept with limits for current candidate evaluation | Old +3.4128 ms remains a failed historical result. #193 and #194 changed recorder/product work and the separately registered current comparison passed; their individual causal contributions remain unknown. No universal warm-speedup claim. |
pr188-abba630 |
Accept historical uncertainty with limits, not a same-head gate waiver | Original +1.5423 ms / +12.8314139% still failed. Actual old A/B binaries were not retained. Current #653 is a separate accepted identity; it cannot repair the old provenance gap. |
pr192-abba641 |
Exclude the unmerged diagnostic candidate | #192 stays Draft/HOLD; original +1.11945 ms / +10.7228911% and missing identities remain. Do not include that branch, promise CPU/wait attribution, or silently cherry-pick it into this release. |
msvc-c1041 |
Exclude unsupported capability; research stays HOLD | Default Endpoint #35/#37 failures remain real, including three #37 A/work0 failures with /FS /Zi /Fd. No supported CLI shared-compiler-PDB cancellation, safe lease handoff or recovery claim. External input and low-level API risks remain scoped, not disproved. |
cold-tails |
Accept explicitly disclosed latency variability, without a latency guarantee | Retain historical +5.354 s / +6.480 s, later cold/rebuild tails, and this batch's +1207.2288 ms / +1036.5186 ms. No current aggregate flag or product-correctness failure was established by these samples; that does not prove environmental causation or absence of a product regression. No speculative rollback is justified from the samples alone. |
earlier-abba-flags |
Accept unresolved historical performance uncertainty with limits | #170, #180/#599, #186/#625 and #627 remain in the retained history. New results neither overwrite them nor establish an all-workload improvement. Their original failures must remain visible in release review. |
The limits are substantive: no general latency/throughput guarantee, no statement that the historical root causes are fixed, no default cancellation/write lock/residency, and no promotion of old diagnostic branches. Users requiring predictable cold-build latency should retain their validated version and qualify this candidate on representative projects before adoption. Risk acceptance must be carried into the final Release description; silently dropping these qualifications reopens release review.
Stop and rollback conditions
Stop publication for a new public-path correctness/freshness/diagnostic regression, an exact-version required check failure or unexpected skip, missing source/binary identity, incomplete first evidence, or a new violation of the unchanged applicable performance gate. Do not raise thresholds, drop samples, refill a spent budget, re-run until green, subtract guessed observer cost or classify an unknown failure as research solely to pass.
A product repair or rollback requires evidence identifying the affected change and a focused reviewed commit. Any such change invalidates the old product freeze and requires a new impact-specific validation plan; the already-consumed #188 budget is not reusable. Until a justified change exists, retain the accepted candidate and known risk rather than inventing a repair or silently undoing accepted correctness work.
For a deployment rollback, keep the official v5.5.0 executable/package and project configuration. Stop related builds and establish that their tools have finished before changing generated state. Use a separate project/output copy or a clean rebuild when comparing versions; do not share writable output between concurrent versions. Never delete an unresolved write-domain claim, PDB or IDB as proof of safe recovery. Downgrading an executable does not prove abandoned writers are gone. Historical tags and assets must not be overwritten.
简体中文
相对 v5.5.0 的变更
- 分离构建与前台运行。 普通和模块构建返回拥有自身数据的启动请求;构建侧对象离开作用域后,由独立前台运行器执行。构建失败不启动产物。原参数、工作目录、标准流、sanitizer 运行时策略及子程序退出码传递保留。环境初始化现在只把自己的输入重定向到
nul,为前台程序保留管道输入。作用域结束不证明外部写者停止。参见 BuildCompletion 和 VisualStudioEnvironment。 - include 根目录拼写完全相同时避免重复转换。 #194 先比较原生路径;拼写不同仍走原身份比较。顺序、重复项、缓存校验及晚期 freshness 检查保留。这项结构优化不承诺每种负载都更快。
- 内部生命周期基础能力是增量、显式选择的。 进程取消、调度准入/批次、物理写入域准入及已知写集合的只读清单用于后续工程。它们不启用 CLI 取消、可复用项目事务、自动恢复或常驻。参见 进程生命周期 和 写入域准入。M1b 与后续 v6.0 工作仍未完成。
- 修正证据记录及研究范围。 #193 将反复重写全部历史改为追加日志和兼容的最终 JSON;#195 将未获执行预算的编译器 PDB 研究与普通改动分离;#188 保留精确源码、实际被测程序和首错。这些是验证改进,不是新增公开 CLI 功能。
兼容性、安装与迁移
现有 CLI 命令和 mqb.json 不需要因本候选新增迁移。 CLI 解析器、配置 schema 和 compile/link/archive 缓存文件实现,与比较用 v5.5.0 源码逐字节一致。这是限定范围的源码核对,不保证任意外部脚本或损坏缓存都兼容。既有有序选项、强类型 MSVC 准入、缺失输出修复及晚期 freshness 继续适用;不必仅因采用本候选而清空缓存。
--run 仍是前台运行,保留参数/标准流/退出码契约,不继承未来的构建取消策略。plan 和 compdb 不接入新的写入域预留 API。默认并行度不改为强制 -j 1。C++23、Windows/MSVC 仍是产品范围,不意味着新增平台或工具链认证。
公开编译参数边界未变:MQB 使用 /Z7,拒绝 /Zi、/ZI,保留 /Fd 的所有权,并从编译调用中移除环境 CL / _CL_。最终链接 PDB、外部 object/library/PCH/IFC 输入不全部受此边界覆盖。不能把它解释为所有 PDB 都安全,或静默更改研究夹具的参数。细节与保留失败见 PROCESS_LIFETIME_ZH.md。
内部 C++ 调用者须审阅改变的进程、调度及准入契约;CLI 语法不变不代表二进制 ABI 兼容承诺。特别是,显式选择的受管进程策略不适用于有意保留后台后代的前台应用。写入域标记不授予接管遗留状态的权限。
使用 Recorder 的开发脚本须使用上下文管理器,或在正常和异常出口完成收尾。运行中读取 calls.jsonl;calls.json 在受控结束时生成。强制终止后留下的合法前缀不是完整实验,追加日志也不保证断电耐久性。参见 DEVELOPMENT.md。
正式包继续采用扁平、仅运行时的契约:mqb.exe、VERSION、install.bat、install.ps1、uninstall.bat、uninstall.ps1、LICENSE,并附 ZIP 校验文件。安装脚本未改。不得用标注 5.5.0 的 CI 包冒充官方 v5.5.0 发布包,也不得宣传为 v5.6.0。文档及这些限制保留在仓库/Release 正文,不放入运行包。参见 安装 和 自举发布契约。
剩余风险的明确处置
| 风险 ID | 对 5.6 候选的决定 | 保留边界/条件 |
|---|---|---|
private129 |
限定接受当前候选评估 | 旧 +3.4128 ms 仍是历史失败。#193、#194 改变了记录器/产品工作,单独登记的当前比较通过,但各自的因果贡献未知。不宣称所有热构建都提速。 |
pr188-abba630 |
限定接受历史不确定性,不豁免同 head 门槛 | 原 +1.5423 ms / +12.8314139% 仍未过门槛;当次 A/B 程序未保留。当前 #653 是独立已接受身份,不能弥补旧来源缺口。 |
pr192-abba641 |
排除未合并的诊断候选 | #192 继续 Draft/HOLD;原 +1.11945 ms / +10.7228911% 和缺失身份保留。不得纳入该分支、承诺 CPU/等待归因,或静默摘取进本次发布。 |
msvc-c1041 |
排除未支持能力;研究继续 HOLD | Default Endpoint #35/#37 失败仍真实存在,包括 #37 在 /FS /Zi /Fd 下的三处 A/work0 失败。不承诺公开 CLI 的共享编译器 PDB 取消、安全写入权限转交或恢复。外部输入及底层 API 风险仍有限定范围,未被证伪。 |
cold-tails |
接受明确披露的延迟波动,不保证延迟 | 保留历史 +5.354 s / +6.480 s、后续冷构建/重建尾部及本批 +1207.2288 ms / +1036.5186 ms。这些样本未形成当前总体旗标或产品正确性失败,但不证明环境归因或产品没有退化。仅凭这些样本不足以作猜测性回退。 |
earlier-abba-flags |
限定接受尚未解释的历史性能不确定性 | #170、#180/#599、#186/#625 和 #627 继续保留在原历史。新结果不覆盖旧结果,也不证明全部负载提速;发布审阅必须继续可见原失败。 |
限制具有实际含义:不作普遍延迟/吞吐保证,不宣称历史根因修复,不默认启用取消/写锁/常驻,不提升旧诊断分支的状态。需要可预测冷构建延迟的使用者,应保留已验证版本,并在代表性项目上确认本候选适用后再采用。最终 Release 正文须携带这些风险限制;静默删除限定会重新阻塞发布审阅。
停止与回退条件
遇到新的公开路径正确性/freshness/诊断退化、精确版本必需检查失败或异常跳过、缺失源码/程序身份、首批证据不完整,或新结果触发原适用性能门槛时,停止发布。不得提高阈值、删样本、补充耗尽的预算、重跑至绿、扣除猜测的观察器成本,或仅为通过验收而把未知失败归类为研究问题。
产品修复或回退必须有定位到受影响改动的证据,并通过单主题提交审阅。任何此类改动都会使旧产品冻结失效,需要新的影响范围验证计划;#188 已消耗的预算不能复用。没有合理改动依据时,保留已接受候选及已知风险,不虚构修复,也不静默撤销已接受的正确性工作。
部署回退时保留官方 v5.5.0 程序/安装包和项目配置。改变生成状态前,停止相关构建并确认其工具已经结束。比较版本时使用独立项目/输出副本或干净重建,不让不同版本并发共用可写输出。不得把删除未解决的写入域标记、PDB 或 IDB 当作安全恢复证明;降级程序不证明遗留写者停止。历史 tag 和资产不得覆盖。
What's Changed
- feat: add opt-in request-owned process cancellation for v6.0 sessions by @Iviesever in #165
- test: validate real MSVC service ownership before cancellation integration by @Iviesever in #166
- test: validate default MSVC endpoint and natural-drain cancellation boundary by @Iviesever in #167
- test: harden MSVC ownership evidence failure paths by @Iviesever in #169
- feat: add opt-in scheduler admission stop and natural drain by @Iviesever in #168
- test: retain benchmark invocation evidence and fixed AA calibration by @Iviesever in #171
- test: investigate PCH PDB failure with fixed resource-query controls by @Iviesever in #173
- test: calibrate native PDB file events after recording readiness by @Iviesever in #174
- test: correlate original MSVC invocations with calibrated PDB events by @Iviesever in #175
- test: calibrate native PDB failure and observer evidence by @Iviesever in #176
- test: validate real scheduler drain on accepted PDB evidence baseline by @Iviesever in #170
- feat: preserve typed work-batch results during admission stop by @Iviesever in #177
- feat: gate ordinary target links on typed compile admission outcomes by @Iviesever in #178
- test: verify real target admission preserves cache barriers by @Iviesever in #179
- test(perf): retain fixed-budget attribution for original foreground no-op crossing by @Iviesever in #181
- fix: preserve foreground stdin during vcvars bootstrap by @Iviesever in #182
- refactor: separate foreground artifact execution from build scope by @Iviesever in #180
- feat: add fail-closed physical write-domain admission by @Iviesever in #183
- feat: map known recipe writes with read-only physical identities by @Iviesever in #184
- perf: collect producer-owned pre-write inventory by @Iviesever in #185
- perf: validate cumulative foreground failure-repair compatibility by @Iviesever in #186
- test: validate PCH failure-repair regression on actual Debug and Release targets by @Iviesever in #187
- test: diagnose retained cumulative binaries with fixed warm resource controls by @Iviesever in #189
- test: diagnose fixed cumulative cold builds with calibrated process lifetimes by @Iviesever in #190
- test: supplement retained ProcessStop counters without new diagnostic measurements by @Iviesever in #191
- fix: integrate append-only reporting journal with preserved evidence gates by @Iviesever in #193
- ci: separate frozen compiler-PDB research from product regression gates by @Iviesever in #195
- refactor: avoid redundant identity encoding for exact include roots by @Iviesever in #194
- test: close frozen v5.6 complete-candidate assessment with retained risks by @Iviesever in #188
- docs: define v5.6 compatibility and residual-risk release boundary by @Iviesever in #196
- release: publish v5.6.0 with reviewed compatibility and retained risks by @Iviesever in #197
Full Changelog: v5.5.0...v5.6.0