{"record":{"id":"2271ee2fa9ce39fd","repo":"dbt-labs/dbt-core","slug":"root-overlay-config-builds","errorCode":null,"errorMessage":"root overlay config builds","messagePattern":"root overlay config builds","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"info","filePath":"crates/dbt-parser/src/dbt_project_config.rs","lineNumber":1745,"sourceCode":"            (\"inherited from package\", \"pkg:\\n  +enabled: true\\n\", true),\n            (\"global\", \"+enabled: true\\n\", true),\n            (\n                \"absent\",\n                \"pkg:\\n  my_model:\\n    +materialized: view\\n\",\n                false,\n            ),\n            (\n                \"explicitly disabled\",\n                \"pkg:\\n  my_model:\\n    +enabled: false\\n\",\n                false,\n            ),\n        ];\n\n        for (label, yml, expected) in cases {\n            let (root, errors, _) =\n                init_project_config_from_yaml::<ModelConfig, ProjectModelConfig>(yml, true);\n            assert!(errors.is_empty(), \"{label}: {errors:?}\");\n            let root = root.expect(\"root overlay config builds\");\n            let local = DbtProjectConfig::<ModelConfig> {\n                config: ModelConfig::default(),\n                children: IndexMap::new(),\n            };\n            let resolver =\n                ProjectConfigResolver::for_dependency(local, root.clone(), AdapterType::Snowflake);\n            assert_eq!(\n                resolver.is_enabled_by_root_overlay(&fqn),\n                expected,\n                \"{label}\"\n            );\n\n            // Root packages have no overlay, so their own inline disable keeps winning.\n            let root_resolver = ProjectConfigResolver::for_root(root, AdapterType::Snowflake);\n            assert!(\n                !root_resolver.is_enabled_by_root_overlay(&fqn),\n                \"{label}: root package must never be force-enabled\"\n            );","sourceCodeStart":1727,"sourceCodeEnd":1763,"githubUrl":"https://github.com/dbt-labs/dbt-core/blob/0267ce9170576975b76b64ce856b2e5848e96617/crates/dbt-parser/src/dbt_project_config.rs#L1727-L1763","documentation":"A test-only `.expect()` in the project-config overlay test loop: after `init_project_config_from_yaml::<ModelConfig, ProjectModelConfig>` reports no errors, the root overlay config must exist (`Some`). A None here means the parser produced no errors but silently failed to build the root overlay, which the test treats as an internal bug.","triggerScenarios":"Running the overlay resolution test where the fixture YAML parses without reported errors yet `init_project_config_from_yaml` returns None for the root config — usually caused by a change in config init behavior or a fixture the parser accepts but doesn't materialize into an overlay.","commonSituations":"Hit by developers changing `init_project_config` semantics or adding fixture cases whose YAML yields an empty/default root unexpectedly.","solutions":["Verify the fixture YAML actually produces a root overlay (non-empty `config:`/`models:` sections)","Check for regressions in `init_project_config` after refactors and restore overlay construction","Improve the assert to print the label and errors for diagnosis","Run only the failing case and compare against a known-good fixture"],"exampleFix":"// before\nlet root = root.expect(\"root overlay config builds\");\n\n// after\nlet root = root.unwrap_or_else(|| panic!(\"{label}: root overlay config did not build\"));","handlingStrategy":"validation","validationCode":"assert!(errors.is_empty(), \"{label}: {errors:?}\");\nlet root = root.unwrap_or_else(|| panic!(\"{label}: root overlay missing\"));","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Ensure fixtures produce a non-empty root config section","Include the test label in assertion messages for diagnosability","Re-run overlay tests after any init_project_config refactor"],"tags":["rust","testing","config","panic"],"backgroundTag":"internal-invariant-violation","analyzedSha":"0267ce9170576975b76b64ce856b2e5848e96617","analyzedAt":"2026-09-07T21:53:39.732Z","contentChangedAt":"2026-09-07T21:53:39.732Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}