Skip to content

Three AKS config keys are set in values and rendered by no template — SelfUpdate__MinRollInterval, WebhookInbox__Targets__0, AzureFoundry__Models__3 #1925

Closed

Description

@sierragolflima

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 namespace

Why 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 in secrets.yaml under .Values.secrets.memex_portal.* — 19 false positives.
  • Accept the intermediate-variable pattern. Portal__BaseUrl is 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

  1. sierragolflima commented on Aug 20, 2026

    @sierragolflima
    CollaboratorAuthor

    Evidence that AzureFoundry__Models__3 is not merely decorative — it shaped production data once

    Found while investigating #1880, which reads the affected provider node directly.

    Provider/AzureFoundry on memex.meshweaver.cloud was seeded 2026-08-04 (v1, system-security, never edited) with four models:

    DeepSeek-V4-Pro, DeepSeek-V3-0324, DeepSeek-V4-Flash, Kimi-K2.6
    

    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 AzureFoundry catalog source declares no defaults:

    new LanguageModelCatalogSource(
        SectionName: "AzureFoundry", ProviderName: "AzureFoundry", Order: 2,
        DisplayLabel: "Azure Foundry", DefaultEndpoint: null,
        DefaultModelIds: ImmutableArray<string>.Empty, RequiresApiKey: true)

    MeshWeaver.Plugins/src/MeshWeaver.AI.AzureFoundry/AzureFoundryProvidersAttribute.cs

    So on 2026-08-04 the container's AzureFoundry:Models held all four ids, Kimi-K2.6 among them. Today it cannot: the template renders AzureFoundry__Models__0/1/2 and 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.
    • There is no range over models in the template — every index is written out by hand.
    • The values entry itself predates the node: 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__3 line 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.

  2. added a commit that references this issue on Aug 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions