From a578372abef02a6c7b001df23f4d1fd975cbb634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Such=C3=A1nek?= Date: Mon, 28 Sep 2026 14:06:56 +0200 Subject: [PATCH 1/8] Decisions of 2026-09-28 (later): no rollback and Recovery mode (0166); the Platform Launchpad replaces the resident one without a side-by-side period (0167); the Team Environment works through the Organization's bot and the 0159 exception ends there, strict first-install command (0168) Records three decisions of the Principal in the public decision register and aligns the texts that would otherwise become false: amendment markers on 0049, 0137, 0148, 0159, 0161, 0164 and 0165; the Launchpad lifecycle and Hosted Resident rollback passages of ARCHITECTURE.md; the Team VM sign-in rules of the hosted first-login manual and the workspace root instructions. Co-Authored-By: Claude Fable 5.1 --- ARCHITECTURE.md | 21 ++++++++++++---- .../profiles/workspace/root-instructions.md | 14 +++++------ manual/decision-register.md | 17 +++++++------ manual/hosted-machine-first-login.md | 24 +++++++++---------- 4 files changed, 46 insertions(+), 30 deletions(-) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index c483a8f8..17d5fd32 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -228,7 +228,8 @@ GitHub Team → repository grantu při každém vydání tokenu (fail closed) je cílový kontrakt, který vyžaduje versionovanou změnu `Lazurio/github-app` s testy a migrací existujících policy před rolloutem. Commity z Workspace mají committera `lazurio-for-github[bot]`, autora jako Teamovou -pseudo-identitu a trailer `Lazurio-Workspace: /`; +pseudo-identitu a trailer `Lazurio-Workspace: /` +(cílově vedle něj `Lazurio-Environment: .`, decision 0167); každá změna jde přes pull request otevřený botem s labelem `team:`, který reviewuje a merguje oprávněný Operátor a tím za ni přebírá odpovědnost. Token s `contents: write` umí na nechráněné `main` pushnout i @@ -273,6 +274,14 @@ Launchpad proto používá tři oddělené lifecycle profily: Machine-wide evidence odvozená ze Start/Open kliknutí není konfigurace žádného z těchto profilů. Launchpad ji nevytváří ani nečte. +Launchpad LazurioPlatform, který rezidentní Launchpad nahradí (decision 0167), +tyto profily mění: na Linuxu jsou moduly služby operačního systému, spouští je +Launchpad i CLI `lazurio module …` a restart Launchpadu přežijí; na macOS +zůstávají vázané na session. Spouští moduly z `main`; volba worktree nepatří do +přepnutí hostovaných Mašin a náhled pull requestu je tam otevřená otázka návrhu. +Profily výše platí pro Launchpad instalací Root Repa do jejich migrace +(decision 0164). + ## Runtime Modulu a porty Port je součást verzovaného kontraktu Modulu. „Lease“ v tomto kontextu znamená @@ -381,9 +390,13 @@ LazurioPlatform (nejdřív Linux, potom macOS, Windows po buildu Platformy) a selhání opraví Agent vpřed ve Folderu. Do své migrace Source Root funguje beze změny. Ruční přesun Source Rootu není podporovaný postup. -Hosted Resident profily mohou dál používat verzovaný immutable artefakt s -atomickou aktivací a rollbackem. Ani tam se běžící runtime neaktualizuje -přepisem source checkoutu a artefakt nesmí vytvořit druhou datovou autoritu. +Hosted Resident profily dnes používají verzovaný immutable artefakt s +atomickou aktivací a rollbackem. Cílově podle decision 0166 nemá Lazurio ani +Machines návrat na předchozí verzi jako způsob opravy a rezidentní Launchpad +pracovních Mašin zaniká přepnutím na Launchpad LazurioPlatform (decision 0167); +změnu rolí Machines provede samostatné rozhodnutí Machines. Ani tam se běžící +runtime neaktualizuje přepisem source checkoutu a artefakt nesmí vytvořit druhou +datovou autoritu. Pracovní checkouty aktualizuje jediná explicitní akce `lazurio update`, kterou volá CLI i tlačítko **Synchronizovat**. Postupuje shora dolů přes Lazurio, diff --git a/distribution/profiles/workspace/root-instructions.md b/distribution/profiles/workspace/root-instructions.md index ea8087f5..8ac563a8 100644 --- a/distribution/profiles/workspace/root-instructions.md +++ b/distribution/profiles/workspace/root-instructions.md @@ -44,18 +44,18 @@ textová role ani prompt nevytvářejí druhý ACL. Na hostované pracovní VM Organizace (`/etc/lazurio/lazurio.machine.json`, `machine.kind: workspace-vm`) se před první prací i před `lazurio update` řiď -`manual/hosted-machine-first-login.md` v tomto runtime rootu. Dočasně -(decision 0159) operátor přihlásí `gh` libovolným GitHub účtem; -`owner.assignment` přihlášení neomezuje a jiný účet ani chybějící přiřazení -nejsou blocker. Rozlišovacím znakem postupu je `owner.assignment.kind`: +`manual/hosted-machine-first-login.md` v tomto runtime rootu. Na osobní +pracovní VM dočasně (decision 0159) operátor přihlásí `gh` libovolným GitHub +účtem; `owner.assignment` přihlášení neomezuje a jiný účet ani chybějící +přiřazení nejsou blocker. Rozlišovacím znakem postupu je `owner.assignment.kind`: - `operator`, chybějící nebo neplatné přiřazení: osobní postup. Agent ověří, že `gh` je přihlášený, a řekne operátorovi kterým účtem; přihlášení a přehlášení provede operátor sám (Launchpad → Nastavení → Zdrojové kódy). -- `team` s nasazeným brokerem: GitHub identitou je výhradně bot Organizace +- `team`: GitHub identitou je výhradně bot Organizace `lazurio-for-github[bot]`; osobní přihlášení Agent nespouští ani - nenavrhuje. Bez brokeru postupuje jako na osobní VM a upozorní, že všichni - na VM pracují pod přihlášeným účtem. + nenavrhuje. Chybějící broker je vada Machines k opravě vpřed, ne důvod + přihlásit člověka (decision 0168): Agent zapíše blocker a zastaví se. Nejasný nebo nebezpečný Git stav se neopravuje odhadem: zachová se a předá Kolegovi jako prompt pro Codex. diff --git a/manual/decision-register.md b/manual/decision-register.md index b1ef8d47..543c2ce0 100644 --- a/manual/decision-register.md +++ b/manual/decision-register.md @@ -34,7 +34,7 @@ frameworku se sem nepřenášejí). | 0046 | Gbrain (paměť Buddyho) patří do personalspace, nikdy do firemní organizace. | | 0047 | Dvě surfaces: Launchpad = builder-first lokální; Lazurio Dashboard = hosted admin/user vstup. | | 0048 | Produktové plány Free/Solo/Team/Enterprise a hosting režimy (localhost/hosted/selfhosted). | -| 0049 | Worktree runtime kontrakt: plan-owned worktrees v `.worktrees/`, sidecar metadata, Launchpad spouští aplikace z worktrees. | +| 0049 | Worktree runtime kontrakt: plan-owned worktrees v `.worktrees/`, sidecar metadata, Launchpad spouští aplikace z worktrees. **Změněno rozhodnutím 0167:** Launchpad LazurioPlatform spouští moduly z `main` a worktrees z plánů nevytváří; zdroj z worktree nepatří do přepnutí hostovaných Mašin (náhled pull requestu tam zůstává otevřenou otázkou) a na pracovní stanici je pozdější řez. Plan-owned worktrees a sidecar jako pracovní disciplína Agentů platí dál; Launchpad instalací Root Repa se do jejich migrace nemění. | | 0051 | Struktura Personalspace: privátní repo `/_GEN3` mimo firemní organizace, `personal.gen3.json`, plochá `workspace/`, gbrain jako root vrstva. Organization manifest amendment 0026/0031/0042 tento Personalspace filename ani jeho soukromý rollout nemění. | | 0052 | AI Architekt je placená platformní služba admin vrstvy: navrhuje změny výhradně přes Dashboard apply plány se schválením Organization Admin, nikdy nezapisuje přímo do zákaznického Gitu a nenahrazuje BYOS builder agenty. | | 0059 | Historický root-only kanálový update; pracovní checkout pravidla superseduje decision 0129. Pravomoc vytvořit Release dál určují živá GitHub práva. | @@ -70,7 +70,7 @@ frameworku se sem nepřenášejí). | 0134 | Přesnou otestovanou verzi Bunu pro localhost Lazurio source, CLI a CI vlastní jediné `package.json#packageManager`. Install Core a Doctor porovnávají exact běžící verzi a nesoulad hlásí fail-closed; externí instalace nebo upgrade zůstává explicitně odsouhlasený krok Agenta/instalátoru, nikdy skrytá součást `lazurio update`. Profilové immutable Resident/Buddy toolchain piny mají vlastní artefaktový lifecycle a tato localhost autorita je nepřepisuje. | | 0135 | Aktuálnost vývojových nástrojů je explicitní read-only troubleshooting lane `lazurio doctor --tool-updates`, ne automatický updater ani součást běžného Doctoru. Git, GitHub CLI a Codex musí být dostupné v `PATH`; Claude Code je volitelný a kontroluje se jen na mašinách, kde dostupný je. Nástroje se porovnávají s oficiálním stabilním release zdrojem; update, instalaci nebo změnu `PATH` smí Agent provést až po souhlasu Principála s přesnou externí změnou. Neověřitelná aktuálnost se nehádá a zůstává warning. Bun dál vlastní exact Lazurio pin podle decision 0134, nikoli obecný latest release. | | 0136 | Localhost Lazurio Root leží přímo v OS home. Fresh a Managed target je vždy `/Lazurio` (`~/Lazurio` na macOS/Linuxu, `%USERPROFILE%\Lazurio` na Windows). Lazurio podporuje dva profily: dnešní `source`, kde je ověřený existující home checkout pracovním Rootem a smí do migrace zachovat historický název složky, a budoucí `managed`, kde je canonical target generovaný non-Git Root a volitelný source checkout patří do `/Lazurio/development/Lazurio`. Package/source je oddělená provenance spuštěného CLI. Top-level installer nevytváří picker ani druhý locator; Source → Managed migrace smí začít jen explicitní volbou Principála po complete readiness gate, se zachováním mountů/Git/worktrees/stashů a rollbackem. **Změněno rozhodnutím 0164:** profil `managed` ani Source → Managed migrace s rollbackem se nestaví; instalace Root Repa přecházejí jednosměrně do Lazurio Folderu spravovaného LazurioPlatform. Generátor nevytváří druhou runtime kopii a ruční přesun není podporovaný postup. Source Root mimo přímého potomka home není podporovaná varianta a případná budoucí změna této hranice vyžaduje nové vědomé rozhodnutí, ne rozšíření detekce jako opravu. | -| 0137 | Launchpad je dílna se třemi lifecycle profily. Localhost spouští exact `main` nebo worktree pouze jako session child aktuální Server instance, graceful shutdown ukončí celý managed process tree a žádné poslední kliknutí se po restartu neobnovuje. Hosted část aktualizována v DEV-6579: T3 a Launchpad jsou always-on, výchozí Apps odvozené z Organization manifestů se spouštějí až při Open nebo autentizovaném přímém odkazu. Stop je zastaví do dalšího otevření; health ani katalog je nespouští. Spuštěné Apps se udržují izolovaně v aktuální session, první otevření po cold startu používá `main`; worktree volba žije jen v aktuální session a ingress ji zachovává. Produkce přijímá samostatný reprodukovatelný Build a nepoužívá Launchpad ani worktrees. Click-derived desired evidence, service catalog ani jeho controller nejsou autoritou žádného profilu. | +| 0137 | Launchpad je dílna se třemi lifecycle profily. Localhost spouští exact `main` nebo worktree pouze jako session child aktuální Server instance, graceful shutdown ukončí celý managed process tree a žádné poslední kliknutí se po restartu neobnovuje. Hosted část aktualizována v DEV-6579: T3 a Launchpad jsou always-on, výchozí Apps odvozené z Organization manifestů se spouštějí až při Open nebo autentizovaném přímém odkazu. Stop je zastaví do dalšího otevření; health ani katalog je nespouští. Spuštěné Apps se udržují izolovaně v aktuální session, první otevření po cold startu používá `main`; worktree volba žije jen v aktuální session a ingress ji zachovává. Produkce přijímá samostatný reprodukovatelný Build a nepoužívá Launchpad ani worktrees. Click-derived desired evidence, service catalog ani jeho controller nejsou autoritou žádného profilu. **Změněno rozhodnutím 0167:** v Launchpadu LazurioPlatform jsou moduly na Linuxu služby operačního systému a restart Launchpadu přežijí; na macOS zůstávají vázané na session. Volba worktree v hostované session se do přepnutí nepřebírá (náhled pull requestu je otevřená otázka). Launchpad instalací Root Repa se do jejich migrace řídí tímto rozhodnutím beze změny. | | 0138 | Explicitní `lazurio organization install` je jediná bounded bootstrap autorita pro aktivní root-space `mission-control/db` deklarovaný jako `repository_db_mount`: až po materializaci právě jednoho aktivního installer-managed parent Git repozitáře smí z Organization-owned remote a přesné branche atomicky doplnit chybějící checkout. Je-li deklarovaná Mission Control app/data hranice neúplná, neaktivní nebo pod jiným materializačním kontraktem, install fail-closed skončí `blocked`; nesmí hlásit konvergenci bez dat. Ignore se dokazuje v parent repozitáři, ne jen v Organization rootu; existující checkout musí být čistý a odpovídat exact remote/branch. Installer jej nefetchuje ani nefast-forwarduje a nezískává commit/publish oprávnění; obecný `lazurio update`, worktrees, Productionspace a jiné repository-db mounty zůstávají beze změny mimo tuto autoritu. | | 0139 | GitHub Issues přesného owning repa jsou jedinou autoritou otevřených technických problémů a nejistot; visibility a živá GitHub práva zachovávají repo a Organization access hranici. Mission Control dál vlastní plán, prioritu, odpovědnost a stav realizace. Vytvoření issue nebo komentáře je Publikace, proto vyžaduje explicitní mandát Principála, kontrolu duplicit a sanitizaci; bez bezpečného cíle vznikne jen handoff draft. **Změněno rozhodnutím 0163:** zapsat issue je trvalý mandát Task Agenta bez předchozího dotazu; kontrola duplicit, sanitizace a handoff draft při nejistém cíli platí dál. Legacy `ISSUES.open.json` a `ISSUES.resolved.json` jsou zmrazený jednorázový migrační vstup bez synchronizace nebo nové autority. | | 0140 | Onboarding nové pracovní Mašiny má před Organization materializací jediný top-level toolchain gate. Git, GitHub CLI, Codex CLI, Node a přesně pinovaný Bun nejsou připravené pouhou přítomností binárky ani úspěchem ve zděděné instalační relaci: jejich příkazy musí být dostupné v uživatelském `PATH` nového čistého procesu. Install Core váže Bun, Git a GitHub CLI na skutečně ověřený executable a GitHub stav nevydá za hotový bez `git_protocol=ssh`; běžný Doctor spouští Bun i `bun x`, Git, GitHub CLI, GitHub auth s SSH protokolem, Node a Codex a tool-update lane failuje na chybějící či nečitelném povinném nástroji. Instalační Agent smí oficiální instalaci a nejmenší uživatelskou `PATH` změnu provést jen s explicitním mandátem pro přesné nástroje, zachová existující položky a nezasahuje do system-wide `PATH`, package manageru ani cizích verzí bez dalšího souhlasu. Nový GitHub účet páruje jednou přes `gh auth login --git-protocol ssh`, ale hotový SSH transport dokazuje až exact `git ls-remote`. `lazurio organization install` materializuje Organizaci až po gate a samo systémové nástroje ani `PATH` nevlastní. | @@ -81,7 +81,7 @@ frameworku se sem nepřenášejí). | 0145 | Kompatibilitní okno Organization manifestu má konec: `company.gen3.json` je od tohoto rozhodnutí deprecated a cílový stav každé Organizace je pouze `lazurio.organization.json`, bez legacy projekce. Potvrzuje 0026/0031/0042 (`lazurio.organization.json` je jediná authoring autorita, `company.gen3.json` je během okna jen deterministická legacy compatibility projection čtená jedním Core resolverem) a doplňuje mandát dokončit migraci ve všech Organizacích. Přechod se řídí per-root stavy z `manual/lazurio-manifest-family.md`: `legacy` (jen `company.gen3.json`) → `transition` (oba soubory s paritou; canonical je `lazurio.organization.json`, legacy je generovaná projekce, nikdy druhá autorita) → `current` (jen `lazurio.organization.json`). Odstranění `company.gen3.json` v dané Organizaci je dovoleno až po finalizační bráně (`lazurio migrate organization-manifest --finalize`), tj. až všichni mutation-capable čtenáři a podporované Machines projdou reader/update gate; do té doby root v `transition` legacy projekci regeneruje, nemaže. Schéma a migrátor vlastní Lazurio Core podle téhož dokumentu; LazurioPlatform a Machines konzumují tentýž kontrakt (vendorovaný s provenance), nevzniká druhé schéma ani druhý zdroj pravdy. | | 0146 | **Jména a vstup hostovaných Mašin (dílen).** Tři vrstvy jmen pod Organizací: (1) dílna = hostovaná workspace VM: každá aplikace na kořeni vlastního hostname `...lazurio.io`, dostupné výhradně z tailnetu; (2) produkční workspace aplikace pro lidi z Organizace: `..lazurio.io` přes veřejný wildcard záznam `*..lazurio.io` v Cloudflare, bez tailnetu, s přihlášením přes Lazurio Auth a klientem registrovaným na Conglomerate Hostu; (3) productionspace repozitáře (monorepo apod.) jsou mimo tento mechanismus. Žádná aplikace se neohýbá pro cestu za lomítkem; bare hostname VM `..lazurio.io` je rozcestník (`/`, `/launchpad[/…]` → `https://launchpad.…/…`, `/[/cesta?query]` → `https://.…/cesta?query` 302, `/oauth2/*` zůstává), takže lidem se dál sdílí odkaz s lomítkem. **DNS:** zónu `.lazurio.io` obsluhuje na tailnetu Conglomerate Host (decision 0144, důvěryhodný uzel pro workspace funkcionalitu Organizací, které spravuje) přes Headscale split DNS jedním pravidlem per Organizace: `.` a `*..` → MagicDNS jméno VM; resolver Conglomerate Hostu odpovídá jen za labely VM z registru a všechna ostatní jména zóny (produkční aplikace `.`, `auth`, `headscale` …) předává veřejnému DNS, takže produkční jména se na tailnetu překládají stejně jako mimo něj. Veřejný wildcard nutně překládá i `.` a `..` mimo tailnet; tam končí na produkční bráně Organizace, která je fail-closed: obsluhuje jen labely produkčních aplikací z registru, jakýkoli jiný hostname (včetně labelů VM a jejich subdomén) odmítne (421) a nikdy neproxuje do tailnetu ani na VM. Dílna je tedy dosažitelná jen z tailnetu, i když její jméno veřejně existuje. Žádný záznam per VM ani per aplikace; vznik, migrace ani přeinstalace VM DNS nemění. Conglomerate Host je resolver a registr labelů, ne katalog aplikací, autorizace ani autorita klíčů aplikací. **Registr labelů:** VM a produkční aplikace sdílejí namespace `