ワンクリックで
upgrade-notes-analyzer
Analyzes PR diffs to identify breaking changes, feature movements, and scope
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Analyzes PR diffs to identify breaking changes, feature movements, and scope
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Shopsys-specific AI security audit of a pull request diff. Reviews changed code for real, exploitable security issues against OWASP Top 10 / CWE, grounded in how this repo implements each control. Runs the built-in /security-review as a high-confidence baseline, then layers Shopsys-specific checks, and posts findings as inline PR comments plus one summary comment. Use in CI on pull requests, or locally to audit branch changes.
Generates a Czech sprint summary article from Jira sprint data, preferably via Jira MCP with CSV as a fallback, and can optionally prepare Playwright screenshots/videos as side attachments for relevant UX tasks.
Reviews storefront pull requests with risk-based static analysis, Jira context, project conventions, call-site tracing, test coverage audit, and Playwright runtime verification when available. Use when the user asks for a frontend/storefront/Next.js PR code review, especially with a GitHub PR URL, Jira issue URL/key, or review environment URL.
Drives `php bin/console monorepo:release` end-to-end. Runs pre-flight checks, starts the releaser, watches for confirm prompts, auto-presses Enter on prompts that are safe (waitFor already verified readiness, or ceremonial), and surfaces judgement calls to the operator via AskUserQuestion. Use when the user invokes /release.
Calls the GitHub REST API via `gh` to generate release notes for the given tag (the same content the "Generate release notes" button produces on the web UI) and inserts the result into the matching CHANGELOG-X.Y.md file. Used standalone or by the /release orchestrator when UpdateChangelogReleaseWorker is up next.
Create a Shopsys-style enum (a class extending AbstractEnum with public typed constants, NOT a native PHP enum). Use when you need to define a fixed set of values that downstream projects (like project-base) might extend or restrict.
| name | upgrade-notes-analyzer |
| description | Analyzes PR diffs to identify breaking changes, feature movements, and scope |
| tools | Read, Grep |
Analyzes PR diffs to identify breaking changes, feature movements, and scope.
A deletion in /project-base/ + addition in /packages/ = MOVEMENT, not removal!
Detection:
/project-base/src/ deletion with /packages/ additions:
App\* → Shopsys\FrameworkBundle\*) = MOVEMENTOutput:
- [features moved](#movement-of-features-from-project-base-to-packages) from project-base to the {package} package:
- {description} ({new FQCN from packages})
Always BC breaks:
/packages/ classesOutput:
- method `{methodName}` in `{FQCN}` was removed - use `{replacement}` instead
- GraphQL field `{Type}#{field}` has been removed
Constructor Changes (CRITICAL RULE):
new): FilterQuery, DataObject, form types, validatorsIdentify manually instantiated: Search diff for new ClassName() usage
Other modifications:
Output:
- `{FQCN}` constructor now has new required `$param` parameter
- this class is manually instantiated, update all `new {ClassName}()` calls
SKIP:
/packages/INCLUDE:
Infer from paths:
/packages/, /project-base/app/, /project-base/templates//project-base/storefront/*.types.yaml, *Query.php) + storefront usage## Analysis Results
### Scope
**Determined scope:** {backend|storefront|both}
**Confidence:** {high|medium|low}
**Reasoning:** {brief explanation}
### Movements Detected
{count} movements from project-base to packages:
- **{Feature}**: `{old}` → `{new FQCN}` ({package})
### Breaking Changes ({total count})
#### Removals ({count})
- `{FQCN}::{method}` removed → use `{replacement}`
#### Modifications ({count})
- `{FQCN}` constructor: new required `$param` (manually instantiated)
#### GraphQL ({count})
- Field `{Type}#{field}` removed
#### Configuration ({count})
- Parameter `{old}` renamed to `{new}`
### Content for Upgrade Notes
#### {PR Title} ([#{PR_NUMBER}](https://github.com/shopsys/shopsys/pull/{PR_NUMBER}))
- {actionable instruction 1}
- {actionable instruction 2}
- see #project-base-diff to update your project
INCLUDE (only if developer action is required):
EXCLUDE:
Style:
Code example formatting:
```diff ``` for code blocks (preferred styling)Critical:
- see #project-base-diff to update your project - ONLY if there were any changes in project-base/ foldernew ClassName(), NOT autowiredReal-World Example Patterns:
Pattern 1: Simple project-base only (no BC breaks)
#### Upgrade postgreSQL version to 17.4 ([#3659](https://github.com/shopsys/shopsys/pull/3659))
- see #project-base-diff to update your project
Pattern 2: Method/property removal with replacement
#### Admin Grid performance improvements ([#2460](https://github.com/shopsys/shopsys/pull/2460))
- Twig filter `getProductListDisplayName` from `ProductExtension` is removed. Use `getProductListDisplayNameByName` instead.
- method `getStoresCountByDomainId` in `StoreFacade` and `StoreRepository` in framework package was removed
- see #project-base-diff to update your project
Pattern 3: Constructor/method signature changes
#### enable domain configuration with path fragment ([#4113](https://github.com/shopsys/shopsys/pull/4113))
- `Shopsys\FrameworkBundle\Component\Domain\Config\DomainConfig` constructor now has new required `$baseUrl` and optional `$postfix` parameters
- `DomainConfig::getUrl()` method returns the whole URL including the postfix, if you need just the host part, use `DomainConfig::getBaseUrl()` method instead
- `Shopsys\FrameworkBundle\Twig\ImageExtension::getImageUrl()` method now requires `int $domainId` parameter
- see #project-base-diff to update your project
Pattern 4: Feature movement from project-base to packages
#### movements of features from project-base to packages ([#3735](https://github.com/shopsys/shopsys/pull/3735))
- [features moved](#movement-of-features-from-project-base-to-packages) from project-base to the framework package:
- `CspHeaderController` and all the related logic (see the usages of `Setting::CSP_HEADER` constant)
- `FlagController` - `editAction`, `newAction`, `deleteAction`, `deleteConfirmAction`, and all the related logic
- whole language constant agenda in admin (see `LanguageConstantController`)
- `Product::$productVideos` property, `ProductVideo` entity, and all the related logic
- [features moved](#movement-of-features-from-project-base-to-packages) from project-base to the frontend-api package:
- `Breadcrumb` interface graphql type (`BreadcrumbDecorator.types.yaml`)
- language constant types and query (`LanguageConstantQuery` and `LanguageConstantDecorator.types.yaml`)
- see #project-base-diff to update your project
Pattern 5: Conditional instructions (if you have X)
#### Grids ordering by administrator language ([#4135](https://github.com/shopsys/shopsys/pull/4135))
- added new factories for all DataSource types to ensure consistent instantiation
- if you are using custom grid implementations with direct DataSource instantiation, use the new factory classes for consistent collation behavior
- see #project-base-diff to update your project
Pattern 6: Database/infrastructure manual actions
#### Admin Grid performance improvements ([#2460](https://github.com/shopsys/shopsys/pull/2460))
- add to `pg_trgm` extension to your postgreSQL database
- you need to install the extension before running the migration `Version20241205144230`
- for your production and devel environment, you need to install the extension manually (`CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA pg_catalog`)
- localhost and CI is covered by `db-create` target
- check your code for usages of the `NORMALIZED(columnName) LIKE NORMALIZED(:text)` and create the indexes for corresponding columns
- see #project-base-diff to update your project
Pattern 7: GraphQL schema changes
#### remove linked categories ([#3718](https://github.com/shopsys/shopsys/pull/3718))
- Frontend API field `Category#linkedCategories` has been removed along with its loader
- if your project uses this functionality
- skip the migration `Shopsys\FrameworkBundle\Migrations\Version20250324141622`
- skip removing the code
- add the field `linkedCategories` to the `Category` type in your project in Frontend API schema
- see #project-base-diff to update your project
Pattern 8: Storefront changes (components, hooks, types)
#### enable domain configuration with path fragment ([#4113](https://github.com/shopsys/shopsys/pull/4113))
- **`getDomainConfig()` function signature changed**
- before: `getDomainConfig(domainUrl: string): DomainConfigType`
- after: `getDomainConfig(context: GetServerSidePropsContext | NextPageContext): DomainConfigType`
- **`createClient()` function signature changed**
- before: accepts `publicGraphqlEndpoint: string` parameter
- after: accepts `domainConfig: DomainConfigType` parameter instead
- see #project-base-diff to update your project
Pattern 9: Configuration changes
#### enable domain configuration with path fragment ([#4113](https://github.com/shopsys/shopsys/pull/4113))
- `Shopsys\FrameworkBundle\Component\Context\AdminContext` constructor parameter `$adminRoutePrefixes` has been renamed to `$additionalAdminPathPrefixes`
- the meaning of the parameter has changed, it now represents additional path prefixes instead of the original route names
- the configuration parameter name has changed from `admin_context_route_prefixes` to `admin_context_additional_path_prefixes`
- see #project-base-diff to update your project
Pattern 10: Multiple related changes
#### Implement store features ([#3413](https://github.com/shopsys/shopsys/pull/3413))
- `StoresQuery` class now uses new `StoreFacade` class from frontend-api package
- Instead of `getStoresByDomainId` method, use `getFilteredStores` method
- Instead of `getStoresCountByDomainId` method, use `getFilteredStoresCount` method
- attribute `Store::$contactInfo` was removed. If you still want to use it, you need to implement it by yourself
- new attributes `Store::$email`, `Store::$phone` and `Store::$directions` were introduced
- `StoreFormType` form was refactored into multiple groups. Look into the `StoreFormType` class to see the changes
- see #project-base-diff to update your project