01 Build & Deploy — desktop jasny · persona: klient (owner) · 1440×1280 · linia zgięcia 810 · build b-1042 ok · nad zgięciem: KPI + stepper + written[]
Szukaj widoku, rekordu, komendy… ⌘K

Build & Deploy

aion-marketing · ostatni build b-1042 · 02:55 · 1 m 48 s · serwowany na :3023 · LIVE · 03:07

Pełny log Uruchom gate Rebuild
Articles
4
lejek-dwustopniowy · intencja-nie-keyword · +2 LIVE · 02:55
Authors
2
andrzej-niemiec · aion-niemiec LIVE · 02:55
Pages
5
/ · o-nas · kontakt · realizacje · praktyki LIVE · 02:55
Czas · b-1042
1 m 48 s
data 4,2 · gate 1,1 · astro 96,3 · pagefind 6,4 s LIVE · 02:55

Pipeline npm run build

build b-1042 · trigger directus-webhook · LIVE · 02:55

kroki: data → seo-gate → astro build → pagefind · przerwanie na pierwszym błędzie · dist/ nadpisywany dopiero po udanym astro build

1 krok
data
ok · 4 core + 3 articles 4,2 s
2 krok
seo-gate
ok · 0 blockerów · 4 art. + 2 aut. 1,1 s
3 krok
astro build
ok · 11 stron · dist/ 96,3 s
4 krok
pagefind
ok · 11 stron zaindeksowanych 6,4 s
BuildDataPipelineResult
articles: 4 · authors: 2 · pages: 5
linkGraph: 11 węzłów · 18 krawędzi · orphans: 0
written[] · 7 plików · apps/starter/src/data/
articles.json authors.json pages.json link-graph.json llms.txt sitemap-urls.json webmcp-registry.json
Artefakty pochodne
llms.txt · sitemap-urls: 11 URL
webmcp-registry: 9 narzędzi · packs site-nav, contact, content-credentials

Deploy · PM2 marketing-aionflow-astro

LIVE · 02:56
Status
online · serwuje build b-1042
Port
3023 · 127.0.0.1 · nginx → aion-marketing.pl
Uptime · restarty
6 d 4 h · 0 restartów
Pamięć · CPU
142 MB · 0,4 %
Node · Astro
22.22 · astro 7.2 · pagefind 1.5
cwd
/var/www/aion-marketing.pl/apps/starter

Smoke po deployu

3 żądania · oczekiwane 200LIVE · 02:56
/ 200184 msHTML · 41 kB
/api/webmcp 20096 msGET · JSON · 9 tools
/sitemap.xml 20061 ms11 URL
pm2 restart marketing-aionflow-astro · ~3 s przestoju · wymaga potwierdzenia · smoke uruchamia się automatycznie po restarcie pm2 logs Restart
ci:no-nuxt PASS LIVE · 02:55 node scripts/ci-no-nuxt.mjs · exit 0 · 0 importów nuxt
ci:no-hardcode-analytics PASS LIVE · 02:55 node scripts/ci-no-hardcode-analytics.mjs · exit 0
check-webmcp-html PASS LIVE · 02:55 modelContext + registerTool w dist/index.html · exit 0

Guardy biegną w CI i lokalnie przed astro build. Zielony = dowód komendy z exit 0 i czasem; brak uruchomienia po ostatnim buildzie = UNVERIFIED, nie „stary PASS”.

Historia buildów

ostatnie 5 · retencja logów 30 dni LIVE · 03:07 Eksport
BuildTriggerStartCzasKrokiWynik
b-1042 directus-webhook · articles 26.09 02:55:00 1 m 48 s 4 / 4 ok log
b-1041 manual · owner 25.09 21:14:37 1 m 52 s 4 / 4 ok log
b-1040 cron · 03:00 25.09 03:00:02 1 m 46 s 4 / 4 ok log
b-1039 directus-webhook · globals 24.09 18:32:50 0 m 09 s 1 / 4 FAIL seo-gate · 1 blocker log
b-1038 directus-webhook · globals 24.09 18:20:14 1 m 50 s 4 / 4 ok log
02 Build & Deploy — desktop operator (ciemny) · persona: operator Aion · 1440×1280 · linia zgięcia 810 · build b-1043 FAIL na seo-gate · rozwinięty log + gate-table · guard UNVERIFIED
Szukaj widoku, rekordu, komendy… ⌘K

Build & Deploy

aion-marketing · ostatni build b-1043 · 03:04 · 0 m 09 s · FAIL · seo-gate · serwowany b-1042 z 02:55 · LIVE · 03:07

