Version 2026.3.0
Release Notes 2026.3.0
Version 2026.3.0 is the first major release using Calendar Versioning (CalVer). Below is the full summary of changes.
Calendar Versioning (CalVer)
Starting from this version, iSPA CMS adopts the CalVer format: YYYY.MM.PATCH.
- The
VERSIONfile at the project root is the single source of truth for the system-wide version. - Two new artisan commands:
cms:versionandcms:bump. - All 18 modules synchronized to version
2026.03.0in bothmodule.jsonandcomposer.json.
# Display current version
php artisan cms:version
# Output as JSON
php artisan cms:version --json
# Bump patch version
php artisan cms:bump patch
# Dry run (no file writes)
php artisan cms:bump patch --dry-run
Laravel 12 Upgrade
The core framework was upgraded from Laravel 11.48.0 to Laravel 12.55.0.
Dependency Changes
| Package | Before | After |
|---|---|---|
laravel/framework | 11.48.0 | 12.55.0 |
openai-php/laravel | 0.10.2 | 0.19.1 |
laravel/sanctum | — | ^4.0 |
laravel/telescope | — | ^5.0 |
Bugs Fixed During Upgrade
- GuuXeCrawler: Deduplicated route names in v5 API group.
- Education: Deduplicated route names in v5 group.
- routes/api.php: Removed duplicate
->name('login')from API fallback.
Verification Results
- Build pipeline:
config:cache,route:cache,view:cache,event:cache,pnpm build— all pass. - Tests: 188 passed, 110 failed (same baseline as L11, zero regressions).
PostgreSQL Support
This release adds PostgreSQL 16 support alongside MySQL/MariaDB.
Dual Database Architecture
- MySQL/MariaDB — default for CMS legacy (
DB_CONNECTION=mysql). - PostgreSQL — for the Game system (
GAME_DB_CONNECTION=pgsql).
Docker Configuration
services:
pgsql:
image: 'postgres:16'
profiles:
- pgsql
ports:
- '${FORWARD_PGSQL_PORT:-5432}:5432'
Activate with: COMPOSE_PROFILES=pgsql docker-compose up
18 Modules
The complete modular system includes 18 modules, all synchronized to version 2026.03.0.
Core CMS Modules
| Module | Alias | Description |
|---|---|---|
| Core | core | Essential CMS functionalities |
| Content | content | Articles, pages, media stories |
| Ecommerce | ecommerce | Orders, carts, payments |
| Education | education | Students, instructors, evaluations |
| Product | product | Catalog, SKUs, brands |
| RealEstate | real-estate | Property listings, projects |
| CmsManagement | cmsmanagement | Domain management |
| GuuXeCrawler | guuxescrapling | Web data crawling pipeline |
Game Modules
| Module | Alias | Description |
|---|---|---|
| GameAdmin | gameadmin | Game administration |
| GameAuth | gameauth | Game authentication |
| GameCore | gamecore | Core game systems |
| GameEconomy | gameeconomy | Economy, wallets, currencies |
| GameInventory | gameinventory | Player inventory |
| GameLeaderboard | gameleaderboard | Leaderboards |
| GameLiveOps | gameliveops | Live operations |
| GameMarketplace | gamemarketplace | P2P marketplace |
| GamePlayer | gameplayer | Player profiles |
| GameRun | gamerun | Game sessions |
New Artisan Commands
Versioning
cms:version [--json] # Display CalVer version
cms:bump {patch|minor|major} # Bump system-wide version
Core
core:admin-i18n:audit # Audit admin translation keys
core:agentic:run:schedules # Run scheduled agent tasks
core:agentic:preflight # Agent system preflight check
core:agentic:sync:tools # Sync tool definitions
core:deploy:preflight # Pre-deployment checks
core:status:scan # System health scan
Game
gameadmin:ledger:drift:check # Ledger drift detection
gameeconomy:reconcile:balances # Balance reconciliation
gameleaderboard:auto:promote # Auto-promotion
New API Endpoints
Agentic Subsystem
GET /v2/admin/agentic/health
GET /v2/admin/agentic/tool-definitions
GET /v2/admin/agentic/profiles
GET /v2/admin/agentic/runs
POST /v2/admin/agentic/runs/{run}/stop
POST /v2/admin/agentic/approvals/{approval}/approve
GET /v2/admin/agentic/schedules
POST /v2/admin/agentic/schedules
Account Security (MFA)
POST /v2/admin/account/mfa/authenticator/start
POST /v2/admin/account/mfa/authenticator/confirm
DELETE /v2/admin/account/mfa/authenticator
POST /v2/admin/account/mfa/recovery-codes/regenerate
GET /v2/admin/account/activities
Admin UI: Settings Hub Restructuring
The settings module was restructured from a flat list to a categorized hub layout.
What Changed
- Settings entry point is now a hub landing page with a category grid.
- Each category (General, Content, Server, etc.) opens in a dedicated sidebar layout.
- Old flat URLs (e.g.,
/setting/basic) redirect to new nested paths (e.g.,/setting/general/basic).
New Components
| Component | Purpose |
|---|---|
setting-hub.vue | Hub landing page with category grid |
setting-category-layout.vue | Category sidebar wrapper |
URL migration
All legacy /setting/* routes have backwards-compatible redirects. Bookmarks and integrations using old URLs will continue to work.
Admin UI: CMS Management Module
A complete CMS Management admin module was added with 12 pages covering domain, customer, and payment management.
Pages
- Dashboard — domain stats, upcoming expiries, recent registrations.
- Domains — list (with filters and bulk actions), create, and detail page (tabs: info, payments, activity, reminders).
- Customers — list, create (with contact CRUD), and detail page (tabs: info, contacts, domains).
- Payments — list with verify action for pending manual payments.
- Reminders — list with send-now action.
- Activity Logs — global log viewer with date range filtering.
- Settings — pricing, reminders, Stripe config, notification channels.
See the CMS Management guide for details.
Admin UI: Active Modules
Navigation now dynamically filters based on which modules are active on the backend.
- A new
useActiveModulescomposable fetches the active module list from/modulesand caches it inlocalStorage. - Navigation items annotated with a
modulefield are hidden when the corresponding module is inactive. - Module lookup is case-insensitive with O(1) performance.
See the Active Modules developer guide for details.
Admin UI: i18n Namespace Migration
All i18n keys were migrated to canonical namespaces. Legacy single-letter aliases have been removed.
| Old Prefix | New Prefix | Example |
|---|---|---|
n.* | nav.* | n.a.subject → nav.a.subject |
e.* | enum.* | e.date → enum.date |
t.* | text.* | t.page_title → text.page_title |
The backwards-compatibility alias layer (applyLegacyAliases) has been removed. All new code must use canonical namespaces.
See the i18n Migration developer guide for details.
Admin UI: UUID Routing
Entity routes now use uuid instead of numeric id for user, post, product, and customer pages.
| Entity | Old Param | New Param |
|---|---|---|
| User | :id | :uuid |
| Post | :id | :uuid |
| Product | :id | :uuid |
| Customer | :id | :uuid |
| Order | :id | :order_code |
Breaking change
Any custom links or integrations using numeric :id parameters must be updated to use :uuid (or :order_code for orders).
Admin UI: Dependency Optimization
- Lodash migrated from CJS
lodashto ESMlodash-esacross 47 files (~90 KB bundle savings). - ESLint: Removed
@babel/eslint-parserandeslint-plugin-jsx-a11y(197 transitive packages pruned). - Environment: Hardcoded production URL replaced with
VITE_CMS_API_URLenv variable. - Console cleanup: Debug
console.log()statements removed; error/warning cases converted toconsole.error()/console.warn().
DocBlock Documentation
All 1,405 PHP files now have 100% coverage:
- Class-level docblocks: 100% (1,405/1,405)
- Method-level docblocks: 100% (3,694/3,694)
@param/@returncompleteness: 100%@seecross-references: 1,109 tags validated@packagePSR-4 compliance: 100%- Language: 100% English (39 Vietnamese comments translated)

