A 7-phase validator that gates merges
Amplifier teams run real work through recipes — declarative YAML workflows. Three defect classes hide until execution time.
So the question is: can we catch them before merge?
Merged in PR #50 on 2026-03-14 by Brian Krabach, it emits 51 distinct finding codes and shipped with 117 passing phase tests.
This is a real pipeline — but getting recipe validation right was hard.
The engine's validator.py (in the repo since 2025-12-15) never tracked output_exit_code, firing false-positive "variable not defined" errors.
PR #49 fixed it on 2026-03-13 — one day before the pipeline shipped.
type: bash step type added2025-12-29 — exposed the blind spotFrom environment check through report synthesis, each phase adds a layer of checks the later mechanism and payoff will lean on.
Two of those phases carry the heart of the mechanism.
It discovers a bundle's local agents from repo_path/agents, builds the known-agent patterns, and catches reference errors that would otherwise blow up at runtime.
And it renders a verdict — deterministically.
classify_recipe() sorts each recipe into one of four levels straight from its ERROR / WARNING / SUGGESTION findings.
Which sets up the real point: how cheap this gate is.
10 of the pipeline's 12 steps are plain bash. Clean repos take a bash-only quick-approval fast path and never pay for an LLM call.
Both agent steps use foundation:zen-architect, and both are conditional.
type: bashWired opt-in (on_error: continue) into amplifier-foundation's validate-bundle-repo.yaml v3.3.0, the gate runs before merge.
A deterministic-first pattern: spend an LLM only when it's actually needed.
Shipped & maintained · v1.0.1Data as of: 2026-04-22 (softcloud cache of microsoft/amplifier-bundle-recipes @ commit 7963f317, v1.0.1)
Feature status: Shipped and maintained — first merged 2026-03-14 (PR #50), most recently touched 2026-04-07 (PR #60); 8 commits total.
Research performed:
wc -l recipes/validate-recipes.yaml (2205 lines; 1,671 additions in PR #50)grep -n '# PHASE' recipes/validate-recipes.yaml + PR #50 body (7 phases, 0–6)grep -nE '^ - id:|^ type:|^ agent:' recipes/validate-recipes.yaml (12 steps, 10 bash, 2 agent)grep -oE '"code": "[A-Z_]+"' recipes/validate-recipes.yaml | sort -u | wc -l (51)grep -rcE 'def test_' recipes/tests/test_phase*.py (6+12+21+21+19+38 = 117)gh api repos/microsoft/amplifier-bundle-recipes/commits?path=.../validator.py; gh pr view 49gh pr view 50 --repo microsoft/amplifier-bundle-recipes --json files; PRs #49–#60grep -n 'validate-recipes' amplifier-foundation/recipes/validate-bundle-repo.yaml (v3.3.0)gh repo view bkrabach/develop-pipeline-test (a smoke-test fixture, not this pipeline)Gaps: "Before merge" is the design intent (opt-in sub-recipe); no CI workflow that auto-runs validate-recipes was found. "Fail silently in production" is narrative framing — repos confirm the failure classes and the pre-merge validator, not that phrasing.
Primary contributor: Brian Krabach (bkrabach) — 7 of 8 commits touching the file, plus the #49 fix. Salil Das — 1 commit (PR #60).