Skip to content

fix(deploy): build the AI service on Vercel only when services/ai changed - #102

Draft
Fluory wants to merge 2 commits into
mainfrom
claude/fix-ai-build-skip-98
Draft

Fluory wants to merge 2 commits into
mainfrom
claude/fix-ai-build-skip-98

Conversation

@Fluory

@Fluory Fluory commented Sep 28, 2026 •

Copy link
Copy Markdown
Owner

Warum

Refs #98 (repo-seitiger Teil; das Aufräumen der Registry ist eine Konto-Aktion des Orchestrators und bleibt offen)

Arbeitsstand

  • Ziel: Das Vercel-Projekt des KI-Dienstes baut nur, wenn sich unter services/ai/ etwas geändert hat. Damit landen weniger Images in der Container-Registry, und pro Push entstehen weniger Deployments.
  • Nicht-Ziele: Aufräumen der Registry (Konto-Aktion, siehe unten); Build-Regeln des Web-Projekts.
  • Erledigt: ignoreCommand in services/ai/vercel.json, Runbook §3 Schritt 6 (Registry-Grenze und Aufräumen), CHANGELOG.
  • Offen: Freigabe durch den Orchestrator (Infra-Regel: Deploy-Änderungen brauchen eine menschliche Freigabe); danach Merge und Nachweis am nächsten PR ohne KI-Änderung. Folge-Issue infra(vercel): no preview deployments for the AI service project #104 (keine KI-Previews, Deploy-Kontingent).
  • Annahmen: Das Root-Verzeichnis des Projekts requestflow-ai ist services/ai (dort liegt die vercel.json, die Vercel liest; Runbook §3.1).
  • Nächster kleinster Schritt: Freigabe einholen.

Was ist passiert (Klartext)

Bei jeder Änderung – auch an der Web-App oder an Dokumenten – hat Vercel den KI-Dienst neu gebaut und ein neues Image abgelegt. Der kostenlose Plan erlaubt nur eine begrenzte Zahl solcher Images, deshalb schlug der letzte Build fehl. Jetzt wird der KI-Dienst nur noch gebaut, wenn sich wirklich etwas an ihm geändert hat. Die alten Images muss der Kontoinhaber einmal löschen. Wie das geht, steht jetzt im Betriebshandbuch.

Das ist eine Änderung an der Deploy-Konfiguration (services/ai/vercel.json) und braucht deshalb deine Freigabe vor dem Merge. Wichtig für später: Wer eine Einstellung des KI-Dienstes ändert, etwa einen Schlüssel, muss danach neu ausrollen und prüfen, dass das Deployment „Ready“ zeigt. Sonst wird der neue Wert nicht aktiv.

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)

Hinweis: Das ist Deploy-Konfiguration (Infra-Regel: ausdrücklich im Klartext genannt, menschliche Freigabe nötig), aber ohne neuen Infrapfad und per Revert umkehrbar. Ein fehlerhafter Vergleich führt zum Build, nie zum Auslassen.

Geändert

  • services/ai/vercel.json: "ignoreCommand": "git diff --quiet \"${VERCEL_GIT_PREVIOUS_SHA:-HEAD^}\" HEAD -- ./". Exit 0 überspringt den Build, jeder andere Exit-Code (Änderung oder Git-Fehler) baut.
  • docs/technical/deployment-vercel.md §3 Schritt 6: Verhalten, übersprungene Builds, Redeploy muss „Ready“ erreichen, Registry-Grenze, Aufräumen per Dashboard oder vercel vcr image ls/rm --project requestflow-ai; §9: Secret-Rotation und Gemini-Umstieg mit „Ready“-Prüfung
  • CHANGELOG.md

Nachweis (SYSTEM.md §11)

Für den Orchestrator: Registry aufräumen (einmalig, endgültig)

