Issue 072: the controller's manifest exists twice; decisions index regenerated for ADR 0086
This commit is contained in:
@@ -153,6 +153,7 @@ python3 00-META/checks/index.py fail if stale
|
|||||||
- **0069** — [A module is a repository and a path within it](0069-a-module-is-a-repository-and-a-path.md)
|
- **0069** — [A module is a repository and a path within it](0069-a-module-is-a-repository-and-a-path.md)
|
||||||
- **0076** — [The SDK is a published package, and the toolchain resolves it by version](0076-the-sdk-is-a-published-package.md)
|
- **0076** — [The SDK is a published package, and the toolchain resolves it by version](0076-the-sdk-is-a-published-package.md)
|
||||||
- **0082** — [The registry is reached by name, and the overlay is its security](0082-the-registry-is-reached-by-name-and-trusted-by-the-overlay.md)
|
- **0082** — [The registry is reached by name, and the overlay is its security](0082-the-registry-is-reached-by-name-and-trusted-by-the-overlay.md)
|
||||||
|
- **0086** — [A secret reaches a process as a file, and an exception is declared](0086-a-secret-reaches-a-process-as-a-file.md)
|
||||||
|
|
||||||
### How it is checked
|
### How it is checked
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
status: located
|
||||||
|
opened: 2026-09-21
|
||||||
|
located-in: [mesh-controller module.json, mesh-catalog modules/mesh-controller/module.json, mesh-host internal/bootstrap]
|
||||||
|
fixed-by:
|
||||||
|
amended-design:
|
||||||
|
---
|
||||||
|
|
||||||
|
# The controller's manifest exists twice, and nothing keeps the copies equal
|
||||||
|
|
||||||
|
## Symptom, as observed
|
||||||
|
|
||||||
|
The control plane's manifest lives at the root of its own repository, where the mesh reads it
|
||||||
|
whenever it builds the controller from source, and again in the catalogue under
|
||||||
|
`modules/mesh-controller`, where the installer reads it at genesis. The two differ only in how the
|
||||||
|
image is named — a build section in one, a placeholder digest in the other — and are otherwise
|
||||||
|
meant to be the same document.
|
||||||
|
|
||||||
|
Changing the catalogue copy alone (to make the controller read its credentials from files,
|
||||||
|
[ADR 0086](../../02-DECISIONS/0086-a-secret-reaches-a-process-as-a-file.md)) produced a mesh that
|
||||||
|
installed correctly and then could not be pushed to: the first rebuild of the controller from
|
||||||
|
source replaced the mesh's record with the repository's copy, which still carried the old shape,
|
||||||
|
and every later push of the node was refused on the controller's behalf. `status` reported the
|
||||||
|
machine as doing what it was told throughout, because nothing had been sent.
|
||||||
|
|
||||||
|
## Why it matters beyond this instance
|
||||||
|
|
||||||
|
- **One module, two sources of truth.** [ADR 0069](../../02-DECISIONS/0069-a-module-is-a-repository-and-a-path.md)
|
||||||
|
says a module is a repository and a path; the controller has two paths, and which one the mesh
|
||||||
|
believes depends on which command last touched it.
|
||||||
|
- **The failure is silent at the wrong layer.** The divergence surfaces as a resolution refusal
|
||||||
|
on an unrelated push, not as a warning that the copies differ.
|
||||||
|
- **It will happen again** to whoever next edits the controller's manifest for any reason.
|
||||||
|
|
||||||
|
## What would close it
|
||||||
|
|
||||||
|
Either the catalogue copy goes and genesis reads the controller's manifest from the controller's
|
||||||
|
repository (the installer already has the checkout, since it builds from it), or a check refuses
|
||||||
|
two copies that differ outside the image lines. The first is the honest one.
|
||||||
Reference in New Issue
Block a user