{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/spack-environment/latest.json",
  "title": "Spack environment file schema",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/spack/schemas/refs/heads/main/schemas/spack.json",
    "sourceSha256": "9536203ff74e1734183c3548b2680034e10cf71d502be2e082b408830f8a0c0f",
    "fileMatch": [
      "spack.yaml"
    ],
    "parsers": [
      "yaml"
    ]
  },
  "type": "object",
  "properties": {
    "spack": {
      "type": "object",
      "default": {},
      "description": "Spack environment configuration, including specs, view, and any other config section (config, packages, concretizer, mirrors, etc.)",
      "properties": {
        "bootstrap": {
          "type": "object",
          "description": "Configure how Spack bootstraps its own dependencies when needed",
          "properties": {
            "enable": {
              "type": "boolean",
              "description": "Enable or disable bootstrapping entirely"
            },
            "root": {
              "type": "string",
              "description": "Where to install bootstrapped dependencies"
            },
            "sources": {
              "type": "array",
              "items": {
                "type": "object",
                "description": "Bootstrap source configuration",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the bootstrap source (e.g., 'github-actions-v0.6', 'spack-install')"
                  },
                  "metadata": {
                    "type": "string",
                    "description": "Path to metadata directory containing bootstrap source configuration"
                  }
                },
                "required": [
                  "name",
                  "metadata"
                ],
                "additionalProperties": false
              },
              "description": "List of bootstrap sources tried in order. Each method may bootstrap different software depending on its type (e.g., pre-built binaries, source builds)"
            },
            "trusted": {
              "type": "object",
              "description": "Controls which sources are enabled for automatic bootstrapping",
              "additionalProperties": {
                "type": "boolean"
              }
            }
          }
        },
        "cdash": {
          "type": "object",
          "properties": {
            "build-group": {
              "type": "string",
              "description": "Unique build group name for this stack"
            },
            "url": {
              "type": "string",
              "description": "CDash server URL"
            },
            "project": {
              "type": "string",
              "description": "CDash project name"
            },
            "site": {
              "type": "string",
              "description": "Site identifier for CDash reporting"
            }
          },
          "required": [
            "build-group"
          ],
          "description": "Configuration for uploading build results to CDash",
          "additionalProperties": false
        },
        "compilers": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "compiler": {
                "type": "object",
                "properties": {
                  "paths": {
                    "type": "object",
                    "required": [
                      "cc",
                      "cxx",
                      "f77",
                      "fc"
                    ],
                    "properties": {
                      "cc": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "cxx": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "f77": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "fc": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "flags": {
                    "type": "object",
                    "properties": {
                      "cflags": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Flags for C compiler, e.g. -std=c11"
                      },
                      "cxxflags": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Flags for C++ compiler, e.g. -std=c++14"
                      },
                      "fflags": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Flags for Fortran 77 compiler, e.g. -ffixed-line-length-none"
                      },
                      "cppflags": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Flags for C preprocessor, e.g. -DFOO=1"
                      },
                      "ldflags": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Flags passed to the compiler driver during linking, e.g. -Wl,--gc-sections"
                      },
                      "ldlibs": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Flags for linker libraries, e.g. -lpthread"
                      }
                    },
                    "description": "Flags to pass to the compiler during compilation and linking",
                    "additionalProperties": false
                  },
                  "spec": {
                    "type": "string"
                  },
                  "operating_system": {
                    "type": "string"
                  },
                  "target": {
                    "type": "string"
                  },
                  "alias": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "modules": {
                    "anyOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  },
                  "implicit_rpaths": {
                    "anyOf": [
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      {
                        "type": "boolean"
                      }
                    ],
                    "description": "List of non-default link directories to register at runtime as rpaths"
                  },
                  "environment": {
                    "type": "object",
                    "description": "Environment variable modifications to apply at runtime",
                    "default": {},
                    "properties": {
                      "set": {
                        "description": "Environment variables to set to specific values",
                        "type": "object",
                        "additionalProperties": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            }
                          ]
                        }
                      },
                      "unset": {
                        "description": "Environment variables to remove/unset",
                        "default": [],
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "prepend_path": {
                        "description": "Environment variables to prepend values to (typically PATH-like variables)",
                        "type": "object",
                        "additionalProperties": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            }
                          ]
                        }
                      },
                      "append_path": {
                        "description": "Environment variables to append values to (typically PATH-like variables)",
                        "type": "object",
                        "additionalProperties": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            }
                          ]
                        }
                      },
                      "remove_path": {
                        "description": "Values to remove from PATH-like environment variables",
                        "type": "object",
                        "additionalProperties": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            }
                          ]
                        }
                      }
                    },
                    "additionalProperties": false
                  },
                  "extra_rpaths": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "description": "List of extra rpaths to inject by Spack's compiler wrappers"
                  }
                },
                "required": [
                  "paths",
                  "spec",
                  "modules",
                  "operating_system"
                ],
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          }
        },
        "concretizer": {
          "type": "object",
          "properties": {
            "force": {
              "type": "boolean",
              "default": false,
              "description": "Force re-concretization when concretizing environments"
            },
            "reuse": {
              "description": "Controls how aggressively Spack reuses installed packages and build caches during concretization",
              "oneOf": [
                {
                  "type": "boolean",
                  "description": "If true, reuse installed packages and build caches for all specs; if false, always perform fresh concretization"
                },
                {
                  "type": "string",
                  "enum": [
                    "dependencies"
                  ],
                  "description": "Reuse installed packages and build caches only for dependencies, not root specs"
                },
                {
                  "type": "object",
                  "description": "Advanced reuse configuration with fine-grained control over which specs are reused",
                  "properties": {
                    "roots": {
                      "type": "boolean",
                      "description": "If true, root specs are reused; if false, only dependencies of root specs are reused"
                    },
                    "include": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "List of spec constraints. Reusable specs must match at least one constraint"
                    },
                    "exclude": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "List of spec constraints. Reusable specs must not match any constraint"
                    },
                    "from": {
                      "type": "array",
                      "description": "List of sources from which reused specs are taken",
                      "items": {
                        "type": "object",
                        "description": "Source configuration for reusable specs",
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": [
                              "local",
                              "buildcache",
                              "external",
                              "environment"
                            ],
                            "description": "Type of source: 'local' (installed packages), 'buildcache' (remote binaries), 'external' (system packages), or 'environment' (from specific environment)"
                          },
                          "path": {
                            "type": "string",
                            "description": "Path to the source (for environment type sources)"
                          },
                          "include": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Spec constraints that must be matched for this source (overrides global include)"
                          },
                          "exclude": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Spec constraints that must not be matched for this source (overrides global exclude)"
                          }
                        }
                      }
                    }
                  }
                }
              ]
            },
            "enable_node_namespace": {
              "type": "boolean",
              "description": "Enable node namespace functionality in the concretizer"
            },
            "targets": {
              "type": "object",
              "description": "Controls which target microarchitectures are considered during concretization",
              "properties": {
                "host_compatible": {
                  "type": "boolean",
                  "description": "If true, only allow targets compatible with the current host; if false, allow any target (e.g., concretize for icelake while running on haswell)"
                },
                "granularity": {
                  "type": "string",
                  "enum": [
                    "generic",
                    "microarchitectures"
                  ],
                  "description": "Target selection granularity: 'microarchitectures' (e.g., haswell, skylake) or 'generic' (e.g., x86_64_v3, aarch64)"
                }
              }
            },
            "unify": {
              "description": "Controls whether environment specs are concretized together or separately",
              "oneOf": [
                {
                  "type": "boolean",
                  "description": "If true, concretize environment root specs together for unified dependencies; if false, concretize each spec independently"
                },
                {
                  "type": "string",
                  "enum": [
                    "when_possible"
                  ],
                  "description": "Maximizes reuse, while allowing multiple instances of the same package"
                }
              ]
            },
            "compiler_mixing": {
              "oneOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "array"
                }
              ],
              "description": "Whether to allow compiler mixing between link/run dependencies"
            },
            "splice": {
              "type": "object",
              "properties": {
                "explicit": {
                  "type": "array",
                  "default": [],
                  "description": "List of explicit splice configurations to replace specific dependencies",
                  "items": {
                    "type": "object",
                    "required": [
                      "target",
                      "replacement"
                    ],
                    "properties": {
                      "target": {
                        "type": "string",
                        "description": "Abstract spec to be replaced (e.g., 'mpi' or specific package)"
                      },
                      "replacement": {
                        "type": "string",
                        "description": "Concrete spec with hash to use as replacement (e.g., 'mpich/abcdef')"
                      },
                      "transitive": {
                        "type": "boolean",
                        "default": false,
                        "description": "If true, use transitive splice (conflicts resolved using replacement dependencies); if false, use intransitive splice (conflicts resolved using original dependencies)"
                      }
                    },
                    "description": "Explicit splice configuration",
                    "additionalProperties": false
                  }
                },
                "automatic": {
                  "type": "boolean",
                  "description": "Enable automatic splicing for ABI-compatible packages (experimental feature)"
                }
              },
              "description": "Configuration for spec splicing: replacing dependencies with ABI-compatible alternatives to improve package reuse",
              "additionalProperties": false
            },
            "duplicates": {
              "type": "object",
              "description": "Controls whether the dependency graph can contain multiple configurations of the same package",
              "properties": {
                "strategy": {
                  "type": "string",
                  "enum": [
                    "none",
                    "minimal",
                    "full"
                  ],
                  "description": "Duplication strategy: 'none' (single config per package), 'minimal' (allow build-tools duplicates), 'full' (experimental: allow full build-tool stack separation)"
                },
                "max_dupes": {
                  "type": "object",
                  "description": "Maximum number of duplicates allowed per package when using strategies that permit duplicates",
                  "additionalProperties": {
                    "type": "integer",
                    "minimum": 1,
                    "description": "Maximum number of duplicate instances for this package"
                  }
                }
              }
            },
            "static_analysis": {
              "type": "boolean",
              "description": "Enable static analysis to reduce concretization time by generating smaller ASP problems"
            },
            "timeout": {
              "type": "integer",
              "minimum": 0,
              "description": "Maximum time in seconds for the solve phase (0 means no time limit)"
            },
            "error_on_timeout": {
              "type": "boolean",
              "description": "If true, timeout always results in error; if false, use best suboptimal solution found before timeout (yields unreproducible results)"
            },
            "os_compatible": {
              "type": "object",
              "description": "Compatibility mapping between operating systems for reuse of compilers and packages (key: target OS, value: list of compatible source OSes)",
              "additionalProperties": {
                "type": "array"
              }
            },
            "concretization_cache": {
              "type": "object",
              "description": "Configuration for caching solver outputs from successful concretization runs",
              "properties": {
                "enable": {
                  "type": "boolean",
                  "description": "Whether to utilize a cache of solver outputs from successful concretization runs"
                },
                "url": {
                  "type": "string",
                  "description": "Path to the location where Spack will root the concretization cache"
                },
                "entry_limit": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Limit on the number of concretization results that Spack will cache (0 disables pruning)"
                }
              }
            },
            "externals": {
              "type": "object",
              "description": "Configuration for how Spack handles external packages during concretization",
              "properties": {
                "completion": {
                  "type": "string",
                  "enum": [
                    "architecture_only",
                    "default_variants"
                  ],
                  "description": "Controls how missing information (variants, etc.) is completed for external packages: 'architecture_only' completes only mandatory architectural information; 'default_variants' also completes missing variants using their default values"
                }
              }
            }
          },
          "description": "Concretizer configuration that controls dependency selection, package reuse, and solver behavior",
          "additionalProperties": false
        },
        "config": {
          "type": "object",
          "default": {},
          "description": "Spack's basic configuration options",
          "properties": {
            "flags": {
              "type": "object",
              "description": "Build flag configuration options",
              "properties": {
                "keep_werror": {
                  "type": "string",
                  "enum": [
                    "all",
                    "specific",
                    "none"
                  ],
                  "description": "Whether to keep -Werror flags active in package builds"
                }
              }
            },
            "shared_linking": {
              "description": "Control how shared libraries are located at runtime on Linux",
              "anyOf": [
                {
                  "type": "string",
                  "enum": [
                    "rpath",
                    "runpath"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "rpath",
                        "runpath"
                      ],
                      "description": "Whether to use RPATH or RUNPATH for runtime library search paths"
                    },
                    "bind": {
                      "type": "boolean",
                      "description": "Embed absolute paths of dependent libraries directly in ELF binaries (experimental)"
                    },
                    "missing_library_policy": {
                      "enum": [
                        "error",
                        "warn",
                        "ignore"
                      ],
                      "description": "How to handle missing dynamic libraries after installation"
                    }
                  }
                }
              ]
            },
            "install_tree": {
              "type": "object",
              "description": "Installation tree configuration",
              "properties": {
                "root": {
                  "type": "string",
                  "description": "The location where Spack will install packages and their dependencies"
                },
                "padded_length": {
                  "oneOf": [
                    {
                      "type": "integer",
                      "minimum": 0
                    },
                    {
                      "type": "boolean"
                    }
                  ],
                  "description": "Length to pad installation paths to allow better relocation of binaries (true for max length, integer for specific length)"
                },
                "projections": {
                  "type": "object",
                  "description": "Customize directory structure and naming schemes by mapping specs to format strings.",
                  "properties": {
                    "all": {
                      "type": "string",
                      "description": "Default projection format string used as fallback for all specs that do not match other entries. Uses spec format syntax like \"{name}/{version}/{hash:16}\"."
                    }
                  },
                  "additionalKeysAreSpecs": true,
                  "additionalProperties": {
                    "type": "string",
                    "description": "Projection format string for specs matching this key. Uses spec format syntax supporting tokens like {name}, {version}, {compiler.name}, {^dependency.name}, etc."
                  }
                }
              }
            },
            "install_hash_length": {
              "type": "integer",
              "minimum": 1,
              "description": "Length of hash used in installation directory names"
            },
            "build_stage": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Temporary locations Spack can try to use for builds"
            },
            "stage_name": {
              "type": "string",
              "description": "Name format for build stage directories"
            },
            "develop_stage_link": {
              "type": "string",
              "description": "Name for development spec build stage directories"
            },
            "test_stage": {
              "type": "string",
              "description": "Directory in which to run tests and store test results"
            },
            "extensions": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "List of Spack extensions to load"
            },
            "template_dirs": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Locations where templates should be found"
            },
            "license_dir": {
              "type": "string",
              "description": "Directory where licenses should be located"
            },
            "source_cache": {
              "type": "string",
              "description": "Location to cache downloaded tarballs and repositories"
            },
            "misc_cache": {
              "type": "string",
              "description": "Temporary directory to store long-lived cache files, such as indices of packages"
            },
            "environments_root": {
              "type": "string",
              "description": "Directory where Spack managed environments are created and stored"
            },
            "connect_timeout": {
              "type": "integer",
              "minimum": 0,
              "description": "Abort downloads after this many seconds if no data is received (0 disables timeout)"
            },
            "verify_ssl": {
              "type": "boolean",
              "description": "When true, Spack will verify certificates of remote hosts when making SSL connections"
            },
            "ssl_certs": {
              "type": "string",
              "description": "Path to custom certificates for SSL verification"
            },
            "suppress_gpg_warnings": {
              "type": "boolean",
              "description": "Suppress GPG warnings from binary package verification"
            },
            "debug": {
              "type": "boolean",
              "description": "Enable debug mode for additional logging"
            },
            "checksum": {
              "type": "boolean",
              "description": "When true, Spack verifies downloaded source code using checksums"
            },
            "deprecated": {
              "type": "boolean",
              "description": "If true, Spack will fetch deprecated versions without warning"
            },
            "locks": {
              "type": "boolean",
              "description": "When true, concurrent instances of Spack will use locks to avoid conflicts (strongly recommended)"
            },
            "dirty": {
              "type": "boolean",
              "description": "When true, builds will NOT clean potentially harmful variables from the environment"
            },
            "build_language": {
              "type": "string",
              "description": "The language the build environment will use (C for English, empty string for user's environment)"
            },
            "build_jobs": {
              "type": "integer",
              "minimum": 1,
              "description": "The maximum number of jobs to use for the build system (e.g. make -j), defaults to 16"
            },
            "concurrent_packages": {
              "type": "integer",
              "minimum": 1,
              "description": "The maximum number of concurrent package builds a single Spack instance will run"
            },
            "ccache": {
              "type": "boolean",
              "description": "When true, Spack's compiler wrapper will use ccache when compiling C and C++"
            },
            "db_lock_timeout": {
              "type": "integer",
              "minimum": 1,
              "description": "How long to wait to lock the Spack installation database"
            },
            "package_lock_timeout": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "null"
                }
              ],
              "description": "How long to wait when attempting to modify a package (null for never timeout)"
            },
            "allow_sgid": {
              "type": "boolean",
              "description": "Allow installation on filesystems that don't allow setgid bit manipulation"
            },
            "install_status": {
              "type": "boolean",
              "description": "Whether to show status information in the terminal title during the build"
            },
            "url_fetch_method": {
              "anyOf": [
                {
                  "enum": [
                    "urllib",
                    "curl"
                  ]
                },
                {
                  "type": "string",
                  "pattern": "^curl "
                }
              ],
              "description": "The default URL fetch method to use (urllib or curl)"
            },
            "additional_external_search_paths": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Additional paths to search for external packages"
            },
            "binary_index_ttl": {
              "type": "integer",
              "minimum": 0,
              "description": "Number of seconds a buildcache's index.json is cached locally before probing for updates"
            },
            "aliases": {
              "type": "object",
              "description": "A mapping of aliases that can be used to define new Spack commands",
              "additionalProperties": {
                "type": "string"
              }
            },
            "installer": {
              "type": "string",
              "enum": [
                "old",
                "new"
              ],
              "description": "Which installer to use. The new installer is experimental."
            }
          }
        },
        "container": {
          "type": "object",
          "properties": {
            "format": {
              "type": "string",
              "enum": [
                "docker",
                "singularity"
              ]
            },
            "images": {
              "anyOf": [
                {
                  "type": "object",
                  "required": [
                    "os",
                    "spack"
                  ],
                  "properties": {
                    "os": {
                      "type": "string"
                    },
                    "spack": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "url": {
                              "type": "string"
                            },
                            "ref": {
                              "type": "string"
                            },
                            "resolve_sha": {
                              "type": "boolean",
                              "default": false
                            },
                            "verify": {
                              "type": "boolean",
                              "default": false
                            }
                          },
                          "additionalProperties": false
                        }
                      ]
                    }
                  },
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "required": [
                    "build",
                    "final"
                  ],
                  "properties": {
                    "build": {
                      "type": "string"
                    },
                    "final": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": false
                }
              ]
            },
            "strip": {
              "type": "boolean",
              "default": true
            },
            "os_packages": {
              "type": "object",
              "properties": {
                "command": {
                  "type": "string",
                  "enum": [
                    "apt",
                    "yum",
                    "zypper",
                    "apk",
                    "yum_amazon"
                  ]
                },
                "update": {
                  "type": "boolean"
                },
                "build": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "final": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "additionalProperties": false
            },
            "labels": {
              "type": "object"
            },
            "template": {
              "type": "string",
              "default": null
            },
            "singularity": {
              "type": "object",
              "properties": {
                "runscript": {
                  "type": "string"
                },
                "startscript": {
                  "type": "string"
                },
                "test": {
                  "type": "string"
                },
                "help": {
                  "type": "string"
                }
              },
              "default": {},
              "additionalProperties": false
            },
            "docker": {
              "type": "object",
              "default": {},
              "additionalProperties": false
            },
            "depfile": {
              "type": "boolean",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "ci": {
          "type": "object",
          "properties": {
            "pipeline-gen": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "match_behavior": {
                        "type": "string",
                        "enum": [
                          "first",
                          "merge"
                        ],
                        "default": "first"
                      },
                      "submapping": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "match": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "build-job": {
                              "type": "object",
                              "properties": {
                                "image": {
                                  "oneOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "name": {
                                          "type": "string"
                                        },
                                        "entrypoint": {
                                          "type": "array",
                                          "items": {
                                            "type": "string"
                                          }
                                        }
                                      }
                                    }
                                  ]
                                },
                                "tags": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                },
                                "variables": {
                                  "type": "object",
                                  "patternProperties": {
                                    "^[\\w\\-\\.]+$": {
                                      "type": [
                                        "string",
                                        "number"
                                      ]
                                    }
                                  }
                                },
                                "before_script": {
                                  "type": "array",
                                  "items": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "array",
                                        "items": {
                                          "type": "string"
                                        }
                                      }
                                    ]
                                  }
                                },
                                "script": {
                                  "type": "array",
                                  "items": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "array",
                                        "items": {
                                          "type": "string"
                                        }
                                      }
                                    ]
                                  }
                                },
                                "after_script": {
                                  "type": "array",
                                  "items": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "array",
                                        "items": {
                                          "type": "string"
                                        }
                                      }
                                    ]
                                  }
                                }
                              },
                              "additionalProperties": true
                            },
                            "build-job-remove": {
                              "type": "object",
                              "properties": {
                                "image": {
                                  "oneOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "name": {
                                          "type": "string"
                                        },
                                        "entrypoint": {
                                          "type": "array",
                                          "items": {
                                            "type": "string"
                                          }
                                        }
                                      }
                                    }
                                  ]
                                },
                                "tags": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                },
                                "variables": {
                                  "type": "object",
                                  "patternProperties": {
                                    "^[\\w\\-\\.]+$": {
                                      "type": [
                                        "string",
                                        "number"
                                      ]
                                    }
                                  }
                                },
                                "before_script": {
                                  "type": "array",
                                  "items": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "array",
                                        "items": {
                                          "type": "string"
                                        }
                                      }
                                    ]
                                  }
                                },
                                "script": {
                                  "type": "array",
                                  "items": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "array",
                                        "items": {
                                          "type": "string"
                                        }
                                      }
                                    ]
                                  }
                                },
                                "after_script": {
                                  "type": "array",
                                  "items": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "array",
                                        "items": {
                                          "type": "string"
                                        }
                                      }
                                    ]
                                  }
                                }
                              },
                              "additionalProperties": true
                            }
                          },
                          "required": [
                            "match"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "submapping"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "dynamic-mapping": {
                        "type": "object",
                        "required": [
                          "endpoint"
                        ],
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "endpoint": {
                            "type": "string"
                          },
                          "timeout": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "verify_ssl": {
                            "type": "boolean",
                            "default": false
                          },
                          "header": {
                            "type": "object",
                            "additionalProperties": {
                              "type": "string"
                            }
                          },
                          "allow": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "require": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "ignore": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        }
                      }
                    },
                    "required": [
                      "dynamic-mapping"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "any-job": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      },
                      "any-job-remove": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "build-job": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      },
                      "build-job-remove": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "cleanup-job": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      },
                      "cleanup-job-remove": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "copy-job": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      },
                      "copy-job-remove": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "noop-job": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      },
                      "noop-job-remove": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "reindex-job": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      },
                      "reindex-job-remove": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "signing-job": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      },
                      "signing-job-remove": {
                        "type": "object",
                        "properties": {
                          "image": {
                            "oneOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "entrypoint": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            ]
                          },
                          "tags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "variables": {
                            "type": "object",
                            "patternProperties": {
                              "^[\\w\\-\\.]+$": {
                                "type": [
                                  "string",
                                  "number"
                                ]
                              }
                            }
                          },
                          "before_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          },
                          "after_script": {
                            "type": "array",
                            "items": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": true
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              }
            },
            "rebuild-index": {
              "type": "boolean"
            },
            "broken-specs-url": {
              "type": "string"
            },
            "broken-tests-packages": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "target": {
              "type": "string",
              "default": "gitlab"
            }
          }
        },
        "definitions": {
          "type": "array",
          "default": [],
          "description": "Named spec lists to be referred to with $name in the specs section of environments",
          "items": {
            "type": "object",
            "description": "Named definition entry containing a named spec list and optional conditional 'when' clause",
            "properties": {
              "when": {
                "type": "string",
                "description": "Python code condition evaluated as boolean. Specs are appended to the named list only if the condition is True. Available variables: platform, os, target, arch, arch_str, re, env, hostname"
              }
            },
            "additionalProperties": {
              "type": "array",
              "description": "List of specs to include in the environment, supporting both simple specs and matrix configurations",
              "default": [],
              "items": {
                "anyOf": [
                  {
                    "type": "object",
                    "description": "Matrix configuration for generating multiple specs from combinations of constraints",
                    "properties": {
                      "matrix": {
                        "type": "array",
                        "description": "List of spec constraint lists whose cross product generates multiple specs",
                        "items": {
                          "type": "array",
                          "description": "List of spec constraints for this matrix dimension",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "exclude": {
                        "type": "array",
                        "description": "List of specific spec combinations to exclude from the matrix",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "string",
                    "description": "Simple spec string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          }
        },
        "develop": {
          "type": "object",
          "default": {},
          "description": "Configuration for local development of Spack packages",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "spec": {
                "type": "string",
                "description": "Spec of the package to develop, e.g. hdf5@1.12.0"
              },
              "path": {
                "type": "string",
                "description": "Path to the source code for this package, can be absolute or relative to the environment directory"
              }
            },
            "description": "Name of a package to develop, with its spec and optional source path",
            "required": [
              "spec"
            ],
            "additionalProperties": false
          }
        },
        "env_vars": {
          "type": "object",
          "description": "Environment variable modifications to apply at runtime",
          "default": {},
          "properties": {
            "set": {
              "description": "Environment variables to set to specific values",
              "type": "object",
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  }
                ]
              }
            },
            "unset": {
              "description": "Environment variables to remove/unset",
              "default": [],
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "prepend_path": {
              "description": "Environment variables to prepend values to (typically PATH-like variables)",
              "type": "object",
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  }
                ]
              }
            },
            "append_path": {
              "description": "Environment variables to append values to (typically PATH-like variables)",
              "type": "object",
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  }
                ]
              }
            },
            "remove_path": {
              "description": "Values to remove from PATH-like environment variables",
              "type": "object",
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  }
                ]
              }
            }
          },
          "additionalProperties": false
        },
        "include": {
          "type": "array",
          "default": [],
          "items": {
            "anyOf": [
              {
                "type": "string",
                "description": "Simple include entry specifying path to required configuration file/directory"
              },
              {
                "type": "object",
                "description": "Advanced include entry with optional conditions and remote file support",
                "properties": {
                  "when": {
                    "type": "string",
                    "description": "Include this config only when the condition (as Python code) evaluates to true"
                  },
                  "name": {
                    "type": "string"
                  },
                  "path_override_env_var": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Path to configuration file/directory (absolute, relative, or URL). URLs must be raw file content (GitHub/GitLab raw form). Supports file, ftp, http, https schemes and Spack/environment variables"
                  },
                  "sha256": {
                    "type": "string",
                    "description": "Required SHA256 hash for remote URLs to verify file integrity"
                  },
                  "optional": {
                    "type": "boolean",
                    "description": "If true, include only if path exists; if false (default), path is required and missing files cause errors"
                  },
                  "prefer_modify": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "path"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "description": "Include configuration files from a git repository with conditional and optional support",
                "properties": {
                  "git": {
                    "type": "string",
                    "description": "URL of the git repository to clone (e.g., <https://github.com/spack/spack-configs)>"
                  },
                  "branch": {
                    "type": "string",
                    "description": "Branch to check out from the repository"
                  },
                  "commit": {
                    "type": "string",
                    "description": "Specific commit SHA to check out from the repository"
                  },
                  "tag": {
                    "type": "string",
                    "description": "Tag to check out from the repository"
                  },
                  "paths": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "description": "Relative path within the repository to a configuration file to include"
                    },
                    "description": "List of relative paths within the repository where configuration files are located"
                  },
                  "when": {
                    "type": "string",
                    "description": "Include this config only when the condition (as Python code) evaluates to true"
                  },
                  "optional": {
                    "type": "boolean",
                    "description": "If true, include only if repository is accessible; if false (default), inaccessible repository causes errors"
                  }
                },
                "required": [
                  "git",
                  "paths"
                ],
                "additionalProperties": false
              }
            ]
          },
          "description": "Include external configuration files to pull in configuration from other files/URLs for modular and reusable configurations",
          "additionalProperties": false
        },
        "mirrors": {
          "type": "object",
          "default": {},
          "description": "Configure local and remote mirrors that provide repositories of source tarballs and binary build caches for faster package installation",
          "additionalProperties": {
            "description": "Named mirror configuration that can be a simple URL string or detailed mirror entry with authentication and build cache settings",
            "anyOf": [
              {
                "type": "string",
                "description": "Simple mirror URL for basic source package or build cache access"
              },
              {
                "type": "object",
                "description": "Mirror configuration entry supporting both source package archives and binary build caches with optional authentication",
                "properties": {
                  "source": {
                    "type": "boolean",
                    "description": "Whether this mirror provides source package archives (tarballs) for building from source"
                  },
                  "binary": {
                    "type": "boolean",
                    "description": "Whether this mirror provides binary build caches for installing precompiled packages"
                  },
                  "signed": {
                    "type": "boolean",
                    "description": "Whether to require GPG signature verification for packages from this mirror"
                  },
                  "fetch": {
                    "description": "Configuration for fetching/downloading packages from this mirror",
                    "anyOf": [
                      {
                        "type": "string",
                        "description": "Simple URL string for basic mirror connections without authentication"
                      },
                      {
                        "type": "object",
                        "description": "Detailed connection configuration with authentication and custom settings",
                        "properties": {
                          "url": {
                            "type": "string",
                            "description": "URL pointing to the mirror directory, can be local filesystem (file://) or remote server (http://, <https://>, s3://, oci://)"
                          },
                          "access_pair": {
                            "type": "object",
                            "description": "Authentication credentials for accessing private mirrors with ID and secret pairs",
                            "required": [
                              "secret_variable"
                            ],
                            "oneOf": [
                              {
                                "required": [
                                  "id"
                                ]
                              },
                              {
                                "required": [
                                  "id_variable"
                                ]
                              }
                            ],
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "Static access ID or username for authentication"
                              },
                              "id_variable": {
                                "type": "string",
                                "description": "Environment variable name containing the access ID or username"
                              },
                              "secret_variable": {
                                "type": "string",
                                "description": "Environment variable name containing the secret key, password, or access token"
                              }
                            }
                          },
                          "profile": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "AWS profile name to use for S3 mirror authentication"
                          },
                          "endpoint_url": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Custom endpoint URL for S3-compatible storage services"
                          },
                          "access_token_variable": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Environment variable containing an access token for OCI registry authentication"
                          }
                        },
                        "additionalProperties": false
                      }
                    ]
                  },
                  "push": {
                    "description": "Configuration for pushing/uploading packages to this mirror for build cache creation",
                    "anyOf": [
                      {
                        "type": "string",
                        "description": "Simple URL string for basic mirror connections without authentication"
                      },
                      {
                        "type": "object",
                        "description": "Detailed connection configuration with authentication and custom settings",
                        "properties": {
                          "url": {
                            "type": "string",
                            "description": "URL pointing to the mirror directory, can be local filesystem (file://) or remote server (http://, <https://>, s3://, oci://)"
                          },
                          "access_pair": {
                            "type": "object",
                            "description": "Authentication credentials for accessing private mirrors with ID and secret pairs",
                            "required": [
                              "secret_variable"
                            ],
                            "oneOf": [
                              {
                                "required": [
                                  "id"
                                ]
                              },
                              {
                                "required": [
                                  "id_variable"
                                ]
                              }
                            ],
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "Static access ID or username for authentication"
                              },
                              "id_variable": {
                                "type": "string",
                                "description": "Environment variable name containing the access ID or username"
                              },
                              "secret_variable": {
                                "type": "string",
                                "description": "Environment variable name containing the secret key, password, or access token"
                              }
                            }
                          },
                          "profile": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "AWS profile name to use for S3 mirror authentication"
                          },
                          "endpoint_url": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Custom endpoint URL for S3-compatible storage services"
                          },
                          "access_token_variable": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Environment variable containing an access token for OCI registry authentication"
                          }
                        },
                        "additionalProperties": false
                      }
                    ]
                  },
                  "autopush": {
                    "type": "boolean",
                    "description": "Automatically push packages to this build cache immediately after they are installed locally"
                  },
                  "url": {
                    "type": "string",
                    "description": "URL pointing to the mirror directory, can be local filesystem (file://) or remote server (http://, <https://>, s3://, oci://)"
                  },
                  "access_pair": {
                    "type": "object",
                    "description": "Authentication credentials for accessing private mirrors with ID and secret pairs",
                    "required": [
                      "secret_variable"
                    ],
                    "oneOf": [
                      {
                        "required": [
                          "id"
                        ]
                      },
                      {
                        "required": [
                          "id_variable"
                        ]
                      }
                    ],
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Static access ID or username for authentication"
                      },
                      "id_variable": {
                        "type": "string",
                        "description": "Environment variable name containing the access ID or username"
                      },
                      "secret_variable": {
                        "type": "string",
                        "description": "Environment variable name containing the secret key, password, or access token"
                      }
                    }
                  },
                  "profile": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "AWS profile name to use for S3 mirror authentication"
                  },
                  "endpoint_url": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Custom endpoint URL for S3-compatible storage services"
                  },
                  "access_token_variable": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Environment variable containing an access token for OCI registry authentication"
                  }
                },
                "anyOf": [
                  {
                    "required": [
                      "url"
                    ]
                  },
                  {
                    "required": [
                      "fetch"
                    ]
                  },
                  {
                    "required": [
                      "pull"
                    ]
                  }
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "modules": {
          "type": "object",
          "description": "Configure automatic generation of module files for Environment Modules and Lmod to manage user environments at HPC centers",
          "properties": {
            "prefix_inspections": {
              "type": "object",
              "description": "Global prefix inspection settings that apply to all module sets, controlling which subdirectories are added to environment variables",
              "additionalProperties": {
                "type": "array",
                "default": [],
                "items": {
                  "type": "string"
                },
                "description": "List of environment variables to update with this prefix-relative path if it exists"
              }
            }
          },
          "additionalProperties": {
            "type": "object",
            "default": {},
            "description": "Named module set configuration (e.g., 'default') defining how module files are generated for a specific set of packages",
            "properties": {
              "use_view": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "boolean"
                  }
                ],
                "description": "Generate modules relative to an environment view instead of install tree (True for default view, string for named view, False to disable)"
              },
              "arch_folder": {
                "type": "boolean",
                "description": "Whether to include architecture-specific subdirectories in module file paths"
              },
              "roots": {
                "type": "object",
                "description": "Custom root directories for different module file types",
                "properties": {
                  "tcl": {
                    "type": "string",
                    "description": "Root directory for TCL module files"
                  },
                  "lmod": {
                    "type": "string",
                    "description": "Root directory for Lmod module files"
                  }
                }
              },
              "enable": {
                "type": "array",
                "default": [],
                "description": "List of module types to automatically generate during package installation",
                "items": {
                  "type": "string",
                  "enum": [
                    "tcl",
                    "lmod"
                  ]
                }
              },
              "lmod": {
                "type": "object",
                "default": {},
                "description": "Configuration for Lmod hierarchical module system",
                "additionalKeysAreSpecs": true,
                "properties": {
                  "verbose": {
                    "type": "boolean",
                    "default": false,
                    "description": "Enable verbose output during module file generation"
                  },
                  "hash_length": {
                    "type": "integer",
                    "minimum": 0,
                    "default": 7,
                    "description": "Length of package hash to include in module file names (0-32, shorter hashes may cause naming conflicts)"
                  },
                  "include": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "description": "List of specs to explicitly include for module file generation, even if they would normally be excluded"
                  },
                  "exclude": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "description": "List of specs to exclude from module file generation"
                  },
                  "exclude_implicits": {
                    "type": "boolean",
                    "default": false,
                    "description": "Exclude implicit dependencies from module file generation while still allowing autoloading"
                  },
                  "defaults": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "description": "List of specs for which to create default module symlinks when multiple versions exist"
                  },
                  "hide_implicits": {
                    "type": "boolean",
                    "default": false,
                    "description": "Hide implicit dependency modules from 'module avail' but still allow autoloading (requires module system support)"
                  },
                  "naming_scheme": {
                    "type": "string",
                    "description": "Custom naming scheme for module files using format strings"
                  },
                  "projections": {
                    "type": "object",
                    "description": "Custom directory structure and naming convention for module files using projection format",
                    "properties": {
                      "all": {
                        "type": "string",
                        "description": "Default projection format string used as fallback for all specs that do not match other entries. Uses spec format syntax like \"{name}/{version}/{hash:16}\"."
                      }
                    },
                    "additionalKeysAreSpecs": true,
                    "additionalProperties": {
                      "type": "string",
                      "description": "Projection format string for specs matching this key. Uses spec format syntax supporting tokens like {name}, {version}, {compiler.name}, {^dependency.name}, etc."
                    }
                  },
                  "all": {
                    "type": "object",
                    "default": {},
                    "description": "Default configuration applied to all module files in this module set",
                    "properties": {
                      "filter": {
                        "type": "object",
                        "default": {},
                        "description": "Filter out specific environment variable modifications from module files",
                        "properties": {
                          "exclude_env_vars": {
                            "type": "array",
                            "default": [],
                            "items": {
                              "type": "string"
                            },
                            "description": "List of environment variable names to exclude from module file modifications"
                          }
                        },
                        "additionalProperties": false
                      },
                      "template": {
                        "type": "string",
                        "description": "Path to custom template file for generating module files"
                      },
                      "autoload": {
                        "type": "string",
                        "enum": [
                          "none",
                          "run",
                          "direct",
                          "all"
                        ],
                        "description": "Automatically load dependency modules when this module is loaded"
                      },
                      "prerequisites": {
                        "type": "string",
                        "enum": [
                          "none",
                          "run",
                          "direct",
                          "all"
                        ],
                        "description": "Mark dependency modules as prerequisites instead of autoloading them"
                      },
                      "conflict": {
                        "type": "array",
                        "default": [],
                        "items": {
                          "type": "string"
                        },
                        "description": "List of modules that conflict with this one and should not be loaded simultaneously"
                      },
                      "load": {
                        "type": "array",
                        "default": [],
                        "items": {
                          "type": "string"
                        },
                        "description": "List of additional modules to load when this module is loaded"
                      },
                      "suffixes": {
                        "type": "object",
                        "description": "Add custom suffixes to module names based on spec matching for better readability",
                        "additionalKeysAreSpecs": true,
                        "additionalProperties": {
                          "type": "string"
                        }
                      },
                      "environment": {
                        "type": "object",
                        "description": "Custom environment variable modifications to apply in this module file",
                        "default": {},
                        "properties": {
                          "set": {
                            "description": "Environment variables to set to specific values",
                            "type": "object",
                            "additionalProperties": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                }
                              ]
                            }
                          },
                          "unset": {
                            "description": "Environment variables to remove/unset",
                            "default": [],
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "prepend_path": {
                            "description": "Environment variables to prepend values to (typically PATH-like variables)",
                            "type": "object",
                            "additionalProperties": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                }
                              ]
                            }
                          },
                          "append_path": {
                            "description": "Environment variables to append values to (typically PATH-like variables)",
                            "type": "object",
                            "additionalProperties": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                }
                              ]
                            }
                          },
                          "remove_path": {
                            "description": "Values to remove from PATH-like environment variables",
                            "type": "object",
                            "additionalProperties": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  },
                  "core_compilers": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "description": "List of core compilers that are always available at the top level of the Lmod hierarchy"
                  },
                  "hierarchy": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "description": "List of packages to use for building the Lmod module hierarchy (typically compilers and MPI implementations)"
                  },
                  "core_specs": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "description": "List of specs that should be placed in the core level of the Lmod hierarchy regardless of dependencies"
                  },
                  "filter_hierarchy_specs": {
                    "type": "object",
                    "description": "Filter which specs are included at different levels of the Lmod hierarchy based on spec matching",
                    "additionalKeysAreSpecs": true,
                    "additionalProperties": {
                      "type": "array",
                      "default": [],
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                },
                "additionalProperties": {
                  "type": "object",
                  "default": {},
                  "description": "Configuration for individual module file behavior and content customization",
                  "properties": {
                    "filter": {
                      "type": "object",
                      "default": {},
                      "description": "Filter out specific environment variable modifications from module files",
                      "properties": {
                        "exclude_env_vars": {
                          "type": "array",
                          "default": [],
                          "items": {
                            "type": "string"
                          },
                          "description": "List of environment variable names to exclude from module file modifications"
                        }
                      },
                      "additionalProperties": false
                    },
                    "template": {
                      "type": "string",
                      "description": "Path to custom template file for generating module files"
                    },
                    "autoload": {
                      "type": "string",
                      "enum": [
                        "none",
                        "run",
                        "direct",
                        "all"
                      ],
                      "description": "Automatically load dependency modules when this module is loaded"
                    },
                    "prerequisites": {
                      "type": "string",
                      "enum": [
                        "none",
                        "run",
                        "direct",
                        "all"
                      ],
                      "description": "Mark dependency modules as prerequisites instead of autoloading them"
                    },
                    "conflict": {
                      "type": "array",
                      "default": [],
                      "items": {
                        "type": "string"
                      },
                      "description": "List of modules that conflict with this one and should not be loaded simultaneously"
                    },
                    "load": {
                      "type": "array",
                      "default": [],
                      "items": {
                        "type": "string"
                      },
                      "description": "List of additional modules to load when this module is loaded"
                    },
                    "suffixes": {
                      "type": "object",
                      "description": "Add custom suffixes to module names based on spec matching for better readability",
                      "additionalKeysAreSpecs": true,
                      "additionalProperties": {
                        "type": "string"
                      }
                    },
                    "environment": {
                      "type": "object",
                      "description": "Custom environment variable modifications to apply in this module file",
                      "default": {},
                      "properties": {
                        "set": {
                          "description": "Environment variables to set to specific values",
                          "type": "object",
                          "additionalProperties": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              }
                            ]
                          }
                        },
                        "unset": {
                          "description": "Environment variables to remove/unset",
                          "default": [],
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "prepend_path": {
                          "description": "Environment variables to prepend values to (typically PATH-like variables)",
                          "type": "object",
                          "additionalProperties": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              }
                            ]
                          }
                        },
                        "append_path": {
                          "description": "Environment variables to append values to (typically PATH-like variables)",
                          "type": "object",
                          "additionalProperties": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              }
                            ]
                          }
                        },
                        "remove_path": {
                          "description": "Values to remove from PATH-like environment variables",
                          "type": "object",
                          "additionalProperties": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              }
                            ]
                          }
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                }
              },
              "tcl": {
                "type": "object",
                "default": {},
                "description": "Configuration for TCL module files compatible with Environment Modules",
                "additionalKeysAreSpecs": true,
                "properties": {
                  "verbose": {
                    "type": "boolean",
                    "default": false,
                    "description": "Enable verbose output during module file generation"
                  },
                  "hash_length": {
                    "type": "integer",
                    "minimum": 0,
                    "default": 7,
                    "description": "Length of package hash to include in module file names (0-32, shorter hashes may cause naming conflicts)"
                  },
                  "include": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "description": "List of specs to explicitly include for module file generation, even if they would normally be excluded"
                  },
                  "exclude": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "description": "List of specs to exclude from module file generation"
                  },
                  "exclude_implicits": {
                    "type": "boolean",
                    "default": false,
                    "description": "Exclude implicit dependencies from module file generation while still allowing autoloading"
                  },
                  "defaults": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "description": "List of specs for which to create default module symlinks when multiple versions exist"
                  },
                  "hide_implicits": {
                    "type": "boolean",
                    "default": false,
                    "description": "Hide implicit dependency modules from 'module avail' but still allow autoloading (requires module system support)"
                  },
                  "naming_scheme": {
                    "type": "string",
                    "description": "Custom naming scheme for module files using format strings"
                  },
                  "projections": {
                    "type": "object",
                    "description": "Custom directory structure and naming convention for module files using projection format",
                    "properties": {
                      "all": {
                        "type": "string",
                        "description": "Default projection format string used as fallback for all specs that do not match other entries. Uses spec format syntax like \"{name}/{version}/{hash:16}\"."
                      }
                    },
                    "additionalKeysAreSpecs": true,
                    "additionalProperties": {
                      "type": "string",
                      "description": "Projection format string for specs matching this key. Uses spec format syntax supporting tokens like {name}, {version}, {compiler.name}, {^dependency.name}, etc."
                    }
                  },
                  "all": {
                    "type": "object",
                    "default": {},
                    "description": "Default configuration applied to all module files in this module set",
                    "properties": {
                      "filter": {
                        "type": "object",
                        "default": {},
                        "description": "Filter out specific environment variable modifications from module files",
                        "properties": {
                          "exclude_env_vars": {
                            "type": "array",
                            "default": [],
                            "items": {
                              "type": "string"
                            },
                            "description": "List of environment variable names to exclude from module file modifications"
                          }
                        },
                        "additionalProperties": false
                      },
                      "template": {
                        "type": "string",
                        "description": "Path to custom template file for generating module files"
                      },
                      "autoload": {
                        "type": "string",
                        "enum": [
                          "none",
                          "run",
                          "direct",
                          "all"
                        ],
                        "description": "Automatically load dependency modules when this module is loaded"
                      },
                      "prerequisites": {
                        "type": "string",
                        "enum": [
                          "none",
                          "run",
                          "direct",
                          "all"
                        ],
                        "description": "Mark dependency modules as prerequisites instead of autoloading them"
                      },
                      "conflict": {
                        "type": "array",
                        "default": [],
                        "items": {
                          "type": "string"
                        },
                        "description": "List of modules that conflict with this one and should not be loaded simultaneously"
                      },
                      "load": {
                        "type": "array",
                        "default": [],
                        "items": {
                          "type": "string"
                        },
                        "description": "List of additional modules to load when this module is loaded"
                      },
                      "suffixes": {
                        "type": "object",
                        "description": "Add custom suffixes to module names based on spec matching for better readability",
                        "additionalKeysAreSpecs": true,
                        "additionalProperties": {
                          "type": "string"
                        }
                      },
                      "environment": {
                        "type": "object",
                        "description": "Custom environment variable modifications to apply in this module file",
                        "default": {},
                        "properties": {
                          "set": {
                            "description": "Environment variables to set to specific values",
                            "type": "object",
                            "additionalProperties": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                }
                              ]
                            }
                          },
                          "unset": {
                            "description": "Environment variables to remove/unset",
                            "default": [],
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "prepend_path": {
                            "description": "Environment variables to prepend values to (typically PATH-like variables)",
                            "type": "object",
                            "additionalProperties": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                }
                              ]
                            }
                          },
                          "append_path": {
                            "description": "Environment variables to append values to (typically PATH-like variables)",
                            "type": "object",
                            "additionalProperties": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                }
                              ]
                            }
                          },
                          "remove_path": {
                            "description": "Values to remove from PATH-like environment variables",
                            "type": "object",
                            "additionalProperties": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                }
                              ]
                            }
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": {
                  "type": "object",
                  "default": {},
                  "description": "Configuration for individual module file behavior and content customization",
                  "properties": {
                    "filter": {
                      "type": "object",
                      "default": {},
                      "description": "Filter out specific environment variable modifications from module files",
                      "properties": {
                        "exclude_env_vars": {
                          "type": "array",
                          "default": [],
                          "items": {
                            "type": "string"
                          },
                          "description": "List of environment variable names to exclude from module file modifications"
                        }
                      },
                      "additionalProperties": false
                    },
                    "template": {
                      "type": "string",
                      "description": "Path to custom template file for generating module files"
                    },
                    "autoload": {
                      "type": "string",
                      "enum": [
                        "none",
                        "run",
                        "direct",
                        "all"
                      ],
                      "description": "Automatically load dependency modules when this module is loaded"
                    },
                    "prerequisites": {
                      "type": "string",
                      "enum": [
                        "none",
                        "run",
                        "direct",
                        "all"
                      ],
                      "description": "Mark dependency modules as prerequisites instead of autoloading them"
                    },
                    "conflict": {
                      "type": "array",
                      "default": [],
                      "items": {
                        "type": "string"
                      },
                      "description": "List of modules that conflict with this one and should not be loaded simultaneously"
                    },
                    "load": {
                      "type": "array",
                      "default": [],
                      "items": {
                        "type": "string"
                      },
                      "description": "List of additional modules to load when this module is loaded"
                    },
                    "suffixes": {
                      "type": "object",
                      "description": "Add custom suffixes to module names based on spec matching for better readability",
                      "additionalKeysAreSpecs": true,
                      "additionalProperties": {
                        "type": "string"
                      }
                    },
                    "environment": {
                      "type": "object",
                      "description": "Custom environment variable modifications to apply in this module file",
                      "default": {},
                      "properties": {
                        "set": {
                          "description": "Environment variables to set to specific values",
                          "type": "object",
                          "additionalProperties": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              }
                            ]
                          }
                        },
                        "unset": {
                          "description": "Environment variables to remove/unset",
                          "default": [],
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "prepend_path": {
                          "description": "Environment variables to prepend values to (typically PATH-like variables)",
                          "type": "object",
                          "additionalProperties": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              }
                            ]
                          }
                        },
                        "append_path": {
                          "description": "Environment variables to append values to (typically PATH-like variables)",
                          "type": "object",
                          "additionalProperties": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              }
                            ]
                          }
                        },
                        "remove_path": {
                          "description": "Values to remove from PATH-like environment variables",
                          "type": "object",
                          "additionalProperties": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              }
                            ]
                          }
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                }
              },
              "prefix_inspections": {
                "type": "object",
                "description": "Control which package subdirectories are added to environment variables (e.g., bin to PATH, lib to LIBRARY_PATH)",
                "additionalProperties": {
                  "type": "array",
                  "default": [],
                  "items": {
                    "type": "string"
                  },
                  "description": "List of environment variables to update with this prefix-relative path if it exists"
                }
              }
            },
            "additionalProperties": false
          }
        },
        "packages": {
          "type": "object",
          "description": "Package-specific build settings and external package configurations",
          "default": {},
          "properties": {
            "all": {
              "type": "object",
              "description": "Default settings that apply to all packages (can be overridden by package-specific settings)",
              "default": {},
              "deprecatedProperties": [
                {
                  "names": [
                    "compiler"
                  ],
                  "message": "The packages:all:compiler preference has been deprecated in Spack v1.0, and is currently ignored. It will be removed from config in Spack v1.2.",
                  "error": false
                }
              ],
              "properties": {
                "require": {
                  "description": "Package requirements that must be satisfied during concretization",
                  "oneOf": [
                    {
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "one_of": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                },
                                "description": "List of specs where exactly one must be satisfied"
                              },
                              "any_of": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                },
                                "description": "List of specs where at least one must be satisfied"
                              },
                              "spec": {
                                "type": "string",
                                "description": "Single spec requirement that must be satisfied"
                              },
                              "message": {
                                "type": "string",
                                "description": "Custom error message when requirement is not satisfiable"
                              },
                              "when": {
                                "type": "string",
                                "description": "Conditional spec that triggers this requirement"
                              }
                            },
                            "additionalProperties": false
                          },
                          {
                            "type": "string"
                          }
                        ]
                      }
                    },
                    {
                      "type": "string"
                    }
                  ]
                },
                "prefer": {
                  "description": "Strong package preferences that influence concretization without imposing hard constraints",
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "spec": {
                            "type": "string",
                            "description": "Spec constraint to apply"
                          },
                          "message": {
                            "type": "string",
                            "description": "Custom message explaining the constraint"
                          },
                          "when": {
                            "type": "string",
                            "description": "Conditional spec that triggers this constraint"
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "string"
                      }
                    ]
                  }
                },
                "conflict": {
                  "description": "Package conflicts that prevent certain spec combinations",
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "spec": {
                            "type": "string",
                            "description": "Spec constraint to apply"
                          },
                          "message": {
                            "type": "string",
                            "description": "Custom message explaining the constraint"
                          },
                          "when": {
                            "type": "string",
                            "description": "Conditional spec that triggers this constraint"
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "string"
                      }
                    ]
                  }
                },
                "target": {
                  "type": "array",
                  "description": "Ordered list of soft preferences for target architectures for all packages (ignored if the concretizer can reuse existing installations)",
                  "default": [],
                  "items": {
                    "type": "string"
                  }
                },
                "compiler": {
                  "type": "array",
                  "description": "Soft preferences for compiler specs for all packages (deprecated)",
                  "default": [],
                  "items": {
                    "type": "string"
                  }
                },
                "buildable": {
                  "type": "boolean",
                  "description": "Whether packages should be built from source (false prevents building)",
                  "default": true
                },
                "permissions": {
                  "type": "object",
                  "description": "File permissions settings for package installations",
                  "properties": {
                    "read": {
                      "type": "string",
                      "enum": [
                        "user",
                        "group",
                        "world"
                      ],
                      "description": "Who can read the files installed by a package"
                    },
                    "write": {
                      "type": "string",
                      "enum": [
                        "user",
                        "group",
                        "world"
                      ],
                      "description": "Who can write to the files installed by a package"
                    },
                    "group": {
                      "type": "string",
                      "description": "The group that owns the files installed by a package"
                    }
                  },
                  "additionalProperties": false
                },
                "package_attributes": {
                  "type": "object",
                  "description": "Class-level attributes to assign to package instances (accessible in package.py methods)",
                  "additionalProperties": false,
                  "patternProperties": {
                    "^[a-zA-Z_]\\w*$": {}
                  }
                },
                "providers": {
                  "type": "object",
                  "description": "Soft preferences for providers of virtual packages (ignored if the concretizer can reuse existing installations)",
                  "default": {},
                  "additionalProperties": {
                    "type": "array",
                    "description": "Ordered list of preferred providers for this virtual package",
                    "default": [],
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "variants": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  ],
                  "description": "Soft variant preferences as a single spec string or list of variant specifications (ignored if the concretizer can reuse existing installations)"
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": {
            "type": "object",
            "description": "Package-specific settings that override defaults from 'all'",
            "default": {},
            "properties": {
              "require": {
                "description": "Package requirements that must be satisfied during concretization",
                "oneOf": [
                  {
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "one_of": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "description": "List of specs where exactly one must be satisfied"
                            },
                            "any_of": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "description": "List of specs where at least one must be satisfied"
                            },
                            "spec": {
                              "type": "string",
                              "description": "Single spec requirement that must be satisfied"
                            },
                            "message": {
                              "type": "string",
                              "description": "Custom error message when requirement is not satisfiable"
                            },
                            "when": {
                              "type": "string",
                              "description": "Conditional spec that triggers this requirement"
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "string"
                        }
                      ]
                    }
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "prefer": {
                "description": "Strong package preferences that influence concretization without imposing hard constraints",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "spec": {
                          "type": "string",
                          "description": "Spec constraint to apply"
                        },
                        "message": {
                          "type": "string",
                          "description": "Custom message explaining the constraint"
                        },
                        "when": {
                          "type": "string",
                          "description": "Conditional spec that triggers this constraint"
                        }
                      },
                      "additionalProperties": false
                    },
                    {
                      "type": "string"
                    }
                  ]
                }
              },
              "conflict": {
                "description": "Package conflicts that prevent certain spec combinations",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "spec": {
                          "type": "string",
                          "description": "Spec constraint to apply"
                        },
                        "message": {
                          "type": "string",
                          "description": "Custom message explaining the constraint"
                        },
                        "when": {
                          "type": "string",
                          "description": "Conditional spec that triggers this constraint"
                        }
                      },
                      "additionalProperties": false
                    },
                    {
                      "type": "string"
                    }
                  ]
                }
              },
              "version": {
                "type": "array",
                "description": "Ordered list of soft preferences for versions for this package (ignored if the concretizer can reuse existing installations)",
                "default": [],
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "number"
                    }
                  ]
                }
              },
              "buildable": {
                "type": "boolean",
                "description": "Whether this package should be built from source (false prevents building)",
                "default": true
              },
              "permissions": {
                "type": "object",
                "description": "File permissions settings for package installations",
                "properties": {
                  "read": {
                    "type": "string",
                    "enum": [
                      "user",
                      "group",
                      "world"
                    ],
                    "description": "Who can read the files installed by a package"
                  },
                  "write": {
                    "type": "string",
                    "enum": [
                      "user",
                      "group",
                      "world"
                    ],
                    "description": "Who can write to the files installed by a package"
                  },
                  "group": {
                    "type": "string",
                    "description": "The group that owns the files installed by a package"
                  }
                },
                "additionalProperties": false
              },
              "package_attributes": {
                "type": "object",
                "description": "Class-level attributes to assign to package instances (accessible in package.py methods)",
                "additionalProperties": false,
                "patternProperties": {
                  "^[a-zA-Z_]\\w*$": {}
                }
              },
              "variants": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                ],
                "description": "Soft variant preferences as a single spec string or list of variant specifications (ignored if the concretizer can reuse existing installations)"
              },
              "externals": {
                "type": "array",
                "description": "List of external, system-installed instances of this package",
                "items": {
                  "type": "object",
                  "properties": {
                    "spec": {
                      "type": "string",
                      "description": "Spec string describing this external package instance. Typically name@version and relevant variants"
                    },
                    "prefix": {
                      "type": "string",
                      "description": "Installation prefix path for this external package (typically /usr, *excluding* bin/, lib/, etc.)"
                    },
                    "modules": {
                      "type": "array",
                      "description": "Environment modules to load for this external package",
                      "items": {
                        "type": "string"
                      }
                    },
                    "id": {
                      "type": "string"
                    },
                    "extra_attributes": {
                      "type": "object",
                      "description": "Additional information needed by the package to use this external",
                      "properties": {
                        "compilers": {
                          "type": "object",
                          "description": "Compiler executable paths for external compiler packages",
                          "properties": {
                            "c": {
                              "type": "string",
                              "description": "Path to the C compiler executable (e.g. /usr/bin/gcc)"
                            },
                            "cxx": {
                              "type": "string",
                              "description": "Path to the C++ compiler executable (e.g. /usr/bin/g++)"
                            },
                            "fortran": {
                              "type": "string",
                              "description": "Path to the Fortran compiler executable (e.g. /usr/bin/gfortran)"
                            }
                          },
                          "additionalProperties": false,
                          "patternProperties": {
                            "^\\w": {
                              "type": "string"
                            }
                          }
                        },
                        "environment": {
                          "type": "object",
                          "description": "Environment variable modifications to apply at runtime",
                          "default": {},
                          "properties": {
                            "set": {
                              "description": "Environment variables to set to specific values",
                              "type": "object",
                              "additionalProperties": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "number"
                                  }
                                ]
                              }
                            },
                            "unset": {
                              "description": "Environment variables to remove/unset",
                              "default": [],
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "prepend_path": {
                              "description": "Environment variables to prepend values to (typically PATH-like variables)",
                              "type": "object",
                              "additionalProperties": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "number"
                                  }
                                ]
                              }
                            },
                            "append_path": {
                              "description": "Environment variables to append values to (typically PATH-like variables)",
                              "type": "object",
                              "additionalProperties": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "number"
                                  }
                                ]
                              }
                            },
                            "remove_path": {
                              "description": "Values to remove from PATH-like environment variables",
                              "type": "object",
                              "additionalProperties": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "number"
                                  }
                                ]
                              }
                            }
                          },
                          "additionalProperties": false
                        },
                        "extra_rpaths": {
                          "type": "array",
                          "default": [],
                          "items": {
                            "type": "string"
                          },
                          "description": "List of extra rpaths to inject by Spack's compiler wrappers"
                        },
                        "implicit_rpaths": {
                          "anyOf": [
                            {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            {
                              "type": "boolean"
                            }
                          ],
                          "description": "List of non-default link directories to register at runtime as rpaths"
                        },
                        "flags": {
                          "type": "object",
                          "properties": {
                            "cflags": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Flags for C compiler, e.g. -std=c11"
                            },
                            "cxxflags": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Flags for C++ compiler, e.g. -std=c++14"
                            },
                            "fflags": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Flags for Fortran 77 compiler, e.g. -ffixed-line-length-none"
                            },
                            "cppflags": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Flags for C preprocessor, e.g. -DFOO=1"
                            },
                            "ldflags": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Flags passed to the compiler driver during linking, e.g. -Wl,--gc-sections"
                            },
                            "ldlibs": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Flags for linker libraries, e.g. -lpthread"
                            }
                          },
                          "description": "Flags to pass to the compiler during compilation and linking",
                          "additionalProperties": false
                        }
                      },
                      "additionalProperties": {
                        "type": "string"
                      }
                    },
                    "dependencies": {
                      "type": "array",
                      "description": "List of dependencies for this external package, specifying dependency relationships explicitly",
                      "items": {
                        "type": "object",
                        "description": "Dependency specification for an external package",
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Explicit reference ID to another external package (provides unambiguous reference)"
                          },
                          "spec": {
                            "type": "string",
                            "description": "Spec string that matches an available external package"
                          },
                          "deptypes": {
                            "oneOf": [
                              {
                                "type": "string",
                                "description": "Single dependency type (e.g., 'build', 'link', 'run', 'test')"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "description": "Dependency type (e.g., 'build', 'link', 'run', 'test')"
                                },
                                "description": "List of dependency types (e.g., ['build', 'link'])"
                              }
                            ],
                            "description": "Dependency types; if not specified, inferred from package recipe"
                          },
                          "virtuals": {
                            "type": "string",
                            "description": "Virtual package name this dependency provides (e.g., 'mpi')"
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "spec"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "additionalProperties": false
          }
        },
        "repos": {
          "description": "Configuration for package repositories that Spack searches for packages",
          "oneOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Path to a Spack package repository directory"
              },
              "description": "Legacy format: list of local paths to package repository directories"
            },
            {
              "type": "object",
              "description": "Named repositories mapping configuration names to repository definitions",
              "additionalProperties": {
                "oneOf": [
                  {
                    "type": "string",
                    "description": "Path to a local Spack package repository directory containing repo.yaml and packages/"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "git": {
                        "type": "string",
                        "description": "Git repository URL for remote package repository"
                      },
                      "branch": {
                        "type": "string",
                        "description": "Git branch name to checkout (default branch if not specified)"
                      },
                      "commit": {
                        "type": "string",
                        "description": "Specific git commit hash to pin the repository to"
                      },
                      "tag": {
                        "type": "string",
                        "description": "Git tag name to pin the repository to"
                      },
                      "destination": {
                        "type": "string",
                        "description": "Custom local directory path where the Git repository should be cloned"
                      },
                      "paths": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "List of relative paths (from the Git repository root) that contain Spack package repositories (overrides spack-repo-index.yaml)"
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              }
            }
          ],
          "default": {}
        },
        "toolchains": {
          "type": "object",
          "default": {},
          "description": "Define named compiler sets (toolchains) that group compiler constraints under a single user-defined name for easy reference with specs like %my_toolchain",
          "additionalProperties": {
            "description": "Named toolchain definition that can be referenced in specs to apply a complex set of compiler choices for C, C++, and Fortran",
            "oneOf": [
              {
                "type": "string",
                "description": "Simple toolchain alias containing a spec string directly"
              },
              {
                "type": "array",
                "description": "List of conditional compiler constraints and specifications that define the toolchain behavior",
                "items": {
                  "type": "object",
                  "description": "Individual toolchain entry with a spec constraint and optional condition for when it applies",
                  "properties": {
                    "spec": {
                      "type": "string",
                      "description": "Spec constraint to apply such as compiler selection (%c=llvm), flags (cflags=-O3), or other virtual dependencies (%mpi=openmpi)"
                    },
                    "when": {
                      "type": "string",
                      "description": "Condition that determines when this spec constraint is applied, typically checking for language dependencies like %c, %cxx, %fortran, or other virtual packages like %mpi"
                    }
                  }
                }
              }
            ],
            "default": []
          }
        },
        "upstreams": {
          "type": "object",
          "default": {},
          "description": "Configuration for chaining Spack installations. Point this Spack instance to other Spack installations to use their installed packages",
          "additionalProperties": {
            "type": "object",
            "default": {},
            "properties": {
              "install_tree": {
                "type": "string",
                "description": "Path to the opt/spack directory of the upstream Spack installation (or the install_tree root from its config.yaml)"
              },
              "modules": {
                "type": "object",
                "description": "Configuration to use modules generated by the upstream Spack instance",
                "properties": {
                  "tcl": {
                    "type": "string",
                    "description": "Path to TCL modules directory of the upstream instance"
                  },
                  "lmod": {
                    "type": "string",
                    "description": "Path to Lmod modules directory of the upstream instance"
                  }
                }
              }
            },
            "description": "Named upstream Spack instance configuration",
            "additionalProperties": false
          }
        },
        "view": {
          "description": "Environment filesystem view configuration for creating a directory with traditional structure where all files of installed packages are linked",
          "anyOf": [
            {
              "type": "boolean",
              "description": "Enable or disable default views. If 'true', the view is generated under .spack-env/view"
            },
            {
              "type": "string",
              "description": "Path where the default view should be created"
            },
            {
              "type": "object",
              "description": "Advanced view configuration with one or more named view descriptors",
              "additionalProperties": {
                "description": "Named view descriptor (use 'default' for the view activated with environment)",
                "required": [
                  "root"
                ],
                "properties": {
                  "root": {
                    "type": "string",
                    "description": "Root directory path where the view will be created"
                  },
                  "link": {
                    "enum": [
                      "roots",
                      "all",
                      "run"
                    ],
                    "description": "Which specs to include: 'all' (environment roots with transitive run+link deps), 'run' (environment roots with transitive run deps), 'roots' (environment roots only)"
                  },
                  "link_type": {
                    "type": "string",
                    "enum": [
                      "symlink",
                      "hardlink",
                      "copy"
                    ],
                    "description": "How files are linked in the view: 'symlink' (default), 'hardlink', or 'copy'"
                  },
                  "select": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "List of specs to include in the view (default: select everything)"
                  },
                  "exclude": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "List of specs to exclude from the view (default: exclude nothing)"
                  },
                  "projections": {
                    "type": "object",
                    "description": "Customize directory structure and naming schemes by mapping specs to format strings.",
                    "properties": {
                      "all": {
                        "type": "string",
                        "description": "Default projection format string used as fallback for all specs that do not match other entries. Uses spec format syntax like \"{name}/{version}/{hash:16}\"."
                      }
                    },
                    "additionalKeysAreSpecs": true,
                    "additionalProperties": {
                      "type": "string",
                      "description": "Projection format string for specs matching this key. Uses spec format syntax supporting tokens like {name}, {version}, {compiler.name}, {^dependency.name}, etc."
                    }
                  }
                },
                "additionalProperties": false,
                "type": "object"
              }
            }
          ]
        },
        "specs": {
          "type": "array",
          "description": "List of specs to include in the environment, supporting both simple specs and matrix configurations",
          "default": [],
          "items": {
            "anyOf": [
              {
                "type": "object",
                "description": "Matrix configuration for generating multiple specs from combinations of constraints",
                "properties": {
                  "matrix": {
                    "type": "array",
                    "description": "List of spec constraint lists whose cross product generates multiple specs",
                    "items": {
                      "type": "array",
                      "description": "List of spec constraints for this matrix dimension",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "exclude": {
                    "type": "array",
                    "description": "List of specific spec combinations to exclude from the matrix",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "string",
                "description": "Simple spec string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "include_concrete": {
          "type": "array",
          "default": [],
          "description": "List of paths to other environments. Includes concrete specs from their spack.lock files without modifying the source environments. Useful for phased deployments where you want to build on existing concrete specs.",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