Dashboard: Projekt requestflow-ai → Sandboxes → Container Registry → Repository dockerfile. Dort das Image des aktuellen Produktions-Deployments (dpl_8KqsWUURaQ3wkWF5HnxKfKko6pQs, Commit 9dae5de) und einen Rollback-Kandidaten behalten, ältere löschen. Alternativ per CLI:

npm i -g vercel && vercel login && vercel link --project requestflow-ai   # im Ordner services/ai
vercel vcr image ls dockerfile --limit 100
vercel vcr image rm dockerfile <image-id>

Doku-Entscheidung (genau eine)

  • Keine langlebige Doku betroffen – Begründung: –
  • Doku betroffen und im selben PR aktualisiert:

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: –

Subagent-Einsätze

  • 1 × frischer Review (read-only) – Ergebnis und Umsetzung im PR-Kommentar.

Risiken / offene Punkte

  • Wird die Build-Umgebung von Vercel einmal zu flach geklont und fehlt der Vergleichs-Commit, baut der Befehl. Das ist die sichere Seite.
  • Ein Redeploy nach einer Variablenänderung kann übersprungen werden. Das Runbook verlangt deshalb die Prüfung auf „Ready“ (§3.6, §9).
  • Übersprungene Builds zählen womöglich weiter gegen das Deploy-Kontingent → infra(vercel): no preview deployments for the AI service project #104.

🤖 Generated with Claude Code

