Loading issues
Architecture epic, foundation step 3 of 5. Depends on A2. Commandments 3, 4 and 8.
Backend
org.springdoc:springdoc-openapi-starter-webmvc-api, the version compatible with Boot 3.5. Expose /api/public/openapi.json (keep it under /api/public/** so routing doesn't change). Disable Swagger UI in production.generateOpenApi that boots the app context in test mode and writes the spec to ../../contracts/openapi.json (the springdoc Gradle plugin, or a test that writes the file).backend.yml that regenerates the spec and fails if git diff --exit-code contracts/openapi.json shows a change.Web
openapi-typescript (dev) and openapi-fetch. Add a script "gen:api": "openapi-typescript ../../contracts/openapi.json -o lib/api/schema.d.ts". Commit the generated file, and fail CI if it's stale.lib/api/client.ts:
createServerClient() forwards the user's Keycloak access token from the Auth.js session (rule 7). No service accounts.domains/README.md describing the domains/<x>/{data,components} structure and the data pattern: data/server.ts (server functions for RSC) plus data/hooks.ts (client hooks, used by PAR-401's cache once it lands).contracts/openapi.json is committed and valid (OpenAPI 3.1).lib/api/schema.d.ts is generated, and a typed call compiles in a sample server function. Remove the sample before merging, or keep it as the README example../gradlew test all pass.Merged into rebuild (PR #41, after one rebase round).
/api/public/openapi.json, behind the bearer guard. It has 54 operations with stable camelCase ids. OpenApiSpecTest boots the real context (Testcontainers), and ./gradlew generateOpenApi writes contracts/openapi.json../gradlew test and the CI drift step. npm run gen:api produces lib/api/schema.d.ts, which CI also drift-checks.lib/api/client.server.ts (server-only, forwards the session token, falls back to guest) and lib/api/client.ts (browser).ReorderReq, now ReorderIssueReq / ReorderStatesReq), and swagger-annotations pinned to 2.2.47 because openai-java shadowed it.RequestContext and Actor are excluded.
Plan: springdoc starter + /api/public/openapi.json (UI off); operationIds/tags on public controllers; OpenApiSpecTest writes contracts/openapi.json (sorted, pretty) when run with -Dopenapi.write=true, otherwise asserts file is current; CI drift check in backend.yml; web: openapi-typescript + openapi-fetch, lib/api/client.ts reusing existing token plumbing, gen:api + ui.yml check, domains/README.md.