Skip to content

Restore _group_ package overrides for Hydra 1.4 - #3536

Merged
omry merged 1 commit into
mainfrom
pr3536
Oct 11, 2026
Merged

omry merged 1 commit into
mainfrom
pr3536

Conversation

@omry

@omry omry commented Oct 11, 2026 •

Copy link
Copy Markdown
Collaborator

Motivation

Fixes #3535. The 1.4 cleanup removed nondeprecated _group_ expansion from
Defaults List packages. Nested overrides consequently fail to compose, while
ordinary includes and CLI package relocation silently use a literal _group_
destination.

Have you read the contributing guidelines?

Yes.

Prior design alignment

The maintainer requested restoring the supported behavior in #3535 and keeping
this release-candidate correction out of the final release notes.

Changes

Restore group-derived absolute package expansion through the existing shared
path, including file/group entries, suffixes, nested overrides, and CLI appends.
Canonicalize symbolic CLI selection and deletion keys through the same package
resolution used by Defaults List entries, including interpolated selections.
Add composed-config regression coverage with relocated parent packages and
retain CLI group-selection precedence. Update the package reference and
migration inventory to distinguish this support from removed package headers.
Expand only the leading package keyword, preserve literal identifiers, and
derive packages after deferred config selections have resolved their group.

Keep this rc1 regression correction in a separate 1.4.0rc2 Towncrier
collection. Document rendering the candidate notes and exclude that collection
from the final 1.4.0 notes.

Test Plan

  • The original eight restoration cases fail before the restoration and pass afterward.
  • Package, Defaults List, and slash-normalization tests: 172 passed, including 25 package cases.
  • Complete test_core-3.14 nox session: 3,818 core tests passed, plus all standalone apps and example plugins. Used process-local CC=gcc because the managed interpreter's default compiler, clang, is unavailable.
  • Changed Python files pass Ruff checks and formatting.
  • The core type check, security scan, and new-file copyright checks pass.
  • Actual Towncrier drafts include the correction for rc2 and exclude it from the final release.

Related Issues and PRs

The existing inability to override a deferred slash-containing choice using
its resolved group key also reproduces without _group_; it is separate
follow-up work, outside this restoration.

@omry omry added this to the Hydra 1.4.0 milestone Oct 11, 2026
Comment thread hydra/core/default_element.py Outdated
@omry

omry commented Oct 11, 2026 •

Copy link
Copy Markdown
Collaborator Author

PR-cycle state — maintained automatically. Do not edit by hand.

