Skip to content
Draft

6.x #4124

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
452 commits
Select commit Hold shift + click to select a range
397ef3e
Merge branch '6.x' into feature/6.x-templating
nfourtythree Aug 26, 2026
60794e1
Move translations to top-level lang/ dir, matching Laravel/Craft 6 pl…
lukeholder Aug 26, 2026
5c9984f
Strip copyright header from lang/ files, update crowdin/codecov paths…
lukeholder Aug 26, 2026
3d5d857
Port web/twig/Extension.php to src/Twig/Extension.php
lukeholder Aug 26, 2026
b389a9f
Delete dead craft\commerce\web\twig\CraftVariableBehavior.php
lukeholder Aug 26, 2026
4b751d7
Rename NewCraftVariable import alias to CraftVariable in src/Plugin.php
lukeholder Aug 26, 2026
c95957e
Delete 6 orphaned Yii2 behaviors, port CurrencyAttributeBehavior cons…
lukeholder Aug 26, 2026
f6cb09d
Add Plugin::HANDLE const, replace getInstance()->handle usage
lukeholder Aug 26, 2026
a516587
Port CKEditor link-options registration to src/, drop Redactor support
lukeholder Aug 26, 2026
650a69b
Split Records/Models into Models (Eloquent) vs Data (non-Eloquent)
lukeholder Aug 27, 2026
0e2a694
Move project config event listeners to CraftCms\Commerce\Plugin
lukeholder Aug 27, 2026
7a32f57
Port customer-attach bulk populate to ElementsHydrated
lukeholder Aug 27, 2026
85c9a18
Move ElementsHydrated handler to Customers, register via $events
lukeholder Aug 28, 2026
a1a2428
Replace 'Class@method' listener string with dedicated listener class
lukeholder Aug 28, 2026
f26ae33
Port X-Powered-By header registration to a Laravel middleware
lukeholder Aug 28, 2026
9e9246f
Move plugin metadata properties to CraftCms\Commerce\Plugin
lukeholder Aug 28, 2026
f64e001
Delete craft\commerce\Plugin's custom logic, split Plugin into Concerns
lukeholder Aug 28, 2026
ed73faa
Move registerCraftEventListeners() into 8 dedicated listener classes
lukeholder Aug 28, 2026
beef299
WIP product types settings controller
nfourtythree Sep 1, 2026
354f90a
Merge branch '6.x' into feature/6.x-templating
nfourtythree Sep 1, 2026
2eccb18
WIP stores settings index action
nfourtythree Sep 1, 2026
b001566
WIP edit store
nfourtythree Sep 1, 2026
9f11785
fixed importing correct classes
nfourtythree Sep 2, 2026
baa782e
Use html columns where required
nfourtythree Sep 2, 2026
4e881d5
Fixed fallbacks
nfourtythree Sep 2, 2026
267d021
Move Product/Variant/ProductType out of Catalog namespace
lukeholder Sep 2, 2026
7e4c2a3
Cleanup
lukeholder Sep 2, 2026
9eb2753
Delete orphaned GatewayTrait/StatTrait, superseded by inlined properties
lukeholder Sep 8, 2026
4242c44
Fix src/ call sites still pointing at already-ported legacy classes
lukeholder Sep 8, 2026
7d3752b
Trim explanatory docblocks that just restate the method name
lukeholder Sep 8, 2026
daa377b
Migrate legacy event firing to Laravel across all Commerce services
lukeholder Sep 8, 2026
be88aa4
Update CHANGELOG-WIP.md for the event-bridge migration and cleanup
lukeholder Sep 8, 2026
4d82f5f
Port VariantCollection and OrderCustomersDeletionBlocker to src/
lukeholder Sep 8, 2026
27a0f51
Replace remaining Craft::createObject() calls with direct instantiation
lukeholder Sep 8, 2026
793a09e
Port 5.x's 5.7.3 fixes forward to their src/ locations
lukeholder Sep 8, 2026
28bb545
Merge branch '5.x' into 6.x
lukeholder Sep 8, 2026
2956027
Fix Plugin settings and VariantQuery breaks from cms-6 API changes
lukeholder Sep 9, 2026
a6bff18
Fix remaining cms-6 API compatibility breaks
lukeholder Sep 9, 2026
1ff5248
Cleanup
lukeholder Sep 9, 2026
a10560e
Port dashboard widgets to cms-6's new component()/props() contract
lukeholder Sep 9, 2026
b7f3b92
Cleanup
lukeholder Sep 9, 2026
dc8035c
Register src-yii2/templates as a CP template root
lukeholder Sep 9, 2026
083ae50
Cleanup
lukeholder Sep 9, 2026
e82640c
cleanup
lukeholder Sep 9, 2026
ad54fb9
ignore for now
lukeholder Sep 9, 2026
902265f
Add TODOs above every Plugin::getInstance() call and resolve stale "o…
lukeholder Sep 9, 2026
6fd0d70
Merge branch '6.x' into feature/6.x-templating
nfourtythree Sep 9, 2026
1e98d05
Fix EVENT_AFTER_DISCOUNT_ADJUSTMENTS_CREATED event bridging and a sta…
lukeholder Sep 9, 2026
217a573
Replace Plugin::getInstance() with proper DI throughout src/
lukeholder Sep 9, 2026
7100b54
Site/stores association using form components
nfourtythree Sep 9, 2026
7b0b51e
Order field layout designer converted
nfourtythree Sep 9, 2026
5d845ef
Document Plugin::getInstance() -> DI replacement in changelog
lukeholder Sep 10, 2026
c2a0efc
Migrate CatalogPricing console output, remove deprecated handler, fix…
lukeholder Sep 10, 2026
d29c6e7
Port Transfers CP asset registration off legacy Yii2 AssetBundle bridge
lukeholder Sep 10, 2026
710d5ee
Fix misleading TODO on Stores::query() schemaVersion guard
lukeholder Sep 10, 2026
99e9964
Gate store location address authorization behind a real permission
lukeholder Sep 10, 2026
760d853
Gate inventory location address authorization behind a real permission
lukeholder Sep 10, 2026
30c4b1e
Scope Purchasables memoization cache key by siteId and forCustomer
lukeholder Sep 10, 2026
4b009ec
Trim changelog-wip.md to actual 5.x -> 6.x diffs
lukeholder Sep 10, 2026
4c3eee9
Remove changelog entries about the 6.x port's own leftover TODOs
lukeholder Sep 10, 2026
ad69576
fix cs
nfourtythree Sep 10, 2026
1a8778e
Small PHPStan fix
nfourtythree Sep 10, 2026
f4eb858
Merge branch '6.x' into feature/6.x-templating
nfourtythree Sep 10, 2026
dc0d47d
Tweak plugin get instance after merge
nfourtythree Sep 10, 2026
5d385ff
Create store management namespace
nfourtythree Sep 11, 2026
9d1e927
Fix condition builder errors
nfourtythree Sep 11, 2026
16ce190
Fix order status cp edit URL
nfourtythree Sep 11, 2026
cb5cd5e
Convert order status controller to form components
nfourtythree Sep 11, 2026
18051fb
Fix action button to be dropdown
nfourtythree Sep 11, 2026
31f3ce0
fix cs
nfourtythree Sep 11, 2026
13daab2
Start cleanup
lukeholder Sep 14, 2026
fa09fee
Port PurchasablePriceField/PurchasableStockField/InventoryController …
lukeholder Sep 14, 2026
d7c4479
Fix misleading hasColumn() TODOs in Gateways/Pdfs query builders
lukeholder Sep 14, 2026
b1883e4
Raise minVersionRequired to 5.7.3, remove now-safe schema guards
lukeholder Sep 14, 2026
e8467cc
Document minVersionRequired change in changelog
lukeholder Sep 14, 2026
f7056fe
Convert line item statuses controller
nfourtythree Sep 14, 2026
e7bbfc1
Convert pdfs controller
nfourtythree Sep 14, 2026
b09cceb
Convert emails controller
nfourtythree Sep 14, 2026
ba2e0e4
Convert gateways controller to form components
nfourtythree Sep 14, 2026
2462f54
Wire up real LineItem validation, breaking PurchasableInterface::getL…
lukeholder Sep 15, 2026
790b730
Invalidate Purchasables memoization cache on save, not just delete
lukeholder Sep 15, 2026
ddc736a
Remove unnecessary comments from the LineItem validation commit
lukeholder Sep 15, 2026
da0a9d2
Port 5.x fix: Array to string conversion in Order object templates (#…
lukeholder Sep 15, 2026
c91c2ba
Port 5.x fix: payment amount JS var typo/formatting in gateway modal
lukeholder Sep 15, 2026
84a45f9
Port 5.x fix: require commerce-editDiscounts to clear discount usage …
lukeholder Sep 15, 2026
7228fac
Port 5.x fix: tighten payment source deletion permission check
lukeholder Sep 15, 2026
33597b4
Port 5.x fix: require commerce-managePaymentCurrencies permission
lukeholder Sep 15, 2026
da60f3a
Port 5.x fix: dashboard widgets fatal for users with no editable sites
lukeholder Sep 15, 2026
2853e09
merge 5.x ib
lukeholder Sep 15, 2026
366d0cd
Port 5.x fix: custom fields with visibility conditions not saving on …
lukeholder Sep 15, 2026
d195edb
Merge branch '5.x' into 6.x
lukeholder Sep 15, 2026
d5dc933
Port convertCurrency() to migrated PaymentCurrencies service (COM-618…
lukeholder Sep 15, 2026
536c87e
Tidy up crumbs
nfourtythree Sep 15, 2026
c19f3fa
Restore per-instance condition rule scoping via OrderCondition::$quer…
lukeholder Sep 15, 2026
cfe92d1
Move controller into store management
nfourtythree Sep 15, 2026
b8fee94
Fix conditions
lukeholder Sep 15, 2026
3dec540
Port models/adjusters/gateways tests to Pest (COM-651, COM-655)
lukeholder Sep 15, 2026
1f440fd
Changelog
lukeholder Sep 15, 2026
c31bd63
Port order condition-rule tests to Pest, fix CustomerConditionRule (C…
lukeholder Sep 15, 2026
b8f1ddc
Port product condition-rule tests to Pest, fix 3 real query bugs (COM…
lukeholder Sep 15, 2026
911807d
Refactor Commerce ElementQuery scopes to craft-core trait convention,…
lukeholder Sep 15, 2026
3f95166
Start on store management controllers
nfourtythree Sep 15, 2026
52f07cd
Align Commerce ElementQuery classes with craft core's structure/conve…
lukeholder Sep 15, 2026
a1fa7f1
migrate the tax and shipping categories controllers
nfourtythree Sep 15, 2026
e4b2a30
Fix TypeError in ProductTypesController::saveProductType() (ported 5.…
lukeholder Sep 16, 2026
0b854c3
Merge branch '6.x' into feature/6.x-templating
lukeholder Sep 16, 2026
63673be
Merge remote-tracking branch 'origin/5.x' into 6.x
lukeholder Sep 16, 2026
1db08a1
Merge branch '6.x' into feature/6.x-templating
lukeholder Sep 16, 2026
92dfdee
Fix empty() misuse on getConditionRules() (ported 5.x bug)
lukeholder Sep 16, 2026
45df4e3
Merge branch '6.x' into feature/6.x-templating
lukeholder Sep 16, 2026
6889ef4
Tax rates controller conversion
nfourtythree Sep 16, 2026
f923a5f
Merge branch 'feature/6.x-templating' of github.com:craftcms/commerce…
nfourtythree Sep 16, 2026
c27b060
use the combo create for inline selection/creation
nfourtythree Sep 16, 2026
97601e6
Move condition-builder rendering out of Twig filter into controllers …
lukeholder Sep 16, 2026
64b088c
convert shipping methods controller
nfourtythree Sep 16, 2026
2003573
Restored gateway settings HTML rendering via the Form API (COM-664)
lukeholder Sep 16, 2026
489370e
fix translation strings
nfourtythree Sep 16, 2026
cecdb24
Fix translations
nfourtythree Sep 16, 2026
b1ccf2c
ponit to temp cms branch
nfourtythree Sep 16, 2026
456a693
Ported DiscountTest, VariantQueryTest, and ProductVariantStockConditi…
lukeholder Sep 17, 2026
aab35f2
Ported GqlCest, ArgumentHandlerTest, and ProductResolverTest to Pest …
lukeholder Sep 17, 2026
15a5eae
Excluded dateCreated/dateUpdated from ShippingMethodOption serializat…
lukeholder Sep 17, 2026
5248f0f
Ported service-layer Pest tests for Carts, CatalogPricing, Coupons, C…
lukeholder Sep 17, 2026
9d8a47a
convert shipping rules controller and update checkbox actions to tables
nfourtythree Sep 17, 2026
9c9a8ff
Merge branch '6.x' into feature/6.x-templating
nfourtythree Sep 17, 2026
fd7b1f7
WIP general store manangement conversion (needs fixing)
nfourtythree Sep 17, 2026
049ea7a
Fix minor bugs
nfourtythree Sep 17, 2026
9465ae4
Complete remaining tests
lukeholder Sep 18, 2026
869f243
Fixed CatalogPricingRule::getPurchasableIds() purchasableCondition br…
lukeholder Sep 18, 2026
68df7db
Merge branch '6.x' into feature/6.x-templating
nfourtythree Sep 18, 2026
08f3ea9
fix cs
nfourtythree Sep 18, 2026
35e9466
Merge pull request #4358 from craftcms/feature/6.x-templating
nfourtythree Sep 18, 2026
9c9555f
Use status keys for status indicators in tables
nfourtythree Sep 21, 2026
ca6d97c
WIP discounts controller conversion
nfourtythree Sep 21, 2026
c624cd0
Cleanup
lukeholder Sep 22, 2026
07ce8a2
Add facades
lukeholder Sep 22, 2026
f37b90b
Fixed SQLite-incompatible raw SQL in order/purchasable/email-preview …
lukeholder Sep 22, 2026
8a8d73e
Move commerce js to legacy to make way for new components
nfourtythree Sep 22, 2026
73ef387
discounts index from end point
nfourtythree Sep 22, 2026
ad76f9d
Merge branch '6.x' of github.com:craftcms/commerce into 6.x
nfourtythree Sep 22, 2026
2b78d48
tidy according to new layouts
nfourtythree Sep 22, 2026
a9d6949
fix subnav showing on edit screens
nfourtythree Sep 23, 2026
dc91c7c
move to new create combo
nfourtythree Sep 23, 2026
67e4522
fix in inventory controller
nfourtythree Sep 23, 2026
6a7c8fe
Status actions fill colour
nfourtythree Sep 24, 2026
8ece4cf
make sure chips are rendered correctly
nfourtythree Sep 24, 2026
4f4444e
update discounts controller for page size feature
nfourtythree Sep 24, 2026
4e87a73
Update “New X” button position accordingly
nfourtythree Sep 24, 2026
fb725a8
Add status filters to the relevant indexes now the table supports it
nfourtythree Sep 24, 2026
2b4935c
enable sortable columns
nfourtythree Sep 24, 2026
fbb7832
fix cs
nfourtythree Sep 24, 2026
4a222b8
Convert the catalog pricing rules index table
nfourtythree Sep 24, 2026
a856763
WIP first pass catalog pricing rules edit screen
nfourtythree Sep 24, 2026
69f3335
Fix date saving for discounts and pricing rules
nfourtythree Sep 25, 2026
a48c78f
Fix crumbs and store switcher
nfourtythree Sep 25, 2026
1ee739f
Crumbs subnav for settings and store management
nfourtythree Sep 25, 2026
21481e7
fix selected subnav
nfourtythree Sep 25, 2026
983cbef
get vite dev server
nfourtythree Sep 29, 2026
208c80d
Implement coupon codes table and saving
nfourtythree Sep 29, 2026
5bd188d
Convert inventory locations controller
nfourtythree Sep 29, 2026
58808ee
Phase 1 of converting inventory transfers
nfourtythree Sep 30, 2026
323ab2b
Move transfer permissions to policy
nfourtythree Sep 30, 2026
0c127f9
transfers index page and edit page (first pass)
nfourtythree Sep 30, 2026
024c66d
Adding/converting the transfer management field
nfourtythree Sep 30, 2026
902c2b1
receive transfer control
nfourtythree Sep 30, 2026
ddad050
tidy up transfers
nfourtythree Sep 30, 2026
665d6c4
Move enabled lightswitches to metadata
nfourtythree Oct 1, 2026
139c056
Fix percentage saving
nfourtythree Oct 1, 2026
520481d
changelog changes
nfourtythree Oct 1, 2026
1b03679
Part 1 of product element conversion
nfourtythree Oct 1, 2026
908fa3e
phase 2 of product elements conversion
nfourtythree Oct 1, 2026
74d9bd3
Create product flow
nfourtythree Oct 1, 2026
a4e30df
Update product type subnav
nfourtythree Oct 1, 2026
d9ed2d1
Make sure commerce settings pages have the commerce crumb
nfourtythree Oct 1, 2026
07b08d1
Fix the uid on install
nfourtythree Oct 1, 2026
b454fbe
fix using the colour palette enum and make sure there is a migration
nfourtythree Oct 1, 2026
7e8a940
First passs variant conversion
nfourtythree Oct 2, 2026
40a7e74
variant policy
nfourtythree Oct 2, 2026
fa46e7c
bring transfers inline with element editing
nfourtythree Oct 3, 2026
17ef4c9
further variants conversion
nfourtythree Oct 3, 2026
2a00af4
Inventory Screens
lukeholder Oct 6, 2026
5fef963
Opened inventory items in a slideout from the stock levels table
lukeholder Oct 6, 2026
4c582ca
Ported the donation settings screen to the Inertia control panel UI
lukeholder Oct 6, 2026
5a6432f
Fixed the redirect after saving donation settings
lukeholder Oct 6, 2026
5f49703
Made inventory notes multi-line and limited their length
lukeholder Oct 6, 2026
5e5871d
Move project config settings
lukeholder Oct 6, 2026
5c237d8
Cleanup settings nesting
lukeholder Oct 6, 2026
a110cfb
Scoped the PDFs and Emails settings to a store, improved the gateways…
lukeholder Oct 7, 2026
9f85b0e
Added search and view options to the PDFs and Emails settings tables
lukeholder Oct 7, 2026
727341e
Added search and view options to the product types and stores setting…
lukeholder Oct 7, 2026
397a998
Tidy up site stores setting and control
nfourtythree Oct 7, 2026
902ee1f
Toggle site stores table footer
nfourtythree Oct 7, 2026
4d126b3
Merge branch '6.x' of github.com:craftcms/commerce into 6.x
nfourtythree Oct 7, 2026
f3ca71e
Add a persistent Commerce development workbench
riasvdv Oct 7, 2026
baa01fe
Fix translation string quote marks
nfourtythree Oct 7, 2026
ada9404
move translation fixes
nfourtythree Oct 7, 2026
c9b4ed2
Merge pull request #4378 from craftcms/chore/setup-workbench
lukeholder Oct 7, 2026
6086dd9
Update facade docblocks
lukeholder Oct 7, 2026
78fe53e
More translations
nfourtythree Oct 7, 2026
f8f7322
Merge branch '6.x' of github.com:craftcms/commerce into 6.x
nfourtythree Oct 7, 2026
c1f4b13
Render product sources in the secondary nav
brianjhanson Oct 7, 2026
b664e97
Sources subnav
brianjhanson Oct 7, 2026
a938cda
Remove unufsed import
brianjhanson Oct 7, 2026
7da7b05
fix typo
nfourtythree Oct 7, 2026
98ac337
Don’t double translate
nfourtythree Oct 7, 2026
fe481ad
missing translations
nfourtythree Oct 7, 2026
04885d6
fix translation concatenation
nfourtythree Oct 7, 2026
9aaaea9
further translation cleanup
nfourtythree Oct 7, 2026
1c82e08
Remove extra comments
nfourtythree Oct 7, 2026
21263d2
Merge branch '6.x' into feature/product-sources-subnav
nfourtythree Oct 7, 2026
7a78447
Implement subnav for inventory transfers element index
nfourtythree Oct 7, 2026
e7afd39
Restore environment aware store setting
lukeholder Oct 8, 2026
68cba5e
Merge branch '6.x' of github.com:craftcms/commerce into 6.x
lukeholder Oct 8, 2026
0e34143
Put nav into group
brianjhanson Oct 8, 2026
c0e6ada
Merge branch '6.x' into feature/product-sources-subnav
nfourtythree Oct 9, 2026
950017f
Migrate Commerce backend Form API usage to Ui
nfourtythree Oct 9, 2026
70d75ca
Align Commerce page and payload contracts with CMS Ui
nfourtythree Oct 9, 2026
0f8dffd
Use Craft’s request helper for Commerce custom UI nodes
nfourtythree Oct 9, 2026
e5f75d0
Ensure toggling “Require coupon code” behaviour is consistent with 5.x
nfourtythree Oct 9, 2026
ee95852
Merge branch '6.x' into feature/product-sources-subnav
nfourtythree Oct 9, 2026
2e00833
Fix phpstan / CI errors
nfourtythree Oct 9, 2026
f201e9a
minor fix and tests
nfourtythree Oct 9, 2026
24d843b
Merge pull request #4379 from craftcms/feature/product-sources-subnav
nfourtythree Oct 9, 2026
1acd0f4
Merge branch '6.x' into feature/grouped-nav
nfourtythree Oct 9, 2026
4c9f120
move order of operations
nfourtythree Oct 9, 2026
259cb01
fix customize sources modal
nfourtythree Oct 9, 2026
88844bb
Merge pull request #4380 from craftcms/feature/grouped-nav
lukeholder Oct 12, 2026
f041b1c
Merge pull request #4383 from craftcms/feature/cms-sources-modal-fix
lukeholder Oct 12, 2026
2be36dc
Updated Commerce for the cms Ui table node changes
lukeholder Oct 12, 2026
c03bdd1
Added search and view options to the shipping, tax and payment curren…
lukeholder Oct 12, 2026
65f2184
Renamed the Commerce Form namespace and forms JS module to Ui
lukeholder Oct 12, 2026
07f5476
Renamed the form builders, render actions and resolver in the Commerc…
lukeholder Oct 12, 2026
a95c306
Fix cp
lukeholder Oct 12, 2026
49c7ede
Apply group field presentation to purchasable field layout elements
nfourtythree Oct 12, 2026
4f8f1d9
dump deps
nfourtythree Oct 12, 2026
782b993
Renamed controller methods to Laravel resource naming and added new c…
lukeholder Oct 12, 2026
3cc7144
Merge pull request #4385 from craftcms/feature/com-689-controller-res…
lukeholder Oct 12, 2026
8f6e965
add test for new variant on new product
nfourtythree Oct 12, 2026
d5db8cc
bump deps now compatibility branch has merged
nfourtythree Oct 12, 2026
2651047
Merge branch '6.x' of github.com:craftcms/commerce into 6.x
nfourtythree Oct 12, 2026
8e57bf0
Merge branch '6.x' into feature/new-variant-errors
nfourtythree Oct 12, 2026
24b23ac
Merge branch 'feature/new-variant-errors' into 6.x
nfourtythree Oct 12, 2026
45fd02e
Use crypto.getRandomValues for custom line item UUIDs
nfourtythree Oct 13, 2026
0c379d7
Port the order index to the Inertia element index
nfourtythree Oct 13, 2026
f53e2e9
Merge pull request #4388 from craftcms/feature/6x-commerce-ci-errors
nfourtythree Oct 13, 2026
e086561
Address review feedback on the order index port
nfourtythree Oct 14, 2026
97ee14a
fix catalog pricing errors
nfourtythree Oct 14, 2026
9b57f78
Merge branch 'feature/6x-fix-cat-price-job-error' into 6.x
nfourtythree Oct 14, 2026
791c08c
Merge pull request #4387 from craftcms/feature/6x-port-order-index
nfourtythree Oct 14, 2026
beb10fe
cart fixes
lukeholder Oct 19, 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.
```
2 changes: 1 addition & 1 deletion .codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ ignore:
- 'src/etc'
- 'src/migrations'
- 'src/templates'
- 'src/translations'
- 'lang'
- 'src/web/assets'
- 'docs'
- 'templates'
Expand Down
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