Development
Run Backbone locally: Docker services, Floci, tests, and Quarkus dev mode.
First-time setup (repository, licence, bootstrap) is in Onboarding.
For GitHub and AWS setup, CDK, and local metrics, see Operations.
For a comprehensive task index, see Cheatsheet.
Table of Contents
- Quick start
- Local services
- Build & Deploy
- Troubleshooting
- Useful Debugging Commands
- Cursor Agent Skills
Quick start
To get started, minus the explanatory commentary in further reading below, issue the following commands:
# local infra
task docker:start -- floci jaeger postgres redis [prometheus grafana]
task dev:floci
task seed:floci
# dev servers
task build:install
mert start
# tests
task test:unit
task seed:it:up
task test:integrationLocal services
1. Docker backing services
Start required Docker services for local development. Floci emulates AWS on :4566 (S3, DynamoDB, SES, SSM, Secrets Manager, Cognito, and more).
Service management
Services can be stopped, started, and restarted individually or all at once:
task docker:restart -- floci jaeger postgres
task docker:start -- floci jaeger postgres
task docker:stop -- floci jaeger postgresService status can be queried with:
task docker:statusProvision Floci resources
Create Floci AWS resources (S3, DynamoDB, Cognito pools → SSM/Secrets) and seed development data:
task dev:floci
task seed:floci2. Integration test fixtures
Seed IT fixtures into Floci Cognito and sync actor identities into Postgres actor.actors (Cognito holds credentials; Postgres holds actor metadata):
task seed:it:upPrerequisites: Service actor-service needs to have been started to create the ACTORS table (via Flyway) in Postgres.
# run all quarkus dev services
mert start
# run actor-service only
task dev:actorTo teardown perf data only (ephemeral testuser* from k6, loaduser* from perf TSV, audit truncate, S3)—not alice/bob/eve:
task seed:perf:downBuild & Deploy
1. Build Tasks
Taskfile provides convenient wrappers around the standard Maven commands:
# Display all available tasks
task
task build:nuke # Delete the Maven build cache + stop mvn daemons
task build:clean
task build:compile
task build:package
task build:install
task test:unit
task test:integration
task test:integration MODULE=services/auth-service # Run a specific module's integration tests
task test:all # Run all unit and integration tests
task test:static # OWASP(NVD)/PMD/SpotBugs/Checkstyle; OSS Index in CI onlyCode coverage
Weekly CI publishes Clover coverage to Codecov. Local runs only write HTML under target/site/clover/ (no upload).
task _clover:unit
task _clover:integration # needs Floci + Postgres, same as the weekly job
task _clover:report # writes target/site/clover/2. Development Runtime
Run services in Quarkus dev mode:
Services/Applications/UIs
mert start # Run all quarkus dev services locally
task dev:audit # Run a single quarkus dev service locally
task dev:auth
task dev:actor
task dev:document
task dev:notification
task dev:bff # actor-bff BFF application
task dev:web # web-actor static/stateless uiQuarkus Servers
Check the status of or kill any running Quarkus server processes:
task quarkus:status
task quarkus:killFor the complete task index, see cheatsheet.md.
Troubleshooting
1. Basic Checks
-
Docker services not starting
- Check Docker/OrbStack is running
- Verify ports are not in use:
task docker:status
-
Quarkus port conflicts
- Check running Quarkus servers:
task quarkus:status - Kill conflicting processes:
task quarkus:kill
- Check running Quarkus servers:
2. Maven Build Errors
- Build cache
- The Maven build cache extension is implemented to improve build times
- This can be unreliable and produce maven build errors, however
- It is generally resolved with the following clean build command, which stops the maven daemon and clears the cache:
task build:clean build:nuke build:installUseful Debugging Commands
1. Floci
- notification-service: ➜
awslocal ses verify-email-identity --email [email protected]· inspect mail:curl http://localhost:4566/_aws/ses - document-service: ➜
awslocal dynamodb describe-table --table-name DOCUMENTS 2>&1 | grep -A 10 "KeySchema" - authenticate Docker to ECR ➜
aws ecr get-login-password --region "$AWS_REGION" \
| docker login --username AWS --password-stdin "$(echo $ECR_URI | cut -d/ -f1)"- actor-service: ➜
docker exec -it postgres psql -U postgres -d backbone -c "DELETE * FROM actor.actors;"
➜POOL_ID=$(awslocal ssm get-parameter --name COGNITO_ACTOR_POOL_ID --query Parameter.Value --output text)
➜awslocal cognito-idp admin-delete-user \ --user-pool-id "$POOL_ID" \ --username '[email protected]'
Cursor Agent Skills
Skills are on-demand playbooks for Cursor Agent (multi-step workflows). Rules stay always-on constraints; skills load only when invoked or when Agent matches your ask to a skill description.
Installed Plinth skills live in this repo:
.agents/skills/— skill folders (committed)skills-lock.json— source (jabrena/plinth) + content hashes (committed)
Spring Boot, Micronaut, Jira, and Azure DevOps skills are intentionally omitted.
1. How to use them
In Agent chat:
- Slash — type
/, search a skill name (e.g.401-frameworks-quarkus-core), run it - Attach — type
@, pick a skill, then ask your question - Automatic — describe the work; Agent may pull a matching skill from its description (less predictable)
Examples that fit Backbone:
| Goal | Skill |
|---|---|
| Quarkus patterns | /401-frameworks-quarkus-core |
| REST resources | /402-frameworks-quarkus-rest |
| Security | /404-frameworks-quarkus-security |
| Maven hygiene | /110-java-maven-best-practices |
| Secure coding | /124-java-secure-coding |
| Unit tests | /421-frameworks-quarkus-testing-unit-tests |
2. Keeping them in sync
Skills are local copies, not live links to GitHub. They do not auto-update.
npx skills update -p -yThat refreshes already installed skills from jabrena/plinth, updates .agents/skills/ and skills-lock.json. Review the diff and commit when you want the team on the new versions.
Removed skills stay removed unless you npx skills add them again.
Next: Operations to deploy with GitHub Actions, OIDC, and CDK.
Updated 5 days ago