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

Abierto
#59 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
15/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
cpp, docker, github-actions, linux

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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
Lenguaje dominante
C++
Estrellas
25
Forks
2
Merge medio
21 h 5 min
PR fusionados (30 d)
13

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Sunrisepeak/mcpp-language-server

Todos los issues de Sunrisepeak/mcpp-language-server

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.