feat(editor): Taiga-Story und -Tasks aus dem Knoten-Fenster anlegen (D91, #trk.create)

Zwei Aktionen im Knoten-Fenster, nur wo GET /info das Feature meldet
(Lebendprobe-Muster, je Basis einmal gecacht) und nur an Knoten ohne
Ticket-Referenz — die Ref an der Zeile ist der Idempotenz-Marker.
Login-Dialog (type=password, kein window.prompt; nur das Token landet
im Browser, 401 fragt neu), Projekt-Dialog vorbelegt aus dem geerbten
&taiga.<slug>, Häkchen-Dialog nach der D91-Vorbelegung; Refs und ggf.
das Projekt-Schlagwort gehen undo-fähig als Tokens an die Zeilen
(appendToken: vor %% und vor der Fortsetzungsmarke). Regeln headless in
taiga.js (15 neue Tests); Deploy zieht TAIGA_API_URL aus der .env als
WERKBAUM_TAIGA_API_URL in die Server-Umgebung nach (Nutzerwunsch).

E2E im Browser gegen Backend + Taiga-Stub gemessen: Buttons nur ohne
Ref, Vorbelegung Kundenprojekt aus geerbtem Tag, Refs #US-/#T- an den
richtigen Zeilen, Erledigtes uebersprungen, abweichende Projektwahl
schreibt &taiga.mi-intern zurueck, Undo/Redo je Schreibzug, falsches
Passwort bleibt als Taiga-Fehlertext im Dialog.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-27 16:51:10 +02:00
co-authored by Claude Fable 5
parent fd0e730656
commit d1de8758b1
9 changed files with 552 additions and 12 deletions
+17 -1
View File
@@ -74,6 +74,9 @@ DIR="$(env_value BACKEND_DIR)"; DIR="${DIR:-opt/werkbaum}"
JDK_DIR="$(env_value BACKEND_JDK_DIR)"; JDK_DIR="${JDK_DIR:-opt/jdk21}"
PORT="$(env_value BACKEND_PORT)"; PORT="${PORT:-9080}"
XMX="$(env_value BACKEND_XMX)"; XMX="${XMX:-192m}"
# Taiga-Proxy (D91): API-URL aus der lokalen .env; der Deploy zieht sie als
# WERKBAUM_TAIGA_API_URL in die Server-Umgebung nach (leer = nichts anfassen).
TAIGA_API_URL="$(env_value TAIGA_API_URL)"
# Derselbe Pfad in DREI Schreibweisen, weil ihn drei Werkzeuge lesen:
#
@@ -147,7 +150,7 @@ ssh "$SSH_TARGET" "mkdir -p \"$DIR_SH\" \"\$HOME/.config/systemd/user\""
rsync -az --chmod=F644 "$STAGE/werkbaum-backend.service" \
"$SSH_TARGET:~/.config/systemd/user/werkbaum-backend.service"
ssh "$SSH_TARGET" DIR="$DIR_SH" PORT="$PORT" RESTART="$RESTART" 'bash -s' <<'REMOTE'
ssh "$SSH_TARGET" DIR="$DIR_SH" PORT="$PORT" RESTART="$RESTART" TAIGA_URL="$TAIGA_API_URL" 'bash -s' <<'REMOTE'
set -euo pipefail
DIR="$(eval echo "$DIR")"
@@ -188,6 +191,19 @@ ENV
fi
chmod 600 "$DIR/env"
# Taiga-Proxy (D91): Steht TAIGA_API_URL in der lokalen .env, wird genau diese
# eine Zeile hier nachgezogen — idempotent, alles andere (insbesondere der
# Passwort-Hash) bleibt unangetastet. Ohne Wert wird nichts angefasst: Eine von
# Hand gesetzte Server-Zeile soll ein Deploy ohne .env-Eintrag nicht löschen.
if [ -n "${TAIGA_URL:-}" ]; then
if grep -q '^WERKBAUM_TAIGA_API_URL=' "$DIR/env"; then
sed -i "s#^WERKBAUM_TAIGA_API_URL=.*#WERKBAUM_TAIGA_API_URL=${TAIGA_URL}#" "$DIR/env"
else
printf 'WERKBAUM_TAIGA_API_URL=%s\n' "$TAIGA_URL" >> "$DIR/env"
fi
echo " WERKBAUM_TAIGA_API_URL -> ${TAIGA_URL}"
fi
if ! loginctl show-user "$(id -un)" -p Linger 2>/dev/null | grep -q 'Linger=yes'; then
echo " ! Linger ist nicht gesetzt — der Dienst endet mit der Sitzung."
echo " Abhilfe: loginctl enable-linger $(id -un)"