Mechanical PR-cycle state (JSON)
{
  "approval": {
    "candidate_revision_fingerprint": "sha256:7145d984929afb34f47b11ca6e340f0a24bf5f11f558042f50694d3d6082d5c9",
    "evidence": {
      "attestations": [],
      "candidate_revision_fingerprint": "sha256:7145d984929afb34f47b11ca6e340f0a24bf5f11f558042f50694d3d6082d5c9",
      "check_conclusions": [
        {
          "conclusion": "SUCCESS",
          "name": "Analyze (javascript)",
          "run_id": 114425577424
        },
        {
          "conclusion": "SUCCESS",
          "name": "Analyze (python)",
          "run_id": 114425577269
        },
        {
          "conclusion": "SUCCESS",
          "name": "CodeQL",
          "run_id": 114425743529
        },
        {
          "conclusion": "SUCCESS",
          "name": "Gitar",
          "run_id": 114425566206
        },
        {
          "conclusion": "SUCCESS",
          "name": "build",
          "run_id": 114425577276
        },
        {
          "conclusion": "SUCCESS",
          "name": "license/cla",
          "status_id": 56079299738
        },
        {
          "conclusion": "SUCCESS",
          "name": "lint",
          "run_id": 114425629331
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.10)",
          "run_id": 114425629545
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.11)",
          "run_id": 114425629510
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.12)",
          "run_id": 114425629532
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.13)",
          "run_id": 114425629522
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.14)",
          "run_id": 114425629561
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.10)",
          "run_id": 114425629466
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.11)",
          "run_id": 114425629562
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.12)",
          "run_id": 114425629525
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.13)",
          "run_id": 114425629504
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.14)",
          "run_id": 114425629595
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.10)",
          "run_id": 114425629514
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.11)",
          "run_id": 114425629589
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.12)",
          "run_id": 114425629555
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.13)",
          "run_id": 114425629485
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.14)",
          "run_id": 114425629612
        }
      ],
      "delivery_deferral_ledger_digest": "sha256:1828b8626882bcbde87e7f3a05eee5bf07d4f8c36ca399c5fe1f601020a583d9",
      "finding_dispositions_digest": "sha256:f124b44e7f13d898170103004513382bf41043b0d418f50d4fc145b625726928",
      "operation_identity": "sha256:13d4728b34bce13a077ae600b24945fe7156a00caa68de89e0eeec246148e081",
      "review_request": {
        "body_digest": "sha256:20f4056633cd02e67c08400b14cdec311222941de5f62920297f620ce99f4023",
        "id": 6107082545
      },
      "review_result": {
        "body_digest": "sha256:e7f59cfe2276656e78b854f69d7dc24a4bdef66645d35ce3294f2a917e4c8db5",
        "id": 6107099867
      }
    },
    "evidence_fingerprint": "sha256:7bafafa134d7a20ca71201f4333416146fee49131b6ac74a2b43dbb8efb4cec0",
    "head_sha": "2089a9a8307c0eadd004377f8c718681a6cc4316",
    "operation_identity": "sha256:13d4728b34bce13a077ae600b24945fe7156a00caa68de89e0eeec246148e081",
    "review_request_id": 6107082545,
    "review_result_id": 6107099867,
    "status": "approved-evidence-recorded"
  },
  "candidate_revision_fingerprint": "sha256:7145d984929afb34f47b11ca6e340f0a24bf5f11f558042f50694d3d6082d5c9",
  "check_conclusions": [
    {
      "conclusion": "SUCCESS",
      "name": "Analyze (javascript)",
      "run_id": 114425577424
    },
    {
      "conclusion": "SUCCESS",
      "name": "Analyze (python)",
      "run_id": 114425577269
    },
    {
      "conclusion": "SUCCESS",
      "name": "CodeQL",
      "run_id": 114425743529
    },
    {
      "conclusion": "SUCCESS",
      "name": "Gitar",
      "run_id": 114425566206
    },
    {
      "conclusion": "SUCCESS",
      "name": "build",
      "run_id": 114425577276
    },
    {
      "conclusion": "SUCCESS",
      "name": "license/cla",
      "status_id": 56079299738
    },
    {
      "conclusion": "SUCCESS",
      "name": "lint",
      "run_id": 114425629331
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_linux (3.10)",
      "run_id": 114425629545
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_linux (3.11)",
      "run_id": 114425629510
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_linux (3.12)",
      "run_id": 114425629532
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_linux (3.13)",
      "run_id": 114425629522
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_linux (3.14)",
      "run_id": 114425629561
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_macos (3.10)",
      "run_id": 114425629466
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_macos (3.11)",
      "run_id": 114425629562
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_macos (3.12)",
      "run_id": 114425629525
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_macos (3.13)",
      "run_id": 114425629504
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_macos (3.14)",
      "run_id": 114425629595
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_win (3.10)",
      "run_id": 114425629514
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_win (3.11)",
      "run_id": 114425629589
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_win (3.12)",
      "run_id": 114425629555
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_win (3.13)",
      "run_id": 114425629485
    },
    {
      "conclusion": "SUCCESS",
      "name": "test_win (3.14)",
      "run_id": 114425629612
    }
  ],
  "check_observations": [
    {
      "checks": [
        {
          "conclusion": "SUCCESS",
          "name": "Analyze (javascript)",
          "run_id": 114422378890,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321195/job/114422378890"
        },
        {
          "conclusion": "SUCCESS",
          "name": "Analyze (python)",
          "run_id": 114422378661,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321195/job/114422378661"
        },
        {
          "conclusion": "SUCCESS",
          "name": "CodeQL",
          "run_id": 114422566436,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/runs/114422566436"
        },
        {
          "conclusion": "SUCCESS",
          "name": "Gitar",
          "run_id": 114422372668,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/runs/114422372668"
        },
        {
          "conclusion": "SUCCESS",
          "name": "build",
          "run_id": 114422378736,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321211/job/114422378736"
        },
        {
          "name": "license/cla",
          "status": "success",
          "status_id": 56078861634,
          "status_state": "success",
          "url": "https://cla-assistant.io/hydra-ecosystem/hydra?pullRequest=3536"
        },
        {
          "conclusion": "SUCCESS",
          "name": "lint",
          "run_id": 114422380382,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380382"
        },
        {
          "name": "test_linux (3.10)",
          "run_id": 114422380441,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380441"
        },
        {
          "name": "test_linux (3.11)",
          "run_id": 114422380257,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380257"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.12)",
          "run_id": 114422380460,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380460"
        },
        {
          "name": "test_linux (3.13)",
          "run_id": 114422380388,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380388"
        },
        {
          "name": "test_linux (3.14)",
          "run_id": 114422380335,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380335"
        },
        {
          "name": "test_macos (3.10)",
          "run_id": 114422380486,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380486"
        },
        {
          "name": "test_macos (3.11)",
          "run_id": 114422380338,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380338"
        },
        {
          "name": "test_macos (3.12)",
          "run_id": 114422380455,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380455"
        },
        {
          "name": "test_macos (3.13)",
          "run_id": 114422380497,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380497"
        },
        {
          "name": "test_macos (3.14)",
          "run_id": 114422380385,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380385"
        },
        {
          "name": "test_win (3.10)",
          "run_id": 114422380811,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380811"
        },
        {
          "name": "test_win (3.11)",
          "run_id": 114422380349,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380349"
        },
        {
          "name": "test_win (3.12)",
          "run_id": 114422380443,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380443"
        },
        {
          "name": "test_win (3.13)",
          "run_id": 114422380484,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380484"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.14)",
          "run_id": 114422380410,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38123321138/job/114422380410"
        }
      ],
      "head_sha": "afd599eb0b84ec0b4785bc4d0c48532551fedd89",
      "id": "sha256:9467721881a0a0f299b79561d060d1bd091f16f033d7a6a1628e9daa68f03240",
      "required_checks": [
        "Analyze (javascript)",
        "Analyze (python)",
        "CodeQL",
        "Gitar",
        "build",
        "license/cla",
        "lint",
        "test_linux (3.10)",
        "test_linux (3.11)",
        "test_linux (3.12)",
        "test_linux (3.13)",
        "test_linux (3.14)",
        "test_macos (3.10)",
        "test_macos (3.11)",
        "test_macos (3.12)",
        "test_macos (3.13)",
        "test_macos (3.14)",
        "test_win (3.10)",
        "test_win (3.11)",
        "test_win (3.12)",
        "test_win (3.13)",
        "test_win (3.14)"
      ],
      "status": "pending"
    },
    {
      "checks": [
        {
          "conclusion": "SUCCESS",
          "name": "Analyze (javascript)",
          "run_id": 114417823730,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783631/job/114417823730"
        },
        {
          "conclusion": "SUCCESS",
          "name": "Analyze (python)",
          "run_id": 114417823892,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783631/job/114417823892"
        },
        {
          "conclusion": "SUCCESS",
          "name": "CodeQL",
          "run_id": 114417961263,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/runs/114417961263"
        },
        {
          "conclusion": "SUCCESS",
          "name": "Gitar",
          "run_id": 114417826292,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/runs/114417826292"
        },
        {
          "conclusion": "SUCCESS",
          "name": "build",
          "run_id": 114417823856,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783642/job/114417823856"
        },
        {
          "conclusion": "SUCCESS",
          "name": "ensure-backlog-branch",
          "run_id": 114417823933,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783643/job/114417823933"
        },
        {
          "name": "license/cla",
          "status": "success",
          "status_id": 56078254497,
          "status_state": "success",
          "url": "https://cla-assistant.io/hydra-ecosystem/hydra?pullRequest=3536"
        },
        {
          "conclusion": "SUCCESS",
          "name": "lint",
          "run_id": 114417823816,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417823816"
        },
        {
          "conclusion": "SUCCESS",
          "name": "process",
          "run_id": 114417836188,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783643/job/114417836188"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.10)",
          "run_id": 114417823956,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417823956"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.11)",
          "run_id": 114417824060,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417824060"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.12)",
          "run_id": 114417823987,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417823987"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.13)",
          "run_id": 114417823944,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417823944"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.14)",
          "run_id": 114417824027,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417824027"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.10)",
          "run_id": 114417823993,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417823993"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.11)",
          "run_id": 114417823953,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417823953"
        },
        {
          "name": "test_macos (3.12)",
          "run_id": 114417824006,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417824006"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.13)",
          "run_id": 114417824089,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417824089"
        },
        {
          "name": "test_macos (3.14)",
          "run_id": 114417824021,
          "run_status": "in_progress",
          "status": "pending",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417824021"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.10)",
          "run_id": 114417823903,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417823903"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.11)",
          "run_id": 114417824042,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417824042"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.12)",
          "run_id": 114417824026,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417824026"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.13)",
          "run_id": 114417824009,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417824009"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.14)",
          "run_id": 114417824115,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38121783624/job/114417824115"
        }
      ],
      "head_sha": "5298cdc6f9fb7b6a8991cf32f50490a51779707a",
      "id": "sha256:a2ee0746b67fe483d174fe6aa7102713083654191b328ea0828cdac958aff701",
      "required_checks": [
        "Analyze (javascript)",
        "Analyze (python)",
        "CodeQL",
        "Gitar",
        "build",
        "ensure-backlog-branch",
        "license/cla",
        "lint",
        "process",
        "test_linux (3.10)",
        "test_linux (3.11)",
        "test_linux (3.12)",
        "test_linux (3.13)",
        "test_linux (3.14)",
        "test_macos (3.10)",
        "test_macos (3.11)",
        "test_macos (3.12)",
        "test_macos (3.13)",
        "test_macos (3.14)",
        "test_win (3.10)",
        "test_win (3.11)",
        "test_win (3.12)",
        "test_win (3.13)",
        "test_win (3.14)"
      ],
      "status": "pending"
    },
    {
      "checks": [
        {
          "conclusion": "SUCCESS",
          "name": "Analyze (javascript)",
          "run_id": 114425577424,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381641/job/114425577424"
        },
        {
          "conclusion": "SUCCESS",
          "name": "Analyze (python)",
          "run_id": 114425577269,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381641/job/114425577269"
        },
        {
          "conclusion": "SUCCESS",
          "name": "CodeQL",
          "run_id": 114425743529,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/runs/114425743529"
        },
        {
          "conclusion": "SUCCESS",
          "name": "Gitar",
          "run_id": 114425566206,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/runs/114425566206"
        },
        {
          "conclusion": "SUCCESS",
          "name": "build",
          "run_id": 114425577276,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381690/job/114425577276"
        },
        {
          "name": "license/cla",
          "status": "success",
          "status_id": 56079299738,
          "status_state": "success",
          "url": "https://cla-assistant.io/hydra-ecosystem/hydra?pullRequest=3536"
        },
        {
          "conclusion": "SUCCESS",
          "name": "lint",
          "run_id": 114425629331,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629331"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.10)",
          "run_id": 114425629545,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629545"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.11)",
          "run_id": 114425629510,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629510"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.12)",
          "run_id": 114425629532,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629532"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.13)",
          "run_id": 114425629522,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629522"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_linux (3.14)",
          "run_id": 114425629561,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629561"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.10)",
          "run_id": 114425629466,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629466"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.11)",
          "run_id": 114425629562,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629562"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.12)",
          "run_id": 114425629525,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629525"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.13)",
          "run_id": 114425629504,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629504"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_macos (3.14)",
          "run_id": 114425629595,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629595"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.10)",
          "run_id": 114425629514,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629514"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.11)",
          "run_id": 114425629589,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629589"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.12)",
          "run_id": 114425629555,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629555"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.13)",
          "run_id": 114425629485,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629485"
        },
        {
          "conclusion": "SUCCESS",
          "name": "test_win (3.14)",
          "run_id": 114425629612,
          "run_status": "completed",
          "status": "success",
          "url": "https://github.com/hydra-ecosystem/hydra/actions/runs/38124381589/job/114425629612"
        }
      ],
      "head_sha": "2089a9a8307c0eadd004377f8c718681a6cc4316",
      "id": "sha256:ad293505f448712b7e7a06bcf6b0d2e63d06da07640d4e8035ac18f1e12f5238",
      "required_checks": [
        "Analyze (javascript)",
        "Analyze (python)",
        "CodeQL",
        "Gitar",
        "build",
        "license/cla",
        "lint",
        "test_linux (3.10)",
        "test_linux (3.11)",
        "test_linux (3.12)",
        "test_linux (3.13)",
        "test_linux (3.14)",
        "test_macos (3.10)",
        "test_macos (3.11)",
        "test_macos (3.12)",
        "test_macos (3.13)",
        "test_macos (3.14)",
        "test_win (3.10)",
        "test_win (3.11)",
        "test_win (3.12)",
        "test_win (3.13)",
        "test_win (3.14)"
      ],
      "status": "success"
    }
  ],
  "delivery_deferral_ledger_digest": "sha256:1828b8626882bcbde87e7f3a05eee5bf07d4f8c36ca399c5fe1f601020a583d9",
  "delivery_deferrals": [
    {
      "evidence": [
        "Without any _group_ package override, composing tests/defaults_list/data/slash_normalization/deferred_interpolation with group_a/sub_group=item raises Could not override group_a/sub_group despite suggesting that exact key",
        "The restoration and correction branches only expand explicit _group_ packages; package=None follows unchanged code"
      ],
      "id": "deferred-choice-cli-normalization",
      "next_action": "Track the existing deferred choice CLI override limitation separately from package restoration",
      "owner": "Hydra maintainers",
      "scope": "Separate existing Defaults List normalization and override-matching behavior",
      "status": "deferred"
    }
  ],
  "findings": [
    {
      "disposition": "fixed",
      "evidence": [
        "Two literal-package composition probes and a repeated-parent-resolution probe fail on the reviewed head",
        "Corrected head 2089a9a8 passed 172 focused tests and complete nox validation with 3818 core tests; all review threads resolved; fresh exact-head review is clean and all 22 CI checks passed"
      ],
      "id": 4240738882,
      "invariant": "Only the initial _group_ package keyword is symbolic; ordinary identifiers remain literal and repeated parent resolution is idempotent",
      "paths": [
        "hydra/core/default_element.py",
        "tests/defaults_list/test_group_package.py"
      ],
      "status": "resolved"
    },
    {
      "disposition": "fixed",
      "evidence": [
        "Both interpolated group and suffixed-package probes compose into stale packages on the reviewed head",
        "Corrected head 2089a9a8 passed 172 focused tests and complete nox validation with 3818 core tests; all review threads resolved; fresh exact-head review is clean and all 22 CI checks passed"
      ],
      "id": 4240738884,
      "invariant": "The _group_ package is derived from the actual resolved config group, including deferred slash-containing interpolation",
      "paths": [
        "hydra/core/default_element.py",
        "tests/defaults_list/test_group_package.py"
      ],
      "status": "resolved"
    },
    {
      "disposition": "fixed",
      "evidence": [
        "Exact-head review identified symbolic CLI key and deferred selection package mismatches",
        "Corrected head 2089a9a8 passed 172 focused tests and complete nox validation with 3818 core tests; all review threads resolved; fresh exact-head review is clean and all 22 CI checks passed"
      ],
      "id": 4240821477,
      "invariant": "Symbolic group package overrides have the same canonical identity in Defaults List entries and CLI matching, including interpolated selections",
      "paths": [
        "hydra/core/default_element.py",
        "hydra/_internal/defaults_list.py",
        "tests/defaults_list/test_group_package.py"
      ],
      "status": "resolved"
    }
  ],
  "pr": {
    "base_ref": "main",
    "base_sha": "29dd3884e09c1fca50df1b0d62bfe7116a6b9600",
    "body_digest": "sha256:d757bb1920d6d69d7f8b556895b145af48d9ce3ecf1eb31d2a0b7193974c56ff",
    "diff_digest": "sha256:4c287bf8c6df4711c688f24dea3437928127d9f0c48d28cc0f64b76b9ef528f5",
    "head_ref": "pr3536",
    "head_sha": "2089a9a8307c0eadd004377f8c718681a6cc4316",
    "pr": 3536,
    "repository": "hydra-ecosystem/hydra",
    "scope_authority": [],
    "title_digest": "sha256:6ddb677d1f854a2325918a8adf18fc20a77bd03345c46b2eb295226069883c73"
  },
  "record_version": 10,
  "review_observations": [],
  "review_requests": [
    {
      "base_established_at": "2026-10-11T07:33:40Z",
      "base_ref": "main",
      "base_sha": "29dd3884e09c1fca50df1b0d62bfe7116a6b9600",
      "body_digest": "sha256:6232dbe589130cc43b6d2f7e95e1af57bf73e20a76e0bfdb4dd38c682d820f48",
      "created_at": "2026-10-11T07:38:44Z",
      "head_sha": "5298cdc6f9fb7b6a8991cf32f50490a51779707a",
      "id": 6106755909,
      "kind": "regular-review"
    },
    {
      "base_established_at": "2026-10-11T07:33:40Z",
      "base_ref": "main",
      "base_sha": "29dd3884e09c1fca50df1b0d62bfe7116a6b9600",
      "body_digest": "sha256:9f2227a02941b4897b45d12242a4d24f1a9e8595c3b8e557d23e707898599390",
      "created_at": "2026-10-11T08:05:43Z",
      "head_sha": "afd599eb0b84ec0b4785bc4d0c48532551fedd89",
      "id": 6106961051,
      "kind": "regular-review"
    },
    {
      "base_established_at": "2026-10-11T07:33:40Z",
      "base_ref": "main",
      "base_sha": "29dd3884e09c1fca50df1b0d62bfe7116a6b9600",
      "body_digest": "sha256:20f4056633cd02e67c08400b14cdec311222941de5f62920297f620ce99f4023",
      "created_at": "2026-10-11T08:21:49Z",
      "head_sha": "2089a9a8307c0eadd004377f8c718681a6cc4316",
      "id": 6107082545,
      "kind": "regular-review"
    }
  ],
  "review_results": [
    {
      "base_ref": "main",
      "base_sha": "29dd3884e09c1fca50df1b0d62bfe7116a6b9600",
      "body_digest": "sha256:3c82f1a2f0f284c0bfe2c7330800b64c8f6a2716f0c3d0c91f8d233aed3cfb44",
      "commit_id": "5298cdc6f9fb7b6a8991cf32f50490a51779707a",
      "id": 5482403830,
      "inline_message_ids": [
        4240738882,
        4240738884
      ],
      "request_comment_id": 6106755909,
      "result_kind": "findings",
      "status": "result",
      "submitted_at": "2026-10-11T07:41:43Z",
      "unresolved_thread_ids": [
        "PRRT_kwDOC2wWEs6rLb5N",
        "PRRT_kwDOC2wWEs6rLeus",
        "PRRT_kwDOC2wWEs6rLeuu"
      ]
    },
    {
      "base_ref": "main",
      "base_sha": "29dd3884e09c1fca50df1b0d62bfe7116a6b9600",
      "body_digest": "sha256:0a509ec9a18b314cff98d998ddbaa321e18879be1a7e03f117aaee756e92e4ac",
      "commit_id": "afd599eb0b84ec0b4785bc4d0c48532551fedd89",
      "id": 5482495246,
      "inline_message_ids": [
        4240821477
      ],
      "request_comment_id": 6106961051,
      "result_kind": "findings",
      "status": "result",
      "submitted_at": "2026-10-11T08:08:25Z",
      "unresolved_thread_ids": [
        "PRRT_kwDOC2wWEs6rLrWc"
      ]
    },
    {
      "base_ref": "main",
      "base_sha": "29dd3884e09c1fca50df1b0d62bfe7116a6b9600",
      "body_digest": "sha256:e7f59cfe2276656e78b854f69d7dc24a4bdef66645d35ce3294f2a917e4c8db5",
      "commit_id": "2089a9a8307c0eadd004377f8c718681a6cc4316",
      "id": 6107099867,
      "inline_message_ids": [],
      "request_comment_id": 6107082545,
      "result_kind": "clean",
      "status": "result",
      "submitted_at": "2026-10-11T08:24:05Z",
      "unresolved_thread_ids": []
    }
  ],
  "revision_fingerprint": "sha256:7145d984929afb34f47b11ca6e340f0a24bf5f11f558042f50694d3d6082d5c9",
  "rounds": [
    {
      "applied_fix_paths": [
        "hydra/core/default_element.py",
        "tests/defaults_list/test_group_package.py"
      ],
      "disposition_changes": [
        4240738882,
        4240738884
      ],
      "effective_diff_digest": "sha256:da7382c8ec82c45447978f9a46a9b00c8e43a75de1d42a765ab3c02a546fbe97",
      "finding_ids": [
        4240738882,
        4240738884
      ],
      "invariants": [
        "Only the leading _group_ package keyword is expanded; literals and repeated resolution remain stable",
        "Packages use the group established after deferred selection interpolation"
      ],
      "outcome": "corrected-head-needs-review",
      "proposed_fix_paths": [
        "hydra/core/default_element.py",
        "tests/defaults_list/test_group_package.py"
      ],
      "resulting_head": "afd599eb0b84ec0b4785bc4d0c48532551fedd89",
      "review_observation_id": null,
      "review_request_id": 6106755909,
      "review_result_id": 5482403830,
      "reviewed_head": "5298cdc6f9fb7b6a8991cf32f50490a51779707a",
      "root_cause": "Unbounded substring replacement and expansion before deferred group normalization",
      "round": 1,
      "unresolved_current_slice_findings": 0,
      "unresolved_design_blockers": 0
    },
    {
      "applied_fix_paths": [
        "hydra/core/default_element.py",
        "hydra/_internal/defaults_list.py",
        "tests/defaults_list/test_group_package.py"
      ],
      "disposition_changes": [
        4240821477
      ],
      "effective_diff_digest": "sha256:4c287bf8c6df4711c688f24dea3437928127d9f0c48d28cc0f64b76b9ef528f5",
      "finding_ids": [
        4240821477
      ],
      "invariants": [
        "Symbolic package keys match the same existing group in Defaults List and CLI overrides, including interpolated choices and deletions"
      ],
      "outcome": "corrected-head-needs-review",
      "proposed_fix_paths": [
        "hydra/core/default_element.py",
        "hydra/_internal/defaults_list.py",
        "tests/defaults_list/test_group_package.py"
      ],
      "resulting_head": "2089a9a8307c0eadd004377f8c718681a6cc4316",
      "review_observation_id": null,
      "review_request_id": 6106961051,
      "review_result_id": 5482495246,
      "reviewed_head": "afd599eb0b84ec0b4785bc4d0c48532551fedd89",
      "root_cause": "Package mutation canonicalized Defaults List entries without CLI keys and deferred matching until after interpolation",
      "round": 2,
      "unresolved_current_slice_findings": 0,
      "unresolved_design_blockers": 0
    },
    {
      "applied_fix_paths": [],
      "disposition_changes": [
        4240738882,
        4240738884,
        4240821477
      ],
      "effective_diff_digest": "sha256:4c287bf8c6df4711c688f24dea3437928127d9f0c48d28cc0f64b76b9ef528f5",
      "finding_ids": [],
      "invariants": [
        "Literal package identifiers remain literal; _group_ derives the actual config group; CLI selection and deletion use matching canonical keys"
      ],
      "outcome": "clean",
      "proposed_fix_paths": [],
      "resulting_head": "2089a9a8307c0eadd004377f8c718681a6cc4316",
      "review_observation_id": null,
      "review_request_id": 6107082545,
      "review_result_id": 6107099867,
      "reviewed_head": "2089a9a8307c0eadd004377f8c718681a6cc4316",
      "root_cause": "All accepted package expansion and matching defects corrected; no current defects found",
      "round": 3,
      "unresolved_current_slice_findings": 0,
      "unresolved_design_blockers": 0
    }
  ],
  "schema": "awd:swe:pr-cycle-state",
  "version": 2
}