Pełny log Uruchom gate Rebuild
Articles
4
lejek-dwustopniowy · intencja-nie-keyword · +2 LIVE · 03:04
Authors
2
andrzej-niemiec · aion-niemiec LIVE · 03:04
Pages
5
/ · o-nas · kontakt · realizacje · praktyki LIVE · 03:04
Czas · b-1043
0 m 09 s
przerwano na seo-gate LIVE · 03:04

Pipeline npm run build FAIL · seo-gate

build b-1043 · trigger directus-webhook · LIVE · 03:04

kroki: data → seo-gate → astro build → pagefind · przerwanie na pierwszym błędzie · dist/ nadpisywany dopiero po udanym astro build

1 krok
data
ok · 4 core + 3 articles 4,1 s
2 krok
seo-gate
FAIL · 2 blockery 1,0 s
3 krok
astro build
pominięto
4 krok
pagefind
pominięto
$ node scripts/seo-gate.mjs
OK   lejek-dwustopniowy
OK   intencja-nie-keyword
FAIL nie-sprzedajemy-pakietow: missing description, missing sources
FAIL koszt-pozyskania-klienta-cac: missing description
OK   author andrzej-niemiec
OK   author aion-niemiec
seo-gate: 2 failed → exit 1 · astro build i pagefind pominięte · dist/ z b-1042 nietknięty
RekordBlockery
nie-sprzedajemy-pakietow missing description missing sourcesOtwórz w Directus
koszt-pozyskania-klienta-cac missing descriptionOtwórz w Directus
BuildDataPipelineResult
articles: 4 · authors: 2 · pages: 5
linkGraph: 11 węzłów · 18 krawędzi · orphans: 0
written[] · 7 plików · apps/starter/src/data/
articles.json authors.json pages.json link-graph.json llms.txt sitemap-urls.json webmcp-registry.json
Artefakty pochodne
llms.txt · sitemap-urls: 11 URL
webmcp-registry: 9 narzędzi · packs site-nav, contact, content-credentials

Deploy · PM2 marketing-aionflow-astro

LIVE · 02:56
Status
online · serwuje build b-1042
Port
3023 · 127.0.0.1 · nginx → aion-marketing.pl
Uptime · restarty
6 d 4 h · 0 restartów
Pamięć · CPU
142 MB · 0,4 %
Node · Astro
22.22 · astro 7.2 · pagefind 1.5
cwd
/var/www/aion-marketing.pl/apps/starter

Smoke po deployu

3 żądania · oczekiwane 200LIVE · 02:56
/ 200184 msHTML · 41 kB
/api/webmcp 20096 msGET · JSON · 9 tools
/sitemap.xml 20061 ms11 URL
pm2 restart marketing-aionflow-astro · ~3 s przestoju · wymaga potwierdzenia · smoke uruchamia się automatycznie po restarcie pm2 logs Restart
ci:no-nuxt PASS LIVE · 02:55 node scripts/ci-no-nuxt.mjs · exit 0 · 0 importów nuxt
ci:no-hardcode-analytics PASS LIVE · 02:55 node scripts/ci-no-hardcode-analytics.mjs · exit 0
check-webmcp-html UNVERIFIED UNVERIFIED nie uruchomiono po b-1043 · ostatni PASS 02:55 na dist/ z b-1042

Guardy biegną w CI i lokalnie przed astro build. Zielony = dowód komendy z exit 0 i czasem; brak uruchomienia po ostatnim buildzie = UNVERIFIED, nie „stary PASS”.

Historia buildów

ostatnie 3 · retencja logów 30 dni LIVE · 03:07 Eksport
BuildTriggerStartCzasKrokiWynik
b-1043 directus-webhook · articles 26.09 03:04:11 0 m 09 s 1 / 4 FAIL seo-gate · 2 blockery log
b-1042 directus-webhook · articles 26.09 02:55:00 1 m 48 s 4 / 4 ok log
b-1041 manual · owner 25.09 21:14:37 1 m 52 s 4 / 4 ok log
03 Stany — loading · empty · error · blocked · 1440 × auto · jasny · error = astro build + smoke 502 · blocked = deploy LOCAL-GATED
Loading · skeleton KPI + stepper · żadnych liczb „na oko”
Empty · świeży tenant, zero buildów · checklist runbooka §5

Ten tenant nie ma jeszcze żadnego builda

Brak dist/, brak procesu PM2, brak smoke. Kolejność poniżej odpowiada npm run build z package.json repo — panel odhacza kroki, gdy zobaczy artefakty.

