01 Ustawienia — desktop jasny · owner · tryb aion · Directus zablokowany

Tożsamość

modules.json · hub clients.jsonLIVE ·
aion-marketing
Aion Marketing
aion-marketing.pl
dev.aion-marketing.pl
ExitHarness i sitemap; hub pilnuje duplikatów między tenantami
aion-marketing
wiąże KB SEO/PPC (user-knowledge) z tenantem
aion-marketing
discovery.aionflow.pl/… · werdykty kill-gate czytane stąd

Członkowie

hub clients.json.members · 2LIVE · zaproszenia w hub
Osoba · subject Aion IDRola
AN
Andrzej Niemiecandrzejniemiec52@gmail.comhttps://id.aionflow.pl/application/o/hub|andrzejniemiec52@gmail.comostatnie logowanie
ownermember
RD
Redakcjaredakcja@aion-marketing.plhttps://id.aionflow.pl/application/o/hub|redakcja@aion-marketing.plostatnie logowanie
ownermember
member = treść + SEO · owner = pełny tenant bez kluczy Directusa

Projekty

clients.json.projects[] · 1
SlugNazwaKontaktdiscoverySlug
aion-marketing-wwwAion Marketing — stronabiuro@aion-marketing.plaion-marketing
projekt = portal klienta w hub /projekt/<slug>

Klucze

.env tenanta · hubpolityka sekretów
AION_TENANT_KEY· ukrytyoperator · owner
••••••••••••••••••••••••••••••••••••
ostatnia rotacja · stary klucz ważny 24 h po rotacjiLIVE · fingerprint 9f3c…e5f6
https://hub.aionflow.pl/api/usage
callout UsageMeter; w standalone pole znika
200 · ostatni flush 02:41 · 128 rekordów
LIVE ·
DIRECTUS_* — tylko operator BLOCKED
URL, token i konto administratora Directusa ustawia operator Aion. Edycję treści robisz w Directusie — link w topbarze.
Otwórz Directus

Sloty i motyw

modules.json.slotsedytuj w Modułach
SlotKomponent Astro
headersite-header
footersite-footer
articlearticle-default
Motyw strony klienta

Tokeny, typografia i komponenty strony aion-marketing.pl żyją w repo tenanta: pilots/aion-marketing/DESIGN.md (Tier 0). Ten panel ich nie edytuje — pokazuje tylko wskaźnik i datę ostatniej zmiany.

Otwórz DESIGN.mdostatnia zmiana · commit b6f2a1c
02 Ustawienia — desktop ciemny · operator · data-theme=operator · DIRECTUS_* · drawer rotacji klucza

Tożsamość

modules.json · hub clients.jsonLIVE ·
aion-marketing
Aion Marketing
aion-marketing.pl
dev.aion-marketing.pl
ExitHarness i sitemap; hub pilnuje duplikatów między tenantami
aion-marketing
wiąże KB SEO/PPC (user-knowledge) z tenantem
aion-marketing
discovery.aionflow.pl/… · werdykty kill-gate czytane stąd

Członkowie

hub clients.json.members · 2LIVE · zaproszenia w hub
Osoba · subject Aion IDRola
AN
Andrzej Niemiecandrzejniemiec52@gmail.comhttps://id.aionflow.pl/application/o/hub|andrzejniemiec52@gmail.comostatnie logowanie
ownermember
RD
Redakcjaredakcja@aion-marketing.plhttps://id.aionflow.pl/application/o/hub|redakcja@aion-marketing.plostatnie logowanie
ownermember
member = treść + SEO · owner = pełny tenant bez kluczy Directusa

Projekty

clients.json.projects[] · 1
SlugNazwaKontaktdiscoverySlug
aion-marketing-wwwAion Marketing — stronabiuro@aion-marketing.plaion-marketing
projekt = portal klienta w hub /projekt/<slug>

Klucze

.env tenanta · hubpolityka sekretów
AION_TENANT_KEY· ukrytyoperator · owner
••••••••••••••••••••••••••••••••••••
ostatnia rotacja · stary klucz ważny 24 h po rotacjiLIVE · fingerprint 9f3c…e5f6
https://hub.aionflow.pl/api/usage
callout UsageMeter; w standalone pole znika
200 · ostatni flush 02:41 · 128 rekordów
LIVE ·

