The act_runner does not have Buildah installed. Docker is available
via socket forwarding, so use docker build/tag/push instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Single workflow with three jobs:
- backend-test: JDK 25, ./mvnw -B verify (Checkstyle, JUnit, ArchUnit, SpotBugs)
- frontend-test: Node 24, lint, type generation, type-check, unit tests, production build
- build-and-publish: Buildah image build + push with rolling SemVer tags (only on vX.Y.Z tags)
Includes research report and implementation plan.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace server.servlet.context-path=/api with addPathPrefix so API
endpoints stay under /api while static resources and SPA routes are
served at /. Spring Boot falls back to index.html for unknown paths
(SPA forwarding). Multi-stage Dockerfile builds frontend (Node 24)
and backend (Temurin 25) into a single 250MB JRE-alpine image with
Docker-native HEALTHCHECK.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
T-2 was "Dockerfile + configuration" but database connectivity
cannot be meaningfully verified without JPA and migrations (T-4).
Split: T-2 focuses on the multi-stage Dockerfile, T-4 absorbs
DATABASE_URL config, env vars, and docker-compose documentation.
Updated dependency graph and Mermaid diagram accordingly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Check off all T-1 acceptance criteria (retroactively) and the health-check
criterion of T-2. Add methodology rule to CLAUDE.md requiring acceptance
criteria to be checked off when tasks or stories are completed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Backend: openapi-generator-maven-plugin generates Spring interfaces and DTOs
from the spec. Frontend: openapi-typescript + openapi-fetch provide type-safe
API access. Both sides get compile-time contract enforcement from a single
api.yaml file.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Research API-first approach with Spring Boot (openapi-generator-maven-plugin)
and Vue 3 frontend (openapi-typescript + openapi-fetch). Add T-5 setup task
for scaffolding the tooling. Update T-4 to depend on T-5 (removes redundant
API client AC), update implementation phases table and mermaid dependency graph.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove aspirational self-hosting section (docker-compose, config table,
image storage) — will be written when features are actually implemented
- Fix build commands: mvn → ./mvnw, npm test → npm run test:unit
- Remove nonexistent Dockerfile from project structure tree
- Remove Testcontainers from prerequisites (not yet a dependency)
- Add README documentation ACs to US-13 (MAX_ACTIVE_EVENTS) and US-16
(UNSPLASH_API_KEY + volume mount)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove the hand-rolled HealthController and use spring-boot-starter-actuator
instead. Only the health endpoint is exposed, with no detail leakage.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PostToolUse hooks run after every file edit:
- Backend: ./mvnw compile (Checkstyle Google Style + javac)
- Frontend: vue-tsc --noEmit + oxlint + ESLint
Stop hook runs test suites when source files changed, blocks the
agent on failure and re-engages it to fix the issue. Output is
filtered to [ERROR] lines only for context efficiency.
Static analysis: Checkstyle (validate phase), SpotBugs (verify phase),
ArchUnit (9 hexagonal architecture rules as JUnit tests).
Fail-fast: Surefire skipAfterFailureCount=1, Vitest bail=1.
Test log noise suppressed via logback-test.xml (WARN level),
redirectTestOutputToFile, and trimStackTrace.
Existing Java sources reformatted to Google Style (2-space indent,
import order, Javadoc on public types).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Backend: Spring Boot 3.5.11 on Java 25, Maven with wrapper, hexagonal
architecture package layout (domain/application/adapter/config), health
endpoint with integration test. Originally planned for Spring Boot 4.0
but pivoted due to massive package reorganization in 4.0 (see addenda
in research and plan docs).
Frontend: Vue 3 scaffolded via create-vue with TypeScript, Vue Router,
Vitest, ESLint, Prettier. Pivoted from Svelte due to ecosystem maturity
concerns (broken router ecosystem for Svelte 5).
Also: extended .gitignore for Java/Maven and Node/Vue artifacts, updated
CLAUDE.md with tech stack, build commands, agent documentation sections,
and document integrity rule.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>