Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
254 changes: 87 additions & 167 deletions .agent/HANDOFF.md

Large diffs are not rendered by default.

14 changes: 8 additions & 6 deletions .github/workflows/ci-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,15 @@ jobs:
xlings install -y
mcpp --version

- name: Build library
run: mcpp build

- name: Run tests
run: mcpp test
- name: Qualify library
run: |
mcpp build --profile dev --strict --cache=off
mcpp test --profile dev --strict --cache=off
mcpp build --profile release --strict --cache=off
mcpp test --profile release --strict --cache=off

- name: Run example
- name: Qualify example
run: |
cd examples/basic
mcpp run
mcpp build --profile release --strict --cache=off
14 changes: 8 additions & 6 deletions .github/workflows/ci-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,15 @@ jobs:
xlings install -y
mcpp --version

- name: Build library
run: mcpp build

- name: Run tests
run: mcpp test
- name: Qualify library
run: |
mcpp build --profile dev --strict --cache=off
mcpp test --profile dev --strict --cache=off
mcpp build --profile release --strict --cache=off
mcpp test --profile release --strict --cache=off

- name: Run example
- name: Qualify example
run: |
cd examples/basic
mcpp run
mcpp build --profile release --strict --cache=off
28 changes: 23 additions & 5 deletions .github/workflows/ci-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,34 @@ jobs:
xlings install -y
mcpp --version

- name: Build library
- name: Validate strict-mode degradation
shell: bash
run: mcpp build
run: |
# mcpp 2026.8.28.1 的 Windows LLVM 后端暂不生成 depfile;只放行这一条已知降级。
trap 'rm -f strict-mode.log' EXIT
set +e
mcpp build --profile dev --strict --cache=off --no-color > strict-mode.log 2>&1
strict_status=$?
set -e
cat strict-mode.log
if [ "$strict_status" -ne 0 ]; then
test "$strict_status" -eq 1
test "$(grep -Fc 'warning: this toolchain and platform combination emits no GNU depfile' strict-mode.log)" -eq 1
test "$(grep -Fc 'error: 1 degradation(s) reported and --strict is set' strict-mode.log)" -eq 1
test "$(grep -Ec '^(warning|error):' strict-mode.log)" -eq 2
fi

- name: Run tests
- name: Qualify library
shell: bash
run: mcpp test
run: |
mcpp build --profile dev --cache=off
mcpp test --profile dev --cache=off
mcpp build --profile release --cache=off
mcpp test --profile release --cache=off

- name: Run example
- name: Qualify example
shell: bash
run: |
cd examples/basic
mcpp run
mcpp build --profile release --cache=off
14 changes: 11 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -414,17 +414,25 @@ after CMP has a stable runtime API worth demonstrating.

## Development

The local verification path is:
On Linux and macOS, the local verification path is:

```bash
mcpp build --profile dev --strict --cache=off
mcpp test --profile dev --strict --cache=off
mcpp build --profile release --strict --cache=off
mcpp test --profile release --strict --cache=off
cd examples/basic && mcpp run
cd examples/basic
mcpp run
mcpp build --profile release --strict --cache=off
```

CI runs the equivalent build, test, and standalone example flow on Linux, macOS, and Windows.
On Windows, use the workflow's strict probe and remove `--strict` from the actual cache-off gates,
as described below.

CI runs cache-off Dev/Release library gates, the standalone example, and its Release build on all
three platforms. Linux and macOS remain strict. With mcpp `2026.8.28.1`, Windows first uses a
strict probe that allows only the known LLVM depfile degradation, then performs the cache-off gates
without `--strict`; full rebuilds prevent that incremental limitation from reusing stale objects.
The mcpp version is pinned by `.xlings.json`; contributors should not rely on an unrelated
global mcpp installation.

Expand Down
14 changes: 10 additions & 4 deletions README.zh.hant.md
Original file line number Diff line number Diff line change
Expand Up @@ -392,18 +392,24 @@ RunLoop 不是背景執行緒,也不會把阻塞程式碼自動變成非同步

## 開發與驗證

本機驗證路徑
Linux 和 macOS 的本機驗證路徑

```bash
mcpp build --profile dev --strict --cache=off
mcpp test --profile dev --strict --cache=off
mcpp build --profile release --strict --cache=off
mcpp test --profile release --strict --cache=off
cd examples/basic && mcpp run
cd examples/basic
mcpp run
mcpp build --profile release --strict --cache=off
```

CI 在 Linux、macOS 和 Windows 上執行等價的建構、測試與獨立範例流程。mcpp 版本由
`.xlings.json` 固定,不應依賴無關的全域 mcpp 安裝。
Windows 應先使用 workflow 中的嚴格探針,並在實際無快取門禁中移除 `--strict`,原因見下文。

