Skip to content
Draft

6.x #4124

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
193 commits
Select commit Hold shift + click to select a range
eb82bf5
Bootstrap Craft Commerce 6: rename src/ to src-yii2/, Craft 6 + PHP 8…
lukeholder Jun 24, 2026
81bee28
Craft 6 / PHP 8.5 compatibility and rector cleanup
lukeholder Jun 24, 2026
69c6b5e
Remove Yii2 debug panel (incompatible with Craft 6 / Laravel)
lukeholder Jun 24, 2026
bfc3082
Add Pest/Laravel test infrastructure
lukeholder Jun 24, 2026
621853a
Stage 1: migrate enums and Table constants to CraftCms\Commerce
lukeholder Jun 24, 2026
6d42621
Stage 2: migrate interfaces and base contracts to CraftCms\Commerce
lukeholder Jun 24, 2026
70c14f2
Stage 3: migrate events to CraftCms\Commerce domain namespaces
lukeholder Jun 24, 2026
6545417
Stage 4: migrate helpers to CraftCms\Commerce\Helpers
lukeholder Jun 24, 2026
3f9eddb
Stage 5a: migrate simple value models to CraftCms\Commerce
lukeholder Jun 24, 2026
bf3e226
Stage 5b: migrate models with relationships to CraftCms\Commerce
lukeholder Jun 24, 2026
d82650d
Stage 5c+5d: migrate inventory, catalog, transfer, email, PDF, zones,
lukeholder Jun 24, 2026
ca32b6d
Stage 5e: migrate OrderStatus, PaymentSource, InventoryLocation, Cata…
lukeholder Jun 24, 2026
78ef5bc
Stage 5f: migrate Sale, StoreSettings, Transaction models +
lukeholder Jun 24, 2026
a4acf98
Stage 5g: migrate shipping method hierarchy to CraftCms\Commerce
lukeholder Jun 24, 2026
6ea808b
Stage 5h: migrate ShippingRule to CraftCms\Commerce\Shipping\Models
lukeholder Jun 24, 2026
8e0d31e
Stage 5i: migrate CatalogPricingRule + post-Stage 5 fixes
lukeholder Jun 24, 2026
33e8009
Cleanup: query type hints in condition rules + edit-page crash fixes
lukeholder Jun 24, 2026
8bfccdc
Stage 5j: stub Settings + migrate DummyPlan
lukeholder Jun 24, 2026
15a0f83
Stage 5k: migrate Store to CraftCms\Commerce\Store\Models
lukeholder Jun 24, 2026
de41e28
Stage 5m: migrate Discount; drop 5.x deprecations on Settings/Store/D…
lukeholder Jun 24, 2026
32de47c
Stage 6a (1/5): migrate Currencies service to CraftCms\Commerce\Services
lukeholder Jun 24, 2026
48dfc93
Stage 6a (2/5): migrate PaymentCurrencies service to CraftCms\Commerc…
lukeholder Jun 24, 2026
a60cc27
Stage 6a (3/5): migrate TaxCategories service to CraftCms\Commerce\Se…
lukeholder Jun 24, 2026
50b03bc
Stage 6a (4/5): migrate ShippingCategories service to CraftCms\Commer…
lukeholder Jun 24, 2026
e5c4bc9
Stage 6a (5/5): migrate TaxZones service to CraftCms\Commerce\Services
lukeholder Jun 24, 2026
fb96a4c
Stage 6a (bonus): migrate ShippingZones service to CraftCms\Commerce\…
lukeholder Jun 24, 2026
071ebdb
Update CHANGELOG-WIP with Stage 6a (store config services)
lukeholder Jun 24, 2026
8710f48
Fix CP fatal: UserQuery::EVENT_AFTER_POPULATE_ELEMENTS removed in Cra…
lukeholder Jun 24, 2026
b7e672b
Fix CP fatal: align query __set() signature with new ElementQuery
lukeholder Jun 24, 2026
3cd46ce
Drop leftover APP_URL/APP_KEY env vars from phpunit.xml.dist
lukeholder Jun 24, 2026
f415e4d
Align legacy service wrappers with Craft Core delegation pattern
lukeholder Jul 1, 2026
9dd12de
Stage 6b: migrate Promotions services to Laravel (Coupons, CatalogPri…
lukeholder Jul 1, 2026
09459d1
Fix CP fatal: implement getFieldIdColumn/getPrimaryOwnerIdColumn on V…
lukeholder Jul 1, 2026
07b18d4
Fix CP fatals: align statusCondition() return type with new CMS Closu…
lukeholder Jul 1, 2026
9b7ece9
Fix CP fatal: Settings must extend craft\base\Model for createSetting…
lukeholder Jul 1, 2026
499ca8e
Stage 6c: Shipping services
lukeholder Jul 1, 2026
bb3ae11
Update dompdf
lukeholder Aug 5, 2026
18de905
Stage 6d: Tax services
lukeholder Aug 5, 2026
9b4c627
Fix TypeError: legacy service stubs must type-hint the new namespace,…
lukeholder Aug 5, 2026
6c1c6f2
Stage 6e: Inventory services
lukeholder Aug 5, 2026
6241ec7
Fix CP fatal: gateway processWebHook() return type mismatch with Gate…
lukeholder Aug 5, 2026
f655fd6
Fix src/ classes still inheriting from deprecated legacy classes
lukeholder Aug 5, 2026
181e2d9
Merge branch '5.x' into 6.x
lukeholder Aug 5, 2026
c40de3a
Fix CP fatal: craft\helpers\Db and Illuminate\Support\Facades\DB impo…
lukeholder Aug 5, 2026
267cd8a
Not needed
lukeholder Aug 5, 2026
6382bf8
Move OrderNoticeType enum to the Order namespace
lukeholder Aug 5, 2026
b1b20f8
Fix migrations for Craft 6's Laravel migrate runner
lukeholder Aug 5, 2026
96d2b28
Rewrite the 6 converted migrations as genuine Laravel migrations
lukeholder Aug 5, 2026
b7379aa
Stage 8: Plugin.php + ServiceProvider
lukeholder Aug 5, 2026
c6f0f0b
Update changelog and migration plan tracker for Stage 8 + migration f…
lukeholder Aug 5, 2026
8859ca7
Fix CP fatal: register a legacy routing module so Commerce controller…
lukeholder Aug 6, 2026
1c5094b
Update changelog for the legacy routing module fix
lukeholder Aug 6, 2026
7cb9535
Merge branch 'feature/stage-8-plugin-provider' into 6.x
lukeholder Aug 7, 2026
03b2abc
Stage 6f: Payment services (Transactions, PaymentSources, Gateways, P…
lukeholder Aug 7, 2026
4a13286
Merge branch 'feature/stage-6f-payment-services' into 6.x
lukeholder Aug 7, 2026
19c7a01
Stage 6g: Catalog services (Products, Variants, Purchasables)
lukeholder Aug 7, 2026
c9546a9
Merge branch 'feature/stage-6g-catalog-services' into 6.x
lukeholder Aug 7, 2026
245c3a9
Stage 6h: Orders & Carts services
lukeholder Aug 7, 2026
4ad1bf8
Merge branch 'feature/stage-6h-orders-carts-services' into 6.x
lukeholder Aug 7, 2026
6ee6566
Stage 6i: Customer & misc services (Stage 6 complete)
lukeholder Aug 7, 2026
1f30211
Merge branch 'feature/stage-6i-customer-misc-services' into 6.x
lukeholder Aug 7, 2026
24bb598
Stage 7a: Purchasable & Donation elements
lukeholder Aug 10, 2026
c3782f3
Merge branch 'feature/stage-7a-purchasable-donation' into 6.x
lukeholder Aug 10, 2026
0c5827d
Add changelog-entries agent skill
lukeholder Aug 10, 2026
a947ec6
Stage 7b: Order element
lukeholder Aug 11, 2026
95c5f3e
Merge branch 'feature/stage-7b-order-element' into 6.x
lukeholder Aug 11, 2026
ea2ed4d
Stage 7c: LineItem
lukeholder Aug 11, 2026
8f2e32d
Merge branch 'feature/stage-7c-lineitem' into 6.x
lukeholder Aug 11, 2026
5c68fbf
Stage 7d: Product & Variant elements
lukeholder Aug 11, 2026
a395b7e
Merge branch 'feature/stage-7d-product-variant' into 6.x
lukeholder Aug 11, 2026
d264bc2
Stage 7e: ProductType
lukeholder Aug 12, 2026
724c109
Merge branch 'feature/stage-7e-producttype' into 6.x
lukeholder Aug 12, 2026
34fba4c
Fix Events layer: 51 event classes silently discarding constructor data
lukeholder Aug 12, 2026
7eb12b1
Merge branch 'feature/events-constructor-fix' into 6.x
lukeholder Aug 12, 2026
1c9769f
Craft core reference cleanup, Phase 1: type-hint and helper-method swaps
lukeholder Aug 12, 2026
116817b
Merge branch 'feature/craft-core-cleanup' into 6.x
lukeholder Aug 12, 2026
a2c660a
Craft core reference cleanup, Phase 2: Craft::$app->getX() facade swaps
lukeholder Aug 12, 2026
c9323d7
Merge branch 'feature/craft-core-cleanup-phase2' into 6.x
lukeholder Aug 12, 2026
573d3fc
Migrate CatalogPricingCondition and its condition rules
lukeholder Aug 12, 2026
11b3330
Merge branch 'feature/catalog-pricing-condition' into 6.x
lukeholder Aug 12, 2026
42d15fc
Stage 9a: Controllers & Routes foundation, WebhooksController, Donati…
lukeholder Aug 12, 2026
d429c18
Merge branch 'feature/stage-9a-controllers-routes' into 6.x
lukeholder Aug 12, 2026
6292f21
Stage 9b: Controllers & Routes (Shipping)
lukeholder Aug 12, 2026
79a2e80
Stage 9c: Controllers & Routes (Tax)
lukeholder Aug 12, 2026
2914b63
Stage 9d: Controllers & Routes (Promotions)
lukeholder Aug 12, 2026
3996412
Stage 9e: Controllers & Routes (Store & Settings)
lukeholder Aug 12, 2026
103d9c8
Stage 9f (partial): Controllers & Routes (Order/Line Item Statuses, U…
lukeholder Aug 12, 2026
27e23ea
Stage 9f (partial): Controllers & Routes (Cart)
lukeholder Aug 12, 2026
a30162d
Stage 9f (final): Controllers & Routes (Orders)
lukeholder Aug 12, 2026
4c6d9f1
Stage 9g: Controllers & Routes (Catalog)
lukeholder Aug 12, 2026
288de66
Stage 9h: Controllers & Routes (Payments)
lukeholder Aug 12, 2026
758c8b6
Stage 9i: Controllers & Routes (Inventory)
lukeholder Aug 12, 2026
8688e29
Stage 9j: Controllers & Routes (Subscriptions)
lukeholder Aug 12, 2026
f5ac477
Stage 9k: Controllers & Routes (Email, PDF, Users, Misc) — Stage 9 co…
lukeholder Aug 12, 2026
255e854
Stage 10a: Service Namespace & Record Cleanup (Currencies, PaymentCur…
lukeholder Aug 13, 2026
0aca7e1
Stage 10b: Service Namespace & Record Cleanup (Tax cluster)
lukeholder Aug 13, 2026
58f3b14
Stage 10c: Service Namespace & Record Cleanup (Shipping cluster)
lukeholder Aug 13, 2026
d59dc55
Stage 10d: Service Namespace & Record Cleanup (Promotion cluster)
lukeholder Aug 13, 2026
68f413c
Stage 10e: Service Namespace & Record Cleanup (CatalogPricing cluster)
lukeholder Aug 13, 2026
eed33a0
Stage 10f: Service Namespace & Record Cleanup (Inventory cluster)
lukeholder Aug 13, 2026
faa3f0f
Stage 10g: Service Namespace & Record Cleanup (Catalog/Purchasable cl…
lukeholder Aug 13, 2026
aec5457
Stage 10h: Service Namespace & Record Cleanup (Payment/Gateway cluster)
lukeholder Aug 13, 2026
cadf17c
Stage 10i: Service Namespace & Record Cleanup (Order cluster)
lukeholder Aug 13, 2026
15a807e
Stage 10j: Service Namespace & Record Cleanup (Store cluster)
lukeholder Aug 13, 2026
de5f057
Stage 10k: Service Namespace & Record Cleanup (Subscription cluster)
lukeholder Aug 13, 2026
051bd7f
Stage 10l: Service Namespace & Record Cleanup (Email/Pdf cluster)
lukeholder Aug 13, 2026
cf180b8
Stage 10m: Service Namespace & Record Cleanup (Customer/Formula cluster)
lukeholder Aug 13, 2026
e492447
Stage 10n: Final import alphabetization pass (Stage 10 complete)
lukeholder Aug 13, 2026
f9a557a
Stage 11a: Loose-end cleanup (Purchasable/PurchasableStore records, d…
lukeholder Aug 13, 2026
24042a7
Stage 11a follow-up: repoint Purchasable/Donation to new Eloquent rec…
lukeholder Aug 13, 2026
2e4f1a7
Stage 11b: Exceptions
lukeholder Aug 13, 2026
fea5dc0
Stage 11c: Order calculation adjusters
lukeholder Aug 13, 2026
1322903
Stage 11d: Order exporters
lukeholder Aug 13, 2026
d4fc4a3
Stage 11e: Collections (Stage 11 complete)
lukeholder Aug 13, 2026
fc393eb
Stage 12a: Stat/StatWidget base classes
lukeholder Aug 13, 2026
e78a114
Stage 12b: Simple number widgets
lukeholder Aug 13, 2026
c12f60b
Stage 12c: Table widgets
lukeholder Aug 13, 2026
afb30e7
Stage 12d: TopProducts
lukeholder Aug 13, 2026
1825d4f
Stage 12e: Chart widgets
lukeholder Aug 13, 2026
8a9967a
Stage 12f: Orders widget + registration + cleanup (Stage 12 complete)
lukeholder Aug 13, 2026
64e6962
Stage 13-16: migrate legacy records to Eloquent, remove subscriptions…
lukeholder Aug 17, 2026
5850148
Replace stale Craft core references in src/ with Craft 6 facades
lukeholder Aug 17, 2026
b6339e4
Continue Craft::$app-> facade sweep: getDb(), request(), session()
lukeholder Aug 17, 2026
c3b4ba4
Continue Craft::$app-> facade sweep: registerJs, registerTranslations
lukeholder Aug 17, 2026
bfda21c
Continue Craft::$app-> facade sweep: getMutex()
lukeholder Aug 17, 2026
1e98aab
Continue Craft::$app-> facade sweep: getSecurity(), getTokens()
lukeholder Aug 17, 2026
eb0882a
Continue Craft::$app-> facade sweep: getLocale, getTimeZone, getStruc…
lukeholder Aug 17, 2026
4fb5f12
Continue Craft::$app-> facade sweep: getResponse()
lukeholder Aug 17, 2026
9583f37
Continue Craft::$app-> facade sweep: getMailer() (composeFromKey call…
lukeholder Aug 17, 2026
d89fcdc
Continue Craft::$app-> facade sweep: getMailer() (Emails.php order-em…
lukeholder Aug 17, 2026
2e12581
deprecate EnumHelpersTrait
lukeholder Aug 17, 2026
a552568
Replace craft\helpers\ArrayHelper usages in src/ with Laravel/CraftCm…
lukeholder Aug 17, 2026
3a356f9
Replace craft\helpers\StringHelper usages in src/ with Laravel/CraftC…
lukeholder Aug 18, 2026
a95fcca
Replace craft\helpers\UrlHelper, MoneyHelper, DateTimeHelper usages i…
lukeholder Aug 18, 2026
27466e4
Replace craft\helpers\Json usages in src/ with CraftCms\Cms\Support\Json
lukeholder Aug 18, 2026
29eedb8
Replace craft\helpers\Html usages in src/ with CraftCms\Cms\Support\Html
lukeholder Aug 18, 2026
f6f2993
Replace yii\base/yii\web raw exception classes in src/ with native/Sy…
lukeholder Aug 18, 2026
e88e158
Category B1: Plugin::getInstance()->getX() -> app(X::class) in src/
lukeholder Aug 18, 2026
4ac8983
Category B2 (part 1): stale craft\commerce\services\* imports for CON…
lukeholder Aug 18, 2026
fc18e95
Category B2 (part 2): stale craft\commerce\* imports confirmed via cl…
lukeholder Aug 18, 2026
dcb4614
Fix control panel errors surfaced during Store/Commerce settings testing
lukeholder Aug 18, 2026
2accfff
Proactive sweep: fix strict-type int/float TypeErrors across all cont…
lukeholder Aug 18, 2026
50f1fdc
Plugin.php bootstrap migration (Groups 3-8), Category B2 part 3, Pest…
lukeholder Aug 18, 2026
8beb3eb
Fix Plugin::boot()/register() never firing under composer run tests
lukeholder Aug 19, 2026
1552648
Fix Inventory CP screen, port stats tests to Pest, fix real bugs foun…
lukeholder Aug 19, 2026
b10f7f4
Overhaul CI for 6.x branch: run own composer/PHPStan/Rector/Pest jobs…
lukeholder Aug 19, 2026
508381f
Merge branch '5.x' into 6.x
lukeholder Aug 19, 2026
9424641
Cleanup
lukeholder Aug 19, 2026
2d41695
Fix broken class references found by PHPStan (class.notFound)
lukeholder Aug 19, 2026
b2327d7
Remove 228 stale @phpstan-ignore-next-line comments (ignore.unmatched…
lukeholder Aug 19, 2026
401dae6
Move 6 incremental migrations from src-yii2/migrations/ to database/m…
lukeholder Aug 19, 2026
e2398ea
Fix reentrant-autoload fatal when legacy Gateway is loaded before its…
lukeholder Aug 19, 2026
083a94c
Add Larastan for Eloquent-aware PHPStan analysis
lukeholder Aug 19, 2026
ba9d73b
Remove 7 more stale @phpstan-ignore-next-line comments surfaced by La…
lukeholder Aug 19, 2026
0444cf1
Fix all 55 remaining PHPStan errors on Order.php and related classes
lukeholder Aug 19, 2026
13d218e
Add missing yii2-adapter PHPStan stubs; fix Purchasable.php and a rea…
lukeholder Aug 19, 2026
d20f29e
Fix Customers.php: real crash bugs plus behavior-attached method supp…
lukeholder Aug 19, 2026
7d606ae
Fix OrdersController.php and correct inaccurate macro comments
lukeholder Aug 19, 2026
9ded911
Fix Variant.php: table-attribute shape bug plus remaining false posit…
lukeholder Aug 19, 2026
128fbcc
Fix Helpers/Order.php: real type-safety gap in the stock-check branch
lukeholder Aug 19, 2026
a1aac6b
Fix Product.php: same TranslationMethod/dead-check patterns, add pric…
lukeholder Aug 19, 2026
d433af5
Fix Emails.php: remove dead date-conversion loop, suppress remaining …
lukeholder Aug 19, 2026
221f668
Fix Payments.php/Transactions.php: real Currency type bug plus Gatewa…
lukeholder Aug 19, 2026
531d137
Fix Plugin.php: suppress self-referential macro calls and a cms-6 doc…
lukeholder Aug 19, 2026
0203b12
Fix Stat.php: real string-decrement bug plus DateTimeHelper::toDateTi…
lukeholder Aug 19, 2026
0425a1a
Fix CatalogPricingController.php: real JsonResponse type bug plus mac…
lukeholder Aug 19, 2026
71e20d4
Fix PaymentSourcesController/ProductsController/Donation.php: real us…
lukeholder Aug 19, 2026
beef896
Fix a real Cp helper namespace bug plus dashboard/inventory/adjuster …
lukeholder Aug 19, 2026
304ca06
Fix Carbon-cast date assignments and a real CP tabs() shape bug
lukeholder Aug 19, 2026
1915de5
Fix InventoryController's broken inventory-levels AJAX endpoint plus …
lukeholder Aug 19, 2026
d7f62d9
PHPStan: fix Catalog/CatalogPricing/Controllers facade-narrowing, mac…
lukeholder Aug 19, 2026
a5c7a96
PHPStan: fix remaining errors across Order/Payment/Purchasable/Stats …
lukeholder Aug 19, 2026
2752dca
Port Craft Commerce's Yii2 condition/condition-rule system to Laravel
lukeholder Aug 20, 2026
0cb0fbc
Rewire condition consumers to the new src/ condition classes
lukeholder Aug 20, 2026
6972536
Add Pest tests for the trickiest ported condition rule logic
lukeholder Aug 20, 2026
5c256b3
Document the condition system migration in CHANGELOG-WIP.md
lukeholder Aug 20, 2026
47dad6e
Migrate the Transfers domain to Laravel in src/
lukeholder Aug 20, 2026
c300376
Migrate element actions, field-layout elements, and custom field type…
lukeholder Aug 20, 2026
53a199b
Convert Stats queries from raw SQL to the Laravel query builder
lukeholder Aug 20, 2026
282fd24
Fix PHPStan CI failure: scanFiles/stubFiles paths assumed a local sib…
lukeholder Aug 20, 2026
3e68815
Port Gateway base class and Dummy/Manual/MissingGateway drivers to src/
lukeholder Aug 20, 2026
5e35793
Bump rector/rector to 2.6.3 to fix CI fatal error on newer PHPStan
lukeholder Aug 20, 2026
f8bc675
CI: drop the push trigger, dedupe against the always-open 6.x PR
lukeholder Aug 20, 2026
b671f96
Fix two Plugin.php-bootstrap-migration follow-up bugs
lukeholder Aug 20, 2026
67f0fac
Fix src-yii2/Base and src-yii2/Enums directory casing to match PSR-4 …
lukeholder Aug 20, 2026
ed096e8
Add tests/Arch/ArchTest.php and move a legacy fixture pair out of the…
lukeholder Aug 20, 2026
d2121a6
Fix src/gql directory casing to match PSR-4 namespace (CraftCms\Comme…
lukeholder Aug 20, 2026
79ced2b
Port Product/Variant GraphQL support (types, interfaces, resolvers, q…
lukeholder Aug 21, 2026
1c58fbf
Fix TotalOrdersTest flake: LocalTimestamp skipped UTC->local conversi…
lukeholder Aug 21, 2026
0a53428
Port console/controllers/* to Laravel Artisan commands
lukeholder Aug 21, 2026
b749102
Register the ported console commands and land their two bugfixes
lukeholder Aug 21, 2026
4100026
Port helpers/{Cp,Currency,Locale,Localization,Order,ProductQuery,Proj…
lukeholder Aug 21, 2026
e0ed4db
Port base/{InventoryItemTrait,InventoryLocationTrait,Model,Stat,StatW…
lukeholder Aug 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
79 changes: 79 additions & 0 deletions .agents/skills/changelog-entries/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
---
name: changelog-entries
description: >
Write changelog entries for CHANGELOG.md. Use when work has been completed
and changelog entries need to be added, or when the user asks to write, add, or update changelog
entries, release notes, or document changes. Triggers on requests like "add changelog entry",
"update the changelog", "write release notes", or after completing a feature/fix that needs documenting.
---

# Changelog Entries

Write entries that match the established format in the target changelog file.

## Determine Target File

1. If the user specifies a file, use that, otherwise use `CHANGELOG.md`.
2. Read the first ~80 lines of the target file to confirm the current format and find the insertion point.

## CHANGELOG.md Format

Versioned release changelog. Entries go under `## Unreleased` or a version header like `## X.Y.Z - YYYY-MM-DD`.

Each entry is a `- ` prefixed line. No blank lines between entries within a section.

```markdown
## Unreleased

- Added `craft\helpers\SomeHelper::someMethod()`.
- Fixed a bug where something wasn't working properly. ([#12345](https://github.com/craftcms/cms/pull/12345))
- Deprecated `craft\old\Thing`. `craft\new\Thing` should be used instead.
```

**Patch releases** use a flat list with no subheaders.

**Major/minor releases** may group entries under `###` subheaders:
`### Content Management`, `### Accessibility`, `### Administration`, `### Development`, `### Extensibility`, `### System`

**Warnings** go above the entry list using GitHub callout syntax:
```markdown
> [!WARNING]
> Important note about breaking changes.
```

## Writing Rules

1. **Start with a past-tense verb** — capitalize it:
- `Added` — new classes, methods, features, settings
- `Fixed` — bug fixes: `Fixed a bug where...` or `Fixed an error that...`
- `Deprecated` — include replacement: `` `old\Thing`. `new\Thing` should be used instead. ``
- `Removed` — removed classes/features (with replacement if applicable)
- `Improved` — performance or UX improvements
- Other verbs as appropriate: `Updated`, `Renamed`, `Moved`, `Replaced`

2. **Backtick all code references** — class names, methods, properties, constants, config keys, Twig variables, CLI commands. Use fully qualified class names (no leading backslash).

3. **One entry per line** — don't wrap. Each `- ` entry is a single line regardless of length.

4. **End entries with a period.**

5. **Link issues/PRs** at the end when applicable, prefer PRs when there is one:
- PRs: `([#12345](https://github.com/craftcms/cms/pull/12345))`
- Issues: `([#12345](https://github.com/craftcms/cms/issues/12345))`
- Security: `(GHSA-xxxx-xxxx-xxxx)`
- External repos: `([craftcms/commerce#4006](https://github.com/craftcms/commerce/issues/4006))`

6. **Security fixes** include severity level: `` Fixed a [high-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) RCE vulnerability. (GHSA-xxxx-xxxx-xxxx) ``

7. **Keyboard shortcuts** use `<kbd>` tags: `<kbd>Return</kbd>`.

## Entry Templates

For the full set of templates and examples, see `references/entry-templates.md`.

## Workflow

1. Identify what changed (from conversation context, git diff, or user description).
2. Determine the target file and section/insertion point.
3. Write entries following the format rules above.
4. Insert entries in the appropriate location in the file.
225 changes: 225 additions & 0 deletions .agents/skills/changelog-entries/references/entry-templates.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
# Entry Templates

## Added

**New class or service:**
```
- Added `CraftCms\Cms\Namespace\ClassName`.
```

**New facade:**
```
- Added `CraftCms\Cms\Support\Facades\FacadeName`.
```

**New enum:**
```
- Added `CraftCms\Cms\Namespace\EnumName` enum.
```

**New event:**
```
- Added `CraftCms\Cms\Namespace\Events\EventName`.
```

**New event with description:**
```
- Added `CraftCms\Cms\Namespace\Events\EventName` event for customizing X behavior.
```

**New method or property:**
```
- Added `craft\helpers\ElementHelper::cleanseQueryCriteria()`.
- Added `craft\base\ElementTrait::$applyingDraft`. ([#18057](https://github.com/craftcms/cms/pull/18057))
```

**New method macro:**
```
- Added `Request::isPreview()` macro for detecting preview requests via `x-craft-preview` or `x-craft-live-preview` parameters.
```

**New console command:**
```
- Added `php craft twig:cache` - Precompile Twig views.
```

**New config setting:**
```
- Added the `enableTwigSandbox` config setting. ([#18208](https://github.com/craftcms/cms/pull/18208))
```

**New library:**
```
- Added the Illuminate Support library.
```

**Multiple related additions (with sub-list):**
```
- Added element-specific authorization policies:
- `CraftCms\Cms\Entry\Policies\EntryPolicy`
- `CraftCms\Cms\Asset\Policies\AssetPolicy`
```

## Fixed

**Bug fix:**
```
- Fixed a bug where something wasn't working properly. ([#12345](https://github.com/craftcms/cms/pull/12345))
- Fixed a bug where Matrix fields in Blocks view could lose their existing values when they became editable.
```

**Error fix:**
```
- Fixed an error that could occur when editing an element with a Table field. ([#18408](https://github.com/craftcms/cms/pull/18408))
- Fixed an error that occurred when creating a new element on multi-site installs. ([#18393](https://github.com/craftcms/cms/pull/18393))
```

**JavaScript fix:**
```
- Fixed a JavaScript error that occurred if a Matrix field's label was hidden. ([#18366](https://github.com/craftcms/cms/pull/18366))
- Fixed potential JavaScript errors that could occur if a disclosure menu's trigger was missing. ([#18358](https://github.com/craftcms/cms/pull/18358))
```

**Security fix:**
```
- Fixed a [high-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) RCE vulnerability. (GHSA-fp5j-j7j4-mcxc)
- Fixed a [moderate-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) SSTI vulnerability. (GHSA-qc86-q28f-ggww)
- Fixed [low-severity](https://github.com/craftcms/cms/security/policy#severity--remediation) XSS vulnerabilities. (GHSA-4mgv-366x-qxvx)
```

**Styling fix:**
```
- Fixed a styling issue with slideouts within Live Preview. ([#18383](https://github.com/craftcms/cms/pull/18383))
```

## Deprecated

**Class replaced by new class:**
```
- Deprecated `craft\old\ClassName`. `CraftCms\Cms\New\ClassName` should be used instead.
```

**Method replaced by new method:**
```
- Deprecated `craft\old\Class::oldMethod()`. `CraftCms\Cms\New\Class::newMethod()` should be used instead.
```

**Property replaced:**
```
- Deprecated `GeneralConfig::$oldProp` in favor of Laravel's config.key config value.
```

**Constant replaced by enum case:**
```
- Deprecated `craft\web\View::TEMPLATE_MODE_CP`. `CraftCms\Cms\View\TemplateMode::Cp` should be used instead.
```

**Event constant replaced by event class:**
```
- Deprecated `craft\web\View::EVENT_REGISTER_CP_TEMPLATE_ROOTS`. `CraftCms\Cms\View\Events\RegisterCpTemplateRoots` should be used instead.
```

**Twig variable replaced:**
```
- Deprecated `craft.app.config.general` in Twig. `app.config.craft.general` should be used instead.
```

**Class replaced with extra context:**
```
- Deprecated `Craft::$app->getConfig()->getGeneral()`. `CraftCms\Cms\Config\GeneralConfig` should be used instead. This can be used through dependency injection or through `app(CraftCms\Cms\Config\GeneralConfig::class)`.
```

**Config setting deprecated:**
```
- The `disableGraphqlTransformDirective` config setting is now deprecated.
```

**Replaced by Laravel built-in (no direct Craft replacement):**
```
- Deprecated `craft\filters\BasicHttpAuthLogin`. Use the `auth.basic` middleware instead.
```

**Multiple methods with "in favor of" and sub-list:**
```
- Deprecated `craft\events\WidgetEvent` in favor of the following new events:
- `craft\services\Dashboard::EVENT_BEFORE_SAVE_WIDGET` => `CraftCms\Cms\Dashboard\Events\WidgetSaving`
- `craft\services\Dashboard::EVENT_AFTER_SAVE_WIDGET` => `CraftCms\Cms\Dashboard\Events\WidgetSaved`
```

**Multiple methods from same class (sub-list with arrow mapping):**
```
- Deprecated `craft\helpers\App`. The following classes/methods should be used instead:
- `App:devMode()` --> `app()->hasDebugModeEnabled()`
- `App:parseBooleanEnv()` --> `\CraftCms\Cms\Support\Env::parseBoolean()`
```

## Removed

**Class removed with replacement:**
```
- Removed `craft\old\Class`. `CraftCms\Cms\New\Class` should be used instead.
```

**Class removed with multiple replacements:**
```
- Removed `craft\controllers\DashboardController`. The following controllers now implement this functionality:
- `CraftCms\Cms\Http\Controllers\Dashboard\DashboardController`
- `CraftCms\Cms\Http\Controllers\Dashboard\WidgetsController`
```

**Removed because previously deprecated:**
```
- Removed `craft\helpers\MigrationHelper` as it was deprecated since 4.0.0.
```

**Event removed:**
```
- Removed `craft\events\UpdateReleaseEvent` in favor of `CraftCms\Cms\Update\Events\CriticalUpdateReleasedEvent`.
```

**Database column removed:**
```
- Removed `verificationCode` and `verificationCodeIssuedDate` columns on the `users` table in favor of the `password_reset_tokens` table.
```

## Replaced

```
- Replaced `craft\controllers\StructuresController`. `CraftCms\Cms\Http\Controllers\StructuresController`.
- Replaced `craft\controllers\SystemMessagesController` with `CraftCms\Cms\Http\Controllers\Utilities\SystemMessagesController`.
```

## Improved

```
- Improved the performance of `craft\helpers\Typecast`. ([#18426](https://github.com/craftcms/cms/pull/18426))
- Improved the accessibility of user permission lists. ([#18290](https://github.com/craftcms/cms/pull/18290))
- Improved drag-n-drop performance. ([#18019](https://github.com/craftcms/cms/pull/18019))
```

## Updated

```
- Updated Yii to 2.0.54.
- Updated Twig to 3.21. ([#17603](https://github.com/craftcms/cms/discussions/17603))
- Updated Axios to 1.12.2. ([#17988](https://github.com/craftcms/cms/pull/17988))
```

## Behavioral Changes (no action verb prefix)

```
- `CraftCms\Cms\User\Elements\User` now implements `Illuminate\Contracts\Auth\Authenticatable`.
- `craft\services\Elements::stopCollectingCacheInfo()` no longer sets the returned duration to the `cacheDuration` config setting if a duration wasn't explicitly declared. ([#16796](https://github.com/craftcms/cms/pull/16796))
- Element indexes now show "Paste" buttons alongside bulk element action buttons. ([#18427](https://github.com/craftcms/cms/pull/18427))
- `slug` columns referenced in element queries' `select`, `where`, or `orderBy` expressions now explicitly resolve to `elements_sites.slug`. ([#18416](https://github.com/craftcms/cms/pull/18416))
- The `maxCachedCloudImageSize` config setting is now set to `0` by default. ([#17997](https://github.com/craftcms/cms/pull/17997))
```

## Feature Descriptions (no code reference)

```
- Nested entries' edit screens now have a "Field settings" action menu item.
- Legacy entry index URLs now redirect `content/<page-name>`.
- Bulk element actions are now available on element indexes for mobile devices.
- Revisions now keep track of which element attributes/fields were modified for the revision.
```
60 changes: 60 additions & 0 deletions .github/actions/run-tests/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: 'Run Tests'
description: 'Setup PHP, install dependencies, and run a test command'

inputs:
test-command:
description: 'The test command to run'
required: true
php-version:
description: 'PHP version to install'
required: false
default: '8.5'
github-token:
description: 'GitHub token for Composer'
required: false
default: ''
packagist-username:
description: 'Packagist username'
required: false
default: ''
packagist-token:
description: 'Packagist token'
required: false
default: ''

runs:
using: 'composite'
steps:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ inputs.php-version }}
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick, fileinfo, ffi
tools: composer:v2
ini-values: display_errors=On, memory_limit=2G
coverage: none
# Pass an empty token so setup-php doesn't write GITHUB_TOKEN into
# Composer's auth config. Composer 2.9.7's regex rejects the new
# GITHUB_TOKEN format (composer/composer#12849).
github-token: ''
env:
COMPOSER_AUTH_JSON: |
{
"http-basic": {
"repo.packagist.com": {
"username": "${{ inputs.packagist-username }}",
"password": "${{ inputs.packagist-token }}"
}
}
}

- name: Set version
shell: bash
run: composer config version "6.x-dev"

- name: Install dependencies
uses: ramsey/composer-install@v3

- name: Run tests
shell: bash
run: ${{ inputs.test-command }}
Loading
Loading