Browse Source

refactor(core): rebrand application as PHPEngine

softword 2 months ago
parent
commit
cae7bfa7d8
63 changed files with 126 additions and 132 deletions
  1. 5 5
      AGENTS.md
  2. BIN
      assets/images/bell.png
  3. BIN
      assets/images/delete.png
  4. BIN
      assets/images/demo.png
  5. BIN
      assets/images/error_bg.png
  6. BIN
      assets/images/logo-sm.png
  7. BIN
      assets/images/om-link-logo.png
  8. BIN
      assets/images/svg/bind.png
  9. BIN
      assets/images/svg/import.png
  10. BIN
      assets/images/svg/kittingdynamic.png
  11. BIN
      assets/images/svg/pick2light.png
  12. BIN
      assets/images/svg/staging.png
  13. BIN
      assets/images/svg/unbind.png
  14. BIN
      assets/images/users/default.png
  15. 1 1
      cfg/config.ini.example
  16. 5 3
      composer.json
  17. 1 1
      composer.lock
  18. 0 7
      config.ini
  19. 2 2
      index.php
  20. 2 2
      package.json
  21. 3 3
      phpengine.sql
  22. 1 1
      specs/api-routes.md
  23. 1 1
      specs/commands.md
  24. 3 4
      specs/configuration/spec.md
  25. 2 2
      specs/conventions-backend.md
  26. 2 2
      specs/conventions-database.md
  27. 6 6
      specs/file-structure.md
  28. 4 4
      specs/identity/spec.md
  29. 4 4
      specs/integrations/browser-api.md
  30. 4 4
      specs/integrations/encrypted-config.md
  31. 2 2
      specs/integrations/index.md
  32. 6 6
      specs/integrations/mysql.md
  33. 10 10
      specs/module-index.md
  34. 1 1
      specs/role-and-inventory.md
  35. 1 1
      specs/rules/add-api-endpoint.md
  36. 2 2
      specs/rules/add-plugin.md
  37. 3 3
      src/Core/Admin/Admin.php
  38. 4 4
      src/Core/Api/AdminController.php
  39. 2 2
      src/Core/Api/Api.php
  40. 2 2
      src/Core/Api/AuthController.php
  41. 2 2
      src/Core/Api/Controller.php
  42. 2 2
      src/Core/Api/InventoryController.php
  43. 1 1
      src/Core/Api/NavigationController.php
  44. 2 2
      src/Core/Api/NotificationController.php
  45. 1 1
      src/Core/Api/RoleController.php
  46. 3 3
      src/Core/Api/UserController.php
  47. 1 1
      src/Core/System/ApplicationComposition.php
  48. 2 2
      src/Core/System/ErrorHandlers.php
  49. 1 1
      src/Core/System/InventoryItem.php
  50. 1 1
      src/Core/System/Notifications.php
  51. 3 3
      src/Core/System/PluginStrategy.php
  52. 1 1
      src/Core/System/Role.php
  53. 6 6
      src/Core/System/RuntimeServices.php
  54. 4 4
      src/Core/System/System.php
  55. 2 2
      src/Core/System/User.php
  56. 1 1
      src/Core/System/UserRoles.php
  57. 1 1
      src/Modules/Blank/Blank.php
  58. 1 1
      ui/app/index.html
  59. 1 1
      ui/app/src/features/admin/ConfigPage.jsx
  60. 2 2
      ui/app/src/features/auth/LoginPage.jsx
  61. 1 1
      ui/app/src/features/home/HomePage.jsx
  62. 4 4
      ui/app/src/features/shell/AppShell.jsx
  63. 4 4
      ui/app/src/routes.jsx

+ 5 - 5
AGENTS.md

@@ -1,23 +1,23 @@
-# OM-Link Engine
+# PHPEngine
 
 
 ## Project Overview
 ## Project Overview
-OM-Link is a PHP/Fat-Free Framework application with a React administration UI. It exposes a same-origin JSON API for session authentication, navigation, notifications, encrypted configuration, and user administration.
+PHPEngine is a PHP/Fat-Free Framework application with a React administration UI. It exposes a same-origin JSON API for session authentication, navigation, notifications, encrypted configuration, and user administration.
 
 
 ## Tech Stack
 ## Tech Stack
 PHP 8.5+, Fat-Free Framework 3.9, MySQL via F3 `DB\SQL`, React 19, React Router 7, MUI 9, Tailwind CSS 4, and Vite 7.
 PHP 8.5+, Fat-Free Framework 3.9, MySQL via F3 `DB\SQL`, React 19, React Router 7, MUI 9, Tailwind CSS 4, and Vite 7.
 
 
 ## Architecture
 ## Architecture
-`index.php` boots F3, loads `cfg/config.bin`, then discovers `PluginStrategy` subclasses from `src/`. `OpenMind\Api\Api` registers `/api/v1` routes; React in `ui/app` consumes them through a same-origin client.
+`index.php` boots F3, loads `cfg/config.bin`, then discovers `PluginStrategy` subclasses from `src/`. `Core\Api\Api` registers `/api/v1` routes; React in `ui/app` consumes them through a same-origin client.
 
 
 ## Commands
 ## Commands
 `composer install` · `npm ci` · `npm run buildDev` · `npm run buildProd` · `npm run watch` · `npm pack`. Copy `cfg/config.ini.example` to the ignored `cfg/config.ini` and provision `cfg/config.bin` outside the repository. No test, lint, deploy, or configuration-generation command is declared.
 `composer install` · `npm ci` · `npm run buildDev` · `npm run buildProd` · `npm run watch` · `npm pack`. Copy `cfg/config.ini.example` to the ignored `cfg/config.ini` and provision `cfg/config.bin` outside the repository. No test, lint, deploy, or configuration-generation command is declared.
 
 
 ## Code Style
 ## Code Style
-Use PSR-4 namespaces under `OpenMind\` and `Modules\`; match nearby PHP style and `declare(strict_types=1)` in modern API code. Preserve frontend import/component conventions; `.prettierrc` defines single quotes, semicolons, LF endings, and 200-column print width.
+Use PSR-4 namespaces under `Core\` and `Modules\`; match nearby PHP style and `declare(strict_types=1)` in modern API code. Preserve frontend import/component conventions; `.prettierrc` defines single quotes, semicolons, LF endings, and 200-column print width.
 
 
 ## Coding Rules
 ## Coding Rules
 - A plugin directory is discovered only when it contains a same-named PHP initializer extending `PluginStrategy`.
 - A plugin directory is discovered only when it contains a same-named PHP initializer extending `PluginStrategy`.
-- Register API routes only in `src/OpenMind/Api/Api.php`; controllers must return JSON through `Controller` helpers.
+- Register API routes only in `src/Core/Api/Api.php`; controllers must return JSON through `Controller` helpers.
 - Protect authenticated state changes with the session CSRF token; enforce authorization server-side, not only in React routes.
 - Protect authenticated state changes with the session CSRF token; enforce authorization server-side, not only in React routes.
 - Keep the `username|password` input to password hashing; a username change requires a new password.
 - Keep the `username|password` input to password hashing; a username change requires a new password.
 - Preserve the final-admin and self-deletion invariants in user management.
 - Preserve the final-admin and self-deletion invariants in user management.

BIN
assets/images/bell.png


BIN
assets/images/delete.png


BIN
assets/images/demo.png


BIN
assets/images/error_bg.png


BIN
assets/images/logo-sm.png


BIN
assets/images/om-link-logo.png


BIN
assets/images/svg/bind.png


BIN
assets/images/svg/import.png


BIN
assets/images/svg/kittingdynamic.png


BIN
assets/images/svg/pick2light.png


BIN
assets/images/svg/staging.png


BIN
assets/images/svg/unbind.png


BIN
assets/images/users/default.png


+ 1 - 1
cfg/config.ini.example

@@ -17,7 +17,7 @@ BLINKOFF_COLOR=0
 
 
 ; Path
 ; Path
 BASEURL=/phengine
 BASEURL=/phengine
-SITENAME=OM-Link
+SITENAME=PHPEngine
 LOGO_CUSTOMER={{@BASEURL}}/assets/images/logo.png
 LOGO_CUSTOMER={{@BASEURL}}/assets/images/logo.png
 ICON_LOGOUT={{@BASEURL}}/assets/images/logout.png
 ICON_LOGOUT={{@BASEURL}}/assets/images/logout.png
 
 

+ 5 - 3
composer.json

@@ -1,12 +1,14 @@
 {
 {
-    "name": "openmind/omlink",
+    "name": "gianvoci/phpengine",
+    "description": "PHPEngine application framework",
+    "license": "proprietary",
     "require": {
     "require": {
         "php": "^8.5",
         "php": "^8.5",
-        "bcosca/fatfree-core": "3.9.3"
+        "bcosca/fatfree-core": "^3.9"
     },
     },
     "autoload": {
     "autoload": {
         "psr-4": {
         "psr-4": {
-            "OpenMind\\": "src/OpenMind/",
+            "Core\\": "src/Core/",
             "Modules\\": "src/Modules/"
             "Modules\\": "src/Modules/"
         }
         }
     },
     },

+ 1 - 1
composer.lock

@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
         "This file is @generated automatically"
     ],
     ],
-    "content-hash": "2e8d83a30d4a86562e5e6e4b17ed2446",
+    "content-hash": "88a265d6bad28c74308dbdfd528373fe",
     "packages": [
     "packages": [
         {
         {
             "name": "bcosca/fatfree-core",
             "name": "bcosca/fatfree-core",

+ 0 - 7
config.ini

@@ -1,7 +0,0 @@
-[globals]
-
-DEBUG=3
-UI=ui/
-
-dbuser=root
-dbpass=openmind

+ 2 - 2
index.php

@@ -8,7 +8,7 @@
 //error_reporting(E_ALL);
 //error_reporting(E_ALL);
 
 
 // Init Framework
 // Init Framework
-use OpenMind\System\OMUtils;
+use Core\System\RuntimeServices;
 
 
 require_once __DIR__ . '/vendor/autoload.php';
 require_once __DIR__ . '/vendor/autoload.php';
 
 
@@ -19,7 +19,7 @@ $f3 = \Base::instance();
 $f3->set('GLOBALMENU', []);
 $f3->set('GLOBALMENU', []);
 
 
 // Initialize Util library
 // Initialize Util library
-$frameworkUtils = new OMUtils();
+$frameworkUtils = new RuntimeServices();
 
 
 // PHP Check Version
 // PHP Check Version
 $frameworkUtils->RequirePhp85();
 $frameworkUtils->RequirePhp85();

+ 2 - 2
package.json

@@ -1,12 +1,12 @@
 {
 {
-  "name": "omlink",
+  "name": "phpengine",
   "version": "1.12.1",
   "version": "1.12.1",
   "codename": "Barricade",
   "codename": "Barricade",
   "private": true,
   "private": true,
   "engines": {
   "engines": {
     "node": "^20.19.0 || >=22.12.0"
     "node": "^20.19.0 || >=22.12.0"
   },
   },
-  "description": "OM-Link Engine",
+  "description": "PHPEngine",
   "author": "Giancarlo Voci",
   "author": "Giancarlo Voci",
   "scripts": {
   "scripts": {
     "clean": "shx --silent rm -rf deploy.tar.gz tmp node_modules ui/admin/node_modules src_minified assets/frontend assets/admin Site.log cfg/*.old ui/*/masterpage.tpl fbtpl *.tgz",
     "clean": "shx --silent rm -rf deploy.tar.gz tmp node_modules ui/admin/node_modules src_minified assets/frontend assets/admin Site.log cfg/*.old ui/*/masterpage.tpl fbtpl *.tgz",

+ 3 - 3
omlink.sql → phpengine.sql

@@ -7,9 +7,9 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
 
 
 SET NAMES utf8mb4;
 SET NAMES utf8mb4;
 
 
-DROP DATABASE IF EXISTS `omlink`;
-CREATE DATABASE `omlink` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
-USE `omlink`;
+DROP DATABASE IF EXISTS `phpengine`;
+CREATE DATABASE `phpengine` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
+USE `phpengine`;
 
 
 DROP TABLE IF EXISTS `label_bindings`;
 DROP TABLE IF EXISTS `label_bindings`;
 CREATE TABLE `label_bindings` (
 CREATE TABLE `label_bindings` (

+ 1 - 1
specs/api-routes.md

@@ -2,7 +2,7 @@ Read this when changing the JSON API contract, request authorization, or a React
 
 
 # API Routes
 # API Routes
 
 
-All routes are registered in `src/OpenMind/Api/Api.php`. Responses are JSON with `Cache-Control: no-store`. `CSRF` means `X-CSRF-Token` must equal the token stored in the PHP session.
+All routes are registered in `src/Core/Api/Api.php`. Responses are JSON with `Cache-Control: no-store`. `CSRF` means `X-CSRF-Token` must equal the token stored in the PHP session.
 
 
 | Method | Path | Handler | Description | Authorization |
 | Method | Path | Handler | Description | Authorization |
 |---|---|---|---|---|
 |---|---|---|---|---|

+ 1 - 1
specs/commands.md

@@ -30,7 +30,7 @@ The application bootstrap requires `cfg/config.bin`. Its base64+gzip encoding is
 
 
 ## Database
 ## Database
 
 
-`omlink.sql` is a MySQL dump for the `omlink` database. It contains `DROP DATABASE`, `CREATE DATABASE`, and sample user data; review it before importing and never run it against a database that must be preserved.
+`phpengine.sql` is a MySQL dump for the `phpengine` database. It contains `DROP DATABASE`, `CREATE DATABASE`, and sample user data; review it before importing and never run it against a database that must be preserved.
 
 
 The role-catalog migration is an explicit data-changing CLI operation. It is not run during boot, has no automatic rollback, and must be reviewed before execution.
 The role-catalog migration is an explicit data-changing CLI operation. It is not run during boot, has no automatic rollback, and must be reviewed before execution.
 
 

+ 3 - 4
specs/configuration/spec.md

@@ -13,7 +13,6 @@ The application loads F3 globals from a runtime configuration file and provides
 | `cfg/config.ini` | Plaintext F3 INI | Ignored local configuration copied from the template; it may contain credentials. |
 | `cfg/config.ini` | Plaintext F3 INI | Ignored local configuration copied from the template; it may contain credentials. |
 | `cfg/config.bin` | `base64(gzcompress(ini-text))` | Runtime configuration loaded by `index.php`. |
 | `cfg/config.bin` | `base64(gzcompress(ini-text))` | Runtime configuration loaded by `index.php`. |
 | `cfg/config.bin.old` | Previous `config.bin` bytes | Single backup created before an administrator save. |
 | `cfg/config.bin.old` | Previous `config.bin` bytes | Single backup created before an administrator save. |
-| `config.ini` | Plaintext INI | Legacy root-level configuration artifact; not loaded by the application bootstrap. |
 
 
 ## Business Rules
 ## Business Rules
 - Startup must validate PHP 8.5+, require `cfg/config.bin`, decode it to a temporary file, apply F3 configuration, then remove the temporary file.
 - Startup must validate PHP 8.5+, require `cfg/config.bin`, decode it to a temporary file, apply F3 configuration, then remove the temporary file.
@@ -27,9 +26,9 @@ The application loads F3 globals from a runtime configuration file and provides
 
 
 | Constant | Value | Location |
 | Constant | Value | Location |
 |---|---|---|
 |---|---|---|
-| `AdminController::CONFIGURATION_FILE` | `cfg/config.bin` | `src/OpenMind/Api/AdminController.php` |
-| `AdminController::CONFIGURATION_BACKUP_FILE` | `cfg/config.bin.old` | `src/OpenMind/Api/AdminController.php` |
-| `OMUtils::DEFAULT_SOCKET_TIMEOUT_SECONDS` | `5` | `src/OpenMind/System/OMUtils.php` |
+| `AdminController::CONFIGURATION_FILE` | `cfg/config.bin` | `src/Core/Api/AdminController.php` |
+| `AdminController::CONFIGURATION_BACKUP_FILE` | `cfg/config.bin.old` | `src/Core/Api/AdminController.php` |
+| `RuntimeServices::DEFAULT_SOCKET_TIMEOUT_SECONDS` | `5` | `src/Core/System/RuntimeServices.php` |
 
 
 ## Cross-links
 ## Cross-links
 See [API routes](../api-routes.md), [encrypted configuration integration](../integrations/encrypted-config.md), and [commands](../commands.md).
 See [API routes](../api-routes.md), [encrypted configuration integration](../integrations/encrypted-config.md), and [commands](../commands.md).

+ 2 - 2
specs/conventions-backend.md

@@ -3,13 +3,13 @@ Read this when changing PHP, Fat-Free Framework integration, plugins, or API con
 # Backend Conventions
 # Backend Conventions
 
 
 ## Namespaces and Plugins
 ## Namespaces and Plugins
-- Composer maps `OpenMind\` to `src/OpenMind/` and `Modules\` to `src/Modules/`.
+- Composer maps `Core\` to `src/Core/` and `Modules\` to `src/Modules/`.
 - A discovered plugin lives in a directory containing `<DirectoryName>.php`; its derived class must extend `PluginStrategy`.
 - A discovered plugin lives in a directory containing `<DirectoryName>.php`; its derived class must extend `PluginStrategy`.
 - `ApplicationComposition` boots `System` before the remaining plugins. Register plugin initialization work in constructors.
 - `ApplicationComposition` boots `System` before the remaining plugins. Register plugin initialization work in constructors.
 - Use `PluginStrategy::AddRoute()` for F3 route registration and `AddMenuItem()` for permission-filtered menu entries.
 - Use `PluginStrategy::AddRoute()` for F3 route registration and `AddMenuItem()` for permission-filtered menu entries.
 
 
 ## API Controllers
 ## API Controllers
-- API route declarations belong in `OpenMind\Api\Api`; controllers extend `Controller`.
+- API route declarations belong in `Core\Api\Api`; controllers extend `Controller`.
 - Use `sendJson()` / `sendError()` rather than emitting ad hoc response formats. They set JSON, status, and `Cache-Control: no-store`.
 - Use `sendJson()` / `sendError()` rather than emitting ad hoc response formats. They set JSON, status, and `Cache-Control: no-store`.
 - Decode request objects through `decodeJsonRequest()` and return 400 for invalid JSON or required-field failures.
 - Decode request objects through `decodeJsonRequest()` and return 400 for invalid JSON or required-field failures.
 - Call `requireAuthentication()` for protected reads; call numeric `requireRole()` plus `validateCsrfToken()` before protected mutations. Role ID `1` is Administrator and role ID `2` is Inventory operator.
 - Call `requireAuthentication()` for protected reads; call numeric `requireRole()` plus `validateCsrfToken()` before protected mutations. Role ID `1` is Administrator and role ID `2` is Inventory operator.

+ 2 - 2
specs/conventions-database.md

@@ -3,10 +3,10 @@ Read this when changing MySQL schema, F3 mappers, or data-integrity rules.
 # Database Conventions
 # Database Conventions
 
 
 ## Connection
 ## Connection
-`OpenMind\System\System` creates the F3 `DB\SQL` connection from `DSN`, `dbuser`, and `dbpass` F3 globals. It uses PDO exceptions and enables persistent connections on Linux and all CLI requests. Keep credentials in configuration, not source code.
+`Core\System\System` creates the F3 `DB\SQL` connection from `DSN`, `dbuser`, and `dbpass` F3 globals. It uses PDO exceptions and enables persistent connections on Linux and all CLI requests. Keep credentials in configuration, not source code.
 
 
 ## Schema Source
 ## Schema Source
-`omlink.sql` is the tracked schema source. It defines six tables:
+`phpengine.sql` is the tracked schema source. It defines six tables:
 
 
 | Table | Engine | Role |
 | Table | Engine | Role |
 |---|---|---|
 |---|---|---|

+ 6 - 6
specs/file-structure.md

@@ -5,22 +5,22 @@ Read this when you need the repository map, boot order, or generated-file bounda
 | Path | Purpose |
 | Path | Purpose |
 |---|---|
 |---|---|
 | `index.php` | HTTP/CLI bootstrap: Composer autoload, F3 singleton, encrypted runtime config, plugin composition, then `run()`. |
 | `index.php` | HTTP/CLI bootstrap: Composer autoload, F3 singleton, encrypted runtime config, plugin composition, then `run()`. |
-| `composer.json` | PHP 8.5 and Fat-Free Framework dependencies; PSR-4 maps `OpenMind\` and `Modules\`. |
+| `composer.json` | PHP 8.5 and Fat-Free Framework dependencies; PSR-4 maps `Core\` and `Modules\`. |
 | `cfg/config.ini.example` | Tracked F3 configuration template with deployment placeholders. |
 | `cfg/config.ini.example` | Tracked F3 configuration template with deployment placeholders. |
 | `cfg/config.ini` | Ignored local F3 configuration, which may contain credentials. |
 | `cfg/config.ini` | Ignored local F3 configuration, which may contain credentials. |
 | `cfg/config.bin` | Runtime configuration consumed by `index.php`; provisioned outside the repository and not tracked. |
 | `cfg/config.bin` | Runtime configuration consumed by `index.php`; provisioned outside the repository and not tracked. |
 | `scripts/` | No tracked scripts. |
 | `scripts/` | No tracked scripts. |
-| `src/OpenMind/System/` | Bootstrap, plugin discovery, framework services, role/user/inventory mappers, notifications, and error handling. |
-| `src/OpenMind/Api/` | API route registry and JSON controllers, including role and inventory administration. |
-| `src/OpenMind/Admin/` | Administration plugin that publishes the ID-1 administration menu hierarchy. |
+| `src/Core/System/` | Bootstrap, plugin discovery, framework services, role/user/inventory mappers, notifications, and error handling. |
+| `src/Core/Api/` | API route registry and JSON controllers, including role and inventory administration. |
+| `src/Core/Admin/` | Administration plugin that publishes the ID-1 administration menu hierarchy. |
 | `src/Modules/Blank/` | Retained plugin directory that publishes the ID-2 Inventory Monitor menu entry. |
 | `src/Modules/Blank/` | Retained plugin directory that publishes the ID-2 Inventory Monitor menu entry. |
 | `ui/app/` | Vite React source application. |
 | `ui/app/` | Vite React source application. |
 | `ui/app/src/api/client.js` | Same-origin API client and in-memory CSRF token holder. |
 | `ui/app/src/api/client.js` | Same-origin API client and in-memory CSRF token holder. |
 | `ui/app/src/features/` | Authentication, shell, administration, inventory demo, notification, and home UI features. |
 | `ui/app/src/features/` | Authentication, shell, administration, inventory demo, notification, and home UI features. |
 | `assets/app/` | Ignored local Vite build output, including hashed JS/CSS and the manifest; do not edit manually. |
 | `assets/app/` | Ignored local Vite build output, including hashed JS/CSS and the manifest; do not edit manually. |
-| `assets/images/` | Static images referenced by legacy menu entries and React pages. |
+| `assets/images/` | Static images referenced by the React UI and runtime configuration. |
 | `vite.config.js` | Builds `ui/app` into `assets/app` with base `/phengine/assets/app/` and suppresses Rollup `"use client"` module-directive warnings. |
 | `vite.config.js` | Builds `ui/app` into `assets/app` with base `/phengine/assets/app/` and suppresses Rollup `"use client"` module-directive warnings. |
-| `omlink.sql` | MySQL schema and sample data dump, including the role catalog and inventory tables. |
+| `phpengine.sql` | MySQL schema and sample data dump, including the role catalog and inventory tables. |
 
 
 ## Boot and Request Flow
 ## Boot and Request Flow
 1. `index.php` validates PHP, decrypts `cfg/config.bin`, and invokes `ApplicationComposition` over `src/`.
 1. `index.php` validates PHP, decrypts `cfg/config.bin`, and invokes `ApplicationComposition` over `src/`.

+ 4 - 4
specs/identity/spec.md

@@ -31,11 +31,11 @@ This subsystem authenticates database-backed users into PHP sessions and lets ad
 
 
 | Constant | Value | Location |
 | Constant | Value | Location |
 |---|---|---|
 |---|---|---|
-| `User::PASSWORD_SEPARATOR` | `|` | `src/OpenMind/System/User.php` |
-| `Controller::CSRF_SESSION_KEY` | `SESSION.csrf_token` | `src/OpenMind/Api/Controller.php` |
-| `Controller::CSRF_HEADER` | `HTTP_X_CSRF_TOKEN` | `src/OpenMind/Api/Controller.php` |
+| `User::PASSWORD_SEPARATOR` | `|` | `src/Core/System/User.php` |
+| `Controller::CSRF_SESSION_KEY` | `SESSION.csrf_token` | `src/Core/Api/Controller.php` |
+| `Controller::CSRF_HEADER` | `HTTP_X_CSRF_TOKEN` | `src/Core/Api/Controller.php` |
 | Administrator authorization permission ID | `1` | Authorization contract used by administrator-only operations. |
 | Administrator authorization permission ID | `1` | Authorization contract used by administrator-only operations. |
-| `UserController::USERNAME_CONSTRAINT` | `uq_users_username` | `src/OpenMind/Api/UserController.php` |
+| `UserController::USERNAME_CONSTRAINT` | `uq_users_username` | `src/Core/Api/UserController.php` |
 
 
 ## Cross-links
 ## Cross-links
 See [API routes](../api-routes.md), [MySQL integration](../integrations/mysql.md), [browser API integration](../integrations/browser-api.md), and the [API endpoint rule](../rules/add-api-endpoint.md).
 See [API routes](../api-routes.md), [MySQL integration](../integrations/mysql.md), [browser API integration](../integrations/browser-api.md), and the [API endpoint rule](../rules/add-api-endpoint.md).

+ 4 - 4
specs/integrations/browser-api.md

@@ -7,10 +7,10 @@ Read this when changing browser-to-server API requests, sessions, CSRF, or JSON
 | File | Key symbols |
 | File | Key symbols |
 |---|---|
 |---|---|
 | `ui/app/src/api/client.js` | `apiRequest`, `getSession`, `login`, `logout`, navigation/notification functions |
 | `ui/app/src/api/client.js` | `apiRequest`, `getSession`, `login`, `logout`, navigation/notification functions |
-| `src/OpenMind/Api/Api.php` | Versioned route registry |
-| `src/OpenMind/Api/Controller.php` | JSON, request decoding, current user, CSRF, authorization helpers |
-| `src/OpenMind/Api/AuthController.php` | Session inspection, login, logout |
-| `src/OpenMind/Api/*Controller.php` | Navigation, configuration, user, and notification handlers |
+| `src/Core/Api/Api.php` | Versioned route registry |
+| `src/Core/Api/Controller.php` | JSON, request decoding, current user, CSRF, authorization helpers |
+| `src/Core/Api/AuthController.php` | Session inspection, login, logout |
+| `src/Core/Api/*Controller.php` | Navigation, configuration, user, and notification handlers |
 
 
 ## Flow
 ## Flow
 1. React boot calls `getSession()` through `apiRequest()`.
 1. React boot calls `getSession()` through `apiRequest()`.

+ 4 - 4
specs/integrations/encrypted-config.md

@@ -7,13 +7,13 @@ Read this when changing configuration encoding, runtime loading, backup behavior
 | File | Key symbols |
 | File | Key symbols |
 |---|---|
 |---|---|
 | `index.php` | `LoadEncryptedConfig('cfg/config.bin')` during bootstrap |
 | `index.php` | `LoadEncryptedConfig('cfg/config.bin')` during bootstrap |
-| `src/OpenMind/System/OMUtils.php` | `LoadEncryptedConfig`, `Encrypt`, `Decrypt` |
-| `src/OpenMind/Api/AdminController.php` | Admin read/save and backup restoration |
+| `src/Core/System/RuntimeServices.php` | `LoadEncryptedConfig`, `Encrypt`, `Decrypt` |
+| `src/Core/Api/AdminController.php` | Admin read/save and backup restoration |
 | `cfg/config.ini.example` | Tracked placeholder template for local configuration |
 | `cfg/config.ini.example` | Tracked placeholder template for local configuration |
 | `cfg/config.ini` | Ignored local plaintext configuration, potentially containing credentials |
 | `cfg/config.ini` | Ignored local plaintext configuration, potentially containing credentials |
 
 
 ## Flow
 ## Flow
-1. Bootstrap checks the PHP version and asks `OMUtils` to load `cfg/config.bin`.
+1. Bootstrap checks the PHP version and asks `RuntimeServices` to load `cfg/config.bin`.
 2. The utility decodes it to a temporary file, calls F3 `config()`, then deletes the temporary file.
 2. The utility decodes it to a temporary file, calls F3 `config()`, then deletes the temporary file.
 3. Deployment tooling provisions `cfg/config.bin` before bootstrap; no configuration-generation script is tracked.
 3. Deployment tooling provisions `cfg/config.bin` before bootstrap; no configuration-generation script is tracked.
 4. An administrator can read plaintext through the API or submit replacement text.
 4. An administrator can read plaintext through the API or submit replacement text.
@@ -23,7 +23,7 @@ Read this when changing configuration encoding, runtime loading, backup behavior
 
 
 | Boundary | Mechanism | Location |
 | Boundary | Mechanism | Location |
 |---|---|---|
 |---|---|---|
-| Runtime config presence | Bootstrap throws when the required file is absent | `OMUtils::LoadEncryptedConfig()` |
+| Runtime config presence | Bootstrap throws when the required file is absent | `RuntimeServices::LoadEncryptedConfig()` |
 | Sensitive config disclosure | Numeric permission ID `1` required before reading plaintext | `AdminController::load()` |
 | Sensitive config disclosure | Numeric permission ID `1` required before reading plaintext | `AdminController::load()` |
 | Sensitive config mutation | Numeric permission ID `1` and CSRF validation required | `AdminController::save()` |
 | Sensitive config mutation | Numeric permission ID `1` and CSRF validation required | `AdminController::save()` |
 | Partial replacement failure | Backup rename and restore attempt after write failure | `AdminController::saveConfiguration()` |
 | Partial replacement failure | Backup rename and restore attempt after write failure | `AdminController::saveConfiguration()` |

+ 2 - 2
specs/integrations/index.md

@@ -4,8 +4,8 @@ Read this when a change crosses the browser, database, or configuration filesyst
 
 
 | Integration | Direction | Protocol | Implementing files | Documentation |
 | Integration | Direction | Protocol | Implementing files | Documentation |
 |---|---|---|---|---|
 |---|---|---|---|---|
-| Browser JSON API | Bidirectional | Same-origin HTTPS/HTTP + JSON + PHP session cookie | `ui/app/src/api/client.js`, `src/OpenMind/Api/` | [browser-api.md](browser-api.md) |
+| Browser JSON API | Bidirectional | Same-origin HTTPS/HTTP + JSON + PHP session cookie | `ui/app/src/api/client.js`, `src/Core/Api/` | [browser-api.md](browser-api.md) |
 | MySQL persistence | Outbound | PDO/MySQL via F3 `DB\SQL` | `System.php`, `User.php`, `Notifications.php`, API controllers | [mysql.md](mysql.md) |
 | MySQL persistence | Outbound | PDO/MySQL via F3 `DB\SQL` | `System.php`, `User.php`, `Notifications.php`, API controllers | [mysql.md](mysql.md) |
-| Encoded configuration files | Bidirectional | Local filesystem, base64+gzip INI payload | `index.php`, `OMUtils.php`, `AdminController.php`, generator script | [encrypted-config.md](encrypted-config.md) |
+| Encoded configuration files | Bidirectional | Local filesystem, base64+gzip INI payload | `index.php`, `RuntimeServices.php`, `AdminController.php`, generator script | [encrypted-config.md](encrypted-config.md) |
 
 
 Each integration has integrity or authorization controls that must not be weakened. See the linked trust-boundary tables.
 Each integration has integrity or authorization controls that must not be weakened. See the linked trust-boundary tables.

+ 6 - 6
specs/integrations/mysql.md

@@ -6,11 +6,11 @@ Read this when changing MySQL connections, mappers, transactions, or persistence
 
 
 | File | Key symbols |
 | File | Key symbols |
 |---|---|
 |---|---|
-| `src/OpenMind/System/System.php` | F3 `DB\SQL` connection and PDO options |
-| `src/OpenMind/System/User.php` | `users` mapper, role serialization, password hash generation |
-| `src/OpenMind/System/Notifications.php` | `notifications` mapper and table-wide clear operation |
-| `src/OpenMind/Api/UserController.php` | Account CRUD, row locks, transactions, duplicate detection |
-| `omlink.sql` | Schema, unique index, and sample data |
+| `src/Core/System/System.php` | F3 `DB\SQL` connection and PDO options |
+| `src/Core/System/User.php` | `users` mapper, role serialization, password hash generation |
+| `src/Core/System/Notifications.php` | `notifications` mapper and table-wide clear operation |
+| `src/Core/Api/UserController.php` | Account CRUD, row locks, transactions, duplicate detection |
+| `phpengine.sql` | Schema, unique index, and sample data |
 
 
 ## Flow
 ## Flow
 1. F3 globals provide DSN and database credentials to `System`.
 1. F3 globals provide DSN and database credentials to `System`.
@@ -24,7 +24,7 @@ Read this when changing MySQL connections, mappers, transactions, or persistence
 |---|---|---|
 |---|---|---|
 | Connection secrets | Values originate in runtime configuration, not request input | `cfg/config.bin` loaded by `index.php` |
 | Connection secrets | Values originate in runtime configuration, not request input | `cfg/config.bin` loaded by `index.php` |
 | Request values in queries | Mapper predicates use placeholders for username/ID lookups | `User`, `AuthController`, `UserController` |
 | Request values in queries | Mapper predicates use placeholders for username/ID lookups | `User`, `AuthController`, `UserController` |
-| Duplicate identities | Application precheck plus `uq_users_username` database constraint | `UserController`, `omlink.sql` |
+| Duplicate identities | Application precheck plus `uq_users_username` database constraint | `UserController`, `phpengine.sql` |
 | Final administrator race | Transaction and `SELECT id FROM users FOR UPDATE` serialize checks and mutations | `UserController` |
 | Final administrator race | Transaction and `SELECT id FROM users FOR UPDATE` serialize checks and mutations | `UserController` |
 | Role deserialization | `unserialize(..., ['allowed_classes' => false])` prevents object instantiation | `User::__construct()` |
 | Role deserialization | `unserialize(..., ['allowed_classes' => false])` prevents object instantiation | `User::__construct()` |
 | Table-wide notification deletion | Only authenticated, CSRF-protected notification API path reaches `emptyAll()` | `NotificationController::delete()` |
 | Table-wide notification deletion | Only authenticated, CSRF-protected notification API path reaches `emptyAll()` | `NotificationController::delete()` |

+ 10 - 10
specs/module-index.md

@@ -7,17 +7,17 @@ Tier 1 requires full context loading. Tier 2 is customized business logic. Tier
 | Module | Path | Tier | Summary | Spec link |
 | Module | Path | Tier | Summary | Spec link |
 |---|---|---:|---|---|
 |---|---|---:|---|---|
 | Bootstrap | `index.php` | 1 | Starts F3, loads encrypted runtime configuration, and boots plugins. | [file structure](file-structure.md) |
 | Bootstrap | `index.php` | 1 | Starts F3, loads encrypted runtime configuration, and boots plugins. | [file structure](file-structure.md) |
-| Plugin composition | `src/OpenMind/System/ApplicationComposition.php`, `PluginStrategy.php` | 1 | Discovers initializer classes by directory convention and maintains menu/route registration primitives. | [add plugin rule](rules/add-plugin.md) |
-| System services | `src/OpenMind/System/System.php`, `OMUtils.php`, `ErrorHandlers.php` | 1 | Database/cache initialization, config codec, framework error responses, and legacy utilities. | [integrations](integrations/index.md) |
-| Identity and user management | `src/OpenMind/System/User.php`, `Role.php`, `src/OpenMind/Api/AuthController.php`, `UserController.php`, `Controller.php` | 1 | Session login, CSRF, numeric role assignments, account persistence, and user-mutation invariants. | [identity spec](identity/spec.md) |
-| Role catalog | `src/OpenMind/System/Role.php`, `src/OpenMind/Api/RoleController.php` | 1 | Persistent role metadata and assignment-safe administrator CRUD; IDs are authorization keys. | [role and inventory spec](role-and-inventory.md) |
-| Inventory demo persistence and API | `src/OpenMind/System/InventoryItem.php`, `src/OpenMind/Api/InventoryController.php` | 1 | Role-ID-2 persistent inventory demo CRUD with validation, safe DTOs, CSRF, and duplicate-SKU handling. | [role and inventory spec](role-and-inventory.md) |
-| API registry | `src/OpenMind/Api/Api.php` | 2 | Maps all versioned JSON routes, including role catalog and inventory endpoints, to controllers. | [API routes](api-routes.md) |
-| Configuration administration | `src/OpenMind/Api/AdminController.php`, `cfg/` | 1 | Reads, encodes, backs up, and replaces runtime configuration; local plaintext config is copied from the tracked template. | [configuration spec](configuration/spec.md) |
-| Navigation | `src/OpenMind/Api/NavigationController.php`, `src/OpenMind/Admin/Admin.php`, `src/Modules/Blank/Blank.php` | 2 | Builds the role-ID-filtered and ordered application menu, including Inventory Monitor. | [API routes](api-routes.md) |
-| Notifications | `src/OpenMind/System/Notifications.php`, `src/OpenMind/Api/NotificationController.php` | 2 | Persists, groups, polls, and deletes notification records. | [API routes](api-routes.md) |
+| Plugin composition | `src/Core/System/ApplicationComposition.php`, `PluginStrategy.php` | 1 | Discovers initializer classes by directory convention and maintains menu/route registration primitives. | [add plugin rule](rules/add-plugin.md) |
+| System services | `src/Core/System/System.php`, `RuntimeServices.php`, `ErrorHandlers.php` | 1 | Database/cache initialization, config codec, framework error responses, and legacy utilities. | [integrations](integrations/index.md) |
+| Identity and user management | `src/Core/System/User.php`, `Role.php`, `src/Core/Api/AuthController.php`, `UserController.php`, `Controller.php` | 1 | Session login, CSRF, numeric role assignments, account persistence, and user-mutation invariants. | [identity spec](identity/spec.md) |
+| Role catalog | `src/Core/System/Role.php`, `src/Core/Api/RoleController.php` | 1 | Persistent role metadata and assignment-safe administrator CRUD; IDs are authorization keys. | [role and inventory spec](role-and-inventory.md) |
+| Inventory demo persistence and API | `src/Core/System/InventoryItem.php`, `src/Core/Api/InventoryController.php` | 1 | Role-ID-2 persistent inventory demo CRUD with validation, safe DTOs, CSRF, and duplicate-SKU handling. | [role and inventory spec](role-and-inventory.md) |
+| API registry | `src/Core/Api/Api.php` | 2 | Maps all versioned JSON routes, including role catalog and inventory endpoints, to controllers. | [API routes](api-routes.md) |
+| Configuration administration | `src/Core/Api/AdminController.php`, `cfg/` | 1 | Reads, encodes, backs up, and replaces runtime configuration; local plaintext config is copied from the tracked template. | [configuration spec](configuration/spec.md) |
+| Navigation | `src/Core/Api/NavigationController.php`, `src/Core/Admin/Admin.php`, `src/Modules/Blank/Blank.php` | 2 | Builds the role-ID-filtered and ordered application menu, including Inventory Monitor. | [API routes](api-routes.md) |
+| Notifications | `src/Core/System/Notifications.php`, `src/Core/Api/NotificationController.php` | 2 | Persists, groups, polls, and deletes notification records. | [API routes](api-routes.md) |
 | Inventory Monitor demo plugin | `src/Modules/Blank/Blank.php` | 4 | Retained demo plugin initializer that publishes the ID-2 Inventory Monitor navigation entry without volatile role registration. | [role and inventory spec](role-and-inventory.md) |
 | Inventory Monitor demo plugin | `src/Modules/Blank/Blank.php` | 4 | Retained demo plugin initializer that publishes the ID-2 Inventory Monitor navigation entry without volatile role registration. | [role and inventory spec](role-and-inventory.md) |
-| Database schema and migration | `omlink.sql`, `scripts/migrate-role-catalog.php` | 1 | MySQL role/inventory schema, constraints, seed records, and explicit legacy-role migration. | [database conventions](conventions-database.md) |
+| Database schema and migration | `phpengine.sql`, `scripts/migrate-role-catalog.php` | 1 | MySQL role/inventory schema, constraints, seed records, and explicit legacy-role migration. | [database conventions](conventions-database.md) |
 | React boot and routes | `ui/app/src/main.jsx`, `App.jsx`, `routes.jsx` | 2 | React/MUI setup, session bootstrap, guarded routes, and page selection. | [frontend conventions](conventions-frontend.md) |
 | React boot and routes | `ui/app/src/main.jsx`, `App.jsx`, `routes.jsx` | 2 | React/MUI setup, session bootstrap, guarded routes, and page selection. | [frontend conventions](conventions-frontend.md) |
 | Frontend API client | `ui/app/src/api/client.js` | 1 | Same-origin URL resolution, cookies, JSON errors, and in-memory CSRF handling. | [browser API integration](integrations/browser-api.md) |
 | Frontend API client | `ui/app/src/api/client.js` | 1 | Same-origin URL resolution, cookies, JSON errors, and in-memory CSRF handling. | [browser API integration](integrations/browser-api.md) |
 | Admin React features | `ui/app/src/features/admin/` | 2 | Configuration, user-management, and role-catalog UI. | [API routes](api-routes.md) |
 | Admin React features | `ui/app/src/features/admin/` | 2 | Configuration, user-management, and role-catalog UI. | [API routes](api-routes.md) |

+ 1 - 1
specs/role-and-inventory.md

@@ -4,7 +4,7 @@ Read this when changing persistent roles, user role assignments, inventory items
 
 
 ## Purpose
 ## Purpose
 
 
-OM-Link uses a persistent role catalog for authorization and provides a persistent Inventory Monitor demo. Role IDs are stable authorization keys; display labels are editable metadata and must not be used as permission checks.
+PHPEngine uses a persistent role catalog for authorization and provides a persistent Inventory Monitor demo. Role IDs are stable authorization keys; display labels are editable metadata and must not be used as permission checks.
 
 
 ## Role Catalog
 ## Role Catalog
 
 

+ 1 - 1
specs/rules/add-api-endpoint.md

@@ -3,7 +3,7 @@ Read this when adding or changing a versioned JSON API endpoint and its React ca
 # Add or Change an API Endpoint
 # Add or Change an API Endpoint
 
 
 1. **Choose the authorization contract.** Classify the route as public, authenticated, role-protected, and/or state-changing. See [identity spec](../identity/spec.md).
 1. **Choose the authorization contract.** Classify the route as public, authenticated, role-protected, and/or state-changing. See [identity spec](../identity/spec.md).
-2. **Register the route** in `src/OpenMind/Api/Api.php` using `AddRoute()` and the `/api/v1` path convention.
+2. **Register the route** in `src/Core/Api/Api.php` using `AddRoute()` and the `/api/v1` path convention.
    ```php
    ```php
    $this->AddRoute('GET /api/v1/example', __NAMESPACE__ . '\\ExampleController->index');
    $this->AddRoute('GET /api/v1/example', __NAMESPACE__ . '\\ExampleController->index');
    ```
    ```

+ 2 - 2
specs/rules/add-plugin.md

@@ -6,7 +6,7 @@ Read this when adding or changing a discoverable PHP plugin, permission, or menu
    ```php
    ```php
    namespace Modules\Example;
    namespace Modules\Example;
 
 
-   use OpenMind\System\PluginStrategy;
+   use Core\System\PluginStrategy;
 
 
    class Example extends PluginStrategy
    class Example extends PluginStrategy
    {
    {
@@ -21,7 +21,7 @@ Read this when adding or changing a discoverable PHP plugin, permission, or menu
    ```php
    ```php
    $this->AddMenuItem('Inventory Monitor', ['url' => 'inventory', 'permissionId' => 2]);
    $this->AddMenuItem('Inventory Monitor', ['url' => 'inventory', 'permissionId' => 2]);
    ```
    ```
-5. **For API behavior, add routes in `OpenMind\Api\Api`, not in the new plugin.** Follow [add-api-endpoint.md](add-api-endpoint.md).
+5. **For API behavior, add routes in `Core\Api\Api`, not in the new plugin.** Follow [add-api-endpoint.md](add-api-endpoint.md).
 6. **For an interactive page, add a matching React route and ensure the navigation URL resolves under the application base path.** The implemented Inventory Monitor page uses `/inventory`; frontend route guards are not a substitute for API authorization.
 6. **For an interactive page, add a matching React route and ensure the navigation URL resolves under the application base path.** The implemented Inventory Monitor page uses `/inventory`; frontend route guards are not a substitute for API authorization.
 7. **Update documentation.** Add the subsystem to [module index](../module-index.md); create a domain spec only if it introduces a non-obvious data model and business contracts.
 7. **Update documentation.** Add the subsystem to [module index](../module-index.md); create a domain spec only if it introduces a non-obvious data model and business contracts.
 
 

+ 3 - 3
src/OpenMind/Admin/Admin.php → src/Core/Admin/Admin.php

@@ -5,9 +5,9 @@
  * @time 15:17
  * @time 15:17
  */
  */
 
 