Uruchom pierwszy buildrunbook §5 — build & deploy
  1. modules.json zapisany · pluginy day-oneLIVE · 03:07 · Moduły → Diff & zapis
  2. npm run build:packages@aios/core → seo → articles → images → webmcp → tracking → commerce
  3. npm run data → BuildDataPipelineoczekiwane: written[] 7 plików w src/data
  4. seo-gate bez blockerów · astro build · pagefindgate przerywa build przy pierwszym FAIL
  5. PM2 marketing-aionflow-astro na porcie 3023 + smoke /, /api/webmcp, /sitemap.xmltrzy razy 200 = zielone tile
Error · astro build padł · smoke /api/webmcp 502 · log rozwinięty, retry
Build b-1044astro build zakończony błędem exit 1 LIVE · 03:07
1 krok
data
ok 4,2 s
2 krok
seo-gate
ok · 0 blockerów 1,1 s
3 krok
astro build
FAIL · exit 1 12,8 s
4 krok
pagefind
pominięto
$ astro build
12:00:03 [build] Collecting build info...
12:00:04 [vite] ✗ Build failed in 8.41s
[vite]: Rollup failed to resolve import "../data/link-graph.json" from "src/components/LinkGraph.astro"
→ plik nie został zapisany przez BuildDataPipeline? sprawdź written[] kroku 1 · dist/ z b-1042 nadal serwowany
Rebuild Pełny logModuły → sloty

Deploy · PM2 marketing-aionflow-astro

LIVE · 03:07
Status
online · serwuje build b-1042
Port
3023 · 127.0.0.1 · nginx → aion-marketing.pl
Uptime · restarty
6 d 4 h · 0 restartów
Pamięć · CPU
142 MB · 0,4 %
Node · Astro
22.22 · astro 7.2 · pagefind 1.5
cwd
/var/www/aion-marketing.pl/apps/starter

Smoke po deployu

3 żądania · oczekiwane 200LIVE · 03:07
/ 200184 msHTML · 41 kB
/api/webmcp 5021 204 msostatni 200 · 02:40
/sitemap.xml 20061 ms11 URL
pm2 restart marketing-aionflow-astro · ~3 s przestoju · wymaga potwierdzenia · smoke uruchamia się automatycznie po restarcie pm2 logs Restart
Blocked · deploy LOCAL-GATED · brak dostępu panelu do PM2 · build i smoke działają
Restart z panelu niedostępny BLOCKED · LOCAL-GATED

Panel nie ma agenta PM2 ani klucza SSH do hosta aion-marketing.pl. To decyzja, nie awaria: restart wykonuje operator na serwerze (pm2 restart marketing-aionflow-astro). Build i smoke pozostają dostępne.

Kopiuj komendę Powiadom operatora

Deploy · PM2 marketing-aionflow-astro

LIVE · 03:07
Status
online · serwuje build b-1042
Port
3023 · 127.0.0.1 · nginx → aion-marketing.pl
Uptime · restarty
6 d 4 h · 0 restartów
Pamięć · CPU
142 MB · 0,4 %
Node · Astro
22.22 · astro 7.2 · pagefind 1.5
cwd
/var/www/aion-marketing.pl/apps/starter

Smoke po deployu

3 żądania · oczekiwane 200LIVE · 03:07
/ 200184 msHTML · 41 kB
/api/webmcp 20096 msGET · JSON · 9 tools
/sitemap.xml 20061 ms11 URL
Deploy LOCAL-GATED — panel nie ma dostępu do PM2 (brak agenta / SSH). Smoke działa, restart wykonuje operator z serwera. pm2 logs Restart niedostępny
05 Spec — decyzje · tekst · stepper vs progress · build ≠ deploy · guardy z dowodem · LIVE/UNVERIFIED

