eitohforge 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- eitohforge-0.1.0/.github/workflows/ci.yml +145 -0
- eitohforge-0.1.0/.github/workflows/publish-internal.yml +85 -0
- eitohforge-0.1.0/.github/workflows/publish-pypi.yml +74 -0
- eitohforge-0.1.0/.gitignore +13 -0
- eitohforge-0.1.0/CONTRIBUTING.md +33 -0
- eitohforge-0.1.0/PKG-INFO +72 -0
- eitohforge-0.1.0/README.md +23 -0
- eitohforge-0.1.0/docs/README.md +73 -0
- eitohforge-0.1.0/docs/adr/0001-orm-and-migration-strategy.md +22 -0
- eitohforge-0.1.0/docs/adr/0002-typing-and-linting-strategy.md +22 -0
- eitohforge-0.1.0/docs/adr/0003-packaging-and-publish-strategy.md +23 -0
- eitohforge-0.1.0/docs/guides/cookbook.md +118 -0
- eitohforge-0.1.0/docs/guides/deployment-strategies-and-rollback-controls.md +75 -0
- eitohforge-0.1.0/docs/guides/enterprise-deployment-and-networking.md +63 -0
- eitohforge-0.1.0/docs/guides/enterprise-readiness-checklist.md +74 -0
- eitohforge-0.1.0/docs/guides/forge-profiles.md +68 -0
- eitohforge-0.1.0/docs/guides/load-balancing-and-health-routing.md +66 -0
- eitohforge-0.1.0/docs/guides/mtls-trust-model.md +71 -0
- eitohforge-0.1.0/docs/guides/multi-service-dev-and-environments.md +29 -0
- eitohforge-0.1.0/docs/guides/onboarding-qa-simulation.md +48 -0
- eitohforge-0.1.0/docs/guides/operations-runbook.md +86 -0
- eitohforge-0.1.0/docs/guides/phase-0-and-1-kickoff.md +76 -0
- eitohforge-0.1.0/docs/guides/python-packaging-and-publishing.md +87 -0
- eitohforge-0.1.0/docs/guides/query-spec-reference.md +50 -0
- eitohforge-0.1.0/docs/guides/realtime-websocket.md +39 -0
- eitohforge-0.1.0/docs/guides/repository-contracts-and-dto-boundaries.md +36 -0
- eitohforge-0.1.0/docs/guides/testing-and-example-project-strategy.md +65 -0
- eitohforge-0.1.0/docs/guides/tls-and-cert-rotation-runbook.md +65 -0
- eitohforge-0.1.0/docs/guides/usage-complete.md +160 -0
- eitohforge-0.1.0/docs/performance/baseline.json +15 -0
- eitohforge-0.1.0/docs/performance/baseline.md +8 -0
- eitohforge-0.1.0/docs/releases/v0.1.0-rc.md +32 -0
- eitohforge-0.1.0/docs/roadmap/architecture-coverage-matrix.md +66 -0
- eitohforge-0.1.0/docs/roadmap/blueprint-completion-waves.md +169 -0
- eitohforge-0.1.0/docs/roadmap/execution-board.md +154 -0
- eitohforge-0.1.0/docs/roadmap/master-implementation-roadmap.md +479 -0
- eitohforge-0.1.0/docs/standards/engineering-standards.md +180 -0
- eitohforge-0.1.0/docs/standards/flaky-test-policy.md +35 -0
- eitohforge-0.1.0/examples/example-enterprise/.env.example +12 -0
- eitohforge-0.1.0/examples/example-enterprise/README.md +53 -0
- eitohforge-0.1.0/examples/example-enterprise/example_enterprise/__init__.py +1 -0
- eitohforge-0.1.0/examples/example-enterprise/example_enterprise/main.py +37 -0
- eitohforge-0.1.0/examples/example-enterprise/forge.dev.json +11 -0
- eitohforge-0.1.0/examples/example-enterprise/pyproject.toml +25 -0
- eitohforge-0.1.0/examples/example-enterprise/tests/test_smoke.py +40 -0
- eitohforge-0.1.0/examples/example-minimal/.env.example +4 -0
- eitohforge-0.1.0/examples/example-minimal/README.md +35 -0
- eitohforge-0.1.0/examples/example-minimal/example_minimal/__init__.py +1 -0
- eitohforge-0.1.0/examples/example-minimal/example_minimal/main.py +22 -0
- eitohforge-0.1.0/examples/example-minimal/pyproject.toml +25 -0
- eitohforge-0.1.0/examples/example-minimal/tests/test_smoke.py +21 -0
- eitohforge-0.1.0/pyproject.toml +111 -0
- eitohforge-0.1.0/scripts/check_license_policy.py +102 -0
- eitohforge-0.1.0/scripts/check_migration_policy.py +69 -0
- eitohforge-0.1.0/scripts/performance_baseline.py +108 -0
- eitohforge-0.1.0/scripts/validate_packaging_metadata.py +51 -0
- eitohforge-0.1.0/scripts/verify_reproducible_build.py +56 -0
- eitohforge-0.1.0/src/eitohforge_cli/__init__.py +2 -0
- eitohforge-0.1.0/src/eitohforge_cli/commands/__init__.py +2 -0
- eitohforge-0.1.0/src/eitohforge_cli/commands/create.py +87 -0
- eitohforge-0.1.0/src/eitohforge_cli/commands/db.py +99 -0
- eitohforge-0.1.0/src/eitohforge_cli/commands/dev.py +161 -0
- eitohforge-0.1.0/src/eitohforge_cli/main.py +37 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/__init__.py +2 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/application_templates.py +231 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/cache_templates.py +271 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/core_templates.py +15 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/core_templates_auth.py +723 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/core_templates_platform.py +699 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/core_templates_runtime.py +1142 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/core_templates_security.py +282 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/core_templates_validation.py +391 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/crud_templates.py +322 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/external_api_templates.py +188 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/jobs_templates.py +191 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/messaging_templates.py +64 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/notification_templates.py +236 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/search_templates.py +315 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/socket_templates.py +400 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/storage_templates.py +525 -0
- eitohforge-0.1.0/src/eitohforge_cli/template_parts/webhook_templates.py +221 -0
- eitohforge-0.1.0/src/eitohforge_cli/templates.py +1668 -0
- eitohforge-0.1.0/src/eitohforge_sdk/__init__.py +2 -0
- eitohforge-0.1.0/src/eitohforge_sdk/application/__init__.py +14 -0
- eitohforge-0.1.0/src/eitohforge_sdk/application/dto/__init__.py +40 -0
- eitohforge-0.1.0/src/eitohforge_sdk/application/dto/error.py +41 -0
- eitohforge-0.1.0/src/eitohforge_sdk/application/dto/repository.py +116 -0
- eitohforge-0.1.0/src/eitohforge_sdk/application/dto/response.py +55 -0
- eitohforge-0.1.0/src/eitohforge_sdk/application/query_spec_support.py +19 -0
- eitohforge-0.1.0/src/eitohforge_sdk/application/services/__init__.py +6 -0
- eitohforge-0.1.0/src/eitohforge_sdk/application/services/validation.py +68 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/__init__.py +267 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/abac.py +147 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/api_version_deprecation.py +39 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/api_versioning.py +29 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/audit.py +105 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/auth/__init__.py +82 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/auth/jwt.py +292 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/auth/session.py +241 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/auth/sso.py +179 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/auth/sso_adapters.py +147 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/capabilities.py +201 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/config.py +448 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/deployment.py +35 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/error_middleware.py +46 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/error_registry.py +76 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/feature_catalog.py +77 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/feature_flags.py +110 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/forge_application.py +282 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/forge_toggles.py +63 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/health.py +104 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/idempotency.py +159 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/observability.py +186 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/performance.py +58 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/plugins.py +49 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/rate_limit.py +89 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/request_signing.py +154 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/secret_factory.py +29 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/secrets.py +154 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/security.py +114 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/security_context.py +62 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/security_hardening.py +65 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/tenant.py +142 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/validation/__init__.py +45 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/validation/context.py +29 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/validation/contracts.py +23 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/validation/engine.py +51 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/validation/errors.py +45 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/validation/hooks.py +116 -0
- eitohforge-0.1.0/src/eitohforge_sdk/core/validation/rules.py +167 -0
- eitohforge-0.1.0/src/eitohforge_sdk/domain/__init__.py +20 -0
- eitohforge-0.1.0/src/eitohforge_sdk/domain/repositories/__init__.py +6 -0
- eitohforge-0.1.0/src/eitohforge_sdk/domain/repositories/contracts.py +56 -0
- eitohforge-0.1.0/src/eitohforge_sdk/domain/value_objects/__init__.py +16 -0
- eitohforge-0.1.0/src/eitohforge_sdk/domain/value_objects/contact.py +23 -0
- eitohforge-0.1.0/src/eitohforge_sdk/domain/value_objects/errors.py +6 -0
- eitohforge-0.1.0/src/eitohforge_sdk/domain/value_objects/identifiers.py +43 -0
- eitohforge-0.1.0/src/eitohforge_sdk/domain/value_objects/time.py +19 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/__init__.py +179 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/cache/__init__.py +19 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/cache/contracts.py +33 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/cache/factory.py +37 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/cache/invalidation.py +101 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/cache/memory.py +44 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/cache/redis.py +48 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/cache/tenant_scoped.py +43 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/database/__init__.py +24 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/database/factory.py +47 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/database/providers.py +150 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/database/registry.py +33 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/database/transaction.py +53 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/external_api/__init__.py +26 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/external_api/client.py +112 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/external_api/contracts.py +79 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/jobs/__init__.py +20 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/jobs/contracts.py +76 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/jobs/memory.py +118 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/messaging/__init__.py +18 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/messaging/contracts.py +32 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/messaging/dispatcher.py +36 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/messaging/redis_bridge.py +49 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/notifications/__init__.py +36 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/notifications/contracts.py +52 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/notifications/gateway.py +70 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/notifications/template_engine.py +119 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/repositories/__init__.py +6 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/repositories/sqlalchemy_repository.py +373 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/search/__init__.py +23 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/search/contracts.py +65 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/search/factory.py +42 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/search/memory.py +88 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/search/opensearch.py +147 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/sockets/__init__.py +28 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/sockets/auth.py +61 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/sockets/contracts.py +72 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/sockets/hub.py +145 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/sockets/realtime_redis.py +67 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/sockets/realtime_router.py +285 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/sockets/redis_hub.py +214 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/storage/__init__.py +47 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/storage/cdn.py +64 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/storage/contracts.py +44 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/storage/factory.py +50 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/storage/local.py +46 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/storage/policy.py +185 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/storage/s3.py +117 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/storage/tenant_scoped.py +78 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/transactions/__init__.py +20 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/transactions/saga.py +132 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/webhooks/__init__.py +30 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/webhooks/contracts.py +83 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/webhooks/dispatcher.py +113 -0
- eitohforge-0.1.0/src/eitohforge_sdk/infrastructure/webhooks/signing.py +36 -0
- eitohforge-0.1.0/tests/contract/test_api_contracts.py +60 -0
- eitohforge-0.1.0/tests/e2e/test_scaffold_http_journey.py +41 -0
- eitohforge-0.1.0/tests/golden/crud/orders/app__modules__orders____init__.py.golden +10 -0
- eitohforge-0.1.0/tests/golden/crud/orders/app__modules__orders__router.py.golden +47 -0
- eitohforge-0.1.0/tests/golden/crud/orders/app__modules__orders__schema.py.golden +43 -0
- eitohforge-0.1.0/tests/golden/crud/orders/app__modules__orders__service.py.golden +111 -0
- eitohforge-0.1.0/tests/golden/crud/orders/tests__test_orders_crud.py.golden +51 -0
- eitohforge-0.1.0/tests/integration/test_example_projects_smoke.py +39 -0
- eitohforge-0.1.0/tests/integration/test_generated_project.py +199 -0
- eitohforge-0.1.0/tests/migration/test_scaffold_migration_layout.py +24 -0
- eitohforge-0.1.0/tests/performance/test_perf_closure.py +24 -0
- eitohforge-0.1.0/tests/security/test_security_closure.py +56 -0
- eitohforge-0.1.0/tests/unit/test_abac_security.py +48 -0
- eitohforge-0.1.0/tests/unit/test_api_response_models.py +31 -0
- eitohforge-0.1.0/tests/unit/test_api_version_deprecation.py +53 -0
- eitohforge-0.1.0/tests/unit/test_api_versioning.py +31 -0
- eitohforge-0.1.0/tests/unit/test_audit.py +53 -0
- eitohforge-0.1.0/tests/unit/test_background_jobs.py +71 -0
- eitohforge-0.1.0/tests/unit/test_cache_invalidation.py +42 -0
- eitohforge-0.1.0/tests/unit/test_cache_provider.py +120 -0
- eitohforge-0.1.0/tests/unit/test_capabilities.py +94 -0
- eitohforge-0.1.0/tests/unit/test_cli.py +66 -0
- eitohforge-0.1.0/tests/unit/test_cli_create_profile.py +17 -0
- eitohforge-0.1.0/tests/unit/test_config.py +79 -0
- eitohforge-0.1.0/tests/unit/test_crud_templates_golden.py +16 -0
- eitohforge-0.1.0/tests/unit/test_database_provider.py +158 -0
- eitohforge-0.1.0/tests/unit/test_db_commands.py +73 -0
- eitohforge-0.1.0/tests/unit/test_dev_command.py +29 -0
- eitohforge-0.1.0/tests/unit/test_domain_value_objects.py +47 -0
- eitohforge-0.1.0/tests/unit/test_error_middleware.py +40 -0
- eitohforge-0.1.0/tests/unit/test_error_registry.py +28 -0
- eitohforge-0.1.0/tests/unit/test_event_bus.py +39 -0
- eitohforge-0.1.0/tests/unit/test_external_api_client.py +95 -0
- eitohforge-0.1.0/tests/unit/test_feature_flags.py +55 -0
- eitohforge-0.1.0/tests/unit/test_forge_application.py +139 -0
- eitohforge-0.1.0/tests/unit/test_forge_toggles.py +43 -0
- eitohforge-0.1.0/tests/unit/test_health_endpoints.py +36 -0
- eitohforge-0.1.0/tests/unit/test_idempotency.py +68 -0
- eitohforge-0.1.0/tests/unit/test_jwt_manager.py +61 -0
- eitohforge-0.1.0/tests/unit/test_migration_policy_script.py +59 -0
- eitohforge-0.1.0/tests/unit/test_notification_templates.py +101 -0
- eitohforge-0.1.0/tests/unit/test_notifications.py +50 -0
- eitohforge-0.1.0/tests/unit/test_observability.py +123 -0
- eitohforge-0.1.0/tests/unit/test_performance_baseline.py +27 -0
- eitohforge-0.1.0/tests/unit/test_plugin_registry.py +37 -0
- eitohforge-0.1.0/tests/unit/test_query_spec_support.py +30 -0
- eitohforge-0.1.0/tests/unit/test_rate_limit.py +60 -0
- eitohforge-0.1.0/tests/unit/test_rbac_security.py +49 -0
- eitohforge-0.1.0/tests/unit/test_realtime_router.py +134 -0
- eitohforge-0.1.0/tests/unit/test_redis_event_bus.py +31 -0
- eitohforge-0.1.0/tests/unit/test_redis_socket_hub.py +205 -0
- eitohforge-0.1.0/tests/unit/test_repository_contracts.py +83 -0
- eitohforge-0.1.0/tests/unit/test_request_signing.py +116 -0
- eitohforge-0.1.0/tests/unit/test_saga_orchestrator.py +57 -0
- eitohforge-0.1.0/tests/unit/test_search.py +67 -0
- eitohforge-0.1.0/tests/unit/test_secrets.py +79 -0
- eitohforge-0.1.0/tests/unit/test_security_context.py +49 -0
- eitohforge-0.1.0/tests/unit/test_security_hardening.py +49 -0
- eitohforge-0.1.0/tests/unit/test_service_validation_hooks.py +89 -0
- eitohforge-0.1.0/tests/unit/test_session_manager.py +55 -0
- eitohforge-0.1.0/tests/unit/test_socket_infrastructure.py +112 -0
- eitohforge-0.1.0/tests/unit/test_sqlalchemy_repository.py +455 -0
- eitohforge-0.1.0/tests/unit/test_sso_adapters.py +68 -0
- eitohforge-0.1.0/tests/unit/test_sso_broker.py +137 -0
- eitohforge-0.1.0/tests/unit/test_storage_cdn.py +42 -0
- eitohforge-0.1.0/tests/unit/test_storage_policy.py +72 -0
- eitohforge-0.1.0/tests/unit/test_storage_provider.py +191 -0
- eitohforge-0.1.0/tests/unit/test_tenant_context.py +98 -0
- eitohforge-0.1.0/tests/unit/test_tenant_schema_isolation.py +85 -0
- eitohforge-0.1.0/tests/unit/test_transaction_manager.py +62 -0
- eitohforge-0.1.0/tests/unit/test_validation_engine.py +103 -0
- eitohforge-0.1.0/tests/unit/test_validation_rules.py +73 -0
- eitohforge-0.1.0/tests/unit/test_webhooks.py +89 -0
- eitohforge-0.1.0/uv.lock +2269 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
quality:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- name: Checkout
|
|
12
|
+
uses: actions/checkout@v4
|
|
13
|
+
|
|
14
|
+
- name: Setup Python
|
|
15
|
+
uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: "3.12"
|
|
18
|
+
|
|
19
|
+
- name: Install dependencies
|
|
20
|
+
run: |
|
|
21
|
+
python -m pip install --upgrade pip
|
|
22
|
+
pip install -e ".[dev]"
|
|
23
|
+
|
|
24
|
+
- name: Ruff
|
|
25
|
+
run: ruff check .
|
|
26
|
+
|
|
27
|
+
- name: Mypy
|
|
28
|
+
run: mypy src
|
|
29
|
+
|
|
30
|
+
- name: Pytest (with coverage gate)
|
|
31
|
+
run: >
|
|
32
|
+
pytest
|
|
33
|
+
--strict-markers
|
|
34
|
+
--cov=eitohforge_sdk
|
|
35
|
+
--cov=eitohforge_cli
|
|
36
|
+
--cov-fail-under=82
|
|
37
|
+
--cov-report=term-missing
|
|
38
|
+
|
|
39
|
+
- name: Migration policy check
|
|
40
|
+
run: python scripts/check_migration_policy.py
|
|
41
|
+
|
|
42
|
+
- name: Packaging metadata check
|
|
43
|
+
run: python scripts/validate_packaging_metadata.py
|
|
44
|
+
|
|
45
|
+
example-smoke:
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
steps:
|
|
48
|
+
- name: Checkout
|
|
49
|
+
uses: actions/checkout@v4
|
|
50
|
+
|
|
51
|
+
- name: Setup Python
|
|
52
|
+
uses: actions/setup-python@v5
|
|
53
|
+
with:
|
|
54
|
+
python-version: "3.12"
|
|
55
|
+
|
|
56
|
+
- name: Install EitohForge + example packages
|
|
57
|
+
run: |
|
|
58
|
+
python -m pip install --upgrade pip
|
|
59
|
+
pip install -e ".[dev]"
|
|
60
|
+
pip install -e "examples/example-minimal[dev]"
|
|
61
|
+
pip install -e "examples/example-enterprise[dev]"
|
|
62
|
+
|
|
63
|
+
- name: Pytest example-minimal
|
|
64
|
+
run: pytest examples/example-minimal/tests -q
|
|
65
|
+
|
|
66
|
+
- name: Pytest example-enterprise
|
|
67
|
+
run: pytest examples/example-enterprise/tests -q
|
|
68
|
+
|
|
69
|
+
package-build:
|
|
70
|
+
runs-on: ubuntu-latest
|
|
71
|
+
env:
|
|
72
|
+
SOURCE_DATE_EPOCH: "1735689600"
|
|
73
|
+
steps:
|
|
74
|
+
- name: Checkout
|
|
75
|
+
uses: actions/checkout@v4
|
|
76
|
+
|
|
77
|
+
- name: Setup Python
|
|
78
|
+
uses: actions/setup-python@v5
|
|
79
|
+
with:
|
|
80
|
+
python-version: "3.12"
|
|
81
|
+
|
|
82
|
+
- name: Install build dependencies
|
|
83
|
+
run: |
|
|
84
|
+
python -m pip install --upgrade pip
|
|
85
|
+
pip install build twine
|
|
86
|
+
|
|
87
|
+
- name: Build pass A
|
|
88
|
+
run: python -m build --sdist --wheel --outdir dist-pass-a
|
|
89
|
+
|
|
90
|
+
- name: Build pass B
|
|
91
|
+
run: python -m build --sdist --wheel --outdir dist-pass-b
|
|
92
|
+
|
|
93
|
+
- name: Verify reproducibility
|
|
94
|
+
run: python scripts/verify_reproducible_build.py dist-pass-a dist-pass-b
|
|
95
|
+
|
|
96
|
+
- name: Validate distribution metadata
|
|
97
|
+
run: twine check dist-pass-a/*
|
|
98
|
+
|
|
99
|
+
- name: Upload package artifacts
|
|
100
|
+
uses: actions/upload-artifact@v4
|
|
101
|
+
with:
|
|
102
|
+
name: package-artifacts
|
|
103
|
+
path: dist-pass-a/*
|
|
104
|
+
|
|
105
|
+
security-compliance:
|
|
106
|
+
runs-on: ubuntu-latest
|
|
107
|
+
steps:
|
|
108
|
+
- name: Checkout
|
|
109
|
+
uses: actions/checkout@v4
|
|
110
|
+
|
|
111
|
+
- name: Install uv
|
|
112
|
+
uses: astral-sh/setup-uv@v5
|
|
113
|
+
|
|
114
|
+
- name: Setup Python
|
|
115
|
+
uses: actions/setup-python@v5
|
|
116
|
+
with:
|
|
117
|
+
python-version: "3.12"
|
|
118
|
+
|
|
119
|
+
- name: Install project + security/compliance tooling (locked)
|
|
120
|
+
run: uv sync --all-extras --frozen
|
|
121
|
+
|
|
122
|
+
- name: Export requirements for audit (exclude local package)
|
|
123
|
+
run: |
|
|
124
|
+
mkdir -p compliance
|
|
125
|
+
uv export --format requirements-txt --all-extras --no-emit-project --frozen -o compliance/audit-requirements.txt
|
|
126
|
+
|
|
127
|
+
- name: Dependency vulnerability audit
|
|
128
|
+
run: uv run pip-audit --strict -r compliance/audit-requirements.txt
|
|
129
|
+
|
|
130
|
+
- name: Generate SBOM
|
|
131
|
+
run: |
|
|
132
|
+
mkdir -p compliance
|
|
133
|
+
uv run cyclonedx-py environment --output-file compliance/sbom.cdx.json --of JSON
|
|
134
|
+
|
|
135
|
+
- name: Generate dependency licenses report
|
|
136
|
+
run: uv run pip-licenses --format=json --output-file=./compliance/licenses.json
|
|
137
|
+
|
|
138
|
+
- name: Enforce dependency license policy
|
|
139
|
+
run: uv run python scripts/check_license_policy.py
|
|
140
|
+
|
|
141
|
+
- name: Upload compliance artifacts
|
|
142
|
+
uses: actions/upload-artifact@v4
|
|
143
|
+
with:
|
|
144
|
+
name: compliance-artifacts
|
|
145
|
+
path: compliance/*
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
name: Publish Internal Registry
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
dry_run:
|
|
7
|
+
description: "Run build and checks without uploading"
|
|
8
|
+
required: true
|
|
9
|
+
default: true
|
|
10
|
+
type: boolean
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
id-token: write
|
|
15
|
+
attestations: write
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
build:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
env:
|
|
21
|
+
SOURCE_DATE_EPOCH: "1735689600"
|
|
22
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
23
|
+
steps:
|
|
24
|
+
- name: Checkout
|
|
25
|
+
uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: Setup Python
|
|
28
|
+
uses: actions/setup-python@v5
|
|
29
|
+
with:
|
|
30
|
+
python-version: "3.12"
|
|
31
|
+
|
|
32
|
+
- name: Install release tools
|
|
33
|
+
run: |
|
|
34
|
+
python -m pip install --upgrade pip
|
|
35
|
+
pip install -e ".[release]"
|
|
36
|
+
|
|
37
|
+
- name: Build wheel and sdist
|
|
38
|
+
run: python -m build --sdist --wheel
|
|
39
|
+
|
|
40
|
+
- name: Validate distributions
|
|
41
|
+
run: twine check dist/*
|
|
42
|
+
|
|
43
|
+
- name: Upload package artifacts
|
|
44
|
+
uses: actions/upload-artifact@v4
|
|
45
|
+
with:
|
|
46
|
+
name: internal-release-artifacts
|
|
47
|
+
path: dist/*
|
|
48
|
+
|
|
49
|
+
# Skipped on private user-owned repos (GitHub does not persist attestations there).
|
|
50
|
+
- name: Generate provenance attestation
|
|
51
|
+
if: github.repository_visibility == 'public'
|
|
52
|
+
uses: actions/attest-build-provenance@v2
|
|
53
|
+
with:
|
|
54
|
+
subject-path: "dist/*"
|
|
55
|
+
|
|
56
|
+
publish:
|
|
57
|
+
runs-on: ubuntu-latest
|
|
58
|
+
needs: build
|
|
59
|
+
if: ${{ !inputs.dry_run }}
|
|
60
|
+
environment: internal-release
|
|
61
|
+
steps:
|
|
62
|
+
- name: Download build artifacts
|
|
63
|
+
uses: actions/download-artifact@v4
|
|
64
|
+
with:
|
|
65
|
+
name: internal-release-artifacts
|
|
66
|
+
path: dist
|
|
67
|
+
|
|
68
|
+
- name: Setup Python
|
|
69
|
+
uses: actions/setup-python@v5
|
|
70
|
+
with:
|
|
71
|
+
python-version: "3.12"
|
|
72
|
+
|
|
73
|
+
- name: Install twine
|
|
74
|
+
run: |
|
|
75
|
+
python -m pip install --upgrade pip
|
|
76
|
+
pip install twine
|
|
77
|
+
|
|
78
|
+
- name: Publish to internal package registry
|
|
79
|
+
env:
|
|
80
|
+
TWINE_USERNAME: ${{ secrets.INTERNAL_PYPI_USERNAME }}
|
|
81
|
+
TWINE_PASSWORD: ${{ secrets.INTERNAL_PYPI_PASSWORD }}
|
|
82
|
+
INTERNAL_REPOSITORY_URL: ${{ secrets.INTERNAL_PYPI_REPOSITORY_URL }}
|
|
83
|
+
run: |
|
|
84
|
+
test -n "$INTERNAL_REPOSITORY_URL"
|
|
85
|
+
twine upload --repository-url "$INTERNAL_REPOSITORY_URL" dist/*
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
name: Publish PyPI (Guarded)
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
dry_run:
|
|
7
|
+
description: "Run full release checks but do not publish"
|
|
8
|
+
required: true
|
|
9
|
+
default: true
|
|
10
|
+
type: boolean
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
id-token: write
|
|
15
|
+
# Only needed when "Generate provenance attestation" runs (public repos).
|
|
16
|
+
attestations: write
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
build:
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
env:
|
|
22
|
+
SOURCE_DATE_EPOCH: "1735689600"
|
|
23
|
+
# Reduces Node 20 deprecation noise until upstream actions default to Node 24.
|
|
24
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
25
|
+
steps:
|
|
26
|
+
- name: Checkout
|
|
27
|
+
uses: actions/checkout@v4
|
|
28
|
+
|
|
29
|
+
- name: Setup Python
|
|
30
|
+
uses: actions/setup-python@v5
|
|
31
|
+
with:
|
|
32
|
+
python-version: "3.12"
|
|
33
|
+
|
|
34
|
+
- name: Install release tools
|
|
35
|
+
run: |
|
|
36
|
+
python -m pip install --upgrade pip
|
|
37
|
+
pip install -e ".[release]"
|
|
38
|
+
|
|
39
|
+
- name: Build wheel and sdist
|
|
40
|
+
run: python -m build --sdist --wheel
|
|
41
|
+
|
|
42
|
+
- name: Validate package
|
|
43
|
+
run: twine check dist/*
|
|
44
|
+
|
|
45
|
+
- name: Upload package artifacts
|
|
46
|
+
uses: actions/upload-artifact@v4
|
|
47
|
+
with:
|
|
48
|
+
name: pypi-release-artifacts
|
|
49
|
+
path: dist/*
|
|
50
|
+
|
|
51
|
+
# Build attestations are not available for user-owned private repositories.
|
|
52
|
+
# Re-enable when the repo is public (or organization-owned with attestations enabled).
|
|
53
|
+
- name: Generate provenance attestation
|
|
54
|
+
if: github.repository_visibility == 'public'
|
|
55
|
+
uses: actions/attest-build-provenance@v2
|
|
56
|
+
with:
|
|
57
|
+
subject-path: "dist/*"
|
|
58
|
+
|
|
59
|
+
publish:
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
needs: build
|
|
62
|
+
if: ${{ !inputs.dry_run }}
|
|
63
|
+
environment: pypi-release
|
|
64
|
+
steps:
|
|
65
|
+
- name: Download build artifacts
|
|
66
|
+
uses: actions/download-artifact@v4
|
|
67
|
+
with:
|
|
68
|
+
name: pypi-release-artifacts
|
|
69
|
+
path: dist
|
|
70
|
+
|
|
71
|
+
- name: Publish to PyPI
|
|
72
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
73
|
+
with:
|
|
74
|
+
packages-dir: dist
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Contributing to EitohForge
|
|
2
|
+
|
|
3
|
+
## Requirements
|
|
4
|
+
|
|
5
|
+
- Python 3.12+
|
|
6
|
+
- Install dev dependencies from `pyproject.toml`.
|
|
7
|
+
|
|
8
|
+
## Local Workflow
|
|
9
|
+
|
|
10
|
+
1. Run lint checks.
|
|
11
|
+
2. Run type checks.
|
|
12
|
+
3. Run tests.
|
|
13
|
+
4. Update docs when behavior or APIs change.
|
|
14
|
+
|
|
15
|
+
## Quality Gates
|
|
16
|
+
|
|
17
|
+
- Lint must pass.
|
|
18
|
+
- Type checks must pass.
|
|
19
|
+
- Tests must pass.
|
|
20
|
+
- Migration and config-impacting changes must include docs updates.
|
|
21
|
+
- Migration policy check must pass (`python scripts/check_migration_policy.py`).
|
|
22
|
+
|
|
23
|
+
## Migration Safety Rules
|
|
24
|
+
|
|
25
|
+
- Destructive migrations (drop/truncate) are blocked unless explicitly approved.
|
|
26
|
+
- To approve a destructive migration, include this marker in the migration file:
|
|
27
|
+
- `MIGRATION_APPROVED_DESTRUCTIVE`
|
|
28
|
+
|
|
29
|
+
## Coding Rules
|
|
30
|
+
|
|
31
|
+
- Keep domain logic framework-agnostic where possible.
|
|
32
|
+
- Prefer typed contracts over raw dictionaries.
|
|
33
|
+
- Avoid breaking public APIs without explicit versioning and release notes.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: eitohforge
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Enterprise backend SDK and CLI for FastAPI systems.
|
|
5
|
+
Project-URL: Homepage, https://github.com/eitoh-brand/EitohForge
|
|
6
|
+
Project-URL: Repository, https://github.com/eitoh-brand/EitohForge
|
|
7
|
+
Project-URL: Issues, https://github.com/eitoh-brand/EitohForge/issues
|
|
8
|
+
Author: EitohTech
|
|
9
|
+
License: Proprietary
|
|
10
|
+
Keywords: cli,enterprise,fastapi,scaffold,sdk
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Framework :: FastAPI
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Typing :: Typed
|
|
19
|
+
Requires-Python: >=3.12
|
|
20
|
+
Requires-Dist: alembic>=1.16.0
|
|
21
|
+
Requires-Dist: fastapi>=0.116.0
|
|
22
|
+
Requires-Dist: jinja2>=3.1.0
|
|
23
|
+
Requires-Dist: opentelemetry-api>=1.0.0
|
|
24
|
+
Requires-Dist: opentelemetry-exporter-otlp>=1.0.0
|
|
25
|
+
Requires-Dist: opentelemetry-sdk>=1.0.0
|
|
26
|
+
Requires-Dist: prometheus-client>=0.20.0
|
|
27
|
+
Requires-Dist: psycopg[binary]>=3.2.0
|
|
28
|
+
Requires-Dist: pydantic-settings>=2.10.0
|
|
29
|
+
Requires-Dist: pydantic>=2.11.0
|
|
30
|
+
Requires-Dist: pymysql>=1.1.0
|
|
31
|
+
Requires-Dist: redis>=5.0.0
|
|
32
|
+
Requires-Dist: sqlalchemy>=2.0.0
|
|
33
|
+
Requires-Dist: typer>=0.16.0
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: build>=1.2.0; extra == 'dev'
|
|
36
|
+
Requires-Dist: httpx>=0.28.0; extra == 'dev'
|
|
37
|
+
Requires-Dist: mypy>=1.16.0; extra == 'dev'
|
|
38
|
+
Requires-Dist: pytest-cov>=6.2.0; extra == 'dev'
|
|
39
|
+
Requires-Dist: pytest>=8.3.0; extra == 'dev'
|
|
40
|
+
Requires-Dist: ruff>=0.12.0; extra == 'dev'
|
|
41
|
+
Requires-Dist: uvicorn>=0.32.0; extra == 'dev'
|
|
42
|
+
Provides-Extra: release
|
|
43
|
+
Requires-Dist: build>=1.2.0; extra == 'release'
|
|
44
|
+
Requires-Dist: cyclonedx-bom>=4.0.0; extra == 'release'
|
|
45
|
+
Requires-Dist: pip-audit>=2.8.0; extra == 'release'
|
|
46
|
+
Requires-Dist: pip-licenses>=4.4.0; extra == 'release'
|
|
47
|
+
Requires-Dist: twine>=5.1.0; extra == 'release'
|
|
48
|
+
Description-Content-Type: text/markdown
|
|
49
|
+
|
|
50
|
+
# EitohForge
|
|
51
|
+
|
|
52
|
+
EitohForge is an enterprise-focused backend SDK and CLI framework for bootstrapping FastAPI services with strong architecture, security, and operations defaults.
|
|
53
|
+
|
|
54
|
+
## Current State
|
|
55
|
+
|
|
56
|
+
This repository contains an actively implemented enterprise SDK/CLI baseline through Phase 14.
|
|
57
|
+
|
|
58
|
+
## Planned Command
|
|
59
|
+
|
|
60
|
+
`eitohforge create project <name>`
|
|
61
|
+
|
|
62
|
+
## Key Guides
|
|
63
|
+
|
|
64
|
+
- `docs/guides/usage-complete.md`
|
|
65
|
+
- `docs/guides/cookbook.md`
|
|
66
|
+
- `docs/guides/enterprise-readiness-checklist.md`
|
|
67
|
+
- `docs/releases/v0.1.0-rc.md`
|
|
68
|
+
|
|
69
|
+
## Reference examples
|
|
70
|
+
|
|
71
|
+
- `examples/example-minimal/` — smallest SDK-backed app (health + capabilities).
|
|
72
|
+
- `examples/example-enterprise/` — middleware stack, health family, tenant, feature flags.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# EitohForge
|
|
2
|
+
|
|
3
|
+
EitohForge is an enterprise-focused backend SDK and CLI framework for bootstrapping FastAPI services with strong architecture, security, and operations defaults.
|
|
4
|
+
|
|
5
|
+
## Current State
|
|
6
|
+
|
|
7
|
+
This repository contains an actively implemented enterprise SDK/CLI baseline through Phase 14.
|
|
8
|
+
|
|
9
|
+
## Planned Command
|
|
10
|
+
|
|
11
|
+
`eitohforge create project <name>`
|
|
12
|
+
|
|
13
|
+
## Key Guides
|
|
14
|
+
|
|
15
|
+
- `docs/guides/usage-complete.md`
|
|
16
|
+
- `docs/guides/cookbook.md`
|
|
17
|
+
- `docs/guides/enterprise-readiness-checklist.md`
|
|
18
|
+
- `docs/releases/v0.1.0-rc.md`
|
|
19
|
+
|
|
20
|
+
## Reference examples
|
|
21
|
+
|
|
22
|
+
- `examples/example-minimal/` — smallest SDK-backed app (health + capabilities).
|
|
23
|
+
- `examples/example-enterprise/` — middleware stack, health family, tenant, feature flags.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# EitohForge Planning Docs
|
|
2
|
+
|
|
3
|
+
This folder contains the long-term planning and implementation documentation for the EitohForge backend SDK platform.
|
|
4
|
+
|
|
5
|
+
**Blueprint (repository root):** `../secure_backend_sdk_architecture.md` — full A–Z target architecture; the **Appendix — EitohForge implementation map** at the end of that file compares §1–§44 to what is implemented today.
|
|
6
|
+
|
|
7
|
+
## Documents
|
|
8
|
+
|
|
9
|
+
- `roadmap/master-implementation-roadmap.md`
|
|
10
|
+
Full end-to-end phase plan (scope, milestones, acceptance criteria).
|
|
11
|
+
- `roadmap/execution-board.md`
|
|
12
|
+
Task-level execution board with IDs, estimates, dependencies, and done criteria.
|
|
13
|
+
- `roadmap/architecture-coverage-matrix.md`
|
|
14
|
+
Traceability map from all 44 architecture items to tracked tasks.
|
|
15
|
+
- `roadmap/blueprint-completion-waves.md`
|
|
16
|
+
Post-baseline plan to reach L1/L2/L3 depth vs `secure_backend_sdk_architecture.md`; links to Phase 17 tasks (`P17-*`).
|
|
17
|
+
- `standards/engineering-standards.md`
|
|
18
|
+
Coding, validation, migration, security, testing, and release standards.
|
|
19
|
+
- `standards/flaky-test-policy.md`
|
|
20
|
+
Quarantine, ownership, and remediation SLA for flaky tests.
|
|
21
|
+
- `guides/phase-0-and-1-kickoff.md`
|
|
22
|
+
Immediate implementation checklist for getting started.
|
|
23
|
+
- `guides/python-packaging-and-publishing.md`
|
|
24
|
+
Package build, release channels, and publish workflow.
|
|
25
|
+
- `guides/usage-complete.md`
|
|
26
|
+
Full usage: install, config, migrations, auth, plugins, deploy, troubleshooting.
|
|
27
|
+
- `guides/onboarding-qa-simulation.md`
|
|
28
|
+
New-hire / release QA checklist for onboarding without hand-holding.
|
|
29
|
+
- `guides/enterprise-readiness-checklist.md`
|
|
30
|
+
Production and enterprise readiness validation checklist.
|
|
31
|
+
- `guides/enterprise-deployment-and-networking.md`
|
|
32
|
+
SSL/TLS, load balancing, deployment reliability, and HA guidance.
|
|
33
|
+
- `guides/tls-and-cert-rotation-runbook.md`
|
|
34
|
+
Ingress TLS policy, cert lifecycle, and emergency rotation procedure.
|
|
35
|
+
- `guides/mtls-trust-model.md`
|
|
36
|
+
Optional internal mTLS trust domains, identity mapping, and rollout modes.
|
|
37
|
+
- `guides/load-balancing-and-health-routing.md`
|
|
38
|
+
LB architecture, readiness routing policy, and health-check baseline.
|
|
39
|
+
- `guides/deployment-strategies-and-rollback-controls.md`
|
|
40
|
+
Rolling/blue-green/canary playbooks with abort and rollback controls.
|
|
41
|
+
- `guides/testing-and-example-project-strategy.md`
|
|
42
|
+
Test completeness model and reference example project requirements.
|
|
43
|
+
- `guides/repository-contracts-and-dto-boundaries.md`
|
|
44
|
+
Clean architecture repository contract and persistence DTO reference.
|
|
45
|
+
- `guides/query-spec-reference.md`
|
|
46
|
+
`QuerySpec` filter operators, pagination modes, and optional column validation.
|
|
47
|
+
- `guides/cookbook.md`
|
|
48
|
+
Implementation recipes for tenanting, plugins, flags, hardening, and perf checks.
|
|
49
|
+
- `guides/operations-runbook.md`
|
|
50
|
+
Deploy, rollback, SLO, error budget, and incident response baseline.
|
|
51
|
+
- `performance/baseline.md`
|
|
52
|
+
Latest generated baseline benchmark report.
|
|
53
|
+
- `releases/v0.1.0-rc.md`
|
|
54
|
+
Release candidate readiness and validation checklist.
|
|
55
|
+
|
|
56
|
+
## How to Use
|
|
57
|
+
|
|
58
|
+
1. Review `master-implementation-roadmap.md` to confirm scope and sequence.
|
|
59
|
+
2. Validate architecture completeness in `architecture-coverage-matrix.md`.
|
|
60
|
+
3. Execute tasks from `execution-board.md` in dependency order.
|
|
61
|
+
4. Follow `engineering-standards.md` for all PRs and generated templates.
|
|
62
|
+
5. Align release expectations with `python-packaging-and-publishing.md`.
|
|
63
|
+
6. Align deployment posture with `enterprise-deployment-and-networking.md`.
|
|
64
|
+
7. Align test posture with `testing-and-example-project-strategy.md`.
|
|
65
|
+
8. Validate launch quality with `enterprise-readiness-checklist.md`.
|
|
66
|
+
9. Start implementation using `phase-0-and-1-kickoff.md`.
|
|
67
|
+
|
|
68
|
+
## Update Rules
|
|
69
|
+
|
|
70
|
+
- Keep task IDs stable once assigned.
|
|
71
|
+
- Mark task state directly in `execution-board.md`.
|
|
72
|
+
- If scope changes, update both roadmap and execution board in the same change.
|
|
73
|
+
- Keep standards backward compatible unless versioned under a new section.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# ADR 0001: ORM and Migration Strategy
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
Accepted
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
EitohForge needs a production-safe, typed, migration-driven relational persistence baseline that can evolve into polyglot storage later.
|
|
10
|
+
|
|
11
|
+
## Decision
|
|
12
|
+
|
|
13
|
+
- Primary ORM stack: SQLAlchemy 2.x style.
|
|
14
|
+
- Migration tool: Alembic.
|
|
15
|
+
- Primary relational adapter for first release: Postgres.
|
|
16
|
+
- Migration operations are mandatory for schema changes.
|
|
17
|
+
|
|
18
|
+
## Consequences
|
|
19
|
+
|
|
20
|
+
- Strong ecosystem support for enterprise usage.
|
|
21
|
+
- Stable migration workflow with upgrade/downgrade controls.
|
|
22
|
+
- Clear expansion path to other providers through adapter interfaces.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# ADR 0002: Typing and Linting Strategy
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
Accepted
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
The SDK is intended for enterprise-grade adoption and requires strict static guarantees and consistent code quality.
|
|
10
|
+
|
|
11
|
+
## Decision
|
|
12
|
+
|
|
13
|
+
- Type checker: `mypy` in strict mode.
|
|
14
|
+
- Linter/formatter baseline: `ruff`.
|
|
15
|
+
- All public SDK APIs must be explicitly typed.
|
|
16
|
+
- CI blocks merge when lint or type checks fail.
|
|
17
|
+
|
|
18
|
+
## Consequences
|
|
19
|
+
|
|
20
|
+
- Higher initial development discipline.
|
|
21
|
+
- Lower runtime defect rate from type mismatches.
|
|
22
|
+
- More maintainable generated code for downstream teams.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# ADR 0003: Packaging and Publish Strategy
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
Accepted
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
EitohForge must be distributed in a reproducible, enterprise-ready way with predictable installs and release controls.
|
|
10
|
+
|
|
11
|
+
## Decision
|
|
12
|
+
|
|
13
|
+
- Package distribution: single package `eitohforge` (SDK + CLI) for initial releases.
|
|
14
|
+
- Build backend: hatchling via `pyproject.toml`.
|
|
15
|
+
- Artifact formats: `wheel` and `sdist`.
|
|
16
|
+
- Primary publish channel: internal package registry.
|
|
17
|
+
- Optional external channel: PyPI with approval gate.
|
|
18
|
+
|
|
19
|
+
## Consequences
|
|
20
|
+
|
|
21
|
+
- Simplified onboarding (`pip install eitohforge`).
|
|
22
|
+
- Stronger release control through internal-first distribution.
|
|
23
|
+
- Future split into separate `eitohforge-sdk` and `eitohforge-cli` remains possible.
|