CI 在三個平台都執行無快取 Dev/Release 函式庫門禁、獨立範例及其 Release 建構;Linux 和
macOS 保持嚴格模式。mcpp `2026.8.28.1` 在 Windows 上先執行嚴格探針,只放行已知的 LLVM
depfile 降級,再移除 `--strict` 執行無快取門禁;完整重建使這項增量限制無法沿用舊目的檔。
mcpp 版本由 `.xlings.json` 固定,不應依賴無關的全域安裝。

CMP 目前不追蹤 `mcpp.lock`,`.gitignore` 明確執行這項儲存庫約定。執行期相依放在
`[dependencies]`,gtest 明確宣告在 `[dev-dependencies.compat]` 中。
Expand Down
14 changes: 10 additions & 4 deletions README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -392,18 +392,24 @@ RunLoop 不是后台线程,也不会把阻塞代码自动变成异步代码。

## 开发与验证

本地验证路径
Linux 和 macOS 的本地验证路径

```bash
mcpp build --profile dev --strict --cache=off
mcpp test --profile dev --strict --cache=off
mcpp build --profile release --strict --cache=off
mcpp test --profile release --strict --cache=off
cd examples/basic && mcpp run
cd examples/basic
mcpp run
mcpp build --profile release --strict --cache=off
```

CI 在 Linux、macOS 和 Windows 上执行等价的构建、测试和独立示例流程。mcpp 版本由
`.xlings.json` 固定,不应依赖无关的全局 mcpp 安装。
Windows 应先使用 workflow 中的严格探针,并在实际无缓存门禁中去掉 `--strict`,原因见下文。

CI 在三个平台都执行无缓存 Dev/Release 库门禁、独立示例及其 Release 构建;Linux 和 macOS
保持严格模式。mcpp `2026.8.28.1` 在 Windows 上先运行严格探针,只放行已知的 LLVM depfile
降级,再去掉 `--strict` 执行无缓存门禁;完整重建使这一增量限制无法复用旧目标文件。mcpp
版本由 `.xlings.json` 固定,不应依赖无关的全局安装。

CMP 当前不跟踪 `mcpp.lock`,`.gitignore` 明确执行这一仓库约定。运行时依赖放在
`[dependencies]`,gtest 明确声明在 `[dev-dependencies.compat]` 中。
Expand Down
16 changes: 10 additions & 6 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -497,7 +497,7 @@ Further partitions or implementation units are added only when another implement

## Verification

Run from the repository root:
Run from the repository root on Linux or macOS:

```text
mcpp build --profile dev --strict --cache=off
Expand All @@ -506,10 +506,12 @@ mcpp build --profile release --strict --cache=off
mcpp test --profile release --strict --cache=off
cd examples/basic
mcpp run
mcpp build --profile release --strict --cache=off
```

The expected result is a successful library build, 161 passing tests across ten binaries, and an
example that prints `Coroutine result: 42`, `Concurrent result: 42`, `Worker pool result: 42`,
The expected result is successful Dev/Release library and example builds, 161 passing tests across
ten binaries, and an example that prints `Coroutine result: 42`, `Concurrent result: 42`,
`Worker pool result: 42`,
`Blocking result: 42`, `Task group result: 42`, `Recursive group result: 3`, `Event signalled`,
`Reusable event cycles: 2`, `Mutex result: 42`, then
`Coroutine cancelled` and exits with status 0. Tests retain the existing high-volume stack checks
Expand All @@ -522,6 +524,8 @@ temporary-file, and loopback-network counts and
throughput are recorded in the
[v1 readiness benchmark](benchmarks/2026-08-29-cmp-v1-readiness.md). ThreadPool counts, concurrency,
and five-round Release measurements are recorded in the
[ThreadPool benchmark](benchmarks/2026-08-29-cmp-thread-pool.md). The current Windows LLVM toolchain
does not emit GNU depfiles. If a file included by a module interface changes, an incremental build
can reuse an older BMI or object; `--cache=off` is used for a full local verification.
[ThreadPool benchmark](benchmarks/2026-08-29-cmp-thread-pool.md). On Windows, use the workflow's
strict probe and remove `--strict` from the actual cache-off gates. The current Windows LLVM toolchain
does not emit GNU depfiles. Its CI strict probe allows exactly that known degradation and rejects
any other warning or error; the actual Windows gates use `--cache=off` without `--strict`, so a full
rebuild cannot reuse an older BMI or object.
13 changes: 8 additions & 5 deletions docs/architecture.zh.hant.md
Original file line number Diff line number Diff line change
Expand Up @@ -466,7 +466,7 @@ OneShotEvent、AsyncManualResetEvent 與 AsyncMutex 已形成真實的公開邊

