Phiên bản 2026.3.0

Nhật ký phát hành 2026.3.0

Phiên bản 2026.3.0 là bản phát hành lớn đầu tiên sử dụng Calendar Versioning (CalVer). Dưới đây là tổng hợp đầy đủ các thay đổi.

Calendar Versioning (CalVer)

Từ phiên bản này, iSPA CMS áp dụng định dạng CalVer: YYYY.MM.PATCH.

  • Tệp VERSION ở thư mục gốc là nguồn duy nhất cho phiên bản hệ thống.
  • Hai lệnh artisan mới: cms:version và cms:bump.
  • Tất cả 18 module được đồng bộ phiên bản 2026.03.0 trong cả module.json và composer.json.
# Hiển thị phiên bản hiện tại
php artisan cms:version

# Xuất dạng JSON
php artisan cms:version --json

# Tăng phiên bản patch
php artisan cms:bump patch

# Chạy thử (không ghi tệp)
php artisan cms:bump patch --dry-run

Nâng cấp Laravel 12

Framework cốt lõi được nâng cấp từ Laravel 11.48.0 lên Laravel 12.55.0.

Thay đổi gói phụ thuộc

GóiTrướcSau
laravel/framework11.48.012.55.0
openai-php/laravel0.10.20.19.1
laravel/sanctum—^4.0
laravel/telescope—^5.0

Lỗi đã sửa trong quá trình nâng cấp

  • GuuXeCrawler: Loại bỏ trùng lặp tên route trong nhóm API v5.
  • Education: Loại bỏ trùng lặp tên route trong nhóm v5.
  • routes/api.php: Xóa ->name('login') trùng lặp từ API fallback.

Kết quả kiểm tra

  • Pipeline build: config:cache, route:cache, view:cache, event:cache, pnpm build — tất cả đạt.
  • Test: 188 đạt, 110 lỗi (cùng baseline với L11, không có regression).

Hỗ trợ PostgreSQL

Phiên bản này thêm hỗ trợ PostgreSQL 16 song song với MySQL/MariaDB.

Kiến trúc cơ sở dữ liệu kép

  • MySQL/MariaDB — mặc định cho CMS (DB_CONNECTION=mysql).
  • PostgreSQL — cho hệ thống Game (GAME_DB_CONNECTION=pgsql).

Cấu hình Docker

services:
  pgsql:
    image: 'postgres:16'
    profiles:
      - pgsql
    ports:
      - '${FORWARD_PGSQL_PORT:-5432}:5432'

Kích hoạt với: COMPOSE_PROFILES=pgsql docker-compose up

18 Module

Hệ thống module đầy đủ bao gồm 18 module, tất cả đồng bộ phiên bản 2026.03.0.

Module CMS cốt lõi

ModuleAliasMô tả
CorecoreChức năng CMS thiết yếu
ContentcontentBài viết, trang, media
EcommerceecommerceĐơn hàng, giỏ hàng, thanh toán
EducationeducationSinh viên, giảng viên, đánh giá
ProductproductDanh mục, SKU, thương hiệu
RealEstatereal-estateBất động sản, dự án
CmsManagementcmsmanagementQuản lý tên miền
GuuXeCrawlerguuxescraplingPipeline crawl dữ liệu web

Module Game

ModuleAliasMô tả
GameAdmingameadminQuản trị game
GameAuthgameauthXác thực game
GameCoregamecoreHệ thống game cốt lõi
GameEconomygameeconomyKinh tế, ví, tiền tệ
GameInventorygameinventoryKho đồ người chơi
GameLeaderboardgameleaderboardBảng xếp hạng
GameLiveOpsgameliveopsVận hành trực tiếp
GameMarketplacegamemarketplaceChợ P2P
GamePlayergameplayerHồ sơ người chơi
GameRungamerunPhiên game

Lệnh Artisan mới

Quản lý phiên bản

cms:version [--json]              # Hiển thị phiên bản CalVer
cms:bump {patch|minor|major}      # Tăng phiên bản toàn hệ thống

Hệ thống cốt lõi

core:admin-i18n:audit             # Kiểm tra khóa dịch
core:agentic:run:schedules        # Chạy tác vụ agent định kỳ
core:agentic:preflight            # Kiểm tra hệ thống agent
core:agentic:sync:tools           # Đồng bộ định nghĩa công cụ
core:deploy:preflight             # Kiểm tra trước triển khai
core:status:scan                  # Quét sức khỏe hệ thống

Game

gameadmin:ledger:drift:check      # Phát hiện trôi sổ cái
gameeconomy:reconcile:balances    # Đối soát số dư
gameleaderboard:auto:promote      # Tự động thăng hạng

API Endpoint mới

Hệ thống Agentic

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

