feat: JobKindConfig fase 3 — mcp live-resolutie + codex-args overrides #59

Merged
janpeter merged 4 commits from claude/job-kind-config-phase3 into main 2026-06-17 09:35:03 +02:00
Owner

Summary

Fase 3 van de JobKindConfig-feature in scrum4me-mcp. Bouwt op fase 1 (shared, PR #21) + de NodeNext .js-fix (shared, PR #22).

  • Submodule vendor/scrum4me-shared7c85a6c (JobKindConfig + resolveRuntimeJobConfig + codex-config + de .js-fix); schema gesynct via sync-schema.
  • buildCodexArgs (src/lib/codex-args.ts) — optionele --model / --sandbox / -c model_reasoning_effort=… overrides. Option B: neemt thinkingBudget en mapt intern via mapBudgetToCodexEffort (uit @shared/codex-config); de runner blijft mapping-vrij. Prompt blijft laatste positionele arg; allowed_tools niet doorgegeven (codex heeft geen poort).
  • getFullJobContext(jobId, runtime) (src/tools/wait-for-job.ts) — live / DB-leading per-kind resolutie via resolveRuntimeJobConfig, vers op claim-time. Best-effort prisma.jobKindConfig.findUnique (synchroon-veilig via Promise.resolve().then(...).catch(...)): een DB-fout of ontbrekende rij degradeert naar KIND_DEFAULTS en blokkeert het claimen nooit. requested_* = override-only. Oude resolveJobConfig-import verwijderd.

Test Plan

  • npm run typecheck (NodeNext) — exit 0 (na de .js-fix in shared)
  • npm test (= typecheck:tests + vitest) — 120 files / 863 tests groen
  • nieuwe wait-for-job-jobkindconfig.test.ts (CLAUDE/CODEX/best-effort/null) + runtime-arg & mock-fix in de review/context-tests
  • buildCodexArgs — 8 cases (flags + prompt-laatst + null-omit)

Runtime-afhankelijkheid

De live-resolutie leest job_kind_config uit de DB. Die tabel + seed komen via web PR #90 (migrate deploy + npm run seed op deploy). Tot dan degradeert de best-effort lookup veilig naar KIND_DEFAULTS (identiek aan het huidige gedrag) — deze PR is dus safe te mergen vóór de DB-deploy.

Volgende fasen: 4 (docker skills + runner), 5 (enqueue stop-freeze), 6 (workers UI).

🤖 Generated with Claude Code

## Summary Fase 3 van de JobKindConfig-feature in **scrum4me-mcp**. Bouwt op fase 1 (shared, PR #21) + de NodeNext `.js`-fix (shared, PR #22). - **Submodule** `vendor/scrum4me-shared` → `7c85a6c` (JobKindConfig + `resolveRuntimeJobConfig` + `codex-config` + de `.js`-fix); schema gesynct via `sync-schema`. - **`buildCodexArgs`** (`src/lib/codex-args.ts`) — optionele `--model` / `--sandbox` / `-c model_reasoning_effort=…` overrides. Option B: neemt `thinkingBudget` en mapt intern via `mapBudgetToCodexEffort` (uit `@shared/codex-config`); de runner blijft mapping-vrij. Prompt blijft laatste positionele arg; `allowed_tools` niet doorgegeven (codex heeft geen poort). - **`getFullJobContext(jobId, runtime)`** (`src/tools/wait-for-job.ts`) — **live / DB-leading** per-kind resolutie via `resolveRuntimeJobConfig`, vers op claim-time. Best-effort `prisma.jobKindConfig.findUnique` (synchroon-veilig via `Promise.resolve().then(...).catch(...)`): een DB-fout of ontbrekende rij degradeert naar `KIND_DEFAULTS` en blokkeert het claimen nooit. `requested_*` = override-only. Oude `resolveJobConfig`-import verwijderd. ## Test Plan - [x] `npm run typecheck` (NodeNext) — exit 0 (na de `.js`-fix in shared) - [x] `npm test` (= `typecheck:tests` + vitest) — **120 files / 863 tests groen** - [x] nieuwe `wait-for-job-jobkindconfig.test.ts` (CLAUDE/CODEX/best-effort/null) + runtime-arg & mock-fix in de review/context-tests - [x] `buildCodexArgs` — 8 cases (flags + prompt-laatst + null-omit) ## Runtime-afhankelijkheid De live-resolutie leest `job_kind_config` uit de DB. Die tabel + seed komen via **web PR #90** (`migrate deploy` + `npm run seed` op deploy). Tot dan degradeert de best-effort lookup veilig naar `KIND_DEFAULTS` (identiek aan het huidige gedrag) — deze PR is dus safe te mergen vóór de DB-deploy. Volgende fasen: 4 (docker skills + runner), 5 (enqueue stop-freeze), 6 (workers UI). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Option B: buildCodexArgs neemt thinkingBudget en mapt intern via
mapBudgetToCodexEffort (uit @shared/codex-config); runner blijft mapping-vrij.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
getFullJobContext(jobId, runtime): best-effort prisma.jobKindConfig.findUnique
(synchroon-veilig) → resolveRuntimeJobConfig uit @shared. requested_* blijft
override-only. Tests: nieuwe jobkindconfig-test + runtime-arg/mock-fix in de
review/context-tests (27 groen).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Picks up de shared .js-extensie-fix zodat mcp's NodeNext-typecheck clean is.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/scrum4me-mcp!59
No description provided.