@omry
omry marked this pull request as ready for review October 11, 2026 07:36
@chatgpt-codex-connector

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

Copy link
Copy Markdown

Codex Review Summary

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

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-11T08:24:07.343797Z 2089a9a Manual request
🔒 Security Review ✅ Completed 2026-10-11T07:39:01.075961Z 5298cdc Draft marked ready
ℹ️ About Codex in GitHub

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

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

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

@omry

omry commented Oct 11, 2026

Copy link
Copy Markdown
Collaborator Author

@codex, regular review 5298cdc

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5298cdc6f9

ℹ️ About Codex in GitHub

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

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

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

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

Comment thread hydra/core/default_element.py Outdated
Comment thread hydra/core/default_element.py Outdated
@omry

omry commented Oct 11, 2026

Copy link
Copy Markdown
Collaborator Author

@codex, regular review afd599e

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: afd599eb0b

ℹ️ About Codex in GitHub

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

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

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

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

Comment thread hydra/core/default_element.py Outdated
## Motivation

Fixes #3535. The 1.4 cleanup removed nondeprecated `_group_` expansion from
Defaults List packages. Nested overrides consequently fail to compose, while
ordinary includes and CLI package relocation silently use a literal `_group_`
destination.

### Have you read the contributing guidelines?

Yes.