-namespace OpenMind\Admin;
+namespace Core\Admin;
 
 
-use OpenMind\System\PluginStrategy;
+use Core\System\PluginStrategy;
 
 
 class Admin extends PluginStrategy
 class Admin extends PluginStrategy
 {
 {
@@ -26,7 +26,7 @@ class Admin extends PluginStrategy
 
 
 		// System Settings
 		// System Settings
 		$this->AddMenuItem('System Settings', ['mainMenu' => 'adminMainMenu', 'mdiClass' => 'settings', 'permissionId' => self::ADMIN_ROLE_ID]);
 		$this->AddMenuItem('System Settings', ['mainMenu' => 'adminMainMenu', 'mdiClass' => 'settings', 'permissionId' => self::ADMIN_ROLE_ID]);
-		$this->AddMenuItem('OM-Link Settings', ['mainMenu' => 'System Settings', 'url' => 'admin/omlsettings', 'permissionId' => self::ADMIN_ROLE_ID]);
+		$this->AddMenuItem('PHPEngine Settings', ['mainMenu' => 'System Settings', 'url' => 'admin/phpengine-settings', 'permissionId' => self::ADMIN_ROLE_ID]);
 		$this->AddMenuItem('Users', ['mainMenu' => 'System Settings', 'url' => 'admin/users', 'permissionId' => self::ADMIN_ROLE_ID]);
 		$this->AddMenuItem('Users', ['mainMenu' => 'System Settings', 'url' => 'admin/users', 'permissionId' => self::ADMIN_ROLE_ID]);
 		$this->AddMenuItem('Roles', ['mainMenu' => 'System Settings', 'url' => 'admin/roles', 'permissionId' => self::ADMIN_ROLE_ID]);
 		$this->AddMenuItem('Roles', ['mainMenu' => 'System Settings', 'url' => 'admin/roles', 'permissionId' => self::ADMIN_ROLE_ID]);
 	}
 	}