Directus

operatortylko operator · nie trafia do paczki eject
http://127.0.0.1:8055
admin@aion-marketing.pl
DIRECTUS_TOKEN· ukryty
••••••••••••••••••••••••••••••••
static token · rola Administrator · utworzony LIVE ·
03 Ustawienia — stany · loading · empty · error (hub 502 → STALE) · blocked (member)

Loading · skeleton formularza i tabeli

czytam modules.json i hub clients.json… przycisk „Zapisz zmiany” nieaktywny do końca odczytu

Empty · świeży tenant, members [] · sites []

Tenant zarejestrowany, ale bez ludzi i domen

Hub zna aion-marketing, lecz members i sites są puste. Bez ownera nikt poza operatorem nie zaloguje się do panelu; bez domen ExitHarness i sitemap nie mają czego pilnować.

  1. Rejestr hubPOST /api/tenants
  2. Dodaj ownera (Aion ID)members[0].role = owner
  3. Dodaj domenysites: [aion-marketing.pl]
  4. Rotuj klucz startowyAION_TENANT_KEY
runbook §2

Error · hub nieosiągalny, dane z cache jako STALE

Szczegóły

GET https://hub.aionflow.pl/api/tenants/aion-marketing
→ 502 Bad Gateway · 3 próby · 03:12:02
upstream: hub-api (pm2) restarting
członkowie · klucz · modules.json aktualny

Blocked · rola member · sekcje operatora

Ustawienia tylko do odczytu BLOCKED
Zalogowano jako member (redakcja@aion-marketing.pl). Możesz przeglądać tożsamość i członków; klucze i zapis wymagają roli owner.
AION_TENANT_KEYBLOCKED
widoczny dla owner / operator
zapis wymaga roli owner
04 Commerce — kill-gate · owner · profiles [] · werdykt Discovery · read-only podgląd po odblokowaniu

Commerce — zablokowane kill-gate Discovery

Werdykt: kill-gate Discovery — wymaga katalog + inventory + fulfillment. Dopóki Discovery nie potwierdzi trzech warunków i operator nie doda profilu commerce, plugin, pack WebMCP i strony /produkty nie istnieją w tenancie.

  • Katalog — produkty z ceną, wariantami i zdjęciami (min. 1 kategoria)
  • Inventory — źródło stanów magazynowych (ERP / arkusz / Medusa)
  • Fulfillment — kto pakuje i wysyła; zwroty; płatności (Stripe)
Werdykt Discoveryplans/59 · kill-gateoperatorodblokowuje operator po werdykcie
Stan: LIVE · · ostatnia decyzja Discovery : „brak inventory” · packages/commerce/plugin/directus/README.md

Po odblokowaniu pojawi się tutaj

read-only podgląd
Medusa admin center.aionflow.pl
link do panelu sklepu · katalog, zamówienia
Pack WebMCP commerce
narzędzia R/W tier: list_products, cart_add · rejestr w WebMCP
Status Stripe
webhook, tryb test/live, ostatnia płatność

Historia decyzji kill-gate

Discovery · 3discovery.aionflow.pl
werdykt: brak inventory — źródło stanów nieokreślone; katalog 12 pozycji OKDiscovery
werdykt: brak katalogu — usługi bez ceny; rekomendacja: formularz zapytania zamiast koszykaDiscovery
otwarto pytanie kill-gate commerce · plans/59 F21operator

Runbook §7: aios-commerce instaluj tylko, gdy Discovery potwierdzi katalog + inventory + fulfillment i profiles: ["commerce"]. Bez tego nie dodawaj pluginu ani stron /produkty.

05 Ustawienia — Spec · decyzje · sekrety · LIVE/UNVERIFIED · Commerce · role

Spec — Ustawienia tenanta (§2.12) + Commerce (§2.11)