…nged (#98)

Every push – main and every PR – built and pushed a new AI image, also for
web-only changes, until the Hobby container registry hit its image limit and
the production build of #95 failed. An ignoreCommand now skips the build
unless services/ai changed since the last successful deployment (else the
parent commit; if git cannot compare, it builds). The runbook names the
registry limit and how to prune it.

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

vercel Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated
requestflow-ai Ignored Ignored Preview Sep 28, 2026 8:42pm UTC

…nest scope

- a redeploy runs the Ignored Build Step too: after rotating a secret or the
  Gemini switch, redeploy without it and check Ready (CANCELED = not active)
- skipped builds may still count against deployment limits: the CHANGELOG no
  longer promises fewer deployments
- first build of a new branch compares only its last commit (AI preview may
  be missing); vcr commands name --project

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

vercel Bot commented Sep 28, 2026

Copy link
Copy Markdown

Deployment failed for project requestflow with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/doc-edit?upgradeToPro=build-rate-limit

@Fluory

Fluory commented Sep 28, 2026

Copy link
Copy Markdown
Owner Author

Frischer Review (unabhängiger Subagent, liest nur, Stand 03a16c8)

Geprüft: Diff, #98, Runbook §3/§9, Infra-Regel, Checkliste, Vercel-Doku, Build-Log dpl_F7yK9tcCW6scUyNsqcCnycRWBfqk, Simulation im depth-10-Klon (Exit 0/1/128).

Bestätigt:

  • ignoreCommand greift beim Container-Projekt: Das Log zeigt Running "git diff --quiet …", danach den Build.
  • Exit 0 bricht ab, Exit ≥ 1 baut; der Befehl läuft im Root Directory, das Quoting ist korrekt.
  • VERCEL_GIT_PREVIOUS_SHA ist der letzte erfolgreiche Deploy des Branches, main baut nach den gescheiterten Builds also nach.
  • Das Image hängt nur an services/ai, contracts/ ist nur ein Export.
  • vercel vcr image ls|rm <repo> <image-id> und das Repository dockerfile stimmen.
  • Der PR führt nichts Destruktives aus.
  1. [Important] – deployment-vercel.md §9 (Secret rotieren, Gemini-Umstieg „redeploy“) – Ein Redeploy von requestflow-ai läuft durch den Ignore-Step (Doku: Checkbox „Use project's Ignore Build Step“). Der Diff ist leer, das Deployment endet als CANCELED. – Ein rotiertes AI_SERVICE_TOKEN oder GEMINI_API_KEY wird nicht aktiv, das geleakte Secret bleibt gültig; der Umstieg bis 2026-10-31 scheitert ohne sichtbaren Fehler. – In §3.6 und §9 ergänzen: beim Redeploy die Checkbox abwählen und prüfen, dass der Status „Ready“ ist.
  2. [Important] – CHANGELOG.md, PR-Ziel – „fewer deployments per push“ ist falsch. Laut Vercel-Doku zählen Builds, die der Ignored Build Step abbricht, voll gegen Deployment-Quota und Build-Slots. – Das Rate-Limit aus infra(ai): Vercel container registry is full – AI service builds fail #98 bleibt, der CHANGELOG beschreibt falsches Verhalten. – Umformulieren („fewer images and builds“); Quota-Entlastung als Folge-Issue (z. B. git.deploymentEnabled für Preview-Branches).
  3. [Note] – Runbook §3.6 – Solange ein Branch keinen erfolgreichen Deploy hat, ist PREVIOUS_SHA leer und verglichen wird nur HEAD^..HEAD: Steckt die KI-Änderung beim ersten Push nicht im letzten Commit, entsteht nie eine KI-Preview. Durch die Klon-Tiefe 10 fehlt der Vergleichs-SHA nach etwa 10 Merges ohne KI-Änderung, dann baut Vercel (sicher, kostet aber ein Image). – Produktion bleibt korrekt, KI-Previews nutzt niemand. – Je ein Satz ins Runbook.
  4. [Note] – Runbook §3.6 – Die Grenze fehlt (Hobby: 50 Images pro Repository). Die CLI-Befehle ohne --project requestflow-ai treffen das verlinkte Projekt, aus dem Repo-Root eventuell das Web-Projekt. – --project und die Zahl ergänzen.
  5. [Note] – PR-Beschreibung – Plan-Pflicht „kein Infrapfad“ ist angehakt, aber .claude/rules/infrastructure.md verlangt für Deploy-Änderungen eine ausdrückliche Nennung im Klartext und eine menschliche Freigabe. – Einen Satz im Klartext ergänzen.

Urteil: „changes requested“ – Zwei Doku-Stellen sind sachlich falsch, eine davon im Pfad zur Secret-Rotation; nach der Korrektur braucht der PR laut Infra-Regel trotzdem eine menschliche Freigabe.


Umsetzung (22b3ada)

# Umsetzung
1 §3.6: „A redeploy runs the same step“ – nach Variablenänderung ohne Ignored Build Step redeployen und Ready prüfen, CANCELED = nicht aktiv. §9: beim Secret-Rotieren und beim Gemini-Umstieg jeweils „Ready, nicht übersprungen“. Formuliert so, dass es gilt, ob der Dialog die Checkbox anbietet oder nicht. Die Checkbox selbst habe ich in der Doku-Suche nicht gefunden.
2 CHANGELOG: „fewer images … and fewer builds“, keine Aussage mehr über weniger Deployments. §3.6: „skipped builds may still count against the plan's deployment limits“. Quota-Entlastung: Folge-Issue #104.
3 §3.6: Ein neuer Branch vergleicht nur seinen letzten Commit, eine KI-Preview kann fehlen, Produktion ist nicht betroffen. Den Klon-Tiefen-Fall deckt „if git cannot compare, it builds“ schon ab.
4 --project requestflow-ai an beiden Befehlen. Die Zahl 50 nenne ich nicht: In der Vercel-Doku-Suche nicht gefunden; das Runbook sagt „a maximum number of images on the Hobby plan“ und nennt die Fehlermeldung.
5 Klartext nennt die Deploy-Änderung und die nötige Freigabe; Plan-Pflicht-Hinweis angepasst. Merge erst nach Freigabe durch den Orchestrator.

This branch had an error being deployed

1 failed (outdated) deployment
Preview – requestflow-ai — 03a16c84 Deployed Sep 28, 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.

1 participant