一键导入
phpunit-migration-test-reviewing
Internal sub-skill. Do not auto-activate. Use only when explicitly invoked by name by another skill or agent.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Internal sub-skill. Do not auto-activate. Use only when explicitly invoked by name by another skill or agent.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Use this skill when the user asks to write, create, draft, or validate an Architecture Decision Record for the Shopware core repository — phrases like "write an ADR", "create an architecture decision record", "draft a decision record", "validate this ADR", "check ADR quality", or when they mention "ADR", "architecture decision record", or "decision record" in a context that calls for capturing or auditing an architectural decision. Interactively creates ADRs (simple or multi-domain structure) with proper YAML front matter and guided content, and validates existing ADRs against front matter rules, required coverage, structure, writing style, and Shopware-specific patterns.
Use this skill when the user explicitly asks to generate, write, draft, or create a commit message, squash commit, commit title, or merge commit message for the Shopware core repository (shopware/shopware). Supports two modes — full commit messages (title + body) for branch commits, and squash merge titles (title-only) for trunk merges — the skill auto-detects which based on the current branch and PR target. Analyzes diffs, infers scope from Shopware's directory structure, and detects breaking changes. Do NOT activate during implementation work or when the user is still writing code; only when they are ready to capture a finished change. For commit messages in the ai-coding-tools marketplace repo itself, use the commit-message-generating skill instead.
Use this skill when the user asks to write, draft, create, or improve a PR description for a Shopware core repository PR — AND that PR targets a non-trunk feature branch (not trunk itself). Trigger phrases like "write a PR description", "draft the PR", "what should I put in the PR body". The skill detects the target branch and only activates for non-trunk targets; for trunk-targeting PRs, use pr-description-writing instead. Do NOT activate mid-implementation — only when the user is ready to describe finished changes. Produces a conventional-commit title and a narrative-prose description with topical subsections, leveraging the diff against the target branch and any related PRs in the chain.
Use this skill when the user asks to write, draft, create, or improve a PR description, is about to create a PR, or mentions "PR description", "pull request description", or "PR template" — AND that PR targets trunk in the Shopware core repository (shopware/shopware). The skill detects the target and only activates for trunk-targeting PRs; for PRs targeting a feature branch, use feature-branch-pr-writing instead. Do NOT activate mid-implementation — only when the user is ready to describe finished changes. Produces a conventional-commit title and a description following Shopware's 5-section template, leveraging the full branch diff against trunk and session context.
Use this skill when the user is completing features, deprecations, or breaking changes in the Shopware core repository that affect external developers, or when they ask to write release info, upgrade entries, release notes, release documentation, or changelog entries — phrases like "write a release info entry for my changes", "add an upgrade note", "what goes in RELEASE_INFO", "draft an UPGRADE.md entry". Drafts entries for RELEASE_INFO-6.*.md and UPGRADE-6.*.md based on the full branch diff against trunk, calibrated to the magnitude of change. Do NOT activate mid-implementation, for internal refactoring, non-critical bug fixes, or test-only changes — those do not get release entries.
Use this skill when the user just installed the chunkhound-integration plugin and needs to configure it, asks how to set up semantic code search or ChunkHound — phrases like "help me set up chunkhound", "configure semantic search", "set up code research" — or when ChunkHound MCP tools fail with config or connection errors. Walks through prerequisite checks (chunkhound CLI, embedding provider — VoyageAI or OpenAI), creates .chunkhound.json with the chosen provider, runs the initial index, and validates the MCP server connection.
基于 SOC 职业分类
| name | phpunit-migration-test-reviewing |
| version | 4.2.2 |
| description | Internal sub-skill. Do not auto-activate. Use only when explicitly invoked by name by another skill or agent. |
| user-invocable | false |
| allowed-tools | Glob, Grep, Read, mcp__plugin_test-writing_test-rules__get_rules |
Review a Shopware PHPUnit migration test for compliance with migration testing conventions.
Review the test against the Shopware migration testing rules (MIGRATION-001 through MIGRATION-009). All rules are must-fix.
Source-aware: Read the source migration class for the rules that need it (MIGRATION-002, MIGRATION-004).
Scope-aware: When method names are provided, report only violations within those methods. Still read class-level context (imports, #[CoversClass], base class) for understanding, but ignore findings outside the scoped methods.
Output: Structured report per references/output-format.md.
{test_path} (required) — Path to the migration test file.{methods} (optional) — List of test method names to scope the review to. When omitted, the full class is reviewed.{review_unit} (optional) — method, class-structure, class-bodies, or a list of these. When set, only rules whose minimal evaluation unit matches load. When omitted, all rules load. Orthogonal to {methods}.{digest} (optional) — a pre-extracted, body-free structural digest of the test class. When set, review this text and skip reading the test file. Forces class-structure rules only. See Digest Mode.{rules} (optional) — the pre-rendered rule catalog as text, provided in your prompt. When set, enter Inline-Rules Mode: select rules from this text instead of calling get_rules. When omitted, rules load via get_rules. See Inline-Rules Mode.If {digest} is set, skip this phase and follow Digest Mode below instead.
Glob("tests/migration/**/*Test.php"))tests/migration/ directory (abort if tests/unit/ or tests/integration/)#[CoversClass(...)] attribute to find the source migration classShopware\Core\Framework\Migration\MigrationStep{methods} provided: verify each named method exists. If a method is not found, report it as a warning and continue with the rest. If no methods match, abort with reason "No matching methods found."#[CoversClass]updateDestructive() has logic:
updateDestructive method body{}, { }) or only parent::updateDestructive($connection); = no logicupdate() and updateDestructive():
CREATE TABLE, ALTER TABLE ... ADD, DROP TABLE, DROP COLUMNINSERT, UPDATE, DELETEAll mcp__plugin_test-writing_test-rules__get_rules calls in Phase 4 carry test_type=migration and group=migration.
When {methods} is provided, also add scoped_review=true. When {review_unit} is set, also add review_unit={value}; the filter is single-valued per call, so for a list (e.g. the fused whole-class track [class-structure, class-bodies]) issue one call per value and union the results. Migration rules carry no test_category — never pass a category filter.
When {methods} is provided, apply detection only to the named methods and their associated data providers. The rest of the class is available for context, but violations outside the scoped methods are not reported.
When {digest} is set, the supplied text is the only artifact under review:
Read the test file or the source class. The digest is body-free (class declaration, #[CoversClass], member order, method signatures, attribute lines, property declarations) and self-contained for class-structure rules.review_unit=class-structure. In Phase 4, call get_rules(group=migration, test_type=migration, review_unit=class-structure) with NO scoped_review. Apply whatever rules the filter returns — MIGRATION-008 is the migration group's class-structure rule. When {rules} is also set, instead select the class-structure rules from the inline text per Inline-Rules Mode (group match + Review unit == class-structure).location as a member name or attribute from the digest (line numbers are unavailable without the file body).{methods} and {review_unit} inputs are subsumed: the digest defines the scope and the unit.When {rules} is set, the catalog is provided as text in your prompt: select rules from that text instead of calling get_rules in Phase 4. Each rule in the text is a metadata header — # {id} — {title}, then Group: … | Enforce: …, then Test types: … | Categories: … | Scope: … | Review unit: … | Scoped review: … — followed by the rule body. Select a rule when ALL hold:
Group equals migration, and{review_unit} is set: its Review unit equals that value (for a list, take the union over the values), and{methods} is set (scoped review): its Scoped review is not exclude.Migration rules carry Categories: all; do not filter on category. Apply each selected rule's detection algorithm. While {rules} is set, the inline text is the complete rule set: NEVER read, open, search, or locate a rule file by any means — no Read/Grep/Glob, no get_rules. (Reading the test file and its source class is unaffected.) When {rules} is omitted, rules load via get_rules with the Phase 3 filters.
For each rule obtained (inline selection or get_rules):
For output format and examples, see references/output-format.md.
Report each issue using the rule's ID and title from mcp__plugin_test-writing_test-rules__get_rules:
### [{rule_id}] {title}
Include for each issue:
Include full passed checks list.
test_path: tests/migration/Path/To/MigrationTest.php
status: PASS|ISSUES_FOUND|FAILED
errors:
- rule_id: MIGRATION-001
title: "Idempotency — update() called at least twice"
enforce: must-fix
location: MigrationTest.php:35
current: |
# problematic code
suggested: |
# fixed code
warnings: []
reason: null
The team review decomposes large files into per-track reviews. Each track also receives {rules} (the pre-rendered catalog text in its prompt), so rule loading is Inline-Rules Mode selection rather than get_rules. Each track sets the inputs below:
test_path=…MigrationTest.php, methods=[testMigration, testMultipleExecutions], review_unit=method. Selects method migration rules and judges only the named methods.test_path=…, review_unit=[class-structure, class-bodies], plus methods=[…] when scoped. Reads full bodies; selects the class-structure and class-bodies rules from the inline text and unions them.digest="<class shape text>", no test_path read. Per Digest Mode: select the class-structure migration rules from the inline text and judge them against the digest.If mcp__plugin_test-writing_test-rules__get_rules is unavailable:
If the #[CoversClass] target cannot be located:
If the file is not in tests/migration/:
phpunit-unit-test-reviewing for unit tests