### Prior design alignment

The maintainer requested restoring the supported behavior in #3535 and keeping
this release-candidate correction out of the final release notes.

## Changes

Restore group-derived absolute package expansion through the existing shared
path, including file/group entries, suffixes, nested overrides, and CLI appends.
Add composed-config regression coverage with relocated parent packages and
retain CLI group-selection precedence. Update the package reference and
migration inventory to distinguish this support from removed package headers.

Keep this rc1 regression correction in a separate `1.4.0rc2` Towncrier
collection. Document rendering the candidate notes and exclude that collection
from the final `1.4.0` notes.

## Test Plan

- Eight new regression cases fail before the restoration and pass afterward.
- Focused Defaults List tests: 148 passed.
- Complete `test_core-3.14` nox session: 3,801 core tests passed, plus all standalone apps and example plugins. Used process-local `CC=gcc` because the managed interpreter's default compiler, clang, is unavailable.
- Changed Python files pass Ruff checks and formatting.
- The core type check, security scan, and new-file copyright checks pass.
- Actual Towncrier drafts include the correction for rc2 and exclude it from the final release.

## Related Issues and PRs

- Regression introduced by #3341.
- Reported in discussion #2792.
@omry

omry commented Oct 11, 2026

Copy link
Copy Markdown
Collaborator Author

@codex, regular review 2089a9a

@gitar-bot

gitar-bot Bot commented Oct 11, 2026

Copy link
Copy Markdown
Code Review ✅ Approved 1 closed / 1 findings

🟡 Medium risk · Restoring _group_ expansion changes config destinations for includes and CLI overrides, so misresolution could place settings under unintended keys.

Restores _group_ package expansion for Defaults List entries, including file/group entries, suffixes, nested overrides, and CLI appends, so relocated packages compose correctly again. Resolved the _group_ substring replacement issue that corrupted packages and was not idempotent. No open issues found.

✅ 1 closed
✅ Bug: _group_ substring replacement corrupts packages and isn't idempotent

📄 hydra/core/default_element.py:63-65
update_parent treats _group_ as a plain substring and replaces it anywhere in package. So an ordinary package that merely contains that text, like - db@my_group_db: mysql, is rewritten to _global_.mydbdb. A second problem comes from update_parent being called twice on the same default (in _update_overrides at line 562, then again at line 713). With - /user_group_settings@_group_: a, the first call gives _global_.user_group_settings. The second call matches the _group_ inside the expanded group name and produces useruser_group_settingssettings, so composition breaks or the config lands at the wrong key. Only expand the token when it is the first dot-separated segment of the package. The expanded result then starts with _global_, so calling update_parent again leaves it unchanged.

Review coverage

📋 Rules No rules evaluated

🧪 Functional validation Not enabled · Set up

Options

Auto-apply is off → Gitar will not commit updates to this branch.
Display: compact → Counting what did not apply, without listing it.

Comment with these commands to change the behavior for this request:

Auto-apply Compact
gitar auto-apply:on         
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. More of your lovely PRs please.

Reviewed commit: 2089a9a830

ℹ️ About Codex in GitHub

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

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

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

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

@omry omry added the approved Accepted after review label Oct 11, 2026
@omry
omry merged commit b27bba6 into main Oct 11, 2026
25 of 29 checks passed
@omry
omry deleted the pr3536 branch October 11, 2026 11:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Accepted after review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Restore @_group_ in Defaults List package overrides

1 participant