Skip to content

feat: commonAnnotations, Fusillade strategy and grace period, and API-only extra env and volumes - #112

Open
fergusfinn wants to merge 1 commit into
mainfrom
feat/stack-knobs
Open

fergusfinn wants to merge 1 commit into
mainfrom
feat/stack-knobs

Conversation

@fergusfinn

@fergusfinn fergusfinn commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Adds values that let internal render the control layer with native Argo CD Helm sources, instead of patching the chart's output with helmfile transformers. All of them default to empty, so default renders are unchanged. Nothing restarts until internal sets the new values.

New values

  • commonAnnotations: annotations added to every rendered object, hooks included. Where an object sets the same key itself (the migration hooks' sync waves, serviceAccount.annotations, the keystore StorageClass), the object's own value wins. Pod checksums are computed without them (control-layer.checksum), so setting or changing them rolls no pods.
  • fusillade.strategy, fusillade.terminationGracePeriodSeconds: the Fusillade Deployments' rollout strategy and pod termination grace period, overridable per daemon under fusillade.split.<daemon>. When unset, nothing is rendered and Kubernetes' defaults apply.
  • extraEnv, extraVolumes, extraVolumeMounts: env vars (as EnvVar entries), volumes and mounts for the API pods only; Fusillade doesn't inherit them. They render before the chart's own entries, so on a duplicate env name the chart's own value wins.

Verified

  • helm template on main and on this branch is byte-identical for 8 value sets: defaults, ServiceMonitor, external database, split and single Fusillade, keystore with managed StorageClass and ServiceAccount annotations, the migration Job, and heap profiling with bootstrap, email templates and model provisioning.
  • I rendered internal's Curie production control-layer release (chart 1.10.0 values) against this chart, setting the new values instead of internal's transformers. Against today's patched render, all 19 objects match except the migration Job's two checksum annotations, which change because the hook config's wave is set explicitly. The Job is a PreSync hook recreated on every sync, so this rolls nothing. Internal's internal-git-sha provenance annotation, which nothing reads, was excluded from the comparison.
  • helm unittest .: 158 passed, including new cases in tests/common_annotations_test.yaml, tests/fusillade_deployment_test.yaml and tests/control_layer_deployment_test.yaml. helm lint and just test pass.

https://claude.ai/code/session_016Z9n119xkLAjqeNAWncB8R

…-only extra env and volumes

Values that let a GitOps repository render the chart natively instead of patching its output: annotations on
every object (an object's own key wins, and checksums ignore them, so setting them rolls no pods), the Fusillade
daemons' rollout strategy and termination grace period, and environment variables, volumes and mounts for the API
pods alone, rendered before the chart's own. All default to empty, so default renders are unchanged.

Claude-Session: https://claude.ai/code/session_016Z9n119xkLAjqeNAWncB8R
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-14T14:18:23.868715Z 809e1d4 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 809e1d4687

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread templates/_helpers.tpl
Comment on lines +457 to +458
{{- with $root.Values.extraVolumes }}
{{- toYaml . | nindent 8 }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Deduplicate API-only volumes before appending built-ins

When extraVolumes contains a chart-owned name such as config, model-provisioning, or email-templates, this emits both the user entry and the built-in entry. Kubernetes requires volume names within a PodSpec to be unique, so the Deployment is rejected rather than the later chart-owned volume “winning” as documented in values.yaml. Merge or filter these lists by name, or reject collisions explicitly.

Useful? React with 👍 / 👎.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 26 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="values.yaml">

<violation number="1" location="values.yaml:284">
P2: The precedence claim also covers volumes, but `extraVolumes` is concatenated with chart volumes, so a duplicate built-in name leaves a duplicate volume entry instead of making the chart entry win. Limit the precedence claim to `extraEnv` and state that extra volume names must be unique.</violation>
</file>

Reply with feedback, questions, or to request a fix.

View guided diff | Turn on auto-fix | Re-trigger cubic

Comment thread values.yaml
Comment on lines +284 to +285
# entries), volumes and volume mounts rendered before the chart's own, so the
# chart's own entries win on a duplicate name.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The precedence claim also covers volumes, but extraVolumes is concatenated with chart volumes, so a duplicate built-in name leaves a duplicate volume entry instead of making the chart entry win. Limit the precedence claim to extraEnv and state that extra volume names must be unique.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At values.yaml, line 284:

<comment>The precedence claim also covers volumes, but `extraVolumes` is concatenated with chart volumes, so a duplicate built-in name leaves a duplicate volume entry instead of making the chart entry win. Limit the precedence claim to `extraEnv` and state that extra volume names must be unique.</comment>

<file context>
@@ -276,6 +280,15 @@ volumeMounts: []
 #   readOnly: true
 
+# API pods only (not Fusillade): environment variables (Kubernetes EnvVar
+# entries), volumes and volume mounts rendered before the chart's own, so the
+# chart's own entries win on a duplicate name.
+extraEnv: []
</file context>
Suggested change
# entries), volumes and volume mounts rendered before the chart's own, so the
# chart's own entries win on a duplicate name.
# entries), volumes and volume mounts. Only `extraEnv` is precedence-ordered;
# use unique volume names because volume entries are concatenated, not merged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant