Files
oO/services
alvis 430804e9a5 feat(ml): prompt registry + per-request variant selection
Replaces the hardcoded "v1" label with a real prompt registry:

  ml/serving/prompts.py       — keyed by version: v1 (baseline),
                                v2-mentor (calm/specific persona),
                                v3-few-shot (v1 persona + curated examples)
  ml/serving/main.py          — POST /generate accepts optional prompt_version,
                                422 on unknown, echoes the version actually used
                                back in the response
  services/api/src/config.ts  — TIP_PROMPT_VERSION: empty / single / comma-list
                                (uniform random per request)
  services/api/src/routes/recommender.ts
                              — pickPromptVersion() drives selection; the
                                response's prompt_version (not a stale TS
                                constant) is what lands in tip_scores so the
                                #92 reward-analytics dashboard shows real
                                per-variant reaction rates

Closes #84.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 15:44:04 +00:00
..

services/

Backend modules. Each owns a contract and ships its own README.md. In Phase 0 these are internal packages inside a single Node process (ADR-0003); they extract to their own processes as pressure justifies.

Dir Role Phase-0 shape Extracts when
gateway/ BFF for clients; auth check; fan-out in-proc router never (stays as the edge)
auth/ Google OAuth (Apple in M1), sessions, JWT Auth.js behind OIDC shape mobile native ships (M3)
profile/ user profile, preferences, consents in-proc module team ownership diverges
integrations/ connectors + encrypted token vault in-proc module credential blast-radius isolation
recommender/ POST /recommend — policy-driven tip selection in-proc; calls ml/serving from M1 scaling hotspot
events/ event bus + signal log in-proc emitter; bridges to NATS JetStream when NATS_URL set (ADR-0010) always a library + broker, not a service
notifier/ push/email delivery + quiet hours in-proc; web push in M1 SLA divergence or mobile push scale

Contracts that cross module lines (HTTP or events) come from packages/shared-types/. In-module imports across modules are forbidden by import lint.