nightly: four jobs red since 10-08 (two CI/tooling defects, two UX budgets), and a cached model that outlives an mcpp upgrade

Đang mở
#59 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
15/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
cpp, docker, github-actions, linux

Hướng nghiên cứu

This bundles five separate problems, so pick one item rather than the whole list. The smallest is the bind mount in nightly.yml: /mnt/scripts is not visible after proot-distro login debian, so check that job's docker run and --bind flags. The UTF-8 truncation crash is in the conformance runner's measure output, where text is clipped before dump(). Done means the nightly job runs past the --measure step and a unit test with a clipped multi-byte string passes.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

The nightly workflow has failed every night since 2026-10-08, the same four jobs each time; the run on the 0.0.16 merge commit (d3c3a94, run 38481569529) is the latest. None of it is a regression of 0.0.16 (its PR CI and the release run's pre-release tests passed). Two failures are defects in CI or the test tooling, two are UX budgets never met. One more problem found while verifying 0.0.16 is added at the end. To be handled later; this issue collects them.

1. termux + proot-distro Debian (linux-arm64): the script is not visible inside Debian

proot-distro login debian --bind /mnt/work:/work -- bash /mnt/scripts/in-debian.sh
bash: /mnt/scripts/in-debian.sh: No such file or directory      (exit 127)

nightly.yml mounts $RUNNER_TEMP at /mnt/scripts in the termux container (docker run -v "$RUNNER_TEMP:/mnt/scripts:ro"), but proot-distro login debian enters Debian's own rootfs and binds only /mnt/work. mcppls never runs in this job.

Fix: add --bind /mnt/scripts:/mnt/scripts (or write in-debian.sh under /mnt/work).

2. self-hosting (real-xlings, linux-x64): mcppls-conformance aborts writing --measure

Every check passes (real-xlings: 0 failure(s)), then the runner dies:

libc++abi: terminating due to uncaught exception of type nlohmann::json_abi_v3_12_0::detail::type_error:
[json.exception.type_error.316] incomplete UTF-8 string; last byte: 0x86
... Aborted (core dumped) stage/mcppls-conformance run ... --measure "$RUNNER_TEMP/self/real-xlings.json"

Same in the 10-11 and 10-13 nightlies. Something put into the measure JSON (most likely a detail or log tail clipped by bytes) is cut in the middle of a multi-byte UTF-8 character, and dump() throws.

Fix: clip on a UTF-8 boundary wherever the runner truncates text it stores, and/or dump with error_handler_t::replace. A unit test with a clipped multi-byte string.

3. ux (ux-xlings, round 1): U13 idle budgets

budget d3c3a94 earlier nightlies
clangd CPU while nobody asks (10 min idle) 0.01 cores 0.07 0.03 / 0.05 / 0.38
clangd memory growth 10% +18% -24% / +24% / +80%

The idle CPU left is clangd's own background work (background index, implementation units built while idle). mcppls's own idle loops fixed in 0.0.16 (the producer re-run every 2 s, the empty-result prefetch) are not what this measures. Needs a breakdown of what clangd does in those ten minutes (CLANGD_TRACE over the idle window) before deciding between work to stop and a budget to revise.

4. ux (ux-mcpp, two-core): U15 stalls, U8 rebuilds after undo

budget d3c3a94 earlier nightlies
U15-cold: longest time not ready without progress 60 s 117 s 89 / 108 / 100 s
U15-faults: same 60 s 127 s 82 / 104 / 99 s
U8-config: module files rebuilt after the mcpp.toml change is undone 0 3 4 (10-11)
  • The workflow's own comment says the two-core round "is recorded and never fails the workflow", yet the job fails: either make it continue-on-error as intended, or decide it should gate.
  • U15: on two cores, preparation shows no progress for ~2 minutes; the status should keep reporting progress (or the stall is real and is what to fix).
  • U8: undoing a mcpp.toml change should find the earlier BMIs again; 3-4 modules are rebuilt.

5. A cached mcpp model outlives an mcpp upgrade (found while verifying 0.0.16)

A workspace described with mcpp 2026.10.5.2 and then opened with mcpp 2026.10.11.1 first on PATH keeps the old model: the log says the cached mcpp model ... matches its inputs; planning with it while the producer confirms it, then loaded again: unchanged about 70 ms later (no emit could have run), and build.mcpp keeps the diagnostic build.mcpp is not read: mcpp 2026.10.5.2 describes the targets only ... with about.mcpp still 2026.10.5.2. Removing the workspace's mcppls cache directory makes it describe the project with 2026.10.11.1 at once (build.mcpp read, 0 errors).

Expected: the producer's identity (path and version) is part of what the cached model is checked against, so a different mcpp runs the producer instead of confirming the cache. A conformance fixture: describe with one mock mcpp version, switch to another, assert the model's about.mcpp and that the producer ran.

Checklist

  • 1. termux: bind /mnt/scripts into Debian
  • 2. conformance runner: UTF-8-safe truncation in the measure output
  • 3. U13: break down clangd's idle work; fix or revise the budget
  • 4. two-core round: decide gating; U15 progress during preparation; U8 BMIs after undo
  • 5. cached model checked against the producer's identity
Ngôn ngữ chính
C++
Star
25
Fork
2
Merge trung bình
21 giờ 5 phút
Pull request đã merge (30 ngày)
13

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của Sunrisepeak/mcpp-language-server

Tất cả issue của Sunrisepeak/mcpp-language-server

Issue tương tự

Thêm issue về C++

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.