## 驗證

在儲存庫根目錄執行
在 Linux 或 macOS 的儲存庫根目錄執行

```text
mcpp build --profile dev --strict --cache=off
Expand All @@ -475,9 +475,11 @@ mcpp build --profile release --strict --cache=off
mcpp test --profile release --strict --cache=off
cd examples/basic
mcpp run
mcpp build --profile release --strict --cache=off
```

預期結果是函式庫建置成功、十個二進位檔中的 161 項測試全部通過,而且範例依序輸出
預期結果是函式庫和範例的 Dev/Release 建置成功、十個二進位檔中的 161 項測試全部通過,
而且範例依序輸出
`Coroutine result: 42`、`Concurrent result: 42`、`Worker pool result: 42`、
`Blocking result: 42`、`Task group result: 42`、`Recursive group result: 3`、`Event signalled`、
`Reusable event cycles: 2`、
Expand All @@ -488,6 +490,7 @@ mcpp run
500 次 stop/accept 競態門檻;重點競態套件已連續執行多輪 Release 測試。計算、臨時檔案和回環
網路的成功/失敗計數及吞吐記錄在
[v1 可開發性壓測](benchmarks/2026-08-29-cmp-v1-readiness.md)。ThreadPool 的計數、並行和五輪
Release 資料記錄在[執行緒池壓測](benchmarks/2026-08-29-cmp-thread-pool.md)。目前 Windows LLVM 工具鏈
不會產生 GNU depfile;如果模組介面包含的檔案發生變更,增量建置可能沿用舊的 BMI 或
目的檔。完整複驗時使用 `--cache=off`。
Release 資料記錄在[執行緒池壓測](benchmarks/2026-08-29-cmp-thread-pool.md)。Windows 應使用
workflow 中的嚴格探針,並在實際無快取門禁中移除 `--strict`。目前 Windows LLVM 工具鏈
不會產生 GNU depfile;其 CI 嚴格探針只放行這一項已知降級,並拒絕其他 warning 或 error。
實際 Windows 門禁使用 `--cache=off`,完整重建不會沿用舊的 BMI 或目的檔。
13 changes: 8 additions & 5 deletions docs/architecture.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ OneShotEvent、AsyncManualResetEvent 与 AsyncMutex 已经形成真实的公共

## 验证

在仓库根目录执行
在 Linux 或 macOS 的仓库根目录执行

```text
mcpp build --profile dev --strict --cache=off
Expand All @@ -472,9 +472,11 @@ mcpp build --profile release --strict --cache=off
mcpp test --profile release --strict --cache=off
cd examples/basic
mcpp run
mcpp build --profile release --strict --cache=off
```

预期结果是库构建成功、十个二进制中的 161 项测试全部通过,并且示例依次输出
预期结果是库和示例的 Dev/Release 构建成功、十个二进制中的 161 项测试全部通过,并且
示例依次输出
`Coroutine result: 42`、`Concurrent result: 42`、`Worker pool result: 42`、
`Blocking result: 42`、`Task group result: 42`、`Recursive group result: 3`、`Event signalled`、
`Reusable event cycles: 2`、
Expand All @@ -485,6 +487,7 @@ mcpp run
stop/accept 竞态门禁;重点竞态套件已连续执行多轮 Release 测试。
计算、临时文件和回环网络的成功/失败计数及吞吐记录在
[v1 可开发性压测](benchmarks/2026-08-29-cmp-v1-readiness.md)。ThreadPool 的计数、并发和五轮
Release 数据记录在[线程池压测](benchmarks/2026-08-29-cmp-thread-pool.md)。当前 Windows LLVM 工具链不会
生成 GNU depfile;如果模块接口包含的文件发生变化,增量构建可能复用旧的 BMI 或目标文件。
完整复验时使用 `--cache=off`。
Release 数据记录在[线程池压测](benchmarks/2026-08-29-cmp-thread-pool.md)。Windows 应使用
workflow 中的严格探针,并在实际无缓存门禁中去掉 `--strict`。当前 Windows LLVM 工具链
不会生成 GNU depfile;其 CI 严格探针只放行这一条已知降级,并拒绝其他 warning 或 error。
实际 Windows 门禁使用 `--cache=off`,完整重建不会复用旧的 BMI 或目标文件。
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

