Skip to content

Implementation Plan: T5-P3-A1-WP1 Recipe × Backend Composition Matrix CI Gate#4080

Merged
Trecek merged 4 commits into
developfrom
t5-p3-a1-wp1-provide-a-merge-blocking-ci-test-that-proves-ev/4008
Jun 12, 2026
Merged

Implementation Plan: T5-P3-A1-WP1 Recipe × Backend Composition Matrix CI Gate#4080
Trecek merged 4 commits into
developfrom
t5-p3-a1-wp1-provide-a-merge-blocking-ci-test-that-proves-ev/4008

Conversation

@Trecek

@Trecek Trecek commented Jun 12, 2026

Copy link
Copy Markdown
Collaborator

Summary

Add tests/recipe/test_recipe_backend_composition_matrix.py — a parametrized test module that validates every bundled recipe composes validly under every registered backend. The module uses:

  • Full cross-product parametrization from live BACKEND_REGISTRY × all_validated_recipe_names() (currently 20 recipes × 2 backends = 40 cells)
  • DECLARED_UNSUPPORTED frozenset for by-design unsupported combos (currently empty — all combos are supported)
  • KNOWN_BROKEN dict for should-work-but-broken combos decorated with xfail(strict=True) (currently 4 cells: agent-eval and skill-eval on both backends, tracking Resolve dispatch-readiness exemptions for agent-eval and skill-eval recipes #4069)
  • UNSUPPORTED_REASONS dict mapping each DECLARED_UNSUPPORTED entry to {reason, issue_ref}
  • Orphan meta-test preventing skip-rot (stale DECLARED_UNSUPPORTED entries)
  • Collection-count meta-test preventing matrix shrinkage

Per live cell, the test calls load_and_validate(recipe_name, project_dir=_PROJECT_ROOT, backend_name=backend_name, ingredient_overrides=_backend_capability_overrides(get_backend(backend_name)), lister=DefaultSkillResolver()) and asserts: result['valid'] is True, result['content'] is non-empty, no [post-prune] dangling route: suggestion, no backend-incompatible-skill ERROR suggestion.

Closes #4008

Implementation Plan

Plan file: /home/talon/projects/autoskillit-runs/impl-20260611-182135-648906/.autoskillit/temp/make-plan/t5-p3-a1-wp1-recipe-backend-composition-matrix_plan_2026-06-11_182600.md

🤖 Generated with Claude Code via AutoSkillit

Token Usage Summary

Step Model count uncached output cache_read peak_ctx turns cache_write time
plan* opus[1m] 1 85 23.7k 2.0M 101.8k 48 80.3k 30m 21s
verify* sonnet 1 76 9.3k 394.4k 56.6k 23 35.7k 5m 12s
implement* MiniMax-M3 1 1.1M 6.8k 0 0 49 0 5m 37s
fix* sonnet 1 134 5.7k 834.4k 69.1k 48 48.2k 3m 28s
audit_impl* sonnet 1 1.1k 5.3k 240.1k 40.1k 17 23.5k 3m 0s
prepare_pr* MiniMax-M3 1 234.5k 2.2k 0 0 15 0 56s
compose_pr* MiniMax-M3 1 251.6k 1.7k 0 0 15 0 59s
review_pr* sonnet 2 322 48.2k 2.0M 77.3k 94 110.2k 12m 6s
resolve_review* sonnet 2 330 19.9k 2.2M 72.7k 93 94.6k 8m 31s
Total 1.6M 122.9k 7.7M 101.8k 392.6k 1h 10m

* Step used a non-Anthropic provider; caching behavior may differ.

Token Efficiency

Step LoC Changed cache_read/LoC cache_write/LoC output/LoC
plan 0
verify 0
implement 140 0.0 0.0 48.8
fix 4 208595.2 12058.8 1436.8
audit_impl 0
prepare_pr 0
compose_pr 0
review_pr 0
resolve_review 8 273688.2 11831.0 2481.4
Total 152 50646.9 2582.6 808.4

Model Usage Breakdown

Model steps uncached output cache_read cache_write time
opus[1m] 1 85 23.7k 2.0M 80.3k 30m 21s
sonnet 5 1.9k 88.5k 5.7M 312.3k 32m 19s
MiniMax-M3 3 1.6M 10.7k 0 0 7m 32s

Trecek and others added 4 commits June 11, 2026 19:02
Adds tests/recipe/test_recipe_backend_composition_matrix.py that validates
every bundled recipe composes validly under every registered backend via
full cross-product parametrization (currently 20 recipes x 2 backends = 40
cells). Governance tables:
- DECLARED_UNSUPPORTED frozenset: by-design unsupported combos (currently empty)
- KNOWN_BROKEN dict: should-work-but-broken combos (4 cells, tracking #4069)
  decorated with xfail(strict=True) so unexpected passes force removal
- UNSUPPORTED_REASONS dict: skip message + issue_ref for DECLARED_UNSUPPORTED entries

Two meta-tests prevent governance rot:
- test_declared_unsupported_orphan_check: every DECLARED_UNSUPPORTED entry
  must reference a live recipe + backend
- test_matrix_collection_count: matrix = R x B - U (structural guard)

Per-cell assertions: result[valid] is True, content non-empty, no
'[post-prune] dangling route:' suggestions, no backend-incompatible-skill
ERROR suggestions.

Also registers the new file in tests/_test_filter.py LAYER_CASCADE_CONSERVATIVE
workspace block (direct autoskillit.workspace importer) and adds a row to
tests/recipe/AGENTS.md for sub-CLAUDE.md completeness.
…trix

The composition matrix test imports autoskillit.server, .execution, and
.workspace — same as test_backend_reachability.py — to exercise the full
pruning + validation pipeline. Add the per-file allowlist entry so
test_test_files_respect_layer_boundaries passes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…unsupported entries

_MATRIX_IDS was built before DECLARED_UNSUPPORTED was defined, making it
impossible to exclude unsupported combos. Reorder so DECLARED_UNSUPPORTED
is defined first, then filter it in the _MATRIX_IDS comprehension.
This makes test_matrix_collection_count correct once any entries are added.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
_MATRIX_IDS already excludes DECLARED_UNSUPPORTED tuples at module level
(L36), so the runtime check at the top of test_recipe_backend_matrix_cell
could never be true. Removing the dead guard also eliminates the latent
KeyError in UNSUPPORTED_REASONS access.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@Trecek Trecek added this pull request to the merge queue Jun 12, 2026
Merged via the queue into develop with commit 43e9ae4 Jun 12, 2026
3 checks passed
@Trecek Trecek deleted the t5-p3-a1-wp1-provide-a-merge-blocking-ci-test-that-proves-ev/4008 branch June 12, 2026 02:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant