Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[2.3.1] - 2026-05-29¶
Fixed¶
- database/session : Connexion échouait silencieusement car la session n'était pas vérifiée avant utilisation. Ajout d'une vérification explicite de l'état de session (
is_active) avant chaque opération, avec reconnexion automatique si la session est expirée ou fermée. - database/async_sql :
pool_pre_ping=Truelevaitping() missing 1 required positional argument: 'reconnect'avec le driveraiomysql. Le pre-ping est désormais désactivé automatiquement pouraiomysqletcymysql, compensé par un event listener pessimiste (engine_connect) etpool_recycle. - database/async_sql : Gestion des connexions mortes améliorée — les erreurs
OperationalErroretDisconnectionErrorlors d'un rollback sont maintenant capturées et loggées sans planter le worker. - database/_utils : Les paramètres
read_timeoutetwrite_timeoutsont exclusifs àpymysql.sanitize_connect_args()les filtre désormais pouraiomysqlavec un warning explicite, évitant une erreur silencieuse à la connexion. - database/migrations :
MigrationRunner._is_async()ne reconnaissait pas les suffixes+aiomysqlet+asyncmy, forçant le chemin synchrone sur des connexions async. Les deux drivers sont maintenant inclus dansasync_markers. - database/container : La configuration
DatabaseConfign'exposait pas certains paramètres de production (pool_timeout,pool_reset_on_return,connect_args,isolation_level,execution_options). Ces champs sont désormais lus depuisintegration.yamlet transmis aux adapters.
Improved¶
- CI/CD : Workflow
ci.ymlmis à jour — étape de coverage affinée, labels PR revus, workflowpr.ymlajouté pour valider le titre (conventional commits) et la taille des PRs. - CI/CD : Workflow
security.yml— scan Bandit restreint aux dossiers existants (xcore/,tests/) pour éliminer les faux positifs surextensions/etplugins/. - Tests : Correction du test
test_tenancy.py— assertion alignée sur le comportement réel duContextVaraprès reset. - Documentation : Refonte complète de la section CLI (
doc/cli/) avec des guides détaillés pour l'installation, la configuration, les commandesworker,plugin,sandbox,manageretmigration. Ajout de la référence API SDK (doc/sdk/api/). - Observabilité :
XcoreLoggerenrichi avec support structurel des champs contextuels ;MetricsCollectorétendu avec backendsmemoryetprometheusdocumentés.
[2.3.0] - 2026-05-14¶
Added¶
- Multi-tenancy Native (Axe 1):
TenantMiddleware: Extractstenant_idfrom HTTP header (X-Tenant-ID) or subdomain; injectsrequest.state.tenant_id.TenantAwareCache: Wraps cache and automatically prefixes all keys with{tenant_id}:.TenantAwareDB: Wraps SQL adapters and executesSET search_path TO {tenant_id}, public(PostgreSQL) before each query.TenantAwareScheduler: Prefixes APSchedulerjob_idwith{tenant_id}:.wrap_services_for_tenant(): Replaces services in plugin context at each call; zero code changes for existing plugins.
- IPC Authorization (allowed_callers):
IPCAuthMiddleware: First middleware in the pipeline; checksallowed_callersdeclared inplugin.yaml.- Deny-by-default: IPC calls are denied if the list is empty or missing. Direct HTTP calls (caller=None) still pass.
PluginLoader.get_manifest(name): Added method to retrieve manifest from middleware.
- @schema Decorator (Axe 3):
- Versioned decorator with built-in validation (Pydantic).
SchemaRegistry: Singleton storing all schemas declared via@schema.BreakingChangeDetector: Detects breaking changes between two registry versions.- CLI:
xcore plugin validate --check-breaking schemas_v1.json.
- Configuration:
tenancy:section inintegration.yamlwith 8 flags:enabled,header,subdomain,default_tenant,isolate_cache,isolate_db,isolate_scheduler,enforce_ipc.TenancyConfigdataclass inconfigurations/sections.py.allowed_callers: list[str]added toPluginManifest.
- Testing:
- 58 new tests:
tests/unit/kernel/test_tenancy.py(41) andtests/integration/test_tenancy_integration.py(17).
- 58 new tests:
- Documentation:
doc/guides/tenancy.md: Complete multi-tenant guide.doc/guides/plugin-manifest.md:plugin.yamlreference.doc/reference/configuration.md: Documentedtenancy:section.doc/reference/sdk.md: Documented@schema.doc/guides/security.md: IPC andallowed_callerssection.doc/architecture/decisions.md: Decisions 7 (location), 8 (IPC deny-by-default), 9 (@schema source of truth).
[2.2.1] - 2026-05-24¶
Fixed¶
- database/async_sql:
pool_pre_ping=Truecausedping() missing 1 required positional argument: 'reconnect'with aiomysql. Pre-ping is now disabled automatically for aiomysql/cymysql and compensated by a pessimistic event listener +pool_recycle. - database/migrations:
MigrationRunner._is_async()did not recognize+aiomysqland+asyncmydrivers, forcing synchronous path on async connections. - database/_utils:
read_timeoutandwrite_timeoutare pymysql-only parameters.sanitize_connect_argsnow filters them for aiomysql with an explicit warning.
[2.2.0] - 2026-05-24¶
Added¶
- DatabaseConfig: New configurable pool parameters in
xcore.yaml:pool_pre_ping,pool_recycle,pool_timeout,pool_reset_on_return,connect_args,isolation_level,execution_options. - database/adapters/_utils.py: New module for driver detection and connection argument sanitization.
Fixed¶
- database/async_sql: Fixed stale connections (MySQL/MariaDB) after
wait_timeout. - database/async_sql: Added missing
@asynccontextmanageronsession(). - database/async_sql + sql: Added missing
disconnect(). - database/async_sql + sql: Improved error handling during rollback on dead connections.
[2.2.0] - 2026-05-14¶
Changed¶
- Security: Removed
python-joseandpython-ecdsato eliminate vulnerability to Minerva timing attacks (CVE-2024-23342). - Cleanup: Removed 7 unused dependencies (
pillow,watchdog,user-agents,aiocache,toml,mysql-connector-python). - Optimization: Moved
psutilto dev dependencies andmarkdownto docs dependencies.
[2.1.3] - 2026-05-13¶
Added¶
- XWorker (Native Celery): Full Celery integration in
ServiceContainer. - CLI xcore worker: Command to manage FastAPI and Celery processes (
start,stop,status,logs, etc.). - Extended Configuration: FastAPI constructor parameters and uvicorn parameters configurable via YAML.
- Declarative Middleware System: Automatic loading from
integration.yaml.
[2.1.2] - 2026-04-29¶
Fixed¶
- 13 critical test failures resolved (kernel, permissions, sandbox).
- AST Scanner: detection of bypasses via import aliases.
Improved¶
- Performance:
- LRU Cache on
PermissionEngine: +34% throughput. - Native
mset/mgeton Redis: up to 77x faster on batch operations. - Pre-compiled regex in
Policy.matches(): short-circuit in 0.4 µs.
- LRU Cache on
- Quality:
pytest-benchmarkintegration.- Pre-commit hooks for black, isort, and flake8.
pyproject.tomlmigrated to PEP 621.
[2.0.0] - 2026-04-15¶
Added¶
- Plugin-First Architecture: Modular kernel, separation of Kernel / Services / Plugins.
- Advanced Sandboxing: OS subprocess isolation, JSON-RPC 2.0 communication.
- ServiceContainer: Dependency injection for DB (SQLAlchemy 2.0), Cache (Redis/Memory), Scheduler (APScheduler).
- MiddlewarePipeline: Pre-compiled pipeline (Tracing → RateLimit → Permissions → Retry).
- SDK:
@action,@router,@validate_payload,AutoDispatchMixin,RoutedPlugin. - RBAC: Pluggable
AuthBackend+ declarativeRBACChecker. - StateMachine: FSM per plugin with validated transitions.
- PluginRegistry: Metadata, dependencies, semver versioning.
[1.x] - Legacy¶
Added¶
- Initial stable release based on FastAPI.
- Monolithic plugin system without isolation.
- Limited support for asynchronous services.