+ 4 - 4
src/OpenMind/Api/AdminController.php → src/Core/Api/AdminController.php

@@ -2,10 +2,10 @@
 
 
 declare(strict_types=1);
 declare(strict_types=1);
 
 
-namespace OpenMind\Api;
+namespace Core\Api;
 
 
 use Base;
 use Base;
-use OpenMind\System\OMUtils;
+use Core\System\RuntimeServices;
 use Throwable;
 use Throwable;
 
 
 class AdminController extends Controller
 class AdminController extends Controller
@@ -81,12 +81,12 @@ class AdminController extends Controller
 	/**
 	/**
 	 * Reads and decrypts the application configuration.
 	 * Reads and decrypts the application configuration.
 	 *
 	 *
-	 * @param OMUtils $frameworkUtils Configuration utility service.
+	 * @param RuntimeServices $frameworkUtils Configuration utility service.
 	 * @return string Decrypted configuration text.
 	 * @return string Decrypted configuration text.
 	 * @side-effects Reads the encrypted configuration file.
 	 * @side-effects Reads the encrypted configuration file.
 	 * @throws Throwable When the configuration file cannot be read or decrypted.
 	 * @throws Throwable When the configuration file cannot be read or decrypted.
 	 */
 	 */
-	private function readConfiguration(OMUtils $frameworkUtils): string
+	private function readConfiguration(RuntimeServices $frameworkUtils): string
 	{
 	{
 		$config = file_get_contents(self::CONFIGURATION_FILE);
 		$config = file_get_contents(self::CONFIGURATION_FILE);
 		if ($config === false) {
 		if ($config === false) {

+ 2 - 2
src/OpenMind/Api/Api.php → src/Core/Api/Api.php

@@ -2,9 +2,9 @@
 
 
 declare(strict_types=1);
 declare(strict_types=1);
 
 
-namespace OpenMind\Api;
+namespace Core\Api;
 
 
-use OpenMind\System\PluginStrategy;
+use Core\System\PluginStrategy;
 
 
 class Api extends PluginStrategy
 class Api extends PluginStrategy
 {
 {

+ 2 - 2
src/OpenMind/Api/AuthController.php → src/Core/Api/AuthController.php

@@ -2,10 +2,10 @@
 
 
 declare(strict_types=1);
 declare(strict_types=1);
 
 
-namespace OpenMind\Api;
+namespace Core\Api;
 
 
 use Base;
 use Base;
-use OpenMind\System\User;
+use Core\System\User;
 
 
 class AuthController extends Controller
 class AuthController extends Controller
 {
 {

+ 2 - 2
src/OpenMind/Api/Controller.php → src/Core/Api/Controller.php

@@ -2,11 +2,11 @@
 
 
 declare(strict_types=1);
 declare(strict_types=1);
 
 
-namespace OpenMind\Api;
+namespace Core\Api;
 
 
 use Base;
 use Base;
 use JsonException;
 use JsonException;
-use OpenMind\System\User;
+use Core\System\User;
 
 
 class Controller
 class Controller
 {
 {

+ 2 - 2
src/OpenMind/Api/InventoryController.php → src/Core/Api/InventoryController.php

@@ -2,9 +2,9 @@
 
 
 declare(strict_types=1);
 declare(strict_types=1);
 
 
-namespace OpenMind\Api;
+namespace Core\Api;
 
 
-use OpenMind\System\InventoryItem;
+use Core\System\InventoryItem;
 use PDOException;
 use PDOException;
 use Throwable;
 use Throwable;
 
 

+ 1 - 1
src/OpenMind/Api/NavigationController.php → src/Core/Api/NavigationController.php

@@ -2,7 +2,7 @@
 
 
 declare(strict_types=1);
 declare(strict_types=1);
 
 
-namespace OpenMind\Api;
+namespace Core\Api;
 
 
 use Base;
 use Base;
 
 

+ 2 - 2
src/OpenMind/Api/NotificationController.php → src/Core/Api/NotificationController.php

@@ -2,10 +2,10 @@
 
 
 declare(strict_types=1);
 declare(strict_types=1);
 
 
-namespace OpenMind\Api;
+namespace Core\Api;
 
 
 use Base;
 use Base;
-use OpenMind\System\Notifications;
+use Core\System\Notifications;
 
 
 class NotificationController extends Controller
 class NotificationController extends Controller
 {
 {

+ 1 - 1
src/OpenMind/Api/RoleController.php → src/Core/Api/RoleController.php

@@ -2,7 +2,7 @@
 
 
 declare(strict_types=1);
 declare(strict_types=1);
 
 
-namespace OpenMind\Api;
+namespace Core\Api;
 
 
 use Base;
 use Base;
 use DB\SQL;
 use DB\SQL;

+ 3 - 3
src/OpenMind/Api/UserController.php → src/Core/Api/UserController.php

@@ -2,12 +2,12 @@
 
 
 declare(strict_types=1);
 declare(strict_types=1);
 
 
-namespace OpenMind\Api;
+namespace Core\Api;
 
 
 use Base;
 use Base;
 use DB\SQL;
 use DB\SQL;
-use OpenMind\System\Role;
-use OpenMind\System\User;
+use Core\System\Role;
+use Core\System\User;
 use Throwable;
 use Throwable;
 
 
 class UserController extends Controller
 class UserController extends Controller

+ 1 - 1
src/OpenMind/System/ApplicationComposition.php → src/Core/System/ApplicationComposition.php

@@ -2,7 +2,7 @@
 
 
 declare(strict_types=1);
 declare(strict_types=1);
 
 
-namespace OpenMind\System;
+namespace Core\System;
 
 
 use FilesystemIterator;
 use FilesystemIterator;
 use RecursiveDirectoryIterator;
 use RecursiveDirectoryIterator;

+ 2 - 2
src/OpenMind/System/ErrorHandlers.php → src/Core/System/ErrorHandlers.php

@@ -5,7 +5,7 @@
  * @time 16:14
  * @time 16:14
  */
  */
 
 
-namespace OpenMind\System;
+namespace Core\System;
 
 
 use Base;
 use Base;
 
 
@@ -104,7 +104,7 @@ class ErrorHandlers
 			. ($context['function'] ?? '') . ':';
 			. ($context['function'] ?? '') . ':';
 		$sanitizedMessage = str_replace(["\r", "\n"], '', $message);
 		$sanitizedMessage = str_replace(["\r", "\n"], '', $message);
 
 
-		OMUtils::getInstance()->getLogger()->write(
+		RuntimeServices::getInstance()->getLogger()->write(
 			"{$prefix} {$sanitizedMessage}",
 			"{$prefix} {$sanitizedMessage}",
 			self::LOG_DATE_FORMAT,
 			self::LOG_DATE_FORMAT,
 		);
 		);

+ 1 - 1
src/OpenMind/System/InventoryItem.php → src/Core/System/InventoryItem.php

@@ -2,7 +2,7 @@
 
 
 declare(strict_types=1);
 declare(strict_types=1);
 
 
-namespace OpenMind\System;
+namespace Core\System;
 
 
 use DB\SQL\Mapper;
 use DB\SQL\Mapper;
 
 

+ 1 - 1
src/OpenMind/System/Notifications.php → src/Core/System/Notifications.php

@@ -1,6 +1,6 @@
 <?php
 <?php
 
 
-namespace OpenMind\System;
+namespace Core\System;
 
 
 use DB\SQL\Mapper;
 use DB\SQL\Mapper;
 
 

+ 3 - 3
src/OpenMind/System/PluginStrategy.php → src/Core/System/PluginStrategy.php

@@ -1,6 +1,6 @@
 <?php
 <?php
 
 
-namespace OpenMind\System;
+namespace Core\System;
 
 
 use Exception;
 use Exception;
 
 
@@ -8,7 +8,7 @@ use Exception;
  * Interface IPluginStrategy
  * Interface IPluginStrategy
  * Main interface for plugin system, it use Strategy Pattern.
  * Main interface for plugin system, it use Strategy Pattern.
  *
  *
- * @package OpenMind\System
+ * @package Core\System
  */
  */
 interface IPluginStrategy
 interface IPluginStrategy
 {
 {
@@ -135,7 +135,7 @@ class PluginStrategy implements IPluginStrategy
 	 * Add menu to application for the plugin, if another menu with same $menuName is present, the last added has priority on other.
 	 * Add menu to application for the plugin, if another menu with same $menuName is present, the last added has priority on other.
 	 *
 	 *
 	 * @param string $menuName Name of menu to add
 	 * @param string $menuName Name of menu to add
-	 * @param array $options the struct of OMLink Menu
+	 * @param array $options the PHPEngine menu structure
 	 *
 	 *
 	 * <br/><br/>
 	 * <br/><br/>
 	 * [<br/>
 	 * [<br/>

+ 1 - 1
src/OpenMind/System/Role.php → src/Core/System/Role.php

@@ -2,7 +2,7 @@
 
 
 declare(strict_types=1);
 declare(strict_types=1);
 
 
-namespace OpenMind\System;
+namespace Core\System;
 
 
 use DB\SQL\Mapper;
 use DB\SQL\Mapper;
 
 

+ 6 - 6
src/OpenMind/System/OMUtils.php → src/Core/System/RuntimeServices.php

@@ -5,14 +5,14 @@
  * @time 11:11
  * @time 11:11
  */
  */
 
 
-namespace OpenMind\System;
+namespace Core\System;
 
 
 use Exception;
 use Exception;
 use Log;
 use Log;
 use RuntimeException;
 use RuntimeException;
 use Template;
 use Template;
 
 
-class OMUtils
+class RuntimeServices
 {
 {
 	private const DEFAULT_SOCKET_TIMEOUT_SECONDS = 5;
 	private const DEFAULT_SOCKET_TIMEOUT_SECONDS = 5;
 
 
@@ -26,9 +26,9 @@ class OMUtils
 	/**
 	/**
 	 * The Singleton Instance
 	 * The Singleton Instance
 	 *
 	 *
-	 * @return null|OMUtils
+	 * @return null|RuntimeServices
 	 */
 	 */
-	public static function getInstance(): ?OMUtils
+	public static function getInstance(): ?RuntimeServices
 	{
 	{
 		static $instance = null;
 		static $instance = null;
 		if ($instance === null) {
 		if ($instance === null) {
@@ -87,7 +87,7 @@ class OMUtils
 	}
 	}
 
 
 	/**
 	/**
-	 * Decrypt $data using OM-Link algorithm
+	 * Decrypt $data using PHPEngine algorithm
 	 *
 	 *
 	 * @param $binaryData
 	 * @param $binaryData
 	 * @return string
 	 * @return string
@@ -98,7 +98,7 @@ class OMUtils
 	}
 	}
 
 
 	/**
 	/**
-	 * Encrypt $data using OM-Link algorithm
+	 * Encrypt $data using PHPEngine algorithm
 	 *
 	 *
 	 * @param $data
 	 * @param $data
 	 * @return string
 	 * @return string

+ 4 - 4
src/OpenMind/System/System.php → src/Core/System/System.php

@@ -1,6 +1,6 @@
 <?php
 <?php
 
 
-namespace OpenMind\System;
+namespace Core\System;
 
 
 use Base;
 use Base;
 use Cache;
 use Cache;
@@ -19,7 +19,7 @@ use ReflectionException;
  * >$enum->START<br/>
  * >$enum->START<br/>
  * $enum->STARTToString (return 'START')<br/>
  * $enum->STARTToString (return 'START')<br/>
  *
  *
- * @package OpenMind\System
+ * @package Core\System
  */
  */
 abstract class Enum
 abstract class Enum
 {
 {
@@ -103,7 +103,7 @@ class System extends PluginStrategy
 	private $cache;
 	private $cache;
 
 
 	/**
 	/**
-	 * The shared cache, cache file will be created with prefix 'OMLINK_SHARED_CACHE.xxxxxx' where 'xxxxxx' is the variable name.
+	 * The shared cache file is created with prefix 'PHPENGINE_SHARED_CACHE.xxxxxx', where 'xxxxxx' is the variable name.
 	 * Every session will be server related
 	 * Every session will be server related
 	 *
 	 *
 	 * @var Cache
 	 * @var Cache
@@ -126,7 +126,7 @@ class System extends PluginStrategy
 		$this->cache = Cache::instance();
 		$this->cache = Cache::instance();
 
 
 		$this->sharedCache = new Cache();
 		$this->sharedCache = new Cache();
-		$this->sharedCache->load($f3->get('CACHE'), 'OMLINK_SHARED_CACHE');
+		$this->sharedCache->load($f3->get('CACHE'), 'PHPENGINE_SHARED_CACHE');
 
 
 		// Configure the database connection.
 		// Configure the database connection.
 		try {
 		try {

+ 2 - 2
src/OpenMind/System/User.php → src/Core/System/User.php

@@ -6,7 +6,7 @@
  * Time: 20:01
  * Time: 20:01
  */
  */
 
 
-namespace OpenMind\System;
+namespace Core\System;
 
 
 use DB\SQL\Mapper;
 use DB\SQL\Mapper;
 
 
@@ -17,7 +17,7 @@ use DB\SQL\Mapper;
  * @property string $username
  * @property string $username
  * @property string $saltedpassword
  * @property string $saltedpassword
  * @property string $roles
  * @property string $roles
- * @package OpenMind\System
+ * @package Core\System
  */
  */
 class User extends Mapper
 class User extends Mapper
 {
 {

+ 1 - 1
src/OpenMind/System/UserRoles.php → src/Core/System/UserRoles.php

@@ -1,6 +1,6 @@
 <?php
 <?php
 
 
-namespace OpenMind\System;
+namespace Core\System;
 
 
 /**
 /**
  * Global user roles: a volatile list of roles present throughout the application.
  * Global user roles: a volatile list of roles present throughout the application.

+ 1 - 1
src/Modules/Blank/Blank.php

@@ -8,7 +8,7 @@
 
 
 namespace Modules\Blank;
 namespace Modules\Blank;
 
 
-use OpenMind\System\PluginStrategy;
+use Core\System\PluginStrategy;
 
 
 class Blank extends PluginStrategy
 class Blank extends PluginStrategy
 {
 {

+ 1 - 1
ui/app/index.html

@@ -4,7 +4,7 @@
     <meta charset="UTF-8" />
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <link rel="icon" href="/phengine/assets/images/favicon.ico" />
     <link rel="icon" href="/phengine/assets/images/favicon.ico" />
-    <title>OM-Link</title>
+    <title>PHPEngine</title>
   </head>
   </head>
   <body>
   <body>
     <div id="root"></div>
     <div id="root"></div>

+ 1 - 1
ui/app/src/features/admin/ConfigPage.jsx

@@ -163,7 +163,7 @@ function BoxHeader() {
 				Administration
 				Administration
 			</Typography>
 			</Typography>
 			<Typography variant="h3" component="h1">
 			<Typography variant="h3" component="h1">
-				OM-Link Settings
+				PHPEngine Settings
 			</Typography>
 			</Typography>
 			<Typography color="text.secondary">
 			<Typography color="text.secondary">
 				Edit the application configuration text. Changes are encrypted before they are stored.
 				Edit the application configuration text. Changes are encrypted before they are stored.

+ 2 - 2
ui/app/src/features/auth/LoginPage.jsx

@@ -46,12 +46,12 @@ function LoginPage({ onAuthenticated }) {
 							component="img"
 							component="img"
 							className="mx-auto mb-4 h-20 object-contain"
 							className="mx-auto mb-4 h-20 object-contain"
 							src={`${APPLICATION_BASE_PATH}/assets/images/logo.png`}
 							src={`${APPLICATION_BASE_PATH}/assets/images/logo.png`}
-							alt="OM-Link"
+							alt="PHPEngine"
 						/>
 						/>
 						<Typography variant="h4" component="h1">
 						<Typography variant="h4" component="h1">
 							Sign in
 							Sign in
 						</Typography>
 						</Typography>
-						<Typography color="text.secondary">Access the OM-Link application</Typography>
+						<Typography color="text.secondary">Access the PHPEngine application</Typography>
 					</Box>
 					</Box>
 					{errorMessage && <Alert severity="error">{errorMessage}</Alert>}
 					{errorMessage && <Alert severity="error">{errorMessage}</Alert>}
 					<TextField
 					<TextField

+ 1 - 1
ui/app/src/features/home/HomePage.jsx

@@ -15,7 +15,7 @@ function HomePage({ session }) {
 			<Paper elevation={0} className="rounded-2xl border border-slate-200 p-6 sm:p-8">
 			<Paper elevation={0} className="rounded-2xl border border-slate-200 p-6 sm:p-8">
 				<Stack spacing={2}>
 				<Stack spacing={2}>
 					<Typography variant="overline" color="primary">
 					<Typography variant="overline" color="primary">
-						OM-Link workspace
+						PHPEngine workspace
 					</Typography>
 					</Typography>
 					<Typography variant="h3" component="h1">
 					<Typography variant="h3" component="h1">
 						Welcome, {username}
 						Welcome, {username}

+ 4 - 4
ui/app/src/features/shell/AppShell.jsx

@@ -35,7 +35,7 @@ const NAVIGATION_ICONS = {
 	Demo: DashboardOutlinedIcon,
 	Demo: DashboardOutlinedIcon,
 	Admin: AdminPanelSettingsOutlinedIcon,
 	Admin: AdminPanelSettingsOutlinedIcon,
 	Roles: SecurityOutlinedIcon,
 	Roles: SecurityOutlinedIcon,
-	'OM-Link Settings': TuneOutlinedIcon,
+	'PHPEngine Settings': TuneOutlinedIcon,
 	Users: PeopleOutlinedIcon,
 	Users: PeopleOutlinedIcon,
 	'Inventory Monitor': Inventory2OutlinedIcon,
 	'Inventory Monitor': Inventory2OutlinedIcon,
 };
 };
@@ -203,11 +203,11 @@ function AppShell({ session, onNavigate, onLogout, children }) {
 						letterSpacing: '-0.06em',
 						letterSpacing: '-0.06em',
 					}}
 					}}
 				>
 				>
-					OM
+					PHP
 				</Box>
 				</Box>
 				<Box>
 				<Box>
 					<Typography sx={{ color: 'navigation.contrastText', fontSize: '0.9375rem', fontWeight: 700 }}>
 					<Typography sx={{ color: 'navigation.contrastText', fontSize: '0.9375rem', fontWeight: 700 }}>
-						OM-Link
+						PHPEngine
 					</Typography>
 					</Typography>
 					<Typography variant="overline" sx={{ color: 'navigation.muted', display: 'block', lineHeight: 1.3 }}>
 					<Typography variant="overline" sx={{ color: 'navigation.muted', display: 'block', lineHeight: 1.3 }}>
 						Console
 						Console
@@ -277,7 +277,7 @@ function AppShell({ session, onNavigate, onLogout, children }) {
 							{headerLabel}
 							{headerLabel}
 						</Typography>
 						</Typography>
 						<Typography variant="h6" component="div" noWrap>
 						<Typography variant="h6" component="div" noWrap>
-							{isMobile ? 'OM-Link' : activeItem?.name ?? 'OM-Link'}
+							{isMobile ? 'PHPEngine' : activeItem?.name ?? 'PHPEngine'}
 						</Typography>
 						</Typography>
 					</Box>
 					</Box>
 					<NotificationMenu onNavigate={onNavigate} />
 					<NotificationMenu onNavigate={onNavigate} />

+ 4 - 4
ui/app/src/routes.jsx

@@ -19,7 +19,7 @@ const ROUTES = {
 	'/home': HomePage,
 	'/home': HomePage,
 	'/inventory': DemoPage,
 	'/inventory': DemoPage,
 	'/admin': () => <RoutePlaceholder title="Administration" />,
 	'/admin': () => <RoutePlaceholder title="Administration" />,
-	'/admin/omlsettings': ConfigPage,
+	'/admin/phpengine-settings': ConfigPage,
 	'/admin/users': UsersPage,
 	'/admin/users': UsersPage,
 	'/admin/roles': RolesPage,
 	'/admin/roles': RolesPage,
 };
 };
@@ -37,7 +37,7 @@ function RoutePlaceholder({ title }) {
 			<Paper elevation={0} className="rounded-2xl border border-slate-200 p-6 sm:p-8">
 			<Paper elevation={0} className="rounded-2xl border border-slate-200 p-6 sm:p-8">
 				<Stack spacing={2}>
 				<Stack spacing={2}>
 					<Typography variant="overline" color="primary">
 					<Typography variant="overline" color="primary">
-						OM-Link
+						PHPEngine
 					</Typography>
 					</Typography>
 					<Typography variant="h3" component="h1">
 					<Typography variant="h3" component="h1">
 						{title}
 						{title}
@@ -214,8 +214,8 @@ function AppRoutes() {
 				<Route element={<RoleRoute session={session} roleId={ADMIN_ROLE_ID} />}>
 				<Route element={<RoleRoute session={session} roleId={ADMIN_ROLE_ID} />}>
 					<Route path="/admin" element={<RouteContent path="/admin" session={session} />} />
 					<Route path="/admin" element={<RouteContent path="/admin" session={session} />} />
 					<Route
 					<Route
-						path="/admin/omlsettings"
-						element={<RouteContent path="/admin/omlsettings" session={session} />}
+						path="/admin/phpengine-settings"
+						element={<RouteContent path="/admin/phpengine-settings" session={session} />}
 					/>
 					/>
 					<Route path="/admin/users" element={<RouteContent path="/admin/users" session={session} />} />
 					<Route path="/admin/users" element={<RouteContent path="/admin/users" session={session} />} />
 					<Route path="/admin/roles" element={<RouteContent path="/admin/roles" session={session} />} />
 					<Route path="/admin/roles" element={<RouteContent path="/admin/roles" session={session} />} />