Bảo mật tài khoản (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

Giao diện Admin: Tái cấu trúc Settings Hub

Module cài đặt được tái cấu trúc từ danh sách phẳng sang bố cục hub theo danh mục.

Thay đổi

  • Điểm vào cài đặt hiện là trang hub với lưới danh mục.
  • Mỗi danh mục (Chung, Nội dung, Máy chủ, v.v.) mở trong bố cục sidebar riêng.
  • URL cũ (ví dụ: /setting/basic) chuyển hướng sang đường dẫn mới (ví dụ: /setting/general/basic).

Component mới

ComponentMục đích
setting-hub.vueTrang hub với lưới danh mục
setting-category-layout.vueWrapper sidebar theo danh mục

Di chuyển URL

Tất cả route /setting/* cũ có redirect tương thích ngược. Bookmark và tích hợp sử dụng URL cũ sẽ tiếp tục hoạt động.

Giao diện Admin: Module Quản lý CMS

Module Quản lý CMS hoàn chỉnh được thêm với 12 trang bao gồm quản lý tên miền, khách hàng và thanh toán.

Các trang

  • Dashboard — thống kê tên miền, sắp hết hạn, đăng ký gần đây.
  • Tên miền — danh sách (với bộ lọc và hành động hàng loạt), tạo mới, và trang chi tiết (tab: thông tin, thanh toán, hoạt động, nhắc nhở).
  • Khách hàng — danh sách, tạo mới (với CRUD liên hệ), và trang chi tiết (tab: thông tin, liên hệ, tên miền).
  • Thanh toán — danh sách với hành động xác minh cho thanh toán thủ công đang chờ.
  • Nhắc nhở — danh sách với hành động gửi ngay.
  • Nhật ký hoạt động — xem nhật ký toàn cục với lọc theo khoảng thời gian.
  • Cài đặt — giá cả, nhắc nhở, cấu hình Stripe, kênh thông báo.

Xem hướng dẫn Quản lý CMS để biết chi tiết.

Giao diện Admin: Module hoạt động

Điều hướng giờ đây tự động ẩn dựa trên module nào đang hoạt động trên backend.

  • Composable useActiveModules mới lấy danh sách module hoạt động từ /modules và cache trong localStorage.
  • Các mục điều hướng có trường module sẽ bị ẩn khi module tương ứng không hoạt động.
  • Tra cứu module không phân biệt hoa thường với hiệu suất O(1).

Xem hướng dẫn Active Modules cho nhà phát triển để biết chi tiết.

Giao diện Admin: Di chuyển namespace i18n

Tất cả khóa i18n được di chuyển sang namespace chuẩn. Alias chữ cái đơn cũ đã bị xóa.

Tiền tố cũTiền tố mớiVí dụ
n.*nav.*n.a.subject → nav.a.subject
e.*enum.*e.date → enum.date
t.*text.*t.page_title → text.page_title

Lớp tương thích ngược (applyLegacyAliases) đã bị xóa. Tất cả code mới phải sử dụng namespace chuẩn.

Xem hướng dẫn di chuyển i18n cho nhà phát triển để biết chi tiết.

Giao diện Admin: Định tuyến UUID

Route của các entity giờ sử dụng uuid thay vì id dạng số cho trang người dùng, bài viết, sản phẩm và khách hàng.

EntityTham số cũTham số mới
User:id:uuid
Post:id:uuid
Product:id:uuid
Customer:id:uuid
Order:id:order_code

Thay đổi không tương thích

Bất kỳ liên kết hoặc tích hợp tùy chỉnh nào sử dụng tham số :id dạng số phải được cập nhật sang :uuid (hoặc :order_code cho đơn hàng).

Giao diện Admin: Tối ưu hóa phụ thuộc

  • Lodash di chuyển từ CJS lodash sang ESM lodash-es trên 47 tệp (~90 KB tiết kiệm bundle).
  • ESLint: Xóa @babel/eslint-parser và eslint-plugin-jsx-a11y (197 gói phụ thuộc được cắt bỏ).
  • Biến môi trường: URL production cố định được thay bằng biến VITE_CMS_API_URL.
  • Dọn console: Xóa câu lệnh console.log() debug; chuyển trường hợp lỗi/cảnh báo sang console.error()/console.warn().

Tài liệu DocBlock

Tất cả 1.405 tệp PHP đạt 100% coverage:

  • Docblock cấp class: 100% (1.405/1.405)
  • Docblock cấp method: 100% (3.694/3.694)
  • Hoàn thiện @param/@return: 100%
  • Tham chiếu chéo @see: 1.109 tag đã xác minh
  • Tuân thủ PSR-4 @package: 100%
  • Ngôn ngữ: 100% tiếng Anh (39 comment tiếng Việt đã dịch)