Skip to content

Release v1.0.15 — Edge serves local domains in dev - #25

Merged
hakeemRash merged 53 commits into
mainfrom
master
Jul 17, 2026
Merged

Release v1.0.15 — Edge serves local domains in dev#25
hakeemRash merged 53 commits into
mainfrom
master

Conversation

@hakeemRash

Copy link
Copy Markdown
Contributor

v1.0.15

Fixed

  • Edge now serves local (.local/.test) domains in dev. The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project whose domains are all local rendered an empty vhost (header comment only). Dev mode (hkm … --dev, HKM_DEV=1) now folds local domains into the generated nginx/Apache vhost automatically; production runs keep them out (DNS). Local domains still sync to /etc/hosts in both cases.

Merging this bumps CHANGELOG.md to ## [1.0.15], which triggers auto-release (tag v1.0.15 + all OS bundles).

hakeemRash and others added 30 commits April 28, 2026 14:52
- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.
…ntroduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.
- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.
- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.
…SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.
- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.
…ects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.
- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.
…views, code owners, CI gates, linear history)
…itter / nginx-only / Apache), generates from platform domains + CLI apply
…ver config, sync to /etc/hosts (edge:hosts, --no-hosts)
…ect base_path); document EDGE_* env in template
…blic, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)
…(multi-PHP hosts); show php/fpm binding in edge:status
The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.
@hakeemRash
hakeemRash requested a review from Alshatri as a code owner July 17, 2026 18:52
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@hakeemRash, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 3 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d30048af-f6f3-4308-95c0-096a37d70a7b

📥 Commits

Reviewing files that changed from the base of the PR and between 1c0aeb1 and 18e3bbf.

