This guide documents the current backend development reality in this repository.
- Build tool: Maven wrapper (
mvnw.cmdon Windows) - Runtime: single Spring Boot application module
- Package root:
com.gerolori.fasteat - Main class:
src/main/java/com/gerolori/fasteat/FasteatApplication.java - Tracking: Beads JSONL in
.beads/issues.jsonl
The project is intentionally single-module-first. Keep implementation inside this layout unless a dedicated late-split task explicitly says otherwise.
fast-eat-backend-springboot/
├── src/
├── .beads/
├── AGENTS.md
├── DEVELOPMENT.md
├── README.md
├── pom.xml
├── mvnw
└── mvnw.cmd
Keep code in src/main/java/com/gerolori/fasteat/... with package-level boundaries such as:
webfor HTTP controllers and API DTOsdomainfor entities and repositoriessecurityfor authentication/authorization componentsplatformandconfigfor operational/framework concerns
These are package boundaries only, not separate Maven modules.
From repository root:
- Run app:
mvnw.cmd spring-boot:run - Unit tests:
mvnw.cmd test - Full verification:
mvnw.cmd verify - Clean verification:
mvnw.cmd clean verify
Use Maven wrapper commands in docs and automation to avoid environment drift.
- Start from
develop(or a task branch/worktree created from it). - Keep each change scoped to the assigned Beads task.
- For docs-only updates, run docs-appropriate verification (for example:
git status --short --branch). - For code changes, run the narrowest relevant Maven command before handoff.
Current enforcement is through mvnw.cmd verify in Maven lifecycle:
- Spotless (
spotless:check) for formatting discipline. - Checkstyle (
maven-checkstyle-plugin:check) for style rules. - SpotBugs (
spotbugs:check) for high-threshold static analysis. - JaCoCo coverage check (line coverage minimum configured in
pom.xml).
Policy for this lane:
- Today: keep
verifygreen for code-impacting work; docs-only work can use docs/beads checks. - Immediate ratchet rule: new or touched files must satisfy existing gates without weakening plugin settings.
- Future ratchet steps (stricter rules, threshold increases, suppression burn-down) happen in dedicated follow-up tasks, each keeping mainline green.
- Avoid broad cleanup-only churn in feature lanes; do cleanup in focused lint-hardening tasks.
This keeps quality checks enforceable now while allowing controlled tightening later.
Redis is intentionally deferred in the current baseline:
- Primary runtime path stays PostgreSQL-first.
docker-compose.ymldoes not currently run a Redis service.- No feature should require Redis availability in current local/CI default flows.
If Redis is introduced later, do it as a scoped follow-up lane:
- Add runtime surface deliberately (Compose service, env contract, and profile documentation).
- Add explicit Spring configuration for the first approved use case (for example cache or session concerns).
- Add verification coverage for the Redis-backed behavior while preserving a safe fallback path.
- Update docs/beads artifacts in the same lane so default expectations remain truthful.
Before pushing a branch with code/config changes, run the same baseline quality gate used in CI:
mvnw.cmd -B verify
For container-related changes (for example Dockerfile or runtime profile wiring), also run a local container build validation:
docker build --file Dockerfile --tag fast-eat-backend:local-check .
If either check fails, fix locally before pushing to avoid CI failures.
For protected integration branches (for example develop/main), require pull requests and require the CI Baseline workflow checks to pass:
verifycontainer-build-validation
Keep the required-check list aligned with .github/workflows/ci-baseline.yml job names.
Module extraction is a future-state decision tracked under late-split planning work.
Until that work is explicitly scheduled:
- do not introduce multi-module build structure,
- do not document module-specific build commands,
- do not treat target split names as current implementation.
If/when split work starts, update this document in the same lane so guidance remains truthful.