Files
codebase-memory-mcp/src
Martin Vogel 5c5964efb9 fix(deploy): bound Helm render memory, no wrong image from a skipped change
Review round 2 of #2677 (N1-N12). Every case ends in an explicit unknown,
never in an OOM, a quadratic stall or a wrong image.

Bounds (helm_template.c, pass_k8s.c):
- N1: capture arrays grow by doubling, so n captures cost memory linear in
  n. Arena growth since the render began counts against a third budget
  (256 MiB) beside steps and output; a trip is logged with its reason.
- N10: poisoned maps are a pointer hash set (merged values a path list), so
  a loop poisoning a new dict per iteration keeps reads O(1). Release images
  are deduplicated by hash.

Wrong images (helm_template.c):
- N2: a set / merge in a body an UNKNOWN condition skips is judged by its
  target whatever it is -- a call's result like `index .Values "image"` is
  evaluated in the frame: own, or a known map (poisoned), else it taints.
- N3: putting a value another part holds into an own map revokes own; a
  part of a poisoned map is never own.
- N4: a run-time set whose target is an UNKNOWN call result taints.
- N5: an UNKNOWN break / continue spoils the rest of the loop body around
  it; a continue is a continue, not a break.
- N6: the scan notes redefinitions and assignments, carries what it saw
  across the actions of one branch, and never judges a variable the part
  rebinds by its value in the frame.
- N11: a define's "may not change" that leaned on a define still being
  scanned (mutual includes) is not kept.
- N12: an include not run because its argument is poisoned or UNKNOWN
  spoils that argument (poisoned deep, or a taint).

Releases and charts (pass_k8s.c, pass_terraform.c):
- N8: an empty values.yaml is values {} (Helm's), not a file not read.
- N9: a Terraform set_sensitive whose name overlaps a key an image reads, a
  Terraform postrender, or a kustomization with its own transformers
  (images, patches, replacements, transformers, components) leaves the
  release without an image of its own.

Tests (N7): the symlink probes are POSIX-only (SKIP_PLATFORM on Windows).
One test per item, RED on 4cea54f7 by its assertion; N10's is a correctness
control, its cost measured (linear vs quadratic) outside the suite.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-10-18 23:28:43 +02:00
..
2026-10-12 20:15:14 +02:00
2026-10-14 23:56:37 +02:00