Scope: backend only. JDK 21 + Spring Boot 4.0.6 + MyBatis-Plus 3.5.16 + Flyway, packaged as a modular monolith. The frontend (Vue 3) lives at
../stackrivet-admin-ui/(separate git repo). Public docs are published at https://stackrivet.zkthink.com/docs. This file is Claude-specific memory;AGENTS.mdis the tool-neutral authority.
- Hard rules for code changes come from
AGENTS.mdanddocs/development-standards.md. - Module boundary is enforced by ArchUnit tests in
stackrivet-app/src/test/. - Public concepts / edition boundaries live in the published docs at https://stackrivet.zkthink.com/docs.
- Public website copy rules do not override backend engineering rules; use them only as product context.
- Database schema lives in Flyway migrations. Table prefix
sr_; never invent schema outside migrations. - API contract: base path
/api/v1; unified response{code, message, data, traceId}; maxpageSize=200.
stackrivet-bom
stackrivet-parent
stackrivet-common ← R<T>, PageR<T>, exceptions, traceId
stackrivet-security ← auth, RBAC, data permissions
stackrivet-system ← user / dept / post / role / menu / dict / param
stackrivet-audit ← operation / login / exception logs
stackrivet-asset ← Asset metadata + StorageAdapter
stackrivet-generator ← code generator
stackrivet-import-export ← Excel / CSV
stackrivet-task ← async task state machine
stackrivet-observability ← Actuator / Micrometer / OTel profile
stackrivet-plugin ← module manifest registry
stackrivet-cli ← thin CLI
stackrivet-demo ← ticket CRUD demo + scheduled-job handler demos
stackrivet-scheduler-snailjob ← optional SnailJob 2.0 adapter (opt-in; NOT an app dependency)
stackrivet-app ← Boot entry + ArchUnit tests
Forbidden cross-cuts (ArchUnit fails the build):
stackrivet-commondepends on anything in StackRivet → cycle.- Controller → Mapper directly → bypasses transaction and audit.
- Returning
Entityfrom Controller → over-exposure and lazy-load risk. stackrivet-demoreferenced by any core module → demos pollute core.
| Layer | Default | Forward |
|---|---|---|
| JDK | 21 | 25 verified in CI |
| Spring Boot | 4.0.6 | 4.1.x when GA (separate branch only) |
| Spring Framework | 7.0.7 | follows Boot BOM |
| Spring Security | 7.0.5 | follows Boot BOM |
| Jackson | 3.x (tools.jackson) |
follows Boot BOM |
| MyBatis-Plus | 3.5.16 (mybatis-plus-spring-boot4-starter) |
follows Boot BOM |
| springdoc | 3.0.3 | follows Boot 4 |
| MySQL | 8.4 LTS | 9.7 LTS smoke |
| PostgreSQL | 18.4 | - |
mvn verify # full reactor
mvn -pl stackrivet-<module> test # single module
mvn -pl stackrivet-app spring-boot:run # run the app
mvn -pl stackrivet-app test -Dtest=ArchitectureTest # boundary check- Build with JDK 21 or later.
maven.compiler.release=21pins the bytecode target, so newer JDKs (25 is verified in CI) compile fine; just make sureJAVA_HOMEpoints at JDK 21+. - Flyway loads
db/migration/common(dialect-neutral) anddb/migration/${stackrivet.db.vendor:mysql}(per-vendor), configured instackrivet-app/src/main/resources/application.yml. Vendor-specific DDL goes in the matching subdirectory; the schema baseline isV1__baseline.sqlin each vendor directory.
For non-trivial changes, start from a public issue/RFC or an explicit PR note that explains scope, non-goals, public API/schema/security impact and verification. Maintainers may mirror accepted decisions into private planning docs, but contributors should not need private docs to review the change.
- Universal AI guide:
AGENTS.md - Machine-readable map:
llms.txt - Backend development standards:
docs/development-standards.md - Public docs: https://stackrivet.zkthink.com/docs
- Frontend implementation rules:
../stackrivet-admin-ui/AGENTS.md