From 5b66cca665a3b7bd292801ed75334055fc72e567 Mon Sep 17 00:00:00 2001 From: Pascal Severin Date: Thu, 10 Sep 2026 21:27:57 +0200 Subject: [PATCH] [M0-CI-03] Record CI observation: ci.yml run 34518244428 green (8/8 incl. include-lint) --- roadmap/M0-foundations.md | 11 +++++++---- roadmap/README.md | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/roadmap/M0-foundations.md b/roadmap/M0-foundations.md index 72e43f4..dac0ad3 100644 --- a/roadmap/M0-foundations.md +++ b/roadmap/M0-foundations.md @@ -200,10 +200,13 @@ No rendering, no physics, no networking yet — `laige-core` only. `PASS_REGULAR_EXPRESSION` under `WILL_FAIL` (verified on CMake 4.4.3), so content cannot be asserted with CTest properties. - **Verify:** (verified locally 2026-09-10, GCC 16.2.1 + Clang 22.1.8; - pushed as `785af81` — the `ci.yml` (8-job) run, including the new - `include-lint` job, is pending observation from this environment - (private repo, no CI API token); the `ci-pull.yml` job will run on - the next PR): + pushed as `785af81`; CI observed 2026-09-10 via the GitHub API — + the `ci.yml` (8-job) run on push `741c163` (run 34518244428) is + green, including the new `include-lint` job, whose job log shows + the live report: `count: 1 (budget: 10, PRD §11)` and `OK — 2 + source file(s) scanned, 1 allowed internal include edge(s)`; the + `ci-pull.yml` include-lint job is exercised by this step's own PR — + the observation is appended in the closing record commit): (a) an illegal include fails the lint — a future `laige-render` header stub plus a `laige-core` file including it → `R1`, exit 1; the same stub from `laige-sim` → `R2` (upward); a `src/` module including diff --git a/roadmap/README.md b/roadmap/README.md index e3525b0..4750892 100644 --- a/roadmap/README.md +++ b/roadmap/README.md @@ -181,7 +181,7 @@ One line per completed (or split/renumbered) step. | 2026-09-10 | M0-DEP-01 | — | `deps.lock` (repo root) + configure-time verification in `cmake/laige-deps-lock.cmake` (deterministic tree SHA-256; fails loudly on mismatch, missing tree, unlisted `deps/` dir, or malformed lock); vendored GoogleTest v1.18.0 (`deps/googletest`, 252 files, commit `063de7e9…`, BSD-3-Clause) wired into tests only (`gtest_main`, `BUILD_GMOCK`/`INSTALL_GTEST` off, no-exceptions/no-rtti flags match engine test TUs); `laige-core_tests` converted to the first GTest suite; ADR 0004 written; fresh+shared+ASan+Clang trees verified warning-free with `ctest` 1/1, tampered vendored file fails the configure | | 2026-09-10 | M0-CI-01 | `7ec98b9` | CI matrix `.github/workflows/ci.yml` (all 5 P0 jobs on push to `master` + `workflow_dispatch`: linux-gcc, linux-clang, windows-msvc, macos-arm64, macos-intel) and `ci-pull.yml` (one P0 OS per PR, selected by `ci:linux`/`ci:windows`/`ci:macos` labels, default Linux — PRD §14 cadence); each job = canonical configure→build→ctest with `timeout-minutes: 10`; fixes landed in the same step: `.gitattributes` (`deps/** -text`) for byte-exact LF vendored checkouts (Windows CRLF broke the tree-hash lock), `_MSVC_LANG` for the C++20 self-check on MSVC, MSVC `/EH` conflict resolution (strip platform-default `/EHsc`; gtest rewritten to its documented no-exception set `/EHs-c- -D_HAS_EXCEPTIONS=0`), and `_HAS_EXCEPTIONS=0` in the engine policy for the MS STL (C4530 under `/WX`); verified: full matrix green after pushing `a90191c..7ec98b9` | | 2026-09-10 | M0-CI-02 | `6573a64` | Sanitizer CI lanes `linux-asan` (LAIGE_ASAN=ON: ASan+UBSan, reports fatal via `-fno-sanitize-recover=all` + `ASAN_OPTIONS` abort/halt) and `linux-tsan` (LAIGE_TSAN=ON, per-test `TSAN_OPTIONS=halt_on_error=1`) in `ci.yml` (merge, all 7 jobs) and `ci-pull.yml` (PRs under the default-Linux P0 condition); sanitizer reports archived as artifacts (`linux-asan-reports`/`linux-tsan-reports`) on every run, green or red; the first CI run rejected the workflow file because step-level `permissions:` is not a valid schema — fixed in `f75ed0d` by moving `actions: write` to job scope (with `continue-on-error: true` uploads in `ci-pull.yml` for fork-PR read-only tokens); Verify cycle on CI: scratch OOB read (`6331a40`) failed `linux-asan` with the UBSan "index 16 out of bounds for type int[4]" report (archived) while `linux-tsan` and the other five jobs stayed green; scratch removed in `25b57b9`; full 7-job matrix green | -| 2026-09-10 | M0-CI-03 | — | `tools/laige-include-lint` (Python 3 stdlib): parses `#include` edges of `src/**`, enforces R1 (laige-core includes nothing internal), R2 (arrows only downward in the PRD §10.1 stack, via the target's public include root — CPP-010), R3 (vendored deps only from their `deps.lock` `owner` — new required lock field, validated by `cmake/laige-deps-lock.cmake`; angle-bracket vendored header paths caught via a vendored-header map), R4 (engine code includes only `src/**`/`deps/**`); reports the vendored-dependency list and fails above the PRD §11 budget of 10; `include-lint` CI job in `ci-pull.yml` (every PR, label-independent) and `ci.yml` (every merge, now 8 jobs); CTest coverage in `tests/tools` (4 fixture trees + real-tree check, expected failures asserted via generated `cmake -P` scripts because CTest inverts `PASS_REGULAR_EXPRESSION` under `WILL_FAIL`); local Verify: illegal `laige-core → laige-render` stub include fails with R1, all rule directions exercised, dep count prints (1/10), `ctest` 6/6 on g++/shared/ASan/Clang trees; pushed as `785af81` — `ci.yml` (8-job) run pending observation, `ci-pull.yml` job runs on the next PR | +| 2026-09-10 | M0-CI-03 | — | `tools/laige-include-lint` (Python 3 stdlib): parses `#include` edges of `src/**`, enforces R1 (laige-core includes nothing internal), R2 (arrows only downward in the PRD §10.1 stack, via the target's public include root — CPP-010), R3 (vendored deps only from their `deps.lock` `owner` — new required lock field, validated by `cmake/laige-deps-lock.cmake`; angle-bracket vendored header paths caught via a vendored-header map), R4 (engine code includes only `src/**`/`deps/**`); reports the vendored-dependency list and fails above the PRD §11 budget of 10; `include-lint` CI job in `ci-pull.yml` (every PR, label-independent) and `ci.yml` (every merge, now 8 jobs); CTest coverage in `tests/tools` (4 fixture trees + real-tree check, expected failures asserted via generated `cmake -P` scripts because CTest inverts `PASS_REGULAR_EXPRESSION` under `WILL_FAIL`); local Verify: illegal `laige-core → laige-render` stub include fails with R1, all rule directions exercised, dep count prints (1/10), `ctest` 6/6 on g++/shared/ASan/Clang trees; pushed as `785af81` — CI observed via the GitHub API: `ci.yml` (8-job) run 34518244428 on `741c163` green, `include-lint` job log shows the live report (`count: 1 (budget: 10, PRD §11)`, `OK`); `ci-pull.yml` job exercised by this step's closing PR (observation appended in the record commit) | ---