Decyzje projektowe — Build & Deploy

  1. Stepper zamiast paska postępu. Cztery kroki data → seo-gate → astro build → pagefind to cztery kafle z nazwą w mono, stanem (ikona + słowo) i czasem. OK jest ciszą (neutralna krawędź); FAIL barwi krawędź i stan; kroki po błędzie są „pominięte” z kreskowaną krawędzią — nigdy „w toku”.
  2. Błąd rozwija się w miejscu. Log kroku (mono, z wyróżnionymi liniami FAIL) i .gate-table z blockerami per rekord pojawiają się bezpośrednio pod stepperem, z deep linkiem „Otwórz w Directus”. Bez modala, bez drawera — operator ma widzieć log obok stanu deployu.
  3. Build ≠ deploy. Karta PM2 mówi wprost, który build jest serwowany (b-1042), nawet gdy ostatni build (b-1043) padł. Smoke to trzy wiersze /, /api/webmcp, /sitemap.xml z kodem, czasem i krótkim dowodem; 200 = ikona check bez koloru, ≠200 = badge critical + „ostatni 200 · hh:mm”.
  4. Restart jest akcją drugorzędną. Nigdy primary; obok zapowiedź przestoju i informacja o automatycznym smoke. W stanie LOCAL-GATED przycisk jest kreskowany z komendą do skopiowania — brak dostępu to stan końcowy, nie „partial done”.
  5. Guardy CI jako StatusTile z dowodem. ci:no-nuxt, ci:no-hardcode-analytics, check-webmcp-html — zielone tylko z komendą, exit 0 i LIVE hh:mm. Guard nieuruchomiony po ostatnim buildzie (02) dostaje UNVERIFIED z kreskowaną krawędzią zamiast starego PASS.
  6. written[] to lista, nie licznik. Siedem ścieżek z BuildDataPipelineResult + artefakty pochodne (llms.txt, sitemap-urls, webmcp-registry) są dowodem pipeline'u; liczby articles/authors/pages idą do StatCard nad zgięciem.
  7. Operator (02) widzi realny fail w kontekście. Zamiast powtarzać szczęśliwą ścieżkę w ciemnym motywie, plansza 02 pokazuje b-1043 z FAIL na seo-gate: stopka menu „build fail · 3 min”, StatCard czasu critical, historia z wierszem FAIL. Stany izolowane (astro error, blocked) są na artboardzie 03.

Co jest badge'em, co ciszą

ElementSygnałKolor
Krok okikona check + „ok · …” + czasbrak (cisza)
Krok FAILkrawędź + „FAIL · n blockerów” + log--critical
Krok pominiętykrawędź kreskowana + „pominięto” + „—”--muted
Smoke 200ikona check + kod + msbrak
Smoke 502badge critical + „ostatni 200 · hh:mm”--critical
Guard PASStile ok + dowód komendy--ok
Guard nieuruchomionytile unknown + UNVERIFIEDkreskowana krawędź
Historia: oktekst „ok” w metabrak
Historia: soft-skip pagefindbadge stale „ok · soft-skip”--warn kreskowany
PM2 onlineikona check + „online · serwuje #”brak
Restart LOCAL-GATEDprzycisk kreskowany + blocked-bannerbrak

Dane LIVE / UNVERIFIED w mocku

DaneŹródłoEtykieta
Kolejność build:packages → data → astro build → pagefind, soft-skip pagefindpackage.json, apps/starter/scripts/pagefind.mjsLIVE
BuildDataPipelineResult {articles, authors, pages, linkGraph, written}packages/core/src/types.tsLIVE
Artefakty llms.txt, sitemap-urls.json, webmcp-registry.json; packs site-nav, contact, content-credentialsapps/starter/scripts/build-data.mjsLIVE
Format logu seo-gate „OK slug / FAIL slug: blockery”, exit 1scripts/seo-gate.mjsLIVE
Guardy ci:no-nuxt, ci:no-hardcode-analytics, check-webmcp-htmlscripts/*.mjsLIVE
Slugi artykułów i autorów, sloty, tenantBRIEF §6 (repo)LIVE
PM2 marketing-aionflow-astro, port 3023zadanie sesji · runbookLIVE (nazwa) · metryki UNVERIFIED
Numery buildów, czasy kroków, latencje smoke, historiamockUNVERIFIED

Komponenty użyte (BRIEF §5)

.stat-card (4 KPI, wariant critical dla czasu przerwanego builda) · .status-tile (3 guardy CI, wariant unknown) · .gate-table (blockery seo-gate inline) · .mode-badge (stopka menu) · .kill-lock (menu) · .empty-checklist, .skeleton, .blocked-banner (03) · stepper i log to komponenty lokalne widoku (.step, .log). Nieużyte: .conceal, .event-stream, .chart-bars, .tabs, .drawer, .diff-panel — brak sekretów, strumienia i diffu w tym widoku.

Hierarchia i fold

Nad zgięciem: nagłówek z numerem ostatniego builda i tym, co jest serwowane, 4 StatCard, pełny stepper z written[]. Deploy + guardy zaraz pod zgięciem, historia na dole. Zagnieżdżenie: karta → kafel kroku / tabela; log jest wnętrzem karty, nie osobną warstwą.

Tokeny — role

accent-cl (01)
accent-op (02)
ok (guardy z dowodem)
warn (soft-skip · stale)
critical (FAIL · 502)
blue (deep linki)
text (ikony stanu neutralne)
muted (pominięto)

Kolor stanu wyłącznie na krawędzi kafla kroku / StatCard, w badge'u i w tekście stanu. Log pozostaje neutralny — linie FAIL są wytłuszczone, nie czerwone; kolor niesie krok i badge nad logiem.