diff --git a/.cursor/rules/kairo-deployment-testing.mdc b/.cursor/rules/kairo-deployment-testing.mdc index bdb92e3..141a655 100644 --- a/.cursor/rules/kairo-deployment-testing.mdc +++ b/.cursor/rules/kairo-deployment-testing.mdc @@ -19,9 +19,22 @@ Praktische Verifikation erfolgt durch **Deployment auf ein entferntes System (Ra 2. Deployment wird dadurch ausgelöst (CI/Deploy-Pipeline auf dem Raspberry) 3. Dort laufen Migrationen, Backend-Tests und Smoke-Checks gegen echte Infrastruktur +**Dev-Instanz (kein localhost):** [https://dev.kairo.jinkendo.de](https://dev.kairo.jinkendo.de) +Schnellcheck: `GET https://dev.kairo.jinkendo.de/api/health` (Version + DB). + +**Gitea Actions** (Test-Suite läuft nach Deploy automatisch): + +- Übersicht: `http://192.168.2.144:3000/Lars/Kairo-Jinkendo/actions` +- Workflows: `deploy-dev.yml` (Deploy), `test.yml` (pytest, lint, k6, Playwright) +- Filter z. B. `?workflow=test.yml` oder `?workflow=deploy-dev.yml` +- Run-Detail: `/Lars/Kairo-Jinkendo/actions/runs/{id}` + +Nach Push auf `develop`: Deploy-Run grün → Health auf Dev → Test-Suite in Gitea Actions prüfen. + ## Konsequenz für Agenten - Code und Tests **schreiben** und dokumentieren — aber fehlende lokale DB nicht als Implementierungsblocker behandeln - Frontend: `npm test` / `vite build` lokal weiterhin sinnvoll, wenn Node verfügbar -- Backend: nach AP-Umsetzung Abschlussbericht mit „Remote-Verifikation nach Push auf develop“ kennzeichnen +- Backend: Abnahme über Gitea Actions (`test.yml`) + Dev-Health — nicht lokales pytest erzwingen +- Funktionale Checks gegen **https://dev.kairo.jinkendo.de**, nicht localhost - **Nicht** proaktiv committen/pushen, es sei denn, der Nutzer bittet explizit darum diff --git a/backend/version.py b/backend/version.py index 8aaa9ed..825c34d 100644 --- a/backend/version.py +++ b/backend/version.py @@ -1,3 +1,3 @@ -APP_VERSION = "0.16.5-ap1.12a" +APP_VERSION = "0.16.6-ap1.12b" DB_SCHEMA_VERSION = "014" APP_NAME = "jinkendo-kairo" diff --git a/frontend/src/components/BacklogItemForm.jsx b/frontend/src/components/BacklogItemForm.jsx new file mode 100644 index 0000000..4b9b3d2 --- /dev/null +++ b/frontend/src/components/BacklogItemForm.jsx @@ -0,0 +1,102 @@ +import { + BACKLOG_STATUSES, + BACKLOG_STATUS_LABELS, + PRIORITIES, + PRIORITY_LABELS, +} from '../constants/status.js' +import { GateSelect } from './GateSelect.jsx' + +export function BacklogItemForm({ + initial = {}, + roadmapItems = [], + onSubmit, + onCancel, + busy = false, + submitLabel = 'Speichern', + allowStatus = true, +}) { + async function handleSubmit(e) { + e.preventDefault() + const form = e.target + const gateValue = form.roadmap_item_id?.value ?? '' + await onSubmit({ + title: form.title.value.trim(), + description: form.description.value, + status: form.status?.value, + priority: form.priority.value, + roadmap_item_id: gateValue || undefined, + clear_roadmap_item: gateValue === '', + }) + } + + const statusLocked = initial.status === 'converted' + + return ( +
+ +