feat(astroklient): własna warstwa danych i pule per konto (PRE-29)

Zmiana wobec pierwszej wersji: demo NIE pracuje już na produkcyjnej warstwie
danych. Ma własną logikę i własne dane, na osobnym udziale astrololo-demo,
pustym na starcie. Oryginalne bazy są dla demo nieosiągalne — nie przez
uprawnienia, tylko dlatego, że nie ma do nich drogi.

DLACZEGO OSOBNA JEST TEŻ WARSTWA LOGICZNA. Zna ona JEDEN adres warstwy danych,
więc astroklient korzystający z produkcyjnej logiki i tak trafiłby na produkcyjne
bazy. Izolacja musi sięgnąć obu warstw naraz, inaczej nie ma jej wcale. Jedyną
różnicą logic-demo wobec produkcyjnej jest DATA_URL — i to jest cała izolacja,
więc wpisanie tam „logic" cofnęłoby ją jednym słowem. Stąd komentarz przy tej
linii i sąsiedztwo obu plików.

PULE PER KONTO. Każde konto demo dostaje własny podkatalog na tym udziale,
niewidoczny dla pozostałych — w liście plików i w wynikach wyszukiwania. Konta
są listą `login:sekret` w sekrecie, bo jedno wspólne oznaczałoby wspólną pulę,
czyli klientów oglądających nawzajem swoje wgrania.

Ten sam OBRAZ co produkcja dla data i logic — różni je wyłącznie konfiguracja.
Osobny obraz to drugi kod do utrzymania i pewność, że kiedyś się rozjadą.

Logika demo nie dostaje kluczy do modeli językowych: astroklient nie umie o nie
prosić, więc nie ma powodu, żeby leżały w tym podzie.

Runbook opisuje IMPORT PULI KLIENTA do pełnej aplikacji — sedno całego układu,
bo klient przechodzący na pełną wersję nie może stracić wgrań. Jego pula to jeden
katalog: sprawdzenie kolizji nazw, kopiowanie z -n (nigdy nadpisania bazy
produkcyjnej), bez pliku stanu (produkcja ma własny), a na końcu świadome
włączenie w zakładce Pliki. Nie włączają się same, bo przeniesienie jest
czynnością techniczną, a decyzja o użyciu należy do właściciela.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-17 18:59:20 +02:00
parent 82c73f6aa5
commit e52284c88f
5 changed files with 280 additions and 56 deletions
+18 -9
View File
@@ -3,10 +3,14 @@
# Osobna usługa o DWÓCH funkcjach: dodanie pliku bazy i zapytanie o interpretację
# urodzeniową. Pozostałe funkcje nie są tu ukryte — nie ma ich w obrazie.
#
# ⚠️ PRACUJE NA PRODUKCYJNEJ WARSTWIE DANYCH (świadoma decyzja właściciela).
# Kto ma dostęp do demo, czyta oryginalne bazy interpretacyjne, a pliki przez nie
# wgrane trafiają do produkcyjnego zbioru. Dlatego konto jest OSOBNE: demo odcina
# się skasowaniem sekretu astrololo-demo, bez ruszania kont głównej aplikacji.
# IZOLACJA (PRE-29): astroklient ma WŁASNĄ warstwę logiczną i WŁASNĄ warstwę
# danych (astroklient-stack.yaml), pracujące na osobnym, pustym na starcie
# udziale. Oryginalne bazy interpretacyjne są dla demo NIEOSIĄGALNE.
#
# Wewnątrz demo każde konto ma własną pulę plików — swój podkatalog na tym
# udziale — niewidoczną dla pozostałych kont. Dzięki temu demo można rozdawać
# szeroko, a pliki jednego klienta da się później przenieść do pełnej aplikacji
# jako jeden katalog (patrz README-astroklient.md).
apiVersion: apps/v1
kind: Deployment
metadata:
@@ -25,15 +29,20 @@ spec:
image: gitea.czernobog.pl/gitea/astrololo-astroklient:latest
ports: [{ containerPort: 8005 }]
env:
# WŁASNA warstwa logiczna, wskazująca na WŁASNĄ warstwę danych.
# Wpisanie tu produkcyjnego `logic` cofnęłoby całą izolację demo
# jednym słowem — dlatego stoi to tuż obok siebie w jednym pliku.
- name: LOGIC_URL
value: "http://logic:8001"
value: "http://logic-demo:8001"
# Konto demo — WŁASNE, nie astrololo-auth. Sekret tworzony POZA repo
# (jak pozostałe), patrz README-astroklient.md.
- name: DEMO_USER
value: "demo"
- name: DEMO_PASSWORD
# KONTA DEMO — lista `login:sekret` po przecinku. Każde konto ma
# WŁASNĄ, niewidoczną dla pozostałych pulę baz (PRE-29), więc jedno
# wspólne konto oznaczałoby klientów oglądających swoje wgrania
# nawzajem. Sekrety najlepiej jako hash scrypt.
- name: DEMO_USERS
valueFrom:
secretKeyRef: { name: astrololo-demo, key: DEMO_PASSWORD }
secretKeyRef: { name: astrololo-demo, key: DEMO_USERS }
# Token międzywarstwowy i klucz łącza — TE SAME co prezentacja:
# demo nie jest furtką omijającą ochronę warstwy logicznej.
- name: INTERNAL_TOKEN