Skip to content
Draft

6.x #4124

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
334 commits
Select commit Hold shift + click to select a range
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
e78f4cf
Port plugin/{LegacyRoutingModule,Routes,Variables}.php, fix legacy-al…
lukeholder Aug 25, 2026
855ab21
Update general settings to use new forms
nfourtythree Aug 25, 2026
a68867a
Create extendable settings controller and tidy up general and transfe…
nfourtythree Aug 25, 2026
6379de1
ensure settings controllers extend the base one
nfourtythree Aug 25, 2026
fc8d7a2
Base naming convention
nfourtythree Aug 25, 2026
9045107
Move transfer fields to form components
nfourtythree Aug 25, 2026
be55f3b
Fix missing readOnly template var and double-wrapped layout on commer…
lukeholder Aug 26, 2026
5c1f705
Port queue/jobs/{SendEmail,ResaveProductVariants,CatalogPricing}.php …
lukeholder Aug 26, 2026
6381b10
Data layer: drop unnecessary point-release migrations, port CouponsVa…
lukeholder Aug 26, 2026
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
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