📒 Files selected for processing (4)
  • CHANGELOG.md
  • plugins/Edge/Infrastructure/SiteCollector.php
  • plugins/Edge/README.md
  • plugins/Edge/config/edge.php
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch master

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hakeemRash
hakeemRash merged commit d9ee5d7 into main Jul 17, 2026
3 checks passed
hakeemRash added a commit that referenced this pull request Jul 21, 2026
…urity hardening (#32)

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* Adopt master→main branch model, automated releases, and main branch protection (#23)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* Release v1.0.13 — Edge plugin + launcher/frontend fixes (#24)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* Release v1.0.15 — Edge serves local domains in dev (#25)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): TLS modes, APP_ENV cache profiles and OpenSwoole runtime (#26)

Adds per-run TLS mode selection (ssl|none|both), an APP_ENV-derived cache
profile, and a full OpenSwoole reverse-proxy runtime alongside PHP-FPM.

Added
- --tls=ssl|none|both (+ --no-ssl) and --ssl-cert/--ssl-key on edge:apply.
- Cache profiles from APP_ENV: local/development disable browser caching
  entirely; production keeps dynamic responses uncached and serves
  fingerprinted assets immutable for a year. Unknown envs fall back to
  DEVELOPMENT, never production.
- Environment flags --local/--dev, --development/-d, --production (scoped to
  the edge commands, not launcher-global).
- OpenSwoole runtime via proj.json "edge": { "runtime": "openswoole" }:
  dedicated upstream (least_conn, max_fails/fail_timeout, keepalive pool,
  multi-worker via "ports"), $connection_upgrade map, /ws WebSocket location,
  optional /health, and CF-Connecting-IP forwarded upstream.
- edge:service command generating the systemd unit (or supervisor block) that
  supervises a project's OpenSwoole server.
- Brotli/gzip resolved per server from that server's own capability, HSTS on
  TLS modes only, and an opt-in http-context prelude (log_format, rate-limit
  zones, Cloudflare real-IP ranges).

Changed
- The cache profile is no longer inferred from the kernel mode; nothing in
  vhost generation reads HKM_DEV, so kernel selection and app environment are
  independent.
- All generated paths derive from the project root, and the OpenSwoole entry
  script defaults to app/swoole/index.php — matching what `hkm run --swoole`
  executes.
- Security headers are repeated inside locations that set their own
  add_header, which nginx would otherwise drop.

Fixed
- Generated nginx failed `nginx -t`: `location = /index.php` was nested inside
  `location ~ \.php$`, which nginx rejects.
- `.well-known` was denied by a blanket dotfile rule, breaking ACME/Let's
  Encrypt issuance and renewal.
- Apache vhosts failed configtest: ServerTokens is not valid inside
  <VirtualHost>.
- Apache no longer emits directives for modules that are not loaded; HSTS and
  compression degrade to what the host actually supports.

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

* Release v1.0.17 — hkm discover: find & register projects on disk (#27)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".


* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(cli): plugins recover + discover restores runtime dirs

Add `hkm plugins recover [proj]` (aliases rebuild/reindex) to rebuild a lost or
drifted var/plugin-assets.json from on-disk assets, preserving recorded migration
batches and copying nothing.

Make `hkm discover` restore each project's gitignored runtime folders
(var/logs, var/cache/manifests, var/tmp, var/locks, var/sessions, var/queue,
userdata/storage) so a cloned or moved project can boot; --dry-run reports the
missing count without creating them. Release v1.0.18.

* Release v1.0.18 — plugins recover + discover restores runtime dirs (#28)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".


* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

* feat(cli): plugins recover + discover restores runtime dirs

Add `hkm plugins recover [proj]` (aliases rebuild/reindex) to rebuild a lost or
drifted var/plugin-assets.json from on-disk assets, preserving recorded migration
batches and copying nothing.

Make `hkm discover` restore each project's gitignored runtime folders
(var/logs, var/cache/manifests, var/tmp, var/locks, var/sessions, var/queue,
userdata/storage) so a cloned or moved project can boot; --dry-run reports the
missing count without creating them. Release v1.0.18.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): stream reuse/merge, force strategy, security hardening; release v1.0.19

- Edge reuses & merges an existing nginx SNI stream splitter's map in place
- --nginx-only/--apache-only force a single-server strategy (no fallback)
- nginx-only vhost binds the internal port behind an SNI router (no :443 clash)
- centralised CORS/security header emission; configurable CORS, TLS pinning,
  method guard and deny lists
- CLI parser rejects unknown options (suggestion / interactive autocorrect)
- --tls=both redirect + ACME passthrough; dev short-lived HSTS; prod denies
  source maps; deny rules ordered before static; per-site logs in prod; IPv6
  :443 parity

* test(edge): make nginx -t check portable across nginx versions

Use -g for pid/error_log instead of the newer -e flag (older nginx rejects
-e), and strip 'http2 on;' (>= 1.25.1 only) from the syntax-check body. The
directives remain asserted by the behavioral tests.

* test(edge): make nginx -t syntax check runnable as non-root in CI

Rewrite privileged listen ports to high ports (CI runs non-root and some
nginx builds bind during -t), and assert on 'syntax is ok' / no [emerg]
rather than a strict exit code that a non-fatal alert can flip.

* chore: auto-wire git hooks to strip AI co-author trailers

* chore: drop pulse-engine + module-template modules, patch guzzle, wire git hooks

- Remove alfacode-team/pulse-engine and module-template submodules (composer require, path repos, .gitmodules, lock)
- Bump guzzlehttp/guzzle to ^7.15.1 (clears 4 medium advisories; audit clean)
- Auto-wire core.hooksPath=.githooks via composer post-install/update; broaden commit-msg trailer stripper; document in README

* feat: add issue and pull request templates, contributing guide, security policy, and code of conduct

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>
hakeemRash added a commit that referenced this pull request Jul 21, 2026
* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* Adopt master→main branch model, automated releases, and main branch protection (#23)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* Release v1.0.13 — Edge plugin + launcher/frontend fixes (#24)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* Release v1.0.15 — Edge serves local domains in dev (#25)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): TLS modes, APP_ENV cache profiles and OpenSwoole runtime (#26)

Adds per-run TLS mode selection (ssl|none|both), an APP_ENV-derived cache
profile, and a full OpenSwoole reverse-proxy runtime alongside PHP-FPM.

Added
- --tls=ssl|none|both (+ --no-ssl) and --ssl-cert/--ssl-key on edge:apply.
- Cache profiles from APP_ENV: local/development disable browser caching
  entirely; production keeps dynamic responses uncached and serves
  fingerprinted assets immutable for a year. Unknown envs fall back to
  DEVELOPMENT, never production.
- Environment flags --local/--dev, --development/-d, --production (scoped to
  the edge commands, not launcher-global).
- OpenSwoole runtime via proj.json "edge": { "runtime": "openswoole" }:
  dedicated upstream (least_conn, max_fails/fail_timeout, keepalive pool,
  multi-worker via "ports"), $connection_upgrade map, /ws WebSocket location,
  optional /health, and CF-Connecting-IP forwarded upstream.
- edge:service command generating the systemd unit (or supervisor block) that
  supervises a project's OpenSwoole server.
- Brotli/gzip resolved per server from that server's own capability, HSTS on
  TLS modes only, and an opt-in http-context prelude (log_format, rate-limit
  zones, Cloudflare real-IP ranges).

Changed
- The cache profile is no longer inferred from the kernel mode; nothing in
  vhost generation reads HKM_DEV, so kernel selection and app environment are
  independent.
- All generated paths derive from the project root, and the OpenSwoole entry
  script defaults to app/swoole/index.php — matching what `hkm run --swoole`
  executes.
- Security headers are repeated inside locations that set their own
  add_header, which nginx would otherwise drop.

Fixed
- Generated nginx failed `nginx -t`: `location = /index.php` was nested inside
  `location ~ \.php$`, which nginx rejects.
- `.well-known` was denied by a blanket dotfile rule, breaking ACME/Let's
  Encrypt issuance and renewal.
- Apache vhosts failed configtest: ServerTokens is not valid inside
  <VirtualHost>.
- Apache no longer emits directives for modules that are not loaded; HSTS and
  compression degrade to what the host actually supports.

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

* Release v1.0.17 — hkm discover: find & register projects on disk (#27)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".


* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(cli): plugins recover + discover restores runtime dirs

Add `hkm plugins recover [proj]` (aliases rebuild/reindex) to rebuild a lost or
drifted var/plugin-assets.json from on-disk assets, preserving recorded migration
batches and copying nothing.

Make `hkm discover` restore each project's gitignored runtime folders
(var/logs, var/cache/manifests, var/tmp, var/locks, var/sessions, var/queue,
userdata/storage) so a cloned or moved project can boot; --dry-run reports the
missing count without creating them. Release v1.0.18.

* Release v1.0.18 — plugins recover + discover restores runtime dirs (#28)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".


* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

* feat(cli): plugins recover + discover restores runtime dirs

Add `hkm plugins recover [proj]` (aliases rebuild/reindex) to rebuild a lost or
drifted var/plugin-assets.json from on-disk assets, preserving recorded migration
batches and copying nothing.

Make `hkm discover` restore each project's gitignored runtime folders
(var/logs, var/cache/manifests, var/tmp, var/locks, var/sessions, var/queue,
userdata/storage) so a cloned or moved project can boot; --dry-run reports the
missing count without creating them. Release v1.0.18.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): stream reuse/merge, force strategy, security hardening; release v1.0.19

- Edge reuses & merges an existing nginx SNI stream splitter's map in place
- --nginx-only/--apache-only force a single-server strategy (no fallback)
- nginx-only vhost binds the internal port behind an SNI router (no :443 clash)
- centralised CORS/security header emission; configurable CORS, TLS pinning,
  method guard and deny lists
- CLI parser rejects unknown options (suggestion / interactive autocorrect)
- --tls=both redirect + ACME passthrough; dev short-lived HSTS; prod denies
  source maps; deny rules ordered before static; per-site logs in prod; IPv6
  :443 parity

* test(edge): make nginx -t check portable across nginx versions

Use -g for pid/error_log instead of the newer -e flag (older nginx rejects
-e), and strip 'http2 on;' (>= 1.25.1 only) from the syntax-check body. The
directives remain asserted by the behavioral tests.

* test(edge): make nginx -t syntax check runnable as non-root in CI

Rewrite privileged listen ports to high ports (CI runs non-root and some
nginx builds bind during -t), and assert on 'syntax is ok' / no [emerg]
rather than a strict exit code that a non-fatal alert can flip.

* chore: auto-wire git hooks to strip AI co-author trailers

* chore: drop pulse-engine + module-template modules, patch guzzle, wire git hooks

- Remove alfacode-team/pulse-engine and module-template submodules (composer require, path repos, .gitmodules, lock)
- Bump guzzlehttp/guzzle to ^7.15.1 (clears 4 medium advisories; audit clean)
- Auto-wire core.hooksPath=.githooks via composer post-install/update; broaden commit-msg trailer stripper; document in README

* feat: add issue and pull request templates, contributing guide, security policy, and code of conduct

* feat: add issue templates for documentation and plugin proposals

* Merge branch 'main' of github.com:AlfaCode-Team/php-service-platform

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>
hakeemRash added a commit that referenced this pull request Jul 21, 2026
* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* Adopt master→main branch model, automated releases, and main branch protection (#23)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* Release v1.0.13 — Edge plugin + launcher/frontend fixes (#24)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* Release v1.0.15 — Edge serves local domains in dev (#25)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): TLS modes, APP_ENV cache profiles and OpenSwoole runtime (#26)

Adds per-run TLS mode selection (ssl|none|both), an APP_ENV-derived cache
profile, and a full OpenSwoole reverse-proxy runtime alongside PHP-FPM.

Added
- --tls=ssl|none|both (+ --no-ssl) and --ssl-cert/--ssl-key on edge:apply.
- Cache profiles from APP_ENV: local/development disable browser caching
  entirely; production keeps dynamic responses uncached and serves
  fingerprinted assets immutable for a year. Unknown envs fall back to
  DEVELOPMENT, never production.
- Environment flags --local/--dev, --development/-d, --production (scoped to
  the edge commands, not launcher-global).
- OpenSwoole runtime via proj.json "edge": { "runtime": "openswoole" }:
  dedicated upstream (least_conn, max_fails/fail_timeout, keepalive pool,
  multi-worker via "ports"), $connection_upgrade map, /ws WebSocket location,
  optional /health, and CF-Connecting-IP forwarded upstream.
- edge:service command generating the systemd unit (or supervisor block) that
  supervises a project's OpenSwoole server.
- Brotli/gzip resolved per server from that server's own capability, HSTS on
  TLS modes only, and an opt-in http-context prelude (log_format, rate-limit
  zones, Cloudflare real-IP ranges).

Changed
- The cache profile is no longer inferred from the kernel mode; nothing in
  vhost generation reads HKM_DEV, so kernel selection and app environment are
  independent.
- All generated paths derive from the project root, and the OpenSwoole entry
  script defaults to app/swoole/index.php — matching what `hkm run --swoole`
  executes.
- Security headers are repeated inside locations that set their own
  add_header, which nginx would otherwise drop.

Fixed
- Generated nginx failed `nginx -t`: `location = /index.php` was nested inside
  `location ~ \.php$`, which nginx rejects.
- `.well-known` was denied by a blanket dotfile rule, breaking ACME/Let's
  Encrypt issuance and renewal.
- Apache vhosts failed configtest: ServerTokens is not valid inside
  <VirtualHost>.
- Apache no longer emits directives for modules that are not loaded; HSTS and
  compression degrade to what the host actually supports.

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

* Release v1.0.17 — hkm discover: find & register projects on disk (#27)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".


* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(cli): plugins recover + discover restores runtime dirs

Add `hkm plugins recover [proj]` (aliases rebuild/reindex) to rebuild a lost or
drifted var/plugin-assets.json from on-disk assets, preserving recorded migration
batches and copying nothing.

Make `hkm discover` restore each project's gitignored runtime folders
(var/logs, var/cache/manifests, var/tmp, var/locks, var/sessions, var/queue,
userdata/storage) so a cloned or moved project can boot; --dry-run reports the
missing count without creating them. Release v1.0.18.

* Release v1.0.18 — plugins recover + discover restores runtime dirs (#28)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".


* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

* feat(cli): plugins recover + discover restores runtime dirs

Add `hkm plugins recover [proj]` (aliases rebuild/reindex) to rebuild a lost or
drifted var/plugin-assets.json from on-disk assets, preserving recorded migration
batches and copying nothing.

Make `hkm discover` restore each project's gitignored runtime folders
(var/logs, var/cache/manifests, var/tmp, var/locks, var/sessions, var/queue,
userdata/storage) so a cloned or moved project can boot; --dry-run reports the
missing count without creating them. Release v1.0.18.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): stream reuse/merge, force strategy, security hardening; release v1.0.19

- Edge reuses & merges an existing nginx SNI stream splitter's map in place
- --nginx-only/--apache-only force a single-server strategy (no fallback)
- nginx-only vhost binds the internal port behind an SNI router (no :443 clash)
- centralised CORS/security header emission; configurable CORS, TLS pinning,
  method guard and deny lists
- CLI parser rejects unknown options (suggestion / interactive autocorrect)
- --tls=both redirect + ACME passthrough; dev short-lived HSTS; prod denies
  source maps; deny rules ordered before static; per-site logs in prod; IPv6
  :443 parity

* test(edge): make nginx -t check portable across nginx versions

Use -g for pid/error_log instead of the newer -e flag (older nginx rejects
-e), and strip 'http2 on;' (>= 1.25.1 only) from the syntax-check body. The
directives remain asserted by the behavioral tests.

* test(edge): make nginx -t syntax check runnable as non-root in CI

Rewrite privileged listen ports to high ports (CI runs non-root and some
nginx builds bind during -t), and assert on 'syntax is ok' / no [emerg]
rather than a strict exit code that a non-fatal alert can flip.

* chore: auto-wire git hooks to strip AI co-author trailers

* chore: drop pulse-engine + module-template modules, patch guzzle, wire git hooks

- Remove alfacode-team/pulse-engine and module-template submodules (composer require, path repos, .gitmodules, lock)
- Bump guzzlehttp/guzzle to ^7.15.1 (clears 4 medium advisories; audit clean)
- Auto-wire core.hooksPath=.githooks via composer post-install/update; broaden commit-msg trailer stripper; document in README

* feat: add issue and pull request templates, contributing guide, security policy, and code of conduct

* feat: add issue templates for documentation and plugin proposals

* Merge branch 'main' of github.com:AlfaCode-Team/php-service-platform

* ci: add CodeQL (JS/TS + Actions) and PHP analysis (composer audit, Semgrep, PHPStan); add docs + plugin issue templates

* ci: drop custom CodeQL workflow — repo uses CodeQL default setup (avoids advanced-config conflict)

* ci(phpstan): add level-5 config + baseline, make analysis a blocking gate

- phpstan.neon.dist: analyse src/plugins/projects at level 5, scan modules/, exclude __dev__
- phpstan-baseline.neon: capture 542 pre-existing errors so only NEW issues fail CI
- php-analysis.yml: PHPStan job now blocking (was continue-on-error)
- fix(auth): correct stale \HKMCode\ docblock namespace in Driver port

Excluded pending real-bug fixes (tracked separately):
  MigrateListCommand extends non-existent AbstractMigrateCommand;
  OutboxWriter does not satisfy OutboxPort

* fix: repair MigrateListCommand parent + OutboxWriter port contract

- MigrateListCommand extended a non-existent AbstractMigrateCommand (fatal on
  load) -> extend LetMigrateCommand like its sibling migrate commands
- OutboxWriter now satisfies OutboxPort: write() returns the new row id via
  lastInsertId(); implement the missing markDispatched(int) to set status=1
- Remove both files from the PHPStan excludePaths now that they analyse cleanly

* ci: fix PHPStan (ignore optional Swoole/OpenSwoole coroutine calls) + composer audit flag

- PHPStan CI had no Swoole ext, so the runtime-guarded OpenSwoole/Swoole
  Coroutine calls (CurlHttpClient backoff, PageflowStream) reported as
  undefined/impossible-type. Ignore them by pattern — behaviour is correct at
  runtime (class_exists/method_exists guarded). Verified green with AND without
  the extension loaded.
- composer audit: drop invalid '--no-dev=false' (the flag takes no value)

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>
Alshatri added a commit that referenced this pull request Jul 22, 2026
…ow stage consolidation, OSS/CI hardening (#35)

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* Adopt master→main branch model, automated releases, and main branch protection (#23)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* Release v1.0.13 — Edge plugin + launcher/frontend fixes (#24)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* Release v1.0.15 — Edge serves local domains in dev (#25)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): TLS modes, APP_ENV cache profiles and OpenSwoole runtime (#26)

Adds per-run TLS mode selection (ssl|none|both), an APP_ENV-derived cache
profile, and a full OpenSwoole reverse-proxy runtime alongside PHP-FPM.

Added
- --tls=ssl|none|both (+ --no-ssl) and --ssl-cert/--ssl-key on edge:apply.
- Cache profiles from APP_ENV: local/development disable browser caching
  entirely; production keeps dynamic responses uncached and serves
  fingerprinted assets immutable for a year. Unknown envs fall back to
  DEVELOPMENT, never production.
- Environment flags --local/--dev, --development/-d, --production (scoped to
  the edge commands, not launcher-global).
- OpenSwoole runtime via proj.json "edge": { "runtime": "openswoole" }:
  dedicated upstream (least_conn, max_fails/fail_timeout, keepalive pool,
  multi-worker via "ports"), $connection_upgrade map, /ws WebSocket location,
  optional /health, and CF-Connecting-IP forwarded upstream.
- edge:service command generating the systemd unit (or supervisor block) that
  supervises a project's OpenSwoole server.
- Brotli/gzip resolved per server from that server's own capability, HSTS on
  TLS modes only, and an opt-in http-context prelude (log_format, rate-limit
  zones, Cloudflare real-IP ranges).

Changed
- The cache profile is no longer inferred from the kernel mode; nothing in
  vhost generation reads HKM_DEV, so kernel selection and app environment are
  independent.
- All generated paths derive from the project root, and the OpenSwoole entry
  script defaults to app/swoole/index.php — matching what `hkm run --swoole`
  executes.
- Security headers are repeated inside locations that set their own
  add_header, which nginx would otherwise drop.

Fixed
- Generated nginx failed `nginx -t`: `location = /index.php` was nested inside
  `location ~ \.php$`, which nginx rejects.
- `.well-known` was denied by a blanket dotfile rule, breaking ACME/Let's
  Encrypt issuance and renewal.
- Apache vhosts failed configtest: ServerTokens is not valid inside
  <VirtualHost>.
- Apache no longer emits directives for modules that are not loaded; HSTS and
  compression degrade to what the host actually supports.

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

* Release v1.0.17 — hkm discover: find & register projects on disk (#27)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".


* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(cli): plugins recover + discover restores runtime dirs

Add `hkm plugins recover [proj]` (aliases rebuild/reindex) to rebuild a lost or
drifted var/plugin-assets.json from on-disk assets, preserving recorded migration
batches and copying nothing.

Make `hkm discover` restore each project's gitignored runtime folders
(var/logs, var/cache/manifests, var/tmp, var/locks, var/sessions, var/queue,
userdata/storage) so a cloned or moved project can boot; --dry-run reports the
missing count without creating them. Release v1.0.18.

* Release v1.0.18 — plugins recover + discover restores runtime dirs (#28)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".


* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

* feat(cli): plugins recover + discover restores runtime dirs

Add `hkm plugins recover [proj]` (aliases rebuild/reindex) to rebuild a lost or
drifted var/plugin-assets.json from on-disk assets, preserving recorded migration
batches and copying nothing.

Make `hkm discover` restore each project's gitignored runtime folders
(var/logs, var/cache/manifests, var/tmp, var/locks, var/sessions, var/queue,
userdata/storage) so a cloned or moved project can boot; --dry-run reports the
missing count without creating them. Release v1.0.18.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): stream reuse/merge, force strategy, security hardening; release v1.0.19

- Edge reuses & merges an existing nginx SNI stream splitter's map in place
- --nginx-only/--apache-only force a single-server strategy (no fallback)
- nginx-only vhost binds the internal port behind an SNI router (no :443 clash)
- centralised CORS/security header emission; configurable CORS, TLS pinning,
  method guard and deny lists
- CLI parser rejects unknown options (suggestion / interactive autocorrect)
- --tls=both redirect + ACME passthrough; dev short-lived HSTS; prod denies
  source maps; deny rules ordered before static; per-site logs in prod; IPv6
  :443 parity

* test(edge): make nginx -t check portable across nginx versions

Use -g for pid/error_log instead of the newer -e flag (older nginx rejects
-e), and strip 'http2 on;' (>= 1.25.1 only) from the syntax-check body. The
directives remain asserted by the behavioral tests.

* test(edge): make nginx -t syntax check runnable as non-root in CI

Rewrite privileged listen ports to high ports (CI runs non-root and some
nginx builds bind during -t), and assert on 'syntax is ok' / no [emerg]
rather than a strict exit code that a non-fatal alert can flip.

* chore: auto-wire git hooks to strip AI co-author trailers

* chore: drop pulse-engine + module-template modules, patch guzzle, wire git hooks

- Remove alfacode-team/pulse-engine and module-template submodules (composer require, path repos, .gitmodules, lock)
- Bump guzzlehttp/guzzle to ^7.15.1 (clears 4 medium advisories; audit clean)
- Auto-wire core.hooksPath=.githooks via composer post-install/update; broaden commit-msg trailer stripper; document in README

* feat: add issue and pull request templates, contributing guide, security policy, and code of conduct

* feat: add issue templates for documentation and plugin proposals

* Merge branch 'main' of github.com:AlfaCode-Team/php-service-platform

* ci: add CodeQL (JS/TS + Actions) and PHP analysis (composer audit, Semgrep, PHPStan); add docs + plugin issue templates

* ci: drop custom CodeQL workflow — repo uses CodeQL default setup (avoids advanced-config conflict)

* ci(phpstan): add level-5 config + baseline, make analysis a blocking gate

- phpstan.neon.dist: analyse src/plugins/projects at level 5, scan modules/, exclude __dev__
- phpstan-baseline.neon: capture 542 pre-existing errors so only NEW issues fail CI
- php-analysis.yml: PHPStan job now blocking (was continue-on-error)
- fix(auth): correct stale \HKMCode\ docblock namespace in Driver port

Excluded pending real-bug fixes (tracked separately):
  MigrateListCommand extends non-existent AbstractMigrateCommand;
  OutboxWriter does not satisfy OutboxPort

* fix: repair MigrateListCommand parent + OutboxWriter port contract

- MigrateListCommand extended a non-existent AbstractMigrateCommand (fatal on
  load) -> extend LetMigrateCommand like its sibling migrate commands
- OutboxWriter now satisfies OutboxPort: write() returns the new row id via
  lastInsertId(); implement the missing markDispatched(int) to set status=1
- Remove both files from the PHPStan excludePaths now that they analyse cleanly

* ci: fix PHPStan (ignore optional Swoole/OpenSwoole coroutine calls) + composer audit flag

- PHPStan CI had no Swoole ext, so the runtime-guarded OpenSwoole/Swoole
  Coroutine calls (CurlHttpClient backoff, PageflowStream) reported as
  undefined/impossible-type. Ignore them by pattern — behaviour is correct at
  runtime (class_exists/method_exists guarded). Verified green with AND without
  the extension loaded.
- composer audit: drop invalid '--no-dev=false' (the flag takes no value)

* chore(oss): open-source readiness — license, composer metadata, .env.example

- LICENSE: replace Apache-2.0 text with MIT to match composer.json (was a
  license mismatch); copyright Hakeem Shamavu (AlfaCode Team)
- composer.json: add php ">=8.4" + required ext-* platform requirements,
  keywords, homepage, support links; remove duplicate license key
- composer.lock: re-resolved (composer update -W) so it is in sync; audit clean
- .env.example: curated core + common-plugin env template (copy to .env)
- protect-main.sh: require PHPStan + composer audit checks alongside PHPUnit/Zig

* chore: add craftdevscommunity as code owner (required PR reviewers for main)

* Refactor Pageflow stages and consolidate functionality

- Renamed PageflowSharerContract implementation to PageflowStage and merged the functionality of the previous PageflowShareStage, PageflowValidationStage, PageflowVersionStage, and PageflowPrecognitionStage into a single class.
- Updated references throughout the codebase to reflect the new PageflowStage class.
- Removed unused stage classes (PageflowShareStage, PageflowValidationStage, PageflowVersionStage, PageflowPrecognitionStage, and CorsStage).
- Introduced SecurityHeadersStage to handle both CORS and security headers in a single stage.
- Updated the Provider class to register the new PageflowStage and SecurityHeadersStage.
- Adjusted helper functions and documentation to align with the new structure.

* Depend on alfacode-team/http ^1.0 (dev-master in monorepo, v1.0.0 for releases)

* feat(module): add `hkm module` command for managing first-party kernel packages

* chore: update subproject commit for http module

* Point http submodule at latest master (dev-master, v1.0.0 release for stable)

* refactor(PageflowResponderTest): consolidate stage classes into a single PageflowStage

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>
Alshatri added a commit that referenced this pull request Jul 22, 2026
…tes (#36)

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* Adopt master→main branch model, automated releases, and main branch protection (#23)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* Release v1.0.13 — Edge plugin + launcher/frontend fixes (#24)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* Release v1.0.15 — Edge serves local domains in dev (#25)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): TLS modes, APP_ENV cache profiles and OpenSwoole runtime (#26)

Adds per-run TLS mode selection (ssl|none|both), an APP_ENV-derived cache
profile, and a full OpenSwoole reverse-proxy runtime alongside PHP-FPM.

Added
- --tls=ssl|none|both (+ --no-ssl) and --ssl-cert/--ssl-key on edge:apply.
- Cache profiles from APP_ENV: local/development disable browser caching
  entirely; production keeps dynamic responses uncached and serves
  fingerprinted assets immutable for a year. Unknown envs fall back to
  DEVELOPMENT, never production.
- Environment flags --local/--dev, --development/-d, --production (scoped to
  the edge commands, not launcher-global).
- OpenSwoole runtime via proj.json "edge": { "runtime": "openswoole" }:
  dedicated upstream (least_conn, max_fails/fail_timeout, keepalive pool,
  multi-worker via "ports"), $connection_upgrade map, /ws WebSocket location,
  optional /health, and CF-Connecting-IP forwarded upstream.
- edge:service command generating the systemd unit (or supervisor block) that
  supervises a project's OpenSwoole server.
- Brotli/gzip resolved per server from that server's own capability, HSTS on
  TLS modes only, and an opt-in http-context prelude (log_format, rate-limit
  zones, Cloudflare real-IP ranges).

Changed
- The cache profile is no longer inferred from the kernel mode; nothing in
  vhost generation reads HKM_DEV, so kernel selection and app environment are
  independent.
- All generated paths derive from the project root, and the OpenSwoole entry
  script defaults to app/swoole/index.php — matching what `hkm run --swoole`
  executes.
- Security headers are repeated inside locations that set their own
  add_header, which nginx would otherwise drop.

Fixed
- Generated nginx failed `nginx -t`: `location = /index.php` was nested inside
  `location ~ \.php$`, which nginx rejects.
- `.well-known` was denied by a blanket dotfile rule, breaking ACME/Let's
  Encrypt issuance and renewal.
- Apache vhosts failed configtest: ServerTokens is not valid inside
  <VirtualHost>.
- Apache no longer emits directives for modules that are not loaded; HSTS and
  compression degrade to what the host actually supports.

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

* Release v1.0.17 — hkm discover: find & register projects on disk (#27)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".


* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(cli): plugins recover + discover restores runtime dirs

Add `hkm plugins recover [proj]` (aliases rebuild/reindex) to rebuild a lost or
drifted var/plugin-assets.json from on-disk assets, preserving recorded migration
batches and copying nothing.

Make `hkm discover` restore each project's gitignored runtime folders
(var/logs, var/cache/manifests, var/tmp, var/locks, var/sessions, var/queue,
userdata/storage) so a cloned or moved project can boot; --dry-run reports the
missing count without creating them. Release v1.0.18.

* Release v1.0.18 — plugins recover + discover restores runtime dirs (#28)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".


* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

* feat(cli): plugins recover + discover restores runtime dirs

Add `hkm plugins recover [proj]` (aliases rebuild/reindex) to rebuild a lost or
drifted var/plugin-assets.json from on-disk assets, preserving recorded migration
batches and copying nothing.

Make `hkm discover` restore each project's gitignored runtime folders
(var/logs, var/cache/manifests, var/tmp, var/locks, var/sessions, var/queue,
userdata/storage) so a cloned or moved project can boot; --dry-run reports the
missing count without creating them. Release v1.0.18.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): stream reuse/merge, force strategy, security hardening; release v1.0.19

- Edge reuses & merges an existing nginx SNI stream splitter's map in place
- --nginx-only/--apache-only force a single-server strategy (no fallback)
- nginx-only vhost binds the internal port behind an SNI router (no :443 clash)
- centralised CORS/security header emission; configurable CORS, TLS pinning,
  method guard and deny lists
- CLI parser rejects unknown options (suggestion / interactive autocorrect)
- --tls=both redirect + ACME passthrough; dev short-lived HSTS; prod denies
  source maps; deny rules ordered before static; per-site logs in prod; IPv6
  :443 parity

* test(edge): make nginx -t check portable across nginx versions

Use -g for pid/error_log instead of the newer -e flag (older nginx rejects
-e), and strip 'http2 on;' (>= 1.25.1 only) from the syntax-check body. The
directives remain asserted by the behavioral tests.

* test(edge): make nginx -t syntax check runnable as non-root in CI

Rewrite privileged listen ports to high ports (CI runs non-root and some
nginx builds bind during -t), and assert on 'syntax is ok' / no [emerg]
rather than a strict exit code that a non-fatal alert can flip.

* chore: auto-wire git hooks to strip AI co-author trailers

* chore: drop pulse-engine + module-template modules, patch guzzle, wire git hooks

- Remove alfacode-team/pulse-engine and module-template submodules (composer require, path repos, .gitmodules, lock)
- Bump guzzlehttp/guzzle to ^7.15.1 (clears 4 medium advisories; audit clean)
- Auto-wire core.hooksPath=.githooks via composer post-install/update; broaden commit-msg trailer stripper; document in README

* feat: add issue and pull request templates, contributing guide, security policy, and code of conduct

* feat: add issue templates for documentation and plugin proposals

* Merge branch 'main' of github.com:AlfaCode-Team/php-service-platform

* ci: add CodeQL (JS/TS + Actions) and PHP analysis (composer audit, Semgrep, PHPStan); add docs + plugin issue templates

* ci: drop custom CodeQL workflow — repo uses CodeQL default setup (avoids advanced-config conflict)

* ci(phpstan): add level-5 config + baseline, make analysis a blocking gate

- phpstan.neon.dist: analyse src/plugins/projects at level 5, scan modules/, exclude __dev__
- phpstan-baseline.neon: capture 542 pre-existing errors so only NEW issues fail CI
- php-analysis.yml: PHPStan job now blocking (was continue-on-error)
- fix(auth): correct stale \HKMCode\ docblock namespace in Driver port

Excluded pending real-bug fixes (tracked separately):
  MigrateListCommand extends non-existent AbstractMigrateCommand;
  OutboxWriter does not satisfy OutboxPort

* fix: repair MigrateListCommand parent + OutboxWriter port contract

- MigrateListCommand extended a non-existent AbstractMigrateCommand (fatal on
  load) -> extend LetMigrateCommand like its sibling migrate commands
- OutboxWriter now satisfies OutboxPort: write() returns the new row id via
  lastInsertId(); implement the missing markDispatched(int) to set status=1
- Remove both files from the PHPStan excludePaths now that they analyse cleanly

* ci: fix PHPStan (ignore optional Swoole/OpenSwoole coroutine calls) + composer audit flag

- PHPStan CI had no Swoole ext, so the runtime-guarded OpenSwoole/Swoole
  Coroutine calls (CurlHttpClient backoff, PageflowStream) reported as
  undefined/impossible-type. Ignore them by pattern — behaviour is correct at
  runtime (class_exists/method_exists guarded). Verified green with AND without
  the extension loaded.
- composer audit: drop invalid '--no-dev=false' (the flag takes no value)

* chore(oss): open-source readiness — license, composer metadata, .env.example

- LICENSE: replace Apache-2.0 text with MIT to match composer.json (was a
  license mismatch); copyright Hakeem Shamavu (AlfaCode Team)
- composer.json: add php ">=8.4" + required ext-* platform requirements,
  keywords, homepage, support links; remove duplicate license key
- composer.lock: re-resolved (composer update -W) so it is in sync; audit clean
- .env.example: curated core + common-plugin env template (copy to .env)
- protect-main.sh: require PHPStan + composer audit checks alongside PHPUnit/Zig

* chore: add craftdevscommunity as code owner (required PR reviewers for main)

* Refactor Pageflow stages and consolidate functionality

- Renamed PageflowSharerContract implementation to PageflowStage and merged the functionality of the previous PageflowShareStage, PageflowValidationStage, PageflowVersionStage, and PageflowPrecognitionStage into a single class.
- Updated references throughout the codebase to reflect the new PageflowStage class.
- Removed unused stage classes (PageflowShareStage, PageflowValidationStage, PageflowVersionStage, PageflowPrecognitionStage, and CorsStage).
- Introduced SecurityHeadersStage to handle both CORS and security headers in a single stage.
- Updated the Provider class to register the new PageflowStage and SecurityHeadersStage.
- Adjusted helper functions and documentation to align with the new structure.

* Depend on alfacode-team/http ^1.0 (dev-master in monorepo, v1.0.0 for releases)

* feat(module): add `hkm module` command for managing first-party kernel packages

* chore: update subproject commit for http module

* Point http submodule at latest master (dev-master, v1.0.0 release for stable)

* refactor(PageflowResponderTest): consolidate stage classes into a single PageflowStage

* Refactor code structure for improved readability and maintainability

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>
Alshatri added a commit that referenced this pull request Jul 22, 2026
…ite (+#36) (#37)

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* Adopt master→main branch model, automated releases, and main branch protection (#23)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* Release v1.0.13 — Edge plugin + launcher/frontend fixes (#24)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* Release v1.0.15 — Edge serves local domains in dev (#25)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): TLS modes, APP_ENV cache profiles and OpenSwoole runtime (#26)

Adds per-run TLS mode selection (ssl|none|both), an APP_ENV-derived cache
profile, and a full OpenSwoole reverse-proxy runtime alongside PHP-FPM.

Added
- --tls=ssl|none|both (+ --no-ssl) and --ssl-cert/--ssl-key on edge:apply.
- Cache profiles from APP_ENV: local/development disable browser caching
  entirely; production keeps dynamic responses uncached and serves
  fingerprinted assets immutable for a year. Unknown envs fall back to
  DEVELOPMENT, never production.
- Environment flags --local/--dev, --development/-d, --production (scoped to
  the edge commands, not launcher-global).
- OpenSwoole runtime via proj.json "edge": { "runtime": "openswoole" }:
  dedicated upstream (least_conn, max_fails/fail_timeout, keepalive pool,
  multi-worker via "ports"), $connection_upgrade map, /ws WebSocket location,
  optional /health, and CF-Connecting-IP forwarded upstream.
- edge:service command generating the systemd unit (or supervisor block) that
  supervises a project's OpenSwoole server.
- Brotli/gzip resolved per server from that server's own capability, HSTS on
  TLS modes only, and an opt-in http-context prelude (log_format, rate-limit
  zones, Cloudflare real-IP ranges).

Changed
- The cache profile is no longer inferred from the kernel mode; nothing in
  vhost generation reads HKM_DEV, so kernel selection and app environment are
  independent.
- All generated paths derive from the project root, and the OpenSwoole entry
  script defaults to app/swoole/index.php — matching what `hkm run --swoole`
  executes.
- Security headers are repeated inside locations that set their own
  add_header, which nginx would otherwise drop.

Fixed
- Generated nginx failed `nginx -t`: `location = /index.php` was nested inside
  `location ~ \.php$`, which nginx rejects.
- `.well-known` was denied by a blanket dotfile rule, breaking ACME/Let's
  Encrypt issuance and renewal.
- Apache vhosts failed configtest: ServerTokens is not valid inside
  <VirtualHost>.
- Apache no longer emits directives for modules that are not loaded; HSTS and
  compression degrade to what the host actually supports.

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

* Release v1.0.17 — hkm discover: find & register projects on disk (#27)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".


* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(cli): plugins recover + discover restores runtime dirs

Add `hkm plugins recover [proj]` (aliases rebuild/reindex) to rebuild a lost or
drifted var/plugin-assets.json from on-disk assets, preserving recorded migration
batches and copying nothing.

Make `hkm discover` restore each project's gitignored runtime folders
(var/logs, var/cache/manifests, var/tmp, var/locks, var/sessions, var/queue,
userdata/storage) so a cloned or moved project can boot; --dry-run reports the
missing count without creating them. Release v1.0.18.

* Release v1.0.18 — plugins recover + discover restores runtime dirs (#28)

* Initial commit

* remove module common-type-alias

* remove module bind-it

* add submodules for bind-it, php-io-cli, and module-template

* feat(module): add commands for managing git submodules

- Implemented `module:add` command to add a git submodule and configure it as a Composer path package.
- Implemented `module:remove` command to fully remove a git submodule and clean up all traces from the repository.
- Created a bash script `module.sh` for adding and removing modules with similar functionality.
- Added scaffolding for module structure including `src/` directory and `composer.json`.
- Updated root `composer.json` to include new modules as path repositories.
- Added error handling and user confirmation prompts for destructive actions.

* fix(common-type-alias): update subproject commit to indicate dirty state

* d

* remove module orchestrator

* Add unit tests for I18n, Pageflow, Support, and Validation plugins; introduce Zig build system

- Created `TranslatorTest` to validate translation functionality including key resolution and interpolation.
- Implemented `PageflowResponderTest` to ensure correct rendering of pages and handling of requests.
- Added `CollectionTest` to test collection operations and array helper functions.
- Developed `ResourceTest` to verify resource transformation and serialization.
- Established `ValidatorTest` to check validation rules and error handling.
- Introduced Zig build configuration with `build.zig`, `config.zig`, and `main.zig` for project management.

* fix(pulse-engine): update subproject commit to indicate dirty state

* feat(routes): implement project-level route handling and manifest compilation

* feat(cookie): introduce cookie management with configuration and helpers

- Added cookie configuration file and helper functions for managing cookies.
- Implemented CookieJar for queuing and reading cookies, including encryption support.
- Created tests for cookie functionality, ensuring correct behavior for setting, reading, and deleting cookies.

feat(http): enhance request handling with RequestAware interface

- Introduced RequestAware interface for controllers to hold the active Request.
- Updated ExecuteStage to set the Request on controllers implementing RequestAware.

feat(http): implement route filters for declarative behavior

- Added FilterRegistry to map route-filter aliases to pipeline stages.
- Implemented RouteFilterStage to execute filters declared on routes.

feat(view): compile view manifest for structured view resolution

- Created CompileViewManifestStage to compile view paths with priority handling.
- Ensured project views take precedence over plugin views.

feat(api): create base controllers for JSON and HTML responses

- Developed ApiController for JSON endpoints with standardized response methods.
- Created ViewController for rendering HTML views with integrated cookie management.

feat(task): add example plugin with JSON filter and view rendering

- Implemented RequireJsonStage to enforce JSON response expectations.
- Added a welcome view for the Task plugin demonstrating view rendering.

* refactor(routes): enhance project route handling with additional validation and state management

* feat(storage): add storage configuration and local storage adapter

- Introduced a new storage configuration file to manage storage settings via environment variables.
- Implemented a LocalStorageAdapter for handling file storage operations, including storing, retrieving, and deleting files.
- Added tests for LocalStorageAdapter to ensure functionality and edge cases are covered.

feat(session): implement session management traits and tests

- Created HasRequest and InteractsWithSession traits for managing request and session data in controllers.
- Developed unit tests for session management, ensuring proper functionality of session storage, retrieval, and lifecycle management.

test(session): add comprehensive tests for session handling

- Added tests for cookie-based session handling, including encryption, tampering, and session expiration scenarios.
- Ensured that session management adheres to expected behaviors under various conditions.

feat(s3): implement S3 storage adapter with configuration options

- Added S3StorageAdapter to support AWS S3 and compatible storage services.
- Implemented configuration options for region, credentials, and custom endpoints.
- Created tests to validate S3 adapter functionality and credential resolution.

* feat(seo): Implement SEO components including RouteCatalog, SeoHead, SitemapGenerator, and SitemapStreamWriter

- Added RouteCatalog to manage public routes for sitemaps based on the compiled route manifest.
- Introduced SeoHead for assembling comprehensive SEO <head> elements for pages.
- Created SitemapGenerator to facilitate sitemap creation from public routes and dynamic URLs.
- Developed SitemapSource to combine static and dynamic URLs for sitemaps.
- Implemented SitemapStreamWriter for efficient streaming of large sitemaps, supporting gzip compression.
- Added SitemapUrlProvider interface for dynamic route pattern expansion into concrete URLs from data stores.

* Refactor code structure for improved readability and maintainability

* Add integration tests for OAuth2 functionality

- Implement OAuth2HttpIntegrationTest to cover HTTP interactions with OAuth2 controllers, including token issuance, introspection, and discovery.
- Implement OAuth2PersistenceIntegrationTest to validate the behavior of repositories and services against an in-memory SQLite database, focusing on authorization code flow, refresh token rotation, and client CRUD operations.

* feat: Implement DataConverter for hydration between DB and Domain objects

- Added DataConverter class to handle conversion between raw DB data and PHP Domain objects.
- Introduced methods for data extraction and reconstruction with type casting support.

feat: Create Resource and ResourceCollection for API response transformation

- Added Resource class to map domain objects to API response shapes.
- Introduced ResourceCollection to handle lists of resources and their transformations.

feat: Add Str utility class for string manipulation

- Implemented various string utility methods including studly, camel, snake, kebab, and slug.

test: Add unit tests for RequireTenantStage and RouteFilterStage

- Implemented tests to ensure tenant requirements are enforced in HTTP request handling.
- Verified correct behavior of route filters in the pipeline.

test: Add TenantAdminService tests for tenant management functionality

- Created tests to validate tenant creation, provisioning, and authorization checks.

test: Implement FeedbackService tests for user feedback submission and retrieval

- Added tests to ensure proper handling of feedback submissions and access control.

test: Add UserSettingsService tests for user preferences management

- Implemented tests to verify user settings updates and validation rules.

* Refactor code structure for improved readability and maintainability

* feat: Add native launcher and install script for HKM kernel with dependency resolution

* feat: Implement seeder command structure with run, fresh, and status functionalities

* feat: Add versioning and upgrade command for kernel management

* feat: Add upgrade command for kernel updates and implement versioning in binaries

* feat: Add unit tests for exception handling, request, response, identity, and security verdict functionalities

* Update PHP version requirement to 8.4 across various scripts

- Updated the minimum PHP version requirement from 8.2 to 8.4 in bundle.sh, ensuring compatibility with the latest features.
- Modified the doctor.zig command to check for PHP version 8.4, reflecting the updated requirement.
- Adjusted install-kernel.sh to require PHP 8.4, providing clearer instructions for users.
- Updated installation instructions for Debian/Ubuntu to install PHP 8.4 and its extensions.

* feat: Add PHPUnit configuration file for unit testing

* feat: Update CI workflows to use self-hosted Zig toolchain and improve macOS bundle process

* docs: rewrite README as a full framework guide (concepts, lifecycle, usage)

* build(bundle): pin bundle dependencies to the PHP 8.4 series

Use versioned php8.4-* Debian packages instead of php-cli (>= 8.4) so PHP
8.5+ can no longer satisfy the dependency; adjust docstring and Windows
INSTALL.txt wording from "PHP >= 8.4" to "PHP 8.4".


* ci(release): auto-tag new CHANGELOG version on merge to main -> triggers Release build

* ci(release): auto-release on merge to main via workflow_call (no PAT); tag from CHANGELOG version

* docs(readme): document master->main branch model and automatic CHANGELOG-driven releases

* ci(security): CODEOWNERS + main branch protection script (required reviews, code owners, CI gates, linear history)

* feat(edge): host-aware web-server config plugin (nginx SNI stream splitter / nginx-only / Apache), generates from platform domains + CLI apply

* feat(edge): classify .local/.test as local domains — exclude from server config, sync to /etc/hosts (edge:hosts, --no-hosts)

* fix(edge): resolve project registry from global kernel home (not project base_path); document EDGE_* env in template

* feat(edge): project-aware config — per-project vhosts (docroot app/public, fpm|swoole via proj.json) with injected run-env (APP_ENV/HKM_USERDATA_DIR/PSP_GLOBAL_AUTOLOAD/HKM_KERNEL_HOME)

* feat(edge): default commands to the CURRENT project (base_path/proj.json); add --all for the whole registry

* feat(edge): auto-resolve PHP-FPM socket to match the CLI PHP version (multi-PHP hosts); show php/fpm binding in edge:status

* feat(userconfig): resolve config path for non-root sudo users

* feat(edge): enhance hosts management with dev mode checks and force option; update documentation

* chore(release): v1.0.13 — Edge plugin, PSP_PROJECTS_DIR export, frontend/sudo fixes

* chore(release): bump to v1.0.14 (v1.0.13 tag already exists from an earlier auto-release misfire)

* chore(release): reclaim v1.0.13 (stale mis-tagged v1.0.13 release/tag deleted)

* chore(release): v1.0.14

* chore: align CHANGELOG to released v1.0.13 (drop phantom 1.0.14)

* fix(edge): serve local .local/.test domains in dev mode (--dev)

The EDGE_LOCAL_IN_SERVER flag was defined but never read, so a project
whose domains are all local rendered an empty vhost. Dev mode (HKM_DEV=1)
now folds local domains into the generated nginx/Apache vhost; production
runs keep them out (DNS). Local domains still sync to /etc/hosts either way.

* feat(tenancy): add control plane support and enhance tenant migration command

* feat(cli): hkm discover — find and register projects on disk

Add a native `hkm discover [root]` command (alias `hkm scan`) that walks a
directory tree, finds every folder holding a proj.json, and upserts each into
the kernel registry with its name, version, absolute path, and domains. The
bulk counterpart to `hkm update`: adopt projects scaffolded with --no-register,
cloned from git, or moved on disk. Reports new/moved/up-to-date per match;
--dry-run previews, --depth caps descent. Skips vendor/node_modules/var/.git
and stops at a project root. Release v1.0.17.

* feat(cli): plugins recover + discover restores runtime dirs

Add `hkm plugins recover [proj]` (aliases rebuild/reindex) to rebuild a lost or
drifted var/plugin-assets.json from on-disk assets, preserving recorded migration
batches and copying nothing.

Make `hkm discover` restore each project's gitignored runtime folders
(var/logs, var/cache/manifests, var/tmp, var/locks, var/sessions, var/queue,
userdata/storage) so a cloned or moved project can boot; --dry-run reports the
missing count without creating them. Release v1.0.18.

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>

* feat(edge): stream reuse/merge, force strategy, security hardening; release v1.0.19

- Edge reuses & merges an existing nginx SNI stream splitter's map in place
- --nginx-only/--apache-only force a single-server strategy (no fallback)
- nginx-only vhost binds the internal port behind an SNI router (no :443 clash)
- centralised CORS/security header emission; configurable CORS, TLS pinning,
  method guard and deny lists
- CLI parser rejects unknown options (suggestion / interactive autocorrect)
- --tls=both redirect + ACME passthrough; dev short-lived HSTS; prod denies
  source maps; deny rules ordered before static; per-site logs in prod; IPv6
  :443 parity

* test(edge): make nginx -t check portable across nginx versions

Use -g for pid/error_log instead of the newer -e flag (older nginx rejects
-e), and strip 'http2 on;' (>= 1.25.1 only) from the syntax-check body. The
directives remain asserted by the behavioral tests.

* test(edge): make nginx -t syntax check runnable as non-root in CI

Rewrite privileged listen ports to high ports (CI runs non-root and some
nginx builds bind during -t), and assert on 'syntax is ok' / no [emerg]
rather than a strict exit code that a non-fatal alert can flip.

* chore: auto-wire git hooks to strip AI co-author trailers

* chore: drop pulse-engine + module-template modules, patch guzzle, wire git hooks

- Remove alfacode-team/pulse-engine and module-template submodules (composer require, path repos, .gitmodules, lock)
- Bump guzzlehttp/guzzle to ^7.15.1 (clears 4 medium advisories; audit clean)
- Auto-wire core.hooksPath=.githooks via composer post-install/update; broaden commit-msg trailer stripper; document in README

* feat: add issue and pull request templates, contributing guide, security policy, and code of conduct

* feat: add issue templates for documentation and plugin proposals

* Merge branch 'main' of github.com:AlfaCode-Team/php-service-platform

* ci: add CodeQL (JS/TS + Actions) and PHP analysis (composer audit, Semgrep, PHPStan); add docs + plugin issue templates

* ci: drop custom CodeQL workflow — repo uses CodeQL default setup (avoids advanced-config conflict)

* ci(phpstan): add level-5 config + baseline, make analysis a blocking gate

- phpstan.neon.dist: analyse src/plugins/projects at level 5, scan modules/, exclude __dev__
- phpstan-baseline.neon: capture 542 pre-existing errors so only NEW issues fail CI
- php-analysis.yml: PHPStan job now blocking (was continue-on-error)
- fix(auth): correct stale \HKMCode\ docblock namespace in Driver port

Excluded pending real-bug fixes (tracked separately):
  MigrateListCommand extends non-existent AbstractMigrateCommand;
  OutboxWriter does not satisfy OutboxPort

* fix: repair MigrateListCommand parent + OutboxWriter port contract

- MigrateListCommand extended a non-existent AbstractMigrateCommand (fatal on
  load) -> extend LetMigrateCommand like its sibling migrate commands
- OutboxWriter now satisfies OutboxPort: write() returns the new row id via
  lastInsertId(); implement the missing markDispatched(int) to set status=1
- Remove both files from the PHPStan excludePaths now that they analyse cleanly

* ci: fix PHPStan (ignore optional Swoole/OpenSwoole coroutine calls) + composer audit flag

- PHPStan CI had no Swoole ext, so the runtime-guarded OpenSwoole/Swoole
  Coroutine calls (CurlHttpClient backoff, PageflowStream) reported as
  undefined/impossible-type. Ignore them by pattern — behaviour is correct at
  runtime (class_exists/method_exists guarded). Verified green with AND without
  the extension loaded.
- composer audit: drop invalid '--no-dev=false' (the flag takes no value)

* chore(oss): open-source readiness — license, composer metadata, .env.example

- LICENSE: replace Apache-2.0 text with MIT to match composer.json (was a
  license mismatch); copyright Hakeem Shamavu (AlfaCode Team)
- composer.json: add php ">=8.4" + required ext-* platform requirements,
  keywords, homepage, support links; remove duplicate license key
- composer.lock: re-resolved (composer update -W) so it is in sync; audit clean
- .env.example: curated core + common-plugin env template (copy to .env)
- protect-main.sh: require PHPStan + composer audit checks alongside PHPUnit/Zig

* chore: add craftdevscommunity as code owner (required PR reviewers for main)

* Refactor Pageflow stages and consolidate functionality

- Renamed PageflowSharerContract implementation to PageflowStage and merged the functionality of the previous PageflowShareStage, PageflowValidationStage, PageflowVersionStage, and PageflowPrecognitionStage into a single class.
- Updated references throughout the codebase to reflect the new PageflowStage class.
- Removed unused stage classes (PageflowShareStage, PageflowValidationStage, PageflowVersionStage, PageflowPrecognitionStage, and CorsStage).
- Introduced SecurityHeadersStage to handle both CORS and security headers in a single stage.
- Updated the Provider class to register the new PageflowStage and SecurityHeadersStage.
- Adjusted helper functions and documentation to align with the new structure.

* Depend on alfacode-team/http ^1.0 (dev-master in monorepo, v1.0.0 for releases)

* feat(module): add `hkm module` command for managing first-party kernel packages

* chore: update subproject commit for http module

* Point http submodule at latest master (dev-master, v1.0.0 release for stable)

* refactor(PageflowResponderTest): consolidate stage classes into a single PageflowStage

* Refactor code structure for improved readability and maintainability

* docs: update README to enhance clarity and structure, add new sections

---------

Co-authored-by: Hakeem Shamavu <hakimushamavu@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants