Skip to content

chore(deploy): showcase on Vercel + Supabase with the AI service on Vercel - #68

Draft
Fluory wants to merge 6 commits into
mainfrom
claude/chore-showcase-deploy-67
Draft

Fluory wants to merge 6 commits into
mainfrom
claude/chore-showcase-deploy-67

Conversation

@Fluory

@Fluory Fluory commented Sep 26, 2026

Copy link
Copy Markdown
Owner

Warum

Fixes #67 · Teil von Epic #19 (Showcase)

Arbeitsstand

  • Ziel: Öffentlicher Showcase auf den Accounts des Orchestrators. Die Web-App läuft auf Vercel mit Supabase (Frankfurt), der AI-Service als zweites Vercel-Projekt, die Modellaufrufe über einen Gemini-Free-Key als befristete Ausnahme.
  • Nicht-Ziele: eigene Domain, bezahlte Tarife, Vertex/GCP, OCR im Showcase.
  • Erledigt: Vercel-Einstiegsmodul für den AI-Service (test-first, 2 Tests); ADR-Amendment (D11, betrifft D8); Ausnahme in beiden Registern; AGENTS.md; Runbook §0/§3; vercel.json (fra1) und .vercelignore für services/ai.
  • Offen: Vercel-Spike AI-Service (Größe, Kaltstart, eine Extraktion); Supabase-Projekt, Rollen, Bucket; Vercel-Projekt Web-App mit Variablen; Migration, Demo-Konten; Smoke-Test nach Runbook §8.
  • Annahmen: Vercel installiert die Abhängigkeiten aus uv.lock inklusive CPU-torch-Index (der Spike prüft das).
  • Nächster kleinster Schritt: Vercel-Projekt requestflow-ai mit Root services/ai anlegen und das Build-Ergebnis messen.

Was ist passiert (Klartext)

Der Showcase kommt auf Vercel und Supabase statt auf Google Cloud. Der KI-Dienst läuft probeweise ebenfalls auf Vercel. Ob das mit seiner Größe klappt, misst der Test in diesem PR. Die Modellaufrufe laufen vorerst über einen kostenlosen Gemini-Schlüssel. Googles Bedingungen erlauben das für Anwendungen, die Nutzern in der EU angeboten werden, eigentlich nicht, und kostenlose Eingaben können von Menschen gelesen werden. Deshalb ist es als befristete Ausnahme dokumentiert: Der Showcase ist nur per Einladung für den Orchestrator zugänglich, es gibt nur synthetische Daten, und die Ausnahme endet, bevor jemand anderes Zugang bekommt, spätestens am 31.10.2026. Kein Passwort und kein Schlüssel landen im Repo, in einem Issue oder im Chat.

Plan-Pflicht (SYSTEM.md §4)

  • Kein Auslöser – keine Modulgrenze, öffentliche API, Migration, Auth/Rechte, kein Zahlungs-/Daten-/Infrapfad, höchstens zwei Module, keine Architekturvarianten, umkehrbar
  • Auslöser zutreffend – Impact Manifest ausgefüllt (Plan vor Code)

Impact Manifest

  • Betroffene Module: AI-Service (neues Einstiegsmodul requestflow_ai.vercel_app, [tool.vercel], vercel.json, .vercelignore); Doku (ADR-0001, Architekturkarte/Ausnahmen-Register, AGENTS.md, Runbook). Die Web-App bleibt unverändert.
  • Schnittstellen / Datenänderungen: keine Schema- oder API-Änderung. Neu: Infrastruktur, nämlich zwei Vercel-Projekte und ein Supabase-Projekt eu-central-1 mit den Rollen app_owner/app_rw und einem privaten Bucket.
  • Akzeptanzkriterien: die aus chore(deploy): showcase on Vercel + Supabase with the AI service on Vercel and a Gemini free-tier key (exception) #67. Kurz: Amendment und Ausnahme dokumentiert, AI-Service auf Vercel mit Messwerten, Supabase-Rollen ohne Superuser/BYPASSRLS, Web-App mit allen Variablen, Smoke-Test nach §8 grün.
  • Testplan: pytest für das Einstiegsmodul (App vorhanden; ohne Token Abbruch mit ValidationError); Runbook §8 als Smoke-Test mit Ergebnissen hier; Rollenprüfung per SQL.
  • Verifizierte Fakten: Vercel findet Python-Apps über [tool.vercel] entrypoint (Vercel-Doku, abgerufen am 2026-09-26). Der Code unterstützt AI_ALLOW_GEMINI_API_DEV + GEMINI_API_KEY fail-closed (model_client.py). Die lokale .venv des AI-Service ist 1,2 GB groß (Windows, gemessen 2026-09-26). Gemini-Nutzungsbedingungen wie am 2026-09-22 geprüft (ADR-Quellen).
  • Offene Annahmen: Vercel respektiert den CPU-torch-Index aus uv.lock; das Bundle passt in die Funktionsgrenzen; der Kaltstart bleibt deutlich unter dem Laufzeitlimit; das Modell gemini-3.5-flash ist über die Gemini API verfügbar.
  • Nicht-Ziele: Domain, bezahlte Tarife, Vertex, OCR.
  • Risiken und Rollback: Bedingungsverstoß beim Free-Key, begrenzt durch die Ausnahme mit Ablaufdatum. Der Spike kann scheitern, dann geht es auf Cloud Run (Runbook §0). Rollback: Showcase pausieren (Runbook §9), Projekte löschen, Revert-PR.

Geändert

  • services/ai/src/requestflow_ai/vercel_app.py, services/ai/tests/test_vercel_entry.py: Einstiegsmodul mit Tests
  • services/ai/pyproject.toml ([tool.vercel]), services/ai/vercel.json, services/ai/.vercelignore
  • docs/decisions/ADR-0001-pilot-architecture.md: Amendment 2026-09-26, Kopfzeile, Register
  • docs/technical/architecture.md: Eintrag im Ausnahmen-Register
  • docs/technical/deployment-vercel.md: §0 und §3 (AI-Service auf Vercel, Gemini-Key)
  • AGENTS.md: Projektbesonderheit „Gemini free tier“

Nachweis (SYSTEM.md §11)

  • verify:changed: grün – pytest tests/test_vercel_entry.py 2/2; ruff und pyright auf beiden Dateien ohne Befund
  • verify: offen – Draft (CI läuft am PR)
  • verify:full / E2E-Spec: nicht betroffen
  • Manueller Prüfnachweis: folgt (Spike-Messwerte, Smoke-Test nach Runbook §8)
  • Frischer Review (P1 vor Ready-for-review; Architektur/API/DB immer): noch offen

Doku-Entscheidung (genau eine)

  • Keine langlebige Doku betroffen – Begründung: –
  • Doku betroffen und im selben PR aktualisiert:
    • Produktdoku (P0: README): –
    • Technische Doku: docs/technical/deployment-vercel.md
    • Architekturkarte: docs/technical/architecture.md (Ausnahmen-Register)
    • ADR: docs/decisions/ADR-0001-pilot-architecture.md
    • CHANGELOG [Unreleased] (sichtbares Feature oder Verhalten – im selben PR, nie „später")

Entferntes oder Umbenanntes: docs/ + README gegrept, Treffer bereinigt: nichts entfernt

Dateigrößen und neue Bausteine (SYSTEM.md §7)

Dateien über 500 Zeilen im Diff (Ausnahmen: generierter Code, Lockfiles, Fixtures, Migrationen, Schemas, Ressourcen, Doku, Konfiguration):

  • keine
  • bewusst belassen – Begründung: –
  • im selben PR nach fachlicher Verantwortung geteilt
  • Folge-Issue –

Über 800 Zeilen mit neuer Fachlogik oder über 1000 Zeilen (P1/P2): nicht betroffen

Neue Shared-Komponente, Utility-Datei, Adapter oder fachlicher Service:

  • nein
  • ja – gesucht nach: vorhandener App-Erzeugung und Plattform-Einstiegen im AI-Service (create_app, FastAPI(, vercel, uvicorn); gefunden: nur die uvicorn-Factory requestflow_ai.api.app:create_app – das neue Modul vercel_app.py ruft genau diese auf und dupliziert nichts; .vercelignore ist Plattform-Konfiguration, kein Code

Subagent-Einsätze

Keine.

Risiken / offene Punkte

  • Free-Key-Ausnahme: läuft spätestens am 2026-10-31 ab (Ausnahmen-Register).
  • Nutzeraktionen: Gemini-Key und Supabase-S3-Zugang trägt der Orchestrator selbst in Vercel ein.

🤖 Generated with Claude Code

Fluory and others added 2 commits September 26, 2026 21:09
Vercel's Python runtime imports a module-level app; uvicorn uses the
create_app factory. The entry module builds the same app from the
environment and fails at import when a setting is missing (fail-closed).

Refs #67

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…d exception

The orchestrator decided on 2026-09-26 to run the showcase without GCP:
the AI service becomes a second Vercel project (spike) and model calls
use a Gemini API free-tier key. Google's terms require paid services for
API clients offered to EEA users, so the exception is bound to an
invite-only showcase for the orchestrator with synthetic data and
expires before anyone else gets access (at the latest 2026-10-31).
Recorded as ADR-0001 D11 amendment, in both exception tables, AGENTS.md
and the runbook. Vercel config: entrypoint via [tool.vercel], region
fra1, root-anchored .vercelignore (src/requestflow_ai/evals is runtime).

Refs #67

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
requestflow-ai Ready Ready Preview Sep 26, 2026 7:24pm UTC

Fluory and others added 3 commits September 26, 2026 21:15
Vercel resolved [tool.vercel] entrypoint as a file next to pyproject.toml
and failed with PYTHON_ENTRYPOINT_NOT_FOUND (deployment
dpl_28ZxHcH93wmKwuyYWBW1Px2DS7kg): it does not know the src/ layout.
The shim puts src/ on sys.path (no-op when installed) and re-exports the
tested app.

Refs #67

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Also restores the CPU-torch comment above the section it explains.

Refs #67

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Refs #67

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The Python-function route failed on size: bundle 1386 MB against a
500 MB function limit (deployment dpl_EhZt9SnyAgsH84ayhjXWicgqanpA).
Vercel runs OCI images on Functions (beta, up to 15 GB); this file
mirrors ./Dockerfile and reads the port from $PORT because the non-root
user cannot bind Vercel's default port 80.

Refs #67

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

This branch had an error being deployed

1 failed (outdated) and 1 active deployments
Preview — 9862db1b Deployed Sep 26, 2026 by vercel[bot]
Production — 5ef8f123 Deployed Sep 26, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chore(deploy): showcase on Vercel + Supabase with the AI service on Vercel and a Gemini free-tier key (exception)

1 participant