一键导入
phpunit-integration-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 页面并帮你完成安装。
基于 SOC 职业分类
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.
| name | phpunit-integration-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 integration test for compliance with integration testing conventions.
Review the test against the integration ruleset (group: integration, INTEGRATION-001 through INTEGRATION-008), assuming it belongs in tests/integration/. Do NOT load the placement reasoning rules (group: placement) and do NOT decide whether the test should be migrated.
When the assertion-shape smoke check fires (INTEGRATION-008), the report emits a single informational hint pointing at the dedicated migrating skill. The hint never appears as an error or warning.
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 integration 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/integration/**/*Test.php"))tests/integration/ (abort if tests/unit/ or tests/migration/)#[CoversClass(...)] attribute to identify the SUTuse IntegrationTestBehaviour; / base class to understand the lifecycle{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] (or each, if multiple)All mcp__plugin_test-writing_test-rules__get_rules calls in Phase 4 carry test_type=integration and group=integration.
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. Integration rules carry no test_category — never pass a category filter.
Do NOT call get_rules(group=placement). Placement reasoning is the migrating skill's responsibility.
When {methods} is provided, apply detection only to the named methods and their associated data providers (identified by #[DataProvider] attributes on scoped methods). 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=integration, test_type=integration, review_unit=class-structure) with NO scoped_review. Apply whatever rules the filter returns; the integration group has none, so return PASS. 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 integration, 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.Integration 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 the placement hint as a single line in the Informational section when INTEGRATION-008 fires.
Include full passed checks list.
test_path: tests/integration/Path/To/SomeTest.php
status: PASS|NEEDS_ATTENTION|ISSUES_FOUND|FAILED
errors:
- rule_id: INTEGRATION-001
title: "Integration test uses Shopware integration base"
enforce: must-fix
location: SomeTest.php:25
current: |
# problematic code
suggested: |
# fixed code
warnings:
- rule_id: INTEGRATION-007
title: "Setup-to-assertion ratio is balanced"
enforce: should-fix
location: SomeTest.php:60
current: |
# code
suggested: |
# improved code
informational:
- rule_id: INTEGRATION-008
title: "Placement smoke check"
hint: "Every assertion is unit-shape. Consider invoking phpunit-integration-to-unit-migrating on this file."
reason: null
| Status | Condition |
|---|---|
| PASS | 0 errors, 0 warnings (informational hints do not change status) |
| NEEDS_ATTENTION | 0 errors, 1+ warnings |
| ISSUES_FOUND | 1+ errors |
| FAILED | Invalid input (file not found, not in tests/integration/) |
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=…SomeTest.php, methods=[testCreate, testList], review_unit=method. Selects method integration rules and judges only the named methods.test_path=…, review_unit=[class-structure, class-bodies], plus methods=[…] when the review is 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 integration rules from the inline text (the group has none).If mcp__plugin_test-writing_test-rules__get_rules is unavailable:
If the file is not in tests/integration/:
phpunit-unit-test-reviewing for tests/unit/ and phpunit-migration-test-reviewing for tests/migration/If the #[CoversClass] target cannot be located:
The placement reasoning rules (group: placement, PLACEMENT-001..008) are NOT loaded by this skill. If the smoke check fires (INTEGRATION-008), the report emits a single hint; users must invoke phpunit-integration-to-unit-migrating explicitly to run the deliberation. Do not deliberate inline.