LHP error code catalog¶
Every Lakehouse Plumber error carries a code of the form LHP-<CATEGORY>-<NUMBER> (for example LHP-VAL-001). The category prefix is one of CFG (configuration), VAL (validation), IO (input/output), ACT (action), DEP (dependency), GEN (general), or DEPR (deprecation).
When a command fails, the CLI exits non-zero: 1 for a domain error (any code below), 2 for a usage error, and 3 for an unexpected internal error; success is 0. Script integrations should branch on the exit code, not on stderr text. Codes noted as warnings are advisory and never fail a run.
Configuration errors (LHP-CFG)¶
Code |
Meaning / Cause |
Resolution |
|---|---|---|
LHP-CFG-001 |
Configuration conflict — the same setting is declared more than one way (for example a legacy |
Keep one form only; prefer the |
LHP-CFG-002 |
Project configuration in |
Fix the reported |
LHP-CFG-003 |
Invalid operational-metadata column config, or an |
Correct the field to the shape named in the message. |
LHP-CFG-004 |
More than one action sets |
Let a single action create each table; fix the preset config. |
LHP-CFG-005 |
Empty flowgroup file, or an invalid operational-metadata preset column reference. |
Add flowgroup content; reference a defined column. |
LHP-CFG-006 |
|
Define |
LHP-CFG-007 |
|
Provide both keys; fix the schema file. |
LHP-CFG-008 |
Invalid |
Fix the |
LHP-CFG-009 |
YAML parsing error (bad indentation, unquoted special characters). |
Fix YAML syntax; quote values containing |
LHP-CFG-010 |
A removed/deprecated field name was used. |
Replace it with the field named in the message. |
LHP-CFG-011 |
Invalid |
Fix the target; define the referenced local variables. |
LHP-CFG-012 |
Required template parameters are missing. |
Add every missing key under |
LHP-CFG-013 |
A |
Use a schema name or reference, not inline DDL. |
LHP-CFG-014 |
No flowgroups were found, or an invalid output format was requested. |
Fix the pipeline selector; use a supported output format. |
LHP-CFG-015 |
Reserved — retired. Formerly raised for an unmatched |
Not emitted by the current release. |
LHP-CFG-016 |
Reserved — no raise site in the current source. |
Not emitted by the current release. |
LHP-CFG-017 |
Reserved — no raise site in the current source. |
Not emitted by the current release. |
LHP-CFG-020 |
Bundle resource operation failed (resource YAML generation, sync, or directory access). |
Check |
LHP-CFG-021 |
Bundle YAML processing error (parsing, validating, or updating a bundle resource file). |
Fix the YAML syntax and encoding of the named file. |
LHP-CFG-023 |
Bundle support is enabled but |
Pass |
LHP-CFG-024 |
Bundle template fetch, render, or apply failed. |
Check the network and the template path or URL. |
LHP-CFG-025 |
Invalid bundle configuration (structure, missing files, or bad settings). |
Review |
LHP-CFG-026 |
Catalog/schema validation failed for one or more pipelines. |
Set |
LHP-CFG-027 |
The named template was not found. |
Check spelling; run |
LHP-CFG-028 |
|
Internal — pass a non-null project root. |
LHP-CFG-029 |
Template rendering referenced an undefined variable. |
Provide the missing template variable. |
LHP-CFG-030 |
Template has a Jinja syntax error. |
Fix the template syntax. |
LHP-CFG-031 |
Generated Python source failed to parse ( |
Almost always a generator/template bug; file a report with the flowgroup YAML. |
LHP-CFG-033 |
The |
Inspect ruff’s output; re-run with |
LHP-CFG-034 |
The |
|
LHP-CFG-040 |
A blueprint file was placed in a flowgroup (pipelines) directory. |
Move the blueprint out of the pipelines directory. |
LHP-CFG-047 |
Empty blueprint file. |
Add blueprint content. |
LHP-CFG-048 |
Blueprint file has multiple YAML documents. |
Keep one document per blueprint file. |
LHP-CFG-049 |
File is not a blueprint (missing marker). |
Add the blueprint marker. |
LHP-CFG-050 |
Invalid blueprint definition (parse error). |
Fix the blueprint YAML. |
LHP-CFG-051 |
Empty instance file. |
Add instance content. |
LHP-CFG-052 |
Instance file has multiple YAML documents. |
Keep one document per instance file. |
LHP-CFG-054 |
Invalid instance definition — |
Set |
LHP-CFG-056 |
Reserved — no raise site in the current source. |
Not emitted by the current release. |
LHP-CFG-059 |
Malformed secret reference (empty scope or key). |
Use |
LHP-CFG-060 |
Malformed top-level |
Define |
LHP-CFG-061 |
|
Set |
LHP-CFG-062 |
Invalid |
Define |
LHP-CFG-063 |
Invalid sandbox |
Use only the |
LHP-CFG-064 |
Invalid sandbox profile in |
Fix |
LHP-CFG-065 |
|
Run an allowed env, or add the env to |
LHP-CFG-066 |
A Unity Catalog tag key or value is illegal (charset, whitespace, or length). |
Fix the offending tag key or value to meet Unity Catalog rules. |
LHP-CFG-067 |
Invalid unified schema/tags file — a top-level document that is not a mapping, an unknown top-level key (including the retired |
Use the unified format (optional identifier |
LHP-CFG-068 |
Warning (logged) — a UC |
Set the sidecar’s |
LHP-CFG-069 |
Warning (logged) — a write target’s |
Point |
Validation errors (LHP-VAL)¶
Code |
Meaning / Cause |
Resolution |
|---|---|---|
LHP-VAL-001 |
A required field (for example |
Add the field named in the message. |
LHP-VAL-002 |
Several validation problems in one action, listed together. |
Fix each listed item. |
LHP-VAL-003 |
A |
Provide at least one job name. |
LHP-VAL-004 |
A |
Make job names unique. |
LHP-VAL-005 |
A pipeline list is empty. |
Declare at least one pipeline. |
LHP-VAL-006 |
A field has a value outside its allowed set. |
Use one of the valid values shown. |
LHP-VAL-007 |
Invalid |
Use |
LHP-VAL-008 |
A field has the wrong data type. |
Match the expected type from the message. |
LHP-VAL-009 |
Duplicate pipeline+flowgroup combinations, or an invalid template-parameter type. |
Remove duplicates; fix the parameter type. |
LHP-VAL-010 |
Duplicate monitoring-pipeline configuration, or misuse of the |
Use only one name or configuration. |
LHP-VAL-011 |
Schema syntax error in a schema file’s column definitions. |
Fix the schema syntax against the expected format. |
LHP-VAL-012 |
Source given as a bare string where a full source mapping is required. |
Provide a full |
LHP-VAL-013 |
Two options were combined that cannot be used together. |
Remove one of the conflicting options. |
LHP-VAL-014 |
Mixed flowgroup syntax, or a missing/invalid |
Fix per the message. |
LHP-VAL-015 |
Missing flowgroup context for Python file copying. |
Internal — ensure flowgroup context is supplied. |
LHP-VAL-016 |
Invalid schema definition — a schema file missing |
Fix the schema per the message. |
LHP-VAL-017 |
Missing AWS MSK IAM options on a Kafka action, or an invalid source config for a materialized-view write. |
Add the required options; fix the source. |
LHP-VAL-018 |
Missing OAuth options on a Kafka action. |
Add the required OAuth options. |
LHP-VAL-019 |
Python function naming conflict — two source files map to the same destination file. |
Rename one function, module, or |
LHP-VAL-020 |
Unknown dependency-graph level requested. |
Use a valid level. |
LHP-VAL-021 |
Import name collision in generated code. |
Resolve the colliding import name. |
LHP-VAL-022 |
Invalid table identifier for a |
Use a valid table identifier. |
LHP-VAL-023 |
A Python-function root directory is itself a package. |
Remove |
LHP-VAL-024 |
A local helper was imported with a plain dotted import. |
Use a relative import for the local helper. |
LHP-VAL-025 |
A local helper module could not be found. |
Fix the import path, or add the module. |
LHP-VAL-041 |
A blueprint instance references an unknown blueprint. |
Reference an existing blueprint. |
LHP-VAL-042 |
A required blueprint parameter is missing in an instance. |
Provide the required parameter. |
LHP-VAL-043 |
An instance sets an unknown parameter key. |
Remove or rename the key. |
LHP-VAL-044 |
A |
Use a |
LHP-VAL-045 |
Duplicate (pipeline, flowgroup) after blueprint expansion. |
Vary iteration values so combinations are unique. |
LHP-VAL-046 |
Duplicate blueprint name. |
Rename one blueprint. |
LHP-VAL-053 |
Instance file is missing its blueprint reference. |
Add |
LHP-VAL-055 |
Unresolved |
Define the referenced local variable or iteration key. |
LHP-VAL-061 |
Conflicting or mixed blueprint-instance syntax (hard error, not a deprecation). |
Use one form: |
LHP-VAL-062 |
A pipeline |
Use exactly |
LHP-VAL-063 |
A |
Use a well-formed table reference ( |
LHP-VAL-064 |
A sandbox profile |
Fix or remove the entry against the available pipeline names. |
LHP-VAL-065 |
Warning (category sandbox) — a sandbox-renamed sink is also produced by an out-of-scope pipeline; the rename still proceeds. |
Bring the other producer into scope, or accept the split; |
LHP-VAL-066 |
Warning (category sandbox) — an in-scope Python table read could not be rewritten (indirect reference). |
Use a literal table name, or accept the shared read; |
LHP-VAL-067 |
Warning (category sandbox) — opaque dynamic SQL could not be verified or rewritten. |
Use a statically resolvable name, or accept the shared read; |
LHP-VAL-902 |
All-or-nothing aggregator — one or more flowgroups failed in a parallel |
Fix every listed failure; re-run with |
LHP-VAL-DUPFG |
Two flowgroups in the same pipeline share the same name. |
Rename one flowgroup, or move it to another pipeline. |
Input/output errors (LHP-IO)¶
Code |
Meaning / Cause |
Resolution |
|---|---|---|
LHP-IO-001 |
A referenced file (SQL, expectations, schema) was not found. |
Check the path; paths are relative to the flowgroup YAML. |
LHP-IO-002 |
A YAML file could not be read. |
Check the file’s readability and encoding. |
LHP-IO-003 |
Wrong document count — expected exactly one YAML document, found another number. |
One document per schema/expectations file; use |
LHP-IO-004 |
A YAML file could not be read by the parser. |
Check the file’s readability and encoding. |
LHP-IO-005 |
Permission denied reading a file. |
Fix the file permissions. |
LHP-IO-006 |
The substitution file for the environment was not found. |
Create |
LHP-IO-007 |
An LHP project already exists in this directory. |
Run |
LHP-IO-020 |
The LHP skill is already installed. |
Uninstall first, or overwrite the existing installation. |
LHP-IO-021 |
The LHP skill is not installed. |
Install the skill first. |
LHP-IO-022 |
|
Check the |
LHP-IO-023 |
|
Point at the built |
LHP-IO-024 |
|
Rebuild with |
LHP-IO-025 |
|
Create the personal sandbox profile. |
LHP-IO-026 |
|
Install the extra: |
LHP-IO-027 |
The |
Choose another port with |
Action errors (LHP-ACT)¶
Code |
Meaning / Cause |
Resolution |
|---|---|---|
LHP-ACT-001 |
Unknown action |
Fix the spelling; the message includes a “Did you mean?” suggestion. |
LHP-ACT-002 |
Action code generation failed. |
Fix the action configuration named in the message. |
Dependency errors (LHP-DEP)¶
Code |
Meaning / Cause |
Resolution |
|---|---|---|
LHP-DEP-001 |
Circular dependency detected. |
Break the cycle shown in the message; visualise with |
LHP-DEP-002 |
Warning (never fails a run) — a Python table-read argument could not be statically resolved. |
Declare the upstream table with |
LHP-DEP-003 |
Warning (never fails a run) — a SQL body could not be parsed for table extraction. |
Fix the SQL, or declare upstreams with |
LHP-DEP-022 |
Circular preset inheritance detected. |
Break the preset |
General errors (LHP-GEN)¶
Code |
Meaning / Cause |
Resolution |
|---|---|---|
LHP-GEN-001 |
Internal-error guard (preflight bypassed, or not exactly one built wheel for a pipeline). |
Programming bug — see the message; report it if user-visible. |
LHP-GEN-901 |
A worker process failed during a parallel |
Re-run with |
LHP-GEN-902 |
An unexpected non-LHP exception was wrapped by the CLI fallback. |
Re-run with |
Deprecation warnings (LHP-DEPR)¶
Code |
Meaning / Cause |
Resolution |
|---|---|---|
LHP-DEPR-001 |
Bare-braces |
Use |
LHP-DEPR-002 |
The |
Use |
LHP-DEPR-003 |
The schema-transform |
Remove the key. |
LHP-DEPR-004 |
The preset |
Use |