Hierarchia i układ

  1. Tytuł „Ustawienia tenanta” + fakty: tenant, tryb, rola, stan hub (LIVE hh:mm).
  2. Tabs = kotwice sekcji (Tożsamość · Klucze 3 · Członkowie 2 · Projekty 1 · Sloty i motyw · Commerce z kłódką). Aktywny tab = --text, nie akcent.
  3. Split 1:1: lewa — Tożsamość (formularz 2 kolumny) i Członkowie (tabela); prawa — Klucze (conceal ×2–3 + Directus), Projekty, Sloty i motyw.
  4. Nad zgięciem 810: tytuł, tabs, cała Tożsamość, AION_TENANT_KEY i AION_HUB_URL.
  5. Jeden primary CTA: „Zapisz zmiany”. „Otwórz Directus” secondary — Directus zostaje edytorem treści.

Sekrety

  • AION_TENANT_KEY: .conceal ukryty → „Pokaż 5 s” (countdown mono) → „Kopiuj” → „Rotuj” otwiera .drawer (plansza 02) z powodem, fingerprintem, opcją natychmiastowego unieważnienia i ostrzeżeniem o 401 w Pulsie.
  • AION_HUB_URL: owner read-only (kłódka), operator edytuje; w standalone pole znika.
  • DIRECTUS_*: owner widzi .blocked-banner „tylko operator” z jedną CTA (Otwórz Directus); operator widzi URL, e-mail admina i DIRECTUS_TOKEN jako conceal.
  • Nigdy plain text, także w skeletonie i stanach błędu. Fingerprint 9f3c…e5f6 zamiast wartości.

Dane LIVE / UNVERIFIED

PoleŹródłoEtykieta
tenant_id · sites[] · slotsmodules.json tenanta (pilots/aion-marketing/modules.json)LIVE · czas odczytu
nazwa · kb_slug · members[] · projects[] · discoverySlughub data/clients.json przez /api/tenants/<id>LIVE; przy 502 → STALE z czasem cache
subject członkaAion ID: https://id.aionflow.pl/application/o/hub|<email>LIVE (mono, bez skracania)
callout hub 200 / 401POST hub /api/usage ostatni flushLIVE · czas flusha
DESIGN.md klientarepo tenanta, commitwskaźnik + data; panel nie edytuje
Commercemodules.json.profiles + werdykt DiscoveryBLOCKED z werdyktem i datą decyzji

Commerce (§2.11) — osobny artboard 04

  • Widok istnieje w menu (kłódka + tooltip „kill-gate Discovery”), nie znika — użytkownik ma wiedzieć, że gate istnieje i co go otwiera.
  • Strona = .commerce-lock: werdykt „kill-gate Discovery — wymaga katalog + inventory + fulfillment” jako trzy checkboxy, CTA „Werdykt Discovery”, kto odblokowuje (operator), data ostatniej decyzji.
  • Poniżej read-only podgląd tego, co pojawi się po odblokowaniu (Medusa admin, pack WebMCP, Stripe) jako .kill-lock — kreskowane, bez wygaszania opacity.
  • Bez profilu commerce nie ma pluginu, packa ani stron /produkty — panel nie pokazuje pustych tabel produktów.

Role i stany

  • owner (01): edytuje tożsamość, członków, projekty, rotuje klucz; Directus zablokowany.
  • operator (02, ciemny): + tenant switcher, DIRECTUS_*, edycja AION_HUB_URL; drawer rotacji nad treścią (scrim 24 % --text, drawer 360 px na lewo od AionLine).
  • member (03 blocked): read-only, conceal jako BLOCKED, „Zapisz” nieaktywny z powodem.
  • Empty: świeży tenant → checklist runbooka §2 z CTA „Dodaj ownera”.
  • Error: hub 502 → dane z cache jako STALE, zapis wstrzymany, tożsamość z modules.json nadal LIVE.
  • Standalone: znikają Klucze hub (tenant key, hub URL, callout) — zostaje Directus (operator) i BYOK stock w Obrazach.

Komponenty §5 użyte

.tabs · .conceal (ukryty / brak / BLOCKED) · .drawer + .scrim · .blocked-banner · .kill-lock + .toggle--lock · .mode-badge · .empty-checklist · .skeleton · .badge / .state / .verify · .dt (członkowie, projekty, sloty) · .form / .input / .seg / .who · .banner--error + .error-panel. Nie użyto: .status-tile, .stat-card, .chart-bars, .diff-panel (diff manifestu żyje w Modułach), .event-stream, .gate-table.