COMPONENT_LIST is not a complete manifest of what the customer runs
COMPONENT_LIST in projects/<partner>/release/<N>/release.json is the set of components THIS release builds and publishes — not an inventory of the partner’s deployment. Measured across all 18 partners’ latest releases on 2026-09-04 while cutting cib@1.
Correction
An earlier analysis concluded that
release.jsonis always “a complete manifest of what the customer runs”. That is not a reliable rule. A component directory existing underprojects/<partner>/components/does not mean the component is inCOMPONENT_LIST, andCOMPONENT_LISTdoes not enumerate the partner’s running stack.
For Agents
Two facts that pull in opposite directions, and you need both:
COMPONENT_LISTis a build set — partners routinely omit components they demonstrably run.release-tool genbuilds the customer’s docker-compose FROMCOMPONENT_LIST— so omitting a component the customer runs produces a compose file with no such service.Consequence: an omission is not “harmless scoping”, it is a silent delivery gap. See The failure mode this creates.
Evidence (measured 2026-09-04)
-
janushas a component dir in 12 partners but is inCOMPONENT_LISTfor only 3 —barion,cofidis,kh. Partners with the dir that omit it includenusz,raiffeisen,magnet,szerencsejatek,fundamenta,microsec,mkb-instant,dap. -
mkb-instanthasrabbitmqandturncomponent dirs and ships neither. -
Four manifests contain no
vuer_oss/vuer_cssat all — they are single-component bundles. Nobody runs a FaceKom install that is one report engine, so these alone disprove the universal-manifest reading:File COMPONENT_LISTprojects/demo-facekom/release/6/release.json['report-engine']projects/demo-project/release/1/release.json['resource-manager']projects/demo-project/release/2/release.json['resource-manager']projects/demo-project/release/3/release.json['resource-manager'] -
12 of the 18 partners’ latest cuts ship exactly
vuer_oss+vuer_css. -
Every partner that ships
portal_cssdoes so at a static version across releases — e.g.unicredit-srb@1–@5all carryportal_css 2.2.0.9. The portal is rebuilt only when it changes, and simply repeats otherwise.
Component NAME entry counts across every manifest in the repo
Counted with Python over the parsed JSON (not a shell pipe — rtk zeroes | wc -l, which produced a wrong intermediate figure on the first attempt). Verified 2026-09-04.
| count | |
|---|---|
projects/*/release/*/release.json files total | 91 |
…of which use a COMPONENT_LIST | 90 |
…excluding the two new cib cuts (cib@1, cib@2) | 88 |
Component entry counts over those 88 files:
| NAME | entries |
|---|---|
vuer_oss | 84 |
vuer_css | 84 |
portal_css | 8 |
janus | 5 |
resource-manager | 3 |
report-engine | 1 |
These are ENTRY counts, not file counts
84is the number ofvuer_ossentries, i.e. 84 of the 88 manifests carry it. The missing 4 are precisely the single-component bundles listed above — no contradiction. Including the two cib cuts the totals read86 / 86 / 9, a clean+1/+1/+1, which is what confirms the count is self-consistent.The long tail is the finding:
portal_css,janus,resource-managerandreport-enginetogether account for 17 entries across 88 manifests.
Not every release.json even HAS a COMPONENT_LIST
projects/equilor/release/1/release.jsonuses an older, entirely different schemaIt has no
COMPONENT_LISTkey at all. Its top-level keys are lowercase:default_args · docker_registry · git_remote · project · project_args · services · timestampThis is a legacy manifest format still present in the repo.
equilorhas exactly one release, which is why it is easy to miss.Any script that iterates all
release.jsonfiles must handle it — readingrelease_json["COMPONENT_LIST"]unguarded raisesKeyErroron this one file. (Hit for real on 2026-09-04.) Relevant to the tooling in release-pipeline-automation-spec.
The failure mode this creates
Because gen derives the shipped compose from COMPONENT_LIST, a component the partner runs but that is missing from the list is never built, never published, and absent from the delivered compose — with no error anywhere in the pipeline.
This is exactly the Raiffeisen janus story: janus is absent from COMPONENT_LIST in all ten Raiffeisen release manifests, so no janus image has ever been built or shipped to Raiffeisen — they remain on 0.13.4 while the build definition claims otherwise. The JANUS_VERSION_COMMIT field that looks like a janus pin is an attribute on the vuer_oss component (what it is built against), not a janus image. Full detail: janus-memory-leak-rca.
Practical rule when cutting a release
- Do not infer the shipped set from
projects/<partner>/components/— it over-counts. - Do not infer the partner’s running stack from
COMPONENT_LIST— it under-counts. - Decide the list explicitly, against the release issue’s Komponensek field and against what the partner is known to run.
- If a component the partner runs is omitted deliberately (because it did not change), be aware the generated compose will not contain it.
Worked decision — CIB
cib@1 shipped vuer_oss + vuer_css only. Decision taken 2026-09-04: cib@2 adds portal_css at 1.4.0.74.
The decision rests on CIB’s own production compose, not on precedent from other partners. vuer_build/partner/cib/docker-compose.yml — the file CIB PROD actually pulls from — contains exactly three image: lines: vuer_css, vuer_oss, portal_css, all under harbor.techteamer.com/${PROJECT_NAME}/…. So:
portal_cssis REQUIRED in the bundle. PROD pulls it;cib@1without it leaves CIB unable to deploy a complete stack.janusis CORRECTLY excluded. There is no janusimage:line in CIB’s compose — it rides asJANUS_VERSION_COMMITon thevuer_ossentry, exactly the attribute-not-component distinction described above.portal_cssinterpolates its own${PORTAL_VERSION}.${PORTAL_BUILD_NUMBER}vars, separate from${VUER_VERSION}.${VUER_BUILD_NUMBER}— consistent with it running its own version train (cib-1.4.0.*).
The descriptor is prepared but not committed or tagged — held behind the Harbor blocker. See vuer-release cut — cib@1 (2026-09-04).
Generalisable check
When deciding a partner’s
COMPONENT_LIST, read the partner’s deployed compose (vuer_build/partner/<client>/docker-compose.ymlfor legacy-origin partners) and count theimage:lines. That answers “what does the customer actually pull?” directly, which is the questionCOMPONENT_LISTdoes not answer on its own.
Related
- vuer-release-build-flow — how
release createwritesCOMPONENT_LISTandgenonly reads it. - vuer-release-cut-recipe — the cut procedure.
- vuer-release-cli-pinning — the other
release.jsoncorrection from the same session. - cib-1.9.11.102 · SLARAFIPI-83 · janus-memory-leak-rca · Releases index · FaceKom