From 04625d3e35515314074a1fd1e4e951e246869703 Mon Sep 17 00:00:00 2001 From: jochen Date: Sat, 3 Oct 2026 22:28:40 +0200 Subject: [PATCH] Issues 211, 214, 215, 216 diagnosed: root causes and the branches that fix them --- .../01-diagnosis.md | 11 +++++++++++ .../00-report.md | 2 +- .../01-diagnosis.md | 10 ++++++++++ .../00-report.md | 2 +- .../01-diagnosis.md | 10 ++++++++++ .../00-report.md | 2 +- .../01-diagnosis.md | 9 +++++++++ 7 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 04-ISSUES/211-a-bundle-is-built-before-the-toolchain-it-is-compiled-in/01-diagnosis.md create mode 100644 04-ISSUES/214-a-plan-loses-track-of-the-controller-it-rebuilds/01-diagnosis.md create mode 100644 04-ISSUES/215-a-module-built-at-a-commit-stops-following-its-branch/01-diagnosis.md create mode 100644 04-ISSUES/216-a-bundle-nothing-loads-is-built-and-never-delivered/01-diagnosis.md diff --git a/04-ISSUES/211-a-bundle-is-built-before-the-toolchain-it-is-compiled-in/01-diagnosis.md b/04-ISSUES/211-a-bundle-is-built-before-the-toolchain-it-is-compiled-in/01-diagnosis.md new file mode 100644 index 0000000..51ce68f --- /dev/null +++ b/04-ISSUES/211-a-bundle-is-built-before-the-toolchain-it-is-compiled-in/01-diagnosis.md @@ -0,0 +1,11 @@ +# 211 — Diagnosis + +*2026-10-03.* The planner orders a merge's modules by `inventory.Dependencies`, whose edges come from a +manifest's `build.on`, from what a build recorded it stood on, from the repositories it read, and from +the build machine. A bundle names its toolchain by `language`; the builder takes the toolchain image +(`ToolchainFor(language)`) from what the mesh holds and records nothing of it as stood on. So no edge +ran from a bundle to the module publishing its toolchain, and a merge moving both (mesh-tools: the +images and node-tools) tiered them together. **Fix (mesh-controller, branch +`fix/issue-211-a-bundle-stands-on-its-toolchain`, commit c72f6ca):** `dependenciesOf` adds a `stands-on` +edge from every bundle artifact to its toolchain's module, read from the manifest. Tested: TypeScript +bundle → mesh-tools, Go bundle → mesh-tools-go, image → none; a merge moving both plans two tiers. diff --git a/04-ISSUES/214-a-plan-loses-track-of-the-controller-it-rebuilds/00-report.md b/04-ISSUES/214-a-plan-loses-track-of-the-controller-it-rebuilds/00-report.md index 5bcfcd2..042f5e9 100644 --- a/04-ISSUES/214-a-plan-loses-track-of-the-controller-it-rebuilds/00-report.md +++ b/04-ISSUES/214-a-plan-loses-track-of-the-controller-it-rebuilds/00-report.md @@ -1,5 +1,5 @@ --- -status: open +status: located opened: 2026-10-03 located-in: - mesh-controller diff --git a/04-ISSUES/214-a-plan-loses-track-of-the-controller-it-rebuilds/01-diagnosis.md b/04-ISSUES/214-a-plan-loses-track-of-the-controller-it-rebuilds/01-diagnosis.md new file mode 100644 index 0000000..95cce0e --- /dev/null +++ b/04-ISSUES/214-a-plan-loses-track-of-the-controller-it-rebuilds/01-diagnosis.md @@ -0,0 +1,10 @@ +# 214 — Diagnosis + +*2026-10-03.* A plan learns a tier's outcome only through `planBuilt`, called when a controller takes +in a build result off the bus. A merge to the controller's repository replaces the controller in tier +0; the build that produced the new controller was recorded, but the plan state the new controller +loaded still read `asked`, and no path ever revisited it. **Fix (branch +`fix/issue-214-a-plan-settles-from-the-build-records`, commit d86baeb):** `advanceOnce` settles every +still-asked module from its build records — a build recorded after the ask is that ask's outcome, +built or failed — on every advance and on the 30-second ticker. Tested with a pure helper. Live +proof: the next merge to mesh-controller passes tier 0 on its own. diff --git a/04-ISSUES/215-a-module-built-at-a-commit-stops-following-its-branch/00-report.md b/04-ISSUES/215-a-module-built-at-a-commit-stops-following-its-branch/00-report.md index 0bfc600..3b91748 100644 --- a/04-ISSUES/215-a-module-built-at-a-commit-stops-following-its-branch/00-report.md +++ b/04-ISSUES/215-a-module-built-at-a-commit-stops-following-its-branch/00-report.md @@ -1,5 +1,5 @@ --- -status: open +status: located opened: 2026-10-03 located-in: - mesh-controller diff --git a/04-ISSUES/215-a-module-built-at-a-commit-stops-following-its-branch/01-diagnosis.md b/04-ISSUES/215-a-module-built-at-a-commit-stops-following-its-branch/01-diagnosis.md new file mode 100644 index 0000000..d83e536 --- /dev/null +++ b/04-ISSUES/215-a-module-built-at-a-commit-stops-following-its-branch/01-diagnosis.md @@ -0,0 +1,10 @@ +# 215 — Diagnosis + +*2026-10-03.* `takeIn` registers a build's `Ref` as the branch the module follows. unifi was once +built with `ref=9c97a8a`, which became its followed ref. `sourceIs` matches a merge only to modules +whose ref is empty or the merged base — so every merge into main left unifi out — and `askTier` +re-asks `Source.Ref`, so every plan that rebuilt unifi built the same old commit again (its build +records all read "at 9c97a8a"). **Fix (branch `fix/issue-215-a-commit-is-never-a-branch-to-follow`, +commit 6784efa):** registration keeps the followed branch when a build names a commit; matching and +re-asking read a recorded commit as the default branch, healing existing records; a merge names the +modules of its repository it leaves out. Store-backed test fails without the fix. diff --git a/04-ISSUES/216-a-bundle-nothing-loads-is-built-and-never-delivered/00-report.md b/04-ISSUES/216-a-bundle-nothing-loads-is-built-and-never-delivered/00-report.md index bdc2ad4..b1a31b1 100644 --- a/04-ISSUES/216-a-bundle-nothing-loads-is-built-and-never-delivered/00-report.md +++ b/04-ISSUES/216-a-bundle-nothing-loads-is-built-and-never-delivered/00-report.md @@ -1,5 +1,5 @@ --- -status: open +status: located opened: 2026-10-03 located-in: - mesh-controller diff --git a/04-ISSUES/216-a-bundle-nothing-loads-is-built-and-never-delivered/01-diagnosis.md b/04-ISSUES/216-a-bundle-nothing-loads-is-built-and-never-delivered/01-diagnosis.md new file mode 100644 index 0000000..d746296 --- /dev/null +++ b/04-ISSUES/216-a-bundle-nothing-loads-is-built-and-never-delivered/01-diagnosis.md @@ -0,0 +1,9 @@ +# 216 — Diagnosis + +*2026-10-03.* The composer delivers a bundle as an archive only when its `Loads` is non-empty, and +`Loads` derives from the artifact's `loads` or, failing that, from the module's `tools` list. The +seven modules had neither, so their bundles were recorded and never composed into any declaration; +nothing checked it. **Fix (branch `fix/issue-216-a-bundle-nothing-delivers-is-refused`, commit +cf2bb3b):** registration refuses a bundle that nothing loads, runs or unpacks — no `loads`, no `tools`, +no resource naming it, and not the runtime — naming the field that would deliver it. The current +catalogue passes the check.