Skip to content

v3.1.0

Choose a tag to compare

@ViniMTrevisan ViniMTrevisan released this 05 Mar 16:54
· 2 commits to main since this release

Release Notes — v3.1.0

Date: 2026-03-05

Summary

Template Quality Pass across all stacks and architectures. This release fixes real bugs discovered during manual walkthrough testing of all generated projects. No CLI commands, prompts, or extension points changed — only the generated template code.


What Changed

Bug Fixes

Java Spring Boot

File Fix
mvc/application.yml Full rewrite — catastrophic YAML indentation cascade made every block nest inside the previous one
mvc/StripeService.java UUID.fromString(userId)userId (ID column is VARCHAR, not UUID)
mvc/PaymentsController.java @AuthenticationPrincipal UserDetailsString userId to match what the JWT filter sets as principal
mvc/SecurityConfig.java Added /api/health to permitAll()
mvc/AuthController.java Map.of()HashMap to allow null name field on registration
hexagonal/application.properties Fixed datasource URL template, JWT secret key, Stripe placeholders
hexagonal/PaymentService.java UUID.fromString(userId)userId
clean/application.properties Fixed datasource URL, jwt.secret key name, Stripe placeholders
clean/PaymentUseCase.java Full rewrite — file was corrupted with garbled text; fixed UUID→String

Python FastAPI

File Fix
mvc/payments.py Wrong import middleware.authmiddleware.security; added get_current_db_user dependency returning ORM instance instead of plain dict
mvc/security.py Added get_current_db_user() function
mvc/item.py Added price: Optional[float] to ItemCreate and ItemResponse
hexagonal/payment_service.py user.stripe_customer_id = x on frozen=True dataclass → dataclasses.replace() (was raising FrozenInstanceError)
hexagonal/stripe_adapter.py stripe.api_key moved from module level into __init__ (was always None because it ran before load_dotenv())
hexagonal/http_adapter.py /login endpoint was using RegisterRequest (mandatory name field) — fixed to use new LoginRequest(email, password)
hexagonal/session.py Added async def get_db() generator — was imported everywhere but never defined
hexagonal/payment_http_adapter.py DI factory used AsyncSessionLocal() directly → Depends(get_db) (session leak)
hexagonal/config.py Added STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, FRONTEND_URL; extra="ignore" to prevent startup crash on extra .env vars; load_dotenv() at top
hexagonal/user.py Added created_at: Optional[datetime] field to frozen dataclass
clean/config.py DB name default {{projectName}}_db{{projectName}}; extra="ignore"
clean/main.py load_dotenv() added before app imports
clean/auth_controller.py Added UserResponse/AuthResponse response models (password hash was leaking); added POST /login endpoint (was missing entirely)
clean/payment_controller.py Wrong import SQLAlchemyUserRepositoryPostgresUserRepository; DI via Depends(get_db)
clean/payment_service.py Import UserRepositoryIUserRepository

NestJS — all 3 architectures

  • docker-compose.yml — removed app service, removed version, added healthcheck
  • Dockerfile — improvements
  • Various controller, service, entity, and module fixes across MVC, Hexagonal, Clean

Node.js Express — all 3 architectures

  • docker-compose.yml — removed app service, removed version, added healthcheck
  • Dockerfile — improvements
  • Dependency and entity fixes across all archs

Next.js MVC

  • docker-compose.yml — DB-only, removed version, added healthcheck
  • Dockerfile — improvements

New Files Added

Stack File Reason
Java Spring Hexagonal JwtFilter.java Was missing — app couldn't start without it
Java Spring Hexagonal SecurityConfig.java Was missing — no request filtering
Java Spring Clean JwtAuthenticationFilter.java Was missing
Java Spring Clean SecurityConfig.java Was missing
Java Spring Clean JpaUserRepository.java Was referenced in code but not in template
Java Spring Clean UserEntity.java Was referenced in code but not in template
Java Spring Clean StripeGateway.java Was referenced in code but not in template
Python FastAPI Hexagonal app/core/ports/__init__.py Was imported but missing
Python FastAPI Hexagonal app/core/ports/user_repository.py Was imported but missing
Python FastAPI Hexagonal app/infrastructure/security/__init__.py Package marker
Python FastAPI Hexagonal app/infrastructure/security/adapters.py Was imported but missing
Python FastAPI Hexagonal app/infrastructure/security/jwt.py Was imported but missing
Python FastAPI Hexagonal app/infrastructure/database/user_repository.py Was imported but missing
Python FastAPI Clean app/infrastructure/security/jwt.py Was imported but missing
Python FastAPI Clean app/domain/usecases/login_user.py Login endpoint existed in controller but no usecase
NestJS (all archs) health.controller.ts Was missing from all NestJS archs
Node.js Express Hexagonal config.ts, prisma.ts.hbs Were missing
Node.js Express Clean config.ts Was missing

Requirements / Dependencies

Stack Change
Python FastAPI (all) Added pydantic[email]>=2.5.0
Python FastAPI (all) Pinned bcrypt>=3.0.0,<4.0.0 — bcrypt 4.x breaks passlib 1.7.4
Python FastAPI Hexagonal/Clean Added greenlet>=3.0.0 (required by async SQLAlchemy)
Python FastAPI Hexagonal Added email-validator>=2.1.0

.gitignore Added to All Templates

12 template directories were missing a .gitignore. Added with sensible defaults for each stack:

  • java-spring (mvc, hexagonal, clean)
  • nestjs (mvc, hexagonal, clean)
  • nodejs-express (mvc, hexagonal, clean)
  • python-fastapi (mvc, hexagonal, clean)

Upgrade Notes

This release only affects generated project output. If you already generated a project with a previous version of Kybernus and hit any of the bugs above, re-generate the project with npx kybernus@latest init or manually apply the fixes from the CHANGELOG.