Problem
Generic prompt rendering uses safe substitution, which leaves unknown placeholders unresolved. Some prompt paths have explicit fully-rendered checks, but reviewer prompt dispatch does not. This allowed ${REVIEW_ROUND} to remain in rendered reviewer prompts.
Confirmed missing behavior
- No reviewer-specific unresolved-placeholder validation after render.
- Existing unresolved-placeholder validators are present for other prompt types, proving the pattern exists but is not applied to reviewer prompts.
Evidence
/Users/chronoai/.claude/skills/consensus-loop/scripts/codex_refactor_loop/prompt_rendering.py uses Template(...).safe_substitute(...).
/Users/chronoai/.claude/skills/consensus-loop/scripts/codex_refactor_loop/controller_actions.py: generic render_template() writes rendered text directly.
- Rebase-resolve and review-fix prompt paths have explicit fully-rendered checks.
- No equivalent check exists in
dispatch_reviewers() after rendering reviewer prompts.
Suggested fix
- Add
_ensure_reviewer_prompt_fully_rendered(prompt_path) or a shared fully-rendered check used by all prompt dispatch paths.
- Call it after rendering reviewer prompts and before appending
HARNESS_SPAWN_INTENT.
- Fail closed with a clear error if unresolved placeholders remain.
Acceptance criteria
- Reviewer prompt dispatch fails before spawn intent if any
${...} placeholder remains unresolved.
- The failure is recorded with prompt path and placeholder names.
- Tests cover unresolved placeholder rejection for reviewer prompts.
Review status
This was independently reviewed in /Users/chronoai/Desktop/proposed-main-repo-issues-review-gate.md and classified high confidence.
⟦AI:AUTO-LOOP⟧
ISSUE_RAISED:review-gate-hardening:reviewer-render-fail-closed
Problem
Generic prompt rendering uses safe substitution, which leaves unknown placeholders unresolved. Some prompt paths have explicit fully-rendered checks, but reviewer prompt dispatch does not. This allowed
${REVIEW_ROUND}to remain in rendered reviewer prompts.Confirmed missing behavior
Evidence
/Users/chronoai/.claude/skills/consensus-loop/scripts/codex_refactor_loop/prompt_rendering.pyusesTemplate(...).safe_substitute(...)./Users/chronoai/.claude/skills/consensus-loop/scripts/codex_refactor_loop/controller_actions.py: genericrender_template()writes rendered text directly.dispatch_reviewers()after rendering reviewer prompts.Suggested fix
_ensure_reviewer_prompt_fully_rendered(prompt_path)or a shared fully-rendered check used by all prompt dispatch paths.HARNESS_SPAWN_INTENT.Acceptance criteria
${...}placeholder remains unresolved.Review status
This was independently reviewed in
/Users/chronoai/Desktop/proposed-main-repo-issues-review-gate.mdand classified high confidence.⟦AI:AUTO-LOOP⟧
ISSUE_RAISED:review-gate-hardening:reviewer-render-fail-closed