Fix #1198: warn on unknown keys in .pddrc with full schema validation - #1217
Conversation
Tests document the desired behavior: _load_pddrc_config should emit UserWarning for unknown keys at the root, context, or defaults levels, with a message format pointing users to 'pdd setup' for regeneration. Per CONTRIBUTING.md red/green workflow: these tests fail without the fix and will pass with it.
Adds schema-based validation in _load_pddrc_config. Emits a UserWarning
for any unknown key at the root, context, or defaults level, with the
format:
WARNING: .pddrc contains unknown key 'X' at path 'Y', ignored.
Run 'pdd setup' to regenerate.
Previously, unknown keys (typos, stale documentation, leftover keys
from older schemas) were silently dropped and PDD fell back to built-in
defaults with no signal to the user. Per issue promptdriven#1198, users were losing
roughly an hour of debugging per affected case.
Chose UserWarning over raising to avoid breaking users with stale
configs on upgrade. Could be promoted to errors in a future release.
) The two cwd_mode fixtures in TestConstructPathsResolutionModeParameter wrote .pddrc files with path keys directly under the context block (contexts.default.generate_output_path) rather than inside defaults (contexts.default.defaults.generate_output_path). PDD's actual config resolution path (_get_context_config returns defaults dict, _resolve_config_hierarchy reads from there) ignores those keys when placed at the context level. The tests still passed because their assertions only checked that output paths landed somewhere under CWD, not whether the .pddrc values were actually honored. The validation added in the previous commit surfaced this. Fixed both fixtures to use the documented nested form.
PDD's own template (templates/generic/generate_pddrc_YAML.prompt) prescribes this key for every context, so it's part of PDD's actual config shape and must be accepted by the validator. Note: a grep of the codebase shows this key is referenced in code only as a Python function parameter (e.g., auto_deps_main.py:27, call sites in sync_orchestration.py, pin_example_hack.py, commands/maintenance.py), never read from context_config. The unknown-key validator surfaced this discrepancy: the template tells users to put auto_deps_csv_path in every context, but no .pddrc resolver code consumes it. Worth a separate issue to determine whether the template is wrong or the resolver is missing functionality. Adding to schema unblocks the warning meanwhile.
…mptdriven#1198) Adds the unknown-key validation requirement to construct_paths_python.prompt so the prompt (PDD doctrine: source of truth) reflects the new behavior implemented in pdd/construct_paths.py. Lists the full known-key schema at each nesting level (root, context, defaults) including the auto_deps_csv_path key surfaced by running the validator against PDD's own .pddrc. Per CONTRIBUTING.md: 'If editing code directly, run pdd update to sync changes back into prompts.' Note: pdd update was attempted first but crashed with [Errno 63] File name too long when constructing the output path — a separate bug worth filing. Falling back to hand-edit per CONTRIBUTING's 'maintainers may help sync' guidance.
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
gltanaka
left a comment
There was a problem hiding this comment.
Requesting changes rather than merging as-is.
The validator itself is needed for #1198; unknown .pddrc keys currently fail silently. The blocker is that this implementation whitelists and documents auto_deps_csv_path as a valid defaults key (pdd/construct_paths.py:132-145, pdd/prompts/construct_paths_python.prompt:51-54) while the runtime still does not consume that key from .pddrc.
Current flow:
_resolve_config_hierarchyonly resolves the existing path/model keys and does not includeauto_deps_csv_path(pdd/construct_paths.py:530-542).generate_output_paths.COMMAND_OUTPUT_KEYS['auto-deps']only includesoutput, so nocsvoutput path is produced (pdd/generate_output_paths.py:18-33).auto_deps_mainthen readsoutput_file_paths.get("csv", "project_dependencies.csv"), so the.pddrckey remains silently ignored (pdd/auto_deps_main.py:56-73).
Required changes before merge:
- Either wire
auto_deps_csv_paththrough config resolution/output path generation and add regression coverage proving.pddrcaffects the auto-deps CSV path, or remove it from the allow-list/template so users get the unknown-key warning instead of another silent ignore. - Clean the new trailing whitespace reported by
git diff --checkatpdd/construct_paths.py:206.
Tests I ran: python -m pytest tests/test_construct_paths.py -q passed; git diff --check origin/main...HEAD failed on the trailing whitespace above.
|
Additional required cleanup from the broader non-integration run: the new validator emits a warning for |
…promptdriven#1198) Per maintainer review on promptdriven#1217, removing the option to whitelist auto_deps_csv_path. The validator's purpose is to surface silent ignores, and this key is exactly such a case: prescribed by pdd/templates/generic/generate_pddrc_YAML.prompt but never read by _resolve_config_hierarchy or _get_context_config. Changes: - Remove auto_deps_csv_path from _PDDRC_DEFAULTS_KEYS in construct_paths.py - Remove all 9 references to auto_deps_csv_path from generate_pddrc_YAML.prompt (6 YAML example lines, 3 documentation/instruction lines) - Update construct_paths_python.prompt's schema documentation to match - Strip trailing whitespace at construct_paths.py:206 Wiring auto_deps_csv_path through config resolution properly is a separate concern that touches ~6 touchpoints in path-resolution machinery (_resolve_config_hierarchy, COMMAND_OUTPUT_KEYS, DEFAULT_FILENAMES, ENV_VAR_MAP, and auto_deps_main precedence logic). Will file a follow-up issue.
….py (promptdriven#1198) Per PR promptdriven#1217 review: validator surfaced an unknown-key warning for contexts.backend-utils.match at tests/test_find_prompt_file.py:424. Investigation: the 'match' key is not a real PDD schema key, and the test's assertion only verifies that the prompts_dir context prefix is honored — the 'match' entry was dead config. Removed it from the fixture; the test still passes because the assertion never depended on 'match'. Same pattern as the cwd_mode fixture corrections in e8398bf.
…romptdriven#1198) Lock in PR review feedback: if anyone re-adds auto_deps_csv_path to _PDDRC_DEFAULTS_KEYS without wiring it through the resolver, or if the template re-introduces the prescription, this test fails.
gltanaka
left a comment
There was a problem hiding this comment.
Thanks for addressing the earlier review. The original blockers are fixed: auto_deps_csv_path was removed from _PDDRC_DEFAULTS_KEYS, the generator template no longer emits it, the match fixture was cleaned up, and git diff --check is now clean.
I still would not merge this current head because the validator now exposes checked-in stale config/docs and another allow-listed silent ignore:
-
examples/prompts_linter/.pddrcstill containsauto_deps_csv_pathin five contexts, andexamples/prompts_linter/README.mdstill instructs users to add the same key. Loading the repo's checked-in.pddrcfiles on this branch emits five new warnings from that example config. Please remove/update those entries too, otherwise a public example in the repo immediately warns under the new validator. -
prompt_pathis still included in_PDDRC_DEFAULTS_KEYS, but_resolve_config_hierarchydoes not resolve it; it only resolvesprompts_dirand the other existing keys. I verified with a.pddrccontainingdefaults.prompt_path: configured_prompts:_load_pddrc_configemits no warning, butresolve_effective_config()returns onlydefault_languageand_matched_context. This is the same class of silent-ignore hole that was fixed forauto_deps_csv_path. Please either wireprompt_paththrough the resolver as the documented alias forprompts_dirwith regression coverage, or remove it from the allow-list/schema docs until it is actually consumed.
Focused verification I ran:
git diff --check origin/main...HEAD: passedpython -m pytest tests/test_construct_paths.py -q: 111 passedpython -m pytest tests/test_find_prompt_file.py::TestPddrcPrefixForNewModules::test_new_module_respects_pddrc_prompts_dir_prefix -q: 1 passed- loading all checked-in
.pddrcfiles still emitsauto_deps_csv_pathwarnings fromexamples/prompts_linter/.pddrc
…1198) Per PR promptdriven#1217 second review: loading the repo's checked-in .pddrc files on this branch emitted 5 unknown-key warnings from examples/prompts_linter/.pddrc, and the README still instructed users to add the same key. Since the parent commit removed auto_deps_csv_path from the schema (no longer in _PDDRC_DEFAULTS_KEYS) and from the generator template, the public example must also be cleaned up — otherwise the example immediately warns under the new validator the moment someone tries it. Removed all 5 occurrences from examples/prompts_linter/.pddrc and all 5 corresponding lines from examples/prompts_linter/README.md.
) Per PR promptdriven#1217 second review: prompt_path was included in _PDDRC_DEFAULTS_KEYS but _resolve_config_hierarchy never resolved it. Same class of silent-ignore hole that was fixed for auto_deps_csv_path. Greg's verification showed a .pddrc containing defaults.prompt_path: configured_prompts emits no warning, but resolve_effective_config() returns only default_language and _matched_context — the key was documented as an alias but never actually wired through. Took the 'remove' option: - Removed 'prompt_path' from _PDDRC_DEFAULTS_KEYS in construct_paths.py - Removed the alias claim from construct_paths_python.prompt: - Line 37: '.pddrc supports prompt_path as an alias for the prompt directory' — claim was false, prompt was the source-of-truth bug - Line 38: CLI override line that referenced prompt_path - Line 51: Removed prompt_path from the schema doc list - Line 91: Cleaned up the PDD_PROMPT_PATH / prompt_path discovery rules sentence — kept PDD_PROMPT_PATH (env var still respected), dropped the prompt_path reference The validator now correctly surfaces prompt_path as an unknown key. PDD_PROMPT_PATH env var is unaffected — only the .pddrc key alias was removed.
|
Pushed updates addressing both points from your second review. 1. 2. Verified locally with your exact checks:
PR description updated. Ready for re-review. |
|
🔗 Connect Session Starting! Session ID: |
…riven#1198) Lock in PR review feedback: if anyone re-adds prompt_path to _PDDRC_DEFAULTS_KEYS without wiring it through _resolve_config_hierarchy as a prompts_dir alias, this test fails.
6673a70 to
4f427fb
Compare
gltanaka
left a comment
There was a problem hiding this comment.
Thanks for the update. The .pddrc validator issues from the previous review look addressed now: examples/prompts_linter no longer carries auto_deps_csv_path, prompt_path is no longer documented as supported without wiring, and the focused tests pass locally.
I still would not merge this head because unrelated generated/local artifacts are now included in the PR:
pdd-env/commits a local virtualenv, including activation scripts, console entrypoints, Python symlinks, andpdd-env/pyvenv.cfgwith contributor-local paths such as/Users/sohnitagirisa/pdd/pdd-2/pdd-env.git diff --check origin/main...HEADfails on the committed virtualenv files, starting with trailing whitespace throughoutpdd-env/bin/Activate.ps1.error_log.txtis added and appears to be a local generated test/debug artifact..gitignoreremoves the committed.pdd/meta/...exceptions; that looks unrelated to issue #1198 and should not be included unless there is a deliberate repo-level reason.
Required changes before merge:
- Remove
pdd-env/from the PR entirely and keep local virtualenvs ignored. - Remove
error_log.txtunless this PR intentionally needs it and the purpose is documented. - Revert the unrelated
.gitignoredeletion, or split/explain it separately if it is intentional. - Keep the PR scoped to the
.pddrcvalidation, template/example cleanup, and regression tests.
Local checks run on head 34034fb4:
python -m pytest tests/test_construct_paths.py -q->114 passedpython -m pytest tests/test_find_prompt_file.py::TestPddrcPrefixForNewModules::test_new_module_respects_pddrc_prompts_dir_prefix -q->1 passedgit diff --check origin/main...HEAD-> fails because of the committedpdd-env/files
|
🚀 Job Queued! Job ID: |
|
No description provided. |
Step 1: Duplicate CheckStatus: No duplicates found Search Performed
FindingsNo duplicate issues were found. Issue #1217 is a pull request (branch
Since the original issue #1198 remains open and unresolved, this PR should proceed through the investigation workflow normally. Proceeding to Step 2: Documentation Check |
Step 2: Documentation CheckStatus: Confirmed Bug Documentation Reviewed
FindingsThe README documents a precise schema for The behavior is a confirmed bug — the code does not enforce the documented schema, and there is no documented intent for keys outside the schema to be accepted silently. Issue #1217 is the corresponding fix PR (branch Proceeding to Step 3: Triage |
Step 3: TriageStatus: Fast-Track Pre-Diagnosed Issue DetectedThe issue author has provided a detailed root cause analysis: Identified Root Cause: Evidence Quality:
SummaryThis is a PR (#1217) implementing a fix for confirmed bug #1198. The root cause is fully diagnosed: Fast-tracking to Step 6: Root Cause Analysis (skipping Steps 4-5) |
Step 6: Root Cause AnalysisRoot Cause Identified: Yes SummaryThe bug is in Technical Details
def _load_pddrc_config(pddrc_path: Path) -> Dict[str, Any]:
"""Load and parse .pddrc configuration file."""
try:
with open(pddrc_path, 'r', encoding='utf-8') as f:
config = yaml.safe_load(f)
if not isinstance(config, dict):
raise ValueError(f"Invalid .pddrc format: expected dictionary at root level")
# Validate basic structure
if 'contexts' not in config:
raise ValueError(f"Invalid .pddrc format: missing 'contexts' section")
return config # ← returned without any unknown-key checks
except yaml.YAMLError as e:
raise ValueError(f"YAML syntax error in .pddrc: {e}")
except Exception as e:
raise ValueError(f"Error loading .pddrc: {e}")
External Research
Repository History
Experiments Performed
Fix Scope
Sibling Bugs
Proposed Fix Validation
Fix Location
Proceeding to Step 7: Prompt Classification |
Step 7: Prompt ClassificationClassification: Prompt Defect DEFECT_TYPE: prompt AnalysisTwo prompt defects were identified in
Evidence
Prompt Change MadeFile: Before (Requirement 1): After (Requirement 1): ConclusionThe prompt specification was incorrect on two counts: it falsely documented a Proceeding to Step 8: Test Plan |
Step 8: Test PlanExisting Test Coverage
Proposed TestsTest 1: Unknown root key emits UserWarning
Test 2: Unknown context key emits UserWarning
Test 3: Unknown defaults key emits UserWarning
Test 4: Clean config emits no warnings
Test 5: Warning message matches issue specification exactly
Test 6: Unknown key does not reject the config (load continues)
Test 7: Regression —
|
Step 9: Generated TestTest File
Test Codeimport warnings as _warnings_module
import yaml as _yaml_module
class TestPddrcSchemaValidation:
"""Tests for unknown-key validation in _load_pddrc_config (Issue #1198)."""
def _write_pddrc(self, tmp_path, content):
pddrc = tmp_path / ".pddrc"
pddrc.write_text(_yaml_module.dump(content), encoding="utf-8")
return pddrc
def test_unknown_root_key_emits_warning(self, tmp_path): ...
def test_unknown_context_key_emits_warning(self, tmp_path): ...
def test_unknown_defaults_key_emits_warning(self, tmp_path): ...
def test_clean_config_emits_no_warnings(self, tmp_path): ...
def test_warning_message_format(self, tmp_path): ...
def test_auto_deps_csv_path_emits_warning(self, tmp_path): ...
def test_prompt_path_emits_warning(self, tmp_path): ...
def test_multiple_unknown_keys_each_emit_warning(self, tmp_path): ...
def test_unknown_key_does_not_reject_config(self, tmp_path): ...
def test_construct_paths_triggers_validation_via_load(self, tmp_path, monkeypatch): ...
def test_match_key_in_context_emits_warning(self, tmp_path): ...What This Test Verifies11 tests appended to
Current result: 9 failed, 2 passed (1.09s) The fix needs to add three schema-constant sets ( Running the Testpython -m pytest tests/test_construct_paths.py::TestPddrcSchemaValidation -vProceeding to Step 10: Verification |
Step 9: Generated TestTest File
Test Code# ---------------------------------------------------------------------------
# Fix-location file cleanup tests (Issue #1198 / PR #1217)
# Tests for: examples/prompts_linter/.pddrc, pdd/templates/generic/generate_pddrc_YAML.prompt,
# and examples/prompts_linter/README.md
# ---------------------------------------------------------------------------
_REPO_ROOT = Path(__file__).parent.parent
def test_examples_prompts_linter_pddrc_no_auto_deps_csv_path():
"""examples/prompts_linter/.pddrc must not contain auto_deps_csv_path in any defaults block."""
import yaml as _yaml
pddrc_path = _REPO_ROOT / 'examples' / 'prompts_linter' / '.pddrc'
config = _yaml.safe_load(pddrc_path.read_text(encoding='utf-8'))
contexts_with_stale_key = [
ctx_name for ctx_name, ctx_config in (config.get('contexts') or {}).items()
if isinstance(ctx_config, dict)
and 'auto_deps_csv_path' in (ctx_config.get('defaults') or {})
]
assert not contexts_with_stale_key, (
f'examples/prompts_linter/.pddrc still contains auto_deps_csv_path in contexts: {contexts_with_stale_key}'
)
def test_generate_pddrc_yaml_template_no_auto_deps_csv_path_in_example_yaml():
"""pdd/templates/generic/generate_pddrc_YAML.prompt must not prescribe auto_deps_csv_path."""
import yaml as _yaml
template_path = _REPO_ROOT / 'pdd' / 'templates' / 'generic' / 'generate_pddrc_YAML.prompt'
template_content = template_path.read_text(encoding='utf-8')
marker_pos = template_content.find('EXAMPLE OUTPUT STRUCTURE')
assert marker_pos != -1
after_marker = template_content[marker_pos:]
fence_start = after_marker.find('```yaml')
yaml_body_start = fence_start + len('```yaml')
fence_end = after_marker.find('```', yaml_body_start)
example_config = _yaml.safe_load(after_marker[yaml_body_start:fence_end].strip())
contexts_with_stale_key = [
ctx_name for ctx_name, ctx_config in (example_config.get('contexts') or {}).items()
if isinstance(ctx_config, dict)
and 'auto_deps_csv_path' in (ctx_config.get('defaults') or {})
]
assert not contexts_with_stale_key, (
f'generate_pddrc_YAML.prompt example still prescribes auto_deps_csv_path in: {contexts_with_stale_key}'
)
def test_examples_prompts_linter_readme_no_auto_deps_csv_path_in_yaml_snippets():
"""examples/prompts_linter/README.md must not show auto_deps_csv_path in YAML snippets."""
import yaml as _yaml
readme_path = _REPO_ROOT / 'examples' / 'prompts_linter' / 'README.md'
readme_content = readme_path.read_text(encoding='utf-8')
fence_start = readme_content.find('```yaml')
yaml_body_start = fence_start + len('```yaml')
fence_end = readme_content.find('```', yaml_body_start)
snippet_config = _yaml.safe_load(readme_content[yaml_body_start:fence_end].strip())
contexts_with_stale_key = [
ctx_name for ctx_name, ctx_config in (snippet_config.get('contexts') or {}).items()
if isinstance(ctx_config, dict)
and 'auto_deps_csv_path' in (ctx_config.get('defaults') or {})
]
assert not contexts_with_stale_key, (
f'README.md YAML snippet still contains auto_deps_csv_path in: {contexts_with_stale_key}'
)What This Test Verifies11 tests in 3 new tests for missing fix-location files (added this step):
Verification: 12/14 new tests fail on current code (2 are non-breaking guards that correctly pass both before and after the fix). Running the Testpytest tests/test_construct_paths.py::TestPddrcSchemaValidation -v
pytest tests/test_construct_paths.py::test_examples_prompts_linter_pddrc_no_auto_deps_csv_path -v
pytest tests/test_construct_paths.py::test_generate_pddrc_yaml_template_no_auto_deps_csv_path_in_example_yaml -v
pytest tests/test_construct_paths.py::test_examples_prompts_linter_readme_no_auto_deps_csv_path_in_yaml_snippets -vProceeding to Step 10: Verification |
Step 10: Verification CompleteTest ExecutionVerification StatusPASS: Test correctly detects the bug All 12 failures are for the correct reason:
Structural test check: PASS — No test uses Mock cross-validation: PASS — The one mock in Summary
Bug Details
Fix Required In
E2E ClassificationE2E_NEEDED: no — Next Steps
E2E skipped — proceeding to Step 12: Create Draft PR |
Step 12: Draft PR CreatedPull RequestPR #1265: test: add failing tests for #1217 (.pddrc schema validation) Branch
What's Included
Tests That Fail on Current Code
Next Steps for Maintainers
PDD Fix CommandTo auto-fix this bug using PDD: pdd fix https://github.com/promptdriven/pdd/issues/1217
Investigation complete. A draft PR with failing tests has been created and linked to this issue. |
PDD Execution SuccessfulCommand: |
gltanaka
left a comment
There was a problem hiding this comment.
The previous artifact blockers are mostly cleaned up now: pdd-env/ and error_log.txt are no longer committed as files, git diff --check origin/main...HEAD is clean, CI is green, and the focused .pddrc validation tests pass locally.
I still would not merge this head because .gitignore still contains unrelated and potentially harmful deletions. The PR removes existing ignore/allowlist rules and comments such as:
pdd/_version.py, the setuptools-scm generated version file ignore.pdd/meta/*.json, which changes the ignore behavior for generated.pdd/metaJSON files- several explicit
.pdd/meta/...allowlist entries - the Issue #1006 run-report comment and run-report exceptions
.loop/
Those changes are not part of issue #1198 and could change what local/generated files are picked up by git. Adding ignores for the accidental local artifacts (pdd-env/, error_log.txt) is fine, but the existing .gitignore behavior should be preserved.
Required change before merge:
- Restore the unrelated
.gitignoredeletions and keep the PR scoped to the.pddrcvalidation/template/example/test changes. If you want to keep the newpdd-env/anderror_log.txtignore entries, add them without removing the existing rules.
Local checks run on head 89828b0:
git diff --check origin/main...HEAD-> cleanpython -m pytest tests/test_construct_paths.py -q->114 passedpython -m pytest tests/test_find_prompt_file.py::TestPddrcPrefixForNewModules::test_new_module_respects_pddrc_prompts_dir_prefix -q->1 passed- loading checked-in
.pddrcfiles via_load_pddrc_config-> no warnings
gltanaka
left a comment
There was a problem hiding this comment.
The latest update resolves my remaining blockers.
What I verified on head f548a79:
- The committed
pdd-env/anderror_log.txtartifacts are gone. .gitignorenow only appends ignores forpdd-env/anderror_log.txt; the existing.pdd/metafingerprint/run-report rules are preserved.git diff --check origin/main...HEADis clean.python -m pytest tests/test_construct_paths.py -q->120 passed.python -m pytest tests/test_find_prompt_file.py::TestPddrcPrefixForNewModules::test_new_module_respects_pddrc_prompts_dir_prefix -q->1 passed.- Loading checked-in
.pddrcfiles through_load_pddrc_configproduced no unknown-key warnings.
The .pddrc warning behavior looks scoped and useful now, and the previous PR hygiene issues are fixed. I think this is reasonable to merge once branch protection is satisfied.
Address PR review feedback from @gltanaka: - Revert pdd/construct_paths.py to main (whitespace-only churn) - Revert tests/test_agentic_sync.py to main (assertion-order swap) - Revert tests/test_construct_paths.py to main (duplicate #1198 tests added by bot fix-loop; the canonical tests are already on main via #1217) Keeps the actual fix-loop circuit breaker change and its tests intact.
Closes #1198.
Problem
.pddrcaccepts unknown keys silently. Typos, stale documentation, and leftover keys from older schemas are dropped without warning, and PDD falls back to built-in defaults. Per the issue, this costs users ~1 hour of debugging per affected case.Fix
Add schema-based validation in
_load_pddrc_configthat emits aUserWarningfor any unknown key at the root, context, or defaults levels. Warning format matches the issue's specification: WARNING: .pddrc contains unknown key 'X' at path 'Y', ignored. Run 'pdd setup' to regenerate.Unknown keys are reported but not rejected, so stale configs continue to load — avoids breaking users on upgrade. Could be promoted to errors in a future release.
Schema
Known keys by nesting level:
version,contextspaths,defaultsgenerate_output_path,test_output_path,example_output_path,prompts_dir,default_language,target_coverage,strength,temperature,budget,max_attempts,outputsSchema verified by tracing
pdd/construct_paths.py's_resolve_config_hierarchyto identify keys that are actually consumed.Tests
7 new tests in
tests/test_construct_paths.py:auto_deps_csv_path(regression test)prompt_path(regression test)Findings surfaced by the validator
Running the validator against the codebase caught four real issues:
1. Test fixtures with incorrectly-nested keys
Two tests in
TestConstructPathsResolutionModeParameterwrote.pddrcfiles with path keys directly under the context block (e.g.,contexts.default.generate_output_path) rather than insidedefaults. Dead config — the resolver ignores those keys at the context level. Fixed in this PR.2.
auto_deps_csv_pathprescribed by templates but not consumedPDD's template at
pdd/templates/generic/generate_pddrc_YAML.promptprescribedauto_deps_csv_pathin every context across 9 occurrences. The repo's own production.pddrcandexamples/prompts_linter/.pddrc(5 contexts each) followed this convention, and the example README instructed users to add the key. But_resolve_config_hierarchynever reads it —auto_deps_mainfalls back to the default"project_dependencies.csv".Per PR review by @gltanaka: removed from the validator's allow-list, from the template (9 occurrences), from the prompt's schema doc, and from
examples/prompts_linter/.pddrcandREADME.md(10 occurrences total). Following up with a separate issue for the actual wiring work (~6 touchpoints in path-resolution machinery).3.
matchfixture intest_find_prompt_file.py:424Validator surfaced
contexts.backend-utils.matchas an unknown key. Investigation showedmatchis not a real PDD schema key (the test's assertion only verifiesprompts_dir). Removed from the fixture.4.
prompt_pathdocumented but not consumedPer PR second review by @gltanaka:
prompt_pathwas in_PDDRC_DEFAULTS_KEYSbecauseconstruct_paths_python.promptdocumented it as an alias forprompts_dir, but_resolve_config_hierarchynever implemented the documented resolution chain. Same class of silent-ignore asauto_deps_csv_path.Took the 'remove' option: stripped
prompt_pathfrom_PDDRC_DEFAULTS_KEYS, removed the alias claim fromconstruct_paths_python.prompt(the prompt was the source-of-truth bug, not the code), and added a regression test.PDD_PROMPT_PATHenv var is unaffected — only the.pddrckey alias was removed.CI
Local filtered suite passes with the same failure count as
main(verified withgit stash+ branch checkout). No newunknown keywarnings emitted by the validator anywhere in the suite. Loading the repo's checked-in.pddrcandexamples/prompts_linter/.pddrcboth produce zero warnings.Files changed
pdd/construct_paths.py— validator function, schema constants, call sitepdd/prompts/construct_paths_python.prompt— validation requirement documented, removedprompt_pathalias claimpdd/templates/generic/generate_pddrc_YAML.prompt— removedauto_deps_csv_pathprescriptionexamples/prompts_linter/.pddrc— removedauto_deps_csv_pathexamples/prompts_linter/README.md— removedauto_deps_csv_pathinstructionstests/test_construct_paths.py— 7 new tests + 2 fixture correctionstests/test_find_prompt_file.py— 1 fixture correction (match key)