{
  "slug": "terragrunt-deep-merge-experiment-adds-deep-merge-hcl-function-282023bf14f0",
  "title": "terragrunt deep-merge experiment adds deep_merge HCL function",
  "tools": [
    "terragrunt"
  ],
  "tags": [
    "agent"
  ],
  "introduced_at": "2026-05-25T12:21:11.000Z",
  "announced_at": "2026-05-25T12:21:11.000Z",
  "effective_at": null,
  "date_basis": "source-publication",
  "status": "unknown",
  "how": {
    "incantation": "When composing inputs from multiple JSON, YAML, or HCL-derived maps, enable the `deep-merge` experiment and call `deep_merge` with positional map/object arguments; later values override overlapping keys, nested maps merge recursively, lists append, and `null` arguments are ignored.",
    "examples": [
      "locals {\n  config_json_files = sort(fileset(get_terragrunt_dir(), \"*.json\"))\n  config = deep_merge([\n    for file in local.config_json_files :\n    jsondecode(file(\"${get_terragrunt_dir()}/${file}\"))\n  ]...)\n}\n\ninputs = local.config",
      "terragrunt run --all --experiment deep-merge -- plan"
    ],
    "gotchas": [
      "Version: 1.0.6",
      "Availability: Experimental; requires enabling the `deep-merge` experiment.",
      "deep_merge(map1, map2, ...) (required): Positional map/object arguments to combine; later arguments override overlapping keys, nested maps merge recursively, lists append, and null arguments are ignored.",
      "--experiment deep-merge (required): Enables the experiment required to call `deep_merge`; the docs' CLI example enables it for `terragrunt run`.",
      "Prerequisite: Enable the `deep-merge` experiment; calling `deep_merge` without it returns an error.",
      "Calling `deep_merge` without enabling the `deep-merge` experiment returns an error."
    ]
  },
  "why_it_matters": "Compose Terragrunt inputs from multiple decoded JSON, YAML, or HCL-derived maps.",
  "sources": [
    "https://github.com/gruntwork-io/terragrunt/releases/tag/v1.0.6",
    "https://docs.terragrunt.com/reference/hcl/functions/",
    "https://docs.terragrunt.com/reference/experiments/active/"
  ],
  "rank": 0.98033,
  "judge": {
    "publish": true,
    "judge_model": "codex-cli/gpt-6-luna+typesafe/jev-1.13.0",
    "prompt_version": "extract-v7+enrich-v2+judge-v2x3+jev-publish-v1"
  },
  "review_state": "approved",
  "provenance": {
    "run_id": "wave2a-20261017",
    "verdict_id": "wave2a-20261017:wave2a-20261017-92979ac9e448cc88-0:gate",
    "evidence_hash": "31592cbd32d740b7e585031306b11d4e4ea0f2965b21c90a6d0006df1895d804"
  },
  "review": {
    "draft_hash": "bf47b9691ae9cefa08cef0661cdb3c1cc64d2778c61ba67d5ed9f8407ea65ed2",
    "reviewer": "publication-gate",
    "reviewed_at": "2026-10-07T00:00:00.000Z",
    "decision": "wave2a-20261017:gate",
    "reason": "3 of 3 judge runs approved with p_yes >= 0.9 (mean 0.98 >= 0.9; 2 needed) and Jev gave 0.72 (>= 0.6 needed)."
  }
}
