Context
0091 and 0124 say the app manifest is committed. The owner’s framework answer FW6 a (mem L540, 2026-10-20) adds the OpenAPI document and makes the client a CI-published artefact. FW8 sets the deploy-mode targets, which 0148 describes.Decision
openapi.jsonandapp-manifest.jsonare committed to the repository.- The client is built and published in CI. It is not hand-written and is not committed.
- The deploy-mode targets of FW8 are restated here. Their detail is in 0148.
- Gap C1’s remaining questions (the manifest location, the workspace membership of
.stackra/encore, the writer ofinfra.config.json, the cron dev story, and auth-data passing) are not answered here. They go to the register’s Thin list.
Consequences
- A pull request that changes an API shows the change in the committed OpenAPI file.
- A client is always generated from the committed contract, so it cannot drift from the server.
Enforcement
planned —stackra gen --check in CI fails when openapi.json or app-manifest.json is stale, and the client build runs in the release job.
The gen:client task description in turbo.jsonc is a final-pass item (gap B51).
Alternatives
- Only the app manifest committed (0124 decision 4): amended, so the OpenAPI document is reviewable too.
- A hand-written client: rejected, it drifts.
Supersedes and sources
Supersedes: none. Amends: 0091, 0124; 0039 (final pass). Sources: owner framework answers FW6 a and FW8 a (stackra-decisions-2026-10-19.md L540–541, 2026-10-20); gap C1 (remaining questions go to the Thin list).