**Date:** 2026-08-30
**Design:** `docs/superpowers/specs/2026-08-30-cmp-phase7-v1-release-qualification-design.md`
**Status:** Pending Phase 6C merge and authorized branch transition
**Status:** PR #12 open; three-platform qualification passed, merge and publication pending
**Target package:** `mcpplibs.cmp` `0.1.0`

## Execution Rule
Expand Down Expand Up @@ -44,9 +44,15 @@ Correct only factual mismatches.
Edit only `.github/workflows/ci-linux.yml`, `ci-macos.yml`, and `ci-windows.yml` unless a proven
platform defect requires a targeted source/test fix.

Replace the default-profile build/test steps with strict cache-off Dev and Release commands. Keep
the existing pinned bootstrap and platform runner choices. Run the example once and add its strict
cache-off Release build.
Replace the default-profile build/test steps with strict cache-off Dev and Release commands on
Linux and macOS. Keep the existing pinned bootstrap and platform runner choices. Run the example
once and add its cache-off Release build.

On Windows, mcpp `2026.8.28.1` with LLVM reports the known missing-depfile degradation before tests
and `--strict` makes it fatal. Run one strict cache-off Dev probe and accept failure only when its
warning/error set exactly matches that single degradation. Then run the same cache-off Dev/Release
builds, all tests, example, and Release consumer build without `--strict`. Do not suppress output or
allow any other diagnostic. If a future mcpp fixes the degradation, the strict probe passes directly.

Do not add a new workflow, matrix abstraction, benchmark job, cache service, sanitizer job, or
floating dependency.
Expand All @@ -56,7 +62,7 @@ review indentation and let GitHub Actions be the authoritative workflow parser.

## 4. Run local release qualification

From the repository root:
From the Linux qualification host's repository root:

```text
mcpp build --profile dev --strict --cache=off
Expand Down Expand Up @@ -127,7 +133,7 @@ Review every changed line for:
- Windows shell/path assumptions;
- claims ahead of evidence;
- generated or local files entering release inputs;
- weakened test, strictness, or cache behavior;
- weakened tests, an unbounded strict-mode exception, or cache behavior;
- remote steps that blur authorization boundaries.

Run whitespace/encoding checks without changing unrelated CRLF files. Update `.agent/HANDOFF.md`
Expand Down Expand Up @@ -172,4 +178,38 @@ a new independently reviewed Design.

## Completion Record

Pending. Fill this section only with commands and remote checks actually completed.
Local implementation record, 2026-08-30:

- entry gate satisfied: Phase 6C PR #11 passed Linux, macOS, and Windows, merged with
authorization, and local `main` was synchronized to `02cb6b9` before creating
`release/phase7-v1-release-qualification`;
- release-surface audit found no public Asio leak, version drift, missing export, or unsupported
capability claim;
- the Linux and macOS workflows run strict cache-off Dev/Release root gates, the example, and its
Release build; Windows runs an exact allowlisted strict probe followed by matching cache-off
profiles without `--strict`; all three files parse as YAML;
- local Dev and Release root suites each passed 10 binaries and 161/161 tests; the example run and
Release build passed;
- five readiness rounds preserved compute `49,000/1,000/0`, file I/O `1,000/100/0`, and network
`20,000/100/0` success/expected-failure/unexpected-failure counts in every round;
- the committed Phase 6C package preflight produced a provisional 206,341-byte archive with
SHA-256 `fe36976fe76225f6121cce81ca22a1b2392a833795795fb9a00ed52d98dba4de`;
- its normalized Form A descriptor parsed, and the extracted archive passed strict cache-off Dev
and Release root builds and 161 tests, the example run, and its Release build;
- final local self-review confirmed that only the three existing workflows and release-state
documentation changed; YAML structure, command parity, CRLF, and `git diff --check` passed.

Project PR #12 was created with authorization. Its first Windows run proved that a universal
`--strict` gate stops on mcpp's documented missing-depfile degradation before CMP tests execute;
that failed run is not release evidence. The extracted replacement probe passes syntax checking,
runs successfully when strict mode succeeds, accepts a synthetic exact known degradation, and
rejects a synthetic additional warning.

Correction commit `b2c0911` then passed PR #12 on all three platforms: Linux x86_64 in 2m53s,
macOS arm64 in 3m08s, and Windows x86_64 in 5m22s. Log-level verification found two suites per
platform, each with 10 binaries and 161/161 tests, plus the expected ten-line example and Release
consumer build. Windows also completed the exact strict probe before its cache-off gates.

PR #12 merge, the clean merged archive, tag, GitHub Release, mcpp-index PR, index CI/merge, and the
isolated indexed consumer check remain pending. Each remote mutation retains the authorization
boundary defined by the Design.
Loading
Loading