Files
hq/04-ISSUES/252-a-merges-changed-modules-were-read-wrong/00-report.md
T
jochen 0fdcb15200 Issues 224, 248-252, 254, 255 resolved, 256 opened and resolved, 253 where it stands
Each resolved with the pull request that fixed it and what was seen live;
253 waits for real collection, the operator's word to give.
2026-10-05 18:36:19 +02:00

1.9 KiB

status, opened, located-in, fixed-by, amended-design
status opened located-in fixed-by amended-design
resolved 2026-10-05
mesh-catalog modules/gitea
mesh-controller cmd/mesh-controller
mesh-catalog PR 03-DESIGN/01-to-be/30-the-mesh-updates-itself-on-a-push.md

252 — A merge's changed modules were read wrong, in both directions

What was observed

Each of three merges to the catalogue within four minutes planned 99 to 100 modules, and rebuilt modules they did not touch. The outputs were identical, so nothing was redeployed. The rebuilds cost the build machine minutes for every merge.

Diagnosis

Too many. The controller treats a changed path outside every module directory it knows as shared code, and rebuilds every module built from the repository. A new module's directory, or one being removed, counts: the module is registered only after the merge is planned. Each of the three merges added or removed a module. The build agent, built from the same repository, then joins the set and becomes tier 0.

Too few. The forge's module asked for a hundred changed files and was given fifty, the forge's page size, and reported the list as whole. A merge of 59 files reached the controller with 50. Had the full rebuild not hidden it, a module whose own files changed would have stayed unbuilt.

Fix

  • The forge's module reads every page of a pull request's files.
  • The controller counts a changed path in a sibling of known module directories as that module's own, not shared, when that module's definition is among the changed paths. A sibling without a definition, such as a shared library, still means everything, which is the safe direction. Root files still mean everything.

Resolved — 2026-10-05

The forge's module reads every page of a pull request's files. The controller counts a new module's own directory as that module's when its definition is among the changed paths. Live: catalogue merges planned one module each.