Repository navigation
Description
Three config keys are set in deploy/aks/values.aks.yaml and rendered by nothing
Found while fixing the same defect for Modules__Root (#1924). Filing rather than patching, because templating each of these changes live AKS behaviour, and two are recent, deliberate work by their authors.
The mechanism
deploy/helm/templates/memex-portal/memex-portal/config.yaml names every ConfigMap key explicitly, there is no catch-all range over config.memex_portal, and the Deployment's only env path is envFrom on that ConfigMap plus the Secret. A values key the template omits reaches no container, with no error anywhere. helm is happy: the values file is syntactically perfect and the template simply never mentions it.
The three
| key | set at | intended effect | templates that emit it |
|---|---|---|---|
SelfUpdate__MinRollInterval: "01:00:00" |
values.aks.yaml:288 |
the restart-budget floor from #1780 — so hourly publication does not mean hourly pod restarts | 0 (no SelfUpdate__ key is templated at all) |
WebhookInbox__Targets__0: "Hosting/PlatformBuilds" |
values.aks.yaml:88 |
allowlists the platform-build webhook target (also set in Memex#52) | 0 |
AzureFoundry__Models__3: "Kimi-K2.6" |
values.aks.yaml:305 |
a fourth Foundry model | 0 — while Models__0/1/2 are templated at config.yaml:228-230 |
AzureFoundry__Models__3 is the clearest tell: its three siblings are templated and it is not, so this reads as an addition that missed the template rather than a deliberate omission.
SelfUpdate__MinRollInterval is the one worth reading twice. AGENTS.md documents it as the fix for restart churn — "#1780 closed that with SelfUpdate__MinRollInterval, a restart budget set to 1h in values.aks.yaml beside the 24h/6h/1h trade" — and warns that its predecessor key SelfUpdate__PollInterval "sat in the chart inert, reading as a live daily throttle, until #1778." That is this defect, one key earlier, already fixed once.
How to confirm
grep -rn "SelfUpdate__MinRollInterval\|WebhookInbox__Targets__0\|AzureFoundry__Models__3" deploy/helm/templates/
# → no matches
kubectl -n <ns> get configmap memex-portal-config -o json | jq '.data | keys[]' | grep -E "SelfUpdate|WebhookInbox|Models__3"
# → nothing, on any AKS namespaceWhy it is not in #1924
Each would take effect on merge-and-deploy: the self-update restart floor would start applying, and webhook routing would change. Those are decisions for whoever set them, not a drive-by in a chart fix.
Suggested fix
Template all three (each one line, same shape as their neighbours), then widen the existing guard so this class cannot recur. The guard already exists and already has the right shape — PlatformBakeLaneGuard asserts that a values key is BOUND in the ConfigMap, with a comment explaining that a looser "the key appears somewhere" check would be satisfied by the Helm comment prose. It is simply scoped to keys starting with PreWarm__:
.Where(l => !l.StartsWith('#') && l.StartsWith("PreWarm__", StringComparison.Ordinal))Widening it to every config.memex_portal key catches exactly these three and nothing else. Two notes for whoever does it:
- Parse the YAML, do not scan lines. A line scan sweeps in the
secrets:section, whose keys are legitimately bound insecrets.yamlunder.Values.secrets.memex_portal.*— 19 false positives. - Accept the intermediate-variable pattern.
Portal__BaseUrlis emitted via{{- $portalBaseUrl := … }}so it can fall back to the ingress host. Requiring the literal<key>: "{{ .Values.config.memex_portal.<key>binding flags it wrongly; requiring emitted as a ConfigMap key and.Values.config.memex_portal.<key>referenced somewhere in the template handles both shapes.
With those two adjustments the widened guard reports exactly the three above.
Activity
sierragolflima commentedon Aug 20, 2026
Evidence that
AzureFoundry__Models__3is not merely decorative — it shaped production data onceFound while investigating #1880, which reads the affected provider node directly.
Provider/AzureFoundryonmemex.meshweaver.cloudwas seeded 2026-08-04 (v1,system-security, never edited) with four models:That fourth entry can only have come from configuration. The seeder takes configured models when present and otherwise falls back to the source's bootstrap defaults — and the
AzureFoundrycatalog source declares no defaults:MeshWeaver.Plugins/src/MeshWeaver.AI.AzureFoundry/AzureFoundryProvidersAttribute.csSo on 2026-08-04 the container's
AzureFoundry:Modelsheld all four ids,Kimi-K2.6among them. Today it cannot: the template rendersAzureFoundry__Models__0/1/2and stops.What I could not determine
How it arrived. Three things I checked, none of which explains it:
git log -S "AzureFoundry__Models__3" -- deploy/helm/templates/memex-portal/config.yaml→ no commits; the string has never been in that file.rangeover models in the template — every index is written out by hand.6d7750ce9 deploy: mirror Kimi-K2.6 into the AzureFoundry model list(2026-07-19), two weeks before the seed.So the key demonstrably reached a container by some path and does not now. Recording it as unexplained rather than guessing.
Why it strengthens this issue
The natural objection to the
Models__3line here is "an unused fourth model is cosmetic". It is not: the same key visibly determined what the picker offered on the production portal. Whatever mechanism delivered it has since stopped, silently — which is precisely this issue's shape, and an argument for the guard rather than a per-key fix.One thing this does not change: the recommended fix is unchanged, and the two adjustments in the issue body (parse the YAML, accept the intermediate-variable pattern) still apply.
Merge pull request #1999 from Systemorph/fix/1925-untemplated-aks-keys
fix: match the chart's nil-safe config access too