Trái tim runtime: ledger installed_modules (version, checksum_sha256, enabled/status), loader mount module lúc boot, enable/disable không cần restart, hooks install/upgrade/uninstall.
| Thành phần | Vai trò |
|---|---|
| runtime-core (package) | createRuntimeCore: ledger + đối chiếu ledger⇄disk (fail-fast khi lệch) + coreTables bảo vệ + checksum |
| runtimeCore.js (host) | Inject authenticate/authz/verifyLicense/hooks; onInstalled copy roleTemplates vào engine + bump epoch |
| ogapp CLI | list/install/uninstall/enable/disable/info · tải từ registry hoặc CP · hỗ trợ file local |
| Migrations | SQL chạy theo alphabet, quy ước idempotent IF NOT EXISTS — không có bảng tracking đã chạy |
| Tham chiếu | Khuyến nghị |
|---|---|
| Flyway / Knex / Odoo module upgrade | Ưu tiên cao: thêm bảng module_migrations(module_key, filename, checksum, applied_at) — chỉ chạy file chưa applied, chặn file đã applied bị sửa nội dung. Nhỏ (~2-3 ngày) nhưng chặn cả lớp lỗi upgrade trước khi module domain vào giai đoạn ALTER |
| Vệ sinh | Gỡ khối auto-seed tạm thời đúng như ghi chú; seed chuyển thành lệnh chủ động ogapp seed <key> |
| Docker health | Thêm health-check per-module sau mount (route ping) — phát hiện module hỏng ngay lúc boot thay vì lúc user bấm |
Core không phải module nghiệp vụ — thay ma trận vai trò bằng tác nhân × năng lực, kèm cơ chế/quyền gate từng năng lực. R đọc · W thực hiện · A duyệt.
| Năng lực | Cơ chế / quyền gate | SUPER | OWNER/QTHT | DEV | SVC | USER |
|---|---|---|---|---|---|---|
| Cài / gỡ module | system.admin.modules.install/delete | — | W | — | — | — |
| Bật / tắt module (không restart) | system.admin.modules.* | — | W | — | — | — |
| Mount + chạy migrations lúc boot | tiến trình hệ thống | — | — | — | W | — |
| Verify checksum/license lúc cài (đích P1/CP-03) | hook verifyLicense + checksum | — | — | — | W | — |
| Xem health module (đích) | system.admin.health.view | — | R | — | — | — |
SUPER = super admin CP · OWNER/QTHT = chủ workspace / quản trị WS · DEV = developer/publisher · SVC = service-to-service (runtime/hook) · USER = người dùng cuối. Mục ghi (đích) = theo khuyến nghị P1–P5, chưa có ở hiện trạng.